matrix-synapse 1.142.0rc3__cp314-abi3-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

Files changed (1057) hide show
  1. matrix_synapse-1.142.0rc3.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.142.0rc3.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.142.0rc3.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.142.0rc3.dist-info/METADATA +375 -0
  5. matrix_synapse-1.142.0rc3.dist-info/RECORD +1057 -0
  6. matrix_synapse-1.142.0rc3.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.142.0rc3.dist-info/entry_points.txt +14 -0
  8. matrix_synapse.libs/libgcc_s-2d945d6c.so.1 +0 -0
  9. synapse/__init__.py +97 -0
  10. synapse/_scripts/__init__.py +0 -0
  11. synapse/_scripts/export_signing_key.py +109 -0
  12. synapse/_scripts/generate_config.py +83 -0
  13. synapse/_scripts/generate_log_config.py +56 -0
  14. synapse/_scripts/generate_signing_key.py +55 -0
  15. synapse/_scripts/generate_workers_map.py +318 -0
  16. synapse/_scripts/hash_password.py +95 -0
  17. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  18. synapse/_scripts/register_new_matrix_user.py +374 -0
  19. synapse/_scripts/review_recent_signups.py +212 -0
  20. synapse/_scripts/synapse_port_db.py +1603 -0
  21. synapse/_scripts/synctl.py +365 -0
  22. synapse/_scripts/update_synapse_database.py +130 -0
  23. synapse/api/__init__.py +20 -0
  24. synapse/api/auth/__init__.py +207 -0
  25. synapse/api/auth/base.py +406 -0
  26. synapse/api/auth/internal.py +299 -0
  27. synapse/api/auth/mas.py +457 -0
  28. synapse/api/auth/msc3861_delegated.py +617 -0
  29. synapse/api/auth_blocking.py +144 -0
  30. synapse/api/constants.py +362 -0
  31. synapse/api/errors.py +907 -0
  32. synapse/api/filtering.py +539 -0
  33. synapse/api/presence.py +104 -0
  34. synapse/api/ratelimiting.py +482 -0
  35. synapse/api/room_versions.py +535 -0
  36. synapse/api/urls.py +119 -0
  37. synapse/app/__init__.py +60 -0
  38. synapse/app/_base.py +866 -0
  39. synapse/app/admin_cmd.py +388 -0
  40. synapse/app/appservice.py +30 -0
  41. synapse/app/client_reader.py +30 -0
  42. synapse/app/complement_fork_starter.py +206 -0
  43. synapse/app/event_creator.py +29 -0
  44. synapse/app/federation_reader.py +30 -0
  45. synapse/app/federation_sender.py +30 -0
  46. synapse/app/frontend_proxy.py +30 -0
  47. synapse/app/generic_worker.py +475 -0
  48. synapse/app/homeserver.py +504 -0
  49. synapse/app/media_repository.py +30 -0
  50. synapse/app/phone_stats_home.py +296 -0
  51. synapse/app/pusher.py +30 -0
  52. synapse/app/synchrotron.py +30 -0
  53. synapse/app/user_dir.py +31 -0
  54. synapse/appservice/__init__.py +461 -0
  55. synapse/appservice/api.py +569 -0
  56. synapse/appservice/scheduler.py +567 -0
  57. synapse/config/__init__.py +27 -0
  58. synapse/config/__main__.py +62 -0
  59. synapse/config/_base.py +1108 -0
  60. synapse/config/_base.pyi +217 -0
  61. synapse/config/_util.py +99 -0
  62. synapse/config/account_validity.py +116 -0
  63. synapse/config/api.py +141 -0
  64. synapse/config/appservice.py +210 -0
  65. synapse/config/auth.py +80 -0
  66. synapse/config/auto_accept_invites.py +43 -0
  67. synapse/config/background_updates.py +44 -0
  68. synapse/config/cache.py +231 -0
  69. synapse/config/captcha.py +90 -0
  70. synapse/config/cas.py +116 -0
  71. synapse/config/consent.py +73 -0
  72. synapse/config/database.py +184 -0
  73. synapse/config/emailconfig.py +367 -0
  74. synapse/config/experimental.py +595 -0
  75. synapse/config/federation.py +114 -0
  76. synapse/config/homeserver.py +141 -0
  77. synapse/config/jwt.py +55 -0
  78. synapse/config/key.py +447 -0
  79. synapse/config/logger.py +390 -0
  80. synapse/config/mas.py +191 -0
  81. synapse/config/matrixrtc.py +66 -0
  82. synapse/config/metrics.py +84 -0
  83. synapse/config/modules.py +40 -0
  84. synapse/config/oembed.py +185 -0
  85. synapse/config/oidc.py +509 -0
  86. synapse/config/password_auth_providers.py +82 -0
  87. synapse/config/push.py +64 -0
  88. synapse/config/ratelimiting.py +254 -0
  89. synapse/config/redis.py +74 -0
  90. synapse/config/registration.py +296 -0
  91. synapse/config/repository.py +311 -0
  92. synapse/config/retention.py +162 -0
  93. synapse/config/room.py +88 -0
  94. synapse/config/room_directory.py +165 -0
  95. synapse/config/saml2.py +251 -0
  96. synapse/config/server.py +1170 -0
  97. synapse/config/server_notices.py +84 -0
  98. synapse/config/spam_checker.py +66 -0
  99. synapse/config/sso.py +121 -0
  100. synapse/config/stats.py +54 -0
  101. synapse/config/third_party_event_rules.py +40 -0
  102. synapse/config/tls.py +192 -0
  103. synapse/config/tracer.py +71 -0
  104. synapse/config/user_directory.py +47 -0
  105. synapse/config/user_types.py +44 -0
  106. synapse/config/voip.py +59 -0
  107. synapse/config/workers.py +642 -0
  108. synapse/crypto/__init__.py +20 -0
  109. synapse/crypto/context_factory.py +278 -0
  110. synapse/crypto/event_signing.py +194 -0
  111. synapse/crypto/keyring.py +931 -0
  112. synapse/event_auth.py +1266 -0
  113. synapse/events/__init__.py +668 -0
  114. synapse/events/auto_accept_invites.py +216 -0
  115. synapse/events/builder.py +387 -0
  116. synapse/events/presence_router.py +245 -0
  117. synapse/events/snapshot.py +559 -0
  118. synapse/events/utils.py +928 -0
  119. synapse/events/validator.py +305 -0
  120. synapse/federation/__init__.py +22 -0
  121. synapse/federation/federation_base.py +383 -0
  122. synapse/federation/federation_client.py +2134 -0
  123. synapse/federation/federation_server.py +1544 -0
  124. synapse/federation/persistence.py +71 -0
  125. synapse/federation/send_queue.py +532 -0
  126. synapse/federation/sender/__init__.py +1165 -0
  127. synapse/federation/sender/per_destination_queue.py +884 -0
  128. synapse/federation/sender/transaction_manager.py +210 -0
  129. synapse/federation/transport/__init__.py +28 -0
  130. synapse/federation/transport/client.py +1201 -0
  131. synapse/federation/transport/server/__init__.py +334 -0
  132. synapse/federation/transport/server/_base.py +429 -0
  133. synapse/federation/transport/server/federation.py +912 -0
  134. synapse/federation/units.py +133 -0
  135. synapse/handlers/__init__.py +20 -0
  136. synapse/handlers/account.py +162 -0
  137. synapse/handlers/account_data.py +362 -0
  138. synapse/handlers/account_validity.py +361 -0
  139. synapse/handlers/admin.py +618 -0
  140. synapse/handlers/appservice.py +991 -0
  141. synapse/handlers/auth.py +2494 -0
  142. synapse/handlers/cas.py +413 -0
  143. synapse/handlers/deactivate_account.py +363 -0
  144. synapse/handlers/delayed_events.py +635 -0
  145. synapse/handlers/device.py +1873 -0
  146. synapse/handlers/devicemessage.py +399 -0
  147. synapse/handlers/directory.py +554 -0
  148. synapse/handlers/e2e_keys.py +1834 -0
  149. synapse/handlers/e2e_room_keys.py +455 -0
  150. synapse/handlers/event_auth.py +390 -0
  151. synapse/handlers/events.py +201 -0
  152. synapse/handlers/federation.py +2043 -0
  153. synapse/handlers/federation_event.py +2420 -0
  154. synapse/handlers/identity.py +812 -0
  155. synapse/handlers/initial_sync.py +528 -0
  156. synapse/handlers/jwt.py +120 -0
  157. synapse/handlers/message.py +2347 -0
  158. synapse/handlers/oidc.py +1803 -0
  159. synapse/handlers/pagination.py +768 -0
  160. synapse/handlers/password_policy.py +102 -0
  161. synapse/handlers/presence.py +2638 -0
  162. synapse/handlers/profile.py +655 -0
  163. synapse/handlers/push_rules.py +164 -0
  164. synapse/handlers/read_marker.py +79 -0
  165. synapse/handlers/receipts.py +351 -0
  166. synapse/handlers/register.py +1060 -0
  167. synapse/handlers/relations.py +624 -0
  168. synapse/handlers/reports.py +98 -0
  169. synapse/handlers/room.py +2447 -0
  170. synapse/handlers/room_list.py +632 -0
  171. synapse/handlers/room_member.py +2365 -0
  172. synapse/handlers/room_member_worker.py +146 -0
  173. synapse/handlers/room_policy.py +186 -0
  174. synapse/handlers/room_summary.py +1057 -0
  175. synapse/handlers/saml.py +524 -0
  176. synapse/handlers/search.py +723 -0
  177. synapse/handlers/send_email.py +209 -0
  178. synapse/handlers/set_password.py +71 -0
  179. synapse/handlers/sliding_sync/__init__.py +1701 -0
  180. synapse/handlers/sliding_sync/extensions.py +970 -0
  181. synapse/handlers/sliding_sync/room_lists.py +2266 -0
  182. synapse/handlers/sliding_sync/store.py +128 -0
  183. synapse/handlers/sso.py +1292 -0
  184. synapse/handlers/state_deltas.py +82 -0
  185. synapse/handlers/stats.py +322 -0
  186. synapse/handlers/sync.py +3109 -0
  187. synapse/handlers/thread_subscriptions.py +190 -0
  188. synapse/handlers/typing.py +606 -0
  189. synapse/handlers/ui_auth/__init__.py +48 -0
  190. synapse/handlers/ui_auth/checkers.py +332 -0
  191. synapse/handlers/user_directory.py +783 -0
  192. synapse/handlers/worker_lock.py +365 -0
  193. synapse/http/__init__.py +106 -0
  194. synapse/http/additional_resource.py +62 -0
  195. synapse/http/client.py +1360 -0
  196. synapse/http/connectproxyclient.py +309 -0
  197. synapse/http/federation/__init__.py +19 -0
  198. synapse/http/federation/matrix_federation_agent.py +490 -0
  199. synapse/http/federation/srv_resolver.py +196 -0
  200. synapse/http/federation/well_known_resolver.py +367 -0
  201. synapse/http/matrixfederationclient.py +1875 -0
  202. synapse/http/proxy.py +290 -0
  203. synapse/http/proxyagent.py +497 -0
  204. synapse/http/replicationagent.py +203 -0
  205. synapse/http/request_metrics.py +309 -0
  206. synapse/http/server.py +1114 -0
  207. synapse/http/servlet.py +1019 -0
  208. synapse/http/site.py +825 -0
  209. synapse/http/types.py +27 -0
  210. synapse/logging/__init__.py +31 -0
  211. synapse/logging/_remote.py +261 -0
  212. synapse/logging/_terse_json.py +95 -0
  213. synapse/logging/context.py +1211 -0
  214. synapse/logging/formatter.py +63 -0
  215. synapse/logging/handlers.py +99 -0
  216. synapse/logging/loggers.py +25 -0
  217. synapse/logging/opentracing.py +1132 -0
  218. synapse/logging/scopecontextmanager.py +161 -0
  219. synapse/media/_base.py +827 -0
  220. synapse/media/filepath.py +417 -0
  221. synapse/media/media_repository.py +1580 -0
  222. synapse/media/media_storage.py +704 -0
  223. synapse/media/oembed.py +277 -0
  224. synapse/media/preview_html.py +559 -0
  225. synapse/media/storage_provider.py +195 -0
  226. synapse/media/thumbnailer.py +833 -0
  227. synapse/media/url_previewer.py +875 -0
  228. synapse/metrics/__init__.py +754 -0
  229. synapse/metrics/_gc.py +219 -0
  230. synapse/metrics/_reactor_metrics.py +171 -0
  231. synapse/metrics/_types.py +38 -0
  232. synapse/metrics/background_process_metrics.py +556 -0
  233. synapse/metrics/common_usage_metrics.py +94 -0
  234. synapse/metrics/jemalloc.py +248 -0
  235. synapse/module_api/__init__.py +2154 -0
  236. synapse/module_api/callbacks/__init__.py +50 -0
  237. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  238. synapse/module_api/callbacks/media_repository_callbacks.py +160 -0
  239. synapse/module_api/callbacks/ratelimit_callbacks.py +79 -0
  240. synapse/module_api/callbacks/spamchecker_callbacks.py +1113 -0
  241. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +599 -0
  242. synapse/module_api/errors.py +42 -0
  243. synapse/notifier.py +972 -0
  244. synapse/push/__init__.py +212 -0
  245. synapse/push/bulk_push_rule_evaluator.py +637 -0
  246. synapse/push/clientformat.py +126 -0
  247. synapse/push/emailpusher.py +333 -0
  248. synapse/push/httppusher.py +564 -0
  249. synapse/push/mailer.py +1012 -0
  250. synapse/push/presentable_names.py +216 -0
  251. synapse/push/push_tools.py +114 -0
  252. synapse/push/push_types.py +141 -0
  253. synapse/push/pusher.py +87 -0
  254. synapse/push/pusherpool.py +501 -0
  255. synapse/push/rulekinds.py +33 -0
  256. synapse/py.typed +0 -0
  257. synapse/replication/__init__.py +20 -0
  258. synapse/replication/http/__init__.py +68 -0
  259. synapse/replication/http/_base.py +468 -0
  260. synapse/replication/http/account_data.py +297 -0
  261. synapse/replication/http/deactivate_account.py +81 -0
  262. synapse/replication/http/delayed_events.py +62 -0
  263. synapse/replication/http/devices.py +254 -0
  264. synapse/replication/http/federation.py +334 -0
  265. synapse/replication/http/login.py +106 -0
  266. synapse/replication/http/membership.py +364 -0
  267. synapse/replication/http/presence.py +133 -0
  268. synapse/replication/http/push.py +156 -0
  269. synapse/replication/http/register.py +172 -0
  270. synapse/replication/http/send_events.py +182 -0
  271. synapse/replication/http/state.py +82 -0
  272. synapse/replication/http/streams.py +101 -0
  273. synapse/replication/tcp/__init__.py +56 -0
  274. synapse/replication/tcp/client.py +552 -0
  275. synapse/replication/tcp/commands.py +569 -0
  276. synapse/replication/tcp/context.py +41 -0
  277. synapse/replication/tcp/external_cache.py +156 -0
  278. synapse/replication/tcp/handler.py +942 -0
  279. synapse/replication/tcp/protocol.py +608 -0
  280. synapse/replication/tcp/redis.py +509 -0
  281. synapse/replication/tcp/resource.py +348 -0
  282. synapse/replication/tcp/streams/__init__.py +96 -0
  283. synapse/replication/tcp/streams/_base.py +766 -0
  284. synapse/replication/tcp/streams/events.py +287 -0
  285. synapse/replication/tcp/streams/federation.py +92 -0
  286. synapse/replication/tcp/streams/partial_state.py +80 -0
  287. synapse/res/providers.json +29 -0
  288. synapse/res/templates/_base.html +29 -0
  289. synapse/res/templates/account_previously_renewed.html +6 -0
  290. synapse/res/templates/account_renewed.html +6 -0
  291. synapse/res/templates/add_threepid.html +8 -0
  292. synapse/res/templates/add_threepid.txt +6 -0
  293. synapse/res/templates/add_threepid_failure.html +7 -0
  294. synapse/res/templates/add_threepid_success.html +6 -0
  295. synapse/res/templates/already_in_use.html +12 -0
  296. synapse/res/templates/already_in_use.txt +10 -0
  297. synapse/res/templates/auth_success.html +21 -0
  298. synapse/res/templates/invalid_token.html +6 -0
  299. synapse/res/templates/mail-Element.css +7 -0
  300. synapse/res/templates/mail-Vector.css +7 -0
  301. synapse/res/templates/mail-expiry.css +4 -0
  302. synapse/res/templates/mail.css +156 -0
  303. synapse/res/templates/notice_expiry.html +46 -0
  304. synapse/res/templates/notice_expiry.txt +7 -0
  305. synapse/res/templates/notif.html +51 -0
  306. synapse/res/templates/notif.txt +22 -0
  307. synapse/res/templates/notif_mail.html +59 -0
  308. synapse/res/templates/notif_mail.txt +10 -0
  309. synapse/res/templates/password_reset.html +10 -0
  310. synapse/res/templates/password_reset.txt +7 -0
  311. synapse/res/templates/password_reset_confirmation.html +15 -0
  312. synapse/res/templates/password_reset_failure.html +7 -0
  313. synapse/res/templates/password_reset_success.html +6 -0
  314. synapse/res/templates/recaptcha.html +42 -0
  315. synapse/res/templates/registration.html +12 -0
  316. synapse/res/templates/registration.txt +10 -0
  317. synapse/res/templates/registration_failure.html +6 -0
  318. synapse/res/templates/registration_success.html +6 -0
  319. synapse/res/templates/registration_token.html +18 -0
  320. synapse/res/templates/room.html +33 -0
  321. synapse/res/templates/room.txt +9 -0
  322. synapse/res/templates/sso.css +129 -0
  323. synapse/res/templates/sso_account_deactivated.html +25 -0
  324. synapse/res/templates/sso_auth_account_details.html +186 -0
  325. synapse/res/templates/sso_auth_account_details.js +116 -0
  326. synapse/res/templates/sso_auth_bad_user.html +26 -0
  327. synapse/res/templates/sso_auth_confirm.html +27 -0
  328. synapse/res/templates/sso_auth_success.html +26 -0
  329. synapse/res/templates/sso_error.html +71 -0
  330. synapse/res/templates/sso_footer.html +19 -0
  331. synapse/res/templates/sso_login_idp_picker.html +60 -0
  332. synapse/res/templates/sso_new_user_consent.html +30 -0
  333. synapse/res/templates/sso_partial_profile.html +19 -0
  334. synapse/res/templates/sso_redirect_confirm.html +39 -0
  335. synapse/res/templates/style.css +33 -0
  336. synapse/res/templates/terms.html +27 -0
  337. synapse/rest/__init__.py +197 -0
  338. synapse/rest/admin/__init__.py +390 -0
  339. synapse/rest/admin/_base.py +72 -0
  340. synapse/rest/admin/background_updates.py +171 -0
  341. synapse/rest/admin/devices.py +221 -0
  342. synapse/rest/admin/event_reports.py +173 -0
  343. synapse/rest/admin/events.py +69 -0
  344. synapse/rest/admin/experimental_features.py +137 -0
  345. synapse/rest/admin/federation.py +243 -0
  346. synapse/rest/admin/media.py +540 -0
  347. synapse/rest/admin/registration_tokens.py +358 -0
  348. synapse/rest/admin/rooms.py +1061 -0
  349. synapse/rest/admin/scheduled_tasks.py +70 -0
  350. synapse/rest/admin/server_notice_servlet.py +132 -0
  351. synapse/rest/admin/statistics.py +132 -0
  352. synapse/rest/admin/username_available.py +58 -0
  353. synapse/rest/admin/users.py +1608 -0
  354. synapse/rest/client/__init__.py +20 -0
  355. synapse/rest/client/_base.py +113 -0
  356. synapse/rest/client/account.py +930 -0
  357. synapse/rest/client/account_data.py +319 -0
  358. synapse/rest/client/account_validity.py +103 -0
  359. synapse/rest/client/appservice_ping.py +125 -0
  360. synapse/rest/client/auth.py +218 -0
  361. synapse/rest/client/auth_metadata.py +122 -0
  362. synapse/rest/client/capabilities.py +121 -0
  363. synapse/rest/client/delayed_events.py +111 -0
  364. synapse/rest/client/devices.py +587 -0
  365. synapse/rest/client/directory.py +211 -0
  366. synapse/rest/client/events.py +116 -0
  367. synapse/rest/client/filter.py +112 -0
  368. synapse/rest/client/initial_sync.py +65 -0
  369. synapse/rest/client/keys.py +678 -0
  370. synapse/rest/client/knock.py +104 -0
  371. synapse/rest/client/login.py +754 -0
  372. synapse/rest/client/login_token_request.py +127 -0
  373. synapse/rest/client/logout.py +93 -0
  374. synapse/rest/client/matrixrtc.py +52 -0
  375. synapse/rest/client/media.py +286 -0
  376. synapse/rest/client/mutual_rooms.py +93 -0
  377. synapse/rest/client/notifications.py +137 -0
  378. synapse/rest/client/openid.py +109 -0
  379. synapse/rest/client/password_policy.py +69 -0
  380. synapse/rest/client/presence.py +131 -0
  381. synapse/rest/client/profile.py +291 -0
  382. synapse/rest/client/push_rule.py +331 -0
  383. synapse/rest/client/pusher.py +181 -0
  384. synapse/rest/client/read_marker.py +104 -0
  385. synapse/rest/client/receipts.py +165 -0
  386. synapse/rest/client/register.py +1067 -0
  387. synapse/rest/client/relations.py +138 -0
  388. synapse/rest/client/rendezvous.py +76 -0
  389. synapse/rest/client/reporting.py +207 -0
  390. synapse/rest/client/room.py +1669 -0
  391. synapse/rest/client/room_keys.py +426 -0
  392. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  393. synapse/rest/client/sendtodevice.py +85 -0
  394. synapse/rest/client/sync.py +1131 -0
  395. synapse/rest/client/tags.py +129 -0
  396. synapse/rest/client/thirdparty.py +130 -0
  397. synapse/rest/client/thread_subscriptions.py +247 -0
  398. synapse/rest/client/tokenrefresh.py +52 -0
  399. synapse/rest/client/transactions.py +149 -0
  400. synapse/rest/client/user_directory.py +90 -0
  401. synapse/rest/client/versions.py +191 -0
  402. synapse/rest/client/voip.py +88 -0
  403. synapse/rest/consent/__init__.py +0 -0
  404. synapse/rest/consent/consent_resource.py +210 -0
  405. synapse/rest/health.py +38 -0
  406. synapse/rest/key/__init__.py +20 -0
  407. synapse/rest/key/v2/__init__.py +40 -0
  408. synapse/rest/key/v2/local_key_resource.py +125 -0
  409. synapse/rest/key/v2/remote_key_resource.py +302 -0
  410. synapse/rest/media/__init__.py +0 -0
  411. synapse/rest/media/config_resource.py +53 -0
  412. synapse/rest/media/create_resource.py +90 -0
  413. synapse/rest/media/download_resource.py +110 -0
  414. synapse/rest/media/media_repository_resource.py +113 -0
  415. synapse/rest/media/preview_url_resource.py +77 -0
  416. synapse/rest/media/thumbnail_resource.py +142 -0
  417. synapse/rest/media/upload_resource.py +187 -0
  418. synapse/rest/media/v1/__init__.py +39 -0
  419. synapse/rest/media/v1/_base.py +23 -0
  420. synapse/rest/media/v1/media_storage.py +23 -0
  421. synapse/rest/media/v1/storage_provider.py +23 -0
  422. synapse/rest/synapse/__init__.py +20 -0
  423. synapse/rest/synapse/client/__init__.py +93 -0
  424. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  425. synapse/rest/synapse/client/jwks.py +77 -0
  426. synapse/rest/synapse/client/new_user_consent.py +115 -0
  427. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  428. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  429. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  430. synapse/rest/synapse/client/password_reset.py +129 -0
  431. synapse/rest/synapse/client/pick_idp.py +107 -0
  432. synapse/rest/synapse/client/pick_username.py +153 -0
  433. synapse/rest/synapse/client/rendezvous.py +58 -0
  434. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  435. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  436. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  437. synapse/rest/synapse/client/sso_register.py +56 -0
  438. synapse/rest/synapse/client/unsubscribe.py +88 -0
  439. synapse/rest/synapse/mas/__init__.py +71 -0
  440. synapse/rest/synapse/mas/_base.py +55 -0
  441. synapse/rest/synapse/mas/devices.py +239 -0
  442. synapse/rest/synapse/mas/users.py +469 -0
  443. synapse/rest/well_known.py +148 -0
  444. synapse/server.py +1258 -0
  445. synapse/server_notices/__init__.py +0 -0
  446. synapse/server_notices/consent_server_notices.py +136 -0
  447. synapse/server_notices/resource_limits_server_notices.py +215 -0
  448. synapse/server_notices/server_notices_manager.py +388 -0
  449. synapse/server_notices/server_notices_sender.py +67 -0
  450. synapse/server_notices/worker_server_notices_sender.py +46 -0
  451. synapse/spam_checker_api/__init__.py +31 -0
  452. synapse/state/__init__.py +1022 -0
  453. synapse/state/v1.py +370 -0
  454. synapse/state/v2.py +985 -0
  455. synapse/static/client/login/index.html +47 -0
  456. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  457. synapse/static/client/login/js/login.js +291 -0
  458. synapse/static/client/login/spinner.gif +0 -0
  459. synapse/static/client/login/style.css +79 -0
  460. synapse/static/index.html +63 -0
  461. synapse/storage/__init__.py +43 -0
  462. synapse/storage/_base.py +245 -0
  463. synapse/storage/admin_client_config.py +26 -0
  464. synapse/storage/background_updates.py +1189 -0
  465. synapse/storage/controllers/__init__.py +57 -0
  466. synapse/storage/controllers/persist_events.py +1239 -0
  467. synapse/storage/controllers/purge_events.py +456 -0
  468. synapse/storage/controllers/state.py +954 -0
  469. synapse/storage/controllers/stats.py +119 -0
  470. synapse/storage/database.py +2720 -0
  471. synapse/storage/databases/__init__.py +175 -0
  472. synapse/storage/databases/main/__init__.py +424 -0
  473. synapse/storage/databases/main/account_data.py +1060 -0
  474. synapse/storage/databases/main/appservice.py +473 -0
  475. synapse/storage/databases/main/cache.py +911 -0
  476. synapse/storage/databases/main/censor_events.py +225 -0
  477. synapse/storage/databases/main/client_ips.py +817 -0
  478. synapse/storage/databases/main/delayed_events.py +560 -0
  479. synapse/storage/databases/main/deviceinbox.py +1272 -0
  480. synapse/storage/databases/main/devices.py +2581 -0
  481. synapse/storage/databases/main/directory.py +212 -0
  482. synapse/storage/databases/main/e2e_room_keys.py +690 -0
  483. synapse/storage/databases/main/end_to_end_keys.py +1896 -0
  484. synapse/storage/databases/main/event_federation.py +2509 -0
  485. synapse/storage/databases/main/event_push_actions.py +1937 -0
  486. synapse/storage/databases/main/events.py +3746 -0
  487. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  488. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  489. synapse/storage/databases/main/events_worker.py +2784 -0
  490. synapse/storage/databases/main/experimental_features.py +130 -0
  491. synapse/storage/databases/main/filtering.py +231 -0
  492. synapse/storage/databases/main/keys.py +291 -0
  493. synapse/storage/databases/main/lock.py +553 -0
  494. synapse/storage/databases/main/media_repository.py +1070 -0
  495. synapse/storage/databases/main/metrics.py +460 -0
  496. synapse/storage/databases/main/monthly_active_users.py +443 -0
  497. synapse/storage/databases/main/openid.py +61 -0
  498. synapse/storage/databases/main/presence.py +511 -0
  499. synapse/storage/databases/main/profile.py +541 -0
  500. synapse/storage/databases/main/purge_events.py +511 -0
  501. synapse/storage/databases/main/push_rule.py +972 -0
  502. synapse/storage/databases/main/pusher.py +794 -0
  503. synapse/storage/databases/main/receipts.py +1342 -0
  504. synapse/storage/databases/main/registration.py +3076 -0
  505. synapse/storage/databases/main/rejections.py +38 -0
  506. synapse/storage/databases/main/relations.py +1118 -0
  507. synapse/storage/databases/main/room.py +2781 -0
  508. synapse/storage/databases/main/roommember.py +2112 -0
  509. synapse/storage/databases/main/search.py +941 -0
  510. synapse/storage/databases/main/session.py +151 -0
  511. synapse/storage/databases/main/signatures.py +94 -0
  512. synapse/storage/databases/main/sliding_sync.py +603 -0
  513. synapse/storage/databases/main/state.py +1006 -0
  514. synapse/storage/databases/main/state_deltas.py +329 -0
  515. synapse/storage/databases/main/stats.py +791 -0
  516. synapse/storage/databases/main/stream.py +2580 -0
  517. synapse/storage/databases/main/tags.py +360 -0
  518. synapse/storage/databases/main/task_scheduler.py +225 -0
  519. synapse/storage/databases/main/thread_subscriptions.py +591 -0
  520. synapse/storage/databases/main/transactions.py +681 -0
  521. synapse/storage/databases/main/ui_auth.py +420 -0
  522. synapse/storage/databases/main/user_directory.py +1331 -0
  523. synapse/storage/databases/main/user_erasure_store.py +117 -0
  524. synapse/storage/databases/state/__init__.py +22 -0
  525. synapse/storage/databases/state/bg_updates.py +499 -0
  526. synapse/storage/databases/state/deletion.py +558 -0
  527. synapse/storage/databases/state/store.py +949 -0
  528. synapse/storage/engines/__init__.py +70 -0
  529. synapse/storage/engines/_base.py +154 -0
  530. synapse/storage/engines/postgres.py +261 -0
  531. synapse/storage/engines/sqlite.py +199 -0
  532. synapse/storage/invite_rule.py +112 -0
  533. synapse/storage/keys.py +40 -0
  534. synapse/storage/prepare_database.py +731 -0
  535. synapse/storage/push_rule.py +28 -0
  536. synapse/storage/roommember.py +89 -0
  537. synapse/storage/schema/README.md +4 -0
  538. synapse/storage/schema/__init__.py +182 -0
  539. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  540. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  541. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  543. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  544. synapse/storage/schema/common/schema_version.sql +60 -0
  545. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  546. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  547. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  548. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  549. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  550. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  551. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  552. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  553. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  554. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  555. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  556. synapse/storage/schema/main/delta/16/users.sql +56 -0
  557. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  558. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  559. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  560. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  561. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  562. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  563. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  564. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  565. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  566. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  567. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  568. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  569. synapse/storage/schema/main/delta/25/fts.py +81 -0
  570. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  571. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  572. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  573. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  574. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  575. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  576. synapse/storage/schema/main/delta/27/ts.py +61 -0
  577. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  578. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  579. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  580. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  581. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  582. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  583. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  584. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  585. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  586. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  587. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  588. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  589. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  590. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  591. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  592. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  593. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  594. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  595. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  596. synapse/storage/schema/main/delta/32/events.sql +35 -0
  597. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  598. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  599. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  600. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  601. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  602. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  604. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  605. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  606. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  607. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  608. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  609. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  610. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  611. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  612. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  613. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  614. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  615. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  616. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  617. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  618. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  619. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  620. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  621. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  622. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  623. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  624. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  625. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  626. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  627. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  628. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  629. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  630. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  631. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  632. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  633. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  634. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  635. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  636. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  637. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  638. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  639. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  640. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  641. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  642. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  643. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  644. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  645. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  646. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  647. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  648. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  649. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  650. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  651. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  652. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  653. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  654. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  655. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  656. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  657. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  658. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  659. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  660. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  661. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  662. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  663. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  664. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  665. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  666. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  667. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  668. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  669. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  670. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  671. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  672. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  673. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  674. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  675. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  676. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  678. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  679. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  680. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  681. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  682. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  683. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  684. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  685. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  686. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  687. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  688. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  689. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  690. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  691. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  692. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  694. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  695. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  697. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  698. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  699. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  700. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  701. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  702. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  703. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  704. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  706. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  707. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  708. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  712. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  713. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  714. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  715. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  716. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  717. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  718. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  719. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  720. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  721. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  722. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  723. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  724. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  725. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  726. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  731. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  732. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  733. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  734. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  735. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  737. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  738. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  740. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  741. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  742. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  743. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  744. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  745. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  746. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  747. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  748. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  749. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  751. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  752. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  753. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  754. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  755. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  756. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  757. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  758. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  759. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  760. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  761. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  762. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  763. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  764. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  765. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  766. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  767. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  768. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  769. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  771. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  772. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  773. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  774. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  776. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  777. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  778. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  781. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  782. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  783. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  784. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  785. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  786. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  787. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  788. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  789. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  791. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  792. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  793. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  794. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  795. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  796. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  797. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  798. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  799. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  800. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  801. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  802. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  803. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  804. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  805. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  806. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  807. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  809. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  810. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  811. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  812. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  813. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  814. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  815. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  816. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  817. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  818. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  819. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  820. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  821. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  822. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  823. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  824. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  825. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  826. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  827. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  828. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  829. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  830. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  831. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  833. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  834. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  835. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  836. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  837. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  838. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  839. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  840. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  841. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  843. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  844. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  845. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  846. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  847. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  848. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  850. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  851. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  852. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  853. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  854. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  855. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  856. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  857. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  858. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  859. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  860. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  862. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  863. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  865. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  866. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  867. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  868. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  869. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  870. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  871. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  872. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  873. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  874. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  875. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  876. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  877. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  878. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  879. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  880. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  881. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  882. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  884. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  885. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  886. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  887. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  888. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  889. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  890. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  892. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  893. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  894. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  896. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  897. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  898. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  902. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  903. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  904. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  905. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  906. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  907. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  908. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  910. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  911. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  913. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  914. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  915. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  916. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  917. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  918. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  919. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  920. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  921. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  922. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  923. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  924. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  925. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  926. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  927. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  928. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  929. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  930. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  931. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  932. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  933. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  934. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  935. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  936. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  937. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  938. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  939. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  940. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  941. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  942. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  943. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  944. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  947. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  948. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  949. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  950. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  951. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  952. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  954. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  955. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  956. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  958. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  959. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  960. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  961. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  962. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  963. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  964. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  965. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  966. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  968. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +185 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +909 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +92 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +909 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +415 -0
  1007. synapse/types/state.py +635 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +170 -0
  1010. synapse/util/async_helpers.py +1067 -0
  1011. synapse/util/batching_queue.py +202 -0
  1012. synapse/util/caches/__init__.py +300 -0
  1013. synapse/util/caches/cached_call.py +143 -0
  1014. synapse/util/caches/deferred_cache.py +530 -0
  1015. synapse/util/caches/descriptors.py +694 -0
  1016. synapse/util/caches/dictionary_cache.py +350 -0
  1017. synapse/util/caches/expiringcache.py +251 -0
  1018. synapse/util/caches/lrucache.py +977 -0
  1019. synapse/util/caches/response_cache.py +323 -0
  1020. synapse/util/caches/stream_change_cache.py +370 -0
  1021. synapse/util/caches/treecache.py +189 -0
  1022. synapse/util/caches/ttlcache.py +197 -0
  1023. synapse/util/cancellation.py +63 -0
  1024. synapse/util/check_dependencies.py +335 -0
  1025. synapse/util/clock.py +500 -0
  1026. synapse/util/constants.py +22 -0
  1027. synapse/util/daemonize.py +165 -0
  1028. synapse/util/distributor.py +159 -0
  1029. synapse/util/events.py +134 -0
  1030. synapse/util/file_consumer.py +164 -0
  1031. synapse/util/frozenutils.py +57 -0
  1032. synapse/util/gai_resolver.py +180 -0
  1033. synapse/util/hash.py +38 -0
  1034. synapse/util/httpresourcetree.py +108 -0
  1035. synapse/util/iterutils.py +189 -0
  1036. synapse/util/json.py +56 -0
  1037. synapse/util/linked_list.py +156 -0
  1038. synapse/util/logcontext.py +46 -0
  1039. synapse/util/logformatter.py +28 -0
  1040. synapse/util/macaroons.py +325 -0
  1041. synapse/util/manhole.py +191 -0
  1042. synapse/util/metrics.py +340 -0
  1043. synapse/util/module_loader.py +116 -0
  1044. synapse/util/msisdn.py +51 -0
  1045. synapse/util/patch_inline_callbacks.py +250 -0
  1046. synapse/util/pydantic_models.py +56 -0
  1047. synapse/util/ratelimitutils.py +420 -0
  1048. synapse/util/retryutils.py +339 -0
  1049. synapse/util/rlimit.py +42 -0
  1050. synapse/util/rust.py +134 -0
  1051. synapse/util/sentinel.py +21 -0
  1052. synapse/util/stringutils.py +293 -0
  1053. synapse/util/task_scheduler.py +493 -0
  1054. synapse/util/templates.py +126 -0
  1055. synapse/util/threepids.py +123 -0
  1056. synapse/util/wheel_timer.py +112 -0
  1057. synapse/visibility.py +836 -0
