avoid multiple parallel passphrase prompts - fixes #4811

This commit is contained in:
Eugene Pankov 2021-10-31 16:18:49 +01:00
parent f820a2a631
commit 9d8e19622f
No known key found for this signature in database
GPG Key ID: 5896FCBBDD1CF4F4
2 changed files with 13 additions and 2 deletions

View File

@ -3,7 +3,7 @@ import { promisify } from 'util'
import { Injectable, NgZone } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { AsyncSubject, Subject, Observable } from 'rxjs'
import { wrapPromise } from '../utils'
import { wrapPromise, serializeFunction } from '../utils'
import { UnlockVaultModalComponent } from '../components/unlockVaultModal.component'
import { NotificationsService } from './notifications.service'
import { SelectorService } from './selector.service'
@ -114,7 +114,9 @@ export class VaultService {
private zone: NgZone,
private notifications: NotificationsService,
private ngbModal: NgbModal,
) { }
) {
this.getPassphrase = serializeFunction(this.getPassphrase.bind(this))
}
async setEnabled (enabled: boolean, passphrase?: string): Promise<void> {
if (enabled) {

View File

@ -64,3 +64,12 @@ export const TAB_COLORS = [
{ name: 'Red', value: '#d9534f' },
{ name: 'Yellow', value: '#ffd500' },
]
export function serializeFunction <T extends () => Promise<any>> (fn: T): T {
let queue = Promise.resolve()
return (...args) => {
const res = queue.then(() => fn(...args))
queue = res.catch(() => null)
return res
}
}