fix: when changing email with email based 2FA enabled, fail fast #19831
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Throw an exception if a user with email-based 2FA enabled attempts to change their email address.
The user must be forced to disable their 2FA, before they can change their email address.
If this is not enforced, the consequence will be that the user no longer has a verified email, since the 2FA code only will be sent to a verified email address, the user will not be able to log in.
Automatic tests
Manual test steps:
1.1 Configure dhis.conf, set
login.security.email_2fa.enabled = true
1.2 Set up SMTP/email server in settings.
1.3 Verify user email (user profile app)
1.4 Enroll in email 2FA, POST http://localhost:8080/api/2fa/enrollEmail2FA (observe you get an email with a 2fa code)
1.5 Call endpoint to enable email 2FA, POST http://localhost:8080/api/2fa/enable. (JSON payload: {"code": "THE_CODE_FROM_THE_EMAIL"} )
1.6 Log out and try log in, observe you get an email with a 2FA code