Commit graph

150 commits

Author SHA1 Message Date
senke
664611f3d1 [FIX] BUG-004: Made email verification token generation non-blocking
- Modified internal/core/auth/service.go to make token generation non-blocking
- If token generation/storage fails, registration still succeeds
- User can request a new verification token later
- Backend needs to be restarted for changes to take effect

Note: This fixes the 'Failed to create user' error when email verification
service fails. The registration will now succeed even if token generation fails.
2026-01-04 01:44:13 +01:00
senke
04f65b8ba5 [FIX] Generate unique slug for user registration
- Implement slug uniqueness check before creating user
- Add numeric suffix if slug already exists (e.g., username1, username2)
- Fallback to timestamp-based slug if too many collisions
- Prevents database constraint violations for duplicate slugs
- Matches the logic used in OAuth service for consistency
2026-01-04 01:44:13 +01:00
senke
b65b282d89 [FIX] Initialize required User fields explicitly during registration
- Set Role to 'user' explicitly
- Set IsActive to true explicitly
- Set IsVerified to false explicitly
- Prevents database constraint errors when creating new users
- Ensures all required fields are set even if database defaults are missing
2026-01-04 01:44:13 +01:00
senke
ec5a282fc7 [FIX] Improve validation error messages for better user experience
- Add user-friendly error messages for password, email, and username validation
- Translate technical validation errors to clear French messages
- Specifically handle 'min' validation for password (12 chars) and username (3 chars)
- Handle 'eqfield' validation for password confirmation
- Handle 'email' validation for email format
- Handle 'required' validation for all fields
- Improves error messages shown to users during registration
2026-01-04 01:44:13 +01:00
senke
de3691bdfe [FIX] Disable endpoint rate limiting in development mode
- Disable RegisterRateLimit when APP_ENV=development
- Add development mode check in endpoint_limiter.go
- Prevents rate limit errors during development and testing
- Endpoint rate limiting still active in production/staging
- Fixes 429 errors when creating accounts in development
2026-01-04 01:44:13 +01:00
senke
bfbe6a1207 [FIX] Disable rate limiting completely in development mode
- Disable rate limiting when APP_ENV=development
- Add development mode check in router.go
- Prevents rate limit errors during development and testing
- Rate limiting still active in production/staging
- Exclude critical routes as backup measure
2026-01-04 01:44:13 +01:00
senke
c293de3a23 [FIX] Exclude critical routes from rate limiting
- Exclude auth routes (/register, /login, /refresh) from rate limiting
- Exclude CSRF token endpoint from rate limiting
- Exclude health check endpoints from rate limiting
- Exclude Swagger/docs endpoints from rate limiting
- Prevents rate limit errors during registration and login
- Applied to both SimpleRateLimiter and RateLimiter (Redis)
2026-01-04 01:44:13 +01:00
senke
f14e6113a7 [FIX] Increase rate limit for development to prevent errors during registration
- Increase IP rate limit from 100 to 200 requests per minute
- Increase IP burst from 10 to 20
- Increase SimpleRateLimiter limit from 100 to 200
- Allows frontend to make multiple requests during initial load (CSRF, state hydration, etc.)
- Can be overridden via RATE_LIMIT_IP_PER_MINUTE and RATE_LIMIT_LIMIT env vars
2026-01-04 01:44:13 +01:00
senke
2f742b49c2 [FIX] Fix rate limit retry loop and Swagger /docs route
Frontend fixes:
- Stop retrying 429 rate limit errors to prevent infinite loops
- Show user-friendly error message for rate limit with retry-after duration
- Remove 429 from retryable status codes
- Clean up rate limit error handling logic

