From 3bdb52c613b02c804301638d0291102d02ca9a29 Mon Sep 17 00:00:00 2001 From: William Martin Date: Fri, 1 Sep 2023 10:55:58 -0400 Subject: [PATCH] share fingerprint dialog between desktop and browser --- .../settings/fingerprint-dialog.component.ts | 33 ------------------- .../src/popup/settings/settings.component.ts | 8 ++--- apps/desktop/src/app/app.component.ts | 15 ++------- .../fingerprint-dialog.component.html | 13 ++++---- .../fingerprint-dialog.component.ts | 22 +++++++++++++ libs/auth/src/index.ts | 1 + 6 files changed, 37 insertions(+), 55 deletions(-) delete mode 100644 apps/browser/src/popup/settings/fingerprint-dialog.component.ts rename {apps/browser/src/popup/settings => libs/auth/src/components}/fingerprint-dialog.component.html (64%) create mode 100644 libs/auth/src/components/fingerprint-dialog.component.ts diff --git a/apps/browser/src/popup/settings/fingerprint-dialog.component.ts b/apps/browser/src/popup/settings/fingerprint-dialog.component.ts deleted file mode 100644 index 81562190830..00000000000 --- a/apps/browser/src/popup/settings/fingerprint-dialog.component.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { DIALOG_DATA } from "@angular/cdk/dialog"; -import { Component, Inject } from "@angular/core"; - -import { JslibModule } from "@bitwarden/angular/jslib.module"; -import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { - AsyncActionsModule, - ButtonModule, - DialogModule, - DialogService, -} from "@bitwarden/components"; - -export type FingerprintDialogData = { - fingerprint: string; -}; - -@Component({ - templateUrl: "fingerprint-dialog.component.html", - standalone: true, - imports: [JslibModule, ButtonModule, DialogModule, AsyncActionsModule], -}) -export class FingerprintDialogComponent { - constructor( - @Inject(DIALOG_DATA) protected data: FingerprintDialogData, - private cryptoService: CryptoService, - private stateService: StateService - ) {} - - static open(dialogService: DialogService, data: FingerprintDialogData) { - return dialogService.open(FingerprintDialogComponent, { data }); - } -} diff --git a/apps/browser/src/popup/settings/settings.component.ts b/apps/browser/src/popup/settings/settings.component.ts index 965a74c3f7b..e26a7d0409a 100644 --- a/apps/browser/src/popup/settings/settings.component.ts +++ b/apps/browser/src/popup/settings/settings.component.ts @@ -17,6 +17,7 @@ import { } from "rxjs"; import { ModalService } from "@bitwarden/angular/services/modal.service"; +import { FingerprintDialogComponent } from "@bitwarden/auth"; import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; @@ -39,7 +40,6 @@ import { PopupUtilsService } from "../services/popup-utils.service"; import { AboutComponent } from "./about.component"; import { AwaitDesktopDialogComponent } from "./await-desktop-dialog.component"; -import { FingerprintDialogComponent } from "./fingerprint-dialog.component"; const RateUrls = { [DeviceType.ChromeExtension]: @@ -485,9 +485,9 @@ export class SettingsComponent implements OnInit { } async fingerprint() { - const fingerprint = await this.cryptoService - .getFingerprint(await this.stateService.getUserId()) - .then((rawFingerprint) => rawFingerprint.join("-")); + const fingerprint = await this.cryptoService.getFingerprint( + await this.stateService.getUserId() + ); const dialogRef = FingerprintDialogComponent.open(this.dialogService, { fingerprint, diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index b5321a2bc83..2d24ac6e97e 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -16,6 +16,7 @@ import { firstValueFrom, Subject, takeUntil } from "rxjs"; import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref"; import { ModalService } from "@bitwarden/angular/services/modal.service"; +import { FingerprintDialogComponent } from "@bitwarden/auth"; import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { NotificationsService } from "@bitwarden/common/abstractions/notifications.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; @@ -244,18 +245,8 @@ export class AppComponent implements OnInit, OnDestroy { const fingerprint = await this.cryptoService.getFingerprint( await this.stateService.getUserId() ); - const result = await this.dialogService.openSimpleDialog({ - title: { key: "fingerprintPhrase" }, - content: - this.i18nService.t("yourAccountsFingerprint") + ":\n" + fingerprint.join("-"), - acceptButtonText: { key: "learnMore" }, - cancelButtonText: { key: "close" }, - type: "info", - }); - - if (result) { - this.platformUtilsService.launchUri("https://bitwarden.com/help/fingerprint-phrase/"); - } + const dialogRef = FingerprintDialogComponent.open(this.dialogService, { fingerprint }); + await firstValueFrom(dialogRef.closed); break; } case "deleteAccount": diff --git a/apps/browser/src/popup/settings/fingerprint-dialog.component.html b/libs/auth/src/components/fingerprint-dialog.component.html similarity index 64% rename from apps/browser/src/popup/settings/fingerprint-dialog.component.html rename to libs/auth/src/components/fingerprint-dialog.component.html index c6b806ee032..2bb95ecf050 100644 --- a/apps/browser/src/popup/settings/fingerprint-dialog.component.html +++ b/libs/auth/src/components/fingerprint-dialog.component.html @@ -1,22 +1,23 @@ - {{ "yourAccountsFingerprint" | i18n }}: + + {{ "yourAccountsFingerprint" | i18n }}: - {{ data.fingerprint }} + {{ data.fingerprint.join("-") }} - {{ "learnMore" | i18n }} + + diff --git a/libs/auth/src/components/fingerprint-dialog.component.ts b/libs/auth/src/components/fingerprint-dialog.component.ts new file mode 100644 index 00000000000..2a7b3e10997 --- /dev/null +++ b/libs/auth/src/components/fingerprint-dialog.component.ts @@ -0,0 +1,22 @@ +import { DIALOG_DATA } from "@angular/cdk/dialog"; +import { Component, Inject } from "@angular/core"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { ButtonModule, DialogModule, DialogService } from "@bitwarden/components"; + +export type FingerprintDialogData = { + fingerprint: string[]; +}; + +@Component({ + templateUrl: "fingerprint-dialog.component.html", + standalone: true, + imports: [JslibModule, ButtonModule, DialogModule], +}) +export class FingerprintDialogComponent { + constructor(@Inject(DIALOG_DATA) protected data: FingerprintDialogData) {} + + static open(dialogService: DialogService, data: FingerprintDialogData) { + return dialogService.open(FingerprintDialogComponent, { data }); + } +} diff --git a/libs/auth/src/index.ts b/libs/auth/src/index.ts index e69de29bb2d..0b4f07fc29d 100644 --- a/libs/auth/src/index.ts +++ b/libs/auth/src/index.ts @@ -0,0 +1 @@ +export * from "./components/fingerprint-dialog.component";