Commit graph

29 commits

Author SHA1 Message Date
senke
6c51199ba0 fix(stream): replace critical .unwrap() with safe alternatives
- middleware/logging.rs: UUID header parse .unwrap() -> unwrap_or_else
- routes/api.rs: serde_json::to_value().unwrap() -> proper error return
- routes/api.rs: event_bus.as_ref().unwrap() -> map_or(false, ...) guard
- structured_logging.rs: file_path.parent().unwrap() -> unwrap_or_else(".")
- cache/audio_cache.rs: NonZeroUsize::new().unwrap() -> fallback to 1024

Focuses on highest-risk locations: request handlers and middleware.

Addresses audit finding D9: .unwrap() in production code.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 23:22:03 +01:00
senke
26f75f4e46 feat(stream): implement real rate limiting middleware using governor
Replace the stub check_rate_limit() that always returned true with a
real implementation backed by the governor crate (already in Cargo.toml).

- Per-IP keyed rate limiter with DashMap store
- Default quota: 120 requests/minute per IP
- Sliding window enforcement via governor's GCRA algorithm
- Returns 429 Too Many Requests when limit exceeded

Addresses audit findings D7, A04: missing rate limiting on stream-server.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 23:19:27 +01:00
senke
81f55bd7a1 fix(deps): upgrade outdated Rust dependencies across services
stream-server (Cargo.toml):
- sqlx 0.7 -> 0.8
- redis 0.25 -> 0.27 (fix query_async generic args in revocation_store.rs)
- bcrypt 0.15 -> 0.17
- thiserror 1.0 -> 2.0
- dashmap 5.5 -> 6.1

veza-common (Cargo.toml):
- sqlx 0.7 -> 0.8 (required to avoid libsqlite3-sys link conflict)
- thiserror 1.0 -> 2.0

chat-server (Cargo.toml):
- sqlx 0.7 -> 0.8 (alignment with veza-common)

Addresses audit findings D2, A06: outdated Rust dependencies.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 23:18:34 +01:00
senke
93401028d8 fix(ci): upgrade deprecated actions, fix Go version
production-deploy.yml:
- Replace actions-rs/toolchain@v1 with dtolnay/rust-toolchain@stable
- Upgrade actions/cache@v3 -> @v4
- Upgrade github/codeql-action/upload-sarif@v2 -> @v3
- Upgrade actions/upload-artifact@v3 -> @v4

backend-ci.yml:
- Upgrade Go 1.22 -> 1.23 to match go.mod (1.23.8)

Addresses audit findings A08: deprecated actions and outdated Go version.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 23:14:50 +01:00
senke
e605c685e5 chore: remove dead code, backups, and deprecated docker-compose files
Removed files:
- apps/web/src/utils/storeSelectors.ts.backup (committed backup file)
- apps/web/desy/ (69 files, unused legacy design system)
- docker-compose.production.yml (root, superseded by docker-compose.prod.yml)
- config/docker/docker-compose.production.yml (deprecated copy)
- veza-stream-server/docker-compose.production.yml (deprecated copy)

Annotated ghost features in MSW handlers:
- Education endpoints marked as GHOST FEATURE (no backend)
- Gamification endpoints marked as GHOST FEATURE (no backend)

Not removed (out of scope for this commit):
- veza-desktop/ and veza-mobile/ (separate issue)
- Root-level audit markdown reports (product owner decision)

Addresses audit findings: debt items 12-18 (dead code, ghost features).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:52:59 +01:00
senke
f2d289c7f7 fix(stream): migrate sqlx query! macros to runtime queries
- Convert all sqlx::query!() and sqlx::query_scalar!() compile-time
  macros to runtime sqlx::query() and sqlx::query_scalar() with .bind()
- Affected files: segment_tracker.rs, processor.rs, callbacks.rs
- This removes the dependency on .sqlx/ directory for offline mode
- Update Dockerfile to remove SQLX_OFFLINE=true and .sqlx COPY
- Stream server can now compile without a live database connection

