Files
plebeian-signer/projects/chrome/src/app/components/home/identity/identity.component.html
mleku ebe2b695cc Release v1.0.0 - Major security upgrade with Argon2id encryption
- Upgrade vault encryption from PBKDF2 (1000 iterations) to Argon2id
  (256MB memory, 8 iterations, 4 threads, ~3 second derivation)
- Add automatic migration from v1 to v2 vault format on unlock
- Add WebAssembly CSP support for hash-wasm Argon2id implementation
- Add NIP-42 relay authentication support for auth-required relays
- Add profile edit feature with pencil icon on identity page
- Add direct NIP-05 validation (removes NDK dependency for validation)
- Add deriving modal with progress timer during key derivation
- Add client tag "plebeian-signer" to profile events
- Fix modal colors (dark theme for visibility)
- Fix NIP-05 badge styling to include check/error indicator
- Add release zip packages for Chrome and Firefox

New files:
- projects/common/src/lib/helpers/argon2-crypto.ts
- projects/common/src/lib/helpers/websocket-auth.ts
- projects/common/src/lib/helpers/nip05-validator.ts
- projects/common/src/lib/components/deriving-modal/
- projects/{chrome,firefox}/src/app/components/profile-edit/
- releases/plebeian-signer-{chrome,firefox}-v1.0.0.zip

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-19 12:30:10 +01:00

74 lines
2.0 KiB
HTML

<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->
<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->
<div class="sam-text-header">
<span>You</span>
<button class="edit-btn" title="Edit profile" (click)="onClickEditProfile()">
<img src="edit.svg" alt="Edit" class="edit-icon" />
</button>
</div>
<div class="identity-container">
<!-- Banner background -->
<div
class="banner-background"
[style.background-image]="bannerUrl ? 'url(' + bannerUrl + ')' : 'none'"
>
<div class="banner-overlay"></div>
<div class="profile-content">
<!-- Avatar -->
<div class="avatar-frame" [class.has-image]="avatarUrl">
<img
[src]="avatarUrl || 'person-fill.svg'"
alt=""
class="avatar-image"
/>
</div>
<!-- Display name (primary, large) -->
<div class="name-badge-container" (click)="onClickShowDetails()">
<span class="display-name">
{{ displayName || selectedIdentity?.nick || 'Unknown' }}
</span>
@if(username) {
<span class="username">
{{ username }}
</span>
}
</div>
<!-- NIP-05 verification -->
@if(profile?.nip05) {
<div class="nip05-row">
@if(validating) {
<i class="bi bi-circle color-activity"></i>
} @else { @if(nip05isValidated) {
<i class="bi bi-patch-check sam-color-primary"></i>
} @else {
<i class="bi bi-exclamation-octagon-fill sam-color-danger"></i>
} }
<span class="nip05-badge">{{
profile?.nip05 | visualNip05
}}</span>
</div>
}
<!-- npub display -->
<div class="npub-wrapper">
<lib-pubkey
[value]="selectedIdentityNpub ?? 'na'"
[first]="14"
[last]="8"
(click)="
copyToClipboard(selectedIdentityNpub);
toast.show('Copied to clipboard')
"
></lib-pubkey>
</div>
</div>
</div>
</div>
<lib-toast #toast></lib-toast>