matrix-synapse 1.143.0__cp310-abi3-manylinux_2_28_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 (1058) hide show
  1. matrix_synapse-1.143.0.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0.dist-info/entry_points.txt +14 -0
  8. synapse/__init__.py +97 -0
  9. synapse/_scripts/__init__.py +0 -0
  10. synapse/_scripts/export_signing_key.py +109 -0
  11. synapse/_scripts/generate_config.py +83 -0
  12. synapse/_scripts/generate_log_config.py +56 -0
  13. synapse/_scripts/generate_signing_key.py +55 -0
  14. synapse/_scripts/generate_workers_map.py +318 -0
  15. synapse/_scripts/hash_password.py +95 -0
  16. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  17. synapse/_scripts/register_new_matrix_user.py +402 -0
  18. synapse/_scripts/review_recent_signups.py +212 -0
  19. synapse/_scripts/synapse_port_db.py +1604 -0
  20. synapse/_scripts/synctl.py +365 -0
  21. synapse/_scripts/update_synapse_database.py +130 -0
  22. synapse/api/__init__.py +20 -0
  23. synapse/api/auth/__init__.py +207 -0
  24. synapse/api/auth/base.py +406 -0
  25. synapse/api/auth/internal.py +299 -0
  26. synapse/api/auth/mas.py +436 -0
  27. synapse/api/auth/msc3861_delegated.py +617 -0
  28. synapse/api/auth_blocking.py +144 -0
  29. synapse/api/constants.py +362 -0
  30. synapse/api/errors.py +907 -0
  31. synapse/api/filtering.py +537 -0
  32. synapse/api/presence.py +102 -0
  33. synapse/api/ratelimiting.py +480 -0
  34. synapse/api/room_versions.py +535 -0
  35. synapse/api/urls.py +118 -0
  36. synapse/app/__init__.py +60 -0
  37. synapse/app/_base.py +862 -0
  38. synapse/app/admin_cmd.py +388 -0
  39. synapse/app/appservice.py +30 -0
  40. synapse/app/client_reader.py +30 -0
  41. synapse/app/complement_fork_starter.py +206 -0
  42. synapse/app/event_creator.py +29 -0
  43. synapse/app/federation_reader.py +30 -0
  44. synapse/app/federation_sender.py +30 -0
  45. synapse/app/frontend_proxy.py +30 -0
  46. synapse/app/generic_worker.py +474 -0
  47. synapse/app/homeserver.py +505 -0
  48. synapse/app/media_repository.py +30 -0
  49. synapse/app/phone_stats_home.py +296 -0
  50. synapse/app/pusher.py +30 -0
  51. synapse/app/synchrotron.py +30 -0
  52. synapse/app/user_dir.py +31 -0
  53. synapse/appservice/__init__.py +458 -0
  54. synapse/appservice/api.py +567 -0
  55. synapse/appservice/scheduler.py +564 -0
  56. synapse/config/__init__.py +27 -0
  57. synapse/config/__main__.py +62 -0
  58. synapse/config/_base.py +1106 -0
  59. synapse/config/_base.pyi +215 -0
  60. synapse/config/_util.py +99 -0
  61. synapse/config/account_validity.py +116 -0
  62. synapse/config/api.py +141 -0
  63. synapse/config/appservice.py +210 -0
  64. synapse/config/auth.py +80 -0
  65. synapse/config/auto_accept_invites.py +43 -0
  66. synapse/config/background_updates.py +44 -0
  67. synapse/config/cache.py +231 -0
  68. synapse/config/captcha.py +90 -0
  69. synapse/config/cas.py +116 -0
  70. synapse/config/consent.py +73 -0
  71. synapse/config/database.py +184 -0
  72. synapse/config/emailconfig.py +367 -0
  73. synapse/config/experimental.py +595 -0
  74. synapse/config/federation.py +114 -0
  75. synapse/config/homeserver.py +141 -0
  76. synapse/config/jwt.py +55 -0
  77. synapse/config/key.py +447 -0
  78. synapse/config/logger.py +390 -0
  79. synapse/config/mas.py +192 -0
  80. synapse/config/matrixrtc.py +66 -0
  81. synapse/config/metrics.py +84 -0
  82. synapse/config/modules.py +40 -0
  83. synapse/config/oembed.py +185 -0
  84. synapse/config/oidc.py +509 -0
  85. synapse/config/password_auth_providers.py +82 -0
  86. synapse/config/push.py +64 -0
  87. synapse/config/ratelimiting.py +254 -0
  88. synapse/config/redis.py +74 -0
  89. synapse/config/registration.py +296 -0
  90. synapse/config/repository.py +311 -0
  91. synapse/config/retention.py +162 -0
  92. synapse/config/room.py +88 -0
  93. synapse/config/room_directory.py +165 -0
  94. synapse/config/saml2.py +251 -0
  95. synapse/config/server.py +1170 -0
  96. synapse/config/server_notices.py +84 -0
  97. synapse/config/spam_checker.py +66 -0
  98. synapse/config/sso.py +121 -0
  99. synapse/config/stats.py +54 -0
  100. synapse/config/third_party_event_rules.py +40 -0
  101. synapse/config/tls.py +192 -0
  102. synapse/config/tracer.py +71 -0
  103. synapse/config/user_directory.py +47 -0
  104. synapse/config/user_types.py +42 -0
  105. synapse/config/voip.py +59 -0
  106. synapse/config/workers.py +642 -0
  107. synapse/crypto/__init__.py +20 -0
  108. synapse/crypto/context_factory.py +278 -0
  109. synapse/crypto/event_signing.py +194 -0
  110. synapse/crypto/keyring.py +931 -0
  111. synapse/event_auth.py +1266 -0
  112. synapse/events/__init__.py +667 -0
  113. synapse/events/auto_accept_invites.py +216 -0
  114. synapse/events/builder.py +387 -0
  115. synapse/events/presence_router.py +243 -0
  116. synapse/events/snapshot.py +559 -0
  117. synapse/events/utils.py +924 -0
  118. synapse/events/validator.py +305 -0
  119. synapse/federation/__init__.py +22 -0
  120. synapse/federation/federation_base.py +382 -0
  121. synapse/federation/federation_client.py +2132 -0
  122. synapse/federation/federation_server.py +1540 -0
  123. synapse/federation/persistence.py +70 -0
  124. synapse/federation/send_queue.py +531 -0
  125. synapse/federation/sender/__init__.py +1164 -0
  126. synapse/federation/sender/per_destination_queue.py +886 -0
  127. synapse/federation/sender/transaction_manager.py +210 -0
  128. synapse/federation/transport/__init__.py +28 -0
  129. synapse/federation/transport/client.py +1199 -0
  130. synapse/federation/transport/server/__init__.py +334 -0
  131. synapse/federation/transport/server/_base.py +429 -0
  132. synapse/federation/transport/server/federation.py +910 -0
  133. synapse/federation/units.py +133 -0
  134. synapse/handlers/__init__.py +20 -0
  135. synapse/handlers/account.py +162 -0
  136. synapse/handlers/account_data.py +360 -0
  137. synapse/handlers/account_validity.py +361 -0
  138. synapse/handlers/admin.py +615 -0
  139. synapse/handlers/appservice.py +989 -0
  140. synapse/handlers/auth.py +2481 -0
  141. synapse/handlers/cas.py +413 -0
  142. synapse/handlers/deactivate_account.py +363 -0
  143. synapse/handlers/delayed_events.py +599 -0
  144. synapse/handlers/device.py +1870 -0
  145. synapse/handlers/devicemessage.py +399 -0
  146. synapse/handlers/directory.py +545 -0
  147. synapse/handlers/e2e_keys.py +1834 -0
  148. synapse/handlers/e2e_room_keys.py +455 -0
  149. synapse/handlers/event_auth.py +390 -0
  150. synapse/handlers/events.py +201 -0
  151. synapse/handlers/federation.py +2039 -0
  152. synapse/handlers/federation_event.py +2419 -0
  153. synapse/handlers/identity.py +812 -0
  154. synapse/handlers/initial_sync.py +528 -0
  155. synapse/handlers/jwt.py +120 -0
  156. synapse/handlers/message.py +2347 -0
  157. synapse/handlers/oidc.py +1801 -0
  158. synapse/handlers/pagination.py +768 -0
  159. synapse/handlers/password_policy.py +102 -0
  160. synapse/handlers/presence.py +2633 -0
  161. synapse/handlers/profile.py +655 -0
  162. synapse/handlers/push_rules.py +164 -0
  163. synapse/handlers/read_marker.py +79 -0
  164. synapse/handlers/receipts.py +351 -0
  165. synapse/handlers/register.py +1059 -0
  166. synapse/handlers/relations.py +623 -0
  167. synapse/handlers/reports.py +98 -0
  168. synapse/handlers/room.py +2448 -0
  169. synapse/handlers/room_list.py +632 -0
  170. synapse/handlers/room_member.py +2365 -0
  171. synapse/handlers/room_member_worker.py +146 -0
  172. synapse/handlers/room_policy.py +186 -0
  173. synapse/handlers/room_summary.py +1057 -0
  174. synapse/handlers/saml.py +524 -0
  175. synapse/handlers/search.py +723 -0
  176. synapse/handlers/send_email.py +209 -0
  177. synapse/handlers/set_password.py +71 -0
  178. synapse/handlers/sliding_sync/__init__.py +1701 -0
  179. synapse/handlers/sliding_sync/extensions.py +969 -0
  180. synapse/handlers/sliding_sync/room_lists.py +2262 -0
  181. synapse/handlers/sliding_sync/store.py +128 -0
  182. synapse/handlers/sso.py +1291 -0
  183. synapse/handlers/state_deltas.py +82 -0
  184. synapse/handlers/stats.py +321 -0
  185. synapse/handlers/sync.py +3106 -0
  186. synapse/handlers/thread_subscriptions.py +190 -0
  187. synapse/handlers/typing.py +606 -0
  188. synapse/handlers/ui_auth/__init__.py +48 -0
  189. synapse/handlers/ui_auth/checkers.py +332 -0
  190. synapse/handlers/user_directory.py +783 -0
  191. synapse/handlers/worker_lock.py +371 -0
  192. synapse/http/__init__.py +105 -0
  193. synapse/http/additional_resource.py +62 -0
  194. synapse/http/client.py +1373 -0
  195. synapse/http/connectproxyclient.py +316 -0
  196. synapse/http/federation/__init__.py +19 -0
  197. synapse/http/federation/matrix_federation_agent.py +490 -0
  198. synapse/http/federation/srv_resolver.py +196 -0
  199. synapse/http/federation/well_known_resolver.py +367 -0
  200. synapse/http/matrixfederationclient.py +1873 -0
  201. synapse/http/proxy.py +290 -0
  202. synapse/http/proxyagent.py +497 -0
  203. synapse/http/replicationagent.py +202 -0
  204. synapse/http/request_metrics.py +309 -0
  205. synapse/http/server.py +1110 -0
  206. synapse/http/servlet.py +1018 -0
  207. synapse/http/site.py +825 -0
  208. synapse/http/types.py +27 -0
  209. synapse/logging/__init__.py +31 -0
  210. synapse/logging/_remote.py +261 -0
  211. synapse/logging/_terse_json.py +95 -0
  212. synapse/logging/context.py +1209 -0
  213. synapse/logging/formatter.py +62 -0
  214. synapse/logging/handlers.py +99 -0
  215. synapse/logging/loggers.py +25 -0
  216. synapse/logging/opentracing.py +1132 -0
  217. synapse/logging/scopecontextmanager.py +160 -0
  218. synapse/media/_base.py +830 -0
  219. synapse/media/filepath.py +417 -0
  220. synapse/media/media_repository.py +1580 -0
  221. synapse/media/media_storage.py +702 -0
  222. synapse/media/oembed.py +277 -0
  223. synapse/media/preview_html.py +556 -0
  224. synapse/media/storage_provider.py +195 -0
  225. synapse/media/thumbnailer.py +833 -0
  226. synapse/media/url_previewer.py +875 -0
  227. synapse/metrics/__init__.py +748 -0
  228. synapse/metrics/_gc.py +219 -0
  229. synapse/metrics/_reactor_metrics.py +171 -0
  230. synapse/metrics/_types.py +38 -0
  231. synapse/metrics/background_process_metrics.py +555 -0
  232. synapse/metrics/common_usage_metrics.py +94 -0
  233. synapse/metrics/jemalloc.py +248 -0
  234. synapse/module_api/__init__.py +2131 -0
  235. synapse/module_api/callbacks/__init__.py +50 -0
  236. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  237. synapse/module_api/callbacks/media_repository_callbacks.py +157 -0
  238. synapse/module_api/callbacks/ratelimit_callbacks.py +78 -0
  239. synapse/module_api/callbacks/spamchecker_callbacks.py +991 -0
  240. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +592 -0
  241. synapse/module_api/errors.py +42 -0
  242. synapse/notifier.py +970 -0
  243. synapse/push/__init__.py +212 -0
  244. synapse/push/bulk_push_rule_evaluator.py +635 -0
  245. synapse/push/clientformat.py +126 -0
  246. synapse/push/emailpusher.py +333 -0
  247. synapse/push/httppusher.py +564 -0
  248. synapse/push/mailer.py +1010 -0
  249. synapse/push/presentable_names.py +216 -0
  250. synapse/push/push_tools.py +114 -0
  251. synapse/push/push_types.py +141 -0
  252. synapse/push/pusher.py +87 -0
  253. synapse/push/pusherpool.py +501 -0
  254. synapse/push/rulekinds.py +33 -0
  255. synapse/py.typed +0 -0
  256. synapse/replication/__init__.py +20 -0
  257. synapse/replication/http/__init__.py +68 -0
  258. synapse/replication/http/_base.py +468 -0
  259. synapse/replication/http/account_data.py +297 -0
  260. synapse/replication/http/deactivate_account.py +81 -0
  261. synapse/replication/http/delayed_events.py +62 -0
  262. synapse/replication/http/devices.py +254 -0
  263. synapse/replication/http/federation.py +334 -0
  264. synapse/replication/http/login.py +106 -0
  265. synapse/replication/http/membership.py +364 -0
  266. synapse/replication/http/presence.py +133 -0
  267. synapse/replication/http/push.py +156 -0
  268. synapse/replication/http/register.py +172 -0
  269. synapse/replication/http/send_events.py +182 -0
  270. synapse/replication/http/state.py +82 -0
  271. synapse/replication/http/streams.py +101 -0
  272. synapse/replication/tcp/__init__.py +56 -0
  273. synapse/replication/tcp/client.py +552 -0
  274. synapse/replication/tcp/commands.py +569 -0
  275. synapse/replication/tcp/context.py +41 -0
  276. synapse/replication/tcp/external_cache.py +156 -0
  277. synapse/replication/tcp/handler.py +922 -0
  278. synapse/replication/tcp/protocol.py +608 -0
  279. synapse/replication/tcp/redis.py +509 -0
  280. synapse/replication/tcp/resource.py +348 -0
  281. synapse/replication/tcp/streams/__init__.py +96 -0
  282. synapse/replication/tcp/streams/_base.py +765 -0
  283. synapse/replication/tcp/streams/events.py +287 -0
  284. synapse/replication/tcp/streams/federation.py +92 -0
  285. synapse/replication/tcp/streams/partial_state.py +80 -0
  286. synapse/res/providers.json +29 -0
  287. synapse/res/templates/_base.html +29 -0
  288. synapse/res/templates/account_previously_renewed.html +6 -0
  289. synapse/res/templates/account_renewed.html +6 -0
  290. synapse/res/templates/add_threepid.html +8 -0
  291. synapse/res/templates/add_threepid.txt +6 -0
  292. synapse/res/templates/add_threepid_failure.html +7 -0
  293. synapse/res/templates/add_threepid_success.html +6 -0
  294. synapse/res/templates/already_in_use.html +12 -0
  295. synapse/res/templates/already_in_use.txt +10 -0
  296. synapse/res/templates/auth_success.html +21 -0
  297. synapse/res/templates/invalid_token.html +6 -0
  298. synapse/res/templates/mail-Element.css +7 -0
  299. synapse/res/templates/mail-Vector.css +7 -0
  300. synapse/res/templates/mail-expiry.css +4 -0
  301. synapse/res/templates/mail.css +156 -0
  302. synapse/res/templates/notice_expiry.html +46 -0
  303. synapse/res/templates/notice_expiry.txt +7 -0
  304. synapse/res/templates/notif.html +51 -0
  305. synapse/res/templates/notif.txt +22 -0
  306. synapse/res/templates/notif_mail.html +59 -0
  307. synapse/res/templates/notif_mail.txt +10 -0
  308. synapse/res/templates/password_reset.html +10 -0
  309. synapse/res/templates/password_reset.txt +7 -0
  310. synapse/res/templates/password_reset_confirmation.html +15 -0
  311. synapse/res/templates/password_reset_failure.html +7 -0
  312. synapse/res/templates/password_reset_success.html +6 -0
  313. synapse/res/templates/recaptcha.html +42 -0
  314. synapse/res/templates/registration.html +12 -0
  315. synapse/res/templates/registration.txt +10 -0
  316. synapse/res/templates/registration_failure.html +6 -0
  317. synapse/res/templates/registration_success.html +6 -0
  318. synapse/res/templates/registration_token.html +18 -0
  319. synapse/res/templates/room.html +33 -0
  320. synapse/res/templates/room.txt +9 -0
  321. synapse/res/templates/sso.css +129 -0
  322. synapse/res/templates/sso_account_deactivated.html +25 -0
  323. synapse/res/templates/sso_auth_account_details.html +186 -0
  324. synapse/res/templates/sso_auth_account_details.js +116 -0
  325. synapse/res/templates/sso_auth_bad_user.html +26 -0
  326. synapse/res/templates/sso_auth_confirm.html +27 -0
  327. synapse/res/templates/sso_auth_success.html +26 -0
  328. synapse/res/templates/sso_error.html +71 -0
  329. synapse/res/templates/sso_footer.html +19 -0
  330. synapse/res/templates/sso_login_idp_picker.html +60 -0
  331. synapse/res/templates/sso_new_user_consent.html +30 -0
  332. synapse/res/templates/sso_partial_profile.html +19 -0
  333. synapse/res/templates/sso_redirect_confirm.html +39 -0
  334. synapse/res/templates/style.css +33 -0
  335. synapse/res/templates/terms.html +27 -0
  336. synapse/rest/__init__.py +197 -0
  337. synapse/rest/admin/__init__.py +390 -0
  338. synapse/rest/admin/_base.py +72 -0
  339. synapse/rest/admin/background_updates.py +171 -0
  340. synapse/rest/admin/devices.py +221 -0
  341. synapse/rest/admin/event_reports.py +173 -0
  342. synapse/rest/admin/events.py +69 -0
  343. synapse/rest/admin/experimental_features.py +137 -0
  344. synapse/rest/admin/federation.py +243 -0
  345. synapse/rest/admin/media.py +540 -0
  346. synapse/rest/admin/registration_tokens.py +358 -0
  347. synapse/rest/admin/rooms.py +1061 -0
  348. synapse/rest/admin/scheduled_tasks.py +70 -0
  349. synapse/rest/admin/server_notice_servlet.py +132 -0
  350. synapse/rest/admin/statistics.py +132 -0
  351. synapse/rest/admin/username_available.py +58 -0
  352. synapse/rest/admin/users.py +1606 -0
  353. synapse/rest/client/__init__.py +20 -0
  354. synapse/rest/client/_base.py +113 -0
  355. synapse/rest/client/account.py +930 -0
  356. synapse/rest/client/account_data.py +319 -0
  357. synapse/rest/client/account_validity.py +103 -0
  358. synapse/rest/client/appservice_ping.py +125 -0
  359. synapse/rest/client/auth.py +218 -0
  360. synapse/rest/client/auth_metadata.py +122 -0
  361. synapse/rest/client/capabilities.py +121 -0
  362. synapse/rest/client/delayed_events.py +165 -0
  363. synapse/rest/client/devices.py +587 -0
  364. synapse/rest/client/directory.py +211 -0
  365. synapse/rest/client/events.py +116 -0
  366. synapse/rest/client/filter.py +112 -0
  367. synapse/rest/client/initial_sync.py +65 -0
  368. synapse/rest/client/keys.py +678 -0
  369. synapse/rest/client/knock.py +104 -0
  370. synapse/rest/client/login.py +750 -0
  371. synapse/rest/client/login_token_request.py +127 -0
  372. synapse/rest/client/logout.py +93 -0
  373. synapse/rest/client/matrixrtc.py +52 -0
  374. synapse/rest/client/media.py +285 -0
  375. synapse/rest/client/mutual_rooms.py +93 -0
  376. synapse/rest/client/notifications.py +137 -0
  377. synapse/rest/client/openid.py +109 -0
  378. synapse/rest/client/password_policy.py +69 -0
  379. synapse/rest/client/presence.py +131 -0
  380. synapse/rest/client/profile.py +291 -0
  381. synapse/rest/client/push_rule.py +331 -0
  382. synapse/rest/client/pusher.py +181 -0
  383. synapse/rest/client/read_marker.py +104 -0
  384. synapse/rest/client/receipts.py +165 -0
  385. synapse/rest/client/register.py +1067 -0
  386. synapse/rest/client/relations.py +138 -0
  387. synapse/rest/client/rendezvous.py +76 -0
  388. synapse/rest/client/reporting.py +207 -0
  389. synapse/rest/client/room.py +1669 -0
  390. synapse/rest/client/room_keys.py +426 -0
  391. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  392. synapse/rest/client/sendtodevice.py +85 -0
  393. synapse/rest/client/sync.py +1131 -0
  394. synapse/rest/client/tags.py +129 -0
  395. synapse/rest/client/thirdparty.py +130 -0
  396. synapse/rest/client/thread_subscriptions.py +247 -0
  397. synapse/rest/client/tokenrefresh.py +52 -0
  398. synapse/rest/client/transactions.py +149 -0
  399. synapse/rest/client/user_directory.py +90 -0
  400. synapse/rest/client/versions.py +191 -0
  401. synapse/rest/client/voip.py +88 -0
  402. synapse/rest/consent/__init__.py +0 -0
  403. synapse/rest/consent/consent_resource.py +210 -0
  404. synapse/rest/health.py +38 -0
  405. synapse/rest/key/__init__.py +20 -0
  406. synapse/rest/key/v2/__init__.py +40 -0
  407. synapse/rest/key/v2/local_key_resource.py +125 -0
  408. synapse/rest/key/v2/remote_key_resource.py +302 -0
  409. synapse/rest/media/__init__.py +0 -0
  410. synapse/rest/media/config_resource.py +53 -0
  411. synapse/rest/media/create_resource.py +90 -0
  412. synapse/rest/media/download_resource.py +110 -0
  413. synapse/rest/media/media_repository_resource.py +113 -0
  414. synapse/rest/media/preview_url_resource.py +77 -0
  415. synapse/rest/media/thumbnail_resource.py +142 -0
  416. synapse/rest/media/upload_resource.py +187 -0
  417. synapse/rest/media/v1/__init__.py +39 -0
  418. synapse/rest/media/v1/_base.py +23 -0
  419. synapse/rest/media/v1/media_storage.py +23 -0
  420. synapse/rest/media/v1/storage_provider.py +23 -0
  421. synapse/rest/synapse/__init__.py +20 -0
  422. synapse/rest/synapse/client/__init__.py +93 -0
  423. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  424. synapse/rest/synapse/client/jwks.py +77 -0
  425. synapse/rest/synapse/client/new_user_consent.py +115 -0
  426. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  427. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  428. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  429. synapse/rest/synapse/client/password_reset.py +129 -0
  430. synapse/rest/synapse/client/pick_idp.py +107 -0
  431. synapse/rest/synapse/client/pick_username.py +153 -0
  432. synapse/rest/synapse/client/rendezvous.py +58 -0
  433. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  434. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  435. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  436. synapse/rest/synapse/client/sso_register.py +56 -0
  437. synapse/rest/synapse/client/unsubscribe.py +88 -0
  438. synapse/rest/synapse/mas/__init__.py +71 -0
  439. synapse/rest/synapse/mas/_base.py +55 -0
  440. synapse/rest/synapse/mas/devices.py +239 -0
  441. synapse/rest/synapse/mas/users.py +469 -0
  442. synapse/rest/well_known.py +148 -0
  443. synapse/server.py +1257 -0
  444. synapse/server_notices/__init__.py +0 -0
  445. synapse/server_notices/consent_server_notices.py +136 -0
  446. synapse/server_notices/resource_limits_server_notices.py +215 -0
  447. synapse/server_notices/server_notices_manager.py +388 -0
  448. synapse/server_notices/server_notices_sender.py +67 -0
  449. synapse/server_notices/worker_server_notices_sender.py +46 -0
  450. synapse/spam_checker_api/__init__.py +31 -0
  451. synapse/state/__init__.py +1022 -0
  452. synapse/state/v1.py +369 -0
  453. synapse/state/v2.py +984 -0
  454. synapse/static/client/login/index.html +47 -0
  455. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  456. synapse/static/client/login/js/login.js +291 -0
  457. synapse/static/client/login/spinner.gif +0 -0
  458. synapse/static/client/login/style.css +79 -0
  459. synapse/static/index.html +63 -0
  460. synapse/storage/__init__.py +43 -0
  461. synapse/storage/_base.py +245 -0
  462. synapse/storage/admin_client_config.py +25 -0
  463. synapse/storage/background_updates.py +1188 -0
  464. synapse/storage/controllers/__init__.py +57 -0
  465. synapse/storage/controllers/persist_events.py +1237 -0
  466. synapse/storage/controllers/purge_events.py +455 -0
  467. synapse/storage/controllers/state.py +950 -0
  468. synapse/storage/controllers/stats.py +119 -0
  469. synapse/storage/database.py +2719 -0
  470. synapse/storage/databases/__init__.py +175 -0
  471. synapse/storage/databases/main/__init__.py +420 -0
  472. synapse/storage/databases/main/account_data.py +1059 -0
  473. synapse/storage/databases/main/appservice.py +473 -0
  474. synapse/storage/databases/main/cache.py +911 -0
  475. synapse/storage/databases/main/censor_events.py +225 -0
  476. synapse/storage/databases/main/client_ips.py +815 -0
  477. synapse/storage/databases/main/delayed_events.py +562 -0
  478. synapse/storage/databases/main/deviceinbox.py +1271 -0
  479. synapse/storage/databases/main/devices.py +2578 -0
  480. synapse/storage/databases/main/directory.py +212 -0
  481. synapse/storage/databases/main/e2e_room_keys.py +689 -0
  482. synapse/storage/databases/main/end_to_end_keys.py +1894 -0
  483. synapse/storage/databases/main/event_federation.py +2508 -0
  484. synapse/storage/databases/main/event_push_actions.py +1933 -0
  485. synapse/storage/databases/main/events.py +3765 -0
  486. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  487. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  488. synapse/storage/databases/main/events_worker.py +2786 -0
  489. synapse/storage/databases/main/experimental_features.py +130 -0
  490. synapse/storage/databases/main/filtering.py +231 -0
  491. synapse/storage/databases/main/keys.py +291 -0
  492. synapse/storage/databases/main/lock.py +553 -0
  493. synapse/storage/databases/main/media_repository.py +1068 -0
  494. synapse/storage/databases/main/metrics.py +460 -0
  495. synapse/storage/databases/main/monthly_active_users.py +443 -0
  496. synapse/storage/databases/main/openid.py +60 -0
  497. synapse/storage/databases/main/presence.py +509 -0
  498. synapse/storage/databases/main/profile.py +539 -0
  499. synapse/storage/databases/main/purge_events.py +521 -0
  500. synapse/storage/databases/main/push_rule.py +970 -0
  501. synapse/storage/databases/main/pusher.py +793 -0
  502. synapse/storage/databases/main/receipts.py +1341 -0
  503. synapse/storage/databases/main/registration.py +3072 -0
  504. synapse/storage/databases/main/rejections.py +37 -0
  505. synapse/storage/databases/main/relations.py +1116 -0
  506. synapse/storage/databases/main/room.py +2779 -0
  507. synapse/storage/databases/main/roommember.py +2110 -0
  508. synapse/storage/databases/main/search.py +939 -0
  509. synapse/storage/databases/main/session.py +151 -0
  510. synapse/storage/databases/main/signatures.py +94 -0
  511. synapse/storage/databases/main/sliding_sync.py +603 -0
  512. synapse/storage/databases/main/state.py +1002 -0
  513. synapse/storage/databases/main/state_deltas.py +329 -0
  514. synapse/storage/databases/main/stats.py +789 -0
  515. synapse/storage/databases/main/stream.py +2577 -0
  516. synapse/storage/databases/main/tags.py +360 -0
  517. synapse/storage/databases/main/task_scheduler.py +225 -0
  518. synapse/storage/databases/main/thread_subscriptions.py +589 -0
  519. synapse/storage/databases/main/transactions.py +675 -0
  520. synapse/storage/databases/main/ui_auth.py +420 -0
  521. synapse/storage/databases/main/user_directory.py +1330 -0
  522. synapse/storage/databases/main/user_erasure_store.py +117 -0
  523. synapse/storage/databases/state/__init__.py +22 -0
  524. synapse/storage/databases/state/bg_updates.py +497 -0
  525. synapse/storage/databases/state/deletion.py +557 -0
  526. synapse/storage/databases/state/store.py +948 -0
  527. synapse/storage/engines/__init__.py +70 -0
  528. synapse/storage/engines/_base.py +154 -0
  529. synapse/storage/engines/postgres.py +261 -0
  530. synapse/storage/engines/sqlite.py +199 -0
  531. synapse/storage/invite_rule.py +112 -0
  532. synapse/storage/keys.py +40 -0
  533. synapse/storage/prepare_database.py +730 -0
  534. synapse/storage/push_rule.py +28 -0
  535. synapse/storage/roommember.py +88 -0
  536. synapse/storage/schema/README.md +4 -0
  537. synapse/storage/schema/__init__.py +186 -0
  538. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  539. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  540. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  541. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  543. synapse/storage/schema/common/schema_version.sql +60 -0
  544. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  545. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  546. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  547. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  548. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  549. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  550. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  551. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  552. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  553. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  554. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  555. synapse/storage/schema/main/delta/16/users.sql +56 -0
  556. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  557. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  558. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  559. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  560. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  561. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  562. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  563. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  564. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  565. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  566. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  567. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  568. synapse/storage/schema/main/delta/25/fts.py +81 -0
  569. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  570. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  571. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  572. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  573. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  574. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  575. synapse/storage/schema/main/delta/27/ts.py +61 -0
  576. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  577. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  578. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  579. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  580. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  581. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  582. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  583. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  584. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  585. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  586. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  587. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  588. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  589. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  590. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  591. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  592. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  593. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  594. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  595. synapse/storage/schema/main/delta/32/events.sql +35 -0
  596. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  597. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  598. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  599. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  600. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  601. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  602. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  604. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  605. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  606. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  607. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  608. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  609. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  610. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  611. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  612. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  613. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  614. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  615. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  616. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  617. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  618. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  619. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  620. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  621. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  622. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  623. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  624. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  625. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  626. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  627. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  628. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  629. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  630. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  631. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  632. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  633. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  634. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  635. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  636. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  637. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  638. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  639. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  640. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  641. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  642. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  643. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  644. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  645. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  646. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  647. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  648. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  649. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  650. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  651. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  652. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  653. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  654. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  655. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  656. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  657. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  658. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  659. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  660. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  661. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  662. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  663. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  664. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  665. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  666. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  667. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  668. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  669. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  670. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  671. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  672. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  673. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  674. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  675. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  676. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  678. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  679. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  680. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  681. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  682. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  683. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  684. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  685. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  686. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  687. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  688. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  689. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  690. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  691. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  692. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  694. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  695. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  697. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  698. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  699. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  700. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  701. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  702. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  703. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  704. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  706. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  707. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  708. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  712. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  713. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  714. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  715. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  716. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  717. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  718. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  719. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  720. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  721. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  722. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  723. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  724. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  725. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  726. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  731. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  732. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  733. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  734. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  735. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  737. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  738. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  740. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  741. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  742. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  743. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  744. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  745. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  746. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  747. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  748. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  749. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  751. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  752. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  753. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  754. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  755. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  756. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  757. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  758. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  759. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  760. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  761. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  762. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  763. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  764. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  765. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  766. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  767. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  768. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  769. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  771. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  772. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  773. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  774. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  776. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  777. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  778. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  781. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  782. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  783. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  784. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  785. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  786. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  787. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  788. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  789. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  791. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  792. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  793. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  794. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  795. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  796. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  797. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  798. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  799. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  800. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  801. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  802. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  803. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  804. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  805. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  806. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  807. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  809. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  810. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  811. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  812. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  813. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  814. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  815. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  816. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  817. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  818. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  819. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  820. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  821. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  822. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  823. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  824. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  825. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  826. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  827. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  828. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  829. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  830. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  831. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  833. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  834. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  835. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  836. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  837. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  838. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  839. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  840. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  841. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  843. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  844. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  845. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  846. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  847. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  848. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  850. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  851. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  852. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  853. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  854. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  855. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  856. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  857. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  858. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  859. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  860. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  862. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  863. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  865. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  866. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  867. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  868. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  869. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  870. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  871. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  872. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  873. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  874. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  875. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  876. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  877. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  878. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  879. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  880. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  881. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  882. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  884. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  885. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  886. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  887. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  888. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  889. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  890. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  892. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  893. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  894. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  896. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  897. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  898. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  902. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  903. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  904. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  905. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  906. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  907. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  908. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  910. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  911. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  913. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  914. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  915. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  916. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  917. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  918. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  919. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  920. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  921. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  922. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  923. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  924. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  925. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  926. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  927. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  928. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  929. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  930. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  931. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  932. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  933. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  934. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  935. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  936. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  937. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  938. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  939. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  940. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  941. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  942. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  943. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  944. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  947. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  948. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  949. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  950. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  951. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  952. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  954. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  955. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  956. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  958. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  959. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  960. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  961. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  962. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  963. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  964. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  965. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  966. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  968. synapse/storage/schema/main/delta/93/01_add_delayed_events.sql +15 -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 +183 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +928 -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 +91 -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 +908 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +413 -0
  1007. synapse/types/state.py +634 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +169 -0
  1010. synapse/util/async_helpers.py +1045 -0
  1011. synapse/util/background_queue.py +142 -0
  1012. synapse/util/batching_queue.py +202 -0
  1013. synapse/util/caches/__init__.py +300 -0
  1014. synapse/util/caches/cached_call.py +143 -0
  1015. synapse/util/caches/deferred_cache.py +530 -0
  1016. synapse/util/caches/descriptors.py +692 -0
  1017. synapse/util/caches/dictionary_cache.py +346 -0
  1018. synapse/util/caches/expiringcache.py +249 -0
  1019. synapse/util/caches/lrucache.py +975 -0
  1020. synapse/util/caches/response_cache.py +322 -0
  1021. synapse/util/caches/stream_change_cache.py +370 -0
  1022. synapse/util/caches/treecache.py +189 -0
  1023. synapse/util/caches/ttlcache.py +197 -0
  1024. synapse/util/cancellation.py +63 -0
  1025. synapse/util/check_dependencies.py +335 -0
  1026. synapse/util/clock.py +567 -0
  1027. synapse/util/constants.py +22 -0
  1028. synapse/util/daemonize.py +165 -0
  1029. synapse/util/distributor.py +157 -0
  1030. synapse/util/events.py +134 -0
  1031. synapse/util/file_consumer.py +164 -0
  1032. synapse/util/frozenutils.py +57 -0
  1033. synapse/util/gai_resolver.py +178 -0
  1034. synapse/util/hash.py +38 -0
  1035. synapse/util/httpresourcetree.py +108 -0
  1036. synapse/util/iterutils.py +189 -0
  1037. synapse/util/json.py +56 -0
  1038. synapse/util/linked_list.py +156 -0
  1039. synapse/util/logcontext.py +46 -0
  1040. synapse/util/logformatter.py +28 -0
  1041. synapse/util/macaroons.py +325 -0
  1042. synapse/util/manhole.py +191 -0
  1043. synapse/util/metrics.py +339 -0
  1044. synapse/util/module_loader.py +116 -0
  1045. synapse/util/msisdn.py +51 -0
  1046. synapse/util/patch_inline_callbacks.py +250 -0
  1047. synapse/util/pydantic_models.py +63 -0
  1048. synapse/util/ratelimitutils.py +419 -0
  1049. synapse/util/retryutils.py +339 -0
  1050. synapse/util/rlimit.py +42 -0
  1051. synapse/util/rust.py +133 -0
  1052. synapse/util/sentinel.py +21 -0
  1053. synapse/util/stringutils.py +293 -0
  1054. synapse/util/task_scheduler.py +493 -0
  1055. synapse/util/templates.py +126 -0
  1056. synapse/util/threepids.py +123 -0
  1057. synapse/util/wheel_timer.py +112 -0
  1058. synapse/visibility.py +835 -0
