/
org-redirect.guard.ts
35 lines (30 loc) · 1.11 KB
/
org-redirect.guard.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { Injectable } from "@angular/core";
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from "@angular/router";
import {
canAccessOrgAdmin,
OrganizationService,
} from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
@Injectable({
providedIn: "root",
})
export class OrganizationRedirectGuard implements CanActivate {
constructor(
private router: Router,
private organizationService: OrganizationService,
) {}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const org = await this.organizationService.get(route.params.organizationId);
const customRedirect = route.data?.autoRedirectCallback;
if (customRedirect) {
let redirectPath = customRedirect(org);
if (typeof redirectPath === "string") {
redirectPath = [redirectPath];
}
return this.router.createUrlTree([state.url, ...redirectPath]);
}
if (canAccessOrgAdmin(org)) {
return this.router.createUrlTree(["/organizations", org.id]);
}
return this.router.createUrlTree(["/"]);
}
}