From 8588de25f16486b56ef0ad533013bd8cb48ff120 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 9 Jan 2025 23:44:40 -0800 Subject: nostr signing --- src/routes/(app)/settings/+layout.svelte | 28 ++++-- src/routes/(app)/settings/nostr/+page.server.ts | 6 ++ src/routes/(app)/settings/nostr/+page.svelte | 116 ++++++++++++------------ 3 files changed, 83 insertions(+), 67 deletions(-) (limited to 'src/routes/(app)/settings') diff --git a/src/routes/(app)/settings/+layout.svelte b/src/routes/(app)/settings/+layout.svelte index 85e5b0e6..c6cc81c4 100644 --- a/src/routes/(app)/settings/+layout.svelte +++ b/src/routes/(app)/settings/+layout.svelte @@ -9,7 +9,7 @@ import Pin from "$comp/Pin.svelte"; import { loading, t } from "$lib/translations"; import { fd, fail, auth, post, sleep, warning, success } from "$lib/utils"; - import { avatar, banner, password, pin, save } from "$lib/store"; + import { avatar, banner, signer, password, pin, save } from "$lib/store"; import { upload } from "$lib/upload"; import { page } from "$app/stores"; import { sign, send, setNsec } from "$lib/nostr"; @@ -53,10 +53,21 @@ }, }); - if (data.get("newNsec")) { - await setNsec(user, data.get("newNsec")); - data.set("nsec", user.nsec); - data.set("pubkey", user.pubkey); + if (!user.pubkey || user.pubkey === prev.pubkey) { + data.delete("pubkey"); + } else { + signer.set( + user.extension ? { method: "extension", ready: true } : null, + ); + let event = { + kind: 1, + created_at: Date.now(), + content: user.challenge, + tags: [], + }; + + let signedEvent = await sign(event); + data.set("event", JSON.stringify(signedEvent)); } if ($avatar) { @@ -89,7 +100,7 @@ } if ( - ["username", "about", "picture"].some( + ["username", "about", "picture", "display", "banner"].some( (a) => user[a] && user[a] !== prev[a], ) ) { @@ -101,14 +112,17 @@ name: user.username, about: user.about, picture: user.picture, + banner: user.banner, + displayName: user.display, }), tags: [], }; try { - await sign({ event, user }); + await sign(event); await send(event); } catch (e) { + console.log(e); warning("Nostr profile could not be updated"); } } diff --git a/src/routes/(app)/settings/nostr/+page.server.ts b/src/routes/(app)/settings/nostr/+page.server.ts index 4145935e..b4bb124b 100644 --- a/src/routes/(app)/settings/nostr/+page.server.ts +++ b/src/routes/(app)/settings/nostr/+page.server.ts @@ -1,5 +1,11 @@ +import { get } from "$lib/utils"; import updateUser from "$lib/settings"; +export const load = async () => { + const { challenge } = await get("/challenge"); + return { challenge }; +}; + export const actions = { default: updateUser, }; diff --git a/src/routes/(app)/settings/nostr/+page.svelte b/src/routes/(app)/settings/nostr/+page.svelte index 3757f96f..cfcfaf39 100644 --- a/src/routes/(app)/settings/nostr/+page.svelte +++ b/src/routes/(app)/settings/nostr/+page.svelte @@ -3,35 +3,29 @@ import { page } from "$app/stores"; import { tick } from "svelte"; import { t } from "$lib/translations"; - import { copy } from "$lib/utils"; + import { copy, fail } from "$lib/utils"; import { PUBLIC_COINOS_PUBKEY as pk, PUBLIC_COINOS_RELAY as relay, } from "$env/static/public"; + import { signer, save } from "$lib/store"; let { data } = $props(); - let { user } = $derived(data); - let { id, npub } = $derived(user); + let { challenge, user } = $derived(data); + let { npub } = $state(user); - let importing = $state(), - newNsec = $state(), + let newNsec = $state(), nsec = $state(), pin = $state(""), revealNsec = $state(), revealNwc = $state(); - let toggleImporting = () => { - revealNsec = false; - importing = !importing; - }; - let toggleNsec = async () => { try { nsec = await getNsec(user); revealNsec = !revealNsec; - importing = false; } catch (e) { - console.log(e); + fail("Failed to decrypt nsec"); } }; @@ -42,9 +36,19 @@ )}&secret=${user.nwc}&lud16=${lud16}`, ); let toggleNwc = () => (revealNwc = !revealNwc); + + let extension = $state(); + let getPubkey = async () => { + extension = true; + npub = await window.nostr.getPublicKey(); + await tick(); + $save.click(); + };
+ +

@@ -83,12 +87,10 @@

{/if} -
+
{$t("user.nostrPubkey")}
-
- {npub} -
+
-
-
- + + {$t("user.settings.syncWithExtension")} +
-

- {$t("user.settings.nostrDescription")} -

- -
- - - -
- {#if importing} - - {/if} +

+ {$t("user.settings.nostrDescription")} +

+ +
+ +
- {#if revealNsec} - - {/if} -
+ + + {/if} + +{/if} -- cgit v1.2.3