forked from mystiq/hydrogen-web
parent
e80acd4d57
commit
bf08c0d850
1 changed files with 47 additions and 35 deletions
|
@ -190,7 +190,8 @@ export class Session {
|
|||
* @param {string} credential either the passphrase or the recovery key, depending on the type
|
||||
* @return {Promise} resolves or rejects after having tried to enable secret storage
|
||||
*/
|
||||
async enableSecretStorage(type, credential) {
|
||||
enableSecretStorage(type, credential, log = undefined) {
|
||||
return this._platform.logger.wrapOrRun(log, "enable secret storage", async log => {
|
||||
if (!this._olm) {
|
||||
throw new Error("olm required");
|
||||
}
|
||||
|
@ -202,11 +203,13 @@ export class Session {
|
|||
const readTxn = await this._storage.readTxn([
|
||||
this._storage.storeNames.accountData,
|
||||
]);
|
||||
await this._createKeyBackup(key, readTxn);
|
||||
if (await this._createKeyBackup(key, readTxn, log)) {
|
||||
await this._writeSSSSKey(key);
|
||||
this._hasSecretStorageKey.set(true);
|
||||
return key;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async _writeSSSSKey(key) {
|
||||
// only after having read a secret, write the key
|
||||
|
@ -246,7 +249,9 @@ export class Session {
|
|||
this._hasSecretStorageKey.set(false);
|
||||
}
|
||||
|
||||
async _createKeyBackup(ssssKey, txn) {
|
||||
_createKeyBackup(ssssKey, txn, log) {
|
||||
return log.wrap("enable key backup", async log => {
|
||||
try {
|
||||
const secretStorage = new SecretStorage({key: ssssKey, platform: this._platform});
|
||||
this._keyBackup = await KeyBackup.fromSecretStorage(
|
||||
this._platform,
|
||||
|
@ -265,6 +270,12 @@ export class Session {
|
|||
}
|
||||
}
|
||||
this.needsKeyBackup.set(false);
|
||||
} catch (err) {
|
||||
log.catch(err);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
get keyBackup() {
|
||||
|
@ -455,11 +466,12 @@ export class Session {
|
|||
]);
|
||||
// try set up session backup if we stored the ssss key
|
||||
const ssssKey = await ssssReadKey(txn);
|
||||
let couldReadKeyBackup = false;
|
||||
if (ssssKey) {
|
||||
// txn will end here as this does a network request
|
||||
await this._createKeyBackup(ssssKey, txn);
|
||||
couldReadKeyBackup = await this._createKeyBackup(ssssKey, txn, log);
|
||||
}
|
||||
this._hasSecretStorageKey.set(!!ssssKey);
|
||||
this._hasSecretStorageKey.set(couldReadKeyBackup);
|
||||
}
|
||||
// restore unfinished operations, like sending out room keys
|
||||
const opsTxn = await this._storage.readWriteTxn([
|
||||
|
|
Loading…
Reference in a new issue