matrix-synapse 1.142.0rc3__cp314-abi3-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of matrix-synapse might be problematic. Click here for more details.

Files changed (1057) hide show
  1. matrix_synapse-1.142.0rc3.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.142.0rc3.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.142.0rc3.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.142.0rc3.dist-info/METADATA +375 -0
  5. matrix_synapse-1.142.0rc3.dist-info/RECORD +1057 -0
  6. matrix_synapse-1.142.0rc3.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.142.0rc3.dist-info/entry_points.txt +14 -0
  8. matrix_synapse.libs/libgcc_s-2d945d6c.so.1 +0 -0
  9. synapse/__init__.py +97 -0
  10. synapse/_scripts/__init__.py +0 -0
  11. synapse/_scripts/export_signing_key.py +109 -0
  12. synapse/_scripts/generate_config.py +83 -0
  13. synapse/_scripts/generate_log_config.py +56 -0
  14. synapse/_scripts/generate_signing_key.py +55 -0
  15. synapse/_scripts/generate_workers_map.py +318 -0
  16. synapse/_scripts/hash_password.py +95 -0
  17. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  18. synapse/_scripts/register_new_matrix_user.py +374 -0
  19. synapse/_scripts/review_recent_signups.py +212 -0
  20. synapse/_scripts/synapse_port_db.py +1603 -0
  21. synapse/_scripts/synctl.py +365 -0
  22. synapse/_scripts/update_synapse_database.py +130 -0
  23. synapse/api/__init__.py +20 -0
  24. synapse/api/auth/__init__.py +207 -0
  25. synapse/api/auth/base.py +406 -0
  26. synapse/api/auth/internal.py +299 -0
  27. synapse/api/auth/mas.py +457 -0
  28. synapse/api/auth/msc3861_delegated.py +617 -0
  29. synapse/api/auth_blocking.py +144 -0
  30. synapse/api/constants.py +362 -0
  31. synapse/api/errors.py +907 -0
  32. synapse/api/filtering.py +539 -0
  33. synapse/api/presence.py +104 -0
  34. synapse/api/ratelimiting.py +482 -0
  35. synapse/api/room_versions.py +535 -0
  36. synapse/api/urls.py +119 -0
  37. synapse/app/__init__.py +60 -0
  38. synapse/app/_base.py +866 -0
  39. synapse/app/admin_cmd.py +388 -0
  40. synapse/app/appservice.py +30 -0
  41. synapse/app/client_reader.py +30 -0
  42. synapse/app/complement_fork_starter.py +206 -0
  43. synapse/app/event_creator.py +29 -0
  44. synapse/app/federation_reader.py +30 -0
  45. synapse/app/federation_sender.py +30 -0
  46. synapse/app/frontend_proxy.py +30 -0
  47. synapse/app/generic_worker.py +475 -0
  48. synapse/app/homeserver.py +504 -0
  49. synapse/app/media_repository.py +30 -0
  50. synapse/app/phone_stats_home.py +296 -0
  51. synapse/app/pusher.py +30 -0
  52. synapse/app/synchrotron.py +30 -0
  53. synapse/app/user_dir.py +31 -0
  54. synapse/appservice/__init__.py +461 -0
  55. synapse/appservice/api.py +569 -0
  56. synapse/appservice/scheduler.py +567 -0
  57. synapse/config/__init__.py +27 -0
  58. synapse/config/__main__.py +62 -0
  59. synapse/config/_base.py +1108 -0
  60. synapse/config/_base.pyi +217 -0
  61. synapse/config/_util.py +99 -0
  62. synapse/config/account_validity.py +116 -0
  63. synapse/config/api.py +141 -0
  64. synapse/config/appservice.py +210 -0
  65. synapse/config/auth.py +80 -0
  66. synapse/config/auto_accept_invites.py +43 -0
  67. synapse/config/background_updates.py +44 -0
  68. synapse/config/cache.py +231 -0
  69. synapse/config/captcha.py +90 -0
  70. synapse/config/cas.py +116 -0
  71. synapse/config/consent.py +73 -0
  72. synapse/config/database.py +184 -0
  73. synapse/config/emailconfig.py +367 -0
  74. synapse/config/experimental.py +595 -0
  75. synapse/config/federation.py +114 -0
  76. synapse/config/homeserver.py +141 -0
  77. synapse/config/jwt.py +55 -0
  78. synapse/config/key.py +447 -0
  79. synapse/config/logger.py +390 -0
  80. synapse/config/mas.py +191 -0
  81. synapse/config/matrixrtc.py +66 -0
  82. synapse/config/metrics.py +84 -0
  83. synapse/config/modules.py +40 -0
  84. synapse/config/oembed.py +185 -0
  85. synapse/config/oidc.py +509 -0
  86. synapse/config/password_auth_providers.py +82 -0
  87. synapse/config/push.py +64 -0
  88. synapse/config/ratelimiting.py +254 -0
  89. synapse/config/redis.py +74 -0
  90. synapse/config/registration.py +296 -0
  91. synapse/config/repository.py +311 -0
  92. synapse/config/retention.py +162 -0
  93. synapse/config/room.py +88 -0
  94. synapse/config/room_directory.py +165 -0
  95. synapse/config/saml2.py +251 -0
  96. synapse/config/server.py +1170 -0
  97. synapse/config/server_notices.py +84 -0
  98. synapse/config/spam_checker.py +66 -0
  99. synapse/config/sso.py +121 -0
  100. synapse/config/stats.py +54 -0
  101. synapse/config/third_party_event_rules.py +40 -0
  102. synapse/config/tls.py +192 -0
  103. synapse/config/tracer.py +71 -0
  104. synapse/config/user_directory.py +47 -0
  105. synapse/config/user_types.py +44 -0
  106. synapse/config/voip.py +59 -0
  107. synapse/config/workers.py +642 -0
  108. synapse/crypto/__init__.py +20 -0
  109. synapse/crypto/context_factory.py +278 -0
  110. synapse/crypto/event_signing.py +194 -0
  111. synapse/crypto/keyring.py +931 -0
  112. synapse/event_auth.py +1266 -0
  113. synapse/events/__init__.py +668 -0
  114. synapse/events/auto_accept_invites.py +216 -0
  115. synapse/events/builder.py +387 -0
  116. synapse/events/presence_router.py +245 -0
  117. synapse/events/snapshot.py +559 -0
  118. synapse/events/utils.py +928 -0
  119. synapse/events/validator.py +305 -0
  120. synapse/federation/__init__.py +22 -0
  121. synapse/federation/federation_base.py +383 -0
  122. synapse/federation/federation_client.py +2134 -0
  123. synapse/federation/federation_server.py +1544 -0
  124. synapse/federation/persistence.py +71 -0
  125. synapse/federation/send_queue.py +532 -0
  126. synapse/federation/sender/__init__.py +1165 -0
  127. synapse/federation/sender/per_destination_queue.py +884 -0
  128. synapse/federation/sender/transaction_manager.py +210 -0
  129. synapse/federation/transport/__init__.py +28 -0
  130. synapse/federation/transport/client.py +1201 -0
  131. synapse/federation/transport/server/__init__.py +334 -0
  132. synapse/federation/transport/server/_base.py +429 -0
  133. synapse/federation/transport/server/federation.py +912 -0
  134. synapse/federation/units.py +133 -0
  135. synapse/handlers/__init__.py +20 -0
  136. synapse/handlers/account.py +162 -0
  137. synapse/handlers/account_data.py +362 -0
  138. synapse/handlers/account_validity.py +361 -0
  139. synapse/handlers/admin.py +618 -0
  140. synapse/handlers/appservice.py +991 -0
  141. synapse/handlers/auth.py +2494 -0
  142. synapse/handlers/cas.py +413 -0
  143. synapse/handlers/deactivate_account.py +363 -0
  144. synapse/handlers/delayed_events.py +635 -0
  145. synapse/handlers/device.py +1873 -0
  146. synapse/handlers/devicemessage.py +399 -0
  147. synapse/handlers/directory.py +554 -0
  148. synapse/handlers/e2e_keys.py +1834 -0
  149. synapse/handlers/e2e_room_keys.py +455 -0
  150. synapse/handlers/event_auth.py +390 -0
  151. synapse/handlers/events.py +201 -0
  152. synapse/handlers/federation.py +2043 -0
  153. synapse/handlers/federation_event.py +2420 -0
  154. synapse/handlers/identity.py +812 -0
  155. synapse/handlers/initial_sync.py +528 -0
  156. synapse/handlers/jwt.py +120 -0
  157. synapse/handlers/message.py +2347 -0
  158. synapse/handlers/oidc.py +1803 -0
  159. synapse/handlers/pagination.py +768 -0
  160. synapse/handlers/password_policy.py +102 -0
  161. synapse/handlers/presence.py +2638 -0
  162. synapse/handlers/profile.py +655 -0
  163. synapse/handlers/push_rules.py +164 -0
  164. synapse/handlers/read_marker.py +79 -0
  165. synapse/handlers/receipts.py +351 -0
  166. synapse/handlers/register.py +1060 -0
  167. synapse/handlers/relations.py +624 -0
  168. synapse/handlers/reports.py +98 -0
  169. synapse/handlers/room.py +2447 -0
  170. synapse/handlers/room_list.py +632 -0
  171. synapse/handlers/room_member.py +2365 -0
  172. synapse/handlers/room_member_worker.py +146 -0
  173. synapse/handlers/room_policy.py +186 -0
  174. synapse/handlers/room_summary.py +1057 -0
  175. synapse/handlers/saml.py +524 -0
  176. synapse/handlers/search.py +723 -0
  177. synapse/handlers/send_email.py +209 -0
  178. synapse/handlers/set_password.py +71 -0
  179. synapse/handlers/sliding_sync/__init__.py +1701 -0
  180. synapse/handlers/sliding_sync/extensions.py +970 -0
  181. synapse/handlers/sliding_sync/room_lists.py +2266 -0
  182. synapse/handlers/sliding_sync/store.py +128 -0
  183. synapse/handlers/sso.py +1292 -0
  184. synapse/handlers/state_deltas.py +82 -0
  185. synapse/handlers/stats.py +322 -0
  186. synapse/handlers/sync.py +3109 -0
  187. synapse/handlers/thread_subscriptions.py +190 -0
  188. synapse/handlers/typing.py +606 -0
  189. synapse/handlers/ui_auth/__init__.py +48 -0
  190. synapse/handlers/ui_auth/checkers.py +332 -0
  191. synapse/handlers/user_directory.py +783 -0
  192. synapse/handlers/worker_lock.py +365 -0
  193. synapse/http/__init__.py +106 -0
  194. synapse/http/additional_resource.py +62 -0
  195. synapse/http/client.py +1360 -0
  196. synapse/http/connectproxyclient.py +309 -0
  197. synapse/http/federation/__init__.py +19 -0
  198. synapse/http/federation/matrix_federation_agent.py +490 -0
  199. synapse/http/federation/srv_resolver.py +196 -0
  200. synapse/http/federation/well_known_resolver.py +367 -0
  201. synapse/http/matrixfederationclient.py +1875 -0
  202. synapse/http/proxy.py +290 -0
  203. synapse/http/proxyagent.py +497 -0
  204. synapse/http/replicationagent.py +203 -0
  205. synapse/http/request_metrics.py +309 -0
  206. synapse/http/server.py +1114 -0
  207. synapse/http/servlet.py +1019 -0
  208. synapse/http/site.py +825 -0
  209. synapse/http/types.py +27 -0
  210. synapse/logging/__init__.py +31 -0
  211. synapse/logging/_remote.py +261 -0
  212. synapse/logging/_terse_json.py +95 -0
  213. synapse/logging/context.py +1211 -0
  214. synapse/logging/formatter.py +63 -0
  215. synapse/logging/handlers.py +99 -0
  216. synapse/logging/loggers.py +25 -0
  217. synapse/logging/opentracing.py +1132 -0
  218. synapse/logging/scopecontextmanager.py +161 -0
  219. synapse/media/_base.py +827 -0
  220. synapse/media/filepath.py +417 -0
  221. synapse/media/media_repository.py +1580 -0
  222. synapse/media/media_storage.py +704 -0
  223. synapse/media/oembed.py +277 -0
  224. synapse/media/preview_html.py +559 -0
  225. synapse/media/storage_provider.py +195 -0
  226. synapse/media/thumbnailer.py +833 -0
  227. synapse/media/url_previewer.py +875 -0
  228. synapse/metrics/__init__.py +754 -0
  229. synapse/metrics/_gc.py +219 -0
  230. synapse/metrics/_reactor_metrics.py +171 -0
  231. synapse/metrics/_types.py +38 -0
  232. synapse/metrics/background_process_metrics.py +556 -0
  233. synapse/metrics/common_usage_metrics.py +94 -0
  234. synapse/metrics/jemalloc.py +248 -0
  235. synapse/module_api/__init__.py +2154 -0
  236. synapse/module_api/callbacks/__init__.py +50 -0
  237. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  238. synapse/module_api/callbacks/media_repository_callbacks.py +160 -0
  239. synapse/module_api/callbacks/ratelimit_callbacks.py +79 -0
  240. synapse/module_api/callbacks/spamchecker_callbacks.py +1113 -0
  241. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +599 -0
  242. synapse/module_api/errors.py +42 -0
  243. synapse/notifier.py +972 -0
  244. synapse/push/__init__.py +212 -0
  245. synapse/push/bulk_push_rule_evaluator.py +637 -0
  246. synapse/push/clientformat.py +126 -0
  247. synapse/push/emailpusher.py +333 -0
  248. synapse/push/httppusher.py +564 -0
  249. synapse/push/mailer.py +1012 -0
  250. synapse/push/presentable_names.py +216 -0
  251. synapse/push/push_tools.py +114 -0
  252. synapse/push/push_types.py +141 -0
  253. synapse/push/pusher.py +87 -0
  254. synapse/push/pusherpool.py +501 -0
  255. synapse/push/rulekinds.py +33 -0
  256. synapse/py.typed +0 -0
  257. synapse/replication/__init__.py +20 -0
  258. synapse/replication/http/__init__.py +68 -0
  259. synapse/replication/http/_base.py +468 -0
  260. synapse/replication/http/account_data.py +297 -0
  261. synapse/replication/http/deactivate_account.py +81 -0
  262. synapse/replication/http/delayed_events.py +62 -0
  263. synapse/replication/http/devices.py +254 -0
  264. synapse/replication/http/federation.py +334 -0
  265. synapse/replication/http/login.py +106 -0
  266. synapse/replication/http/membership.py +364 -0
  267. synapse/replication/http/presence.py +133 -0
  268. synapse/replication/http/push.py +156 -0
  269. synapse/replication/http/register.py +172 -0
  270. synapse/replication/http/send_events.py +182 -0
  271. synapse/replication/http/state.py +82 -0
  272. synapse/replication/http/streams.py +101 -0
  273. synapse/replication/tcp/__init__.py +56 -0
  274. synapse/replication/tcp/client.py +552 -0
  275. synapse/replication/tcp/commands.py +569 -0
  276. synapse/replication/tcp/context.py +41 -0
  277. synapse/replication/tcp/external_cache.py +156 -0
  278. synapse/replication/tcp/handler.py +942 -0
  279. synapse/replication/tcp/protocol.py +608 -0
  280. synapse/replication/tcp/redis.py +509 -0
  281. synapse/replication/tcp/resource.py +348 -0
  282. synapse/replication/tcp/streams/__init__.py +96 -0
  283. synapse/replication/tcp/streams/_base.py +766 -0
  284. synapse/replication/tcp/streams/events.py +287 -0
  285. synapse/replication/tcp/streams/federation.py +92 -0
  286. synapse/replication/tcp/streams/partial_state.py +80 -0
  287. synapse/res/providers.json +29 -0
  288. synapse/res/templates/_base.html +29 -0
  289. synapse/res/templates/account_previously_renewed.html +6 -0
  290. synapse/res/templates/account_renewed.html +6 -0
  291. synapse/res/templates/add_threepid.html +8 -0
  292. synapse/res/templates/add_threepid.txt +6 -0
  293. synapse/res/templates/add_threepid_failure.html +7 -0
  294. synapse/res/templates/add_threepid_success.html +6 -0
  295. synapse/res/templates/already_in_use.html +12 -0
  296. synapse/res/templates/already_in_use.txt +10 -0
  297. synapse/res/templates/auth_success.html +21 -0
  298. synapse/res/templates/invalid_token.html +6 -0
  299. synapse/res/templates/mail-Element.css +7 -0
  300. synapse/res/templates/mail-Vector.css +7 -0
  301. synapse/res/templates/mail-expiry.css +4 -0
  302. synapse/res/templates/mail.css +156 -0
  303. synapse/res/templates/notice_expiry.html +46 -0
  304. synapse/res/templates/notice_expiry.txt +7 -0
  305. synapse/res/templates/notif.html +51 -0
  306. synapse/res/templates/notif.txt +22 -0
  307. synapse/res/templates/notif_mail.html +59 -0
  308. synapse/res/templates/notif_mail.txt +10 -0
  309. synapse/res/templates/password_reset.html +10 -0
  310. synapse/res/templates/password_reset.txt +7 -0
  311. synapse/res/templates/password_reset_confirmation.html +15 -0
  312. synapse/res/templates/password_reset_failure.html +7 -0
  313. synapse/res/templates/password_reset_success.html +6 -0
  314. synapse/res/templates/recaptcha.html +42 -0
  315. synapse/res/templates/registration.html +12 -0
  316. synapse/res/templates/registration.txt +10 -0
  317. synapse/res/templates/registration_failure.html +6 -0
  318. synapse/res/templates/registration_success.html +6 -0
  319. synapse/res/templates/registration_token.html +18 -0
  320. synapse/res/templates/room.html +33 -0
  321. synapse/res/templates/room.txt +9 -0
  322. synapse/res/templates/sso.css +129 -0
  323. synapse/res/templates/sso_account_deactivated.html +25 -0
  324. synapse/res/templates/sso_auth_account_details.html +186 -0
  325. synapse/res/templates/sso_auth_account_details.js +116 -0
  326. synapse/res/templates/sso_auth_bad_user.html +26 -0
  327. synapse/res/templates/sso_auth_confirm.html +27 -0
  328. synapse/res/templates/sso_auth_success.html +26 -0
  329. synapse/res/templates/sso_error.html +71 -0
  330. synapse/res/templates/sso_footer.html +19 -0
  331. synapse/res/templates/sso_login_idp_picker.html +60 -0
  332. synapse/res/templates/sso_new_user_consent.html +30 -0
  333. synapse/res/templates/sso_partial_profile.html +19 -0
  334. synapse/res/templates/sso_redirect_confirm.html +39 -0
  335. synapse/res/templates/style.css +33 -0
  336. synapse/res/templates/terms.html +27 -0
  337. synapse/rest/__init__.py +197 -0
  338. synapse/rest/admin/__init__.py +390 -0
  339. synapse/rest/admin/_base.py +72 -0
  340. synapse/rest/admin/background_updates.py +171 -0
  341. synapse/rest/admin/devices.py +221 -0
  342. synapse/rest/admin/event_reports.py +173 -0
  343. synapse/rest/admin/events.py +69 -0
  344. synapse/rest/admin/experimental_features.py +137 -0
  345. synapse/rest/admin/federation.py +243 -0
  346. synapse/rest/admin/media.py +540 -0
  347. synapse/rest/admin/registration_tokens.py +358 -0
  348. synapse/rest/admin/rooms.py +1061 -0
  349. synapse/rest/admin/scheduled_tasks.py +70 -0
  350. synapse/rest/admin/server_notice_servlet.py +132 -0
  351. synapse/rest/admin/statistics.py +132 -0
  352. synapse/rest/admin/username_available.py +58 -0
  353. synapse/rest/admin/users.py +1608 -0
  354. synapse/rest/client/__init__.py +20 -0
  355. synapse/rest/client/_base.py +113 -0
  356. synapse/rest/client/account.py +930 -0
  357. synapse/rest/client/account_data.py +319 -0
  358. synapse/rest/client/account_validity.py +103 -0
  359. synapse/rest/client/appservice_ping.py +125 -0
  360. synapse/rest/client/auth.py +218 -0
  361. synapse/rest/client/auth_metadata.py +122 -0
  362. synapse/rest/client/capabilities.py +121 -0
  363. synapse/rest/client/delayed_events.py +111 -0
  364. synapse/rest/client/devices.py +587 -0
  365. synapse/rest/client/directory.py +211 -0
  366. synapse/rest/client/events.py +116 -0
  367. synapse/rest/client/filter.py +112 -0
  368. synapse/rest/client/initial_sync.py +65 -0
  369. synapse/rest/client/keys.py +678 -0
  370. synapse/rest/client/knock.py +104 -0
  371. synapse/rest/client/login.py +754 -0
  372. synapse/rest/client/login_token_request.py +127 -0
  373. synapse/rest/client/logout.py +93 -0
  374. synapse/rest/client/matrixrtc.py +52 -0
  375. synapse/rest/client/media.py +286 -0
  376. synapse/rest/client/mutual_rooms.py +93 -0
  377. synapse/rest/client/notifications.py +137 -0
  378. synapse/rest/client/openid.py +109 -0
  379. synapse/rest/client/password_policy.py +69 -0
  380. synapse/rest/client/presence.py +131 -0
  381. synapse/rest/client/profile.py +291 -0
  382. synapse/rest/client/push_rule.py +331 -0
  383. synapse/rest/client/pusher.py +181 -0
  384. synapse/rest/client/read_marker.py +104 -0
  385. synapse/rest/client/receipts.py +165 -0
  386. synapse/rest/client/register.py +1067 -0
  387. synapse/rest/client/relations.py +138 -0
  388. synapse/rest/client/rendezvous.py +76 -0
  389. synapse/rest/client/reporting.py +207 -0
  390. synapse/rest/client/room.py +1669 -0
  391. synapse/rest/client/room_keys.py +426 -0
  392. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  393. synapse/rest/client/sendtodevice.py +85 -0
  394. synapse/rest/client/sync.py +1131 -0
  395. synapse/rest/client/tags.py +129 -0
  396. synapse/rest/client/thirdparty.py +130 -0
  397. synapse/rest/client/thread_subscriptions.py +247 -0
  398. synapse/rest/client/tokenrefresh.py +52 -0
  399. synapse/rest/client/transactions.py +149 -0
  400. synapse/rest/client/user_directory.py +90 -0
  401. synapse/rest/client/versions.py +191 -0
  402. synapse/rest/client/voip.py +88 -0
  403. synapse/rest/consent/__init__.py +0 -0
  404. synapse/rest/consent/consent_resource.py +210 -0
  405. synapse/rest/health.py +38 -0
  406. synapse/rest/key/__init__.py +20 -0
  407. synapse/rest/key/v2/__init__.py +40 -0
  408. synapse/rest/key/v2/local_key_resource.py +125 -0
  409. synapse/rest/key/v2/remote_key_resource.py +302 -0
  410. synapse/rest/media/__init__.py +0 -0
  411. synapse/rest/media/config_resource.py +53 -0
  412. synapse/rest/media/create_resource.py +90 -0
  413. synapse/rest/media/download_resource.py +110 -0
  414. synapse/rest/media/media_repository_resource.py +113 -0
  415. synapse/rest/media/preview_url_resource.py +77 -0
  416. synapse/rest/media/thumbnail_resource.py +142 -0
  417. synapse/rest/media/upload_resource.py +187 -0
  418. synapse/rest/media/v1/__init__.py +39 -0
  419. synapse/rest/media/v1/_base.py +23 -0
  420. synapse/rest/media/v1/media_storage.py +23 -0
  421. synapse/rest/media/v1/storage_provider.py +23 -0
  422. synapse/rest/synapse/__init__.py +20 -0
  423. synapse/rest/synapse/client/__init__.py +93 -0
  424. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  425. synapse/rest/synapse/client/jwks.py +77 -0
  426. synapse/rest/synapse/client/new_user_consent.py +115 -0
  427. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  428. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  429. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  430. synapse/rest/synapse/client/password_reset.py +129 -0
  431. synapse/rest/synapse/client/pick_idp.py +107 -0
  432. synapse/rest/synapse/client/pick_username.py +153 -0
  433. synapse/rest/synapse/client/rendezvous.py +58 -0
  434. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  435. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  436. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  437. synapse/rest/synapse/client/sso_register.py +56 -0
  438. synapse/rest/synapse/client/unsubscribe.py +88 -0
  439. synapse/rest/synapse/mas/__init__.py +71 -0
  440. synapse/rest/synapse/mas/_base.py +55 -0
  441. synapse/rest/synapse/mas/devices.py +239 -0
  442. synapse/rest/synapse/mas/users.py +469 -0
  443. synapse/rest/well_known.py +148 -0
  444. synapse/server.py +1258 -0
  445. synapse/server_notices/__init__.py +0 -0
  446. synapse/server_notices/consent_server_notices.py +136 -0
  447. synapse/server_notices/resource_limits_server_notices.py +215 -0
  448. synapse/server_notices/server_notices_manager.py +388 -0
  449. synapse/server_notices/server_notices_sender.py +67 -0
  450. synapse/server_notices/worker_server_notices_sender.py +46 -0
  451. synapse/spam_checker_api/__init__.py +31 -0
  452. synapse/state/__init__.py +1022 -0
  453. synapse/state/v1.py +370 -0
  454. synapse/state/v2.py +985 -0
  455. synapse/static/client/login/index.html +47 -0
  456. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  457. synapse/static/client/login/js/login.js +291 -0
  458. synapse/static/client/login/spinner.gif +0 -0
  459. synapse/static/client/login/style.css +79 -0
  460. synapse/static/index.html +63 -0
  461. synapse/storage/__init__.py +43 -0
  462. synapse/storage/_base.py +245 -0
  463. synapse/storage/admin_client_config.py +26 -0
  464. synapse/storage/background_updates.py +1189 -0
  465. synapse/storage/controllers/__init__.py +57 -0
  466. synapse/storage/controllers/persist_events.py +1239 -0
  467. synapse/storage/controllers/purge_events.py +456 -0
  468. synapse/storage/controllers/state.py +954 -0
  469. synapse/storage/controllers/stats.py +119 -0
  470. synapse/storage/database.py +2720 -0
  471. synapse/storage/databases/__init__.py +175 -0
  472. synapse/storage/databases/main/__init__.py +424 -0
  473. synapse/storage/databases/main/account_data.py +1060 -0
  474. synapse/storage/databases/main/appservice.py +473 -0
  475. synapse/storage/databases/main/cache.py +911 -0
  476. synapse/storage/databases/main/censor_events.py +225 -0
  477. synapse/storage/databases/main/client_ips.py +817 -0
  478. synapse/storage/databases/main/delayed_events.py +560 -0
  479. synapse/storage/databases/main/deviceinbox.py +1272 -0
  480. synapse/storage/databases/main/devices.py +2581 -0
  481. synapse/storage/databases/main/directory.py +212 -0
  482. synapse/storage/databases/main/e2e_room_keys.py +690 -0
  483. synapse/storage/databases/main/end_to_end_keys.py +1896 -0
  484. synapse/storage/databases/main/event_federation.py +2509 -0
  485. synapse/storage/databases/main/event_push_actions.py +1937 -0
  486. synapse/storage/databases/main/events.py +3746 -0
  487. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  488. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  489. synapse/storage/databases/main/events_worker.py +2784 -0
  490. synapse/storage/databases/main/experimental_features.py +130 -0
  491. synapse/storage/databases/main/filtering.py +231 -0
  492. synapse/storage/databases/main/keys.py +291 -0
  493. synapse/storage/databases/main/lock.py +553 -0
  494. synapse/storage/databases/main/media_repository.py +1070 -0
  495. synapse/storage/databases/main/metrics.py +460 -0
  496. synapse/storage/databases/main/monthly_active_users.py +443 -0
  497. synapse/storage/databases/main/openid.py +61 -0
  498. synapse/storage/databases/main/presence.py +511 -0
  499. synapse/storage/databases/main/profile.py +541 -0
  500. synapse/storage/databases/main/purge_events.py +511 -0
  501. synapse/storage/databases/main/push_rule.py +972 -0
  502. synapse/storage/databases/main/pusher.py +794 -0
  503. synapse/storage/databases/main/receipts.py +1342 -0
  504. synapse/storage/databases/main/registration.py +3076 -0
  505. synapse/storage/databases/main/rejections.py +38 -0
  506. synapse/storage/databases/main/relations.py +1118 -0
  507. synapse/storage/databases/main/room.py +2781 -0
  508. synapse/storage/databases/main/roommember.py +2112 -0
  509. synapse/storage/databases/main/search.py +941 -0
  510. synapse/storage/databases/main/session.py +151 -0
  511. synapse/storage/databases/main/signatures.py +94 -0
  512. synapse/storage/databases/main/sliding_sync.py +603 -0
  513. synapse/storage/databases/main/state.py +1006 -0
  514. synapse/storage/databases/main/state_deltas.py +329 -0
  515. synapse/storage/databases/main/stats.py +791 -0
  516. synapse/storage/databases/main/stream.py +2580 -0
  517. synapse/storage/databases/main/tags.py +360 -0
  518. synapse/storage/databases/main/task_scheduler.py +225 -0
  519. synapse/storage/databases/main/thread_subscriptions.py +591 -0
  520. synapse/storage/databases/main/transactions.py +681 -0
  521. synapse/storage/databases/main/ui_auth.py +420 -0
  522. synapse/storage/databases/main/user_directory.py +1331 -0
  523. synapse/storage/databases/main/user_erasure_store.py +117 -0
  524. synapse/storage/databases/state/__init__.py +22 -0
  525. synapse/storage/databases/state/bg_updates.py +499 -0
  526. synapse/storage/databases/state/deletion.py +558 -0
  527. synapse/storage/databases/state/store.py +949 -0
  528. synapse/storage/engines/__init__.py +70 -0
  529. synapse/storage/engines/_base.py +154 -0
  530. synapse/storage/engines/postgres.py +261 -0
  531. synapse/storage/engines/sqlite.py +199 -0
  532. synapse/storage/invite_rule.py +112 -0
  533. synapse/storage/keys.py +40 -0
  534. synapse/storage/prepare_database.py +731 -0
  535. synapse/storage/push_rule.py +28 -0
  536. synapse/storage/roommember.py +89 -0
  537. synapse/storage/schema/README.md +4 -0
  538. synapse/storage/schema/__init__.py +182 -0
  539. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  540. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  541. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  543. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  544. synapse/storage/schema/common/schema_version.sql +60 -0
  545. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  546. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  547. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  548. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  549. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  550. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  551. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  552. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  553. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  554. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  555. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  556. synapse/storage/schema/main/delta/16/users.sql +56 -0
  557. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  558. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  559. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  560. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  561. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  562. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  563. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  564. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  565. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  566. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  567. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  568. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  569. synapse/storage/schema/main/delta/25/fts.py +81 -0
  570. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  571. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  572. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  573. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  574. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  575. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  576. synapse/storage/schema/main/delta/27/ts.py +61 -0
  577. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  578. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  579. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  580. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  581. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  582. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  583. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  584. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  585. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  586. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  587. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  588. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  589. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  590. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  591. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  592. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  593. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  594. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  595. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  596. synapse/storage/schema/main/delta/32/events.sql +35 -0
  597. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  598. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  599. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  600. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  601. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  602. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  604. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  605. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  606. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  607. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  608. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  609. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  610. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  611. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  612. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  613. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  614. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  615. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  616. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  617. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  618. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  619. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  620. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  621. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  622. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  623. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  624. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  625. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  626. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  627. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  628. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  629. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  630. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  631. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  632. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  633. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  634. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  635. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  636. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  637. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  638. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  639. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  640. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  641. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  642. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  643. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  644. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  645. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  646. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  647. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  648. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  649. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  650. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  651. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  652. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  653. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  654. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  655. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  656. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  657. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  658. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  659. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  660. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  661. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  662. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  663. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  664. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  665. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  666. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  667. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  668. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  669. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  670. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  671. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  672. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  673. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  674. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  675. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  676. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  678. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  679. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  680. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  681. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  682. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  683. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  684. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  685. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  686. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  687. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  688. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  689. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  690. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  691. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  692. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  694. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  695. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  697. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  698. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  699. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  700. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  701. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  702. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  703. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  704. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  706. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  707. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  708. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  712. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  713. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  714. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  715. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  716. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  717. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  718. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  719. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  720. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  721. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  722. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  723. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  724. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  725. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  726. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  731. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  732. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  733. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  734. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  735. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  737. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  738. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  740. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  741. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  742. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  743. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  744. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  745. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  746. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  747. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  748. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  749. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  751. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  752. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  753. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  754. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  755. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  756. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  757. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  758. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  759. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  760. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  761. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  762. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  763. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  764. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  765. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  766. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  767. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  768. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  769. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  771. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  772. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  773. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  774. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  776. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  777. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  778. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  781. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  782. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  783. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  784. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  785. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  786. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  787. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  788. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  789. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  791. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  792. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  793. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  794. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  795. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  796. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  797. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  798. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  799. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  800. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  801. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  802. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  803. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  804. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  805. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  806. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  807. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  809. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  810. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  811. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  812. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  813. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  814. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  815. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  816. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  817. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  818. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  819. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  820. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  821. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  822. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  823. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  824. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  825. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  826. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  827. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  828. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  829. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  830. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  831. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  833. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  834. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  835. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  836. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  837. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  838. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  839. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  840. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  841. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  843. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  844. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  845. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  846. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  847. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  848. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  850. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  851. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  852. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  853. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  854. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  855. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  856. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  857. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  858. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  859. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  860. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  862. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  863. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  865. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  866. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  867. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  868. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  869. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  870. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  871. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  872. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  873. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  874. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  875. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  876. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  877. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  878. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  879. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  880. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  881. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  882. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  884. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  885. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  886. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  887. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  888. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  889. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  890. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  892. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  893. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  894. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  896. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  897. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  898. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  902. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  903. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  904. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  905. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  906. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  907. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  908. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  910. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  911. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  913. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  914. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  915. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  916. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  917. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  918. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  919. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  920. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  921. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  922. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  923. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  924. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  925. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  926. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  927. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  928. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  929. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  930. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  931. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  932. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  933. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  934. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  935. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  936. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  937. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  938. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  939. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  940. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  941. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  942. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  943. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  944. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  947. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  948. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  949. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  950. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  951. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  952. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  954. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  955. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  956. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  958. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  959. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  960. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  961. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  962. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  963. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  964. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  965. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  966. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  968. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +185 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +909 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +92 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +909 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +415 -0
  1007. synapse/types/state.py +635 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +170 -0
  1010. synapse/util/async_helpers.py +1067 -0
  1011. synapse/util/batching_queue.py +202 -0
  1012. synapse/util/caches/__init__.py +300 -0
  1013. synapse/util/caches/cached_call.py +143 -0
  1014. synapse/util/caches/deferred_cache.py +530 -0
  1015. synapse/util/caches/descriptors.py +694 -0
  1016. synapse/util/caches/dictionary_cache.py +350 -0
  1017. synapse/util/caches/expiringcache.py +251 -0
  1018. synapse/util/caches/lrucache.py +977 -0
  1019. synapse/util/caches/response_cache.py +323 -0
  1020. synapse/util/caches/stream_change_cache.py +370 -0
  1021. synapse/util/caches/treecache.py +189 -0
  1022. synapse/util/caches/ttlcache.py +197 -0
  1023. synapse/util/cancellation.py +63 -0
  1024. synapse/util/check_dependencies.py +335 -0
  1025. synapse/util/clock.py +500 -0
  1026. synapse/util/constants.py +22 -0
  1027. synapse/util/daemonize.py +165 -0
  1028. synapse/util/distributor.py +159 -0
  1029. synapse/util/events.py +134 -0
  1030. synapse/util/file_consumer.py +164 -0
  1031. synapse/util/frozenutils.py +57 -0
  1032. synapse/util/gai_resolver.py +180 -0
  1033. synapse/util/hash.py +38 -0
  1034. synapse/util/httpresourcetree.py +108 -0
  1035. synapse/util/iterutils.py +189 -0
  1036. synapse/util/json.py +56 -0
  1037. synapse/util/linked_list.py +156 -0
  1038. synapse/util/logcontext.py +46 -0
  1039. synapse/util/logformatter.py +28 -0
  1040. synapse/util/macaroons.py +325 -0
  1041. synapse/util/manhole.py +191 -0
  1042. synapse/util/metrics.py +340 -0
  1043. synapse/util/module_loader.py +116 -0
  1044. synapse/util/msisdn.py +51 -0
  1045. synapse/util/patch_inline_callbacks.py +250 -0
  1046. synapse/util/pydantic_models.py +56 -0
  1047. synapse/util/ratelimitutils.py +420 -0
  1048. synapse/util/retryutils.py +339 -0
  1049. synapse/util/rlimit.py +42 -0
  1050. synapse/util/rust.py +134 -0
  1051. synapse/util/sentinel.py +21 -0
  1052. synapse/util/stringutils.py +293 -0
  1053. synapse/util/task_scheduler.py +493 -0
  1054. synapse/util/templates.py +126 -0
  1055. synapse/util/threepids.py +123 -0
  1056. synapse/util/wheel_timer.py +112 -0
  1057. synapse/visibility.py +836 -0
