| @@ -48,6 +48,24 @@ matrix_identity_server_url: "{{ 'https://' + matrix_synapse_trusted_third_party_ | |||||
| ###################################################################### | ###################################################################### | ||||
| ###################################################################### | |||||
| # | |||||
| # matrix-bridge-mautrix-facebook | |||||
| # | |||||
| ###################################################################### | |||||
| # We don't enable bridges by default. | |||||
| matrix_mautrix_facebook_enabled: false | |||||
| matrix_mautrix_facebook_systemd_required_services_list: ['docker.service', 'matrix-synapse.service'] | |||||
| ###################################################################### | |||||
| # | |||||
| # /matrix-bridge-mautrix-facebook | |||||
| # | |||||
| ###################################################################### | |||||
| ###################################################################### | ###################################################################### | ||||
| # | # | ||||
| # matrix-bridge-mautrix-telegram | # matrix-bridge-mautrix-telegram | ||||
| @@ -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: [] | |||||
| @@ -1,3 +1,3 @@ | |||||
| - set_fact: | - set_fact: | ||||
| matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-mautrix-facebook'] }}" | matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-mautrix-facebook'] }}" | ||||
| when: matrix_mautrix_facebook_enabled | |||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| @@ -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 | |||||
| @@ -1,63 +1,55 @@ | |||||
| --- | --- | ||||
| # 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 | - name: Ensure Mautrix Facebook image is pulled | ||||
| docker_image: | docker_image: | ||||
| name: "{{ matrix_mautrix_facebook_docker_image }}" | name: "{{ matrix_mautrix_facebook_docker_image }}" | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| - name: Ensure Mautrix Facebook configuration path exists | |||||
| - name: Ensure Mautrix Facebook base directory exists | |||||
| file: | file: | ||||
| path: "{{ matrix_mautrix_facebook_base_path }}" | path: "{{ matrix_mautrix_facebook_base_path }}" | ||||
| state: directory | state: directory | ||||
| mode: 0750 | mode: 0750 | ||||
| owner: "{{ matrix_user_username }}" | owner: "{{ matrix_user_username }}" | ||||
| group: "{{ matrix_user_username }}" | group: "{{ matrix_user_username }}" | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| - name: Check if a mautrix-facebook configuration file exists | - name: Check if a mautrix-facebook configuration file exists | ||||
| stat: | stat: | ||||
| path: "{{ matrix_mautrix_facebook_base_path }}/config.yaml" | path: "{{ matrix_mautrix_facebook_base_path }}/config.yaml" | ||||
| register: mautrix_facebook_config_file_stat | register: mautrix_facebook_config_file_stat | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| - name: Ensure Matrix Mautrix facebook config installed | - name: Ensure Matrix Mautrix facebook config installed | ||||
| template: | template: | ||||
| src: "{{ role_path }}/templates/ext/mautrix-facebook/config.yaml.j2" | |||||
| src: "{{ role_path }}/templates/config.yaml.j2" | |||||
| dest: "{{ matrix_mautrix_facebook_base_path }}/config.yaml" | dest: "{{ matrix_mautrix_facebook_base_path }}/config.yaml" | ||||
| mode: 0644 | mode: 0644 | ||||
| owner: "{{ matrix_user_username }}" | owner: "{{ matrix_user_username }}" | ||||
| group: "{{ matrix_user_username }}" | group: "{{ matrix_user_username }}" | ||||
| when: "matrix_mautrix_facebook_enabled and not mautrix_facebook_config_file_stat.stat.exists" | |||||
| - name: (Migration) Fix up old configuration | |||||
| lineinfile: | |||||
| path: "{{ matrix_mautrix_facebook_base_path }}/config.yaml" | |||||
| regexp: "{{ item.regexp }}" | |||||
| line: "{{ item.line }}" | |||||
| backrefs: yes | |||||
| with_items: | |||||
| - {'regexp': '^(\s+)filename: \./mautrix-facebook.log', 'line': '\1filename: /data/mautrix-facebook.log'} | |||||
| - {'regexp': '^(\s+)database:', 'line': '\1database: sqlite:////data/mautrix-facebook.db'} | |||||
| when: "matrix_mautrix_facebook_enabled and mautrix_facebook_config_file_stat.stat.exists" | |||||
| when: "not mautrix_facebook_config_file_stat.stat.exists" | |||||
| - name: Ensure matrix-mautrix-facebook.service installed | - name: Ensure matrix-mautrix-facebook.service installed | ||||
| template: | template: | ||||
| src: "{{ role_path }}/templates/ext/mautrix-facebook/systemd/matrix-mautrix-facebook.service.j2" | |||||
| src: "{{ role_path }}/templates/systemd/matrix-mautrix-facebook.service.j2" | |||||
| dest: "/etc/systemd/system/matrix-mautrix-facebook.service" | dest: "/etc/systemd/system/matrix-mautrix-facebook.service" | ||||
| mode: 0644 | mode: 0644 | ||||
| register: matrix_mautrix_facebook_systemd_service_result | register: matrix_mautrix_facebook_systemd_service_result | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| - name: Ensure systemd reloaded after matrix-mautrix-facebook.service installation | - name: Ensure systemd reloaded after matrix-mautrix-facebook.service installation | ||||
| service: | service: | ||||
| daemon_reload: yes | daemon_reload: yes | ||||
| when: "matrix_mautrix_facebook_enabled and matrix_mautrix_facebook_systemd_service_result.changed" | |||||
| when: "matrix_mautrix_facebook_systemd_service_result.changed" | |||||
| - name: Check if a mautrix-facebook registration file exists | - name: Check if a mautrix-facebook registration file exists | ||||
| stat: | stat: | ||||
| path: "{{ matrix_mautrix_facebook_base_path }}/registration.yaml" | path: "{{ matrix_mautrix_facebook_base_path }}/registration.yaml" | ||||
| register: mautrix_facebook_registration_file_stat | register: mautrix_facebook_registration_file_stat | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| - name: Generate matrix-mautrix-facebook registration.yaml if it doesn't exist | - name: Generate matrix-mautrix-facebook registration.yaml if it doesn't exist | ||||
| shell: | shell: | ||||
| @@ -70,32 +62,19 @@ | |||||
| -v {{ matrix_mautrix_facebook_base_path }}:/data:z | -v {{ matrix_mautrix_facebook_base_path }}:/data:z | ||||
| {{ matrix_mautrix_facebook_docker_image }} | {{ matrix_mautrix_facebook_docker_image }} | ||||
| python3 -m mautrix_facebook -g -c /data/config.yaml -r /data/registration.yaml | python3 -m mautrix_facebook -g -c /data/config.yaml -r /data/registration.yaml | ||||
| when: "matrix_mautrix_facebook_enabled and not mautrix_facebook_registration_file_stat.stat.exists" | |||||
| when: "not mautrix_facebook_registration_file_stat.stat.exists" | |||||
| - set_fact: | - set_fact: | ||||
| matrix_synapse_app_service_config_file_mautrix_facebook: '/app-registration/mautrix-facebook.yml' | matrix_synapse_app_service_config_file_mautrix_facebook: '/app-registration/mautrix-facebook.yml' | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| # If the matrix-synapse role is not used, these variables may not exist. | |||||
| - set_fact: | - set_fact: | ||||
| matrix_synapse_container_additional_volumes: > | matrix_synapse_container_additional_volumes: > | ||||
| {{ 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'}] }} | {{ [{'src': '{{ matrix_mautrix_facebook_base_path }}/registration.yaml', 'dst': '{{ matrix_synapse_app_service_config_file_mautrix_facebook }}', 'options': 'ro'}] }} | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| - set_fact: | |||||
| matrix_synapse_app_service_config_files: > | matrix_synapse_app_service_config_files: > | ||||
| {{ matrix_synapse_app_service_config_files }} | |||||
| {{ matrix_synapse_app_service_config_files|default([]) }} | |||||
| + | + | ||||
| {{ ["{{ matrix_synapse_app_service_config_file_mautrix_facebook }}"] | to_nice_json }} | {{ ["{{ matrix_synapse_app_service_config_file_mautrix_facebook }}"] | to_nice_json }} | ||||
| when: "matrix_mautrix_facebook_enabled" | |||||
| # | |||||
| # Tasks related to getting rid of matrix-mautrix-facebook (if it was previously enabled) | |||||
| # | |||||
| - name: Ensure matrix-mautrix-facebook.service doesn't exist | |||||
| file: | |||||
| path: "/etc/systemd/system/matrix-mautrix-facebook.service" | |||||
| state: absent | |||||
| when: "not matrix_mautrix_facebook_enabled" | |||||
| @@ -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" | |||||
| @@ -2,9 +2,9 @@ | |||||
| # Homeserver details | # Homeserver details | ||||
| homeserver: | homeserver: | ||||
| # The address that this appservice can use to connect to the homeserver. | # The address that this appservice can use to connect to the homeserver. | ||||
| address: https://{{ matrix_server_fqn_matrix }} | |||||
| address: {{ matrix_mautrix_facebook_homeserver_address }} | |||||
| # The domain of the homeserver (for MXIDs, etc). | # The domain of the homeserver (for MXIDs, etc). | ||||
| domain: {{ matrix_domain }} | |||||
| domain: {{ matrix_mautrix_facebook_homeserver_domain }} | |||||
| # Whether or not to verify the SSL certificate of the homeserver. | # Whether or not to verify the SSL certificate of the homeserver. | ||||
| # Only applies if address starts with https:// | # Only applies if address starts with https:// | ||||
| verify_ssl: true | verify_ssl: true | ||||
| @@ -13,7 +13,7 @@ homeserver: | |||||
| # Changing these values requires regeneration of the registration. | # Changing these values requires regeneration of the registration. | ||||
| appservice: | appservice: | ||||
| # The address that the homeserver can use to connect to this appservice. | # The address that the homeserver can use to connect to this appservice. | ||||
| address: http://matrix-mautrix-facebook:8080 | |||||
| address: {{ matrix_mautrix_facebook_appservice_address }} | |||||
| # The hostname and port where this appservice should listen. | # The hostname and port where this appservice should listen. | ||||
| hostname: 0.0.0.0 | hostname: 0.0.0.0 | ||||
| @@ -73,7 +73,7 @@ bridge: | |||||
| # domain - All users on that homeserver | # domain - All users on that homeserver | ||||
| # mxid - Specific user | # mxid - Specific user | ||||
| permissions: | permissions: | ||||
| '{{ matrix_domain }}': user | |||||
| '{{ matrix_mautrix_facebook_homeserver_domain }}': user | |||||
| # Python logging configuration. | # Python logging configuration. | ||||
| # | # | ||||
| @@ -1,10 +1,13 @@ | |||||
| #jinja2: lstrip_blocks: "True" | #jinja2: lstrip_blocks: "True" | ||||
| [Unit] | [Unit] | ||||
| Description=Matrix Mautrix Facebook server | Description=Matrix Mautrix Facebook server | ||||
| After=docker.service | |||||
| Requires=docker.service | |||||
| Requires=matrix-synapse.service | |||||
| After=matrix-synapse.service | |||||
| {% 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] | [Service] | ||||
| Type=simple | Type=simple | ||||
| @@ -17,14 +20,19 @@ ExecStartPre=/usr/bin/docker run --rm --name matrix-mautrix-facebook-db \ | |||||
| -v {{ matrix_mautrix_facebook_base_path }}:/data:z \ | -v {{ matrix_mautrix_facebook_base_path }}:/data:z \ | ||||
| {{ matrix_mautrix_facebook_docker_image }} \ | {{ matrix_mautrix_facebook_docker_image }} \ | ||||
| alembic -x config=/data/config.yaml upgrade head | alembic -x config=/data/config.yaml upgrade head | ||||
| ExecStart=/usr/bin/docker run --rm --name matrix-mautrix-facebook \ | ExecStart=/usr/bin/docker run --rm --name matrix-mautrix-facebook \ | ||||
| --log-driver=none \ | --log-driver=none \ | ||||
| --user={{ matrix_user_uid }}:{{ matrix_user_gid }} \ | --user={{ matrix_user_uid }}:{{ matrix_user_gid }} \ | ||||
| --cap-drop=ALL \ | --cap-drop=ALL \ | ||||
| --network={{ matrix_docker_network }} \ | --network={{ matrix_docker_network }} \ | ||||
| -v {{ matrix_mautrix_facebook_base_path }}:/data:z \ | -v {{ matrix_mautrix_facebook_base_path }}:/data:z \ | ||||
| {% for arg in matrix_mautrix_facebook_container_extra_arguments %} | |||||
| {{ arg }} \ | |||||
| {% endfor %} | |||||
| {{ matrix_mautrix_facebook_docker_image }} \ | {{ matrix_mautrix_facebook_docker_image }} \ | ||||
| python3 -m mautrix_facebook -c /data/config.yaml | python3 -m mautrix_facebook -c /data/config.yaml | ||||
| ExecStop=-/usr/bin/docker kill matrix-mautrix-facebook | ExecStop=-/usr/bin/docker kill matrix-mautrix-facebook | ||||
| ExecStop=-/usr/bin/docker rm matrix-mautrix-facebook | ExecStop=-/usr/bin/docker rm matrix-mautrix-facebook | ||||
| Restart=always | Restart=always | ||||
| @@ -244,18 +244,6 @@ matrix_s3_media_store_region: "eu-central-1" | |||||
| # Controls whether the self-check feature should validate SSL certificates. | # Controls whether the self-check feature should validate SSL certificates. | ||||
| matrix_synapse_self_check_validate_certificates: true | matrix_synapse_self_check_validate_certificates: true | ||||
| # Matrix mautrix is a Matrix <-> Facebook bridge | |||||
| # Enable facebook bridge | |||||
| matrix_mautrix_facebook_enabled: false | |||||
| 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: YOUR_FACEBOOK_APP_ID | |||||
| matrix_mautrix_facebook_api_hash: YOUR_FACEBOOK_API_HASH | |||||
| # Matrix Appservice IRC is a Matrix <-> IRC bridge | # Matrix Appservice IRC is a Matrix <-> IRC bridge | ||||
| # Enable IRC bridge | # Enable IRC bridge | ||||
| matrix_appservice_irc_enabled: false | matrix_appservice_irc_enabled: false | ||||
| @@ -1,7 +1,5 @@ | |||||
| --- | --- | ||||
| - import_tasks: "{{ role_path }}/tasks/ext/mautrix-facebook/init.yml" | |||||
| - import_tasks: "{{ role_path }}/tasks/ext/appservice-irc/init.yml" | - import_tasks: "{{ role_path }}/tasks/ext/appservice-irc/init.yml" | ||||
| - import_tasks: "{{ role_path }}/tasks/ext/appservice-discord/init.yml" | - import_tasks: "{{ role_path }}/tasks/ext/appservice-discord/init.yml" | ||||
| @@ -6,8 +6,6 @@ | |||||
| - import_tasks: "{{ role_path }}/tasks/ext/ldap-auth/setup.yml" | - import_tasks: "{{ role_path }}/tasks/ext/ldap-auth/setup.yml" | ||||
| - import_tasks: "{{ role_path }}/tasks/ext/mautrix-facebook/setup.yml" | |||||
| - import_tasks: "{{ role_path }}/tasks/ext/appservice-irc/setup.yml" | - import_tasks: "{{ role_path }}/tasks/ext/appservice-irc/setup.yml" | ||||
| - import_tasks: "{{ role_path }}/tasks/ext/appservice-discord/setup.yml" | - import_tasks: "{{ role_path }}/tasks/ext/appservice-discord/setup.yml" | ||||
| @@ -8,6 +8,7 @@ | |||||
| - matrix-mailer | - matrix-mailer | ||||
| - matrix-postgres | - matrix-postgres | ||||
| - matrix-corporal | - matrix-corporal | ||||
| - matrix-bridge-mautrix-facebook | |||||
| - matrix-bridge-mautrix-telegram | - matrix-bridge-mautrix-telegram | ||||
| - matrix-bridge-mautrix-whatsapp | - matrix-bridge-mautrix-whatsapp | ||||
| - matrix-synapse | - matrix-synapse | ||||