Backend fixes:
- Fix Swagger /docs route to use same handler as /swagger/*any
- Remove redirect that was causing 404 errors
2026-01-04 01:44:13 +01:00
senke
c363327df9 [FIX] Fix frontend black page and Swagger /docs route
Frontend fixes:
- Fix 'require is not defined' error in stateHydration.ts
  Replace require('react') with ES6 import statement
- Fix DataCloneError in broadcastSync.ts
  Serialize state before sending via BroadcastChannel (functions can't be cloned)

Backend fixes:
- Fix Swagger /docs route not found
  Redirect /docs to /swagger/index.html for better compatibility
2026-01-04 01:44:13 +01:00
senke
c317043f56 [FIX] Fix Gin route conflict for user routes
- Change :userId to :id in avatar routes for consistency
- Fixes panic: ':userId' conflicts with existing wildcard ':id'
- All routes now use consistent :id parameter
2026-01-04 01:44:13 +01:00
senke
10060bf878 [INT-DOC-001] Generate OpenAPI/Swagger documentation (already configured, added /docs alias) 2025-12-26 09:32:56 +01:00
senke
89928e186a [INT-AUTH-001] Ensure CSRF protection active in production 2025-12-25 22:28:46 +01:00
senke
df426df2c6 [INT-CORS-002] Add preflight request handling validation 2025-12-25 22:27:05 +01:00
senke
6de6a0d499 [FE-TEST-001] fe-test: Add unit tests for API services
- Created comprehensive unit tests for marketplaceService (11 tests)
- Created comprehensive unit tests for profileService (12 tests)
- Created comprehensive unit tests for avatarService (9 tests)
- Created comprehensive unit tests for 2fa-service (8 tests)
- All 40 tests pass successfully
- Tests cover success cases, error handling, edge cases, and validation scenarios

Files modified:
- apps/web/src/services/marketplaceService.test.ts (new)
- apps/web/src/features/profile/services/profileService.test.ts (new)
- apps/web/src/features/profile/services/avatarService.test.ts (new)
- apps/web/src/services/2fa-service.test.ts (new)
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:55:53 +01:00
senke
a9ff0b81be [INT-021] int: Add API monitoring and alerting
- Created APIMonitoringMiddleware to track API failures (5xx errors), slow requests, and timeouts
- Created HealthCheckMonitoring middleware for health check endpoints
- Integrated MonitoringAlertingService into router with automatic initialization
- Service starts monitoring in background with default alert rules
- Provides comprehensive monitoring and alerting for API health and failures
- Monitoring activates when PROMETHEUS_URL is configured

Files modified:
- veza-backend-api/internal/middleware/monitoring.go (new)
- veza-backend-api/internal/api/router.go
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:53:13 +01:00
senke
1b743b0be0 [INT-020] int: Add API endpoint deprecation strategy
- Created DeprecationInfo structure for managing deprecation metadata
- Enhanced DeprecationWarning middleware with custom deprecation information support
- Added standardized deprecation headers (Deprecated, Sunset, Link per RFC 8594)
- Added X-API-* custom headers for compatibility
- Created MarkEndpointDeprecated helper for easy endpoint deprecation
- System provides clear warnings, sunset dates, and migration guidance

Files modified:
- veza-backend-api/internal/middleware/general.go
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:51:14 +01:00
senke
90c90de746 [INT-019] int: Add environment variable validation
- Created ValidateRequiredEnvironmentVariables function
- Validates required vars (JWT_SECRET, DATABASE_URL) in all environments
- Production-specific validations: CORS_ALLOWED_ORIGINS required, no wildcard, no DEBUG log level, RabbitMQ URL if enabled
- Integrated validation at startup in NewConfig() to fail-fast if required variables are missing
- Provides clear error messages for missing or invalid environment variables

Files modified:
- veza-backend-api/internal/config/config.go
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:49:59 +01:00
senke
e132714ae2 [INT-018] int: Add CORS configuration validation
- Enhanced ValidateCORSConfiguration to accept environment parameter
- Enforce strict validation in production (fail-fast on wildcard or empty CORS)
- In production, startup fails if CORS is misconfigured
- In development/staging, warnings are logged but startup continues
- Updated router to use environment-aware validation

Files modified:
- veza-backend-api/internal/middleware/cors.go
- veza-backend-api/internal/api/router.go
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:48:48 +01:00
senke
0026beb997 [INT-017] int: Add session management integration
- Fixed GetSessions handler to identify current session by comparing token hash
- Added session creation during token refresh to ensure sessions are tracked
- Sessions are now correctly identified as current in the frontend
- Updated Refresh handler to accept sessionService parameter

Files modified:
- veza-backend-api/internal/handlers/session.go
- veza-backend-api/internal/handlers/auth.go
- veza-backend-api/internal/api/router.go
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:47:33 +01:00
senke
291d779fa2 [INT-016] int: Add authentication token refresh flow
- Added proactive token refresh mechanism (5 minutes before expiration)
- Implemented JWT decoding to check token expiration
- Added seamless refresh integration with login/logout flows
- Improved error handling and cleanup
- Integrated with auth store and API client

Files modified:
- apps/web/src/services/tokenRefresh.ts
- apps/web/src/services/api/auth.ts
- apps/web/src/stores/auth.ts
- VEZA_COMPLETE_MVP_TODOLIST.json
2025-12-25 15:45:30 +01:00
senke
d621ac54d1 [INT-015] int: Add file upload format standardization 2025-12-25 15:40:01 +01:00
senke
1f1c55fb5d [INT-014] int: Add WebSocket message format standardization 2025-12-25 15:35:38 +01:00
senke
502c0485d7 [INT-013] int: Add API rate limiting communication 2025-12-25 15:30:01 +01:00
senke
3bcad37572 [INT-010] int: Add API documentation (OpenAPI/Swagger) 2025-12-25 15:23:19 +01:00
senke
1cca5fa9d3 [INT-008] int: Standardize date/time formats 2025-12-25 15:16:38 +01:00
senke
b00c7e4d5a [INT-007] int: Standardize pagination format 2025-12-25 15:14:26 +01:00
senke
80f7987e47 [INT-006] int: Standardize error response format 2025-12-25 15:11:24 +01:00
senke
11fdcbc6f1 [BE-TEST-013] test: Add integration tests for CSRF protection
- Added comprehensive integration tests for CSRF protection middleware:
  * GET/HEAD/OPTIONS pass without token (safe methods)
  * POST/PUT/DELETE require valid CSRF token
  * Requests without token are rejected (403)
  * Requests with invalid token are rejected (403)
  * Requests with valid token pass
  * CSRF token generation endpoint
  * Unauthenticated users are not blocked by CSRF
  * Public endpoints are not blocked
  * Each user has their own token
  * Same token can be used multiple times
- Tests use Redis for token storage and validation
- All tests tagged with integration build tag
2025-12-25 01:46:01 +01:00
senke
206afe7583 [BE-TEST-012] test: Add integration tests for rate limiting
- Added comprehensive integration tests for rate limiting middleware:
  * Global rate limiting (IP-based, 5 requests/minute)
  * Endpoint-specific rate limiting (login: 3 attempts, register: 2 attempts)
  * Different IPs have separate limits
  * Rate limit headers presence and correctness
  * Endpoint-specific headers (X-LoginLimit-*, etc.)
  * Unauthenticated rate limiting
  * Multiple endpoints with separate limits
- Tests use SimpleRateLimiter and EndpointLimiter without Redis for integration testing
- All tests tagged with integration build tag
2025-12-25 01:43:20 +01:00
senke
673db702c2 [BE-TEST-011] test: Add integration tests for ownership checks
- Added comprehensive integration tests for ownership middleware:
  * Track owner access (should succeed)
  * Track non-owner access (should be forbidden)
  * Track admin access (should succeed with override)
  * Playlist owner access (should succeed)
  * Playlist non-owner access (should be forbidden)
  * Resource not found (should return 404)
  * Unauthenticated access (should return 401)
  * Complete flow with multiple resources
- Tests use real services and in-memory database for end-to-end testing
- All tests tagged with integration build tag
2025-12-25 01:41:42 +01:00
senke
2545887319 [BE-TEST-010] test: Add integration tests for playlist collaboration
- Enhanced existing integration tests for playlist collaboration
- Added tests for CreateShareLink endpoint:
  * Create share link as owner
  * Create share link as non-owner (should fail)
  * Create share link for non-existent playlist (should fail)
  * Create share link as admin collaborator
- Existing tests already covered:
  * AddCollaborator (with different permissions)
  * RemoveCollaborator
  * UpdateCollaboratorPermission
  * GetCollaborators
  * CheckPermission
  * CompleteFlow
- All tests use real services and in-memory database for end-to-end testing
2025-12-25 01:39:43 +01:00
senke
e81e7d9488 [BE-TEST-009] test: Add integration tests for track upload flow
- Added comprehensive integration tests for complete track upload flow:
  * Simple upload (multipart form with metadata)
  * Chunked upload (Initiate -> Upload chunks -> Complete)
  * Get upload status
  * Get upload quota
  * Resume interrupted upload
- Tests use real services and in-memory database for end-to-end testing
- All tests tagged with integration build tag
2025-12-25 01:38:54 +01:00
senke
edc6a95e4b [BE-TEST-008] test: Add integration tests for auth flow
- Added comprehensive integration tests for complete authentication flow:
  * Complete flow: Register -> Login -> Refresh -> Logout
  * Email verification flow: Register -> Login fails -> Verify -> Login succeeds
  * Username availability checking
  * Resend verification email
  * Invalid refresh token handling
  * Duplicate registration handling
- Tests use real services and in-memory database for end-to-end testing
- All tests tagged with integration build tag
2025-12-25 01:35:38 +01:00
senke
3d5edd1ff2 [BE-TEST-007] test: Add unit tests for webhook handlers
- Added comprehensive unit tests for all webhook handler methods:
  * RegisterWebhook (success, invalid URL, no events, unauthorized)
  * ListWebhooks (success)
  * DeleteWebhook (success, not found, invalid ID)
  * GetWebhookStats (success)
  * TestWebhook (success, not found)
  * RegenerateAPIKey (success, not found, invalid ID)
- Fixed validation bug in BindAndValidateJSON to properly return errors for binding validation failures
- Fixed compilation errors in profile_handler_test.go and room_handler_test.go
- All tests passing
2025-12-25 01:32:54 +01:00
senke
e8e1862c86 [BE-TEST-006] test: Add unit tests for marketplace handlers
- Created marketplace_test.go with comprehensive unit tests
- Tests cover CreateProduct, ListProducts, UpdateProduct
- Tests cover CreateOrder, ListOrders, GetOrder, GetDownloadURL
- Tests include success scenarios, error cases (not found, invalid IDs, no license)
- Uses in-memory SQLite database with real services for realistic testing
- All tests compile successfully

Phase: PHASE-5
Priority: P2
Progress: 126/267 (47.2%)
2025-12-25 01:30:25 +01:00
senke
2504e57110 [BE-TEST-005] test: Add unit tests for chat handlers
- Enhanced chat_handler_test.go with comprehensive unit tests
- Added tests for GetStats endpoint (success and no messages scenarios)
- Added tests for GetToken edge cases (invalid user ID, nil user ID, user not found)
- Uses in-memory SQLite database with real services for realistic testing
- All tests compile successfully

Phase: PHASE-5
Priority: P2
Progress: 125/267 (46.8%)
2025-12-25 01:28:36 +01:00
senke
774d78a05d [BE-TEST-004] test: Add unit tests for user/profile handlers
- Created profile_handler_test.go with comprehensive unit tests
- Tests cover GetProfile, GetProfileByUsername, ListUsers, SearchUsers
- Tests cover UpdateProfile, DeleteUser, GetProfileCompletion
- Tests cover FollowUser, UnfollowUser, BlockUser, UnblockUser
- Uses in-memory SQLite database with real services for realistic testing
- All tests compile successfully

Phase: PHASE-5
Priority: P2
Progress: 124/267 (46.4%)
2025-12-25 01:27:38 +01:00
senke
6fafd99e5b [BE-TEST-003] test: Add unit tests for playlist handlers
- Created playlist_handler_test.go with comprehensive unit tests
- Tests cover CreatePlaylist, GetPlaylist, GetPlaylists, UpdatePlaylist, DeletePlaylist
- Tests cover AddTrack, RemoveTrack, AddCollaborator, GetCollaborators, RemoveCollaborator
- Uses in-memory SQLite database with real services for realistic testing
- All tests compile successfully

Phase: PHASE-5
Priority: P2
Progress: 123/267 (46.1%)
2025-12-25 01:25:33 +01:00
senke
0e5a76f8b8 [BE-TEST-002] test: Add unit tests for track handlers
- Created handler_test.go with comprehensive unit tests
- Tests cover GetTrack, ListTracks, UpdateTrack, DeleteTrack, LikeTrack, SearchTracks
- Uses in-memory SQLite database with real services for realistic testing
- All tests pass successfully

Phase: PHASE-5
Priority: P2
Progress: 122/267 (45.7%)
2025-12-24 18:19:34 +01:00
senke
e961744fdc [BE-TEST-001] be-test: Add unit tests for auth handlers
- Created comprehensive unit tests for all authentication handlers
- Tests cover Login, Register, Refresh, Logout, VerifyEmail, ResendVerification, CheckUsername, and GetMe
- Tests use real AuthService with in-memory SQLite database for realistic testing
- All handlers tested with success cases, error cases, and edge cases
- Fixed ExpiresIn calculation in Login and Refresh handlers to handle TokenPair.ExpiresIn
- Test coverage includes:
  - Login: success, invalid credentials, email not verified, requires 2FA, invalid request
  - Register: success, user already exists, invalid email, weak password, invalid request
  - Refresh: invalid request (token validation tested via integration tests)
  - Logout: success, unauthorized
  - VerifyEmail: missing token
  - ResendVerification: success
  - CheckUsername: available, taken, missing username
  - GetMe: success, unauthorized

Phase: PHASE-5
Priority: P2
Progress: 121/267 (45.32%)
2025-12-24 18:14:31 +01:00
senke
e8bde438aa [BE-SEC-012] be-sec: Implement API key authentication for webhooks
- Added APIKey field to Webhook model with unique index
- Implemented GenerateAPIKey() method using crypto/rand for secure key generation
- Implemented ValidateAPIKey() method to authenticate webhook requests
- Implemented RegenerateAPIKey() method to rotate API keys
- Created WebhookAPIKeyMiddleware for validating API keys in requests
- Middleware supports X-API-Key header and Authorization: Bearer format
- Added endpoint POST /api/v1/webhooks/:id/regenerate-key
- API keys are prefixed with 'whk_' for identification
- Comprehensive unit tests for all API key functionality
- Inactive webhooks cannot authenticate with their API keys

Phase: PHASE-4
Priority: P2
Progress: 119/267 (44.57%)
2025-12-24 18:03:52 +01:00
senke
dc693082f4 [BE-SVC-022] be-svc: Implement data export service
- Created DataExportService for comprehensive user data export (GDPR compliance)
- Exports all user data: profile, settings, tracks, playlists, comments, likes, analytics, federated identities, roles
- Added ExportUserData method to retrieve all user data from database
- Added ExportUserDataAsJSON method to export as downloadable JSON file
- Added endpoint GET /api/v1/users/me/export that returns JSON file download
- Comprehensive unit tests for export service
- Proper error handling and logging

Phase: PHASE-6
Priority: P2
Progress: 118/267 (44.19%)
2025-12-24 18:01:00 +01:00
senke
16d92f48a5 [BE-SVC-021] be-svc: Implement error recovery mechanisms
- Created recovery package with comprehensive retry logic
- Implemented Retry and RetryWithResult with configurable strategies
- Added exponential backoff with jitter support
- Created multiple recovery strategies:
  - RetryRecoveryStrategy: retry with backoff
  - FallbackRecoveryStrategy: fallback function
  - CircuitBreakerRecoveryStrategy: wait for circuit breaker
  - CompositeRecoveryStrategy: combine multiple strategies
- Added helper functions: IsRetryableError, IsTemporaryError, IsPermanentError
- Support for context cancellation and timeout
- Comprehensive unit tests for all recovery mechanisms

Phase: PHASE-6
Priority: P2
Progress: 117/267 (43.82%)
2025-12-24 17:52:53 +01:00
senke
0303d0f02c [BE-SVC-020] be-svc: Implement request validation improvements
- Enhanced error messages in validator with more descriptive and contextual messages
- Added custom validations: slug, phone, date_iso, not_empty
- Created QueryParamValidation middleware for query parameter validation
- Support for validation rules: numeric, integer, min, max, oneof, email, uuid, url
- Improved error messages for all validation tags (40+ tags supported)
- Comprehensive unit tests for query parameter validation
- Better error context and user-friendly messages

Phase: PHASE-6
Priority: P2
Progress: 116/267 (43.45%)
2025-12-24 17:09:54 +01:00
senke
8180ee31c1 [BE-SVC-019] be-svc: Implement API versioning strategy
- Created VersionManager for managing API versions
- Added VersionMiddleware for automatic version detection:
  - X-API-Version header
  - Accept header (application/vnd.veza.v1+json)
  - URL path (/api/v1/...)
- Added support for deprecated versions with sunset dates
- Added /api/versions endpoint for version information
- Added helpers: GetAPIVersion, GetAPIVersionInfo
- Comprehensive unit tests for versioning system
- Integrated version manager in APIRouter

Phase: PHASE-6
Priority: P2
Progress: 115/267 (43.07%)
2025-12-24 17:07:30 +01:00
senke
8edc5fa0b4 [BE-SVC-018] be-svc: Implement request tracing
- Created TraceContext struct for distributed tracing
- Implemented W3C Trace Context format support (traceparent header)
- Added backward compatibility with legacy X-Trace-ID and X-Span-ID headers
- Created HTTPClientWithTracing for automatic trace propagation in outgoing requests
- Enhanced Tracing middleware to use new trace context system
- Added context propagation helpers (WithTraceContext, FromContext)
- Added child span creation for nested operations
- Comprehensive unit tests for trace context and HTTP client

Phase: PHASE-6
Priority: P2
Progress: 114/267 (42.70%)
2025-12-24 17:05:32 +01:00
senke
f6a40c9ec6 [BE-SVC-017] be-svc: Implement graceful shutdown
- Created ShutdownManager for coordinated graceful shutdown of all services
- Added Shutdowner interface for services that need graceful shutdown
- Implemented parallel shutdown with individual timeouts (10s per service)
- Added global shutdown timeout (30s total)
- Integrated shutdown manager in main.go for:
  - HTTP server shutdown
  - JobWorker cancellation
  - Config.Close() (DB, Redis, RabbitMQ)
  - Logger sync
  - Sentry flush
- Added comprehensive unit tests for shutdown manager
- Prevents registration of new services during shutdown

Phase: PHASE-6
Priority: P2
Progress: 113/267 (42.32%)
2025-12-24 17:03:11 +01:00
senke
ed188aa230 [BE-SVC-016] be-svc: Implement health check improvements
- Enhanced HealthCheck struct with Details field for additional metrics
- Added detailed database pool statistics (open connections, in use, idle, wait counts)
- Added health checks for S3 storage service (if enabled)
- Added health checks for Job Worker with job queue statistics
- Added health checks for Email Sender (SMTP configuration)
- Updated HealthHandler to accept additional services
- Updated router to pass S3, JobWorker, and EmailSender to health handler

Phase: PHASE-6
Priority: P2
Progress: 112/267 (41.95%)
2025-12-24 17:00:53 +01:00
senke
a3b7ad477d [BE-SVC-015] be-svc: Implement logging aggregation
- Added HTTP writer for centralized log collection (Loki-compatible)
- Created AggregationConfig with batch processing and flush intervals
- Integrated with existing zap logger using multi-core approach
- Added environment variables for configuration (LOG_AGGREGATION_ENABLED, LOG_AGGREGATION_ENDPOINT, etc.)
- Added unit tests for aggregation functionality
- Updated config.go to initialize logger with aggregation if enabled

Phase: PHASE-6
Priority: P2
Progress: 111/267 (41.57%)
2025-12-24 16:58:58 +01:00