| @@ -0,0 +1,66 @@ | |||||
| { | |||||
| "name": "Bridge Discord Appservice", | |||||
| "description": "Enables a private bridge you can use to connect Matrix rooms to Discord.", | |||||
| "spec": [ | |||||
| { | |||||
| "question_name": "Enable Discord AppService Bridge", | |||||
| "question_description": "Enables a private bridge you can use to connect Matrix rooms to Discord.", | |||||
| "required": true, | |||||
| "min": null, | |||||
| "max": null, | |||||
| "default": "{{ matrix_appservice_discord_enabled | string | lower }}", | |||||
| "choices": "true\nfalse", | |||||
| "new_question": true, | |||||
| "variable": "matrix_appservice_discord_enabled", | |||||
| "type": "multiplechoice" | |||||
| }, | |||||
| { | |||||
| "question_name": "Discord Client ID", | |||||
| "question_description": "The OAuth2 'CLIENT ID' which can be found in the 'OAuth2' tab of your new discord application: https://discord.com/developers/applications", | |||||
| "required": true, | |||||
| "min": 0, | |||||
| "max": 128, | |||||
| "default": "{{ matrix_appservice_discord_client_id | trim }}", | |||||
| "choices": "", | |||||
| "new_question": true, | |||||
| "variable": "matrix_appservice_discord_client_id", | |||||
| "type": "text" | |||||
| }, | |||||
| { | |||||
| "question_name": "Discord Bot Token", | |||||
| "question_description": "The Bot 'TOKEN' which can be found in the 'Bot' tab of your new discord application: https://discord.com/developers/applications", | |||||
| "required": true, | |||||
| "min": 0, | |||||
| "max": 256, | |||||
| "default": "{{ matrix_appservice_discord_bot_token | trim }}", | |||||
| "choices": "", | |||||
| "new_question": true, | |||||
| "variable": "matrix_appservice_discord_bot_token", | |||||
| "type": "password" | |||||
| }, | |||||
| { | |||||
| "question_name": "Auto-Admin Matrix User", | |||||
| "question_description": "The username you would like to be automatically joined and promoted to administrator (PL100) in bridged rooms. Exclude the '@' and server name postfix. So to create @stevo:example.org just enter 'stevo'.", | |||||
| "required": false, | |||||
| "min": 0, | |||||
| "max": 1024, | |||||
| "default": "", | |||||
| "choices": "", | |||||
| "new_question": true, | |||||
| "variable": "awx_appservice_discord_admin_user", | |||||
| "type": "text" | |||||
| }, | |||||
| { | |||||
| "question_name": "Auto-Admin Rooms", | |||||
| "question_description": "A list of rooms you want the user to be automatically joined and promoted to administrator (PL100) in. These should be the internal IDs (for example '!axfBUsKhfAjSMBdjKX:example.org') separated by newlines.", | |||||
| "required": false, | |||||
| "min": 0, | |||||
| "max": 4096, | |||||
| "default": "", | |||||
| "choices": "", | |||||
| "new_question": true, | |||||
| "variable": "awx_appservice_discord_admin_rooms", | |||||
| "type": "textarea" | |||||
| } | |||||
| ] | |||||
| } | |||||
| @@ -66,10 +66,10 @@ | |||||
| "required": false, | "required": false, | ||||
| "min": 0, | "min": 0, | ||||
| "max": 256, | "max": 256, | ||||
| "default": "{{ awx_corporal_http_api_auth_token }}", | |||||
| "default": "{{ matrix_corporal_http_api_auth_token }}", | |||||
| "choices": "", | "choices": "", | ||||
| "new_question": true, | "new_question": true, | ||||
| "variable": "awx_corporal_http_api_auth_token", | |||||
| "variable": "matrix_corporal_http_api_auth_token", | |||||
| "type": "password" | "type": "password" | ||||
| }, | }, | ||||
| { | { | ||||
| @@ -81,7 +81,7 @@ | |||||
| "default": "{{ awx_corporal_raise_ratelimits }}", | "default": "{{ awx_corporal_raise_ratelimits }}", | ||||
| "choices": "Normal\nRaised", | "choices": "Normal\nRaised", | ||||
| "new_question": true, | "new_question": true, | ||||
| "variable": "matrix_corporal_raise_ratelimits", | |||||
| "variable": "awx_corporal_raise_ratelimits", | |||||
| "type": "multiplechoice" | "type": "multiplechoice" | ||||
| } | } | ||||
| ] | ] | ||||
| @@ -0,0 +1,62 @@ | |||||
| - name: Record Bridge Discord AppService variables locally on AWX | |||||
| delegate_to: 127.0.0.1 | |||||
| lineinfile: | |||||
| path: '{{ awx_cached_matrix_vars }}' | |||||
| regexp: "^#? *{{ item.key | regex_escape() }}:" | |||||
| line: "{{ item.key }}: {{ item.value }}" | |||||
| insertafter: '# Bridge Discord AppService Start' | |||||
| with_dict: | |||||
| 'matrix_appservice_discord_enabled': '{{ matrix_appservice_discord_enabled }}' | |||||
| 'matrix_appservice_discord_client_id': '{{ matrix_appservice_discord_client_id }}' | |||||
| 'matrix_appservice_discord_bot_token': '{{ matrix_appservice_discord_bot_token }}' | |||||
| - name: Collect discord bot invite link | |||||
| shell: | |||||
| cat /matrix/appservice-discord/config/invite_link | |||||
| register: awx_discord_appservice_link | |||||
| - name: If the raw inputs is not empty start constructing parsed awx_appservice_discord_admin_rooms list | |||||
| set_fact: | |||||
| awx_appservice_discord_admin_rooms_array: |- | |||||
| {{ awx_appservice_discord_admin_rooms.splitlines() | to_json }} | |||||
| when: awx_appservice_discord_admin_rooms | trim | length > 0 | |||||
| - name: Promote user to administer (PL100) of each room | |||||
| command: | | |||||
| docker exec -i matrix-appservice-discord /bin/sh -c 'cp /cfg/registration.yaml /tmp/discord-registration.yaml && cd /tmp && node /build/tools/adminme.js -c /cfg/config.yaml -m "{{ item.1 }}" -u "@{{ awx_appservice_discord_admin_user }}:{{ matrix_domain }}" -p 100' | |||||
| with_indexed_items: | |||||
| - "{{ awx_appservice_discord_admin_rooms_array }}" | |||||
| when: ( awx_appservice_discord_admin_rooms | trim | length > 0 ) and ( awx_appservice_discord_admin_user is defined ) | |||||
| - name: Save new 'Bridge Discord Appservice' survey.json to the AWX tower, template | |||||
| delegate_to: 127.0.0.1 | |||||
| template: | |||||
| src: 'roles/matrix-awx/surveys/bridge_discord_appservice.json.j2' | |||||
| dest: '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}//bridge_discord_appservice.json' | |||||
| - name: Copy new 'Bridge Discord Appservice' survey.json to target machine | |||||
| copy: | |||||
| src: '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/bridge_discord_appservice.json' | |||||
| dest: '/matrix/awx/bridge_discord_appservice.json' | |||||
| mode: '0660' | |||||
| - name: Recreate 'Bridge Discord Appservice' job template | |||||
| delegate_to: 127.0.0.1 | |||||
| awx.awx.tower_job_template: | |||||
| name: "{{ matrix_domain }} - 3 - Bridge Discord AppService" | |||||
| description: "Enables a private bridge you can use to connect Matrix rooms to Discord." | |||||
| extra_vars: "{{ lookup('file', '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/extra_vars.json') }}" | |||||
| job_type: run | |||||
| job_tags: "start,setup-all,bridge-discord-appservice" | |||||
| inventory: "{{ member_id }}" | |||||
| project: "{{ member_id }} - Matrix Docker Ansible Deploy" | |||||
| playbook: setup.yml | |||||
| credential: "{{ member_id }} - AWX SSH Key" | |||||
| survey_enabled: true | |||||
| survey_spec: "{{ lookup('file', '/var/lib/awx/projects/clients/{{ member_id }}/{{ subscription_id }}/bridge_discord_appservice.json') }}" | |||||
| state: present | |||||
| verbosity: 1 | |||||
| tower_host: "https://{{ awx_host }}" | |||||
| tower_oauthtoken: "{{ awx_session_token.ansible_facts.tower_token.token }}" | |||||
| validate_certs: yes | |||||
| @@ -197,6 +197,15 @@ | |||||
| tags: | tags: | ||||
| - setup-synapse-admin | - setup-synapse-admin | ||||
| # Additional playbook to set the variable file during Discord Appservice Bridge configuration | |||||
| - include_tasks: | |||||
| file: "bridge_discord_appservice.yml" | |||||
| apply: | |||||
| tags: bridge-discord-appservice | |||||
| when: run_setup|bool and matrix_awx_enabled|bool | |||||
| tags: | |||||
| - bridge-discord-appservice | |||||
| # Delete AWX session token | # Delete AWX session token | ||||
| - include_tasks: | - include_tasks: | ||||
| file: "delete_session_token.yml" | file: "delete_session_token.yml" | ||||
| @@ -84,7 +84,7 @@ | |||||
| when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) | when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) | ||||
| - name: Purge all rooms with no local users | - name: Purge all rooms with no local users | ||||
| include_tasks: awx_purge_database_no_local.yml | |||||
| include_tasks: purge_database_no_local.yml | |||||
| loop: "{{ awx_room_list_no_local_users.splitlines() | flatten(levels=1) }}" | loop: "{{ awx_room_list_no_local_users.splitlines() | flatten(levels=1) }}" | ||||
| when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) | when: (awx_purge_mode.find("No local users [recommended]") != -1) or (awx_purge_mode.find("Number of users [slower]") != -1) or (awx_purge_mode.find("Number of events [slower]") != -1) | ||||
| @@ -116,7 +116,7 @@ | |||||
| no_log: True | no_log: True | ||||
| - name: Purge all rooms with more then N users | - name: Purge all rooms with more then N users | ||||
| include_tasks: awx_purge_database_users.yml | |||||
| include_tasks: purge_database_users.yml | |||||
| loop: "{{ awx_room_list_joined_members.splitlines() | flatten(levels=1) }}" | loop: "{{ awx_room_list_joined_members.splitlines() | flatten(levels=1) }}" | ||||
| when: awx_purge_mode.find("Number of users [slower]") != -1 | when: awx_purge_mode.find("Number of users [slower]") != -1 | ||||
| @@ -141,7 +141,7 @@ | |||||
| no_log: True | no_log: True | ||||
| - name: Purge all rooms with more then N events | - name: Purge all rooms with more then N events | ||||
| include_tasks: awx_purge_database_events.yml | |||||
| include_tasks: purge_database_events.yml | |||||
| loop: "{{ awx_room_list_state_events.splitlines() | flatten(levels=1) }}" | loop: "{{ awx_room_list_state_events.splitlines() | flatten(levels=1) }}" | ||||
| when: awx_purge_mode.find("Number of events [slower]") != -1 | when: awx_purge_mode.find("Number of events [slower]") != -1 | ||||
| @@ -84,14 +84,16 @@ | |||||
| line: "{{ item.key }}: {{ item.value }}" | line: "{{ item.key }}: {{ item.value }}" | ||||
| insertafter: '# Corporal Settings Start' | insertafter: '# Corporal Settings Start' | ||||
| with_dict: | with_dict: | ||||
| 'awx_corporal_http_api_auth_token': '{{ awx_corporal_http_api_auth_token }}' | |||||
| when: awx_corporal_http_api_auth_token|length > 0 | |||||
| 'matrix_corporal_http_api_auth_token': '{{ matrix_corporal_http_api_auth_token }}' | |||||
| when: ( matrix_corporal_http_api_auth_token|length > 0 ) and ( awx_corporal_policy_provider_mode != "Simple Static File" ) | |||||
| - name: Record 'Simple Static File' configuration variables in matrix_vars.yml | - name: Record 'Simple Static File' configuration variables in matrix_vars.yml | ||||
| delegate_to: 127.0.0.1 | delegate_to: 127.0.0.1 | ||||
| blockinfile: | blockinfile: | ||||
| path: '{{ awx_cached_matrix_vars }}' | path: '{{ awx_cached_matrix_vars }}' | ||||
| insertafter: "# Corporal Policy Provider Settings Start" | |||||
| insertbefore: "# Corporal Policy Provider Settings End" | |||||
| marker_begin: "Corporal" | |||||
| marker_end: "Corporal" | |||||
| block: | | block: | | ||||
| matrix_corporal_policy_provider_config: | | matrix_corporal_policy_provider_config: | | ||||
| { | { | ||||
| @@ -38,7 +38,7 @@ | |||||
| set_fact: | set_fact: | ||||
| awx_synapse_auto_join_rooms_array: |- | awx_synapse_auto_join_rooms_array: |- | ||||
| {{ awx_synapse_auto_join_rooms.splitlines() | to_json }} | {{ awx_synapse_auto_join_rooms.splitlines() | to_json }} | ||||
| when: awx_synapse_auto_join_rooms|length > 0 | |||||
| when: awx_synapse_auto_join_rooms | length > 0 | |||||
| - name: Record Synapse variable 'matrix_synapse_auto_join_rooms' locally on AWX, if it's not blank | - name: Record Synapse variable 'matrix_synapse_auto_join_rooms' locally on AWX, if it's not blank | ||||
| delegate_to: 127.0.0.1 | delegate_to: 127.0.0.1 | ||||
| @@ -49,7 +49,7 @@ | |||||
| insertafter: '# Synapse Settings Start' | insertafter: '# Synapse Settings Start' | ||||
| with_dict: | with_dict: | ||||
| "matrix_synapse_auto_join_rooms": "{{ awx_synapse_auto_join_rooms_array }}" | "matrix_synapse_auto_join_rooms": "{{ awx_synapse_auto_join_rooms_array }}" | ||||
| when: awx_synapse_auto_join_rooms|length > 0 | |||||
| when: awx_synapse_auto_join_rooms | length > 0 | |||||
| - name: Record Synapse Shared Secret if it's defined | - name: Record Synapse Shared Secret if it's defined | ||||
| delegate_to: 127.0.0.1 | delegate_to: 127.0.0.1 | ||||
| @@ -62,3 +62,8 @@ | |||||
| group: matrix | group: matrix | ||||
| mode: '0770' | mode: '0770' | ||||
| when: awx_customise_base_domain_website is defined | when: awx_customise_base_domain_website is defined | ||||
| - name: Print Discord AppService Bot Link for user | |||||
| debug: | |||||
| msg: "{{ awx_discord_appservice_link.stdout }}" | |||||
| when: awx_discord_appservice_link is defined | |||||