matrix-synapse 1.142.0rc3__cp314-abi3-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

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