Spaces:
Running
Running
Commit History
-
fix(app): 503 on storage failures, validated currency, lock release on shutdown, per-IP login limit, unit-only npm test
Storage failures now surface as a 503 with a retry message instead of a bare 500: `guarded()` wraps every form action, passing redirects/HttpErrors/ActionFailures through and mapping anything else (including ReadOnlyError) to a 503 rendered by the new +error.svelte. - config: CURRENCY must be a 3-letter uppercase ISO 4217 code; reuse the validated session secret and compaction interval instead of recomputing them - app: release the writer lock on sveltekit:shutdown, with SIGTERM/SIGINT fallback - login: per-IP limiter (20/min) ahead of the per-username one; scrypt wait queue capped at 64 so a login flood is shed as a 503 rather than parked - npm test now runs unit tests only; integration tests move to vitest.integration.config.ts so the default run never touches the real bucket - nosniff/Referrer-Policy on every response, spelling fixes, drop unused splitParticipants, .git in .dockerignore, README env notese830ad4 -
fix(auth): gate admin routes on the decoded path and in the actions themselves
The hooks gate tested the raw `event.url.pathname`, but SvelteKit matches routes on the decoded path, so a logged-in member could reach /admin (and reset the admin's password) via /%61dmin. Decode the pathname the same way before every check, and stop relying on the route gate alone: each admin load and action now calls requireAdmin, and the mutating actions require a member target so the admin account can never be renamed, reset, or deactivated from /admin.857fbc2 -
fix(ui): shared safe-next validation, no lockout on success, logout origin check, tab/feed polish
b11153a -
fix(auth): bound scrypt params, cap concurrency, evict rate-limit keys, re-bootstrap admin
1c7b998 -
feat(auth): add scrypt hashing, signed session tokens and rate limiter
ef84ace