Commit 56414122 authored by Koosha Khajeh Moogahi's avatar Koosha Khajeh Moogahi Committed by Frédéric Buclin

Bug 349337: The time between two successive token requests should be a constant

r/a=LpSolit
parent 03543739
...@@ -140,6 +140,7 @@ use Memoize; ...@@ -140,6 +140,7 @@ use Memoize;
MAX_SUDO_TOKEN_AGE MAX_SUDO_TOKEN_AGE
MAX_LOGIN_ATTEMPTS MAX_LOGIN_ATTEMPTS
LOGIN_LOCKOUT_INTERVAL LOGIN_LOCKOUT_INTERVAL
ACCOUNT_CHANGE_INTERVAL
MAX_STS_AGE MAX_STS_AGE
SAFE_PROTOCOLS SAFE_PROTOCOLS
...@@ -409,6 +410,10 @@ use constant MAX_LOGIN_ATTEMPTS => 5; ...@@ -409,6 +410,10 @@ use constant MAX_LOGIN_ATTEMPTS => 5;
# account is locked. # account is locked.
use constant LOGIN_LOCKOUT_INTERVAL => 30; use constant LOGIN_LOCKOUT_INTERVAL => 30;
# The time in minutes a user must wait before he can request another email to
# create a new account or change his password.
use constant ACCOUNT_CHANGE_INTERVAL => 10;
# The maximum number of seconds the Strict-Transport-Security header # The maximum number of seconds the Strict-Transport-Security header
# will remain valid. Default is one week. # will remain valid. Default is one week.
use constant MAX_STS_AGE => 604800; use constant MAX_STS_AGE => 604800;
......
...@@ -46,7 +46,7 @@ sub issue_new_user_account_token { ...@@ -46,7 +46,7 @@ sub issue_new_user_account_token {
# Is there already a pending request for this login name? If yes, do not throw # Is there already a pending request for this login name? If yes, do not throw
# an error because the user may have lost his email with the token inside. # an error because the user may have lost his email with the token inside.
# But to prevent using this way to mailbomb an email address, make sure # But to prevent using this way to mailbomb an email address, make sure
# the last request is at least 10 minutes old before sending a new email. # the last request is old enough before sending a new email (default: 10 minutes).
my $pending_requests = $dbh->selectrow_array( my $pending_requests = $dbh->selectrow_array(
'SELECT COUNT(*) 'SELECT COUNT(*)
...@@ -54,7 +54,7 @@ sub issue_new_user_account_token { ...@@ -54,7 +54,7 @@ sub issue_new_user_account_token {
WHERE tokentype = ? WHERE tokentype = ?
AND ' . $dbh->sql_istrcmp('eventdata', '?') . ' AND ' . $dbh->sql_istrcmp('eventdata', '?') . '
AND issuedate > ' AND issuedate > '
. $dbh->sql_date_math('NOW()', '-', 10, 'MINUTE'), . $dbh->sql_date_math('NOW()', '-', ACCOUNT_CHANGE_INTERVAL, 'MINUTE'),
undef, ('account', $login_name)); undef, ('account', $login_name));
ThrowUserError('too_soon_for_new_token', {'type' => 'account'}) if $pending_requests; ThrowUserError('too_soon_for_new_token', {'type' => 'account'}) if $pending_requests;
...@@ -122,7 +122,7 @@ sub IssuePasswordToken { ...@@ -122,7 +122,7 @@ sub IssuePasswordToken {
'SELECT 1 FROM tokens 'SELECT 1 FROM tokens
WHERE userid = ? AND tokentype = ? WHERE userid = ? AND tokentype = ?
AND issuedate > ' AND issuedate > '
. $dbh->sql_date_math('NOW()', '-', 10, 'MINUTE'), . $dbh->sql_date_math('NOW()', '-', ACCOUNT_CHANGE_INTERVAL, 'MINUTE'),
undef, ($user->id, 'password')); undef, ($user->id, 'password'));
ThrowUserError('too_soon_for_new_token', {'type' => 'password'}) if $too_soon; ThrowUserError('too_soon_for_new_token', {'type' => 'password'}) if $too_soon;
......
...@@ -1618,7 +1618,8 @@ ...@@ -1618,7 +1618,8 @@
[% ELSIF type == "account" %] [% ELSIF type == "account" %]
an account an account
[% END %] [% END %]
token too recently to request another. Please wait a while and try again. token too recently to request another.
Please wait [% constants.ACCOUNT_CHANGE_INTERVAL %] minutes then try again.
[% ELSIF error == "unknown_action" %] [% ELSIF error == "unknown_action" %]
[% IF action %] [% IF action %]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment