Use random private key for bunker connection
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Kieran 2023-07-12 11:32:44 +01:00
parent 1cb27c1881
commit 63428142e5
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
4 changed files with 18 additions and 11 deletions

View File

@ -45,12 +45,11 @@ export default function useLoginHandler() {
} }
LoginStore.loginWithPrivateKey(key); LoginStore.loginWithPrivateKey(key);
} else if (key.startsWith("bunker://")) { } else if (key.startsWith("bunker://")) {
const inner = new Nip7Signer(); const nip46 = new Nip46Signer(key);
const nip46 = new Nip46Signer(key, inner);
await nip46.init(); await nip46.init();
const loginPubkey = await nip46.getPubKey(); const loginPubkey = await nip46.getPubKey();
LoginStore.loginWithPubkey(loginPubkey, LoginSessionType.Nip46, undefined, nip46.relays); LoginStore.loginWithPubkey(loginPubkey, LoginSessionType.Nip46, undefined, nip46.relays, nip46.privateKey);
nip46.close(); nip46.close();
} else { } else {
throw new Error("INVALID PRIVATE KEY"); throw new Error("INVALID PRIVATE KEY");

View File

@ -1,7 +1,7 @@
import * as secp from "@noble/curves/secp256k1"; import * as secp from "@noble/curves/secp256k1";
import * as utils from "@noble/curves/abstract/utils"; import * as utils from "@noble/curves/abstract/utils";
import { HexKey, RelaySettings, EventPublisher, Nip46Signer, Nip7Signer } from "@snort/system"; import { HexKey, RelaySettings, EventPublisher, Nip46Signer, Nip7Signer, PrivateKeySigner } from "@snort/system";
import { deepClone, sanitizeRelayUrl, unwrap, ExternalStore } from "@snort/shared"; import { deepClone, sanitizeRelayUrl, unwrap, ExternalStore } from "@snort/shared";
import { DefaultRelays } from "Const"; import { DefaultRelays } from "Const";
@ -94,7 +94,8 @@ export class MultiAccountStore extends ExternalStore<LoginSession> {
key: HexKey, key: HexKey,
type: LoginSessionType, type: LoginSessionType,
relays?: Record<string, RelaySettings>, relays?: Record<string, RelaySettings>,
remoteSignerRelays?: Array<string> remoteSignerRelays?: Array<string>,
privateKey?: string
) { ) {
if (this.#accounts.has(key)) { if (this.#accounts.has(key)) {
throw new Error("Already logged in with this pubkey"); throw new Error("Already logged in with this pubkey");
@ -110,6 +111,7 @@ export class MultiAccountStore extends ExternalStore<LoginSession> {
}, },
preferences: deepClone(DefaultPreferences), preferences: deepClone(DefaultPreferences),
remoteSignerRelays, remoteSignerRelays,
privateKey,
} as LoginSession; } as LoginSession;
newSession.publisher = this.#createPublisher(newSession); newSession.publisher = this.#createPublisher(newSession);
@ -183,7 +185,7 @@ export class MultiAccountStore extends ExternalStore<LoginSession> {
} }
case LoginSessionType.Nip46: { case LoginSessionType.Nip46: {
const relayArgs = (l.remoteSignerRelays ?? []).map(a => `relay=${encodeURIComponent(a)}`); const relayArgs = (l.remoteSignerRelays ?? []).map(a => `relay=${encodeURIComponent(a)}`);
const inner = new Nip7Signer(); const inner = new PrivateKeySigner(unwrap(l.privateKey));
const nip46 = new Nip46Signer(`bunker://${unwrap(l.publicKey)}?${[...relayArgs].join("&")}`, inner); const nip46 = new Nip46Signer(`bunker://${unwrap(l.publicKey)}?${[...relayArgs].join("&")}`, inner);
return new EventPublisher(nip46, unwrap(l.publicKey)); return new EventPublisher(nip46, unwrap(l.publicKey));
} }
@ -240,12 +242,8 @@ export class MultiAccountStore extends ExternalStore<LoginSession> {
// update session types // update session types
for (const [, v] of this.#accounts) { for (const [, v] of this.#accounts) {
if (v.privateKey) {
v.type = LoginSessionType.PrivateKey;
didMigrate = true;
}
if (!v.type) { if (!v.type) {
v.type = LoginSessionType.Nip7; v.type = v.privateKey ? LoginSessionType.PrivateKey : LoginSessionType.Nip7;
didMigrate = true; didMigrate = true;
} }
} }

View File

@ -43,6 +43,10 @@ export class PrivateKeySigner implements EventSigner {
this.#publicKey = getPublicKey(this.#privateKey); this.#publicKey = getPublicKey(this.#privateKey);
} }
get privateKey() {
return this.#privateKey;
}
init(): Promise<void> { init(): Promise<void> {
return Promise.resolve(); return Promise.resolve();
} }

View File

@ -67,6 +67,12 @@ export class Nip46Signer implements EventSigner {
return [this.#relay]; return [this.#relay];
} }
get privateKey() {
if(this.#insideSigner instanceof PrivateKeySigner) {
return this.#insideSigner.privateKey;
}
}
async init() { async init() {
const isBunker = this.#proto === "bunker:"; const isBunker = this.#proto === "bunker:";
if (isBunker) { if (isBunker) {