13 publication github - LaurentSta/Oneduc GitHub Wiki
13 — Checklist : prêt à publier sur GitHub
Public : développeurs et mainteneurs du projet.
Cette checklist doit être complétée avant de rendre le dépôt public sur GitHub. Elle couvre quatre axes : sécurité du code, nettoyage de l'historique git, conformité légale, et configuration GitHub.
Axe 1 — Sécurité du code (bloquant)
Ces points doivent être corrigés AVANT de publier. Publier avec ces failles expose vos utilisateurs et donne une carte d'attaque publique.
-
S1 — Route
/admin/stagiaires/{id}/debug-progressionsupprimée ou absente Vérifié le 5 juillet 2026 : aucune routedebug-progressiondansphp artisan route:list --json -
S2 —
POST /admin/stagiaires/{user}/reset-progressionprotégé côté admin Vérifié : routeadmin.stagiaires.resetdansroutes/admin.php, sousauth,role:admin,admin.activity -
S3 — Corriger
Module::isVisibleTo()pour vérifier l'appartenance groupe du stagiaire
Corrigé le 5 juillet 2026 :app/Models/Module.php— stagiaire vérifié viaUser::aAccesAuModule()(groupe actif + module affecté), formateur viaformateur_id/is_trainer_authoredouGroup::scopeAccessibleByTrainer(). Gap restant identifié :StagiaireController::StagiaireModuleDetail()(routestagiaire.module.detail) etFrontend\LectureController(show,showScorm,showScormBlock,showSlides) n'appellent pasisVisibleTo()et n'ont aucune vérification d'appartenance groupe — à traiter en Phase 2. -
S4 — Ajouter throttling sur
/stagiaire/connexion-code
Corrigé le 5 juillet 2026 : rate limiter nomméconnexion-code(10/minute par IP) viaRateLimiter::for()dansAppServiceProvider, appliqué à la route dansroutes/web.php. -
S5 — Corriger
LessonFeedbackController::store()(route inexistante → erreur 500)
Corrigé le 5 juillet 2026 :redirect()->back()remplace la redirection versmodule.lesson(route inexistante). -
S6 — Corriger le cumul temps SCORM legacy Corrigé le 5 juillet 2026 : migration ajoutant
last_session_timeàscorm_scores(même type quecontent_block_scorm_scores). -
S7 — Ajouter la vérification d'appartenance à la leçon dans
POST /scorm/save-progressCorrigé le 5 juillet 2026 :User::aAccesAuModule()appliqué dansSCORMController,ContentBlockScormControlleretEvaluationSCORMController(403 sinon), middlewareauthajouté sur les 3 routes (CSRF reste désactivé pour l'iframe). -
S8 — Corriger la page publique
/inscriptionCorrigé le 5 juillet 2026 : redirection 301 vers/inscription-formateur(seul parcours d'inscription fonctionnel). -
S9 — Remettre
php artisan testau vert Corrigé le 5 juillet 2026 : le test attendaitpath, contrat obsolète antérieur à la migration Media Library. Test mis à jour pour validermedia_id/url(contrat réellement utilisé par le contrôleur et le frontend). Suite complète verte (124 tests).
Axe 2 — Nettoyage de l'historique git (bloquant)
Secrets et fichiers sensibles
Vérifier que ces fichiers ne sont pas dans l'historique git (même supprimés d'un commit récent, ils restent accessibles via git log) :
# Vérifier si .env a jamais été commité
git log --all --full-history -- .env
git log --all --full-history -- .env.local
git log --all --full-history -- .env.production
# Vérifier les clés et credentials
git log --all --full-history -- "*.pem" "*.key" "*credentials*"
# Chercher des secrets dans l'historique complet
git grep -i "password\|secret\|api_key\|token" $(git rev-list --all) 2>/dev/null | grep -v "\.example\|test\|dummy\|placeholder" | head -20
Si un secret est trouvé dans l'historique :
- Révoquez immédiatement le secret concerné (mot de passe, clé API, etc.)
- Utilisez
git filter-repo(ou BFG Repo Cleaner) pour le supprimer de l'historique - Faites un force-push après nettoyage (attention : coordonner avec les autres contributeurs)
Données personnelles dans les seeders/fixtures
# Chercher des emails réels dans les seeders
grep -r "@" database/seeders/ database/factories/
grep -r "@" tests/
# Vérifier qu'il n'y a pas de dumps de base de données
find . -name "*.sql" -not -path "./.git/*"
find . -name "*.sqlite" -not -path "./.git/*"
Tout email ou nom réel doit être remplacé par des données fictives ([email protected], [email protected]).
État local partiel au 5 juillet 2026 : git log --all --full-history -- .env ne retourne rien. Le scan complet des secrets reste à faire avant passage public.
Vérification du .gitignore
# Ces éléments doivent être ignorés
cat .gitignore | grep -E "\.env$|storage/|public/build/|public/modules/|vendor/|node_modules/"
Vérifier que .gitignore contient au minimum :
.env
.env.*
!.env.example
/vendor/
/node_modules/
/public/build/
/storage/*.key
/storage/app/public/
/public/modules/
/public/upload/
Packages SCORM
# Vérifier qu'aucun package SCORM n'est dans le dépôt
find public/modules -name "*.zip" 2>/dev/null
find storage -name "imsmanifest.xml" 2>/dev/null | head -5
Les packages SCORM importés ne doivent pas être dans le dépôt git (ils peuvent contenir des contenus sous droits).
Axe 3 — Conformité légale
-
Le fichier
LICENSEcontient le texte intégral de l'AGPL v3
→ État local : le texte AGPL v3 complet est présent -
Le fichier
NOTICEmentionne© Association Oneducavec les années correctes -
Le fichier
CLA.mdest présent et référencé dansCONTRIBUTING.md -
Vérification avec votre école/organisme de certification que votre projet de fin d'année peut être publié sous AGPL au nom de l'association (vérifier la convention de formation ou le règlement intérieur)
-
Les statuts de l'association Oneduc couvrent bien le développement de logiciels numériques (sinon : délibération du CA actant la titularité des droits)
-
Les emails de contact dans
SECURITY.mdetCODE_OF_CONDUCT.mdsont opérationnels ([email protected])
Axe 4 — Configuration GitHub
Paramètres du dépôt
- Le dépôt est mis en Public (ou restera privé temporairement le temps des corrections)
- Description du dépôt renseignée : "LMS pour l'inclusion numérique — Laravel 11, SCORM, quiz natifs"
Ne pas mentionner les outils d'animation live : implémentés mais pas encore activés en environnement de production (voir 07 — Outils d'animation) - Topics GitHub ajoutés :
lms,laravel,scorm,inclusion-numerique,formation,php,tailwind - Site web renseigné :
https://oneduc.fr
Fonctionnalités GitHub à activer
- Issues activées (pour les rapports de bugs et demandes de fonctionnalités)
- Discussions activées (pour les questions et la communauté)
- Wiki GitHub activé et alimenté avec le contenu de
docs/wiki/ - Security advisories activées (pour les signalements de failles privés)
Fichiers GitHub spéciaux
-
.github/ISSUE_TEMPLATE/bug_report.md— template de rapport de bug -
.github/ISSUE_TEMPLATE/feature_request.md— template de demande de fonctionnalité -
.github/PULL_REQUEST_TEMPLATE.md— template de Pull Request (inclure rappel du CLA)
État local : ces trois fichiers existent dans .github/.
Branches et protection
- La branche
mainest protégée (au moins : interdire les push directs, exiger une PR) - Au moins un reviewer requis pour les PRs (vous-même suffit pour commencer)
Axe 5 — README principal
Le README.md à la racine est la première chose que les visiteurs GitHub voient. À vérifier :
- Badge de licence AGPL v3 présent
[](https://www.gnu.org/licenses/agpl-3.0) - Description courte et claire du projet
- Lien vers le wiki (
docs/wiki/README.md) - Lien vers
CONTRIBUTING.md - Section "Licence & gouvernance" mentionnant Association Oneduc + AGPL v3
- Contact (
[email protected])
Récapitulatif de priorité
| Priorité | Action | Bloquant ? |
|---|---|---|
| 1 | Oui | |
| 1bis | Traiter le gap identifié lors du correctif S3 : StagiaireModuleDetail et Frontend\LectureController ne vérifient pas l'appartenance groupe |
Oui |
| 2 | Vérifier et nettoyer l'historique git (secrets, données personnelles) | Oui |
| 3 | Synchroniser SECURITY.md avec l'état réel de la checklist |
Recommandé |
| 4 | Vérifier convention formation / statuts association | Recommandé |
| 5 | Configurer GitHub (topics, protections de branche, templates) | Non |
| 6 | Mettre à jour le README principal avec badge et sections | Non |