Commit graph

85 commits

Author SHA1 Message Date
senke
a4220bf110 chore(infra): add ClamAV to docker-compose for v0.101 2026-02-18 12:03:14 +01:00
senke
e11984898d chore: consolidate CI, E2E, backend and frontend updates
- CI: workflows updates (cd, ci), remove playwright.yml
- E2E: global-setup, auth/playlists/profile specs
- Remove playwright-report and test-results artifacts from tracking
- Backend: auth, handlers, services, workers, migrations
- Frontend: components, features, vite config
- Add e2e-results.json to gitignore
- Docs: REMEDIATION_PROGRESS, audit archive
- Rust: chat-server, stream-server updates
2026-02-17 16:43:21 +01:00
senke
ea1b60466a fix(backend): remediation plan — tests, playback_analytics, job queue, gamification
Phase 1 - Backend tests:
- Add PlaybackAnalytics to AutoMigrate in setupTestTrackHandler
- Create migration 081_create_playback_analytics.sql for production
- PlaybackAnalyticsService: return ErrTrackNotFound for missing track
- RecordPlay handler: return 404 when track not found
- CreateShare: use RespondSuccess, fix services.ErrTrackNotFound/ErrForbidden
- GetTrackLikes, UnlikeTrack: use RespondSuccess for consistent response
- GetUserLikedTracks test: fix route /users/:id/likes and params
- GetSharedTrack_InvalidToken: set share service in test

Phase 4 - Job queue transcoding:
- Add EnqueueTranscodingJob to JobEnqueuer interface
- Add TypeTranscoding and processTranscodingJob (stub) in JobWorker
- MockJobEnqueuer: implement EnqueueTranscodingJob

Phase 5 - Gamification cleanup:
- Move api_manager.go to internal/api/archive/
- Add archive/README.md documenting archived modules
- Update TODOS_AUDIT.md and FEATURE_STATUS.md
2026-02-17 16:01:45 +01:00
senke
563a1c9001 fix(security): verify track access before download (A04)
- Add TrackDownloadLicenseChecker to verify paid track download rights
- Check marketplace license when track is sold as product and user is not owner
- Return 403 with 'purchase required' message when license missing
2026-02-16 10:23:41 +01:00
senke
d86b27efdc fix(audit-1.8,1.9): implement OAuth user lookup, add cargo audit to CI
- 1.8: Implement GetUserByOAuthID in database.go via federated_identities join
- 1.8: Use OAuth ID lookup first in oauth_service getOrCreateUser
- 1.9: Add cargo audit step to chat-ci.yml and stream-ci.yml

Refs: AUDIT_TECHNIQUE_INTEGRAL_2026_02_15.md items 1.8, 1.9
2026-02-15 14:22:27 +01:00
senke
a08d9f109f feat(api): add PostgreSQL read replica support (3.7)
- Add DATABASE_READ_URL config and InitReadReplica in database package
- Add ForRead() helper for read-only handler routing
- Update TrackService and TrackSearchService to use read replica for reads
- Document setup in DEPLOYMENT_GUIDE.md and .env.template
2026-02-14 22:50:23 +01:00
senke
7f7b6547bc chore: consolidate pending changes (Hyperswitch, PostCard, dashboard, stream server, etc.) 2026-02-14 21:45:15 +01:00
senke
74fa1b4fc9 perf(analytics): optimize GetTrackStats to single query 2026-02-14 18:31:29 +01:00
senke
55ec0a54a6 fix(auth): add Redis lock for concurrent refresh token requests 2026-02-14 18:29:37 +01:00
senke
15c3919311 security(webhooks): extract SSRF validation to internal/validators/url_validator 2026-02-14 18:24:39 +01:00
senke
4ef3a0bc71 chore: add go.work and optional monorepo orchestrator 2026-02-14 18:21:39 +01:00
senke
e49dba240d refactor(backend): add track, notification, webhook repositories 2026-02-14 18:07:04 +01:00
senke
04c25aa24f Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy
Bloc A - Code mort:
- Suppression Studio (components, views, features)
- Suppression gamification + services mock (projectService, storageService, gamificationService)
- Mise à jour Sidebar, Navbar, locales

