1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-10 05:13:29 +00:00

Fix loss of cipher data when using pass generator

This commit is contained in:
Thomas Rittson
2021-07-06 19:23:49 +10:00
parent af1540267f
commit 9d720d6058
3 changed files with 61 additions and 3 deletions

View File

@@ -0,0 +1,53 @@
import {
Injectable,
OnDestroy
} from '@angular/core';
import {
CanActivate,
NavigationEnd,
NavigationStart,
Router,
} from '@angular/router';
import { Subscription } from 'rxjs';
import {
filter,
pairwise,
} from 'rxjs/operators';
@Injectable()
export class DebounceNavigationService implements CanActivate, OnDestroy {
navigationStartSub: Subscription;
navigationSuccessSub: Subscription;
private lastNavigation: NavigationStart;
private thisNavigation: NavigationStart;
private lastNavigationSuccessId: number;
constructor(private router: Router) {
this.navigationStartSub = this.router.events
.pipe(filter(event => event instanceof NavigationStart), pairwise())
.subscribe((events: [NavigationStart, NavigationStart]) => [this.lastNavigation, this.thisNavigation] = events);
this.navigationSuccessSub = this.router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe((event: NavigationEnd) => this.lastNavigationSuccessId = event.id);
}
async canActivate() {
return !(this.thisNavigation?.navigationTrigger === 'hashchange' &&
this.lastNavigation.navigationTrigger === 'popstate' &&
this.lastNavigationSuccessId === this.lastNavigation.id &&
this.lastNavigation.url === this.thisNavigation?.url);
}
ngOnDestroy() {
if (this.navigationStartSub != null) {
this.navigationStartSub.unsubscribe();
}
if (this.navigationSuccessSub != null) {
this.navigationSuccessSub.unsubscribe();
}
}
}