Commit graph

39 commits

Author SHA1 Message Date
senke
af1e57b418 [BE-SEC-007] security: Implement account lockout after failed login attempts
- Created AccountLockoutService to track failed login attempts
- Accounts are locked after 5 failed attempts within 15 minutes
- Lockout duration: 30 minutes (auto-unlock)
- Service uses Redis for persistence (fail-open if Redis unavailable)
- Integrated into AuthService Login method:
  * Check account lockout status before login
  * Record failed attempts (even for non-existent users to prevent enumeration)
  * Reset failed attempts counter on successful login
  * Auto-unlock expired accounts
- Added SetAccountLockoutService method to AuthService
- Service initialized in router when Redis is available

Phase: PHASE-4
Priority: P1
Progress: 9/267 (3.4%)
2025-12-24 12:10:41 +01:00
senke
f7baf67741 [BE-SEC-005] security: Implement rate limiting for authentication endpoints
- Applied RegisterRateLimit to POST /auth/register (3 attempts/hour)
- Applied PasswordResetRateLimit to password reset endpoints (3 attempts/hour)
- Added VerifyEmailRateLimit for POST /auth/verify-email (5 attempts/hour)
- Added ResendVerificationRateLimit for POST /auth/resend-verification (3 attempts/hour)
- Login endpoint already had rate limiting (5 attempts/15min)
- All rate limits are IP-based and use Redis for persistence
- Rate limiting disabled in test/e2e environments

Phase: PHASE-4
Priority: P1
Progress: 7/267 (2.6%)
2025-12-24 12:05:35 +01:00
senke
0b64c3b073 [BE-SEC-004] security: Implement CSRF protection for all state-changing endpoints
- Created applyCSRFProtection helper function to apply CSRF middleware
- Applied CSRF protection to all protected routes with POST/PUT/DELETE:
  * Users routes (PUT, POST, DELETE)
  * Tracks routes (POST, PUT, DELETE)
  * Playlists routes (POST, PUT, DELETE)
  * Chat routes (POST)
  * Auth protected routes (POST logout, 2FA)
  * Roles routes (GET only, no state-changing)
  * Marketplace routes (POST)
  * Webhooks routes (POST, DELETE)
  * Comments routes (POST, DELETE)
- CSRF token endpoint (/csrf-token) remains accessible without CSRF check
- Middleware validates X-CSRF-Token header for all state-changing requests
- Protection only applies when Redis is available

Phase: PHASE-4
Priority: P1
Progress: 6/267 (2.2%)
2025-12-24 12:03:27 +01:00
senke
9622569743 [BE-API-040] api: Implement user list endpoint
- Added ListUsers method to UserService with pagination and filtering
- Added ListUsers handler to ProfileHandler
- Registered GET /api/v1/users endpoint in router
- Supports filtering by role, is_active, is_verified, and search
- Supports sorting by created_at, username, email, last_login_at
- Includes pagination metadata (page, limit, total, total_pages, has_next, has_prev)

Phase: PHASE-2
Priority: P1
Progress: 5/267 (1.9%)
2025-12-24 11:59:56 +01:00
senke
f14966ceb2 [BE-API-032] be-api: Implement upload stats endpoint
- Added GetUploadStats method in TrackUploadService to calculate statistics from tracks table
- Standardized GetUploadStats handler to use RespondSuccess/RespondWithAppError
- Replaced c.Get with GetUserIDUUID helper
- Handler retrieves statistics: total_uploads, total_size, audio_files, image_files, video_files
- Updated UploadHandler to include TrackUploadService dependency
- Updated router to pass TrackUploadService to UploadHandler

Phase: PHASE-2
Priority: P2
Progress: 39/267 (14.6%)
2025-12-24 11:52:49 +01:00
senke
369d93b811 [BE-API-027] be-api: Implement user liked tracks endpoint
- Standardized GetUserLikedTracks handler to use RespondSuccess/RespondWithAppError
- Added limit validation (max 100)
- Moved route from setupTrackRoutes to setupUserRoutes in protected group
- Handler uses existing TrackLikeService methods
- Handler returns paginated results with tracks, total, limit, and offset
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 34/267 (12.7%)
2025-12-24 11:41:50 +01:00
senke
7690734dfc [BE-API-022] be-api: Implement avatar delete endpoint
- DeleteAvatar handler was already implemented and standardized
- Added route: DELETE /users/:userId/avatar
- Handler validates user authentication and ownership
- Handler deletes avatar file from storage and updates database
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 31/267 (11.6%)
2025-12-24 11:36:15 +01:00
senke
c8783e02e3 [BE-API-021] be-api: Implement avatar upload endpoint
- Standardized UploadAvatar handler to use RespondSuccess/RespondWithAppError
- Replaced common.GetUserIDFromContext with GetUserIDUUID
- Handler accepts both :userId and :id parameters
- Added route: POST /users/:userId/avatar
- Handler validates user authentication and ownership
- Handler uses existing ImageService methods
- Handler updates avatar URL in database

