From 36641f07b9807d90270ccd743d16b903cb558078 Mon Sep 17 00:00:00 2001 From: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Date: Thu, 22 Apr 2021 07:52:48 +1000 Subject: [PATCH] Add unauthGuard and lockGuard to prevent unintended navigation (#351) * Lift web repo unauthGuardService up to jslib * Add lockGuard (requires vault to be locked) * Fix linting --- src/angular/services/lock-guard.service.ts | 29 ++++++++++++++++++++ src/angular/services/unauth-guard.service.ts | 29 ++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/angular/services/lock-guard.service.ts create mode 100644 src/angular/services/unauth-guard.service.ts diff --git a/src/angular/services/lock-guard.service.ts b/src/angular/services/lock-guard.service.ts new file mode 100644 index 00000000000..9e318ab86eb --- /dev/null +++ b/src/angular/services/lock-guard.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@angular/core'; +import { + CanActivate, + Router, +} from '@angular/router'; + +import { UserService } from '../../abstractions/user.service'; +import { VaultTimeoutService } from '../../abstractions/vaultTimeout.service'; + +@Injectable() +export class LockGuardService implements CanActivate { + constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, + private router: Router) { } + + async canActivate() { + const locked = await this.vaultTimeoutService.isLocked(); + if (!locked) { + const isAuthed = await this.userService.isAuthenticated(); + if (!isAuthed) { + this.router.navigate(['login']); + } else { + this.router.navigate(['vault']); + } + return false; + } + + return true; + } +} diff --git a/src/angular/services/unauth-guard.service.ts b/src/angular/services/unauth-guard.service.ts new file mode 100644 index 00000000000..236837e3504 --- /dev/null +++ b/src/angular/services/unauth-guard.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@angular/core'; +import { + CanActivate, + Router, +} from '@angular/router'; + +import { UserService } from '../../abstractions/user.service'; +import { VaultTimeoutService } from '../../abstractions/vaultTimeout.service'; + +@Injectable() +export class UnauthGuardService implements CanActivate { + constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, + private router: Router) { } + + async canActivate() { + const isAuthed = await this.userService.isAuthenticated(); + if (isAuthed) { + const locked = await this.vaultTimeoutService.isLocked(); + if (locked) { + this.router.navigate(['lock']); + } else { + this.router.navigate(['vault']); + } + return false; + } + + return true; + } +}