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
synapse/server.py ADDED
@@ -0,0 +1,1258 @@
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-2024 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
+
23
+ # This file provides some classes for setting up (partially-populated)
24
+ # homeservers; either as a full homeserver as a real application, or a small
25
+ # partial one for unit test mocking.
26
+
27
+
28
+ import abc
29
+ import functools
30
+ import logging
31
+ from threading import Thread
32
+ from typing import (
33
+ TYPE_CHECKING,
34
+ Any,
35
+ Awaitable,
36
+ Callable,
37
+ Optional,
38
+ TypeVar,
39
+ cast,
40
+ )
41
+ from wsgiref.simple_server import WSGIServer
42
+
43
+ from attr import dataclass
44
+ from typing_extensions import TypeAlias
45
+
46
+ from twisted.internet import defer
47
+ from twisted.internet.base import _SystemEventID
48
+ from twisted.internet.interfaces import IOpenSSLContextFactory
49
+ from twisted.internet.tcp import Port
50
+ from twisted.python.threadpool import ThreadPool
51
+ from twisted.web.iweb import IPolicyForHTTPS
52
+ from twisted.web.resource import Resource
53
+
54
+ from synapse.api.auth import Auth
55
+ from synapse.api.auth.internal import InternalAuth
56
+ from synapse.api.auth.mas import MasDelegatedAuth
57
+ from synapse.api.auth_blocking import AuthBlocking
58
+ from synapse.api.filtering import Filtering
59
+ from synapse.api.ratelimiting import Ratelimiter, RequestRatelimiter
60
+ from synapse.app._base import unregister_sighups
61
+ from synapse.app.phone_stats_home import start_phone_stats_home
62
+ from synapse.appservice.api import ApplicationServiceApi
63
+ from synapse.appservice.scheduler import ApplicationServiceScheduler
64
+ from synapse.config.homeserver import HomeServerConfig
65
+ from synapse.crypto import context_factory
66
+ from synapse.crypto.context_factory import RegularPolicyForHTTPS
67
+ from synapse.crypto.keyring import Keyring
68
+ from synapse.events.builder import EventBuilderFactory
69
+ from synapse.events.presence_router import PresenceRouter
70
+ from synapse.events.utils import EventClientSerializer
71
+ from synapse.federation.federation_client import FederationClient
72
+ from synapse.federation.federation_server import (
73
+ FederationHandlerRegistry,
74
+ FederationServer,
75
+ )
76
+ from synapse.federation.send_queue import FederationRemoteSendQueue
77
+ from synapse.federation.sender import AbstractFederationSender, FederationSender
78
+ from synapse.federation.transport.client import TransportLayerClient
79
+ from synapse.handlers.account import AccountHandler
80
+ from synapse.handlers.account_data import AccountDataHandler
81
+ from synapse.handlers.account_validity import AccountValidityHandler
82
+ from synapse.handlers.admin import AdminHandler
83
+ from synapse.handlers.appservice import ApplicationServicesHandler
84
+ from synapse.handlers.auth import AuthHandler, PasswordAuthProvider
85
+ from synapse.handlers.cas import CasHandler
86
+ from synapse.handlers.deactivate_account import DeactivateAccountHandler
87
+ from synapse.handlers.delayed_events import DelayedEventsHandler
88
+ from synapse.handlers.device import DeviceHandler, DeviceWriterHandler
89
+ from synapse.handlers.devicemessage import DeviceMessageHandler
90
+ from synapse.handlers.directory import DirectoryHandler
91
+ from synapse.handlers.e2e_keys import E2eKeysHandler
92
+ from synapse.handlers.e2e_room_keys import E2eRoomKeysHandler
93
+ from synapse.handlers.event_auth import EventAuthHandler
94
+ from synapse.handlers.events import EventHandler, EventStreamHandler
95
+ from synapse.handlers.federation import FederationHandler
96
+ from synapse.handlers.federation_event import FederationEventHandler
97
+ from synapse.handlers.identity import IdentityHandler
98
+ from synapse.handlers.initial_sync import InitialSyncHandler
99
+ from synapse.handlers.message import EventCreationHandler, MessageHandler
100
+ from synapse.handlers.pagination import PaginationHandler
101
+ from synapse.handlers.password_policy import PasswordPolicyHandler
102
+ from synapse.handlers.presence import (
103
+ BasePresenceHandler,
104
+ PresenceHandler,
105
+ WorkerPresenceHandler,
106
+ )
107
+ from synapse.handlers.profile import ProfileHandler
108
+ from synapse.handlers.push_rules import PushRulesHandler
109
+ from synapse.handlers.read_marker import ReadMarkerHandler
110
+ from synapse.handlers.receipts import ReceiptsHandler
111
+ from synapse.handlers.register import RegistrationHandler
112
+ from synapse.handlers.relations import RelationsHandler
113
+ from synapse.handlers.reports import ReportsHandler
114
+ from synapse.handlers.room import (
115
+ RoomContextHandler,
116
+ RoomCreationHandler,
117
+ RoomShutdownHandler,
118
+ TimestampLookupHandler,
119
+ )
120
+ from synapse.handlers.room_list import RoomListHandler
121
+ from synapse.handlers.room_member import (
122
+ RoomForgetterHandler,
123
+ RoomMemberHandler,
124
+ RoomMemberMasterHandler,
125
+ )
126
+ from synapse.handlers.room_member_worker import RoomMemberWorkerHandler
127
+ from synapse.handlers.room_policy import RoomPolicyHandler
128
+ from synapse.handlers.room_summary import RoomSummaryHandler
129
+ from synapse.handlers.search import SearchHandler
130
+ from synapse.handlers.send_email import SendEmailHandler
131
+ from synapse.handlers.set_password import SetPasswordHandler
132
+ from synapse.handlers.sliding_sync import SlidingSyncHandler
133
+ from synapse.handlers.sso import SsoHandler
134
+ from synapse.handlers.stats import StatsHandler
135
+ from synapse.handlers.sync import SyncHandler
136
+ from synapse.handlers.thread_subscriptions import ThreadSubscriptionsHandler
137
+ from synapse.handlers.typing import FollowerTypingHandler, TypingWriterHandler
138
+ from synapse.handlers.user_directory import UserDirectoryHandler
139
+ from synapse.handlers.worker_lock import WorkerLocksHandler
140
+ from synapse.http.client import (
141
+ InsecureInterceptableContextFactory,
142
+ ReplicationClient,
143
+ SimpleHttpClient,
144
+ )
145
+ from synapse.http.matrixfederationclient import MatrixFederationHttpClient
146
+ from synapse.logging.context import PreserveLoggingContext
147
+ from synapse.media.media_repository import MediaRepository
148
+ from synapse.metrics import (
149
+ all_later_gauges_to_clean_up_on_shutdown,
150
+ register_threadpool,
151
+ )
152
+ from synapse.metrics.background_process_metrics import run_as_background_process
153
+ from synapse.metrics.common_usage_metrics import CommonUsageMetricsManager
154
+ from synapse.module_api import ModuleApi
155
+ from synapse.module_api.callbacks import ModuleApiCallbacks
156
+ from synapse.notifier import Notifier, ReplicationNotifier
157
+ from synapse.push.bulk_push_rule_evaluator import BulkPushRuleEvaluator
158
+ from synapse.push.pusherpool import PusherPool
159
+ from synapse.replication.tcp.client import ReplicationDataHandler
160
+ from synapse.replication.tcp.external_cache import ExternalCache
161
+ from synapse.replication.tcp.handler import ReplicationCommandHandler
162
+ from synapse.replication.tcp.resource import ReplicationStreamer
163
+ from synapse.replication.tcp.streams import STREAMS_MAP, Stream
164
+ from synapse.rest.media.media_repository_resource import MediaRepositoryResource
165
+ from synapse.server_notices.server_notices_manager import ServerNoticesManager
166
+ from synapse.server_notices.server_notices_sender import ServerNoticesSender
167
+ from synapse.server_notices.worker_server_notices_sender import (
168
+ WorkerServerNoticesSender,
169
+ )
170
+ from synapse.state import StateHandler, StateResolutionHandler
171
+ from synapse.storage import Databases
172
+ from synapse.storage.controllers import StorageControllers
173
+ from synapse.streams.events import EventSources
174
+ from synapse.synapse_rust.rendezvous import RendezvousHandler
175
+ from synapse.types import DomainSpecificString, ISynapseReactor
176
+ from synapse.util import SYNAPSE_VERSION
177
+ from synapse.util.caches import CACHE_METRIC_REGISTRY
178
+ from synapse.util.clock import Clock
179
+ from synapse.util.distributor import Distributor
180
+ from synapse.util.macaroons import MacaroonGenerator
181
+ from synapse.util.ratelimitutils import FederationRateLimiter
182
+ from synapse.util.stringutils import random_string
183
+ from synapse.util.task_scheduler import TaskScheduler
184
+
185
+ logger = logging.getLogger(__name__)
186
+
187
+ if TYPE_CHECKING:
188
+ # Old Python versions don't have `LiteralString`
189
+ from txredisapi import ConnectionHandler
190
+ from typing_extensions import LiteralString
191
+
192
+ from synapse.handlers.jwt import JwtHandler
193
+ from synapse.handlers.oidc import OidcHandler
194
+ from synapse.handlers.saml import SamlHandler
195
+ from synapse.storage._base import SQLBaseStore
196
+
197
+
198
+ # The annotation for `cache_in_self` used to be
199
+ # def (builder: Callable[["HomeServer"],T]) -> Callable[["HomeServer"],T]
200
+ # which mypy was happy with.
201
+ #
202
+ # But PyCharm was confused by this. If `foo` was decorated by `@cache_in_self`, then
203
+ # an expression like `hs.foo()`
204
+ #
205
+ # - would erroneously warn that we hadn't provided a `hs` argument to foo (PyCharm
206
+ # confused about boundmethods and unbound methods?), and
207
+ # - would be considered to have type `Any`, making for a poor autocomplete and
208
+ # cross-referencing experience.
209
+ #
210
+ # Instead, use a typevar `F` to express that `@cache_in_self` returns exactly the
211
+ # same type it receives. This isn't strictly true [*], but it's more than good
212
+ # enough to keep PyCharm and mypy happy.
213
+ #
214
+ # [*]: (e.g. `builder` could be an object with a __call__ attribute rather than a
215
+ # types.FunctionType instance, whereas the return value is always a
216
+ # types.FunctionType instance.)
217
+
218
+ T: TypeAlias = object
219
+ F = TypeVar("F", bound=Callable[["HomeServer"], T])
220
+ R = TypeVar("R")
221
+
222
+
223
+ def cache_in_self(builder: F) -> F:
224
+ """Wraps a function called e.g. `get_foo`, checking if `self.foo` exists and
225
+ returning if so. If not, calls the given function and sets `self.foo` to it.
226
+
227
+ Also ensures that dependency cycles throw an exception correctly, rather
228
+ than overflowing the stack.
229
+ """
230
+
231
+ if not builder.__name__.startswith("get_"):
232
+ raise Exception(
233
+ "@cache_in_self can only be used on functions starting with `get_`"
234
+ )
235
+
236
+ # get_attr -> _attr
237
+ depname = builder.__name__[len("get") :]
238
+
239
+ building = [False]
240
+
241
+ @functools.wraps(builder)
242
+ def _get(self: "HomeServer") -> T:
243
+ try:
244
+ dep = getattr(self, depname)
245
+ return dep
246
+ except AttributeError:
247
+ pass
248
+
249
+ # Prevent cyclic dependencies from deadlocking
250
+ if building[0]:
251
+ raise ValueError("Cyclic dependency while building %s" % (depname,))
252
+
253
+ building[0] = True
254
+ try:
255
+ dep = builder(self)
256
+ setattr(self, depname, dep)
257
+ finally:
258
+ building[0] = False
259
+
260
+ return dep
261
+
262
+ return cast(F, _get)
263
+
264
+
265
+ @dataclass
266
+ class ShutdownInfo:
267
+ """Information for callable functions called at time of shutdown.
268
+
269
+ Attributes:
270
+ func: the object to call before shutdown.
271
+ trigger_id: an ID returned when registering this event trigger.
272
+ args: the arguments to call the function with.
273
+ kwargs: the keyword arguments to call the function with.
274
+ """
275
+
276
+ func: Callable[..., Any]
277
+ trigger_id: _SystemEventID
278
+ kwargs: dict[str, object]
279
+
280
+
281
+ class HomeServer(metaclass=abc.ABCMeta):
282
+ """A basic homeserver object without lazy component builders.
283
+
284
+ This will need all of the components it requires to either be passed as
285
+ constructor arguments, or the relevant methods overriding to create them.
286
+ Typically this would only be used for unit tests.
287
+
288
+ Dependencies should be added by creating a `def get_<depname>(self)`
289
+ function, wrapping it in `@cache_in_self`.
290
+
291
+ Attributes:
292
+ config (synapse.config.homeserver.HomeserverConfig):
293
+ _listening_services (list[Port]): TCP ports that
294
+ we are listening on to provide HTTP services.
295
+ """
296
+
297
+ REQUIRED_ON_BACKGROUND_TASK_STARTUP = [
298
+ "admin",
299
+ "account_validity",
300
+ "auth",
301
+ "deactivate_account",
302
+ "delayed_events",
303
+ "e2e_keys", # for the `delete_old_otks` scheduled-task handler
304
+ "message",
305
+ "pagination",
306
+ "profile",
307
+ "room_forgetter",
308
+ "stats",
309
+ ]
310
+
311
+ @property
312
+ @abc.abstractmethod
313
+ def DATASTORE_CLASS(self) -> type["SQLBaseStore"]:
314
+ # This is overridden in derived application classes
315
+ # (such as synapse.app.homeserver.SynapseHomeServer) and gives the class to be
316
+ # instantiated during setup() for future return by get_datastores()
317
+ pass
318
+
319
+ def __init__(
320
+ self,
321
+ hostname: str,
322
+ config: HomeServerConfig,
323
+ reactor: Optional[ISynapseReactor] = None,
324
+ ):
325
+ """
326
+ Args:
327
+ hostname : The hostname for the server.
328
+ config: The full config for the homeserver.
329
+ """
330
+
331
+ if not reactor:
332
+ from twisted.internet import reactor as _reactor
333
+
334
+ reactor = cast(ISynapseReactor, _reactor)
335
+
336
+ self._reactor = reactor
337
+ self.hostname = hostname
338
+ # the key we use to sign events and requests
339
+ self.signing_key = config.key.signing_key[0]
340
+ self.config = config
341
+ self._listening_services: list[Port] = []
342
+ self._metrics_listeners: list[tuple[WSGIServer, Thread]] = []
343
+ self.start_time: Optional[int] = None
344
+
345
+ self._instance_id = random_string(5)
346
+ self._instance_name = config.worker.instance_name
347
+
348
+ self.version_string = f"Synapse/{SYNAPSE_VERSION}"
349
+
350
+ self.datastores: Optional[Databases] = None
351
+
352
+ self._module_web_resources: dict[str, Resource] = {}
353
+ self._module_web_resources_consumed = False
354
+
355
+ # This attribute is set by the free function `refresh_certificate`.
356
+ self.tls_server_context_factory: Optional[IOpenSSLContextFactory] = None
357
+
358
+ self._is_shutdown = False
359
+ self._async_shutdown_handlers: list[ShutdownInfo] = []
360
+ self._sync_shutdown_handlers: list[ShutdownInfo] = []
361
+ self._background_processes: set[defer.Deferred[Optional[Any]]] = set()
362
+
363
+ def run_as_background_process(
364
+ self,
365
+ desc: "LiteralString",
366
+ func: Callable[..., Awaitable[Optional[R]]],
367
+ *args: Any,
368
+ **kwargs: Any,
369
+ ) -> "defer.Deferred[Optional[R]]":
370
+ """Run the given function in its own logcontext, with resource metrics
371
+
372
+ This should be used to wrap processes which are fired off to run in the
373
+ background, instead of being associated with a particular request.
374
+
375
+ It returns a Deferred which completes when the function completes, but it doesn't
376
+ follow the synapse logcontext rules, which makes it appropriate for passing to
377
+ clock.looping_call and friends (or for firing-and-forgetting in the middle of a
378
+ normal synapse async function).
379
+
380
+ Because the returned Deferred does not follow the synapse logcontext rules, awaiting
381
+ the result of this function will result in the log context being cleared (bad). In
382
+ order to properly await the result of this function and maintain the current log
383
+ context, use `make_deferred_yieldable`.
384
+
385
+ Args:
386
+ desc: a description for this background process type
387
+ server_name: The homeserver name that this background process is being run for
388
+ (this should be `hs.hostname`).
389
+ func: a function, which may return a Deferred or a coroutine
390
+ bg_start_span: Whether to start an opentracing span. Defaults to True.
391
+ Should only be disabled for processes that will not log to or tag
392
+ a span.
393
+ args: positional args for func
394
+ kwargs: keyword args for func
395
+
396
+ Returns:
397
+ Deferred which returns the result of func, or `None` if func raises.
398
+ Note that the returned Deferred does not follow the synapse logcontext
399
+ rules.
400
+ """
401
+ if self._is_shutdown:
402
+ raise Exception(
403
+ f"Cannot start background process. HomeServer has been shutdown {len(self._background_processes)} {len(self.get_clock()._looping_calls)} {len(self.get_clock()._call_id_to_delayed_call)}"
404
+ )
405
+
406
+ # Ignore linter error as this is the one location this should be called.
407
+ deferred = run_as_background_process(desc, self.hostname, func, *args, **kwargs) # type: ignore[untracked-background-process]
408
+ self._background_processes.add(deferred)
409
+
410
+ def on_done(res: R) -> R:
411
+ try:
412
+ self._background_processes.remove(deferred)
413
+ except KeyError:
414
+ # If the background process isn't being tracked anymore we can just move on.
415
+ pass
416
+ return res
417
+
418
+ deferred.addBoth(on_done)
419
+ return deferred
420
+
421
+ async def shutdown(self) -> None:
422
+ """
423
+ Cleanly stops all aspects of the HomeServer and removes any references that
424
+ have been handed out in order to allow the HomeServer object to be garbage
425
+ collected.
426
+
427
+ You must ensure the HomeServer object to not be frozen in the garbage collector
428
+ in order for it to be cleaned up. By default, Synapse freezes the HomeServer
429
+ object in the garbage collector.
430
+ """
431
+
432
+ self._is_shutdown = True
433
+
434
+ logger.info(
435
+ "Received shutdown request for %s (%s).",
436
+ self.hostname,
437
+ self.get_instance_id(),
438
+ )
439
+
440
+ # Unregister sighups first. If a shutdown was requested we shouldn't be responding
441
+ # to things like config changes. So it would be best to stop listening to these first.
442
+ unregister_sighups(self._instance_id)
443
+
444
+ # TODO: It would be desireable to be able to report an error if the HomeServer
445
+ # object is frozen in the garbage collector as that would prevent it from being
446
+ # collected after being shutdown.
447
+ # In theory the following should work, but it doesn't seem to make a difference
448
+ # when I test it locally.
449
+ #
450
+ # if gc.is_tracked(self):
451
+ # logger.error("HomeServer object is tracked by garbage collection so cannot be fully cleaned up")
452
+
453
+ for listener in self._listening_services:
454
+ # During unit tests, an incomplete `twisted.pair.testing._FakePort` is used
455
+ # for listeners so check listener type here to ensure shutdown procedure is
456
+ # only applied to actual `Port` instances.
457
+ if type(listener) is Port:
458
+ port_shutdown = listener.stopListening()
459
+ if port_shutdown is not None:
460
+ await port_shutdown
461
+ self._listening_services.clear()
462
+
463
+ for server, thread in self._metrics_listeners:
464
+ server.shutdown()
465
+ thread.join()
466
+ self._metrics_listeners.clear()
467
+
468
+ # TODO: Cleanup replication pieces
469
+
470
+ self.get_keyring().shutdown()
471
+
472
+ # Cleanup metrics associated with the homeserver
473
+ for later_gauge in all_later_gauges_to_clean_up_on_shutdown.values():
474
+ later_gauge.unregister_hooks_for_homeserver_instance_id(
475
+ self.get_instance_id()
476
+ )
477
+
478
+ CACHE_METRIC_REGISTRY.unregister_hooks_for_homeserver(
479
+ self.config.server.server_name
480
+ )
481
+
482
+ for db in self.get_datastores().databases:
483
+ db.stop_background_updates()
484
+
485
+ if self.should_send_federation():
486
+ try:
487
+ self.get_federation_sender().shutdown()
488
+ except Exception:
489
+ pass
490
+
491
+ for shutdown_handler in self._async_shutdown_handlers:
492
+ try:
493
+ self.get_reactor().removeSystemEventTrigger(shutdown_handler.trigger_id)
494
+ defer.ensureDeferred(shutdown_handler.func(**shutdown_handler.kwargs))
495
+ except Exception as e:
496
+ logger.error("Error calling shutdown async handler: %s", e)
497
+ self._async_shutdown_handlers.clear()
498
+
499
+ for shutdown_handler in self._sync_shutdown_handlers:
500
+ try:
501
+ self.get_reactor().removeSystemEventTrigger(shutdown_handler.trigger_id)
502
+ shutdown_handler.func(**shutdown_handler.kwargs)
503
+ except Exception as e:
504
+ logger.error("Error calling shutdown sync handler: %s", e)
505
+ self._sync_shutdown_handlers.clear()
506
+
507
+ self.get_clock().shutdown()
508
+
509
+ for background_process in list(self._background_processes):
510
+ try:
511
+ with PreserveLoggingContext():
512
+ background_process.cancel()
513
+ except Exception:
514
+ pass
515
+ self._background_processes.clear()
516
+
517
+ for db in self.get_datastores().databases:
518
+ db._db_pool.close()
519
+
520
+ def register_async_shutdown_handler(
521
+ self,
522
+ *,
523
+ phase: str,
524
+ eventType: str,
525
+ shutdown_func: Callable[..., Any],
526
+ **kwargs: object,
527
+ ) -> None:
528
+ """
529
+ Register a system event trigger with the HomeServer so it can be cleanly
530
+ removed when the HomeServer is shutdown.
531
+ """
532
+ id = self.get_clock().add_system_event_trigger(
533
+ phase,
534
+ eventType,
535
+ shutdown_func,
536
+ **kwargs,
537
+ )
538
+ self._async_shutdown_handlers.append(
539
+ ShutdownInfo(func=shutdown_func, trigger_id=id, kwargs=kwargs)
540
+ )
541
+
542
+ def register_sync_shutdown_handler(
543
+ self,
544
+ *,
545
+ phase: str,
546
+ eventType: str,
547
+ shutdown_func: Callable[..., Any],
548
+ **kwargs: object,
549
+ ) -> None:
550
+ """
551
+ Register a system event trigger with the HomeServer so it can be cleanly
552
+ removed when the HomeServer is shutdown.
553
+ """
554
+ id = self.get_clock().add_system_event_trigger(
555
+ phase,
556
+ eventType,
557
+ shutdown_func,
558
+ **kwargs,
559
+ )
560
+ self._sync_shutdown_handlers.append(
561
+ ShutdownInfo(func=shutdown_func, trigger_id=id, kwargs=kwargs)
562
+ )
563
+
564
+ def register_module_web_resource(self, path: str, resource: Resource) -> None:
565
+ """Allows a module to register a web resource to be served at the given path.
566
+
567
+ If multiple modules register a resource for the same path, the module that
568
+ appears the highest in the configuration file takes priority.
569
+
570
+ Args:
571
+ path: The path to register the resource for.
572
+ resource: The resource to attach to this path.
573
+
574
+ Raises:
575
+ SynapseError(500): A module tried to register a web resource after the HTTP
576
+ listeners have been started.
577
+ """
578
+ if self._module_web_resources_consumed:
579
+ raise RuntimeError(
580
+ "Tried to register a web resource from a module after startup",
581
+ )
582
+
583
+ # Don't register a resource that's already been registered.
584
+ if path not in self._module_web_resources.keys():
585
+ self._module_web_resources[path] = resource
586
+ else:
587
+ logger.warning(
588
+ "Module tried to register a web resource for path %s but another module"
589
+ " has already registered a resource for this path.",
590
+ path,
591
+ )
592
+
593
+ def get_instance_id(self) -> str:
594
+ """A unique ID for this synapse process instance.
595
+
596
+ This is used to distinguish running instances in worker-based
597
+ deployments.
598
+ """
599
+ return self._instance_id
600
+
601
+ def get_instance_name(self) -> str:
602
+ """A unique name for this synapse process.
603
+
604
+ Used to identify the process over replication and in config. Does not
605
+ change over restarts.
606
+ """
607
+ return self._instance_name
608
+
609
+ def setup(self) -> None:
610
+ logger.info("Setting up.")
611
+ self.start_time = int(self.get_clock().time())
612
+ self.datastores = Databases(self.DATASTORE_CLASS, self)
613
+ logger.info("Finished setting up.")
614
+
615
+ # def __del__(self) -> None:
616
+ # """
617
+ # Called when an the homeserver is garbage collected.
618
+ #
619
+ # Make sure we actually do some clean-up, rather than leak data.
620
+ # """
621
+ #
622
+ # # NOTE: This is a chicken and egg problem.
623
+ # # __del__ will never be called since the HomeServer cannot be garbage collected
624
+ # # until the shutdown function has been called. So it makes no sense to call
625
+ # # shutdown inside of __del__, even though that is a logical place to assume it
626
+ # # should be called.
627
+ # self.shutdown()
628
+
629
+ def start_listening(self) -> None: # noqa: B027 (no-op by design)
630
+ """Start the HTTP, manhole, metrics, etc listeners
631
+
632
+ Does nothing in this base class; overridden in derived classes to start the
633
+ appropriate listeners.
634
+ """
635
+
636
+ def start_background_tasks(self) -> None:
637
+ """
638
+ Some handlers have side effects on instantiation (like registering
639
+ background updates). This function causes them to be fetched, and
640
+ therefore instantiated, to run those side effects.
641
+ """
642
+ for i in self.REQUIRED_ON_BACKGROUND_TASK_STARTUP:
643
+ getattr(self, "get_" + i + "_handler")()
644
+ self.get_task_scheduler()
645
+ self.get_common_usage_metrics_manager().setup()
646
+ start_phone_stats_home(self)
647
+
648
+ def get_reactor(self) -> ISynapseReactor:
649
+ """
650
+ Fetch the Twisted reactor in use by this HomeServer.
651
+ """
652
+ return self._reactor
653
+
654
+ def is_mine(self, domain_specific_string: DomainSpecificString) -> bool:
655
+ return domain_specific_string.domain == self.hostname
656
+
657
+ def is_mine_id(self, user_id: str) -> bool:
658
+ """Determines whether a user ID or room alias originates from this homeserver.
659
+
660
+ Returns:
661
+ `True` if the hostname part of the user ID or room alias matches this
662
+ homeserver.
663
+ `False` otherwise, or if the user ID or room alias is malformed.
664
+ """
665
+ localpart_hostname = user_id.split(":", 1)
666
+ if len(localpart_hostname) < 2:
667
+ return False
668
+ return localpart_hostname[1] == self.hostname
669
+
670
+ def is_mine_server_name(self, server_name: str) -> bool:
671
+ """Determines whether a server name refers to this homeserver."""
672
+ return server_name == self.hostname
673
+
674
+ @cache_in_self
675
+ def get_clock(self) -> Clock:
676
+ # Ignore the linter error since this is the one place the `Clock` should be created.
677
+ return Clock(self._reactor, server_name=self.hostname) # type: ignore[multiple-internal-clocks]
678
+
679
+ def get_datastores(self) -> Databases:
680
+ if not self.datastores:
681
+ raise Exception("HomeServer.setup must be called before getting datastores")
682
+
683
+ return self.datastores
684
+
685
+ @cache_in_self
686
+ def get_distributor(self) -> Distributor:
687
+ return Distributor(hs=self)
688
+
689
+ @cache_in_self
690
+ def get_registration_ratelimiter(self) -> Ratelimiter:
691
+ return Ratelimiter(
692
+ store=self.get_datastores().main,
693
+ clock=self.get_clock(),
694
+ cfg=self.config.ratelimiting.rc_registration,
695
+ )
696
+
697
+ @cache_in_self
698
+ def get_federation_client(self) -> FederationClient:
699
+ return FederationClient(self)
700
+
701
+ @cache_in_self
702
+ def get_federation_server(self) -> FederationServer:
703
+ return FederationServer(self)
704
+
705
+ @cache_in_self
706
+ def get_notifier(self) -> Notifier:
707
+ return Notifier(self)
708
+
709
+ @cache_in_self
710
+ def get_replication_notifier(self) -> ReplicationNotifier:
711
+ return ReplicationNotifier()
712
+
713
+ @cache_in_self
714
+ def get_auth(self) -> Auth:
715
+ if self.config.mas.enabled:
716
+ return MasDelegatedAuth(self)
717
+ if self.config.experimental.msc3861.enabled:
718
+ from synapse.api.auth.msc3861_delegated import MSC3861DelegatedAuth
719
+
720
+ return MSC3861DelegatedAuth(self)
721
+ return InternalAuth(self)
722
+
723
+ @cache_in_self
724
+ def get_auth_blocking(self) -> AuthBlocking:
725
+ return AuthBlocking(self)
726
+
727
+ @cache_in_self
728
+ def get_http_client_context_factory(self) -> IPolicyForHTTPS:
729
+ if self.config.tls.use_insecure_ssl_client_just_for_testing_do_not_use:
730
+ return InsecureInterceptableContextFactory()
731
+ return RegularPolicyForHTTPS()
732
+
733
+ @cache_in_self
734
+ def get_simple_http_client(self) -> SimpleHttpClient:
735
+ """
736
+ An HTTP client with no special configuration.
737
+ """
738
+ return SimpleHttpClient(self)
739
+
740
+ @cache_in_self
741
+ def get_proxied_http_client(self) -> SimpleHttpClient:
742
+ """
743
+ An HTTP client that uses configured HTTP(S) proxies.
744
+ """
745
+ return SimpleHttpClient(self, use_proxy=True)
746
+
747
+ @cache_in_self
748
+ def get_proxied_blocklisted_http_client(self) -> SimpleHttpClient:
749
+ """
750
+ An HTTP client that uses configured HTTP(S) proxies and blocks IPs
751
+ based on the configured IP ranges.
752
+ """
753
+ return SimpleHttpClient(
754
+ self,
755
+ ip_allowlist=self.config.server.ip_range_allowlist,
756
+ ip_blocklist=self.config.server.ip_range_blocklist,
757
+ use_proxy=True,
758
+ )
759
+
760
+ @cache_in_self
761
+ def get_federation_http_client(self) -> MatrixFederationHttpClient:
762
+ """
763
+ An HTTP client for federation.
764
+ """
765
+ tls_client_options_factory = context_factory.FederationPolicyForHTTPS(
766
+ self.config
767
+ )
768
+ return MatrixFederationHttpClient(self, tls_client_options_factory)
769
+
770
+ @cache_in_self
771
+ def get_replication_client(self) -> ReplicationClient:
772
+ """
773
+ An HTTP client for HTTP replication.
774
+ """
775
+ return ReplicationClient(self)
776
+
777
+ @cache_in_self
778
+ def get_room_creation_handler(self) -> RoomCreationHandler:
779
+ return RoomCreationHandler(self)
780
+
781
+ @cache_in_self
782
+ def get_room_shutdown_handler(self) -> RoomShutdownHandler:
783
+ return RoomShutdownHandler(self)
784
+
785
+ @cache_in_self
786
+ def get_state_handler(self) -> StateHandler:
787
+ return StateHandler(self)
788
+
789
+ @cache_in_self
790
+ def get_state_resolution_handler(self) -> StateResolutionHandler:
791
+ return StateResolutionHandler(self)
792
+
793
+ @cache_in_self
794
+ def get_presence_handler(self) -> BasePresenceHandler:
795
+ if self.get_instance_name() in self.config.worker.writers.presence:
796
+ return PresenceHandler(self)
797
+ else:
798
+ return WorkerPresenceHandler(self)
799
+
800
+ @cache_in_self
801
+ def get_typing_writer_handler(self) -> TypingWriterHandler:
802
+ if self.get_instance_name() in self.config.worker.writers.typing:
803
+ return TypingWriterHandler(self)
804
+ else:
805
+ raise Exception("Workers cannot write typing")
806
+
807
+ @cache_in_self
808
+ def get_presence_router(self) -> PresenceRouter:
809
+ return PresenceRouter(self)
810
+
811
+ @cache_in_self
812
+ def get_typing_handler(self) -> FollowerTypingHandler:
813
+ if self.get_instance_name() in self.config.worker.writers.typing:
814
+ # Use get_typing_writer_handler to ensure that we use the same
815
+ # cached version.
816
+ return self.get_typing_writer_handler()
817
+ else:
818
+ return FollowerTypingHandler(self)
819
+
820
+ @cache_in_self
821
+ def get_sso_handler(self) -> SsoHandler:
822
+ return SsoHandler(self)
823
+
824
+ @cache_in_self
825
+ def get_jwt_handler(self) -> "JwtHandler":
826
+ from synapse.handlers.jwt import JwtHandler
827
+
828
+ return JwtHandler(self)
829
+
830
+ @cache_in_self
831
+ def get_sync_handler(self) -> SyncHandler:
832
+ return SyncHandler(self)
833
+
834
+ @cache_in_self
835
+ def get_sliding_sync_handler(self) -> SlidingSyncHandler:
836
+ return SlidingSyncHandler(self)
837
+
838
+ @cache_in_self
839
+ def get_room_list_handler(self) -> RoomListHandler:
840
+ return RoomListHandler(self)
841
+
842
+ @cache_in_self
843
+ def get_auth_handler(self) -> AuthHandler:
844
+ return AuthHandler(self)
845
+
846
+ @cache_in_self
847
+ def get_macaroon_generator(self) -> MacaroonGenerator:
848
+ return MacaroonGenerator(
849
+ self.get_clock(), self.hostname, self.config.key.macaroon_secret_key
850
+ )
851
+
852
+ @cache_in_self
853
+ def get_device_handler(self) -> DeviceHandler:
854
+ if self.get_instance_name() in self.config.worker.writers.device_lists:
855
+ return DeviceWriterHandler(self)
856
+
857
+ return DeviceHandler(self)
858
+
859
+ @cache_in_self
860
+ def get_device_message_handler(self) -> DeviceMessageHandler:
861
+ return DeviceMessageHandler(self)
862
+
863
+ @cache_in_self
864
+ def get_directory_handler(self) -> DirectoryHandler:
865
+ return DirectoryHandler(self)
866
+
867
+ @cache_in_self
868
+ def get_e2e_keys_handler(self) -> E2eKeysHandler:
869
+ return E2eKeysHandler(self)
870
+
871
+ @cache_in_self
872
+ def get_e2e_room_keys_handler(self) -> E2eRoomKeysHandler:
873
+ return E2eRoomKeysHandler(self)
874
+
875
+ @cache_in_self
876
+ def get_admin_handler(self) -> AdminHandler:
877
+ return AdminHandler(self)
878
+
879
+ @cache_in_self
880
+ def get_application_service_api(self) -> ApplicationServiceApi:
881
+ return ApplicationServiceApi(self)
882
+
883
+ @cache_in_self
884
+ def get_application_service_scheduler(self) -> ApplicationServiceScheduler:
885
+ return ApplicationServiceScheduler(self)
886
+
887
+ @cache_in_self
888
+ def get_application_service_handler(self) -> ApplicationServicesHandler:
889
+ return ApplicationServicesHandler(self)
890
+
891
+ @cache_in_self
892
+ def get_event_handler(self) -> EventHandler:
893
+ return EventHandler(self)
894
+
895
+ @cache_in_self
896
+ def get_event_stream_handler(self) -> EventStreamHandler:
897
+ return EventStreamHandler(self)
898
+
899
+ @cache_in_self
900
+ def get_federation_handler(self) -> FederationHandler:
901
+ return FederationHandler(self)
902
+
903
+ @cache_in_self
904
+ def get_federation_event_handler(self) -> FederationEventHandler:
905
+ return FederationEventHandler(self)
906
+
907
+ @cache_in_self
908
+ def get_identity_handler(self) -> IdentityHandler:
909
+ return IdentityHandler(self)
910
+
911
+ @cache_in_self
912
+ def get_initial_sync_handler(self) -> InitialSyncHandler:
913
+ return InitialSyncHandler(self)
914
+
915
+ @cache_in_self
916
+ def get_profile_handler(self) -> ProfileHandler:
917
+ return ProfileHandler(self)
918
+
919
+ @cache_in_self
920
+ def get_event_creation_handler(self) -> EventCreationHandler:
921
+ return EventCreationHandler(self)
922
+
923
+ @cache_in_self
924
+ def get_deactivate_account_handler(self) -> DeactivateAccountHandler:
925
+ return DeactivateAccountHandler(self)
926
+
927
+ @cache_in_self
928
+ def get_search_handler(self) -> SearchHandler:
929
+ return SearchHandler(self)
930
+
931
+ @cache_in_self
932
+ def get_send_email_handler(self) -> SendEmailHandler:
933
+ return SendEmailHandler(self)
934
+
935
+ @cache_in_self
936
+ def get_set_password_handler(self) -> SetPasswordHandler:
937
+ return SetPasswordHandler(self)
938
+
939
+ @cache_in_self
940
+ def get_event_sources(self) -> EventSources:
941
+ return EventSources(self)
942
+
943
+ @cache_in_self
944
+ def get_keyring(self) -> Keyring:
945
+ return Keyring(self)
946
+
947
+ @cache_in_self
948
+ def get_event_builder_factory(self) -> EventBuilderFactory:
949
+ return EventBuilderFactory(self)
950
+
951
+ @cache_in_self
952
+ def get_filtering(self) -> Filtering:
953
+ return Filtering(self)
954
+
955
+ @cache_in_self
956
+ def get_pusherpool(self) -> PusherPool:
957
+ return PusherPool(self)
958
+
959
+ @cache_in_self
960
+ def get_media_repository_resource(self) -> MediaRepositoryResource:
961
+ # build the media repo resource. This indirects through the HomeServer
962
+ # to ensure that we only have a single instance of
963
+ return MediaRepositoryResource(self)
964
+
965
+ @cache_in_self
966
+ def get_media_repository(self) -> MediaRepository:
967
+ return MediaRepository(self)
968
+
969
+ @cache_in_self
970
+ def get_federation_transport_client(self) -> TransportLayerClient:
971
+ return TransportLayerClient(self)
972
+
973
+ @cache_in_self
974
+ def get_federation_sender(self) -> AbstractFederationSender:
975
+ if self.should_send_federation():
976
+ return FederationSender(self)
977
+ elif not self.config.worker.worker_app:
978
+ return FederationRemoteSendQueue(self)
979
+ else:
980
+ raise Exception("Workers cannot send federation traffic")
981
+
982
+ @cache_in_self
983
+ def get_receipts_handler(self) -> ReceiptsHandler:
984
+ return ReceiptsHandler(self)
985
+
986
+ @cache_in_self
987
+ def get_reports_handler(self) -> ReportsHandler:
988
+ return ReportsHandler(self)
989
+
990
+ @cache_in_self
991
+ def get_read_marker_handler(self) -> ReadMarkerHandler:
992
+ return ReadMarkerHandler(self)
993
+
994
+ @cache_in_self
995
+ def get_replication_command_handler(self) -> ReplicationCommandHandler:
996
+ return ReplicationCommandHandler(self)
997
+
998
+ @cache_in_self
999
+ def get_bulk_push_rule_evaluator(self) -> BulkPushRuleEvaluator:
1000
+ return BulkPushRuleEvaluator(self)
1001
+
1002
+ @cache_in_self
1003
+ def get_user_directory_handler(self) -> UserDirectoryHandler:
1004
+ return UserDirectoryHandler(self)
1005
+
1006
+ @cache_in_self
1007
+ def get_stats_handler(self) -> StatsHandler:
1008
+ return StatsHandler(self)
1009
+
1010
+ @cache_in_self
1011
+ def get_password_auth_provider(self) -> PasswordAuthProvider:
1012
+ return PasswordAuthProvider()
1013
+
1014
+ @cache_in_self
1015
+ def get_room_member_handler(self) -> RoomMemberHandler:
1016
+ if self.config.worker.worker_app:
1017
+ return RoomMemberWorkerHandler(self)
1018
+ return RoomMemberMasterHandler(self)
1019
+
1020
+ @cache_in_self
1021
+ def get_federation_registry(self) -> FederationHandlerRegistry:
1022
+ return FederationHandlerRegistry(self)
1023
+
1024
+ @cache_in_self
1025
+ def get_server_notices_manager(self) -> ServerNoticesManager:
1026
+ if self.config.worker.worker_app:
1027
+ raise Exception("Workers cannot send server notices")
1028
+ return ServerNoticesManager(self)
1029
+
1030
+ @cache_in_self
1031
+ def get_server_notices_sender(self) -> WorkerServerNoticesSender:
1032
+ if self.config.worker.worker_app:
1033
+ return WorkerServerNoticesSender(self)
1034
+ return ServerNoticesSender(self)
1035
+
1036
+ @cache_in_self
1037
+ def get_message_handler(self) -> MessageHandler:
1038
+ return MessageHandler(self)
1039
+
1040
+ @cache_in_self
1041
+ def get_pagination_handler(self) -> PaginationHandler:
1042
+ return PaginationHandler(self)
1043
+
1044
+ @cache_in_self
1045
+ def get_relations_handler(self) -> RelationsHandler:
1046
+ return RelationsHandler(self)
1047
+
1048
+ @cache_in_self
1049
+ def get_room_context_handler(self) -> RoomContextHandler:
1050
+ return RoomContextHandler(self)
1051
+
1052
+ @cache_in_self
1053
+ def get_timestamp_lookup_handler(self) -> TimestampLookupHandler:
1054
+ return TimestampLookupHandler(self)
1055
+
1056
+ @cache_in_self
1057
+ def get_thread_subscriptions_handler(self) -> ThreadSubscriptionsHandler:
1058
+ return ThreadSubscriptionsHandler(self)
1059
+
1060
+ @cache_in_self
1061
+ def get_registration_handler(self) -> RegistrationHandler:
1062
+ return RegistrationHandler(self)
1063
+
1064
+ @cache_in_self
1065
+ def get_account_validity_handler(self) -> AccountValidityHandler:
1066
+ return AccountValidityHandler(self)
1067
+
1068
+ @cache_in_self
1069
+ def get_cas_handler(self) -> CasHandler:
1070
+ return CasHandler(self)
1071
+
1072
+ @cache_in_self
1073
+ def get_saml_handler(self) -> "SamlHandler":
1074
+ from synapse.handlers.saml import SamlHandler
1075
+
1076
+ return SamlHandler(self)
1077
+
1078
+ @cache_in_self
1079
+ def get_oidc_handler(self) -> "OidcHandler":
1080
+ from synapse.handlers.oidc import OidcHandler
1081
+
1082
+ return OidcHandler(self)
1083
+
1084
+ @cache_in_self
1085
+ def get_room_policy_handler(self) -> RoomPolicyHandler:
1086
+ return RoomPolicyHandler(self)
1087
+
1088
+ @cache_in_self
1089
+ def get_event_client_serializer(self) -> EventClientSerializer:
1090
+ return EventClientSerializer(self)
1091
+
1092
+ @cache_in_self
1093
+ def get_password_policy_handler(self) -> PasswordPolicyHandler:
1094
+ return PasswordPolicyHandler(self)
1095
+
1096
+ @cache_in_self
1097
+ def get_storage_controllers(self) -> StorageControllers:
1098
+ return StorageControllers(self, self.get_datastores())
1099
+
1100
+ @cache_in_self
1101
+ def get_replication_streamer(self) -> ReplicationStreamer:
1102
+ return ReplicationStreamer(self)
1103
+
1104
+ @cache_in_self
1105
+ def get_replication_data_handler(self) -> ReplicationDataHandler:
1106
+ return ReplicationDataHandler(self)
1107
+
1108
+ @cache_in_self
1109
+ def get_replication_streams(self) -> dict[str, Stream]:
1110
+ return {stream.NAME: stream(self) for stream in STREAMS_MAP.values()}
1111
+
1112
+ @cache_in_self
1113
+ def get_federation_ratelimiter(self) -> FederationRateLimiter:
1114
+ return FederationRateLimiter(
1115
+ our_server_name=self.hostname,
1116
+ clock=self.get_clock(),
1117
+ config=self.config.ratelimiting.rc_federation,
1118
+ metrics_name="federation_servlets",
1119
+ )
1120
+
1121
+ @cache_in_self
1122
+ def get_module_api(self) -> ModuleApi:
1123
+ return ModuleApi(self, self.get_auth_handler())
1124
+
1125
+ @cache_in_self
1126
+ def get_module_api_callbacks(self) -> ModuleApiCallbacks:
1127
+ return ModuleApiCallbacks(self)
1128
+
1129
+ @cache_in_self
1130
+ def get_account_data_handler(self) -> AccountDataHandler:
1131
+ return AccountDataHandler(self)
1132
+
1133
+ @cache_in_self
1134
+ def get_room_summary_handler(self) -> RoomSummaryHandler:
1135
+ return RoomSummaryHandler(self)
1136
+
1137
+ @cache_in_self
1138
+ def get_event_auth_handler(self) -> EventAuthHandler:
1139
+ return EventAuthHandler(self)
1140
+
1141
+ @cache_in_self
1142
+ def get_external_cache(self) -> ExternalCache:
1143
+ return ExternalCache(self)
1144
+
1145
+ @cache_in_self
1146
+ def get_account_handler(self) -> AccountHandler:
1147
+ return AccountHandler(self)
1148
+
1149
+ @cache_in_self
1150
+ def get_push_rules_handler(self) -> PushRulesHandler:
1151
+ return PushRulesHandler(self)
1152
+
1153
+ @cache_in_self
1154
+ def get_room_forgetter_handler(self) -> RoomForgetterHandler:
1155
+ return RoomForgetterHandler(self)
1156
+
1157
+ @cache_in_self
1158
+ def get_rendezvous_handler(self) -> RendezvousHandler:
1159
+ return RendezvousHandler(self)
1160
+
1161
+ @cache_in_self
1162
+ def get_outbound_redis_connection(self) -> "ConnectionHandler":
1163
+ """
1164
+ The Redis connection used for replication.
1165
+
1166
+ Raises:
1167
+ AssertionError: if Redis is not enabled in the homeserver config.
1168
+ """
1169
+ assert self.config.redis.redis_enabled
1170
+
1171
+ # We only want to import redis module if we're using it, as we have
1172
+ # `txredisapi` as an optional dependency.
1173
+ from synapse.replication.tcp.redis import lazyConnection, lazyUnixConnection
1174
+
1175
+ if self.config.redis.redis_path is None:
1176
+ logger.info(
1177
+ "Connecting to redis (host=%r port=%r) for external cache",
1178
+ self.config.redis.redis_host,
1179
+ self.config.redis.redis_port,
1180
+ )
1181
+
1182
+ return lazyConnection(
1183
+ hs=self,
1184
+ host=self.config.redis.redis_host,
1185
+ port=self.config.redis.redis_port,
1186
+ dbid=self.config.redis.redis_dbid,
1187
+ password=self.config.redis.redis_password,
1188
+ reconnect=True,
1189
+ )
1190
+ else:
1191
+ logger.info(
1192
+ "Connecting to redis (path=%r) for external cache",
1193
+ self.config.redis.redis_path,
1194
+ )
1195
+
1196
+ return lazyUnixConnection(
1197
+ hs=self,
1198
+ path=self.config.redis.redis_path,
1199
+ dbid=self.config.redis.redis_dbid,
1200
+ password=self.config.redis.redis_password,
1201
+ reconnect=True,
1202
+ )
1203
+
1204
+ def should_send_federation(self) -> bool:
1205
+ "Should this server be sending federation traffic directly?"
1206
+ return self.config.worker.send_federation
1207
+
1208
+ @cache_in_self
1209
+ def get_request_ratelimiter(self) -> RequestRatelimiter:
1210
+ return RequestRatelimiter(
1211
+ self.get_datastores().main,
1212
+ self.get_clock(),
1213
+ self.config.ratelimiting.rc_message,
1214
+ self.config.ratelimiting.rc_admin_redaction,
1215
+ )
1216
+
1217
+ @cache_in_self
1218
+ def get_common_usage_metrics_manager(self) -> CommonUsageMetricsManager:
1219
+ """Usage metrics shared between phone home stats and the prometheus exporter."""
1220
+ return CommonUsageMetricsManager(self)
1221
+
1222
+ @cache_in_self
1223
+ def get_worker_locks_handler(self) -> WorkerLocksHandler:
1224
+ return WorkerLocksHandler(self)
1225
+
1226
+ @cache_in_self
1227
+ def get_task_scheduler(self) -> TaskScheduler:
1228
+ return TaskScheduler(self)
1229
+
1230
+ @cache_in_self
1231
+ def get_media_sender_thread_pool(self) -> ThreadPool:
1232
+ """Fetch the threadpool used to read files when responding to media
1233
+ download requests."""
1234
+
1235
+ # We can choose a large threadpool size as these threads predominately
1236
+ # do IO rather than CPU work.
1237
+ media_threadpool = ThreadPool(
1238
+ name="media_threadpool", minthreads=1, maxthreads=50
1239
+ )
1240
+
1241
+ media_threadpool.start()
1242
+ self.register_sync_shutdown_handler(
1243
+ phase="during",
1244
+ eventType="shutdown",
1245
+ shutdown_func=media_threadpool.stop,
1246
+ )
1247
+
1248
+ # Register the threadpool with our metrics.
1249
+ server_name = self.hostname
1250
+ register_threadpool(
1251
+ name="media", server_name=server_name, threadpool=media_threadpool
1252
+ )
1253
+
1254
+ return media_threadpool
1255
+
1256
+ @cache_in_self
1257
+ def get_delayed_events_handler(self) -> DelayedEventsHandler:
1258
+ return DelayedEventsHandler(self)