Fix key.meta.vault for root dir keys && read vault.meta without vault key (#4482)

* fix vault for root && read vault meta without key

* support for old vaults (wthout meta field)
This commit is contained in:
Svyatoslav Nikolsky
2017-02-09 18:47:22 +03:00
committed by Gav Wood
parent fea76c07f0
commit 1534bbb7cb
6 changed files with 118 additions and 31 deletions

View File

@@ -234,6 +234,10 @@ impl<T> VaultKeyDirectoryProvider for DiskDirectory<T> where T: KeyFileManager {
})
.collect())
}
fn vault_meta(&self, name: &str) -> Result<String, Error> {
VaultDiskDirectory::meta_at(&self.path, name)
}
}
impl KeyFileManager for DiskKeyFileManager {
@@ -242,7 +246,12 @@ impl KeyFileManager for DiskKeyFileManager {
Ok(SafeAccount::from_file(key_file, filename))
}
fn write<T>(&self, account: SafeAccount, writer: &mut T) -> Result<(), Error> where T: io::Write {
fn write<T>(&self, mut account: SafeAccount, writer: &mut T) -> Result<(), Error> where T: io::Write {
// when account is moved back to root directory from vault
// => remove vault field from meta
account.meta = json::remove_vault_name_from_json_meta(&account.meta)
.map_err(|err| Error::Custom(format!("{:?}", err)))?;
let key_file: json::KeyFile = account.into();
key_file.write(writer).map_err(|e| Error::Custom(format!("{:?}", e)))
}