Trois problemes distincts empechaient une installation propre.
1. audioop-lts==0.2.2 declare Requires-Python >=3.13. Le fichier ayant
ete produit par un pip freeze sur 3.13, la ligne etait inconditionnelle
et faisait echouer `pip install -r requirements.txt` sur le 3.12 cible
par la CI. Les jobs security-scan et test n'atteignaient donc jamais
leur etape utile. Ajout du marqueur python_version >= "3.13" : le
backport n'est tire que la ou audioop a quitte la bibliotheque standard.
2. Fichier encode en UTF-16 LE. pip sait le lire grace au BOM, mais
l'outillage tiers non, et le diff est illisible. Reecrit en UTF-8, LF.
3. psycopg[binary] etait la seule dependance non epinglee. Epinglee a la
version effectivement resolue (3.2.12).
Retrait de trois dependances parasites, verifiees non importees sur
l'ensemble de app/ et de la racine :
- dotenv==0.9.9 doublon relais de python-dotenv (seul import reel)
- discord==2.3.2 doublon relais de discord.py (seul import reel)
- login==0.0.6 sans rapport avec Flask-Login, jamais reference
WTForms est conserve : c'est une dependance transitive legitime de
Flask-WTF (utilisee par CSRFProtect), et non une dependance directe morte.
Installation verifiee en environnement neuf sous Python 3.12.10.
Co-Authored-By: Claude Opus 5 <[email protected]>
- Ajout des dossiers/fichiers des assistants IA (Claude, ChatGPT/OpenAI,
Cursor, Copilot, Aider, Windsurf, Gemini, Continue, Cline).
- Ajout des notes de travail et de suivi generees par assistant (.ai/,
audit/), retirees du suivi git via `git rm --cached` : les fichiers
restent sur disque mais ne sont plus versionnes.
- Retrait des regles `docs/` et `*.html`, qui ignoraient TOUT fichier
.html du depot, y compris les templates Jinja2. Un nouveau template
etait invisible pour git : fonctionnel en local, TemplateNotFound en
production, sans signal dans `git status`. Les rapports de couverture
sont desormais couverts par htmlcov/ et coverage_html_report/.
- `.env` -> `.env*` avec exception `!.env.example`, pour couvrir
.env.local, .env.production et les copies de sauvegarde.
- Ajout des cles et certificats, des sauvegardes (backups/), des
journaux (logs/), des environnements virtuels, des caches d outils
et des fichiers d editeur/OS.
- Deduplication des regles existantes (*.db et instance/ etaient en
double, .instance/ n existait pas).
Aucune modification du code applicatif.
Co-Authored-By: Claude Opus 5 <[email protected]>
Le miroir GitHub audite en premiere passe etait en retard de 16 commits
sur git.immortal.host/clubesportsudes/team-tryouts. L'audit est rebase
sur immortal/main @ bb0bc1c et l'ensemble des constats reverifie.
Resolus par l'equipe (archives dans 00-provenance.md) :
- seed automatique en production supprime
- print du token Discord supprime
- proxy_pass nginx corrige vers 127.0.0.1
- dossier supporting_scrits renomme
Nouveaux constats :
- SEC-20 flux OAuth2 Discord sans parametre state (CSRF de liaison)
- SEC-21 le deploiement SFTP pousse .git/ sur le serveur
- SEC-22 clear_db.py destructif sans garde-fou, admin/password en dur
- MNT-16 discord_pending.json versionne
Requalifies :
- SEC-01 secrets retires du fichier mais toujours dans l'historique des
deux depots, et dans le HEAD du miroir GitHub -> revocation requise
- SEC-05 trusted_proxy='*' + bind 0.0.0.0 rend X-Forwarded-For usurpable,
ce qui ouvre le rate limiting au lieu de le corriger
- SEC-07 l'OAuth2 ajoute ne contraint pas l'identite : le discord_user_id
transite par un champ cache du formulaire
- MNT-05 psycopg[binary] non epingle, incompatible avec les URI
postgresql:// que SQLAlchemy resout vers psycopg2
48 constats. Aucune modification du code applicatif.
Co-Authored-By: Claude Opus 5 <[email protected]>
Revue statique de l'ensemble du code Python, de la configuration CI/nginx,
du .gitignore et des dependances. 44 constats documentes avec references
fichier:ligne, impact et correctif propose.
- audit/01-securite.md 19 constats (4 critiques)
- audit/02-maintenabilite.md 15 constats
- audit/03-standards-stack.md 10 ecarts aux conventions Flask/SQLAlchemy
- audit/plan-remediation.md ordre de traitement en 6 lots
Points critiques : secrets de production reels committes dans
app/.env.exemple, seed automatique en production avec mot de passe
password, CORS ouvert a toutes les origines avec credentials par
defaut, token du bot Discord imprime sur stdout au demarrage.
Aucune modification du code applicatif.
Co-Authored-By: Claude Opus 5 <[email protected]>