The compile-time macros required either a DATABASE_URL at build time or
a .sqlx directory with cached query metadata (neither was available).
Runtime queries trade compile-time SQL validation for buildability.

Addresses audit finding: debt item 1 (stream server compilation).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:49:30 +01:00
senke
9512ec282d fix(security): restrict CORS origins in stream-server
- Change default ALLOWED_ORIGINS from wildcard (*) to localhost:5173
  in veza-stream-server/docker-compose.yml
- Also fixed local .env (untracked) to use specific dev domains

Previously, the stream-server docker-compose defaulted to ALLOWED_ORIGINS=*
which would allow any origin to access the streaming API.

Addresses audit finding: A05 (Security Misconfiguration) — HIGH.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:42:04 +01:00
senke
bb69ec917d fix(security): implement JWT auth on stream-server WebSocket
- Validate JWT token via AuthManager before accepting WebSocket connections
- Extract user_id from validated token claims instead of trusting query params
- Reject unauthenticated connections with 401 Unauthorized
- Add `authenticated` field to WebSocketConnection struct
- Update websocket_handler_wrapper to handle auth error responses

Previously, the WebSocket handler accepted all connections without
validating the token (comment: "pour l'instant, on accepte la connexion").
Now requires a valid JWT token via ?token= query param or Authorization header.

Addresses audit finding: A01 (Broken Access Control) — CRITICAL.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:41:35 +01:00
senke
aac3c0b185 chore(rust): chat server env, veza-common auth, stream server routes/websocket
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:19:17 +01:00
senke
5c9e7ec02e feat(stream): add JWT revocation persistante Redis (P3.1)
- Add SessionRevocationStore trait with InMemoryRevocationStore and RedisRevocationStore
- Wire Redis store when REDIS_URL in config.cache, fallback in-memory
- Session revocation by session_id persists across restarts when using Redis

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:10:07 +01:00
senke
f9bd7fc5dd fix(security): validate OAuth redirect URL against allowlist, require auth for internal transcode endpoint
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 21:28:26 +01:00
senke
5b63558895 fix(security): remove hardcoded credentials from stream server auth
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 19:50:17 +01:00
senke
fd579e4d39 chore(incus): add env template, document setup
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 19:49:01 +01:00
senke
5101d2945b fix(security): stop tracking veza-stream-server/.env and config/incus env files
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 19:48:51 +01:00
senke
451cce8d33 feat: global update including storybook setup and backend fixes
- Web: Setup Storybook, added addons, configured Tailwind, added stories for UI components.
- Backend: Updated API router, database, workers, and auth in common.
- Stream Server: Removed SQLx queries and updated auth.
- Docs & Scripts: Updated documentation and recovery scripts.
2026-02-02 19:34:14 +01:00
senke
4168509a67 api-contracts: install openapi-generator-cli and create type generation script
- Completed Action 1.1.2.1: Installed @openapitools/openapi-generator-cli
- Completed Action 1.1.2.2: Created generate-types.sh script
- Added swagger annotations to cmd/modern-server/main.go
- Regenerated swagger.yaml with proper info section
- Successfully generated TypeScript types to src/types/generated/

The script generates types from veza-backend-api/openapi.yaml using
typescript-axios generator and creates barrel exports.
2026-01-11 16:30:43 +01:00
senke
62898a8916 fix(backend): re-enable audio streaming dependencies
- Uncommented m3u8-rs in stream-server configuration
- This unblocks the audio streaming capability for the MVP
2026-01-11 03:19:18 +01:00
senke
a1637a9dcb docs: finalize walkthrough with dashboard screenshot and verification results 2026-01-04 01:44:23 +01:00
senke
7224a5f580 fix: resolve stream server compilation errors and integrate chat stability fixes 2026-01-04 01:44:22 +01:00
senke
7ead36ef12 [T0-002] fix(rust): Corriger erreurs compilation Rust
- Conflit SQLx résolu (alignement sur version 0.7)
- build.rs configurés pour protoc dans chat/stream servers
- API Prometheus migrée vers HistogramOpts
- Traits Display/Debug corrigés (String au lieu de &dyn Display)
- API TOTP corrigée (totp-rs 5.4 avec Secret::Encoded)
- Layers tracing-subscriber corrigés (types conditionnels)
- VezaError/VezaResult exportés dans lib.rs
- TransactionProvider simplifié (retour void au lieu de Box<dyn>)
- VezaConfig contraint Serialize pour to_json()

