FOXA-1119 : les identifiants du fournisseur sortent du blob, sans rien couper #30

Merged
foXaCe merged 3 commits from passe-20260914-foxa-1119 into main 2026-09-14 16:15:14 +02:00
Collaborator

La migration 087 pose le côté serveur du retrait des identifiants IPTV de xtream_settings.settings_json : une table fermée à anon et à authenticated, un trigger qui la tient à jour à chaque poussée de blob, une RPC qui fabrique l'URL jouable côté serveur, et un remplaçant de sync_pull_xtream_settings sans les deux clés.

⚠ Rien n'est retiré du blob : les applications l'écrivent encore, et un retrait posé avant leur déploiement couperait l'IPTV des trois foyers. C'est l'acte suivant.

⚠ Le protocole Xtream porte le login et le mot de passe dans le chemin de l'URL de flux : ce qui change est le stockage et l'identifiant de contenu, pas le transport.

Posée sur le LXC 125 le 2026-09-14 (sauvegarde préalable, épreuve en transaction annulée, ON_ERROR_STOP=1 RC=0). verif_087 : 16 sections, 0 rouge. Porte : 1591 passés, 3 échecs (les SANSPOLICE connus), 45 ignorés.

La migration 087 pose le côté serveur du retrait des identifiants IPTV de `xtream_settings.settings_json` : une table fermée à `anon` et à `authenticated`, un trigger qui la tient à jour à chaque poussée de blob, une RPC qui fabrique l'URL jouable côté serveur, et un remplaçant de `sync_pull_xtream_settings` sans les deux clés. ⚠ Rien n'est retiré du blob : les applications l'écrivent encore, et un retrait posé avant leur déploiement couperait l'IPTV des trois foyers. C'est l'acte suivant. ⚠ Le protocole Xtream porte le login et le mot de passe dans le chemin de l'URL de flux : ce qui change est le stockage et l'identifiant de contenu, pas le transport. Posée sur le LXC 125 le 2026-09-14 (sauvegarde préalable, épreuve en transaction annulée, `ON_ERROR_STOP=1` RC=0). `verif_087` : 16 sections, 0 rouge. Porte : 1591 passés, 3 échecs (les SANSPOLICE connus), 45 ignorés.
feat(FOXA-1119) : les identifiants du fournisseur sortent du blob, sans rien couper
All checks were successful
Porte / porte (pull_request) Successful in 55s
9f422e436f
La 087 pose le côté serveur du retrait des identifiants IPTV de `xtream_settings.settings_json`
(trois foyers, trois mots de passe en clair au repos, rendus à toute application authentifiée du
foyer et recopiés sur chaque appareil par le double-write) :

- `xtream_identifiants`, table fermée à `anon` et à `authenticated` — `revoke all` nommant
  explicitement `authenticated` (les privilèges par défaut de Supabase), RLS active et AUCUNE
  politique : l'absence de politique est le refus, pas un oubli (forme de la 069). Une colonne de
  plus sur `xtream_settings` aurait fait échouer tout `select *` de PostgREST, y compris les
  lectures qui ne visaient pas le secret.
- un trigger qui tient cette table exacte à chaque poussée de blob, sans qu'aucune application
  change d'un octet ; une poussée partielle, sans les deux clés, n'efface rien.
- `nuvio_xtream_url(...)` — l'URL jouable fabriquée côté serveur, genres fermés à
  live/movie/series, aucun relais `player_api` (sa réponse `user_info` porte les identifiants),
  les deux identifiants percent-encodés.
- `sync_pull_xtream_reglages_sans_secret(...)` — le remplaçant terme à terme de
  `sync_pull_xtream_settings`, moins `username` et `password`, même bornage.
- les sept privilèges de `anon` sur `xtream_settings` retirés : rien n'en sortait faute de
  politique, mais le privilège précédait la politique.

⚠ Rien n'est retiré du blob : les applications l'écrivent encore, et un retrait posé avant leur
déploiement couperait l'IPTV des trois foyers. C'est l'acte suivant.

⚠ Le mandat promettait qu'une URL servie par le serveur fermerait la porte : le protocole Xtream
porte le login et le mot de passe DANS le chemin de l'URL de flux. Ce qui change est le stockage
et l'identifiant de contenu, pas le transport ; cacher le transport demanderait un relais de flux.

La fuite d'origine du ticket est fermée par ailleurs : `watch_progress` rend 0 identifiant en
`http%` sur 1 020 lignes, et la garde de la 059 est en base — le tableau des migrations appliquées
ne le disait pas, il le dit maintenant.

Posée sur le LXC 125 le 2026-09-14 (sauvegarde préalable, épreuve en transaction annulée,
ON_ERROR_STOP=1 RC=0). `verif_087` : 16 sections, 0 rouge.

Porte : 1591 passés, 3 échecs, 45 ignorés — les 3 échecs sont les SANSPOLICE de
`test_logos_appariement` (police Liberation absente du conteneur), inchangés ; même arbre sans les
13 tests neufs : 1578 passés, 3 échecs, 45 ignorés.
La forge refusait la fusion de `backend#30` (`mergeable = false`) : les deux côtés
ajoutaient une ligne numérotée `087` au même endroit du tableau « Ce qui est APPLIQUÉ
en base » du `CLAUDE.md`, et réclamaient tous deux le numéro 087 pour leur migration.

Résolution, en gardant l'intention des deux côtés :

- `CLAUDE.md` — les DEUX lignes sont conservées. Celle de `FOXA-1205` garde le `087`
  (elle est fusionnée sur `main` depuis le 2026-09-14, le numéro lui appartient) ;
  celle de `FOXA-1119` devient `088`. Le bloc « LA 059 EST EN BASE » apporté par
  `FOXA-1119` est conservé tel quel. Le compte de tête est recompté, pas recopié :
  87 migrations numérotées, 71 rollbacks.
- migration, rollback, vérification et banc de `FOXA-1119` renumérotés `087` → `088`,
  références internes comprises.
- `API.md` — la ligne « Xtream sans secret » porte `(088)`.
- `JOURNAL.md` — les deux récits cohabitent sans conflit ; une section explique la
  renumérotation et rappelle que rien n'a changé en base.

La migration a été POSÉE sur le LXC 125 le 2026-09-14 sous le nom `087_…`. Le corps SQL
est inchangé : seuls le nom de fichier et les commentaires de numéro bougent. Le fichier
de sauvegarde `sauvegarde-avant-087-20260914.dump` garde son nom sur la machine, c'est
un fait daté et non une référence au dépôt.

Fusion plutôt que rebasage-et-poussée-forcée : la doctrine du dépôt interdit `--force`.
L'arbre produit est identique à l'octet à celui du rebasage (`git write-tree` comparé à
l'arbre rebasé).
docs(FOXA-1244) : le rapport de la résolution du conflit de backend#30
All checks were successful
Porte / porte (pull_request) Successful in 1m9s
Porte / porte (push) Successful in 1m13s
a47f44ceb8
foXaCe merged commit a47f44ceb8 into main 2026-09-14 16:15:14 +02:00
foXaCe deleted branch passe-20260914-foxa-1119 2026-09-14 16:15:14 +02:00
Sign in to join this conversation.
No reviewers
No labels
montee-majeure
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/backend!30
No description provided.