Skip to content

Commit de91fe9

Browse files
committed
Add Traefik labels for handling authenticated media (MSC3916) in matrix-media-repo
Related to: - #3409 - https://github.com/t2bot/matrix-media-repo/releases/tag/v1.3.5 - matrix-org/matrix-spec-proposals#3916 Support for authenticated media routes is enabled by default, but variables are in place to disable it if necessary. This change has not been tested.
1 parent 663e545 commit de91fe9

File tree

4 files changed

+148
-9
lines changed

4 files changed

+148
-9
lines changed

group_vars/matrix_servers

+3
Original file line numberDiff line numberDiff line change
@@ -3604,6 +3604,9 @@ matrix_media_repo_container_labels_traefik_tls_certResolver: "{{ devture_traefik
36043604
matrix_media_repo_container_labels_traefik_internal_media_enabled: "{{ matrix_playbook_internal_matrix_client_api_traefik_entrypoint_enabled }}"
36053605
matrix_media_repo_container_labels_traefik_internal_media_entrypoints: "{{ matrix_playbook_internal_matrix_client_api_traefik_entrypoint_name }}"
36063606

3607+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_enabled: "{{ matrix_playbook_internal_matrix_client_api_traefik_entrypoint_enabled }}"
3608+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_entrypoints: "{{ matrix_playbook_internal_matrix_client_api_traefik_entrypoint_name }}"
3609+
36073610
matrix_media_repo_database_hostname: "{{ devture_postgres_connection_hostname if devture_postgres_enabled else '' }}"
36083611
matrix_media_repo_database_username: matrix_media_repo
36093612
matrix_media_repo_database_password: "{{ '%s' | format(matrix_homeserver_generic_secret_key) | password_hash('sha512', 'mediarepo.db', rounds=655555) | to_uuid }}"

roles/custom/matrix-media-repo/defaults/main.yml

+50-9
Original file line numberDiff line numberDiff line change
@@ -65,71 +65,112 @@ matrix_media_repo_container_labels_traefik_enabled: true
6565
matrix_media_repo_container_labels_traefik_docker_network: "{{ matrix_media_repo_container_network }}"
6666
matrix_media_repo_container_labels_traefik_entrypoints: web-secure
6767

68+
# Traefik labels handling the old `/_matrix/media` endpoints on the Client-API (web-secure) entrypoint.
69+
# These are being superseded by `/_matrix/client/VERSION/media` endpoints - see `matrix_media_repo_container_labels_traefik_client_matrix_client_media_*`.
6870
matrix_media_repo_container_labels_traefik_media_path_prefix: "/_matrix/media"
6971
matrix_media_repo_container_labels_traefik_media_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_media_path_prefix | quote }}`)"
7072
matrix_media_repo_container_labels_traefik_media_priority: 0
7173
matrix_media_repo_container_labels_traefik_media_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}"
7274
matrix_media_repo_container_labels_traefik_media_tls: "{{ matrix_media_repo_container_labels_traefik_media_entrypoints != 'web' }}"
7375
matrix_media_repo_container_labels_traefik_media_tls_certResolver: default # noqa var-naming
7476

77+
# Traefik labels handling the new `/_matrix/client/VERSION/media` endpoints on the Client-API (web-secure) entrypoint.
78+
# See: https://github.com/matrix-org/matrix-spec-proposals/pull/3916
79+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_enabled: true
80+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_path_regexp: "/_matrix/client/(?P<version>(v1))/media"
81+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_client_matrix_client_media_path_regexp | quote }}`)"
82+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_priority: 0
83+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}"
84+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_tls: "{{ matrix_media_repo_container_labels_traefik_client_matrix_client_media_entrypoints != 'web' }}"
85+
matrix_media_repo_container_labels_traefik_client_matrix_client_media_tls_certResolver: default # noqa var-naming
86+
87+
# Traefik labels handling the old `/_matrix/media` endpoints on the internal entrypoint.
7588
# This is like `matrix_media_repo_container_labels_traefik_media_*`, but on an internal Traefik entrypoint.
89+
# These are being superseded by `/_matrix/client/VERSION/media` endpoints - see `matrix_media_repo_container_labels_traefik_internal_matrix_client_media_*`.
7690
matrix_media_repo_container_labels_traefik_internal_media_enabled: false
7791
matrix_media_repo_container_labels_traefik_internal_media_path_prefix: "{{ matrix_media_repo_container_labels_traefik_media_path_prefix }}"
7892
matrix_media_repo_container_labels_traefik_internal_media_rule: "PathPrefix(`{{ matrix_media_repo_container_labels_traefik_internal_media_path_prefix | quote }}`)"
7993
matrix_media_repo_container_labels_traefik_internal_media_priority: "{{ matrix_media_repo_container_labels_traefik_media_priority }}"
8094
matrix_media_repo_container_labels_traefik_internal_media_entrypoints: ""
8195

