diff --git a/project.inlang/messages/de.json b/project.inlang/messages/de.json index fe6026f..479f78c 100644 --- a/project.inlang/messages/de.json +++ b/project.inlang/messages/de.json @@ -125,9 +125,16 @@ "errorGettingPrfOutput": "Fehler beim Abrufen der Sicherheitsdaten vom Passkey. Bitte verwenden Sie einen modernen Authentifikator, der die PRF-Erweiterung unterstützt." }, "logout": { - "title": "Erfolgreich abgemeldet", - "description": "Du wurdest abgemeldet.", - "success": "Erfolgreich abgemeldet", + "title": "Abmelden", + "success": { + "title": "Du wurdest abgemeldet.", + "description": "Du wurdest abgemeldet." + }, + "error": { + "title": "Abmelden fehlgeschlagen", + "description": "Du konntest nicht abgemeldet werden." + }, + "retry": "Erneut versuchen", "action": "Zur Anmeldung" }, "passkey": { diff --git a/project.inlang/messages/en.json b/project.inlang/messages/en.json index fe36b48..51e172a 100644 --- a/project.inlang/messages/en.json +++ b/project.inlang/messages/en.json @@ -133,9 +133,16 @@ } }, "logout": { - "title": "Logout complete", - "description": "You are logged-out.", - "success": "Logout successful", + "title": "Logout", + "success": { + "title": "You are logged out.", + "description": "You are logged-out." + }, + "error": { + "title": "Logout failed", + "description": "You could not be logged out." + }, + "retry": "Retry", "action": "Go to Login" }, "passkey": { diff --git a/src/routes/(pages)/logout/+page.server.ts b/src/routes/(pages)/logout/+page.server.ts deleted file mode 100644 index effa7bb..0000000 --- a/src/routes/(pages)/logout/+page.server.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { removeAuthCookies } from "$lib/server/utils/cookies"; -import { auth } from "$lib/stores/auth"; -import type { PageServerLoad } from "./$types"; - -export const load: PageServerLoad = async (event) => { - const success: Promise = event - .fetch("/api/auth/logout", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - credentials: "same-origin", - }) - .then(async (resp) => { - return resp.status < 400; - }) - .finally(() => { - removeAuthCookies(event); - auth.reset(); - }); - - return { streaming: { success } }; -}; diff --git a/src/routes/(pages)/logout/+page.svelte b/src/routes/(pages)/logout/+page.svelte index af94c03..e39f254 100644 --- a/src/routes/(pages)/logout/+page.svelte +++ b/src/routes/(pages)/logout/+page.svelte @@ -8,15 +8,41 @@ import { ROUTES } from "$lib/const/routes.js"; import { auth } from "$lib/stores/auth.js"; import { staffCrypto } from "$lib/stores/staff-crypto.js"; + import { TriangleAlert } from "@lucide/svelte"; import Check from "@lucide/svelte/icons/check"; import { onMount } from "svelte"; - const { data } = $props(); + let success: boolean | undefined = $state(); onMount(() => { - auth.reset(); - staffCrypto.clear(); + logout(); }); + + const logout = async () => { + success = undefined; + fetch("/api/auth/logout", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + credentials: "same-origin", + }) + .then(async (resp) => { + if (resp.status === 200 || resp.status === 401) { + success = true; + } else { + throw new Error(resp.statusText); + } + }) + .catch((error) => { + console.log("Logout failed:", error); + success = false; + }) + .finally(() => { + auth.reset(); + staffCrypto.clear(); + }); + }; @@ -29,24 +55,42 @@ {/snippet} - {#await data.streaming.success} + {#if success === undefined} - {:then} + {:else if success === true} - {/await} + {:else} + + {/if} - {#await data.streaming.success} + {#if success === undefined} - {:then} + {:else} + {#if success === false} + + {/if} - {/await} + {/if}