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