From b3eefc07a56ea934de126c0d039943edacffa95c Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 19 Aug 2022 23:13:01 -0700 Subject: get login and register working again --- src/components/RegisterOrLogin.svelte | 23 +++++++---------------- src/hooks/index.js | 25 ------------------------- src/lib/utils.js | 19 +++++++++++++++++++ src/routes/+layout.server.js | 17 +++++++++++++++++ src/routes/+layout.svelte | 8 +++++--- src/routes/[username]/+page.server.js | 2 ++ src/routes/[username]/+page.svelte | 7 +++---- src/routes/[username]/dashboard/+page.svelte | 2 +- src/routes/login/+page.server.js | 21 ++++----------------- src/routes/logout/+page.server.js | 2 +- src/routes/register/+page.server.js | 19 ++++++++++--------- 11 files changed, 69 insertions(+), 76 deletions(-) delete mode 100644 src/hooks/index.js create mode 100644 src/routes/+layout.server.js (limited to 'src') diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte index 6fb76899..acf98523 100644 --- a/src/components/RegisterOrLogin.svelte +++ b/src/components/RegisterOrLogin.svelte @@ -4,7 +4,7 @@ import { user, token } from '$lib/store'; import { auth } from '$lib/socket'; import { goto } from '$app/navigation'; - import { _ } from 'svelte-i18n'; + import { _ } from 'svelte-i18n'; export let pageID; @@ -13,23 +13,11 @@ let revealPassword = false; - let url = { + let action = { register: '/register', signIn: '/login' }[pageID]; - let submit = async () => { - try { - let r = await post(url, { username, password }); - if (!r.token) r = await post('/login', { username, password }); - $token = r.token; - auth(); - } catch (e) { - if (!e.message) e.message = $_('login.failed'); - failure(e.message); - } - }; - $: if ($user) goto(`/${username}/receive`); @@ -44,11 +32,12 @@

{$_('login.' + pageID)}

-
+
{$_('login.password')} {#if revealPassword} {:else} - {$_('login.passwordRecommendation')} + {$_('login.passwordRecommendation')}

{:else}
diff --git a/src/hooks/index.js b/src/hooks/index.js deleted file mode 100644 index 2284d88d..00000000 --- a/src/hooks/index.js +++ /dev/null @@ -1,25 +0,0 @@ -import cookie from 'cookie'; -import { get } from '$lib/utils'; -import { protectedRoutes } from '$lib/utils'; - -export async function handle({ event, resolve }) { - let { - params, - request: { headers } - } = event; - - const cookies = cookie.parse(headers.get('cookie') || ''); - let { token } = cookies; - event.locals = { token }; - - if (protectedRoutes.find((p) => event.url.pathname.match(p))) { - let user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` }); - if (user.username !== params.username) throw new Error('user not found'); - } - - return resolve(event); -} - -export const getSession = ({ locals: { token } }) => { - return { token }; -}; diff --git a/src/lib/utils.js b/src/lib/utils.js index b42fe970..226002e7 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -1,3 +1,4 @@ +import cookie from 'cookie'; import { browser } from '$app/env'; import { toast } from '@zerodevx/svelte-toast'; @@ -96,3 +97,21 @@ export const info = (m) => { } }); }; + +export const login = async (user, setHeaders) => { + let maxAge = 30 * 24 * 60 * 60; + let { token } = await post('/login', user); + + let expires = new Date(); + expires.setSeconds(expires.getSeconds() + maxAge); + + setHeaders({ + 'set-cookie': cookie.serialize('token', token, { + httpOnly: true, + maxAge, + sameSite: 'lax', + path: '/', + expires + }) + }); +}; diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js new file mode 100644 index 00000000..e05380a7 --- /dev/null +++ b/src/routes/+layout.server.js @@ -0,0 +1,17 @@ +import cookie from 'cookie'; +import { protectedRoutes } from '$lib/utils'; +import { get } from '$lib/utils'; + +export async function load({ request, setHeaders, url, params }) { + let { token } = cookie.parse(request.headers.get('cookie') || ''); + let user; + + if (token) { + user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` }); + if (protectedRoutes.find((p) => url.pathname.match(p))) { + if (user.username !== params.username) throw new Error('user not found'); + } + } + + return { user, token }; +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 8ae80e6c..f2624613 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -6,19 +6,20 @@ import { onMount } from 'svelte'; import { connect } from '$lib/socket'; import { user, token } from '$lib/store'; - import { page, session } from '$app/stores'; + import { page } from '$app/stores'; import { browser } from '$app/env'; import { goto } from '$app/navigation'; import { LoadingSplash } from '$comp'; import { warning, protectedRoutes } from '$lib/utils'; import { _ } from 'svelte-i18n'; - browser && ($token ||= $session.token); + $: $token = data.token + + export let data; let ready = false; onMount(() => { - // get locale from local storage let localStorageLocale = localStorage.getItem('svelte-i18n-locale'); if (localStorageLocale) locale.set(localStorageLocale); @@ -27,6 +28,7 @@ }); if (protectedRoutes.find((p) => $page.url.pathname.match(p))) { + console.log("TOKEN", $token) if (!$token) { goto('/login'); warning($_('error.signIn')); diff --git a/src/routes/[username]/+page.server.js b/src/routes/[username]/+page.server.js index 2e52c431..e31a28c0 100644 --- a/src/routes/[username]/+page.server.js +++ b/src/routes/[username]/+page.server.js @@ -10,5 +10,7 @@ export async function load({ params }) { body = {}; } + console.log("BODY", body) + return body; } diff --git a/src/routes/[username]/+page.svelte b/src/routes/[username]/+page.svelte index f22bd218..6d93ba23 100644 --- a/src/routes/[username]/+page.svelte +++ b/src/routes/[username]/+page.svelte @@ -6,9 +6,8 @@ import { copy } from '$lib/utils'; import { _ } from 'svelte-i18n'; export let data; - $: ({ username } = data); - let lightningAddress = `${username}@coinos.io`; + let lightningAddress = `${data?.username}@coinos.io`; onMount(async () => { if (browser) { @@ -36,13 +35,13 @@ let followed = false; -{#if username} +{#if data?.username}
-

{username}

+

{data.username}

{$_('user.addressGoesHere')}

diff --git a/src/routes/[username]/dashboard/+page.svelte b/src/routes/[username]/dashboard/+page.svelte index e358c52e..3553661a 100644 --- a/src/routes/[username]/dashboard/+page.svelte +++ b/src/routes/[username]/dashboard/+page.svelte @@ -83,7 +83,7 @@ {accountBalanceSats} SAT {$_('user.dashboard.withdraw')}

{$_('user.dashboard.conversionFeeWarning')}

{:else} diff --git a/src/routes/login/+page.server.js b/src/routes/login/+page.server.js index 2dfb962d..b788af07 100644 --- a/src/routes/login/+page.server.js +++ b/src/routes/login/+page.server.js @@ -1,21 +1,8 @@ -import { post } from '$lib/utils'; -import cookie from 'cookie'; - -let maxAge = 30 * 24 * 60 * 60; +import { login, post } from '$lib/utils'; export async function POST({ setHeaders, request }) { - let body = await post('/login', await request.json()); - - let expires = new Date(); - expires.setSeconds(expires.getSeconds() + maxAge); + let user = Object.fromEntries(await request.formData()); + await login(user, setHeaders); - setHeaders({ - 'set-cookie': cookie.serialize('token', body.token, { - httpOnly: true, - maxAge, - sameSite: 'lax', - path: '/', - expires - }) - }); + return { location: `/${data.username}/dashboard` }; } diff --git a/src/routes/logout/+page.server.js b/src/routes/logout/+page.server.js index 40ddcfff..3eae005f 100644 --- a/src/routes/logout/+page.server.js +++ b/src/routes/logout/+page.server.js @@ -7,7 +7,7 @@ const opts = { path: '/' }; -export async function load({ request: { headers } }) { +export async function load({ setHeaders }) { setHeaders({ 'set-cookie': [ cookie.serialize('token', '', { diff --git a/src/routes/register/+page.server.js b/src/routes/register/+page.server.js index 4121b671..dc7dda33 100644 --- a/src/routes/register/+page.server.js +++ b/src/routes/register/+page.server.js @@ -1,11 +1,12 @@ -import { post } from '$lib/utils'; -import { error } from '@sveltejs/kit'; +import cookie from 'cookie'; +import { post, login } from '$lib/utils'; -export async function POST({ request }) { - try { - let user = await request.json(); - await post('/register', { user }); - } catch (e) { - throw error(500, e.message); - } +let maxAge = 30 * 24 * 60 * 60; + +export async function POST({ request, setHeaders }) { + let user = Object.fromEntries(await request.formData()); + await post('/register', { user }); + await login(user, setHeaders); + + return { location: `/${user.username}/dashboard` }; } -- cgit v1.2.3