aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-08-19 23:13:01 -0700
committerAdam Soltys <[email protected]>2022-08-19 23:13:01 -0700
commitb3eefc07a56ea934de126c0d039943edacffa95c (patch)
tree125cf73b09bb95eb0a79608f4ee5eaf1442b8e5f
parente126a0ee16178f81c23934829d6d64eef7e8b7fb (diff)
downloadcoinos-ui-b3eefc07a56ea934de126c0d039943edacffa95c.tar.gz
coinos-ui-b3eefc07a56ea934de126c0d039943edacffa95c.zip
get login and register working again
-rw-r--r--package.json2
-rw-r--r--pnpm-lock.yaml9
-rw-r--r--src/components/RegisterOrLogin.svelte23
-rw-r--r--src/hooks/index.js25
-rw-r--r--src/lib/utils.js19
-rw-r--r--src/routes/+layout.server.js17
-rw-r--r--src/routes/+layout.svelte8
-rw-r--r--src/routes/[username]/+page.server.js2
-rw-r--r--src/routes/[username]/+page.svelte7
-rw-r--r--src/routes/[username]/dashboard/+page.svelte2
-rw-r--r--src/routes/login/+page.server.js21
-rw-r--r--src/routes/logout/+page.server.js2
-rw-r--r--src/routes/register/+page.server.js19
13 files changed, 74 insertions, 82 deletions
diff --git a/package.json b/package.json
index ec1e573c..8685db76 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
},
"devDependencies": {
"@sveltejs/adapter-auto": "next",
- "@sveltejs/kit": "1.0.0-next.413",
+ "@sveltejs/kit": "1.0.0-next.427",
"@zerodevx/svelte-toast": "^0.7.2",
"autoprefixer": "^10.4.7",
"cookie": "^0.5.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 25160eb0..478c9e29 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2,7 +2,7 @@ lockfileVersion: 5.4
specifiers:
'@sveltejs/adapter-auto': next
- '@sveltejs/kit': 1.0.0-next.413
+ '@sveltejs/kit': 1.0.0-next.427
'@zerodevx/svelte-toast': ^0.7.2
autoprefixer: ^10.4.7
cookie: ^0.5.0
@@ -20,7 +20,7 @@ specifiers:
devDependencies:
'@sveltejs/adapter-auto': 1.0.0-next.64
'@zerodevx/svelte-toast': 0.7.2
autoprefixer: [email protected]
cookie: 0.5.0
@@ -169,8 +169,8 @@ packages:
- supports-color
dev: true
- resolution: {integrity: sha512-6rboaf0LuMEOmW+wyyAmBJ7q8/TyRxJ3ESc8t/k9l0NGXoQ2l61IzHKuHxcxjriKczZFdGFuB97j8wQ/PlLyHA==}
+ resolution: {integrity: sha512-HUt1knOXaEM18y7E3k0CvhTxmoNhp0KbgfbLPmuRvSrQxRMsTnTpupZwW5mmU0VZkm4HHsf8mwftGy4WR8qf1Q==}
engines: {node: '>=16.9'}
hasBin: true
requiresBuild: true
@@ -179,7 +179,6 @@ packages:
vite: ^3.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': [email protected][email protected]
- chokidar: 3.5.3
cookie: 0.5.0
devalue: 2.0.1
kleur: 4.1.5
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` };
}