synapse/server.py ADDED
@@ -0,0 +1,1257 @@
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
+ TypeVar,
38
+ cast,
39
+ )
40
+ from wsgiref.simple_server import WSGIServer
41
+
42
+ from attr import dataclass
43
+ from typing_extensions import TypeAlias
44
+
45
+ from twisted.internet import defer
46
+ from twisted.internet.base import _SystemEventID
47
+ from twisted.internet.interfaces import IOpenSSLContextFactory
48
+ from twisted.internet.tcp import Port
49
+ from twisted.python.threadpool import ThreadPool
50
+ from twisted.web.iweb import IPolicyForHTTPS
51
+ from twisted.web.resource import Resource
52
+
53
+ from synapse.api.auth import Auth
54
+ from synapse.api.auth.internal import InternalAuth
55
+ from synapse.api.auth.mas import MasDelegatedAuth
56
+ from synapse.api.auth_blocking import AuthBlocking
57
+ from synapse.api.filtering import Filtering
58
+ from synapse.api.ratelimiting import Ratelimiter, RequestRatelimiter
59
+ from synapse.app._base import unregister_sighups
60
+ from synapse.app.phone_stats_home import start_phone_stats_home
61
+ from synapse.appservice.api import ApplicationServiceApi
62
+ from synapse.appservice.scheduler import ApplicationServiceScheduler
63
+ from synapse.config.homeserver import HomeServerConfig
64
+ from synapse.crypto import context_factory
65
+ from synapse.crypto.context_factory import RegularPolicyForHTTPS
66
+ from synapse.crypto.keyring import Keyring
67
+ from synapse.events.builder import EventBuilderFactory
68
+ from synapse.events.presence_router import PresenceRouter
69
+ from synapse.events.utils import EventClientSerializer
70
+ from synapse.federation.federation_client import FederationClient
71
+ from synapse.federation.federation_server import (
72
+ FederationHandlerRegistry,
73
+ FederationServer,
74
+ )
75
+ from synapse.federation.send_queue import FederationRemoteSendQueue
76
+ from synapse.federation.sender import AbstractFederationSender, FederationSender
77
+ from synapse.federation.transport.client import TransportLayerClient
78
+ from synapse.handlers.account import AccountHandler
79
+ from synapse.handlers.account_data import AccountDataHandler
80
+ from synapse.handlers.account_validity import AccountValidityHandler
81
+ from synapse.handlers.admin import AdminHandler
82
+ from synapse.handlers.appservice import ApplicationServicesHandler
83
+ from synapse.handlers.auth import AuthHandler, PasswordAuthProvider
84
+ from synapse.handlers.cas import CasHandler
85
+ from synapse.handlers.deactivate_account import DeactivateAccountHandler
86
+ from synapse.handlers.delayed_events import DelayedEventsHandler
87
+ from synapse.handlers.device import DeviceHandler, DeviceWriterHandler
88
+ from synapse.handlers.devicemessage import DeviceMessageHandler
89
+ from synapse.handlers.directory import DirectoryHandler
90
+ from synapse.handlers.e2e_keys import E2eKeysHandler
91
+ from synapse.handlers.e2e_room_keys import E2eRoomKeysHandler
92
+ from synapse.handlers.event_auth import EventAuthHandler
93
+ from synapse.handlers.events import EventHandler, EventStreamHandler
94
+ from synapse.handlers.federation import FederationHandler
95
+ from synapse.handlers.federation_event import FederationEventHandler
96
+ from synapse.handlers.identity import IdentityHandler
97
+ from synapse.handlers.initial_sync import InitialSyncHandler
98
+ from synapse.handlers.message import EventCreationHandler, MessageHandler
99
+ from synapse.handlers.pagination import PaginationHandler
100
+ from synapse.handlers.password_policy import PasswordPolicyHandler
101
+ from synapse.handlers.presence import (
102
+ BasePresenceHandler,
103
+ PresenceHandler,
104
+ WorkerPresenceHandler,
105
+ )
106
+ from synapse.handlers.profile import ProfileHandler
107
+ from synapse.handlers.push_rules import PushRulesHandler
108
+ from synapse.handlers.read_marker import ReadMarkerHandler
109
+ from synapse.handlers.receipts import ReceiptsHandler
110
+ from synapse.handlers.register import RegistrationHandler
111
+ from synapse.handlers.relations import RelationsHandler
112
+ from synapse.handlers.reports import ReportsHandler
113
+ from synapse.handlers.room import (
114
+ RoomContextHandler,
115
+ RoomCreationHandler,
116
+ RoomShutdownHandler,
117
+ TimestampLookupHandler,
118
+ )
119
+ from synapse.handlers.room_list import RoomListHandler
120
+ from synapse.handlers.room_member import (
121
+ RoomForgetterHandler,
122
+ RoomMemberHandler,
123
+ RoomMemberMasterHandler,
124
+ )
125
+ from synapse.handlers.room_member_worker import RoomMemberWorkerHandler
126
+ from synapse.handlers.room_policy import RoomPolicyHandler
127
+ from synapse.handlers.room_summary import RoomSummaryHandler
128
+ from synapse.handlers.search import SearchHandler
129
+ from synapse.handlers.send_email import SendEmailHandler
130
+ from synapse.handlers.set_password import SetPasswordHandler
131
+ from synapse.handlers.sliding_sync import SlidingSyncHandler
132
+ from synapse.handlers.sso import SsoHandler
133
+ from synapse.handlers.stats import StatsHandler
134
+ from synapse.handlers.sync import SyncHandler
135
+ from synapse.handlers.thread_subscriptions import ThreadSubscriptionsHandler
136
+ from synapse.handlers.typing import FollowerTypingHandler, TypingWriterHandler
137
+ from synapse.handlers.user_directory import UserDirectoryHandler
138
+ from synapse.handlers.worker_lock import WorkerLocksHandler
139
+ from synapse.http.client import (
140
+ InsecureInterceptableContextFactory,
141
+ ReplicationClient,
142
+ SimpleHttpClient,
143
+ )
144
+ from synapse.http.matrixfederationclient import MatrixFederationHttpClient
145
+ from synapse.logging.context import PreserveLoggingContext
146
+ from synapse.media.media_repository import MediaRepository
147
+ from synapse.metrics import (
148
+ all_later_gauges_to_clean_up_on_shutdown,
149
+ register_threadpool,
150
+ )
151
+ from synapse.metrics.background_process_metrics import run_as_background_process
152
+ from synapse.metrics.common_usage_metrics import CommonUsageMetricsManager
153
+ from synapse.module_api import ModuleApi
154
+ from synapse.module_api.callbacks import ModuleApiCallbacks
155
+ from synapse.notifier import Notifier, ReplicationNotifier
156
+ from synapse.push.bulk_push_rule_evaluator import BulkPushRuleEvaluator
157
+ from synapse.push.pusherpool import PusherPool
158
+ from synapse.replication.tcp.client import ReplicationDataHandler
159
+ from synapse.replication.tcp.external_cache import ExternalCache
160
+ from synapse.replication.tcp.handler import ReplicationCommandHandler
161
+ from synapse.replication.tcp.resource import ReplicationStreamer
162
+ from synapse.replication.tcp.streams import STREAMS_MAP, Stream
163
+ from synapse.rest.media.media_repository_resource import MediaRepositoryResource
164
+ from synapse.server_notices.server_notices_manager import ServerNoticesManager
165
+ from synapse.server_notices.server_notices_sender import ServerNoticesSender
166
+ from synapse.server_notices.worker_server_notices_sender import (
167
+ WorkerServerNoticesSender,
168
+ )
169
+ from synapse.state import StateHandler, StateResolutionHandler
170
+ from synapse.storage import Databases
171
+ from synapse.storage.controllers import StorageControllers
172
+ from synapse.streams.events import EventSources
173
+ from synapse.synapse_rust.rendezvous import RendezvousHandler
174
+ from synapse.types import DomainSpecificString, ISynapseReactor
175
+ from synapse.util import SYNAPSE_VERSION
176
+ from synapse.util.caches import CACHE_METRIC_REGISTRY
177
+ from synapse.util.clock import Clock
178
+ from synapse.util.distributor import Distributor
179
+ from synapse.util.macaroons import MacaroonGenerator
180
+ from synapse.util.ratelimitutils import FederationRateLimiter
181
+ from synapse.util.stringutils import random_string
182
+ from synapse.util.task_scheduler import TaskScheduler
183
+
184
+ logger = logging.getLogger(__name__)
185
+
186
+ if TYPE_CHECKING:
187
+ # Old Python versions don't have `LiteralString`
188
+ from txredisapi import ConnectionHandler
189
+ from typing_extensions import LiteralString
190
+
191
+ from synapse.handlers.jwt import JwtHandler
192
+ from synapse.handlers.oidc import OidcHandler
193
+ from synapse.handlers.saml import SamlHandler
194
+ from synapse.storage._base import SQLBaseStore
195
+
196
+
197
+ # The annotation for `cache_in_self` used to be
198
+ # def (builder: Callable[["HomeServer"],T]) -> Callable[["HomeServer"],T]
199
+ # which mypy was happy with.
200
+ #
201
+ # But PyCharm was confused by this. If `foo` was decorated by `@cache_in_self`, then
202
+ # an expression like `hs.foo()`
203
+ #
204
+ # - would erroneously warn that we hadn't provided a `hs` argument to foo (PyCharm
205
+ # confused about boundmethods and unbound methods?), and
206
+ # - would be considered to have type `Any`, making for a poor autocomplete and
207
+ # cross-referencing experience.
208
+ #
209
+ # Instead, use a typevar `F` to express that `@cache_in_self` returns exactly the
210
+ # same type it receives. This isn't strictly true [*], but it's more than good
211
+ # enough to keep PyCharm and mypy happy.
212
+ #
213
+ # [*]: (e.g. `builder` could be an object with a __call__ attribute rather than a
214
+ # types.FunctionType instance, whereas the return value is always a
215
+ # types.FunctionType instance.)
216
+
217
+ T: TypeAlias = object
218
+ F = TypeVar("F", bound=Callable[["HomeServer"], T])
219
+ R = TypeVar("R")
220
+
221
+
222
+ def cache_in_self(builder: F) -> F:
223
+ """Wraps a function called e.g. `get_foo`, checking if `self.foo` exists and
224
+ returning if so. If not, calls the given function and sets `self.foo` to it.
225
+
226
+ Also ensures that dependency cycles throw an exception correctly, rather
227
+ than overflowing the stack.
228
+ """
229
+
230
+ if not builder.__name__.startswith("get_"):
231
+ raise Exception(
232
+ "@cache_in_self can only be used on functions starting with `get_`"
233
+ )
234
+
235
+ # get_attr -> _attr
236
+ depname = builder.__name__[len("get") :]
237
+
238
+ building = [False]
239
+
240
+ @functools.wraps(builder)
241
+ def _get(self: "HomeServer") -> T:
242
+ try:
243
+ dep = getattr(self, depname)
244
+ return dep
245
+ except AttributeError:
246
+ pass
247
+
248
+ # Prevent cyclic dependencies from deadlocking
249
+ if building[0]:
250
+ raise ValueError("Cyclic dependency while building %s" % (depname,))
251
+
252
+ building[0] = True
253
+ try:
254
+ dep = builder(self)
255
+ setattr(self, depname, dep)
256
+ finally:
257
+ building[0] = False
258
+
259
+ return dep
260
+
261
+ return cast(F, _get)
262
+
263
+
264
+ @dataclass
265
+ class ShutdownInfo:
266
+ """Information for callable functions called at time of shutdown.
267
+
268
+ Attributes:
269
+ func: the object to call before shutdown.
270
+ trigger_id: an ID returned when registering this event trigger.
271
+ args: the arguments to call the function with.
272
+ kwargs: the keyword arguments to call the function with.
273
+ """
274
+
275
+ func: Callable[..., Any]
276
+ trigger_id: _SystemEventID
277
+ kwargs: dict[str, object]
278
+
279
+
280
+ class HomeServer(metaclass=abc.ABCMeta):
281
+ """A basic homeserver object without lazy component builders.
282
+
283
+ This will need all of the components it requires to either be passed as
284
+ constructor arguments, or the relevant methods overriding to create them.
285
+ Typically this would only be used for unit tests.
286
+
287
+ Dependencies should be added by creating a `def get_<depname>(self)`
288
+ function, wrapping it in `@cache_in_self`.
289
+
290
+ Attributes:
291
+ config (synapse.config.homeserver.HomeserverConfig):
292
+ _listening_services (list[Port]): TCP ports that
293
+ we are listening on to provide HTTP services.
294
+ """
295
+
296
+ REQUIRED_ON_BACKGROUND_TASK_STARTUP = [
297
+ "admin",
298
+ "account_validity",
299
+ "auth",
300
+ "deactivate_account",
301
+ "delayed_events",
302
+ "e2e_keys", # for the `delete_old_otks` scheduled-task handler
303
+ "message",
304
+ "pagination",
305
+ "profile",
306
+ "room_forgetter",
307
+ "stats",
308
+ ]
309
+
310
+ @property
311
+ @abc.abstractmethod
312
+ def DATASTORE_CLASS(self) -> type["SQLBaseStore"]:
313
+ # This is overridden in derived application classes
314
+ # (such as synapse.app.homeserver.SynapseHomeServer) and gives the class to be
315
+ # instantiated during setup() for future return by get_datastores()
316
+ pass
317
+
318
+ def __init__(
319
+ self,
320
+ hostname: str,
321
+ config: HomeServerConfig,
322
+ reactor: ISynapseReactor | None = None,
323
+ ):
324
+ """
325
+ Args:
326
+ hostname : The hostname for the server.
327
+ config: The full config for the homeserver.
328
+ """
329
+
330
+ if not reactor:
331
+ from twisted.internet import reactor as _reactor
332
+
333
+ reactor = cast(ISynapseReactor, _reactor)
334
+
335
+ self._reactor = reactor
336
+ self.hostname = hostname
337
+ # the key we use to sign events and requests
338
+ self.signing_key = config.key.signing_key[0]
339
+ self.config = config
340
+ self._listening_services: list[Port] = []
341
+ self._metrics_listeners: list[tuple[WSGIServer, Thread]] = []
342
+ self.start_time: int | None = None
343
+
344
+ self._instance_id = random_string(5)
345
+ self._instance_name = config.worker.instance_name
346
+
347
+ self.version_string = f"Synapse/{SYNAPSE_VERSION}"
348
+
349
+ self.datastores: Databases | None = None
350
+
351
+ self._module_web_resources: dict[str, Resource] = {}
352
+ self._module_web_resources_consumed = False
353
+
354
+ # This attribute is set by the free function `refresh_certificate`.
355
+ self.tls_server_context_factory: IOpenSSLContextFactory | None = None
356
+
357
+ self._is_shutdown = False
358
+ self._async_shutdown_handlers: list[ShutdownInfo] = []
359
+ self._sync_shutdown_handlers: list[ShutdownInfo] = []
360
+ self._background_processes: set[defer.Deferred[Any | None]] = set()
361
+
362
+ def run_as_background_process(
363
+ self,
364
+ desc: "LiteralString",
365
+ func: Callable[..., Awaitable[R | None]],
366
+ *args: Any,
367
+ **kwargs: Any,
368
+ ) -> "defer.Deferred[R | None]":
369
+ """Run the given function in its own logcontext, with resource metrics
370
+
371
+ This should be used to wrap processes which are fired off to run in the
372
+ background, instead of being associated with a particular request.
373
+
374
+ It returns a Deferred which completes when the function completes, but it doesn't
375
+ follow the synapse logcontext rules, which makes it appropriate for passing to
376
+ clock.looping_call and friends (or for firing-and-forgetting in the middle of a
377
+ normal synapse async function).
378
+
379
+ Because the returned Deferred does not follow the synapse logcontext rules, awaiting
380
+ the result of this function will result in the log context being cleared (bad). In
381
+ order to properly await the result of this function and maintain the current log
382
+ context, use `make_deferred_yieldable`.
383
+
384
+ Args:
385
+ desc: a description for this background process type
386
+ server_name: The homeserver name that this background process is being run for
387
+ (this should be `hs.hostname`).
388
+ func: a function, which may return a Deferred or a coroutine
389
+ bg_start_span: Whether to start an opentracing span. Defaults to True.
390
+ Should only be disabled for processes that will not log to or tag
391
+ a span.
392
+ args: positional args for func
393
+ kwargs: keyword args for func
394
+
395
+ Returns:
396
+ Deferred which returns the result of func, or `None` if func raises.
397
+ Note that the returned Deferred does not follow the synapse logcontext
398
+ rules.
399
+ """
400
+ if self._is_shutdown:
401
+ raise Exception(
402
+ 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)}"
403
+ )
404
+
405
+ # Ignore linter error as this is the one location this should be called.
406
+ deferred = run_as_background_process(desc, self.hostname, func, *args, **kwargs) # type: ignore[untracked-background-process]
407
+ self._background_processes.add(deferred)
408
+
409
+ def on_done(res: R) -> R:
410
+ try:
411
+ self._background_processes.remove(deferred)
412
+ except KeyError:
413
+ # If the background process isn't being tracked anymore we can just move on.
414
+ pass
415
+ return res
416
+
417
+ deferred.addBoth(on_done)
418
+ return deferred
419
+
420
+ async def shutdown(self) -> None:
421
+ """
422
+ Cleanly stops all aspects of the HomeServer and removes any references that
423
+ have been handed out in order to allow the HomeServer object to be garbage
424
+ collected.
425
+
426
+ You must ensure the HomeServer object to not be frozen in the garbage collector
427
+ in order for it to be cleaned up. By default, Synapse freezes the HomeServer
428
+ object in the garbage collector.
429
+ """
430
+
431
+ self._is_shutdown = True
432
+
433
+ logger.info(
434
+ "Received shutdown request for %s (%s).",
435
+ self.hostname,
436
+ self.get_instance_id(),
437
+ )
438
+
439
+ # Unregister sighups first. If a shutdown was requested we shouldn't be responding
440
+ # to things like config changes. So it would be best to stop listening to these first.
441
+ unregister_sighups(self._instance_id)
442
+
443
+ # TODO: It would be desireable to be able to report an error if the HomeServer
444
+ # object is frozen in the garbage collector as that would prevent it from being
445
+ # collected after being shutdown.
446
+ # In theory the following should work, but it doesn't seem to make a difference
447
+ # when I test it locally.
448
+ #
449
+ # if gc.is_tracked(self):
450
+ # logger.error("HomeServer object is tracked by garbage collection so cannot be fully cleaned up")
451
+
452
+ for listener in self._listening_services:
453
+ # During unit tests, an incomplete `twisted.pair.testing._FakePort` is used
454
+ # for listeners so check listener type here to ensure shutdown procedure is
455
+ # only applied to actual `Port` instances.
456
+ if type(listener) is Port:
457
+ port_shutdown = listener.stopListening()
458
+ if port_shutdown is not None:
459
+ await port_shutdown
460
+ self._listening_services.clear()
461
+
462
+ for server, thread in self._metrics_listeners:
463
+ server.shutdown()
464
+ thread.join()
465
+ self._metrics_listeners.clear()
466
+
467
+ # TODO: Cleanup replication pieces
468
+
469
+ self.get_keyring().shutdown()
470
+
471
+ # Cleanup metrics associated with the homeserver
472
+ for later_gauge in all_later_gauges_to_clean_up_on_shutdown.values():
473
+ later_gauge.unregister_hooks_for_homeserver_instance_id(
474
+ self.get_instance_id()
475
+ )
476
+
477
+ CACHE_METRIC_REGISTRY.unregister_hooks_for_homeserver(
478
+ self.config.server.server_name
479
+ )
480
+
481
+ for db in self.get_datastores().databases:
482
+ db.stop_background_updates()
483
+
484
+ if self.should_send_federation():
485
+ try:
486
+ self.get_federation_sender().shutdown()
487
+ except Exception:
488
+ pass
489
+
490
+ for shutdown_handler in self._async_shutdown_handlers:
491
+ try:
492
+ self.get_reactor().removeSystemEventTrigger(shutdown_handler.trigger_id)
493
+ defer.ensureDeferred(shutdown_handler.func(**shutdown_handler.kwargs))
494
+ except Exception as e:
495
+ logger.error("Error calling shutdown async handler: %s", e)
496
+ self._async_shutdown_handlers.clear()
497
+
498
+ for shutdown_handler in self._sync_shutdown_handlers:
499
+ try:
500
+ self.get_reactor().removeSystemEventTrigger(shutdown_handler.trigger_id)
501
+ shutdown_handler.func(**shutdown_handler.kwargs)
502
+ except Exception as e:
503
+ logger.error("Error calling shutdown sync handler: %s", e)
504
+ self._sync_shutdown_handlers.clear()
505
+
506
+ self.get_clock().shutdown()
507
+
508
+ for background_process in list(self._background_processes):
509
+ try:
510
+ with PreserveLoggingContext():
511
+ background_process.cancel()
512
+ except Exception:
513
+ pass
514
+ self._background_processes.clear()
515
+
516
+ for db in self.get_datastores().databases:
517
+ db._db_pool.close()
518
+
519
+ def register_async_shutdown_handler(
520
+ self,
521
+ *,
522
+ phase: str,
523
+ eventType: str,
524
+ shutdown_func: Callable[..., Any],
525
+ **kwargs: object,
526
+ ) -> None:
527
+ """
528
+ Register a system event trigger with the HomeServer so it can be cleanly
529
+ removed when the HomeServer is shutdown.
530
+ """
531
+ id = self.get_clock().add_system_event_trigger(
532
+ phase,
533
+ eventType,
534
+ shutdown_func,
535
+ **kwargs,
536
+ )
537
+ self._async_shutdown_handlers.append(
538
+ ShutdownInfo(func=shutdown_func, trigger_id=id, kwargs=kwargs)
539
+ )
540
+
541
+ def register_sync_shutdown_handler(
542
+ self,
543
+ *,
544
+ phase: str,
545
+ eventType: str,
546
+ shutdown_func: Callable[..., Any],
547
+ **kwargs: object,
548
+ ) -> None:
549
+ """
550
+ Register a system event trigger with the HomeServer so it can be cleanly
551
+ removed when the HomeServer is shutdown.
552
+ """
553
+ id = self.get_clock().add_system_event_trigger(
554
+ phase,
555
+ eventType,
556
+ shutdown_func,
557
+ **kwargs,
558
+ )
559
+ self._sync_shutdown_handlers.append(
560
+ ShutdownInfo(func=shutdown_func, trigger_id=id, kwargs=kwargs)
561
+ )
562
+
563
+ def register_module_web_resource(self, path: str, resource: Resource) -> None:
564
+ """Allows a module to register a web resource to be served at the given path.
565
+
566
+ If multiple modules register a resource for the same path, the module that
567
+ appears the highest in the configuration file takes priority.
568
+
569
+ Args:
570
+ path: The path to register the resource for.
571
+ resource: The resource to attach to this path.
572
+
573
+ Raises:
574
+ SynapseError(500): A module tried to register a web resource after the HTTP
575
+ listeners have been started.
576
+ """
577
+ if self._module_web_resources_consumed:
578
+ raise RuntimeError(
579
+ "Tried to register a web resource from a module after startup",
580
+ )
581
+
582
+ # Don't register a resource that's already been registered.
583
+ if path not in self._module_web_resources.keys():
584
+ self._module_web_resources[path] = resource
585
+ else:
586
+ logger.warning(
587
+ "Module tried to register a web resource for path %s but another module"
588
+ " has already registered a resource for this path.",
589
+ path,
590
+ )
591
+
592
+ def get_instance_id(self) -> str:
593
+ """A unique ID for this synapse process instance.
594
+
595
+ This is used to distinguish running instances in worker-based
596
+ deployments.
597
+ """
598
+ return self._instance_id
599
+
600
+ def get_instance_name(self) -> str:
601
+ """A unique name for this synapse process.
602
+
603
+ Used to identify the process over replication and in config. Does not
604
+ change over restarts.
605
+ """
606
+ return self._instance_name
607
+
608
+ def setup(self) -> None:
609
+ logger.info("Setting up.")
610
+ self.start_time = int(self.get_clock().time())
611
+ self.datastores = Databases(self.DATASTORE_CLASS, self)
612
+ logger.info("Finished setting up.")
613
+
614
+ # def __del__(self) -> None:
615
+ # """
616
+ # Called when an the homeserver is garbage collected.
617
+ #
618
+ # Make sure we actually do some clean-up, rather than leak data.
619
+ # """
620
+ #
621
+ # # NOTE: This is a chicken and egg problem.
622
+ # # __del__ will never be called since the HomeServer cannot be garbage collected
623
+ # # until the shutdown function has been called. So it makes no sense to call
624
+ # # shutdown inside of __del__, even though that is a logical place to assume it
625
+ # # should be called.
626
+ # self.shutdown()
627
+
628
+ def start_listening(self) -> None: # noqa: B027 (no-op by design)
629
+ """Start the HTTP, manhole, metrics, etc listeners
630
+
631
+ Does nothing in this base class; overridden in derived classes to start the
632
+ appropriate listeners.
633
+ """
634
+
635
+ def start_background_tasks(self) -> None:
636
+ """
637
+ Some handlers have side effects on instantiation (like registering
638
+ background updates). This function causes them to be fetched, and
639
+ therefore instantiated, to run those side effects.
640
+ """
641
+ for i in self.REQUIRED_ON_BACKGROUND_TASK_STARTUP:
642
+ getattr(self, "get_" + i + "_handler")()
643
+ self.get_task_scheduler()
644
+ self.get_common_usage_metrics_manager().setup()
645
+ start_phone_stats_home(self)
646
+
647
+ def get_reactor(self) -> ISynapseReactor:
648
+ """
649
+ Fetch the Twisted reactor in use by this HomeServer.
650
+ """
651
+ return self._reactor
652
+
653
+ def is_mine(self, domain_specific_string: DomainSpecificString) -> bool:
654
+ return domain_specific_string.domain == self.hostname
655
+
656
+ def is_mine_id(self, user_id: str) -> bool:
657
+ """Determines whether a user ID or room alias originates from this homeserver.
658
+
659
+ Returns:
660
+ `True` if the hostname part of the user ID or room alias matches this
661
+ homeserver.
662
+ `False` otherwise, or if the user ID or room alias is malformed.
663
+ """
664
+ localpart_hostname = user_id.split(":", 1)
665
+ if len(localpart_hostname) < 2:
666
+ return False
667
+ return localpart_hostname[1] == self.hostname
668
+
669
+ def is_mine_server_name(self, server_name: str) -> bool:
670
+ """Determines whether a server name refers to this homeserver."""
671
+ return server_name == self.hostname
672
+
673
+ @cache_in_self
674
+ def get_clock(self) -> Clock:
675
+ # Ignore the linter error since this is the one place the `Clock` should be created.
676
+ return Clock(self._reactor, server_name=self.hostname) # type: ignore[multiple-internal-clocks]
677
+
678
+ def get_datastores(self) -> Databases:
679
+ if not self.datastores:
680
+ raise Exception("HomeServer.setup must be called before getting datastores")
681
+
682
+ return self.datastores
683
+
684
+ @cache_in_self
685
+ def get_distributor(self) -> Distributor:
686
+ return Distributor(hs=self)
687
+
688
+ @cache_in_self
689
+ def get_registration_ratelimiter(self) -> Ratelimiter:
690
+ return Ratelimiter(
691
+ store=self.get_datastores().main,
692
+ clock=self.get_clock(),
693
+ cfg=self.config.ratelimiting.rc_registration,
694
+ )
695
+
696
+ @cache_in_self
697
+ def get_federation_client(self) -> FederationClient:
698
+ return FederationClient(self)
699
+
700
+ @cache_in_self
701
+ def get_federation_server(self) -> FederationServer:
702
+ return FederationServer(self)
703
+
704
+ @cache_in_self
705
+ def get_notifier(self) -> Notifier:
706
+ return Notifier(self)
707
+
708
+ @cache_in_self
709
+ def get_replication_notifier(self) -> ReplicationNotifier:
710
+ return ReplicationNotifier()
711
+
712
+ @cache_in_self
713
+ def get_auth(self) -> Auth:
714
+ if self.config.mas.enabled:
715
+ return MasDelegatedAuth(self)
716
+ if self.config.experimental.msc3861.enabled:
717
+ from synapse.api.auth.msc3861_delegated import MSC3861DelegatedAuth
718
+
719
+ return MSC3861DelegatedAuth(self)
720
+ return InternalAuth(self)
721
+
722
+ @cache_in_self
723
+ def get_auth_blocking(self) -> AuthBlocking:
724
+ return AuthBlocking(self)
725
+
726
+ @cache_in_self
727
+ def get_http_client_context_factory(self) -> IPolicyForHTTPS:
728
+ if self.config.tls.use_insecure_ssl_client_just_for_testing_do_not_use:
729
+ return InsecureInterceptableContextFactory()
730
+ return RegularPolicyForHTTPS()
731
+
732
+ @cache_in_self
733
+ def get_simple_http_client(self) -> SimpleHttpClient:
734
+ """
735
+ An HTTP client with no special configuration.
736
+ """
737
+ return SimpleHttpClient(self)
738
+
739
+ @cache_in_self
740
+ def get_proxied_http_client(self) -> SimpleHttpClient:
741
+ """
742
+ An HTTP client that uses configured HTTP(S) proxies.
743
+ """
744
+ return SimpleHttpClient(self, use_proxy=True)
745
+
746
+ @cache_in_self
747
+ def get_proxied_blocklisted_http_client(self) -> SimpleHttpClient:
748
+ """
749
+ An HTTP client that uses configured HTTP(S) proxies and blocks IPs
750
+ based on the configured IP ranges.
751
+ """
752
+ return SimpleHttpClient(
753
+ self,
754
+ ip_allowlist=self.config.server.ip_range_allowlist,
755
+ ip_blocklist=self.config.server.ip_range_blocklist,
756
+ use_proxy=True,
757
+ )
758
+
759
+ @cache_in_self
760
+ def get_federation_http_client(self) -> MatrixFederationHttpClient:
761
+ """
762
+ An HTTP client for federation.
763
+ """
764
+ tls_client_options_factory = context_factory.FederationPolicyForHTTPS(
765
+ self.config
766
+ )
767
+ return MatrixFederationHttpClient(self, tls_client_options_factory)
768
+
769
+ @cache_in_self
770
+ def get_replication_client(self) -> ReplicationClient:
771
+ """
772
+ An HTTP client for HTTP replication.
773
+ """
774
+ return ReplicationClient(self)
775
+
776
+ @cache_in_self
777
+ def get_room_creation_handler(self) -> RoomCreationHandler:
778
+ return RoomCreationHandler(self)
779
+
780
+ @cache_in_self
781
+ def get_room_shutdown_handler(self) -> RoomShutdownHandler:
782
+ return RoomShutdownHandler(self)
783
+
784
+ @cache_in_self
785
+ def get_state_handler(self) -> StateHandler:
786
+ return StateHandler(self)
787
+
788
+ @cache_in_self
789
+ def get_state_resolution_handler(self) -> StateResolutionHandler:
790
+ return StateResolutionHandler(self)
791
+
792
+ @cache_in_self
793
+ def get_presence_handler(self) -> BasePresenceHandler:
794
+ if self.get_instance_name() in self.config.worker.writers.presence:
795
+ return PresenceHandler(self)
796
+ else:
797
+ return WorkerPresenceHandler(self)
798
+
799
+ @cache_in_self
800
+ def get_typing_writer_handler(self) -> TypingWriterHandler:
801
+ if self.get_instance_name() in self.config.worker.writers.typing:
802
+ return TypingWriterHandler(self)
803
+ else:
804
+ raise Exception("Workers cannot write typing")
805
+
806
+ @cache_in_self
807
+ def get_presence_router(self) -> PresenceRouter:
808
+ return PresenceRouter(self)
809
+
810
+ @cache_in_self
811
+ def get_typing_handler(self) -> FollowerTypingHandler:
812
+ if self.get_instance_name() in self.config.worker.writers.typing:
813
+ # Use get_typing_writer_handler to ensure that we use the same
814
+ # cached version.
815
+ return self.get_typing_writer_handler()
816
+ else:
817
+ return FollowerTypingHandler(self)
818
+
819
+ @cache_in_self
820
+ def get_sso_handler(self) -> SsoHandler:
821
+ return SsoHandler(self)
822
+
823
+ @cache_in_self
824
+ def get_jwt_handler(self) -> "JwtHandler":
825
+ from synapse.handlers.jwt import JwtHandler
826
+
827
+ return JwtHandler(self)
828
+
829
+ @cache_in_self
830
+ def get_sync_handler(self) -> SyncHandler:
831
+ return SyncHandler(self)
832
+
833
+ @cache_in_self
834
+ def get_sliding_sync_handler(self) -> SlidingSyncHandler:
835
+ return SlidingSyncHandler(self)
836
+
837
+ @cache_in_self
838
+ def get_room_list_handler(self) -> RoomListHandler:
839
+ return RoomListHandler(self)
840
+
841
+ @cache_in_self
842
+ def get_auth_handler(self) -> AuthHandler:
843
+ return AuthHandler(self)
844
+
845
+ @cache_in_self
846
+ def get_macaroon_generator(self) -> MacaroonGenerator:
847
+ return MacaroonGenerator(
848
+ self.get_clock(), self.hostname, self.config.key.macaroon_secret_key
849
+ )
850
+
851
+ @cache_in_self
852
+ def get_device_handler(self) -> DeviceHandler:
853
+ if self.get_instance_name() in self.config.worker.writers.device_lists:
854
+ return DeviceWriterHandler(self)
855
+
856
+ return DeviceHandler(self)
857
+
858
+ @cache_in_self
859
+ def get_device_message_handler(self) -> DeviceMessageHandler:
860
+ return DeviceMessageHandler(self)
861
+
862
+ @cache_in_self
863
+ def get_directory_handler(self) -> DirectoryHandler:
864
+ return DirectoryHandler(self)
865
+
866
+ @cache_in_self
867
+ def get_e2e_keys_handler(self) -> E2eKeysHandler:
868
+ return E2eKeysHandler(self)
869
+
870
+ @cache_in_self
871
+ def get_e2e_room_keys_handler(self) -> E2eRoomKeysHandler:
872
+ return E2eRoomKeysHandler(self)
873
+
874
+ @cache_in_self
875
+ def get_admin_handler(self) -> AdminHandler:
876
+ return AdminHandler(self)
877
+
878
+ @cache_in_self
879
+ def get_application_service_api(self) -> ApplicationServiceApi:
880
+ return ApplicationServiceApi(self)
881
+
882
+ @cache_in_self
883
+ def get_application_service_scheduler(self) -> ApplicationServiceScheduler:
884
+ return ApplicationServiceScheduler(self)
885
+
886
+ @cache_in_self
887
+ def get_application_service_handler(self) -> ApplicationServicesHandler:
888
+ return ApplicationServicesHandler(self)
889
+
890
+ @cache_in_self
891
+ def get_event_handler(self) -> EventHandler:
892
+ return EventHandler(self)
893
+
894
+ @cache_in_self
895
+ def get_event_stream_handler(self) -> EventStreamHandler:
896
+ return EventStreamHandler(self)
897
+
898
+ @cache_in_self
899
+ def get_federation_handler(self) -> FederationHandler:
900
+ return FederationHandler(self)
901
+
902
+ @cache_in_self
903
+ def get_federation_event_handler(self) -> FederationEventHandler:
904
+ return FederationEventHandler(self)
905
+
906
+ @cache_in_self
907
+ def get_identity_handler(self) -> IdentityHandler:
908
+ return IdentityHandler(self)
909
+
910
+ @cache_in_self
911
+ def get_initial_sync_handler(self) -> InitialSyncHandler:
912
+ return InitialSyncHandler(self)
913
+
914
+ @cache_in_self
915
+ def get_profile_handler(self) -> ProfileHandler:
916
+ return ProfileHandler(self)
917
+
918
+ @cache_in_self
919
+ def get_event_creation_handler(self) -> EventCreationHandler:
920
+ return EventCreationHandler(self)
921
+
922
+ @cache_in_self
923
+ def get_deactivate_account_handler(self) -> DeactivateAccountHandler:
924
+ return DeactivateAccountHandler(self)
925
+
926
+ @cache_in_self
927
+ def get_search_handler(self) -> SearchHandler:
928
+ return SearchHandler(self)
929
+
930
+ @cache_in_self
931
+ def get_send_email_handler(self) -> SendEmailHandler:
932
+ return SendEmailHandler(self)
933
+
934
+ @cache_in_self
935
+ def get_set_password_handler(self) -> SetPasswordHandler:
936
+ return SetPasswordHandler(self)
937
+
938
+ @cache_in_self
939
+ def get_event_sources(self) -> EventSources:
940
+ return EventSources(self)
941
+
942
+ @cache_in_self
943
+ def get_keyring(self) -> Keyring:
944
+ return Keyring(self)
945
+
946
+ @cache_in_self
947
+ def get_event_builder_factory(self) -> EventBuilderFactory:
948
+ return EventBuilderFactory(self)
949
+
950
+ @cache_in_self
951
+ def get_filtering(self) -> Filtering:
952
+ return Filtering(self)
953
+
954
+ @cache_in_self
955
+ def get_pusherpool(self) -> PusherPool:
956
+ return PusherPool(self)
957
+
958
+ @cache_in_self
959
+ def get_media_repository_resource(self) -> MediaRepositoryResource:
960
+ # build the media repo resource. This indirects through the HomeServer
961
+ # to ensure that we only have a single instance of
962
+ return MediaRepositoryResource(self)
963
+
964
+ @cache_in_self
965
+ def get_media_repository(self) -> MediaRepository:
966
+ return MediaRepository(self)
967
+
968
+ @cache_in_self
969
+ def get_federation_transport_client(self) -> TransportLayerClient:
970
+ return TransportLayerClient(self)
971
+
972
+ @cache_in_self
973
+ def get_federation_sender(self) -> AbstractFederationSender:
974
+ if self.should_send_federation():
975
+ return FederationSender(self)
976
+ elif not self.config.worker.worker_app:
977
+ return FederationRemoteSendQueue(self)
978
+ else:
979
+ raise Exception("Workers cannot send federation traffic")
980
+
981
+ @cache_in_self
982
+ def get_receipts_handler(self) -> ReceiptsHandler:
983
+ return ReceiptsHandler(self)
984
+
985
+ @cache_in_self
986
+ def get_reports_handler(self) -> ReportsHandler:
987
+ return ReportsHandler(self)
988
+
989
+ @cache_in_self
990
+ def get_read_marker_handler(self) -> ReadMarkerHandler:
991
+ return ReadMarkerHandler(self)
992
+
993
+ @cache_in_self
994
+ def get_replication_command_handler(self) -> ReplicationCommandHandler:
995
+ return ReplicationCommandHandler(self)
996
+
997
+ @cache_in_self
998
+ def get_bulk_push_rule_evaluator(self) -> BulkPushRuleEvaluator:
999
+ return BulkPushRuleEvaluator(self)
1000
+
1001
+ @cache_in_self
1002
+ def get_user_directory_handler(self) -> UserDirectoryHandler:
1003
+ return UserDirectoryHandler(self)
1004
+
1005
+ @cache_in_self
1006
+ def get_stats_handler(self) -> StatsHandler:
1007
+ return StatsHandler(self)
1008
+
1009
+ @cache_in_self
1010
+ def get_password_auth_provider(self) -> PasswordAuthProvider:
1011
+ return PasswordAuthProvider()
1012
+
1013
+ @cache_in_self
1014
+ def get_room_member_handler(self) -> RoomMemberHandler:
1015
+ if self.config.worker.worker_app:
1016
+ return RoomMemberWorkerHandler(self)
1017
+ return RoomMemberMasterHandler(self)
1018
+
1019
+ @cache_in_self
1020
+ def get_federation_registry(self) -> FederationHandlerRegistry:
1021
+ return FederationHandlerRegistry(self)
1022
+
1023
+ @cache_in_self
1024
+ def get_server_notices_manager(self) -> ServerNoticesManager:
1025
+ if self.config.worker.worker_app:
1026
+ raise Exception("Workers cannot send server notices")
1027
+ return ServerNoticesManager(self)
1028
+
1029
+ @cache_in_self
1030
+ def get_server_notices_sender(self) -> WorkerServerNoticesSender:
1031
+ if self.config.worker.worker_app:
1032
+ return WorkerServerNoticesSender(self)
1033
+ return ServerNoticesSender(self)
1034
+
1035
+ @cache_in_self
1036
+ def get_message_handler(self) -> MessageHandler:
1037
+ return MessageHandler(self)
1038
+
1039
+ @cache_in_self
1040
+ def get_pagination_handler(self) -> PaginationHandler:
1041
+ return PaginationHandler(self)
1042
+
1043
+ @cache_in_self
1044
+ def get_relations_handler(self) -> RelationsHandler:
1045
+ return RelationsHandler(self)
1046
+
1047
+ @cache_in_self
1048
+ def get_room_context_handler(self) -> RoomContextHandler:
1049
+ return RoomContextHandler(self)
1050
+
1051
+ @cache_in_self
1052
+ def get_timestamp_lookup_handler(self) -> TimestampLookupHandler:
1053
+ return TimestampLookupHandler(self)
1054
+
1055
+ @cache_in_self
1056
+ def get_thread_subscriptions_handler(self) -> ThreadSubscriptionsHandler:
1057
+ return ThreadSubscriptionsHandler(self)
1058
+
1059
+ @cache_in_self
1060
+ def get_registration_handler(self) -> RegistrationHandler:
1061
+ return RegistrationHandler(self)
1062
+
1063
+ @cache_in_self
1064
+ def get_account_validity_handler(self) -> AccountValidityHandler:
1065
+ return AccountValidityHandler(self)
1066
+
1067
+ @cache_in_self
1068
+ def get_cas_handler(self) -> CasHandler:
1069
+ return CasHandler(self)
1070
+
1071
+ @cache_in_self
1072
+ def get_saml_handler(self) -> "SamlHandler":
1073
+ from synapse.handlers.saml import SamlHandler
1074
+
1075
+ return SamlHandler(self)
1076
+
1077
+ @cache_in_self
1078
+ def get_oidc_handler(self) -> "OidcHandler":
1079
+ from synapse.handlers.oidc import OidcHandler
1080
+
1081
+ return OidcHandler(self)
1082
+
1083
+ @cache_in_self
1084
+ def get_room_policy_handler(self) -> RoomPolicyHandler:
1085
+ return RoomPolicyHandler(self)
1086
+
1087
+ @cache_in_self
1088
+ def get_event_client_serializer(self) -> EventClientSerializer:
1089
+ return EventClientSerializer(self)
1090
+
1091
+ @cache_in_self
1092
+ def get_password_policy_handler(self) -> PasswordPolicyHandler:
1093
+ return PasswordPolicyHandler(self)
1094
+
1095
+ @cache_in_self
1096
+ def get_storage_controllers(self) -> StorageControllers:
1097
+ return StorageControllers(self, self.get_datastores())
1098
+
1099
+ @cache_in_self
1100
+ def get_replication_streamer(self) -> ReplicationStreamer:
1101
+ return ReplicationStreamer(self)
1102
+
1103
+ @cache_in_self
1104
+ def get_replication_data_handler(self) -> ReplicationDataHandler:
1105
+ return ReplicationDataHandler(self)
1106
+
1107
+ @cache_in_self
1108
+ def get_replication_streams(self) -> dict[str, Stream]:
1109
+ return {stream.NAME: stream(self) for stream in STREAMS_MAP.values()}
1110
+
1111
+ @cache_in_self
1112
+ def get_federation_ratelimiter(self) -> FederationRateLimiter:
1113
+ return FederationRateLimiter(
1114
+ our_server_name=self.hostname,
1115
+ clock=self.get_clock(),
1116
+ config=self.config.ratelimiting.rc_federation,
1117
+ metrics_name="federation_servlets",
1118
+ )
1119
+
1120
+ @cache_in_self
1121
+ def get_module_api(self) -> ModuleApi:
1122
+ return ModuleApi(self, self.get_auth_handler())
1123
+
1124
+ @cache_in_self
1125
+ def get_module_api_callbacks(self) -> ModuleApiCallbacks:
1126
+ return ModuleApiCallbacks(self)
1127
+
1128
+ @cache_in_self
1129
+ def get_account_data_handler(self) -> AccountDataHandler:
1130
+ return AccountDataHandler(self)
1131
+
1132
+ @cache_in_self
1133
+ def get_room_summary_handler(self) -> RoomSummaryHandler:
1134
+ return RoomSummaryHandler(self)
1135
+
1136
+ @cache_in_self
1137
+ def get_event_auth_handler(self) -> EventAuthHandler:
1138
+ return EventAuthHandler(self)
1139
+
1140
+ @cache_in_self
1141
+ def get_external_cache(self) -> ExternalCache:
1142
+ return ExternalCache(self)
1143
+
1144
+ @cache_in_self
1145
+ def get_account_handler(self) -> AccountHandler:
1146
+ return AccountHandler(self)
1147
+
1148
+ @cache_in_self
1149
+ def get_push_rules_handler(self) -> PushRulesHandler:
1150
+ return PushRulesHandler(self)
1151
+
1152
+ @cache_in_self
1153
+ def get_room_forgetter_handler(self) -> RoomForgetterHandler:
1154
+ return RoomForgetterHandler(self)
1155
+
1156
+ @cache_in_self
1157
+ def get_rendezvous_handler(self) -> RendezvousHandler:
1158
+ return RendezvousHandler(self)
1159
+
1160
+ @cache_in_self
1161
+ def get_outbound_redis_connection(self) -> "ConnectionHandler":
1162
+ """
1163
+ The Redis connection used for replication.
1164
+
1165
+ Raises:
1166
+ AssertionError: if Redis is not enabled in the homeserver config.
1167
+ """
1168
+ assert self.config.redis.redis_enabled
1169
+
1170
+ # We only want to import redis module if we're using it, as we have
1171
+ # `txredisapi` as an optional dependency.
1172
+ from synapse.replication.tcp.redis import lazyConnection, lazyUnixConnection
1173
+
1174
+ if self.config.redis.redis_path is None:
1175
+ logger.info(
1176
+ "Connecting to redis (host=%r port=%r) for external cache",
1177
+ self.config.redis.redis_host,
1178
+ self.config.redis.redis_port,
1179
+ )
1180
+
1181
+ return lazyConnection(
1182
+ hs=self,
1183
+ host=self.config.redis.redis_host,
1184
+ port=self.config.redis.redis_port,
1185
+ dbid=self.config.redis.redis_dbid,
1186
+ password=self.config.redis.redis_password,
1187
+ reconnect=True,
1188
+ )
1189
+ else:
1190
+ logger.info(
1191
+ "Connecting to redis (path=%r) for external cache",
1192
+ self.config.redis.redis_path,
1193
+ )
1194
+
1195
+ return lazyUnixConnection(
1196
+ hs=self,
1197
+ path=self.config.redis.redis_path,
1198
+ dbid=self.config.redis.redis_dbid,
1199
+ password=self.config.redis.redis_password,
1200
+ reconnect=True,
1201
+ )
1202
+
1203
+ def should_send_federation(self) -> bool:
1204
+ "Should this server be sending federation traffic directly?"
1205
+ return self.config.worker.send_federation
1206
+
1207
+ @cache_in_self
1208
+ def get_request_ratelimiter(self) -> RequestRatelimiter:
1209
+ return RequestRatelimiter(
1210
+ self.get_datastores().main,
1211
+ self.get_clock(),
1212
+ self.config.ratelimiting.rc_message,
1213
+ self.config.ratelimiting.rc_admin_redaction,
1214
+ )
1215
+
1216
+ @cache_in_self
1217
+ def get_common_usage_metrics_manager(self) -> CommonUsageMetricsManager:
1218
+ """Usage metrics shared between phone home stats and the prometheus exporter."""
1219
+ return CommonUsageMetricsManager(self)
1220
+
1221
+ @cache_in_self
1222
+ def get_worker_locks_handler(self) -> WorkerLocksHandler:
1223
+ return WorkerLocksHandler(self)
1224
+
1225
+ @cache_in_self
1226
+ def get_task_scheduler(self) -> TaskScheduler:
1227
+ return TaskScheduler(self)
1228
+
1229
+ @cache_in_self
1230
+ def get_media_sender_thread_pool(self) -> ThreadPool:
1231
+ """Fetch the threadpool used to read files when responding to media
1232
+ download requests."""
1233
+
1234
+ # We can choose a large threadpool size as these threads predominately
1235
+ # do IO rather than CPU work.
1236
+ media_threadpool = ThreadPool(
1237
+ name="media_threadpool", minthreads=1, maxthreads=50
1238
+ )
1239
+
1240
+ media_threadpool.start()
1241
+ self.register_sync_shutdown_handler(
1242
+ phase="during",
1243
+ eventType="shutdown",
1244
+ shutdown_func=media_threadpool.stop,
1245
+ )
1246
+
1247
+ # Register the threadpool with our metrics.
1248
+ server_name = self.hostname
1249
+ register_threadpool(
1250
+ name="media", server_name=server_name, threadpool=media_threadpool
1251
+ )
1252
+
1253
+ return media_threadpool
1254
+
1255
+ @cache_in_self
1256
+ def get_delayed_events_handler(self) -> DelayedEventsHandler:
1257
+ return DelayedEventsHandler(self)