forked from mystiq/hydrogen-web
expose whether we already have a 4s key,to show the 4s setup in settings
it's a tri-state of null/false/true with null meaning we need to go online first to know as only then we try to setup session backup
This commit is contained in:
parent
df72e829bf
commit
df8eed14aa
3 changed files with 20 additions and 1 deletions
|
@ -23,6 +23,9 @@ export class SessionBackupViewModel extends ViewModel {
|
|||
this._showKeySetup = true;
|
||||
this._error = null;
|
||||
this._isBusy = false;
|
||||
this.track(this._session.hasSecretStorageKey.subscribe(() => {
|
||||
this.emitChange("status");
|
||||
}));
|
||||
}
|
||||
|
||||
get isBusy() {
|
||||
|
@ -37,7 +40,11 @@ export class SessionBackupViewModel extends ViewModel {
|
|||
if (this._session.sessionBackup) {
|
||||
return "enabled";
|
||||
} else {
|
||||
return this._showKeySetup ? "setupKey" : "setupPhrase";
|
||||
if (this._session.hasSecretStorageKey.get() === false) {
|
||||
return this._showKeySetup ? "setupKey" : "setupPhrase";
|
||||
} else {
|
||||
return "pending";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -63,6 +63,7 @@ export class Session {
|
|||
this._olmWorker = olmWorker;
|
||||
this._cryptoDriver = cryptoDriver;
|
||||
this._sessionBackup = null;
|
||||
this._hasSecretStorageKey = new ObservableValue(null);
|
||||
|
||||
if (olm) {
|
||||
this._olmUtil = new olm.Utility();
|
||||
|
@ -82,6 +83,10 @@ export class Session {
|
|||
return this._e2eeAccount?.identityKeys.ed25519;
|
||||
}
|
||||
|
||||
get hasSecretStorageKey() {
|
||||
return this._hasSecretStorageKey;
|
||||
}
|
||||
|
||||
get deviceId() {
|
||||
return this._sessionInfo.deviceId;
|
||||
}
|
||||
|
@ -175,6 +180,9 @@ export class Session {
|
|||
if (!this._olm) {
|
||||
throw new Error("olm required");
|
||||
}
|
||||
if (this._sessionBackup) {
|
||||
return false;
|
||||
}
|
||||
const key = await ssssKeyFromCredential(type, credential, this._storage, this._cryptoDriver, this._olm);
|
||||
// and create session backup, which needs to read from accountData
|
||||
const readTxn = this._storage.readTxn([
|
||||
|
@ -193,6 +201,7 @@ export class Session {
|
|||
throw err;
|
||||
}
|
||||
await writeTxn.complete();
|
||||
this._hasSecretStorageKey.set(true);
|
||||
}
|
||||
|
||||
async _createSessionBackup(ssssKey, txn) {
|
||||
|
@ -297,6 +306,7 @@ export class Session {
|
|||
// txn will end here as this does a network request
|
||||
await this._createSessionBackup(ssssKey, txn);
|
||||
}
|
||||
this._hasSecretStorageKey.set(!!ssssKey);
|
||||
}
|
||||
// restore unfinished operations, like sending out room keys
|
||||
const opsTxn = this._storage.readWriteTxn([
|
||||
|
|
|
@ -15,6 +15,7 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import {TemplateView} from "../../general/TemplateView.js";
|
||||
import {StaticView} from "../../general/StaticView.js";
|
||||
|
||||
export class SessionBackupSettingsView extends TemplateView {
|
||||
render(t, vm) {
|
||||
|
@ -23,6 +24,7 @@ export class SessionBackupSettingsView extends TemplateView {
|
|||
case "enabled": return new TemplateView(vm, renderEnabled)
|
||||
case "setupKey": return new TemplateView(vm, renderEnableFromKey)
|
||||
case "setupPhrase": return new TemplateView(vm, renderEnableFromPhrase)
|
||||
case "pending": return new StaticView(vm, t => t.p(vm.i18n`Waiting to go online…`))
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue