From 1da9c7d144d2afe78f8ac00ac704dfad749d4d47 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 21 Dec 2022 15:48:14 -0800 Subject: add nostr message field to user profile page --- src/lib/utils.js | 24 +++++++++ src/routes/(app)/[username]/+page.server.js | 9 +++- src/routes/(app)/[username]/+page.svelte | 60 ++++++++++++++++++++++- src/routes/(app)/[username]/+server.js | 6 +++ src/routes/(app)/[username]/generate/+page.svelte | 27 ++-------- 5 files changed, 98 insertions(+), 28 deletions(-) create mode 100644 src/routes/(app)/[username]/+server.js (limited to 'src') diff --git a/src/lib/utils.js b/src/lib/utils.js index f59b6359..14646ad0 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -1,3 +1,5 @@ +import * as ecc from 'tiny-secp256k1'; +import { BIP32Factory } from 'bip32'; import { browser } from '$app/environment'; import { toast } from '@zerodevx/svelte-toast'; import { goto } from '$app/navigation'; @@ -168,3 +170,25 @@ export const wait = async (f, s = 300) => { if (i >= s) throw new Error('timeout'); return f(); }; + +export const stretch = async (password, salt) => + crypto.subtle.deriveKey( + { + name: 'PBKDF2', + salt, + iterations: 100000, + hash: 'SHA-256' + }, + await crypto.subtle.importKey( + 'raw', + new TextEncoder().encode(password), + { name: 'PBKDF2' }, + false, + ['deriveBits', 'deriveKey'] + ), + { name: 'AES-GCM', length: 256 }, + true, + ['encrypt', 'decrypt'] + ); + +export const bip32 = await BIP32Factory(ecc); diff --git a/src/routes/(app)/[username]/+page.server.js b/src/routes/(app)/[username]/+page.server.js index 01dfab5a..547f754f 100644 --- a/src/routes/(app)/[username]/+page.server.js +++ b/src/routes/(app)/[username]/+page.server.js @@ -1,14 +1,19 @@ import { get } from '$lib/utils'; import Qr from 'qrcode-base64'; -export async function load({ params, url }) { +export async function load({ params, parent, url }) { + let { user } = await parent(); + let pubkey; + if (user) ({ pubkey } = user); + else pubkey = params.username; + let { username } = params; let text = `${encodeURI(username)}@${url.hostname}`; let src = Qr.drawImg(text, { size: 300 }); let events = []; try { - events = await get(`/${username}/events`); + events = await get(`/${pubkey}/events`); } catch (e) { console.log(e); } diff --git a/src/routes/(app)/[username]/+page.svelte b/src/routes/(app)/[username]/+page.svelte index 78d84653..837257ef 100644 --- a/src/routes/(app)/[username]/+page.svelte +++ b/src/routes/(app)/[username]/+page.svelte @@ -1,12 +1,53 @@ @@ -69,9 +110,24 @@ -
+
+ {#if user.username === n} +
+ +
+ {/if} +
- + {#if events.length} + + {:else} +
You haven't posted anything yet
+ {/if}
diff --git a/src/routes/(app)/[username]/+server.js b/src/routes/(app)/[username]/+server.js new file mode 100644 index 00000000..d0b1242f --- /dev/null +++ b/src/routes/(app)/[username]/+server.js @@ -0,0 +1,6 @@ +import { auth, post } from '$lib/utils'; +import { json } from '@sveltejs/kit'; + +export async function POST({ cookies, request }) { + return json(post('/nostr/send', await request.json(), auth(cookies))); +} diff --git a/src/routes/(app)/[username]/generate/+page.svelte b/src/routes/(app)/[username]/generate/+page.svelte index ee67237c..fd6b6f7e 100644 --- a/src/routes/(app)/[username]/generate/+page.svelte +++ b/src/routes/(app)/[username]/generate/+page.svelte @@ -1,42 +1,20 @@