From 896d24b3f24500a25a7ac4111357cee4e0390eae Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 7 Feb 2024 22:26:31 -0800 Subject: update nsec at submit time --- bun.lockb | Bin 120440 -> 120406 bytes package.json | 22 ++++++++++----------- src/lib/nostr.js | 17 +++++----------- src/routes/(app)/+layout.svelte | 2 +- src/routes/(app)/[username]/(profile)/+page.svelte | 5 +++-- src/routes/(app)/[username]/generate/+page.svelte | 13 +----------- src/routes/(app)/[username]/messages/+page.svelte | 1 - .../[username]/settings/[...tab]/+page.svelte | 4 +++- .../[username]/settings/[...tab]/_security.svelte | 7 +++---- 9 files changed, 26 insertions(+), 45 deletions(-) diff --git a/bun.lockb b/bun.lockb index 84de2da7..c2e0a77c 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index e4e87934..091cded0 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,8 @@ { "name": "my-app", "version": "0.0.1", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "docker": "docker build . -t coinos-ui", - "preview": "vite preview", - "lint": "prettier --check --plugin-search-dir=. .", - "format": "prettier --write --plugin-search-dir=. ." - }, "devDependencies": { + "@asoltys/nostr-tools": "^2.1.7", "@scure/base": "^1.1.1", "@scure/bip39": "^1.2.1", "@sveltejs/adapter-node": "^2.0.0", @@ -48,8 +41,13 @@ "uuid": "^9.0.0", "vite": "^5.0.0" }, - "type": "module", - "dependencies": { - "nostr-tools": "https://github.com/nbd-wtf/nostr-tools#b9435af70872b83d57d8857b43113130b5f0cba6" - } + "scripts": { + "dev": "vite dev", + "build": "vite build", + "docker": "docker build . -t coinos-ui", + "preview": "vite preview", + "lint": "prettier --check --plugin-search-dir=. .", + "format": "prettier --write --plugin-search-dir=. ." + }, + "type": "module" } diff --git a/src/lib/nostr.js b/src/lib/nostr.js index 66f3bd3a..7af0cef8 100644 --- a/src/lib/nostr.js +++ b/src/lib/nostr.js @@ -1,3 +1,4 @@ +import { hexToUint8Array } from "uint8array-extras"; import { get } from "svelte/store"; import { Buffer } from "buffer"; import { fail, wait, post, stretch } from "$lib/utils"; @@ -84,7 +85,9 @@ function typedArrayToBuffer(array) { export let getPrivateKey = async (user) => { let { nsec, username, salt } = user; - let privkey = privateKeyFromSeedWords(await getMnemonic(user)); + let privkey = hexToUint8Array( + privateKeyFromSeedWords(await getMnemonic(user)) + ); if (nsec) { let decrypted = nip49decrypt(nsec, await getPassword()); @@ -135,17 +138,7 @@ export let send = (event) => { }; let getPassword = async () => { - let password = get(pw); - - if (!password) passwordPrompt.set(true); - else { - try { - await post("/password", { password }); - } catch (e) { - passwordPrompt.set(true); - } - } - + if (!get(pw)) passwordPrompt.set(true); await wait(() => !!get(pw)); return get(pw); }; diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index d33aa193..07f8a2a1 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -99,7 +99,7 @@ }); -{#if browser && $passwordPrompt} +{#if browser && user && $passwordPrompt} {/if} diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index c52009a7..9dd968b6 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -22,7 +22,7 @@ let ready; e.subscribe(async (event) => { - if (!(event && ready)) return; + if (!(browser && event && ready)) return; if ( event.recipient?.id === user.id && !~latest.findIndex((m) => m.id === event.id) @@ -43,7 +43,7 @@ let initialize = async (p) => { let i = 0; ready = false; - if (!p || !user) return; + if (!(browser && user)) return; while (i < messages.length) { let event = messages[i]; i++; @@ -54,6 +54,7 @@ event.author.id === user.id ? event.recipient?.pubkey : event.author.pubkey; + if (!keys.has(k)) { keys.add(k); event.content = await decrypt({ event, user }); diff --git a/src/routes/(app)/[username]/generate/+page.svelte b/src/routes/(app)/[username]/generate/+page.svelte index b9b077a3..767b7545 100644 --- a/src/routes/(app)/[username]/generate/+page.svelte +++ b/src/routes/(app)/[username]/generate/+page.svelte @@ -4,7 +4,7 @@ import { goto, invalidate } from "$app/navigation"; import Pin from "$comp/Pin.svelte"; import Spinner from "$comp/Spinner.svelte"; - import { loginRedirect, pin, password, passwordPrompt } from "$lib/store"; + import { loginRedirect, pin, password } from "$lib/store"; import { generate } from "$lib/nostr"; import { browser } from "$app/environment"; @@ -20,17 +20,6 @@ return; } - console.log("PASSWORRRRD", $password); - if (!$password) $passwordPrompt = true; - - try { - await post("/password", { password: $password }); - } catch (e) { - $passwordPrompt = true; - } - - await wait(() => $password); - try { await generate(user); } catch (e) { diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 263f7294..48855a26 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -41,7 +41,6 @@ $: initialize($password); let initialize = async (p) => { - if (!p) return; await Promise.all( messages.map( async (event) => (event.message = await decrypt({ event, user })) diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 383785ec..819d4e80 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -12,7 +12,7 @@ import { avatar, banner, password, pin } from "$lib/store"; import { upload } from "$lib/upload"; import { page } from "$app/stores"; - import { sign, send, reEncryptEntropy } from "$lib/nostr"; + import { sign, send, reEncryptEntropy, setNsec } from "$lib/nostr"; import { invalidateAll } from "$app/navigation"; import Account from "./_account.svelte"; @@ -77,6 +77,8 @@ submitting = true; let data = new FormData(formElement); + if (data.get("newNsec")) setNsec(user, data.get("newNsec")) + if (data.get("password")) { try { data.set( diff --git a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte index 7151f619..c57b5262 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte @@ -1,5 +1,5 @@