keys.component.ts raw
1 import { Component, inject, OnInit } from '@angular/core';
2 import { FormsModule } from '@angular/forms';
3 import { ActivatedRoute, Router } from '@angular/router';
4 import {
5 IconButtonComponent,
6 NavComponent,
7 NostrHelper,
8 StorageService,
9 ToastComponent,
10 } from '@common';
11
12 interface CustomIdentity {
13 id: string;
14 nick: string;
15 privkeyNsec: string;
16 privkeyHex: string;
17 pubkeyNpub: string;
18 pubkeyHex: string;
19 }
20
21 @Component({
22 selector: 'app-keys',
23 imports: [IconButtonComponent, FormsModule, ToastComponent],
24 templateUrl: './keys.component.html',
25 styleUrl: './keys.component.scss',
26 })
27 export class KeysComponent extends NavComponent implements OnInit {
28 identity?: CustomIdentity;
29
30 readonly #activatedRoute = inject(ActivatedRoute);
31 readonly #storage = inject(StorageService);
32 readonly #router = inject(Router);
33
34 ngOnInit(): void {
35 const identityId = this.#activatedRoute.parent?.snapshot.params['id'];
36 if (!identityId) {
37 return;
38 }
39
40 this.#initialize(identityId);
41 }
42
43 copyToClipboard(text: string) {
44 navigator.clipboard.writeText(text);
45 }
46
47 toggleType(element: HTMLInputElement) {
48 if (element.type === 'password') {
49 element.type = 'text';
50 } else {
51 element.type = 'password';
52 }
53 }
54
55 navigateToNcryptsec() {
56 if (!this.identity) return;
57 this.#router.navigateByUrl(`/edit-identity/${this.identity.id}/ncryptsec`);
58 }
59
60 async #initialize(identityId: string) {
61 const identity = this.#storage
62 .getBrowserSessionHandler()
63 .browserSessionData?.identities.find((x) => x.id === identityId);
64
65 if (!identity) {
66 return;
67 }
68
69 const pubkey = NostrHelper.pubkeyFromPrivkey(identity.privkey);
70
71 this.identity = {
72 id: identity.id,
73 nick: identity.nick,
74 privkeyHex: identity.privkey,
75 privkeyNsec: NostrHelper.privkey2nsec(identity.privkey),
76 pubkeyHex: pubkey,
77 pubkeyNpub: NostrHelper.pubkey2npub(pubkey),
78 };
79 }
80 }
81