# Plateforme centralisée de tryouts Application interne du club e-sport de l'UdeS : inscriptions aux sélections, évaluations, gestion des équipes, disponibilités, contrats, et notifications Discord. Le site est servi **en français**, l'anglais reste accessible par le sélecteur de la barre latérale (voir `docs/translations.md`). --- ## Démarrer ```bash python -m venv .venv .venv/Scripts/pip install -r requirements.txt -r requirements-dev.txt cp app/.env.exemple .env # puis remplir les valeurs .venv/Scripts/python run.py # développement, http://127.0.0.1:5000 ``` `SECRET_KEY` et `DATABASE_URL` sont **obligatoires** : `create_app()` refuse de démarrer sans eux. `DATABASE_URL` doit pointer sur PostgreSQL ; le pilote psycopg 3 est nommé automatiquement si l'URL n'en nomme pas. Production : `python wsgi.py` (Waitress derrière nginx). Voir `docs/deployment.md`. Ce sont les **deux seuls** points d'entrée. ## Vérifier ```bash .venv/Scripts/python -m pytest # suite complète .venv/Scripts/python -m ruff check . # lint .venv/Scripts/python -m ruff format --check . ``` Les trois tournent en CI et y sont bloquants. --- ## Ce que fait l'application - **Comptes et rôles** — cinq rôles : président (`admin`), gérant (`manager`), coach, joueur (`player`), recruteur (`scout`). Le président attribue les rôles. - **Sélections** — organisation des tryouts, trois formats de match (équipe contre équipe, joueur contre joueur, scrim), évaluation des joueurs sur dix critères. - **Équipes** — effectifs de la saison, matchs et entraînements. Le formulaire d'entraînement affiche les disponibilités des joueurs. - **Disponibilités** — créneaux hebdomadaires des joueurs, créneaux réservables des coachs. - **Notes** — un coach écrit des notes d'équipe (visibles par l'équipe) et des notes nominatives (visibles par le joueur concerné). - **Un-à-un** — un joueur demande une séance à son coach ; le coach répond depuis le site ou par une réaction sur le message privé Discord. - **Contrats** — dépôt d'un contrat par le staff, signature par le joueur. ## Comment c'est construit Backend Python 3.12 / Flask, rendu serveur en Jinja2, CSS et JavaScript maison, sans framework front. Base PostgreSQL via SQLAlchemy. Bot Discord (`discord.py`) dans un fil du même processus que le serveur web. `docs/architecture.md` contient les diagrammes (classes, paquets, flux d'une requête). --- ## Sécurité En place et vérifié par des tests : - **Limitation de débit** sur la connexion (10 requêtes/minute par IP). - **Cookies de session** `HttpOnly`, `SameSite=Lax`, `Secure`, avec expiration effective. - **CSRF** sur tous les formulaires, y compris la déconnexion (en POST). - **HTTPS** forcé en production, **HSTS**. - **CSP sans `unsafe-inline`** sur `script-src` : aucun gestionnaire d'événement en ligne, chaque bloc `