aboutsummaryrefslogtreecommitdiffstats
path: root/apps/kit/src/routes/+layout.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'apps/kit/src/routes/+layout.svelte')
-rw-r--r--apps/kit/src/routes/+layout.svelte23
1 files changed, 23 insertions, 0 deletions
diff --git a/apps/kit/src/routes/+layout.svelte b/apps/kit/src/routes/+layout.svelte
new file mode 100644
index 0000000..ee76da9
--- /dev/null
+++ b/apps/kit/src/routes/+layout.svelte
@@ -0,0 +1,23 @@
+<script lang="ts">
+ import "../app.pcss";
+ import {afterNavigate, beforeNavigate, goto} from "$app/navigation";
+ import {is_active} from "$lib/session";
+ import type {Navigation} from "@sveltejs/kit";
+
+ async function redirect_if_necessary(ticket: Navigation) {
+ const sessionIsValid = await is_active();
+ const isPublicRoute = ticket.to?.routeId?.startsWith("(public)");
+ if (sessionIsValid && isPublicRoute) {
+ await goto("/home");
+ } else if (!sessionIsValid && !isPublicRoute) {
+ await goto("/login");
+ }
+ }
+
+ // This should probably be removed in favor of the logic in layout.server.ts.
+ // That requires a more sophisticated server side implementation of session handling,
+ // and i don't want that tbh, i want to stay as much in the browser as possible.
+ afterNavigate(redirect_if_necessary);
+ beforeNavigate(redirect_if_necessary);
+</script>
+<slot></slot> \ No newline at end of file