mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-11 04:05:10 +02:00
[SECURITY] Notify users about account security changes
- Currently if the password, primary mail, TOTP or security keys are changed, no notification is made of that and makes compromising an account a bit easier as it's essentially undetectable until the original person tries to log in. Although other changes should be made as well (re-authing before allowing a password change), this should go a long way of improving the account security in Forgejo. - Adds a mail notification for password and primary mail changes. For the primary mail change, a mail notification is sent to the old primary mail. - Add a mail notification when TOTP or a security keys is removed, if no other 2FA method is configured the mail will also contain that 2FA is no longer needed to log into their account. - `MakeEmailAddressPrimary` is refactored to the user service package, as it now involves calling the mailer service. - Unit tests added. - Integration tests added.
This commit is contained in:
parent
ded237ee77
commit
4383da91bd
24 changed files with 543 additions and 116 deletions
|
@ -55,14 +55,14 @@ func TestAdminNotificationMail_test(t *testing.T) {
|
|||
defer test.MockVariableValue(&setting.Admin.SendNotificationEmailOnNewUser, true)()
|
||||
|
||||
called := false
|
||||
defer mockMailSettings(func(msgs ...*Message) {
|
||||
defer MockMailSettings(func(msgs ...*Message) {
|
||||
assert.Equal(t, len(msgs), 1, "Test provides only one admin user, so only one email must be sent")
|
||||
assert.Equal(t, msgs[0].To, users[0].Email, "checks if the recipient is the admin of the instance")
|
||||
manageUserURL := setting.AppURL + "admin/users/" + strconv.FormatInt(users[1].ID, 10)
|
||||
assert.Contains(t, msgs[0].Body, manageUserURL)
|
||||
assert.Contains(t, msgs[0].Body, users[1].HTMLURL())
|
||||
assert.Contains(t, msgs[0].Body, users[1].Name, "user name of the newly created user")
|
||||
assertTranslatedLocale(t, msgs[0].Body, "mail.admin", "admin.users")
|
||||
AssertTranslatedLocale(t, msgs[0].Body, "mail.admin", "admin.users")
|
||||
called = true
|
||||
})()
|
||||
MailNewUser(ctx, users[1])
|
||||
|
@ -71,7 +71,7 @@ func TestAdminNotificationMail_test(t *testing.T) {
|
|||
|
||||
t.Run("SendNotificationEmailOnNewUser_false", func(t *testing.T) {
|
||||
defer test.MockVariableValue(&setting.Admin.SendNotificationEmailOnNewUser, false)()
|
||||
defer mockMailSettings(func(msgs ...*Message) {
|
||||
defer MockMailSettings(func(msgs ...*Message) {
|
||||
assert.Equal(t, 1, 0, "this shouldn't execute. MailNewUser must exit early since SEND_NOTIFICATION_EMAIL_ON_NEW_USER is disabled")
|
||||
})()
|
||||
MailNewUser(ctx, users[1])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue