Proxy mitmproxy qui injecte TizenTube dans YouTube Android TV (box Ugoos)
  • Rust 94%
  • Python 5.7%
  • JavaScript 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-16 18:22:27 +02:00
.forgejo/workflows ci: ne déclencher que sur les PR, annuler le passage dépassé, garder le dossier de compilation 2026-10-16 18:10:55 +02:00
src feat(maj): route POST /api/script/maj pour le bouton de la page d'état 2026-10-15 20:00:54 +02:00
tests feat(maj): route POST /api/script/maj pour le bouton de la page d'état 2026-10-15 20:00:54 +02:00
tizentube fix(proxy): relire le script injecté quand son fichier change, et n'installer que la version épinglée 2026-10-15 19:28:23 +02:00
.gitignore Import initial depuis le LXC 134 2026-10-15 16:47:18 +02:00
Cargo.lock feat(proxy): socle Rust du proxy TizenTube, mesuré par le banc de référence 2026-10-15 18:18:42 +02:00
Cargo.toml feat(proxy): socle Rust du proxy TizenTube, mesuré par le banc de référence 2026-10-15 18:18:42 +02:00
README.md feat(maj): route POST /api/script/maj pour le bouton de la page d'état 2026-10-15 20:00:54 +02:00
tizentube-proxy.service Import initial depuis le LXC 134 2026-10-15 16:47:18 +02:00
tt_proxy.py Import initial depuis le LXC 134 2026-10-15 16:47:18 +02:00

Proxy TizenTube

Proxy HTTPS (mitmproxy) qui injecte TizenTube (sans pub, SponsorBlock…) dans l'appli YouTube Android TV 5.30 de la box Ugoos AM9 PRO.

  • tt_proxy.py : addon mitmdump ; seul www.youtube.com est déchiffré, les flux googlevideo.com passent sans être touchés. Page d'état sur :8099/__status.
  • tizentube-proxy.service : service systemd durci du LXC 134 (192.168.1.89), proxy sur le port 8080.
  • tizentube/ : référence du script injecté (@foxreis/tizentube, dépôt amont https://github.com/reisxd/TizenTube, GPL-2.0). Le userScript.js compilé est récupéré à l'installation, pas versionné.
  • tizentube/version.json : la seule version du script que le proxy a le droit de servir, avec l'empreinte de l'archive et celle de chaque fichier.

Mettre à jour le script TizenTube

tizentube-proxy --maj-script --script /opt/tizentube-proxy/tizentube/userScript.js

Le proxy lit version.json à côté du script, télécharge cette version, vérifie l'empreinte de l'archive (sha256, plus l'intégrité publiée par le registre) puis la taille et l'empreinte de chaque fichier extrait, et n'écrit qu'ensuite — chaque fichier d'abord à côté puis renommé. Un script déjà à l'empreinte épinglée n'est pas retéléchargé. Une vérification qui échoue laisse le script en place et sort en code 1 : le service n'a pas besoin d'être redémarré, le proxy relit le fichier changé de lui-même au premier accès.

Pour changer de version : modifier version.json (version, url, intégrité, empreintes) puis relancer la commande. Le proxy ne sert jamais une version qui n'y figure pas.

Le service en cours d'exécution expose la même mise à jour, pour le bouton de la page d'état :

curl -X POST http://127.0.0.1:8099/api/script/maj

Rien n'est deviné là non plus : la route appelle exactement la vérification décrite ci-dessus. Elle rend 200 avec {"ok":true,"status":"installed","version":…,"sha256":…,"files":…,"bytes":…, "reloaded":true,…} (ou "status":"up-to-date" si le script y est déjà), et 502 avec {"ok":false,"status":"refused","message":…,"error":…} quand l'épinglage ou le téléchargement ne permettent pas d'installer — rien n'est alors écrit. Après une installation, le script servi est relu tout de suite : la télévision prend la nouvelle version sans redémarrer le service. Le refus comme l'installation sont écrits au journal de la page d'état.

Jamais dans ce dépôt : le dossier ca/ (clé privée de l'autorité de certification installée sur la box). Elle reste sur le LXC.

Feuille de route

Réécriture en Rust (proxy) + Svelte (page d'état, PWA) avec tests : tableau kanban « Forgejo foX » de Hermes.