feat: Add option to auto-copy TOTP code when page auto fills credentials

This commit is contained in:
Tomer Shvueli 2021-02-20 14:48:54 -05:00
parent 8d2e436a05
commit 72d0a439d2
4 changed files with 36 additions and 1 deletions

View File

@ -885,6 +885,12 @@
"enableAutoFillOnPageLoadDesc": {
"message": "If a login form is detected, automatically perform an auto-fill when the web page loads."
},
"enableAutoTotpCopyOnAutoFill": {
"message": "Enable Copy to Clipboard of TOTP On Page Auto-fill"
},
"enableAutoTotpCopyOnAutoFillDesc": {
"message": "If login auto-fills on page load and TOTP exists for this login, copy to clipboard without prompt"
},
"experimentalFeature": {
"message": "This is currently an experimental feature. Use at your own risk."
},

View File

@ -24,6 +24,19 @@
<b>{{'warning' | i18n}}</b>: {{'experimentalFeature' | i18n}}
</div>
</div>
<div class="box">
<div class="box-content">
<div class="box-content-row box-content-row-checkbox" appBoxRow>
<label for="autofill">{{'enableAutoTotpCopyOnAutoFill' | i18n}}</label>
<input id="autofill" type="checkbox" (change)="updateAutoTotpCopyOnAutoFill()"
[(ngModel)]="enableAutoTotpCopyOnAutoFill" [disabled]="!enableAutoFillOnPageLoad">
</div>
</div>
<div class="box-footer">
{{'enableAutoTotpCopyOnAutoFillDesc' | i18n}}
<b>{{'warning' | i18n}}</b>: {{'experimentalFeature' | i18n}}
</div>
</div>
<div class="box">
<div class="box-content">
<div class="box-content-row" appBoxRow>

View File

@ -23,6 +23,7 @@ import { ConstantsService } from 'jslib/services/constants.service';
export class OptionsComponent implements OnInit {
disableFavicon = false;
enableAutoFillOnPageLoad = false;
enableAutoTotpCopyOnAutoFill = false;
disableAutoTotpCopy = false;
disableContextMenuItem = false;
disableAddLoginNotification = false;
@ -70,6 +71,8 @@ export class OptionsComponent implements OnInit {
this.enableAutoFillOnPageLoad = await this.storageService.get<boolean>(
ConstantsService.enableAutoFillOnPageLoadKey);
this.enableAutoTotpCopyOnAutoFill = await this.totpService.isAutoCopyOnAutoFillEnabled();
this.disableAddLoginNotification = await this.storageService.get<boolean>(
ConstantsService.disableAddLoginNotificationKey);
@ -120,9 +123,20 @@ export class OptionsComponent implements OnInit {
async updateAutoFillOnPageLoad() {
await this.storageService.save(ConstantsService.enableAutoFillOnPageLoadKey, this.enableAutoFillOnPageLoad);
if (!this.enableAutoFillOnPageLoad) {
// If we disable Auto Fill on Page Load, also disable Copying of TOTP
await this.storageService.save(ConstantsService.enableAutoTotpCopyOnAutoFill, false);
// TODO the below reloads the entire extension, I just want to reload the current view, or at least the enable auto totp copy checkbox
window.setTimeout(() => window.location.reload(), 200);
}
this.callAnalytics('Auto-fill Page Load', this.enableAutoFillOnPageLoad);
}
async updateAutoTotpCopyOnAutoFill() {
await this.storageService.save(ConstantsService.enableAutoTotpCopyOnAutoFill, this.enableAutoTotpCopyOnAutoFill);
this.callAnalytics('Auto Copy TOTP on Page Load', this.enableAutoTotpCopyOnAutoFill);
}
async updateDisableFavicon() {
await this.storageService.save(ConstantsService.disableFaviconKey, this.disableFavicon);
await this.stateService.save(ConstantsService.disableFaviconKey, this.disableFavicon);

View File

@ -254,10 +254,12 @@ export default class AutofillService implements AutofillServiceInterface {
}
}
const shouldCopyTotpOnAutoFill = await this.totpService.isAutoCopyOnAutoFillEnabled();
const totpCode = await this.doAutoFill({
cipher: cipher,
pageDetails: pageDetails,
skipTotp: !fromCommand,
skipTotp: !fromCommand && !shouldCopyTotpOnAutoFill,
skipLastUsed: !fromCommand,
skipUsernameOnlyFill: !fromCommand,
onlyEmptyFields: !fromCommand,