2026-02-15 13:44:33 +00:00
package config
import (
"veza-backend-api/internal/repositories"
"veza-backend-api/internal/services"
)
2026-02-22 16:52:50 +00:00
// InitServicesForTest initializes services for integration/E2E tests.
// Exported for use by internal/integration and tests packages.
func ( c * Config ) InitServicesForTest ( ) error {
return c . initServices ( )
}
2026-02-15 13:44:33 +00:00
// initServices initialise tous les services
func ( c * Config ) initServices ( ) error {
// Service de session
c . SessionService = services . NewSessionService ( c . Database , c . Logger )
// Service d'audit
c . AuditService = services . NewAuditService ( c . Database , c . Logger )
// Service TOTP
c . TOTPService = services . NewTOTPService ( c . Database , c . Logger )
// Validateur d'upload
uploadConfig := services . DefaultUploadConfig ( )
// Lire ENABLE_CLAMAV depuis l'environnement (défaut: true pour sécurité en production)
// En développement, peut être désactivé si ClamAV n'est pas disponible
clamAVEnabled := getEnvBool ( "ENABLE_CLAMAV" , true )
uploadConfig . ClamAVEnabled = clamAVEnabled
if ! clamAVEnabled {
c . Logger . Warn ( "ENABLE_CLAMAV=false - ClamAV virus scanning is disabled. This should only be used in development environments." )
}
// MOD-P1-002: Lire CLAMAV_REQUIRED depuis l'environnement (défaut: true pour sécurité)
clamAVRequired := getEnvBool ( "CLAMAV_REQUIRED" , true )
uploadConfig . ClamAVRequired = clamAVRequired
if ! clamAVRequired {
c . Logger . Warn ( "CLAMAV_REQUIRED=false - Uploads will be accepted even if ClamAV is unavailable (degraded mode). This should only be used in development or with alternative security measures." )
}
// Chemin vers clamdscan (exec) - remplace go-clamd abandonné
if p := getEnv ( "CLAMAV_CLAMD_PATH" , "" ) ; p != "" {
uploadConfig . ClamAVClamdPath = p
}
2026-02-18 11:03:14 +00:00
// Adresse ClamAV pour connexion TCP (ex: clamav:3310 en Docker)
if addr := getEnv ( "CLAMAV_ADDRESS" , "" ) ; addr != "" {
uploadConfig . ClamAVAddress = addr
}
2026-02-15 13:44:33 +00:00
var err error
c . UploadValidator , err = services . NewUploadValidator ( uploadConfig , c . Logger )
if err != nil {
return err
}
2026-02-22 17:40:07 +00:00
// Service de cache (only when Redis is available; nil client causes panics)
if c . RedisClient != nil {
c . CacheService = services . NewCacheService ( c . RedisClient , c . Logger )
2026-02-26 18:34:45 +00:00
c . TokenBlacklist = services . NewTokenBlacklist ( c . RedisClient ) // VEZA-SEC-006
2026-02-22 17:40:07 +00:00
}
2026-02-15 13:44:33 +00:00
// Service de playlist
c . PlaylistService = services . NewPlaylistServiceWithDB ( c . Database . GormDB , c . Logger )
// Service de permissions
c . PermissionService = services . NewPermissionService ( c . Database . GormDB )
2026-03-05 18:22:31 +00:00
// JWT Service (v0.9.1: RS256 prefer, HS256 dev fallback)
c . JWTService , err = services . NewJWTService ( c . JWTPrivateKeyPath , c . JWTPublicKeyPath , c . JWTSecret , c . JWTIssuer , c . JWTAudience )
2026-02-15 13:44:33 +00:00
if err != nil {
return err
}
// User Service
userRepo := repositories . NewGormUserRepository ( c . Database . GormDB )
c . UserService = services . NewUserServiceWithDB ( userRepo , c . Database . GormDB )
// BE-SVC-001: Set cache service for UserService
if c . CacheService != nil {
c . UserService . SetCacheService ( c . CacheService )
}
// BE-SVC-001: Set cache service for PlaylistService
if c . CacheService != nil && c . PlaylistService != nil {
c . PlaylistService . SetCacheService ( c . CacheService )
}
feat(developer): add API keys backend (Lot C)
- Migration 082: api_keys table (user_id, name, prefix, hashed_key, scopes, last_used_at, expires_at)
- APIKey model, APIKeyService (Create, List, Delete, ValidateAPIKey)
- APIKeyHandler: GET/POST/DELETE /api/v1/developer/api-keys
- AuthMiddleware: X-API-Key and Bearer vza_* accepted as alternative to JWT
- CSRF: skip for API key auth (stateless)
- Key format: vza_ prefix, SHA-256 hashed storage
2026-02-19 23:18:36 +00:00
// API Key Service (v0.102 Lot C - developer portal)
c . APIKeyService = services . NewAPIKeyService ( c . Database . GormDB , c . Logger )
2026-02-21 04:22:43 +00:00
// Presence Service (v0.301 Lot P1 - user presence for chat/social)
c . PresenceService = services . NewPresenceService ( c . Database . GormDB , c . Logger )
2026-02-15 13:44:33 +00:00
return nil
}