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,1060 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2014-2016 OpenMarket Ltd
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 logging
23
+ from typing import (
24
+ TYPE_CHECKING,
25
+ Any,
26
+ Iterable,
27
+ Mapping,
28
+ Optional,
29
+ cast,
30
+ )
31
+
32
+ from synapse.api.constants import AccountDataTypes
33
+ from synapse.api.errors import Codes, SynapseError
34
+ from synapse.replication.tcp.streams import AccountDataStream
35
+ from synapse.storage._base import db_to_json
36
+ from synapse.storage.admin_client_config import AdminClientConfig
37
+ from synapse.storage.database import (
38
+ DatabasePool,
39
+ LoggingDatabaseConnection,
40
+ LoggingTransaction,
41
+ )
42
+ from synapse.storage.databases.main.cache import CacheInvalidationWorkerStore
43
+ from synapse.storage.databases.main.push_rule import PushRulesWorkerStore
44
+ from synapse.storage.invite_rule import InviteRulesConfig
45
+ from synapse.storage.util.id_generators import MultiWriterIdGenerator
46
+ from synapse.types import JsonDict, JsonMapping
47
+ from synapse.util.caches.descriptors import cached
48
+ from synapse.util.caches.stream_change_cache import StreamChangeCache
49
+ from synapse.util.json import json_encoder
50
+
51
+ if TYPE_CHECKING:
52
+ from synapse.server import HomeServer
53
+
54
+ logger = logging.getLogger(__name__)
55
+
56
+
57
+ class AccountDataWorkerStore(PushRulesWorkerStore, CacheInvalidationWorkerStore):
58
+ def __init__(
59
+ self,
60
+ database: DatabasePool,
61
+ db_conn: LoggingDatabaseConnection,
62
+ hs: "HomeServer",
63
+ ):
64
+ super().__init__(database, db_conn, hs)
65
+
66
+ self._can_write_to_account_data = (
67
+ self._instance_name in hs.config.worker.writers.account_data
68
+ )
69
+
70
+ self._account_data_id_gen: MultiWriterIdGenerator
71
+
72
+ self._account_data_id_gen = MultiWriterIdGenerator(
73
+ db_conn=db_conn,
74
+ db=database,
75
+ notifier=hs.get_replication_notifier(),
76
+ stream_name="account_data",
77
+ server_name=self.server_name,
78
+ instance_name=self._instance_name,
79
+ tables=[
80
+ ("room_account_data", "instance_name", "stream_id"),
81
+ ("room_tags_revisions", "instance_name", "stream_id"),
82
+ ("account_data", "instance_name", "stream_id"),
83
+ ],
84
+ sequence_name="account_data_sequence",
85
+ writers=hs.config.worker.writers.account_data,
86
+ )
87
+
88
+ account_max = self.get_max_account_data_stream_id()
89
+ self._account_data_stream_cache = StreamChangeCache(
90
+ name="AccountDataAndTagsChangeCache",
91
+ server_name=self.server_name,
92
+ current_stream_pos=account_max,
93
+ )
94
+
95
+ self.db_pool.updates.register_background_index_update(
96
+ update_name="room_account_data_index_room_id",
97
+ index_name="room_account_data_room_id",
98
+ table="room_account_data",
99
+ columns=("room_id",),
100
+ )
101
+
102
+ self.db_pool.updates.register_background_update_handler(
103
+ "delete_account_data_for_deactivated_users",
104
+ self._delete_account_data_for_deactivated_users,
105
+ )
106
+
107
+ self._msc4155_enabled = hs.config.experimental.msc4155_enabled
108
+
109
+ def get_max_account_data_stream_id(self) -> int:
110
+ """Get the current max stream ID for account data stream
111
+
112
+ Returns:
113
+ int
114
+ """
115
+ return self._account_data_id_gen.get_current_token()
116
+
117
+ def get_account_data_id_generator(self) -> MultiWriterIdGenerator:
118
+ return self._account_data_id_gen
119
+
120
+ @cached()
121
+ async def get_global_account_data_for_user(
122
+ self, user_id: str
123
+ ) -> Mapping[str, JsonMapping]:
124
+ """
125
+ Get all the global client account_data for a user.
126
+
127
+ If experimental MSC3391 support is enabled, any entries with an empty
128
+ content body are excluded; as this means they have been deleted.
129
+
130
+ Args:
131
+ user_id: The user to get the account_data for.
132
+
133
+ Returns:
134
+ The global account_data.
135
+ """
136
+
137
+ def get_global_account_data_for_user(
138
+ txn: LoggingTransaction,
139
+ ) -> dict[str, JsonDict]:
140
+ # The 'content != '{}' condition below prevents us from using
141
+ # `simple_select_list_txn` here, as it doesn't support conditions
142
+ # other than 'equals'.
143
+ sql = """
144
+ SELECT account_data_type, content FROM account_data
145
+ WHERE user_id = ?
146
+ """
147
+
148
+ # If experimental MSC3391 support is enabled, then account data entries
149
+ # with an empty content are considered "deleted". So skip adding them to
150
+ # the results.
151
+ if self.hs.config.experimental.msc3391_enabled:
152
+ sql += " AND content != '{}'"
153
+
154
+ txn.execute(sql, (user_id,))
155
+
156
+ return {
157
+ account_data_type: db_to_json(content)
158
+ for account_data_type, content in txn
159
+ }
160
+
161
+ return await self.db_pool.runInteraction(
162
+ "get_global_account_data_for_user", get_global_account_data_for_user
163
+ )
164
+
165
+ @cached()
166
+ async def get_room_account_data_for_user(
167
+ self, user_id: str
168
+ ) -> Mapping[str, Mapping[str, JsonMapping]]:
169
+ """
170
+ Get all of the per-room client account_data for a user.
171
+
172
+ If experimental MSC3391 support is enabled, any entries with an empty
173
+ content body are excluded; as this means they have been deleted.
174
+
175
+ Args:
176
+ user_id: The user to get the account_data for.
177
+
178
+ Returns:
179
+ A dict mapping from room_id string to per-room account_data dicts.
180
+ """
181
+
182
+ def get_room_account_data_for_user_txn(
183
+ txn: LoggingTransaction,
184
+ ) -> dict[str, dict[str, JsonMapping]]:
185
+ # The 'content != '{}' condition below prevents us from using
186
+ # `simple_select_list_txn` here, as it doesn't support conditions
187
+ # other than 'equals'.
188
+ sql = """
189
+ SELECT room_id, account_data_type, content FROM room_account_data
190
+ WHERE user_id = ?
191
+ """
192
+
193
+ # If experimental MSC3391 support is enabled, then account data entries
194
+ # with an empty content are considered "deleted". So skip adding them to
195
+ # the results.
196
+ if self.hs.config.experimental.msc3391_enabled:
197
+ sql += " AND content != '{}'"
198
+
199
+ txn.execute(sql, (user_id,))
200
+
201
+ by_room: dict[str, dict[str, JsonMapping]] = {}
202
+ for room_id, account_data_type, content in txn:
203
+ room_data = by_room.setdefault(room_id, {})
204
+
205
+ room_data[account_data_type] = db_to_json(content)
206
+
207
+ return by_room
208
+
209
+ return await self.db_pool.runInteraction(
210
+ "get_room_account_data_for_user_txn", get_room_account_data_for_user_txn
211
+ )
212
+
213
+ @cached(num_args=2, max_entries=5000, tree=True)
214
+ async def get_global_account_data_by_type_for_user(
215
+ self, user_id: str, data_type: str
216
+ ) -> Optional[JsonMapping]:
217
+ """
218
+ Returns:
219
+ The account data.
220
+ """
221
+ result = await self.db_pool.simple_select_one_onecol(
222
+ table="account_data",
223
+ keyvalues={"user_id": user_id, "account_data_type": data_type},
224
+ retcol="content",
225
+ desc="get_global_account_data_by_type_for_user",
226
+ allow_none=True,
227
+ )
228
+
229
+ if result:
230
+ return db_to_json(result)
231
+ else:
232
+ return None
233
+
234
+ async def get_latest_stream_id_for_global_account_data_by_type_for_user(
235
+ self, user_id: str, data_type: str
236
+ ) -> Optional[int]:
237
+ """
238
+ Returns:
239
+ The stream ID of the account data,
240
+ or None if there is no such account data.
241
+ """
242
+
243
+ def get_latest_stream_id_for_global_account_data_by_type_for_user_txn(
244
+ txn: LoggingTransaction,
245
+ ) -> Optional[int]:
246
+ sql = """
247
+ SELECT stream_id FROM account_data
248
+ WHERE user_id = ? AND account_data_type = ?
249
+ ORDER BY stream_id DESC
250
+ LIMIT 1
251
+ """
252
+ txn.execute(sql, (user_id, data_type))
253
+
254
+ row = txn.fetchone()
255
+ if row:
256
+ return row[0]
257
+ else:
258
+ return None
259
+
260
+ return await self.db_pool.runInteraction(
261
+ "get_latest_stream_id_for_global_account_data_by_type_for_user",
262
+ get_latest_stream_id_for_global_account_data_by_type_for_user_txn,
263
+ )
264
+
265
+ @cached(num_args=2, tree=True)
266
+ async def get_account_data_for_room(
267
+ self, user_id: str, room_id: str
268
+ ) -> Mapping[str, JsonMapping]:
269
+ """Get all the client account_data for a user for a room.
270
+
271
+ Args:
272
+ user_id: The user to get the account_data for.
273
+ room_id: The room to get the account_data for.
274
+ Returns:
275
+ A dict of the room account_data
276
+ """
277
+
278
+ def get_account_data_for_room_txn(
279
+ txn: LoggingTransaction,
280
+ ) -> dict[str, JsonMapping]:
281
+ rows = cast(
282
+ list[tuple[str, str]],
283
+ self.db_pool.simple_select_list_txn(
284
+ txn,
285
+ table="room_account_data",
286
+ keyvalues={"user_id": user_id, "room_id": room_id},
287
+ retcols=["account_data_type", "content"],
288
+ ),
289
+ )
290
+
291
+ return {
292
+ account_data_type: db_to_json(content)
293
+ for account_data_type, content in rows
294
+ }
295
+
296
+ return await self.db_pool.runInteraction(
297
+ "get_account_data_for_room", get_account_data_for_room_txn
298
+ )
299
+
300
+ @cached(num_args=3, max_entries=5000, tree=True)
301
+ async def get_account_data_for_room_and_type(
302
+ self, user_id: str, room_id: str, account_data_type: str
303
+ ) -> Optional[JsonMapping]:
304
+ """Get the client account_data of given type for a user for a room.
305
+
306
+ Args:
307
+ user_id: The user to get the account_data for.
308
+ room_id: The room to get the account_data for.
309
+ account_data_type: The account data type to get.
310
+ Returns:
311
+ The room account_data for that type, or None if there isn't any set.
312
+ """
313
+
314
+ def get_account_data_for_room_and_type_txn(
315
+ txn: LoggingTransaction,
316
+ ) -> Optional[JsonDict]:
317
+ content_json = self.db_pool.simple_select_one_onecol_txn(
318
+ txn,
319
+ table="room_account_data",
320
+ keyvalues={
321
+ "user_id": user_id,
322
+ "room_id": room_id,
323
+ "account_data_type": account_data_type,
324
+ },
325
+ retcol="content",
326
+ allow_none=True,
327
+ )
328
+
329
+ return db_to_json(content_json) if content_json else None
330
+
331
+ return await self.db_pool.runInteraction(
332
+ "get_account_data_for_room_and_type", get_account_data_for_room_and_type_txn
333
+ )
334
+
335
+ async def get_updated_global_account_data(
336
+ self, last_id: int, current_id: int, limit: int
337
+ ) -> list[tuple[int, str, str]]:
338
+ """Get the global account_data that has changed, for the account_data stream
339
+
340
+ Args:
341
+ last_id: the last stream_id from the previous batch.
342
+ current_id: the maximum stream_id to return up to
343
+ limit: the maximum number of rows to return
344
+
345
+ Returns:
346
+ A list of tuples of stream_id int, user_id string,
347
+ and type string.
348
+ """
349
+ if last_id == current_id:
350
+ return []
351
+
352
+ def get_updated_global_account_data_txn(
353
+ txn: LoggingTransaction,
354
+ ) -> list[tuple[int, str, str]]:
355
+ sql = (
356
+ "SELECT stream_id, user_id, account_data_type"
357
+ " FROM account_data WHERE ? < stream_id AND stream_id <= ?"
358
+ " ORDER BY stream_id ASC LIMIT ?"
359
+ )
360
+ txn.execute(sql, (last_id, current_id, limit))
361
+ return cast(list[tuple[int, str, str]], txn.fetchall())
362
+
363
+ return await self.db_pool.runInteraction(
364
+ "get_updated_global_account_data", get_updated_global_account_data_txn
365
+ )
366
+
367
+ async def get_updated_room_account_data(
368
+ self, last_id: int, current_id: int, limit: int
369
+ ) -> list[tuple[int, str, str, str]]:
370
+ """Get the global account_data that has changed, for the account_data stream
371
+
372
+ Args:
373
+ last_id: the last stream_id from the previous batch.
374
+ current_id: the maximum stream_id to return up to
375
+ limit: the maximum number of rows to return
376
+
377
+ Returns:
378
+ A list of tuples of stream_id int, user_id string,
379
+ room_id string and type string.
380
+ """
381
+ if last_id == current_id:
382
+ return []
383
+
384
+ def get_updated_room_account_data_txn(
385
+ txn: LoggingTransaction,
386
+ ) -> list[tuple[int, str, str, str]]:
387
+ sql = (
388
+ "SELECT stream_id, user_id, room_id, account_data_type"
389
+ " FROM room_account_data WHERE ? < stream_id AND stream_id <= ?"
390
+ " ORDER BY stream_id ASC LIMIT ?"
391
+ )
392
+ txn.execute(sql, (last_id, current_id, limit))
393
+ return cast(list[tuple[int, str, str, str]], txn.fetchall())
394
+
395
+ return await self.db_pool.runInteraction(
396
+ "get_updated_room_account_data", get_updated_room_account_data_txn
397
+ )
398
+
399
+ async def get_updated_global_account_data_for_user(
400
+ self, user_id: str, stream_id: int
401
+ ) -> dict[str, JsonMapping]:
402
+ """Get all the global account_data that's changed for a user.
403
+
404
+ Args:
405
+ user_id: The user to get the account_data for.
406
+ stream_id: The point in the stream since which to get updates
407
+
408
+ Returns:
409
+ A dict of global account_data.
410
+ """
411
+
412
+ def get_updated_global_account_data_for_user(
413
+ txn: LoggingTransaction,
414
+ ) -> dict[str, JsonMapping]:
415
+ sql = """
416
+ SELECT account_data_type, content FROM account_data
417
+ WHERE user_id = ? AND stream_id > ?
418
+ """
419
+ txn.execute(sql, (user_id, stream_id))
420
+
421
+ return {row[0]: db_to_json(row[1]) for row in txn}
422
+
423
+ changed = self._account_data_stream_cache.has_entity_changed(
424
+ user_id, int(stream_id)
425
+ )
426
+ if not changed:
427
+ return {}
428
+
429
+ return await self.db_pool.runInteraction(
430
+ "get_updated_global_account_data_for_user",
431
+ get_updated_global_account_data_for_user,
432
+ )
433
+
434
+ async def get_updated_room_account_data_for_user(
435
+ self, user_id: str, stream_id: int
436
+ ) -> dict[str, dict[str, JsonMapping]]:
437
+ """Get all the room account_data that's changed for a user.
438
+
439
+ Args:
440
+ user_id: The user to get the account_data for.
441
+ stream_id: The point in the stream since which to get updates
442
+
443
+ Returns:
444
+ A dict mapping from room_id string to per room account_data dicts.
445
+ """
446
+
447
+ def get_updated_room_account_data_for_user_txn(
448
+ txn: LoggingTransaction,
449
+ ) -> dict[str, dict[str, JsonMapping]]:
450
+ sql = """
451
+ SELECT room_id, account_data_type, content FROM room_account_data
452
+ WHERE user_id = ? AND stream_id > ?
453
+ """
454
+ txn.execute(sql, (user_id, stream_id))
455
+
456
+ account_data_by_room: dict[str, dict[str, JsonMapping]] = {}
457
+ for row in txn:
458
+ room_account_data = account_data_by_room.setdefault(row[0], {})
459
+ room_account_data[row[1]] = db_to_json(row[2])
460
+
461
+ return account_data_by_room
462
+
463
+ changed = self._account_data_stream_cache.has_entity_changed(
464
+ user_id, int(stream_id)
465
+ )
466
+ if not changed:
467
+ return {}
468
+
469
+ return await self.db_pool.runInteraction(
470
+ "get_updated_room_account_data_for_user",
471
+ get_updated_room_account_data_for_user_txn,
472
+ )
473
+
474
+ async def get_updated_room_account_data_for_user_for_room(
475
+ self,
476
+ # Since there are multiple arguments with the same type, force keyword arguments
477
+ # so people don't accidentally swap the order
478
+ *,
479
+ user_id: str,
480
+ room_id: str,
481
+ from_stream_id: int,
482
+ to_stream_id: int,
483
+ ) -> dict[str, JsonMapping]:
484
+ """Get the room account_data that's changed for a user in a room.
485
+
486
+ (> `from_stream_id` and <= `to_stream_id`)
487
+
488
+ Args:
489
+ user_id: The user to get the account_data for.
490
+ room_id: The room to check
491
+ from_stream_id: The point in the stream to fetch from
492
+ to_stream_id: The point in the stream to fetch to
493
+
494
+ Returns:
495
+ A dict of the room account data.
496
+ """
497
+
498
+ def get_updated_room_account_data_for_user_for_room_txn(
499
+ txn: LoggingTransaction,
500
+ ) -> dict[str, JsonMapping]:
501
+ sql = """
502
+ SELECT account_data_type, content FROM room_account_data
503
+ WHERE user_id = ? AND room_id = ? AND stream_id > ? AND stream_id <= ?
504
+ """
505
+ txn.execute(sql, (user_id, room_id, from_stream_id, to_stream_id))
506
+
507
+ room_account_data: dict[str, JsonMapping] = {}
508
+ for row in txn:
509
+ room_account_data[row[0]] = db_to_json(row[1])
510
+
511
+ return room_account_data
512
+
513
+ changed = self._account_data_stream_cache.has_entity_changed(
514
+ user_id, int(from_stream_id)
515
+ )
516
+ if not changed:
517
+ return {}
518
+
519
+ return await self.db_pool.runInteraction(
520
+ "get_updated_room_account_data_for_user_for_room",
521
+ get_updated_room_account_data_for_user_for_room_txn,
522
+ )
523
+
524
+ @cached(max_entries=5000, iterable=True)
525
+ async def ignored_by(self, user_id: str) -> frozenset[str]:
526
+ """
527
+ Get users which ignore the given user.
528
+
529
+ Params:
530
+ user_id: The user ID which might be ignored.
531
+
532
+ Return:
533
+ The user IDs which ignore the given user.
534
+ """
535
+ return frozenset(
536
+ await self.db_pool.simple_select_onecol(
537
+ table="ignored_users",
538
+ keyvalues={"ignored_user_id": user_id},
539
+ retcol="ignorer_user_id",
540
+ desc="ignored_by",
541
+ )
542
+ )
543
+
544
+ @cached(max_entries=5000, iterable=True)
545
+ async def ignored_users(self, user_id: str) -> frozenset[str]:
546
+ """
547
+ Get users which the given user ignores.
548
+
549
+ Params:
550
+ user_id: The user ID which is making the request.
551
+
552
+ Return:
553
+ The user IDs which are ignored by the given user.
554
+ """
555
+ return frozenset(
556
+ await self.db_pool.simple_select_onecol(
557
+ table="ignored_users",
558
+ keyvalues={"ignorer_user_id": user_id},
559
+ retcol="ignored_user_id",
560
+ desc="ignored_users",
561
+ )
562
+ )
563
+
564
+ async def get_invite_config_for_user(self, user_id: str) -> InviteRulesConfig:
565
+ """
566
+ Get the invite configuration for the current user.
567
+
568
+ Args:
569
+ user_id:
570
+ """
571
+
572
+ if not self._msc4155_enabled:
573
+ # This equates to allowing all invites, as if the setting was off.
574
+ return InviteRulesConfig(None)
575
+
576
+ data = await self.get_global_account_data_by_type_for_user(
577
+ user_id, AccountDataTypes.MSC4155_INVITE_PERMISSION_CONFIG
578
+ )
579
+ return InviteRulesConfig(data)
580
+
581
+ async def get_admin_client_config_for_user(self, user_id: str) -> AdminClientConfig:
582
+ """
583
+ Get the admin client configuration for the specified user.
584
+
585
+ The admin client config contains Synapse-specific settings that clients running
586
+ server admin accounts can use. They have no effect on non-admin users.
587
+
588
+ Args:
589
+ user_id: The user ID to get config for.
590
+ """
591
+ data = await self.get_global_account_data_by_type_for_user(
592
+ user_id, AccountDataTypes.SYNAPSE_ADMIN_CLIENT_CONFIG
593
+ )
594
+ return AdminClientConfig(data)
595
+
596
+ def process_replication_rows(
597
+ self,
598
+ stream_name: str,
599
+ instance_name: str,
600
+ token: int,
601
+ rows: Iterable[Any],
602
+ ) -> None:
603
+ if stream_name == AccountDataStream.NAME:
604
+ for row in rows:
605
+ if not row.room_id:
606
+ self.get_global_account_data_by_type_for_user.invalidate(
607
+ (row.user_id, row.data_type)
608
+ )
609
+ self.get_global_account_data_for_user.invalidate((row.user_id,))
610
+ self.get_room_account_data_for_user.invalidate((row.user_id,))
611
+ self.get_account_data_for_room.invalidate((row.user_id, row.room_id))
612
+ self.get_account_data_for_room_and_type.invalidate(
613
+ (row.user_id, row.room_id, row.data_type)
614
+ )
615
+ self._account_data_stream_cache.entity_has_changed(row.user_id, token)
616
+
617
+ super().process_replication_rows(stream_name, instance_name, token, rows)
618
+
619
+ def process_replication_position(
620
+ self, stream_name: str, instance_name: str, token: int
621
+ ) -> None:
622
+ if stream_name == AccountDataStream.NAME:
623
+ self._account_data_id_gen.advance(instance_name, token)
624
+ super().process_replication_position(stream_name, instance_name, token)
625
+
626
+ async def add_account_data_to_room(
627
+ self, user_id: str, room_id: str, account_data_type: str, content: JsonDict
628
+ ) -> int:
629
+ """Add some account_data to a room for a user.
630
+
631
+ Args:
632
+ user_id: The user to add a tag for.
633
+ room_id: The room to add a tag for.
634
+ account_data_type: The type of account_data to add.
635
+ content: A json object to associate with the tag.
636
+
637
+ Returns:
638
+ The maximum stream ID.
639
+ """
640
+ assert self._can_write_to_account_data
641
+
642
+ content_json = json_encoder.encode(content)
643
+
644
+ async with self._account_data_id_gen.get_next() as next_id:
645
+ await self.db_pool.simple_upsert(
646
+ desc="add_room_account_data",
647
+ table="room_account_data",
648
+ keyvalues={
649
+ "user_id": user_id,
650
+ "room_id": room_id,
651
+ "account_data_type": account_data_type,
652
+ },
653
+ values={"stream_id": next_id, "content": content_json},
654
+ )
655
+
656
+ self._account_data_stream_cache.entity_has_changed(user_id, next_id)
657
+ self.get_room_account_data_for_user.invalidate((user_id,))
658
+ self.get_account_data_for_room.invalidate((user_id, room_id))
659
+ self.get_account_data_for_room_and_type.prefill(
660
+ (user_id, room_id, account_data_type), content
661
+ )
662
+
663
+ return self._account_data_id_gen.get_current_token()
664
+
665
+ async def remove_account_data_for_room(
666
+ self, user_id: str, room_id: str, account_data_type: str
667
+ ) -> int:
668
+ """Delete the room account data for the user of a given type.
669
+
670
+ Args:
671
+ user_id: The user to remove account_data for.
672
+ room_id: The room ID to scope the request to.
673
+ account_data_type: The account data type to delete.
674
+
675
+ Returns:
676
+ The maximum stream position, or None if there was no matching room account
677
+ data to delete.
678
+ """
679
+ assert self._can_write_to_account_data
680
+
681
+ def _remove_account_data_for_room_txn(
682
+ txn: LoggingTransaction, next_id: int
683
+ ) -> bool:
684
+ """
685
+ Args:
686
+ txn: The transaction object.
687
+ next_id: The stream_id to update any existing rows to.
688
+
689
+ Returns:
690
+ True if an entry in room_account_data had its content set to '{}',
691
+ otherwise False. This informs callers of whether there actually was an
692
+ existing room account data entry to delete, or if the call was a no-op.
693
+ """
694
+ # We can't use `simple_update` as it doesn't have the ability to specify
695
+ # where clauses other than '=', which we need for `content != '{}'` below.
696
+ sql = """
697
+ UPDATE room_account_data
698
+ SET stream_id = ?, content = '{}'
699
+ WHERE user_id = ?
700
+ AND room_id = ?
701
+ AND account_data_type = ?
702
+ AND content != '{}'
703
+ """
704
+ txn.execute(
705
+ sql,
706
+ (next_id, user_id, room_id, account_data_type),
707
+ )
708
+ # Return true if any rows were updated.
709
+ return txn.rowcount != 0
710
+
711
+ async with self._account_data_id_gen.get_next() as next_id:
712
+ row_updated = await self.db_pool.runInteraction(
713
+ "remove_account_data_for_room",
714
+ _remove_account_data_for_room_txn,
715
+ next_id,
716
+ )
717
+
718
+ if row_updated:
719
+ self._account_data_stream_cache.entity_has_changed(user_id, next_id)
720
+ self.get_room_account_data_for_user.invalidate((user_id,))
721
+ self.get_account_data_for_room.invalidate((user_id, room_id))
722
+ self.get_account_data_for_room_and_type.prefill(
723
+ (user_id, room_id, account_data_type), {}
724
+ )
725
+
726
+ return self._account_data_id_gen.get_current_token()
727
+
728
+ async def add_account_data_for_user(
729
+ self, user_id: str, account_data_type: str, content: JsonDict
730
+ ) -> int:
731
+ """Add some global account_data for a user.
732
+
733
+ Args:
734
+ user_id: The user to add a tag for.
735
+ account_data_type: The type of account_data to add.
736
+ content: A json object to associate with the tag.
737
+
738
+ Returns:
739
+ The maximum stream ID.
740
+ """
741
+ assert self._can_write_to_account_data
742
+
743
+ async with self._account_data_id_gen.get_next() as next_id:
744
+ await self.db_pool.runInteraction(
745
+ "add_user_account_data",
746
+ self._add_account_data_for_user,
747
+ next_id,
748
+ user_id,
749
+ account_data_type,
750
+ content,
751
+ )
752
+
753
+ self._account_data_stream_cache.entity_has_changed(user_id, next_id)
754
+ self.get_global_account_data_for_user.invalidate((user_id,))
755
+ self.get_global_account_data_by_type_for_user.invalidate(
756
+ (user_id, account_data_type)
757
+ )
758
+
759
+ return self._account_data_id_gen.get_current_token()
760
+
761
+ def _add_account_data_for_user(
762
+ self,
763
+ txn: LoggingTransaction,
764
+ next_id: int,
765
+ user_id: str,
766
+ account_data_type: str,
767
+ content: JsonDict,
768
+ ) -> None:
769
+ content_json = json_encoder.encode(content)
770
+
771
+ self.db_pool.simple_upsert_txn(
772
+ txn,
773
+ table="account_data",
774
+ keyvalues={"user_id": user_id, "account_data_type": account_data_type},
775
+ values={"stream_id": next_id, "content": content_json},
776
+ )
777
+
778
+ # Ignored users get denormalized into a separate table as an optimisation.
779
+ if account_data_type != AccountDataTypes.IGNORED_USER_LIST:
780
+ return
781
+
782
+ # Insert / delete to sync the list of ignored users.
783
+ previously_ignored_users = set(
784
+ self.db_pool.simple_select_onecol_txn(
785
+ txn,
786
+ table="ignored_users",
787
+ keyvalues={"ignorer_user_id": user_id},
788
+ retcol="ignored_user_id",
789
+ )
790
+ )
791
+
792
+ # If the data is invalid, no one is ignored.
793
+ ignored_users_content = content.get("ignored_users", {})
794
+ if isinstance(ignored_users_content, dict):
795
+ currently_ignored_users = set(ignored_users_content)
796
+ else:
797
+ currently_ignored_users = set()
798
+
799
+ if user_id in currently_ignored_users:
800
+ raise SynapseError(400, "You cannot ignore yourself", Codes.INVALID_PARAM)
801
+
802
+ # If the data has not changed, nothing to do.
803
+ if previously_ignored_users == currently_ignored_users:
804
+ return
805
+
806
+ # Delete entries which are no longer ignored.
807
+ self.db_pool.simple_delete_many_txn(
808
+ txn,
809
+ table="ignored_users",
810
+ column="ignored_user_id",
811
+ values=previously_ignored_users - currently_ignored_users,
812
+ keyvalues={"ignorer_user_id": user_id},
813
+ )
814
+
815
+ # Add entries which are newly ignored.
816
+ self.db_pool.simple_insert_many_txn(
817
+ txn,
818
+ table="ignored_users",
819
+ keys=("ignorer_user_id", "ignored_user_id"),
820
+ values=[
821
+ (user_id, u) for u in currently_ignored_users - previously_ignored_users
822
+ ],
823
+ )
824
+
825
+ # Invalidate the cache for any ignored users which were added or removed.
826
+ self._invalidate_cache_and_stream_bulk(
827
+ txn,
828
+ self.ignored_by,
829
+ [
830
+ (ignored_user_id,)
831
+ for ignored_user_id in (
832
+ previously_ignored_users ^ currently_ignored_users
833
+ )
834
+ ],
835
+ )
836
+ self._invalidate_cache_and_stream(txn, self.ignored_users, (user_id,))
837
+
838
+ async def remove_account_data_for_user(
839
+ self,
840
+ user_id: str,
841
+ account_data_type: str,
842
+ ) -> int:
843
+ """
844
+ Delete a single piece of user account data by type.
845
+
846
+ A "delete" is performed by updating a potentially existing row in the
847
+ "account_data" database table for (user_id, account_data_type) and
848
+ setting its content to "{}".
849
+
850
+ Args:
851
+ user_id: The user ID to modify the account data of.
852
+ account_data_type: The type to remove.
853
+
854
+ Returns:
855
+ The maximum stream position, or None if there was no matching account data
856
+ to delete.
857
+ """
858
+ assert self._can_write_to_account_data
859
+
860
+ def _remove_account_data_for_user_txn(
861
+ txn: LoggingTransaction, next_id: int
862
+ ) -> bool:
863
+ """
864
+ Args:
865
+ txn: The transaction object.
866
+ next_id: The stream_id to update any existing rows to.
867
+
868
+ Returns:
869
+ True if an entry in account_data had its content set to '{}', otherwise
870
+ False. This informs callers of whether there actually was an existing
871
+ account data entry to delete, or if the call was a no-op.
872
+ """
873
+ # We can't use `simple_update` as it doesn't have the ability to specify
874
+ # where clauses other than '=', which we need for `content != '{}'` below.
875
+ sql = """
876
+ UPDATE account_data
877
+ SET stream_id = ?, content = '{}'
878
+ WHERE user_id = ?
879
+ AND account_data_type = ?
880
+ AND content != '{}'
881
+ """
882
+ txn.execute(sql, (next_id, user_id, account_data_type))
883
+ if txn.rowcount == 0:
884
+ # We didn't update any rows. This means that there was no matching room
885
+ # account data entry to delete in the first place.
886
+ return False
887
+
888
+ # Ignored users get denormalized into a separate table as an optimisation.
889
+ if account_data_type == AccountDataTypes.IGNORED_USER_LIST:
890
+ # If this method was called with the ignored users account data type, we
891
+ # simply delete all ignored users.
892
+
893
+ # First pull all the users that this user ignores.
894
+ previously_ignored_users = set(
895
+ self.db_pool.simple_select_onecol_txn(
896
+ txn,
897
+ table="ignored_users",
898
+ keyvalues={"ignorer_user_id": user_id},
899
+ retcol="ignored_user_id",
900
+ )
901
+ )
902
+
903
+ # Then delete them from the database.
904
+ self.db_pool.simple_delete_txn(
905
+ txn,
906
+ table="ignored_users",
907
+ keyvalues={"ignorer_user_id": user_id},
908
+ )
909
+
910
+ # Invalidate the cache for ignored users which were removed.
911
+ self._invalidate_cache_and_stream_bulk(
912
+ txn,
913
+ self.ignored_by,
914
+ [
915
+ (ignored_user_id,)
916
+ for ignored_user_id in previously_ignored_users
917
+ ],
918
+ )
919
+
920
+ # Invalidate for this user the cache tracking ignored users.
921
+ self._invalidate_cache_and_stream(txn, self.ignored_users, (user_id,))
922
+
923
+ return True
924
+
925
+ async with self._account_data_id_gen.get_next() as next_id:
926
+ row_updated = await self.db_pool.runInteraction(
927
+ "remove_account_data_for_user",
928
+ _remove_account_data_for_user_txn,
929
+ next_id,
930
+ )
931
+
932
+ if row_updated:
933
+ self._account_data_stream_cache.entity_has_changed(user_id, next_id)
934
+ self.get_global_account_data_for_user.invalidate((user_id,))
935
+ self.get_global_account_data_by_type_for_user.prefill(
936
+ (user_id, account_data_type), {}
937
+ )
938
+
939
+ return self._account_data_id_gen.get_current_token()
940
+
941
+ async def purge_account_data_for_user(self, user_id: str) -> None:
942
+ """
943
+ Removes ALL the account data for a user.
944
+ Intended to be used upon user deactivation.
945
+
946
+ Also purges the user from the ignored_users cache table
947
+ and the push_rules cache tables.
948
+ """
949
+
950
+ await self.db_pool.runInteraction(
951
+ "purge_account_data_for_user_txn",
952
+ self._purge_account_data_for_user_txn,
953
+ user_id,
954
+ )
955
+
956
+ def _purge_account_data_for_user_txn(
957
+ self, txn: LoggingTransaction, user_id: str
958
+ ) -> None:
959
+ """
960
+ See `purge_account_data_for_user`.
961
+ """
962
+ # Purge from the primary account_data tables.
963
+ self.db_pool.simple_delete_txn(
964
+ txn, table="account_data", keyvalues={"user_id": user_id}
965
+ )
966
+
967
+ self.db_pool.simple_delete_txn(
968
+ txn, table="room_account_data", keyvalues={"user_id": user_id}
969
+ )
970
+
971
+ # Purge from ignored_users where this user is the ignorer.
972
+ # N.B. We don't purge where this user is the ignoree, because that
973
+ # interferes with other users' account data.
974
+ # It's also not this user's data to delete!
975
+ self.db_pool.simple_delete_txn(
976
+ txn, table="ignored_users", keyvalues={"ignorer_user_id": user_id}
977
+ )
978
+
979
+ # Remove the push rules
980
+ self.db_pool.simple_delete_txn(
981
+ txn, table="push_rules", keyvalues={"user_name": user_id}
982
+ )
983
+ self.db_pool.simple_delete_txn(
984
+ txn, table="push_rules_enable", keyvalues={"user_name": user_id}
985
+ )
986
+ self.db_pool.simple_delete_txn(
987
+ txn, table="push_rules_stream", keyvalues={"user_id": user_id}
988
+ )
989
+
990
+ # Invalidate caches as appropriate
991
+ self._invalidate_cache_and_stream(
992
+ txn, self.get_account_data_for_room_and_type, (user_id,)
993
+ )
994
+ self._invalidate_cache_and_stream(
995
+ txn, self.get_global_account_data_for_user, (user_id,)
996
+ )
997
+ self._invalidate_cache_and_stream(
998
+ txn, self.get_room_account_data_for_user, (user_id,)
999
+ )
1000
+ self._invalidate_cache_and_stream(
1001
+ txn, self.get_global_account_data_by_type_for_user, (user_id,)
1002
+ )
1003
+ self._invalidate_cache_and_stream(
1004
+ txn, self.get_account_data_for_room, (user_id,)
1005
+ )
1006
+ self._invalidate_cache_and_stream(txn, self.get_push_rules_for_user, (user_id,))
1007
+ # This user might be contained in the ignored_by cache for other users,
1008
+ # so we have to invalidate it all.
1009
+ self._invalidate_all_cache_and_stream(txn, self.ignored_by)
1010
+
1011
+ async def _delete_account_data_for_deactivated_users(
1012
+ self, progress: dict, batch_size: int
1013
+ ) -> int:
1014
+ """
1015
+ Retroactively purges account data for users that have already been deactivated.
1016
+ Gets run as a background update caused by a schema delta.
1017
+ """
1018
+
1019
+ last_user: str = progress.get("last_user", "")
1020
+
1021
+ def _delete_account_data_for_deactivated_users_txn(
1022
+ txn: LoggingTransaction,
1023
+ ) -> int:
1024
+ sql = """
1025
+ SELECT name FROM users
1026
+ WHERE deactivated = ? and name > ?
1027
+ ORDER BY name ASC
1028
+ LIMIT ?
1029
+ """
1030
+
1031
+ txn.execute(sql, (1, last_user, batch_size))
1032
+ users = [row[0] for row in txn]
1033
+
1034
+ for user in users:
1035
+ self._purge_account_data_for_user_txn(txn, user_id=user)
1036
+
1037
+ if users:
1038
+ self.db_pool.updates._background_update_progress_txn(
1039
+ txn,
1040
+ "delete_account_data_for_deactivated_users",
1041
+ {"last_user": users[-1]},
1042
+ )
1043
+
1044
+ return len(users)
1045
+
1046
+ number_deleted = await self.db_pool.runInteraction(
1047
+ "_delete_account_data_for_deactivated_users",
1048
+ _delete_account_data_for_deactivated_users_txn,
1049
+ )
1050
+
1051
+ if number_deleted < batch_size:
1052
+ await self.db_pool.updates._end_background_update(
1053
+ "delete_account_data_for_deactivated_users"
1054
+ )
1055
+
1056
+ return number_deleted
1057
+
1058
+
1059
+ class AccountDataStore(AccountDataWorkerStore):
1060
+ pass