@@ -0,0 +1,1067 @@
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, Optional
25
+
26
+ from twisted.web.server import Request
27
+
28
+ import synapse
29
+ import synapse.api.auth
30
+ import synapse.types
31
+ from synapse.api.constants import (
32
+ APP_SERVICE_REGISTRATION_TYPE,
33
+ ApprovalNoticeMedium,
34
+ LoginType,
35
+ )
36
+ from synapse.api.errors import (
37
+ Codes,
38
+ InteractiveAuthIncompleteError,
39
+ NotApprovedError,
40
+ SynapseError,
41
+ ThreepidValidationError,
42
+ UnrecognizedRequestError,
43
+ )
44
+ from synapse.api.ratelimiting import Ratelimiter
45
+ from synapse.config import ConfigError
46
+ from synapse.config.homeserver import HomeServerConfig
47
+ from synapse.config.ratelimiting import FederationRatelimitSettings
48
+ from synapse.config.server import is_threepid_reserved
49
+ from synapse.handlers.auth import AuthHandler
50
+ from synapse.handlers.ui_auth import UIAuthSessionDataConstants
51
+ from synapse.http.server import HttpServer, finish_request, respond_with_html
52
+ from synapse.http.servlet import (
53
+ RestServlet,
54
+ assert_params_in_dict,
55
+ parse_json_object_from_request,
56
+ parse_string,
57
+ )
58
+ from synapse.http.site import SynapseRequest
59
+ from synapse.metrics import SERVER_NAME_LABEL, threepid_send_requests
60
+ from synapse.push.mailer import Mailer
61
+ from synapse.types import JsonDict
62
+ from synapse.util.msisdn import phone_number_to_msisdn
63
+ from synapse.util.ratelimitutils import FederationRateLimiter
64
+ from synapse.util.stringutils import assert_valid_client_secret, random_string
65
+ from synapse.util.threepids import (
66
+ canonicalise_email,
67
+ check_3pid_allowed,
68
+ validate_email,
69
+ )
70
+
71
+ from ._base import client_patterns, interactive_auth_handler
72
+
73
+ if TYPE_CHECKING:
74
+ from synapse.server import HomeServer
75
+
76
+ logger = logging.getLogger(__name__)
77
+
78
+
79
+ class EmailRegisterRequestTokenRestServlet(RestServlet):
80
+ PATTERNS = client_patterns("/register/email/requestToken$")
81
+
82
+ def __init__(self, hs: "HomeServer"):
83
+ super().__init__()
84
+ self.hs = hs
85
+ self.server_name = hs.hostname
86
+ self.identity_handler = hs.get_identity_handler()
87
+ self.config = hs.config
88
+
89
+ if self.hs.config.email.can_verify_email:
90
+ self.registration_mailer = Mailer(
91
+ hs=self.hs,
92
+ app_name=self.config.email.email_app_name,
93
+ template_html=self.config.email.email_registration_template_html,
94
+ template_text=self.config.email.email_registration_template_text,
95
+ )
96
+ self.already_in_use_mailer = Mailer(
97
+ hs=self.hs,
98
+ app_name=self.config.email.email_app_name,
99
+ template_html=self.config.email.email_already_in_use_template_html,
100
+ template_text=self.config.email.email_already_in_use_template_text,
101
+ )
102
+
103
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
104
+ if not self.hs.config.email.can_verify_email:
105
+ logger.warning(
106
+ "Email registration has been disabled due to lack of email config"
107
+ )
108
+ raise SynapseError(
109
+ 400, "Email-based registration has been disabled on this server"
110
+ )
111
+ body = parse_json_object_from_request(request)
112
+
113
+ assert_params_in_dict(body, ["client_secret", "email", "send_attempt"])
114
+
115
+ # Extract params from body
116
+ client_secret = body["client_secret"]
117
+ assert_valid_client_secret(client_secret)
118
+
119
+ # For emails, canonicalise the address.
120
+ # We store all email addresses canonicalised in the DB.
121
+ # (See on_POST in EmailThreepidRequestTokenRestServlet
122
+ # in synapse/rest/client/account.py)
123
+ try:
124
+ email = validate_email(body["email"])
125
+ except ValueError as e:
126
+ raise SynapseError(400, str(e))
127
+ send_attempt = body["send_attempt"]
128
+ next_link = body.get("next_link") # Optional param
129
+
130
+ if not await check_3pid_allowed(self.hs, "email", email, registration=True):
131
+ raise SynapseError(
132
+ 403,
133
+ "Your email domain is not authorized to register on this server",
134
+ Codes.THREEPID_DENIED,
135
+ )
136
+
137
+ await self.identity_handler.ratelimit_request_token_requests(
138
+ request, "email", email
139
+ )
140
+
141
+ existing_user_id = await self.hs.get_datastores().main.get_user_id_by_threepid(
142
+ "email", email
143
+ )
144
+
145
+ if existing_user_id is not None:
146
+ if self.hs.config.server.request_token_inhibit_3pid_errors:
147
+ # Make the client think the operation succeeded. See the rationale in the
148
+ # comments for request_token_inhibit_3pid_errors.
149
+ # Still send an email to warn the user that an account already exists.
150
+ # Also wait for some random amount of time between 100ms and 1s to make it
151
+ # look like we did something.
152
+ await self.already_in_use_mailer.send_already_in_use_mail(email)
153
+ await self.hs.get_clock().sleep(random.randint(1, 10) / 10)
154
+ return 200, {"sid": random_string(16)}
155
+
156
+ raise SynapseError(400, "Email is already in use", Codes.THREEPID_IN_USE)
157
+
158
+ # Send registration emails from Synapse
159
+ sid = await self.identity_handler.send_threepid_validation(
160
+ email,
161
+ client_secret,
162
+ send_attempt,
163
+ self.registration_mailer.send_registration_mail,
164
+ next_link,
165
+ )
166
+
167
+ threepid_send_requests.labels(
168
+ type="email",
169
+ reason="register",
170
+ **{SERVER_NAME_LABEL: self.server_name},
171
+ ).observe(send_attempt)
172
+
173
+ # Wrap the session id in a JSON object
174
+ return 200, {"sid": sid}
175
+
176
+
177
+ class MsisdnRegisterRequestTokenRestServlet(RestServlet):
178
+ PATTERNS = client_patterns("/register/msisdn/requestToken$")
179
+
180
+ def __init__(self, hs: "HomeServer"):
181
+ super().__init__()
182
+ self.hs = hs
183
+ self.server_name = hs.hostname
184
+ self.identity_handler = hs.get_identity_handler()
185
+
186
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
187
+ body = parse_json_object_from_request(request)
188
+
189
+ assert_params_in_dict(
190
+ body, ["client_secret", "country", "phone_number", "send_attempt"]
191
+ )
192
+ client_secret = body["client_secret"]
193
+ assert_valid_client_secret(client_secret)
194
+ country = body["country"]
195
+ phone_number = body["phone_number"]
196
+ send_attempt = body["send_attempt"]
197
+ next_link = body.get("next_link") # Optional param
198
+
199
+ msisdn = phone_number_to_msisdn(country, phone_number)
200
+
201
+ if not await check_3pid_allowed(self.hs, "msisdn", msisdn, registration=True):
202
+ raise SynapseError(
203
+ 403,
204
+ "Phone numbers are not authorized to register on this server",
205
+ Codes.THREEPID_DENIED,
206
+ )
207
+
208
+ await self.identity_handler.ratelimit_request_token_requests(
209
+ request, "msisdn", msisdn
210
+ )
211
+
212
+ existing_user_id = await self.hs.get_datastores().main.get_user_id_by_threepid(
213
+ "msisdn", msisdn
214
+ )
215
+
216
+ if existing_user_id is not None:
217
+ if self.hs.config.server.request_token_inhibit_3pid_errors:
218
+ # Make the client think the operation succeeded. See the rationale in the
219
+ # comments for request_token_inhibit_3pid_errors.
220
+ # Also wait for some random amount of time between 100ms and 1s to make it
221
+ # look like we did something.
222
+ await self.hs.get_clock().sleep(random.randint(1, 10) / 10)
223
+ return 200, {"sid": random_string(16)}
224
+
225
+ raise SynapseError(
226
+ 400, "Phone number is already in use", Codes.THREEPID_IN_USE
227
+ )
228
+
229
+ if not self.hs.config.registration.account_threepid_delegate_msisdn:
230
+ logger.warning(
231
+ "No upstream msisdn account_threepid_delegate configured on the server to "
232
+ "handle this request"
233
+ )
234
+ raise SynapseError(
235
+ 400, "Registration by phone number is not supported on this homeserver"
236
+ )
237
+
238
+ ret = await self.identity_handler.requestMsisdnToken(
239
+ self.hs.config.registration.account_threepid_delegate_msisdn,
240
+ country,
241
+ phone_number,
242
+ client_secret,
243
+ send_attempt,
244
+ next_link,
245
+ )
246
+
247
+ threepid_send_requests.labels(
248
+ type="msisdn",
249
+ reason="register",
250
+ **{SERVER_NAME_LABEL: self.server_name},
251
+ ).observe(send_attempt)
252
+
253
+ return 200, ret
254
+
255
+
256
+ class RegistrationSubmitTokenServlet(RestServlet):
257
+ """Handles registration 3PID validation token submission"""
258
+
259
+ PATTERNS = client_patterns(
260
+ "/registration/(?P<medium>[^/]*)/submit_token$", releases=(), unstable=True
261
+ )
262
+
263
+ def __init__(self, hs: "HomeServer"):
264
+ super().__init__()
265
+ self.hs = hs
266
+ self.auth = hs.get_auth()
267
+ self.config = hs.config
268
+ self.clock = hs.get_clock()
269
+ self.store = hs.get_datastores().main
270
+
271
+ if self.config.email.can_verify_email:
272
+ self._failure_email_template = (
273
+ self.config.email.email_registration_template_failure_html
274
+ )
275
+
276
+ async def on_GET(self, request: Request, medium: str) -> None:
277
+ if medium != "email":
278
+ raise SynapseError(
279
+ 400, "This medium is currently not supported for registration"
280
+ )
281
+ if not self.config.email.can_verify_email:
282
+ logger.warning(
283
+ "User registration via email has been disabled due to lack of email config"
284
+ )
285
+ raise SynapseError(
286
+ 400, "Email-based registration is disabled on this server"
287
+ )
288
+
289
+ sid = parse_string(request, "sid", required=True)
290
+ client_secret = parse_string(request, "client_secret", required=True)
291
+ assert_valid_client_secret(client_secret)
292
+ token = parse_string(request, "token", required=True)
293
+
294
+ # Attempt to validate a 3PID session
295
+ try:
296
+ # Mark the session as valid
297
+ next_link = await self.store.validate_threepid_session(
298
+ sid, client_secret, token, self.clock.time_msec()
299
+ )
300
+
301
+ # Perform a 302 redirect if next_link is set
302
+ if next_link:
303
+ if next_link.startswith("file:///"):
304
+ logger.warning(
305
+ "Not redirecting to next_link as it is a local file: address"
306
+ )
307
+ else:
308
+ request.setResponseCode(302)
309
+ request.setHeader("Location", next_link)
310
+ finish_request(request)
311
+ return None
312
+
313
+ # Otherwise show the success template
314
+ html = self.config.email.email_registration_template_success_html_content
315
+ status_code = 200
316
+ except ThreepidValidationError as e:
317
+ status_code = e.code
318
+
319
+ # Show a failure page with a reason
320
+ template_vars = {"failure_reason": e.msg}
321
+ html = self._failure_email_template.render(**template_vars)
322
+
323
+ respond_with_html(request, status_code, html)
324
+
325
+
326
+ class UsernameAvailabilityRestServlet(RestServlet):
327
+ PATTERNS = client_patterns("/register/available")
328
+
329
+ def __init__(self, hs: "HomeServer"):
330
+ super().__init__()
331
+ self.hs = hs
332
+ self.server_name = hs.hostname
333
+ self.registration_handler = hs.get_registration_handler()
334
+ self.ratelimiter = FederationRateLimiter(
335
+ our_server_name=self.server_name,
336
+ clock=hs.get_clock(),
337
+ config=FederationRatelimitSettings(
338
+ # Time window of 2s
339
+ window_size=2000,
340
+ # Artificially delay requests if rate > sleep_limit/window_size
341
+ sleep_limit=1,
342
+ # Amount of artificial delay to apply
343
+ sleep_delay=1000,
344
+ # Error with 429 if more than reject_limit requests are queued
345
+ reject_limit=1,
346
+ # Allow 1 request at a time
347
+ concurrent=1,
348
+ ),
349
+ )
350
+
351
+ self.inhibit_user_in_use_error = (
352
+ hs.config.registration.inhibit_user_in_use_error
353
+ )
354
+
355
+ async def on_GET(self, request: Request) -> tuple[int, JsonDict]:
356
+ if not self.hs.config.registration.enable_registration:
357
+ raise SynapseError(
358
+ 403, "Registration has been disabled", errcode=Codes.FORBIDDEN
359
+ )
360
+
361
+ if self.inhibit_user_in_use_error:
362
+ return 200, {"available": True}
363
+
364
+ ip = request.getClientAddress().host
365
+ with self.ratelimiter.ratelimit(ip) as wait_deferred:
366
+ await wait_deferred
367
+
368
+ username = parse_string(request, "username", required=True)
369
+
370
+ await self.registration_handler.check_username(username)
371
+
372
+ return 200, {"available": True}
373
+
374
+
375
+ class RegistrationTokenValidityRestServlet(RestServlet):
376
+ """Check the validity of a registration token.
377
+
378
+ Example:
379
+
380
+ GET /_matrix/client/v1/register/m.login.registration_token/validity?token=abcd
381
+
382
+ 200 OK
383
+
384
+ {
385
+ "valid": true
386
+ }
387
+ """
388
+
389
+ PATTERNS = client_patterns(
390
+ f"/register/{LoginType.REGISTRATION_TOKEN}/validity",
391
+ releases=("v1",),
392
+ )
393
+ CATEGORY = "Registration/login requests"
394
+
395
+ def __init__(self, hs: "HomeServer"):
396
+ super().__init__()
397
+ self.hs = hs
398
+ self.store = hs.get_datastores().main
399
+ self.ratelimiter = Ratelimiter(
400
+ store=self.store,
401
+ clock=hs.get_clock(),
402
+ cfg=hs.config.ratelimiting.rc_registration_token_validity,
403
+ )
404
+
405
+ async def on_GET(self, request: Request) -> tuple[int, JsonDict]:
406
+ await self.ratelimiter.ratelimit(None, (request.getClientAddress().host,))
407
+
408
+ if not self.hs.config.registration.enable_registration:
409
+ raise SynapseError(
410
+ 403, "Registration has been disabled", errcode=Codes.FORBIDDEN
411
+ )
412
+
413
+ token = parse_string(request, "token", required=True)
414
+ valid = await self.store.registration_token_is_valid(token)
415
+
416
+ return 200, {"valid": valid}
417
+
418
+
419
+ class RegisterRestServlet(RestServlet):
420
+ PATTERNS = client_patterns("/register$")
421
+ CATEGORY = "Registration/login requests"
422
+
423
+ def __init__(self, hs: "HomeServer"):
424
+ super().__init__()
425
+
426
+ self.hs = hs
427
+ self.auth = hs.get_auth()
428
+ self.store = hs.get_datastores().main
429
+ self.auth_handler = hs.get_auth_handler()
430
+ self.registration_handler = hs.get_registration_handler()
431
+ self.identity_handler = hs.get_identity_handler()
432
+ self.room_member_handler = hs.get_room_member_handler()
433
+ self.macaroon_gen = hs.get_macaroon_generator()
434
+ self.ratelimiter = hs.get_registration_ratelimiter()
435
+ self.password_policy_handler = hs.get_password_policy_handler()
436
+ self.clock = hs.get_clock()
437
+ self.password_auth_provider = hs.get_password_auth_provider()
438
+ self._registration_enabled = self.hs.config.registration.enable_registration
439
+ self._refresh_tokens_enabled = (
440
+ hs.config.registration.refreshable_access_token_lifetime is not None
441
+ )
442
+ self._inhibit_user_in_use_error = (
443
+ hs.config.registration.inhibit_user_in_use_error
444
+ )
445
+
446
+ self._require_approval = (
447
+ hs.config.experimental.msc3866.enabled
448
+ and hs.config.experimental.msc3866.require_approval_for_new_accounts
449
+ )
450
+
451
+ self._registration_flows = _calculate_registration_flows(
452
+ hs.config, self.auth_handler
453
+ )
454
+
455
+ @interactive_auth_handler
456
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
457
+ body = parse_json_object_from_request(request)
458
+
459
+ client_addr = request.getClientAddress().host
460
+
461
+ await self.ratelimiter.ratelimit(None, client_addr, update=False)
462
+
463
+ kind = parse_string(request, "kind", default="user")
464
+
465
+ if kind == "guest":
466
+ ret = await self._do_guest_registration(body, address=client_addr)
467
+ return ret
468
+ elif kind != "user":
469
+ raise UnrecognizedRequestError(
470
+ f"Do not understand membership kind: {kind}",
471
+ )
472
+
473
+ # Check if the clients wishes for this registration to issue a refresh
474
+ # token.
475
+ client_requested_refresh_tokens = body.get("refresh_token", False)
476
+ if not isinstance(client_requested_refresh_tokens, bool):
477
+ raise SynapseError(400, "`refresh_token` should be true or false.")
478
+
479
+ should_issue_refresh_token = (
480
+ self._refresh_tokens_enabled and client_requested_refresh_tokens
481
+ )
482
+
483
+ # Pull out the provided username and do basic sanity checks early since
484
+ # the auth layer will store these in sessions.
485
+ desired_username = None
486
+ if "username" in body:
487
+ desired_username = body["username"]
488
+ if not isinstance(desired_username, str) or len(desired_username) > 512:
489
+ raise SynapseError(400, "Invalid username")
490
+
491
+ # fork off as soon as possible for ASes which have completely
492
+ # different registration flows to normal users
493
+
494
+ # == Application Service Registration ==
495
+ if body.get("type") == APP_SERVICE_REGISTRATION_TYPE:
496
+ if not self.auth.has_access_token(request):
497
+ raise SynapseError(
498
+ 400,
499
+ "Appservice token must be provided when using a type of m.login.application_service",
500
+ )
501
+
502
+ # XXX we should check that desired_username is valid. Currently
503
+ # we give appservices carte blanche for any insanity in mxids,
504
+ # because the IRC bridges rely on being able to register stupid
505
+ # IDs.
506
+
507
+ access_token = self.auth.get_access_token_from_request(request)
508
+
509
+ # Desired username is either a string or None.
510
+ if desired_username is None:
511
+ raise SynapseError(400, "Desired Username is missing or not a string")
512
+
513
+ result = await self._do_appservice_registration(
514
+ desired_username,
515
+ access_token,
516
+ body,
517
+ should_issue_refresh_token=should_issue_refresh_token,
518
+ )
519
+
520
+ return 200, result
521
+ elif self.auth.has_access_token(request):
522
+ raise SynapseError(
523
+ 400,
524
+ "An access token should not be provided on requests to /register (except if type is m.login.application_service)",
525
+ )
526
+
527
+ # == Normal User Registration == (everyone else)
528
+ if not self._registration_enabled:
529
+ raise SynapseError(403, "Registration has been disabled", Codes.FORBIDDEN)
530
+
531
+ # For regular registration, convert the provided username to lowercase
532
+ # before attempting to register it. This should mean that people who try
533
+ # to register with upper-case in their usernames don't get a nasty surprise.
534
+ #
535
+ # Note that we treat usernames case-insensitively in login, so they are
536
+ # free to carry on imagining that their username is CrAzYh4cKeR if that
537
+ # keeps them happy.
538
+ if desired_username is not None:
539
+ desired_username = desired_username.lower()
540
+
541
+ # Check if this account is upgrading from a guest account.
542
+ guest_access_token = body.get("guest_access_token", None)
543
+
544
+ # Pull out the provided password and do basic sanity checks early.
545
+ #
546
+ # Note that we remove the password from the body since the auth layer
547
+ # will store the body in the session and we don't want a plaintext
548
+ # password store there.
549
+ password = body.pop("password", None)
550
+ if password is not None:
551
+ if not isinstance(password, str) or len(password) > 512:
552
+ raise SynapseError(400, "Invalid password")
553
+ self.password_policy_handler.validate_password(password)
554
+
555
+ if "initial_device_display_name" in body and password is None:
556
+ # ignore 'initial_device_display_name' if sent without
557
+ # a password to work around a client bug where it sent
558
+ # the 'initial_device_display_name' param alone, wiping out
559
+ # the original registration params
560
+ logger.warning("Ignoring initial_device_display_name without password")
561
+ del body["initial_device_display_name"]
562
+
563
+ session_id = self.auth_handler.get_session_id(body)
564
+ registered_user_id = None
565
+ password_hash = None
566
+ if session_id:
567
+ # if we get a registered user id out of here, it means we previously
568
+ # registered a user for this session, so we could just return the
569
+ # user here. We carry on and go through the auth checks though,
570
+ # for paranoia.
571
+ registered_user_id = await self.auth_handler.get_session_data(
572
+ session_id, UIAuthSessionDataConstants.REGISTERED_USER_ID, None
573
+ )
574
+ # Extract the previously-hashed password from the session.
575
+ password_hash = await self.auth_handler.get_session_data(
576
+ session_id, UIAuthSessionDataConstants.PASSWORD_HASH, None
577
+ )
578
+
579
+ # Ensure that the username is valid.
580
+ if desired_username is not None:
581
+ await self.registration_handler.check_username(
582
+ desired_username,
583
+ guest_access_token=guest_access_token,
584
+ assigned_user_id=registered_user_id,
585
+ inhibit_user_in_use_error=self._inhibit_user_in_use_error,
586
+ )
587
+
588
+ # Check if the user-interactive authentication flows are complete, if
589
+ # not this will raise a user-interactive auth error.
590
+ try:
591
+ auth_result, params, session_id = await self.auth_handler.check_ui_auth(
592
+ self._registration_flows,
593
+ request,
594
+ body,
595
+ "register a new account",
596
+ )
597
+ except InteractiveAuthIncompleteError as e:
598
+ # The user needs to provide more steps to complete auth.
599
+ #
600
+ # Hash the password and store it with the session since the client
601
+ # is not required to provide the password again.
602
+ #
603
+ # If a password hash was previously stored we will not attempt to
604
+ # re-hash and store it for efficiency. This assumes the password
605
+ # does not change throughout the authentication flow, but this
606
+ # should be fine since the data is meant to be consistent.
607
+ if not password_hash and password:
608
+ password_hash = await self.auth_handler.hash(password)
609
+ await self.auth_handler.set_session_data(
610
+ e.session_id,
611
+ UIAuthSessionDataConstants.PASSWORD_HASH,
612
+ password_hash,
613
+ )
614
+ raise
615
+
616
+ # Check that we're not trying to register a denied 3pid.
617
+ #
618
+ # the user-facing checks will probably already have happened in
619
+ # /register/email/requestToken when we requested a 3pid, but that's not
620
+ # guaranteed.
621
+ if auth_result:
622
+ for login_type in [LoginType.EMAIL_IDENTITY, LoginType.MSISDN]:
623
+ if login_type in auth_result:
624
+ medium = auth_result[login_type]["medium"]
625
+ address = auth_result[login_type]["address"]
626
+
627
+ if not await check_3pid_allowed(
628
+ self.hs, medium, address, registration=True
629
+ ):
630
+ raise SynapseError(
631
+ 403,
632
+ "Third party identifiers (email/phone numbers)"
633
+ + " are not authorized on this server",
634
+ Codes.THREEPID_DENIED,
635
+ )
636
+
637
+ if registered_user_id is not None:
638
+ logger.info(
639
+ "Already registered user ID %r for this session", registered_user_id
640
+ )
641
+ # don't re-register the threepids
642
+ registered = False
643
+ else:
644
+ # If we have a password in this request, prefer it. Otherwise, there
645
+ # might be a password hash from an earlier request.
646
+ if password:
647
+ password_hash = await self.auth_handler.hash(password)
648
+ if not password_hash:
649
+ raise SynapseError(400, "Missing params: password", Codes.MISSING_PARAM)
650
+
651
+ desired_username = await (
652
+ self.password_auth_provider.get_username_for_registration(
653
+ auth_result,
654
+ params,
655
+ )
656
+ )
657
+
658
+ if desired_username is None:
659
+ desired_username = params.get("username", None)
660
+
661
+ guest_access_token = params.get("guest_access_token", None)
662
+
663
+ if desired_username is not None:
664
+ desired_username = desired_username.lower()
665
+
666
+ threepid = None
667
+ if auth_result:
668
+ threepid = auth_result.get(LoginType.EMAIL_IDENTITY)
669
+
670
+ # Also check that we're not trying to register a 3pid that's already
671
+ # been registered.
672
+ #
673
+ # This has probably happened in /register/email/requestToken as well,
674
+ # but if a user hits this endpoint twice then clicks on each link from
675
+ # the two activation emails, they would register the same 3pid twice.
676
+ for login_type in [LoginType.EMAIL_IDENTITY, LoginType.MSISDN]:
677
+ if login_type in auth_result:
678
+ medium = auth_result[login_type]["medium"]
679
+ address = auth_result[login_type]["address"]
680
+ # For emails, canonicalise the address.
681
+ # We store all email addresses canonicalised in the DB.
682
+ # (See on_POST in EmailThreepidRequestTokenRestServlet
683
+ # in synapse/rest/client/account.py)
684
+ if medium == "email":
685
+ try:
686
+ address = canonicalise_email(address)
687
+ except ValueError as e:
688
+ raise SynapseError(400, str(e))
689
+
690
+ existing_user_id = await self.store.get_user_id_by_threepid(
691
+ medium, address
692
+ )
693
+
694
+ if existing_user_id is not None:
695
+ raise SynapseError(
696
+ 400,
697
+ "%s is already in use" % medium,
698
+ Codes.THREEPID_IN_USE,
699
+ )
700
+
701
+ entries = await self.store.get_user_agents_ips_to_ui_auth_session(
702
+ session_id
703
+ )
704
+
705
+ display_name = await (
706
+ self.password_auth_provider.get_displayname_for_registration(
707
+ auth_result, params
708
+ )
709
+ )
710
+
711
+ registered_user_id = await self.registration_handler.register_user(
712
+ localpart=desired_username,
713
+ password_hash=password_hash,
714
+ guest_access_token=guest_access_token,
715
+ threepid=threepid,
716
+ default_display_name=display_name,
717
+ address=client_addr,
718
+ user_agent_ips=entries,
719
+ )
720
+ # Necessary due to auth checks prior to the threepid being
721
+ # written to the db
722
+ if threepid:
723
+ if is_threepid_reserved(
724
+ self.hs.config.server.mau_limits_reserved_threepids, threepid
725
+ ):
726
+ await self.store.upsert_monthly_active_user(registered_user_id)
727
+
728
+ # Remember that the user account has been registered (and the user
729
+ # ID it was registered with, since it might not have been specified).
730
+ await self.auth_handler.set_session_data(
731
+ session_id,
732
+ UIAuthSessionDataConstants.REGISTERED_USER_ID,
733
+ registered_user_id,
734
+ )
735
+
736
+ registered = True
737
+
738
+ return_dict = await self._create_registration_details(
739
+ registered_user_id,
740
+ params,
741
+ should_issue_refresh_token=should_issue_refresh_token,
742
+ )
743
+
744
+ if registered:
745
+ # Check if a token was used to authenticate registration
746
+ registration_token = await self.auth_handler.get_session_data(
747
+ session_id,
748
+ UIAuthSessionDataConstants.REGISTRATION_TOKEN,
749
+ )
750
+ if registration_token:
751
+ # Increment the `completed` counter for the token
752
+ await self.store.use_registration_token(registration_token)
753
+ # Indicate that the token has been successfully used so that
754
+ # pending is not decremented again when expiring old UIA sessions.
755
+ await self.store.mark_ui_auth_stage_complete(
756
+ session_id,
757
+ LoginType.REGISTRATION_TOKEN,
758
+ True,
759
+ )
760
+
761
+ await self.registration_handler.post_registration_actions(
762
+ user_id=registered_user_id,
763
+ auth_result=auth_result,
764
+ access_token=return_dict.get("access_token"),
765
+ )
766
+
767
+ if self._require_approval:
768
+ raise NotApprovedError(
769
+ msg="This account needs to be approved by an administrator before it can be used.",
770
+ approval_notice_medium=ApprovalNoticeMedium.NONE,
771
+ )
772
+
773
+ return 200, return_dict
774
+
775
+ async def _do_appservice_registration(
776
+ self,
777
+ username: str,
778
+ as_token: str,
779
+ body: JsonDict,
780
+ should_issue_refresh_token: bool = False,
781
+ ) -> JsonDict:
782
+ user_id, appservice = await self.registration_handler.appservice_register(
783
+ username, as_token
784
+ )
785
+ if appservice.msc4190_device_management and not body.get("inhibit_login"):
786
+ raise SynapseError(
787
+ 400,
788
+ "This appservice has MSC4190 enabled, so the inhibit_login parameter must be set to true.",
789
+ errcode=Codes.APPSERVICE_LOGIN_UNSUPPORTED,
790
+ )
791
+
792
+ return await self._create_registration_details(
793
+ user_id,
794
+ body,
795
+ is_appservice_ghost=True,
796
+ should_issue_refresh_token=should_issue_refresh_token,
797
+ )
798
+
799
+ async def _create_registration_details(
800
+ self,
801
+ user_id: str,
802
+ params: JsonDict,
803
+ is_appservice_ghost: bool = False,
804
+ should_issue_refresh_token: bool = False,
805
+ ) -> JsonDict:
806
+ """Complete registration of newly-registered user
807
+
808
+ Allocates device_id if one was not given; also creates access_token.
809
+
810
+ Args:
811
+ user_id: full canonical @user:id
812
+ params: registration parameters, from which we pull device_id,
813
+ initial_device_name and inhibit_login
814
+ is_appservice_ghost
815
+ should_issue_refresh_token: True if this registration should issue
816
+ a refresh token alongside the access token.
817
+ Returns:
818
+ dictionary for response from /register
819
+ """
820
+ result: JsonDict = {
821
+ "user_id": user_id,
822
+ "home_server": self.hs.hostname,
823
+ }
824
+ # We don't want to log the user in if we're going to deny them access because
825
+ # they need to be approved first.
826
+ if not params.get("inhibit_login", False) and not self._require_approval:
827
+ device_id = params.get("device_id")
828
+ initial_display_name = params.get("initial_device_display_name")
829
+ (
830
+ device_id,
831
+ access_token,
832
+ valid_until_ms,
833
+ refresh_token,
834
+ ) = await self.registration_handler.register_device(
835
+ user_id,
836
+ device_id,
837
+ initial_display_name,
838
+ is_guest=False,
839
+ is_appservice_ghost=is_appservice_ghost,
840
+ should_issue_refresh_token=should_issue_refresh_token,
841
+ )
842
+
843
+ result.update({"access_token": access_token, "device_id": device_id})
844
+
845
+ if valid_until_ms is not None:
846
+ expires_in_ms = valid_until_ms - self.clock.time_msec()
847
+ result["expires_in_ms"] = expires_in_ms
848
+
849
+ if refresh_token is not None:
850
+ result["refresh_token"] = refresh_token
851
+
852
+ return result
853
+
854
+ async def _do_guest_registration(
855
+ self, params: JsonDict, address: Optional[str] = None
856
+ ) -> tuple[int, JsonDict]:
857
+ if not self.hs.config.registration.allow_guest_access:
858
+ raise SynapseError(403, "Guest access is disabled")
859
+ user_id = await self.registration_handler.register_user(
860
+ make_guest=True, address=address
861
+ )
862
+
863
+ # we don't allow guests to specify their own device_id, because
864
+ # we have nowhere to store it.
865
+ device_id = synapse.api.auth.GUEST_DEVICE_ID
866
+ initial_display_name = params.get("initial_device_display_name")
867
+ (
868
+ device_id,
869
+ access_token,
870
+ valid_until_ms,
871
+ refresh_token,
872
+ ) = await self.registration_handler.register_device(
873
+ user_id, device_id, initial_display_name, is_guest=True
874
+ )
875
+
876
+ result: JsonDict = {
877
+ "user_id": user_id,
878
+ "device_id": device_id,
879
+ "access_token": access_token,
880
+ "home_server": self.hs.hostname,
881
+ }
882
+
883
+ if valid_until_ms is not None:
884
+ expires_in_ms = valid_until_ms - self.clock.time_msec()
885
+ result["expires_in_ms"] = expires_in_ms
886
+
887
+ if refresh_token is not None:
888
+ result["refresh_token"] = refresh_token
889
+
890
+ return 200, result
891
+
892
+
893
+ class RegisterAppServiceOnlyRestServlet(RestServlet):
894
+ """An alternative registration API endpoint that only allows ASes to register
895
+
896
+ This replaces the regular /register endpoint if MSC3861. There are two notable
897
+ differences with the regular /register endpoint:
898
+ - It only allows the `m.login.application_service` login type
899
+ - It does not create a device or access token for the just-registered user
900
+
901
+ Note that the exact behaviour of this endpoint is not yet finalised. It should be
902
+ just good enough to make most ASes work.
903
+ """
904
+
905
+ PATTERNS = client_patterns("/register$")
906
+ CATEGORY = "Registration/login requests"
907
+
908
+ def __init__(self, hs: "HomeServer"):
909
+ super().__init__()
910
+
911
+ self.auth = hs.get_auth()
912
+ self.registration_handler = hs.get_registration_handler()
913
+ self.ratelimiter = hs.get_registration_ratelimiter()
914
+
915
+ @interactive_auth_handler
916
+ async def on_POST(self, request: SynapseRequest) -> tuple[int, JsonDict]:
917
+ body = parse_json_object_from_request(request)
918
+
919
+ client_addr = request.getClientAddress().host
920
+
921
+ await self.ratelimiter.ratelimit(None, client_addr, update=False)
922
+
923
+ # Allow only ASes to use this API.
924
+ if body.get("type") != APP_SERVICE_REGISTRATION_TYPE:
925
+ raise SynapseError(
926
+ 403,
927
+ "Registration has been disabled. Only m.login.application_service registrations are allowed.",
928
+ errcode=Codes.FORBIDDEN,
929
+ )
930
+ if not body.get("inhibit_login"):
931
+ raise SynapseError(
932
+ 400,
933
+ "This server uses OAuth2, so the inhibit_login parameter must be set to true for appservice registrations.",
934
+ errcode=Codes.APPSERVICE_LOGIN_UNSUPPORTED,
935
+ )
936
+
937
+ kind = parse_string(request, "kind", default="user")
938
+
939
+ if kind == "guest":
940
+ raise SynapseError(403, "Guest access is disabled")
941
+ elif kind != "user":
942
+ raise UnrecognizedRequestError(
943
+ f"Do not understand membership kind: {kind}",
944
+ )
945
+
946
+ # Pull out the provided username and do basic sanity checks early since
947
+ # the auth layer will store these in sessions.
948
+ desired_username = body.get("username")
949
+ if not isinstance(desired_username, str) or len(desired_username) > 512:
950
+ raise SynapseError(400, "Invalid username")
951
+
952
+ if not self.auth.has_access_token(request):
953
+ raise SynapseError(
954
+ 400,
955
+ "Appservice token must be provided when using a type of m.login.application_service",
956
+ )
957
+
958
+ # XXX we should check that desired_username is valid. Currently
959
+ # we give appservices carte blanche for any insanity in mxids,
960
+ # because the IRC bridges rely on being able to register stupid
961
+ # IDs.
962
+
963
+ as_token = self.auth.get_access_token_from_request(request)
964
+
965
+ user_id, _ = await self.registration_handler.appservice_register(
966
+ desired_username, as_token
967
+ )
968
+ return 200, {"user_id": user_id}
969
+
970
+
971
+ def _calculate_registration_flows(
972
+ config: HomeServerConfig, auth_handler: AuthHandler
973
+ ) -> list[list[str]]:
974
+ """Get a suitable flows list for registration
975
+
976
+ Args:
977
+ config: server configuration
978
+ auth_handler: authorization handler
979
+
980
+ Returns: a list of supported flows
981
+ """
982
+ # FIXME: need a better error than "no auth flow found" for scenarios
983
+ # where we required 3PID for registration but the user didn't give one
984
+ require_email = "email" in config.registration.registrations_require_3pid
985
+ require_msisdn = "msisdn" in config.registration.registrations_require_3pid
986
+
987
+ show_msisdn = True
988
+ show_email = True
989
+
990
+ if config.registration.disable_msisdn_registration:
991
+ show_msisdn = False
992
+ require_msisdn = False
993
+
994
+ enabled_auth_types = auth_handler.get_enabled_auth_types()
995
+ if LoginType.EMAIL_IDENTITY not in enabled_auth_types:
996
+ show_email = False
997
+ if require_email:
998
+ raise ConfigError(
999
+ "Configuration requires email address at registration, but email "
1000
+ "validation is not configured"
1001
+ )
1002
+
1003
+ if LoginType.MSISDN not in enabled_auth_types:
1004
+ show_msisdn = False
1005
+ if require_msisdn:
1006
+ raise ConfigError(
1007
+ "Configuration requires msisdn at registration, but msisdn "
1008
+ "validation is not configured"
1009
+ )
1010
+
1011
+ flows = []
1012
+
1013
+ # only support 3PIDless registration if no 3PIDs are required
1014
+ if not require_email and not require_msisdn:
1015
+ # Add a dummy step here, otherwise if a client completes
1016
+ # recaptcha first we'll assume they were going for this flow
1017
+ # and complete the request, when they could have been trying to
1018
+ # complete one of the flows with email/msisdn auth.
1019
+ flows.append([LoginType.DUMMY])
1020
+
1021
+ # only support the email-only flow if we don't require MSISDN 3PIDs
1022
+ if show_email and not require_msisdn:
1023
+ flows.append([LoginType.EMAIL_IDENTITY])
1024
+
1025
+ # only support the MSISDN-only flow if we don't require email 3PIDs
1026
+ if show_msisdn and not require_email:
1027
+ flows.append([LoginType.MSISDN])
1028
+
1029
+ if show_email and show_msisdn:
1030
+ # always let users provide both MSISDN & email
1031
+ flows.append([LoginType.MSISDN, LoginType.EMAIL_IDENTITY])
1032
+
1033
+ # Add a flow that doesn't require any 3pids, if the config requests it.
1034
+ if config.registration.enable_registration_token_3pid_bypass:
1035
+ flows.append([LoginType.REGISTRATION_TOKEN])
1036
+
1037
+ # Prepend m.login.terms to all flows if we're requiring consent
1038
+ if config.consent.user_consent_at_registration:
1039
+ for flow in flows:
1040
+ flow.insert(0, LoginType.TERMS)
1041
+
1042
+ # Prepend recaptcha to all flows if we're requiring captcha
1043
+ if config.captcha.enable_registration_captcha:
1044
+ for flow in flows:
1045
+ flow.insert(0, LoginType.RECAPTCHA)
1046
+
1047
+ # Prepend registration token to all flows if we're requiring a token
1048
+ if config.registration.registration_requires_token:
1049
+ for flow in flows:
1050
+ if LoginType.REGISTRATION_TOKEN not in flow:
1051
+ flow.insert(0, LoginType.REGISTRATION_TOKEN)
1052
+
1053
+ return flows
1054
+
1055
+
1056
+ def register_servlets(hs: "HomeServer", http_server: HttpServer) -> None:
1057
+ if hs.config.mas.enabled or hs.config.experimental.msc3861.enabled:
1058
+ RegisterAppServiceOnlyRestServlet(hs).register(http_server)
1059
+ return
1060
+
1061
+ if hs.config.worker.worker_app is None:
1062
+ EmailRegisterRequestTokenRestServlet(hs).register(http_server)
1063
+ MsisdnRegisterRequestTokenRestServlet(hs).register(http_server)
1064
+ RegistrationSubmitTokenServlet(hs).register(http_server)
1065
+ UsernameAvailabilityRestServlet(hs).register(http_server)
1066
+ RegistrationTokenValidityRestServlet(hs).register(http_server)
1067
+ RegisterRestServlet(hs).register(http_server)