- Rust 94%
- Python 5.7%
- JavaScript 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| tests | ||
| tizentube | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| tizentube-proxy.service | ||
| tt_proxy.py | ||
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 ; seulwww.youtube.comest déchiffré, les fluxgooglevideo.compassent 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). LeuserScript.jscompilé 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.