82-
# /_matrix/client/r0/logout
83-
# /_matrix/client/r0/logout/all
96+
# Traefik labels handling the new `/_matrix/client/VERSION/media` endpoints on the internal entrypoint.
97+
# See: https://github.com/matrix-org/matrix-spec-proposals/pull/3916
98+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_enabled: false
99+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_path_regexp: "{{ matrix_media_repo_container_labels_traefik_client_matrix_client_media_path_regexp }}"
100+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_rule: "PathRegexp(`{{ matrix_media_repo_container_labels_traefik_internal_matrix_client_media_path_regexp | quote }}`)"
101+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_priority: "{{ matrix_media_repo_container_labels_traefik_client_matrix_client_media_priority }}"
102+
matrix_media_repo_container_labels_traefik_internal_matrix_client_media_entrypoints: ""
103+
104+
# Traefik labels handling some additional routes on the Client-API (web-secure) entrypoint:
105+
# - /_matrix/client/r0/logout
106+
# - /_matrix/client/r0/logout/all
84107
matrix_media_repo_container_labels_traefik_logout_path_regexp: "^/_matrix/client/(?P<version>r0|v1|v3|unstable)/(?P<endpoint>logout|logout/all)"
85108
matrix_media_repo_container_labels_traefik_logout_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_logout_path_regexp }}`)"
86109
matrix_media_repo_container_labels_traefik_logout_priority: 0
87110
matrix_media_repo_container_labels_traefik_logout_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}"
88111
matrix_media_repo_container_labels_traefik_logout_tls: "{{ matrix_media_repo_container_labels_traefik_logout_entrypoints != 'web' }}"
89112
matrix_media_repo_container_labels_traefik_logout_tls_certResolver: default # noqa var-naming
90113

91-
# /_matrix/client/r0/admin/purge_media_cache
92-
# /_matrix/client/r0/admin/quarantine_media/{roomId:[^/]+}
114+
# Traefik labels handling some additional routes on the Client-API (web-secure) entrypoint:
115+
# - /_matrix/client/r0/admin/purge_media_cache
116+
# - /_matrix/client/r0/admin/quarantine_media/{roomId:[^/]+}
93117
matrix_media_repo_container_labels_traefik_admin_path_regexp: "^/_matrix/client/(?P<version>(r0|v1|v3|unstable))/admin/(?P<endpoint>(purge_media_cache|quarantine_media/.*))"
94118
matrix_media_repo_container_labels_traefik_admin_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_admin_path_regexp }}`)"
95119
matrix_media_repo_container_labels_traefik_admin_priority: 0
96120
matrix_media_repo_container_labels_traefik_admin_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}"
97121
matrix_media_repo_container_labels_traefik_admin_tls: "{{ matrix_media_repo_container_labels_traefik_admin_entrypoints != 'web' }}"
98122
matrix_media_repo_container_labels_traefik_admin_tls_certResolver: default # noqa var-naming
99123

124+
# Traefik labels handling some additional routes on the Client-API (web-secure) entrypoint:
125+
# - /_matrix/client/unstable/io.t2bot.media
100126
matrix_media_repo_container_labels_traefik_t2bot_path_prefix: "/_matrix/client/unstable/io.t2bot.media"
101127
matrix_media_repo_container_labels_traefik_t2bot_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_t2bot_path_prefix | quote }}`)"
102128
matrix_media_repo_container_labels_traefik_t2bot_priority: 0
103129
matrix_media_repo_container_labels_traefik_t2bot_entrypoints: "{{ matrix_media_repo_container_labels_traefik_entrypoints }}"
104130
matrix_media_repo_container_labels_traefik_t2bot_tls: "{{ matrix_media_repo_container_labels_traefik_t2bot_entrypoints != 'web' }}"
105131
matrix_media_repo_container_labels_traefik_t2bot_tls_certResolver: default # noqa var-naming
106132

107-
# Traefik federation labels
133+
# Traefik labels handling the old `/_matrix/media` endpoints on the federation entrypint.
134+
# These are being superseded by `/_matrix/federation/VERSION/media` endpoints - see `matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_*`.
108135
matrix_media_repo_container_labels_traefik_media_federation_path_prefix: "/_matrix/media"
109136
matrix_media_repo_container_labels_traefik_media_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_media_path_prefix | quote }}`)"
110137
matrix_media_repo_container_labels_traefik_media_federation_priority: 0
111138
matrix_media_repo_container_labels_traefik_media_federation_entrypoints: "{{ matrix_federation_traefik_entrypoint_name }}"
112139
matrix_media_repo_container_labels_traefik_media_federation_tls: "{{ matrix_media_repo_container_labels_traefik_media_entrypoints != 'web' }}"
113140
matrix_media_repo_container_labels_traefik_media_federation_tls_certResolver: default # noqa var-naming
114141

