# LOT 15 - Stabilisation acces FIL DE COURSE - 2026-05-31

## Objet

Livraison corrective incrementale du FIL DE COURSE OVH afin de stabiliser les acces et de separer proprement l'acces PC COURSE des acces terrain.

## Decisions integrees

- Le role `PC COURSE` est reserve aux connexions issues du lien administrateur.
- La page terrain ne propose plus le role `PC COURSE`.
- Le clic `Operations > FIL DE COURSE` depuis PLACE ouvre le lien administrateur PC COURSE en autologin, sans saisie du PIN terrain.
- Le PIN terrain reste stable entre deux ouvertures PLACE.
- Le PIN terrain peut etre regenere depuis PLACE.
- Une regeneration du PIN terrain invalide les sessions terrain actives, mais conserve les sessions PC COURSE et les messages existants.
- Le lien PC COURSE secondaire est stable jusqu'a expiration du fil et donne les memes droits que le PC COURSE principal.
- PLACE affiche une fenetre persistante d'information contenant lien terrain, PIN terrain, QR terrain, lien PC COURSE, QR PC COURSE et boutons de copie.
- Le logo SYNOLUVIA TRAIL DPS est ajoute uniquement sur la page web OVH du fil de course, pas dans PLACE.

## Fichiers PLACE modifies ou nouveaux

- `SRC/Services/course_feed_service.py`
  - ajout de la regeneration du PIN terrain via OVH ;
  - prise en compte de `pin_version` ;
  - conservation du bootstrap stable cote PLACE.

- `SRC/Services/remote_tracking_api_client.py`
  - ajout de l'endpoint securise `/api/course_feed/regenerate_pin.php` dans les appels necessitant cle API + secret d'activation.

- `SRC/Pages/course_feed_dialog.py`
  - nouvelle fenetre persistante PLACE affichant les informations de connexion ;
  - affichage lien terrain, PIN, lien PC COURSE secondaire ;
  - affichage QR code terrain et QR code PC COURSE avec le generateur embarque existant ;
  - action de regeneration du PIN terrain avec confirmation.

- `SRC/Pages/main_window.py`
  - le menu `FIL DE COURSE` ouvre le lien PC COURSE et affiche la fenetre persistante d'informations.

## Fichiers OVH modifies ou nouveaux

- `ovh/SRC/Tracking/CourseFeedRepository.php`
  - ajout du token administrateur distinct ;
  - PIN terrain chiffre et restituable au bootstrap ;
  - liens stables ;
  - sessions PC COURSE admin ;
  - refus du role `PC COURSE` en connexion terrain ;
  - invalidation des sessions terrain lors de la regeneration du PIN.

- `ovh/public/api/course_feed/bootstrap.php`
  - comportement get-or-create stabilise ;
  - retour des liens terrain et PC COURSE ;
  - PIN conserve tant qu'il n'est pas regenere.

- `ovh/public/api/course_feed/admin_login.php`
  - nouvel endpoint d'autologin PC COURSE via token administrateur.

- `ovh/public/api/course_feed/regenerate_pin.php`
  - nouvel endpoint PLACE pour regenerer le PIN terrain et invalider les sessions terrain.

- `ovh/public/api/course_feed/login.php`
  - connexion terrain limitee aux roles SECOURS, SECURITE, OUVREUR, FERMEUR.

- `ovh/public/course_feed/index.php`
  - ajout du logo responsive ;
  - autologin PC COURSE si token admin ;
  - suppression du choix PC COURSE pour les connexions terrain.

- `ovh/public/course_feed/admin.php`
  - entree dediee au lien PC COURSE.

- `ovh/public/course_feed/assets/synoluvia_dps.png`
  - logo affiche uniquement sur la page OVH.

- `ovh/sql/lot_15_course_feed.sql`
  - ajout idempotent des colonnes necessaires : tokens chiffres, token admin, version PIN, session admin.

## Ordre de deploiement recommande

1. Sauvegarder la base OVH `synoluidpstrack`.
2. Executer `ovh/sql/lot_15_course_feed.sql` sur `synoluidpstrack`.
3. Deployer les fichiers OVH modifies ou nouveaux.
4. Deployer les fichiers PLACE modifies ou nouveaux.
5. Ouvrir PLACE puis `Operations > FIL DE COURSE` sur un evenement existant.
6. Verifier que le lien PC COURSE s'ouvre sans saisie de PIN.
7. Verifier que le PIN terrain reste stable lors de plusieurs ouvertures successives.
8. Tester la regeneration du PIN depuis PLACE et confirmer que les utilisateurs terrain doivent se reconnecter.

## Validations techniques

- `python3 -m compileall -q SRC`
- `php -l` sur les fichiers PHP modifies ou nouveaux

## Points d'attention

Lors de la premiere ouverture apres deploiement sur un canal deja cree avec la premiere version du LOT 15, le serveur ne peut pas retrouver l'ancien PIN ni les anciens tokens car ils etaient stockes uniquement sous forme de hash. Le premier bootstrap post-deploiement initialise donc les nouvelles valeurs stables chiffrees. Ensuite, elles restent stables jusqu'a regeneration volontaire ou expiration du fil.
