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,44 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { test } from 'node:test';
|
||||
import { createLoginLimiter, createToken, pinMatches, verifyToken } from '../server/auth.js';
|
||||
|
||||
test('Token ist mit Geheimnis und PIN gültig', () => {
|
||||
const token = createToken('geheim', '1234');
|
||||
assert.equal(verifyToken('geheim', '1234', token), true);
|
||||
});
|
||||
|
||||
test('Token wird nach PIN-Wechsel ungültig', () => {
|
||||
const token = createToken('geheim', '1234');
|
||||
assert.equal(verifyToken('geheim', '9999', token), false);
|
||||
});
|
||||
|
||||
test('Token mit fremdem Geheimnis oder manipuliertem Ablauf ist ungültig', () => {
|
||||
const token = createToken('geheim', '1234');
|
||||
assert.equal(verifyToken('anderes', '1234', token), false);
|
||||
const [, signature] = token.split('.');
|
||||
assert.equal(verifyToken('geheim', '1234', `${Date.now() + 1e12}.${signature}`), false);
|
||||
});
|
||||
|
||||
test('Abgelaufenes Token ist ungültig', () => {
|
||||
const token = createToken('geheim', '1234', 0);
|
||||
assert.equal(verifyToken('geheim', '1234', token), false);
|
||||
});
|
||||
|
||||
test('Ohne gesetzte PIN gilt kein Token und keine Eingabe', () => {
|
||||
assert.equal(verifyToken('geheim', '', createToken('geheim', '')), false);
|
||||
assert.equal(pinMatches('', ''), false);
|
||||
});
|
||||
|
||||
test('PIN-Vergleich', () => {
|
||||
assert.equal(pinMatches('1234', '1234'), true);
|
||||
assert.equal(pinMatches('1234', '1235'), false);
|
||||
assert.equal(pinMatches('1234', undefined), false);
|
||||
});
|
||||
|
||||
test('Sperre nach zu vielen Fehlversuchen läuft ab', () => {
|
||||
const limiter = createLoginLimiter({ maxFailures: 2, windowMs: 1000 });
|
||||
limiter.recordFailure(0);
|
||||
limiter.recordFailure(10);
|
||||
assert.equal(limiter.isBlocked(500), true);
|
||||
assert.equal(limiter.isBlocked(1500), false);
|
||||
});
|
||||
Reference in new issue
Block a user