matrix-synapse 1.142.0rc3__cp314-abi3-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

Files changed (1057) hide show
  1. matrix_synapse-1.142.0rc3.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.142.0rc3.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.142.0rc3.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.142.0rc3.dist-info/METADATA +375 -0
  5. matrix_synapse-1.142.0rc3.dist-info/RECORD +1057 -0
  6. matrix_synapse-1.142.0rc3.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.142.0rc3.dist-info/entry_points.txt +14 -0
  8. matrix_synapse.libs/libgcc_s-2d945d6c.so.1 +0 -0
  9. synapse/__init__.py +97 -0
  10. synapse/_scripts/__init__.py +0 -0
  11. synapse/_scripts/export_signing_key.py +109 -0
  12. synapse/_scripts/generate_config.py +83 -0
  13. synapse/_scripts/generate_log_config.py +56 -0
  14. synapse/_scripts/generate_signing_key.py +55 -0
  15. synapse/_scripts/generate_workers_map.py +318 -0
  16. synapse/_scripts/hash_password.py +95 -0
  17. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  18. synapse/_scripts/register_new_matrix_user.py +374 -0
  19. synapse/_scripts/review_recent_signups.py +212 -0
  20. synapse/_scripts/synapse_port_db.py +1603 -0
  21. synapse/_scripts/synctl.py +365 -0
  22. synapse/_scripts/update_synapse_database.py +130 -0
  23. synapse/api/__init__.py +20 -0
  24. synapse/api/auth/__init__.py +207 -0
  25. synapse/api/auth/base.py +406 -0
  26. synapse/api/auth/internal.py +299 -0
  27. synapse/api/auth/mas.py +457 -0
  28. synapse/api/auth/msc3861_delegated.py +617 -0
  29. synapse/api/auth_blocking.py +144 -0
  30. synapse/api/constants.py +362 -0
  31. synapse/api/errors.py +907 -0
  32. synapse/api/filtering.py +539 -0
  33. synapse/api/presence.py +104 -0
  34. synapse/api/ratelimiting.py +482 -0
  35. synapse/api/room_versions.py +535 -0
  36. synapse/api/urls.py +119 -0
  37. synapse/app/__init__.py +60 -0
  38. synapse/app/_base.py +866 -0
  39. synapse/app/admin_cmd.py +388 -0
  40. synapse/app/appservice.py +30 -0
  41. synapse/app/client_reader.py +30 -0
  42. synapse/app/complement_fork_starter.py +206 -0
  43. synapse/app/event_creator.py +29 -0
  44. synapse/app/federation_reader.py +30 -0
  45. synapse/app/federation_sender.py +30 -0
  46. synapse/app/frontend_proxy.py +30 -0
  47. synapse/app/generic_worker.py +475 -0
  48. synapse/app/homeserver.py +504 -0
  49. synapse/app/media_repository.py +30 -0
  50. synapse/app/phone_stats_home.py +296 -0
  51. synapse/app/pusher.py +30 -0
  52. synapse/app/synchrotron.py +30 -0
  53. synapse/app/user_dir.py +31 -0
  54. synapse/appservice/__init__.py +461 -0
  55. synapse/appservice/api.py +569 -0
  56. synapse/appservice/scheduler.py +567 -0
  57. synapse/config/__init__.py +27 -0
  58. synapse/config/__main__.py +62 -0
  59. synapse/config/_base.py +1108 -0
  60. synapse/config/_base.pyi +217 -0
  61. synapse/config/_util.py +99 -0
  62. synapse/config/account_validity.py +116 -0
  63. synapse/config/api.py +141 -0
  64. synapse/config/appservice.py +210 -0
  65. synapse/config/auth.py +80 -0
  66. synapse/config/auto_accept_invites.py +43 -0
  67. synapse/config/background_updates.py +44 -0
  68. synapse/config/cache.py +231 -0
  69. synapse/config/captcha.py +90 -0
  70. synapse/config/cas.py +116 -0
  71. synapse/config/consent.py +73 -0
  72. synapse/config/database.py +184 -0
  73. synapse/config/emailconfig.py +367 -0
  74. synapse/config/experimental.py +595 -0
  75. synapse/config/federation.py +114 -0
  76. synapse/config/homeserver.py +141 -0
  77. synapse/config/jwt.py +55 -0
  78. synapse/config/key.py +447 -0
  79. synapse/config/logger.py +390 -0
  80. synapse/config/mas.py +191 -0
  81. synapse/config/matrixrtc.py +66 -0
  82. synapse/config/metrics.py +84 -0
  83. synapse/config/modules.py +40 -0
  84. synapse/config/oembed.py +185 -0
  85. synapse/config/oidc.py +509 -0
  86. synapse/config/password_auth_providers.py +82 -0
  87. synapse/config/push.py +64 -0
  88. synapse/config/ratelimiting.py +254 -0
  89. synapse/config/redis.py +74 -0
  90. synapse/config/registration.py +296 -0
  91. synapse/config/repository.py +311 -0
  92. synapse/config/retention.py +162 -0
  93. synapse/config/room.py +88 -0
  94. synapse/config/room_directory.py +165 -0
  95. synapse/config/saml2.py +251 -0
  96. synapse/config/server.py +1170 -0
  97. synapse/config/server_notices.py +84 -0
  98. synapse/config/spam_checker.py +66 -0
  99. synapse/config/sso.py +121 -0
  100. synapse/config/stats.py +54 -0
  101. synapse/config/third_party_event_rules.py +40 -0
  102. synapse/config/tls.py +192 -0
  103. synapse/config/tracer.py +71 -0
  104. synapse/config/user_directory.py +47 -0
  105. synapse/config/user_types.py +44 -0
  106. synapse/config/voip.py +59 -0
  107. synapse/config/workers.py +642 -0
  108. synapse/crypto/__init__.py +20 -0
  109. synapse/crypto/context_factory.py +278 -0
  110. synapse/crypto/event_signing.py +194 -0
  111. synapse/crypto/keyring.py +931 -0
  112. synapse/event_auth.py +1266 -0
  113. synapse/events/__init__.py +668 -0
  114. synapse/events/auto_accept_invites.py +216 -0
  115. synapse/events/builder.py +387 -0
  116. synapse/events/presence_router.py +245 -0
  117. synapse/events/snapshot.py +559 -0
  118. synapse/events/utils.py +928 -0
  119. synapse/events/validator.py +305 -0
  120. synapse/federation/__init__.py +22 -0
  121. synapse/federation/federation_base.py +383 -0
  122. synapse/federation/federation_client.py +2134 -0
  123. synapse/federation/federation_server.py +1544 -0
  124. synapse/federation/persistence.py +71 -0
  125. synapse/federation/send_queue.py +532 -0
  126. synapse/federation/sender/__init__.py +1165 -0
  127. synapse/federation/sender/per_destination_queue.py +884 -0
  128. synapse/federation/sender/transaction_manager.py +210 -0
  129. synapse/federation/transport/__init__.py +28 -0
  130. synapse/federation/transport/client.py +1201 -0
  131. synapse/federation/transport/server/__init__.py +334 -0
  132. synapse/federation/transport/server/_base.py +429 -0
  133. synapse/federation/transport/server/federation.py +912 -0
  134. synapse/federation/units.py +133 -0
  135. synapse/handlers/__init__.py +20 -0
  136. synapse/handlers/account.py +162 -0
  137. synapse/handlers/account_data.py +362 -0
  138. synapse/handlers/account_validity.py +361 -0
  139. synapse/handlers/admin.py +618 -0
  140. synapse/handlers/appservice.py +991 -0
  141. synapse/handlers/auth.py +2494 -0
  142. synapse/handlers/cas.py +413 -0
  143. synapse/handlers/deactivate_account.py +363 -0
  144. synapse/handlers/delayed_events.py +635 -0
  145. synapse/handlers/device.py +1873 -0
  146. synapse/handlers/devicemessage.py +399 -0
  147. synapse/handlers/directory.py +554 -0
  148. synapse/handlers/e2e_keys.py +1834 -0
  149. synapse/handlers/e2e_room_keys.py +455 -0
  150. synapse/handlers/event_auth.py +390 -0
  151. synapse/handlers/events.py +201 -0
  152. synapse/handlers/federation.py +2043 -0
  153. synapse/handlers/federation_event.py +2420 -0
  154. synapse/handlers/identity.py +812 -0
  155. synapse/handlers/initial_sync.py +528 -0
  156. synapse/handlers/jwt.py +120 -0
  157. synapse/handlers/message.py +2347 -0
  158. synapse/handlers/oidc.py +1803 -0
  159. synapse/handlers/pagination.py +768 -0
  160. synapse/handlers/password_policy.py +102 -0
  161. synapse/handlers/presence.py +2638 -0
  162. synapse/handlers/profile.py +655 -0
  163. synapse/handlers/push_rules.py +164 -0
  164. synapse/handlers/read_marker.py +79 -0
  165. synapse/handlers/receipts.py +351 -0
  166. synapse/handlers/register.py +1060 -0
  167. synapse/handlers/relations.py +624 -0
  168. synapse/handlers/reports.py +98 -0
  169. synapse/handlers/room.py +2447 -0
  170. synapse/handlers/room_list.py +632 -0
  171. synapse/handlers/room_member.py +2365 -0
  172. synapse/handlers/room_member_worker.py +146 -0
  173. synapse/handlers/room_policy.py +186 -0
  174. synapse/handlers/room_summary.py +1057 -0
  175. synapse/handlers/saml.py +524 -0
  176. synapse/handlers/search.py +723 -0
  177. synapse/handlers/send_email.py +209 -0
  178. synapse/handlers/set_password.py +71 -0
  179. synapse/handlers/sliding_sync/__init__.py +1701 -0
  180. synapse/handlers/sliding_sync/extensions.py +970 -0
  181. synapse/handlers/sliding_sync/room_lists.py +2266 -0
  182. synapse/handlers/sliding_sync/store.py +128 -0
  183. synapse/handlers/sso.py +1292 -0
  184. synapse/handlers/state_deltas.py +82 -0
  185. synapse/handlers/stats.py +322 -0
  186. synapse/handlers/sync.py +3109 -0
  187. synapse/handlers/thread_subscriptions.py +190 -0
  188. synapse/handlers/typing.py +606 -0
  189. synapse/handlers/ui_auth/__init__.py +48 -0
  190. synapse/handlers/ui_auth/checkers.py +332 -0
  191. synapse/handlers/user_directory.py +783 -0
  192. synapse/handlers/worker_lock.py +365 -0
  193. synapse/http/__init__.py +106 -0
  194. synapse/http/additional_resource.py +62 -0
  195. synapse/http/client.py +1360 -0
  196. synapse/http/connectproxyclient.py +309 -0
  197. synapse/http/federation/__init__.py +19 -0
  198. synapse/http/federation/matrix_federation_agent.py +490 -0
  199. synapse/http/federation/srv_resolver.py +196 -0
  200. synapse/http/federation/well_known_resolver.py +367 -0
  201. synapse/http/matrixfederationclient.py +1875 -0
  202. synapse/http/proxy.py +290 -0
  203. synapse/http/proxyagent.py +497 -0
  204. synapse/http/replicationagent.py +203 -0
  205. synapse/http/request_metrics.py +309 -0
  206. synapse/http/server.py +1114 -0
  207. synapse/http/servlet.py +1019 -0
  208. synapse/http/site.py +825 -0
  209. synapse/http/types.py +27 -0
  210. synapse/logging/__init__.py +31 -0
  211. synapse/logging/_remote.py +261 -0
  212. synapse/logging/_terse_json.py +95 -0
  213. synapse/logging/context.py +1211 -0
  214. synapse/logging/formatter.py +63 -0
  215. synapse/logging/handlers.py +99 -0
  216. synapse/logging/loggers.py +25 -0
  217. synapse/logging/opentracing.py +1132 -0
  218. synapse/logging/scopecontextmanager.py +161 -0
  219. synapse/media/_base.py +827 -0
  220. synapse/media/filepath.py +417 -0
  221. synapse/media/media_repository.py +1580 -0
  222. synapse/media/media_storage.py +704 -0
  223. synapse/media/oembed.py +277 -0
  224. synapse/media/preview_html.py +559 -0
  225. synapse/media/storage_provider.py +195 -0
  226. synapse/media/thumbnailer.py +833 -0
  227. synapse/media/url_previewer.py +875 -0
  228. synapse/metrics/__init__.py +754 -0
  229. synapse/metrics/_gc.py +219 -0
  230. synapse/metrics/_reactor_metrics.py +171 -0
  231. synapse/metrics/_types.py +38 -0
  232. synapse/metrics/background_process_metrics.py +556 -0
  233. synapse/metrics/common_usage_metrics.py +94 -0
  234. synapse/metrics/jemalloc.py +248 -0
  235. synapse/module_api/__init__.py +2154 -0
  236. synapse/module_api/callbacks/__init__.py +50 -0
  237. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  238. synapse/module_api/callbacks/media_repository_callbacks.py +160 -0
  239. synapse/module_api/callbacks/ratelimit_callbacks.py +79 -0
  240. synapse/module_api/callbacks/spamchecker_callbacks.py +1113 -0
  241. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +599 -0
  242. synapse/module_api/errors.py +42 -0
  243. synapse/notifier.py +972 -0
  244. synapse/push/__init__.py +212 -0
  245. synapse/push/bulk_push_rule_evaluator.py +637 -0
  246. synapse/push/clientformat.py +126 -0
  247. synapse/push/emailpusher.py +333 -0
  248. synapse/push/httppusher.py +564 -0
  249. synapse/push/mailer.py +1012 -0
  250. synapse/push/presentable_names.py +216 -0
  251. synapse/push/push_tools.py +114 -0
  252. synapse/push/push_types.py +141 -0
  253. synapse/push/pusher.py +87 -0
  254. synapse/push/pusherpool.py +501 -0
  255. synapse/push/rulekinds.py +33 -0
  256. synapse/py.typed +0 -0
  257. synapse/replication/__init__.py +20 -0
  258. synapse/replication/http/__init__.py +68 -0
  259. synapse/replication/http/_base.py +468 -0
  260. synapse/replication/http/account_data.py +297 -0
  261. synapse/replication/http/deactivate_account.py +81 -0
  262. synapse/replication/http/delayed_events.py +62 -0
  263. synapse/replication/http/devices.py +254 -0
  264. synapse/replication/http/federation.py +334 -0
  265. synapse/replication/http/login.py +106 -0
  266. synapse/replication/http/membership.py +364 -0
  267. synapse/replication/http/presence.py +133 -0
  268. synapse/replication/http/push.py +156 -0
  269. synapse/replication/http/register.py +172 -0
  270. synapse/replication/http/send_events.py +182 -0
  271. synapse/replication/http/state.py +82 -0
  272. synapse/replication/http/streams.py +101 -0
  273. synapse/replication/tcp/__init__.py +56 -0
  274. synapse/replication/tcp/client.py +552 -0
  275. synapse/replication/tcp/commands.py +569 -0
  276. synapse/replication/tcp/context.py +41 -0
  277. synapse/replication/tcp/external_cache.py +156 -0
  278. synapse/replication/tcp/handler.py +942 -0
  279. synapse/replication/tcp/protocol.py +608 -0
  280. synapse/replication/tcp/redis.py +509 -0
  281. synapse/replication/tcp/resource.py +348 -0
  282. synapse/replication/tcp/streams/__init__.py +96 -0
  283. synapse/replication/tcp/streams/_base.py +766 -0
  284. synapse/replication/tcp/streams/events.py +287 -0
  285. synapse/replication/tcp/streams/federation.py +92 -0
  286. synapse/replication/tcp/streams/partial_state.py +80 -0
  287. synapse/res/providers.json +29 -0
  288. synapse/res/templates/_base.html +29 -0
  289. synapse/res/templates/account_previously_renewed.html +6 -0
  290. synapse/res/templates/account_renewed.html +6 -0
  291. synapse/res/templates/add_threepid.html +8 -0
  292. synapse/res/templates/add_threepid.txt +6 -0
  293. synapse/res/templates/add_threepid_failure.html +7 -0
  294. synapse/res/templates/add_threepid_success.html +6 -0
  295. synapse/res/templates/already_in_use.html +12 -0
  296. synapse/res/templates/already_in_use.txt +10 -0
  297. synapse/res/templates/auth_success.html +21 -0
  298. synapse/res/templates/invalid_token.html +6 -0
  299. synapse/res/templates/mail-Element.css +7 -0
  300. synapse/res/templates/mail-Vector.css +7 -0
  301. synapse/res/templates/mail-expiry.css +4 -0
  302. synapse/res/templates/mail.css +156 -0
  303. synapse/res/templates/notice_expiry.html +46 -0
  304. synapse/res/templates/notice_expiry.txt +7 -0
  305. synapse/res/templates/notif.html +51 -0
  306. synapse/res/templates/notif.txt +22 -0
  307. synapse/res/templates/notif_mail.html +59 -0
  308. synapse/res/templates/notif_mail.txt +10 -0
  309. synapse/res/templates/password_reset.html +10 -0
  310. synapse/res/templates/password_reset.txt +7 -0
  311. synapse/res/templates/password_reset_confirmation.html +15 -0
  312. synapse/res/templates/password_reset_failure.html +7 -0
  313. synapse/res/templates/password_reset_success.html +6 -0
  314. synapse/res/templates/recaptcha.html +42 -0
  315. synapse/res/templates/registration.html +12 -0
  316. synapse/res/templates/registration.txt +10 -0
  317. synapse/res/templates/registration_failure.html +6 -0
  318. synapse/res/templates/registration_success.html +6 -0
  319. synapse/res/templates/registration_token.html +18 -0
  320. synapse/res/templates/room.html +33 -0
  321. synapse/res/templates/room.txt +9 -0
  322. synapse/res/templates/sso.css +129 -0
  323. synapse/res/templates/sso_account_deactivated.html +25 -0
  324. synapse/res/templates/sso_auth_account_details.html +186 -0
  325. synapse/res/templates/sso_auth_account_details.js +116 -0
  326. synapse/res/templates/sso_auth_bad_user.html +26 -0
  327. synapse/res/templates/sso_auth_confirm.html +27 -0
  328. synapse/res/templates/sso_auth_success.html +26 -0
  329. synapse/res/templates/sso_error.html +71 -0
  330. synapse/res/templates/sso_footer.html +19 -0
  331. synapse/res/templates/sso_login_idp_picker.html +60 -0
  332. synapse/res/templates/sso_new_user_consent.html +30 -0
  333. synapse/res/templates/sso_partial_profile.html +19 -0
  334. synapse/res/templates/sso_redirect_confirm.html +39 -0
  335. synapse/res/templates/style.css +33 -0
  336. synapse/res/templates/terms.html +27 -0
  337. synapse/rest/__init__.py +197 -0
  338. synapse/rest/admin/__init__.py +390 -0
  339. synapse/rest/admin/_base.py +72 -0
  340. synapse/rest/admin/background_updates.py +171 -0
  341. synapse/rest/admin/devices.py +221 -0
  342. synapse/rest/admin/event_reports.py +173 -0
  343. synapse/rest/admin/events.py +69 -0
  344. synapse/rest/admin/experimental_features.py +137 -0
  345. synapse/rest/admin/federation.py +243 -0
  346. synapse/rest/admin/media.py +540 -0
  347. synapse/rest/admin/registration_tokens.py +358 -0
  348. synapse/rest/admin/rooms.py +1061 -0
  349. synapse/rest/admin/scheduled_tasks.py +70 -0
  350. synapse/rest/admin/server_notice_servlet.py +132 -0
  351. synapse/rest/admin/statistics.py +132 -0
  352. synapse/rest/admin/username_available.py +58 -0
  353. synapse/rest/admin/users.py +1608 -0
  354. synapse/rest/client/__init__.py +20 -0
  355. synapse/rest/client/_base.py +113 -0
  356. synapse/rest/client/account.py +930 -0
  357. synapse/rest/client/account_data.py +319 -0
  358. synapse/rest/client/account_validity.py +103 -0
  359. synapse/rest/client/appservice_ping.py +125 -0
  360. synapse/rest/client/auth.py +218 -0
  361. synapse/rest/client/auth_metadata.py +122 -0
  362. synapse/rest/client/capabilities.py +121 -0
  363. synapse/rest/client/delayed_events.py +111 -0
  364. synapse/rest/client/devices.py +587 -0
  365. synapse/rest/client/directory.py +211 -0
  366. synapse/rest/client/events.py +116 -0
  367. synapse/rest/client/filter.py +112 -0
  368. synapse/rest/client/initial_sync.py +65 -0
  369. synapse/rest/client/keys.py +678 -0
  370. synapse/rest/client/knock.py +104 -0
  371. synapse/rest/client/login.py +754 -0
  372. synapse/rest/client/login_token_request.py +127 -0
  373. synapse/rest/client/logout.py +93 -0
  374. synapse/rest/client/matrixrtc.py +52 -0
  375. synapse/rest/client/media.py +286 -0
  376. synapse/rest/client/mutual_rooms.py +93 -0
  377. synapse/rest/client/notifications.py +137 -0
  378. synapse/rest/client/openid.py +109 -0
  379. synapse/rest/client/password_policy.py +69 -0
  380. synapse/rest/client/presence.py +131 -0
  381. synapse/rest/client/profile.py +291 -0
  382. synapse/rest/client/push_rule.py +331 -0
  383. synapse/rest/client/pusher.py +181 -0
  384. synapse/rest/client/read_marker.py +104 -0
  385. synapse/rest/client/receipts.py +165 -0
  386. synapse/rest/client/register.py +1067 -0
  387. synapse/rest/client/relations.py +138 -0
  388. synapse/rest/client/rendezvous.py +76 -0
  389. synapse/rest/client/reporting.py +207 -0
  390. synapse/rest/client/room.py +1669 -0
  391. synapse/rest/client/room_keys.py +426 -0
  392. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  393. synapse/rest/client/sendtodevice.py +85 -0
  394. synapse/rest/client/sync.py +1131 -0
  395. synapse/rest/client/tags.py +129 -0
  396. synapse/rest/client/thirdparty.py +130 -0
  397. synapse/rest/client/thread_subscriptions.py +247 -0
  398. synapse/rest/client/tokenrefresh.py +52 -0
  399. synapse/rest/client/transactions.py +149 -0
  400. synapse/rest/client/user_directory.py +90 -0
  401. synapse/rest/client/versions.py +191 -0
  402. synapse/rest/client/voip.py +88 -0
  403. synapse/rest/consent/__init__.py +0 -0
  404. synapse/rest/consent/consent_resource.py +210 -0
  405. synapse/rest/health.py +38 -0
  406. synapse/rest/key/__init__.py +20 -0
  407. synapse/rest/key/v2/__init__.py +40 -0
  408. synapse/rest/key/v2/local_key_resource.py +125 -0
  409. synapse/rest/key/v2/remote_key_resource.py +302 -0
  410. synapse/rest/media/__init__.py +0 -0
  411. synapse/rest/media/config_resource.py +53 -0
  412. synapse/rest/media/create_resource.py +90 -0
  413. synapse/rest/media/download_resource.py +110 -0
  414. synapse/rest/media/media_repository_resource.py +113 -0
  415. synapse/rest/media/preview_url_resource.py +77 -0
  416. synapse/rest/media/thumbnail_resource.py +142 -0
  417. synapse/rest/media/upload_resource.py +187 -0
  418. synapse/rest/media/v1/__init__.py +39 -0
  419. synapse/rest/media/v1/_base.py +23 -0
  420. synapse/rest/media/v1/media_storage.py +23 -0
  421. synapse/rest/media/v1/storage_provider.py +23 -0
  422. synapse/rest/synapse/__init__.py +20 -0
  423. synapse/rest/synapse/client/__init__.py +93 -0
  424. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  425. synapse/rest/synapse/client/jwks.py +77 -0
  426. synapse/rest/synapse/client/new_user_consent.py +115 -0
  427. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  428. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  429. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  430. synapse/rest/synapse/client/password_reset.py +129 -0
  431. synapse/rest/synapse/client/pick_idp.py +107 -0
  432. synapse/rest/synapse/client/pick_username.py +153 -0
  433. synapse/rest/synapse/client/rendezvous.py +58 -0
  434. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  435. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  436. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  437. synapse/rest/synapse/client/sso_register.py +56 -0
  438. synapse/rest/synapse/client/unsubscribe.py +88 -0
  439. synapse/rest/synapse/mas/__init__.py +71 -0
  440. synapse/rest/synapse/mas/_base.py +55 -0
  441. synapse/rest/synapse/mas/devices.py +239 -0
  442. synapse/rest/synapse/mas/users.py +469 -0
  443. synapse/rest/well_known.py +148 -0
  444. synapse/server.py +1258 -0
  445. synapse/server_notices/__init__.py +0 -0
  446. synapse/server_notices/consent_server_notices.py +136 -0
  447. synapse/server_notices/resource_limits_server_notices.py +215 -0
  448. synapse/server_notices/server_notices_manager.py +388 -0
  449. synapse/server_notices/server_notices_sender.py +67 -0
  450. synapse/server_notices/worker_server_notices_sender.py +46 -0
  451. synapse/spam_checker_api/__init__.py +31 -0
  452. synapse/state/__init__.py +1022 -0
  453. synapse/state/v1.py +370 -0
  454. synapse/state/v2.py +985 -0
  455. synapse/static/client/login/index.html +47 -0
  456. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  457. synapse/static/client/login/js/login.js +291 -0
  458. synapse/static/client/login/spinner.gif +0 -0
  459. synapse/static/client/login/style.css +79 -0
  460. synapse/static/index.html +63 -0
  461. synapse/storage/__init__.py +43 -0
  462. synapse/storage/_base.py +245 -0
  463. synapse/storage/admin_client_config.py +26 -0
  464. synapse/storage/background_updates.py +1189 -0
  465. synapse/storage/controllers/__init__.py +57 -0
  466. synapse/storage/controllers/persist_events.py +1239 -0
  467. synapse/storage/controllers/purge_events.py +456 -0
  468. synapse/storage/controllers/state.py +954 -0
  469. synapse/storage/controllers/stats.py +119 -0
  470. synapse/storage/database.py +2720 -0
  471. synapse/storage/databases/__init__.py +175 -0
  472. synapse/storage/databases/main/__init__.py +424 -0
  473. synapse/storage/databases/main/account_data.py +1060 -0
  474. synapse/storage/databases/main/appservice.py +473 -0
  475. synapse/storage/databases/main/cache.py +911 -0
  476. synapse/storage/databases/main/censor_events.py +225 -0
  477. synapse/storage/databases/main/client_ips.py +817 -0
  478. synapse/storage/databases/main/delayed_events.py +560 -0
  479. synapse/storage/databases/main/deviceinbox.py +1272 -0
  480. synapse/storage/databases/main/devices.py +2581 -0
  481. synapse/storage/databases/main/directory.py +212 -0
  482. synapse/storage/databases/main/e2e_room_keys.py +690 -0
  483. synapse/storage/databases/main/end_to_end_keys.py +1896 -0
  484. synapse/storage/databases/main/event_federation.py +2509 -0
  485. synapse/storage/databases/main/event_push_actions.py +1937 -0
  486. synapse/storage/databases/main/events.py +3746 -0
  487. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  488. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  489. synapse/storage/databases/main/events_worker.py +2784 -0
  490. synapse/storage/databases/main/experimental_features.py +130 -0
  491. synapse/storage/databases/main/filtering.py +231 -0
  492. synapse/storage/databases/main/keys.py +291 -0
  493. synapse/storage/databases/main/lock.py +553 -0
  494. synapse/storage/databases/main/media_repository.py +1070 -0
  495. synapse/storage/databases/main/metrics.py +460 -0
  496. synapse/storage/databases/main/monthly_active_users.py +443 -0
  497. synapse/storage/databases/main/openid.py +61 -0
  498. synapse/storage/databases/main/presence.py +511 -0
  499. synapse/storage/databases/main/profile.py +541 -0
  500. synapse/storage/databases/main/purge_events.py +511 -0
  501. synapse/storage/databases/main/push_rule.py +972 -0
  502. synapse/storage/databases/main/pusher.py +794 -0
  503. synapse/storage/databases/main/receipts.py +1342 -0
  504. synapse/storage/databases/main/registration.py +3076 -0
  505. synapse/storage/databases/main/rejections.py +38 -0
  506. synapse/storage/databases/main/relations.py +1118 -0
  507. synapse/storage/databases/main/room.py +2781 -0
  508. synapse/storage/databases/main/roommember.py +2112 -0
  509. synapse/storage/databases/main/search.py +941 -0
  510. synapse/storage/databases/main/session.py +151 -0
  511. synapse/storage/databases/main/signatures.py +94 -0
  512. synapse/storage/databases/main/sliding_sync.py +603 -0
  513. synapse/storage/databases/main/state.py +1006 -0
  514. synapse/storage/databases/main/state_deltas.py +329 -0
  515. synapse/storage/databases/main/stats.py +791 -0
  516. synapse/storage/databases/main/stream.py +2580 -0
  517. synapse/storage/databases/main/tags.py +360 -0
  518. synapse/storage/databases/main/task_scheduler.py +225 -0
  519. synapse/storage/databases/main/thread_subscriptions.py +591 -0
  520. synapse/storage/databases/main/transactions.py +681 -0
  521. synapse/storage/databases/main/ui_auth.py +420 -0
  522. synapse/storage/databases/main/user_directory.py +1331 -0
  523. synapse/storage/databases/main/user_erasure_store.py +117 -0
  524. synapse/storage/databases/state/__init__.py +22 -0
  525. synapse/storage/databases/state/bg_updates.py +499 -0
  526. synapse/storage/databases/state/deletion.py +558 -0
  527. synapse/storage/databases/state/store.py +949 -0
  528. synapse/storage/engines/__init__.py +70 -0
  529. synapse/storage/engines/_base.py +154 -0
  530. synapse/storage/engines/postgres.py +261 -0
  531. synapse/storage/engines/sqlite.py +199 -0
  532. synapse/storage/invite_rule.py +112 -0
  533. synapse/storage/keys.py +40 -0
  534. synapse/storage/prepare_database.py +731 -0
  535. synapse/storage/push_rule.py +28 -0
  536. synapse/storage/roommember.py +89 -0
  537. synapse/storage/schema/README.md +4 -0
  538. synapse/storage/schema/__init__.py +182 -0
  539. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  540. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  541. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  543. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  544. synapse/storage/schema/common/schema_version.sql +60 -0
  545. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  546. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  547. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  548. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  549. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  550. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  551. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  552. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  553. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  554. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  555. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  556. synapse/storage/schema/main/delta/16/users.sql +56 -0
  557. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  558. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  559. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  560. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  561. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  562. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  563. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  564. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  565. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  566. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  567. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  568. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  569. synapse/storage/schema/main/delta/25/fts.py +81 -0
  570. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  571. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  572. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  573. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  574. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  575. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  576. synapse/storage/schema/main/delta/27/ts.py +61 -0
  577. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  578. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  579. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  580. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  581. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  582. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  583. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  584. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  585. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  586. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  587. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  588. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  589. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  590. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  591. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  592. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  593. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  594. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  595. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  596. synapse/storage/schema/main/delta/32/events.sql +35 -0
  597. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  598. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  599. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  600. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  601. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  602. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  604. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  605. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  606. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  607. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  608. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  609. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  610. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  611. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  612. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  613. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  614. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  615. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  616. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  617. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  618. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  619. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  620. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  621. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  622. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  623. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  624. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  625. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  626. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  627. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  628. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  629. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  630. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  631. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  632. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  633. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  634. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  635. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  636. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  637. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  638. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  639. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  640. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  641. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  642. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  643. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  644. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  645. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  646. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  647. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  648. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  649. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  650. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  651. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  652. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  653. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  654. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  655. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  656. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  657. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  658. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  659. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  660. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  661. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  662. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  663. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  664. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  665. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  666. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  667. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  668. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  669. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  670. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  671. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  672. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  673. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  674. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  675. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  676. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  678. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  679. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  680. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  681. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  682. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  683. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  684. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  685. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  686. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  687. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  688. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  689. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  690. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  691. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  692. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  694. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  695. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  697. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  698. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  699. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  700. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  701. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  702. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  703. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  704. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  706. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  707. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  708. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  712. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  713. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  714. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  715. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  716. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  717. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  718. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  719. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  720. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  721. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  722. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  723. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  724. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  725. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  726. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  731. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  732. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  733. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  734. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  735. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  737. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  738. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  740. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  741. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  742. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  743. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  744. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  745. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  746. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  747. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  748. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  749. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  751. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  752. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  753. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  754. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  755. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  756. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  757. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  758. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  759. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  760. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  761. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  762. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  763. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  764. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  765. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  766. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  767. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  768. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  769. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  771. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  772. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  773. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  774. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  776. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  777. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  778. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  781. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  782. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  783. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  784. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  785. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  786. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  787. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  788. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  789. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  791. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  792. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  793. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  794. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  795. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  796. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  797. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  798. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  799. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  800. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  801. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  802. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  803. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  804. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  805. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  806. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  807. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  809. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  810. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  811. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  812. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  813. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  814. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  815. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  816. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  817. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  818. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  819. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  820. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  821. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  822. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  823. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  824. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  825. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  826. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  827. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  828. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  829. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  830. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  831. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  833. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  834. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  835. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  836. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  837. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  838. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  839. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  840. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  841. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  843. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  844. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  845. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  846. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  847. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  848. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  850. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  851. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  852. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  853. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  854. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  855. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  856. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  857. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  858. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  859. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  860. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  862. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  863. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  865. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  866. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  867. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  868. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  869. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  870. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  871. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  872. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  873. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  874. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  875. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  876. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  877. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  878. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  879. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  880. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  881. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  882. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  884. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  885. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  886. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  887. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  888. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  889. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  890. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  892. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  893. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  894. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  896. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  897. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  898. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  902. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  903. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  904. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  905. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  906. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  907. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  908. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  910. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  911. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  913. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  914. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  915. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  916. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  917. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  918. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  919. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  920. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  921. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  922. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  923. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  924. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  925. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  926. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  927. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  928. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  929. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  930. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  931. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  932. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  933. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  934. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  935. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  936. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  937. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  938. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  939. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  940. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  941. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  942. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  943. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  944. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  947. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  948. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  949. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  950. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  951. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  952. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  954. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  955. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  956. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  958. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  959. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  960. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  961. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  962. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  963. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  964. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  965. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  966. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  968. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +185 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +909 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +92 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +909 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +415 -0
  1007. synapse/types/state.py +635 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +170 -0
  1010. synapse/util/async_helpers.py +1067 -0
  1011. synapse/util/batching_queue.py +202 -0
  1012. synapse/util/caches/__init__.py +300 -0
  1013. synapse/util/caches/cached_call.py +143 -0
  1014. synapse/util/caches/deferred_cache.py +530 -0
  1015. synapse/util/caches/descriptors.py +694 -0
  1016. synapse/util/caches/dictionary_cache.py +350 -0
  1017. synapse/util/caches/expiringcache.py +251 -0
  1018. synapse/util/caches/lrucache.py +977 -0
  1019. synapse/util/caches/response_cache.py +323 -0
  1020. synapse/util/caches/stream_change_cache.py +370 -0
  1021. synapse/util/caches/treecache.py +189 -0
  1022. synapse/util/caches/ttlcache.py +197 -0
  1023. synapse/util/cancellation.py +63 -0
  1024. synapse/util/check_dependencies.py +335 -0
  1025. synapse/util/clock.py +500 -0
  1026. synapse/util/constants.py +22 -0
  1027. synapse/util/daemonize.py +165 -0
  1028. synapse/util/distributor.py +159 -0
  1029. synapse/util/events.py +134 -0
  1030. synapse/util/file_consumer.py +164 -0
  1031. synapse/util/frozenutils.py +57 -0
  1032. synapse/util/gai_resolver.py +180 -0
  1033. synapse/util/hash.py +38 -0
  1034. synapse/util/httpresourcetree.py +108 -0
  1035. synapse/util/iterutils.py +189 -0
  1036. synapse/util/json.py +56 -0
  1037. synapse/util/linked_list.py +156 -0
  1038. synapse/util/logcontext.py +46 -0
  1039. synapse/util/logformatter.py +28 -0
  1040. synapse/util/macaroons.py +325 -0
  1041. synapse/util/manhole.py +191 -0
  1042. synapse/util/metrics.py +340 -0
  1043. synapse/util/module_loader.py +116 -0
  1044. synapse/util/msisdn.py +51 -0
  1045. synapse/util/patch_inline_callbacks.py +250 -0
  1046. synapse/util/pydantic_models.py +56 -0
  1047. synapse/util/ratelimitutils.py +420 -0
  1048. synapse/util/retryutils.py +339 -0
  1049. synapse/util/rlimit.py +42 -0
  1050. synapse/util/rust.py +134 -0
  1051. synapse/util/sentinel.py +21 -0
  1052. synapse/util/stringutils.py +293 -0
  1053. synapse/util/task_scheduler.py +493 -0
  1054. synapse/util/templates.py +126 -0
  1055. synapse/util/threepids.py +123 -0
  1056. synapse/util/wheel_timer.py +112 -0
  1057. synapse/visibility.py +836 -0
