Мост Matrix-XMPP

Обновлено 30 сентября 2019

Подготовка LXC-контейнера

Мы рекомендуем выполнить настройку моста в отдельном контейнере, настроив его согласно инструкции.

Настройка внешнего компонента Prosody

Настройте внеший компонет matrix.xmpp.example.org согласно документации, а также компонент конференции muc.xmpp.example.org.

Установка matrix-bifrost

Установите nodeenv:

emerge -a dev-python/nodeenv

Скачайте последнюю версию matrix-bifrost из github в каталог /var/calculate:

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

Создайте и активируйте виртуальное окружение NodeJS-10.15.3 в каталоге приложения:

nodeenv --node=10.15.3 node-10

source node-10/bin/activate

Выполните установку приложения из каталога /var/calculate/matrix-bifrost:

npm install

npm run build

Настройка моста

Скопируйте файл настроек config.sample.yaml в config.yaml и выполните настройку моста, где:

  • matrix.example.org - имя matrix-сервера
  • xmpp.example.org - имя jabber-сервера
  • matrix.xmpp.example.org - имя внешнего компонента jabber-сервера
  • muc.xmpp.example.org - имя компонента конференции jabber-сервера
  • xmpp_ - префикс, используемый для обозначения 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"

Выполните генерацию регистрационного файла сервиса, который находится на хосте matrix-xmpp.example.org:

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

Исправьте префикс _purple_ на 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

Скопируйте полученный файл registration_xmpp.yaml в каталог /var/calculate/synapse Matrix-сервера.

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

Добавьте файл регистраций сервиса в настройку Synapse:

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

Перезапустите Synapse:

/etc/init.d/synapse restart

Запуск моста

Создайте сценарий OpenRC для управления демоном Matrix XMPP bridge:

/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
}

Установите права на запуск:

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

Запустите демон:

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

Добавьте демон в автозагрузку:

rc-update add matrix-xmpp-bridge

Соединение XMPP с Matrix

Соединение пользователей XMPP с пользователями Matrix

JID пользователя Matrix в XMPP выглядит следующим образом <логин_Matrix>_<сервер Matrix>@matrix.xmpp.example.org.

Для открытия диалога с пользователем user:matrix.example.org из XMPP, начните диалог с user_matrix.example.org@matrix.xmpp.example.org.

MXID пользователя XMPP выглядит следующим образом @xmpp_<XMPP_nick>=40<jabber_server>:matrix.example.org.

Для открытия диалога с пользователем XMPP foo@xmpp.example.org из Matrix, начните диалог с @xmpp_foo=40xmpp.example.org:matrix.example.org.

Соединение комнат Matrix с XMPP-чатами

Псевдоним чата XMPP в Matrix выглядит следующим образом #xmpp_(имя):matrix.example.org

Для того, чтобы создать комнату, связанную с чатом XMPP room@muc.xmpp.example.org из Matrix, присоединитесь к комнате #xmpp_room:matrix.example.org.

Подключение чата XMPP к уже существующей комнате Matrix

Получите MXID команды, с которой хотите связать mychat@muc.xmpp.example.org (!PHAqztyseimYIVPwqu:matrix.example.org)

Создайте чат mychat@muc.xmpp.example.org в XMPP.

В регистрационный файл добавьте обработку для комнаты !PHAqztyseimYIVPwqu:matrix.example.org

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

Скопируйте полученный файл registration_xmpp.yaml в каталог /var/calculate/synapse Matrix-сервера.

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

Перезапустите сервер Synapse

/etc/init.d/synapse restart

Перезапустите мост Matrix-XMPP

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

Соедините текущую комнату Matrix с чатом XMPP mychat@muc.xmpp.example.org, отправив в неё сообщение:

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