aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-07-30 09:47:08 -0700
committerAdam Soltys <[email protected]>2022-07-30 09:47:08 -0700
commit8acc59a86b6ec049dfe07f92fd19eeda726136f3 (patch)
tree56c6506d19c38a59fba962c53a71526b3a1825b5 /src
parent1f8b1f52431dc7a95118b310dbca3a178d24614b (diff)
downloadcoinos-ui-8acc59a86b6ec049dfe07f92fd19eeda726136f3.tar.gz
coinos-ui-8acc59a86b6ec049dfe07f92fd19eeda726136f3.zip
logout function
Diffstat (limited to 'src')
-rw-r--r--src/components/AppHeader.svelte4
-rw-r--r--src/components/RegisterOrLogin.svelte4
-rw-r--r--src/lib/socket.js4
-rw-r--r--src/routes/[...path].svelte16
-rw-r--r--src/routes/[username].js3
-rw-r--r--src/routes/[username].svelte27
-rw-r--r--src/routes/__layout.svelte23
-rw-r--r--src/routes/logout/done.svelte13
-rw-r--r--src/routes/logout/index.js26
-rw-r--r--src/routes/logout/index.svelte10
-rw-r--r--src/routes/receive.svelte4
11 files changed, 107 insertions, 27 deletions
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte
index 6376e27f..b096f01e 100644
--- a/src/components/AppHeader.svelte
+++ b/src/components/AppHeader.svelte
@@ -14,9 +14,11 @@
<button class="bg-white p-2 rounded-full w-12 h-12"
><Icon icon="clock" style="mx-auto" /></button
>
- <button class="bg-white p-2 rounded-full w-12 h-12"
+ <a href={`/${$user.username}`}>
+ <button class="bg-white p-2 rounded-full w-12 h-12"
><Icon icon="profile" style="mx-auto" /></button
>
+ </a>
<button class="bg-white p-2 rounded-full w-12 h-12"
><Icon icon="menu" style="mx-auto" /></button
>
diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte
index b42b8d7f..f5764a85 100644
--- a/src/components/RegisterOrLogin.svelte
+++ b/src/components/RegisterOrLogin.svelte
@@ -1,7 +1,7 @@
<script>
import { Icon } from '$comp';
import { post } from '$lib/utils';
- import { token } from '$lib/store';
+ import { user, token } from '$lib/store';
import { auth } from '$lib/socket';
import { goto } from '$app/navigation';
@@ -22,7 +22,7 @@
if (!r.token) r = await post('/login', { username, password });
$token = r.token;
auth();
- goto('/receive');
+ user.subscribe(() => goto('/receive'));
};
</script>
diff --git a/src/lib/socket.js b/src/lib/socket.js
index 9d0c472e..14555bd3 100644
--- a/src/lib/socket.js
+++ b/src/lib/socket.js
@@ -46,6 +46,10 @@ export function connect() {
interval = setInterval(() => send('heartbeat'), 5000);
}
+export function close() {
+ if (socket) socket.close();
+}
+
function onWebsocketMessage(msg) {
let { type, data } = JSON.parse(msg.data);
messages(data)[type] && messages(data)[type]();
diff --git a/src/routes/[...path].svelte b/src/routes/[...path].svelte
deleted file mode 100644
index 503316bb..00000000
--- a/src/routes/[...path].svelte
+++ /dev/null
@@ -1,16 +0,0 @@
-<script>
- import { Icon } from '$comp';
-</script>
-
-<div class="flex justify-center items-center mt-20">
- <div class="space-y-5 text-center">
- <a href="/">
- <Icon icon="logo" />
- </a>
-
- <Icon icon="question" style="mx-auto w-full" />
-
- <h1 class="font-bold text-5xl">404</h1>
- <p>Page not found.</p>
- </div>
-</div>
diff --git a/src/routes/[username].js b/src/routes/[username].js
new file mode 100644
index 00000000..39a216c2
--- /dev/null
+++ b/src/routes/[username].js
@@ -0,0 +1,3 @@
+export async function GET({ params }) {
+ return { body: params }
+}
diff --git a/src/routes/[username].svelte b/src/routes/[username].svelte
new file mode 100644
index 00000000..fe1f7754
--- /dev/null
+++ b/src/routes/[username].svelte
@@ -0,0 +1,27 @@
+<script>
+ import { AppHeader, Icon } from '$comp';
+ import { user } from '$lib/store';
+ export let username;
+
+ console.log($user, username);
+</script>
+
+{#if $user?.username === username}
+ <AppHeader />
+ <div class="flex justify-center items-center mt-20 mb-3 px-3">
+ <div class="space-y-3 w-full md:w-[300px] mx-auto">
+ <div class="text-center">
+ <b>Signed in as {username}</b>
+ </div>
+
+ <div>
+ <a href="/logout" style="cursor: pointer">
+ <button
+ class="bg-primary rounded-xl w-full h-[48px] flex justify-center items-center font-semibold text-sm"
+ ><Icon icon="logout" style="mr-2" /> Logout</button
+ >
+ </a>
+ </div>
+ </div>
+ </div>
+{/if}
diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte
index 6562db18..c01dc848 100644
--- a/src/routes/__layout.svelte
+++ b/src/routes/__layout.svelte
@@ -2,12 +2,27 @@
import '../app.css';
import { onMount } from 'svelte';
import { connect } from '$lib/socket';
- import { token } from '$lib/store';
- import { session } from '$app/stores';
+ import { user, token } from '$lib/store';
+ import { page, session } from '$app/stores';
import { browser } from '$app/env';
+ import { goto } from '$app/navigation';
browser && ($token ||= $session.token);
- onMount(connect);
+ let protectedRoutes = [/receive/];
+ let ready = false;
+
+ onMount(() => {
+ if (protectedRoutes.find((p) => $page.url.pathname.match(p))) {
+ if (!$token) goto('/login');
+ user.subscribe((u) => (ready = true));
+ } else {
+ ready = true;
+ }
+
+ connect();
+ });
</script>
-<slot />
+{#if ready}
+ <slot />
+{/if}
diff --git a/src/routes/logout/done.svelte b/src/routes/logout/done.svelte
new file mode 100644
index 00000000..894c7b99
--- /dev/null
+++ b/src/routes/logout/done.svelte
@@ -0,0 +1,13 @@
+<script>
+ import { onMount } from "svelte";
+ import { user, token } from "$lib/store";
+ import { goto } from "$app/navigation";
+ import { close } from "$lib/socket";
+
+ onMount(() => {
+ $token = null;
+ $user = null;
+ close();
+ goto('/');
+ });
+</script>
diff --git a/src/routes/logout/index.js b/src/routes/logout/index.js
new file mode 100644
index 00000000..80e65f8b
--- /dev/null
+++ b/src/routes/logout/index.js
@@ -0,0 +1,26 @@
+import cookie from "cookie";
+
+const opts = {
+ httpOnly: true,
+ sameSite: "lax",
+ path: "/",
+};
+
+export async function GET({ request: { headers } }) {
+ return {
+ status: 302,
+ headers: {
+ location: "/logout/done",
+ "set-cookie": [
+ cookie.serialize("token", "", {
+ ...opts,
+ expires: new Date(0),
+ }),
+ cookie.serialize("refresh_token", "", {
+ ...opts,
+ expires: new Date(0),
+ }),
+ ],
+ },
+ };
+}
diff --git a/src/routes/logout/index.svelte b/src/routes/logout/index.svelte
new file mode 100644
index 00000000..2c6a7085
--- /dev/null
+++ b/src/routes/logout/index.svelte
@@ -0,0 +1,10 @@
+<script>
+ import { onMount } from 'svelte';
+ import { browser } from '$app/env';
+ import { user, token } from '$lib/store';
+
+ onMount(() => {
+ $user = null;
+ $token = null;
+ });
+</script>
diff --git a/src/routes/receive.svelte b/src/routes/receive.svelte
index 760733a3..0329dea4 100644
--- a/src/routes/receive.svelte
+++ b/src/routes/receive.svelte
@@ -4,10 +4,6 @@
import { goto } from '$app/navigation';
import { invoiceAmount, invoiceAmountFiat, rate, user } from '$lib/store';
- if (!$user && typeof window !== 'undefined') {
- window.location = '/login';
- }
-
let useFiat = true;
let amountFiat = 0;
let amountSats = 0;