115-
# /_matrix/client/r0/logout
116-
# /_matrix/client/r0/logout/all
142+
# Traefik labels handling the new `/_matrix/federation/VERSION/media` endpoints on the federation entrypint.
143+
# See: https://github.com/matrix-org/matrix-spec-proposals/pull/3916
144+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_enabled: true
145+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_path_regexp: "/_matrix/federation/(?P<version>(v1))/media"
146+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_path_regexp | quote }}`)"
147+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_priority: 0
148+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_entrypoints: "{{ matrix_federation_traefik_entrypoint_name }}"
149+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_tls: "{{ matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_entrypoints != 'web' }}"
150+
matrix_media_repo_container_labels_traefik_federation_matrix_federation_media_tls_certResolver: default # noqa var-naming
151+
152+
# Traefik labels handling some additional routes on the federation entrypoint:
153+
# - /_matrix/client/r0/logout
154+
# - /_matrix/client/r0/logout/all
117155
matrix_media_repo_container_labels_traefik_logout_federation_path_regexp: "{{ matrix_media_repo_container_labels_traefik_logout_path_regexp }}"
118156
matrix_media_repo_container_labels_traefik_logout_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_logout_federation_path_regexp }}`)"
119157
matrix_media_repo_container_labels_traefik_logout_federation_priority: 0
120158
matrix_media_repo_container_labels_traefik_logout_federation_entrypoints: "{{ matrix_federation_traefik_entrypoint_name }}"
121159
matrix_media_repo_container_labels_traefik_logout_federation_tls: "{{ matrix_media_repo_container_labels_traefik_logout_entrypoints != 'web' }}"
122160
matrix_media_repo_container_labels_traefik_logout_federation_tls_certResolver: default # noqa var-naming
123161

124-
# /_matrix/client/r0/admin/purge_media_cache
125-
# /_matrix/client/r0/admin/quarantine_media/{roomId:[^/]+}
162+
# Traefik labels handling some additional routes on the federation entrypoint:
163+
# - /_matrix/client/r0/admin/purge_media_cache
164+
# - /_matrix/client/r0/admin/quarantine_media/{roomId:[^/]+}
126165
matrix_media_repo_container_labels_traefik_admin_federation_path_regexp: "{{ matrix_media_repo_container_labels_traefik_admin_path_regexp }}"
127166
matrix_media_repo_container_labels_traefik_admin_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathRegexp(`{{ matrix_media_repo_container_labels_traefik_admin_federation_path_regexp }}`)"
128167
matrix_media_repo_container_labels_traefik_admin_federation_priority: 0
129168
matrix_media_repo_container_labels_traefik_admin_federation_entrypoints: "{{ matrix_federation_traefik_entrypoint_name }}"
130169
matrix_media_repo_container_labels_traefik_admin_federation_tls: "{{ matrix_media_repo_container_labels_traefik_admin_entrypoints != 'web' }}"
131170
matrix_media_repo_container_labels_traefik_admin_federation_tls_certResolver: default # noqa var-naming
132171

172+
# Traefik labels handling some additional routes on the federation entrypoint:
173+
# - /_matrix/client/unstable/io.t2bot.media
133174
matrix_media_repo_container_labels_traefik_t2bot_federation_path_prefix: "/_matrix/client/unstable/io.t2bot.media"
134175
matrix_media_repo_container_labels_traefik_t2bot_federation_rule: "Host(`{{ matrix_server_fqn_matrix }}`) && PathPrefix(`{{ matrix_media_repo_container_labels_traefik_t2bot_path_prefix | quote }}`)"
135176
matrix_media_repo_container_labels_traefik_t2bot_federation_priority: 0

roles/custom/matrix-media-repo/tasks/validate_config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
with_items:
99
- {'name': 'matrix_media_repo_database_hostname', when: true}
1010
- {'name': 'matrix_media_repo_container_labels_traefik_internal_media_entrypoints', when: "{{ matrix_media_repo_container_labels_traefik_internal_media_enabled }}"}
11+
- {'name': 'matrix_media_repo_container_labels_traefik_internal_matrix_client_media_entrypoints', when: "{{ matrix_media_repo_container_labels_traefik_internal_matrix_client_media_enabled }}"}
1112

1213
- name: (Deprecation) Catch and report renamed matrix-media-repo settings
1314
ansible.builtin.fail:

0 commit comments

Comments
 (0)