Bloc B - Frontend:
- Suppression modal.tsx deprecated, Modal.stories (doublon Dialog)
- Feature flags: PLAYLIST_SEARCH, PLAYLIST_RECOMMENDATIONS, ROLE_MANAGEMENT = true
- Suppression 19 tests orphelins, retrait exclusions vitest.config

Bloc C - Backend:
- Extraction routes_auth.go depuis router.go

Bloc D - Rust:
- Suppression security_legacy.rs (code mort, patterns déjà dans security/)
2026-02-14 17:23:32 +01:00
senke
48b5a2e6c9 fix(backend): avoid nil user in GetProfile (userToProfile panic in profile handler test) 2026-02-14 14:07:03 +01:00
senke
5747eedf2f fix(backend): serialize backup_codes as JSON in two_factor_service (fix TestLogin_Requires2FA) 2026-02-14 14:03:43 +01:00
senke
caa23312fe chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt
- Enable TypeScript noUncheckedIndexedAccess and fix 133 resulting errors
  across 46 files with proper null guards, optional chaining, and fallbacks
- Extract education/gamification ghost feature MSW handlers into handlers-ghost.ts
- Add Storybook test plugin documentation in vitest.config.ts
- Document abandoned go-clamd dependency (2017) as tech debt in upload_validator.go

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 23:12:35 +01:00
senke
78db1fa684 fix(security): add SSRF protection, real track access validation, and pagination bounds
- Add IsURLSafe() function to webhook service blocking private IPs,
  localhost, and cloud metadata endpoints (SSRF protection)
- Implement real validate_track_access() in stream server querying DB
  for track visibility, ownership, and purchase status
- Remove dangerous JWT fallback user in chat server that allowed
  deleted users to maintain access with forged credentials
- Add upper limit (100) on pagination in profile, track, and room handlers
- Fix Dockerfile.production healthcheck path to /api/v1/health

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 22:44:03 +01:00
senke
916bff002f chore(backend): config, router, auth, stream service, sanitizer, tests
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 22:19:09 +01:00
senke
80b7c93c9e fix(security): validate exec.Command paths in Go services
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 21:32:38 +01:00
senke
875df12d8b small fixes : cors + login loop 2026-02-07 20:36:48 +01:00
senke
206f6f7a05 security: reduce access token expiry to 5 minutes
- Changed default AccessTokenTTL from 15 minutes to 5 minutes in jwt_service.go
- Updated test mock in mocks_test.go to match new default
- All references to AccessTokenTTL automatically use new value
- Tests pass successfully
- No breaking changes - frontend already handles token refresh
- Action 5.1.1.4 complete
2026-01-15 20:15:45 +01:00
senke
39f7967e1e incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
senke
0eca0729b5 feat: Visual masterpiece - true light mode & premium UI
🎨 **True Light/Dark Mode**
- Implemented proper light mode with inverted color scheme
- Smooth theme transitions (0.3s ease)
- Light mode colors: white backgrounds, dark text, vibrant accents
- System theme detection with proper class application

🌈 **Enhanced Theme System**
- 4 color themes work in both light and dark modes
- Cyber (cyan/magenta), Ocean (blue/teal), Forest (green/lime), Sunset (orange/purple)
- Theme-specific glassmorphism effects
- Proper contrast in light mode

 **Premium Animations**
- Float, glow-pulse, slide-in, scale-in, rotate-in animations
- Smooth page transitions
- Hover effects with depth (lift, glow, scale)
- Micro-interactions on all interactive elements

🎯 **Visual Polish**
- Enhanced glassmorphism for light/dark modes
- Custom scrollbar with theme colors
- Beautiful text selection
- Focus indicators for accessibility
- Premium utility classes

