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,1061 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2019-2021 The Matrix.org Foundation C.I.C.
5
+ # Copyright (C) 2023 New Vector, Ltd
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # See the GNU Affero General Public License for more details:
13
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
14
+ #
15
+ # Originally licensed under the Apache License, Version 2.0:
16
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
17
+ #
18
+ # [This file includes modifications made by New Vector Limited]
19
+ #
20
+ #
21
+ import logging
22
+ from http import HTTPStatus
23
+ from typing import TYPE_CHECKING, Optional, cast
24
+
25
+ import attr
26
+ from immutabledict import immutabledict
27
+
28
+ from synapse.api.constants import Direction, EventTypes, JoinRules, Membership
29
+ from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
30
+ from synapse.api.filtering import Filter
31
+ from synapse.handlers.pagination import (
32
+ PURGE_ROOM_ACTION_NAME,
33
+ SHUTDOWN_AND_PURGE_ROOM_ACTION_NAME,
34
+ )
35
+ from synapse.http.servlet import (
36
+ ResolveRoomIdMixin,
37
+ RestServlet,
38
+ assert_params_in_dict,
39
+ parse_boolean,
40
+ parse_enum,
41
+ parse_integer,
42
+ parse_json,
43
+ parse_json_object_from_request,
44
+ parse_string,
45
+ )
46
+ from synapse.http.site import SynapseRequest
47
+ from synapse.rest.admin._base import (
48
+ admin_patterns,
49
+ assert_requester_is_admin,
50
+ assert_user_is_admin,
51
+ )
52
+ from synapse.storage.databases.main.room import RoomSortOrder
53
+ from synapse.streams.config import PaginationConfig
54
+ from synapse.types import JsonDict, RoomID, ScheduledTask, UserID, create_requester
55
+ from synapse.types.state import StateFilter
56
+
57
+ if TYPE_CHECKING:
58
+ from synapse.api.auth import Auth
59
+ from synapse.handlers.pagination import PaginationHandler
60
+ from synapse.handlers.room import RoomShutdownHandler
61
+ from synapse.server import HomeServer
62
+
63
+ logger = logging.getLogger(__name__)
64
+
65
+
66
+ class AdminRoomHierarchy(RestServlet):
67
+ """
68
+ Given a room, returns room details on that room and any space children of
69
+ the provided room. Does not reach out over federation to fetch information about
70
+ any remote rooms which the server is not currently participating in
71
+ """
72
+
73
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/hierarchy$")
74
+
75
+ def __init__(self, hs: "HomeServer"):
76
+ self._auth = hs.get_auth()
77
+ self._room_summary_handler = hs.get_room_summary_handler()
78
+ self._store = hs.get_datastores().main
79
+ self._storage_controllers = hs.get_storage_controllers()
80
+
81
+ async def on_GET(
82
+ self, request: SynapseRequest, room_id: str
83
+ ) -> tuple[int, JsonDict]:
84
+ requester = await self._auth.get_user_by_req(request)
85
+ await assert_user_is_admin(self._auth, requester)
86
+
87
+ max_depth = parse_integer(request, "max_depth")
88
+ limit = parse_integer(request, "limit")
89
+
90
+ room_entry_summary = await self._room_summary_handler.get_room_hierarchy(
91
+ requester,
92
+ room_id,
93
+ # We omit details about remote rooms because we only care
94
+ # about managing rooms local to the homeserver. This
95
+ # also immensely helps with the response time of the
96
+ # endpoint since we don't need to reach out over federation.
97
+ # There is a trade-off as this will leave holes where
98
+ # information about public/peekable remote rooms the
99
+ # server is not participating in will be omitted.
100
+ omit_remote_room_hierarchy=True,
101
+ admin_skip_room_visibility_check=True,
102
+ max_depth=max_depth,
103
+ limit=limit,
104
+ from_token=parse_string(request, "from"),
105
+ )
106
+
107
+ return HTTPStatus.OK, room_entry_summary
108
+
109
+
110
+ class RoomRestV2Servlet(RestServlet):
111
+ """Delete a room from server asynchronously with a background task.
112
+
113
+ It is a combination and improvement of shutdown and purge room.
114
+
115
+ Shuts down a room by removing all local users from the room.
116
+ Blocking all future invites and joins to the room is optional.
117
+
118
+ If desired any local aliases will be repointed to a new room
119
+ created by `new_room_user_id` and kicked users will be auto-
120
+ joined to the new room.
121
+
122
+ If 'purge' is true, it will remove all traces of a room from the database.
123
+ """
124
+
125
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)$", "v2")
126
+
127
+ def __init__(self, hs: "HomeServer"):
128
+ self._auth = hs.get_auth()
129
+ self._store = hs.get_datastores().main
130
+ self._pagination_handler = hs.get_pagination_handler()
131
+ self._third_party_rules = hs.get_module_api_callbacks().third_party_event_rules
132
+
133
+ async def on_DELETE(
134
+ self, request: SynapseRequest, room_id: str
135
+ ) -> tuple[int, JsonDict]:
136
+ requester = await self._auth.get_user_by_req(request)
137
+ await assert_user_is_admin(self._auth, requester)
138
+
139
+ content = parse_json_object_from_request(request)
140
+
141
+ block = content.get("block", False)
142
+ if not isinstance(block, bool):
143
+ raise SynapseError(
144
+ HTTPStatus.BAD_REQUEST,
145
+ "Param 'block' must be a boolean, if given",
146
+ Codes.BAD_JSON,
147
+ )
148
+
149
+ purge = content.get("purge", True)
150
+ if not isinstance(purge, bool):
151
+ raise SynapseError(
152
+ HTTPStatus.BAD_REQUEST,
153
+ "Param 'purge' must be a boolean, if given",
154
+ Codes.BAD_JSON,
155
+ )
156
+
157
+ force_purge = content.get("force_purge", False)
158
+ if not isinstance(force_purge, bool):
159
+ raise SynapseError(
160
+ HTTPStatus.BAD_REQUEST,
161
+ "Param 'force_purge' must be a boolean, if given",
162
+ Codes.BAD_JSON,
163
+ )
164
+
165
+ if not RoomID.is_valid(room_id):
166
+ raise SynapseError(
167
+ HTTPStatus.BAD_REQUEST, "%s is not a legal room ID" % (room_id,)
168
+ )
169
+
170
+ # Check this here, as otherwise we'll only fail after the background job has been started.
171
+ if not await self._third_party_rules.check_can_shutdown_room(
172
+ requester.user.to_string(), room_id
173
+ ):
174
+ raise SynapseError(
175
+ 403, "Shutdown of this room is forbidden", Codes.FORBIDDEN
176
+ )
177
+
178
+ delete_id = await self._pagination_handler.start_shutdown_and_purge_room(
179
+ room_id=room_id,
180
+ shutdown_params={
181
+ "new_room_user_id": content.get("new_room_user_id"),
182
+ "new_room_name": content.get("room_name"),
183
+ "message": content.get("message"),
184
+ "requester_user_id": requester.user.to_string(),
185
+ "block": block,
186
+ "purge": purge,
187
+ "force_purge": force_purge,
188
+ },
189
+ )
190
+
191
+ return HTTPStatus.OK, {"delete_id": delete_id}
192
+
193
+
194
+ def _convert_delete_task_to_response(task: ScheduledTask) -> JsonDict:
195
+ return {
196
+ "delete_id": task.id,
197
+ "room_id": task.resource_id,
198
+ "status": task.status,
199
+ "shutdown_room": task.result,
200
+ }
201
+
202
+
203
+ class DeleteRoomStatusByRoomIdRestServlet(RestServlet):
204
+ """Get the status of the delete room background task."""
205
+
206
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/delete_status$", "v2")
207
+
208
+ def __init__(self, hs: "HomeServer"):
209
+ self._auth = hs.get_auth()
210
+ self._pagination_handler = hs.get_pagination_handler()
211
+
212
+ async def on_GET(
213
+ self, request: SynapseRequest, room_id: str
214
+ ) -> tuple[int, JsonDict]:
215
+ await assert_requester_is_admin(self._auth, request)
216
+
217
+ if not RoomID.is_valid(room_id):
218
+ raise SynapseError(
219
+ HTTPStatus.BAD_REQUEST, "%s is not a legal room ID" % (room_id,)
220
+ )
221
+
222
+ delete_tasks = await self._pagination_handler.get_delete_tasks_by_room(room_id)
223
+
224
+ if delete_tasks:
225
+ return HTTPStatus.OK, {
226
+ "results": [
227
+ _convert_delete_task_to_response(task) for task in delete_tasks
228
+ ],
229
+ }
230
+ else:
231
+ raise NotFoundError("No delete task for room_id '%s' found" % room_id)
232
+
233
+
234
+ class DeleteRoomStatusByDeleteIdRestServlet(RestServlet):
235
+ """Get the status of the delete room background task."""
236
+
237
+ PATTERNS = admin_patterns("/rooms/delete_status/(?P<delete_id>[^/]*)$", "v2")
238
+
239
+ def __init__(self, hs: "HomeServer"):
240
+ self._auth = hs.get_auth()
241
+ self._pagination_handler = hs.get_pagination_handler()
242
+
243
+ async def on_GET(
244
+ self, request: SynapseRequest, delete_id: str
245
+ ) -> tuple[int, JsonDict]:
246
+ await assert_requester_is_admin(self._auth, request)
247
+
248
+ delete_task = await self._pagination_handler.get_delete_task(delete_id)
249
+ if delete_task is None or (
250
+ delete_task.action != PURGE_ROOM_ACTION_NAME
251
+ and delete_task.action != SHUTDOWN_AND_PURGE_ROOM_ACTION_NAME
252
+ ):
253
+ raise NotFoundError("delete id '%s' not found" % delete_id)
254
+
255
+ return HTTPStatus.OK, _convert_delete_task_to_response(delete_task)
256
+
257
+
258
+ class ListRoomRestServlet(RestServlet):
259
+ """
260
+ List all rooms that are known to the homeserver. Results are returned
261
+ in a dictionary containing room information. Supports pagination.
262
+ """
263
+
264
+ PATTERNS = admin_patterns("/rooms$")
265
+
266
+ def __init__(self, hs: "HomeServer"):
267
+ self.store = hs.get_datastores().main
268
+ self.auth = hs.get_auth()
269
+ self.admin_handler = hs.get_admin_handler()
270
+
271
+ async def on_GET(self, request: SynapseRequest) -> tuple[int, JsonDict]:
272
+ await assert_requester_is_admin(self.auth, request)
273
+
274
+ # Extract query parameters
275
+ start = parse_integer(request, "from", default=0)
276
+ limit = parse_integer(request, "limit", default=100)
277
+ order_by = parse_string(
278
+ request,
279
+ "order_by",
280
+ default=RoomSortOrder.NAME.value,
281
+ allowed_values=[sort_order.value for sort_order in RoomSortOrder],
282
+ )
283
+
284
+ search_term = parse_string(request, "search_term", encoding="utf-8")
285
+ if search_term == "":
286
+ raise SynapseError(
287
+ HTTPStatus.BAD_REQUEST,
288
+ "search_term cannot be an empty string",
289
+ errcode=Codes.INVALID_PARAM,
290
+ )
291
+
292
+ public_rooms = parse_boolean(request, "public_rooms")
293
+ empty_rooms = parse_boolean(request, "empty_rooms")
294
+
295
+ direction = parse_enum(request, "dir", Direction, default=Direction.FORWARDS)
296
+ reverse_order = True if direction == Direction.BACKWARDS else False
297
+
298
+ # Return list of rooms according to parameters
299
+ rooms, total_rooms = await self.store.get_rooms_paginate(
300
+ start,
301
+ limit,
302
+ order_by,
303
+ reverse_order,
304
+ search_term,
305
+ public_rooms,
306
+ empty_rooms,
307
+ )
308
+
309
+ response = {
310
+ # next_token should be opaque, so return a value the client can parse
311
+ "offset": start,
312
+ "rooms": rooms,
313
+ "total_rooms": total_rooms,
314
+ }
315
+
316
+ # Are there more rooms to paginate through after this?
317
+ if (start + limit) < total_rooms:
318
+ # There are. Calculate where the query should start from next time
319
+ # to get the next part of the list
320
+ response["next_batch"] = start + limit
321
+
322
+ # Is it possible to paginate backwards? Check if we currently have an
323
+ # offset
324
+ if start > 0:
325
+ if start > limit:
326
+ # Going back one iteration won't take us to the start.
327
+ # Calculate new offset
328
+ response["prev_batch"] = start - limit
329
+ else:
330
+ response["prev_batch"] = 0
331
+
332
+ return HTTPStatus.OK, response
333
+
334
+
335
+ class RoomRestServlet(RestServlet):
336
+ """Manage a room.
337
+
338
+ On GET : Get details of a room.
339
+
340
+ On DELETE : Delete a room from server.
341
+
342
+ It is a combination and improvement of shutdown and purge room.
343
+
344
+ Shuts down a room by removing all local users from the room.
345
+ Blocking all future invites and joins to the room is optional.
346
+
347
+ If desired any local aliases will be repointed to a new room
348
+ created by `new_room_user_id` and kicked users will be auto-
349
+ joined to the new room.
350
+
351
+ If 'purge' is true, it will remove all traces of a room from the database.
352
+
353
+ TODO: Add on_POST to allow room creation without joining the room
354
+ """
355
+
356
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)$")
357
+
358
+ def __init__(self, hs: "HomeServer"):
359
+ self.auth = hs.get_auth()
360
+ self.store = hs.get_datastores().main
361
+ self.room_shutdown_handler = hs.get_room_shutdown_handler()
362
+ self.pagination_handler = hs.get_pagination_handler()
363
+
364
+ async def on_GET(
365
+ self, request: SynapseRequest, room_id: str
366
+ ) -> tuple[int, JsonDict]:
367
+ await assert_requester_is_admin(self.auth, request)
368
+
369
+ ret = await self.store.get_room_with_stats(room_id)
370
+ if not ret:
371
+ raise NotFoundError("Room not found")
372
+
373
+ members = await self.store.get_users_in_room(room_id)
374
+ result = attr.asdict(ret)
375
+ result["joined_local_devices"] = await self.store.count_devices_by_users(
376
+ members
377
+ )
378
+ result["forgotten"] = await self.store.is_locally_forgotten_room(room_id)
379
+
380
+ return HTTPStatus.OK, result
381
+
382
+ async def on_DELETE(
383
+ self, request: SynapseRequest, room_id: str
384
+ ) -> tuple[int, JsonDict]:
385
+ return await self._delete_room(
386
+ request,
387
+ room_id,
388
+ self.auth,
389
+ self.room_shutdown_handler,
390
+ self.pagination_handler,
391
+ )
392
+
393
+ async def _delete_room(
394
+ self,
395
+ request: SynapseRequest,
396
+ room_id: str,
397
+ auth: "Auth",
398
+ room_shutdown_handler: "RoomShutdownHandler",
399
+ pagination_handler: "PaginationHandler",
400
+ ) -> tuple[int, JsonDict]:
401
+ requester = await auth.get_user_by_req(request)
402
+ await assert_user_is_admin(auth, requester)
403
+
404
+ content = parse_json_object_from_request(request)
405
+
406
+ block = content.get("block", False)
407
+ if not isinstance(block, bool):
408
+ raise SynapseError(
409
+ HTTPStatus.BAD_REQUEST,
410
+ "Param 'block' must be a boolean, if given",
411
+ Codes.BAD_JSON,
412
+ )
413
+
414
+ purge = content.get("purge", True)
415
+ if not isinstance(purge, bool):
416
+ raise SynapseError(
417
+ HTTPStatus.BAD_REQUEST,
418
+ "Param 'purge' must be a boolean, if given",
419
+ Codes.BAD_JSON,
420
+ )
421
+
422
+ force_purge = content.get("force_purge", False)
423
+ if not isinstance(force_purge, bool):
424
+ raise SynapseError(
425
+ HTTPStatus.BAD_REQUEST,
426
+ "Param 'force_purge' must be a boolean, if given",
427
+ Codes.BAD_JSON,
428
+ )
429
+
430
+ ret = await room_shutdown_handler.shutdown_room(
431
+ room_id=room_id,
432
+ params={
433
+ "new_room_user_id": content.get("new_room_user_id"),
434
+ "new_room_name": content.get("room_name"),
435
+ "message": content.get("message"),
436
+ "requester_user_id": requester.user.to_string(),
437
+ "block": block,
438
+ "purge": purge,
439
+ "force_purge": force_purge,
440
+ },
441
+ )
442
+
443
+ # Purge room
444
+ if purge:
445
+ try:
446
+ await pagination_handler.purge_room(room_id, force=force_purge)
447
+ except NotFoundError:
448
+ if block:
449
+ # We can block unknown rooms with this endpoint, in which case
450
+ # a failed purge is expected.
451
+ pass
452
+ else:
453
+ # But otherwise, we expect this purge to have succeeded.
454
+ raise
455
+
456
+ # Cast safety: cast away the knowledge that this is a TypedDict.
457
+ # See https://github.com/python/mypy/issues/4976#issuecomment-579883622
458
+ # for some discussion on why this is necessary. Either way,
459
+ # `ret` is an opaque dictionary blob as far as the rest of the app cares.
460
+ return HTTPStatus.OK, cast(JsonDict, ret)
461
+
462
+
463
+ class RoomMembersRestServlet(RestServlet):
464
+ """
465
+ Get members list of a room.
466
+ """
467
+
468
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/members$")
469
+
470
+ def __init__(self, hs: "HomeServer"):
471
+ self.auth = hs.get_auth()
472
+ self.store = hs.get_datastores().main
473
+
474
+ async def on_GET(
475
+ self, request: SynapseRequest, room_id: str
476
+ ) -> tuple[int, JsonDict]:
477
+ await assert_requester_is_admin(self.auth, request)
478
+
479
+ room = await self.store.get_room(room_id)
480
+ if not room:
481
+ raise NotFoundError("Room not found")
482
+
483
+ members = await self.store.get_users_in_room(room_id)
484
+ ret = {"members": members, "total": len(members)}
485
+
486
+ return HTTPStatus.OK, ret
487
+
488
+
489
+ class RoomStateRestServlet(RestServlet):
490
+ """
491
+ Get full state within a room.
492
+ """
493
+
494
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/state$")
495
+
496
+ def __init__(self, hs: "HomeServer"):
497
+ self.auth = hs.get_auth()
498
+ self.store = hs.get_datastores().main
499
+ self._storage_controllers = hs.get_storage_controllers()
500
+ self.clock = hs.get_clock()
501
+ self._event_serializer = hs.get_event_client_serializer()
502
+
503
+ async def on_GET(
504
+ self, request: SynapseRequest, room_id: str
505
+ ) -> tuple[int, JsonDict]:
506
+ await assert_requester_is_admin(self.auth, request)
507
+
508
+ room = await self.store.get_room(room_id)
509
+ if not room:
510
+ raise NotFoundError("Room not found")
511
+
512
+ state_filter = None
513
+ type = parse_string(request, "type")
514
+
515
+ if type:
516
+ state_filter = StateFilter(
517
+ types=immutabledict({type: None}),
518
+ include_others=False,
519
+ )
520
+
521
+ event_ids = await self._storage_controllers.state.get_current_state_ids(
522
+ room_id, state_filter
523
+ )
524
+ events = await self.store.get_events(event_ids.values())
525
+ now = self.clock.time_msec()
526
+ room_state = await self._event_serializer.serialize_events(events.values(), now)
527
+ ret = {"state": room_state}
528
+
529
+ return HTTPStatus.OK, ret
530
+
531
+
532
+ class JoinRoomAliasServlet(ResolveRoomIdMixin, RestServlet):
533
+ PATTERNS = admin_patterns("/join/(?P<room_identifier>[^/]*)$")
534
+
535
+ def __init__(self, hs: "HomeServer"):
536
+ super().__init__(hs)
537
+ self.auth = hs.get_auth()
538
+ self.admin_handler = hs.get_admin_handler()
539
+ self.store = hs.get_datastores().main
540
+ self._storage_controllers = hs.get_storage_controllers()
541
+ self.is_mine = hs.is_mine
542
+
543
+ async def on_POST(
544
+ self, request: SynapseRequest, room_identifier: str
545
+ ) -> tuple[int, JsonDict]:
546
+ # This will always be set by the time Twisted calls us.
547
+ assert request.args is not None
548
+
549
+ requester = await self.auth.get_user_by_req(request)
550
+ await assert_user_is_admin(self.auth, requester)
551
+
552
+ content = parse_json_object_from_request(request)
553
+
554
+ assert_params_in_dict(content, ["user_id"])
555
+ target_user = UserID.from_string(content["user_id"])
556
+
557
+ if not self.is_mine(target_user):
558
+ raise SynapseError(
559
+ HTTPStatus.BAD_REQUEST,
560
+ "This endpoint can only be used with local users",
561
+ )
562
+
563
+ if not await self.admin_handler.get_user(target_user):
564
+ raise NotFoundError("User not found")
565
+
566
+ # Get the room ID from the identifier.
567
+ try:
568
+ remote_room_hosts: Optional[list[str]] = [
569
+ x.decode("ascii") for x in request.args[b"server_name"]
570
+ ]
571
+ except Exception:
572
+ remote_room_hosts = None
573
+ room_id, remote_room_hosts = await self.resolve_room_id(
574
+ room_identifier, remote_room_hosts
575
+ )
576
+
577
+ fake_requester = create_requester(
578
+ target_user, authenticated_entity=requester.authenticated_entity
579
+ )
580
+
581
+ # send invite if room has "JoinRules.INVITE"
582
+ join_rules_event = (
583
+ await self._storage_controllers.state.get_current_state_event(
584
+ room_id, EventTypes.JoinRules, ""
585
+ )
586
+ )
587
+ if join_rules_event:
588
+ if not (join_rules_event.content.get("join_rule") == JoinRules.PUBLIC):
589
+ # update_membership with an action of "invite" can raise a
590
+ # ShadowBanError. This is not handled since it is assumed that
591
+ # an admin isn't going to call this API with a shadow-banned user.
592
+ await self.room_member_handler.update_membership(
593
+ requester=requester,
594
+ target=fake_requester.user,
595
+ room_id=room_id,
596
+ action="invite",
597
+ remote_room_hosts=remote_room_hosts,
598
+ ratelimit=False,
599
+ )
600
+
601
+ await self.room_member_handler.update_membership(
602
+ requester=fake_requester,
603
+ target=fake_requester.user,
604
+ room_id=room_id,
605
+ action="join",
606
+ remote_room_hosts=remote_room_hosts,
607
+ ratelimit=False,
608
+ )
609
+
610
+ return HTTPStatus.OK, {"room_id": room_id}
611
+
612
+
613
+ class MakeRoomAdminRestServlet(ResolveRoomIdMixin, RestServlet):
614
+ """Allows a server admin to get power in a room if a local user has power in
615
+ a room. Will also invite the user if they're not in the room and it's a
616
+ private room. Can specify another user (rather than the admin user) to be
617
+ granted power, e.g.:
618
+
619
+ POST/_synapse/admin/v1/rooms/<room_id_or_alias>/make_room_admin
620
+ {
621
+ "user_id": "@foo:example.com"
622
+ }
623
+ """
624
+
625
+ PATTERNS = admin_patterns("/rooms/(?P<room_identifier>[^/]*)/make_room_admin$")
626
+
627
+ def __init__(self, hs: "HomeServer"):
628
+ super().__init__(hs)
629
+ self.auth = hs.get_auth()
630
+ self.store = hs.get_datastores().main
631
+ self._state_storage_controller = hs.get_storage_controllers().state
632
+ self.event_creation_handler = hs.get_event_creation_handler()
633
+ self.state_handler = hs.get_state_handler()
634
+ self.is_mine_id = hs.is_mine_id
635
+
636
+ async def on_POST(
637
+ self, request: SynapseRequest, room_identifier: str
638
+ ) -> tuple[int, JsonDict]:
639
+ requester = await self.auth.get_user_by_req(request)
640
+ await assert_user_is_admin(self.auth, requester)
641
+ content = parse_json_object_from_request(request, allow_empty_body=True)
642
+
643
+ room_id, _ = await self.resolve_room_id(room_identifier)
644
+
645
+ # Which user to grant room admin rights to.
646
+ user_to_add = content.get("user_id", requester.user.to_string())
647
+
648
+ # Figure out which local users currently have power in the room, if any.
649
+ filtered_room_state = await self._state_storage_controller.get_current_state(
650
+ room_id,
651
+ StateFilter.from_types(
652
+ [
653
+ (EventTypes.Create, ""),
654
+ (EventTypes.PowerLevels, ""),
655
+ (EventTypes.JoinRules, ""),
656
+ (EventTypes.Member, user_to_add),
657
+ ]
658
+ ),
659
+ )
660
+ if not filtered_room_state:
661
+ raise SynapseError(HTTPStatus.BAD_REQUEST, "Server not in room")
662
+
663
+ create_event = filtered_room_state[(EventTypes.Create, "")]
664
+ power_levels = filtered_room_state.get((EventTypes.PowerLevels, ""))
665
+
666
+ if power_levels is not None:
667
+ # We pick the local user with the highest power.
668
+ user_power = power_levels.content.get("users", {})
669
+ admin_users = [
670
+ user_id for user_id in user_power if self.is_mine_id(user_id)
671
+ ]
672
+ admin_users.sort(key=lambda user: user_power[user])
673
+
674
+ if create_event.room_version.msc4289_creator_power_enabled:
675
+ creators = create_event.content.get("additional_creators", []) + [
676
+ create_event.sender
677
+ ]
678
+ for creator in creators:
679
+ if self.is_mine_id(creator):
680
+ # include the creator as they won't be in the PL users map.
681
+ admin_users.append(creator)
682
+
683
+ if not admin_users:
684
+ raise SynapseError(
685
+ HTTPStatus.BAD_REQUEST, "No local admin user in room"
686
+ )
687
+
688
+ admin_user_id = None
689
+
690
+ for admin_user in reversed(admin_users):
691
+ (
692
+ current_membership_type,
693
+ _,
694
+ ) = await self.store.get_local_current_membership_for_user_in_room(
695
+ admin_user, room_id
696
+ )
697
+ if current_membership_type == "join":
698
+ admin_user_id = admin_user
699
+ break
700
+
701
+ if not admin_user_id:
702
+ raise SynapseError(
703
+ HTTPStatus.BAD_REQUEST,
704
+ "No local admin user in room",
705
+ )
706
+
707
+ pl_content = power_levels.content
708
+ else:
709
+ # If there is no power level events then the creator has rights.
710
+ pl_content = {}
711
+ admin_user_id = create_event.sender
712
+ if not self.is_mine_id(admin_user_id):
713
+ raise SynapseError(
714
+ HTTPStatus.BAD_REQUEST,
715
+ "No local admin user in room",
716
+ )
717
+
718
+ # Grant the user power equal to the room admin by attempting to send an
719
+ # updated power level event.
720
+ new_pl_content = dict(pl_content)
721
+ new_pl_content["users"] = dict(pl_content.get("users", {}))
722
+ # give the new user the same PL as the admin, default to 100 in case there is no PL event.
723
+ # This means in v12+ rooms we get PL100 if the creator promotes us.
724
+ new_pl_content["users"][user_to_add] = new_pl_content["users"].get(
725
+ admin_user_id, 100
726
+ )
727
+
728
+ fake_requester = create_requester(
729
+ admin_user_id,
730
+ authenticated_entity=requester.authenticated_entity,
731
+ )
732
+
733
+ try:
734
+ await self.event_creation_handler.create_and_send_nonmember_event(
735
+ fake_requester,
736
+ event_dict={
737
+ "content": new_pl_content,
738
+ "sender": admin_user_id,
739
+ "type": EventTypes.PowerLevels,
740
+ "state_key": "",
741
+ "room_id": room_id,
742
+ },
743
+ )
744
+ except AuthError:
745
+ # The admin user we found turned out not to have enough power.
746
+ raise SynapseError(
747
+ HTTPStatus.BAD_REQUEST,
748
+ "No local admin user in room with power to update power levels.",
749
+ )
750
+
751
+ # Now we check if the user we're granting admin rights to is already in
752
+ # the room. If not and it's not a public room we invite them.
753
+ member_event = filtered_room_state.get((EventTypes.Member, user_to_add))
754
+ is_joined = False
755
+ if member_event:
756
+ is_joined = member_event.content["membership"] in (
757
+ Membership.JOIN,
758
+ Membership.INVITE,
759
+ )
760
+
761
+ if is_joined:
762
+ return HTTPStatus.OK, {}
763
+
764
+ join_rules = filtered_room_state.get((EventTypes.JoinRules, ""))
765
+ is_public = False
766
+ if join_rules:
767
+ is_public = join_rules.content.get("join_rule") == JoinRules.PUBLIC
768
+
769
+ if is_public:
770
+ return HTTPStatus.OK, {}
771
+
772
+ await self.room_member_handler.update_membership(
773
+ fake_requester,
774
+ target=UserID.from_string(user_to_add),
775
+ room_id=room_id,
776
+ action=Membership.INVITE,
777
+ )
778
+
779
+ return HTTPStatus.OK, {}
780
+
781
+
782
+ class ForwardExtremitiesRestServlet(ResolveRoomIdMixin, RestServlet):
783
+ """Allows a server admin to get or clear forward extremities.
784
+
785
+ Clearing does not require restarting the server.
786
+
787
+ Clear forward extremities:
788
+ DELETE /_synapse/admin/v1/rooms/<room_id_or_alias>/forward_extremities
789
+
790
+ Get forward_extremities:
791
+ GET /_synapse/admin/v1/rooms/<room_id_or_alias>/forward_extremities
792
+ """
793
+
794
+ PATTERNS = admin_patterns("/rooms/(?P<room_identifier>[^/]*)/forward_extremities$")
795
+
796
+ def __init__(self, hs: "HomeServer"):
797
+ super().__init__(hs)
798
+ self.auth = hs.get_auth()
799
+ self.store = hs.get_datastores().main
800
+
801
+ async def on_DELETE(
802
+ self, request: SynapseRequest, room_identifier: str
803
+ ) -> tuple[int, JsonDict]:
804
+ await assert_requester_is_admin(self.auth, request)
805
+
806
+ room_id, _ = await self.resolve_room_id(room_identifier)
807
+
808
+ deleted_count = await self.store.delete_forward_extremities_for_room(room_id)
809
+ return HTTPStatus.OK, {"deleted": deleted_count}
810
+
811
+ async def on_GET(
812
+ self, request: SynapseRequest, room_identifier: str
813
+ ) -> tuple[int, JsonDict]:
814
+ await assert_requester_is_admin(self.auth, request)
815
+
816
+ room_id, _ = await self.resolve_room_id(room_identifier)
817
+
818
+ extremities = await self.store.get_forward_extremities_for_room(room_id)
819
+ result = [
820
+ {
821
+ "event_id": ex[0],
822
+ "state_group": ex[1],
823
+ "depth": ex[2],
824
+ "received_ts": ex[3],
825
+ }
826
+ for ex in extremities
827
+ ]
828
+
829
+ return HTTPStatus.OK, {"count": len(extremities), "results": result}
830
+
831
+
832
+ class RoomEventContextServlet(RestServlet):
833
+ """
834
+ Provide the context for an event.
835
+ This API is designed to be used when system administrators wish to look at
836
+ an abuse report and understand what happened during and immediately prior
837
+ to this event.
838
+ """
839
+
840
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/context/(?P<event_id>[^/]*)$")
841
+
842
+ def __init__(self, hs: "HomeServer"):
843
+ super().__init__()
844
+ self._hs = hs
845
+ self.clock = hs.get_clock()
846
+ self.room_context_handler = hs.get_room_context_handler()
847
+ self._event_serializer = hs.get_event_client_serializer()
848
+ self.auth = hs.get_auth()
849
+
850
+ async def on_GET(
851
+ self, request: SynapseRequest, room_id: str, event_id: str
852
+ ) -> tuple[int, JsonDict]:
853
+ requester = await self.auth.get_user_by_req(request, allow_guest=False)
854
+ await assert_user_is_admin(self.auth, requester)
855
+
856
+ limit = parse_integer(request, "limit", default=10)
857
+
858
+ # picking the API shape for symmetry with /messages
859
+ filter_json = parse_json(request, "filter", encoding="utf-8")
860
+ event_filter = Filter(self._hs, filter_json) if filter_json else None
861
+
862
+ event_context = await self.room_context_handler.get_event_context(
863
+ requester,
864
+ room_id,
865
+ event_id,
866
+ limit,
867
+ event_filter,
868
+ use_admin_priviledge=True,
869
+ )
870
+
871
+ if not event_context:
872
+ raise SynapseError(
873
+ HTTPStatus.NOT_FOUND, "Event not found.", errcode=Codes.NOT_FOUND
874
+ )
875
+
876
+ time_now = self.clock.time_msec()
877
+ results = {
878
+ "events_before": await self._event_serializer.serialize_events(
879
+ event_context.events_before,
880
+ time_now,
881
+ bundle_aggregations=event_context.aggregations,
882
+ ),
883
+ "event": await self._event_serializer.serialize_event(
884
+ event_context.event,
885
+ time_now,
886
+ bundle_aggregations=event_context.aggregations,
887
+ ),
888
+ "events_after": await self._event_serializer.serialize_events(
889
+ event_context.events_after,
890
+ time_now,
891
+ bundle_aggregations=event_context.aggregations,
892
+ ),
893
+ "state": await self._event_serializer.serialize_events(
894
+ event_context.state, time_now
895
+ ),
896
+ "start": event_context.start,
897
+ "end": event_context.end,
898
+ }
899
+
900
+ return HTTPStatus.OK, results
901
+
902
+
903
+ class BlockRoomRestServlet(RestServlet):
904
+ """
905
+ Manage blocking of rooms.
906
+ On PUT: Add or remove a room from blocking list.
907
+ On GET: Get blocking status of room and user who has blocked this room.
908
+ """
909
+
910
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/block$")
911
+
912
+ def __init__(self, hs: "HomeServer"):
913
+ self._auth = hs.get_auth()
914
+ self._store = hs.get_datastores().main
915
+
916
+ async def on_GET(
917
+ self, request: SynapseRequest, room_id: str
918
+ ) -> tuple[int, JsonDict]:
919
+ await assert_requester_is_admin(self._auth, request)
920
+
921
+ if not RoomID.is_valid(room_id):
922
+ raise SynapseError(
923
+ HTTPStatus.BAD_REQUEST, "%s is not a legal room ID" % (room_id,)
924
+ )
925
+
926
+ blocked_by = await self._store.room_is_blocked_by(room_id)
927
+ # Test `not None` if `user_id` is an empty string
928
+ # if someone add manually an entry in database
929
+ if blocked_by is not None:
930
+ response = {"block": True, "user_id": blocked_by}
931
+ else:
932
+ response = {"block": False}
933
+
934
+ return HTTPStatus.OK, response
935
+
936
+ async def on_PUT(
937
+ self, request: SynapseRequest, room_id: str
938
+ ) -> tuple[int, JsonDict]:
939
+ requester = await self._auth.get_user_by_req(request)
940
+ await assert_user_is_admin(self._auth, requester)
941
+
942
+ content = parse_json_object_from_request(request)
943
+
944
+ if not RoomID.is_valid(room_id):
945
+ raise SynapseError(
946
+ HTTPStatus.BAD_REQUEST, "%s is not a legal room ID" % (room_id,)
947
+ )
948
+
949
+ assert_params_in_dict(content, ["block"])
950
+ block = content.get("block")
951
+ if not isinstance(block, bool):
952
+ raise SynapseError(
953
+ HTTPStatus.BAD_REQUEST,
954
+ "Param 'block' must be a boolean.",
955
+ Codes.BAD_JSON,
956
+ )
957
+
958
+ if block:
959
+ await self._store.block_room(room_id, requester.user.to_string())
960
+ else:
961
+ await self._store.unblock_room(room_id)
962
+
963
+ return HTTPStatus.OK, {"block": block}
964
+
965
+
966
+ class RoomMessagesRestServlet(RestServlet):
967
+ """
968
+ Get messages list of a room.
969
+ """
970
+
971
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/messages$")
972
+
973
+ def __init__(self, hs: "HomeServer"):
974
+ self._hs = hs
975
+ self._clock = hs.get_clock()
976
+ self._pagination_handler = hs.get_pagination_handler()
977
+ self._auth = hs.get_auth()
978
+ self._store = hs.get_datastores().main
979
+
980
+ async def on_GET(
981
+ self, request: SynapseRequest, room_id: str
982
+ ) -> tuple[int, JsonDict]:
983
+ requester = await self._auth.get_user_by_req(request)
984
+ await assert_user_is_admin(self._auth, requester)
985
+
986
+ pagination_config = await PaginationConfig.from_request(
987
+ self._store, request, default_limit=10
988
+ )
989
+ # Twisted will have processed the args by now.
990
+ assert request.args is not None
991
+
992
+ filter_json = parse_json(request, "filter", encoding="utf-8")
993
+ event_filter = Filter(self._hs, filter_json) if filter_json else None
994
+
995
+ as_client_event = b"raw" not in request.args
996
+ if (
997
+ event_filter
998
+ and event_filter.filter_json.get("event_format", "client") == "federation"
999
+ ):
1000
+ as_client_event = False
1001
+
1002
+ msgs = await self._pagination_handler.get_messages(
1003
+ room_id=room_id,
1004
+ requester=requester,
1005
+ pagin_config=pagination_config,
1006
+ as_client_event=as_client_event,
1007
+ event_filter=event_filter,
1008
+ use_admin_priviledge=True,
1009
+ )
1010
+
1011
+ return HTTPStatus.OK, msgs
1012
+
1013
+
1014
+ class RoomTimestampToEventRestServlet(RestServlet):
1015
+ """
1016
+ API endpoint to fetch the `event_id` of the closest event to the given
1017
+ timestamp (`ts` query parameter) in the given direction (`dir` query
1018
+ parameter).
1019
+
1020
+ Useful for cases like jump to date so you can start paginating messages from
1021
+ a given date in the archive.
1022
+
1023
+ `ts` is a timestamp in milliseconds where we will find the closest event in
1024
+ the given direction.
1025
+
1026
+ `dir` can be `f` or `b` to indicate forwards and backwards in time from the
1027
+ given timestamp.
1028
+
1029
+ GET /_synapse/admin/v1/rooms/<roomID>/timestamp_to_event?ts=<timestamp>&dir=<direction>
1030
+ {
1031
+ "event_id": ...
1032
+ }
1033
+ """
1034
+
1035
+ PATTERNS = admin_patterns("/rooms/(?P<room_id>[^/]*)/timestamp_to_event$")
1036
+
1037
+ def __init__(self, hs: "HomeServer"):
1038
+ self._auth = hs.get_auth()
1039
+ self._store = hs.get_datastores().main
1040
+ self._timestamp_lookup_handler = hs.get_timestamp_lookup_handler()
1041
+
1042
+ async def on_GET(
1043
+ self, request: SynapseRequest, room_id: str
1044
+ ) -> tuple[int, JsonDict]:
1045
+ requester = await self._auth.get_user_by_req(request)
1046
+ await assert_user_is_admin(self._auth, requester)
1047
+
1048
+ timestamp = parse_integer(request, "ts", required=True)
1049
+ direction = parse_enum(request, "dir", Direction, default=Direction.FORWARDS)
1050
+
1051
+ (
1052
+ event_id,
1053
+ origin_server_ts,
1054
+ ) = await self._timestamp_lookup_handler.get_event_for_timestamp(
1055
+ requester, room_id, timestamp, direction
1056
+ )
1057
+
1058
+ return HTTPStatus.OK, {
1059
+ "event_id": event_id,
1060
+ "origin_server_ts": origin_server_ts,
1061
+ }