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 |