🔧 **Technical Improvements**
- Updated UIStore to properly apply light/dark classes
- Added data-theme attribute for CSS targeting
- Smooth scroll behavior
- Optimized transitions

The app is now a visual masterpiece with perfect light/dark mode support!
2026-01-11 02:32:21 +01:00
senke
7452bd637a stabilisation commit A 2026-01-07 19:39:21 +01:00
senke
a5b347ec9c stabilisation commit 2026-01-04 01:44:23 +01:00
senke
269f0eb2ec fix: resolve stream server compilation errors and integrate chat stability fixes 2026-01-04 01:44:22 +01:00
senke
0950fa30aa [T0-006] test(backend): Ajout tests pour frontend_log_handler
- Tests complets pour frontend_log_handler.go (12 tests)
- Tests couvrent NewFrontendLogHandler et ReceiveLog
- Tests pour tous les niveaux de log (DEBUG, INFO, WARN, ERROR)
- Tests pour gestion des erreurs et validation JSON
- Couverture actuelle: 30.6% (objectif: 80%)

Files: veza-backend-api/internal/handlers/frontend_log_handler_test.go
       VEZA_ROADMAP.json
Hours: 16 estimated, 23 actual
2026-01-04 01:44:22 +01:00
senke
05f719b68f [T0-006] test(backend): Ajout tests pour search_handlers et comment_handler
- Tests complets pour search_handlers.go (6 tests)
- Tests complets pour comment_handler.go (12 tests)
- Interfaces créées pour permettre le mock (SearchServiceInterface, CommentServiceInterface)
- Couverture actuelle: 30.6% (objectif: 80%)

Files: veza-backend-api/internal/handlers/search_handlers.go
       veza-backend-api/internal/handlers/search_handlers_test.go
       veza-backend-api/internal/handlers/comment_handler.go
       veza-backend-api/internal/handlers/comment_handler_test.go
       VEZA_ROADMAP.json
Hours: 16 estimated, 17 actual
2026-01-04 01:44:21 +01:00
senke
c7a048caf5 [T0-006] test(backend): Ajout tests service role - Progression couverture
- Tests complets pour role_service (24 tests, tous passent)
- Tests couvrent NewRoleService, GetRoles, CreateRole, GetRole, UpdateRole, DeleteRole, AssignRoleToUser, RevokeRoleFromUser, GetUserRoles, HasRole, HasPermission
- Tests utilisent SQLite en mémoire avec GORM
- Hook GORM ajouté dans UserRole.BeforeCreate pour remplir automatiquement RoleName depuis RoleID
- Couverture actuelle: 31.1% (objectif: 80%)

Files:
- veza-backend-api/internal/services/role_service_test.go (créé)
- veza-backend-api/internal/models/role.go (modifié - hook BeforeCreate)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 17 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
bb9fecf42a [T0-006] test(backend): Ajout tests service email - Progression couverture
- Tests complets pour email_service (28 tests, tous passent, 1 skip car nécessite DB réelle)
- Tests couvrent SendVerificationEmail, SendWelcomeEmail, SendNotificationEmail, buildVerificationEmailHTML, buildWelcomeEmailHTML, buildNotificationEmailHTML, generateVerificationToken, sendEmail
- Tests gèrent cas sans SMTP (graceful degradation)
- Tests vérifient différents types de notifications (track_like, new_follower, playlist_update, comment_reply, default)
- Couverture actuelle: 31.1% (objectif: 80%)

Files:
- veza-backend-api/internal/services/email_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 16 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
dc775bb548 [T0-006] test(backend): Ajout tests service account_lockout - Progression couverture
- Tests complets pour account_lockout_service (18 tests, tous passent)
- Tests couvrent NewAccountLockoutService, RecordFailedAttempt, RecordSuccessfulLogin, IsAccountLocked, LockAccount, UnlockAccount, GetFailedAttemptsCount
- Tests utilisent testcontainers pour Redis (skip si non disponible)
- Tests gèrent cas sans Redis (graceful degradation)
- Couverture actuelle: 31.1% (objectif: 80%)

