aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json1
-rw-r--r--pnpm-lock.yaml7
-rw-r--r--src/components/RegisterOrLogin.svelte4
-rw-r--r--src/hooks/index.js16
-rw-r--r--src/lib/socket.js1
-rw-r--r--src/lib/store.js18
-rw-r--r--src/routes/__layout.svelte4
-rw-r--r--src/routes/login.js21
8 files changed, 67 insertions, 5 deletions
diff --git a/package.json b/package.json
index 6d3ad58a..23bb6cb6 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"@sveltejs/adapter-auto": "next",
"@sveltejs/kit": "next",
"autoprefixer": "^10.4.7",
+ "cookie": "^0.5.0",
"postcss": "^8.4.14",
"prettier": "^2.7.1",
"prettier-plugin-svelte": "^2.7.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 72a53df0..9c34207f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,6 +4,7 @@ specifiers:
'@sveltejs/adapter-auto': next
'@sveltejs/kit': next
autoprefixer: ^10.4.7
+ cookie: ^0.5.0
postcss: ^8.4.14
prettier: ^2.7.1
prettier-plugin-svelte: ^2.7.0
@@ -16,6 +17,7 @@ devDependencies:
'@sveltejs/adapter-auto': 1.0.0-next.64
autoprefixer: [email protected]
+ cookie: 0.5.0
postcss: 8.4.14
prettier: 2.7.1
prettier-plugin-svelte: 2.7.0_o3ioganyptcsrh6x4hnxvjkpqi
@@ -371,6 +373,11 @@ packages:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
dev: true
+ /cookie/0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+ dev: true
+
/cssesc/3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte
index 6cae8b5a..2334741d 100644
--- a/src/components/RegisterOrLogin.svelte
+++ b/src/components/RegisterOrLogin.svelte
@@ -7,7 +7,7 @@
export let page;
- let username, password;
+ let username = "bob", password = "pw";
let revealPassword = false;
@@ -20,6 +20,7 @@
let r = await post(url, { username, password });
if (!r.token) r = await post('/login', { username, password });
$token = r.token;
+ console.log("new token", r.token)
auth();
goto('/receive');
};
@@ -42,6 +43,7 @@
required
class="bg-primary p-4 rounded-2xl w-full"
bind:value={username}
+ autofocus
/>
</div>
diff --git a/src/hooks/index.js b/src/hooks/index.js
new file mode 100644
index 00000000..21e56052
--- /dev/null
+++ b/src/hooks/index.js
@@ -0,0 +1,16 @@
+import cookie from "cookie";
+export async function handle({ event, resolve }) {
+ let { request: { headers },
+ } = event;
+
+ const cookies = cookie.parse(headers.get("cookie") || "");
+ let { token } = cookies;
+ event.locals = { token };
+
+ return resolve(event);
+}
+
+
+export const getSession = ({ locals: { token } }) => {
+ return { token };
+};
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 087addf9..9d0c472e 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -24,7 +24,6 @@ export const messages = (data) => ({
connected: auth,
login() {
- console.log('OY', data);
user.set(data);
}
});
diff --git a/src/lib/store.js b/src/lib/store.js
index 7b510748..62232f9d 100644
--- a/src/lib/store.js
+++ b/src/lib/store.js
@@ -1,6 +1,20 @@
-import { writable } from 'svelte/store';
+import { get, writable } from 'svelte/store';
+import { browser } from '$app/env';
+
+const persisted = (k, i) => {
+ let s = writable(
+ browser && sessionStorage.getItem(k) && sessionStorage.getItem(k) !== 'undefined'
+ ? JSON.parse(sessionStorage.getItem(k))
+ : i
+ );
+
+ s.subscribe((v) => browser && sessionStorage.setItem(k, JSON.stringify(v))
+ );
+
+ return s;
+};
export const rate = writable();
export const user = writable();
export const invoiceAmount = writable();
-export const token = writable();
+export const token = persisted('token');
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index f5576edd..1af9679a 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -2,7 +2,11 @@
import '../app.css';
import { onMount } from 'svelte';
import { connect } from '$lib/socket';
+ import { token } from "$lib/store";
+ import { session } from "$app/stores";
+ import { browser } from "$app/env";
+ browser && ($token ||= $session.token);
onMount(connect);
</script>
diff --git a/src/routes/login.js b/src/routes/login.js
index 771de9e1..db1fbb6c 100644
--- a/src/routes/login.js
+++ b/src/routes/login.js
@@ -1,5 +1,24 @@
import { post } from '$lib/utils';
+import cookie from 'cookie';
+
+let maxAge = 30 * 24 * 60 * 60;
export async function POST({ request }) {
- return { body: await post('/login', await request.json()) };
+ let body = await post('/login', await request.json());
+
+ let expires = new Date();
+ expires.setSeconds(expires.getSeconds() + maxAge);
+
+ return {
+ body,
+ headers: {
+ 'set-cookie': cookie.serialize('token', body.token, {
+ httpOnly: true,
+ maxAge,
+ sameSite: 'lax',
+ path: '/',
+ expires
+ })
+ }
+ };
}