permissions.component.ts raw
1 import { Component, inject, OnInit } from '@angular/core';
2 import { ActivatedRoute } from '@angular/router';
3 import { IconButtonComponent, Identity_DECRYPTED, NavComponent, Permission_DECRYPTED, StorageService, getKindName } from '@common';
4
5 interface HostPermissions {
6 host: string;
7 permissions: Permission_DECRYPTED[];
8 }
9
10 @Component({
11 selector: 'app-permissions',
12 imports: [IconButtonComponent],
13 templateUrl: './permissions.component.html',
14 styleUrl: './permissions.component.scss',
15 })
16 export class PermissionsComponent extends NavComponent implements OnInit {
17 identity?: Identity_DECRYPTED;
18 hostsPermissions: HostPermissions[] = [];
19
20 readonly #activatedRoute = inject(ActivatedRoute);
21 readonly #storage = inject(StorageService);
22
23 ngOnInit(): void {
24 const selectedIdentityId =
25 this.#activatedRoute.parent?.snapshot.params['id'];
26 if (!selectedIdentityId) {
27 return;
28 }
29
30 this.#initialize(selectedIdentityId);
31 }
32
33 async onClickRevokePermission(permission: Permission_DECRYPTED) {
34 await this.#storage.deletePermission(permission.id);
35 this.#buildHostsPermissions(this.identity?.id);
36 }
37
38 async onClickRemoveAllPermissions() {
39 const allPermissions = this.hostsPermissions.flatMap(hp => hp.permissions);
40 for (const permission of allPermissions) {
41 await this.#storage.deletePermission(permission.id);
42 }
43 this.#buildHostsPermissions(this.identity?.id);
44 }
45
46 #initialize(identityId: string) {
47 this.identity = this.#storage
48 .getBrowserSessionHandler()
49 .browserSessionData?.identities.find((x) => x.id === identityId);
50
51 if (!this.identity) {
52 return;
53 }
54
55 this.#buildHostsPermissions(identityId);
56 }
57
58 #buildHostsPermissions(identityId: string | undefined) {
59 if (!identityId) {
60 return;
61 }
62
63 this.hostsPermissions = [];
64
65 const hostPermissions = (
66 this.#storage.getBrowserSessionHandler().browserSessionData
67 ?.permissions ?? []
68 )
69 .filter((x) => x.identityId === identityId)
70 .sortBy((x) => x.host)
71 .groupBy(
72 (x) => x.host,
73 (y) => y
74 );
75
76 hostPermissions.forEach((permissions, host) => {
77 this.hostsPermissions.push({
78 host: host,
79 permissions: permissions.sortBy((x) => x.method),
80 });
81 });
82 }
83
84 getKindTooltip(kind: number): string {
85 return getKindName(kind);
86 }
87 }
88