From a657fab89a7de41f0a33389023166a6f7af6dbe6 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 3 Jan 2023 00:22:30 -0800 Subject: generate pubkey on register --- src/components/RegisterOrLogin.svelte | 44 ++++++++++++++++++++--- src/hooks.server.js | 40 --------------------- src/lib/nostr.js | 29 +-------------- src/routes/(app)/+layout.server.js | 27 +++++++++++--- src/routes/(app)/[username]/generate/+page.svelte | 42 +++++++++++++++++++--- src/routes/(app)/[username]/generate/+server.js | 5 ++- src/routes/(app)/login/+server.js | 6 ---- src/routes/(app)/register/+page.server.js | 7 ++-- 8 files changed, 106 insertions(+), 94 deletions(-) delete mode 100644 src/hooks.server.js delete mode 100644 src/routes/(app)/login/+server.js (limited to 'src') diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte index b2070e9c..cc23d8ad 100644 --- a/src/components/RegisterOrLogin.svelte +++ b/src/components/RegisterOrLogin.svelte @@ -1,15 +1,18 @@
@@ -81,7 +111,7 @@
{/if} -
+
{$t('login.' + pageID)} + disabled={loading} + > + {#if loading} + + {:else} + {$t('login.' + pageID)} + {/if} diff --git a/src/hooks.server.js b/src/hooks.server.js deleted file mode 100644 index b97daa5a..00000000 --- a/src/hooks.server.js +++ /dev/null @@ -1,40 +0,0 @@ -import { auth, get, protectedRoutes } from '$lib/utils'; - -let users = {}; - -export async function handle({ event, resolve }) { - let token = event.cookies.get('token'); - let { - params, - request, - url: { pathname, origin } - } = event; - - let user; - if (token && pathname !== '/logout') { - try { - user = users[token] || (await get('/me', auth(event.cookies))); - users[token] = user; - - setTimeout(() => { - delete users[token]; - }, 60000); - - event.locals.user = user; - - if (['/', '/login', '/register'].includes(pathname) && request.method === 'GET') - return Response.redirect(origin + `/${user.username}/dashboard`, 307); - } catch (e) { - return Response.redirect(origin + '/logout', 307); - } - } - - if (protectedRoutes.find((p) => pathname.match(p))) { - if (!user || user.username !== params.username) - return Response.redirect(origin + '/login', 307); - } - - const response = await resolve(event); - - return response; -} diff --git a/src/lib/nostr.js b/src/lib/nostr.js index 0d21971e..048738bc 100644 --- a/src/lib/nostr.js +++ b/src/lib/nostr.js @@ -11,25 +11,11 @@ import { goto, invalidate } from '$app/navigation'; const { encode, decode, fromWords, toWords } = bech32m; export let generate = async (user) => { + let password = get(pw); let mnemonic, key, seed, entropy, cipher, salt, child; if (!get(pin)?.length === 6) return; - let password = get(pw); - - if (!password) { - passwordPrompt.set(true); - } - - try { - await post('/password', { password }); - } catch (e) { - console.log(e); - passwordPrompt.set(true); - } - - await wait(() => !!get(pw)); - password = get(pw); mnemonic = generateMnemonic(); seed = mnemonicToSeedSync(mnemonic); @@ -49,19 +35,6 @@ export let generate = async (user) => { user.pubkey = Buffer.from(ecc.xOnlyPointFromPoint(child.publicKey)).toString('hex'); user.cipher = encode('en', toWords(bytes), 180); user.salt = Buffer.from(salt).toString('hex'); - user.pin = get(pin); - - try { - await post(`/${user.username}/generate`, user); - } catch (e) { - if (e.message?.startsWith('Pin')) { - pin.set(''); - failure('Wrong pin, try again'); - } - } - - invalidate('app:user'); - setTimeout(() => goto(get(loginRedirect) || `/${user.username}/dashboard`), 10); }; export let sign = async ({ event, user }) => { diff --git a/src/routes/(app)/+layout.server.js b/src/routes/(app)/+layout.server.js index 88ca1539..eef1bdec 100644 --- a/src/routes/(app)/+layout.server.js +++ b/src/routes/(app)/+layout.server.js @@ -1,18 +1,35 @@ import { error, redirect } from '@sveltejs/kit'; -import { get, post, auth } from '$lib/utils'; +import { get, post, auth, protectedRoutes } from '$lib/utils'; import { PUBLIC_BTC as btc } from '$env/static/public'; -export async function load({ cookies, locals, request, url, params }) { - url.pathname; +export async function load({ cookies, request, url, params }) { + let { pathname } = url; let token = cookies.get('token'); let rate, rates = { USD: 1 }, subject; - let { user } = locals; + let user; + if (token) { + try { + user = await get('/me', auth(cookies)); + } catch (e) {} + } + + if (user && ['/', '/login', '/register'].includes(pathname) && request.method === 'GET') + throw redirect(307, `/${user.username}/dashboard`); + + if ( + protectedRoutes.find((p) => pathname.match(p)) && + (!user || user.username !== params.username) + ) { + throw redirect(307, '/login'); + } + if (user) { - if (!user.pubkey && !url.pathname.includes('gen')) + if (!user.pubkey && !url.pathname.includes('gen')) { throw redirect(307, `/${user.username}/generate`); + } let account = user.accounts.find((a) => a.asset === btc && !a.pubkey); if (account) { let { id } = account; diff --git a/src/routes/(app)/[username]/generate/+page.svelte b/src/routes/(app)/[username]/generate/+page.svelte index f2e53be7..91c3d189 100644 --- a/src/routes/(app)/[username]/generate/+page.svelte +++ b/src/routes/(app)/[username]/generate/+page.svelte @@ -1,14 +1,14 @@