Extension Firefox : un bouton dans la barre d'outils envoie le lien de la page ouverte dans un salon XMPP
STATUS:PAGE LOADED — 2026-10-03

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… » → choisir extension/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/ping doit répondre 401 Unauthorized (jeton absent) ;
    • 127.0.0.1 dé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.
  • « jeton invalide » : le jeton saisi dans l'extension diffère de token dans 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-relay s'il tourne en service).