Bridge Matrix to XMPP

Updated 30 Septembre 2019

Préparer un conteneur LXC

Nous conseillons d'installer le pont dans un conteneur dédié que vous aurez préparé selon le manuel.

Configuration de Prosody

Configurez le composant externe matrix.xmpp.example.org selon la documentation, ainsi que muc.xmpp.example.org, le composant de conférence.

Installer matrix-bifrost

Installez le paquet nodeenv :

emerge -a dev-python/nodeenv

Téléchargez la dernière version de matrix-bifrost sur github et copiez-la dans /var/calcul :

git clone https://github.com/matrix-org/matrix-bifrost /var/calculate/matrix-bifrost

Créez et activez l'environnement virtuel NodeJS-10.15.3 dans le répertoire de l'application :

nodeenv --node=10.15.3 node-10

source node-10/bin/activate

Tant que vous êtes dans le répertoire /var/calculate/matrix-bifrost, installez l'application :

npm install

npm run build

Configuration du pont

Copiez config.sample.yaml vers config.yaml et configurez la passerelle avec les paramètres suivants :

  • matrix.example.org est le serveur Matrix
  • xmpp.example.org est le serveur Jabber
  • matrix.xmpp.example.org est un composant Jabber externe
  • muc.xmpp.example.org est le composant Jabber qui permet d'organiser des conférences.
  • xmpp_ est le préfixe utilisé pour désigner les utilisateurs et les conférences Jabber
/var/calculate/matrix-bifrost/config.yaml
bridge:
  # Your homeserver server_name.
  domain: "matrix.example.org"
  # A internally reachable endpoint for the CS api of the homeserver.
  homeserverUrl: "https://matrix.example.org"
  # Prefix of all users of the bridge.
  userPrefix: "xmpp_"
purple:
  # For selecting a specific backend. One of "node-purple", "xmpp.js". Defaults to "node-purple"
  backend: "xmpp.js"
  backendOpts:
    # endpoint to reach the component on. The default port is 5347
    service: "xmpp://xmpp.example.org:5347"
    # domin assigned to the component.
    domain: "matrix.xmpp.example.org"
    # password needed by the component.
    password: "secret"
portal:
  # List of regexes to match a alias that can be turned into a bridge.
  aliases:
    # This matches _purple_ followed by anything
    "^xmpp_(.+)$":
      # Use the prpl-jabber protocol.
      protocol: "xmpp.js"
      properties:
        # Set room to the first regex match
        room: "regex:1"
        # Set the server to be conf.localhost
        server: "muc.xmpp.example.org"
# Automatically register users with accounts if they join/get invited
# a room with a protocol they are not bound to.
# This is REQUIRED for xmpp.js to work.
autoRegistration:
  enabled: true
  protocolSteps:
    # For xmpp.js, please use:
    xmpp-js:
      type: "implicit"
      parameters:
        username: "<T_MXID_SANE>@matrix.xmpp.example.org"

Créez un fichier d'enregistrement pour le service situé à matrix-xmpp.example.org :

npm run genreg -- -u http://matrix-xmpp.example.org:9555 -f registration_xmpp.yaml

Remplacez le préfixe _purple_ avec xmpp_

/var/calculate/matrix-bifrost/registration_xmpp.yaml
id: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
hs_token: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
as_token: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
namespaces:
  users:
    - exclusive: true
      regex: '@xmpp_.*'
  aliases:
    - exclusive: true
    regex: '#xmpp_.*'
  rooms: []
url: 'http://matrix-xmpp.example.org:9555'
sender_localpart: xmpp_bot
rate_limited: true
protocols:
  - xmpp

Copier registration_xmpp.yaml dans le répertoire /var/calculate/synapse sur le serveur Matrix.

scp registration_xmpp.yaml root@synapse:/var/calculate/synapse/

Ajoutez le fichier d'enregistrement à la configuration de Synapse :

homeserver.yaml
...
# A list of application service config file to use
app_service_config_files:
  - registration_xmpp.yaml
...

Relancez Synapse :

/etc/init.d/synapse restart

Démarrer la passerelle

Créez un script OpenRC pour gérer le démon de la passerelle XMPP-Matrix :

/etc/init.d/matrix-xmpp-bridge
#!/sbin/openrc-run
# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

name="Matrix-XMPP daemon"
description="Matrix XMPP bridge daemon"
command=/var/calculate/matrix-bifrost/node-10/bin/node
command_args="build/src/Program.js -c config.yaml -p 9555 -f registration_xmpp.yaml"
directory=/var/calculate/matrix-bifrost
pidfile="/run/matrixxmpp.pid"
command_background=true

depend() {
        need net
}

Définissez les privilèges :

chmod 0755 /etc/init.d/matrix-xmpp-bridge

Lancez le démon :

/etc/init.d/matrix-xmpp-bridge start

Ajoutez-le à la liste de démarrage automatique :

rc-update add matrix-xmpp-bridge

Relier XMPP à Matrix

Connecter des utilisateurs XMPP à des utilisateurs Matrix

Le JID d'un utilisateur Matrix dans XMPP est [HTML_REMOVED]_[HTML_REMOVED]@matrix.xmpp.example.org.

Pour ouvrir un dialogue avec l'utilisateur user:matrix.example.org sur XMPP, commencez-le par user_matrix.example.org@matrix.xmpp.example.org.

Le MXID d'un utilisateur XMPP est @xmpp_<XMPP_nick>=40<jabber_server>:matrix.example.org.

Pour ouvrir un dialogue avec l'utilisateur XMPP foo@xmpp.example.org sur Matrix. Veuillez le commencer avec ~~@xmpp_foo=40xmpp.example.org:matrix.example.org~.

Relier une salle Matrix à des discussions XMPP

L'alias d'une discussion XMPP dans Matrix est #xmpp_(nom):matrix.example.org

Pour créer une salle connectée à une discussion XMPP ~room@muc.xmpp.example.org tout en restant sur Matrix, rejoignez #xmpp_room:matrix.example.org~.

Relier un espace de discussion XMPP à celui sur Matrix existant

Demandez le MXID de la commande avec laquelle vous souhaitez rejoindre mychat@muc.xmpp.example.org ( !) :PHAqztyseimYIVPwqu:matrix.example.org)

Créez une discussion XMPP, nommée mychat@muc.xmpp.example.org.

Ajouter le traitement pour la salle ! au fichier d'enregistrement :PHAqztyseimYIVPwqu:matrix.example.org

/var/calculate/matrix-bifrost/registration_xmpp.yaml
...
namespaces:
...
  rooms:
    - exclusive: false
      regex: '!PHAqztyseimYIVPwqu:matrix.example.org'

Copier registration_xmpp.yaml dans le répertoire /var/calculate/synapse sur le serveur Matrix.

scp registration_xmpp.yaml root@synapse:/var/calculate/synapse/

Redémarrez le serveur Synapse.

/etc/init.d/synapse restart

Redémarrez la passerelle :

/etc/init.d/matrix-xmpp-bridge restart

Reliez la salle Matrix actuelle à la discussion XMPP mychat@muc.xmpp.example.org en lui envoyant le message suivant :

!purple bridge xmpp-js muc.xmpp.example.org mychat