etalon
34bf5b5ac2
feat: base UI shell with themes, auth pages, profile, and role navigation (phase 4)
...
- embedded Go templates + vanilla ES-module JS + hand-written CSS, no build step
- exact §10 beige light / dark design tokens, square edges (radius 2px),
system font stack, visible focus rings
- theme toggle persisted to localStorage and the user profile
- login/register/change-password pages wired to the auth API
- profile page: avatar upload (image-sniffed, old file cleanup), bio,
contacts, arbitrary extra key/value fields, optimistic-concurrency 409
- role-based top navigation with placeholders for later-phase areas
- GET /files/{id} with scope-based access (session) or signed token (§5.1)
- security headers incl. CSP without unsafe-inline scripts
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-12 18:39:38 +02:00
etalon
c1cc781279
feat: authentication with local accounts, sessions, CSRF, RBAC, and OIDC PKCE (phase 3)
...
- argon2id (t=3, m=64MiB, p=2) PHC hashing honoring embedded params
- token-bucket rate limiting (10/15min per IP+email) on login/register
- opaque 32B session tokens in Mongo, 30-day sliding expiry, logout-all
- CSRF double-submit cookie/header on authenticated mutations
- bootstrap admin from env with forced first-login password change
- requireAuth/requireRole middleware with disabled-account enforcement
- OIDC code flow with PKCE: lazy discovery, account linking only on
verified email, auto-created developer accounts
- unit tests (RBAC matrix, CSRF, password, rate limiter) + integration
suite covering the full auth matrix incl. an in-test fake IdP
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-12 18:31:25 +02:00
etalon
f2c534f636
feat: store layer with indexes, optimistic concurrency, GridFS, credential crypto (phase 2)
...
- mongo-driver v2 connection with bounded startup retry + /readyz gate
- idempotent creation of all §4.9 indexes
- UpdateVersioned: version-filtered updates, conflict vs not-found errors
- AES-256-GCM Seal/Open for ticketing credentials, base64(nonce|ct)
- GridFS file store: MIME sniffing, MAX_UPLOAD_MB cap, sha256 metadata
- HMAC-signed short-lived file URL tokens (§5.1, 1h TTL)
- integration tests against compose Mongo via docker-compose.test.yml overlay
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-12 18:17:26 +02:00
etalon
976f5238f8
feat: scaffold app skeleton with config, ULID, health endpoints, compose stack (phase 1)
...
- internal .env loader (real env wins) + strictly validated config struct
- ULID package: 48-bit ms timestamp + 80-bit crypto randomness, sortable
- HTTP server with recovery/request-id/trusted-proxy/access-log middleware
- /healthz, /readyz (pluggable checkers), /metricsz (counter registry)
- multi-stage Dockerfile (alpine, non-root) + compose with healthchecks,
app bound to 127.0.0.1:8787, mongo unpublished, graceful 15s shutdown
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-12 18:10:30 +02:00