Commit Graph

30 Commits

Author SHA1 Message Date
Bastian Wagner
981cecbcbd feat: switch oidc client to confidential (backend token exchange)
The provisioned IdP client (https://auth.forgecore.work) is confidential
rather than public/PKCE-only, so a client secret must never reach the
browser. The frontend now only performs the Authorization Code + PKCE
redirect itself (hand-rolled PKCE, oidc-client-ts dependency removed)
and hands the resulting code + verifier to a new, intentionally
unauthenticated POST /api/v1/auth/session endpoint, which performs the
code-for-tokens exchange server-side using OIDC_CLIENT_SECRET and
returns only {accessToken, expiresIn} — refresh_token/id_token are
never forwarded to the client.

New required backend env vars: OIDC_CLIENT_ID, OIDC_CLIENT_SECRET.
Added frontend/proxy.conf.json so the Angular dev server forwards
/api and /health to the local API without needing CORS.
2026-08-17 16:36:49 +02:00
Bastian Wagner
8eb5f0a3ed docs: record phase 02 completion 2026-08-17 16:10:36 +02:00
Bastian Wagner
854df5bb2d fix: export guard dependencies so cross-module @UseGuards resolves
NestJS resolves a guard referenced via @UseGuards(SomeGuard) using the
consuming module's injector, not the guard's own declaring module's
injector. OidcAuthGuard and TripMembershipGuard are shared across
several feature modules, so every constructor dependency they need
(UsersRepository/UsersService, TripMembersRepository, etc.) must be
re-exported by AuthModule/TripsLibModule/UsersLibModule, not just the
guard classes themselves. Found via the Phase 02 end-to-end smoke test
against a mocked IdP, which failed to boot the API before this fix.
2026-08-17 16:10:27 +02:00
Bastian Wagner
60e09d5050 chore: wire oidc environment configuration 2026-08-17 15:54:30 +02:00
Bastian Wagner
6e991bfd00 feat: add minimal trips list, create trip, and members ui 2026-08-17 15:49:32 +02:00
Bastian Wagner
bd91a3da4a feat: add oidc authorization code with pkce login flow 2026-08-17 15:43:17 +02:00
Bastian Wagner
dedb3fff40 feat: add trip preference overrides with precedence resolution 2026-08-17 15:38:03 +02:00
Bastian Wagner
ee7ec94ea0 feat: add traveler entity distinct from trip membership 2026-08-17 15:28:35 +02:00
Bastian Wagner
6954024622 feat: add trip invitation creation and acceptance flow 2026-08-17 15:21:08 +02:00
Bastian Wagner
baae15dcbc feat: enforce trip membership and role authorization 2026-08-17 15:13:23 +02:00
Bastian Wagner
ddf1d03447 feat: add trip and trip settings with optimistic locking 2026-08-17 15:06:00 +02:00
Bastian Wagner
2eb1692216 feat: expose current user and preference endpoints 2026-08-17 14:59:01 +02:00
Bastian Wagner
5abc7cbe29 feat: verify oidc bearer tokens and jit-provision users 2026-08-17 14:54:42 +02:00
Bastian Wagner
7ca4bd9cf7 feat: add user jit provisioning and preferences service 2026-08-17 14:43:13 +02:00
Bastian Wagner
ec95a8e527 feat: add versioned migrations and kysely query layer 2026-08-17 14:33:28 +02:00
Bastian Wagner
acfbb3ab22 docs: add phase 02 implementation plan 2026-08-17 14:23:22 +02:00
Bastian Wagner
a7ce7c3730 fix: wire version module into api module 2026-08-17 14:09:13 +02:00
Bastian Wagner
74ae283fea feat: expose safe build metadata and verify foundation 2026-08-17 14:08:56 +02:00
Bastian Wagner
1957e3b337 chore: mark teamcity scripts executable 2026-08-17 13:53:24 +02:00
Bastian Wagner
2994e46274 ci: add teamcity build and deployment entry points 2026-08-17 13:53:01 +02:00
Bastian Wagner
ccea4e48ec test: enforce production docker network invariants 2026-08-17 13:45:14 +02:00
Bastian Wagner
5edb16de73 feat: add single-port production docker topology 2026-08-17 13:43:52 +02:00
Bastian Wagner
0815f702d2 feat: add api liveness and readiness checks 2026-08-17 13:39:15 +02:00
Bastian Wagner
db6d62c303 chore: add postgres and redis development services 2026-08-17 13:33:00 +02:00
Bastian Wagner
755cc88dc2 feat: add angular pwa shell 2026-08-17 13:31:38 +02:00
Bastian Wagner
ceaef3028f feat: validate backend runtime configuration 2026-08-17 13:26:38 +02:00
Bastian Wagner
a08eecd4e3 feat: add nestjs api and worker skeletons 2026-08-17 13:18:24 +02:00
Bastian Wagner
c23bda56a3 chore: establish travel planner pnpm workspace 2026-08-17 13:09:32 +02:00
Bastian Wagner
2c91596c48 docs: adjust phase 01 plan for pre-existing angular/nestjs scaffold 2026-08-17 12:59:32 +02:00
Bastian Wagner
feff7c717e initial 2026-08-17 12:49:36 +02:00