Files:
- veza-backend-api/internal/services/account_lockout_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 15 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
9568a18e6f [T0-006] test(backend): Ajout tests service audit - Progression couverture
- Tests complets pour audit_service (20 tests, tous passent)
- Tests couvrent NewAuditService, LogAction, LogLogin, LogPasswordChange, LogPasswordResetRequest, LogPasswordReset, LogTwoFactorEnabled, LogTwoFactorDisabled
- Tests utilisent SQLite en mémoire
- 2 tests skip car bug dans service (UserID nil cause nil pointer dereference)
- Couverture actuelle: 31.1% (objectif: 80%)

Files:
- veza-backend-api/internal/services/audit_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 14 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
bbcbe82aee [T0-006] test(backend): Ajout tests service job - Progression couverture
- Tests complets pour job_service (14 tests, tous passent)
- Tests couvrent NewJobService, SetJobEnqueuer, EnqueueEmail, EnqueueThumbnail
- Mock JobEnqueuer créé pour tester le service
- Tests utilisent testify/mock pour vérifier les appels
- Couverture actuelle: 30.2% (objectif: 80%)

Files:
- veza-backend-api/internal/services/job_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 13 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
50d0bd850e [T0-006] test(backend): Ajout tests service backup - Progression couverture
- Tests complets pour backup_service (15 tests, tous passent)
- Tests couvrent NewBackupService, CleanupOldBackups, ListBackups
- Tests utilisent fichiers temporaires pour tester nettoyage et listing
- 1 test skip car nécessite PostgreSQL pg_dump
- Couverture actuelle: 30.2% (objectif: 80%)

Files:
- veza-backend-api/internal/services/backup_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 12 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
38fcf093f7 [T0-006] test(backend): Ajout tests service metadata - Progression couverture
- Tests complets pour metadata_service (14 tests, tous passent)
- Tests couvrent NewMetadataService, ValidateMetadata, getDefaultMetadata, ExtractMetadata
- Tests utilisent fichiers temporaires pour tester extraction metadata
- Tests gèrent différents formats de chemins (Unix, Windows, relatifs)
- Couverture actuelle: 30.2% (objectif: 80%)

Files:
- veza-backend-api/internal/services/metadata_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 11 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
fe6ba9c467 [T0-006] test(backend): Ajout tests service password - Progression couverture
- Tests complets pour password_service (15 tests, tous passent)
- Tests couvrent GetUserByEmail, GeneratePasswordResetToken, ResetPassword, ValidatePassword, ChangePassword, UpdatePassword, GenerateJWT
- Certains tests skip car nécessitent PostgreSQL NOW() (non disponible en SQLite)
- Tests utilisent SQLite en mémoire
- Couverture actuelle: 30.2% (objectif: 80%)

Files:
- veza-backend-api/internal/services/password_service_integration_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 10 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
e31329d7c9 [T0-006] test(backend): Ajout tests service notification - Progression couverture
- Tests complets pour notification_service (15 tests, tous passent)
- Tests couvrent CreateNotification, GetNotifications, MarkAsRead, MarkAllAsRead, GetUnreadCount
- Tests utilisent SQLite en mémoire
- Couverture actuelle: 30.7% (objectif: 80%)

Files:
- veza-backend-api/internal/services/notification_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 9 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
3df93fd094 [T0-006] test(backend): Ajout tests services social et cache - Progression couverture
- Tests complets pour social_service (18 tests, tous passent)
- Tests complets pour cache_service (20 tests, tous passent)
- Tests utilisent SQLite en mémoire pour social_service
- Tests utilisent Redis local pour cache_service (skip si non disponible)
- Couverture actuelle: 30.7% (objectif: 80%)

