From c7a2b4dc2ef6b590eb7dc600332eca6456297be2 Mon Sep 17 00:00:00 2001 From: Bruno Windels <274386+bwindels@users.noreply.github.com> Date: Tue, 14 Feb 2023 16:26:02 +0100 Subject: [PATCH] expose self-signing in settings UI --- src/domain/session/settings/KeyBackupViewModel.js | 12 ++++++++++++ .../ui/session/settings/KeyBackupSettingsView.js | 13 +++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/domain/session/settings/KeyBackupViewModel.js b/src/domain/session/settings/KeyBackupViewModel.js index 56339a4e..22135e41 100644 --- a/src/domain/session/settings/KeyBackupViewModel.js +++ b/src/domain/session/settings/KeyBackupViewModel.js @@ -92,6 +92,18 @@ export class KeyBackupViewModel extends ViewModel { return this._session.crossSigning?.isMasterKeyTrusted ?? false; } + get canSignOwnDevice() { + return !!this._session.crossSigning; + } + + async signOwnDevice() { + if (this._session.crossSigning) { + await this.logger.run("KeyBackupViewModel.signOwnDevice", async log => { + await this._session.crossSigning.signOwnDevice(log); + }); + } + } + get backupWriteStatus() { const keyBackup = this._session.keyBackup.get(); if (!keyBackup) { diff --git a/src/platform/web/ui/session/settings/KeyBackupSettingsView.js b/src/platform/web/ui/session/settings/KeyBackupSettingsView.js index bd1eb4e8..a68a80b3 100644 --- a/src/platform/web/ui/session/settings/KeyBackupSettingsView.js +++ b/src/platform/web/ui/session/settings/KeyBackupSettingsView.js @@ -15,9 +15,10 @@ limitations under the License. */ import {TemplateView} from "../../general/TemplateView"; +import {disableTargetCallback} from "../../general/utils"; export class KeyBackupSettingsView extends TemplateView { - render(t) { + render(t, vm) { return t.div([ t.map(vm => vm.status, (status, t, vm) => { switch (status) { @@ -56,7 +57,15 @@ export class KeyBackupSettingsView extends TemplateView { }), t.if(vm => vm.isMasterKeyTrusted, t => { return t.p("Cross-signing master key found and trusted.") - }) + }), + t.if(vm => vm.canSignOwnDevice, t => { + return t.button({ + onClick: disableTargetCallback(async evt => { + await vm.signOwnDevice(); + }) + }, "Sign own device"); + }), + ]); } }