14 audit site 2026 07 05 - LaurentSta/Oneduc GitHub Wiki

14 — Audit site du 5 juillet 2026

Public : développeurs.

📦 Page archivée le 14 juillet 2026. Conservée pour l'historique — les 8 points de la section Points à corriger ci-dessous ont tous été corrigés (6 le 5 juillet lui-même via les correctifs S3 à S9, les 2 derniers le 14 juillet) et le tableau a été mis à jour en conséquence, mais le suivi actif se fait désormais sur l'audit du 14 juillet 2026, qui est la référence à jour. Cette page n'est plus listée dans la table des matières principale du wiki.

Périmètre consulté

Audit réalisé depuis /var/www/Oneduc_Dev, en environnement local, avec le serveur Laravel lancé sur http://127.0.0.1:8010.

Axe Couverture
Routes php artisan route:list --json, regroupement par préfixe et middleware
Pages publiques Crawl HTTP des routes GET publiques sans paramètres
Espaces protégés Analyse des routes, contrôleurs, vues et tests automatisés
Wiki Relecture des pages docs/wiki/*.md et correction des chiffres périmés
Validation php artisan test, npm run build, php artisan migrate:status, php artisan about

Les routes avec paramètres (/categorie/{id}, /modules/{module}, sessions live, modules stagiaires, etc.) n'ont pas été crawlées en HTTP complet, car elles dépendent d'un jeu de données précis. Elles restent couvertes par l'analyse route/code et par les tests existants quand un scénario automatisé est présent.


État des routes

php artisan route:list --json retourne 411 routes.

Espace Nombre de routes Middleware dominant
/formateur 144 auth, role:formateur, association.member
/admin 128 auth, role:admin, admin.activity
/stagiaire 49 auth, role:stagiaire, track.time, puis force.password.change hors première connexion
/observateur 9 auth, role:observateur
Routes publiques, auth partagée, SCORM et outils live 81 variable selon usage

Le site conserve une séparation claire par rôle, mais plusieurs routes critiques restent hors policy centralisée : visibilité module, lecture SCORM et connexion par code.


Crawl HTTP public

23 routes GET publiques sans paramètres ont été testées.

Statut Nombre Détail
HTTP 200 22 Accueil, catalogue, pages légales, connexion, inscription formateur, contact, nuage de mots public, accès stagiaire, etc.
HTTP 500 1 /inscription

Erreur relevée sur /inscription :

Call to undefined method App\Http\Controllers\UserController::Register()

La route est déclarée dans routes/web.php, mais UserController::Register() n'existe plus. La page /inscription-formateur fonctionne et semble être l'entrée publique réellement utilisée depuis l'accueil.


Validations techniques

Commande Résultat
php artisan test 103 tests passés, 1 échec, 505 assertions
npm run build Réussi, avec avertissements Vite sur directives "use client" et chunks supérieurs à 500 kB
php artisan migrate:status 5 migrations post-baseline marquées Ran
php artisan about --only=environment,cache,drivers Laravel 11.42.0, PHP 8.3.6, DB MySQL, queue/session/cache database

Échec de test identifié :

Tests\Feature\Formateur\ModuleBuilderTest
Invalid expectation value type. Expected [string].
tests/Feature/Formateur/ModuleBuilderTest.php:59

Le test attend un champ JSON path après upload d'image dans le builder formateur. Le contrôleur ModuleBuilderController::uploadImage() retourne actuellement media_id et url via Spatie Media Library. Il faut clarifier le contrat attendu par l'éditeur de blocs : stockage par chemin historique ou référence media library.


Points à corriger

Priorité Point Localisation Impact État
Haute /inscription en erreur 500 routes/web.php Page publique cassée ✅ Corrigé le 05/07/2026 — redirection 301 vers /inscription-formateur
Haute Test ModuleBuilder rouge tests/Feature/Formateur/ModuleBuilderTest.php, ModuleBuilderController::uploadImage() Contrat d'upload image instable ✅ Corrigé le 05/07/2026 — test aligné sur le contrat media_id/url
Haute Connexion stagiaire par code sans throttling POST /stagiaire/connexion-code Brute-force possible sur code 6 caractères ✅ Corrigé le 05/07/2026 — rate limiter connexion-code (10/min/IP)
Haute Accès module trop large Module::isVisibleTo() Un module actif peut être visible hors affectation groupe selon la route ✅ Corrigé le 05/07/2026 (méthode) puis le 08/07 et le 14/07/2026 (les deux derniers points d'accès qui ne l'appelaient pas encore : Frontend\LectureController puis StagiaireController::StagiaireModuleDetail())
Haute SCORM legacy écrit last_session_time absent de scorm_scores SCORMController::handleSessionTime() Erreur SQL possible sur cmi.core.session_time ✅ Corrigé le 05/07/2026 — colonne ajoutée par migration
Moyenne LessonFeedbackController::store() redirige vers module.lesson, route inexistante app/Http/Controllers/LessonFeedbackController.php Erreur possible lors d'un retour leçon ✅ Corrigé le 05/07/2026
Moyenne FormRequests retournant authorize() = false StoreModuleRequest, StoreGroupeRequest Classes inutilisables en l'état ✅ Corrigé le 14/07/2026 — authorize() retourne true, conforme à la convention du reste du projet
Basse Import mort ScormInteractionController routes/scorm.php Dette technique ✅ Corrigé le 05/07/2026 (retiré avec le correctif S7)

Détail des deux derniers correctifs (accès module et FormRequests) dans l'audit du 14 juillet 2026.


Replanification de l'audit

Étape Objectif Sortie attendue État au 14/07/2026
1. Santé publique Corriger /inscription, vérifier les pages publiques et liens de navigation principaux Crawl public 100% HTTP 200 ou redirections volontaires ✅ Fait — crawl public re-testé le 14/07, 0 erreur 500
2. Contrats backend/frontend Stabiliser le contrat d'upload image du builder et remettre php artisan test au vert Suite tests verte ✅ Fait — 268 tests verts au 14/07
3. Sécurité accès Throttle connexion par code, policies module/groupe/leçon, garde SCORM Routes sensibles documentées et testées ✅ Throttle, garde SCORM et isVisibleTo() (tous points d'accès) faits ; policies Laravel dédiées (ModulePolicy, GroupPolicy, LecturePolicy) toujours en Phase 2 de la roadmap
4. Données LMS Corriger temps SCORM legacy, interactions SCORM, multi-groupe stagiaire Analytics plus fiables ⏳ last_session_time corrigé ; scorm_interactions et multi-groupe stagiaire restent en dette technique (voir roadmap)
5. Publication Scan secrets/historique Git, checklist GitHub, README principal Dépôt publiable sans dette bloquante connue ⏳ Non traité dans cet audit — voir Checklist de publication

Retour au wiki