aboutsummaryrefslogtreecommitdiff
path: root/web/ui/src/routes/auth
diff options
context:
space:
mode:
Diffstat (limited to 'web/ui/src/routes/auth')
-rw-r--r--web/ui/src/routes/auth/callback/+server.ts14
-rw-r--r--web/ui/src/routes/auth/logout/+server.ts13
2 files changed, 27 insertions, 0 deletions
diff --git a/web/ui/src/routes/auth/callback/+server.ts b/web/ui/src/routes/auth/callback/+server.ts
new file mode 100644
index 0000000..da8181b
--- /dev/null
+++ b/web/ui/src/routes/auth/callback/+server.ts
@@ -0,0 +1,14 @@
+import { redirect, type RequestHandler } from '@sveltejs/kit';
+
+import { consumeMagicLink, createSession } from '$lib/server/auth';
+
+export const GET: RequestHandler = async ({ url, cookies }) => {
+ const token = url.searchParams.get('token');
+ if (!token) throw redirect(303, '/?error=missing-token');
+
+ const account = consumeMagicLink(token);
+ if (!account) throw redirect(303, '/?error=invalid-token');
+
+ createSession(cookies, account.id);
+ throw redirect(303, '/dashboard');
+};
diff --git a/web/ui/src/routes/auth/logout/+server.ts b/web/ui/src/routes/auth/logout/+server.ts
new file mode 100644
index 0000000..b17d1d5
--- /dev/null
+++ b/web/ui/src/routes/auth/logout/+server.ts
@@ -0,0 +1,13 @@
+import { redirect, type RequestHandler } from '@sveltejs/kit';
+
+import { clearSession } from '$lib/server/auth';
+
+export const POST: RequestHandler = async ({ cookies }) => {
+ clearSession(cookies);
+ throw redirect(303, '/');
+};
+
+export const GET: RequestHandler = async ({ cookies }) => {
+ clearSession(cookies);
+ throw redirect(303, '/');
+};