Add support for WeChat bridging
This is based on the PR (https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/3241)
by Tobias Diez (https://github.com/tobiasdiez).
I've refactored some parts, made it more configurable, polished it up,
and it's integrated into the playbook now.
Both the WeChat bridge and WeChat agent appear to be working.
The WeChat bridge joins rooms and responds as expected.
That said, end-to-end testing (actually bridging to a WeChat account) has not been done yet.
Fixes https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/701
Fixes https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/3092
This is sponsored https://etke.cc/ work related to https://gitlab.com/etke.cc/ansible/-/issues/2
Squashed commit of the following:
commit fdd37f02472a0b83d61b4fac80650442f90e7629
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 21:05:53 2024 +0300
Add documentation for WeChat bridge
commit 8426fc8b95bb160ea7f9659bd45bc59cf1326614
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:59:42 2024 +0300
Rename directory for matrix_wechat_agent_container_src_files_path
commit da200df82bbc9153d307095dd90e4769c400ea1e
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:58:26 2024 +0300
Make WeChat listen_secret configurable and auto-configured via matrix_homeserver_generic_secret_key
commit 4022cb1355828ac16af7d9228cb1066962bb35f5
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:54:56 2024 +0300
Refactor install.yml for WeChat a bit (using blocks, etc.)
commit d07a39b4c4f6b93d04204e13e384086d5a242d52
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:52:35 2024 +0300
Rename WeChat Agent configuration file
This makes it more clear that it belongs to the agent.
Otherwise, `config.yaml` and `configure.yaml` make you wonder.
commit ccca72f8d1e602f7c42f4bd552193afa153c9b9d
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:49:06 2024 +0300
Move WeChat agent configuration to a template
commit a4047d94d8877b4095712dfc76ac3082a1edca28
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:47:17 2024 +0300
Mount WeChat config as readonly and instruct bridge to not update it
commit bc0e89f345bf14bbdbfd574bb60d93918c2ac053
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:46:33 2024 +0300
Sync WeChat config with upstream
Brings up-to-date with:
https://github.com/duo/matrix-wechat/commits/0.2.4/example-config.yaml
commit a46f5b9cbc8bf16042685a18c77d25a606bc8232
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 19:48:17 2024 +0300
Rename some files
commit 3877679040cffc4ca6cccfa21a7335f8f796f06e
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 19:47:10 2024 +0300
Update WeChat logging config
This brings it up-to-date with what mautrix-go uses.
Otherwise, on startup we see:
> Migrating legacy log config
.. and it gets migrated to what we've done here.
commit e3e95ab234651867c7a975a08455549b31db4172
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 19:43:37 2024 +0300
Make sure matrix-wechat-agent runs as 1000:1000
It needs to write stuff to `/home/user/.vnc`.
`/home/user` is owned by `user:group` (`1000:1000`), so it cannot run
any other way.
Previously, if the `matrix` user was uid=1000 by chance, it would work,
but that's pure luck.
commit 4d5748ae9b84c81d6b48b0a41b790339d9ac4724
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 18:57:09 2024 +0300
Pin wechat and wechat-agent versions
commit 40d40009f19ebceed4126146cbb510a2c95af671
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 18:53:58 2024 +0300
docker_image -> container_image for WeChat bridge
commit cc33aff592541913070d13288d17b04ed6243176
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 18:00:25 2024 +0300
docker_src -> container_src in WeChat bridge
commit 42e6ae9a6483c8ca6d53b8052058d41d90d93797
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 17:54:24 2024 +0300
matrix_go_wechat_ -> matrix_wechat_
The bridge is written in Go, but does not include Go anywhere in its
name. As such, it's mostly useless to use `matrix_go_wechat` as the
prefix.
commit d6662a69d1916d215d5184320c36d2ef73afd3e9
Author: Tobias Diez <code@tobiasdiez.de>
Date: Mon Mar 25 10:55:16 2024 +0800
Add wechat bridge
2024-06-03 18:06:19 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
# WeChat Bridge is a Matrix <-> WeChat bridge
|
|
|
|
# Project source code URL: https://github.com/duo/matrix-wechat
|
|
|
|
|
|
|
|
matrix_wechat_enabled: true
|
|
|
|
|
|
|
|
# renovate: datasource=docker depName=lxduo/matrix-wechat
|
|
|
|
matrix_wechat_version: 0.2.4
|
|
|
|
matrix_wechat_container_image: "{{ matrix_wechat_container_image_name_prefix }}lxduo/matrix-wechat:{{ matrix_wechat_version }}"
|
|
|
|
matrix_wechat_container_image_name_prefix: "{{ 'localhost/' if matrix_wechat_container_image_self_build else matrix_container_global_registry_prefix }}"
|
|
|
|
matrix_wechat_container_image_force_pull: "{{ matrix_wechat_container_image.endswith(':latest') }}"
|
|
|
|
|
|
|
|
matrix_wechat_container_image_self_build: false
|
|
|
|
matrix_wechat_container_image_self_build_repo: "https://github.com/duo/matrix-wechat.git"
|
|
|
|
matrix_wechat_container_image_self_build_branch: "{{ 'master' if matrix_wechat_version == 'latest' else matrix_wechat_version }}"
|
|
|
|
|
|
|
|
# renovate: datasource=docker depName=lxduo/matrix-wechat-agent
|
|
|
|
matrix_wechat_agent_version: 0.0.1
|
|
|
|
matrix_wechat_agent_container_image: "{{ matrix_wechat_agent_container_image_name_prefix }}lxduo/matrix-wechat-agent:{{ matrix_wechat_agent_version }}"
|
|
|
|
matrix_wechat_agent_container_image_name_prefix: "{{ 'localhost/' if matrix_wechat_agent_container_image_self_build else matrix_container_global_registry_prefix }}"
|
|
|
|
matrix_wechat_agent_container_image_force_pull: "{{ matrix_wechat_agent_container_image.endswith(':latest') }}"
|
|
|
|
|
|
|
|
# The agent needs to write to /home/user/.vnc.
|
|
|
|
# `/home/user` is owned by `user:group` (`1000:1000`), so it needs to run with that user/group.
|
|
|
|
matrix_wechat_agent_container_user_uid: 1000
|
|
|
|
matrix_wechat_agent_container_user_gid: 1000
|
|
|
|
|
|
|
|
matrix_wechat_agent_container_image_self_build: false
|
|
|
|
matrix_wechat_agent_container_image_self_build_repo: "https://github.com/duo/matrix-wechat-agent.git"
|
|
|
|
matrix_wechat_agent_container_image_self_build_branch: "{{ 'master' if matrix_wechat_agent_version == 'latest' else matrix_wechat_agent_version }}"
|
|
|
|
|
|
|
|
matrix_wechat_base_path: "{{ matrix_base_data_path }}/wechat"
|
|
|
|
matrix_wechat_config_path: "{{ matrix_wechat_base_path }}/config"
|
|
|
|
matrix_wechat_data_path: "{{ matrix_wechat_base_path }}/data"
|
|
|
|
matrix_wechat_container_src_files_path: "{{ matrix_wechat_base_path }}/container-src"
|
|
|
|
matrix_wechat_agent_container_src_files_path: "{{ matrix_wechat_base_path }}/agent-container-src"
|
|
|
|
|
|
|
|
matrix_wechat_homeserver_address: ""
|
|
|
|
matrix_wechat_homeserver_domain: "{{ matrix_domain }}"
|
|
|
|
matrix_wechat_appservice_address: 'http://matrix-wechat:8080'
|
|
|
|
|
|
|
|
matrix_wechat_container_network: ""
|
|
|
|
|
|
|
|
matrix_wechat_container_additional_networks: "{{ matrix_wechat_container_additional_networks_auto + matrix_wechat_container_additional_networks_custom }}"
|
|
|
|
matrix_wechat_container_additional_networks_auto: []
|
|
|
|
matrix_wechat_container_additional_networks_custom: []
|
|
|
|
|
|
|
|
# A list of extra arguments to pass to the container
|
|
|
|
matrix_wechat_container_extra_arguments: []
|
|
|
|
|
|
|
|
# List of systemd services that matrix-wechat.service depends on.
|
|
|
|
matrix_wechat_systemd_required_services_list: "{{ matrix_wechat_systemd_required_services_list_default + matrix_wechat_systemd_required_services_list_auto + matrix_wechat_systemd_required_services_list_custom }}"
|
2024-06-04 10:14:34 +00:00
|
|
|
matrix_wechat_systemd_required_services_list_default: "{{ [devture_systemd_docker_base_docker_service_name] if devture_systemd_docker_base_docker_service_name else [] }}"
|
Add support for WeChat bridging
This is based on the PR (https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/3241)
by Tobias Diez (https://github.com/tobiasdiez).
I've refactored some parts, made it more configurable, polished it up,
and it's integrated into the playbook now.
Both the WeChat bridge and WeChat agent appear to be working.
The WeChat bridge joins rooms and responds as expected.
That said, end-to-end testing (actually bridging to a WeChat account) has not been done yet.
Fixes https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/701
Fixes https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/3092
This is sponsored https://etke.cc/ work related to https://gitlab.com/etke.cc/ansible/-/issues/2
Squashed commit of the following:
commit fdd37f02472a0b83d61b4fac80650442f90e7629
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 21:05:53 2024 +0300
Add documentation for WeChat bridge
commit 8426fc8b95bb160ea7f9659bd45bc59cf1326614
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:59:42 2024 +0300
Rename directory for matrix_wechat_agent_container_src_files_path
commit da200df82bbc9153d307095dd90e4769c400ea1e
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:58:26 2024 +0300
Make WeChat listen_secret configurable and auto-configured via matrix_homeserver_generic_secret_key
commit 4022cb1355828ac16af7d9228cb1066962bb35f5
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:54:56 2024 +0300
Refactor install.yml for WeChat a bit (using blocks, etc.)
commit d07a39b4c4f6b93d04204e13e384086d5a242d52
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:52:35 2024 +0300
Rename WeChat Agent configuration file
This makes it more clear that it belongs to the agent.
Otherwise, `config.yaml` and `configure.yaml` make you wonder.
commit ccca72f8d1e602f7c42f4bd552193afa153c9b9d
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:49:06 2024 +0300
Move WeChat agent configuration to a template
commit a4047d94d8877b4095712dfc76ac3082a1edca28
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:47:17 2024 +0300
Mount WeChat config as readonly and instruct bridge to not update it
commit bc0e89f345bf14bbdbfd574bb60d93918c2ac053
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 20:46:33 2024 +0300
Sync WeChat config with upstream
Brings up-to-date with:
https://github.com/duo/matrix-wechat/commits/0.2.4/example-config.yaml
commit a46f5b9cbc8bf16042685a18c77d25a606bc8232
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 19:48:17 2024 +0300
Rename some files
commit 3877679040cffc4ca6cccfa21a7335f8f796f06e
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 19:47:10 2024 +0300
Update WeChat logging config
This brings it up-to-date with what mautrix-go uses.
Otherwise, on startup we see:
> Migrating legacy log config
.. and it gets migrated to what we've done here.
commit e3e95ab234651867c7a975a08455549b31db4172
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 19:43:37 2024 +0300
Make sure matrix-wechat-agent runs as 1000:1000
It needs to write stuff to `/home/user/.vnc`.
`/home/user` is owned by `user:group` (`1000:1000`), so it cannot run
any other way.
Previously, if the `matrix` user was uid=1000 by chance, it would work,
but that's pure luck.
commit 4d5748ae9b84c81d6b48b0a41b790339d9ac4724
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 18:57:09 2024 +0300
Pin wechat and wechat-agent versions
commit 40d40009f19ebceed4126146cbb510a2c95af671
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 18:53:58 2024 +0300
docker_image -> container_image for WeChat bridge
commit cc33aff592541913070d13288d17b04ed6243176
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 18:00:25 2024 +0300
docker_src -> container_src in WeChat bridge
commit 42e6ae9a6483c8ca6d53b8052058d41d90d93797
Author: Slavi Pantaleev <slavi@devture.com>
Date: Mon Jun 3 17:54:24 2024 +0300
matrix_go_wechat_ -> matrix_wechat_
The bridge is written in Go, but does not include Go anywhere in its
name. As such, it's mostly useless to use `matrix_go_wechat` as the
prefix.
commit d6662a69d1916d215d5184320c36d2ef73afd3e9
Author: Tobias Diez <code@tobiasdiez.de>
Date: Mon Mar 25 10:55:16 2024 +0800
Add wechat bridge
2024-06-03 18:06:19 +00:00
|
|
|
matrix_wechat_systemd_required_services_list_auto: []
|
|
|
|
matrix_wechat_systemd_required_services_list_custom: []
|
|
|
|
|
|
|
|
# List of systemd services that matrix-wechat.service wants
|
|
|
|
matrix_wechat_systemd_wanted_services_list: []
|
|
|
|
|
|
|
|
matrix_wechat_appservice_token: ''
|
|
|
|
matrix_wechat_homeserver_token: ''
|
|
|
|
|
|
|
|
matrix_wechat_appservice_bot_username: wechatbot
|
|
|
|
|
|
|
|
matrix_wechat_command_prefix: "!wechat"
|
|
|
|
|
|
|
|
# Whether or not created rooms should have federation enabled.
|
|
|
|
# If false, created portal rooms will never be federated.
|
|
|
|
matrix_wechat_federate_rooms: true
|
|
|
|
|
|
|
|
# Database-related configuration fields.
|
|
|
|
matrix_wechat_database_engine: 'postgres'
|
|
|
|
matrix_wechat_database_username: 'matrix_wechat'
|
|
|
|
matrix_wechat_database_password: 'some-password'
|
|
|
|
matrix_wechat_database_hostname: ''
|
|
|
|
matrix_wechat_database_port: 5432
|
|
|
|
matrix_wechat_database_name: 'matrix_wechat'
|
|
|
|
matrix_wechat_database_sslmode: disable
|
|
|
|
matrix_wechat_database_connection_string: 'postgresql://{{ matrix_wechat_database_username }}:{{ matrix_wechat_database_password }}@{{ matrix_wechat_database_hostname }}:{{ matrix_wechat_database_port }}/{{ matrix_wechat_database_name }}?sslmode={{ matrix_wechat_database_sslmode }}'
|
|
|
|
|
|
|
|
matrix_wechat_bridge_listen_secret: ''
|
|
|
|
|
|
|
|
# Can be set to enable automatic double-puppeting via Shared Secret Auth (https://github.com/devture/matrix-synapse-shared-secret-auth).
|
|
|
|
matrix_wechat_login_shared_secret: ''
|
|
|
|
matrix_wechat_login_shared_secret_map:
|
|
|
|
"{{ {matrix_wechat_homeserver_domain: matrix_wechat_login_shared_secret} if matrix_wechat_login_shared_secret else {} }}"
|
|
|
|
|
|
|
|
# Servers to always allow double puppeting from
|
|
|
|
matrix_wechat_double_puppet_server_map:
|
|
|
|
"{{ matrix_wechat_homeserver_domain: matrix_wechat_homeserver_address }}"
|
|
|
|
|
|
|
|
# Enable End-to-bridge encryption
|
|
|
|
matrix_wechat_encryption_allow: "{{ matrix_bridges_encryption_enabled }}"
|
|
|
|
matrix_wechat_encryption_default: "{{ matrix_wechat_encryption_allow }}"
|
|
|
|
|
|
|
|
# Minimum severity of journal log messages.
|
|
|
|
# Options: debug, info, warn, error, fatal
|
|
|
|
matrix_wechat_log_level: 'warn'
|
|
|
|
|
|
|
|
matrix_wechat_permissions: |
|
|
|
|
{{
|
|
|
|
{matrix_wechat_homeserver_domain: 'user'}
|
|
|
|
| combine({matrix_admin: 'admin'} if matrix_admin else {})
|
|
|
|
}}
|
|
|
|
|
|
|
|
# Default Wechat configuration template which covers the generic use case.
|
|
|
|
# You can customize it by controlling the various variables inside it.
|
|
|
|
#
|
|
|
|
# For a more advanced customization, you can extend the default (see `matrix_wechat_configuration_extension_yaml`)
|
|
|
|
# or completely replace this variable with your own template.
|
|
|
|
matrix_wechat_configuration_yaml: "{{ lookup('template', 'templates/config.yaml.j2') }}"
|
|
|
|
|
|
|
|
matrix_wechat_configuration_extension_yaml: |
|
|
|
|
# Your custom YAML configuration goes here.
|
|
|
|
# This configuration extends the default starting configuration (`matrix_wechat_configuration_yaml`).
|
|
|
|
#
|
|
|
|
# You can override individual variables from the default configuration, or introduce new ones.
|
|
|
|
#
|
|
|
|
# If you need something more special, you can take full control by
|
|
|
|
# completely redefining `matrix_wechat_configuration_yaml`.
|
|
|
|
|
|
|
|
matrix_wechat_configuration_extension: "{{ matrix_wechat_configuration_extension_yaml | from_yaml if matrix_wechat_configuration_extension_yaml | from_yaml is mapping else {} }}"
|
|
|
|
|
|
|
|
# Holds the final configuration (a combination of the default and its extension).
|
|
|
|
# You most likely don't need to touch this variable. Instead, see `matrix_wechat_configuration_yaml`.
|
|
|
|
matrix_wechat_configuration: "{{ matrix_wechat_configuration_yaml | from_yaml | combine(matrix_wechat_configuration_extension, recursive=True) }}"
|
|
|
|
|
|
|
|
matrix_wechat_registration_yaml: |
|
|
|
|
id: wechat
|
|
|
|
url: {{ matrix_wechat_appservice_address }}
|
|
|
|
as_token: "{{ matrix_wechat_appservice_token }}"
|
|
|
|
hs_token: "{{ matrix_wechat_homeserver_token }}"
|
|
|
|
# See https://github.com/mautrix/signal/issues/43
|
|
|
|
sender_localpart: _bot_{{ matrix_wechat_appservice_bot_username }}
|
|
|
|
rate_limited: false
|
|
|
|
namespaces:
|
|
|
|
users:
|
|
|
|
- regex: '^@_wechat_(.*):{{ matrix_wechat_homeserver_domain | regex_escape }}$'
|
|
|
|
exclusive: true
|
|
|
|
- exclusive: true
|
|
|
|
regex: '^@{{ matrix_wechat_appservice_bot_username | regex_escape }}:{{ matrix_wechat_homeserver_domain | regex_escape }}$'
|
|
|
|
de.sorunome.msc2409.push_ephemeral: true
|
|
|
|
|
|
|
|
matrix_wechat_registration: "{{ matrix_wechat_registration_yaml | from_yaml }}"
|
|
|
|
|
|
|
|
|
|
|
|
matrix_wechat_agent_service_secret: "{{ matrix_wechat_bridge_listen_secret }}"
|
|
|
|
|
|
|
|
matrix_wechat_agent_configuration_yaml: "{{ lookup('template', 'templates/agent-config.yaml.j2') }}"
|
|
|
|
|
|
|
|
matrix_wechat_agent_configuration: "{{ matrix_wechat_agent_configuration_yaml | from_yaml }}"
|