From 69422d1f92fd2a2bf037144748f52276b0c3fd69 Mon Sep 17 00:00:00 2001 From: mina Date: Mon, 13 Oct 2025 13:01:12 +0200 Subject: [PATCH 01/11] refactoring UUID Anzeige, noch keine Tests angepasst --- src/routes/anmeldung/+page.server.ts | 8 +- src/routes/anmeldung/+page.svelte | 128 +++++++++++---------------- 2 files changed, 57 insertions(+), 79 deletions(-) diff --git a/src/routes/anmeldung/+page.server.ts b/src/routes/anmeldung/+page.server.ts index a4d6007..6d08a07 100644 --- a/src/routes/anmeldung/+page.server.ts +++ b/src/routes/anmeldung/+page.server.ts @@ -8,12 +8,10 @@ export const actions = { logout: (event) => logoutUser(event), getVorgangByToken: async ({ request, cookies }) => { const data = await request.formData(); - const vorgangToken = data.get('vorgang-token'); - const vorgangPIN = data.get('vorgang-pin'); + const vorgangToken = data.get('vorgang-token') as string; + const vorgangPIN = data.get('vorgang-pin') as string; - if (!vorgangToken || !vorgangPIN) return; - - const COOKIE_NAME = `token-${vorgangToken}` + const COOKIE_NAME = `token-${vorgangToken}`; cookies.set(COOKIE_NAME, vorgangPIN, { path: '/', httpOnly: true, diff --git a/src/routes/anmeldung/+page.svelte b/src/routes/anmeldung/+page.svelte index b2a1d24..a957757 100644 --- a/src/routes/anmeldung/+page.svelte +++ b/src/routes/anmeldung/+page.svelte @@ -1,17 +1,9 @@ +{#if data.user?.admin} +
@@ -16,3 +18,10 @@
+ +{:else} + +
+ + +{/if} \ No newline at end of file diff --git a/src/routes/(angemeldet)/+page.server.ts b/src/routes/(angemeldet)/+page.server.ts new file mode 100644 index 0000000..bcbb46d --- /dev/null +++ b/src/routes/(angemeldet)/+page.server.ts @@ -0,0 +1,5 @@ +import { loginUser } from '$lib/server/authService'; + +export const actions = { + default: ({ request, cookies }) => loginUser({ request, cookies }), +} as const; diff --git a/src/routes/(angemeldet)/+page.svelte b/src/routes/(angemeldet)/+page.svelte index 12431c8..34a1d67 100644 --- a/src/routes/(angemeldet)/+page.svelte +++ b/src/routes/(angemeldet)/+page.svelte @@ -2,18 +2,21 @@ import AddProcess from '$lib/icons/Add-Process.svelte'; import FileRect from '$lib/icons/File-rect.svelte'; import ListIcon from '$lib/icons/List-icon.svelte'; + import Button from '$lib/components/Button.svelte'; + import ArrowRight from '$lib/icons/Arrow-right.svelte'; import { ROUTE_NAMES } from '../index.js'; export let data; + export let form; export let outline = true; +{#if data.user?.admin}
- {#if data.user.admin}
- {/if} - {#if data.user.admin}

Fügen Sie einem Tatort Bilder hinzu.

- {/if}
+{:else} + +
+
+ Landeswappen Niedersachsen + +

+ Willkommen beim 3D Tatort +

+
+
+
+
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ {#if form?.incorrect} + Wrong credentials + {/if} +
+ +
+
+
+
+
+
+ +{/if} + + diff --git a/tests/views/Layout.test.ts b/tests/views/Layout.test.ts index 0f329ef..2dbc1f6 100644 --- a/tests/views/Layout.test.ts +++ b/tests/views/Layout.test.ts @@ -11,13 +11,8 @@ describe('+layout.server load(): Teste korrekte URL', () => { }, url: new URL(`https://example.com/not-anmeldung`) }; - try { - load(mockEvent); - throw new Error('Expected load() to throw'); - } catch (err) { - expect(err.status).toBe(303); - expect(err.location).toBe(ROUTE_NAMES.ANMELDUNG); - } + const res = load(mockEvent); + expect(res).toBe(undefined); }); }); -- 2.43.0 From c857041e21e20a196c88166b9618030439a34bff Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Thu, 30 Oct 2025 08:57:58 +0100 Subject: [PATCH 04/11] refactor viewer-login page with error messages and validation --- src/routes/anmeldung/+page.server.ts | 21 ++++++++----- src/routes/anmeldung/+page.svelte | 46 +++++----------------------- 2 files changed, 22 insertions(+), 45 deletions(-) diff --git a/src/routes/anmeldung/+page.server.ts b/src/routes/anmeldung/+page.server.ts index 36c8c1b..e5bc90c 100644 --- a/src/routes/anmeldung/+page.server.ts +++ b/src/routes/anmeldung/+page.server.ts @@ -1,18 +1,20 @@ import { dev } from '$app/environment'; -import { loginUser, logoutUser } from '$lib/server/authService'; -import { fail, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; import { ROUTE_NAMES } from '../index.js'; +import { vorgangPINValidation } from '$lib/server/vorgangService.js'; export const actions = { - login: ({ request, cookies }) => loginUser({ request, cookies }), - logout: (event) => logoutUser(event), - getVorgangByToken: async ({ request, cookies }) => { + default: async ({ request, cookies }) => { const data = await request.formData(); const vorgangToken = data.get('vorgang-token'); const vorgangPIN = data.get('vorgang-pin') as string; - if (!vorgangToken || !vorgangPIN) { - return fail(400, { message: 'Token oder PIN fehlen' }); + if (!vorgangPIN) { + return fail(400, { message: 'Bitte einen PIN eingeben.'}); + } + + if (!vorgangPINValidation(vorgangToken, vorgangPIN)) { + return fail(400, { message: 'Falsche Zugangsdaten.'}); } const COOKIE_NAME = `token-${vorgangToken}`; @@ -26,3 +28,8 @@ export const actions = { throw redirect(303, ROUTE_NAMES.VORGANG(vorgangToken)); } } as const; + +export const load: PageServerLoad = async ({ url }) => { + const vorgang = url.searchParams.get('vorgang'); + if (!vorgang) error(404, "Not Found"); +}; \ No newline at end of file diff --git a/src/routes/anmeldung/+page.svelte b/src/routes/anmeldung/+page.svelte index a957757..5d774ee 100644 --- a/src/routes/anmeldung/+page.svelte +++ b/src/routes/anmeldung/+page.svelte @@ -9,6 +9,7 @@ const vorgangToken = page.url.searchParams.get('vorgang'); +{#if vorgangToken}
Landeswappen Niedersachsen @@ -20,8 +21,8 @@
- {#if vorgangToken} -
+ +
+ {#if form?.message} +

{form.message}

+ {/if} +
- {:else} -
-
- -
- -
-
-
- -
- -
-
- -
- -
-
- {/if}
+{/if} \ No newline at end of file -- 2.43.0 From 48fe999b5bf0f46be6b241f5fb3b4615092f9144 Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Thu, 30 Oct 2025 10:35:45 +0100 Subject: [PATCH 05/11] protect admin pages after refactoring --- src/routes/(angemeldet)/list/+page.server.ts | 7 ++++++- src/routes/(angemeldet)/upload/+page.server.ts | 9 ++++++++- src/routes/(angemeldet)/user-management/+page.server.ts | 8 ++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/routes/(angemeldet)/user-management/+page.server.ts diff --git a/src/routes/(angemeldet)/list/+page.server.ts b/src/routes/(angemeldet)/list/+page.server.ts index 2053a67..ab89231 100644 --- a/src/routes/(angemeldet)/list/+page.server.ts +++ b/src/routes/(angemeldet)/list/+page.server.ts @@ -1,7 +1,12 @@ import { getVorgaenge } from '$lib/server/vorgangService'; import type { PageServerLoad } from '../../(token-based)/view/$types'; +import { error } from '@sveltejs/kit'; + +export const load: PageServerLoad = async (event) => { + if (!event.locals.user) { + error(404, 'Not Found') + } -export const load: PageServerLoad = async () => { const vorgangList = getVorgaenge(); return { diff --git a/src/routes/(angemeldet)/upload/+page.server.ts b/src/routes/(angemeldet)/upload/+page.server.ts index dfa143c..8155608 100644 --- a/src/routes/(angemeldet)/upload/+page.server.ts +++ b/src/routes/(angemeldet)/upload/+page.server.ts @@ -1,6 +1,6 @@ import { Readable } from 'stream'; import { BUCKET, client } from '$lib/minio'; -import { fail } from '@sveltejs/kit'; +import { fail, error } from '@sveltejs/kit'; import { v4 as uuidv4 } from 'uuid'; import { db } from '$lib/server/dbService'; @@ -123,3 +123,10 @@ export const actions = { return { etag, error }; } }; + + +export const load: PageServerLoad = async (event) => { + if (!event.locals.user) { + error(404, 'Not found') + } +}; \ No newline at end of file diff --git a/src/routes/(angemeldet)/user-management/+page.server.ts b/src/routes/(angemeldet)/user-management/+page.server.ts new file mode 100644 index 0000000..0b4a194 --- /dev/null +++ b/src/routes/(angemeldet)/user-management/+page.server.ts @@ -0,0 +1,8 @@ +import type { PageServerLoad } from '../../(token-based)/view/$types'; +import { error } from '@sveltejs/kit'; + +export const load: PageServerLoad = async (event) => { + if (!event.locals.user) { + error(404, 'Not Found') + } +}; -- 2.43.0 From 23f2feeefb98636dfc22ea419575dbb34e5f6c12 Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Thu, 30 Oct 2025 10:36:50 +0100 Subject: [PATCH 06/11] remove ununsed import --- src/routes/(angemeldet)/+layout.server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/(angemeldet)/+layout.server.ts b/src/routes/(angemeldet)/+layout.server.ts index 2976237..192a087 100644 --- a/src/routes/(angemeldet)/+layout.server.ts +++ b/src/routes/(angemeldet)/+layout.server.ts @@ -1,4 +1,4 @@ -import { redirect, type ServerLoadEvent } from '@sveltejs/kit'; +import { type ServerLoadEvent } from '@sveltejs/kit'; import type { PageServerLoad } from '../anmeldung/$types'; import { ROUTE_NAMES } from '..'; -- 2.43.0 From 349d2cea6ae89b22803d583bd049b178625cf8ac Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Thu, 30 Oct 2025 10:38:11 +0100 Subject: [PATCH 07/11] named actions for logging in and out --- src/routes/(angemeldet)/+page.server.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/routes/(angemeldet)/+page.server.ts b/src/routes/(angemeldet)/+page.server.ts index bcbb46d..058a07d 100644 --- a/src/routes/(angemeldet)/+page.server.ts +++ b/src/routes/(angemeldet)/+page.server.ts @@ -1,5 +1,6 @@ -import { loginUser } from '$lib/server/authService'; +import { loginUser, logoutUser } from '$lib/server/authService'; export const actions = { - default: ({ request, cookies }) => loginUser({ request, cookies }), + login: ({ request, cookies }) => loginUser({ request, cookies }), + logout: (event) => logoutUser(event), } as const; -- 2.43.0 From 793ddb17d6f32157e2b566aece5a527936bc6010 Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Thu, 30 Oct 2025 10:56:23 +0100 Subject: [PATCH 08/11] magic strings for login and logout --- src/lib/components/Header.svelte | 2 +- src/routes/(angemeldet)/+page.svelte | 2 +- src/routes/index.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index eb3d1d9..f6e49e0 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -21,7 +21,7 @@

Tatort

{#if data.user} -
+ -- 2.43.0 From 332a3e5c15d2989ab3bb0b7011041111f8b78d09 Mon Sep 17 00:00:00 2001 From: Chi Cong Tran Date: Thu, 30 Oct 2025 12:16:21 +0100 Subject: [PATCH 11/11] change description of test case: load() now returns undefined if not logged-in --- tests/views/Layout.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/views/Layout.test.ts b/tests/views/Layout.test.ts index 2dbc1f6..9b79b3a 100644 --- a/tests/views/Layout.test.ts +++ b/tests/views/Layout.test.ts @@ -4,7 +4,7 @@ import { ROUTE_NAMES } from '../../src/routes'; import { baseData, mockEvent } from '../fixtures'; describe('+layout.server load(): Teste korrekte URL', () => { - test('Werfe redirect zu /anmeldung wenn User nicht eingeloggt', async () => { + test('Werfe keinen Redirect und gebe nichts zurück', async () => { const mockEvent = { locals: { user: null -- 2.43.0