Phase: PHASE-2
Priority: P1
Progress: 30/267 (11.2%)
2025-12-24 11:34:41 +01:00
senke
7d638a2465 [BE-API-020] be-api: Implement HLS stream info endpoint
- Added GetStreamInfo method to HLSService
- Added GetStreamInfo handler in HLSHandler
- Standardized GetStreamStatus handler to use RespondSuccess/RespondWithAppError
- Added routes: GET /tracks/:id/hls/info and GET /tracks/:id/hls/status
- GetStreamInfo returns general stream information
- GetStreamStatus returns status with processing info if applicable
- Handlers use standard API response format

Phase: PHASE-2
Priority: P1
Progress: 29/267 (10.9%)
2025-12-24 11:32:50 +01:00
senke
de1f8cd369 [BE-API-019] be-api: Implement track play analytics endpoint
- Added RecordPlay handler in TrackHandler
- Added playbackAnalyticsService field and SetPlaybackAnalyticsService method
- Initialized PlaybackAnalyticsService in router.go
- Added route: POST /tracks/:id/play
- Handler accepts optional play_time in request body
- Handler uses existing PlaybackAnalyticsService.RecordPlayback method
- Handler uses standard API response format

Phase: PHASE-2
Priority: P1
Progress: 28/267 (10.5%)
2025-12-24 11:31:02 +01:00
senke
89976d93a1 [BE-API-018] be-api: Implement user block/unblock endpoints
- Added BlockUser and UnblockUser methods to SocialService
- Added BlockUser and UnblockUser handlers in ProfileHandler
- Added routes: POST /users/:id/block and DELETE /users/:id/block
- Handlers use existing SocialService methods
- Includes validation to prevent users from blocking themselves
- Added IsBlocked helper method to check block status
- Handlers use standard API response format

Phase: PHASE-2
Priority: P2
Progress: 27/267 (10.1%)
2025-12-24 11:28:49 +01:00
senke
48fc0f58cf [BE-API-017] be-api: Implement user follow/unfollow endpoints
- Added FollowUser and UnfollowUser handlers in ProfileHandler
- Added socialService field and SetSocialService method
- Initialized SocialService in setupUserRoutes
- Added routes: POST /users/:id/follow and DELETE /users/:id/follow
- Handlers use existing SocialService methods
- Includes validation to prevent users from following themselves
- Handlers use standard API response format

Phase: PHASE-2
Priority: P2
Progress: 26/267 (9.7%)
2025-12-24 11:26:32 +01:00
senke
aeb5aafd81 [BE-API-016] be-api: Implement notifications endpoints
- Standardized API responses in notification handlers
- Replaced c.Get with GetUserIDUUID for consistent user ID extraction
- Added routes: GET /notifications, POST /notifications/:id/read, POST /notifications/read-all
- Initialized NotificationService and NotificationHandlers in router
- Handlers and service already existed, only routes and response standardization were needed

Phase: PHASE-2
Priority: P1
Progress: 25/267 (9.4%)
2025-12-24 11:23:24 +01:00
senke
1362e37571 [BE-API-014] be-api: Implement track versions restore endpoint
- Added RestoreVersion handler method in TrackHandler
- Initialized TrackVersionService in setupTrackRoutes
- Added POST /tracks/:id/versions/:versionId/restore route (protected)
- Handler uses existing TrackVersionService.RestoreVersion method
- Includes ownership check (only track owner can restore versions)

