* Enable location sharing in Element * Update roles/custom/matrix-client-element/tasks/validate_config.yml Co-authored-by: Slavi Pantaleev <slavi@devture.com> * Update roles/custom/matrix-client-element/tasks/setup_install.yml Co-authored-by: Slavi Pantaleev <slavi@devture.com> * Rename location sharing vars to be consistent with other vars * Rename style.json to map_style.json * Add m.tile_server section to /.well-known/matrix/client Co-authored-by: Slavi Pantaleev <slavi@devture.com>pull/2278/head
| @@ -25,6 +25,11 @@ | |||||
| "im.vector.riot.jitsi": { | "im.vector.riot.jitsi": { | ||||
| "preferredDomain": {{ matrix_client_element_jitsi_preferredDomain|to_json }} | "preferredDomain": {{ matrix_client_element_jitsi_preferredDomain|to_json }} | ||||
| } | } | ||||
| {% endif %} | |||||
| {% if matrix_client_element_location_sharing_enabled %}, | |||||
| "m.tile_server": { | |||||
| "map_style_url": "https://{{ matrix_server_fqn_element }}/map_style.json" | |||||
| } | |||||
| {% endif %} | {% endif %} | ||||
| , | , | ||||
| "io.element.e2ee": { | "io.element.e2ee": { | ||||
| @@ -135,3 +135,70 @@ matrix_client_element_configuration_extension: "{{ matrix_client_element_configu | |||||
| # Holds the final Element configuration (a combination of the default and its extension). | # Holds the final Element configuration (a combination of the default and its extension). | ||||
| # You most likely don't need to touch this variable. Instead, see `matrix_client_element_configuration_default`. | # You most likely don't need to touch this variable. Instead, see `matrix_client_element_configuration_default`. | ||||
| matrix_client_element_configuration: "{{ matrix_client_element_configuration_default | combine(matrix_client_element_configuration_extension, recursive=True) }}" | matrix_client_element_configuration: "{{ matrix_client_element_configuration_default | combine(matrix_client_element_configuration_extension, recursive=True) }}" | ||||
| # Element Location sharing functionality | |||||
| # More info: https://element.io/blog/element-launches-e2ee-location-sharing/ | |||||
| # How to host your own map tile server: https://matrix.org/docs/guides/map-tile-server | |||||
| matrix_client_element_location_sharing_enabled: false | |||||
| # Default Element location sharing map style 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_client_element_location_sharing_map_style_extension_json`) | |||||
| # or completely replace this variable with your own template. | |||||
| # | |||||
| # The side-effect of this lookup is that Ansible would even parse the JSON for us, returning a dict. | |||||
| # This is unlike what it does when looking up YAML template files (no automatic parsing there). | |||||
| matrix_client_element_location_sharing_map_style_default: "{{ lookup('template', 'templates/map_style.json.j2') }}" | |||||
| # Your custom JSON configuration for Element location sharing map style should go to `matrix_client_element_location_sharing_map_style_extension_json`. | |||||
| # This configuration extends the default starting configuration (`matrix_client_element_location_sharing_map_style_default`). | |||||
| # | |||||
| # 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_client_element_location_sharing_map_style_default`. | |||||
| # | |||||
| # Example configuration override follows: | |||||
| # | |||||
| # matrix_client_element_location_sharing_map_style_extension_json: | | |||||
| # { | |||||
| # "sources": { | |||||
| # "localsource": { | |||||
| # "tileSize": 512 | |||||
| # } | |||||
| # } | |||||
| # } | |||||
| # | |||||
| # Example configuration extension follows: | |||||
| # | |||||
| # matrix_client_element_location_sharing_map_style_extension_json: | | |||||
| # { | |||||
| # "sources": { | |||||
| # "anothersource": { | |||||
| # "attribution": "", | |||||
| # "tileSize": 256, | |||||
| # "tiles": ["https://anothertile.example.com/{z}/{x}/{y}.png"], | |||||
| # "type": "raster" | |||||
| # } | |||||
| # } | |||||
| # } | |||||
| matrix_client_element_location_sharing_map_style_extension_json: '{}' | |||||
| matrix_client_element_location_sharing_map_style_extension: "{{ matrix_client_element_location_sharing_map_style_extension_json | from_json if matrix_client_element_location_sharing_map_style_extension_json | from_json is mapping else {} }}" | |||||
| # Holds the final Element location sharing map style configuration (a combination of the default and its extension). | |||||
| # You most likely don't need to touch this variable. Instead, see `matrix_client_element_location_sharing_map_style_default`. | |||||
| matrix_client_element_location_sharing_map_style: "{{ matrix_client_element_location_sharing_map_style_default | combine(matrix_client_element_location_sharing_map_style_extension, recursive=True) }}" | |||||
| # Example tile servers configuration | |||||
| # matrix_client_element_location_sharing_map_style_content_sources_localsource_tiles: ["https://tile.example.com/{z}/{x}/{y}.png"] | |||||
| # or | |||||
| # matrix_client_element_location_sharing_map_style_content_sources_localsource_tiles: ["https://s1.example.com/{z}/{x}/{y}.png", "https://s2.example.com/{z}/{x}/{y}.png", "https://s3.example.com/{z}/{x}/{y}.png"] | |||||
| matrix_client_element_location_sharing_map_style_content_sources_localsource_tiles: [] | |||||
| # Map attribution (optional): | |||||
| # Attribution for OpenStreetMap would be like this: | |||||
| # matrix_client_element_location_sharing_map_style_content_sources_localsource_attribution: "© <a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">OpenStreetMap</a> contributors" | |||||
| # Leave blank, if map does not require attribution. | |||||
| matrix_client_element_location_sharing_map_style_content_sources_localsource_attribution: "" | |||||
| @@ -69,6 +69,15 @@ | |||||
| owner: "{{ matrix_user_username }}" | owner: "{{ matrix_user_username }}" | ||||
| group: "{{ matrix_user_groupname }}" | group: "{{ matrix_user_groupname }}" | ||||
| - name: Ensure Element location sharing map style installed | |||||
| when: matrix_client_element_location_sharing_enabled | bool | |||||
| ansible.builtin.copy: | |||||
| content: "{{ matrix_client_element_location_sharing_map_style | to_nice_json }}" | |||||
| dest: "{{ matrix_client_element_data_path }}/map_style.json" | |||||
| mode: 0644 | |||||
| owner: "{{ matrix_user_username }}" | |||||
| group: "{{ matrix_user_groupname }}" | |||||
| - name: Ensure Element config files installed | - name: Ensure Element config files installed | ||||
| ansible.builtin.template: | ansible.builtin.template: | ||||
| src: "{{ item.src }}" | src: "{{ item.src }}" | ||||
| @@ -8,6 +8,14 @@ | |||||
| with_items: | with_items: | ||||
| - "matrix_client_element_default_hs_url" | - "matrix_client_element_default_hs_url" | ||||
| - name: Fail if Element location sharing enabled, but no tile server defined | |||||
| ansible.builtin.fail: | |||||
| msg: >- | |||||
| You need to define at least one map tile server in matrix_client_element_location_sharing_map_style_content_sources_localsource_tiles list | |||||
| when: | |||||
| - matrix_client_element_location_sharing_enabled | bool | |||||
| - matrix_client_element_location_sharing_map_style_content_sources_localsource_tiles | length == 0 | |||||
| - name: (Deprecation) Catch and report riot-web variables | - name: (Deprecation) Catch and report riot-web variables | ||||
| ansible.builtin.fail: | ansible.builtin.fail: | ||||
| msg: >- | msg: >- | ||||
| @@ -36,6 +36,9 @@ | |||||
| "jitsi": { | "jitsi": { | ||||
| "preferredDomain": {{ matrix_client_element_jitsi_preferredDomain|to_json }} | "preferredDomain": {{ matrix_client_element_jitsi_preferredDomain|to_json }} | ||||
| }, | }, | ||||
| {% endif %} | |||||
| {% if matrix_client_element_location_sharing_enabled %} | |||||
| "map_style_url": "https://{{ matrix_server_fqn_element }}/map_style.json", | |||||
| {% endif %} | {% endif %} | ||||
| "branding": { | "branding": { | ||||
| "authFooterLinks": {{ matrix_client_element_branding_authFooterLinks|to_json }}, | "authFooterLinks": {{ matrix_client_element_branding_authFooterLinks|to_json }}, | ||||
| @@ -0,0 +1,18 @@ | |||||
| { | |||||
| "layers": [ | |||||
| { | |||||
| "id": "locallayer", | |||||
| "source": "localsource", | |||||
| "type": "raster" | |||||
| } | |||||
| ], | |||||
| "sources": { | |||||
| "localsource": { | |||||
| "attribution": {{ matrix_client_element_location_sharing_map_style_content_sources_localsource_attribution|to_json }}, | |||||
| "tileSize": 256, | |||||
| "tiles": {{ matrix_client_element_location_sharing_map_style_content_sources_localsource_tiles|to_json }}, | |||||
| "type": "raster" | |||||
| } | |||||
| }, | |||||
| "version": 8 | |||||
| } | |||||
| @@ -26,6 +26,9 @@ ExecStart={{ devture_systemd_docker_base_host_command_docker }} run --rm --name | |||||
| --mount type=bind,src={{ matrix_client_element_data_path }}/nginx.conf,dst=/etc/nginx/nginx.conf,ro \ | --mount type=bind,src={{ matrix_client_element_data_path }}/nginx.conf,dst=/etc/nginx/nginx.conf,ro \ | ||||
| --mount type=bind,src={{ matrix_client_element_data_path }}/config.json,dst=/app/config.json,ro \ | --mount type=bind,src={{ matrix_client_element_data_path }}/config.json,dst=/app/config.json,ro \ | ||||
| --mount type=bind,src={{ matrix_client_element_data_path }}/config.json,dst=/app/config.{{ matrix_server_fqn_element }}.json,ro \ | --mount type=bind,src={{ matrix_client_element_data_path }}/config.json,dst=/app/config.{{ matrix_server_fqn_element }}.json,ro \ | ||||
| {% if matrix_client_element_location_sharing_enabled %} | |||||
| --mount type=bind,src={{ matrix_client_element_data_path }}/map_style.json,dst=/app/map_style.json,ro \ | |||||
| {% endif %} | |||||
| {% if matrix_client_element_embedded_pages_home_path is not none %} | {% if matrix_client_element_embedded_pages_home_path is not none %} | ||||
| --mount type=bind,src={{ matrix_client_element_data_path }}/home.html,dst=/app/home.html,ro \ | --mount type=bind,src={{ matrix_client_element_data_path }}/home.html,dst=/app/home.html,ro \ | ||||
| {% endif %} | {% endif %} | ||||