Files: veza-common/Cargo.toml, veza-common/src/*.rs, veza-chat-server/Cargo.toml, veza-chat-server/build.rs, veza-stream-server/Cargo.toml, veza-stream-server/build.rs, VEZA_ROADMAP.json
Hours: 8 estimated, 3 actual
2026-01-04 01:44:20 +01:00
senke
1fee0e4bb3 [FIX] PROD-003: Corriger imports use-toast → useToast 2026-01-04 01:44:17 +01:00
senke
b200c1a541 [LOGGING] Fix #24: Standardisation LOG_LEVEL pour tous les services - Support LOG_LEVEL dans Rust et frontend avec fallback 2026-01-04 01:44:16 +01:00
senke
2370cfa88d [LOGGING] Fix #10: Erreurs silencieuses - Ajout de logs avec contexte pour toutes les erreurs dans core/auth et core/track 2026-01-04 01:44:15 +01:00
senke
de191cf0fc refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
okinrev
e9e306c347 report generation and future tasks selection 2025-12-08 19:57:54 +01:00
okinrev
eb40e06d4c STABILISATION: phase 1 & phase 2 2025-12-06 14:45:07 +01:00
okinrev
385b1b0427 fix(stream-processor): replace unsafe abort with graceful join to drain events 2025-12-06 11:52:34 +01:00
okinrev
1ef0e0d6d6 P0: stabilisation backend/chat/stream + nouvelle base migrations v1
Backend Go:
- Remplacement complet des anciennes migrations par la base V1 alignée sur ORIGIN.
- Durcissement global du parsing JSON (BindAndValidateJSON + RespondWithAppError).
- Sécurisation de config.go, CORS, statuts de santé et monitoring.
- Implémentation des transactions P0 (RBAC, duplication de playlists, social toggles).
- Ajout d’un job worker structuré (emails, analytics, thumbnails) + tests associés.
- Nouvelle doc backend : AUDIT_CONFIG, BACKEND_CONFIG, AUTH_PASSWORD_RESET, JOB_WORKER_*.

Chat server (Rust):
- Refonte du pipeline JWT + sécurité, audit et rate limiting avancé.
- Implémentation complète du cycle de message (read receipts, delivered, edit/delete, typing).
- Nettoyage des panics, gestion d’erreurs robuste, logs structurés.
- Migrations chat alignées sur le schéma UUID et nouvelles features.

Stream server (Rust):
- Refonte du moteur de streaming (encoding pipeline + HLS) et des modules core.
- Transactions P0 pour les jobs et segments, garanties d’atomicité.
- Documentation détaillée de la pipeline (AUDIT_STREAM_*, DESIGN_STREAM_PIPELINE, TRANSACTIONS_P0_IMPLEMENTATION).

Documentation & audits:
- TRIAGE.md et AUDIT_STABILITY.md à jour avec l’état réel des 3 services.
- Cartographie complète des migrations et des transactions (DB_MIGRATIONS_*, DB_TRANSACTION_PLAN, AUDIT_DB_TRANSACTIONS, TRANSACTION_TESTS_PHASE3).
- Scripts de reset et de cleanup pour la lab DB et la V1.

Ce commit fige l’ensemble du travail de stabilisation P0 (UUID, backend, chat et stream) avant les phases suivantes (Coherence Guardian, WS hardening, etc.).
2025-12-06 11:14:38 +01:00
okinrev
a01d7a25ac adding initial stream server (Rust) 2025-12-03 20:36:56 +01:00