matrix-synapse 1.143.0__cp310-abi3-manylinux_2_28_aarch64.whl

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

Potentially problematic release.


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

Files changed (1058) hide show
  1. matrix_synapse-1.143.0.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0.dist-info/entry_points.txt +14 -0
  8. synapse/__init__.py +97 -0
  9. synapse/_scripts/__init__.py +0 -0
  10. synapse/_scripts/export_signing_key.py +109 -0
  11. synapse/_scripts/generate_config.py +83 -0
  12. synapse/_scripts/generate_log_config.py +56 -0
  13. synapse/_scripts/generate_signing_key.py +55 -0
  14. synapse/_scripts/generate_workers_map.py +318 -0
  15. synapse/_scripts/hash_password.py +95 -0
  16. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  17. synapse/_scripts/register_new_matrix_user.py +402 -0
  18. synapse/_scripts/review_recent_signups.py +212 -0
  19. synapse/_scripts/synapse_port_db.py +1604 -0
  20. synapse/_scripts/synctl.py +365 -0
  21. synapse/_scripts/update_synapse_database.py +130 -0
  22. synapse/api/__init__.py +20 -0
  23. synapse/api/auth/__init__.py +207 -0
  24. synapse/api/auth/base.py +406 -0
  25. synapse/api/auth/internal.py +299 -0
  26. synapse/api/auth/mas.py +436 -0
  27. synapse/api/auth/msc3861_delegated.py +617 -0
  28. synapse/api/auth_blocking.py +144 -0
  29. synapse/api/constants.py +362 -0
  30. synapse/api/errors.py +907 -0
  31. synapse/api/filtering.py +537 -0
  32. synapse/api/presence.py +102 -0
  33. synapse/api/ratelimiting.py +480 -0
  34. synapse/api/room_versions.py +535 -0
  35. synapse/api/urls.py +118 -0
  36. synapse/app/__init__.py +60 -0
  37. synapse/app/_base.py +862 -0
  38. synapse/app/admin_cmd.py +388 -0
  39. synapse/app/appservice.py +30 -0
  40. synapse/app/client_reader.py +30 -0
  41. synapse/app/complement_fork_starter.py +206 -0
  42. synapse/app/event_creator.py +29 -0
  43. synapse/app/federation_reader.py +30 -0
  44. synapse/app/federation_sender.py +30 -0
  45. synapse/app/frontend_proxy.py +30 -0
  46. synapse/app/generic_worker.py +474 -0
  47. synapse/app/homeserver.py +505 -0
  48. synapse/app/media_repository.py +30 -0
  49. synapse/app/phone_stats_home.py +296 -0
  50. synapse/app/pusher.py +30 -0
  51. synapse/app/synchrotron.py +30 -0
  52. synapse/app/user_dir.py +31 -0
  53. synapse/appservice/__init__.py +458 -0
  54. synapse/appservice/api.py +567 -0
  55. synapse/appservice/scheduler.py +564 -0
  56. synapse/config/__init__.py +27 -0
  57. synapse/config/__main__.py +62 -0
  58. synapse/config/_base.py +1106 -0
  59. synapse/config/_base.pyi +215 -0
  60. synapse/config/_util.py +99 -0
  61. synapse/config/account_validity.py +116 -0
  62. synapse/config/api.py +141 -0
  63. synapse/config/appservice.py +210 -0
  64. synapse/config/auth.py +80 -0
  65. synapse/config/auto_accept_invites.py +43 -0
  66. synapse/config/background_updates.py +44 -0
  67. synapse/config/cache.py +231 -0
  68. synapse/config/captcha.py +90 -0
  69. synapse/config/cas.py +116 -0
  70. synapse/config/consent.py +73 -0
  71. synapse/config/database.py +184 -0
  72. synapse/config/emailconfig.py +367 -0
  73. synapse/config/experimental.py +595 -0
  74. synapse/config/federation.py +114 -0
  75. synapse/config/homeserver.py +141 -0
  76. synapse/config/jwt.py +55 -0
  77. synapse/config/key.py +447 -0
  78. synapse/config/logger.py +390 -0
  79. synapse/config/mas.py +192 -0
  80. synapse/config/matrixrtc.py +66 -0
  81. synapse/config/metrics.py +84 -0
  82. synapse/config/modules.py +40 -0
  83. synapse/config/oembed.py +185 -0
  84. synapse/config/oidc.py +509 -0
  85. synapse/config/password_auth_providers.py +82 -0
  86. synapse/config/push.py +64 -0
  87. synapse/config/ratelimiting.py +254 -0
  88. synapse/config/redis.py +74 -0
  89. synapse/config/registration.py +296 -0
  90. synapse/config/repository.py +311 -0
  91. synapse/config/retention.py +162 -0
  92. synapse/config/room.py +88 -0
  93. synapse/config/room_directory.py +165 -0
  94. synapse/config/saml2.py +251 -0
  95. synapse/config/server.py +1170 -0
  96. synapse/config/server_notices.py +84 -0
  97. synapse/config/spam_checker.py +66 -0
  98. synapse/config/sso.py +121 -0
  99. synapse/config/stats.py +54 -0
  100. synapse/config/third_party_event_rules.py +40 -0
  101. synapse/config/tls.py +192 -0
  102. synapse/config/tracer.py +71 -0
  103. synapse/config/user_directory.py +47 -0
  104. synapse/config/user_types.py +42 -0
  105. synapse/config/voip.py +59 -0
  106. synapse/config/workers.py +642 -0
  107. synapse/crypto/__init__.py +20 -0
  108. synapse/crypto/context_factory.py +278 -0
  109. synapse/crypto/event_signing.py +194 -0
  110. synapse/crypto/keyring.py +931 -0
  111. synapse/event_auth.py +1266 -0
  112. synapse/events/__init__.py +667 -0
  113. synapse/events/auto_accept_invites.py +216 -0
  114. synapse/events/builder.py +387 -0
  115. synapse/events/presence_router.py +243 -0
  116. synapse/events/snapshot.py +559 -0
  117. synapse/events/utils.py +924 -0
  118. synapse/events/validator.py +305 -0
  119. synapse/federation/__init__.py +22 -0
  120. synapse/federation/federation_base.py +382 -0
  121. synapse/federation/federation_client.py +2132 -0
  122. synapse/federation/federation_server.py +1540 -0
  123. synapse/federation/persistence.py +70 -0
  124. synapse/federation/send_queue.py +531 -0
  125. synapse/federation/sender/__init__.py +1164 -0
  126. synapse/federation/sender/per_destination_queue.py +886 -0
  127. synapse/federation/sender/transaction_manager.py +210 -0
  128. synapse/federation/transport/__init__.py +28 -0
  129. synapse/federation/transport/client.py +1199 -0
  130. synapse/federation/transport/server/__init__.py +334 -0
  131. synapse/federation/transport/server/_base.py +429 -0
  132. synapse/federation/transport/server/federation.py +910 -0
  133. synapse/federation/units.py +133 -0
  134. synapse/handlers/__init__.py +20 -0
  135. synapse/handlers/account.py +162 -0
  136. synapse/handlers/account_data.py +360 -0
  137. synapse/handlers/account_validity.py +361 -0
  138. synapse/handlers/admin.py +615 -0
  139. synapse/handlers/appservice.py +989 -0
  140. synapse/handlers/auth.py +2481 -0
  141. synapse/handlers/cas.py +413 -0
  142. synapse/handlers/deactivate_account.py +363 -0
  143. synapse/handlers/delayed_events.py +599 -0
  144. synapse/handlers/device.py +1870 -0
  145. synapse/handlers/devicemessage.py +399 -0
  146. synapse/handlers/directory.py +545 -0
  147. synapse/handlers/e2e_keys.py +1834 -0
  148. synapse/handlers/e2e_room_keys.py +455 -0
  149. synapse/handlers/event_auth.py +390 -0
  150. synapse/handlers/events.py +201 -0
  151. synapse/handlers/federation.py +2039 -0
  152. synapse/handlers/federation_event.py +2419 -0
  153. synapse/handlers/identity.py +812 -0
  154. synapse/handlers/initial_sync.py +528 -0
  155. synapse/handlers/jwt.py +120 -0
  156. synapse/handlers/message.py +2347 -0
  157. synapse/handlers/oidc.py +1801 -0
  158. synapse/handlers/pagination.py +768 -0
  159. synapse/handlers/password_policy.py +102 -0
  160. synapse/handlers/presence.py +2633 -0
  161. synapse/handlers/profile.py +655 -0
  162. synapse/handlers/push_rules.py +164 -0
  163. synapse/handlers/read_marker.py +79 -0
  164. synapse/handlers/receipts.py +351 -0
  165. synapse/handlers/register.py +1059 -0
  166. synapse/handlers/relations.py +623 -0
  167. synapse/handlers/reports.py +98 -0
  168. synapse/handlers/room.py +2448 -0
  169. synapse/handlers/room_list.py +632 -0
  170. synapse/handlers/room_member.py +2365 -0
  171. synapse/handlers/room_member_worker.py +146 -0
  172. synapse/handlers/room_policy.py +186 -0
  173. synapse/handlers/room_summary.py +1057 -0
  174. synapse/handlers/saml.py +524 -0
  175. synapse/handlers/search.py +723 -0
  176. synapse/handlers/send_email.py +209 -0
  177. synapse/handlers/set_password.py +71 -0
  178. synapse/handlers/sliding_sync/__init__.py +1701 -0
  179. synapse/handlers/sliding_sync/extensions.py +969 -0
  180. synapse/handlers/sliding_sync/room_lists.py +2262 -0
  181. synapse/handlers/sliding_sync/store.py +128 -0
  182. synapse/handlers/sso.py +1291 -0
  183. synapse/handlers/state_deltas.py +82 -0
  184. synapse/handlers/stats.py +321 -0
  185. synapse/handlers/sync.py +3106 -0
  186. synapse/handlers/thread_subscriptions.py +190 -0
  187. synapse/handlers/typing.py +606 -0
  188. synapse/handlers/ui_auth/__init__.py +48 -0
  189. synapse/handlers/ui_auth/checkers.py +332 -0
  190. synapse/handlers/user_directory.py +783 -0
  191. synapse/handlers/worker_lock.py +371 -0
  192. synapse/http/__init__.py +105 -0
  193. synapse/http/additional_resource.py +62 -0
  194. synapse/http/client.py +1373 -0
  195. synapse/http/connectproxyclient.py +316 -0
  196. synapse/http/federation/__init__.py +19 -0
  197. synapse/http/federation/matrix_federation_agent.py +490 -0
  198. synapse/http/federation/srv_resolver.py +196 -0
  199. synapse/http/federation/well_known_resolver.py +367 -0
  200. synapse/http/matrixfederationclient.py +1873 -0
  201. synapse/http/proxy.py +290 -0
  202. synapse/http/proxyagent.py +497 -0
  203. synapse/http/replicationagent.py +202 -0
  204. synapse/http/request_metrics.py +309 -0
  205. synapse/http/server.py +1110 -0
  206. synapse/http/servlet.py +1018 -0
  207. synapse/http/site.py +825 -0
  208. synapse/http/types.py +27 -0
  209. synapse/logging/__init__.py +31 -0
  210. synapse/logging/_remote.py +261 -0
  211. synapse/logging/_terse_json.py +95 -0
  212. synapse/logging/context.py +1209 -0
  213. synapse/logging/formatter.py +62 -0
  214. synapse/logging/handlers.py +99 -0
  215. synapse/logging/loggers.py +25 -0
  216. synapse/logging/opentracing.py +1132 -0
  217. synapse/logging/scopecontextmanager.py +160 -0
  218. synapse/media/_base.py +830 -0
  219. synapse/media/filepath.py +417 -0
  220. synapse/media/media_repository.py +1580 -0
  221. synapse/media/media_storage.py +702 -0
  222. synapse/media/oembed.py +277 -0
  223. synapse/media/preview_html.py +556 -0
  224. synapse/media/storage_provider.py +195 -0
  225. synapse/media/thumbnailer.py +833 -0
  226. synapse/media/url_previewer.py +875 -0
  227. synapse/metrics/__init__.py +748 -0
  228. synapse/metrics/_gc.py +219 -0
  229. synapse/metrics/_reactor_metrics.py +171 -0
  230. synapse/metrics/_types.py +38 -0
  231. synapse/metrics/background_process_metrics.py +555 -0
  232. synapse/metrics/common_usage_metrics.py +94 -0
  233. synapse/metrics/jemalloc.py +248 -0
  234. synapse/module_api/__init__.py +2131 -0
  235. synapse/module_api/callbacks/__init__.py +50 -0
  236. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  237. synapse/module_api/callbacks/media_repository_callbacks.py +157 -0
  238. synapse/module_api/callbacks/ratelimit_callbacks.py +78 -0
  239. synapse/module_api/callbacks/spamchecker_callbacks.py +991 -0
  240. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +592 -0
  241. synapse/module_api/errors.py +42 -0
  242. synapse/notifier.py +970 -0
  243. synapse/push/__init__.py +212 -0
  244. synapse/push/bulk_push_rule_evaluator.py +635 -0
  245. synapse/push/clientformat.py +126 -0
  246. synapse/push/emailpusher.py +333 -0
  247. synapse/push/httppusher.py +564 -0
  248. synapse/push/mailer.py +1010 -0
  249. synapse/push/presentable_names.py +216 -0
  250. synapse/push/push_tools.py +114 -0
  251. synapse/push/push_types.py +141 -0
  252. synapse/push/pusher.py +87 -0
  253. synapse/push/pusherpool.py +501 -0
  254. synapse/push/rulekinds.py +33 -0
  255. synapse/py.typed +0 -0
  256. synapse/replication/__init__.py +20 -0
  257. synapse/replication/http/__init__.py +68 -0
  258. synapse/replication/http/_base.py +468 -0
  259. synapse/replication/http/account_data.py +297 -0
  260. synapse/replication/http/deactivate_account.py +81 -0
  261. synapse/replication/http/delayed_events.py +62 -0
  262. synapse/replication/http/devices.py +254 -0
  263. synapse/replication/http/federation.py +334 -0
  264. synapse/replication/http/login.py +106 -0
  265. synapse/replication/http/membership.py +364 -0
  266. synapse/replication/http/presence.py +133 -0
  267. synapse/replication/http/push.py +156 -0
  268. synapse/replication/http/register.py +172 -0
  269. synapse/replication/http/send_events.py +182 -0
  270. synapse/replication/http/state.py +82 -0
  271. synapse/replication/http/streams.py +101 -0
  272. synapse/replication/tcp/__init__.py +56 -0
  273. synapse/replication/tcp/client.py +552 -0
  274. synapse/replication/tcp/commands.py +569 -0
  275. synapse/replication/tcp/context.py +41 -0
  276. synapse/replication/tcp/external_cache.py +156 -0
  277. synapse/replication/tcp/handler.py +922 -0
  278. synapse/replication/tcp/protocol.py +608 -0
  279. synapse/replication/tcp/redis.py +509 -0
  280. synapse/replication/tcp/resource.py +348 -0
  281. synapse/replication/tcp/streams/__init__.py +96 -0
  282. synapse/replication/tcp/streams/_base.py +765 -0
  283. synapse/replication/tcp/streams/events.py +287 -0
  284. synapse/replication/tcp/streams/federation.py +92 -0
  285. synapse/replication/tcp/streams/partial_state.py +80 -0
  286. synapse/res/providers.json +29 -0
  287. synapse/res/templates/_base.html +29 -0
  288. synapse/res/templates/account_previously_renewed.html +6 -0
  289. synapse/res/templates/account_renewed.html +6 -0
  290. synapse/res/templates/add_threepid.html +8 -0
  291. synapse/res/templates/add_threepid.txt +6 -0
  292. synapse/res/templates/add_threepid_failure.html +7 -0
  293. synapse/res/templates/add_threepid_success.html +6 -0
  294. synapse/res/templates/already_in_use.html +12 -0
  295. synapse/res/templates/already_in_use.txt +10 -0
  296. synapse/res/templates/auth_success.html +21 -0
  297. synapse/res/templates/invalid_token.html +6 -0
  298. synapse/res/templates/mail-Element.css +7 -0
  299. synapse/res/templates/mail-Vector.css +7 -0
  300. synapse/res/templates/mail-expiry.css +4 -0
  301. synapse/res/templates/mail.css +156 -0
  302. synapse/res/templates/notice_expiry.html +46 -0
  303. synapse/res/templates/notice_expiry.txt +7 -0
  304. synapse/res/templates/notif.html +51 -0
  305. synapse/res/templates/notif.txt +22 -0
  306. synapse/res/templates/notif_mail.html +59 -0
  307. synapse/res/templates/notif_mail.txt +10 -0
  308. synapse/res/templates/password_reset.html +10 -0
  309. synapse/res/templates/password_reset.txt +7 -0
  310. synapse/res/templates/password_reset_confirmation.html +15 -0
  311. synapse/res/templates/password_reset_failure.html +7 -0
  312. synapse/res/templates/password_reset_success.html +6 -0
  313. synapse/res/templates/recaptcha.html +42 -0
  314. synapse/res/templates/registration.html +12 -0
  315. synapse/res/templates/registration.txt +10 -0
  316. synapse/res/templates/registration_failure.html +6 -0
  317. synapse/res/templates/registration_success.html +6 -0
  318. synapse/res/templates/registration_token.html +18 -0
  319. synapse/res/templates/room.html +33 -0
  320. synapse/res/templates/room.txt +9 -0
  321. synapse/res/templates/sso.css +129 -0
  322. synapse/res/templates/sso_account_deactivated.html +25 -0
  323. synapse/res/templates/sso_auth_account_details.html +186 -0
  324. synapse/res/templates/sso_auth_account_details.js +116 -0
  325. synapse/res/templates/sso_auth_bad_user.html +26 -0
  326. synapse/res/templates/sso_auth_confirm.html +27 -0
  327. synapse/res/templates/sso_auth_success.html +26 -0
  328. synapse/res/templates/sso_error.html +71 -0
  329. synapse/res/templates/sso_footer.html +19 -0
  330. synapse/res/templates/sso_login_idp_picker.html +60 -0
  331. synapse/res/templates/sso_new_user_consent.html +30 -0
  332. synapse/res/templates/sso_partial_profile.html +19 -0
  333. synapse/res/templates/sso_redirect_confirm.html +39 -0
  334. synapse/res/templates/style.css +33 -0
  335. synapse/res/templates/terms.html +27 -0
  336. synapse/rest/__init__.py +197 -0
  337. synapse/rest/admin/__init__.py +390 -0
  338. synapse/rest/admin/_base.py +72 -0
  339. synapse/rest/admin/background_updates.py +171 -0
  340. synapse/rest/admin/devices.py +221 -0
  341. synapse/rest/admin/event_reports.py +173 -0
  342. synapse/rest/admin/events.py +69 -0
  343. synapse/rest/admin/experimental_features.py +137 -0
  344. synapse/rest/admin/federation.py +243 -0
  345. synapse/rest/admin/media.py +540 -0
  346. synapse/rest/admin/registration_tokens.py +358 -0
  347. synapse/rest/admin/rooms.py +1061 -0
  348. synapse/rest/admin/scheduled_tasks.py +70 -0
  349. synapse/rest/admin/server_notice_servlet.py +132 -0
  350. synapse/rest/admin/statistics.py +132 -0
  351. synapse/rest/admin/username_available.py +58 -0
  352. synapse/rest/admin/users.py +1606 -0
  353. synapse/rest/client/__init__.py +20 -0
  354. synapse/rest/client/_base.py +113 -0
  355. synapse/rest/client/account.py +930 -0
  356. synapse/rest/client/account_data.py +319 -0
  357. synapse/rest/client/account_validity.py +103 -0
  358. synapse/rest/client/appservice_ping.py +125 -0
  359. synapse/rest/client/auth.py +218 -0
  360. synapse/rest/client/auth_metadata.py +122 -0
  361. synapse/rest/client/capabilities.py +121 -0
  362. synapse/rest/client/delayed_events.py +165 -0
  363. synapse/rest/client/devices.py +587 -0
  364. synapse/rest/client/directory.py +211 -0
  365. synapse/rest/client/events.py +116 -0
  366. synapse/rest/client/filter.py +112 -0
  367. synapse/rest/client/initial_sync.py +65 -0
  368. synapse/rest/client/keys.py +678 -0
  369. synapse/rest/client/knock.py +104 -0
  370. synapse/rest/client/login.py +750 -0
  371. synapse/rest/client/login_token_request.py +127 -0
  372. synapse/rest/client/logout.py +93 -0
  373. synapse/rest/client/matrixrtc.py +52 -0
  374. synapse/rest/client/media.py +285 -0
  375. synapse/rest/client/mutual_rooms.py +93 -0
  376. synapse/rest/client/notifications.py +137 -0
  377. synapse/rest/client/openid.py +109 -0
  378. synapse/rest/client/password_policy.py +69 -0
  379. synapse/rest/client/presence.py +131 -0
  380. synapse/rest/client/profile.py +291 -0
  381. synapse/rest/client/push_rule.py +331 -0
  382. synapse/rest/client/pusher.py +181 -0
  383. synapse/rest/client/read_marker.py +104 -0
  384. synapse/rest/client/receipts.py +165 -0
  385. synapse/rest/client/register.py +1067 -0
  386. synapse/rest/client/relations.py +138 -0
  387. synapse/rest/client/rendezvous.py +76 -0
  388. synapse/rest/client/reporting.py +207 -0
  389. synapse/rest/client/room.py +1669 -0
  390. synapse/rest/client/room_keys.py +426 -0
  391. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  392. synapse/rest/client/sendtodevice.py +85 -0
  393. synapse/rest/client/sync.py +1131 -0
  394. synapse/rest/client/tags.py +129 -0
  395. synapse/rest/client/thirdparty.py +130 -0
  396. synapse/rest/client/thread_subscriptions.py +247 -0
  397. synapse/rest/client/tokenrefresh.py +52 -0
  398. synapse/rest/client/transactions.py +149 -0
  399. synapse/rest/client/user_directory.py +90 -0
  400. synapse/rest/client/versions.py +191 -0
  401. synapse/rest/client/voip.py +88 -0
  402. synapse/rest/consent/__init__.py +0 -0
  403. synapse/rest/consent/consent_resource.py +210 -0
  404. synapse/rest/health.py +38 -0
  405. synapse/rest/key/__init__.py +20 -0
  406. synapse/rest/key/v2/__init__.py +40 -0
  407. synapse/rest/key/v2/local_key_resource.py +125 -0
  408. synapse/rest/key/v2/remote_key_resource.py +302 -0
  409. synapse/rest/media/__init__.py +0 -0
  410. synapse/rest/media/config_resource.py +53 -0
  411. synapse/rest/media/create_resource.py +90 -0
  412. synapse/rest/media/download_resource.py +110 -0
  413. synapse/rest/media/media_repository_resource.py +113 -0
  414. synapse/rest/media/preview_url_resource.py +77 -0
  415. synapse/rest/media/thumbnail_resource.py +142 -0
  416. synapse/rest/media/upload_resource.py +187 -0
  417. synapse/rest/media/v1/__init__.py +39 -0
  418. synapse/rest/media/v1/_base.py +23 -0
  419. synapse/rest/media/v1/media_storage.py +23 -0
  420. synapse/rest/media/v1/storage_provider.py +23 -0
  421. synapse/rest/synapse/__init__.py +20 -0
  422. synapse/rest/synapse/client/__init__.py +93 -0
  423. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  424. synapse/rest/synapse/client/jwks.py +77 -0
  425. synapse/rest/synapse/client/new_user_consent.py +115 -0
  426. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  427. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  428. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  429. synapse/rest/synapse/client/password_reset.py +129 -0
  430. synapse/rest/synapse/client/pick_idp.py +107 -0
  431. synapse/rest/synapse/client/pick_username.py +153 -0
  432. synapse/rest/synapse/client/rendezvous.py +58 -0
  433. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  434. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  435. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  436. synapse/rest/synapse/client/sso_register.py +56 -0
  437. synapse/rest/synapse/client/unsubscribe.py +88 -0
  438. synapse/rest/synapse/mas/__init__.py +71 -0
  439. synapse/rest/synapse/mas/_base.py +55 -0
  440. synapse/rest/synapse/mas/devices.py +239 -0
  441. synapse/rest/synapse/mas/users.py +469 -0
  442. synapse/rest/well_known.py +148 -0
  443. synapse/server.py +1257 -0
  444. synapse/server_notices/__init__.py +0 -0
  445. synapse/server_notices/consent_server_notices.py +136 -0
  446. synapse/server_notices/resource_limits_server_notices.py +215 -0
  447. synapse/server_notices/server_notices_manager.py +388 -0
  448. synapse/server_notices/server_notices_sender.py +67 -0
  449. synapse/server_notices/worker_server_notices_sender.py +46 -0
  450. synapse/spam_checker_api/__init__.py +31 -0
  451. synapse/state/__init__.py +1022 -0
  452. synapse/state/v1.py +369 -0
  453. synapse/state/v2.py +984 -0
  454. synapse/static/client/login/index.html +47 -0
  455. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  456. synapse/static/client/login/js/login.js +291 -0
  457. synapse/static/client/login/spinner.gif +0 -0
  458. synapse/static/client/login/style.css +79 -0
  459. synapse/static/index.html +63 -0
  460. synapse/storage/__init__.py +43 -0
  461. synapse/storage/_base.py +245 -0
  462. synapse/storage/admin_client_config.py +25 -0
  463. synapse/storage/background_updates.py +1188 -0
  464. synapse/storage/controllers/__init__.py +57 -0
  465. synapse/storage/controllers/persist_events.py +1237 -0
  466. synapse/storage/controllers/purge_events.py +455 -0
  467. synapse/storage/controllers/state.py +950 -0
  468. synapse/storage/controllers/stats.py +119 -0
  469. synapse/storage/database.py +2719 -0
  470. synapse/storage/databases/__init__.py +175 -0
  471. synapse/storage/databases/main/__init__.py +420 -0
  472. synapse/storage/databases/main/account_data.py +1059 -0
  473. synapse/storage/databases/main/appservice.py +473 -0
  474. synapse/storage/databases/main/cache.py +911 -0
  475. synapse/storage/databases/main/censor_events.py +225 -0
  476. synapse/storage/databases/main/client_ips.py +815 -0
  477. synapse/storage/databases/main/delayed_events.py +562 -0
  478. synapse/storage/databases/main/deviceinbox.py +1271 -0
  479. synapse/storage/databases/main/devices.py +2578 -0
  480. synapse/storage/databases/main/directory.py +212 -0
  481. synapse/storage/databases/main/e2e_room_keys.py +689 -0
  482. synapse/storage/databases/main/end_to_end_keys.py +1894 -0
  483. synapse/storage/databases/main/event_federation.py +2508 -0
  484. synapse/storage/databases/main/event_push_actions.py +1933 -0
  485. synapse/storage/databases/main/events.py +3765 -0
  486. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  487. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  488. synapse/storage/databases/main/events_worker.py +2786 -0
  489. synapse/storage/databases/main/experimental_features.py +130 -0
  490. synapse/storage/databases/main/filtering.py +231 -0
  491. synapse/storage/databases/main/keys.py +291 -0
  492. synapse/storage/databases/main/lock.py +553 -0
  493. synapse/storage/databases/main/media_repository.py +1068 -0
  494. synapse/storage/databases/main/metrics.py +460 -0
  495. synapse/storage/databases/main/monthly_active_users.py +443 -0
  496. synapse/storage/databases/main/openid.py +60 -0
  497. synapse/storage/databases/main/presence.py +509 -0
  498. synapse/storage/databases/main/profile.py +539 -0
  499. synapse/storage/databases/main/purge_events.py +521 -0
  500. synapse/storage/databases/main/push_rule.py +970 -0
  501. synapse/storage/databases/main/pusher.py +793 -0
  502. synapse/storage/databases/main/receipts.py +1341 -0
  503. synapse/storage/databases/main/registration.py +3072 -0
  504. synapse/storage/databases/main/rejections.py +37 -0
  505. synapse/storage/databases/main/relations.py +1116 -0
  506. synapse/storage/databases/main/room.py +2779 -0
  507. synapse/storage/databases/main/roommember.py +2110 -0
  508. synapse/storage/databases/main/search.py +939 -0
  509. synapse/storage/databases/main/session.py +151 -0
  510. synapse/storage/databases/main/signatures.py +94 -0
  511. synapse/storage/databases/main/sliding_sync.py +603 -0
  512. synapse/storage/databases/main/state.py +1002 -0
  513. synapse/storage/databases/main/state_deltas.py +329 -0
  514. synapse/storage/databases/main/stats.py +789 -0
  515. synapse/storage/databases/main/stream.py +2577 -0
  516. synapse/storage/databases/main/tags.py +360 -0
  517. synapse/storage/databases/main/task_scheduler.py +225 -0
  518. synapse/storage/databases/main/thread_subscriptions.py +589 -0
  519. synapse/storage/databases/main/transactions.py +675 -0
  520. synapse/storage/databases/main/ui_auth.py +420 -0
  521. synapse/storage/databases/main/user_directory.py +1330 -0
  522. synapse/storage/databases/main/user_erasure_store.py +117 -0
  523. synapse/storage/databases/state/__init__.py +22 -0
  524. synapse/storage/databases/state/bg_updates.py +497 -0
  525. synapse/storage/databases/state/deletion.py +557 -0
  526. synapse/storage/databases/state/store.py +948 -0
  527. synapse/storage/engines/__init__.py +70 -0
  528. synapse/storage/engines/_base.py +154 -0
  529. synapse/storage/engines/postgres.py +261 -0
  530. synapse/storage/engines/sqlite.py +199 -0
  531. synapse/storage/invite_rule.py +112 -0
  532. synapse/storage/keys.py +40 -0
  533. synapse/storage/prepare_database.py +730 -0
  534. synapse/storage/push_rule.py +28 -0
  535. synapse/storage/roommember.py +88 -0
  536. synapse/storage/schema/README.md +4 -0
  537. synapse/storage/schema/__init__.py +186 -0
  538. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  539. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  540. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  541. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  543. synapse/storage/schema/common/schema_version.sql +60 -0
  544. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  545. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  546. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  547. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  548. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  549. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  550. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  551. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  552. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  553. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  554. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  555. synapse/storage/schema/main/delta/16/users.sql +56 -0
  556. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  557. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  558. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  559. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  560. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  561. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  562. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  563. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  564. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  565. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  566. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  567. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  568. synapse/storage/schema/main/delta/25/fts.py +81 -0
  569. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  570. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  571. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  572. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  573. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  574. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  575. synapse/storage/schema/main/delta/27/ts.py +61 -0
  576. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  577. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  578. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  579. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  580. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  581. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  582. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  583. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  584. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  585. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  586. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  587. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  588. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  589. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  590. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  591. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  592. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  593. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  594. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  595. synapse/storage/schema/main/delta/32/events.sql +35 -0
  596. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  597. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  598. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  599. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  600. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  601. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  602. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  604. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  605. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  606. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  607. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  608. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  609. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  610. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  611. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  612. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  613. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  614. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  615. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  616. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  617. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  618. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  619. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  620. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  621. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  622. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  623. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  624. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  625. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  626. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  627. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  628. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  629. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  630. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  631. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  632. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  633. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  634. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  635. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  636. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  637. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  638. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  639. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  640. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  641. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  642. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  643. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  644. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  645. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  646. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  647. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  648. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  649. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  650. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  651. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  652. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  653. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  654. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  655. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  656. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  657. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  658. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  659. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  660. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  661. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  662. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  663. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  664. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  665. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  666. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  667. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  668. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  669. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  670. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  671. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  672. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  673. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  674. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  675. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  676. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  678. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  679. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  680. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  681. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  682. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  683. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  684. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  685. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  686. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  687. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  688. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  689. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  690. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  691. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  692. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  694. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  695. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  697. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  698. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  699. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  700. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  701. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  702. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  703. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  704. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  706. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  707. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  708. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  712. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  713. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  714. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  715. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  716. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  717. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  718. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  719. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  720. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  721. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  722. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  723. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  724. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  725. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  726. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  731. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  732. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  733. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  734. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  735. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  737. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  738. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  740. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  741. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  742. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  743. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  744. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  745. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  746. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  747. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  748. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  749. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  751. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  752. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  753. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  754. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  755. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  756. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  757. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  758. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  759. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  760. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  761. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  762. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  763. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  764. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  765. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  766. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  767. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  768. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  769. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  771. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  772. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  773. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  774. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  776. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  777. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  778. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  781. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  782. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  783. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  784. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  785. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  786. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  787. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  788. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  789. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  791. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  792. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  793. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  794. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  795. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  796. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  797. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  798. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  799. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  800. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  801. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  802. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  803. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  804. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  805. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  806. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  807. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  809. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  810. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  811. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  812. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  813. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  814. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  815. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  816. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  817. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  818. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  819. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  820. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  821. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  822. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  823. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  824. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  825. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  826. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  827. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  828. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  829. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  830. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  831. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  833. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  834. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  835. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  836. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  837. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  838. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  839. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  840. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  841. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  843. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  844. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  845. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  846. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  847. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  848. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  850. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  851. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  852. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  853. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  854. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  855. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  856. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  857. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  858. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  859. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  860. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  862. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  863. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  865. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  866. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  867. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  868. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  869. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  870. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  871. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  872. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  873. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  874. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  875. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  876. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  877. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  878. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  879. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  880. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  881. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  882. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  884. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  885. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  886. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  887. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  888. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  889. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  890. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  892. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  893. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  894. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  896. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  897. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  898. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  902. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  903. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  904. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  905. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  906. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  907. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  908. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  910. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  911. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  913. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  914. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  915. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  916. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  917. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  918. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  919. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  920. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  921. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  922. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  923. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  924. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  925. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  926. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  927. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  928. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  929. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  930. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  931. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  932. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  933. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  934. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  935. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  936. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  937. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  938. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  939. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  940. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  941. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  942. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  943. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  944. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  947. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  948. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  949. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  950. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  951. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  952. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  954. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  955. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  956. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  958. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  959. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  960. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  961. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  962. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  963. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  964. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  965. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  966. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  968. synapse/storage/schema/main/delta/93/01_add_delayed_events.sql +15 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +183 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +928 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +91 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +908 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +413 -0
  1007. synapse/types/state.py +634 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +169 -0
  1010. synapse/util/async_helpers.py +1045 -0
  1011. synapse/util/background_queue.py +142 -0
  1012. synapse/util/batching_queue.py +202 -0
  1013. synapse/util/caches/__init__.py +300 -0
  1014. synapse/util/caches/cached_call.py +143 -0
  1015. synapse/util/caches/deferred_cache.py +530 -0
  1016. synapse/util/caches/descriptors.py +692 -0
  1017. synapse/util/caches/dictionary_cache.py +346 -0
  1018. synapse/util/caches/expiringcache.py +249 -0
  1019. synapse/util/caches/lrucache.py +975 -0
  1020. synapse/util/caches/response_cache.py +322 -0
  1021. synapse/util/caches/stream_change_cache.py +370 -0
  1022. synapse/util/caches/treecache.py +189 -0
  1023. synapse/util/caches/ttlcache.py +197 -0
  1024. synapse/util/cancellation.py +63 -0
  1025. synapse/util/check_dependencies.py +335 -0
  1026. synapse/util/clock.py +567 -0
  1027. synapse/util/constants.py +22 -0
  1028. synapse/util/daemonize.py +165 -0
  1029. synapse/util/distributor.py +157 -0
  1030. synapse/util/events.py +134 -0
  1031. synapse/util/file_consumer.py +164 -0
  1032. synapse/util/frozenutils.py +57 -0
  1033. synapse/util/gai_resolver.py +178 -0
  1034. synapse/util/hash.py +38 -0
  1035. synapse/util/httpresourcetree.py +108 -0
  1036. synapse/util/iterutils.py +189 -0
  1037. synapse/util/json.py +56 -0
  1038. synapse/util/linked_list.py +156 -0
  1039. synapse/util/logcontext.py +46 -0
  1040. synapse/util/logformatter.py +28 -0
  1041. synapse/util/macaroons.py +325 -0
  1042. synapse/util/manhole.py +191 -0
  1043. synapse/util/metrics.py +339 -0
  1044. synapse/util/module_loader.py +116 -0
  1045. synapse/util/msisdn.py +51 -0
  1046. synapse/util/patch_inline_callbacks.py +250 -0
  1047. synapse/util/pydantic_models.py +63 -0
  1048. synapse/util/ratelimitutils.py +419 -0
  1049. synapse/util/retryutils.py +339 -0
  1050. synapse/util/rlimit.py +42 -0
  1051. synapse/util/rust.py +133 -0
  1052. synapse/util/sentinel.py +21 -0
  1053. synapse/util/stringutils.py +293 -0
  1054. synapse/util/task_scheduler.py +493 -0
  1055. synapse/util/templates.py +126 -0
  1056. synapse/util/threepids.py +123 -0
  1057. synapse/util/wheel_timer.py +112 -0
  1058. synapse/visibility.py +835 -0