Files:
- veza-backend-api/internal/services/social_service_test.go (créé)
- veza-backend-api/internal/services/cache_service_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 8 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
1a0d2bb7c9 [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
c363d6ede6 [LOGGING] Fix #11: Amélioration propagation request_id vers services Rust - Ajout dans webhook_service, refactorisation stream_service 2026-01-04 01:44:16 +01:00
senke
a73c36b3e6 [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
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
5e91395f88 [BE-SVC-014] be-svc: Implement monitoring and alerting
- Created monitoring and alerting service with Prometheus integration
- Support for alert rules with thresholds and severities
- Alert firing and resolution tracking
- Notification callbacks for alert events
- Continuous monitoring with configurable intervals
- Default alert rules for common scenarios
- Prometheus query evaluation and threshold checking
- Comprehensive unit tests for core functionality
2025-12-24 16:54:19 +01:00
senke
040620e27d [BE-SVC-013] be-svc: Implement CDN integration
- Created CDN service with support for multiple providers
- Support for CloudFront, Cloudflare, and generic CDN
- URL generation for assets, audio, HLS streams, and images
- Cache invalidation with batch support
- Signed URL generation for private content
- Cache headers configuration
- Provider abstraction for easy switching
- Comprehensive unit tests for all functionality
2025-12-24 16:52:06 +01:00
senke
5020aad0c5 [BE-SVC-012] be-svc: Implement HLS streaming service
- Enhanced HLS streaming service with additional features
- Stream validation and health checks
- URL generation for master and quality playlists
- Stream cleanup and management
- Statistics and monitoring
- Stream listing with filtering and pagination
- Status updates and existence checks
- Comprehensive unit tests for core functionality
2025-12-24 16:49:57 +01:00
senke
6c09d64f34 [BE-SVC-011] be-svc: Implement audio transcoding service
- Created AudioTranscodeService with FFmpeg support
- Support for multiple audio formats (MP3, AAC, FLAC, OGG, WAV, M4A)
- Configurable bitrates and quality presets (low, medium, high, lossless)
- Sample rate and channel configuration
- Timeout handling and error management
- Transcode and TranscodeMultiple methods
- FFmpeg availability checking
- Audio metadata extraction using ffprobe
- Format validation and codec selection
- Comprehensive unit tests for core functionality
2025-12-24 16:47:48 +01:00
senke
7aa5458e3c [BE-SVC-010] be-svc: Implement image processing service
- Enhanced image processing service with multiple features
- Support for multiple image sizes (thumbnail, small, medium, large)
- Multiple output formats (JPEG, PNG, WebP)
- Configurable quality settings and processing options
- ProcessImage with customizable options
- ProcessAvatar for optimized avatar processing
- ProcessImageMultipleSizes for batch processing
- OptimizeImage for target file size optimization
- Image format conversion and validation
- Comprehensive unit tests for core functions
2025-12-24 16:44:58 +01:00
senke
22169cbbef [BE-SVC-009] be-svc: Implement notification service
- Created Notification model for GORM with proper relationships
- Enhanced NotificationService with GORM-based implementation
- Features: pagination, filtering by type/read status, batch creation
- Mark as read (single and all), deletion (single and all read)
- Unread count and notification types listing
- Comprehensive unit tests for all operations
- Better error handling and logging
2025-12-24 16:41:11 +01:00
senke
d719e0da03 [BE-SVC-008] be-svc: Implement analytics aggregation service
- Created AnalyticsAggregationService for analytics_events table
- Aggregation by event type and time period (hour, day, week, month)
- Support for filtering by event names and user ID
- Features: event counts, unique users, average per user, payload summary
- Top events ranking and user activity counts
- Uses PostgreSQL date_trunc and to_char for period grouping
- Added unit tests for service validation and helper functions
2025-12-24 16:38:09 +01:00