forgejo/tests
Gergely Nagy e35d2af2e5
Rate limit pre-activation email change separately
Changing the email address before any email address is activated should
be subject to a different rate limit than the normal activation email
resending. If there's only one rate limit for both, then if a newly
signed up quickly discovers they gave a wrong email address, they'd have
to wait three minutes to change it.

With the two separate limits, they don't - but they'll have to wait
three minutes before they can change the email address again.

The downside of this setup is that a malicious actor can alternate
between resending and changing the email address (to something like
`user+$idx@domain`, delivered to the same inbox) to effectively halving
the rate limit. I do not think there's a better solution, and this feels
like such a small attack surface that I'd deem it acceptable.

The way the code works after this change is that `ActivatePost` will now
check the `MailChangeLimit_user` key rather than `MailResendLimit_user`,
and if we're within the limit, it will set `MailChangedJustNow_user`. The
`Activate` method - which sends the activation email, whether it is a
normal resend, or one following an email change - will check
`MailChangedJustNow_user`, and if it is set, it will check the rate
limit against `MailChangedLimit_user`, otherwise against
`MailResendLimit_user`, and then will delete the
`MailChangedJustNow_user` key from the cache.

Fixes #2040.

Signed-off-by: Gergely Nagy <forgejo@gergo.csillger.hu>
2023-12-27 12:09:16 +01:00
..
e2e Require MySQL 8.0, PostgreSQL 12, MSSQL 2012 (#27337) 2023-10-03 13:27:57 -04:00
fuzz Move fuzz tests into tests/fuzz (#22376) 2023-01-09 15:30:14 +08:00
gitea-lfs-meta Test views of LFS files (#22196) 2022-12-23 07:41:56 +08:00
gitea-repositories-meta [GITEA] Detect file rename and show in history 2023-12-25 13:33:52 +01:00
integration Rate limit pre-activation email change separately 2023-12-27 12:09:16 +01:00
testdata/data/attachments/a/0 Allow get release download files and lfs files with oauth2 token format (#26430) 2023-10-01 10:41:52 +00:00
mssql.ini.tmpl [CI] set PASSWORD_HASH_ALGO = argon2 for integration tests 2023-12-25 10:29:14 +01:00
mysql.ini.tmpl [CI] disable meilisearch/elasticsearch test, no server yet in CI 2023-12-25 10:29:14 +01:00
pgsql.ini.tmpl [CI] set PASSWORD_HASH_ALGO = argon2 for integration tests 2023-12-25 10:29:14 +01:00
sqlite.ini.tmpl [TESTS] increase test-sqlite log level to Trace 2023-12-25 11:00:49 +01:00
test_utils.go [TESTS] tests.AddFixtures helper loads additional per-test fixtures 2023-12-25 11:00:50 +01:00