Password reprompt fixes (#926)

* Hide card number when hidden

* Avoid double password prompts

* Bump jslib
This commit is contained in:
Oscar Hinton 2021-05-28 20:08:44 +02:00 committed by GitHub
parent c89da7f12b
commit c7345197f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 39 additions and 14 deletions

2
jslib

@ -1 +1 @@
Subproject commit dddcc2bc93c15df4d9b6a38e7f9a76d01fe8b384
Subproject commit 25a91313ad0441d1c02e043113f931f203fd57e6

View File

@ -77,6 +77,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges,
onWindowHidden() {
this.showPassword = false;
this.showCardNumber = false;
this.showCardCode = false;
if (this.cipher !== null && this.cipher.hasFields) {
this.cipher.fields.forEach(field => {

View File

@ -9,7 +9,7 @@
(onAddCipherOptions)="addCipherOptions()">
</app-vault-ciphers>
<app-vault-view id="details" class="details" *ngIf="cipherId && action === 'view'" [cipherId]="cipherId"
(onCloneCipher)="cloneCipher($event)" (onEditCipher)="editCipher($event)"
(onCloneCipher)="cloneCipherWithoutPasswordPrompt($event)" (onEditCipher)="editCipherWithoutPasswordPrompt($event)"
(onViewCipherPasswordHistory)="viewCipherPasswordHistory($event)" (onRestoredCipher)="restoredCipher($event)"
(onDeletedCipher)="deletedCipher($event)">
</app-vault-view>

View File

@ -229,9 +229,7 @@ export class VaultComponent implements OnInit, OnDestroy {
}
async viewCipher(cipher: CipherView) {
if (this.action === 'view' && this.cipherId === cipher.id) {
return;
} else if (this.dirtyInput() && await this.wantsToSaveChanges()) {
if (!await this.canNavigateAway('view', cipher)) {
return;
}
@ -328,11 +326,17 @@ export class VaultComponent implements OnInit, OnDestroy {
}
async editCipher(cipher: CipherView) {
if (this.action === 'edit' && this.cipherId === cipher.id) {
if (!await this.canNavigateAway('edit', cipher)) {
return;
} else if (this.dirtyInput() && await this.wantsToSaveChanges()) {
} else if (!await this.passwordReprompt(cipher)) {
return;
} else if (cipher.reprompt !== CipherRepromptType.None && !await this.passwordRepromptService.showPasswordPrompt()) {
}
await this.editCipherWithoutPasswordPrompt(cipher);
}
async editCipherWithoutPasswordPrompt(cipher: CipherView) {
if (!await this.canNavigateAway('edit', cipher)) {
return;
}
@ -342,11 +346,17 @@ export class VaultComponent implements OnInit, OnDestroy {
}
async cloneCipher(cipher: CipherView) {
if (this.action === 'clone' && this.cipherId === cipher.id) {
if (!await this.canNavigateAway('clone', cipher)) {
return;
} else if (this.dirtyInput() && await this.wantsToSaveChanges()) {
} else if (!await this.passwordReprompt(cipher)) {
return;
} else if (cipher.reprompt !== CipherRepromptType.None && !await this.passwordRepromptService.showPasswordPrompt()) {
}
await this.cloneCipherWithoutPasswordPrompt(cipher);
}
async cloneCipherWithoutPasswordPrompt(cipher: CipherView) {
if (!await this.canNavigateAway('edit', cipher)) {
return;
}
@ -356,9 +366,7 @@ export class VaultComponent implements OnInit, OnDestroy {
}
async addCipher(type: CipherType = null) {
if (this.action === 'add') {
return;
} else if (this.dirtyInput() && await this.wantsToSaveChanges()) {
if (!await this.canNavigateAway('add', null)) {
return;
}
@ -680,4 +688,19 @@ export class VaultComponent implements OnInit, OnDestroy {
this.addOrganizationId = null;
this.addCollectionIds = null;
}
private async canNavigateAway(action: string, cipher?: CipherView) {
// Don't navigate to same route
if (this.action === action && (cipher == null || this.cipherId === cipher.id)) {
return false;
} else if (this.dirtyInput() && await this.wantsToSaveChanges()) {
return false;
}
return true;
}
private async passwordReprompt(cipher: CipherView) {
return cipher.reprompt === CipherRepromptType.None || await this.passwordRepromptService.showPasswordPrompt();
}
}

View File

@ -81,6 +81,7 @@ export class ViewComponent extends BaseViewComponent implements OnChanges {
onWindowHidden() {
this.showPassword = false;
this.showCardNumber = false;
this.showCardCode = false;
if (this.cipher !== null && this.cipher.hasFields) {
this.cipher.fields.forEach(field => {