Files
bitvid/js/services/authProviders
thePR0M3TH3ANandClaude Opus 4.8 4a38e27150 [auth] fix nsec login: enforce access control + working remember/unlock
Audit of the nsec (direct private key) login found the client's
registerPrivateKeySigner silently ignored the access-control validator AND
the persist/passphrase options, so:

- Access-control bypass (security): nsec logins skipped the blacklist/whitelist
  gate that NIP-07 and NIP-46 logins enforce. registerPrivateKeySigner now runs
  the validator BEFORE activating the signer and forgets a since-blocked stored
  key on denial.
- "Remember this key" never worked: it persisted nothing (the payload used a
  shape persistSessionActor rejects), and there was no way to detect or unlock a
  saved key — getStoredSessionActorMetadata and unlockStoredSessionActor were
  referenced by the UI/provider but defined nowhere. Implemented both on the
  client: persist now writes the canonical { privateKeyEncrypted, encryption }
  shape (PBKDF2 250k + AES-GCM, already in place), the login modal can detect a
  saved key, and unlock decrypts with the passphrase and re-activates via the
  same proven createNsecAdapter path. The nsec provider now passes the
  access-control validator to the unlock path too.
- Fixed misleading copy: the provider claimed BIP-39 seed support, but only
  hex/nsec are accepted.

Untouched-but-verified: decode/validate (hex64 + nsec1), logout clears the
in-memory key, no key logging.

Tests (tests/nsec-login.test.mjs): a denied validator rejects login and
activates no signer; persist -> unlock round-trips the same pubkey (wrong
passphrase fails); unlock re-checks access control and forgets a blocked key.
The validator-enforcement and persist-shape fixes are both mutation-verified.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-18 15:40:16 -04:00
..