import { Injectable } from "@angular/core" ; import { ActivatedRouteSnapshot , CanActivate , Router , RouterStateSnapshot } from "@angular/router" ; import { KeyConnectorService } from "jslib-common/abstractions/keyConnector.service" ; import { MessagingService } from "jslib-common/abstractions/messaging.service" ; import { StateService } from "jslib-common/abstractions/state.service" ; import { VaultTimeoutService } from "jslib-common/abstractions/vaultTimeout.service" ; @ Injectable ( ) export class AuthGuardService implements CanActivate { constructor ( private vaultTimeoutService , private router , private messagingService , private keyConnectorService , private stateService ) { } async canActivate ( route , routerState ) { const isAuthed = await this . stateService . getIsAuthenticated ( ) ; if ( ! isAuthed ) { this . messagingService . send ( "authBlocked" ) ; return false ; } const locked = await this . vaultTimeoutService . isLocked ( ) ; if ( locked ) { if ( routerState != null ) { this . messagingService . send ( "lockedUrl" , { url : routerState . url } ) ; } this . router . navigate ( [ "lock" ] , { queryParams : { promptBiometric : true } } ) ; return false ; } if ( ! routerState . url . includes ( "remove-password" ) && ( await this . keyConnectorService . getConvertAccountRequired ( ) ) ) { this . router . navigate ( [ "/remove-password" ] ) ; return false ; } return true ; } }