Phase: PHASE-2
Priority: P2
Progress: 23/267 (8.6%)
2025-12-24 11:20:38 +01:00
senke
a6952a3dd5 [BE-API-013] be-api: Implement track comments endpoints
- Added GET /tracks/:id/comments route (public)
- Added POST /tracks/:id/comments route (protected)
- Added DELETE /comments/:id route (protected)
- Initialized CommentService and CommentHandler in setupTrackRoutes
- Standardized API responses in comment handlers
- Handlers use RespondSuccess and RespondWithAppError

Phase: PHASE-2
Priority: P1
Progress: 22/267 (8.2%)
2025-12-24 11:19:05 +01:00
senke
f9e10b5d94 [BE-API-012] be-api: Implement conversation update endpoint
- Added UpdateRoom method to RoomService with ownership check
- Only room creator can update the room
- Added UpdateRoomRequest type
- Added UpdateRoom to RoomServiceInterface and RoomHandler
- Added PUT /conversations/:id route
- Handler uses standard API response format
- Service updates name and/or description fields

Phase: PHASE-2
Priority: P1
Progress: 21/267 (7.9%)
2025-12-23 10:51:18 +01:00
senke
74ff4053ab [BE-API-011] be-api: Implement conversation participants endpoints
- Added RemoveMember method to RoomService and RoomServiceInterface
- Corrected RemoveMember in RoomRepository to use uuid.UUID
- Added AddParticipant and RemoveParticipant handlers
- Added POST /conversations/:id/participants route
- Added DELETE /conversations/:id/participants/:userId route
- Handlers use standard API response format
- Handlers reuse AddMember/RemoveMember service methods

Phase: PHASE-2
Priority: P1
Progress: 20/267 (7.5%)
2025-12-23 10:49:17 +01:00
senke
a734012f6f [BE-API-010] be-api: Implement conversation delete endpoint
- Added DeleteRoom method to RoomService with ownership check
- Only room creator can delete the room
- Added DeleteRoom to RoomServiceInterface and RoomHandler
- Added DELETE /conversations/:id route
- Handler uses standard API response format
- Service performs soft delete via GORM

Phase: PHASE-2
Priority: P1
Progress: 19/267 (7.1%)
2025-12-23 10:47:17 +01:00
senke
dda301c905 [BE-API-009] be-api: Implement track search endpoint
- Added GET /tracks/search route in setupTrackRoutes
- Initialized TrackSearchService and set it in TrackHandler
- Handler SearchTracks and TrackSearchService already existed
- Supports query params: q, genre, artist, page, limit
- Service handles pagination, filtering, and returns tracks with pagination metadata

Phase: PHASE-2
Priority: P1
Progress: 18/267 (6.7%)
2025-12-23 10:45:08 +01:00
senke
15339a1221 [BE-API-008] be-api: Implement user search endpoint
- Created SearchUsers method in UserService with pagination support
- SearchUsers searches by username, email, first_name, and last_name using ILIKE
- Added SearchUsers handler in ProfileHandler with query params (q, page, limit)
- Added GET /users/search route in setupUserRoutes
- Returns paginated results with total count
- Password hashes are excluded from results

Phase: PHASE-2
Priority: P1
Progress: 17/267 (6.4%)
2025-12-23 10:42:26 +01:00
senke
10aacb2577 [BE-API-007] be-api: Implement roles management endpoints
- Standardized API responses in RoleHandler (RespondSuccess, RespondWithAppError)
- Added GET /api/v1/roles endpoint
- Added GET /api/v1/roles/:id endpoint
- Added POST /api/v1/users/:userId/roles endpoint
- Added DELETE /api/v1/users/:userId/roles/:roleId endpoint
- Created setupRoleRoutes function for role routes
- Handlers support both :id and :userId parameters
- All endpoints require authentication

Phase: PHASE-2
Priority: P1
Progress: 16/267 (6.0%)
2025-12-23 10:39:10 +01:00
senke
d0a67a3d08 [BE-API-006] be-api: Implement chat stats endpoint
- Added GetStats method to ChatService with database access
- Returns active_users (distinct users who sent messages in last 24h)
- Returns total_messages (non-deleted messages count)
- Returns rooms_active (rooms with messages in last 24h)
- Added GetStats handler and GET /chat/stats route
- Updated ChatService to use NewChatServiceWithDB for database access

