From 43b89a052dcf12b12636223ba6c7bf2104b30918 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
Date: Thu, 18 Nov 2021 20:37:08 +0100
Subject: [PATCH] matrix: Route event reports to mjolnir

---
 roles/matrix/defaults/main.yml         |  6 ++++++
 roles/matrix/templates/mjolnir.yaml.j2 |  2 +-
 roles/matrix/templates/nginx.d.conf.j2 | 12 ++++++++++--
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/roles/matrix/defaults/main.yml b/roles/matrix/defaults/main.yml
index 1f010cf2b..3db441485 100644
--- a/roles/matrix/defaults/main.yml
+++ b/roles/matrix/defaults/main.yml
@@ -2,6 +2,12 @@
 
 matrix_max_upload_size: 50M
 matrix_nginx_config:
+  - name: mjolnir
+    port: 8010
+    locations:
+      - path: "~ ^/_matrix/client/r0/rooms/([^/]*)/report/(.*)$"
+        pass: "/api/1/report/$1/$2"
+        add_cors: true
   - name: federation_reader
     port: 8011
     locations:
diff --git a/roles/matrix/templates/mjolnir.yaml.j2 b/roles/matrix/templates/mjolnir.yaml.j2
index 4ce40cd33..897e172bc 100644
--- a/roles/matrix/templates/mjolnir.yaml.j2
+++ b/roles/matrix/templates/mjolnir.yaml.j2
@@ -167,7 +167,7 @@ health:
 # Options for exposing web APIs.
 web:
   # Whether to enable web APIs.
-  enabled: false
+  enabled: true
 
   # The port to expose the webserver on. Defaults to 8080.
   port: 8010
diff --git a/roles/matrix/templates/nginx.d.conf.j2 b/roles/matrix/templates/nginx.d.conf.j2
index 9492e18f6..bf32f4e97 100644
--- a/roles/matrix/templates/nginx.d.conf.j2
+++ b/roles/matrix/templates/nginx.d.conf.j2
@@ -37,10 +37,18 @@ server {
 {% for config in matrix_nginx_config %}
     # {{ config.name }}
 {% for location in config.locations %}
-    location {{ location }} {
+{% if location is string %}
+{% set location = { 'path': location } %}
+{% endif %}
+    location {{ location.path }} {
         access_log /var/log/nginx/{{ matrix_domain }}/access.log main;
         access_log /var/log/nginx/{{ matrix_domain }}/access.log.json json_main;
-        proxy_pass http://matrix_{{ config.name }};
+{% if location.add_cors | default(false) %}
+        add_header Access-Control-Allow-Origin *;
+        add_header Access-Control-Allow-Methods "GET, HEAD, POST, PUT, DELETE, OPTIONS";
+        add_header Access-Control-Allow-Headers "X-Requested-With, Content-Type, Authorization, Date";
+{% endif %}
+        proxy_pass http://matrix_{{ config.name }}{{ location.pass | default('') }};
         proxy_set_header X-Forwarded-For $remote_addr;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header Host $host;
-- 
GitLab