matrix-synapse 1.143.0rc2__cp310-abi3-manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1058) hide show
  1. matrix_synapse-1.143.0rc2.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.143.0rc2.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.143.0rc2.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.143.0rc2.dist-info/METADATA +385 -0
  5. matrix_synapse-1.143.0rc2.dist-info/RECORD +1058 -0
  6. matrix_synapse-1.143.0rc2.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.143.0rc2.dist-info/entry_points.txt +14 -0
  8. synapse/__init__.py +97 -0
  9. synapse/_scripts/__init__.py +0 -0
  10. synapse/_scripts/export_signing_key.py +109 -0
  11. synapse/_scripts/generate_config.py +83 -0
  12. synapse/_scripts/generate_log_config.py +56 -0
  13. synapse/_scripts/generate_signing_key.py +55 -0
  14. synapse/_scripts/generate_workers_map.py +318 -0
  15. synapse/_scripts/hash_password.py +95 -0
  16. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  17. synapse/_scripts/register_new_matrix_user.py +402 -0
  18. synapse/_scripts/review_recent_signups.py +212 -0
  19. synapse/_scripts/synapse_port_db.py +1604 -0
  20. synapse/_scripts/synctl.py +365 -0
  21. synapse/_scripts/update_synapse_database.py +130 -0
  22. synapse/api/__init__.py +20 -0
  23. synapse/api/auth/__init__.py +207 -0
  24. synapse/api/auth/base.py +406 -0
  25. synapse/api/auth/internal.py +299 -0
  26. synapse/api/auth/mas.py +436 -0
  27. synapse/api/auth/msc3861_delegated.py +617 -0
  28. synapse/api/auth_blocking.py +144 -0
  29. synapse/api/constants.py +362 -0
  30. synapse/api/errors.py +907 -0
  31. synapse/api/filtering.py +537 -0
  32. synapse/api/presence.py +102 -0
  33. synapse/api/ratelimiting.py +480 -0
  34. synapse/api/room_versions.py +535 -0
  35. synapse/api/urls.py +118 -0
  36. synapse/app/__init__.py +60 -0
  37. synapse/app/_base.py +862 -0
  38. synapse/app/admin_cmd.py +388 -0
  39. synapse/app/appservice.py +30 -0
  40. synapse/app/client_reader.py +30 -0
  41. synapse/app/complement_fork_starter.py +206 -0
  42. synapse/app/event_creator.py +29 -0
  43. synapse/app/federation_reader.py +30 -0
  44. synapse/app/federation_sender.py +30 -0
  45. synapse/app/frontend_proxy.py +30 -0
  46. synapse/app/generic_worker.py +474 -0
  47. synapse/app/homeserver.py +505 -0
  48. synapse/app/media_repository.py +30 -0
  49. synapse/app/phone_stats_home.py +296 -0
  50. synapse/app/pusher.py +30 -0
  51. synapse/app/synchrotron.py +30 -0
  52. synapse/app/user_dir.py +31 -0
  53. synapse/appservice/__init__.py +458 -0
  54. synapse/appservice/api.py +567 -0
  55. synapse/appservice/scheduler.py +564 -0
  56. synapse/config/__init__.py +27 -0
  57. synapse/config/__main__.py +62 -0
  58. synapse/config/_base.py +1106 -0
  59. synapse/config/_base.pyi +215 -0
  60. synapse/config/_util.py +99 -0
  61. synapse/config/account_validity.py +116 -0
  62. synapse/config/api.py +141 -0
  63. synapse/config/appservice.py +210 -0
  64. synapse/config/auth.py +80 -0
  65. synapse/config/auto_accept_invites.py +43 -0
  66. synapse/config/background_updates.py +44 -0
  67. synapse/config/cache.py +231 -0
  68. synapse/config/captcha.py +90 -0
  69. synapse/config/cas.py +116 -0
  70. synapse/config/consent.py +73 -0
  71. synapse/config/database.py +184 -0
  72. synapse/config/emailconfig.py +367 -0
  73. synapse/config/experimental.py +595 -0
  74. synapse/config/federation.py +114 -0
  75. synapse/config/homeserver.py +141 -0
  76. synapse/config/jwt.py +55 -0
  77. synapse/config/key.py +447 -0
  78. synapse/config/logger.py +390 -0
  79. synapse/config/mas.py +192 -0
  80. synapse/config/matrixrtc.py +66 -0
  81. synapse/config/metrics.py +84 -0
  82. synapse/config/modules.py +40 -0
  83. synapse/config/oembed.py +185 -0
  84. synapse/config/oidc.py +509 -0
  85. synapse/config/password_auth_providers.py +82 -0
  86. synapse/config/push.py +64 -0
  87. synapse/config/ratelimiting.py +254 -0
  88. synapse/config/redis.py +74 -0
  89. synapse/config/registration.py +296 -0
  90. synapse/config/repository.py +311 -0
  91. synapse/config/retention.py +162 -0
  92. synapse/config/room.py +88 -0
  93. synapse/config/room_directory.py +165 -0
  94. synapse/config/saml2.py +251 -0
  95. synapse/config/server.py +1170 -0
  96. synapse/config/server_notices.py +84 -0
  97. synapse/config/spam_checker.py +66 -0
  98. synapse/config/sso.py +121 -0
  99. synapse/config/stats.py +54 -0
  100. synapse/config/third_party_event_rules.py +40 -0
  101. synapse/config/tls.py +192 -0
  102. synapse/config/tracer.py +71 -0
  103. synapse/config/user_directory.py +47 -0
  104. synapse/config/user_types.py +42 -0
  105. synapse/config/voip.py +59 -0
  106. synapse/config/workers.py +642 -0
  107. synapse/crypto/__init__.py +20 -0
  108. synapse/crypto/context_factory.py +278 -0
  109. synapse/crypto/event_signing.py +194 -0
  110. synapse/crypto/keyring.py +931 -0
  111. synapse/event_auth.py +1266 -0
  112. synapse/events/__init__.py +667 -0
  113. synapse/events/auto_accept_invites.py +216 -0
  114. synapse/events/builder.py +387 -0
  115. synapse/events/presence_router.py +243 -0
  116. synapse/events/snapshot.py +559 -0
  117. synapse/events/utils.py +924 -0
  118. synapse/events/validator.py +305 -0
  119. synapse/federation/__init__.py +22 -0
  120. synapse/federation/federation_base.py +382 -0
  121. synapse/federation/federation_client.py +2132 -0
  122. synapse/federation/federation_server.py +1540 -0
  123. synapse/federation/persistence.py +70 -0
  124. synapse/federation/send_queue.py +531 -0
  125. synapse/federation/sender/__init__.py +1164 -0
  126. synapse/federation/sender/per_destination_queue.py +886 -0
  127. synapse/federation/sender/transaction_manager.py +210 -0
  128. synapse/federation/transport/__init__.py +28 -0
  129. synapse/federation/transport/client.py +1199 -0
  130. synapse/federation/transport/server/__init__.py +334 -0
  131. synapse/federation/transport/server/_base.py +429 -0
  132. synapse/federation/transport/server/federation.py +910 -0
  133. synapse/federation/units.py +133 -0
  134. synapse/handlers/__init__.py +20 -0
  135. synapse/handlers/account.py +162 -0
  136. synapse/handlers/account_data.py +360 -0
  137. synapse/handlers/account_validity.py +361 -0
  138. synapse/handlers/admin.py +615 -0
  139. synapse/handlers/appservice.py +989 -0
  140. synapse/handlers/auth.py +2481 -0
  141. synapse/handlers/cas.py +413 -0
  142. synapse/handlers/deactivate_account.py +363 -0
  143. synapse/handlers/delayed_events.py +599 -0
  144. synapse/handlers/device.py +1870 -0
  145. synapse/handlers/devicemessage.py +399 -0
  146. synapse/handlers/directory.py +545 -0
  147. synapse/handlers/e2e_keys.py +1834 -0
  148. synapse/handlers/e2e_room_keys.py +455 -0
  149. synapse/handlers/event_auth.py +390 -0
  150. synapse/handlers/events.py +201 -0
  151. synapse/handlers/federation.py +2039 -0
  152. synapse/handlers/federation_event.py +2419 -0
  153. synapse/handlers/identity.py +812 -0
  154. synapse/handlers/initial_sync.py +528 -0
  155. synapse/handlers/jwt.py +120 -0
  156. synapse/handlers/message.py +2347 -0
  157. synapse/handlers/oidc.py +1801 -0
  158. synapse/handlers/pagination.py +768 -0
  159. synapse/handlers/password_policy.py +102 -0
  160. synapse/handlers/presence.py +2633 -0
  161. synapse/handlers/profile.py +655 -0
  162. synapse/handlers/push_rules.py +164 -0
  163. synapse/handlers/read_marker.py +79 -0
  164. synapse/handlers/receipts.py +351 -0
  165. synapse/handlers/register.py +1059 -0
  166. synapse/handlers/relations.py +623 -0
  167. synapse/handlers/reports.py +98 -0
  168. synapse/handlers/room.py +2448 -0
  169. synapse/handlers/room_list.py +632 -0
  170. synapse/handlers/room_member.py +2365 -0
  171. synapse/handlers/room_member_worker.py +146 -0
  172. synapse/handlers/room_policy.py +186 -0
  173. synapse/handlers/room_summary.py +1057 -0
  174. synapse/handlers/saml.py +524 -0
  175. synapse/handlers/search.py +723 -0
  176. synapse/handlers/send_email.py +209 -0
  177. synapse/handlers/set_password.py +71 -0
  178. synapse/handlers/sliding_sync/__init__.py +1701 -0
  179. synapse/handlers/sliding_sync/extensions.py +969 -0
  180. synapse/handlers/sliding_sync/room_lists.py +2262 -0
  181. synapse/handlers/sliding_sync/store.py +128 -0
  182. synapse/handlers/sso.py +1291 -0
  183. synapse/handlers/state_deltas.py +82 -0
  184. synapse/handlers/stats.py +321 -0
  185. synapse/handlers/sync.py +3106 -0
  186. synapse/handlers/thread_subscriptions.py +190 -0
  187. synapse/handlers/typing.py +606 -0
  188. synapse/handlers/ui_auth/__init__.py +48 -0
  189. synapse/handlers/ui_auth/checkers.py +332 -0
  190. synapse/handlers/user_directory.py +783 -0
  191. synapse/handlers/worker_lock.py +371 -0
  192. synapse/http/__init__.py +105 -0
  193. synapse/http/additional_resource.py +62 -0
  194. synapse/http/client.py +1373 -0
  195. synapse/http/connectproxyclient.py +316 -0
  196. synapse/http/federation/__init__.py +19 -0
  197. synapse/http/federation/matrix_federation_agent.py +490 -0
  198. synapse/http/federation/srv_resolver.py +196 -0
  199. synapse/http/federation/well_known_resolver.py +367 -0
  200. synapse/http/matrixfederationclient.py +1873 -0
  201. synapse/http/proxy.py +290 -0
  202. synapse/http/proxyagent.py +497 -0
  203. synapse/http/replicationagent.py +202 -0
  204. synapse/http/request_metrics.py +309 -0
  205. synapse/http/server.py +1110 -0
  206. synapse/http/servlet.py +1018 -0
  207. synapse/http/site.py +825 -0
  208. synapse/http/types.py +27 -0
  209. synapse/logging/__init__.py +31 -0
  210. synapse/logging/_remote.py +261 -0
  211. synapse/logging/_terse_json.py +95 -0
  212. synapse/logging/context.py +1209 -0
  213. synapse/logging/formatter.py +62 -0
  214. synapse/logging/handlers.py +99 -0
  215. synapse/logging/loggers.py +25 -0
  216. synapse/logging/opentracing.py +1132 -0
  217. synapse/logging/scopecontextmanager.py +160 -0
  218. synapse/media/_base.py +830 -0
  219. synapse/media/filepath.py +417 -0
  220. synapse/media/media_repository.py +1580 -0
  221. synapse/media/media_storage.py +702 -0
  222. synapse/media/oembed.py +277 -0
  223. synapse/media/preview_html.py +556 -0
  224. synapse/media/storage_provider.py +195 -0
  225. synapse/media/thumbnailer.py +833 -0
  226. synapse/media/url_previewer.py +875 -0
  227. synapse/metrics/__init__.py +748 -0
  228. synapse/metrics/_gc.py +219 -0
  229. synapse/metrics/_reactor_metrics.py +171 -0
  230. synapse/metrics/_types.py +38 -0
  231. synapse/metrics/background_process_metrics.py +555 -0
  232. synapse/metrics/common_usage_metrics.py +94 -0
  233. synapse/metrics/jemalloc.py +248 -0
  234. synapse/module_api/__init__.py +2131 -0
  235. synapse/module_api/callbacks/__init__.py +50 -0
  236. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  237. synapse/module_api/callbacks/media_repository_callbacks.py +157 -0
  238. synapse/module_api/callbacks/ratelimit_callbacks.py +78 -0
  239. synapse/module_api/callbacks/spamchecker_callbacks.py +991 -0
  240. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +592 -0
  241. synapse/module_api/errors.py +42 -0
  242. synapse/notifier.py +970 -0
  243. synapse/push/__init__.py +212 -0
  244. synapse/push/bulk_push_rule_evaluator.py +635 -0
  245. synapse/push/clientformat.py +126 -0
  246. synapse/push/emailpusher.py +333 -0
  247. synapse/push/httppusher.py +564 -0
  248. synapse/push/mailer.py +1010 -0
  249. synapse/push/presentable_names.py +216 -0
  250. synapse/push/push_tools.py +114 -0
  251. synapse/push/push_types.py +141 -0
  252. synapse/push/pusher.py +87 -0
  253. synapse/push/pusherpool.py +501 -0
  254. synapse/push/rulekinds.py +33 -0
  255. synapse/py.typed +0 -0
  256. synapse/replication/__init__.py +20 -0
  257. synapse/replication/http/__init__.py +68 -0
  258. synapse/replication/http/_base.py +468 -0
  259. synapse/replication/http/account_data.py +297 -0
  260. synapse/replication/http/deactivate_account.py +81 -0
  261. synapse/replication/http/delayed_events.py +62 -0
  262. synapse/replication/http/devices.py +254 -0
  263. synapse/replication/http/federation.py +334 -0
  264. synapse/replication/http/login.py +106 -0
  265. synapse/replication/http/membership.py +364 -0
  266. synapse/replication/http/presence.py +133 -0
  267. synapse/replication/http/push.py +156 -0
  268. synapse/replication/http/register.py +172 -0
  269. synapse/replication/http/send_events.py +182 -0
  270. synapse/replication/http/state.py +82 -0
  271. synapse/replication/http/streams.py +101 -0
  272. synapse/replication/tcp/__init__.py +56 -0
  273. synapse/replication/tcp/client.py +552 -0
  274. synapse/replication/tcp/commands.py +569 -0
  275. synapse/replication/tcp/context.py +41 -0
  276. synapse/replication/tcp/external_cache.py +156 -0
  277. synapse/replication/tcp/handler.py +922 -0
  278. synapse/replication/tcp/protocol.py +608 -0
  279. synapse/replication/tcp/redis.py +509 -0
  280. synapse/replication/tcp/resource.py +348 -0
  281. synapse/replication/tcp/streams/__init__.py +96 -0
  282. synapse/replication/tcp/streams/_base.py +765 -0
  283. synapse/replication/tcp/streams/events.py +287 -0
  284. synapse/replication/tcp/streams/federation.py +92 -0
  285. synapse/replication/tcp/streams/partial_state.py +80 -0
  286. synapse/res/providers.json +29 -0
  287. synapse/res/templates/_base.html +29 -0
  288. synapse/res/templates/account_previously_renewed.html +6 -0
  289. synapse/res/templates/account_renewed.html +6 -0
  290. synapse/res/templates/add_threepid.html +8 -0
  291. synapse/res/templates/add_threepid.txt +6 -0
  292. synapse/res/templates/add_threepid_failure.html +7 -0
  293. synapse/res/templates/add_threepid_success.html +6 -0
  294. synapse/res/templates/already_in_use.html +12 -0
  295. synapse/res/templates/already_in_use.txt +10 -0
  296. synapse/res/templates/auth_success.html +21 -0
  297. synapse/res/templates/invalid_token.html +6 -0
  298. synapse/res/templates/mail-Element.css +7 -0
  299. synapse/res/templates/mail-Vector.css +7 -0
  300. synapse/res/templates/mail-expiry.css +4 -0
  301. synapse/res/templates/mail.css +156 -0
  302. synapse/res/templates/notice_expiry.html +46 -0
  303. synapse/res/templates/notice_expiry.txt +7 -0
  304. synapse/res/templates/notif.html +51 -0
  305. synapse/res/templates/notif.txt +22 -0
  306. synapse/res/templates/notif_mail.html +59 -0
  307. synapse/res/templates/notif_mail.txt +10 -0
  308. synapse/res/templates/password_reset.html +10 -0
  309. synapse/res/templates/password_reset.txt +7 -0
  310. synapse/res/templates/password_reset_confirmation.html +15 -0
  311. synapse/res/templates/password_reset_failure.html +7 -0
  312. synapse/res/templates/password_reset_success.html +6 -0
  313. synapse/res/templates/recaptcha.html +42 -0
  314. synapse/res/templates/registration.html +12 -0
  315. synapse/res/templates/registration.txt +10 -0
  316. synapse/res/templates/registration_failure.html +6 -0
  317. synapse/res/templates/registration_success.html +6 -0
  318. synapse/res/templates/registration_token.html +18 -0
  319. synapse/res/templates/room.html +33 -0
  320. synapse/res/templates/room.txt +9 -0
  321. synapse/res/templates/sso.css +129 -0
  322. synapse/res/templates/sso_account_deactivated.html +25 -0
  323. synapse/res/templates/sso_auth_account_details.html +186 -0
  324. synapse/res/templates/sso_auth_account_details.js +116 -0
  325. synapse/res/templates/sso_auth_bad_user.html +26 -0
  326. synapse/res/templates/sso_auth_confirm.html +27 -0
  327. synapse/res/templates/sso_auth_success.html +26 -0
  328. synapse/res/templates/sso_error.html +71 -0
  329. synapse/res/templates/sso_footer.html +19 -0
  330. synapse/res/templates/sso_login_idp_picker.html +60 -0
  331. synapse/res/templates/sso_new_user_consent.html +30 -0
  332. synapse/res/templates/sso_partial_profile.html +19 -0
  333. synapse/res/templates/sso_redirect_confirm.html +39 -0
  334. synapse/res/templates/style.css +33 -0
  335. synapse/res/templates/terms.html +27 -0
  336. synapse/rest/__init__.py +197 -0
  337. synapse/rest/admin/__init__.py +390 -0
  338. synapse/rest/admin/_base.py +72 -0
  339. synapse/rest/admin/background_updates.py +171 -0
  340. synapse/rest/admin/devices.py +221 -0
  341. synapse/rest/admin/event_reports.py +173 -0
  342. synapse/rest/admin/events.py +69 -0
  343. synapse/rest/admin/experimental_features.py +137 -0
  344. synapse/rest/admin/federation.py +243 -0
  345. synapse/rest/admin/media.py +540 -0
  346. synapse/rest/admin/registration_tokens.py +358 -0
  347. synapse/rest/admin/rooms.py +1061 -0
  348. synapse/rest/admin/scheduled_tasks.py +70 -0
  349. synapse/rest/admin/server_notice_servlet.py +132 -0
  350. synapse/rest/admin/statistics.py +132 -0
  351. synapse/rest/admin/username_available.py +58 -0
  352. synapse/rest/admin/users.py +1606 -0
  353. synapse/rest/client/__init__.py +20 -0
  354. synapse/rest/client/_base.py +113 -0
  355. synapse/rest/client/account.py +930 -0
  356. synapse/rest/client/account_data.py +319 -0
  357. synapse/rest/client/account_validity.py +103 -0
  358. synapse/rest/client/appservice_ping.py +125 -0
  359. synapse/rest/client/auth.py +218 -0
  360. synapse/rest/client/auth_metadata.py +122 -0
  361. synapse/rest/client/capabilities.py +121 -0
  362. synapse/rest/client/delayed_events.py +165 -0
  363. synapse/rest/client/devices.py +587 -0
  364. synapse/rest/client/directory.py +211 -0
  365. synapse/rest/client/events.py +116 -0
  366. synapse/rest/client/filter.py +112 -0
  367. synapse/rest/client/initial_sync.py +65 -0
  368. synapse/rest/client/keys.py +678 -0
  369. synapse/rest/client/knock.py +104 -0
  370. synapse/rest/client/login.py +750 -0
  371. synapse/rest/client/login_token_request.py +127 -0
  372. synapse/rest/client/logout.py +93 -0
  373. synapse/rest/client/matrixrtc.py +52 -0
  374. synapse/rest/client/media.py +285 -0
  375. synapse/rest/client/mutual_rooms.py +93 -0
  376. synapse/rest/client/notifications.py +137 -0
  377. synapse/rest/client/openid.py +109 -0
  378. synapse/rest/client/password_policy.py +69 -0
  379. synapse/rest/client/presence.py +131 -0
  380. synapse/rest/client/profile.py +291 -0
  381. synapse/rest/client/push_rule.py +331 -0
  382. synapse/rest/client/pusher.py +181 -0
  383. synapse/rest/client/read_marker.py +104 -0
  384. synapse/rest/client/receipts.py +165 -0
  385. synapse/rest/client/register.py +1067 -0
  386. synapse/rest/client/relations.py +138 -0
  387. synapse/rest/client/rendezvous.py +76 -0
  388. synapse/rest/client/reporting.py +207 -0
  389. synapse/rest/client/room.py +1669 -0
  390. synapse/rest/client/room_keys.py +426 -0
  391. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  392. synapse/rest/client/sendtodevice.py +85 -0
  393. synapse/rest/client/sync.py +1131 -0
  394. synapse/rest/client/tags.py +129 -0
  395. synapse/rest/client/thirdparty.py +130 -0
  396. synapse/rest/client/thread_subscriptions.py +247 -0
  397. synapse/rest/client/tokenrefresh.py +52 -0
  398. synapse/rest/client/transactions.py +149 -0
  399. synapse/rest/client/user_directory.py +90 -0
  400. synapse/rest/client/versions.py +191 -0
  401. synapse/rest/client/voip.py +88 -0
  402. synapse/rest/consent/__init__.py +0 -0
  403. synapse/rest/consent/consent_resource.py +210 -0
  404. synapse/rest/health.py +38 -0
  405. synapse/rest/key/__init__.py +20 -0
  406. synapse/rest/key/v2/__init__.py +40 -0
  407. synapse/rest/key/v2/local_key_resource.py +125 -0
  408. synapse/rest/key/v2/remote_key_resource.py +302 -0
  409. synapse/rest/media/__init__.py +0 -0
  410. synapse/rest/media/config_resource.py +53 -0
  411. synapse/rest/media/create_resource.py +90 -0
  412. synapse/rest/media/download_resource.py +110 -0
  413. synapse/rest/media/media_repository_resource.py +113 -0
  414. synapse/rest/media/preview_url_resource.py +77 -0
  415. synapse/rest/media/thumbnail_resource.py +142 -0
  416. synapse/rest/media/upload_resource.py +187 -0
  417. synapse/rest/media/v1/__init__.py +39 -0
  418. synapse/rest/media/v1/_base.py +23 -0
  419. synapse/rest/media/v1/media_storage.py +23 -0
  420. synapse/rest/media/v1/storage_provider.py +23 -0
  421. synapse/rest/synapse/__init__.py +20 -0
  422. synapse/rest/synapse/client/__init__.py +93 -0
  423. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  424. synapse/rest/synapse/client/jwks.py +77 -0
  425. synapse/rest/synapse/client/new_user_consent.py +115 -0
  426. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  427. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  428. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  429. synapse/rest/synapse/client/password_reset.py +129 -0
  430. synapse/rest/synapse/client/pick_idp.py +107 -0
  431. synapse/rest/synapse/client/pick_username.py +153 -0
  432. synapse/rest/synapse/client/rendezvous.py +58 -0
  433. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  434. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  435. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  436. synapse/rest/synapse/client/sso_register.py +56 -0
  437. synapse/rest/synapse/client/unsubscribe.py +88 -0
  438. synapse/rest/synapse/mas/__init__.py +71 -0
  439. synapse/rest/synapse/mas/_base.py +55 -0
  440. synapse/rest/synapse/mas/devices.py +239 -0
  441. synapse/rest/synapse/mas/users.py +469 -0
  442. synapse/rest/well_known.py +148 -0
  443. synapse/server.py +1257 -0
  444. synapse/server_notices/__init__.py +0 -0
  445. synapse/server_notices/consent_server_notices.py +136 -0
  446. synapse/server_notices/resource_limits_server_notices.py +215 -0
  447. synapse/server_notices/server_notices_manager.py +388 -0
  448. synapse/server_notices/server_notices_sender.py +67 -0
  449. synapse/server_notices/worker_server_notices_sender.py +46 -0
  450. synapse/spam_checker_api/__init__.py +31 -0
  451. synapse/state/__init__.py +1022 -0
  452. synapse/state/v1.py +369 -0
  453. synapse/state/v2.py +984 -0
  454. synapse/static/client/login/index.html +47 -0
  455. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  456. synapse/static/client/login/js/login.js +291 -0
  457. synapse/static/client/login/spinner.gif +0 -0
  458. synapse/static/client/login/style.css +79 -0
  459. synapse/static/index.html +63 -0
  460. synapse/storage/__init__.py +43 -0
  461. synapse/storage/_base.py +245 -0
  462. synapse/storage/admin_client_config.py +25 -0
  463. synapse/storage/background_updates.py +1188 -0
  464. synapse/storage/controllers/__init__.py +57 -0
  465. synapse/storage/controllers/persist_events.py +1237 -0
  466. synapse/storage/controllers/purge_events.py +455 -0
  467. synapse/storage/controllers/state.py +950 -0
  468. synapse/storage/controllers/stats.py +119 -0
  469. synapse/storage/database.py +2719 -0
  470. synapse/storage/databases/__init__.py +175 -0
  471. synapse/storage/databases/main/__init__.py +420 -0
  472. synapse/storage/databases/main/account_data.py +1059 -0
  473. synapse/storage/databases/main/appservice.py +473 -0
  474. synapse/storage/databases/main/cache.py +911 -0
  475. synapse/storage/databases/main/censor_events.py +225 -0
  476. synapse/storage/databases/main/client_ips.py +815 -0
  477. synapse/storage/databases/main/delayed_events.py +562 -0
  478. synapse/storage/databases/main/deviceinbox.py +1271 -0
  479. synapse/storage/databases/main/devices.py +2578 -0
  480. synapse/storage/databases/main/directory.py +212 -0
  481. synapse/storage/databases/main/e2e_room_keys.py +689 -0
  482. synapse/storage/databases/main/end_to_end_keys.py +1894 -0
  483. synapse/storage/databases/main/event_federation.py +2508 -0
  484. synapse/storage/databases/main/event_push_actions.py +1933 -0
  485. synapse/storage/databases/main/events.py +3765 -0
  486. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  487. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  488. synapse/storage/databases/main/events_worker.py +2786 -0
  489. synapse/storage/databases/main/experimental_features.py +130 -0
  490. synapse/storage/databases/main/filtering.py +231 -0
  491. synapse/storage/databases/main/keys.py +291 -0
  492. synapse/storage/databases/main/lock.py +553 -0
  493. synapse/storage/databases/main/media_repository.py +1068 -0
  494. synapse/storage/databases/main/metrics.py +460 -0
  495. synapse/storage/databases/main/monthly_active_users.py +443 -0
  496. synapse/storage/databases/main/openid.py +60 -0
  497. synapse/storage/databases/main/presence.py +509 -0
  498. synapse/storage/databases/main/profile.py +539 -0
  499. synapse/storage/databases/main/purge_events.py +521 -0
  500. synapse/storage/databases/main/push_rule.py +970 -0
  501. synapse/storage/databases/main/pusher.py +793 -0
  502. synapse/storage/databases/main/receipts.py +1341 -0
  503. synapse/storage/databases/main/registration.py +3072 -0
  504. synapse/storage/databases/main/rejections.py +37 -0
  505. synapse/storage/databases/main/relations.py +1116 -0
  506. synapse/storage/databases/main/room.py +2779 -0
  507. synapse/storage/databases/main/roommember.py +2110 -0
  508. synapse/storage/databases/main/search.py +939 -0
  509. synapse/storage/databases/main/session.py +151 -0
  510. synapse/storage/databases/main/signatures.py +94 -0
  511. synapse/storage/databases/main/sliding_sync.py +603 -0
  512. synapse/storage/databases/main/state.py +1002 -0
  513. synapse/storage/databases/main/state_deltas.py +329 -0
  514. synapse/storage/databases/main/stats.py +789 -0
  515. synapse/storage/databases/main/stream.py +2577 -0
  516. synapse/storage/databases/main/tags.py +360 -0
  517. synapse/storage/databases/main/task_scheduler.py +225 -0
  518. synapse/storage/databases/main/thread_subscriptions.py +589 -0
  519. synapse/storage/databases/main/transactions.py +675 -0
  520. synapse/storage/databases/main/ui_auth.py +420 -0
  521. synapse/storage/databases/main/user_directory.py +1330 -0
  522. synapse/storage/databases/main/user_erasure_store.py +117 -0
  523. synapse/storage/databases/state/__init__.py +22 -0
  524. synapse/storage/databases/state/bg_updates.py +497 -0
  525. synapse/storage/databases/state/deletion.py +557 -0
  526. synapse/storage/databases/state/store.py +948 -0
  527. synapse/storage/engines/__init__.py +70 -0
  528. synapse/storage/engines/_base.py +154 -0
  529. synapse/storage/engines/postgres.py +261 -0
  530. synapse/storage/engines/sqlite.py +199 -0
  531. synapse/storage/invite_rule.py +112 -0
  532. synapse/storage/keys.py +40 -0
  533. synapse/storage/prepare_database.py +730 -0
  534. synapse/storage/push_rule.py +28 -0
  535. synapse/storage/roommember.py +88 -0
  536. synapse/storage/schema/README.md +4 -0
  537. synapse/storage/schema/__init__.py +186 -0
  538. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  539. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  540. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  541. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  543. synapse/storage/schema/common/schema_version.sql +60 -0
  544. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  545. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  546. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  547. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  548. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  549. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  550. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  551. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  552. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  553. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  554. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  555. synapse/storage/schema/main/delta/16/users.sql +56 -0
  556. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  557. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  558. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  559. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  560. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  561. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  562. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  563. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  564. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  565. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  566. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  567. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  568. synapse/storage/schema/main/delta/25/fts.py +81 -0
  569. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  570. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  571. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  572. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  573. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  574. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  575. synapse/storage/schema/main/delta/27/ts.py +61 -0
  576. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  577. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  578. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  579. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  580. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  581. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  582. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  583. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  584. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  585. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  586. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  587. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  588. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  589. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  590. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  591. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  592. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  593. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  594. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  595. synapse/storage/schema/main/delta/32/events.sql +35 -0
  596. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  597. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  598. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  599. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  600. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  601. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  602. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  604. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  605. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  606. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  607. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  608. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  609. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  610. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  611. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  612. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  613. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  614. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  615. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  616. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  617. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  618. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  619. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  620. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  621. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  622. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  623. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  624. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  625. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  626. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  627. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  628. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  629. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  630. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  631. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  632. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  633. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  634. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  635. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  636. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  637. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  638. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  639. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  640. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  641. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  642. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  643. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  644. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  645. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  646. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  647. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  648. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  649. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  650. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  651. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  652. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  653. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  654. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  655. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  656. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  657. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  658. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  659. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  660. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  661. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  662. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  663. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  664. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  665. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  666. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  667. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  668. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  669. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  670. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  671. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  672. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  673. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  674. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  675. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  676. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  678. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  679. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  680. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  681. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  682. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  683. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  684. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  685. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  686. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  687. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  688. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  689. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  690. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  691. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  692. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  694. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  695. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  697. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  698. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  699. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  700. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  701. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  702. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  703. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  704. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  706. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  707. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  708. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  712. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  713. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  714. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  715. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  716. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  717. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  718. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  719. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  720. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  721. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  722. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  723. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  724. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  725. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  726. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  731. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  732. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  733. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  734. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  735. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  737. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  738. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  740. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  741. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  742. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  743. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  744. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  745. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  746. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  747. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  748. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  749. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  751. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  752. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  753. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  754. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  755. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  756. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  757. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  758. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  759. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  760. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  761. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  762. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  763. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  764. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  765. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  766. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  767. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  768. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  769. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  771. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  772. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  773. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  774. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  776. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  777. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  778. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  781. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  782. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  783. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  784. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  785. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  786. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  787. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  788. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  789. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  791. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  792. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  793. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  794. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  795. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  796. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  797. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  798. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  799. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  800. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  801. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  802. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  803. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  804. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  805. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  806. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  807. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  809. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  810. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  811. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  812. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  813. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  814. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  815. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  816. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  817. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  818. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  819. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  820. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  821. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  822. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  823. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  824. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  825. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  826. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  827. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  828. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  829. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  830. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  831. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  833. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  834. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  835. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  836. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  837. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  838. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  839. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  840. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  841. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  843. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  844. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  845. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  846. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  847. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  848. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  850. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  851. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  852. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  853. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  854. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  855. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  856. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  857. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  858. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  859. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  860. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  862. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  863. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  865. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  866. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  867. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  868. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  869. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  870. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  871. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  872. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  873. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  874. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  875. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  876. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  877. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  878. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  879. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  880. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  881. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  882. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  884. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  885. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  886. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  887. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  888. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  889. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  890. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  892. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  893. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  894. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  896. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  897. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  898. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  902. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  903. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  904. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  905. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  906. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  907. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  908. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  910. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  911. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  913. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  914. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  915. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  916. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  917. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  918. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  919. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  920. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  921. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  922. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  923. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  924. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  925. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  926. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  927. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  928. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  929. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  930. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  931. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  932. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  933. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  934. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  935. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  936. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  937. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  938. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  939. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  940. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  941. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  942. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  943. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  944. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  947. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  948. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  949. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  950. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  951. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  952. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  954. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  955. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  956. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  958. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  959. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  960. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  961. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  962. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  963. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  964. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  965. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  966. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  968. synapse/storage/schema/main/delta/93/01_add_delayed_events.sql +15 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +183 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +928 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +91 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +908 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +413 -0
  1007. synapse/types/state.py +634 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +169 -0
  1010. synapse/util/async_helpers.py +1045 -0
  1011. synapse/util/background_queue.py +142 -0
  1012. synapse/util/batching_queue.py +202 -0
  1013. synapse/util/caches/__init__.py +300 -0
  1014. synapse/util/caches/cached_call.py +143 -0
  1015. synapse/util/caches/deferred_cache.py +530 -0
  1016. synapse/util/caches/descriptors.py +692 -0
  1017. synapse/util/caches/dictionary_cache.py +346 -0
  1018. synapse/util/caches/expiringcache.py +249 -0
  1019. synapse/util/caches/lrucache.py +975 -0
  1020. synapse/util/caches/response_cache.py +322 -0
  1021. synapse/util/caches/stream_change_cache.py +370 -0
  1022. synapse/util/caches/treecache.py +189 -0
  1023. synapse/util/caches/ttlcache.py +197 -0
  1024. synapse/util/cancellation.py +63 -0
  1025. synapse/util/check_dependencies.py +335 -0
  1026. synapse/util/clock.py +567 -0
  1027. synapse/util/constants.py +22 -0
  1028. synapse/util/daemonize.py +165 -0
  1029. synapse/util/distributor.py +157 -0
  1030. synapse/util/events.py +134 -0
  1031. synapse/util/file_consumer.py +164 -0
  1032. synapse/util/frozenutils.py +57 -0
  1033. synapse/util/gai_resolver.py +178 -0
  1034. synapse/util/hash.py +38 -0
  1035. synapse/util/httpresourcetree.py +108 -0
  1036. synapse/util/iterutils.py +189 -0
  1037. synapse/util/json.py +56 -0
  1038. synapse/util/linked_list.py +156 -0
  1039. synapse/util/logcontext.py +46 -0
  1040. synapse/util/logformatter.py +28 -0
  1041. synapse/util/macaroons.py +325 -0
  1042. synapse/util/manhole.py +191 -0
  1043. synapse/util/metrics.py +339 -0
  1044. synapse/util/module_loader.py +116 -0
  1045. synapse/util/msisdn.py +51 -0
  1046. synapse/util/patch_inline_callbacks.py +250 -0
  1047. synapse/util/pydantic_models.py +63 -0
  1048. synapse/util/ratelimitutils.py +419 -0
  1049. synapse/util/retryutils.py +339 -0
  1050. synapse/util/rlimit.py +42 -0
  1051. synapse/util/rust.py +133 -0
  1052. synapse/util/sentinel.py +21 -0
  1053. synapse/util/stringutils.py +293 -0
  1054. synapse/util/task_scheduler.py +493 -0
  1055. synapse/util/templates.py +126 -0
  1056. synapse/util/threepids.py +123 -0
  1057. synapse/util/wheel_timer.py +112 -0
  1058. synapse/visibility.py +835 -0
