Code source.
https://github.com/HackTechDev/WebPage2XMPP
WebPage2XMPP
Extension Firefox : un bouton dans la barre d'outils envoie le lien de la page ouverte dans un salon XMPP (MUC).
Un navigateur ne peut pas ouvrir de connexion XMPP (TCP) : l'extension envoie donc l'adresse de la page à un petit relais HTTP en Python, qui se connecte au serveur XMPP avec slixmpp (comme Peertube2XMPP et Grav2XMPP) et poste le message dans le salon.
Firefox (bouton) ──HTTPS + jeton──▶ relais Python ──XMPP──▶ salon MUC
1. Le relais
python3 -m venv .venv
.venv/bin/pip install -r relay/requirements.txt
cp relay/webpage2xmpp-relay.ini.example ~/.config/webpage2xmpp-relay.ini
chmod 600 ~/.config/webpage2xmpp-relay.ini
# Renseigner jid, password, room, nick et un jeton :
python3 -c 'import secrets; print(secrets.token_urlsafe(32))'
Tester sans rien envoyer, puis pour de vrai :
.venv/bin/python relay/webpage2xmpp_relay.py --dry-run
.venv/bin/python relay/webpage2xmpp_relay.py
Le relais écoute sur 127.0.0.1:8765. Pour un démarrage automatique, voir
relay/webpage2xmpp-relay.service (service systemd utilisateur).
API
| Méthode | Chemin | Corps | Rôle |
|---|---|---|---|
| GET | /ping |
— | vérifie le jeton, renvoie le salon |
| POST | /send |
{"url": "...", "title": "..."} |
publie le message dans le salon |
Toutes les requêtes exigent l'en-tête Authorization: Bearer <jeton>.
Le relais répond aussi aux requêtes de contrôle CORS (OPTIONS) venant d'une
page d'extension (moz-extension://) ; celles d'un site web sont refusées (403).
Chaque envoi ouvre une connexion XMPP, rejoint le salon, envoie le message puis
se déconnecte : le bot n'apparaît dans le salon que quelques secondes.
Exposer le relais en HTTPS
Si Firefox et le relais tournent sur la même machine, http://127.0.0.1:8765
suffit. Sinon, placer le relais derrière un proxy HTTPS ; par exemple avec nginx :
location /webpage2xmpp/ {
proxy_pass http://127.0.0.1:8765/;
}
L'adresse à saisir dans l'extension est alors https://mon-serveur/webpage2xmpp.
L'extension refuse une adresse HTTP distante : le jeton circulerait en clair.
2. L'extension Firefox
- Essai :
about:debugging#/runtime/this-firefox→ « Charger un module complémentaire temporaire… » → choisirextension/manifest.json(l'extension disparaît au redémarrage de Firefox). - Installation durable : Firefox n'installe que les extensions signées.
Créer l'archive puis la faire signer en « non listée » (sans publication)
sur addons.mozilla.org :
cd extension && zip -r ../webpage2xmpp.xpi . && cd .. # ou, avec web-ext : web-ext sign --channel=unlisted --source-dir extension
Ensuite, dans les options de l'extension (about:addons) : saisir l'adresse du
relais et le jeton, cliquer sur Enregistrer (Firefox demande l'autorisation
d'accéder au relais), puis sur Tester la connexion.
Utilisation : cliquer sur le bouton. Le badge indique … pendant l'envoi, ✓
en cas de succès, ! en cas d'échec (avec une notification qui donne la cause).
Dépannage
- « relais injoignable (NetworkError when attempting to fetch resource.) » :
- vérifier que le relais tourne :
curl -i http://127.0.0.1:8765/pingdoit répondre401 Unauthorized(jeton absent) ; 127.0.0.1désigne la machine où tourne Firefox : si le relais est ailleurs, utiliser son adresse HTTPS (voir plus haut) ;- après une mise à jour, relancer le relais, recharger l'extension
(
about:debugging→ « Recharger ») puis cliquer de nouveau sur Enregistrer pour accorder l'accès au relais.
- vérifier que le relais tourne :
- « jeton invalide » : le jeton saisi dans l'extension diffère de
tokendans la configuration du relais. - « délai de 30 s dépassé » ou « authentification XMPP refusée » :
problème entre le relais et le serveur XMPP (JID, mot de passe, salon) ;
le détail est dans la sortie du relais (
journalctl --user -u webpage2xmpp-relays'il tourne en service).