Commit Graph

88 Commits

Author SHA1 Message Date
Andrew Ferrazzutti 8ac2770cf7 Revert GraphQL's unlock to also reactivate
Unlike the CLI and admin API, leave the behaviour of the GraphQL's
unlock handler unchanged from before, so as to not break internal
tooling that depends on it.

Also update its documentation description to make note of the fact that
it reactivates in addition to unlocks.
2025-07-16 14:17:01 -04:00
Andrew Ferrazzutti d807975137 Decouple (un)locking from (re/de)activation
Unify the admin API, CLI, and GraphQL API in not having the unlock
command also reactivate, or the deactivate command also lock.

Still let the unlock command of the CLI and GraphQL API to also
reactivate the target user, albeit as a non-default option.
2025-07-16 14:17:01 -04:00
Quentin Gliech 8df03bf185 Support for experimental plan management tab in UI (#4549) 2025-06-10 14:14:24 +02:00
Hugh Nimmo-Smith 55f559ece8 Schema update 2025-06-06 14:40:45 +01:00
Hugh Nimmo-Smith 037d90bb1a Update schemas 2025-06-06 10:45:23 +01:00
Quentin Gliech 500e0ca22c Update generated GraphQL schema 2025-06-03 16:26:18 +02:00
Hugh Nimmo-Smith 25de9bcb15 Merge branch 'main' into hughns/plan-management 2025-05-09 10:33:39 +01:00
Quentin Gliech 1696102592 graphql: add mutation to update device name 2025-04-25 16:55:30 +02:00
Quentin Gliech fe1d15ab0e graphql: expose the humanName field on OAuth 2.0 sessions 2025-04-25 16:55:30 +02:00
Quentin Gliech 4341bff235 frontend: expose the compat session humanName 2025-04-25 12:55:11 +02:00
Hugh Nimmo-Smith 457ade5a60 WIP support for experimental plan management tab in UI 2025-04-22 13:17:29 +01:00
mcalinghee f2a47f9a88 add login by email + feature flag 2025-04-10 17:57:58 +02:00
Quentin Gliech 238be90812 Explain what the 'hsErase' parameter does 2025-03-13 11:36:53 +01:00
Quentin Gliech 1f03d6da03 GraphQL mutation to deactivate a user 2025-03-12 15:58:54 +01:00
Quentin Gliech 19f1091e56 Config option to allow account self-deactivation 2025-03-12 15:58:54 +01:00
Quentin Gliech 09d185da6d Require the user password to add or remove an email address 2025-03-06 17:37:54 +01:00
Quentin Gliech 03eaeca8a6 Only show the password change section if the user has a password 2025-02-24 14:28:06 +01:00
reivilibre 0c26dd859a Support compatibility sessions that do not have devices (#3801)
Co-authored-by: Quentin Gliech <quenting@element.io>
2025-01-27 14:50:31 +00:00
Quentin Gliech 7e6ab8ffc3 Disclose that email is already in use after verification 2025-01-23 18:18:19 +01:00
Quentin Gliech ef077d0e51 Rate-limit email authentications 2025-01-23 12:09:26 +01:00
Quentin Gliech 23b019c626 GraphQL API to use the new email authentication codes 2025-01-14 15:47:36 +01:00
Quentin Gliech 0513f198d8 Rip out the email verification codes
This considers all user_emails as confirmed, and removes the verification code.
It will be replaced by a new email authentication code flow
2025-01-14 15:46:45 +01:00
Quentin Gliech 4ca76be866 Polish the password recovery page
This includes:

 - show an error message if the recovery link is expired, with a button
   to resend the email
 - show an error message if the recovery link has already been used
 - include an invisible username field in the form, so that password
   managers can save the new password
2025-01-13 16:58:42 +01:00
Quentin Gliech b5940b969f Additional fields in the GraphQL API for upstream providers 2025-01-06 11:59:43 +01:00
Quentin Gliech a97d2daa3d Make the issue optional on upstream OAuth 2.0 providers 2024-12-17 13:40:34 +01:00
Quentin Gliech 21fb01d961 Remove contacts from the data model 2024-09-20 20:39:04 +02:00
Olivier 'reivilibre 8737d6f89b graphql: Expose CAPTCHA config and whether password registration is enabled 2024-07-26 13:02:58 +01:00
reivilibre 8147016735 graphql: Add a SetPasswordByRecovery mutation to perform account recovery (#2986) 2024-07-24 16:19:14 +01:00
Quentin Gliech 6f2ab4f738 graphql: allow filtering of sessions by last activity 2024-07-19 13:40:27 +02:00
Quentin Gliech fa32387ca5 Show whether the user is deactivated on the homeserver in the GraphQL API
Fix #2375
2024-07-16 13:20:28 +02:00
Quentin Gliech bac2db9884 GraphQL API to unlock a user
Fixes #2101
2024-07-16 13:20:28 +02:00
reivilibre fbc360d1a9 Backend work to support minimum password complexity (#2965)
* config: Add minimum password complexity option

* PasswordManager: add function for checking if complexity is sufficient

* Enforce password complexity on registration, change and recovery

* cli: Use exit code 1 for weak passwords

This seems preferable to exit code 0, but ideally we should choose one
and document it.

* Expose minimum password complexity score over GraphQL
2024-07-11 10:17:39 +01:00
Quentin Gliech f849b487cf graphql: users query to list users with a few filters 2024-07-05 13:44:14 +02:00
Quentin Gliech 8a1ac9cc91 graphql: move the users queries to their own module 2024-07-05 13:44:14 +02:00
Quentin Gliech 378bcbc39e Update the schema 2024-07-05 10:07:40 +02:00
reivilibre aaa7cf3fe9 Add Self-service Password Change (#2863)
Co-authored-by: Quentin Gliech <quenting@element.io>
2024-06-25 13:25:33 +00:00
reivilibre 121966ccce GraphQL API: Add password_change_allowed to SiteConfig (#2857) 2024-06-20 15:16:50 +01:00
reivilibre d76b54b13f Add a setPassword GraphQL mutation for setting a user's password (#2820)
* Feed `PasswordManager` through to the GraphQL `State`

* Add `setPassword` GraphQL mutation to update a user's password
2024-06-05 18:04:17 +01:00
Quentin Gliech ee68521792 Hide the displayname edit button if disabled in the config 2024-04-30 13:33:47 +02:00
Quentin Gliech 49cf6dc5cc Expose the site config in the GraphQL API 2024-04-30 13:33:47 +02:00
Quentin Gliech 452f4c17f5 graphql: check that the username is available when creating them
This calls the HS to make sure the username isn't reserved.
This check can be bypassed using the `skipHomeserverCheck` flag on the
`addUser` mutation.
2024-02-29 11:21:24 +01:00
Quentin Gliech f3cbd3b315 Parse User Agents on the backend side (#2388)
* Parse user agents on the server side

* Parse and expose user agents on the backend

* Use the parsed user agent in the device consent page

* Fix the device icon tests

* Fix clippy warnings

* Box stuff to avoid large enum variants

* Ignore a clippy warning

* Fix the requester boxing
2024-02-23 16:47:48 +01:00
Quentin Gliech ed5893eb20 Save which user session created a compat session
This also exposes the user session in the GraphQL API, and allow
filtering on browser session ID on the app session list.
2024-02-21 11:55:58 +01:00
Quentin Gliech e041f47dfe Replace Jotai with @tanstack/router (#2359)
* Start replacing jotai with @tanstack/router

* Remove jotai completely

* Move the common layout & reimplement the ?action parameter

This also makes sure everything is properly loaded in the route loader,
and we use fragment where it makes sense

* Change the default error component

* GraphQL API: make the sessions fetchable through node(id: ID!)
2024-02-15 17:19:05 +01:00
Quentin Gliech f8d745d308 Add a GraphQL mutation to allow cross-signing reset 2023-12-05 17:47:36 +01:00
Quentin Gliech 3cb8a26d95 "Can request admin" flag on user 2023-10-09 18:52:30 +02:00
Quentin Gliech 2a100ab927 graphql: allow filtering appsessions on device_id 2023-10-06 16:05:26 +02:00
Quentin Gliech d91b0e20e4 Expose a unified session list in the GraphQL API 2023-09-20 20:27:08 +02:00
Quentin Gliech 50558a7319 Make the last activity timestamp and IP available through the API 2023-09-19 21:57:54 +02:00
Quentin Gliech 83ca90ee3d Add a GraphQL mutation to create arbitrary OAuth2 sessions. 2023-09-11 12:03:42 +02:00