Grundgerüst mit Server, PIN-Anmeldung und Docker-Deploy aufbauen
Die alte Clip-Auswahl-Oberfläche entfällt. Neu sind ein Express-Server, der im Entwicklungsbetrieb Vite einbindet, eine PIN-Anmeldung mit signiertem Sitzungs-Cookie und ein Docker-Image mit ffmpeg für VCH. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
8ed1396b1c
commit
f7d249f28b
23 files changed
+4456
-1358
No files matched your search
@@ -0,0 +1,52 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { after, before, test } from 'node:test';
|
||||
import { createApp } from '../server/app.js';
|
||||
|
||||
let server;
|
||||
let baseUrl;
|
||||
|
||||
before(async () => {
|
||||
const app = createApp({ config: { pin: '4711' }, secret: 'testgeheimnis' });
|
||||
server = app.listen(0);
|
||||
await new Promise((resolve) => server.once('listening', resolve));
|
||||
baseUrl = `http://127.0.0.1:${server.address().port}`;
|
||||
});
|
||||
|
||||
after(() => server.close());
|
||||
|
||||
const login = (pin) =>
|
||||
fetch(`${baseUrl}/api/login`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ pin }),
|
||||
});
|
||||
|
||||
test('Healthcheck antwortet ohne Anmeldung', async () => {
|
||||
const res = await fetch(`${baseUrl}/healthz`);
|
||||
assert.equal(res.status, 200);
|
||||
});
|
||||
|
||||
test('Geschützte Routen verlangen eine Anmeldung', async () => {
|
||||
const res = await fetch(`${baseUrl}/api/irgendwas`);
|
||||
assert.equal(res.status, 401);
|
||||
});
|
||||
|
||||
test('Falsche PIN wird abgelehnt', async () => {
|
||||
const res = await login('0000');
|
||||
assert.equal(res.status, 401);
|
||||
assert.equal(res.headers.get('set-cookie'), null);
|
||||
});
|
||||
|
||||
test('Richtige PIN liefert ein Sitzungs-Cookie, das gilt', async () => {
|
||||
const res = await login('4711');
|
||||
assert.equal(res.status, 200);
|
||||
const cookie = res.headers.get('set-cookie').split(';')[0];
|
||||
assert.match(cookie, /^fdc_session=/);
|
||||
assert.match(res.headers.get('set-cookie'), /HttpOnly/);
|
||||
|
||||
const session = await fetch(`${baseUrl}/api/session`, { headers: { cookie } });
|
||||
assert.deepEqual(await session.json(), { authenticated: true, pinConfigured: true });
|
||||
|
||||
const protectedRes = await fetch(`${baseUrl}/api/irgendwas`, { headers: { cookie } });
|
||||
assert.equal(protectedRes.status, 404);
|
||||
});
|
||||
Reference in new issue
Block a user