From 7d797f73fe0e2508081288e1fd985c76e1d0e2db Mon Sep 17 00:00:00 2001 From: Dane Powell Date: Fri, 17 Sep 2021 01:22:46 -0700 Subject: [PATCH] Automatic biometrics prompt (#2065) Co-authored-by: Michael Cho --- jslib | 2 +- src/_locales/en/messages.json | 3 +++ src/popup/accounts/lock.component.ts | 15 ++++++++++++++- src/popup/settings/settings.component.html | 4 ++++ src/popup/settings/settings.component.ts | 7 +++++++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/jslib b/jslib index da132217da..da6fde4b15 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit da132217da553365538bbb66a21c40d3966610c1 +Subproject commit da6fde4b151e7d154c7eb16d8f81926ad2f3ca22 diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 044301571f..79ca58563e 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -776,6 +776,9 @@ "disableAutoTotpCopyDesc": { "message": "If your login has an authenticator key attached to it, the TOTP verification code is automatically copied to your clipboard whenever you auto-fill the login." }, + "disableAutoBiometricsPrompt": { + "message": "Do not prompt for biometrics on launch" + }, "premiumRequired": { "message": "Premium Required" }, diff --git a/src/popup/accounts/lock.component.ts b/src/popup/accounts/lock.component.ts index 466fc77150..a193cff9bc 100644 --- a/src/popup/accounts/lock.component.ts +++ b/src/popup/accounts/lock.component.ts @@ -1,6 +1,8 @@ import { Component } from '@angular/core'; import { Router } from '@angular/router'; +import { ConstantsService } from 'jslib-common/services/constants.service'; + import { ApiService } from 'jslib-common/abstractions/api.service'; import { CryptoService } from 'jslib-common/abstractions/crypto.service'; import { EnvironmentService } from 'jslib-common/abstractions/environment.service'; @@ -20,6 +22,8 @@ import Swal from 'sweetalert2'; templateUrl: 'lock.component.html', }) export class LockComponent extends BaseLockComponent { + private isInitialLockScreen: boolean; + constructor(router: Router, i18nService: I18nService, platformUtilsService: PlatformUtilsService, messagingService: MessagingService, userService: UserService, cryptoService: CryptoService, @@ -29,12 +33,21 @@ export class LockComponent extends BaseLockComponent { super(router, i18nService, platformUtilsService, messagingService, userService, cryptoService, storageService, vaultTimeoutService, environmentService, stateService, apiService); this.successRoute = '/tabs/current'; + this.isInitialLockScreen = (window as any).previousPopupUrl == null; } async ngOnInit() { await super.ngOnInit(); - window.setTimeout(() => { + const disableAutoBiometricsPrompt = await this.storageService.get( + ConstantsService.disableAutoBiometricsPromptKey) ?? true; + + window.setTimeout(async () => { document.getElementById(this.pinLock ? 'pin' : 'masterPassword').focus(); + if (this.biometricLock && !disableAutoBiometricsPrompt && this.isInitialLockScreen) { + if (await this.vaultTimeoutService.isLocked()) { + await this.unlockBiometric(); + } + } }, 100); } diff --git a/src/popup/settings/settings.component.html b/src/popup/settings/settings.component.html index fbdfe5dc18..262b4f1a48 100644 --- a/src/popup/settings/settings.component.html +++ b/src/popup/settings/settings.component.html @@ -44,6 +44,10 @@ +
+ + +
{{'lockNow' | i18n}}
diff --git a/src/popup/settings/settings.component.ts b/src/popup/settings/settings.component.ts index 83d3841aef..89c3c415d5 100644 --- a/src/popup/settings/settings.component.ts +++ b/src/popup/settings/settings.component.ts @@ -56,6 +56,7 @@ export class SettingsComponent implements OnInit { pin: boolean = null; supportsBiometric: boolean; biometric: boolean = false; + disableAutoBiometricsPrompt = true; previousVaultTimeout: number = null; vaultTimeout: FormControl = new FormControl(null); @@ -115,6 +116,8 @@ export class SettingsComponent implements OnInit { this.supportsBiometric = await this.platformUtilsService.supportsBiometric(); this.biometric = await this.vaultTimeoutService.isBiometricLockSet(); + this.disableAutoBiometricsPrompt = await this.storageService.get( + ConstantsService.disableAutoBiometricsPromptKey) ?? true; } async saveVaultTimeout(newValue: number) { @@ -250,6 +253,10 @@ export class SettingsComponent implements OnInit { } } + async updateAutoBiometricsPrompt() { + await this.storageService.save(ConstantsService.disableAutoBiometricsPromptKey, this.disableAutoBiometricsPrompt); + } + async lock() { await this.vaultTimeoutService.lock(true); }