app/matrix: use paths extracted directly from synapse docs for easier upgrades

Change-Id: Ife95ca0b6572074e225a0ba24a3e11d23b2d78a9
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1505
Reviewed-by: q3k <q3k@hackerspace.pl>
diff --git a/app/matrix/lib/synapse.libsonnet b/app/matrix/lib/synapse.libsonnet
index 6bf6144..ef76e09 100644
--- a/app/matrix/lib/synapse.libsonnet
+++ b/app/matrix/lib/synapse.libsonnet
@@ -274,70 +274,97 @@
 
         # Following paths can be handled by generic workers.
         # See: https://github.com/matrix-org/synapse/blob/master/docs/workers.md
-        paths:: [
-            "/_matrix/client/(r0|v3)/sync",
-            "/_matrix/client/(api/v1|r0|v3)/events",
-            "/_matrix/client/(api/v1|r0|v3)/initialSync",
-            "/_matrix/client/(api/v1|r0|v3)/rooms/[^/]+/initialSync",
-            "/_matrix/federation/v1/event/",
-            "/_matrix/federation/v1/state/",
-            "/_matrix/federation/v1/state_ids/",
-            "/_matrix/federation/v1/backfill/",
-            "/_matrix/federation/v1/get_missing_events/",
-            "/_matrix/federation/v1/publicRooms",
-            "/_matrix/federation/v1/query/",
-            "/_matrix/federation/v1/make_join/",
-            "/_matrix/federation/v1/make_leave/",
-            "/_matrix/federation/(v1|v2)/send_join/",
-            "/_matrix/federation/(v1|v2)/send_leave/",
-            "/_matrix/federation/(v1|v2)/invite/",
-            "/_matrix/federation/v1/event_auth/",
-            "/_matrix/federation/v1/exchange_third_party_invite/",
-            "/_matrix/federation/v1/user/devices/",
-            "/_matrix/federation/v1/get_groups_publicised",
-            "/_matrix/key/v2/query",
-            "/_matrix/federation/(v1|unstable/org.matrix.msc2946)/hierarchy/",
-            "/_matrix/federation/v1/send/",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/createRoom",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/publicRooms",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/joined_members",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/context/.*",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/members",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state",
-            "/_matrix/client/(v1|unstable/org.matrix.msc2946)/rooms/.*/hierarchy",
-            "/_matrix/client/unstable/im.nheko.summary/rooms/.*/summary",
-            "/_matrix/client/(r0|v3|unstable)/account/3pid",
-            "/_matrix/client/(r0|v3|unstable)/devices",
-            "/_matrix/client/versions",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/voip/turnServer",
-            "/_matrix/client/(r0|v3|unstable)/joined_groups",
-            "/_matrix/client/(r0|v3|unstable)/publicised_groups",
-            "/_matrix/client/(r0|v3|unstable)/publicised_groups/",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/event/",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/joined_rooms",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/search",
-            "/_matrix/client/(r0|v3|unstable)/keys/query",
-            "/_matrix/client/(r0|v3|unstable)/keys/changes",
-            "/_matrix/client/(r0|v3|unstable)/keys/claim",
-            "/_matrix/client/(r0|v3|unstable)/room_keys/",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/login",
-            "/_matrix/client/(r0|v3|unstable)/register",
-            "/_matrix/client/v1/register/m.login.registration_token/validity",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/redact",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/send",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state/",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/join/",
-            "/_matrix/client/(api/v1|r0|v3|unstable)/profile/"
+        pathsList:: |||
+            # Sync requests
+            ^/_matrix/client/(r0|v3)/sync$
+            ^/_matrix/client/(api/v1|r0|v3)/events$
+            ^/_matrix/client/(api/v1|r0|v3)/initialSync$
+            ^/_matrix/client/(api/v1|r0|v3)/rooms/[^/]+/initialSync$
 
-            # These need to be handled by stream writers, not supported yet
-            # "/_matrix/client/(r0|v3|unstable)/sendToDevice/",
-            # "/_matrix/client/(r0|v3|unstable)/.*/tags",
-            # "/_matrix/client/(r0|v3|unstable)/.*/account_data",
-            # "/_matrix/client/(r0|v3|unstable)/rooms/.*/receipt",
-            # "/_matrix/client/(r0|v3|unstable)/rooms/.*/read_markers",
-            # "/_matrix/client/(api/v1|r0|v3|unstable)/presence/",
-        ],
+            # Federation requests
+            ^/_matrix/federation/v1/event/
+            ^/_matrix/federation/v1/state/
+            ^/_matrix/federation/v1/state_ids/
+            ^/_matrix/federation/v1/backfill/
+            ^/_matrix/federation/v1/get_missing_events/
+            ^/_matrix/federation/v1/publicRooms
+            ^/_matrix/federation/v1/query/
+            ^/_matrix/federation/v1/make_join/
+            ^/_matrix/federation/v1/make_leave/
+            ^/_matrix/federation/(v1|v2)/send_join/
+            ^/_matrix/federation/(v1|v2)/send_leave/
+            ^/_matrix/federation/(v1|v2)/invite/
+            ^/_matrix/federation/v1/event_auth/
+            ^/_matrix/federation/v1/exchange_third_party_invite/
+            ^/_matrix/federation/v1/user/devices/
+            ^/_matrix/federation/v1/get_groups_publicised$
+            ^/_matrix/key/v2/query
+            ^/_matrix/federation/(v1|unstable/org.matrix.msc2946)/hierarchy/
+
+            # Inbound federation transaction request
+            ^/_matrix/federation/v1/send/
+
+            # Client API requests
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/createRoom$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/publicRooms$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/joined_members$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/context/.*$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/members$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state$
+            ^/_matrix/client/(v1|unstable/org.matrix.msc2946)/rooms/.*/hierarchy$
+            ^/_matrix/client/unstable/im.nheko.summary/rooms/.*/summary$
+            ^/_matrix/client/(r0|v3|unstable)/account/3pid$
+            ^/_matrix/client/(r0|v3|unstable)/devices$
+            ^/_matrix/client/versions$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/voip/turnServer$
+            ^/_matrix/client/(r0|v3|unstable)/joined_groups$
+            ^/_matrix/client/(r0|v3|unstable)/publicised_groups$
+            ^/_matrix/client/(r0|v3|unstable)/publicised_groups/
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/event/
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/joined_rooms$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/search$
+
+            # Encryption requests
+            ^/_matrix/client/(r0|v3|unstable)/keys/query$
+            ^/_matrix/client/(r0|v3|unstable)/keys/changes$
+            ^/_matrix/client/(r0|v3|unstable)/keys/claim$
+            ^/_matrix/client/(r0|v3|unstable)/room_keys/
+
+            # Registration/login requests
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/login$
+            ^/_matrix/client/(r0|v3|unstable)/register$
+            ^/_matrix/client/v1/register/m.login.registration_token/validity$
+
+            # Event sending requests
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/redact
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/send
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/state/
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/rooms/.*/(join|invite|leave|ban|unban|kick)$
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/join/
+            ^/_matrix/client/(api/v1|r0|v3|unstable)/profile/
+
+            # Device requests
+            #^/_matrix/client/(r0|v3|unstable)/sendToDevice/
+
+            # Account data requests
+            #^/_matrix/client/(r0|v3|unstable)/.*/tags
+            #^/_matrix/client/(r0|v3|unstable)/.*/account_data
+
+            # Receipts requests
+            #^/_matrix/client/(r0|v3|unstable)/rooms/.*/receipt
+            #^/_matrix/client/(r0|v3|unstable)/rooms/.*/read_markers
+
+            # Presence requests
+            #^/_matrix/client/(api/v1|r0|v3|unstable)/presence/
+        |||,
+
+        paths:: std.filterMap(
+            # Ignore comments and empty lines
+            function(v) !std.startsWith(v, '#') && std.length(v) > 1,
+            # Strip leading ^
+            function(v) std.substr(v, 1, std.length(v) - 1),
+            std.split(self.pathsList, "\n")
+        ),
     },
 
     # Synapse media worker. This handles access to uploads and media stored in app.dataVolume