From 1e998094df1af5a6dc7b157e3ff55cc8ca896a4d Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Mon, 7 Jun 2021 08:59:02 +1000 Subject: [PATCH 1/7] Use lockGuardService to prevent back navigation --- src/popup/app-routing.module.ts | 2 ++ src/popup/services/services.module.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/popup/app-routing.module.ts b/src/popup/app-routing.module.ts index 96fcd02f087..821cf1fed98 100644 --- a/src/popup/app-routing.module.ts +++ b/src/popup/app-routing.module.ts @@ -7,6 +7,7 @@ import { } from '@angular/router'; import { AuthGuardService } from 'jslib/angular/services/auth-guard.service'; +import { LockGuardService } from 'jslib/angular/services/lock-guard.service'; import { LaunchGuardService } from './services/launch-guard.service'; @@ -76,6 +77,7 @@ const routes: Routes = [ { path: 'lock', component: LockComponent, + canActivate: [LockGuardService], data: { state: 'lock' }, }, { diff --git a/src/popup/services/services.module.ts b/src/popup/services/services.module.ts index 45b359112a7..a3b76e8bc36 100644 --- a/src/popup/services/services.module.ts +++ b/src/popup/services/services.module.ts @@ -10,6 +10,7 @@ import { LaunchGuardService } from './launch-guard.service'; import { AuthGuardService } from 'jslib/angular/services/auth-guard.service'; import { BroadcasterService } from 'jslib/angular/services/broadcaster.service'; +import { LockGuardService } from 'jslib/angular/services/lock-guard.service'; import { ValidationService } from 'jslib/angular/services/validation.service'; import { BrowserApi } from '../../browser/browserApi'; @@ -115,6 +116,7 @@ export function initFactory(platformUtilsService: PlatformUtilsService, i18nServ ValidationService, AuthGuardService, LaunchGuardService, + LockGuardService, PopupUtilsService, BroadcasterService, { provide: MessagingService, useValue: messagingService }, From 1a143ef7c7b71c44ffc91a8109822f8131edfeac Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Mon, 7 Jun 2021 09:50:03 +1000 Subject: [PATCH 2/7] Use route guards from jslib to reduce duplication --- src/popup/app-routing.module.ts | 21 ++++++++++--------- src/popup/services/lock-guard.service.ts | 19 +++++++++++++++++ ...ervice.ts => not-private-guard.service.ts} | 17 ++------------- src/popup/services/unauth-guard.service.ts | 19 +++++++++++++++++ 4 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 src/popup/services/lock-guard.service.ts rename src/popup/services/{launch-guard.service.ts => not-private-guard.service.ts} (60%) create mode 100644 src/popup/services/unauth-guard.service.ts diff --git a/src/popup/app-routing.module.ts b/src/popup/app-routing.module.ts index 821cf1fed98..a46045443d2 100644 --- a/src/popup/app-routing.module.ts +++ b/src/popup/app-routing.module.ts @@ -7,9 +7,10 @@ import { } from '@angular/router'; import { AuthGuardService } from 'jslib/angular/services/auth-guard.service'; -import { LockGuardService } from 'jslib/angular/services/lock-guard.service'; -import { LaunchGuardService } from './services/launch-guard.service'; +import { LockGuardService } from './services/lock-guard.service'; +import { NotPrivateGuardService } from './services/not-private-guard.service'; +import { UnauthGuardService } from './services/unauth-guard.service'; import { EnvironmentComponent } from './accounts/environment.component'; import { HintComponent } from './accounts/hint.component'; @@ -65,13 +66,13 @@ const routes: Routes = [ { path: 'home', component: HomeComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: 'home' }, }, { path: 'login', component: LoginComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: 'login' }, }, { @@ -83,19 +84,19 @@ const routes: Routes = [ { path: '2fa', component: TwoFactorComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: '2fa' }, }, { path: '2fa-options', component: TwoFactorOptionsComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: '2fa-options' }, }, { path: 'sso', component: SsoComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: 'sso' }, }, { @@ -106,19 +107,19 @@ const routes: Routes = [ { path: 'register', component: RegisterComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: 'register' }, }, { path: 'hint', component: HintComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: 'hint' }, }, { path: 'environment', component: EnvironmentComponent, - canActivate: [LaunchGuardService], + canActivate: [NotPrivateGuardService, UnauthGuardService], data: { state: 'environment' }, }, { diff --git a/src/popup/services/lock-guard.service.ts b/src/popup/services/lock-guard.service.ts new file mode 100644 index 00000000000..a211354c42a --- /dev/null +++ b/src/popup/services/lock-guard.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + CanActivate, + Router, +} from '@angular/router'; + +import { UserService } from 'jslib-common/abstractions/user.service'; +import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; + +@Injectable() +export class LockGuardService extends BaseLockGuardService { + constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, + private router: Router) { + super(vaultTimeoutService, userService, router); + } + + protected landingPage = '/tabs/current'; +} diff --git a/src/popup/services/launch-guard.service.ts b/src/popup/services/not-private-guard.service.ts similarity index 60% rename from src/popup/services/launch-guard.service.ts rename to src/popup/services/not-private-guard.service.ts index b2ce3c504a0..180601ef39e 100644 --- a/src/popup/services/launch-guard.service.ts +++ b/src/popup/services/not-private-guard.service.ts @@ -10,7 +10,7 @@ import { UserService } from 'jslib/abstractions/user.service'; import { VaultTimeoutService } from 'jslib/abstractions/vaultTimeout.service'; @Injectable() -export class LaunchGuardService implements CanActivate { +export class NotPrivateGuardService implements CanActivate { constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, private router: Router) { } @@ -19,19 +19,6 @@ export class LaunchGuardService implements CanActivate { this.router.navigate(['private-mode']); return false; } - - const isAuthed = await this.userService.isAuthenticated(); - if (!isAuthed) { - return true; - } - - const locked = await this.vaultTimeoutService.isLocked(); - if (locked) { - this.router.navigate(['lock']); - } else { - this.router.navigate(['tabs/current']); - } - - return false; + return true; } } diff --git a/src/popup/services/unauth-guard.service.ts b/src/popup/services/unauth-guard.service.ts new file mode 100644 index 00000000000..4e2dcfbeaef --- /dev/null +++ b/src/popup/services/unauth-guard.service.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; +import { + Router, +} from '@angular/router'; + +import { UserService } from 'jslib-common/abstractions/user.service'; +import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; + +import { UnauthGuardService as BaseUnauthGuardService } from 'jslib/angular/services/unauth-guard.service'; + +@Injectable() +export class UnauthGuardService extends BaseUnauthGuardService { + constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, + private router: Router) { + super(vaultTimeoutService, userService, router); + } + + protected landingPage: '/tabs/current'; +} From 6230302106426886d20c94e62521970ec75a3dc9 Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Tue, 8 Jun 2021 10:04:31 +1000 Subject: [PATCH 3/7] Finish refactoring route guards to use jslib --- src/popup/app-routing.module.ts | 19 +++++++-------- src/popup/services/launch-guard.service.ts | 22 +++++++++++++++++ src/popup/services/lock-guard.service.ts | 13 ++++------ .../services/not-private-guard.service.ts | 24 ------------------- src/popup/services/services.module.ts | 6 +++-- src/popup/services/unauth-guard.service.ts | 8 +++---- 6 files changed, 44 insertions(+), 48 deletions(-) create mode 100644 src/popup/services/launch-guard.service.ts delete mode 100644 src/popup/services/not-private-guard.service.ts diff --git a/src/popup/app-routing.module.ts b/src/popup/app-routing.module.ts index 456743c9063..100305ede45 100644 --- a/src/popup/app-routing.module.ts +++ b/src/popup/app-routing.module.ts @@ -9,8 +9,7 @@ import { import { AuthGuardService } from 'jslib-angular/services/auth-guard.service'; import { LockGuardService } from './services/lock-guard.service'; -import { NotPrivateGuardService } from './services/not-private-guard.service'; -import { UnauthGuardService } from './services/unauth-guard.service'; +import { LaunchGuardService } from './services/launch-guard.service'; import { EnvironmentComponent } from './accounts/environment.component'; import { HintComponent } from './accounts/hint.component'; @@ -66,13 +65,13 @@ const routes: Routes = [ { path: 'home', component: HomeComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: 'home' }, }, { path: 'login', component: LoginComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: 'login' }, }, { @@ -84,19 +83,19 @@ const routes: Routes = [ { path: '2fa', component: TwoFactorComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: '2fa' }, }, { path: '2fa-options', component: TwoFactorOptionsComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: '2fa-options' }, }, { path: 'sso', component: SsoComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: 'sso' }, }, { @@ -107,19 +106,19 @@ const routes: Routes = [ { path: 'register', component: RegisterComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: 'register' }, }, { path: 'hint', component: HintComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: 'hint' }, }, { path: 'environment', component: EnvironmentComponent, - canActivate: [NotPrivateGuardService, UnauthGuardService], + canActivate: [LaunchGuardService], data: { state: 'environment' }, }, { diff --git a/src/popup/services/launch-guard.service.ts b/src/popup/services/launch-guard.service.ts new file mode 100644 index 00000000000..fa7f24fcf7b --- /dev/null +++ b/src/popup/services/launch-guard.service.ts @@ -0,0 +1,22 @@ +import { BrowserApi } from '../../browser/browserApi'; + +import { Injectable } from '@angular/core'; +import { + CanActivate, + Router, +} from '@angular/router'; + +import { UnauthGuardService } from './unauth-guard.service'; + +@Injectable() +export class LaunchGuardService implements CanActivate { + constructor(private router: Router, private unauthGuardService: UnauthGuardService) { } + + async canActivate() { + if (BrowserApi.getBackgroundPage() == null) { + this.router.navigate(['private-mode']); + return false; + } + return await this.unauthGuardService.canActivate(); + } +} diff --git a/src/popup/services/lock-guard.service.ts b/src/popup/services/lock-guard.service.ts index a211354c42a..ff75580732e 100644 --- a/src/popup/services/lock-guard.service.ts +++ b/src/popup/services/lock-guard.service.ts @@ -1,19 +1,16 @@ import { Injectable } from '@angular/core'; -import { - ActivatedRouteSnapshot, - CanActivate, - Router, -} from '@angular/router'; +import { Router } from '@angular/router'; import { UserService } from 'jslib-common/abstractions/user.service'; import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; +import { LockGuardService as BaseLockGuardService } from 'jslib-angular/services/lock-guard.service'; @Injectable() export class LockGuardService extends BaseLockGuardService { - constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, - private router: Router) { + constructor(vaultTimeoutService: VaultTimeoutService, userService: UserService, + router: Router) { super(vaultTimeoutService, userService, router); } - protected landingPage = '/tabs/current'; + protected homepage = '/tabs/current'; } diff --git a/src/popup/services/not-private-guard.service.ts b/src/popup/services/not-private-guard.service.ts deleted file mode 100644 index 136a3edaef7..00000000000 --- a/src/popup/services/not-private-guard.service.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { BrowserApi } from '../../browser/browserApi'; - -import { Injectable } from '@angular/core'; -import { - CanActivate, - Router, -} from '@angular/router'; - -import { UserService } from 'jslib-common/abstractions/user.service'; -import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; - -@Injectable() -export class NotPrivateGuardService implements CanActivate { - constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, - private router: Router) { } - - async canActivate() { - if (BrowserApi.getBackgroundPage() == null) { - this.router.navigate(['private-mode']); - return false; - } - return true; - } -} diff --git a/src/popup/services/services.module.ts b/src/popup/services/services.module.ts index f08f8c20537..41e2b17adab 100644 --- a/src/popup/services/services.module.ts +++ b/src/popup/services/services.module.ts @@ -6,11 +6,12 @@ import { import { ToasterModule } from 'angular2-toaster'; +import { LockGuardService } from './lock-guard.service'; import { LaunchGuardService } from './launch-guard.service'; +import { UnauthGuardService } from './unauth-guard.service'; import { AuthGuardService } from 'jslib-angular/services/auth-guard.service'; import { BroadcasterService } from 'jslib-angular/services/broadcaster.service'; -import { LockGuardService } from 'jslib-angular/services/lock-guard.service'; import { ValidationService } from 'jslib-angular/services/validation.service'; import { BrowserApi } from '../../browser/browserApi'; @@ -115,8 +116,9 @@ export function initFactory(platformUtilsService: PlatformUtilsService, i18nServ providers: [ ValidationService, AuthGuardService, - LaunchGuardService, LockGuardService, + LaunchGuardService, + UnauthGuardService, PopupUtilsService, BroadcasterService, { provide: MessagingService, useValue: messagingService }, diff --git a/src/popup/services/unauth-guard.service.ts b/src/popup/services/unauth-guard.service.ts index 4e2dcfbeaef..d765a42ade1 100644 --- a/src/popup/services/unauth-guard.service.ts +++ b/src/popup/services/unauth-guard.service.ts @@ -6,14 +6,14 @@ import { import { UserService } from 'jslib-common/abstractions/user.service'; import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; -import { UnauthGuardService as BaseUnauthGuardService } from 'jslib/angular/services/unauth-guard.service'; +import { UnauthGuardService as BaseUnauthGuardService } from 'jslib-angular/services/unauth-guard.service'; @Injectable() export class UnauthGuardService extends BaseUnauthGuardService { - constructor(private vaultTimeoutService: VaultTimeoutService, private userService: UserService, - private router: Router) { + constructor(vaultTimeoutService: VaultTimeoutService, userService: UserService, + router: Router) { super(vaultTimeoutService, userService, router); } - protected landingPage: '/tabs/current'; + protected homepage = '/tabs/current'; } From 5b06daace98b23bf102f7dd9dde334e1e3212a12 Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Tue, 8 Jun 2021 15:45:14 +1000 Subject: [PATCH 4/7] fix linting --- src/popup/app-routing.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/popup/app-routing.module.ts b/src/popup/app-routing.module.ts index 100305ede45..7a839032203 100644 --- a/src/popup/app-routing.module.ts +++ b/src/popup/app-routing.module.ts @@ -8,8 +8,8 @@ import { import { AuthGuardService } from 'jslib-angular/services/auth-guard.service'; -import { LockGuardService } from './services/lock-guard.service'; import { LaunchGuardService } from './services/launch-guard.service'; +import { LockGuardService } from './services/lock-guard.service'; import { EnvironmentComponent } from './accounts/environment.component'; import { HintComponent } from './accounts/hint.component'; From 44d6a99575b0fa006a630dbeb512870c693509c3 Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Tue, 8 Jun 2021 15:49:03 +1000 Subject: [PATCH 5/7] fix homepage routes --- src/popup/services/lock-guard.service.ts | 2 +- src/popup/services/unauth-guard.service.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/popup/services/lock-guard.service.ts b/src/popup/services/lock-guard.service.ts index ff75580732e..e3dd4bf9b78 100644 --- a/src/popup/services/lock-guard.service.ts +++ b/src/popup/services/lock-guard.service.ts @@ -12,5 +12,5 @@ export class LockGuardService extends BaseLockGuardService { super(vaultTimeoutService, userService, router); } - protected homepage = '/tabs/current'; + protected homepage = 'tabs/current'; } diff --git a/src/popup/services/unauth-guard.service.ts b/src/popup/services/unauth-guard.service.ts index d765a42ade1..0099380ee42 100644 --- a/src/popup/services/unauth-guard.service.ts +++ b/src/popup/services/unauth-guard.service.ts @@ -15,5 +15,5 @@ export class UnauthGuardService extends BaseUnauthGuardService { super(vaultTimeoutService, userService, router); } - protected homepage = '/tabs/current'; + protected homepage = 'tabs/current'; } From d7bd707d91854261c428e6b98bd310d0a080f91a Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Wed, 9 Jun 2021 07:38:36 +1000 Subject: [PATCH 6/7] bump jslib --- jslib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jslib b/jslib index 1016bbfb9eb..fdc6f7b1d23 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 1016bbfb9eb28c220de8d2ab86d1f2757328f254 +Subproject commit fdc6f7b1d234c72724db47cbea6c94bff7ec0106 From ebba6aed7ff7e8fb22d127237a06f82443c9ff74 Mon Sep 17 00:00:00 2001 From: Thomas Rittson Date: Thu, 10 Jun 2021 07:36:30 +1000 Subject: [PATCH 7/7] Remove unnecessary constructors --- src/popup/services/lock-guard.service.ts | 8 -------- src/popup/services/unauth-guard.service.ts | 11 ----------- 2 files changed, 19 deletions(-) diff --git a/src/popup/services/lock-guard.service.ts b/src/popup/services/lock-guard.service.ts index e3dd4bf9b78..03306d05482 100644 --- a/src/popup/services/lock-guard.service.ts +++ b/src/popup/services/lock-guard.service.ts @@ -1,16 +1,8 @@ import { Injectable } from '@angular/core'; -import { Router } from '@angular/router'; -import { UserService } from 'jslib-common/abstractions/user.service'; -import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; import { LockGuardService as BaseLockGuardService } from 'jslib-angular/services/lock-guard.service'; @Injectable() export class LockGuardService extends BaseLockGuardService { - constructor(vaultTimeoutService: VaultTimeoutService, userService: UserService, - router: Router) { - super(vaultTimeoutService, userService, router); - } - protected homepage = 'tabs/current'; } diff --git a/src/popup/services/unauth-guard.service.ts b/src/popup/services/unauth-guard.service.ts index 0099380ee42..e74857bb8cb 100644 --- a/src/popup/services/unauth-guard.service.ts +++ b/src/popup/services/unauth-guard.service.ts @@ -1,19 +1,8 @@ import { Injectable } from '@angular/core'; -import { - Router, -} from '@angular/router'; - -import { UserService } from 'jslib-common/abstractions/user.service'; -import { VaultTimeoutService } from 'jslib-common/abstractions/vaultTimeout.service'; import { UnauthGuardService as BaseUnauthGuardService } from 'jslib-angular/services/unauth-guard.service'; @Injectable() export class UnauthGuardService extends BaseUnauthGuardService { - constructor(vaultTimeoutService: VaultTimeoutService, userService: UserService, - router: Router) { - super(vaultTimeoutService, userService, router); - } - protected homepage = 'tabs/current'; }