matrix-synapse 1.143.0__cp310-abi3-manylinux_2_28_aarch64.whl

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

Potentially problematic release.


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

Files changed (1058) hide show
  1. matrix_synapse-1.143.0.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0.dist-info/entry_points.txt +14 -0
  8. synapse/__init__.py +97 -0
  9. synapse/_scripts/__init__.py +0 -0
  10. synapse/_scripts/export_signing_key.py +109 -0
  11. synapse/_scripts/generate_config.py +83 -0
  12. synapse/_scripts/generate_log_config.py +56 -0
  13. synapse/_scripts/generate_signing_key.py +55 -0
  14. synapse/_scripts/generate_workers_map.py +318 -0
  15. synapse/_scripts/hash_password.py +95 -0
  16. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  17. synapse/_scripts/register_new_matrix_user.py +402 -0
  18. synapse/_scripts/review_recent_signups.py +212 -0
  19. synapse/_scripts/synapse_port_db.py +1604 -0
  20. synapse/_scripts/synctl.py +365 -0
  21. synapse/_scripts/update_synapse_database.py +130 -0
  22. synapse/api/__init__.py +20 -0
  23. synapse/api/auth/__init__.py +207 -0
  24. synapse/api/auth/base.py +406 -0
  25. synapse/api/auth/internal.py +299 -0
  26. synapse/api/auth/mas.py +436 -0
  27. synapse/api/auth/msc3861_delegated.py +617 -0
  28. synapse/api/auth_blocking.py +144 -0
  29. synapse/api/constants.py +362 -0
  30. synapse/api/errors.py +907 -0
  31. synapse/api/filtering.py +537 -0
  32. synapse/api/presence.py +102 -0
  33. synapse/api/ratelimiting.py +480 -0
  34. synapse/api/room_versions.py +535 -0
  35. synapse/api/urls.py +118 -0
  36. synapse/app/__init__.py +60 -0
  37. synapse/app/_base.py +862 -0
  38. synapse/app/admin_cmd.py +388 -0
  39. synapse/app/appservice.py +30 -0
  40. synapse/app/client_reader.py +30 -0
  41. synapse/app/complement_fork_starter.py +206 -0
  42. synapse/app/event_creator.py +29 -0
  43. synapse/app/federation_reader.py +30 -0
  44. synapse/app/federation_sender.py +30 -0
  45. synapse/app/frontend_proxy.py +30 -0
  46. synapse/app/generic_worker.py +474 -0
  47. synapse/app/homeserver.py +505 -0
  48. synapse/app/media_repository.py +30 -0
  49. synapse/app/phone_stats_home.py +296 -0
  50. synapse/app/pusher.py +30 -0
  51. synapse/app/synchrotron.py +30 -0
  52. synapse/app/user_dir.py +31 -0
  53. synapse/appservice/__init__.py +458 -0
  54. synapse/appservice/api.py +567 -0
  55. synapse/appservice/scheduler.py +564 -0
  56. synapse/config/__init__.py +27 -0
  57. synapse/config/__main__.py +62 -0
  58. synapse/config/_base.py +1106 -0
  59. synapse/config/_base.pyi +215 -0
  60. synapse/config/_util.py +99 -0
  61. synapse/config/account_validity.py +116 -0
  62. synapse/config/api.py +141 -0
  63. synapse/config/appservice.py +210 -0
  64. synapse/config/auth.py +80 -0
  65. synapse/config/auto_accept_invites.py +43 -0
  66. synapse/config/background_updates.py +44 -0
  67. synapse/config/cache.py +231 -0
  68. synapse/config/captcha.py +90 -0
  69. synapse/config/cas.py +116 -0
  70. synapse/config/consent.py +73 -0
  71. synapse/config/database.py +184 -0
  72. synapse/config/emailconfig.py +367 -0
  73. synapse/config/experimental.py +595 -0
  74. synapse/config/federation.py +114 -0
  75. synapse/config/homeserver.py +141 -0
  76. synapse/config/jwt.py +55 -0
  77. synapse/config/key.py +447 -0
  78. synapse/config/logger.py +390 -0
  79. synapse/config/mas.py +192 -0
  80. synapse/config/matrixrtc.py +66 -0
  81. synapse/config/metrics.py +84 -0
  82. synapse/config/modules.py +40 -0
  83. synapse/config/oembed.py +185 -0
  84. synapse/config/oidc.py +509 -0
  85. synapse/config/password_auth_providers.py +82 -0
  86. synapse/config/push.py +64 -0
  87. synapse/config/ratelimiting.py +254 -0
  88. synapse/config/redis.py +74 -0
  89. synapse/config/registration.py +296 -0
  90. synapse/config/repository.py +311 -0
  91. synapse/config/retention.py +162 -0
  92. synapse/config/room.py +88 -0
  93. synapse/config/room_directory.py +165 -0
  94. synapse/config/saml2.py +251 -0
  95. synapse/config/server.py +1170 -0
  96. synapse/config/server_notices.py +84 -0
  97. synapse/config/spam_checker.py +66 -0
  98. synapse/config/sso.py +121 -0
  99. synapse/config/stats.py +54 -0
  100. synapse/config/third_party_event_rules.py +40 -0
  101. synapse/config/tls.py +192 -0
  102. synapse/config/tracer.py +71 -0
  103. synapse/config/user_directory.py +47 -0
  104. synapse/config/user_types.py +42 -0
  105. synapse/config/voip.py +59 -0
  106. synapse/config/workers.py +642 -0
  107. synapse/crypto/__init__.py +20 -0
  108. synapse/crypto/context_factory.py +278 -0
  109. synapse/crypto/event_signing.py +194 -0
  110. synapse/crypto/keyring.py +931 -0
  111. synapse/event_auth.py +1266 -0
  112. synapse/events/__init__.py +667 -0
  113. synapse/events/auto_accept_invites.py +216 -0
  114. synapse/events/builder.py +387 -0
  115. synapse/events/presence_router.py +243 -0
  116. synapse/events/snapshot.py +559 -0
  117. synapse/events/utils.py +924 -0
  118. synapse/events/validator.py +305 -0
  119. synapse/federation/__init__.py +22 -0
  120. synapse/federation/federation_base.py +382 -0
  121. synapse/federation/federation_client.py +2132 -0
  122. synapse/federation/federation_server.py +1540 -0
  123. synapse/federation/persistence.py +70 -0
  124. synapse/federation/send_queue.py +531 -0
  125. synapse/federation/sender/__init__.py +1164 -0
  126. synapse/federation/sender/per_destination_queue.py +886 -0
  127. synapse/federation/sender/transaction_manager.py +210 -0
  128. synapse/federation/transport/__init__.py +28 -0
  129. synapse/federation/transport/client.py +1199 -0
  130. synapse/federation/transport/server/__init__.py +334 -0
  131. synapse/federation/transport/server/_base.py +429 -0
  132. synapse/federation/transport/server/federation.py +910 -0
  133. synapse/federation/units.py +133 -0
  134. synapse/handlers/__init__.py +20 -0
  135. synapse/handlers/account.py +162 -0
  136. synapse/handlers/account_data.py +360 -0
  137. synapse/handlers/account_validity.py +361 -0
  138. synapse/handlers/admin.py +615 -0
  139. synapse/handlers/appservice.py +989 -0
  140. synapse/handlers/auth.py +2481 -0
  141. synapse/handlers/cas.py +413 -0
  142. synapse/handlers/deactivate_account.py +363 -0
  143. synapse/handlers/delayed_events.py +599 -0
  144. synapse/handlers/device.py +1870 -0
  145. synapse/handlers/devicemessage.py +399 -0
  146. synapse/handlers/directory.py +545 -0
  147. synapse/handlers/e2e_keys.py +1834 -0
  148. synapse/handlers/e2e_room_keys.py +455 -0
  149. synapse/handlers/event_auth.py +390 -0
  150. synapse/handlers/events.py +201 -0
  151. synapse/handlers/federation.py +2039 -0
  152. synapse/handlers/federation_event.py +2419 -0
  153. synapse/handlers/identity.py +812 -0
  154. synapse/handlers/initial_sync.py +528 -0
  155. synapse/handlers/jwt.py +120 -0
  156. synapse/handlers/message.py +2347 -0
  157. synapse/handlers/oidc.py +1801 -0
  158. synapse/handlers/pagination.py +768 -0
  159. synapse/handlers/password_policy.py +102 -0
  160. synapse/handlers/presence.py +2633 -0
  161. synapse/handlers/profile.py +655 -0
  162. synapse/handlers/push_rules.py +164 -0
  163. synapse/handlers/read_marker.py +79 -0
  164. synapse/handlers/receipts.py +351 -0
  165. synapse/handlers/register.py +1059 -0
  166. synapse/handlers/relations.py +623 -0
  167. synapse/handlers/reports.py +98 -0
  168. synapse/handlers/room.py +2448 -0
  169. synapse/handlers/room_list.py +632 -0
  170. synapse/handlers/room_member.py +2365 -0
  171. synapse/handlers/room_member_worker.py +146 -0
  172. synapse/handlers/room_policy.py +186 -0
  173. synapse/handlers/room_summary.py +1057 -0
  174. synapse/handlers/saml.py +524 -0
  175. synapse/handlers/search.py +723 -0
  176. synapse/handlers/send_email.py +209 -0
  177. synapse/handlers/set_password.py +71 -0
  178. synapse/handlers/sliding_sync/__init__.py +1701 -0
  179. synapse/handlers/sliding_sync/extensions.py +969 -0
  180. synapse/handlers/sliding_sync/room_lists.py +2262 -0
  181. synapse/handlers/sliding_sync/store.py +128 -0
  182. synapse/handlers/sso.py +1291 -0
  183. synapse/handlers/state_deltas.py +82 -0
  184. synapse/handlers/stats.py +321 -0
  185. synapse/handlers/sync.py +3106 -0
  186. synapse/handlers/thread_subscriptions.py +190 -0
  187. synapse/handlers/typing.py +606 -0
  188. synapse/handlers/ui_auth/__init__.py +48 -0
  189. synapse/handlers/ui_auth/checkers.py +332 -0
  190. synapse/handlers/user_directory.py +783 -0
  191. synapse/handlers/worker_lock.py +371 -0
  192. synapse/http/__init__.py +105 -0
  193. synapse/http/additional_resource.py +62 -0
  194. synapse/http/client.py +1373 -0
  195. synapse/http/connectproxyclient.py +316 -0
  196. synapse/http/federation/__init__.py +19 -0
  197. synapse/http/federation/matrix_federation_agent.py +490 -0
  198. synapse/http/federation/srv_resolver.py +196 -0
  199. synapse/http/federation/well_known_resolver.py +367 -0
  200. synapse/http/matrixfederationclient.py +1873 -0
  201. synapse/http/proxy.py +290 -0
  202. synapse/http/proxyagent.py +497 -0
  203. synapse/http/replicationagent.py +202 -0
  204. synapse/http/request_metrics.py +309 -0
  205. synapse/http/server.py +1110 -0
  206. synapse/http/servlet.py +1018 -0
  207. synapse/http/site.py +825 -0
  208. synapse/http/types.py +27 -0
  209. synapse/logging/__init__.py +31 -0
  210. synapse/logging/_remote.py +261 -0
  211. synapse/logging/_terse_json.py +95 -0
  212. synapse/logging/context.py +1209 -0
  213. synapse/logging/formatter.py +62 -0
  214. synapse/logging/handlers.py +99 -0
  215. synapse/logging/loggers.py +25 -0
  216. synapse/logging/opentracing.py +1132 -0
  217. synapse/logging/scopecontextmanager.py +160 -0
  218. synapse/media/_base.py +830 -0
  219. synapse/media/filepath.py +417 -0
  220. synapse/media/media_repository.py +1580 -0
  221. synapse/media/media_storage.py +702 -0
  222. synapse/media/oembed.py +277 -0
  223. synapse/media/preview_html.py +556 -0
  224. synapse/media/storage_provider.py +195 -0
  225. synapse/media/thumbnailer.py +833 -0
  226. synapse/media/url_previewer.py +875 -0
  227. synapse/metrics/__init__.py +748 -0
  228. synapse/metrics/_gc.py +219 -0
  229. synapse/metrics/_reactor_metrics.py +171 -0
  230. synapse/metrics/_types.py +38 -0
  231. synapse/metrics/background_process_metrics.py +555 -0
  232. synapse/metrics/common_usage_metrics.py +94 -0
  233. synapse/metrics/jemalloc.py +248 -0
  234. synapse/module_api/__init__.py +2131 -0
  235. synapse/module_api/callbacks/__init__.py +50 -0
  236. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  237. synapse/module_api/callbacks/media_repository_callbacks.py +157 -0
  238. synapse/module_api/callbacks/ratelimit_callbacks.py +78 -0
  239. synapse/module_api/callbacks/spamchecker_callbacks.py +991 -0
  240. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +592 -0
  241. synapse/module_api/errors.py +42 -0
  242. synapse/notifier.py +970 -0
  243. synapse/push/__init__.py +212 -0
  244. synapse/push/bulk_push_rule_evaluator.py +635 -0
  245. synapse/push/clientformat.py +126 -0
  246. synapse/push/emailpusher.py +333 -0
  247. synapse/push/httppusher.py +564 -0
  248. synapse/push/mailer.py +1010 -0
  249. synapse/push/presentable_names.py +216 -0
  250. synapse/push/push_tools.py +114 -0
  251. synapse/push/push_types.py +141 -0
  252. synapse/push/pusher.py +87 -0
  253. synapse/push/pusherpool.py +501 -0
  254. synapse/push/rulekinds.py +33 -0
  255. synapse/py.typed +0 -0
  256. synapse/replication/__init__.py +20 -0
  257. synapse/replication/http/__init__.py +68 -0
  258. synapse/replication/http/_base.py +468 -0
  259. synapse/replication/http/account_data.py +297 -0
  260. synapse/replication/http/deactivate_account.py +81 -0
  261. synapse/replication/http/delayed_events.py +62 -0
  262. synapse/replication/http/devices.py +254 -0
  263. synapse/replication/http/federation.py +334 -0
  264. synapse/replication/http/login.py +106 -0
  265. synapse/replication/http/membership.py +364 -0
  266. synapse/replication/http/presence.py +133 -0
  267. synapse/replication/http/push.py +156 -0
  268. synapse/replication/http/register.py +172 -0
  269. synapse/replication/http/send_events.py +182 -0
  270. synapse/replication/http/state.py +82 -0
  271. synapse/replication/http/streams.py +101 -0
  272. synapse/replication/tcp/__init__.py +56 -0
  273. synapse/replication/tcp/client.py +552 -0
  274. synapse/replication/tcp/commands.py +569 -0
  275. synapse/replication/tcp/context.py +41 -0
  276. synapse/replication/tcp/external_cache.py +156 -0
  277. synapse/replication/tcp/handler.py +922 -0
  278. synapse/replication/tcp/protocol.py +608 -0
  279. synapse/replication/tcp/redis.py +509 -0
  280. synapse/replication/tcp/resource.py +348 -0
  281. synapse/replication/tcp/streams/__init__.py +96 -0
  282. synapse/replication/tcp/streams/_base.py +765 -0
  283. synapse/replication/tcp/streams/events.py +287 -0
  284. synapse/replication/tcp/streams/federation.py +92 -0
  285. synapse/replication/tcp/streams/partial_state.py +80 -0
  286. synapse/res/providers.json +29 -0
  287. synapse/res/templates/_base.html +29 -0
  288. synapse/res/templates/account_previously_renewed.html +6 -0
  289. synapse/res/templates/account_renewed.html +6 -0
  290. synapse/res/templates/add_threepid.html +8 -0
  291. synapse/res/templates/add_threepid.txt +6 -0
  292. synapse/res/templates/add_threepid_failure.html +7 -0
  293. synapse/res/templates/add_threepid_success.html +6 -0
  294. synapse/res/templates/already_in_use.html +12 -0
  295. synapse/res/templates/already_in_use.txt +10 -0
  296. synapse/res/templates/auth_success.html +21 -0
  297. synapse/res/templates/invalid_token.html +6 -0
  298. synapse/res/templates/mail-Element.css +7 -0
  299. synapse/res/templates/mail-Vector.css +7 -0
  300. synapse/res/templates/mail-expiry.css +4 -0
  301. synapse/res/templates/mail.css +156 -0
  302. synapse/res/templates/notice_expiry.html +46 -0
  303. synapse/res/templates/notice_expiry.txt +7 -0
  304. synapse/res/templates/notif.html +51 -0
  305. synapse/res/templates/notif.txt +22 -0
  306. synapse/res/templates/notif_mail.html +59 -0
  307. synapse/res/templates/notif_mail.txt +10 -0
  308. synapse/res/templates/password_reset.html +10 -0
  309. synapse/res/templates/password_reset.txt +7 -0
  310. synapse/res/templates/password_reset_confirmation.html +15 -0
  311. synapse/res/templates/password_reset_failure.html +7 -0
  312. synapse/res/templates/password_reset_success.html +6 -0
  313. synapse/res/templates/recaptcha.html +42 -0
  314. synapse/res/templates/registration.html +12 -0
  315. synapse/res/templates/registration.txt +10 -0
  316. synapse/res/templates/registration_failure.html +6 -0
  317. synapse/res/templates/registration_success.html +6 -0
  318. synapse/res/templates/registration_token.html +18 -0
  319. synapse/res/templates/room.html +33 -0
  320. synapse/res/templates/room.txt +9 -0
  321. synapse/res/templates/sso.css +129 -0
  322. synapse/res/templates/sso_account_deactivated.html +25 -0
  323. synapse/res/templates/sso_auth_account_details.html +186 -0
  324. synapse/res/templates/sso_auth_account_details.js +116 -0
  325. synapse/res/templates/sso_auth_bad_user.html +26 -0
  326. synapse/res/templates/sso_auth_confirm.html +27 -0
  327. synapse/res/templates/sso_auth_success.html +26 -0
  328. synapse/res/templates/sso_error.html +71 -0
  329. synapse/res/templates/sso_footer.html +19 -0
  330. synapse/res/templates/sso_login_idp_picker.html +60 -0
  331. synapse/res/templates/sso_new_user_consent.html +30 -0
  332. synapse/res/templates/sso_partial_profile.html +19 -0
  333. synapse/res/templates/sso_redirect_confirm.html +39 -0
  334. synapse/res/templates/style.css +33 -0
  335. synapse/res/templates/terms.html +27 -0
  336. synapse/rest/__init__.py +197 -0
  337. synapse/rest/admin/__init__.py +390 -0
  338. synapse/rest/admin/_base.py +72 -0
  339. synapse/rest/admin/background_updates.py +171 -0
  340. synapse/rest/admin/devices.py +221 -0
  341. synapse/rest/admin/event_reports.py +173 -0
  342. synapse/rest/admin/events.py +69 -0
  343. synapse/rest/admin/experimental_features.py +137 -0
  344. synapse/rest/admin/federation.py +243 -0
  345. synapse/rest/admin/media.py +540 -0
  346. synapse/rest/admin/registration_tokens.py +358 -0
  347. synapse/rest/admin/rooms.py +1061 -0
  348. synapse/rest/admin/scheduled_tasks.py +70 -0
  349. synapse/rest/admin/server_notice_servlet.py +132 -0
  350. synapse/rest/admin/statistics.py +132 -0
  351. synapse/rest/admin/username_available.py +58 -0
  352. synapse/rest/admin/users.py +1606 -0
  353. synapse/rest/client/__init__.py +20 -0
  354. synapse/rest/client/_base.py +113 -0
  355. synapse/rest/client/account.py +930 -0
  356. synapse/rest/client/account_data.py +319 -0
  357. synapse/rest/client/account_validity.py +103 -0
  358. synapse/rest/client/appservice_ping.py +125 -0
  359. synapse/rest/client/auth.py +218 -0
  360. synapse/rest/client/auth_metadata.py +122 -0
  361. synapse/rest/client/capabilities.py +121 -0
  362. synapse/rest/client/delayed_events.py +165 -0
  363. synapse/rest/client/devices.py +587 -0
  364. synapse/rest/client/directory.py +211 -0
  365. synapse/rest/client/events.py +116 -0
  366. synapse/rest/client/filter.py +112 -0
  367. synapse/rest/client/initial_sync.py +65 -0
  368. synapse/rest/client/keys.py +678 -0
  369. synapse/rest/client/knock.py +104 -0
  370. synapse/rest/client/login.py +750 -0
  371. synapse/rest/client/login_token_request.py +127 -0
  372. synapse/rest/client/logout.py +93 -0
  373. synapse/rest/client/matrixrtc.py +52 -0
  374. synapse/rest/client/media.py +285 -0
  375. synapse/rest/client/mutual_rooms.py +93 -0
  376. synapse/rest/client/notifications.py +137 -0
  377. synapse/rest/client/openid.py +109 -0
  378. synapse/rest/client/password_policy.py +69 -0
  379. synapse/rest/client/presence.py +131 -0
  380. synapse/rest/client/profile.py +291 -0
  381. synapse/rest/client/push_rule.py +331 -0
  382. synapse/rest/client/pusher.py +181 -0
  383. synapse/rest/client/read_marker.py +104 -0
  384. synapse/rest/client/receipts.py +165 -0
  385. synapse/rest/client/register.py +1067 -0
  386. synapse/rest/client/relations.py +138 -0
  387. synapse/rest/client/rendezvous.py +76 -0
  388. synapse/rest/client/reporting.py +207 -0
  389. synapse/rest/client/room.py +1669 -0
  390. synapse/rest/client/room_keys.py +426 -0
  391. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  392. synapse/rest/client/sendtodevice.py +85 -0
  393. synapse/rest/client/sync.py +1131 -0
  394. synapse/rest/client/tags.py +129 -0
  395. synapse/rest/client/thirdparty.py +130 -0
  396. synapse/rest/client/thread_subscriptions.py +247 -0
  397. synapse/rest/client/tokenrefresh.py +52 -0
  398. synapse/rest/client/transactions.py +149 -0
  399. synapse/rest/client/user_directory.py +90 -0
  400. synapse/rest/client/versions.py +191 -0
  401. synapse/rest/client/voip.py +88 -0
  402. synapse/rest/consent/__init__.py +0 -0
  403. synapse/rest/consent/consent_resource.py +210 -0
  404. synapse/rest/health.py +38 -0
  405. synapse/rest/key/__init__.py +20 -0
  406. synapse/rest/key/v2/__init__.py +40 -0
  407. synapse/rest/key/v2/local_key_resource.py +125 -0
  408. synapse/rest/key/v2/remote_key_resource.py +302 -0
  409. synapse/rest/media/__init__.py +0 -0
  410. synapse/rest/media/config_resource.py +53 -0
  411. synapse/rest/media/create_resource.py +90 -0
  412. synapse/rest/media/download_resource.py +110 -0
  413. synapse/rest/media/media_repository_resource.py +113 -0
  414. synapse/rest/media/preview_url_resource.py +77 -0
  415. synapse/rest/media/thumbnail_resource.py +142 -0
  416. synapse/rest/media/upload_resource.py +187 -0
  417. synapse/rest/media/v1/__init__.py +39 -0
  418. synapse/rest/media/v1/_base.py +23 -0
  419. synapse/rest/media/v1/media_storage.py +23 -0
  420. synapse/rest/media/v1/storage_provider.py +23 -0
  421. synapse/rest/synapse/__init__.py +20 -0
  422. synapse/rest/synapse/client/__init__.py +93 -0
  423. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  424. synapse/rest/synapse/client/jwks.py +77 -0
  425. synapse/rest/synapse/client/new_user_consent.py +115 -0
  426. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  427. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  428. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  429. synapse/rest/synapse/client/password_reset.py +129 -0
  430. synapse/rest/synapse/client/pick_idp.py +107 -0
  431. synapse/rest/synapse/client/pick_username.py +153 -0
  432. synapse/rest/synapse/client/rendezvous.py +58 -0
  433. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  434. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  435. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  436. synapse/rest/synapse/client/sso_register.py +56 -0
  437. synapse/rest/synapse/client/unsubscribe.py +88 -0
  438. synapse/rest/synapse/mas/__init__.py +71 -0
  439. synapse/rest/synapse/mas/_base.py +55 -0
  440. synapse/rest/synapse/mas/devices.py +239 -0
  441. synapse/rest/synapse/mas/users.py +469 -0
  442. synapse/rest/well_known.py +148 -0
  443. synapse/server.py +1257 -0
  444. synapse/server_notices/__init__.py +0 -0
  445. synapse/server_notices/consent_server_notices.py +136 -0
  446. synapse/server_notices/resource_limits_server_notices.py +215 -0
  447. synapse/server_notices/server_notices_manager.py +388 -0
  448. synapse/server_notices/server_notices_sender.py +67 -0
  449. synapse/server_notices/worker_server_notices_sender.py +46 -0
  450. synapse/spam_checker_api/__init__.py +31 -0
  451. synapse/state/__init__.py +1022 -0
  452. synapse/state/v1.py +369 -0
  453. synapse/state/v2.py +984 -0
  454. synapse/static/client/login/index.html +47 -0
  455. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  456. synapse/static/client/login/js/login.js +291 -0
  457. synapse/static/client/login/spinner.gif +0 -0
  458. synapse/static/client/login/style.css +79 -0
  459. synapse/static/index.html +63 -0
  460. synapse/storage/__init__.py +43 -0
  461. synapse/storage/_base.py +245 -0
  462. synapse/storage/admin_client_config.py +25 -0
  463. synapse/storage/background_updates.py +1188 -0
  464. synapse/storage/controllers/__init__.py +57 -0
  465. synapse/storage/controllers/persist_events.py +1237 -0
  466. synapse/storage/controllers/purge_events.py +455 -0
  467. synapse/storage/controllers/state.py +950 -0
  468. synapse/storage/controllers/stats.py +119 -0
  469. synapse/storage/database.py +2719 -0
  470. synapse/storage/databases/__init__.py +175 -0
  471. synapse/storage/databases/main/__init__.py +420 -0
  472. synapse/storage/databases/main/account_data.py +1059 -0
  473. synapse/storage/databases/main/appservice.py +473 -0
  474. synapse/storage/databases/main/cache.py +911 -0
  475. synapse/storage/databases/main/censor_events.py +225 -0
  476. synapse/storage/databases/main/client_ips.py +815 -0
  477. synapse/storage/databases/main/delayed_events.py +562 -0
  478. synapse/storage/databases/main/deviceinbox.py +1271 -0
  479. synapse/storage/databases/main/devices.py +2578 -0
  480. synapse/storage/databases/main/directory.py +212 -0
  481. synapse/storage/databases/main/e2e_room_keys.py +689 -0
  482. synapse/storage/databases/main/end_to_end_keys.py +1894 -0
  483. synapse/storage/databases/main/event_federation.py +2508 -0
  484. synapse/storage/databases/main/event_push_actions.py +1933 -0
  485. synapse/storage/databases/main/events.py +3765 -0
  486. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  487. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  488. synapse/storage/databases/main/events_worker.py +2786 -0
  489. synapse/storage/databases/main/experimental_features.py +130 -0
  490. synapse/storage/databases/main/filtering.py +231 -0
  491. synapse/storage/databases/main/keys.py +291 -0
  492. synapse/storage/databases/main/lock.py +553 -0
  493. synapse/storage/databases/main/media_repository.py +1068 -0
  494. synapse/storage/databases/main/metrics.py +460 -0
  495. synapse/storage/databases/main/monthly_active_users.py +443 -0
  496. synapse/storage/databases/main/openid.py +60 -0
  497. synapse/storage/databases/main/presence.py +509 -0
  498. synapse/storage/databases/main/profile.py +539 -0
  499. synapse/storage/databases/main/purge_events.py +521 -0
  500. synapse/storage/databases/main/push_rule.py +970 -0
  501. synapse/storage/databases/main/pusher.py +793 -0
  502. synapse/storage/databases/main/receipts.py +1341 -0
  503. synapse/storage/databases/main/registration.py +3072 -0
  504. synapse/storage/databases/main/rejections.py +37 -0
  505. synapse/storage/databases/main/relations.py +1116 -0
  506. synapse/storage/databases/main/room.py +2779 -0
  507. synapse/storage/databases/main/roommember.py +2110 -0
  508. synapse/storage/databases/main/search.py +939 -0
  509. synapse/storage/databases/main/session.py +151 -0
  510. synapse/storage/databases/main/signatures.py +94 -0
  511. synapse/storage/databases/main/sliding_sync.py +603 -0
  512. synapse/storage/databases/main/state.py +1002 -0
  513. synapse/storage/databases/main/state_deltas.py +329 -0
  514. synapse/storage/databases/main/stats.py +789 -0
  515. synapse/storage/databases/main/stream.py +2577 -0
  516. synapse/storage/databases/main/tags.py +360 -0
  517. synapse/storage/databases/main/task_scheduler.py +225 -0
  518. synapse/storage/databases/main/thread_subscriptions.py +589 -0
  519. synapse/storage/databases/main/transactions.py +675 -0
  520. synapse/storage/databases/main/ui_auth.py +420 -0
  521. synapse/storage/databases/main/user_directory.py +1330 -0
  522. synapse/storage/databases/main/user_erasure_store.py +117 -0
  523. synapse/storage/databases/state/__init__.py +22 -0
  524. synapse/storage/databases/state/bg_updates.py +497 -0
  525. synapse/storage/databases/state/deletion.py +557 -0
  526. synapse/storage/databases/state/store.py +948 -0
  527. synapse/storage/engines/__init__.py +70 -0
  528. synapse/storage/engines/_base.py +154 -0
  529. synapse/storage/engines/postgres.py +261 -0
  530. synapse/storage/engines/sqlite.py +199 -0
  531. synapse/storage/invite_rule.py +112 -0
  532. synapse/storage/keys.py +40 -0
  533. synapse/storage/prepare_database.py +730 -0
  534. synapse/storage/push_rule.py +28 -0
  535. synapse/storage/roommember.py +88 -0
  536. synapse/storage/schema/README.md +4 -0
  537. synapse/storage/schema/__init__.py +186 -0
  538. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  539. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  540. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  541. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  543. synapse/storage/schema/common/schema_version.sql +60 -0
  544. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  545. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  546. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  547. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  548. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  549. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  550. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  551. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  552. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  553. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  554. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  555. synapse/storage/schema/main/delta/16/users.sql +56 -0
  556. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  557. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  558. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  559. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  560. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  561. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  562. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  563. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  564. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  565. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  566. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  567. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  568. synapse/storage/schema/main/delta/25/fts.py +81 -0
  569. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  570. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  571. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  572. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  573. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  574. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  575. synapse/storage/schema/main/delta/27/ts.py +61 -0
  576. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  577. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  578. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  579. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  580. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  581. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  582. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  583. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  584. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  585. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  586. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  587. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  588. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  589. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  590. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  591. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  592. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  593. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  594. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  595. synapse/storage/schema/main/delta/32/events.sql +35 -0
  596. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  597. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  598. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  599. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  600. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  601. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  602. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  604. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  605. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  606. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  607. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  608. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  609. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  610. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  611. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  612. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  613. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  614. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  615. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  616. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  617. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  618. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  619. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  620. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  621. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  622. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  623. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  624. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  625. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  626. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  627. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  628. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  629. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  630. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  631. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  632. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  633. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  634. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  635. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  636. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  637. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  638. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  639. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  640. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  641. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  642. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  643. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  644. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  645. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  646. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  647. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  648. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  649. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  650. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  651. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  652. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  653. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  654. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  655. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  656. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  657. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  658. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  659. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  660. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  661. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  662. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  663. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  664. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  665. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  666. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  667. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  668. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  669. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  670. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  671. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  672. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  673. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  674. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  675. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  676. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  678. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  679. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  680. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  681. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  682. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  683. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  684. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  685. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  686. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  687. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  688. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  689. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  690. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  691. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  692. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  694. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  695. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  697. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  698. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  699. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  700. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  701. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  702. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  703. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  704. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  706. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  707. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  708. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  712. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  713. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  714. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  715. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  716. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  717. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  718. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  719. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  720. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  721. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  722. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  723. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  724. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  725. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  726. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  731. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  732. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  733. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  734. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  735. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  737. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  738. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  740. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  741. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  742. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  743. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  744. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  745. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  746. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  747. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  748. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  749. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  751. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  752. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  753. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  754. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  755. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  756. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  757. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  758. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  759. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  760. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  761. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  762. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  763. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  764. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  765. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  766. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  767. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  768. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  769. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  771. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  772. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  773. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  774. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  776. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  777. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  778. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  781. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  782. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  783. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  784. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  785. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  786. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  787. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  788. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  789. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  791. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  792. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  793. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  794. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  795. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  796. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  797. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  798. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  799. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  800. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  801. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  802. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  803. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  804. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  805. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  806. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  807. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  809. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  810. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  811. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  812. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  813. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  814. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  815. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  816. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  817. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  818. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  819. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  820. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  821. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  822. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  823. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  824. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  825. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  826. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  827. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  828. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  829. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  830. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  831. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  833. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  834. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  835. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  836. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  837. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  838. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  839. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  840. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  841. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  843. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  844. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  845. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  846. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  847. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  848. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  850. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  851. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  852. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  853. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  854. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  855. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  856. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  857. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  858. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  859. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  860. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  862. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  863. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  865. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  866. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  867. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  868. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  869. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  870. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  871. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  872. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  873. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  874. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  875. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  876. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  877. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  878. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  879. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  880. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  881. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  882. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  884. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  885. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  886. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  887. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  888. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  889. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  890. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  892. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  893. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  894. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  896. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  897. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  898. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  902. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  903. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  904. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  905. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  906. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  907. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  908. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  910. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  911. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  913. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  914. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  915. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  916. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  917. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  918. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  919. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  920. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  921. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  922. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  923. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  924. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  925. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  926. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  927. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  928. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  929. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  930. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  931. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  932. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  933. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  934. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  935. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  936. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  937. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  938. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  939. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  940. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  941. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  942. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  943. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  944. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  947. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  948. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  949. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  950. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  951. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  952. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  954. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  955. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  956. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  958. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  959. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  960. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  961. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  962. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  963. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  964. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  965. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  966. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  968. synapse/storage/schema/main/delta/93/01_add_delayed_events.sql +15 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +183 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +928 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +91 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +908 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +413 -0
  1007. synapse/types/state.py +634 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +169 -0
  1010. synapse/util/async_helpers.py +1045 -0
  1011. synapse/util/background_queue.py +142 -0
  1012. synapse/util/batching_queue.py +202 -0
  1013. synapse/util/caches/__init__.py +300 -0
  1014. synapse/util/caches/cached_call.py +143 -0
  1015. synapse/util/caches/deferred_cache.py +530 -0
  1016. synapse/util/caches/descriptors.py +692 -0
  1017. synapse/util/caches/dictionary_cache.py +346 -0
  1018. synapse/util/caches/expiringcache.py +249 -0
  1019. synapse/util/caches/lrucache.py +975 -0
  1020. synapse/util/caches/response_cache.py +322 -0
  1021. synapse/util/caches/stream_change_cache.py +370 -0
  1022. synapse/util/caches/treecache.py +189 -0
  1023. synapse/util/caches/ttlcache.py +197 -0
  1024. synapse/util/cancellation.py +63 -0
  1025. synapse/util/check_dependencies.py +335 -0
  1026. synapse/util/clock.py +567 -0
  1027. synapse/util/constants.py +22 -0
  1028. synapse/util/daemonize.py +165 -0
  1029. synapse/util/distributor.py +157 -0
  1030. synapse/util/events.py +134 -0
  1031. synapse/util/file_consumer.py +164 -0
  1032. synapse/util/frozenutils.py +57 -0
  1033. synapse/util/gai_resolver.py +178 -0
  1034. synapse/util/hash.py +38 -0
  1035. synapse/util/httpresourcetree.py +108 -0
  1036. synapse/util/iterutils.py +189 -0
  1037. synapse/util/json.py +56 -0
  1038. synapse/util/linked_list.py +156 -0
  1039. synapse/util/logcontext.py +46 -0
  1040. synapse/util/logformatter.py +28 -0
  1041. synapse/util/macaroons.py +325 -0
  1042. synapse/util/manhole.py +191 -0
  1043. synapse/util/metrics.py +339 -0
  1044. synapse/util/module_loader.py +116 -0
  1045. synapse/util/msisdn.py +51 -0
  1046. synapse/util/patch_inline_callbacks.py +250 -0
  1047. synapse/util/pydantic_models.py +63 -0
  1048. synapse/util/ratelimitutils.py +419 -0
  1049. synapse/util/retryutils.py +339 -0
  1050. synapse/util/rlimit.py +42 -0
  1051. synapse/util/rust.py +133 -0
  1052. synapse/util/sentinel.py +21 -0
  1053. synapse/util/stringutils.py +293 -0
  1054. synapse/util/task_scheduler.py +493 -0
  1055. synapse/util/templates.py +126 -0
  1056. synapse/util/threepids.py +123 -0
  1057. synapse/util/wheel_timer.py +112 -0
  1058. synapse/visibility.py +835 -0