@@ -0,0 +1,1113 @@
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
+ Optional,
34
+ Union,
35
+ cast,
36
+ )
37
+
38
+ import synapse
39
+ from synapse.api.errors import Codes
40
+ from synapse.logging.opentracing import trace
41
+ from synapse.media._base import FileInfo
42
+ from synapse.media.media_storage import ReadableFileWrapper
43
+ from synapse.spam_checker_api import RegistrationBehaviour
44
+ from synapse.types import JsonDict, RoomAlias, UserProfile
45
+ from synapse.util.async_helpers import delay_cancellation, maybe_awaitable
46
+ from synapse.util.metrics import Measure
47
+
48
+ if TYPE_CHECKING:
49
+ import synapse.events
50
+ import synapse.server
51
+
52
+ logger = logging.getLogger(__name__)
53
+
54
+ CHECK_EVENT_FOR_SPAM_CALLBACK = Callable[
55
+ ["synapse.events.EventBase"],
56
+ Awaitable[
57
+ Union[
58
+ str,
59
+ Codes,
60
+ # Highly experimental, not officially part of the spamchecker API, may
61
+ # disappear without warning depending on the results of ongoing
62
+ # experiments.
63
+ # Use this to return additional information as part of an error.
64
+ tuple[Codes, JsonDict],
65
+ # Deprecated
66
+ bool,
67
+ ]
68
+ ],
69
+ ]
70
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK = Callable[
71
+ ["synapse.events.EventBase"],
72
+ Awaitable[Union[bool, str]],
73
+ ]
74
+ USER_MAY_JOIN_ROOM_CALLBACK = Callable[
75
+ [str, str, bool],
76
+ Awaitable[
77
+ Union[
78
+ Literal["NOT_SPAM"],
79
+ Codes,
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
+ # Deprecated
86
+ bool,
87
+ ]
88
+ ],
89
+ ]
90
+ USER_MAY_INVITE_CALLBACK = Callable[
91
+ [str, str, str],
92
+ Awaitable[
93
+ Union[
94
+ Literal["NOT_SPAM"],
95
+ Codes,
96
+ # Highly experimental, not officially part of the spamchecker API, may
97
+ # disappear without warning depending on the results of ongoing
98
+ # experiments.
99
+ # Use this to return additional information as part of an error.
100
+ tuple[Codes, JsonDict],
101
+ # Deprecated
102
+ bool,
103
+ ]
104
+ ],
105
+ ]
106
+ FEDERATED_USER_MAY_INVITE_CALLBACK = Callable[
107
+ ["synapse.events.EventBase"],
108
+ Awaitable[
109
+ Union[
110
+ Literal["NOT_SPAM"],
111
+ Codes,
112
+ # Highly experimental, not officially part of the spamchecker API, may
113
+ # disappear without warning depending on the results of ongoing
114
+ # experiments.
115
+ # Use this to return additional information as part of an error.
116
+ tuple[Codes, JsonDict],
117
+ # Deprecated
118
+ bool,
119
+ ]
120
+ ],
121
+ ]
122
+ USER_MAY_SEND_3PID_INVITE_CALLBACK = Callable[
123
+ [str, str, str, str],
124
+ Awaitable[
125
+ Union[
126
+ Literal["NOT_SPAM"],
127
+ Codes,
128
+ # Highly experimental, not officially part of the spamchecker API, may
129
+ # disappear without warning depending on the results of ongoing
130
+ # experiments.
131
+ # Use this to return additional information as part of an error.
132
+ tuple[Codes, JsonDict],
133
+ # Deprecated
134
+ bool,
135
+ ]
136
+ ],
137
+ ]
138
+ USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE = Union[
139
+ Literal["NOT_SPAM"],
140
+ Codes,
141
+ # Highly experimental, not officially part of the spamchecker API, may
142
+ # disappear without warning depending on the results of ongoing
143
+ # experiments.
144
+ # Use this to return additional information as part of an error.
145
+ tuple[Codes, JsonDict],
146
+ # Deprecated
147
+ bool,
148
+ ]
149
+ USER_MAY_CREATE_ROOM_CALLBACK = Union[
150
+ Callable[
151
+ [str, JsonDict],
152
+ Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE],
153
+ ],
154
+ Callable[ # Single argument variant for backwards compatibility
155
+ [str], Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE]
156
+ ],
157
+ ]
158
+ USER_MAY_CREATE_ROOM_ALIAS_CALLBACK = Callable[
159
+ [str, RoomAlias],
160
+ Awaitable[
161
+ Union[
162
+ Literal["NOT_SPAM"],
163
+ Codes,
164
+ # Highly experimental, not officially part of the spamchecker API, may
165
+ # disappear without warning depending on the results of ongoing
166
+ # experiments.
167
+ # Use this to return additional information as part of an error.
168
+ tuple[Codes, JsonDict],
169
+ # Deprecated
170
+ bool,
171
+ ]
172
+ ],
173
+ ]
174
+ USER_MAY_PUBLISH_ROOM_CALLBACK = Callable[
175
+ [str, str],
176
+ Awaitable[
177
+ Union[
178
+ Literal["NOT_SPAM"],
179
+ Codes,
180
+ # Highly experimental, not officially part of the spamchecker API, may
181
+ # disappear without warning depending on the results of ongoing
182
+ # experiments.
183
+ # Use this to return additional information as part of an error.
184
+ tuple[Codes, JsonDict],
185
+ # Deprecated
186
+ bool,
187
+ ]
188
+ ],
189
+ ]
190
+ USER_MAY_SEND_STATE_EVENT_CALLBACK = Callable[
191
+ [str, str, str, str, JsonDict],
192
+ Awaitable[
193
+ Union[
194
+ Literal["NOT_SPAM"],
195
+ Codes,
196
+ # Highly experimental, not officially part of the spamchecker API, may
197
+ # disappear without warning depending on the results of ongoing
198
+ # experiments.
199
+ # Use this to return additional information as part of an error.
200
+ tuple[Codes, JsonDict],
201
+ ]
202
+ ],
203
+ ]
204
+ CHECK_USERNAME_FOR_SPAM_CALLBACK = Union[
205
+ Callable[[UserProfile], Awaitable[bool]],
206
+ Callable[[UserProfile, str], Awaitable[bool]],
207
+ ]
208
+ LEGACY_CHECK_REGISTRATION_FOR_SPAM_CALLBACK = Callable[
209
+ [
210
+ Optional[dict],
211
+ Optional[str],
212
+ Collection[tuple[str, str]],
213
+ ],
214
+ Awaitable[RegistrationBehaviour],
215
+ ]
216
+ CHECK_REGISTRATION_FOR_SPAM_CALLBACK = Callable[
217
+ [
218
+ Optional[dict],
219
+ Optional[str],
220
+ Collection[tuple[str, str]],
221
+ Optional[str],
222
+ ],
223
+ Awaitable[RegistrationBehaviour],
224
+ ]
225
+ CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK = Callable[
226
+ [ReadableFileWrapper, FileInfo],
227
+ Awaitable[
228
+ Union[
229
+ Literal["NOT_SPAM"],
230
+ Codes,
231
+ # Highly experimental, not officially part of the spamchecker API, may
232
+ # disappear without warning depending on the results of ongoing
233
+ # experiments.
234
+ # Use this to return additional information as part of an error.
235
+ tuple[Codes, JsonDict],
236
+ # Deprecated
237
+ bool,
238
+ ]
239
+ ],
240
+ ]
241
+ CHECK_LOGIN_FOR_SPAM_CALLBACK = Callable[
242
+ [
243
+ str,
244
+ Optional[str],
245
+ Optional[str],
246
+ Collection[tuple[Optional[str], str]],
247
+ Optional[str],
248
+ ],
249
+ Awaitable[
250
+ Union[
251
+ Literal["NOT_SPAM"],
252
+ Codes,
253
+ # Highly experimental, not officially part of the spamchecker API, may
254
+ # disappear without warning depending on the results of ongoing
255
+ # experiments.
256
+ # Use this to return additional information as part of an error.
257
+ tuple[Codes, JsonDict],
258
+ ]
259
+ ],
260
+ ]
261
+
262
+
263
+ def load_legacy_spam_checkers(hs: "synapse.server.HomeServer") -> None:
264
+ """Wrapper that loads spam checkers configured using the old configuration, and
265
+ registers the spam checker hooks they implement.
266
+ """
267
+ spam_checkers: list[Any] = []
268
+ api = hs.get_module_api()
269
+ for module, config in hs.config.spamchecker.spam_checkers:
270
+ # Older spam checkers don't accept the `api` argument, so we
271
+ # try and detect support.
272
+ spam_args = inspect.getfullargspec(module)
273
+ if "api" in spam_args.args:
274
+ spam_checkers.append(module(config=config, api=api))
275
+ else:
276
+ spam_checkers.append(module(config=config))
277
+
278
+ # The known spam checker hooks. If a spam checker module implements a method
279
+ # which name appears in this set, we'll want to register it.
280
+ spam_checker_methods = {
281
+ "check_event_for_spam",
282
+ "user_may_invite",
283
+ "federated_user_may_invite",
284
+ "user_may_create_room",
285
+ "user_may_create_room_alias",
286
+ "user_may_publish_room",
287
+ "check_username_for_spam",
288
+ "check_registration_for_spam",
289
+ "check_media_file_for_spam",
290
+ }
291
+
292
+ for spam_checker in spam_checkers:
293
+ # Methods on legacy spam checkers might not be async, so we wrap them around a
294
+ # wrapper that will call maybe_awaitable on the result.
295
+ def async_wrapper(f: Optional[Callable]) -> Optional[Callable[..., Awaitable]]:
296
+ # f might be None if the callback isn't implemented by the module. In this
297
+ # case we don't want to register a callback at all so we return None.
298
+ if f is None:
299
+ return None
300
+
301
+ wrapped_func = f
302
+
303
+ if f.__name__ == "check_registration_for_spam":
304
+ checker_args = inspect.signature(f)
305
+ if len(checker_args.parameters) == 3:
306
+ # Backwards compatibility; some modules might implement a hook that
307
+ # doesn't expect a 4th argument. In this case, wrap it in a function
308
+ # that gives it only 3 arguments and drops the auth_provider_id on
309
+ # the floor.
310
+ def wrapper(
311
+ email_threepid: Optional[dict],
312
+ username: Optional[str],
313
+ request_info: Collection[tuple[str, str]],
314
+ auth_provider_id: Optional[str],
315
+ ) -> Union[Awaitable[RegistrationBehaviour], RegistrationBehaviour]:
316
+ # Assertion required because mypy can't prove we won't
317
+ # change `f` back to `None`. See
318
+ # https://mypy.readthedocs.io/en/latest/common_issues.html#narrowing-and-inner-functions
319
+ assert f is not None
320
+
321
+ return f(
322
+ email_threepid,
323
+ username,
324
+ request_info,
325
+ )
326
+
327
+ wrapped_func = wrapper
328
+ elif len(checker_args.parameters) != 4:
329
+ raise RuntimeError(
330
+ "Bad signature for callback check_registration_for_spam",
331
+ )
332
+
333
+ @functools.wraps(wrapped_func)
334
+ def run(*args: Any, **kwargs: Any) -> Awaitable:
335
+ # Assertion required because mypy can't prove we won't change `f`
336
+ # back to `None`. See
337
+ # https://mypy.readthedocs.io/en/latest/common_issues.html#narrowing-and-inner-functions
338
+ assert wrapped_func is not None
339
+
340
+ return maybe_awaitable(wrapped_func(*args, **kwargs))
341
+
342
+ return run
343
+
344
+ # Register the hooks through the module API.
345
+ hooks = {
346
+ hook: async_wrapper(getattr(spam_checker, hook, None))
347
+ for hook in spam_checker_methods
348
+ }
349
+
350
+ api.register_spam_checker_callbacks(**hooks)
351
+
352
+
353
+ class SpamCheckerModuleApiCallbacks:
354
+ NOT_SPAM: Literal["NOT_SPAM"] = "NOT_SPAM"
355
+
356
+ def __init__(self, hs: "synapse.server.HomeServer") -> None:
357
+ self.server_name = hs.hostname
358
+ self.clock = hs.get_clock()
359
+
360
+ self._check_event_for_spam_callbacks: list[CHECK_EVENT_FOR_SPAM_CALLBACK] = []
361
+ self._should_drop_federated_event_callbacks: list[
362
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK
363
+ ] = []
364
+ self._user_may_join_room_callbacks: list[USER_MAY_JOIN_ROOM_CALLBACK] = []
365
+ self._user_may_invite_callbacks: list[USER_MAY_INVITE_CALLBACK] = []
366
+ self._federated_user_may_invite_callbacks: list[
367
+ FEDERATED_USER_MAY_INVITE_CALLBACK
368
+ ] = []
369
+ self._user_may_send_3pid_invite_callbacks: list[
370
+ USER_MAY_SEND_3PID_INVITE_CALLBACK
371
+ ] = []
372
+ self._user_may_create_room_callbacks: list[USER_MAY_CREATE_ROOM_CALLBACK] = []
373
+ self._user_may_send_state_event_callbacks: list[
374
+ USER_MAY_SEND_STATE_EVENT_CALLBACK
375
+ ] = []
376
+ self._user_may_create_room_alias_callbacks: list[
377
+ USER_MAY_CREATE_ROOM_ALIAS_CALLBACK
378
+ ] = []
379
+ self._user_may_publish_room_callbacks: list[USER_MAY_PUBLISH_ROOM_CALLBACK] = []
380
+ self._check_username_for_spam_callbacks: list[
381
+ CHECK_USERNAME_FOR_SPAM_CALLBACK
382
+ ] = []
383
+ self._check_registration_for_spam_callbacks: list[
384
+ CHECK_REGISTRATION_FOR_SPAM_CALLBACK
385
+ ] = []
386
+ self._check_media_file_for_spam_callbacks: list[
387
+ CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK
388
+ ] = []
389
+ self._check_login_for_spam_callbacks: list[CHECK_LOGIN_FOR_SPAM_CALLBACK] = []
390
+
391
+ def register_callbacks(
392
+ self,
393
+ check_event_for_spam: Optional[CHECK_EVENT_FOR_SPAM_CALLBACK] = None,
394
+ should_drop_federated_event: Optional[
395
+ SHOULD_DROP_FEDERATED_EVENT_CALLBACK
396
+ ] = None,
397
+ user_may_join_room: Optional[USER_MAY_JOIN_ROOM_CALLBACK] = None,
398
+ user_may_invite: Optional[USER_MAY_INVITE_CALLBACK] = None,
399
+ federated_user_may_invite: Optional[FEDERATED_USER_MAY_INVITE_CALLBACK] = None,
400
+ user_may_send_3pid_invite: Optional[USER_MAY_SEND_3PID_INVITE_CALLBACK] = None,
401
+ user_may_create_room: Optional[USER_MAY_CREATE_ROOM_CALLBACK] = None,
402
+ user_may_create_room_alias: Optional[
403
+ USER_MAY_CREATE_ROOM_ALIAS_CALLBACK
404
+ ] = None,
405
+ user_may_publish_room: Optional[USER_MAY_PUBLISH_ROOM_CALLBACK] = None,
406
+ check_username_for_spam: Optional[CHECK_USERNAME_FOR_SPAM_CALLBACK] = None,
407
+ check_registration_for_spam: Optional[
408
+ CHECK_REGISTRATION_FOR_SPAM_CALLBACK
409
+ ] = None,
410
+ check_media_file_for_spam: Optional[CHECK_MEDIA_FILE_FOR_SPAM_CALLBACK] = None,
411
+ check_login_for_spam: Optional[CHECK_LOGIN_FOR_SPAM_CALLBACK] = None,
412
+ user_may_send_state_event: Optional[USER_MAY_SEND_STATE_EVENT_CALLBACK] = None,
413
+ ) -> None:
414
+ """Register callbacks from module for each hook."""
415
+ if check_event_for_spam is not None:
416
+ self._check_event_for_spam_callbacks.append(check_event_for_spam)
417
+
418
+ if should_drop_federated_event is not None:
419
+ self._should_drop_federated_event_callbacks.append(
420
+ should_drop_federated_event
421
+ )
422
+
423
+ if user_may_join_room is not None:
424
+ self._user_may_join_room_callbacks.append(user_may_join_room)
425
+
426
+ if user_may_invite is not None:
427
+ self._user_may_invite_callbacks.append(user_may_invite)
428
+
429
+ if federated_user_may_invite is not None:
430
+ self._federated_user_may_invite_callbacks.append(
431
+ federated_user_may_invite,
432
+ )
433
+
434
+ if user_may_send_3pid_invite is not None:
435
+ self._user_may_send_3pid_invite_callbacks.append(
436
+ user_may_send_3pid_invite,
437
+ )
438
+
439
+ if user_may_create_room is not None:
440
+ self._user_may_create_room_callbacks.append(user_may_create_room)
441
+
442
+ if user_may_send_state_event is not None:
443
+ self._user_may_send_state_event_callbacks.append(
444
+ user_may_send_state_event,
445
+ )
446
+
447
+ if user_may_create_room_alias is not None:
448
+ self._user_may_create_room_alias_callbacks.append(
449
+ user_may_create_room_alias,
450
+ )
451
+
452
+ if user_may_publish_room is not None:
453
+ self._user_may_publish_room_callbacks.append(user_may_publish_room)
454
+
455
+ if check_username_for_spam is not None:
456
+ self._check_username_for_spam_callbacks.append(check_username_for_spam)
457
+
458
+ if check_registration_for_spam is not None:
459
+ self._check_registration_for_spam_callbacks.append(
460
+ check_registration_for_spam,
461
+ )
462
+
463
+ if check_media_file_for_spam is not None:
464
+ self._check_media_file_for_spam_callbacks.append(check_media_file_for_spam)
465
+
466
+ if check_login_for_spam is not None:
467
+ self._check_login_for_spam_callbacks.append(check_login_for_spam)
468
+
469
+ @trace
470
+ async def check_event_for_spam(
471
+ self, event: "synapse.events.EventBase"
472
+ ) -> Union[tuple[Codes, JsonDict], str]:
473
+ """Checks if a given event is considered "spammy" by this server.
474
+
475
+ If the server considers an event spammy, then it will be rejected if
476
+ sent by a local user. If it is sent by a user on another server, the
477
+ event is soft-failed.
478
+
479
+ Args:
480
+ event: the event to be checked
481
+
482
+ Returns:
483
+ - `NOT_SPAM` if the event is considered good (non-spammy) and should be let
484
+ through. Other spamcheck filters may still reject it.
485
+ - A `Code` if the event is considered spammy and is rejected with a specific
486
+ error message/code.
487
+ - A string that isn't `NOT_SPAM` if the event is considered spammy and the
488
+ string should be used as the client-facing error message. This usage is
489
+ generally discouraged as it doesn't support internationalization.
490
+ """
491
+ for callback in self._check_event_for_spam_callbacks:
492
+ with Measure(
493
+ self.clock,
494
+ name=f"{callback.__module__}.{callback.__qualname__}",
495
+ server_name=self.server_name,
496
+ ):
497
+ res = await delay_cancellation(callback(event))
498
+ if res is False or res == self.NOT_SPAM:
499
+ # This spam-checker accepts the event.
500
+ # Other spam-checkers may reject it, though.
501
+ continue
502
+ elif res is True:
503
+ # This spam-checker rejects the event with deprecated
504
+ # return value `True`
505
+ return synapse.api.errors.Codes.FORBIDDEN, {}
506
+ elif (
507
+ isinstance(res, tuple)
508
+ and len(res) == 2
509
+ and isinstance(res[0], synapse.api.errors.Codes)
510
+ and isinstance(res[1], dict)
511
+ ):
512
+ return res
513
+ elif isinstance(res, synapse.api.errors.Codes):
514
+ return res, {}
515
+ elif not isinstance(res, str):
516
+ # mypy complains that we can't reach this code because of the
517
+ # return type in CHECK_EVENT_FOR_SPAM_CALLBACK, but we don't know
518
+ # for sure that the module actually returns it.
519
+ logger.warning( # type: ignore[unreachable]
520
+ "Module returned invalid value, rejecting message as spam"
521
+ )
522
+ res = "This message has been rejected as probable spam"
523
+ else:
524
+ # The module rejected the event either with a `Codes`
525
+ # or some other `str`. In either case, we stop here.
526
+ pass
527
+
528
+ return res
529
+
530
+ # No spam-checker has rejected the event, let it pass.
531
+ return self.NOT_SPAM
532
+
533
+ async def should_drop_federated_event(
534
+ self, event: "synapse.events.EventBase"
535
+ ) -> Union[bool, str]:
536
+ """Checks if a given federated event is considered "spammy" by this
537
+ server.
538
+
539
+ If the server considers an event spammy, it will be silently dropped,
540
+ and in doing so will split-brain our view of the room's DAG.
541
+
542
+ Args:
543
+ event: the event to be checked
544
+
545
+ Returns:
546
+ True if the event should be silently dropped
547
+ """
548
+ for callback in self._should_drop_federated_event_callbacks:
549
+ with Measure(
550
+ self.clock,
551
+ name=f"{callback.__module__}.{callback.__qualname__}",
552
+ server_name=self.server_name,
553
+ ):
554
+ res: Union[bool, str] = await delay_cancellation(callback(event))
555
+ if res:
556
+ return res
557
+
558
+ return False
559
+
560
+ async def user_may_join_room(
561
+ self, user_id: str, room_id: str, is_invited: bool
562
+ ) -> Union[tuple[Codes, JsonDict], Literal["NOT_SPAM"]]:
563
+ """Checks if a given users is allowed to join a room.
564
+ Not called when a user creates a room.
565
+
566
+ Args:
567
+ userid: The ID of the user wanting to join the room
568
+ room_id: The ID of the room the user wants to join
569
+ is_invited: Whether the user is invited into the room
570
+
571
+ Returns:
572
+ NOT_SPAM if the operation is permitted, [Codes, Dict] otherwise.
573
+ """
574
+ for callback in self._user_may_join_room_callbacks:
575
+ with Measure(
576
+ self.clock,
577
+ name=f"{callback.__module__}.{callback.__qualname__}",
578
+ server_name=self.server_name,
579
+ ):
580
+ res = await delay_cancellation(callback(user_id, room_id, is_invited))
581
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
582
+ if res is True or res is self.NOT_SPAM:
583
+ continue
584
+ elif res is False:
585
+ return synapse.api.errors.Codes.FORBIDDEN, {}
586
+ elif isinstance(res, synapse.api.errors.Codes):
587
+ return res, {}
588
+ elif (
589
+ isinstance(res, tuple)
590
+ and len(res) == 2
591
+ and isinstance(res[0], synapse.api.errors.Codes)
592
+ and isinstance(res[1], dict)
593
+ ):
594
+ return res
595
+ else:
596
+ logger.warning(
597
+ "Module returned invalid value, rejecting join as spam"
598
+ )
599
+ return synapse.api.errors.Codes.FORBIDDEN, {}
600
+
601
+ # No spam-checker has rejected the request, let it pass.
602
+ return self.NOT_SPAM
603
+
604
+ async def user_may_invite(
605
+ self, inviter_userid: str, invitee_userid: str, room_id: str
606
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
607
+ """Checks if a given user may send an invite
608
+
609
+ Args:
610
+ inviter_userid: The user ID of the sender of the invitation
611
+ invitee_userid: The user ID targeted in the invitation
612
+ room_id: The room ID
613
+
614
+ Returns:
615
+ NOT_SPAM if the operation is permitted, Codes otherwise.
616
+ """
617
+ for callback in self._user_may_invite_callbacks:
618
+ with Measure(
619
+ self.clock,
620
+ name=f"{callback.__module__}.{callback.__qualname__}",
621
+ server_name=self.server_name,
622
+ ):
623
+ res = await delay_cancellation(
624
+ callback(inviter_userid, invitee_userid, room_id)
625
+ )
626
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
627
+ if res is True or res is self.NOT_SPAM:
628
+ continue
629
+ elif res is False:
630
+ return synapse.api.errors.Codes.FORBIDDEN, {}
631
+ elif isinstance(res, synapse.api.errors.Codes):
632
+ return res, {}
633
+ elif (
634
+ isinstance(res, tuple)
635
+ and len(res) == 2
636
+ and isinstance(res[0], synapse.api.errors.Codes)
637
+ and isinstance(res[1], dict)
638
+ ):
639
+ return res
640
+ else:
641
+ logger.warning(
642
+ "Module returned invalid value, rejecting invite as spam"
643
+ )
644
+ return synapse.api.errors.Codes.FORBIDDEN, {}
645
+
646
+ # No spam-checker has rejected the request, let it pass.
647
+ return self.NOT_SPAM
648
+
649
+ async def federated_user_may_invite(
650
+ self, event: "synapse.events.EventBase"
651
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
652
+ """Checks if a given user may send an invite
653
+
654
+ Args:
655
+ event: The event to be checked
656
+
657
+ Returns:
658
+ NOT_SPAM if the operation is permitted, Codes otherwise.
659
+ """
660
+ for callback in self._federated_user_may_invite_callbacks:
661
+ with Measure(
662
+ self.clock,
663
+ name=f"{callback.__module__}.{callback.__qualname__}",
664
+ server_name=self.server_name,
665
+ ):
666
+ res = await delay_cancellation(callback(event))
667
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
668
+ if res is True or res is self.NOT_SPAM:
669
+ continue
670
+ elif res is False:
671
+ return synapse.api.errors.Codes.FORBIDDEN, {}
672
+ elif isinstance(res, synapse.api.errors.Codes):
673
+ return res, {}
674
+ elif (
675
+ isinstance(res, tuple)
676
+ and len(res) == 2
677
+ and isinstance(res[0], synapse.api.errors.Codes)
678
+ and isinstance(res[1], dict)
679
+ ):
680
+ return res
681
+ else:
682
+ logger.warning(
683
+ "Module returned invalid value, rejecting invite as spam"
684
+ )
685
+ return synapse.api.errors.Codes.FORBIDDEN, {}
686
+
687
+ # Check the standard user_may_invite callback if no module has rejected the invite yet.
688
+ return await self.user_may_invite(event.sender, event.state_key, event.room_id)
689
+
690
+ async def user_may_send_3pid_invite(
691
+ self, inviter_userid: str, medium: str, address: str, room_id: str
692
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
693
+ """Checks if a given user may invite a given threepid into the room
694
+
695
+ Note that if the threepid is already associated with a Matrix user ID, Synapse
696
+ will call user_may_invite with said user ID instead.
697
+
698
+ Args:
699
+ inviter_userid: The user ID of the sender of the invitation
700
+ medium: The 3PID's medium (e.g. "email")
701
+ address: The 3PID's address (e.g. "alice@example.com")
702
+ room_id: The room ID
703
+
704
+ Returns:
705
+ NOT_SPAM if the operation is permitted, Codes otherwise.
706
+ """
707
+ for callback in self._user_may_send_3pid_invite_callbacks:
708
+ with Measure(
709
+ self.clock,
710
+ name=f"{callback.__module__}.{callback.__qualname__}",
711
+ server_name=self.server_name,
712
+ ):
713
+ res = await delay_cancellation(
714
+ callback(inviter_userid, medium, address, room_id)
715
+ )
716
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
717
+ if res is True or res is self.NOT_SPAM:
718
+ continue
719
+ elif res is False:
720
+ return synapse.api.errors.Codes.FORBIDDEN, {}
721
+ elif isinstance(res, synapse.api.errors.Codes):
722
+ return res, {}
723
+ elif (
724
+ isinstance(res, tuple)
725
+ and len(res) == 2
726
+ and isinstance(res[0], synapse.api.errors.Codes)
727
+ and isinstance(res[1], dict)
728
+ ):
729
+ return res
730
+ else:
731
+ logger.warning(
732
+ "Module returned invalid value, rejecting 3pid invite as spam"
733
+ )
734
+ return synapse.api.errors.Codes.FORBIDDEN, {}
735
+
736
+ return self.NOT_SPAM
737
+
738
+ async def user_may_create_room(
739
+ self, userid: str, room_config: JsonDict
740
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
741
+ """Checks if a given user may create a room
742
+
743
+ Args:
744
+ userid: The ID of the user attempting to create a room
745
+ room_config: The room creation configuration which is the body of the /createRoom request
746
+ """
747
+ for callback in self._user_may_create_room_callbacks:
748
+ with Measure(
749
+ self.clock,
750
+ name=f"{callback.__module__}.{callback.__qualname__}",
751
+ server_name=self.server_name,
752
+ ):
753
+ checker_args = inspect.signature(callback)
754
+ # Also ensure backwards compatibility with spam checker callbacks
755
+ # that don't expect the room_config argument.
756
+ if len(checker_args.parameters) == 2:
757
+ callback_with_requester_id = cast(
758
+ Callable[
759
+ [str, JsonDict],
760
+ Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE],
761
+ ],
762
+ callback,
763
+ )
764
+ # We make a copy of the config to ensure the spam checker cannot modify it.
765
+ res = await delay_cancellation(
766
+ callback_with_requester_id(userid, deepcopy(room_config))
767
+ )
768
+ else:
769
+ callback_without_requester_id = cast(
770
+ Callable[
771
+ [str], Awaitable[USER_MAY_CREATE_ROOM_CALLBACK_RETURN_VALUE]
772
+ ],
773
+ callback,
774
+ )
775
+ res = await delay_cancellation(
776
+ callback_without_requester_id(userid)
777
+ )
778
+ if res is True or res is self.NOT_SPAM:
779
+ continue
780
+ elif res is False:
781
+ return synapse.api.errors.Codes.FORBIDDEN, {}
782
+ elif isinstance(res, synapse.api.errors.Codes):
783
+ return res, {}
784
+ elif (
785
+ isinstance(res, tuple)
786
+ and len(res) == 2
787
+ and isinstance(res[0], synapse.api.errors.Codes)
788
+ and isinstance(res[1], dict)
789
+ ):
790
+ return res
791
+ else:
792
+ logger.warning(
793
+ "Module returned invalid value, rejecting room creation as spam"
794
+ )
795
+ return synapse.api.errors.Codes.FORBIDDEN, {}
796
+
797
+ return self.NOT_SPAM
798
+
799
+ async def user_may_send_state_event(
800
+ self,
801
+ user_id: str,
802
+ room_id: str,
803
+ event_type: str,
804
+ state_key: str,
805
+ content: JsonDict,
806
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
807
+ """Checks if a given user may create a room with a given visibility
808
+ Args:
809
+ user_id: The ID of the user attempting to create a room
810
+ room_id: The ID of the room that the event will be sent to
811
+ event_type: The type of the state event
812
+ state_key: The state key of the state event
813
+ content: The content of the state event
814
+ """
815
+ for callback in self._user_may_send_state_event_callbacks:
816
+ with Measure(
817
+ self.clock,
818
+ name=f"{callback.__module__}.{callback.__qualname__}",
819
+ server_name=self.server_name,
820
+ ):
821
+ # We make a copy of the content to ensure that the spam checker cannot modify it.
822
+ res = await delay_cancellation(
823
+ callback(user_id, room_id, event_type, state_key, deepcopy(content))
824
+ )
825
+ if res is self.NOT_SPAM:
826
+ continue
827
+ elif isinstance(res, synapse.api.errors.Codes):
828
+ return res, {}
829
+ else:
830
+ logger.warning(
831
+ "Module returned invalid value, rejecting room creation as spam"
832
+ )
833
+ return synapse.api.errors.Codes.FORBIDDEN, {}
834
+
835
+ return self.NOT_SPAM
836
+
837
+ async def user_may_create_room_alias(
838
+ self, userid: str, room_alias: RoomAlias
839
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
840
+ """Checks if a given user may create a room alias
841
+
842
+ Args:
843
+ userid: The ID of the user attempting to create a room alias
844
+ room_alias: The alias to be created
845
+
846
+ """
847
+ for callback in self._user_may_create_room_alias_callbacks:
848
+ with Measure(
849
+ self.clock,
850
+ name=f"{callback.__module__}.{callback.__qualname__}",
851
+ server_name=self.server_name,
852
+ ):
853
+ res = await delay_cancellation(callback(userid, room_alias))
854
+ if res is True or res is self.NOT_SPAM:
855
+ continue
856
+ elif res is False:
857
+ return synapse.api.errors.Codes.FORBIDDEN, {}
858
+ elif isinstance(res, synapse.api.errors.Codes):
859
+ return res, {}
860
+ elif (
861
+ isinstance(res, tuple)
862
+ and len(res) == 2
863
+ and isinstance(res[0], synapse.api.errors.Codes)
864
+ and isinstance(res[1], dict)
865
+ ):
866
+ return res
867
+ else:
868
+ logger.warning(
869
+ "Module returned invalid value, rejecting room create as spam"
870
+ )
871
+ return synapse.api.errors.Codes.FORBIDDEN, {}
872
+
873
+ return self.NOT_SPAM
874
+
875
+ async def user_may_publish_room(
876
+ self, userid: str, room_id: str
877
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
878
+ """Checks if a given user may publish a room to the directory
879
+
880
+ Args:
881
+ userid: The user ID attempting to publish the room
882
+ room_id: The ID of the room that would be published
883
+ """
884
+ for callback in self._user_may_publish_room_callbacks:
885
+ with Measure(
886
+ self.clock,
887
+ name=f"{callback.__module__}.{callback.__qualname__}",
888
+ server_name=self.server_name,
889
+ ):
890
+ res = await delay_cancellation(callback(userid, room_id))
891
+ if res is True or res is self.NOT_SPAM:
892
+ continue
893
+ elif res is False:
894
+ return synapse.api.errors.Codes.FORBIDDEN, {}
895
+ elif isinstance(res, synapse.api.errors.Codes):
896
+ return res, {}
897
+ elif (
898
+ isinstance(res, tuple)
899
+ and len(res) == 2
900
+ and isinstance(res[0], synapse.api.errors.Codes)
901
+ and isinstance(res[1], dict)
902
+ ):
903
+ return res
904
+ else:
905
+ logger.warning(
906
+ "Module returned invalid value, rejecting room publication as spam"
907
+ )
908
+ return synapse.api.errors.Codes.FORBIDDEN, {}
909
+
910
+ return self.NOT_SPAM
911
+
912
+ async def check_username_for_spam(
913
+ self, user_profile: UserProfile, requester_id: str
914
+ ) -> bool:
915
+ """Checks if a user ID or display name are considered "spammy" by this server.
916
+
917
+ If the server considers a username spammy, then it will not be included in
918
+ user directory results.
919
+
920
+ Args:
921
+ user_profile: The user information to check, it contains the keys:
922
+ * user_id
923
+ * display_name
924
+ * avatar_url
925
+ requester_id: The user ID of the user making the user directory search request.
926
+
927
+ Returns:
928
+ True if the user is spammy.
929
+ """
930
+ for callback in self._check_username_for_spam_callbacks:
931
+ with Measure(
932
+ self.clock,
933
+ name=f"{callback.__module__}.{callback.__qualname__}",
934
+ server_name=self.server_name,
935
+ ):
936
+ checker_args = inspect.signature(callback)
937
+ # Make a copy of the user profile object to ensure the spam checker cannot
938
+ # modify it.
939
+ # Also ensure backwards compatibility with spam checker callbacks
940
+ # that don't expect the requester_id argument.
941
+ if len(checker_args.parameters) == 2:
942
+ callback_with_requester_id = cast(
943
+ Callable[[UserProfile, str], Awaitable[bool]], callback
944
+ )
945
+ res = await delay_cancellation(
946
+ callback_with_requester_id(user_profile.copy(), requester_id)
947
+ )
948
+ else:
949
+ callback_without_requester_id = cast(
950
+ Callable[[UserProfile], Awaitable[bool]], callback
951
+ )
952
+ res = await delay_cancellation(
953
+ callback_without_requester_id(user_profile.copy())
954
+ )
955
+
956
+ if res:
957
+ return True
958
+
959
+ return False
960
+
961
+ async def check_registration_for_spam(
962
+ self,
963
+ email_threepid: Optional[dict],
964
+ username: Optional[str],
965
+ request_info: Collection[tuple[str, str]],
966
+ auth_provider_id: Optional[str] = None,
967
+ ) -> RegistrationBehaviour:
968
+ """Checks if we should allow the given registration request.
969
+
970
+ Args:
971
+ email_threepid: The email threepid used for registering, if any
972
+ username: The request user name, if any
973
+ request_info: List of tuples of user agent and IP that
974
+ were used during the registration process.
975
+ auth_provider_id: The SSO IdP the user used, e.g "oidc", "saml",
976
+ "cas". If any. Note this does not include users registered
977
+ via a password provider.
978
+
979
+ Returns:
980
+ Enum for how the request should be handled
981
+ """
982
+
983
+ for callback in self._check_registration_for_spam_callbacks:
984
+ with Measure(
985
+ self.clock,
986
+ name=f"{callback.__module__}.{callback.__qualname__}",
987
+ server_name=self.server_name,
988
+ ):
989
+ behaviour = await delay_cancellation(
990
+ callback(email_threepid, username, request_info, auth_provider_id)
991
+ )
992
+ assert isinstance(behaviour, RegistrationBehaviour)
993
+ if behaviour != RegistrationBehaviour.ALLOW:
994
+ return behaviour
995
+
996
+ return RegistrationBehaviour.ALLOW
997
+
998
+ @trace
999
+ async def check_media_file_for_spam(
1000
+ self, file_wrapper: ReadableFileWrapper, file_info: FileInfo
1001
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
1002
+ """Checks if a piece of newly uploaded media should be blocked.
1003
+
1004
+ This will be called for local uploads, downloads of remote media, each
1005
+ thumbnail generated for those, and web pages/images used for URL
1006
+ previews.
1007
+
1008
+ Note that care should be taken to not do blocking IO operations in the
1009
+ main thread. For example, to get the contents of a file a module
1010
+ should do::
1011
+
1012
+ async def check_media_file_for_spam(
1013
+ self, file: ReadableFileWrapper, file_info: FileInfo
1014
+ ) -> Union[Codes, Literal["NOT_SPAM"]]:
1015
+ buffer = BytesIO()
1016
+ await file.write_chunks_to(buffer.write)
1017
+
1018
+ if buffer.getvalue() == b"Hello World":
1019
+ return synapse.module_api.NOT_SPAM
1020
+
1021
+ return Codes.FORBIDDEN
1022
+
1023
+
1024
+ Args:
1025
+ file: An object that allows reading the contents of the media.
1026
+ file_info: Metadata about the file.
1027
+ """
1028
+
1029
+ for callback in self._check_media_file_for_spam_callbacks:
1030
+ with Measure(
1031
+ self.clock,
1032
+ name=f"{callback.__module__}.{callback.__qualname__}",
1033
+ server_name=self.server_name,
1034
+ ):
1035
+ res = await delay_cancellation(callback(file_wrapper, file_info))
1036
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
1037
+ if res is False or res is self.NOT_SPAM:
1038
+ continue
1039
+ elif res is True:
1040
+ return synapse.api.errors.Codes.FORBIDDEN, {}
1041
+ elif isinstance(res, synapse.api.errors.Codes):
1042
+ return res, {}
1043
+ elif (
1044
+ isinstance(res, tuple)
1045
+ and len(res) == 2
1046
+ and isinstance(res[0], synapse.api.errors.Codes)
1047
+ and isinstance(res[1], dict)
1048
+ ):
1049
+ return res
1050
+ else:
1051
+ logger.warning(
1052
+ "Module returned invalid value, rejecting media file as spam"
1053
+ )
1054
+ return synapse.api.errors.Codes.FORBIDDEN, {}
1055
+
1056
+ return self.NOT_SPAM
1057
+
1058
+ async def check_login_for_spam(
1059
+ self,
1060
+ user_id: str,
1061
+ device_id: Optional[str],
1062
+ initial_display_name: Optional[str],
1063
+ request_info: Collection[tuple[Optional[str], str]],
1064
+ auth_provider_id: Optional[str] = None,
1065
+ ) -> Union[tuple[Codes, dict], Literal["NOT_SPAM"]]:
1066
+ """Checks if we should allow the given registration request.
1067
+
1068
+ Args:
1069
+ user_id: The request user ID
1070
+ request_info: List of tuples of user agent and IP that
1071
+ were used during the registration process.
1072
+ auth_provider_id: The SSO IdP the user used, e.g "oidc", "saml",
1073
+ "cas". If any. Note this does not include users registered
1074
+ via a password provider.
1075
+
1076
+ Returns:
1077
+ Enum for how the request should be handled
1078
+ """
1079
+
1080
+ for callback in self._check_login_for_spam_callbacks:
1081
+ with Measure(
1082
+ self.clock,
1083
+ name=f"{callback.__module__}.{callback.__qualname__}",
1084
+ server_name=self.server_name,
1085
+ ):
1086
+ res = await delay_cancellation(
1087
+ callback(
1088
+ user_id,
1089
+ device_id,
1090
+ initial_display_name,
1091
+ request_info,
1092
+ auth_provider_id,
1093
+ )
1094
+ )
1095
+ # Normalize return values to `Codes` or `"NOT_SPAM"`.
1096
+ if res is self.NOT_SPAM:
1097
+ continue
1098
+ elif isinstance(res, synapse.api.errors.Codes):
1099
+ return res, {}
1100
+ elif (
1101
+ isinstance(res, tuple)
1102
+ and len(res) == 2
1103
+ and isinstance(res[0], synapse.api.errors.Codes)
1104
+ and isinstance(res[1], dict)
1105
+ ):
1106
+ return res
1107
+ else:
1108
+ logger.warning(
1109
+ "Module returned invalid value, rejecting login as spam"
1110
+ )
1111
+ return synapse.api.errors.Codes.FORBIDDEN, {}
1112
+
1113
+ return self.NOT_SPAM