@@ -0,0 +1,1068 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2020-2021 The Matrix.org Foundation C.I.C.
5
+ # Copyright 2014-2016 OpenMarket Ltd
6
+ # Copyright (C) 2023 New Vector, Ltd
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Affero General Public License as
10
+ # published by the Free Software Foundation, either version 3 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # See the GNU Affero General Public License for more details:
14
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
15
+ #
16
+ # Originally licensed under the Apache License, Version 2.0:
17
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
18
+ #
19
+ # [This file includes modifications made by New Vector Limited]
20
+ #
21
+ #
22
+ import logging
23
+ from enum import Enum
24
+ from typing import (
25
+ TYPE_CHECKING,
26
+ Collection,
27
+ Iterable,
28
+ cast,
29
+ )
30
+
31
+ import attr
32
+
33
+ from synapse.api.constants import Direction
34
+ from synapse.logging.opentracing import trace
35
+ from synapse.media._base import ThumbnailInfo
36
+ from synapse.storage._base import SQLBaseStore
37
+ from synapse.storage.database import (
38
+ DatabasePool,
39
+ LoggingDatabaseConnection,
40
+ LoggingTransaction,
41
+ )
42
+ from synapse.types import JsonDict, UserID
43
+
44
+ if TYPE_CHECKING:
45
+ from synapse.server import HomeServer
46
+
47
+ BG_UPDATE_REMOVE_MEDIA_REPO_INDEX_WITHOUT_METHOD_2 = (
48
+ "media_repository_drop_index_wo_method_2"
49
+ )
50
+
51
+ logger = logging.getLogger(__name__)
52
+
53
+
54
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
55
+ class LocalMedia:
56
+ media_id: str
57
+ media_type: str
58
+ media_length: int | None
59
+ upload_name: str
60
+ created_ts: int
61
+ url_cache: str | None
62
+ last_access_ts: int
63
+ quarantined_by: str | None
64
+ safe_from_quarantine: bool
65
+ user_id: str | None
66
+ authenticated: bool | None
67
+ sha256: str | None
68
+
69
+
70
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
71
+ class RemoteMedia:
72
+ media_origin: str
73
+ media_id: str
74
+ media_type: str
75
+ media_length: int
76
+ upload_name: str | None
77
+ filesystem_id: str
78
+ created_ts: int
79
+ last_access_ts: int
80
+ quarantined_by: str | None
81
+ authenticated: bool | None
82
+ sha256: str | None
83
+
84
+
85
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
86
+ class UrlCache:
87
+ response_code: int
88
+ expires_ts: int
89
+ og: str | bytes
90
+
91
+
92
+ class MediaSortOrder(Enum):
93
+ """
94
+ Enum to define the sorting method used when returning media with
95
+ get_local_media_by_user_paginate
96
+ """
97
+
98
+ MEDIA_ID = "media_id"
99
+ UPLOAD_NAME = "upload_name"
100
+ CREATED_TS = "created_ts"
101
+ LAST_ACCESS_TS = "last_access_ts"
102
+ MEDIA_LENGTH = "media_length"
103
+ MEDIA_TYPE = "media_type"
104
+ QUARANTINED_BY = "quarantined_by"
105
+ SAFE_FROM_QUARANTINE = "safe_from_quarantine"
106
+
107
+
108
+ class MediaRepositoryBackgroundUpdateStore(SQLBaseStore):
109
+ def __init__(
110
+ self,
111
+ database: DatabasePool,
112
+ db_conn: LoggingDatabaseConnection,
113
+ hs: "HomeServer",
114
+ ):
115
+ super().__init__(database, db_conn, hs)
116
+
117
+ self.db_pool.updates.register_background_index_update(
118
+ update_name="local_media_repository_url_idx",
119
+ index_name="local_media_repository_url_idx",
120
+ table="local_media_repository",
121
+ columns=["created_ts"],
122
+ where_clause="url_cache IS NOT NULL",
123
+ )
124
+
125
+ # The following the updates add the method to the unique constraint of
126
+ # the thumbnail databases. That fixes an issue, where thumbnails of the
127
+ # same resolution, but different methods could overwrite one another.
128
+ # This can happen with custom thumbnail configs or with dynamic thumbnailing.
129
+ self.db_pool.updates.register_background_index_update(
130
+ update_name="local_media_repository_thumbnails_method_idx",
131
+ index_name="local_media_repository_thumbn_media_id_width_height_method_key",
132
+ table="local_media_repository_thumbnails",
133
+ columns=[
134
+ "media_id",
135
+ "thumbnail_width",
136
+ "thumbnail_height",
137
+ "thumbnail_type",
138
+ "thumbnail_method",
139
+ ],
140
+ unique=True,
141
+ )
142
+
143
+ self.db_pool.updates.register_background_index_update(
144
+ update_name="remote_media_repository_thumbnails_method_idx",
145
+ index_name="remote_media_repository_thumbn_media_origin_id_width_height_method_key",
146
+ table="remote_media_cache_thumbnails",
147
+ columns=[
148
+ "media_origin",
149
+ "media_id",
150
+ "thumbnail_width",
151
+ "thumbnail_height",
152
+ "thumbnail_type",
153
+ "thumbnail_method",
154
+ ],
155
+ unique=True,
156
+ )
157
+
158
+ self.db_pool.updates.register_background_index_update(
159
+ update_name="local_media_repository_sha256_idx",
160
+ index_name="local_media_repository_sha256",
161
+ table="local_media_repository",
162
+ where_clause="sha256 IS NOT NULL",
163
+ columns=[
164
+ "sha256",
165
+ ],
166
+ )
167
+
168
+ self.db_pool.updates.register_background_index_update(
169
+ update_name="remote_media_cache_sha256_idx",
170
+ index_name="remote_media_cache_sha256",
171
+ table="remote_media_cache",
172
+ where_clause="sha256 IS NOT NULL",
173
+ columns=[
174
+ "sha256",
175
+ ],
176
+ )
177
+
178
+ self.db_pool.updates.register_background_update_handler(
179
+ BG_UPDATE_REMOVE_MEDIA_REPO_INDEX_WITHOUT_METHOD_2,
180
+ self._drop_media_index_without_method,
181
+ )
182
+
183
+ if hs.config.media.can_load_media_repo:
184
+ self.unused_expiration_time: int | None = (
185
+ hs.config.media.unused_expiration_time
186
+ )
187
+ else:
188
+ self.unused_expiration_time = None
189
+
190
+ async def _drop_media_index_without_method(
191
+ self, progress: JsonDict, batch_size: int
192
+ ) -> int:
193
+ """background update handler which removes the old constraints.
194
+
195
+ Note that this is only run on postgres.
196
+ """
197
+
198
+ def f(txn: LoggingTransaction) -> None:
199
+ txn.execute(
200
+ "ALTER TABLE local_media_repository_thumbnails DROP CONSTRAINT IF EXISTS local_media_repository_thumbn_media_id_thumbnail_width_thum_key"
201
+ )
202
+ txn.execute(
203
+ "ALTER TABLE remote_media_cache_thumbnails DROP CONSTRAINT IF EXISTS remote_media_cache_thumbnails_media_origin_media_id_thumbna_key"
204
+ )
205
+
206
+ await self.db_pool.runInteraction("drop_media_indices_without_method", f)
207
+ await self.db_pool.updates._end_background_update(
208
+ BG_UPDATE_REMOVE_MEDIA_REPO_INDEX_WITHOUT_METHOD_2
209
+ )
210
+ return 1
211
+
212
+
213
+ class MediaRepositoryStore(MediaRepositoryBackgroundUpdateStore):
214
+ """Persistence for attachments and avatars"""
215
+
216
+ def __init__(
217
+ self,
218
+ database: DatabasePool,
219
+ db_conn: LoggingDatabaseConnection,
220
+ hs: "HomeServer",
221
+ ):
222
+ super().__init__(database, db_conn, hs)
223
+ self.server_name: str = hs.hostname
224
+
225
+ async def get_local_media(self, media_id: str) -> LocalMedia | None:
226
+ """Get the metadata for a local piece of media
227
+
228
+ Returns:
229
+ None if the media_id doesn't exist.
230
+ """
231
+ row = await self.db_pool.simple_select_one(
232
+ "local_media_repository",
233
+ {"media_id": media_id},
234
+ (
235
+ "media_type",
236
+ "media_length",
237
+ "upload_name",
238
+ "created_ts",
239
+ "quarantined_by",
240
+ "url_cache",
241
+ "last_access_ts",
242
+ "safe_from_quarantine",
243
+ "user_id",
244
+ "authenticated",
245
+ "sha256",
246
+ ),
247
+ allow_none=True,
248
+ desc="get_local_media",
249
+ )
250
+ if row is None:
251
+ return None
252
+ return LocalMedia(
253
+ media_id=media_id,
254
+ media_type=row[0],
255
+ media_length=row[1],
256
+ upload_name=row[2],
257
+ created_ts=row[3],
258
+ quarantined_by=row[4],
259
+ url_cache=row[5],
260
+ last_access_ts=row[6],
261
+ safe_from_quarantine=row[7],
262
+ user_id=row[8],
263
+ authenticated=row[9],
264
+ sha256=row[10],
265
+ )
266
+
267
+ async def get_local_media_by_user_paginate(
268
+ self,
269
+ start: int,
270
+ limit: int,
271
+ user_id: str,
272
+ order_by: str = MediaSortOrder.CREATED_TS.value,
273
+ direction: Direction = Direction.FORWARDS,
274
+ ) -> tuple[list[LocalMedia], int]:
275
+ """Get a paginated list of metadata for a local piece of media
276
+ which an user_id has uploaded
277
+
278
+ Args:
279
+ start: offset in the list
280
+ limit: maximum amount of media_ids to retrieve
281
+ user_id: fully-qualified user id
282
+ order_by: the sort order of the returned list
283
+ direction: sort ascending or descending
284
+ Returns:
285
+ A paginated list of all metadata of user's media,
286
+ plus the total count of all the user's media
287
+ """
288
+
289
+ def get_local_media_by_user_paginate_txn(
290
+ txn: LoggingTransaction,
291
+ ) -> tuple[list[LocalMedia], int]:
292
+ # Set ordering
293
+ order_by_column = MediaSortOrder(order_by).value
294
+
295
+ if direction == Direction.BACKWARDS:
296
+ order = "DESC"
297
+ else:
298
+ order = "ASC"
299
+
300
+ args: list[str | int] = [user_id]
301
+ sql = """
302
+ SELECT COUNT(*) as total_media
303
+ FROM local_media_repository
304
+ WHERE user_id = ?
305
+ """
306
+ txn.execute(sql, args)
307
+ count = cast(tuple[int], txn.fetchone())[0]
308
+
309
+ sql = """
310
+ SELECT
311
+ media_id,
312
+ media_type,
313
+ media_length,
314
+ upload_name,
315
+ created_ts,
316
+ url_cache,
317
+ last_access_ts,
318
+ quarantined_by,
319
+ safe_from_quarantine,
320
+ user_id,
321
+ authenticated,
322
+ sha256
323
+ FROM local_media_repository
324
+ WHERE user_id = ?
325
+ ORDER BY {order_by_column} {order}, media_id ASC
326
+ LIMIT ? OFFSET ?
327
+ """.format(
328
+ order_by_column=order_by_column,
329
+ order=order,
330
+ )
331
+
332
+ args += [limit, start]
333
+ txn.execute(sql, args)
334
+ media = [
335
+ LocalMedia(
336
+ media_id=row[0],
337
+ media_type=row[1],
338
+ media_length=row[2],
339
+ upload_name=row[3],
340
+ created_ts=row[4],
341
+ url_cache=row[5],
342
+ last_access_ts=row[6],
343
+ quarantined_by=row[7],
344
+ safe_from_quarantine=bool(row[8]),
345
+ user_id=row[9],
346
+ authenticated=row[10],
347
+ sha256=row[11],
348
+ )
349
+ for row in txn
350
+ ]
351
+ return media, count
352
+
353
+ return await self.db_pool.runInteraction(
354
+ "get_local_media_by_user_paginate_txn", get_local_media_by_user_paginate_txn
355
+ )
356
+
357
+ async def get_local_media_ids(
358
+ self,
359
+ before_ts: int,
360
+ size_gt: int,
361
+ keep_profiles: bool,
362
+ include_quarantined_media: bool,
363
+ include_protected_media: bool,
364
+ ) -> list[str]:
365
+ """
366
+ Retrieve a list of media IDs from the local media store.
367
+
368
+ Args:
369
+ before_ts: Only retrieve IDs from media that was either last accessed
370
+ (or if never accessed, created) before the given UNIX timestamp in ms.
371
+ size_gt: Only retrieve IDs from media that has a size (in bytes) greater than
372
+ the given integer.
373
+ keep_profiles: If True, exclude media IDs from the results that are used in the
374
+ following situations:
375
+ * global profile user avatar
376
+ * per-room profile user avatar
377
+ * room avatar
378
+ * a user's avatar in the user directory
379
+ include_quarantined_media: If False, exclude media IDs from the results that have
380
+ been marked as quarantined.
381
+ include_protected_media: If False, exclude media IDs from the results that have
382
+ been marked as protected from quarantine.
383
+
384
+ Returns:
385
+ A list of local media IDs.
386
+ """
387
+
388
+ # to find files that have never been accessed (last_access_ts IS NULL)
389
+ # compare with `created_ts`
390
+ sql = """
391
+ SELECT media_id
392
+ FROM local_media_repository AS lmr
393
+ WHERE
394
+ ( last_access_ts < ?
395
+ OR ( created_ts < ? AND last_access_ts IS NULL ) )
396
+ AND media_length > ?
397
+ """
398
+
399
+ if keep_profiles:
400
+ sql_keep = """
401
+ AND (
402
+ NOT EXISTS
403
+ (SELECT 1
404
+ FROM profiles
405
+ WHERE profiles.avatar_url = '{media_prefix}' || lmr.media_id)
406
+ AND NOT EXISTS
407
+ (SELECT 1
408
+ FROM room_memberships
409
+ WHERE room_memberships.avatar_url = '{media_prefix}' || lmr.media_id)
410
+ AND NOT EXISTS
411
+ (SELECT 1
412
+ FROM user_directory
413
+ WHERE user_directory.avatar_url = '{media_prefix}' || lmr.media_id)
414
+ AND NOT EXISTS
415
+ (SELECT 1
416
+ FROM room_stats_state
417
+ WHERE room_stats_state.avatar = '{media_prefix}' || lmr.media_id)
418
+ )
419
+ """.format(
420
+ media_prefix="mxc://%s/" % (self.server_name,),
421
+ )
422
+ sql += sql_keep
423
+
424
+ if include_quarantined_media is False:
425
+ # Do not include media that has been quarantined
426
+ sql += """
427
+ AND quarantined_by IS NULL
428
+ """
429
+
430
+ if include_protected_media is False:
431
+ # Do not include media that has been protected from quarantine
432
+ sql += """
433
+ AND NOT safe_from_quarantine
434
+ """
435
+
436
+ def _get_local_media_ids_txn(txn: LoggingTransaction) -> list[str]:
437
+ txn.execute(sql, (before_ts, before_ts, size_gt))
438
+ return [row[0] for row in txn]
439
+
440
+ return await self.db_pool.runInteraction(
441
+ "get_local_media_ids", _get_local_media_ids_txn
442
+ )
443
+
444
+ @trace
445
+ async def store_local_media_id(
446
+ self,
447
+ media_id: str,
448
+ time_now_ms: int,
449
+ user_id: UserID,
450
+ ) -> None:
451
+ if self.hs.config.media.enable_authenticated_media:
452
+ authenticated = True
453
+ else:
454
+ authenticated = False
455
+
456
+ await self.db_pool.simple_insert(
457
+ "local_media_repository",
458
+ {
459
+ "media_id": media_id,
460
+ "created_ts": time_now_ms,
461
+ "user_id": user_id.to_string(),
462
+ "authenticated": authenticated,
463
+ },
464
+ desc="store_local_media_id",
465
+ )
466
+
467
+ @trace
468
+ async def store_local_media(
469
+ self,
470
+ media_id: str,
471
+ media_type: str,
472
+ time_now_ms: int,
473
+ upload_name: str | None,
474
+ media_length: int,
475
+ user_id: UserID,
476
+ url_cache: str | None = None,
477
+ sha256: str | None = None,
478
+ quarantined_by: str | None = None,
479
+ ) -> None:
480
+ if self.hs.config.media.enable_authenticated_media:
481
+ authenticated = True
482
+ else:
483
+ authenticated = False
484
+
485
+ await self.db_pool.simple_insert(
486
+ "local_media_repository",
487
+ {
488
+ "media_id": media_id,
489
+ "media_type": media_type,
490
+ "created_ts": time_now_ms,
491
+ "upload_name": upload_name,
492
+ "media_length": media_length,
493
+ "user_id": user_id.to_string(),
494
+ "url_cache": url_cache,
495
+ "authenticated": authenticated,
496
+ "sha256": sha256,
497
+ "quarantined_by": quarantined_by,
498
+ },
499
+ desc="store_local_media",
500
+ )
501
+
502
+ async def update_local_media(
503
+ self,
504
+ media_id: str,
505
+ media_type: str,
506
+ upload_name: str | None,
507
+ media_length: int,
508
+ user_id: UserID,
509
+ sha256: str,
510
+ url_cache: str | None = None,
511
+ quarantined_by: str | None = None,
512
+ ) -> None:
513
+ updatevalues = {
514
+ "media_type": media_type,
515
+ "upload_name": upload_name,
516
+ "media_length": media_length,
517
+ "url_cache": url_cache,
518
+ "sha256": sha256,
519
+ }
520
+
521
+ # This should never be un-set by this function.
522
+ if quarantined_by is not None:
523
+ updatevalues["quarantined_by"] = quarantined_by
524
+
525
+ await self.db_pool.simple_update_one(
526
+ "local_media_repository",
527
+ keyvalues={
528
+ "media_id": media_id,
529
+ },
530
+ updatevalues=updatevalues,
531
+ desc="update_local_media",
532
+ )
533
+
534
+ async def mark_local_media_as_safe(self, media_id: str, safe: bool = True) -> None:
535
+ """Mark a local media as safe or unsafe from quarantining."""
536
+ await self.db_pool.simple_update_one(
537
+ table="local_media_repository",
538
+ keyvalues={"media_id": media_id},
539
+ updatevalues={"safe_from_quarantine": safe},
540
+ desc="mark_local_media_as_safe",
541
+ )
542
+
543
+ async def count_pending_media(self, user_id: UserID) -> tuple[int, int]:
544
+ """Count the number of pending media for a user.
545
+
546
+ Returns:
547
+ A tuple of two integers: the total pending media requests and the earliest
548
+ expiration timestamp.
549
+ """
550
+
551
+ def get_pending_media_txn(txn: LoggingTransaction) -> tuple[int, int]:
552
+ sql = """
553
+ SELECT COUNT(*), MIN(created_ts)
554
+ FROM local_media_repository
555
+ WHERE user_id = ?
556
+ AND created_ts > ?
557
+ AND media_length IS NULL
558
+ """
559
+ assert self.unused_expiration_time is not None
560
+ txn.execute(
561
+ sql,
562
+ (
563
+ user_id.to_string(),
564
+ self.clock.time_msec() - self.unused_expiration_time,
565
+ ),
566
+ )
567
+ row = txn.fetchone()
568
+ if not row:
569
+ return 0, 0
570
+ return row[0], (row[1] + self.unused_expiration_time if row[1] else 0)
571
+
572
+ return await self.db_pool.runInteraction(
573
+ "get_pending_media", get_pending_media_txn
574
+ )
575
+
576
+ async def get_url_cache(self, url: str, ts: int) -> UrlCache | None:
577
+ """Get the media_id and ts for a cached URL as of the given timestamp
578
+ Returns:
579
+ None if the URL isn't cached.
580
+ """
581
+
582
+ def get_url_cache_txn(txn: LoggingTransaction) -> UrlCache | None:
583
+ # get the most recently cached result (relative to the given ts)
584
+ sql = """
585
+ SELECT response_code, expires_ts, og
586
+ FROM local_media_repository_url_cache
587
+ WHERE url = ? AND download_ts <= ?
588
+ ORDER BY download_ts DESC LIMIT 1
589
+ """
590
+ txn.execute(sql, (url, ts))
591
+ row = txn.fetchone()
592
+
593
+ if not row:
594
+ # ...or if we've requested a timestamp older than the oldest
595
+ # copy in the cache, return the oldest copy (if any)
596
+ sql = """
597
+ SELECT response_code, expires_ts, og
598
+ FROM local_media_repository_url_cache
599
+ WHERE url = ? AND download_ts > ?
600
+ ORDER BY download_ts ASC LIMIT 1
601
+ """
602
+ txn.execute(sql, (url, ts))
603
+ row = txn.fetchone()
604
+
605
+ if not row:
606
+ return None
607
+
608
+ return UrlCache(response_code=row[0], expires_ts=row[1], og=row[2])
609
+
610
+ return await self.db_pool.runInteraction("get_url_cache", get_url_cache_txn)
611
+
612
+ async def store_url_cache(
613
+ self,
614
+ url: str,
615
+ response_code: int,
616
+ etag: str | None,
617
+ expires_ts: int,
618
+ og: str,
619
+ media_id: str,
620
+ download_ts: int,
621
+ ) -> None:
622
+ await self.db_pool.simple_insert(
623
+ "local_media_repository_url_cache",
624
+ {
625
+ "url": url,
626
+ "response_code": response_code,
627
+ "etag": etag,
628
+ "expires_ts": expires_ts,
629
+ "og": og,
630
+ "media_id": media_id,
631
+ "download_ts": download_ts,
632
+ },
633
+ desc="store_url_cache",
634
+ )
635
+
636
+ async def get_local_media_thumbnails(self, media_id: str) -> list[ThumbnailInfo]:
637
+ rows = cast(
638
+ list[tuple[int, int, str, str, int]],
639
+ await self.db_pool.simple_select_list(
640
+ "local_media_repository_thumbnails",
641
+ {"media_id": media_id},
642
+ (
643
+ "thumbnail_width",
644
+ "thumbnail_height",
645
+ "thumbnail_method",
646
+ "thumbnail_type",
647
+ "thumbnail_length",
648
+ ),
649
+ desc="get_local_media_thumbnails",
650
+ ),
651
+ )
652
+ return [
653
+ ThumbnailInfo(
654
+ width=row[0], height=row[1], method=row[2], type=row[3], length=row[4]
655
+ )
656
+ for row in rows
657
+ ]
658
+
659
+ @trace
660
+ async def store_local_thumbnail(
661
+ self,
662
+ media_id: str,
663
+ thumbnail_width: int,
664
+ thumbnail_height: int,
665
+ thumbnail_type: str,
666
+ thumbnail_method: str,
667
+ thumbnail_length: int,
668
+ ) -> None:
669
+ await self.db_pool.simple_upsert(
670
+ table="local_media_repository_thumbnails",
671
+ keyvalues={
672
+ "media_id": media_id,
673
+ "thumbnail_width": thumbnail_width,
674
+ "thumbnail_height": thumbnail_height,
675
+ "thumbnail_method": thumbnail_method,
676
+ "thumbnail_type": thumbnail_type,
677
+ },
678
+ values={"thumbnail_length": thumbnail_length},
679
+ desc="store_local_thumbnail",
680
+ )
681
+
682
+ async def get_cached_remote_media(
683
+ self, origin: str, media_id: str
684
+ ) -> RemoteMedia | None:
685
+ row = await self.db_pool.simple_select_one(
686
+ "remote_media_cache",
687
+ {"media_origin": origin, "media_id": media_id},
688
+ (
689
+ "media_type",
690
+ "media_length",
691
+ "upload_name",
692
+ "created_ts",
693
+ "filesystem_id",
694
+ "last_access_ts",
695
+ "quarantined_by",
696
+ "authenticated",
697
+ "sha256",
698
+ ),
699
+ allow_none=True,
700
+ desc="get_cached_remote_media",
701
+ )
702
+ if row is None:
703
+ return row
704
+ return RemoteMedia(
705
+ media_origin=origin,
706
+ media_id=media_id,
707
+ media_type=row[0],
708
+ media_length=row[1],
709
+ upload_name=row[2],
710
+ created_ts=row[3],
711
+ filesystem_id=row[4],
712
+ last_access_ts=row[5],
713
+ quarantined_by=row[6],
714
+ authenticated=row[7],
715
+ sha256=row[8],
716
+ )
717
+
718
+ async def store_cached_remote_media(
719
+ self,
720
+ origin: str,
721
+ media_id: str,
722
+ media_type: str,
723
+ media_length: int,
724
+ time_now_ms: int,
725
+ upload_name: str | None,
726
+ filesystem_id: str,
727
+ sha256: str | None,
728
+ ) -> None:
729
+ if self.hs.config.media.enable_authenticated_media:
730
+ authenticated = True
731
+ else:
732
+ authenticated = False
733
+
734
+ await self.db_pool.simple_insert(
735
+ "remote_media_cache",
736
+ {
737
+ "media_origin": origin,
738
+ "media_id": media_id,
739
+ "media_type": media_type,
740
+ "media_length": media_length,
741
+ "created_ts": time_now_ms,
742
+ "upload_name": upload_name,
743
+ "filesystem_id": filesystem_id,
744
+ "last_access_ts": time_now_ms,
745
+ "authenticated": authenticated,
746
+ "sha256": sha256,
747
+ },
748
+ desc="store_cached_remote_media",
749
+ )
750
+
751
+ async def update_cached_last_access_time(
752
+ self,
753
+ local_media: Iterable[str],
754
+ remote_media: Iterable[tuple[str, str]],
755
+ time_ms: int,
756
+ ) -> None:
757
+ """Updates the last access time of the given media
758
+
759
+ Args:
760
+ local_media: Set of media_ids
761
+ remote_media: Set of (server_name, media_id)
762
+ time_ms: Current time in milliseconds
763
+ """
764
+
765
+ def update_cache_txn(txn: LoggingTransaction) -> None:
766
+ sql = (
767
+ "UPDATE remote_media_cache SET last_access_ts = ?"
768
+ " WHERE media_origin = ? AND media_id = ?"
769
+ )
770
+
771
+ txn.execute_batch(
772
+ sql,
773
+ [
774
+ (time_ms, media_origin, media_id)
775
+ for media_origin, media_id in remote_media
776
+ ],
777
+ )
778
+
779
+ sql = (
780
+ "UPDATE local_media_repository SET last_access_ts = ?"
781
+ " WHERE media_id = ?"
782
+ )
783
+
784
+ txn.execute_batch(sql, [(time_ms, media_id) for media_id in local_media])
785
+
786
+ await self.db_pool.runInteraction(
787
+ "update_cached_last_access_time", update_cache_txn
788
+ )
789
+
790
+ async def get_remote_media_thumbnails(
791
+ self, origin: str, media_id: str
792
+ ) -> list[ThumbnailInfo]:
793
+ rows = cast(
794
+ list[tuple[int, int, str, str, int]],
795
+ await self.db_pool.simple_select_list(
796
+ "remote_media_cache_thumbnails",
797
+ {"media_origin": origin, "media_id": media_id},
798
+ (
799
+ "thumbnail_width",
800
+ "thumbnail_height",
801
+ "thumbnail_method",
802
+ "thumbnail_type",
803
+ "thumbnail_length",
804
+ ),
805
+ desc="get_remote_media_thumbnails",
806
+ ),
807
+ )
808
+ return [
809
+ ThumbnailInfo(
810
+ width=row[0], height=row[1], method=row[2], type=row[3], length=row[4]
811
+ )
812
+ for row in rows
813
+ ]
814
+
815
+ @trace
816
+ async def get_remote_media_thumbnail(
817
+ self,
818
+ origin: str,
819
+ media_id: str,
820
+ t_width: int,
821
+ t_height: int,
822
+ t_type: str,
823
+ ) -> ThumbnailInfo | None:
824
+ """Fetch the thumbnail info of given width, height and type."""
825
+
826
+ row = await self.db_pool.simple_select_one(
827
+ table="remote_media_cache_thumbnails",
828
+ keyvalues={
829
+ "media_origin": origin,
830
+ "media_id": media_id,
831
+ "thumbnail_width": t_width,
832
+ "thumbnail_height": t_height,
833
+ "thumbnail_type": t_type,
834
+ },
835
+ retcols=(
836
+ "thumbnail_width",
837
+ "thumbnail_height",
838
+ "thumbnail_method",
839
+ "thumbnail_type",
840
+ "thumbnail_length",
841
+ ),
842
+ allow_none=True,
843
+ desc="get_remote_media_thumbnail",
844
+ )
845
+ if row is None:
846
+ return None
847
+ return ThumbnailInfo(
848
+ width=row[0], height=row[1], method=row[2], type=row[3], length=row[4]
849
+ )
850
+
851
+ @trace
852
+ async def store_remote_media_thumbnail(
853
+ self,
854
+ origin: str,
855
+ media_id: str,
856
+ filesystem_id: str,
857
+ thumbnail_width: int,
858
+ thumbnail_height: int,
859
+ thumbnail_type: str,
860
+ thumbnail_method: str,
861
+ thumbnail_length: int,
862
+ ) -> None:
863
+ await self.db_pool.simple_upsert(
864
+ table="remote_media_cache_thumbnails",
865
+ keyvalues={
866
+ "media_origin": origin,
867
+ "media_id": media_id,
868
+ "thumbnail_width": thumbnail_width,
869
+ "thumbnail_height": thumbnail_height,
870
+ "thumbnail_method": thumbnail_method,
871
+ "thumbnail_type": thumbnail_type,
872
+ },
873
+ values={"thumbnail_length": thumbnail_length},
874
+ insertion_values={"filesystem_id": filesystem_id},
875
+ desc="store_remote_media_thumbnail",
876
+ )
877
+
878
+ async def get_remote_media_ids(
879
+ self, before_ts: int, include_quarantined_media: bool
880
+ ) -> list[tuple[str, str, str]]:
881
+ """
882
+ Retrieve a list of server name, media ID tuples from the remote media cache.
883
+
884
+ Args:
885
+ before_ts: Only retrieve IDs from media that was either last accessed
886
+ (or if never accessed, created) before the given UNIX timestamp in ms.
887
+ include_quarantined_media: If False, exclude media IDs from the results that have
888
+ been marked as quarantined.
889
+
890
+ Returns:
891
+ A list of tuples containing:
892
+ * The server name of homeserver where the media originates from,
893
+ * The ID of the media.
894
+ * The filesystem ID.
895
+ """
896
+
897
+ sql = """
898
+ SELECT media_origin, media_id, filesystem_id
899
+ FROM remote_media_cache
900
+ WHERE last_access_ts < ?
901
+ """
902
+
903
+ if include_quarantined_media is False:
904
+ # Only include media that has not been quarantined
905
+ sql += """
906
+ AND quarantined_by IS NULL
907
+ """
908
+
909
+ return cast(
910
+ list[tuple[str, str, str]],
911
+ await self.db_pool.execute("get_remote_media_ids", sql, before_ts),
912
+ )
913
+
914
+ async def delete_remote_media(self, media_origin: str, media_id: str) -> None:
915
+ def delete_remote_media_txn(txn: LoggingTransaction) -> None:
916
+ self.db_pool.simple_delete_txn(
917
+ txn,
918
+ "remote_media_cache",
919
+ keyvalues={"media_origin": media_origin, "media_id": media_id},
920
+ )
921
+ self.db_pool.simple_delete_txn(
922
+ txn,
923
+ "remote_media_cache_thumbnails",
924
+ keyvalues={"media_origin": media_origin, "media_id": media_id},
925
+ )
926
+
927
+ await self.db_pool.runInteraction(
928
+ "delete_remote_media", delete_remote_media_txn
929
+ )
930
+
931
+ async def get_expired_url_cache(self, now_ts: int) -> list[str]:
932
+ sql = (
933
+ "SELECT media_id FROM local_media_repository_url_cache"
934
+ " WHERE expires_ts < ?"
935
+ " ORDER BY expires_ts ASC"
936
+ " LIMIT 500"
937
+ )
938
+
939
+ def _get_expired_url_cache_txn(txn: LoggingTransaction) -> list[str]:
940
+ txn.execute(sql, (now_ts,))
941
+ return [row[0] for row in txn]
942
+
943
+ return await self.db_pool.runInteraction(
944
+ "get_expired_url_cache", _get_expired_url_cache_txn
945
+ )
946
+
947
+ async def delete_url_cache(self, media_ids: Collection[str]) -> None:
948
+ if len(media_ids) == 0:
949
+ return
950
+
951
+ sql = "DELETE FROM local_media_repository_url_cache WHERE media_id = ?"
952
+
953
+ def _delete_url_cache_txn(txn: LoggingTransaction) -> None:
954
+ txn.execute_batch(sql, [(media_id,) for media_id in media_ids])
955
+
956
+ await self.db_pool.runInteraction("delete_url_cache", _delete_url_cache_txn)
957
+
958
+ async def get_url_cache_media_before(self, before_ts: int) -> list[str]:
959
+ sql = (
960
+ "SELECT media_id FROM local_media_repository"
961
+ " WHERE created_ts < ? AND url_cache IS NOT NULL"
962
+ " ORDER BY created_ts ASC"
963
+ " LIMIT 500"
964
+ )
965
+
966
+ def _get_url_cache_media_before_txn(txn: LoggingTransaction) -> list[str]:
967
+ txn.execute(sql, (before_ts,))
968
+ return [row[0] for row in txn]
969
+
970
+ return await self.db_pool.runInteraction(
971
+ "get_url_cache_media_before", _get_url_cache_media_before_txn
972
+ )
973
+
974
+ async def delete_url_cache_media(self, media_ids: Collection[str]) -> None:
975
+ if len(media_ids) == 0:
976
+ return
977
+
978
+ def _delete_url_cache_media_txn(txn: LoggingTransaction) -> None:
979
+ sql = "DELETE FROM local_media_repository WHERE media_id = ?"
980
+
981
+ txn.execute_batch(sql, [(media_id,) for media_id in media_ids])
982
+
983
+ sql = "DELETE FROM local_media_repository_thumbnails WHERE media_id = ?"
984
+
985
+ txn.execute_batch(sql, [(media_id,) for media_id in media_ids])
986
+
987
+ await self.db_pool.runInteraction(
988
+ "delete_url_cache_media", _delete_url_cache_media_txn
989
+ )
990
+
991
+ async def get_is_hash_quarantined(self, sha256: str) -> bool:
992
+ """Get whether a specific sha256 hash digest matches any quarantined media.
993
+
994
+ Returns:
995
+ None if the media_id doesn't exist.
996
+ """
997
+
998
+ # If we don't have the index yet, performance tanks, so we return False.
999
+ # In the background updates, remote_media_cache_sha256_idx is created
1000
+ # after local_media_repository_sha256_idx, which is why we only need to
1001
+ # check for the completion of the former.
1002
+ if not await self.db_pool.updates.has_completed_background_update(
1003
+ "remote_media_cache_sha256_idx"
1004
+ ):
1005
+ return False
1006
+
1007
+ def get_matching_media_txn(
1008
+ txn: LoggingTransaction, table: str, sha256: str
1009
+ ) -> bool:
1010
+ # Return on first match
1011
+ sql = """
1012
+ SELECT 1
1013
+ FROM local_media_repository
1014
+ WHERE sha256 = ? AND quarantined_by IS NOT NULL
1015
+
1016
+ UNION ALL
1017
+
1018
+ SELECT 1
1019
+ FROM remote_media_cache
1020
+ WHERE sha256 = ? AND quarantined_by IS NOT NULL
1021
+ LIMIT 1
1022
+ """
1023
+ txn.execute(sql, (sha256, sha256))
1024
+ row = txn.fetchone()
1025
+ return row is not None
1026
+
1027
+ return await self.db_pool.runInteraction(
1028
+ "get_matching_media_txn",
1029
+ get_matching_media_txn,
1030
+ "local_media_repository",
1031
+ sha256,
1032
+ )
1033
+
1034
+ async def get_media_uploaded_size_for_user(
1035
+ self, user_id: str, time_period_ms: int
1036
+ ) -> int:
1037
+ """Get the total size of media uploaded by a user in the last
1038
+ time_period_ms milliseconds.
1039
+
1040
+ Args:
1041
+ user_id: The user ID to check.
1042
+ time_period_ms: The time period in milliseconds to consider.
1043
+
1044
+ Returns:
1045
+ The total size of media uploaded by the user in bytes.
1046
+ """
1047
+
1048
+ sql = """
1049
+ SELECT COALESCE(SUM(media_length), 0)
1050
+ FROM local_media_repository
1051
+ WHERE user_id = ? AND created_ts > ?
1052
+ """
1053
+
1054
+ def _get_media_uploaded_size_for_user_txn(
1055
+ txn: LoggingTransaction,
1056
+ ) -> int:
1057
+ # Calculate the timestamp for the start of the time period
1058
+ start_ts = self.clock.time_msec() - time_period_ms
1059
+ txn.execute(sql, (user_id, start_ts))
1060
+ row = txn.fetchone()
1061
+ if row is None:
1062
+ return 0
1063
+ return row[0]
1064
+
1065
+ return await self.db_pool.runInteraction(
1066
+ "get_media_uploaded_size_for_user",
1067
+ _get_media_uploaded_size_for_user_txn,
1068
+ )