Phase: PHASE-2
Priority: P1
Progress: 15/267 (5.6%)
2025-12-23 01:51:49 +01:00
senke
c638710906 [BE-API-004] be-api: Implement playlist share link endpoint
- Added POST /playlists/:id/share route in router.go
- Initialized PlaylistShareService and set it in PlaylistService
- Handler CreateShareLink already existed and was fully implemented
- Standardized API response to return shareLink directly
- Route requires ownership or admin permission via middleware

Phase: PHASE-2
Priority: P1
Progress: 14/267 (5.2%)
2025-12-23 01:51:00 +01:00
senke
e266c76d32 [BE-API-003] be-api: Implement playlist search endpoint
- Added GET /playlists/search route in router.go
- Handler SearchPlaylists and service method already existed
- Supports query params: q, user_id, is_public, page, limit
- Service handles pagination, access control, and search filtering
- Route added to protected playlist group

Phase: PHASE-2
Priority: P1
Progress: 13/267 (4.9%)
2025-12-23 01:49:21 +01:00
senke
325e58e755 [BE-API-002] api: Implement playlist collaborators endpoints
- Added routes in router.go: POST, GET, PUT, DELETE /playlists/:id/collaborators
- Applied RequireOwnershipOrAdmin middleware to POST, PUT, DELETE routes
- GET route accessible to collaborators (service layer checks permissions)
- Fixed UpdateCollaboratorPermission handler to use RespondWithAppError
- All handlers already existed in playlist_handler.go
- All endpoints properly authenticated and ownership checks enforced

Phase: PHASE-1
Priority: P0
Progress: 5/267 (1.9%)
2025-12-23 01:41:43 +01:00
senke
8592b3c76b [BE-API-001] api: Implement 2FA endpoints (setup, verify, disable)
- Created TwoFactorHandler with SetupTwoFactor, VerifyTwoFactor, DisableTwoFactor, GetTwoFactorStatus
- Added routes: POST /auth/2fa/setup, POST /auth/2fa/verify, POST /auth/2fa/disable, GET /auth/2fa/status
- Updated LoginResponse DTO to include requires_2fa flag
- Updated Login handler to check 2FA status and return requires_2fa flag when enabled
- Reused existing TwoFactorService (already had QR generation and TOTP verification)
- Added VerifyTOTPCode helper method to TwoFactorService
- All endpoints properly authenticated with RequireAuth middleware

Phase: PHASE-1
Priority: P0
Progress: 4/267 (1.5%)
2025-12-23 01:40:28 +01:00
senke
b01d21f030 [BE-SEC-003] security: Fix ownership verification for playlist updates/deletes
- Added RequireOwnershipOrAdmin middleware to PUT/DELETE /playlists/:id routes
- Created playlistOwnerResolver that loads playlist from DB and returns owner user_id
- Service already handles ownership checks and collaborator permissions
- All existing integration tests pass (TestUpdatePlaylist_AsOwner, TestUpdatePlaylist_NotOwner, TestDeletePlaylist_AsOwner, TestDeletePlaylist_NotOwner)

Phase: PHASE-1
Priority: P0
Progress: 3/267 (1.1%)
2025-12-23 01:37:56 +01:00
senke
1203e51760 fix(MVP-014): Add CORS credentials configuration validation 2025-12-22 23:17:24 +01:00
senke
ecd3d29d25 fix(MVP-009): Fix GetMe endpoint to return full user object from database 2025-12-22 23:03:46 +01:00
senke
34f3468c89 fix(MVP-006): Standardize environment variable names (VITE_API_BASE_URL → VITE_API_URL) 2025-12-22 22:56:37 +01:00
senke
df06693508 stabilizing apps/web: SECOND BATCH - FIXING Playwright 2025-12-17 12:20:42 -05:00
senke
b7b226d1d5 stabilizing veza-backend-api: P1 & P2 2025-12-16 13:34:08 -05:00
senke
54a570bb74 stabilizing veza-backend-api: P0 2025-12-16 11:59:56 -05:00
senke
3c534a59a0 stabilizing veza-backend-api: phase 1 2025-12-16 11:23:49 -05:00
senke
de191cf0fc refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
okinrev
be950522e4 fix(health): make readiness check reflect real dependency state 2025-12-07 14:27:07 +01:00
okinrev
843dff3c92 STABILISATION: phase 3–5 – API contract, tests & chat-server hardening 2025-12-06 17:21:59 +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
2425c15b09 adding initial backend API (Go) 2025-12-03 20:29:37 +01:00