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
@@ -0,0 +1,991 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2019 The Matrix.org Foundation C.I.C.
5
+ # Copyright (C) 2023 New Vector, Ltd
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # See the GNU Affero General Public License for more details:
13
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
14
+ #
15
+ # Originally licensed under the Apache License, Version 2.0:
16
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
17
+ #
18
+ # [This file includes modifications made by New Vector Limited]
19
+ #
20
+ #
21
+
22
+ import functools
23
+ import inspect
24
+ import logging
25
+ from copy import deepcopy
26
+ from typing import (
27
+ TYPE_CHECKING,
28
+ Any,
29
+ Awaitable,
30
+ Callable,
31
+ Collection,
32
+ Literal,
33
+ cast,
34
+ )
35
+
36
+ import synapse
37
+ from synapse.api.errors import Codes
38
+ from synapse.logging.opentracing import trace
39
+ from synapse.media._base import FileInfo
40
+ from synapse.media.media_storage import ReadableFileWrapper
41
+ from synapse.spam_checker_api import RegistrationBehaviour
42
+ from synapse.types import JsonDict, RoomAlias, UserProfile
43
+ from synapse.util.async_helpers import delay_cancellation, maybe_awaitable
44
+ from synapse.util.metrics import Measure
45
+
46
+ if TYPE_CHECKING:
47
+ import synapse.events
48
+ import synapse.server
49
+
50
+ logger = logging.getLogger(__name__)
51
+
52
+ CHECK_EVENT_FOR_SPAM_CALLBACK = Callable[
53
+ ["synapse.events.EventBase"],
54
+ Awaitable[str | Codes | tuple[Codes, JsonDict] | bool],
55
+ ]
56
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK = Callable[
57
+ ["synapse.events.EventBase"],
58
+ Awaitable[bool | str],
59
+ ]
60
+ USER_MAY_JOIN_ROOM_CALLBACK = Callable[
61
+ [str, str, bool],
62
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
63
+ ]
64
+ USER_MAY_INVITE_CALLBACK = Callable[
65
+ [str, str, str],
66
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
67
+ ]
68
+ FEDERATED_USER_MAY_INVITE_CALLBACK = Callable[
69
+ ["synapse.events.EventBase"],
70
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
71
+ ]
72
+ USER_MAY_SEND_3PID_INVITE_CALLBACK = Callable[
73
+ [str, str, str, str],
74
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
75
+ ]
76
+ USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE = (
77
+ Literal["NOT_SPAM"]
78
+ | Codes
79
+ |
80
+ # Highly experimental, not officially part of the spamchecker API, may
81
+ # disappear without warning depending on the results of ongoing
82
+ # experiments.
83
+ # Use this to return additional information as part of an error.
84
+ tuple[Codes, JsonDict]
85
+ |
86
+ # Deprecated
87
+ bool
88
+ )
89
+ USER_MAY_CREATE_ROOM_CALLBACK = (
90
+ Callable[
91
+ [str, JsonDict],
92
+ Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE],
93
+ ]
94
+ | Callable[ # Single argument variant for backwards compatibility
95
+ [str], Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE]
96
+ ]
97
+ )
98
+ USER_MAY_CREATE_ROOM_ALIAS_CALLBACK = Callable[
99
+ [str, RoomAlias],
100
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
101
+ ]
102
+ USER_MAY_PUBLISH_ROOM_CALLBACK = Callable[
103
+ [str, str],
104
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
105
+ ]
106
+ USER_MAY_SEND_STATE_EVENT_CALLBACK = Callable[
107
+ [str, str, str, str, JsonDict],
108
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict]],
109
+ ]
110
+ CHECK_USERNAME_FOR_SPAM_CALLBACK = (
111
+ Callable[[UserProfile], Awaitable[bool]]
112
+ | Callable[[UserProfile, str], Awaitable[bool]]
113
+ )
114
+ LEGACY_CHECK_REGISTRATION_FOR_SPAM_CALLBACK = Callable[
115
+ [
116
+ dict | None,
117
+ str | None,
118
+ Collection[tuple[str, str]],
119
+ ],
120
+ Awaitable[RegistrationBehaviour],
121
+ ]
122
+ CHECK_REGISTRATION_FOR_SPAM_CALLBACK = Callable[
123
+ [
124
+ dict | None,
125
+ str | None,
126
+ Collection[tuple[str, str]],
127
+ str | None,
128
+ ],
129
+ Awaitable[RegistrationBehaviour],
130
+ ]
131
+ CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK = Callable[
132
+ [ReadableFileWrapper, FileInfo],
133
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict] | bool],
134
+ ]
135
+ CHECK_LOGIN_FOR_SPAM_CALLBACK = Callable[
136
+ [
137
+ str,
138
+ str | None,
139
+ str | None,
140
+ Collection[tuple[str | None, str]],
141
+ str | None,
142
+ ],
143
+ Awaitable[Literal["NOT_SPAM"] | Codes | tuple[Codes, JsonDict]],
144
+ ]
145
+
146
+
147
+ def load_legacy_spam_checkers(hs: "synapse.server.HomeServer") -> None:
148
+ """Wrapper that loads spam checkers configured using the old configuration, and
149
+ registers the spam checker hooks they implement.
150
+ """
151
+ spam_checkers: list[Any] = []
152
+ api = hs.get_module_api()
153
+ for module, config in hs.config.spamchecker.spam_checkers:
154
+ # Older spam checkers don't accept the `api` argument, so we
155
+ # try and detect support.
156
+ spam_args = inspect.getfullargspec(module)
157
+ if "api" in spam_args.args:
158
+ spam_checkers.append(module(config=config, api=api))
159
+ else:
160
+ spam_checkers.append(module(config=config))
161
+
162
+ # The known spam checker hooks. If a spam checker module implements a method
163
+ # which name appears in this set, we'll want to register it.
164
+ spam_checker_methods = {
165
+ "check_event_for_spam",
166
+ "user_may_invite",
167
+ "federated_user_may_invite",
168
+ "user_may_create_room",
169
+ "user_may_create_room_alias",
170
+ "user_may_publish_room",
171
+ "check_username_for_spam",
172
+ "check_registration_for_spam",
173
+ "check_media_file_for_spam",
174
+ }
175
+
176
+ for spam_checker in spam_checkers:
177
+ # Methods on legacy spam checkers might not be async, so we wrap them around a
178
+ # wrapper that will call maybe_awaitable on the result.
179
+ def async_wrapper(f: Callable | None) -> Callable[..., Awaitable] | None:
180
+ # f might be None if the callback isn't implemented by the module. In this
181
+ # case we don't want to register a callback at all so we return None.
182
+ if f is None:
183
+ return None
184
+
185
+ wrapped_func = f
186
+
187
+ if f.__name__ == "check_registration_for_spam":
188
+ checker_args = inspect.signature(f)
189
+ if len(checker_args.parameters) == 3:
190
+ # Backwards compatibility; some modules might implement a hook that
191
+ # doesn't expect a 4th argument. In this case, wrap it in a function
192
+ # that gives it only 3 arguments and drops the auth_provider_id on
193
+ # the floor.
194
+ def wrapper(
195
+ email_threepid: dict | None,
196
+ username: str | None,
197
+ request_info: Collection[tuple[str, str]],
198
+ auth_provider_id: str | None,
199
+ ) -> Awaitable[RegistrationBehaviour] | RegistrationBehaviour:
200
+ # Assertion required because mypy can't prove we won't
201
+ # change `f` back to `None`. See
202
+ # https://mypy.readthedocs.io/en/latest/common_issues.html#narrowing-and-inner-functions
203
+ assert f is not None
204
+
205
+ return f(
206
+ email_threepid,
207
+ username,
208
+ request_info,
209
+ )
210
+
211
+ wrapped_func = wrapper
212
+ elif len(checker_args.parameters) != 4:
213
+ raise RuntimeError(
214
+ "Bad signature for callback check_registration_for_spam",
215
+ )
216
+
217
+ @functools.wraps(wrapped_func)
218
+ def run(*args: Any, **kwargs: Any) -> Awaitable:
219
+ # Assertion required because mypy can't prove we won't change `f`
220
+ # back to `None`. See
221
+ # https://mypy.readthedocs.io/en/latest/common_issues.html#narrowing-and-inner-functions
222
+ assert wrapped_func is not None
223
+
224
+ return maybe_awaitable(wrapped_func(*args, **kwargs))
225
+
226
+ return run
227
+
228
+ # Register the hooks through the module API.
229
+ hooks = {
230
+ hook: async_wrapper(getattr(spam_checker, hook, None))
231
+ for hook in spam_checker_methods
232
+ }
233
+
234
+ api.register_spam_checker_callbacks(**hooks)
235
+
236
+
237
+ class SpamCheckerModuleApiCallbacks:
238
+ NOT_SPAM: Literal["NOT_SPAM"] = "NOT_SPAM"
239
+
240
+ def __init__(self, hs: "synapse.server.HomeServer") -> None:
241
+ self.server_name = hs.hostname
242
+ self.clock = hs.get_clock()
243
+
244
+ self._check_event_for_spam_callbacks: list[CHECK_EVENT_FOR_SPAM_CALLBACK] = []
245
+ self._should_drop_federated_event_callbacks: list[
246
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK
247
+ ] = []
248
+ self._user_may_join_room_callbacks: list[USER_MAY_JOIN_ROOM_CALLBACK] = []
249
+ self._user_may_invite_callbacks: list[USER_MAY_INVITE_CALLBACK] = []
250
+ self._federated_user_may_invite_callbacks: list[
251
+ FEDERATED_USER_MAY_INVITE_CALLBACK
252
+ ] = []
253
+ self._user_may_send_3pid_invite_callbacks: list[
254
+ USER_MAY_SEND_3PID_INVITE_CALLBACK
255
+ ] = []
256
+ self._user_may_create_room_callbacks: list[USER_MAY_CREATE_ROOM_CALLBACK] = []
257
+ self._user_may_send_state_event_callbacks: list[
258
+ USER_MAY_SEND_STATE_EVENT_CALLBACK
259
+ ] = []
260
+ self._user_may_create_room_alias_callbacks: list[
261
+ USER_MAY_CREATE_ROOM_ALIAS_CALLBACK
262
+ ] = []
263
+ self._user_may_publish_room_callbacks: list[USER_MAY_PUBLISH_ROOM_CALLBACK] = []
264
+ self._check_username_for_spam_callbacks: list[
265
+ CHECK_USERNAME_FOR_SPAM_CALLBACK
266
+ ] = []
267
+ self._check_registration_for_spam_callbacks: list[
268
+ CHECK_REGISTRATION_FOR_SPAM_CALLBACK
269
+ ] = []
270
+ self._check_media_file_for_spam_callbacks: list[
271
+ CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK
272
+ ] = []
273
+ self._check_login_for_spam_callbacks: list[CHECK_LOGIN_FOR_SPAM_CALLBACK] = []
274
+
275
+ def register_callbacks(
276
+ self,
277
+ check_event_for_spam: CHECK_EVENT_FOR_SPAM_CALLBACK | None = None,
278
+ should_drop_federated_event: SHOULD_DROP_FEDERATED_EVENT_CALLBACK | None = None,
279
+ user_may_join_room: USER_MAY_JOIN_ROOM_CALLBACK | None = None,
280
+ user_may_invite: USER_MAY_INVITE_CALLBACK | None = None,
281
+ federated_user_may_invite: FEDERATED_USER_MAY_INVITE_CALLBACK | None = None,
282
+ user_may_send_3pid_invite: USER_MAY_SEND_3PID_INVITE_CALLBACK | None = None,
283
+ user_may_create_room: USER_MAY_CREATE_ROOM_CALLBACK | None = None,
284
+ user_may_create_room_alias: USER_MAY_CREATE_ROOM_ALIAS_CALLBACK | None = None,
285
+ user_may_publish_room: USER_MAY_PUBLISH_ROOM_CALLBACK | None = None,
286
+ check_username_for_spam: CHECK_USERNAME_FOR_SPAM_CALLBACK | None = None,
287
+ check_registration_for_spam: CHECK_REGISTRATION_FOR_SPAM_CALLBACK | None = None,
288
+ check_media_file_for_spam: CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK | None = None,
289
+ check_login_for_spam: CHECK_LOGIN_FOR_SPAM_CALLBACK | None = None,
290
+ user_may_send_state_event: USER_MAY_SEND_STATE_EVENT_CALLBACK | None = None,
291
+ ) -> None:
292
+ """Register callbacks from module for each hook."""
293
+ if check_event_for_spam is not None:
294
+ self._check_event_for_spam_callbacks.append(check_event_for_spam)
295
+
296
+ if should_drop_federated_event is not None:
297
+ self._should_drop_federated_event_callbacks.append(
298
+ should_drop_federated_event
299
+ )
300
+
301
+ if user_may_join_room is not None:
302
+ self._user_may_join_room_callbacks.append(user_may_join_room)
303
+
304
+ if user_may_invite is not None:
305
+ self._user_may_invite_callbacks.append(user_may_invite)
306
+
307
+ if federated_user_may_invite is not None:
308
+ self._federated_user_may_invite_callbacks.append(
309
+ federated_user_may_invite,
310
+ )
311
+
312
+ if user_may_send_3pid_invite is not None:
313
+ self._user_may_send_3pid_invite_callbacks.append(
314
+ user_may_send_3pid_invite,
315
+ )
316
+
317
+ if user_may_create_room is not None:
318
+ self._user_may_create_room_callbacks.append(user_may_create_room)
319
+
320
+ if user_may_send_state_event is not None:
321
+ self._user_may_send_state_event_callbacks.append(
322
+ user_may_send_state_event,
323
+ )
324
+
325
+ if user_may_create_room_alias is not None:
326
+ self._user_may_create_room_alias_callbacks.append(
327
+ user_may_create_room_alias,
328
+ )
329
+
330
+ if user_may_publish_room is not None:
331
+ self._user_may_publish_room_callbacks.append(user_may_publish_room)
332
+
333
+ if check_username_for_spam is not None:
334
+ self._check_username_for_spam_callbacks.append(check_username_for_spam)
335
+
336
+ if check_registration_for_spam is not None:
337
+ self._check_registration_for_spam_callbacks.append(
338
+ check_registration_for_spam,
339
+ )
340
+
341
+ if check_media_file_for_spam is not None:
342
+ self._check_media_file_for_spam_callbacks.append(check_media_file_for_spam)
343
+
344
+ if check_login_for_spam is not None:
345
+ self._check_login_for_spam_callbacks.append(check_login_for_spam)
346
+
347
+ @trace
348
+ async def check_event_for_spam(
349
+ self, event: "synapse.events.EventBase"
350
+ ) -> tuple[Codes, JsonDict] | str:
351
+ """Checks if a given event is considered "spammy" by this server.
352
+
353
+ If the server considers an event spammy, then it will be rejected if
354
+ sent by a local user. If it is sent by a user on another server, the
355
+ event is soft-failed.
356
+
357
+ Args:
358
+ event: the event to be checked
359
+
360
+ Returns:
361
+ - `NOT_SPAM` if the event is considered good (non-spammy) and should be let
362
+ through. Other spamcheck filters may still reject it.
363
+ - A `Code` if the event is considered spammy and is rejected with a specific
364
+ error message/code.
365
+ - A string that isn't `NOT_SPAM` if the event is considered spammy and the
366
+ string should be used as the client-facing error message. This usage is
367
+ generally discouraged as it doesn't support internationalization.
368
+ """
369
+ for callback in self._check_event_for_spam_callbacks:
370
+ with Measure(
371
+ self.clock,
372
+ name=f"{callback.__module__}.{callback.__qualname__}",
373
+ server_name=self.server_name,
374
+ ):
375
+ res = await delay_cancellation(callback(event))
376
+ if res is False or res == self.NOT_SPAM:
377
+ # This spam-checker accepts the event.
378
+ # Other spam-checkers may reject it, though.
379
+ continue
380
+ elif res is True:
381
+ # This spam-checker rejects the event with deprecated
382
+ # return value `True`
383
+ return synapse.api.errors.Codes.FORBIDDEN, {}
384
+ elif (
385
+ isinstance(res, tuple)
386
+ and len(res) == 2
387
+ and isinstance(res[0], synapse.api.errors.Codes)
388
+ and isinstance(res[1], dict)
389
+ ):
390
+ return res
391
+ elif isinstance(res, synapse.api.errors.Codes):
392
+ return res, {}
393
+ elif not isinstance(res, str):
394
+ # mypy complains that we can't reach this code because of the
395
+ # return type in CHECK_EVENT_FOR_SPAM_CALLBACK, but we don't know
396
+ # for sure that the module actually returns it.
397
+ logger.warning( # type: ignore[unreachable]
398
+ "Module returned invalid value, rejecting message as spam"
399
+ )
400
+ res = "This message has been rejected as probable spam"
401
+ else:
402
+ # The module rejected the event either with a `Codes`
403
+ # or some other `str`. In either case, we stop here.
404
+ pass
405
+
406
+ return res
407
+
408
+ # No spam-checker has rejected the event, let it pass.
409
+ return self.NOT_SPAM
410
+
411
+ async def should_drop_federated_event(
412
+ self, event: "synapse.events.EventBase"
413
+ ) -> bool | str:
414
+ """Checks if a given federated event is considered "spammy" by this
415
+ server.
416
+
417
+ If the server considers an event spammy, it will be silently dropped,
418
+ and in doing so will split-brain our view of the room's DAG.
419
+
420
+ Args:
421
+ event: the event to be checked
422
+
423
+ Returns:
424
+ True if the event should be silently dropped
425
+ """
426
+ for callback in self._should_drop_federated_event_callbacks:
427
+ with Measure(
428
+ self.clock,
429
+ name=f"{callback.__module__}.{callback.__qualname__}",
430
+ server_name=self.server_name,
431
+ ):
432
+ res: bool | str = await delay_cancellation(callback(event))
433
+ if res:
434
+ return res
435
+
436
+ return False
437
+
438
+ async def user_may_join_room(
439
+ self, user_id: str, room_id: str, is_invited: bool
440
+ ) -> tuple[Codes, JsonDict] | Literal["NOT_SPAM"]:
441
+ """Checks if a given users is allowed to join a room.
442
+ Not called when a user creates a room.
443
+
444
+ Args:
445
+ userid: The ID of the user wanting to join the room
446
+ room_id: The ID of the room the user wants to join
447
+ is_invited: Whether the user is invited into the room
448
+
449
+ Returns:
450
+ NOT_SPAM if the operation is permitted, [Codes, Dict] otherwise.
451
+ """
452
+ for callback in self._user_may_join_room_callbacks:
453
+ with Measure(
454
+ self.clock,
455
+ name=f"{callback.__module__}.{callback.__qualname__}",
456
+ server_name=self.server_name,
457
+ ):
458
+ res = await delay_cancellation(callback(user_id, room_id, is_invited))
459
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
460
+ if res is True or res is self.NOT_SPAM:
461
+ continue
462
+ elif res is False:
463
+ return synapse.api.errors.Codes.FORBIDDEN, {}
464
+ elif isinstance(res, synapse.api.errors.Codes):
465
+ return res, {}
466
+ elif (
467
+ isinstance(res, tuple)
468
+ and len(res) == 2
469
+ and isinstance(res[0], synapse.api.errors.Codes)
470
+ and isinstance(res[1], dict)
471
+ ):
472
+ return res
473
+ else:
474
+ logger.warning(
475
+ "Module returned invalid value, rejecting join as spam"
476
+ )
477
+ return synapse.api.errors.Codes.FORBIDDEN, {}
478
+
479
+ # No spam-checker has rejected the request, let it pass.
480
+ return self.NOT_SPAM
481
+
482
+ async def user_may_invite(
483
+ self, inviter_userid: str, invitee_userid: str, room_id: str
484
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
485
+ """Checks if a given user may send an invite
486
+
487
+ Args:
488
+ inviter_userid: The user ID of the sender of the invitation
489
+ invitee_userid: The user ID targeted in the invitation
490
+ room_id: The room ID
491
+
492
+ Returns:
493
+ NOT_SPAM if the operation is permitted, Codes otherwise.
494
+ """
495
+ for callback in self._user_may_invite_callbacks:
496
+ with Measure(
497
+ self.clock,
498
+ name=f"{callback.__module__}.{callback.__qualname__}",
499
+ server_name=self.server_name,
500
+ ):
501
+ res = await delay_cancellation(
502
+ callback(inviter_userid, invitee_userid, room_id)
503
+ )
504
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
505
+ if res is True or res is self.NOT_SPAM:
506
+ continue
507
+ elif res is False:
508
+ return synapse.api.errors.Codes.FORBIDDEN, {}
509
+ elif isinstance(res, synapse.api.errors.Codes):
510
+ return res, {}
511
+ elif (
512
+ isinstance(res, tuple)
513
+ and len(res) == 2
514
+ and isinstance(res[0], synapse.api.errors.Codes)
515
+ and isinstance(res[1], dict)
516
+ ):
517
+ return res
518
+ else:
519
+ logger.warning(
520
+ "Module returned invalid value, rejecting invite as spam"
521
+ )
522
+ return synapse.api.errors.Codes.FORBIDDEN, {}
523
+
524
+ # No spam-checker has rejected the request, let it pass.
525
+ return self.NOT_SPAM
526
+
527
+ async def federated_user_may_invite(
528
+ self, event: "synapse.events.EventBase"
529
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
530
+ """Checks if a given user may send an invite
531
+
532
+ Args:
533
+ event: The event to be checked
534
+
535
+ Returns:
536
+ NOT_SPAM if the operation is permitted, Codes otherwise.
537
+ """
538
+ for callback in self._federated_user_may_invite_callbacks:
539
+ with Measure(
540
+ self.clock,
541
+ name=f"{callback.__module__}.{callback.__qualname__}",
542
+ server_name=self.server_name,
543
+ ):
544
+ res = await delay_cancellation(callback(event))
545
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
546
+ if res is True or res is self.NOT_SPAM:
547
+ continue
548
+ elif res is False:
549
+ return synapse.api.errors.Codes.FORBIDDEN, {}
550
+ elif isinstance(res, synapse.api.errors.Codes):
551
+ return res, {}
552
+ elif (
553
+ isinstance(res, tuple)
554
+ and len(res) == 2
555
+ and isinstance(res[0], synapse.api.errors.Codes)
556
+ and isinstance(res[1], dict)
557
+ ):
558
+ return res
559
+ else:
560
+ logger.warning(
561
+ "Module returned invalid value, rejecting invite as spam"
562
+ )
563
+ return synapse.api.errors.Codes.FORBIDDEN, {}
564
+
565
+ # Check the standard user_may_invite callback if no module has rejected the invite yet.
566
+ return await self.user_may_invite(event.sender, event.state_key, event.room_id)
567
+
568
+ async def user_may_send_3pid_invite(
569
+ self, inviter_userid: str, medium: str, address: str, room_id: str
570
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
571
+ """Checks if a given user may invite a given threepid into the room
572
+
573
+ Note that if the threepid is already associated with a Matrix user ID, Synapse
574
+ will call user_may_invite with said user ID instead.
575
+
576
+ Args:
577
+ inviter_userid: The user ID of the sender of the invitation
578
+ medium: The 3PID's medium (e.g. "email")
579
+ address: The 3PID's address (e.g. "alice@example.com")
580
+ room_id: The room ID
581
+
582
+ Returns:
583
+ NOT_SPAM if the operation is permitted, Codes otherwise.
584
+ """
585
+ for callback in self._user_may_send_3pid_invite_callbacks:
586
+ with Measure(
587
+ self.clock,
588
+ name=f"{callback.__module__}.{callback.__qualname__}",
589
+ server_name=self.server_name,
590
+ ):
591
+ res = await delay_cancellation(
592
+ callback(inviter_userid, medium, address, room_id)
593
+ )
594
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
595
+ if res is True or res is self.NOT_SPAM:
596
+ continue
597
+ elif res is False:
598
+ return synapse.api.errors.Codes.FORBIDDEN, {}
599
+ elif isinstance(res, synapse.api.errors.Codes):
600
+ return res, {}
601
+ elif (
602
+ isinstance(res, tuple)
603
+ and len(res) == 2
604
+ and isinstance(res[0], synapse.api.errors.Codes)
605
+ and isinstance(res[1], dict)
606
+ ):
607
+ return res
608
+ else:
609
+ logger.warning(
610
+ "Module returned invalid value, rejecting 3pid invite as spam"
611
+ )
612
+ return synapse.api.errors.Codes.FORBIDDEN, {}
613
+
614
+ return self.NOT_SPAM
615
+
616
+ async def user_may_create_room(
617
+ self, userid: str, room_config: JsonDict
618
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
619
+ """Checks if a given user may create a room
620
+
621
+ Args:
622
+ userid: The ID of the user attempting to create a room
623
+ room_config: The room creation configuration which is the body of the /createRoom request
624
+ """
625
+ for callback in self._user_may_create_room_callbacks:
626
+ with Measure(
627
+ self.clock,
628
+ name=f"{callback.__module__}.{callback.__qualname__}",
629
+ server_name=self.server_name,
630
+ ):
631
+ checker_args = inspect.signature(callback)
632
+ # Also ensure backwards compatibility with spam checker callbacks
633
+ # that don't expect the room_config argument.
634
+ if len(checker_args.parameters) == 2:
635
+ callback_with_requester_id = cast(
636
+ Callable[
637
+ [str, JsonDict],
638
+ Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE],
639
+ ],
640
+ callback,
641
+ )
642
+ # We make a copy of the config to ensure the spam checker cannot modify it.
643
+ res = await delay_cancellation(
644
+ callback_with_requester_id(userid, deepcopy(room_config))
645
+ )
646
+ else:
647
+ callback_without_requester_id = cast(
648
+ Callable[
649
+ [str], Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE]
650
+ ],
651
+ callback,
652
+ )
653
+ res = await delay_cancellation(
654
+ callback_without_requester_id(userid)
655
+ )
656
+ if res is True or res is self.NOT_SPAM:
657
+ continue
658
+ elif res is False:
659
+ return synapse.api.errors.Codes.FORBIDDEN, {}
660
+ elif isinstance(res, synapse.api.errors.Codes):
661
+ return res, {}
662
+ elif (
663
+ isinstance(res, tuple)
664
+ and len(res) == 2
665
+ and isinstance(res[0], synapse.api.errors.Codes)
666
+ and isinstance(res[1], dict)
667
+ ):
668
+ return res
669
+ else:
670
+ logger.warning(
671
+ "Module returned invalid value, rejecting room creation as spam"
672
+ )
673
+ return synapse.api.errors.Codes.FORBIDDEN, {}
674
+
675
+ return self.NOT_SPAM
676
+
677
+ async def user_may_send_state_event(
678
+ self,
679
+ user_id: str,
680
+ room_id: str,
681
+ event_type: str,
682
+ state_key: str,
683
+ content: JsonDict,
684
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
685
+ """Checks if a given user may create a room with a given visibility
686
+ Args:
687
+ user_id: The ID of the user attempting to create a room
688
+ room_id: The ID of the room that the event will be sent to
689
+ event_type: The type of the state event
690
+ state_key: The state key of the state event
691
+ content: The content of the state event
692
+ """
693
+ for callback in self._user_may_send_state_event_callbacks:
694
+ with Measure(
695
+ self.clock,
696
+ name=f"{callback.__module__}.{callback.__qualname__}",
697
+ server_name=self.server_name,
698
+ ):
699
+ # We make a copy of the content to ensure that the spam checker cannot modify it.
700
+ res = await delay_cancellation(
701
+ callback(user_id, room_id, event_type, state_key, deepcopy(content))
702
+ )
703
+ if res is self.NOT_SPAM:
704
+ continue
705
+ elif isinstance(res, synapse.api.errors.Codes):
706
+ return res, {}
707
+ else:
708
+ logger.warning(
709
+ "Module returned invalid value, rejecting room creation as spam"
710
+ )
711
+ return synapse.api.errors.Codes.FORBIDDEN, {}
712
+
713
+ return self.NOT_SPAM
714
+
715
+ async def user_may_create_room_alias(
716
+ self, userid: str, room_alias: RoomAlias
717
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
718
+ """Checks if a given user may create a room alias
719
+
720
+ Args:
721
+ userid: The ID of the user attempting to create a room alias
722
+ room_alias: The alias to be created
723
+
724
+ """
725
+ for callback in self._user_may_create_room_alias_callbacks:
726
+ with Measure(
727
+ self.clock,
728
+ name=f"{callback.__module__}.{callback.__qualname__}",
729
+ server_name=self.server_name,
730
+ ):
731
+ res = await delay_cancellation(callback(userid, room_alias))
732
+ if res is True or res is self.NOT_SPAM:
733
+ continue
734
+ elif res is False:
735
+ return synapse.api.errors.Codes.FORBIDDEN, {}
736
+ elif isinstance(res, synapse.api.errors.Codes):
737
+ return res, {}
738
+ elif (
739
+ isinstance(res, tuple)
740
+ and len(res) == 2
741
+ and isinstance(res[0], synapse.api.errors.Codes)
742
+ and isinstance(res[1], dict)
743
+ ):
744
+ return res
745
+ else:
746
+ logger.warning(
747
+ "Module returned invalid value, rejecting room create as spam"
748
+ )
749
+ return synapse.api.errors.Codes.FORBIDDEN, {}
750
+
751
+ return self.NOT_SPAM
752
+
753
+ async def user_may_publish_room(
754
+ self, userid: str, room_id: str
755
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
756
+ """Checks if a given user may publish a room to the directory
757
+
758
+ Args:
759
+ userid: The user ID attempting to publish the room
760
+ room_id: The ID of the room that would be published
761
+ """
762
+ for callback in self._user_may_publish_room_callbacks:
763
+ with Measure(
764
+ self.clock,
765
+ name=f"{callback.__module__}.{callback.__qualname__}",
766
+ server_name=self.server_name,
767
+ ):
768
+ res = await delay_cancellation(callback(userid, room_id))
769
+ if res is True or res is self.NOT_SPAM:
770
+ continue
771
+ elif res is False:
772
+ return synapse.api.errors.Codes.FORBIDDEN, {}
773
+ elif isinstance(res, synapse.api.errors.Codes):
774
+ return res, {}
775
+ elif (
776
+ isinstance(res, tuple)
777
+ and len(res) == 2
778
+ and isinstance(res[0], synapse.api.errors.Codes)
779
+ and isinstance(res[1], dict)
780
+ ):
781
+ return res
782
+ else:
783
+ logger.warning(
784
+ "Module returned invalid value, rejecting room publication as spam"
785
+ )
786
+ return synapse.api.errors.Codes.FORBIDDEN, {}
787
+
788
+ return self.NOT_SPAM
789
+
790
+ async def check_username_for_spam(
791
+ self, user_profile: UserProfile, requester_id: str
792
+ ) -> bool:
793
+ """Checks if a user ID or display name are considered "spammy" by this server.
794
+
795
+ If the server considers a username spammy, then it will not be included in
796
+ user directory results.
797
+
798
+ Args:
799
+ user_profile: The user information to check, it contains the keys:
800
+ * user_id
801
+ * display_name
802
+ * avatar_url
803
+ requester_id: The user ID of the user making the user directory search request.
804
+
805
+ Returns:
806
+ True if the user is spammy.
807
+ """
808
+ for callback in self._check_username_for_spam_callbacks:
809
+ with Measure(
810
+ self.clock,
811
+ name=f"{callback.__module__}.{callback.__qualname__}",
812
+ server_name=self.server_name,
813
+ ):
814
+ checker_args = inspect.signature(callback)
815
+ # Make a copy of the user profile object to ensure the spam checker cannot
816
+ # modify it.
817
+ # Also ensure backwards compatibility with spam checker callbacks
818
+ # that don't expect the requester_id argument.
819
+ if len(checker_args.parameters) == 2:
820
+ callback_with_requester_id = cast(
821
+ Callable[[UserProfile, str], Awaitable[bool]], callback
822
+ )
823
+ res = await delay_cancellation(
824
+ callback_with_requester_id(user_profile.copy(), requester_id)
825
+ )
826
+ else:
827
+ callback_without_requester_id = cast(
828
+ Callable[[UserProfile], Awaitable[bool]], callback
829
+ )
830
+ res = await delay_cancellation(
831
+ callback_without_requester_id(user_profile.copy())
832
+ )
833
+
834
+ if res:
835
+ return True
836
+
837
+ return False
838
+
839
+ async def check_registration_for_spam(
840
+ self,
841
+ email_threepid: dict | None,
842
+ username: str | None,
843
+ request_info: Collection[tuple[str, str]],
844
+ auth_provider_id: str | None = None,
845
+ ) -> RegistrationBehaviour:
846
+ """Checks if we should allow the given registration request.
847
+
848
+ Args:
849
+ email_threepid: The email threepid used for registering, if any
850
+ username: The request user name, if any
851
+ request_info: List of tuples of user agent and IP that
852
+ were used during the registration process.
853
+ auth_provider_id: The SSO IdP the user used, e.g "oidc", "saml",
854
+ "cas". If any. Note this does not include users registered
855
+ via a password provider.
856
+
857
+ Returns:
858
+ Enum for how the request should be handled
859
+ """
860
+
861
+ for callback in self._check_registration_for_spam_callbacks:
862
+ with Measure(
863
+ self.clock,
864
+ name=f"{callback.__module__}.{callback.__qualname__}",
865
+ server_name=self.server_name,
866
+ ):
867
+ behaviour = await delay_cancellation(
868
+ callback(email_threepid, username, request_info, auth_provider_id)
869
+ )
870
+ assert isinstance(behaviour, RegistrationBehaviour)
871
+ if behaviour != RegistrationBehaviour.ALLOW:
872
+ return behaviour
873
+
874
+ return RegistrationBehaviour.ALLOW
875
+
876
+ @trace
877
+ async def check_media_file_for_spam(
878
+ self, file_wrapper: ReadableFileWrapper, file_info: FileInfo
879
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
880
+ """Checks if a piece of newly uploaded media should be blocked.
881
+
882
+ This will be called for local uploads, downloads of remote media, each
883
+ thumbnail generated for those, and web pages/images used for URL
884
+ previews.
885
+
886
+ Note that care should be taken to not do blocking IO operations in the
887
+ main thread. For example, to get the contents of a file a module
888
+ should do::
889
+
890
+ async def check_media_file_for_spam(
891
+ self, file: ReadableFileWrapper, file_info: FileInfo
892
+ ) -> Codes | Literal["NOT_SPAM"]:
893
+ buffer = BytesIO()
894
+ await file.write_chunks_to(buffer.write)
895
+
896
+ if buffer.getvalue() == b"Hello World":
897
+ return synapse.module_api.NOT_SPAM
898
+
899
+ return Codes.FORBIDDEN
900
+
901
+
902
+ Args:
903
+ file: An object that allows reading the contents of the media.
904
+ file_info: Metadata about the file.
905
+ """
906
+
907
+ for callback in self._check_media_file_for_spam_callbacks:
908
+ with Measure(
909
+ self.clock,
910
+ name=f"{callback.__module__}.{callback.__qualname__}",
911
+ server_name=self.server_name,
912
+ ):
913
+ res = await delay_cancellation(callback(file_wrapper, file_info))
914
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
915
+ if res is False or res is self.NOT_SPAM:
916
+ continue
917
+ elif res is True:
918
+ return synapse.api.errors.Codes.FORBIDDEN, {}
919
+ elif isinstance(res, synapse.api.errors.Codes):
920
+ return res, {}
921
+ elif (
922
+ isinstance(res, tuple)
923
+ and len(res) == 2
924
+ and isinstance(res[0], synapse.api.errors.Codes)
925
+ and isinstance(res[1], dict)
926
+ ):
927
+ return res
928
+ else:
929
+ logger.warning(
930
+ "Module returned invalid value, rejecting media file as spam"
931
+ )
932
+ return synapse.api.errors.Codes.FORBIDDEN, {}
933
+
934
+ return self.NOT_SPAM
935
+
936
+ async def check_login_for_spam(
937
+ self,
938
+ user_id: str,
939
+ device_id: str | None,
940
+ initial_display_name: str | None,
941
+ request_info: Collection[tuple[str | None, str]],
942
+ auth_provider_id: str | None = None,
943
+ ) -> tuple[Codes, dict] | Literal["NOT_SPAM"]:
944
+ """Checks if we should allow the given registration request.
945
+
946
+ Args:
947
+ user_id: The request user ID
948
+ request_info: List of tuples of user agent and IP that
949
+ were used during the registration process.
950
+ auth_provider_id: The SSO IdP the user used, e.g "oidc", "saml",
951
+ "cas". If any. Note this does not include users registered
952
+ via a password provider.
953
+
954
+ Returns:
955
+ Enum for how the request should be handled
956
+ """
957
+
958
+ for callback in self._check_login_for_spam_callbacks:
959
+ with Measure(
960
+ self.clock,
961
+ name=f"{callback.__module__}.{callback.__qualname__}",
962
+ server_name=self.server_name,
963
+ ):
964
+ res = await delay_cancellation(
965
+ callback(
966
+ user_id,
967
+ device_id,
968
+ initial_display_name,
969
+ request_info,
970
+ auth_provider_id,
971
+ )
972
+ )
973
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
974
+ if res is self.NOT_SPAM:
975
+ continue
976
+ elif isinstance(res, synapse.api.errors.Codes):
977
+ return res, {}
978
+ elif (
979
+ isinstance(res, tuple)
980
+ and len(res) == 2
981
+ and isinstance(res[0], synapse.api.errors.Codes)
982
+ and isinstance(res[1], dict)
983
+ ):
984
+ return res
985
+ else:
986
+ logger.warning(
987
+ "Module returned invalid value, rejecting login as spam"
988
+ )
989
+ return synapse.api.errors.Codes.FORBIDDEN, {}
990
+
991
+ return self.NOT_SPAM