@@ -0,0 +1,1057 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2021 The Matrix.org Foundation C.I.C.
5
+ # Copyright (C) 2023 New Vector, Ltd
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # See the GNU Affero General Public License for more details:
13
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
14
+ #
15
+ # Originally licensed under the Apache License, Version 2.0:
16
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
17
+ #
18
+ # [This file includes modifications made by New Vector Limited]
19
+ #
20
+ #
21
+
22
+ import itertools
23
+ import logging
24
+ import re
25
+ from typing import TYPE_CHECKING, Iterable, Optional, Sequence
26
+
27
+ import attr
28
+
29
+ from synapse.api.constants import (
30
+ EventTypes,
31
+ HistoryVisibility,
32
+ JoinRules,
33
+ Membership,
34
+ RoomTypes,
35
+ )
36
+ from synapse.api.errors import (
37
+ Codes,
38
+ NotFoundError,
39
+ StoreError,
40
+ SynapseError,
41
+ UnstableSpecAuthError,
42
+ UnsupportedRoomVersionError,
43
+ )
44
+ from synapse.api.ratelimiting import Ratelimiter
45
+ from synapse.config.ratelimiting import RatelimitSettings
46
+ from synapse.events import EventBase
47
+ from synapse.types import JsonDict, Requester, StrCollection
48
+ from synapse.types.state import StateFilter
49
+ from synapse.util.caches.response_cache import ResponseCache
50
+
51
+ if TYPE_CHECKING:
52
+ from synapse.server import HomeServer
53
+
54
+ logger = logging.getLogger(__name__)
55
+
56
+ # number of rooms to return. We'll stop once we hit this limit.
57
+ MAX_ROOMS = 50
58
+
59
+ # max number of events to return per room.
60
+ MAX_ROOMS_PER_SPACE = 50
61
+
62
+ # max number of federation servers to hit per room
63
+ MAX_SERVERS_PER_SPACE = 3
64
+
65
+
66
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
67
+ class _PaginationKey:
68
+ """The key used to find unique pagination session."""
69
+
70
+ # The first three entries match the request parameters (and cannot change
71
+ # during a pagination session).
72
+ room_id: str
73
+ suggested_only: bool
74
+ max_depth: Optional[int]
75
+ # The randomly generated token.
76
+ token: str
77
+
78
+
79
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
80
+ class _PaginationSession:
81
+ """The information that is stored for pagination."""
82
+
83
+ # The time the pagination session was created, in milliseconds.
84
+ creation_time_ms: int
85
+ # The queue of rooms which are still to process.
86
+ room_queue: list["_RoomQueueEntry"]
87
+ # A set of rooms which have been processed.
88
+ processed_rooms: set[str]
89
+
90
+
91
+ class RoomSummaryHandler:
92
+ # A unique key used for pagination sessions for the room hierarchy endpoint.
93
+ _PAGINATION_SESSION_TYPE = "room_hierarchy_pagination"
94
+
95
+ # The time a pagination session remains valid for.
96
+ _PAGINATION_SESSION_VALIDITY_PERIOD_MS = 5 * 60 * 1000
97
+
98
+ def __init__(self, hs: "HomeServer"):
99
+ self.server_name = hs.hostname
100
+ self._event_auth_handler = hs.get_event_auth_handler()
101
+ self._store = hs.get_datastores().main
102
+ self._storage_controllers = hs.get_storage_controllers()
103
+ self._event_serializer = hs.get_event_client_serializer()
104
+ self._server_name = hs.hostname
105
+ self._federation_client = hs.get_federation_client()
106
+ self._ratelimiter = Ratelimiter(
107
+ store=self._store,
108
+ clock=hs.get_clock(),
109
+ cfg=RatelimitSettings("<room summary>", per_second=5, burst_count=10),
110
+ )
111
+
112
+ # If a user tries to fetch the same page multiple times in quick succession,
113
+ # only process the first attempt and return its result to subsequent requests.
114
+ self._pagination_response_cache: ResponseCache[
115
+ tuple[
116
+ str,
117
+ str,
118
+ bool,
119
+ bool,
120
+ bool,
121
+ Optional[int],
122
+ Optional[int],
123
+ Optional[str],
124
+ Optional[tuple[str, ...]],
125
+ ]
126
+ ] = ResponseCache(
127
+ clock=hs.get_clock(),
128
+ name="get_room_hierarchy",
129
+ server_name=self.server_name,
130
+ )
131
+ self._msc3266_enabled = hs.config.experimental.msc3266_enabled
132
+
133
+ async def get_room_hierarchy(
134
+ self,
135
+ requester: Requester,
136
+ requested_room_id: str,
137
+ suggested_only: bool = False,
138
+ omit_remote_room_hierarchy: bool = False,
139
+ admin_skip_room_visibility_check: bool = False,
140
+ max_depth: Optional[int] = None,
141
+ limit: Optional[int] = None,
142
+ from_token: Optional[str] = None,
143
+ remote_room_hosts: Optional[tuple[str, ...]] = None,
144
+ ) -> JsonDict:
145
+ """
146
+ Implementation of the room hierarchy C-S API.
147
+
148
+ Args:
149
+ requester: The user ID of the user making this request.
150
+ requested_room_id: The room ID to start the hierarchy at (the "root" room).
151
+ suggested_only: Whether we should only return children with the "suggested"
152
+ flag set.
153
+ omit_remote_room_hierarchy: Whether to skip reaching out over
154
+ federation to get information on rooms which the server
155
+ is not currently joined to
156
+ admin_skip_room_visibility_check: Whether to skip checking if the room can
157
+ be accessed by the requester, used for the admin endpoints.
158
+ max_depth: The maximum depth in the tree to explore, must be a
159
+ non-negative integer.
160
+
161
+ 0 would correspond to just the root room, 1 would include just
162
+ the root room's children, etc.
163
+ limit: An optional limit on the number of rooms to return per
164
+ page. Must be a positive integer.
165
+ from_token: An optional pagination token.
166
+ remote_room_hosts: An optional list of remote homeserver server names. If defined,
167
+ each host will be used to try and fetch the room hierarchy. Must be a tuple so
168
+ that it can be hashed by the `RoomSummaryHandler._pagination_response_cache`.
169
+
170
+ Returns:
171
+ The JSON hierarchy dictionary.
172
+ """
173
+ await self._ratelimiter.ratelimit(requester)
174
+
175
+ # If a user tries to fetch the same page multiple times in quick succession,
176
+ # only process the first attempt and return its result to subsequent requests.
177
+ #
178
+ # This is due to the pagination process mutating internal state, attempting
179
+ # to process multiple requests for the same page will result in errors.
180
+ return await self._pagination_response_cache.wrap(
181
+ (
182
+ requester.user.to_string(),
183
+ requested_room_id,
184
+ suggested_only,
185
+ omit_remote_room_hierarchy,
186
+ admin_skip_room_visibility_check,
187
+ max_depth,
188
+ limit,
189
+ from_token,
190
+ remote_room_hosts,
191
+ ),
192
+ self._get_room_hierarchy,
193
+ requester.user.to_string(),
194
+ requested_room_id,
195
+ suggested_only,
196
+ omit_remote_room_hierarchy,
197
+ admin_skip_room_visibility_check,
198
+ max_depth,
199
+ limit,
200
+ from_token,
201
+ remote_room_hosts,
202
+ )
203
+
204
+ async def _get_room_hierarchy(
205
+ self,
206
+ requester: str,
207
+ requested_room_id: str,
208
+ suggested_only: bool = False,
209
+ omit_remote_room_hierarchy: bool = False,
210
+ admin_skip_room_visibility_check: bool = False,
211
+ max_depth: Optional[int] = None,
212
+ limit: Optional[int] = None,
213
+ from_token: Optional[str] = None,
214
+ remote_room_hosts: Optional[tuple[str, ...]] = None,
215
+ ) -> JsonDict:
216
+ """See docstring for SpaceSummaryHandler.get_room_hierarchy."""
217
+
218
+ # If the room is available locally, quickly check that the user can access it.
219
+ local_room = await self._store.is_host_joined(
220
+ requested_room_id, self._server_name
221
+ )
222
+ if not admin_skip_room_visibility_check:
223
+ if local_room and not await self._is_local_room_accessible(
224
+ requested_room_id, requester
225
+ ):
226
+ raise UnstableSpecAuthError(
227
+ 403,
228
+ "User %s not in room %s, and room previews are disabled"
229
+ % (requester, requested_room_id),
230
+ errcode=Codes.NOT_JOINED,
231
+ )
232
+
233
+ if not local_room and not omit_remote_room_hierarchy:
234
+ room_hierarchy = await self._summarize_remote_room_hierarchy(
235
+ _RoomQueueEntry(requested_room_id, remote_room_hosts or ()),
236
+ False,
237
+ )
238
+ root_room_entry = room_hierarchy[0]
239
+ if not root_room_entry or not await self._is_remote_room_accessible(
240
+ requester, requested_room_id, root_room_entry.room
241
+ ):
242
+ if not admin_skip_room_visibility_check:
243
+ raise UnstableSpecAuthError(
244
+ 403,
245
+ "User %s not in room %s, and room previews are disabled"
246
+ % (requester, requested_room_id),
247
+ errcode=Codes.NOT_JOINED,
248
+ )
249
+
250
+ # If this is continuing a previous session, pull the persisted data.
251
+ if from_token:
252
+ try:
253
+ pagination_session = await self._store.get_session(
254
+ session_type=self._PAGINATION_SESSION_TYPE,
255
+ session_id=from_token,
256
+ )
257
+ except StoreError:
258
+ raise SynapseError(400, "Unknown pagination token", Codes.INVALID_PARAM)
259
+
260
+ # If the requester, room ID, suggested-only, max depth,
261
+ # omit_remote_room_hierarchy, or admin_skip_room_visibility_check
262
+ # were modified the session is invalid.
263
+ if (
264
+ requester != pagination_session["requester"]
265
+ or requested_room_id != pagination_session["room_id"]
266
+ or suggested_only != pagination_session["suggested_only"]
267
+ or max_depth != pagination_session["max_depth"]
268
+ or omit_remote_room_hierarchy
269
+ != pagination_session["omit_remote_room_hierarchy"]
270
+ or admin_skip_room_visibility_check
271
+ != pagination_session["admin_skip_room_visibility_check"]
272
+ ):
273
+ raise SynapseError(400, "Unknown pagination token", Codes.INVALID_PARAM)
274
+
275
+ # Load the previous state.
276
+ room_queue = [
277
+ _RoomQueueEntry(*fields) for fields in pagination_session["room_queue"]
278
+ ]
279
+ processed_rooms = set(pagination_session["processed_rooms"])
280
+ else:
281
+ # The queue of rooms to process, the next room is last on the stack.
282
+ room_queue = [_RoomQueueEntry(requested_room_id, remote_room_hosts or ())]
283
+
284
+ # Rooms we have already processed.
285
+ processed_rooms = set()
286
+
287
+ rooms_result: list[JsonDict] = []
288
+
289
+ # Cap the limit to a server-side maximum.
290
+ if limit is None:
291
+ limit = MAX_ROOMS
292
+ else:
293
+ limit = min(limit, MAX_ROOMS)
294
+
295
+ # Iterate through the queue until we reach the limit or run out of
296
+ # rooms to include.
297
+ while room_queue and len(rooms_result) < limit:
298
+ queue_entry = room_queue.pop()
299
+ room_id = queue_entry.room_id
300
+ current_depth = queue_entry.depth
301
+ if room_id in processed_rooms:
302
+ # already done this room
303
+ continue
304
+
305
+ logger.debug("Processing room %s", room_id)
306
+
307
+ # A map of summaries for children rooms that might be returned over
308
+ # federation. The rationale for caching these and *maybe* using them
309
+ # is to prefer any information local to the homeserver before trusting
310
+ # data received over federation.
311
+ children_room_entries: dict[str, JsonDict] = {}
312
+ # A set of room IDs which are children that did not have information
313
+ # returned over federation and are known to be inaccessible to the
314
+ # current server. We should not reach out over federation to try to
315
+ # summarise these rooms.
316
+ inaccessible_children: set[str] = set()
317
+
318
+ # If the room is known locally, summarise it!
319
+ is_in_room = await self._store.is_host_joined(room_id, self._server_name)
320
+ if is_in_room:
321
+ room_entry = await self._summarize_local_room(
322
+ requester,
323
+ None,
324
+ room_id,
325
+ suggested_only,
326
+ admin_skip_room_visibility_check=admin_skip_room_visibility_check,
327
+ )
328
+
329
+ # Otherwise, attempt to use information for federation.
330
+ else:
331
+ # A previous call might have included information for this room.
332
+ # It can be used if either:
333
+ #
334
+ # 1. The room is not a space.
335
+ # 2. The maximum depth has been achieved (since no children
336
+ # information is needed).
337
+ if queue_entry.remote_room and (
338
+ queue_entry.remote_room.get("room_type") != RoomTypes.SPACE
339
+ or (max_depth is not None and current_depth >= max_depth)
340
+ ):
341
+ room_entry = _RoomEntry(
342
+ queue_entry.room_id, queue_entry.remote_room
343
+ )
344
+
345
+ # If the above isn't true, attempt to fetch the room
346
+ # information over federation.
347
+ elif not omit_remote_room_hierarchy:
348
+ (
349
+ room_entry,
350
+ children_room_entries,
351
+ inaccessible_children,
352
+ ) = await self._summarize_remote_room_hierarchy(
353
+ queue_entry,
354
+ suggested_only,
355
+ )
356
+
357
+ # Ensure this room is accessible to the requester (and not just
358
+ # the homeserver).
359
+ if room_entry and not await self._is_remote_room_accessible(
360
+ requester, queue_entry.room_id, room_entry.room
361
+ ):
362
+ room_entry = None
363
+
364
+ # This room has been processed and should be ignored if it appears
365
+ # elsewhere in the hierarchy.
366
+ processed_rooms.add(room_id)
367
+
368
+ # There may or may not be a room entry based on whether it is
369
+ # inaccessible to the requesting user.
370
+ if room_entry:
371
+ # Add the room (including the stripped m.space.child events).
372
+ rooms_result.append(room_entry.as_json(for_client=True))
373
+
374
+ # If this room is not at the max-depth, check if there are any
375
+ # children to process.
376
+ if max_depth is None or current_depth < max_depth:
377
+ # The children get added in reverse order so that the next
378
+ # room to process, according to the ordering, is the last
379
+ # item in the list.
380
+ room_queue.extend(
381
+ _RoomQueueEntry(
382
+ ev["state_key"],
383
+ ev["content"]["via"],
384
+ current_depth + 1,
385
+ children_room_entries.get(ev["state_key"]),
386
+ )
387
+ for ev in reversed(room_entry.children_state_events)
388
+ if ev["type"] == EventTypes.SpaceChild
389
+ and ev["state_key"] not in inaccessible_children
390
+ )
391
+
392
+ result: JsonDict = {"rooms": rooms_result}
393
+
394
+ # If there's additional data, generate a pagination token (and persist state).
395
+ if room_queue:
396
+ result["next_batch"] = await self._store.create_session(
397
+ session_type=self._PAGINATION_SESSION_TYPE,
398
+ value={
399
+ # Information which must be identical across pagination.
400
+ "requester": requester,
401
+ "room_id": requested_room_id,
402
+ "suggested_only": suggested_only,
403
+ "max_depth": max_depth,
404
+ "omit_remote_room_hierarchy": omit_remote_room_hierarchy,
405
+ "admin_skip_room_visibility_check": admin_skip_room_visibility_check,
406
+ # The stored state.
407
+ "room_queue": [
408
+ attr.astuple(room_entry) for room_entry in room_queue
409
+ ],
410
+ "processed_rooms": list(processed_rooms),
411
+ },
412
+ expiry_ms=self._PAGINATION_SESSION_VALIDITY_PERIOD_MS,
413
+ )
414
+
415
+ return result
416
+
417
+ async def get_federation_hierarchy(
418
+ self,
419
+ origin: str,
420
+ requested_room_id: str,
421
+ suggested_only: bool,
422
+ ) -> JsonDict:
423
+ """
424
+ Implementation of the room hierarchy Federation API.
425
+
426
+ This is similar to get_room_hierarchy, but does not recurse into the space.
427
+ It also considers whether anyone on the server may be able to access the
428
+ room, as opposed to whether a specific user can.
429
+
430
+ Args:
431
+ origin: The server requesting the spaces summary.
432
+ requested_room_id: The room ID to start the hierarchy at (the "root" room).
433
+ suggested_only: whether we should only return children with the "suggested"
434
+ flag set.
435
+
436
+ Returns:
437
+ The JSON hierarchy dictionary.
438
+ """
439
+ root_room_entry = await self._summarize_local_room(
440
+ None, origin, requested_room_id, suggested_only
441
+ )
442
+ if root_room_entry is None:
443
+ # Room is inaccessible to the requesting server.
444
+ raise SynapseError(404, "Unknown room: %s" % (requested_room_id,))
445
+
446
+ children_rooms_result: list[JsonDict] = []
447
+ inaccessible_children: list[str] = []
448
+
449
+ # Iterate through each child and potentially add it, but not its children,
450
+ # to the response.
451
+ for child_room in itertools.islice(
452
+ root_room_entry.children_state_events, MAX_ROOMS_PER_SPACE
453
+ ):
454
+ room_id = child_room.get("state_key")
455
+ assert isinstance(room_id, str)
456
+ # If the room is unknown, skip it.
457
+ if not await self._store.is_host_joined(room_id, self._server_name):
458
+ continue
459
+
460
+ room_entry = await self._summarize_local_room(
461
+ None, origin, room_id, suggested_only, include_children=False
462
+ )
463
+ # If the room is accessible, include it in the results.
464
+ #
465
+ # Note that only the room summary (without information on children)
466
+ # is included in the summary.
467
+ if room_entry:
468
+ children_rooms_result.append(room_entry.room)
469
+ # Otherwise, note that the requesting server shouldn't bother
470
+ # trying to summarize this room - they do not have access to it.
471
+ else:
472
+ inaccessible_children.append(room_id)
473
+
474
+ return {
475
+ # Include the requested room (including the stripped children events).
476
+ "room": root_room_entry.as_json(),
477
+ "children": children_rooms_result,
478
+ "inaccessible_children": inaccessible_children,
479
+ }
480
+
481
+ async def _summarize_local_room(
482
+ self,
483
+ requester: Optional[str],
484
+ origin: Optional[str],
485
+ room_id: str,
486
+ suggested_only: bool,
487
+ include_children: bool = True,
488
+ admin_skip_room_visibility_check: bool = False,
489
+ ) -> Optional["_RoomEntry"]:
490
+ """
491
+ Generate a room entry and a list of event entries for a given room.
492
+
493
+ Args:
494
+ requester:
495
+ The user requesting the summary, if it is a local request. None
496
+ if this is a federation request.
497
+ origin:
498
+ The server requesting the summary, if it is a federation request.
499
+ None if this is a local request.
500
+ room_id: The room ID to summarize.
501
+ suggested_only: True if only suggested children should be returned.
502
+ Otherwise, all children are returned.
503
+ include_children:
504
+ Whether to include the events of any children.
505
+ admin_skip_room_visibility_check: Whether to skip checking if the room
506
+ can be accessed by the requester, used for the admin endpoints.
507
+
508
+ Returns:
509
+ A room entry if the room should be returned. None, otherwise.
510
+ """
511
+ if (
512
+ not admin_skip_room_visibility_check
513
+ and not await self._is_local_room_accessible(room_id, requester, origin)
514
+ ):
515
+ return None
516
+
517
+ room_entry = await self._build_room_entry(room_id, for_federation=bool(origin))
518
+
519
+ # If the room is not a space return just the room information.
520
+ if room_entry.get("room_type") != RoomTypes.SPACE or not include_children:
521
+ return _RoomEntry(room_id, room_entry)
522
+
523
+ # Otherwise, look for child rooms/spaces.
524
+ child_events = await self._get_child_events(room_id)
525
+
526
+ if suggested_only:
527
+ # we only care about suggested children
528
+ child_events = filter(_is_suggested_child_event, child_events)
529
+
530
+ stripped_events: list[JsonDict] = [
531
+ {
532
+ "type": e.type,
533
+ "state_key": e.state_key,
534
+ "content": e.content,
535
+ "sender": e.sender,
536
+ "origin_server_ts": e.origin_server_ts,
537
+ }
538
+ for e in child_events
539
+ ]
540
+ return _RoomEntry(room_id, room_entry, stripped_events)
541
+
542
+ async def _summarize_remote_room_hierarchy(
543
+ self, room: "_RoomQueueEntry", suggested_only: bool
544
+ ) -> tuple[Optional["_RoomEntry"], dict[str, JsonDict], set[str]]:
545
+ """
546
+ Request room entries and a list of event entries for a given room by querying a remote server.
547
+
548
+ Args:
549
+ room: The room to summarize.
550
+ suggested_only: True if only suggested children should be returned.
551
+ Otherwise, all children are returned.
552
+
553
+ Returns:
554
+ A tuple of:
555
+ The room entry.
556
+ Partial room data return over federation.
557
+ A set of inaccessible children room IDs.
558
+ """
559
+ room_id = room.room_id
560
+ logger.info("Requesting summary for %s via %s", room_id, room.via)
561
+
562
+ via = itertools.islice(room.via, MAX_SERVERS_PER_SPACE)
563
+ try:
564
+ (
565
+ room_response,
566
+ children_state_events,
567
+ children,
568
+ inaccessible_children,
569
+ ) = await self._federation_client.get_room_hierarchy(
570
+ via,
571
+ room_id,
572
+ suggested_only=suggested_only,
573
+ )
574
+ except Exception as e:
575
+ logger.warning(
576
+ "Unable to get hierarchy of %s via federation: %s",
577
+ room_id,
578
+ e,
579
+ exc_info=logger.isEnabledFor(logging.DEBUG),
580
+ )
581
+ return None, {}, set()
582
+
583
+ # Map the children to their room ID.
584
+ children_by_room_id = {
585
+ c["room_id"]: c
586
+ for c in children
587
+ if "room_id" in c and isinstance(c["room_id"], str)
588
+ }
589
+
590
+ return (
591
+ _RoomEntry(room_id, room_response, children_state_events),
592
+ children_by_room_id,
593
+ set(inaccessible_children),
594
+ )
595
+
596
+ async def _is_local_room_accessible(
597
+ self, room_id: str, requester: Optional[str], origin: Optional[str] = None
598
+ ) -> bool:
599
+ """
600
+ Calculate whether the room should be shown to the requester.
601
+
602
+ It should return true if:
603
+
604
+ * The requesting user is joined or can join the room (per MSC3173); or
605
+ * The origin server has any user that is joined or can join the room; or
606
+ * The history visibility is set to world readable.
607
+
608
+ Args:
609
+ room_id: The room ID to check accessibility of.
610
+ requester:
611
+ The user making the request, if it is a local request.
612
+ None if this is a federation request.
613
+ origin:
614
+ The server making the request, if it is a federation request.
615
+ None if this is a local request.
616
+
617
+ Returns:
618
+ True if the room is accessible to the requesting user or server.
619
+ """
620
+ event_types = [
621
+ (EventTypes.JoinRules, ""),
622
+ (EventTypes.RoomHistoryVisibility, ""),
623
+ ]
624
+ if requester:
625
+ event_types.append((EventTypes.Member, requester))
626
+
627
+ state_ids = await self._storage_controllers.state.get_current_state_ids(
628
+ room_id, state_filter=StateFilter.from_types(event_types)
629
+ )
630
+
631
+ # If there's no state for the room, it isn't known.
632
+ if not state_ids:
633
+ # The user might have a pending invite for the room.
634
+ if requester and await self._store.get_invite_for_local_user_in_room(
635
+ requester, room_id
636
+ ):
637
+ return True
638
+
639
+ logger.info("room %s is unknown, omitting from summary", room_id)
640
+ return False
641
+
642
+ try:
643
+ room_version = await self._store.get_room_version(room_id)
644
+ except UnsupportedRoomVersionError:
645
+ # If a room with an unsupported room version is encountered, ignore
646
+ # it to avoid breaking the entire summary response.
647
+ return False
648
+
649
+ # Include the room if it has join rules of public or knock.
650
+ join_rules_event_id = state_ids.get((EventTypes.JoinRules, ""))
651
+ if join_rules_event_id:
652
+ join_rules_event = await self._store.get_event(join_rules_event_id)
653
+ join_rule = join_rules_event.content.get("join_rule")
654
+ if (
655
+ join_rule == JoinRules.PUBLIC
656
+ or (room_version.knock_join_rule and join_rule == JoinRules.KNOCK)
657
+ or (
658
+ room_version.knock_restricted_join_rule
659
+ and join_rule == JoinRules.KNOCK_RESTRICTED
660
+ )
661
+ ):
662
+ return True
663
+
664
+ # Include the room if it is peekable.
665
+ hist_vis_event_id = state_ids.get((EventTypes.RoomHistoryVisibility, ""))
666
+ if hist_vis_event_id:
667
+ hist_vis_ev = await self._store.get_event(hist_vis_event_id)
668
+ hist_vis = hist_vis_ev.content.get("history_visibility")
669
+ if hist_vis == HistoryVisibility.WORLD_READABLE:
670
+ return True
671
+
672
+ # Otherwise we need to check information specific to the user or server.
673
+
674
+ # If we have an authenticated requesting user, check if they are a member
675
+ # of the room (or can join the room).
676
+ if requester:
677
+ member_event_id = state_ids.get((EventTypes.Member, requester), None)
678
+
679
+ # If they're in the room they can see info on it.
680
+ if member_event_id:
681
+ member_event = await self._store.get_event(member_event_id)
682
+ if member_event.membership in (Membership.JOIN, Membership.INVITE):
683
+ return True
684
+
685
+ # Otherwise, check if they should be allowed access via membership in a space.
686
+ if await self._event_auth_handler.has_restricted_join_rules(
687
+ state_ids, room_version
688
+ ):
689
+ allowed_rooms = (
690
+ await self._event_auth_handler.get_rooms_that_allow_join(state_ids)
691
+ )
692
+ if await self._event_auth_handler.is_user_in_rooms(
693
+ allowed_rooms, requester
694
+ ):
695
+ return True
696
+
697
+ # If this is a request over federation, check if the host is in the room or
698
+ # has a user who could join the room.
699
+ elif origin:
700
+ if await self._event_auth_handler.is_host_in_room(
701
+ room_id, origin
702
+ ) or await self._store.is_host_invited(room_id, origin):
703
+ return True
704
+
705
+ # Alternately, if the host has a user in any of the spaces specified
706
+ # for access, then the host can see this room (and should do filtering
707
+ # if the requester cannot see it).
708
+ if await self._event_auth_handler.has_restricted_join_rules(
709
+ state_ids, room_version
710
+ ):
711
+ allowed_rooms = (
712
+ await self._event_auth_handler.get_rooms_that_allow_join(state_ids)
713
+ )
714
+ for space_id in allowed_rooms:
715
+ if await self._event_auth_handler.is_host_in_room(space_id, origin):
716
+ return True
717
+
718
+ logger.info(
719
+ "room %s is unpeekable and requester %s is not a member / not allowed to join, omitting from summary",
720
+ room_id,
721
+ requester or origin,
722
+ )
723
+ return False
724
+
725
+ async def _is_remote_room_accessible(
726
+ self, requester: Optional[str], room_id: str, room: JsonDict
727
+ ) -> bool:
728
+ """
729
+ Calculate whether the room received over federation should be shown to the requester.
730
+
731
+ It should return true if:
732
+
733
+ * The requester is joined or can join the room (per MSC3173).
734
+ * The history visibility is set to world readable.
735
+
736
+ Note that the local server is not in the requested room (which is why the
737
+ remote call was made in the first place), but the user could have access
738
+ due to an invite, etc.
739
+
740
+ Args:
741
+ requester: The user requesting the summary. If not passed only world
742
+ readability is checked.
743
+ room_id: The room ID returned over federation.
744
+ room: The summary of the room returned over federation.
745
+
746
+ Returns:
747
+ True if the room is accessible to the requesting user.
748
+ """
749
+ # The API doesn't return the room version so assume that a
750
+ # join rule of knock is valid.
751
+ if (
752
+ room.get("join_rule", JoinRules.PUBLIC)
753
+ in (JoinRules.PUBLIC, JoinRules.KNOCK, JoinRules.KNOCK_RESTRICTED)
754
+ or room.get("world_readable") is True
755
+ ):
756
+ return True
757
+ elif not requester:
758
+ return False
759
+
760
+ # Check if the user is a member of any of the allowed rooms from the response.
761
+ allowed_rooms = room.get("allowed_room_ids")
762
+ if allowed_rooms and isinstance(allowed_rooms, list):
763
+ if await self._event_auth_handler.is_user_in_rooms(
764
+ allowed_rooms, requester
765
+ ):
766
+ return True
767
+
768
+ # Finally, check locally if we can access the room. The user might
769
+ # already be in the room (if it was a child room), or there might be a
770
+ # pending invite, etc.
771
+ return await self._is_local_room_accessible(room_id, requester)
772
+
773
+ async def _build_room_entry(self, room_id: str, for_federation: bool) -> JsonDict:
774
+ """
775
+ Generate en entry summarising a single room.
776
+
777
+ Args:
778
+ room_id: The room ID to summarize.
779
+ for_federation: True if this is a summary requested over federation
780
+ (which includes additional fields).
781
+
782
+ Returns:
783
+ The JSON dictionary for the room.
784
+ """
785
+ stats = await self._store.get_room_with_stats(room_id)
786
+
787
+ # currently this should be impossible because we call
788
+ # _is_local_room_accessible on the room before we get here, so
789
+ # there should always be an entry
790
+ assert stats is not None, "unable to retrieve stats for %s" % (room_id,)
791
+
792
+ entry: JsonDict = {
793
+ "room_id": stats.room_id,
794
+ "name": stats.name,
795
+ "topic": stats.topic,
796
+ "canonical_alias": stats.canonical_alias,
797
+ "num_joined_members": stats.joined_members,
798
+ "avatar_url": stats.avatar,
799
+ "join_rule": stats.join_rules,
800
+ "world_readable": (
801
+ stats.history_visibility == HistoryVisibility.WORLD_READABLE
802
+ ),
803
+ "guest_can_join": stats.guest_access == "can_join",
804
+ "room_type": stats.room_type,
805
+ }
806
+
807
+ if self._msc3266_enabled:
808
+ entry["im.nheko.summary.version"] = stats.version
809
+ entry["im.nheko.summary.encryption"] = stats.encryption
810
+
811
+ # Federation requests need to provide additional information so the
812
+ # requested server is able to filter the response appropriately.
813
+ if for_federation:
814
+ current_state_ids = (
815
+ await self._storage_controllers.state.get_current_state_ids(room_id)
816
+ )
817
+ room_version = await self._store.get_room_version(room_id)
818
+
819
+ if await self._event_auth_handler.has_restricted_join_rules(
820
+ current_state_ids, room_version
821
+ ):
822
+ allowed_rooms = (
823
+ await self._event_auth_handler.get_rooms_that_allow_join(
824
+ current_state_ids
825
+ )
826
+ )
827
+ if allowed_rooms:
828
+ entry["allowed_room_ids"] = allowed_rooms
829
+
830
+ # Filter out Nones – rather omit the field altogether
831
+ room_entry = {k: v for k, v in entry.items() if v is not None}
832
+
833
+ return room_entry
834
+
835
+ async def _get_child_events(self, room_id: str) -> Iterable[EventBase]:
836
+ """
837
+ Get the child events for a given room.
838
+
839
+ The returned results are sorted for stability.
840
+
841
+ Args:
842
+ room_id: The room id to get the children of.
843
+
844
+ Returns:
845
+ An iterable of sorted child events.
846
+ """
847
+
848
+ # look for child rooms/spaces.
849
+ current_state_ids = await self._storage_controllers.state.get_current_state_ids(
850
+ room_id
851
+ )
852
+
853
+ events = await self._store.get_events_as_list(
854
+ [
855
+ event_id
856
+ for key, event_id in current_state_ids.items()
857
+ if key[0] == EventTypes.SpaceChild
858
+ ]
859
+ )
860
+
861
+ # filter out any events without a "via" (which implies it has been redacted),
862
+ # and order to ensure we return stable results.
863
+ return sorted(filter(_has_valid_via, events), key=_child_events_comparison_key)
864
+
865
+ async def get_room_summary(
866
+ self,
867
+ requester: Optional[str],
868
+ room_id: str,
869
+ remote_room_hosts: Optional[list[str]] = None,
870
+ ) -> JsonDict:
871
+ """
872
+ Implementation of the room summary C-S API from MSC3266
873
+
874
+ Args:
875
+ requester: user id of the user making this request, will be None
876
+ for unauthenticated requests
877
+
878
+ room_id: room id to summarise.
879
+
880
+ remote_room_hosts: a list of homeservers to try fetching data through
881
+ if we don't know it ourselves
882
+
883
+ Returns:
884
+ summary dict to return
885
+ """
886
+ is_in_room = await self._store.is_host_joined(room_id, self._server_name)
887
+
888
+ if is_in_room:
889
+ room_entry = await self._summarize_local_room(
890
+ requester,
891
+ None,
892
+ room_id,
893
+ # Suggested-only doesn't matter since no children are requested.
894
+ suggested_only=False,
895
+ include_children=False,
896
+ )
897
+
898
+ if not room_entry:
899
+ raise NotFoundError("Room not found or is not accessible")
900
+
901
+ room_summary = room_entry.room
902
+
903
+ # If there was a requester, add their membership.
904
+ if requester:
905
+ (
906
+ membership,
907
+ _,
908
+ ) = await self._store.get_local_current_membership_for_user_in_room(
909
+ requester, room_id
910
+ )
911
+
912
+ room_summary["membership"] = membership or "leave"
913
+ else:
914
+ # Reuse the hierarchy query over federation
915
+ if remote_room_hosts is None:
916
+ raise SynapseError(400, "Missing via to query remote room")
917
+
918
+ (
919
+ room_entry,
920
+ children_room_entries,
921
+ inaccessible_children,
922
+ ) = await self._summarize_remote_room_hierarchy(
923
+ _RoomQueueEntry(room_id, remote_room_hosts),
924
+ suggested_only=True,
925
+ )
926
+
927
+ # The results over federation might include rooms that we, as the
928
+ # requesting server, are allowed to see, but the requesting user is
929
+ # not permitted to see.
930
+ #
931
+ # Filter the returned results to only what is accessible to the user.
932
+ if not room_entry or not await self._is_remote_room_accessible(
933
+ requester, room_entry.room_id, room_entry.room
934
+ ):
935
+ raise NotFoundError("Room not found or is not accessible")
936
+
937
+ room = dict(room_entry.room)
938
+ room.pop("allowed_room_ids", None)
939
+
940
+ # If there was a requester, add their membership.
941
+ # We keep the membership in the local membership table unless the
942
+ # room is purged even for remote rooms.
943
+ if requester:
944
+ (
945
+ membership,
946
+ _,
947
+ ) = await self._store.get_local_current_membership_for_user_in_room(
948
+ requester, room_id
949
+ )
950
+ room["membership"] = membership or "leave"
951
+
952
+ return room
953
+
954
+ return room_summary
955
+
956
+
957
+ @attr.s(frozen=True, slots=True, auto_attribs=True)
958
+ class _RoomQueueEntry:
959
+ # The room ID of this entry.
960
+ room_id: str
961
+ # The server to query if the room is not known locally.
962
+ via: StrCollection
963
+ # The minimum number of hops necessary to get to this room (compared to the
964
+ # originally requested room).
965
+ depth: int = 0
966
+ # The room summary for this room returned via federation. This will only be
967
+ # used if the room is not known locally (and is not a space).
968
+ remote_room: Optional[JsonDict] = None
969
+
970
+
971
+ @attr.s(frozen=True, slots=True, auto_attribs=True)
972
+ class _RoomEntry:
973
+ room_id: str
974
+ # The room summary for this room.
975
+ room: JsonDict
976
+ # An iterable of the sorted, stripped children events for children of this room.
977
+ #
978
+ # This may not include all children.
979
+ children_state_events: Sequence[JsonDict] = ()
980
+
981
+ def as_json(self, for_client: bool = False) -> JsonDict:
982
+ """
983
+ Returns a JSON dictionary suitable for the room hierarchy endpoint.
984
+
985
+ It returns the room summary including the stripped m.space.child events
986
+ as a sub-key.
987
+
988
+ Args:
989
+ for_client: If true, any server-server only fields are stripped from
990
+ the result.
991
+
992
+ """
993
+ result = dict(self.room)
994
+
995
+ # Before returning to the client, remove the allowed_room_ids key, if it
996
+ # exists.
997
+ if for_client:
998
+ result.pop("allowed_room_ids", False)
999
+
1000
+ result["children_state"] = self.children_state_events
1001
+ return result
1002
+
1003
+
1004
+ def _has_valid_via(e: EventBase) -> bool:
1005
+ via = e.content.get("via")
1006
+ if not via or not isinstance(via, list):
1007
+ return False
1008
+ for v in via:
1009
+ if not isinstance(v, str):
1010
+ logger.debug("Ignoring edge event %s with invalid via entry", e.event_id)
1011
+ return False
1012
+ return True
1013
+
1014
+
1015
+ def _is_suggested_child_event(edge_event: EventBase) -> bool:
1016
+ suggested = edge_event.content.get("suggested")
1017
+ if isinstance(suggested, bool) and suggested:
1018
+ return True
1019
+ logger.debug("Ignorning not-suggested child %s", edge_event.state_key)
1020
+ return False
1021
+
1022
+
1023
+ # Order may only contain characters in the range of \x20 (space) to \x7E (~) inclusive.
1024
+ _INVALID_ORDER_CHARS_RE = re.compile(r"[^\x20-\x7E]")
1025
+
1026
+
1027
+ def _child_events_comparison_key(
1028
+ child: EventBase,
1029
+ ) -> tuple[bool, Optional[str], int, str]:
1030
+ """
1031
+ Generate a value for comparing two child events for ordering.
1032
+
1033
+ The rules for ordering are:
1034
+
1035
+ 1. The 'order' key, if it is valid.
1036
+ 2. The 'origin_server_ts' of the 'm.space.child' event.
1037
+ 3. The 'room_id'.
1038
+
1039
+ Args:
1040
+ child: The event for generating a comparison key.
1041
+
1042
+ Returns:
1043
+ The comparison key as a tuple of:
1044
+ False if the ordering is valid.
1045
+ The 'order' field or None if it is not given or invalid.
1046
+ The 'origin_server_ts' field.
1047
+ The room ID.
1048
+ """
1049
+ order = child.content.get("order")
1050
+ # If order is not a string or doesn't meet the requirements, ignore it.
1051
+ if not isinstance(order, str):
1052
+ order = None
1053
+ elif len(order) > 50 or _INVALID_ORDER_CHARS_RE.search(order):
1054
+ order = None
1055
+
1056
+ # Items without an order come last.
1057
+ return order is None, order, child.origin_server_ts, child.room_id