mirror of
https://github.com/bitwarden/browser
synced 2026-02-14 07:23:45 +00:00
* Migrate auth guards * Fix remaining auth guard migration * Fix unauth guard usage * Add unit tests for auth guard and unauth guard * Remove unused angular DI code * Move auth related logic out fo sm guard * Add tests * Add more tests for unauth guard * Fix incorrect merge
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { inject } from "@angular/core";
|
|
import { CanActivateFn, Router, UrlTree } from "@angular/router";
|
|
import { Observable, map } from "rxjs";
|
|
|
|
import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
|
|
import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status";
|
|
|
|
type UnauthRoutes = {
|
|
homepage: () => string;
|
|
locked: string;
|
|
};
|
|
|
|
const defaultRoutes: UnauthRoutes = {
|
|
homepage: () => "/vault",
|
|
locked: "/lock",
|
|
};
|
|
|
|
function unauthGuard(routes: UnauthRoutes): Observable<boolean | UrlTree> {
|
|
const authService = inject(AuthService);
|
|
const router = inject(Router);
|
|
|
|
return authService.activeAccountStatus$.pipe(
|
|
map((status) => {
|
|
if (status == null || status === AuthenticationStatus.LoggedOut) {
|
|
return true;
|
|
} else if (status === AuthenticationStatus.Locked) {
|
|
return router.createUrlTree([routes.locked]);
|
|
} else {
|
|
return router.createUrlTree([routes.homepage()]);
|
|
}
|
|
}),
|
|
);
|
|
}
|
|
|
|
export function unauthGuardFn(overrides: Partial<UnauthRoutes> = {}): CanActivateFn {
|
|
return () => unauthGuard({ ...defaultRoutes, ...overrides });
|
|
}
|