diff options
| author | Adam Soltys <[email protected]> | 2022-08-19 23:13:01 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-08-19 23:13:01 -0700 |
| commit | b3eefc07a56ea934de126c0d039943edacffa95c (patch) | |
| tree | 125cf73b09bb95eb0a79608f4ee5eaf1442b8e5f /src | |
| parent | e126a0ee16178f81c23934829d6d64eef7e8b7fb (diff) | |
| download | coinos-ui-b3eefc07a56ea934de126c0d039943edacffa95c.tar.gz coinos-ui-b3eefc07a56ea934de126c0d039943edacffa95c.zip | |
get login and register working again
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/RegisterOrLogin.svelte | 23 | ||||
| -rw-r--r-- | src/hooks/index.js | 25 | ||||
| -rw-r--r-- | src/lib/utils.js | 19 | ||||
| -rw-r--r-- | src/routes/+layout.server.js | 17 | ||||
| -rw-r--r-- | src/routes/+layout.svelte | 8 | ||||
| -rw-r--r-- | src/routes/[username]/+page.server.js | 2 | ||||
| -rw-r--r-- | src/routes/[username]/+page.svelte | 7 | ||||
| -rw-r--r-- | src/routes/[username]/dashboard/+page.svelte | 2 | ||||
| -rw-r--r-- | src/routes/login/+page.server.js | 21 | ||||
| -rw-r--r-- | src/routes/logout/+page.server.js | 2 | ||||
| -rw-r--r-- | src/routes/register/+page.server.js | 19 |
11 files changed, 69 insertions, 76 deletions
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`); </script> @@ -44,11 +32,12 @@ <div class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]"> <h1 class="text-2xl font-bold text-center">{$_('login.' + pageID)}</h1> - <form class="space-y-5" on:submit|preventDefault={submit}> + <form class="space-y-5" {action} method="POST"> <div> <label for="username" class="font-semibold">{$_('login.username')}</label> <!-- svelte-ignore a11y-autofocus --> <input + name="username" type="text" required class="bg-primary p-4 rounded-2xl w-full" @@ -61,6 +50,7 @@ <label for="password" class="block font-semibold">{$_('login.password')}</label> {#if revealPassword} <input + name="password" type="text" required class="block bg-primary p-4 rounded-2xl w-full" @@ -68,6 +58,7 @@ /> {:else} <input + name="password" type="password" required class="block bg-primary p-4 rounded-2xl w-full" @@ -85,7 +76,7 @@ {#if pageID === 'register'} <p class="text-secondary text-sm"> - {$_('login.passwordRecommendation')} + {$_('login.passwordRecommendation')} </p> {:else} <div class="flex justify-end items-center"> 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; </script> -{#if username} +{#if data?.username} <AppHeader avatarPosition="left-[calc(15vw-48px)]" /> <div class="flex xl:block justify-center items-center my-20 px-3"> <div class="space-y-10 xl:space-y-0"> <div class="xl:ml-[calc(15vw-48px)] space-y-2 w-full md:w-72"> - <h1 class="text-3xl font-bold">{username}</h1> + <h1 class="text-3xl font-bold">{data.username}</h1> <p class="text-secondary">{$_('user.addressGoesHere')}</p> 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 @@ <span class="text-secondary text-xl block">{accountBalanceSats} SAT</span> <button class="rounded-full border py-2 font-bold w-28 mt-4" on:click={toggle} - >$_('user.dashboard.withdraw')</button + >{$_('user.dashboard.withdraw')}</button > <p class="text-secondary my-2">{$_('user.dashboard.conversionFeeWarning')}</p> {: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` }; } |
