Move mautrix-facebook into a separate role
This commit is contained in:
25
roles/matrix-bridge-mautrix-facebook/defaults/main.yml
Normal file
25
roles/matrix-bridge-mautrix-facebook/defaults/main.yml
Normal file
@ -0,0 +1,25 @@
|
||||
# mautrix-facebook is a Matrix <-> Facebook bridge
|
||||
# See: https://github.com/tulir/mautrix-facebook
|
||||
|
||||
matrix_mautrix_facebook_enabled: true
|
||||
|
||||
matrix_mautrix_facebook_docker_image: "tulir/mautrix-facebook:latest"
|
||||
|
||||
matrix_mautrix_facebook_base_path: "{{ matrix_base_data_path }}/mautrix-facebook"
|
||||
|
||||
# Get your own API keys at https://developers.facebook.com/docs/apis-and-sdks/
|
||||
matrix_mautrix_facebook_api_id: ''
|
||||
matrix_mautrix_facebook_api_hash: ''
|
||||
|
||||
matrix_mautrix_facebook_homeserver_address: 'https://{{ matrix_server_fqn_matrix }}'
|
||||
matrix_mautrix_facebook_homeserver_domain: '{{ matrix_domain }}'
|
||||
matrix_mautrix_facebook_appservice_address: 'http://matrix-mautrix-facebook:8080'
|
||||
|
||||
# A list of extra arguments to pass to the container
|
||||
matrix_mautrix_facebook_container_extra_arguments: []
|
||||
|
||||
# List of systemd services that matrix-mautrix-facebook.service depends on.
|
||||
matrix_mautrix_facebook_systemd_required_services_list: ['docker.service']
|
||||
|
||||
# List of systemd services that matrix-mautrix-facebook.service wants
|
||||
matrix_mautrix_facebook_systemd_wanted_services_list: []
|
3
roles/matrix-bridge-mautrix-facebook/tasks/init.yml
Normal file
3
roles/matrix-bridge-mautrix-facebook/tasks/init.yml
Normal file
@ -0,0 +1,3 @@
|
||||
- set_fact:
|
||||
matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-mautrix-facebook'] }}"
|
||||
when: "matrix_mautrix_facebook_enabled"
|
21
roles/matrix-bridge-mautrix-facebook/tasks/main.yml
Normal file
21
roles/matrix-bridge-mautrix-facebook/tasks/main.yml
Normal file
@ -0,0 +1,21 @@
|
||||
- import_tasks: "{{ role_path }}/tasks/init.yml"
|
||||
tags:
|
||||
- always
|
||||
|
||||
- import_tasks: "{{ role_path }}/tasks/validate_config.yml"
|
||||
when: "run_setup and matrix_mautrix_facebook_enabled"
|
||||
tags:
|
||||
- setup-all
|
||||
- setup-mautrix-facebook
|
||||
|
||||
- import_tasks: "{{ role_path }}/tasks/setup-install.yml"
|
||||
when: "run_setup and matrix_mautrix_facebook_enabled"
|
||||
tags:
|
||||
- setup-all
|
||||
- setup-mautrix-facebook
|
||||
|
||||
- import_tasks: "{{ role_path }}/tasks/setup-uninstall.yml"
|
||||
when: "run_setup and not matrix_mautrix_facebook_enabled"
|
||||
tags:
|
||||
- setup-all
|
||||
- setup-mautrix-facebook
|
80
roles/matrix-bridge-mautrix-facebook/tasks/setup-install.yml
Normal file
80
roles/matrix-bridge-mautrix-facebook/tasks/setup-install.yml
Normal file
@ -0,0 +1,80 @@
|
||||
---
|
||||
|
||||
# If the matrix-synapse role is not used, `matrix_synapse_role_executed` won't exist.
|
||||
# We don't want to fail in such cases.
|
||||
- name: Fail if matrix-synapse role already executed
|
||||
fail:
|
||||
msg: >-
|
||||
The matrix-bridge-mautrix-facebook role needs to execute before the matrix-synapse role.
|
||||
when: "matrix_synapse_role_executed|default(False)"
|
||||
|
||||
- name: Ensure Mautrix Facebook image is pulled
|
||||
docker_image:
|
||||
name: "{{ matrix_mautrix_facebook_docker_image }}"
|
||||
|
||||
- name: Ensure Mautrix Facebook base directory exists
|
||||
file:
|
||||
path: "{{ matrix_mautrix_facebook_base_path }}"
|
||||
state: directory
|
||||
mode: 0750
|
||||
owner: "{{ matrix_user_username }}"
|
||||
group: "{{ matrix_user_username }}"
|
||||
|
||||
- name: Check if a mautrix-facebook configuration file exists
|
||||
stat:
|
||||
path: "{{ matrix_mautrix_facebook_base_path }}/config.yaml"
|
||||
register: mautrix_facebook_config_file_stat
|
||||
|
||||
- name: Ensure Matrix Mautrix facebook config installed
|
||||
template:
|
||||
src: "{{ role_path }}/templates/config.yaml.j2"
|
||||
dest: "{{ matrix_mautrix_facebook_base_path }}/config.yaml"
|
||||
mode: 0644
|
||||
owner: "{{ matrix_user_username }}"
|
||||
group: "{{ matrix_user_username }}"
|
||||
when: "not mautrix_facebook_config_file_stat.stat.exists"
|
||||
|
||||
- name: Ensure matrix-mautrix-facebook.service installed
|
||||
template:
|
||||
src: "{{ role_path }}/templates/systemd/matrix-mautrix-facebook.service.j2"
|
||||
dest: "/etc/systemd/system/matrix-mautrix-facebook.service"
|
||||
mode: 0644
|
||||
register: matrix_mautrix_facebook_systemd_service_result
|
||||
|
||||
- name: Ensure systemd reloaded after matrix-mautrix-facebook.service installation
|
||||
service:
|
||||
daemon_reload: yes
|
||||
when: "matrix_mautrix_facebook_systemd_service_result.changed"
|
||||
|
||||
- name: Check if a mautrix-facebook registration file exists
|
||||
stat:
|
||||
path: "{{ matrix_mautrix_facebook_base_path }}/registration.yaml"
|
||||
register: mautrix_facebook_registration_file_stat
|
||||
|
||||
- name: Generate matrix-mautrix-facebook registration.yaml if it doesn't exist
|
||||
shell:
|
||||
cmd: >-
|
||||
/usr/bin/docker run
|
||||
--rm
|
||||
--user={{ matrix_user_uid }}:{{ matrix_user_gid }}
|
||||
--cap-drop=ALL
|
||||
--name matrix-mautrix-facebook-gen
|
||||
-v {{ matrix_mautrix_facebook_base_path }}:/data:z
|
||||
{{ matrix_mautrix_facebook_docker_image }}
|
||||
python3 -m mautrix_facebook -g -c /data/config.yaml -r /data/registration.yaml
|
||||
when: "not mautrix_facebook_registration_file_stat.stat.exists"
|
||||
|
||||
- set_fact:
|
||||
matrix_synapse_app_service_config_file_mautrix_facebook: '/app-registration/mautrix-facebook.yml'
|
||||
|
||||
# If the matrix-synapse role is not used, these variables may not exist.
|
||||
- set_fact:
|
||||
matrix_synapse_container_additional_volumes: >
|
||||
{{ matrix_synapse_container_additional_volumes|default([]) }}
|
||||
+
|
||||
{{ [{'src': '{{ matrix_mautrix_facebook_base_path }}/registration.yaml', 'dst': '{{ matrix_synapse_app_service_config_file_mautrix_facebook }}', 'options': 'ro'}] }}
|
||||
|
||||
matrix_synapse_app_service_config_files: >
|
||||
{{ matrix_synapse_app_service_config_files|default([]) }}
|
||||
+
|
||||
{{ ["{{ matrix_synapse_app_service_config_file_mautrix_facebook }}"] | to_nice_json }}
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
|
||||
- name: Ensure matrix-mautrix-facebook.service doesn't exist
|
||||
file:
|
||||
path: "/etc/systemd/system/matrix-mautrix-facebook.service"
|
||||
state: absent
|
@ -0,0 +1,10 @@
|
||||
---
|
||||
|
||||
- name: Fail if required settings not defined
|
||||
fail:
|
||||
msg: >-
|
||||
You need to define a required configuration setting (`{{ item }}`).
|
||||
when: "vars[item] == ''"
|
||||
with_items:
|
||||
- "matrix_mautrix_facebook_api_id"
|
||||
- "matrix_mautrix_facebook_api_hash"
|
109
roles/matrix-bridge-mautrix-facebook/templates/config.yaml.j2
Normal file
109
roles/matrix-bridge-mautrix-facebook/templates/config.yaml.j2
Normal file
@ -0,0 +1,109 @@
|
||||
#jinja2: lstrip_blocks: "True"
|
||||
# Homeserver details
|
||||
homeserver:
|
||||
# The address that this appservice can use to connect to the homeserver.
|
||||
address: {{ matrix_mautrix_facebook_homeserver_address }}
|
||||
# The domain of the homeserver (for MXIDs, etc).
|
||||
domain: {{ matrix_mautrix_facebook_homeserver_domain }}
|
||||
# Whether or not to verify the SSL certificate of the homeserver.
|
||||
# Only applies if address starts with https://
|
||||
verify_ssl: true
|
||||
|
||||
# Application service host/registration related details
|
||||
# Changing these values requires regeneration of the registration.
|
||||
appservice:
|
||||
# The address that the homeserver can use to connect to this appservice.
|
||||
address: {{ matrix_mautrix_facebook_appservice_address }}
|
||||
|
||||
# The hostname and port where this appservice should listen.
|
||||
hostname: 0.0.0.0
|
||||
port: 8080
|
||||
# The maximum body size of appservice API requests (from the homeserver) in mebibytes
|
||||
# Usually 1 is enough, but on high-traffic bridges you might need to increase this to avoid 413s
|
||||
max_body_size: 1
|
||||
|
||||
# The full URI to the database. SQLite and Postgres are fully supported.
|
||||
# Other DBMSes supported by SQLAlchemy may or may not work.
|
||||
# Format examples:
|
||||
# SQLite: sqlite:///filename.db
|
||||
# Postgres: postgres://username:password@hostname/dbname
|
||||
database: sqlite:////data/mautrix-facebook.db
|
||||
|
||||
# The unique ID of this appservice.
|
||||
id: facebook
|
||||
# Username of the appservice bot.
|
||||
bot_username: facebookbot
|
||||
# Display name and avatar for bot. Set to "remove" to remove display name/avatar, leave empty
|
||||
# to leave display name/avatar as-is.
|
||||
bot_displayname: Facebook bridge bot
|
||||
bot_avatar: mxc://maunium.net/ddtNPZSKMNqaUzqrHuWvUADv
|
||||
|
||||
# Authentication tokens for AS <-> HS communication. Autogenerated; do not modify.
|
||||
as_token: "This value is generated when generating the registration"
|
||||
hs_token: "This value is generated when generating the registration"
|
||||
|
||||
# Bridge config
|
||||
bridge:
|
||||
# Localpart template of MXIDs for Facebook users.
|
||||
# {userid} is replaced with the user ID of the Facebook user.
|
||||
username_template: "facebook_{userid}"
|
||||
|
||||
# The prefix for commands. Only required in non-management rooms.
|
||||
command_prefix: "!fb"
|
||||
|
||||
# Number of chats to sync (and create portals for) on startup/login.
|
||||
# Maximum 20, set 0 to disable automatic syncing.
|
||||
initial_chat_sync: 10
|
||||
# Whether or not the Facebook users of logged in Matrix users should be
|
||||
# invited to private chats when the user sends a message from another client.
|
||||
invite_own_puppet_to_pm: false
|
||||
# Whether or not to use /sync to get presence, read receipts and typing notifications when using
|
||||
# your own Matrix account as the Matrix puppet for your Facebook account.
|
||||
sync_with_custom_puppets: true
|
||||
# Whether or not to bridge presence in both directions. Facebook allows users not to broadcast
|
||||
# presence, but then it won't send other users' presence to the client.
|
||||
presence: true
|
||||
|
||||
# Permissions for using the bridge.
|
||||
# Permitted values:
|
||||
# user - Use the bridge with puppeting.
|
||||
# admin - Use and administrate the bridge.
|
||||
# Permitted keys:
|
||||
# * - All Matrix users
|
||||
# domain - All users on that homeserver
|
||||
# mxid - Specific user
|
||||
permissions:
|
||||
'{{ matrix_mautrix_facebook_homeserver_domain }}': user
|
||||
|
||||
# Python logging configuration.
|
||||
#
|
||||
# See section 16.7.2 of the Python documentation for more info:
|
||||
# https://docs.python.org/3.6/library/logging.config.html#configuration-dictionary-schema
|
||||
logging:
|
||||
version: 1
|
||||
formatters:
|
||||
colored:
|
||||
(): mautrix_facebook.util.ColorFormatter
|
||||
format: "[%(asctime)s] [%(levelname)s@%(name)s] %(message)s"
|
||||
normal:
|
||||
format: "[%(asctime)s] [%(levelname)s@%(name)s] %(message)s"
|
||||
handlers:
|
||||
file:
|
||||
class: logging.handlers.RotatingFileHandler
|
||||
formatter: normal
|
||||
filename: /data/mautrix-facebook.log
|
||||
maxBytes: 10485760
|
||||
backupCount: 10
|
||||
console:
|
||||
class: logging.StreamHandler
|
||||
formatter: colored
|
||||
loggers:
|
||||
mau:
|
||||
level: DEBUG
|
||||
fbchat:
|
||||
level: DEBUG
|
||||
aiohttp:
|
||||
level: INFO
|
||||
root:
|
||||
level: DEBUG
|
||||
handlers: [file, console]
|
@ -0,0 +1,42 @@
|
||||
#jinja2: lstrip_blocks: "True"
|
||||
[Unit]
|
||||
Description=Matrix Mautrix Facebook server
|
||||
{% for service in matrix_mautrix_facebook_systemd_required_services_list %}
|
||||
Requires={{ service }}
|
||||
After={{ service }}
|
||||
{% endfor %}
|
||||
{% for service in matrix_mautrix_facebook_systemd_wanted_services_list %}
|
||||
Wants={{ service }}
|
||||
{% endfor %}
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStartPre=-/usr/bin/docker kill matrix-mautrix-facebook
|
||||
ExecStartPre=-/usr/bin/docker rm matrix-mautrix-facebook
|
||||
ExecStartPre=/usr/bin/docker run --rm --name matrix-mautrix-facebook-db \
|
||||
--log-driver=none \
|
||||
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
|
||||
--cap-drop=ALL \
|
||||
-v {{ matrix_mautrix_facebook_base_path }}:/data:z \
|
||||
{{ matrix_mautrix_facebook_docker_image }} \
|
||||
alembic -x config=/data/config.yaml upgrade head
|
||||
|
||||
ExecStart=/usr/bin/docker run --rm --name matrix-mautrix-facebook \
|
||||
--log-driver=none \
|
||||
--user={{ matrix_user_uid }}:{{ matrix_user_gid }} \
|
||||
--cap-drop=ALL \
|
||||
--network={{ matrix_docker_network }} \
|
||||
-v {{ matrix_mautrix_facebook_base_path }}:/data:z \
|
||||
{% for arg in matrix_mautrix_facebook_container_extra_arguments %}
|
||||
{{ arg }} \
|
||||
{% endfor %}
|
||||
{{ matrix_mautrix_facebook_docker_image }} \
|
||||
python3 -m mautrix_facebook -c /data/config.yaml
|
||||
|
||||
ExecStop=-/usr/bin/docker kill matrix-mautrix-facebook
|
||||
ExecStop=-/usr/bin/docker rm matrix-mautrix-facebook
|
||||
Restart=always
|
||||
RestartSec=30
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
Reference in New Issue
Block a user