@@ -0,0 +1,930 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2017 Vector Creations Ltd
5
+ # Copyright 2015, 2016 OpenMarket Ltd
6
+ # Copyright (C) 2023 New Vector, Ltd
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Affero General Public License as
10
+ # published by the Free Software Foundation, either version 3 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # See the GNU Affero General Public License for more details:
14
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
15
+ #
16
+ # Originally licensed under the Apache License, Version 2.0:
17
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
18
+ #
19
+ # [This file includes modifications made by New Vector Limited]
20
+ #
21
+ #
22
+ import logging
23
+ import random
24
+ from typing import TYPE_CHECKING, Literal
25
+ from urllib.parse import urlparse
26
+
27
+ import attr
28
+ from pydantic import StrictBool, StrictStr, StringConstraints
29
+ from typing_extensions import Annotated
30
+
31
+ from twisted.web.server import Request
32
+
33
+ from synapse.api.constants import LoginType
34
+ from synapse.api.errors import (
35
+ Codes,
36
+ InteractiveAuthIncompleteError,
37
+ NotFoundError,
38
+ SynapseError,
39
+ ThreepidValidationError,
40
+ )
41
+ from synapse.handlers.ui_auth import UIAuthSessionDataConstants
42
+ from synapse.http.server import HttpServer, finish_request, respond_with_html
43
+ from synapse.http.servlet import (
44
+ RestServlet,
45
+ assert_params_in_dict,
46
+ parse_and_validate_json_object_from_request,
47
+ parse_json_object_from_request,
48
+ parse_string,
49
+ )
50
+ from synapse.http.site import SynapseRequest
51
+ from synapse.metrics import SERVER_NAME_LABEL, threepid_send_requests
52
+ from synapse.push.mailer import Mailer
53
+ from synapse.types import JsonDict
54
+ from synapse.types.rest import RequestBodyModel
55
+ from synapse.types.rest.client import (
56
+ AuthenticationData,
57
+ ClientSecretStr,
58
+ EmailRequestTokenBody,
59
+ MsisdnRequestTokenBody,
60
+ )
61
+ from synapse.util.msisdn import phone_number_to_msisdn
62
+ from synapse.util.stringutils import assert_valid_client_secret, random_string
63
+ from synapse.util.threepids import check_3pid_allowed, validate_email
64
+
65
+ from ._base import client_patterns, interactive_auth_handler
66
+
67
+ if TYPE_CHECKING:
68
+ from synapse.server import HomeServer
69
+
70
+
71
+ logger = logging.getLogger(__name__)
72
+
73
+
74
+ class EmailPasswordRequestTokenRestServlet(RestServlet):
75
+ PATTERNS = client_patterns("/account/password/email/requestToken$")
76
+
77
+ def __init__(self, hs: "HomeServer"):
78
+ super().__init__()
79
+ self.hs = hs
80
+ self.server_name = hs.hostname
81
+ self.datastore = hs.get_datastores().main
82
+ self.config = hs.config
83
+ self.identity_handler = hs.get_identity_handler()
84
+
85
+ if self.config.email.can_verify_email:
86
+ self.mailer = Mailer(
87
+ hs=self.hs,
88
+ app_name=self.config.email.email_app_name,
89
+ template_html=self.config.email.email_password_reset_template_html,
90
+ template_text=self.config.email.email_password_reset_template_text,
91
+ )
92
+
93
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
94
+ if not self.config.email.can_verify_email:
95
+ logger.warning(
96
+ "User password resets have been disabled due to lack of email config"
97
+ )
98
+ raise SynapseError(
99
+ 400, "Email-based password resets have been disabled on this server"
100
+ )
101
+
102
+ body = parse_and_validate_json_object_from_request(
103
+ request, EmailRequestTokenBody
104
+ )
105
+
106
+ if body.next_link:
107
+ # Raise if the provided next_link value isn't valid
108
+ assert_valid_next_link(self.hs, body.next_link)
109
+
110
+ await self.identity_handler.ratelimit_request_token_requests(
111
+ request, "email", body.email
112
+ )
113
+
114
+ # The email will be sent to the stored address.
115
+ # This avoids a potential account hijack by requesting a password reset to
116
+ # an email address which is controlled by the attacker but which, after
117
+ # canonicalisation, matches the one in our database.
118
+ existing_user_id = await self.hs.get_datastores().main.get_user_id_by_threepid(
119
+ "email", body.email
120
+ )
121
+
122
+ if existing_user_id is None:
123
+ if self.config.server.request_token_inhibit_3pid_errors:
124
+ # Make the client think the operation succeeded. See the rationale in the
125
+ # comments for request_token_inhibit_3pid_errors.
126
+ # Also wait for some random amount of time between 100ms and 1s to make it
127
+ # look like we did something.
128
+ await self.hs.get_clock().sleep(random.randint(1, 10) / 10)
129
+ return 200, {"sid": random_string(16)}
130
+
131
+ raise SynapseError(400, "Email not found", Codes.THREEPID_NOT_FOUND)
132
+
133
+ # Send password reset emails from Synapse
134
+ sid = await self.identity_handler.send_threepid_validation(
135
+ body.email,
136
+ body.client_secret,
137
+ body.send_attempt,
138
+ self.mailer.send_password_reset_mail,
139
+ body.next_link,
140
+ )
141
+ threepid_send_requests.labels(
142
+ type="email",
143
+ reason="password_reset",
144
+ **{SERVER_NAME_LABEL: self.server_name},
145
+ ).observe(body.send_attempt)
146
+
147
+ # Wrap the session id in a JSON object
148
+ return 200, {"sid": sid}
149
+
150
+
151
+ class PasswordRestServlet(RestServlet):
152
+ PATTERNS = client_patterns("/account/password$")
153
+
154
+ def __init__(self, hs: "HomeServer"):
155
+ super().__init__()
156
+ self.hs = hs
157
+ self.auth = hs.get_auth()
158
+ self.auth_handler = hs.get_auth_handler()
159
+ self.datastore = self.hs.get_datastores().main
160
+ self.password_policy_handler = hs.get_password_policy_handler()
161
+ self._set_password_handler = hs.get_set_password_handler()
162
+
163
+ class PostBody(RequestBodyModel):
164
+ auth: AuthenticationData | None = None
165
+ logout_devices: StrictBool = True
166
+ new_password: (
167
+ Annotated[str, StringConstraints(max_length=512, strict=True)] | None
168
+ ) = None
169
+
170
+ @interactive_auth_handler
171
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
172
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
173
+
174
+ # we do basic sanity checks here because the auth layer will store these
175
+ # in sessions. Pull out the new password provided to us.
176
+ new_password = body.new_password
177
+ if new_password is not None:
178
+ self.password_policy_handler.validate_password(new_password)
179
+
180
+ # there are two possibilities here. Either the user does not have an
181
+ # access token, and needs to do a password reset; or they have one and
182
+ # need to validate their identity.
183
+ #
184
+ # In the first case, we offer a couple of means of identifying
185
+ # themselves (email and msisdn, though it's unclear if msisdn actually
186
+ # works).
187
+ #
188
+ # In the second case, we require a password to confirm their identity.
189
+
190
+ try:
191
+ requester = None
192
+ if self.auth.has_access_token(request):
193
+ requester = await self.auth.get_user_by_req(request)
194
+ params, session_id = await self.auth_handler.validate_user_via_ui_auth(
195
+ requester,
196
+ request,
197
+ body.dict(exclude_unset=True, exclude={"new_password"}),
198
+ "modify your account password",
199
+ )
200
+ user_id = requester.user.to_string()
201
+ else:
202
+ result, params, session_id = await self.auth_handler.check_ui_auth(
203
+ [[LoginType.EMAIL_IDENTITY]],
204
+ request,
205
+ body.dict(exclude_unset=True, exclude={"new_password"}),
206
+ "modify your account password",
207
+ )
208
+
209
+ if LoginType.EMAIL_IDENTITY in result:
210
+ threepid = result[LoginType.EMAIL_IDENTITY]
211
+ if "medium" not in threepid or "address" not in threepid:
212
+ raise SynapseError(500, "Malformed threepid")
213
+ if threepid["medium"] == "email":
214
+ # For emails, canonicalise the address.
215
+ # We store all email addresses canonicalised in the DB.
216
+ # (See add_threepid in synapse/handlers/auth.py)
217
+ try:
218
+ threepid["address"] = validate_email(threepid["address"])
219
+ except ValueError as e:
220
+ raise SynapseError(400, str(e))
221
+ # if using email, we must know about the email they're authing with!
222
+ threepid_user_id = await self.datastore.get_user_id_by_threepid(
223
+ threepid["medium"], threepid["address"]
224
+ )
225
+ if not threepid_user_id:
226
+ raise SynapseError(
227
+ 404, "Email address not found", Codes.NOT_FOUND
228
+ )
229
+ user_id = threepid_user_id
230
+ else:
231
+ logger.error("Auth succeeded but no known type! %r", result.keys())
232
+ raise SynapseError(500, "", Codes.UNKNOWN)
233
+
234
+ except InteractiveAuthIncompleteError as e:
235
+ # The user needs to provide more steps to complete auth, but
236
+ # they're not required to provide the password again.
237
+ #
238
+ # If a password is available now, hash the provided password and
239
+ # store it for later. We only do this if we don't already have the
240
+ # password hash stored, to avoid repeatedly hashing the password.
241
+
242
+ if not new_password:
243
+ raise
244
+
245
+ existing_session_password_hash = await self.auth_handler.get_session_data(
246
+ e.session_id, UIAuthSessionDataConstants.PASSWORD_HASH, None
247
+ )
248
+ if existing_session_password_hash:
249
+ raise
250
+
251
+ new_password_hash = await self.auth_handler.hash(new_password)
252
+ await self.auth_handler.set_session_data(
253
+ e.session_id,
254
+ UIAuthSessionDataConstants.PASSWORD_HASH,
255
+ new_password_hash,
256
+ )
257
+ raise
258
+
259
+ # If we have a password in this request, prefer it. Otherwise, use the
260
+ # password hash from an earlier request.
261
+ if new_password:
262
+ password_hash: str | None = await self.auth_handler.hash(new_password)
263
+ elif session_id is not None:
264
+ password_hash = existing_session_password_hash
265
+ else:
266
+ # UI validation was skipped, but the request did not include a new
267
+ # password.
268
+ password_hash = None
269
+ if not password_hash:
270
+ raise SynapseError(400, "Missing params: password", Codes.MISSING_PARAM)
271
+
272
+ logout_devices = params.get("logout_devices", True)
273
+
274
+ await self._set_password_handler.set_password(
275
+ user_id, password_hash, logout_devices, requester
276
+ )
277
+
278
+ return 200, {}
279
+
280
+
281
+ class DeactivateAccountRestServlet(RestServlet):
282
+ PATTERNS = client_patterns("/account/deactivate$")
283
+
284
+ def __init__(self, hs: "HomeServer"):
285
+ super().__init__()
286
+ self.hs = hs
287
+ self.auth = hs.get_auth()
288
+ self.auth_handler = hs.get_auth_handler()
289
+ self._deactivate_account_handler = hs.get_deactivate_account_handler()
290
+
291
+ class PostBody(RequestBodyModel):
292
+ auth: AuthenticationData | None = None
293
+ id_server: StrictStr | None = None
294
+ # Not specced, see https://github.com/matrix-org/matrix-spec/issues/297
295
+ erase: StrictBool = False
296
+
297
+ @interactive_auth_handler
298
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
299
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
300
+
301
+ requester = await self.auth.get_user_by_req(request)
302
+
303
+ # allow ASes to deactivate their own users:
304
+ # ASes don't need user-interactive auth
305
+ if not requester.app_service:
306
+ await self.auth_handler.validate_user_via_ui_auth(
307
+ requester,
308
+ request,
309
+ body.dict(exclude_unset=True),
310
+ "deactivate your account",
311
+ )
312
+
313
+ result = await self._deactivate_account_handler.deactivate_account(
314
+ requester.user.to_string(), body.erase, requester, id_server=body.id_server
315
+ )
316
+ if result:
317
+ id_server_unbind_result = "success"
318
+ else:
319
+ id_server_unbind_result = "no-support"
320
+
321
+ return 200, {"id_server_unbind_result": id_server_unbind_result}
322
+
323
+
324
+ class EmailThreepidRequestTokenRestServlet(RestServlet):
325
+ PATTERNS = client_patterns("/account/3pid/email/requestToken$")
326
+
327
+ def __init__(self, hs: "HomeServer"):
328
+ super().__init__()
329
+ self.hs = hs
330
+ self.server_name = hs.hostname
331
+ self.config = hs.config
332
+ self.identity_handler = hs.get_identity_handler()
333
+ self.store = self.hs.get_datastores().main
334
+
335
+ if self.config.email.can_verify_email:
336
+ self.mailer = Mailer(
337
+ hs=self.hs,
338
+ app_name=self.config.email.email_app_name,
339
+ template_html=self.config.email.email_add_threepid_template_html,
340
+ template_text=self.config.email.email_add_threepid_template_text,
341
+ )
342
+
343
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
344
+ if not self.hs.config.registration.enable_3pid_changes:
345
+ raise SynapseError(
346
+ 400, "3PID changes are disabled on this server", Codes.FORBIDDEN
347
+ )
348
+
349
+ if not self.config.email.can_verify_email:
350
+ logger.warning(
351
+ "Adding emails have been disabled due to lack of an email config"
352
+ )
353
+ raise SynapseError(
354
+ 400,
355
+ "Adding an email to your account is disabled on this server",
356
+ Codes.THREEPID_MEDIUM_NOT_SUPPORTED,
357
+ )
358
+
359
+ body = parse_and_validate_json_object_from_request(
360
+ request, EmailRequestTokenBody
361
+ )
362
+
363
+ if not await check_3pid_allowed(self.hs, "email", body.email):
364
+ raise SynapseError(
365
+ 403,
366
+ "Your email domain is not authorized on this server",
367
+ Codes.THREEPID_DENIED,
368
+ )
369
+
370
+ await self.identity_handler.ratelimit_request_token_requests(
371
+ request, "email", body.email
372
+ )
373
+
374
+ if body.next_link:
375
+ # Raise if the provided next_link value isn't valid
376
+ assert_valid_next_link(self.hs, body.next_link)
377
+
378
+ existing_user_id = await self.store.get_user_id_by_threepid("email", body.email)
379
+
380
+ if existing_user_id is not None:
381
+ if self.config.server.request_token_inhibit_3pid_errors:
382
+ # Make the client think the operation succeeded. See the rationale in the
383
+ # comments for request_token_inhibit_3pid_errors.
384
+ # Also wait for some random amount of time between 100ms and 1s to make it
385
+ # look like we did something.
386
+ await self.hs.get_clock().sleep(random.randint(1, 10) / 10)
387
+ return 200, {"sid": random_string(16)}
388
+
389
+ raise SynapseError(400, "Email is already in use", Codes.THREEPID_IN_USE)
390
+
391
+ # Send threepid validation emails from Synapse
392
+ sid = await self.identity_handler.send_threepid_validation(
393
+ body.email,
394
+ body.client_secret,
395
+ body.send_attempt,
396
+ self.mailer.send_add_threepid_mail,
397
+ body.next_link,
398
+ )
399
+
400
+ threepid_send_requests.labels(
401
+ type="email",
402
+ reason="add_threepid",
403
+ **{SERVER_NAME_LABEL: self.server_name},
404
+ ).observe(body.send_attempt)
405
+
406
+ # Wrap the session id in a JSON object
407
+ return 200, {"sid": sid}
408
+
409
+
410
+ class MsisdnThreepidRequestTokenRestServlet(RestServlet):
411
+ PATTERNS = client_patterns("/account/3pid/msisdn/requestToken$")
412
+
413
+ def __init__(self, hs: "HomeServer"):
414
+ self.hs = hs
415
+ self.server_name = hs.hostname
416
+ super().__init__()
417
+ self.store = self.hs.get_datastores().main
418
+ self.identity_handler = hs.get_identity_handler()
419
+
420
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
421
+ body = parse_and_validate_json_object_from_request(
422
+ request, MsisdnRequestTokenBody
423
+ )
424
+ msisdn = phone_number_to_msisdn(body.country, body.phone_number)
425
+ logger.info("Request #%s to verify ownership of %s", body.send_attempt, msisdn)
426
+
427
+ if not await check_3pid_allowed(self.hs, "msisdn", msisdn):
428
+ raise SynapseError(
429
+ 403,
430
+ # TODO: is this error message accurate? Looks like we've only rejected
431
+ # this phone number, not necessarily all phone numbers
432
+ "Account phone numbers are not authorized on this server",
433
+ Codes.THREEPID_DENIED,
434
+ )
435
+
436
+ await self.identity_handler.ratelimit_request_token_requests(
437
+ request, "msisdn", msisdn
438
+ )
439
+
440
+ if body.next_link:
441
+ # Raise if the provided next_link value isn't valid
442
+ assert_valid_next_link(self.hs, body.next_link)
443
+
444
+ existing_user_id = await self.store.get_user_id_by_threepid("msisdn", msisdn)
445
+
446
+ if existing_user_id is not None:
447
+ if self.hs.config.server.request_token_inhibit_3pid_errors:
448
+ # Make the client think the operation succeeded. See the rationale in the
449
+ # comments for request_token_inhibit_3pid_errors.
450
+ # Also wait for some random amount of time between 100ms and 1s to make it
451
+ # look like we did something.
452
+ await self.hs.get_clock().sleep(random.randint(1, 10) / 10)
453
+ return 200, {"sid": random_string(16)}
454
+
455
+ logger.info("MSISDN %s is already in use by %s", msisdn, existing_user_id)
456
+ raise SynapseError(400, "MSISDN is already in use", Codes.THREEPID_IN_USE)
457
+
458
+ if not self.hs.config.registration.account_threepid_delegate_msisdn:
459
+ logger.warning(
460
+ "No upstream msisdn account_threepid_delegate configured on the server to "
461
+ "handle this request"
462
+ )
463
+ raise SynapseError(
464
+ 400,
465
+ "Adding phone numbers to user account is not supported by this homeserver",
466
+ Codes.THREEPID_MEDIUM_NOT_SUPPORTED,
467
+ )
468
+
469
+ ret = await self.identity_handler.requestMsisdnToken(
470
+ self.hs.config.registration.account_threepid_delegate_msisdn,
471
+ body.country,
472
+ body.phone_number,
473
+ body.client_secret,
474
+ body.send_attempt,
475
+ body.next_link,
476
+ )
477
+
478
+ threepid_send_requests.labels(
479
+ type="msisdn",
480
+ reason="add_threepid",
481
+ **{SERVER_NAME_LABEL: self.server_name},
482
+ ).observe(body.send_attempt)
483
+ logger.info("MSISDN %s: got response from identity server: %s", msisdn, ret)
484
+
485
+ return 200, ret
486
+
487
+
488
+ class AddThreepidEmailSubmitTokenServlet(RestServlet):
489
+ """Handles 3PID validation token submission for adding an email to a user's account"""
490
+
491
+ PATTERNS = client_patterns(
492
+ "/add_threepid/email/submit_token$", releases=(), unstable=True
493
+ )
494
+
495
+ def __init__(self, hs: "HomeServer"):
496
+ super().__init__()
497
+ self.config = hs.config
498
+ self.clock = hs.get_clock()
499
+ self.store = hs.get_datastores().main
500
+ if self.config.email.can_verify_email:
501
+ self._failure_email_template = (
502
+ self.config.email.email_add_threepid_template_failure_html
503
+ )
504
+
505
+ async def on_GET(self, request: Request) -> None:
506
+ if not self.config.email.can_verify_email:
507
+ logger.warning(
508
+ "Adding emails have been disabled due to lack of an email config"
509
+ )
510
+ raise SynapseError(
511
+ 400,
512
+ "Adding an email to your account is disabled on this server",
513
+ Codes.THREEPID_MEDIUM_NOT_SUPPORTED,
514
+ )
515
+
516
+ sid = parse_string(request, "sid", required=True)
517
+ token = parse_string(request, "token", required=True)
518
+ client_secret = parse_string(request, "client_secret", required=True)
519
+ assert_valid_client_secret(client_secret)
520
+
521
+ # Attempt to validate a 3PID session
522
+ try:
523
+ # Mark the session as valid
524
+ next_link = await self.store.validate_threepid_session(
525
+ sid, client_secret, token, self.clock.time_msec()
526
+ )
527
+
528
+ # Perform a 302 redirect if next_link is set
529
+ if next_link:
530
+ request.setResponseCode(302)
531
+ request.setHeader("Location", next_link)
532
+ finish_request(request)
533
+ return None
534
+
535
+ # Otherwise show the success template
536
+ html = self.config.email.email_add_threepid_template_success_html_content
537
+ status_code = 200
538
+ except ThreepidValidationError as e:
539
+ status_code = e.code
540
+
541
+ # Show a failure page with a reason
542
+ template_vars = {"failure_reason": e.msg}
543
+ html = self._failure_email_template.render(**template_vars)
544
+
545
+ respond_with_html(request, status_code, html)
546
+
547
+
548
+ class AddThreepidMsisdnSubmitTokenServlet(RestServlet):
549
+ """Handles 3PID validation token submission for adding a phone number to a user's
550
+ account
551
+ """
552
+
553
+ PATTERNS = client_patterns(
554
+ "/add_threepid/msisdn/submit_token$", releases=(), unstable=True
555
+ )
556
+
557
+ class PostBody(RequestBodyModel):
558
+ client_secret: ClientSecretStr
559
+ sid: StrictStr
560
+ token: StrictStr
561
+
562
+ def __init__(self, hs: "HomeServer"):
563
+ super().__init__()
564
+ self.config = hs.config
565
+ self.clock = hs.get_clock()
566
+ self.store = hs.get_datastores().main
567
+ self.identity_handler = hs.get_identity_handler()
568
+
569
+ async def on_POST(self, request: Request) -> tuple[int, JsonDict]:
570
+ if not self.config.registration.account_threepid_delegate_msisdn:
571
+ raise SynapseError(
572
+ 400,
573
+ "This homeserver is not validating phone numbers. Use an identity server "
574
+ "instead.",
575
+ )
576
+
577
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
578
+
579
+ # Proxy submit_token request to msisdn threepid delegate
580
+ response = await self.identity_handler.proxy_msisdn_submit_token(
581
+ self.config.registration.account_threepid_delegate_msisdn,
582
+ body.client_secret,
583
+ body.sid,
584
+ body.token,
585
+ )
586
+ return 200, response
587
+
588
+
589
+ class ThreepidRestServlet(RestServlet):
590
+ PATTERNS = client_patterns("/account/3pid$")
591
+ # This is used as a proxy for all the 3pid endpoints.
592
+
593
+ CATEGORY = "Client API requests"
594
+
595
+ def __init__(self, hs: "HomeServer"):
596
+ super().__init__()
597
+ self.hs = hs
598
+ self.identity_handler = hs.get_identity_handler()
599
+ self.auth = hs.get_auth()
600
+ self.auth_handler = hs.get_auth_handler()
601
+ self.datastore = self.hs.get_datastores().main
602
+
603
+ async def on_GET(self, request: SynapseRequest) -> tuple[int, JsonDict]:
604
+ requester = await self.auth.get_user_by_req(request)
605
+
606
+ threepids = await self.datastore.user_get_threepids(requester.user.to_string())
607
+
608
+ return 200, {"threepids": [attr.asdict(t) for t in threepids]}
609
+
610
+ # NOTE(dmr): I have chosen not to use Pydantic to parse this request's body, because
611
+ # the endpoint is deprecated. (If you really want to, you could do this by reusing
612
+ # ThreePidBindRestServelet.PostBody with an `alias_generator` to handle
613
+ # `threePidCreds` versus `three_pid_creds`.
614
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
615
+ if self.hs.config.mas.enabled or self.hs.config.experimental.msc3861.enabled:
616
+ raise NotFoundError(errcode=Codes.UNRECOGNIZED)
617
+
618
+ if not self.hs.config.registration.enable_3pid_changes:
619
+ raise SynapseError(
620
+ 400, "3PID changes are disabled on this server", Codes.FORBIDDEN
621
+ )
622
+
623
+ requester = await self.auth.get_user_by_req(request)
624
+ user_id = requester.user.to_string()
625
+ body = parse_json_object_from_request(request)
626
+
627
+ threepid_creds = body.get("threePidCreds") or body.get("three_pid_creds")
628
+ if threepid_creds is None:
629
+ raise SynapseError(
630
+ 400, "Missing param three_pid_creds", Codes.MISSING_PARAM
631
+ )
632
+ assert_params_in_dict(threepid_creds, ["client_secret", "sid"])
633
+
634
+ sid = threepid_creds["sid"]
635
+ client_secret = threepid_creds["client_secret"]
636
+ assert_valid_client_secret(client_secret)
637
+
638
+ validation_session = await self.identity_handler.validate_threepid_session(
639
+ client_secret, sid
640
+ )
641
+ if validation_session:
642
+ await self.auth_handler.add_threepid(
643
+ user_id,
644
+ validation_session["medium"],
645
+ validation_session["address"],
646
+ validation_session["validated_at"],
647
+ )
648
+ return 200, {}
649
+
650
+ raise SynapseError(
651
+ 400, "No validated 3pid session found", Codes.THREEPID_AUTH_FAILED
652
+ )
653
+
654
+
655
+ class ThreepidAddRestServlet(RestServlet):
656
+ PATTERNS = client_patterns("/account/3pid/add$")
657
+
658
+ def __init__(self, hs: "HomeServer"):
659
+ super().__init__()
660
+ self.hs = hs
661
+ self.identity_handler = hs.get_identity_handler()
662
+ self.auth = hs.get_auth()
663
+ self.auth_handler = hs.get_auth_handler()
664
+
665
+ class PostBody(RequestBodyModel):
666
+ auth: AuthenticationData | None = None
667
+ client_secret: ClientSecretStr
668
+ sid: StrictStr
669
+
670
+ @interactive_auth_handler
671
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
672
+ if not self.hs.config.registration.enable_3pid_changes:
673
+ raise SynapseError(
674
+ 400, "3PID changes are disabled on this server", Codes.FORBIDDEN
675
+ )
676
+
677
+ requester = await self.auth.get_user_by_req(request)
678
+ user_id = requester.user.to_string()
679
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
680
+
681
+ await self.auth_handler.validate_user_via_ui_auth(
682
+ requester,
683
+ request,
684
+ body.dict(exclude_unset=True),
685
+ "add a third-party identifier to your account",
686
+ )
687
+
688
+ validation_session = await self.identity_handler.validate_threepid_session(
689
+ body.client_secret, body.sid
690
+ )
691
+ if validation_session:
692
+ await self.auth_handler.add_threepid(
693
+ user_id,
694
+ validation_session["medium"],
695
+ validation_session["address"],
696
+ validation_session["validated_at"],
697
+ )
698
+ return 200, {}
699
+
700
+ raise SynapseError(
701
+ 400, "No validated 3pid session found", Codes.THREEPID_AUTH_FAILED
702
+ )
703
+
704
+
705
+ class ThreepidBindRestServlet(RestServlet):
706
+ PATTERNS = client_patterns("/account/3pid/bind$")
707
+
708
+ def __init__(self, hs: "HomeServer"):
709
+ super().__init__()
710
+ self.hs = hs
711
+ self.identity_handler = hs.get_identity_handler()
712
+ self.auth = hs.get_auth()
713
+
714
+ class PostBody(RequestBodyModel):
715
+ client_secret: ClientSecretStr
716
+ id_access_token: StrictStr
717
+ id_server: StrictStr
718
+ sid: StrictStr
719
+
720
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
721
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
722
+
723
+ requester = await self.auth.get_user_by_req(request)
724
+ user_id = requester.user.to_string()
725
+
726
+ await self.identity_handler.bind_threepid(
727
+ body.client_secret, body.sid, user_id, body.id_server, body.id_access_token
728
+ )
729
+
730
+ return 200, {}
731
+
732
+
733
+ class ThreepidUnbindRestServlet(RestServlet):
734
+ PATTERNS = client_patterns("/account/3pid/unbind$")
735
+
736
+ def __init__(self, hs: "HomeServer"):
737
+ super().__init__()
738
+ self.hs = hs
739
+ self.identity_handler = hs.get_identity_handler()
740
+ self.auth = hs.get_auth()
741
+ self.datastore = self.hs.get_datastores().main
742
+
743
+ class PostBody(RequestBodyModel):
744
+ address: StrictStr
745
+ id_server: StrictStr | None = None
746
+ medium: Literal["email", "msisdn"]
747
+
748
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
749
+ """Unbind the given 3pid from a specific identity server, or identity servers that are
750
+ known to have this 3pid bound
751
+ """
752
+ requester = await self.auth.get_user_by_req(request)
753
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
754
+
755
+ # Attempt to unbind the threepid from an identity server. If id_server is None, try to
756
+ # unbind from all identity servers this threepid has been added to in the past
757
+ result = await self.identity_handler.try_unbind_threepid(
758
+ requester.user.to_string(), body.medium, body.address, body.id_server
759
+ )
760
+ return 200, {"id_server_unbind_result": "success" if result else "no-support"}
761
+
762
+
763
+ class ThreepidDeleteRestServlet(RestServlet):
764
+ PATTERNS = client_patterns("/account/3pid/delete$")
765
+
766
+ def __init__(self, hs: "HomeServer"):
767
+ super().__init__()
768
+ self.hs = hs
769
+ self.auth = hs.get_auth()
770
+ self.auth_handler = hs.get_auth_handler()
771
+
772
+ class PostBody(RequestBodyModel):
773
+ address: StrictStr
774
+ id_server: StrictStr | None = None
775
+ medium: Literal["email", "msisdn"]
776
+
777
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
778
+ if not self.hs.config.registration.enable_3pid_changes:
779
+ raise SynapseError(
780
+ 400, "3PID changes are disabled on this server", Codes.FORBIDDEN
781
+ )
782
+
783
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
784
+
785
+ requester = await self.auth.get_user_by_req(request)
786
+ user_id = requester.user.to_string()
787
+
788
+ try:
789
+ # Attempt to remove any known bindings of this third-party ID
790
+ # and user ID from identity servers.
791
+ ret = await self.hs.get_identity_handler().try_unbind_threepid(
792
+ user_id, body.medium, body.address, body.id_server
793
+ )
794
+ except Exception:
795
+ # NB. This endpoint should succeed if there is nothing to
796
+ # delete, so it should only throw if something is wrong
797
+ # that we ought to care about.
798
+ logger.exception("Failed to remove threepid")
799
+ raise SynapseError(500, "Failed to remove threepid")
800
+
801
+ if ret:
802
+ id_server_unbind_result = "success"
803
+ else:
804
+ id_server_unbind_result = "no-support"
805
+
806
+ # Delete the local association of this user ID and third-party ID.
807
+ await self.auth_handler.delete_local_threepid(
808
+ user_id, body.medium, body.address
809
+ )
810
+
811
+ return 200, {"id_server_unbind_result": id_server_unbind_result}
812
+
813
+
814
+ def assert_valid_next_link(hs: "HomeServer", next_link: str) -> None:
815
+ """
816
+ Raises a SynapseError if a given next_link value is invalid
817
+
818
+ next_link is valid if the scheme is http(s) and the next_link.domain_whitelist config
819
+ option is either empty or contains a domain that matches the one in the given next_link
820
+
821
+ Args:
822
+ hs: The homeserver object
823
+ next_link: The next_link value given by the client
824
+
825
+ Raises:
826
+ SynapseError: If the next_link is invalid
827
+ """
828
+ valid = True
829
+
830
+ # Parse the contents of the URL
831
+ next_link_parsed = urlparse(next_link)
832
+
833
+ # Scheme must not point to the local drive
834
+ if next_link_parsed.scheme == "file":
835
+ valid = False
836
+
837
+ # If the domain whitelist is set, the domain must be in it
838
+ if (
839
+ valid
840
+ and hs.config.server.next_link_domain_whitelist is not None
841
+ and next_link_parsed.hostname not in hs.config.server.next_link_domain_whitelist
842
+ ):
843
+ valid = False
844
+
845
+ if not valid:
846
+ raise SynapseError(
847
+ 400,
848
+ "'next_link' domain not included in whitelist, or not http(s)",
849
+ errcode=Codes.INVALID_PARAM,
850
+ )
851
+
852
+
853
+ class WhoamiRestServlet(RestServlet):
854
+ PATTERNS = client_patterns("/account/whoami$")
855
+ CATEGORY = "Client API requests"
856
+
857
+ def __init__(self, hs: "HomeServer"):
858
+ super().__init__()
859
+ self.auth = hs.get_auth()
860
+
861
+ async def on_GET(self, request: SynapseRequest) -> tuple[int, JsonDict]:
862
+ requester = await self.auth.get_user_by_req(request, allow_guest=True)
863
+
864
+ response = {
865
+ "user_id": requester.user.to_string(),
866
+ # Entered spec in Matrix 1.2
867
+ "is_guest": bool(requester.is_guest),
868
+ }
869
+
870
+ # Appservices and similar accounts do not have device IDs
871
+ # that we can report on, so exclude them for compliance.
872
+ if requester.device_id is not None:
873
+ response["device_id"] = requester.device_id
874
+
875
+ return 200, response
876
+
877
+
878
+ class AccountStatusRestServlet(RestServlet):
879
+ PATTERNS = client_patterns(
880
+ "/org.matrix.msc3720/account_status$", unstable=True, releases=()
881
+ )
882
+
883
+ def __init__(self, hs: "HomeServer"):
884
+ super().__init__()
885
+ self._auth = hs.get_auth()
886
+ self._account_handler = hs.get_account_handler()
887
+
888
+ class PostBody(RequestBodyModel):
889
+ # TODO: we could validate that each user id is an mxid here, and/or parse it
890
+ # as a UserID
891
+ user_ids: list[StrictStr]
892
+
893
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
894
+ await self._auth.get_user_by_req(request)
895
+
896
+ body = parse_and_validate_json_object_from_request(request, self.PostBody)
897
+
898
+ statuses, failures = await self._account_handler.get_account_statuses(
899
+ body.user_ids,
900
+ allow_remote=True,
901
+ )
902
+
903
+ return 200, {"account_statuses": statuses, "failures": failures}
904
+
905
+
906
+ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
907
+ auth_delegated = hs.config.mas.enabled or hs.config.experimental.msc3861.enabled
908
+
909
+ ThreepidRestServlet(hs).register(http_server)
910
+ WhoamiRestServlet(hs).register(http_server)
911
+
912
+ if not auth_delegated:
913
+ DeactivateAccountRestServlet(hs).register(http_server)
914
+
915
+ if hs.config.worker.worker_app is None:
916
+ ThreepidBindRestServlet(hs).register(http_server)
917
+ ThreepidUnbindRestServlet(hs).register(http_server)
918
+
919
+ if not auth_delegated:
920
+ EmailPasswordRequestTokenRestServlet(hs).register(http_server)
921
+ PasswordRestServlet(hs).register(http_server)
922
+ EmailThreepidRequestTokenRestServlet(hs).register(http_server)
923
+ MsisdnThreepidRequestTokenRestServlet(hs).register(http_server)
924
+ AddThreepidEmailSubmitTokenServlet(hs).register(http_server)
925
+ AddThreepidMsisdnSubmitTokenServlet(hs).register(http_server)
926
+ ThreepidAddRestServlet(hs).register(http_server)
927
+ ThreepidDeleteRestServlet(hs).register(http_server)
928
+
929
+ if hs.config.experimental.msc3720_enabled:
930
+ AccountStatusRestServlet(hs).register(http_server)