forked from MirrorHub/synapse
Make max_delta equal to period * 10%
This commit is contained in:
parent
7e1c7cc274
commit
847b9dcd1c
3 changed files with 8 additions and 32 deletions
|
@ -39,9 +39,7 @@ class AccountValidityConfig(Config):
|
||||||
else:
|
else:
|
||||||
self.renew_email_subject = "Renew your %(app)s account"
|
self.renew_email_subject = "Renew your %(app)s account"
|
||||||
|
|
||||||
self.startup_job_max_delta = self.parse_duration(
|
self.startup_job_max_delta = self.period * 10. / 100.
|
||||||
config.get("startup_job_max_delta", 0),
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.renew_by_email_enabled and "public_baseurl" not in synapse_config:
|
if self.renew_by_email_enabled and "public_baseurl" not in synapse_config:
|
||||||
raise ConfigError("Can't send renewal emails without 'public_baseurl'")
|
raise ConfigError("Can't send renewal emails without 'public_baseurl'")
|
||||||
|
@ -133,20 +131,15 @@ class RegistrationConfig(Config):
|
||||||
# This means that, if a validity period is set, and Synapse is restarted (it will
|
# This means that, if a validity period is set, and Synapse is restarted (it will
|
||||||
# then derive an expiration date from the current validity period), and some time
|
# then derive an expiration date from the current validity period), and some time
|
||||||
# after that the validity period changes and Synapse is restarted, the users'
|
# after that the validity period changes and Synapse is restarted, the users'
|
||||||
# expiration dates won't be updated unless their account is manually renewed.
|
# expiration dates won't be updated unless their account is manually renewed. This
|
||||||
#
|
# date will be randomly selected within a range [now + period ; now + period + d],
|
||||||
# If set, the ``startup_job_max_delta`` optional setting will make the startup job
|
# where d is equal to 10% of the validity period.
|
||||||
# described above set a random expiration date between t + period and
|
|
||||||
# t + period + startup_job_max_delta, t being the date and time at which the job
|
|
||||||
# sets the expiration date for a given user. This is useful for server admins that
|
|
||||||
# want to avoid Synapse sending a lot of renewal emails at once.
|
|
||||||
#
|
#
|
||||||
#account_validity:
|
#account_validity:
|
||||||
# enabled: True
|
# enabled: True
|
||||||
# period: 6w
|
# period: 6w
|
||||||
# renew_at: 1w
|
# renew_at: 1w
|
||||||
# renew_email_subject: "Renew your %%(app)s account"
|
# renew_email_subject: "Renew your %%(app)s account"
|
||||||
# startup_job_max_delta: 2d
|
|
||||||
|
|
||||||
# The user must provide all of the below types of 3PID when registering.
|
# The user must provide all of the below types of 3PID when registering.
|
||||||
#
|
#
|
||||||
|
|
|
@ -329,14 +329,13 @@ class SQLBaseStore(object):
|
||||||
user_id (str): User ID to set an expiration date for.
|
user_id (str): User ID to set an expiration date for.
|
||||||
use_delta (bool): If set to False, the expiration date for the user will be
|
use_delta (bool): If set to False, the expiration date for the user will be
|
||||||
now + validity period. If set to True, this expiration date will be a
|
now + validity period. If set to True, this expiration date will be a
|
||||||
random value in the [now + period; now + period + max_delta] range,
|
random value in the [now + period; now + period + d] range, d being a
|
||||||
max_delta being the configured value for the size of the range, unless
|
delta equal to 10% of the validity period.
|
||||||
delta is 0, in which case it sets it to now + period.
|
|
||||||
"""
|
"""
|
||||||
now_ms = self._clock.time_msec()
|
now_ms = self._clock.time_msec()
|
||||||
expiration_ts = now_ms + self._account_validity.period
|
expiration_ts = now_ms + self._account_validity.period
|
||||||
|
|
||||||
if use_delta and self._account_validity.startup_job_max_delta:
|
if use_delta:
|
||||||
expiration_ts = self.rand.randrange(
|
expiration_ts = self.rand.randrange(
|
||||||
expiration_ts,
|
expiration_ts,
|
||||||
expiration_ts + self._account_validity.startup_job_max_delta,
|
expiration_ts + self._account_validity.startup_job_max_delta,
|
||||||
|
|
|
@ -436,7 +436,7 @@ class AccountValidityBackgroundJobTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
def make_homeserver(self, reactor, clock):
|
def make_homeserver(self, reactor, clock):
|
||||||
self.validity_period = 10
|
self.validity_period = 10
|
||||||
self.max_delta = 10
|
self.max_delta = self.validity_period * 10. / 100.
|
||||||
|
|
||||||
config = self.default_config()
|
config = self.default_config()
|
||||||
|
|
||||||
|
@ -453,22 +453,6 @@ class AccountValidityBackgroundJobTestCase(unittest.HomeserverTestCase):
|
||||||
return self.hs
|
return self.hs
|
||||||
|
|
||||||
def test_background_job(self):
|
def test_background_job(self):
|
||||||
"""
|
|
||||||
Tests whether the account validity startup background job does the right thing,
|
|
||||||
which is sticking an expiration date to every account that doesn't already have
|
|
||||||
one.
|
|
||||||
"""
|
|
||||||
user_id = self.register_user("kermit", "user")
|
|
||||||
|
|
||||||
self.hs.config.account_validity.startup_job_max_delta = 0
|
|
||||||
|
|
||||||
now_ms = self.hs.clock.time_msec()
|
|
||||||
self.get_success(self.store._set_expiration_date_when_missing())
|
|
||||||
|
|
||||||
res = self.get_success(self.store.get_expiration_ts_for_user(user_id))
|
|
||||||
self.assertEqual(res, now_ms + self.validity_period)
|
|
||||||
|
|
||||||
def test_background_job_with_max_delta(self):
|
|
||||||
"""
|
"""
|
||||||
Tests the same thing as test_background_job, except that it sets the
|
Tests the same thing as test_background_job, except that it sets the
|
||||||
startup_job_max_delta parameter and checks that the expiration date is within the
|
startup_job_max_delta parameter and checks that the expiration date is within the
|
||||||
|
|
Loading…
Reference in a new issue