veza/apps/web/AUDIT_ISSUES.json
2025-12-17 08:07:35 -05:00

502 lines
19 KiB
JSON

[
{
"id": "FRONT-001",
"type": "SECURITY",
"severity": "CRITICAL",
"blocking_production": true,
"file": "vite.config.ts",
"line": 64,
"description": "CSP contient 'unsafe-inline' et 'unsafe-eval' dans script-src, permettant l'injection de scripts malveillants",
"fix_recommendation": "Supprimer 'unsafe-inline' et 'unsafe-eval', utiliser des nonces CSP stricts pour tous les scripts inline"
},
{
"id": "FRONT-002",
"type": "SECURITY",
"severity": "CRITICAL",
"blocking_production": true,
"file": "src/services/tokenStorage.ts",
"line": 21,
"description": "Tokens JWT stockés dans localStorage, vulnérables au vol via XSS",
"fix_recommendation": "Migrer vers httpOnly cookies (nécessite backend) ou utiliser sessionStorage avec rotation fréquente des tokens"
},
{
"id": "FRONT-003",
"type": "SECURITY",
"severity": "HIGH",
"blocking_production": false,
"file": "src/features/chat/components/ChatMessages.tsx",
"line": 102,
"description": "Utilisation de dangerouslySetInnerHTML pour afficher les messages de chat, risque XSS si sanitisation échoue",
"fix_recommendation": "Vérifier que sanitizeChatMessage est robuste, considérer une alternative comme un parser markdown sécurisé"
},
{
"id": "FRONT-004",
"type": "SECURITY",
"severity": "HIGH",
"blocking_production": false,
"file": "src/features/chat/components/VirtualizedChatMessages.tsx",
"line": 79,
"description": "Utilisation de dangerouslySetInnerHTML pour afficher les messages de chat, risque XSS si sanitisation échoue",
"fix_recommendation": "Vérifier que sanitizeChatMessage est robuste, considérer une alternative comme un parser markdown sécurisé"
},
{
"id": "FRONT-005",
"type": "BUG",
"severity": "HIGH",
"blocking_production": false,
"file": "src/services/api.ts",
"line": 19,
"description": "Hardcoding de 'http://localhost:8080/api/v1' comme fallback, risque de build de production avec URLs de développement",
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
},
{
"id": "FRONT-006",
"type": "BUG",
"severity": "HIGH",
"blocking_production": false,
"file": "src/services/websocket.ts",
"line": 47,
"description": "Hardcoding de 'ws://localhost:8081/ws' comme fallback, risque de build de production avec URLs de développement",
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
},
{
"id": "FRONT-007",
"type": "BUG",
"severity": "HIGH",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 53,
"description": "Hardcoding de 'http://localhost:8080/api/v1' comme fallback, risque de build de production avec URLs de développement",
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
},
{
"id": "FRONT-008",
"type": "BUG",
"severity": "HIGH",
"blocking_production": false,
"file": "src/services/tokenRefresh.ts",
"line": 11,
"description": "Hardcoding de 'http://localhost:8080/api/v1' comme fallback, risque de build de production avec URLs de développement",
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement en production"
},
{
"id": "FRONT-009",
"type": "UI_UX",
"severity": "HIGH",
"blocking_production": false,
"file": "src/features/auth/components/LoginForm.tsx",
"line": 47,
"description": "Erreur de login loggée dans console.error mais pas toujours affichée à l'utilisateur de manière visible",
"fix_recommendation": "S'assurer que toutes les erreurs sont affichées via un système de toast/notification visible"
},
{
"id": "FRONT-010",
"type": "UI_UX",
"severity": "HIGH",
"blocking_production": false,
"file": "src/features/auth/components/RegisterForm.tsx",
"line": 58,
"description": "Erreur d'inscription loggée dans console.error mais pas toujours affichée à l'utilisateur de manière visible",
"fix_recommendation": "S'assurer que toutes les erreurs sont affichées via un système de toast/notification visible"
},
{
"id": "FRONT-011",
"type": "TYPESCRIPT",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/utils/csp.ts",
"line": 157,
"description": "Utilisation de 'any' pour les paramètres de middleware, perte de sécurité de type",
"fix_recommendation": "Typer correctement les paramètres req, res, next avec les types Express/Node appropriés"
},
{
"id": "FRONT-012",
"type": "TYPESCRIPT",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/types/api.ts",
"line": 70,
"description": "Utilisation excessive de 'any' dans les types API, perte de sécurité de type",
"fix_recommendation": "Définir des interfaces strictes pour tous les types de données API"
},
{
"id": "FRONT-013",
"type": "PERFORMANCE",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/hooks/useChat.ts",
"line": 34,
"description": "console.log dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-014",
"type": "PERFORMANCE",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/hooks/useChat.ts",
"line": 62,
"description": "console.log dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-015",
"type": "PERFORMANCE",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/hooks/useChat.ts",
"line": 68,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-016",
"type": "PERFORMANCE",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/hooks/useChat.ts",
"line": 99,
"description": "console.warn dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-017",
"type": "PERFORMANCE",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/hooks/useChat.ts",
"line": 133,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-018",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/hooks/useChat.ts",
"line": 124,
"description": "TODO: Add fetchHistory function - fonctionnalité manquante",
"fix_recommendation": "Implémenter la fonction fetchHistory ou documenter pourquoi elle n'est pas nécessaire"
},
{
"id": "FRONT-019",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/components/ChatSidebar.tsx",
"line": 110,
"description": "TODO: Button to create new conversation - fonctionnalité manquante",
"fix_recommendation": "Implémenter le bouton de création de conversation ou le retirer du code"
},
{
"id": "FRONT-020",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/services/websocket.ts",
"line": 191,
"description": "TODO: Implement removal for other event types if needed - code incomplet",
"fix_recommendation": "Implémenter la logique complète ou documenter pourquoi elle n'est pas nécessaire"
},
{
"id": "FRONT-021",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/tracks/components/TrackSearchResults.tsx",
"line": 128,
"description": "TODO: Implement play functionality - fonctionnalité manquante",
"fix_recommendation": "Implémenter la fonctionnalité de lecture ou retirer le code"
},
{
"id": "FRONT-022",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/profile/components/FollowButton.tsx",
"line": 29,
"description": "TODO: Call API to follow/unfollow - fonctionnalité manquante",
"fix_recommendation": "Implémenter l'appel API pour suivre/ne plus suivre un utilisateur"
},
{
"id": "FRONT-023",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/playlists/services/playlistService.ts",
"line": 198,
"description": "TODO: Replace with actual API call when backend is ready - code mock",
"fix_recommendation": "Remplacer par l'appel API réel ou documenter le statut du backend"
},
{
"id": "FRONT-024",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/playlists/components/PlaylistAnalytics.tsx",
"line": 60,
"description": "TODO: T0491 - Remplacer par l'appel API réel une fois le backend implémenté",
"fix_recommendation": "Implémenter l'appel API réel ou documenter le statut"
},
{
"id": "FRONT-025",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/library/pages/LibraryPage.tsx",
"line": 40,
"description": "TODO: Show toast success - feedback utilisateur manquant",
"fix_recommendation": "Ajouter un toast de succès pour informer l'utilisateur"
},
{
"id": "FRONT-026",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/library/pages/LibraryPage.tsx",
"line": 43,
"description": "TODO: Show toast error - feedback utilisateur manquant",
"fix_recommendation": "Ajouter un toast d'erreur pour informer l'utilisateur"
},
{
"id": "FRONT-027",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/library/components/LibraryManager.tsx",
"line": 257,
"description": "isLiked={() => false} // Todo - fonctionnalité incomplète",
"fix_recommendation": "Implémenter la logique de vérification du statut 'liked'"
},
{
"id": "FRONT-028",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/chat/components/ChatInterface.tsx",
"line": 9,
"description": "TODO: wsService should be replaced with websocketService or a proper chat service",
"fix_recommendation": "Refactoriser pour utiliser le service WebSocket approprié"
},
{
"id": "FRONT-029",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/features/library/components/LibraryManager.tsx",
"line": 112,
"description": "console.log('Edit track', originalTrack); // Temporary - code temporaire à supprimer",
"fix_recommendation": "Supprimer ce console.log temporaire ou implémenter la fonctionnalité d'édition"
},
{
"id": "FRONT-030",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/config/env.ts",
"line": 37,
"description": "console.error dans le code de production, devrait utiliser un logger",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-031",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/components/ErrorBoundary.tsx",
"line": 40,
"description": "console.error dans le code de production, acceptable pour ErrorBoundary mais devrait être conditionnel",
"fix_recommendation": "Garder pour ErrorBoundary mais considérer un service de logging externe en production"
},
{
"id": "FRONT-032",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/stores/auth.ts",
"line": 87,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-033",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/api/auth.ts",
"line": 138,
"description": "console.warn dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-034",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/features/player/hooks/useStreamSync.ts",
"line": 66,
"description": "console.log dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-035",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/features/player/hooks/useStreamSync.ts",
"line": 82,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-036",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/api.ts",
"line": 414,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-037",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 89,
"description": "console.debug dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-038",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 94,
"description": "console.warn dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-039",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 139,
"description": "console.debug dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-040",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 142,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-041",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 183,
"description": "console.debug dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-042",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 186,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-043",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 206,
"description": "console.warn dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-044",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 236,
"description": "console.warn dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-045",
"type": "PERFORMANCE",
"severity": "LOW",
"blocking_production": false,
"file": "src/services/secure-auth.ts",
"line": 269,
"description": "console.error dans le code de production, pollution des logs",
"fix_recommendation": "Remplacer par un logger conditionnel basé sur import.meta.env.DEV"
},
{
"id": "FRONT-046",
"type": "BUG",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/config/constants.ts",
"line": 7,
"description": "Fallback hardcodé vers 127.0.0.1, devrait utiliser uniquement les variables d'environnement en production",
"fix_recommendation": "Supprimer les fallbacks localhost/127.0.0.1 ou les rendre conditionnels (dev uniquement)"
},
{
"id": "FRONT-047",
"type": "BUG",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/config/env.ts",
"line": 6,
"description": "Fallback hardcodé vers 127.0.0.1, devrait utiliser uniquement les variables d'environnement en production",
"fix_recommendation": "Supprimer les fallbacks localhost/127.0.0.1 ou les rendre conditionnels (dev uniquement)"
},
{
"id": "FRONT-048",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/stores/chat.ts",
"line": 248,
"description": "Erreur lors du chargement des conversations loggée mais pas affichée à l'utilisateur",
"fix_recommendation": "Afficher un toast/notification d'erreur à l'utilisateur"
},
{
"id": "FRONT-049",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/stores/chat.ts",
"line": 269,
"description": "Erreur lors de la création de conversation loggée mais pas affichée à l'utilisateur",
"fix_recommendation": "Afficher un toast/notification d'erreur à l'utilisateur"
},
{
"id": "FRONT-050",
"type": "UI_UX",
"severity": "MEDIUM",
"blocking_production": false,
"file": "src/features/streaming/hooks/usePlaybackRealtime.ts",
"line": 147,
"description": "Hardcoding de 'http://localhost:8080' comme fallback pour l'URL API",
"fix_recommendation": "Supprimer le fallback localhost, forcer l'utilisation de variables d'environnement"
}
]