35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { inject } from "@angular/core";
|
|
import {
|
|
ActivatedRouteSnapshot,
|
|
CanActivateFn,
|
|
Router,
|
|
RouterStateSnapshot,
|
|
} from "@angular/router";
|
|
|
|
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
|
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
|
|
|
import { BrowserRouterService } from "../../platform/popup/services/browser-router.service";
|
|
|
|
/**
|
|
* This guard verifies the user's authetication status.
|
|
* If "Locked", it saves the intended route in memory and redirects to the lock screen. Otherwise, the intended route is allowed.
|
|
*/
|
|
export const fido2AuthGuard: CanActivateFn = async (
|
|
route: ActivatedRouteSnapshot,
|
|
state: RouterStateSnapshot,
|
|
) => {
|
|
const routerService = inject(BrowserRouterService);
|
|
const authService = inject(AuthService);
|
|
const router = inject(Router);
|
|
|
|
const authStatus = await authService.getAuthStatus();
|
|
|
|
if (authStatus === AuthenticationStatus.Locked) {
|
|
routerService.setPreviousUrl(state.url);
|
|
return router.createUrlTree(["/lock"], { queryParams: route.queryParams });
|
|
}
|
|
|
|
return true;
|
|
};
|