@@ -0,0 +1,1059 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2021 The Matrix.org Foundation C.I.C.
5
+ # Copyright 2014 - 2016 OpenMarket Ltd
6
+ # Copyright (C) 2023 New Vector, Ltd
7
+ #
8
+ # This program is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Affero General Public License as
10
+ # published by the Free Software Foundation, either version 3 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # See the GNU Affero General Public License for more details:
14
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
15
+ #
16
+ # Originally licensed under the Apache License, Version 2.0:
17
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
18
+ #
19
+ # [This file includes modifications made by New Vector Limited]
20
+ #
21
+ #
22
+
23
+ """Contains functions for registering clients."""
24
+
25
+ import logging
26
+ from typing import (
27
+ TYPE_CHECKING,
28
+ Iterable,
29
+ TypedDict,
30
+ )
31
+
32
+ from prometheus_client import Counter
33
+
34
+ from synapse import types
35
+ from synapse.api.constants import (
36
+ MAX_USERID_LENGTH,
37
+ EventContentFields,
38
+ EventTypes,
39
+ JoinRules,
40
+ LoginType,
41
+ )
42
+ from synapse.api.errors import (
43
+ AuthError,
44
+ Codes,
45
+ ConsentNotGivenError,
46
+ InvalidClientTokenError,
47
+ SynapseError,
48
+ )
49
+ from synapse.appservice import ApplicationService
50
+ from synapse.config.server import is_threepid_reserved
51
+ from synapse.http.servlet import assert_params_in_dict
52
+ from synapse.metrics import SERVER_NAME_LABEL
53
+ from synapse.replication.http.login import RegisterDeviceReplicationServlet
54
+ from synapse.replication.http.register import (
55
+ ReplicationPostRegisterActionsServlet,
56
+ )
57
+ from synapse.spam_checker_api import RegistrationBehaviour
58
+ from synapse.types import GUEST_USER_ID_PATTERN, RoomAlias, UserID, create_requester
59
+ from synapse.types.state import StateFilter
60
+
61
+ if TYPE_CHECKING:
62
+ from synapse.server import HomeServer
63
+
64
+ logger = logging.getLogger(__name__)
65
+
66
+
67
+ registration_counter = Counter(
68
+ "synapse_user_registrations_total",
69
+ "Number of new users registered (since restart)",
70
+ labelnames=["guest", "shadow_banned", "auth_provider", SERVER_NAME_LABEL],
71
+ )
72
+
73
+ login_counter = Counter(
74
+ "synapse_user_logins_total",
75
+ "Number of user logins (since restart)",
76
+ labelnames=["guest", "auth_provider", SERVER_NAME_LABEL],
77
+ )
78
+
79
+
80
+ def init_counters_for_auth_provider(auth_provider_id: str, server_name: str) -> None:
81
+ """Ensure the prometheus counters for the given auth provider are initialised
82
+
83
+ This fixes a problem where the counters are not reported for a given auth provider
84
+ until the user first logs in/registers.
85
+
86
+ Args:
87
+ auth_provider_id: The ID of the auth provider to initialise counters for.
88
+ server_name: Our server name (used to label metrics) (this should be `hs.hostname`).
89
+ """
90
+ for is_guest in (True, False):
91
+ login_counter.labels(
92
+ guest=is_guest,
93
+ auth_provider=auth_provider_id,
94
+ **{SERVER_NAME_LABEL: server_name},
95
+ )
96
+ for shadow_banned in (True, False):
97
+ registration_counter.labels(
98
+ guest=is_guest,
99
+ shadow_banned=shadow_banned,
100
+ auth_provider=auth_provider_id,
101
+ **{SERVER_NAME_LABEL: server_name},
102
+ )
103
+
104
+
105
+ class LoginDict(TypedDict):
106
+ device_id: str
107
+ access_token: str
108
+ valid_until_ms: int | None
109
+ refresh_token: str | None
110
+
111
+
112
+ class RegistrationHandler:
113
+ def __init__(self, hs: "HomeServer"):
114
+ self.server_name = hs.hostname
115
+ self.store = hs.get_datastores().main
116
+ self._storage_controllers = hs.get_storage_controllers()
117
+ self.clock = hs.get_clock()
118
+ self.hs = hs
119
+ self.auth = hs.get_auth()
120
+ self.auth_blocking = hs.get_auth_blocking()
121
+ self._auth_handler = hs.get_auth_handler()
122
+ self.profile_handler = hs.get_profile_handler()
123
+ self.user_directory_handler = hs.get_user_directory_handler()
124
+ self.identity_handler = self.hs.get_identity_handler()
125
+ self.ratelimiter = hs.get_registration_ratelimiter()
126
+ self.macaroon_gen = hs.get_macaroon_generator()
127
+ self._account_validity_handler = hs.get_account_validity_handler()
128
+ self._user_consent_version = self.hs.config.consent.user_consent_version
129
+ self._server_notices_mxid = hs.config.servernotices.server_notices_mxid
130
+ self._user_types_config = hs.config.user_types
131
+
132
+ self._spam_checker_module_callbacks = hs.get_module_api_callbacks().spam_checker
133
+
134
+ if hs.config.worker.worker_app:
135
+ self._register_device_client = RegisterDeviceReplicationServlet.make_client(
136
+ hs
137
+ )
138
+ self._post_registration_client = (
139
+ ReplicationPostRegisterActionsServlet.make_client(hs)
140
+ )
141
+ else:
142
+ self.device_handler = hs.get_device_handler()
143
+ self._register_device_client = self.register_device_inner
144
+ self.pusher_pool = hs.get_pusherpool()
145
+
146
+ self.session_lifetime = hs.config.registration.session_lifetime
147
+ self.nonrefreshable_access_token_lifetime = (
148
+ hs.config.registration.nonrefreshable_access_token_lifetime
149
+ )
150
+ self.refreshable_access_token_lifetime = (
151
+ hs.config.registration.refreshable_access_token_lifetime
152
+ )
153
+ self.refresh_token_lifetime = hs.config.registration.refresh_token_lifetime
154
+
155
+ init_counters_for_auth_provider(
156
+ auth_provider_id="", server_name=self.server_name
157
+ )
158
+
159
+ async def check_username(
160
+ self,
161
+ localpart: str,
162
+ guest_access_token: str | None = None,
163
+ assigned_user_id: str | None = None,
164
+ inhibit_user_in_use_error: bool = False,
165
+ ) -> None:
166
+ if types.contains_invalid_mxid_characters(localpart):
167
+ raise SynapseError(
168
+ 400,
169
+ "User ID can only contain characters a-z, 0-9, or '=_-./+'",
170
+ Codes.INVALID_USERNAME,
171
+ )
172
+
173
+ if not localpart:
174
+ raise SynapseError(400, "User ID cannot be empty", Codes.INVALID_USERNAME)
175
+
176
+ if (
177
+ localpart[0] == "_"
178
+ and not self.hs.config.registration.allow_underscore_prefixed_localpart
179
+ ):
180
+ raise SynapseError(
181
+ 400, "User ID may not begin with _", Codes.INVALID_USERNAME
182
+ )
183
+
184
+ user = UserID(localpart, self.hs.hostname)
185
+ user_id = user.to_string()
186
+
187
+ if assigned_user_id:
188
+ if user_id == assigned_user_id:
189
+ return
190
+ else:
191
+ raise SynapseError(
192
+ 400,
193
+ "A different user ID has already been registered for this session",
194
+ )
195
+
196
+ self.check_user_id_not_appservice_exclusive(user_id)
197
+
198
+ if len(user_id) > MAX_USERID_LENGTH:
199
+ raise SynapseError(
200
+ 400,
201
+ "User ID may not be longer than %s characters" % (MAX_USERID_LENGTH,),
202
+ Codes.INVALID_USERNAME,
203
+ )
204
+
205
+ users = await self.store.get_users_by_id_case_insensitive(user_id)
206
+ if users:
207
+ if not inhibit_user_in_use_error and not guest_access_token:
208
+ raise SynapseError(
209
+ 400, "User ID already taken.", errcode=Codes.USER_IN_USE
210
+ )
211
+ if guest_access_token:
212
+ user_data = await self.auth.get_user_by_access_token(guest_access_token)
213
+ if not user_data.is_guest or user_data.user.localpart != localpart:
214
+ raise AuthError(
215
+ 403,
216
+ "Cannot register taken user ID without valid guest "
217
+ "credentials for that user.",
218
+ errcode=Codes.FORBIDDEN,
219
+ )
220
+
221
+ if guest_access_token is None and GUEST_USER_ID_PATTERN.fullmatch(localpart):
222
+ raise SynapseError(
223
+ 400,
224
+ "Numeric user IDs are reserved for guest users.",
225
+ errcode=Codes.INVALID_USERNAME,
226
+ )
227
+
228
+ async def register_user(
229
+ self,
230
+ localpart: str | None = None,
231
+ password_hash: str | None = None,
232
+ guest_access_token: str | None = None,
233
+ make_guest: bool = False,
234
+ admin: bool = False,
235
+ threepid: dict | None = None,
236
+ user_type: str | None = None,
237
+ default_display_name: str | None = None,
238
+ address: str | None = None,
239
+ bind_emails: Iterable[str] | None = None,
240
+ by_admin: bool = False,
241
+ user_agent_ips: list[tuple[str, str]] | None = None,
242
+ auth_provider_id: str | None = None,
243
+ approved: bool = False,
244
+ ) -> str:
245
+ """Registers a new client on the server.
246
+
247
+ Args:
248
+ localpart: The local part of the user ID to register. If None,
249
+ one will be generated.
250
+ password_hash: The hashed password to assign to this user so they can
251
+ login again. This can be None which means they cannot login again
252
+ via a password (e.g. the user is an application service user).
253
+ guest_access_token: The access token used when this was a guest
254
+ account.
255
+ make_guest: True if the the new user should be guest,
256
+ false to add a regular user account.
257
+ admin: True if the user should be registered as a server admin.
258
+ threepid: The threepid used for registering, if any.
259
+ user_type: type of user. One of the values from
260
+ api.constants.UserTypes, or None for a normal user.
261
+ default_display_name: if set, the new user's displayname
262
+ will be set to this. Defaults to 'localpart'.
263
+ address: the IP address used to perform the registration.
264
+ bind_emails: list of emails to bind to this account.
265
+ by_admin: True if this registration is being made via the
266
+ admin api, otherwise False.
267
+ user_agent_ips: Tuples of user-agents and IP addresses used
268
+ during the registration process.
269
+ auth_provider_id: The SSO IdP the user used, if any.
270
+ approved: True if the new user should be considered already
271
+ approved by an administrator.
272
+ Returns:
273
+ The registered user_id.
274
+ Raises:
275
+ SynapseError if there was a problem registering.
276
+ """
277
+ bind_emails = bind_emails or []
278
+
279
+ await self.check_registration_ratelimit(address)
280
+
281
+ result = await self._spam_checker_module_callbacks.check_registration_for_spam(
282
+ threepid,
283
+ localpart,
284
+ user_agent_ips or [],
285
+ auth_provider_id=auth_provider_id,
286
+ )
287
+
288
+ if result == RegistrationBehaviour.DENY:
289
+ logger.info(
290
+ "Blocked registration of %r",
291
+ localpart,
292
+ )
293
+ # We return a 429 to make it not obvious that they've been
294
+ # denied.
295
+ raise SynapseError(429, "Rate limited")
296
+
297
+ shadow_banned = result == RegistrationBehaviour.SHADOW_BAN
298
+ if shadow_banned:
299
+ logger.info(
300
+ "Shadow banning registration of %r",
301
+ localpart,
302
+ )
303
+
304
+ # do not check_auth_blocking if the call is coming through the Admin API
305
+ if not by_admin:
306
+ await self.auth_blocking.check_auth_blocking(threepid=threepid)
307
+
308
+ if localpart is not None:
309
+ await self.check_username(localpart, guest_access_token=guest_access_token)
310
+
311
+ was_guest = guest_access_token is not None
312
+
313
+ user = UserID(localpart, self.hs.hostname)
314
+ user_id = user.to_string()
315
+
316
+ if was_guest:
317
+ # If the user was a guest then they already have a profile
318
+ default_display_name = None
319
+
320
+ elif default_display_name is None:
321
+ default_display_name = localpart
322
+
323
+ if user_type is None:
324
+ user_type = self._user_types_config.default_user_type
325
+
326
+ await self.register_with_store(
327
+ user_id=user_id,
328
+ password_hash=password_hash,
329
+ was_guest=was_guest,
330
+ make_guest=make_guest,
331
+ create_profile_with_displayname=default_display_name,
332
+ admin=admin,
333
+ user_type=user_type,
334
+ address=address,
335
+ shadow_banned=shadow_banned,
336
+ approved=approved,
337
+ )
338
+
339
+ profile = await self.store.get_profileinfo(user)
340
+ await self.user_directory_handler.handle_local_profile_change(
341
+ user_id, profile
342
+ )
343
+
344
+ else:
345
+ # autogen a sequential user ID
346
+ fail_count = 0
347
+ # If a default display name is not given, generate one.
348
+ generate_display_name = default_display_name is None
349
+ # This breaks on successful registration *or* errors after 10 failures.
350
+ while True:
351
+ # Fail after being unable to find a suitable ID a few times
352
+ if fail_count > 10:
353
+ raise SynapseError(500, "Unable to find a suitable guest user ID")
354
+
355
+ generated_localpart = await self.store.generate_user_id()
356
+ user = UserID(generated_localpart, self.hs.hostname)
357
+ user_id = user.to_string()
358
+ self.check_user_id_not_appservice_exclusive(user_id)
359
+ if generate_display_name:
360
+ default_display_name = generated_localpart
361
+ try:
362
+ await self.register_with_store(
363
+ user_id=user_id,
364
+ password_hash=password_hash,
365
+ make_guest=make_guest,
366
+ create_profile_with_displayname=default_display_name,
367
+ address=address,
368
+ shadow_banned=shadow_banned,
369
+ )
370
+
371
+ # Successfully registered
372
+ break
373
+ except SynapseError:
374
+ # if user id is taken, just generate another
375
+ fail_count += 1
376
+
377
+ registration_counter.labels(
378
+ guest=make_guest,
379
+ shadow_banned=shadow_banned,
380
+ auth_provider=(auth_provider_id or ""),
381
+ **{SERVER_NAME_LABEL: self.server_name},
382
+ ).inc()
383
+
384
+ # If the user does not need to consent at registration, auto-join any
385
+ # configured rooms.
386
+ if not self.hs.config.consent.user_consent_at_registration:
387
+ if (
388
+ not self.hs.config.registration.auto_join_rooms_for_guests
389
+ and make_guest
390
+ ):
391
+ logger.info(
392
+ "Skipping auto-join for %s because auto-join for guests is disabled",
393
+ user_id,
394
+ )
395
+ else:
396
+ await self._auto_join_rooms(user_id)
397
+ else:
398
+ logger.info(
399
+ "Skipping auto-join for %s because consent is required at registration",
400
+ user_id,
401
+ )
402
+
403
+ # Bind any specified emails to this account
404
+ current_time = self.hs.get_clock().time_msec()
405
+ for email in bind_emails:
406
+ # generate threepid dict
407
+ threepid_dict = {
408
+ "medium": "email",
409
+ "address": email,
410
+ "validated_at": current_time,
411
+ }
412
+
413
+ # Bind email to new account
414
+ await self._register_email_threepid(user_id, threepid_dict, None)
415
+
416
+ return user_id
417
+
418
+ async def _create_and_join_rooms(self, user_id: str) -> None:
419
+ """
420
+ Create the auto-join rooms and join or invite the user to them.
421
+
422
+ This should only be called when the first "real" user registers.
423
+
424
+ Args:
425
+ user_id: The user to join
426
+ """
427
+ # Getting the handlers during init gives a dependency loop.
428
+ room_creation_handler = self.hs.get_room_creation_handler()
429
+ room_member_handler = self.hs.get_room_member_handler()
430
+
431
+ # Generate a stub for how the rooms will be configured.
432
+ stub_config = {
433
+ "preset": self.hs.config.registration.autocreate_auto_join_room_preset,
434
+ }
435
+
436
+ # If the configuration provides a user ID to create rooms with, use
437
+ # that instead of the first user registered.
438
+ requires_join = False
439
+ if self.hs.config.registration.auto_join_user_id:
440
+ fake_requester = create_requester(
441
+ self.hs.config.registration.auto_join_user_id,
442
+ authenticated_entity=self.server_name,
443
+ )
444
+
445
+ # If the room requires an invite, add the user to the list of invites.
446
+ if self.hs.config.registration.auto_join_room_requires_invite:
447
+ stub_config["invite"] = [user_id]
448
+
449
+ # If the room is being created by a different user, the first user
450
+ # registered needs to join it. Note that in the case of an invitation
451
+ # being necessary this will occur after the invite was sent.
452
+ requires_join = True
453
+ else:
454
+ fake_requester = create_requester(
455
+ user_id, authenticated_entity=self.server_name
456
+ )
457
+
458
+ # Choose whether to federate the new room.
459
+ if not self.hs.config.registration.autocreate_auto_join_rooms_federated:
460
+ stub_config["creation_content"] = {EventContentFields.FEDERATE: False}
461
+
462
+ for r in self.hs.config.registration.auto_join_rooms:
463
+ logger.info("Auto-joining %s to %s", user_id, r)
464
+
465
+ try:
466
+ room_alias = RoomAlias.from_string(r)
467
+
468
+ if self.hs.hostname != room_alias.domain:
469
+ # If the alias is remote, try to join the room. This might fail
470
+ # because the room might be invite only, but we don't have any local
471
+ # user in the room to invite this one with, so at this point that's
472
+ # the best we can do.
473
+ logger.info(
474
+ "Cannot automatically create room with alias %s as it isn't"
475
+ " local, trying to join the room instead",
476
+ r,
477
+ )
478
+
479
+ (
480
+ room,
481
+ remote_room_hosts,
482
+ ) = await room_member_handler.lookup_room_alias(room_alias)
483
+ room_id = room.to_string()
484
+
485
+ await room_member_handler.update_membership(
486
+ requester=create_requester(
487
+ user_id, authenticated_entity=self.server_name
488
+ ),
489
+ target=UserID.from_string(user_id),
490
+ room_id=room_id,
491
+ remote_room_hosts=remote_room_hosts,
492
+ action="join",
493
+ ratelimit=False,
494
+ )
495
+ else:
496
+ # A shallow copy is OK here since the only key that is
497
+ # modified is room_alias_name.
498
+ config = stub_config.copy()
499
+ # create room expects the localpart of the room alias
500
+ config["room_alias_name"] = room_alias.localpart
501
+
502
+ room_id, _, _ = await room_creation_handler.create_room(
503
+ fake_requester,
504
+ config=config,
505
+ ratelimit=False,
506
+ )
507
+
508
+ # If the room does not require an invite, but another user
509
+ # created it, then ensure the first user joins it.
510
+ if requires_join:
511
+ await room_member_handler.update_membership(
512
+ requester=create_requester(
513
+ user_id, authenticated_entity=self.server_name
514
+ ),
515
+ target=UserID.from_string(user_id),
516
+ room_id=room_id,
517
+ # Since it was just created, there are no remote hosts.
518
+ remote_room_hosts=[],
519
+ action="join",
520
+ ratelimit=False,
521
+ )
522
+ except Exception as e:
523
+ logger.exception("Failed to join new user to %r: %r", r, e)
524
+
525
+ async def _join_rooms(self, user_id: str) -> None:
526
+ """
527
+ Join or invite the user to the auto-join rooms.
528
+
529
+ Args:
530
+ user_id: The user to join
531
+ """
532
+ room_member_handler = self.hs.get_room_member_handler()
533
+
534
+ for r in self.hs.config.registration.auto_join_rooms:
535
+ logger.info("Auto-joining %s to %s", user_id, r)
536
+
537
+ try:
538
+ room_alias = RoomAlias.from_string(r)
539
+
540
+ if RoomAlias.is_valid(r):
541
+ (
542
+ room,
543
+ remote_room_hosts,
544
+ ) = await room_member_handler.lookup_room_alias(room_alias)
545
+ room_id = room.to_string()
546
+ else:
547
+ raise SynapseError(
548
+ 400, "%s was not legal room ID or room alias" % (r,)
549
+ )
550
+
551
+ # Calculate whether the room requires an invite or can be
552
+ # joined directly. By default, we consider the room as requiring an
553
+ # invite if the homeserver is in the room (unless told otherwise by the
554
+ # join rules). Otherwise we consider it as being joinable, at the risk of
555
+ # failing to join, but in this case there's little more we can do since
556
+ # we don't have a local user in the room to craft up an invite with.
557
+ requires_invite = await self.store.is_host_joined(
558
+ room_id,
559
+ self.server_name,
560
+ )
561
+
562
+ if requires_invite:
563
+ # If the server is in the room, check if the room is public.
564
+ state = await self._storage_controllers.state.get_current_state_ids(
565
+ room_id, StateFilter.from_types([(EventTypes.JoinRules, "")])
566
+ )
567
+
568
+ event_id = state.get((EventTypes.JoinRules, ""))
569
+ if event_id:
570
+ join_rules_event = await self.store.get_event(
571
+ event_id, allow_none=True
572
+ )
573
+ if join_rules_event:
574
+ join_rule = join_rules_event.content.get("join_rule", None)
575
+ requires_invite = (
576
+ join_rule is not None and join_rule != JoinRules.PUBLIC
577
+ )
578
+
579
+ # Send the invite, if necessary.
580
+ if requires_invite:
581
+ # If an invite is required, there must be a auto-join user ID.
582
+ assert self.hs.config.registration.auto_join_user_id
583
+
584
+ await room_member_handler.update_membership(
585
+ requester=create_requester(
586
+ self.hs.config.registration.auto_join_user_id,
587
+ authenticated_entity=self.server_name,
588
+ ),
589
+ target=UserID.from_string(user_id),
590
+ room_id=room_id,
591
+ remote_room_hosts=remote_room_hosts,
592
+ action="invite",
593
+ ratelimit=False,
594
+ )
595
+
596
+ # Send the join.
597
+ await room_member_handler.update_membership(
598
+ requester=create_requester(
599
+ user_id, authenticated_entity=self.server_name
600
+ ),
601
+ target=UserID.from_string(user_id),
602
+ room_id=room_id,
603
+ remote_room_hosts=remote_room_hosts,
604
+ action="join",
605
+ ratelimit=False,
606
+ )
607
+
608
+ except ConsentNotGivenError as e:
609
+ # Technically not necessary to pull out this error though
610
+ # moving away from bare excepts is a good thing to do.
611
+ logger.error("Failed to join new user to %r: %r", r, e)
612
+ except Exception as e:
613
+ logger.exception("Failed to join new user to %r: %r", r, e)
614
+
615
+ async def _auto_join_rooms(self, user_id: str) -> None:
616
+ """Automatically joins users to auto join rooms - creating the room in the first place
617
+ if the user is the first to be created.
618
+
619
+ Args:
620
+ user_id: The user to join
621
+ """
622
+ # If there are no rooms to auto-join, just bail.
623
+ if not self.hs.config.registration.auto_join_rooms:
624
+ return
625
+
626
+ # auto-join the user to any rooms we're supposed to dump them into
627
+
628
+ # try to create the room if we're the first real user on the server. Note
629
+ # that an auto-generated support or bot user is not a real user and will never be
630
+ # the user to create the room
631
+ should_auto_create_rooms = False
632
+ if (
633
+ self.hs.config.registration.autocreate_auto_join_rooms
634
+ and await self.store.is_real_user(user_id)
635
+ ):
636
+ count = await self.store.count_real_users()
637
+ should_auto_create_rooms = count == 1
638
+
639
+ if should_auto_create_rooms:
640
+ await self._create_and_join_rooms(user_id)
641
+ else:
642
+ await self._join_rooms(user_id)
643
+
644
+ async def post_consent_actions(self, user_id: str) -> None:
645
+ """A series of registration actions that can only be carried out once consent
646
+ has been granted
647
+
648
+ Args:
649
+ user_id: The user to join
650
+ """
651
+ await self._auto_join_rooms(user_id)
652
+
653
+ async def appservice_register(
654
+ self, user_localpart: str, as_token: str
655
+ ) -> tuple[str, ApplicationService]:
656
+ user = UserID(user_localpart, self.hs.hostname)
657
+ user_id = user.to_string()
658
+ service = self.store.get_app_service_by_token(as_token)
659
+ if not service:
660
+ raise InvalidClientTokenError()
661
+ if not service.is_interested_in_user(user_id):
662
+ raise SynapseError(
663
+ 400,
664
+ "Invalid user localpart for this application service.",
665
+ errcode=Codes.EXCLUSIVE,
666
+ )
667
+
668
+ service_id = service.id if service.is_exclusive_user(user_id) else None
669
+
670
+ self.check_user_id_not_appservice_exclusive(user_id, allowed_appservice=service)
671
+
672
+ await self.register_with_store(
673
+ user_id=user_id,
674
+ password_hash="",
675
+ appservice_id=service_id,
676
+ create_profile_with_displayname=user.localpart,
677
+ )
678
+ return (user_id, service)
679
+
680
+ def check_user_id_not_appservice_exclusive(
681
+ self, user_id: str, allowed_appservice: ApplicationService | None = None
682
+ ) -> None:
683
+ # don't allow people to register the server notices mxid
684
+ if self._server_notices_mxid is not None:
685
+ if user_id == self._server_notices_mxid:
686
+ raise SynapseError(
687
+ 400, "This user ID is reserved.", errcode=Codes.EXCLUSIVE
688
+ )
689
+
690
+ # valid user IDs must not clash with any user ID namespaces claimed by
691
+ # application services.
692
+ services = self.store.get_app_services()
693
+ interested_services = [
694
+ s
695
+ for s in services
696
+ if s.is_interested_in_user(user_id) and s != allowed_appservice
697
+ ]
698
+ for service in interested_services:
699
+ if service.is_exclusive_user(user_id):
700
+ raise SynapseError(
701
+ 400,
702
+ "This user ID is reserved by an application service.",
703
+ errcode=Codes.EXCLUSIVE,
704
+ )
705
+
706
+ async def check_registration_ratelimit(self, address: str | None) -> None:
707
+ """A simple helper method to check whether the registration rate limit has been hit
708
+ for a given IP address
709
+
710
+ Args:
711
+ address: the IP address used to perform the registration. If this is
712
+ None, no ratelimiting will be performed.
713
+
714
+ Raises:
715
+ LimitExceededError: If the rate limit has been exceeded.
716
+ """
717
+ if not address:
718
+ return
719
+
720
+ await self.ratelimiter.ratelimit(None, address)
721
+
722
+ async def register_with_store(
723
+ self,
724
+ user_id: str,
725
+ password_hash: str | None = None,
726
+ was_guest: bool = False,
727
+ make_guest: bool = False,
728
+ appservice_id: str | None = None,
729
+ create_profile_with_displayname: str | None = None,
730
+ admin: bool = False,
731
+ user_type: str | None = None,
732
+ address: str | None = None,
733
+ shadow_banned: bool = False,
734
+ approved: bool = False,
735
+ ) -> None:
736
+ """Register user in the datastore.
737
+
738
+ Args:
739
+ user_id: The desired user ID to register.
740
+ password_hash: Optional. The password hash for this user.
741
+ was_guest: Optional. Whether this is a guest account being
742
+ upgraded to a non-guest account.
743
+ make_guest: True if the the new user should be guest,
744
+ false to add a regular user account.
745
+ appservice_id: The ID of the appservice registering the user.
746
+ create_profile_with_displayname: Optionally create a
747
+ profile for the user, setting their displayname to the given value
748
+ admin: is an admin user?
749
+ user_type: type of user. One of the values from
750
+ api.constants.UserTypes, or None for a normal user.
751
+ address: the IP address used to perform the registration.
752
+ shadow_banned: Whether to shadow-ban the user
753
+ approved: Whether to mark the user as approved by an administrator
754
+ """
755
+ await self.store.register_user(
756
+ user_id=user_id,
757
+ password_hash=password_hash,
758
+ was_guest=was_guest,
759
+ make_guest=make_guest,
760
+ appservice_id=appservice_id,
761
+ create_profile_with_displayname=create_profile_with_displayname,
762
+ admin=admin,
763
+ user_type=user_type,
764
+ shadow_banned=shadow_banned,
765
+ approved=approved,
766
+ )
767
+
768
+ await self._account_validity_handler.on_user_registration(user_id)
769
+
770
+ async def register_device(
771
+ self,
772
+ user_id: str,
773
+ device_id: str | None,
774
+ initial_display_name: str | None,
775
+ is_guest: bool = False,
776
+ is_appservice_ghost: bool = False,
777
+ auth_provider_id: str | None = None,
778
+ should_issue_refresh_token: bool = False,
779
+ auth_provider_session_id: str | None = None,
780
+ ) -> tuple[str, str, int | None, str | None]:
781
+ """Register a device for a user and generate an access token.
782
+
783
+ The access token will be limited by the homeserver's session_lifetime config.
784
+
785
+ Args:
786
+ user_id: full canonical @user:id
787
+ device_id: The device ID to check, or None to generate a new one.
788
+ initial_display_name: An optional display name for the device.
789
+ is_guest: Whether this is a guest account
790
+ auth_provider_id: The SSO IdP the user used, if any.
791
+ should_issue_refresh_token: Whether it should also issue a refresh token
792
+ auth_provider_session_id: The session ID received during login from the SSO IdP.
793
+ Returns:
794
+ Tuple of device ID, access token, access token expiration time and refresh token
795
+ """
796
+ res = await self._register_device_client(
797
+ user_id=user_id,
798
+ device_id=device_id,
799
+ initial_display_name=initial_display_name,
800
+ is_guest=is_guest,
801
+ is_appservice_ghost=is_appservice_ghost,
802
+ should_issue_refresh_token=should_issue_refresh_token,
803
+ auth_provider_id=auth_provider_id,
804
+ auth_provider_session_id=auth_provider_session_id,
805
+ )
806
+
807
+ login_counter.labels(
808
+ guest=is_guest,
809
+ auth_provider=(auth_provider_id or ""),
810
+ **{SERVER_NAME_LABEL: self.server_name},
811
+ ).inc()
812
+
813
+ return (
814
+ res["device_id"],
815
+ res["access_token"],
816
+ res["valid_until_ms"],
817
+ res["refresh_token"],
818
+ )
819
+
820
+ async def register_device_inner(
821
+ self,
822
+ user_id: str,
823
+ device_id: str | None,
824
+ initial_display_name: str | None,
825
+ is_guest: bool = False,
826
+ is_appservice_ghost: bool = False,
827
+ should_issue_refresh_token: bool = False,
828
+ auth_provider_id: str | None = None,
829
+ auth_provider_session_id: str | None = None,
830
+ ) -> LoginDict:
831
+ """Helper for register_device
832
+
833
+ Does the bits that need doing on the main process. Not for use outside this
834
+ class and RegisterDeviceReplicationServlet.
835
+ """
836
+ assert not self.hs.config.worker.worker_app
837
+ now_ms = self.clock.time_msec()
838
+ access_token_expiry = None
839
+ if self.session_lifetime is not None:
840
+ if is_guest:
841
+ raise Exception(
842
+ "session_lifetime is not currently implemented for guest access"
843
+ )
844
+ access_token_expiry = now_ms + self.session_lifetime
845
+
846
+ if self.nonrefreshable_access_token_lifetime is not None:
847
+ if access_token_expiry is not None:
848
+ # Don't allow the non-refreshable access token to outlive the
849
+ # session.
850
+ access_token_expiry = min(
851
+ now_ms + self.nonrefreshable_access_token_lifetime,
852
+ access_token_expiry,
853
+ )
854
+ else:
855
+ access_token_expiry = now_ms + self.nonrefreshable_access_token_lifetime
856
+
857
+ refresh_token = None
858
+ refresh_token_id = None
859
+
860
+ registered_device_id = await self.device_handler.check_device_registered(
861
+ user_id,
862
+ device_id,
863
+ initial_display_name,
864
+ auth_provider_id=auth_provider_id,
865
+ auth_provider_session_id=auth_provider_session_id,
866
+ )
867
+ if is_guest:
868
+ assert access_token_expiry is None
869
+ access_token = self.macaroon_gen.generate_guest_access_token(user_id)
870
+ else:
871
+ if should_issue_refresh_token:
872
+ # A refreshable access token lifetime must be configured
873
+ # since we're told to issue a refresh token (the caller checks
874
+ # that this value is set before setting this flag).
875
+ assert self.refreshable_access_token_lifetime is not None
876
+
877
+ # Set the expiry time of the refreshable access token
878
+ access_token_expiry = now_ms + self.refreshable_access_token_lifetime
879
+
880
+ # Set the refresh token expiry time (if configured)
881
+ refresh_token_expiry = None
882
+ if self.refresh_token_lifetime is not None:
883
+ refresh_token_expiry = now_ms + self.refresh_token_lifetime
884
+
885
+ # Set an ultimate session expiry time (if configured)
886
+ ultimate_session_expiry_ts = None
887
+ if self.session_lifetime is not None:
888
+ ultimate_session_expiry_ts = now_ms + self.session_lifetime
889
+
890
+ # Also ensure that the issued tokens don't outlive the
891
+ # session.
892
+ # (It would be weird to configure a homeserver with a shorter
893
+ # session lifetime than token lifetime, but may as well handle
894
+ # it.)
895
+ access_token_expiry = min(
896
+ access_token_expiry, ultimate_session_expiry_ts
897
+ )
898
+ if refresh_token_expiry is not None:
899
+ refresh_token_expiry = min(
900
+ refresh_token_expiry, ultimate_session_expiry_ts
901
+ )
902
+
903
+ (
904
+ refresh_token,
905
+ refresh_token_id,
906
+ ) = await self._auth_handler.create_refresh_token_for_user_id(
907
+ user_id,
908
+ device_id=registered_device_id,
909
+ expiry_ts=refresh_token_expiry,
910
+ ultimate_session_expiry_ts=ultimate_session_expiry_ts,
911
+ )
912
+
913
+ access_token = await self._auth_handler.create_access_token_for_user_id(
914
+ user_id,
915
+ device_id=registered_device_id,
916
+ valid_until_ms=access_token_expiry,
917
+ is_appservice_ghost=is_appservice_ghost,
918
+ refresh_token_id=refresh_token_id,
919
+ )
920
+
921
+ return {
922
+ "device_id": registered_device_id,
923
+ "access_token": access_token,
924
+ "valid_until_ms": access_token_expiry,
925
+ "refresh_token": refresh_token,
926
+ }
927
+
928
+ async def post_registration_actions(
929
+ self, user_id: str, auth_result: dict, access_token: str | None
930
+ ) -> None:
931
+ """A user has completed registration
932
+
933
+ Args:
934
+ user_id: The user ID that consented
935
+ auth_result: The authenticated credentials of the newly registered user.
936
+ access_token: The access token of the newly logged in device, or
937
+ None if `inhibit_login` enabled.
938
+ """
939
+ # TODO: 3pid registration can actually happen on the workers. Consider
940
+ # refactoring it.
941
+ if self.hs.config.worker.worker_app:
942
+ await self._post_registration_client(
943
+ user_id=user_id, auth_result=auth_result, access_token=access_token
944
+ )
945
+ return
946
+
947
+ if auth_result and LoginType.EMAIL_IDENTITY in auth_result:
948
+ threepid = auth_result[LoginType.EMAIL_IDENTITY]
949
+ # Necessary due to auth checks prior to the threepid being
950
+ # written to the db
951
+ if is_threepid_reserved(
952
+ self.hs.config.server.mau_limits_reserved_threepids, threepid
953
+ ):
954
+ await self.store.upsert_monthly_active_user(user_id)
955
+
956
+ await self._register_email_threepid(user_id, threepid, access_token)
957
+
958
+ if auth_result and LoginType.MSISDN in auth_result:
959
+ threepid = auth_result[LoginType.MSISDN]
960
+ await self._register_msisdn_threepid(user_id, threepid)
961
+
962
+ if auth_result and LoginType.TERMS in auth_result:
963
+ # The terms type should only exist if consent is enabled.
964
+ assert self._user_consent_version is not None
965
+ await self._on_user_consented(user_id, self._user_consent_version)
966
+
967
+ async def _on_user_consented(self, user_id: str, consent_version: str) -> None:
968
+ """A user consented to the terms on registration
969
+
970
+ Args:
971
+ user_id: The user ID that consented.
972
+ consent_version: version of the policy the user has consented to.
973
+ """
974
+ logger.info("%s has consented to the privacy policy", user_id)
975
+ await self.store.user_set_consent_version(user_id, consent_version)
976
+ await self.post_consent_actions(user_id)
977
+
978
+ async def _register_email_threepid(
979
+ self, user_id: str, threepid: dict, token: str | None
980
+ ) -> None:
981
+ """Add an email address as a 3pid identifier
982
+
983
+ Also adds an email pusher for the email address, if configured in the
984
+ HS config
985
+
986
+ Must be called on master.
987
+
988
+ Args:
989
+ user_id: id of user
990
+ threepid: m.login.email.identity auth response
991
+ token: access_token for the user, or None if not logged in.
992
+ """
993
+ reqd = ("medium", "address", "validated_at")
994
+ if any(x not in threepid for x in reqd):
995
+ # This will only happen if the ID server returns a malformed response
996
+ logger.info("Can't add incomplete 3pid")
997
+ return
998
+
999
+ await self._auth_handler.add_threepid(
1000
+ user_id,
1001
+ threepid["medium"],
1002
+ threepid["address"],
1003
+ threepid["validated_at"],
1004
+ )
1005
+
1006
+ # And we add an email pusher for them by default, but only
1007
+ # if email notifications are enabled (so people don't start
1008
+ # getting mail spam where they weren't before if email
1009
+ # notifs are set up on a homeserver)
1010
+ if (
1011
+ self.hs.config.email.email_enable_notifs
1012
+ and self.hs.config.email.email_notif_for_new_users
1013
+ and token
1014
+ ):
1015
+ # Pull the ID of the access token back out of the db
1016
+ # It would really make more sense for this to be passed
1017
+ # up when the access token is saved, but that's quite an
1018
+ # invasive change I'd rather do separately.
1019
+ user_tuple = await self.store.get_user_by_access_token(token)
1020
+ # The token better still exist.
1021
+ assert user_tuple
1022
+ device_id = user_tuple.device_id
1023
+
1024
+ await self.pusher_pool.add_or_update_pusher(
1025
+ user_id=user_id,
1026
+ device_id=device_id,
1027
+ kind="email",
1028
+ app_id="m.email",
1029
+ app_display_name="Email Notifications",
1030
+ device_display_name=threepid["address"],
1031
+ pushkey=threepid["address"],
1032
+ lang=None,
1033
+ data={},
1034
+ )
1035
+
1036
+ async def _register_msisdn_threepid(self, user_id: str, threepid: dict) -> None:
1037
+ """Add a phone number as a 3pid identifier
1038
+
1039
+ Must be called on master.
1040
+
1041
+ Args:
1042
+ user_id: id of user
1043
+ threepid: m.login.msisdn auth response
1044
+ """
1045
+ try:
1046
+ assert_params_in_dict(threepid, ["medium", "address", "validated_at"])
1047
+ except SynapseError as ex:
1048
+ if ex.errcode == Codes.MISSING_PARAM:
1049
+ # This will only happen if the ID server returns a malformed response
1050
+ logger.info("Can't add incomplete 3pid")
1051
+ return None
1052
+ raise
1053
+
1054
+ await self._auth_handler.add_threepid(
1055
+ user_id,
1056
+ threepid["medium"],
1057
+ threepid["address"],
1058
+ threepid["validated_at"],
1059
+ )