Rename RateLimitConfig to RatelimitSettings (#13442)

This commit is contained in:
Dirk Klimpel 2022-08-03 11:40:20 +02:00 committed by GitHub
parent 570bf32bbb
commit d6e94ad9d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 29 deletions

1
changelog.d/13442.misc Normal file
View File

@ -0,0 +1 @@
Rename class `RateLimitConfig` to `RatelimitSettings` and `FederationRateLimitConfig` to `FederationRatelimitSettings`.

View File

@ -17,7 +17,7 @@ from collections import OrderedDict
from typing import Hashable, Optional, Tuple from typing import Hashable, Optional, Tuple
from synapse.api.errors import LimitExceededError from synapse.api.errors import LimitExceededError
from synapse.config.ratelimiting import RateLimitConfig from synapse.config.ratelimiting import RatelimitSettings
from synapse.storage.databases.main import DataStore from synapse.storage.databases.main import DataStore
from synapse.types import Requester from synapse.types import Requester
from synapse.util import Clock from synapse.util import Clock
@ -314,8 +314,8 @@ class RequestRatelimiter:
self, self,
store: DataStore, store: DataStore,
clock: Clock, clock: Clock,
rc_message: RateLimitConfig, rc_message: RatelimitSettings,
rc_admin_redaction: Optional[RateLimitConfig], rc_admin_redaction: Optional[RatelimitSettings],
): ):
self.store = store self.store = store
self.clock = clock self.clock = clock

View File

@ -21,7 +21,7 @@ from synapse.types import JsonDict
from ._base import Config from ._base import Config
class RateLimitConfig: class RatelimitSettings:
def __init__( def __init__(
self, self,
config: Dict[str, float], config: Dict[str, float],
@ -34,7 +34,7 @@ class RateLimitConfig:
@attr.s(auto_attribs=True) @attr.s(auto_attribs=True)
class FederationRateLimitConfig: class FederationRatelimitSettings:
window_size: int = 1000 window_size: int = 1000
sleep_limit: int = 10 sleep_limit: int = 10
sleep_delay: int = 500 sleep_delay: int = 500
@ -50,11 +50,11 @@ class RatelimitConfig(Config):
# Load the new-style messages config if it exists. Otherwise fall back # Load the new-style messages config if it exists. Otherwise fall back
# to the old method. # to the old method.
if "rc_message" in config: if "rc_message" in config:
self.rc_message = RateLimitConfig( self.rc_message = RatelimitSettings(
config["rc_message"], defaults={"per_second": 0.2, "burst_count": 10.0} config["rc_message"], defaults={"per_second": 0.2, "burst_count": 10.0}
) )
else: else:
self.rc_message = RateLimitConfig( self.rc_message = RatelimitSettings(
{ {
"per_second": config.get("rc_messages_per_second", 0.2), "per_second": config.get("rc_messages_per_second", 0.2),
"burst_count": config.get("rc_message_burst_count", 10.0), "burst_count": config.get("rc_message_burst_count", 10.0),
@ -64,9 +64,9 @@ class RatelimitConfig(Config):
# Load the new-style federation config, if it exists. Otherwise, fall # Load the new-style federation config, if it exists. Otherwise, fall
# back to the old method. # back to the old method.
if "rc_federation" in config: if "rc_federation" in config:
self.rc_federation = FederationRateLimitConfig(**config["rc_federation"]) self.rc_federation = FederationRatelimitSettings(**config["rc_federation"])
else: else:
self.rc_federation = FederationRateLimitConfig( self.rc_federation = FederationRatelimitSettings(
**{ **{
k: v k: v
for k, v in { for k, v in {
@ -80,17 +80,17 @@ class RatelimitConfig(Config):
} }
) )
self.rc_registration = RateLimitConfig(config.get("rc_registration", {})) self.rc_registration = RatelimitSettings(config.get("rc_registration", {}))
self.rc_registration_token_validity = RateLimitConfig( self.rc_registration_token_validity = RatelimitSettings(
config.get("rc_registration_token_validity", {}), config.get("rc_registration_token_validity", {}),
defaults={"per_second": 0.1, "burst_count": 5}, defaults={"per_second": 0.1, "burst_count": 5},
) )
rc_login_config = config.get("rc_login", {}) rc_login_config = config.get("rc_login", {})
self.rc_login_address = RateLimitConfig(rc_login_config.get("address", {})) self.rc_login_address = RatelimitSettings(rc_login_config.get("address", {}))
self.rc_login_account = RateLimitConfig(rc_login_config.get("account", {})) self.rc_login_account = RatelimitSettings(rc_login_config.get("account", {}))
self.rc_login_failed_attempts = RateLimitConfig( self.rc_login_failed_attempts = RatelimitSettings(
rc_login_config.get("failed_attempts", {}) rc_login_config.get("failed_attempts", {})
) )
@ -101,20 +101,20 @@ class RatelimitConfig(Config):
rc_admin_redaction = config.get("rc_admin_redaction") rc_admin_redaction = config.get("rc_admin_redaction")
self.rc_admin_redaction = None self.rc_admin_redaction = None
if rc_admin_redaction: if rc_admin_redaction:
self.rc_admin_redaction = RateLimitConfig(rc_admin_redaction) self.rc_admin_redaction = RatelimitSettings(rc_admin_redaction)
self.rc_joins_local = RateLimitConfig( self.rc_joins_local = RatelimitSettings(
config.get("rc_joins", {}).get("local", {}), config.get("rc_joins", {}).get("local", {}),
defaults={"per_second": 0.1, "burst_count": 10}, defaults={"per_second": 0.1, "burst_count": 10},
) )
self.rc_joins_remote = RateLimitConfig( self.rc_joins_remote = RatelimitSettings(
config.get("rc_joins", {}).get("remote", {}), config.get("rc_joins", {}).get("remote", {}),
defaults={"per_second": 0.01, "burst_count": 10}, defaults={"per_second": 0.01, "burst_count": 10},
) )
# Track the rate of joins to a given room. If there are too many, temporarily # Track the rate of joins to a given room. If there are too many, temporarily
# prevent local joins and remote joins via this server. # prevent local joins and remote joins via this server.
self.rc_joins_per_room = RateLimitConfig( self.rc_joins_per_room = RatelimitSettings(
config.get("rc_joins_per_room", {}), config.get("rc_joins_per_room", {}),
defaults={"per_second": 1, "burst_count": 10}, defaults={"per_second": 1, "burst_count": 10},
) )
@ -124,31 +124,31 @@ class RatelimitConfig(Config):
# * For requests received over federation this is keyed by the origin. # * For requests received over federation this is keyed by the origin.
# #
# Note that this isn't exposed in the configuration as it is obscure. # Note that this isn't exposed in the configuration as it is obscure.
self.rc_key_requests = RateLimitConfig( self.rc_key_requests = RatelimitSettings(
config.get("rc_key_requests", {}), config.get("rc_key_requests", {}),
defaults={"per_second": 20, "burst_count": 100}, defaults={"per_second": 20, "burst_count": 100},
) )
self.rc_3pid_validation = RateLimitConfig( self.rc_3pid_validation = RatelimitSettings(
config.get("rc_3pid_validation") or {}, config.get("rc_3pid_validation") or {},
defaults={"per_second": 0.003, "burst_count": 5}, defaults={"per_second": 0.003, "burst_count": 5},
) )
self.rc_invites_per_room = RateLimitConfig( self.rc_invites_per_room = RatelimitSettings(
config.get("rc_invites", {}).get("per_room", {}), config.get("rc_invites", {}).get("per_room", {}),
defaults={"per_second": 0.3, "burst_count": 10}, defaults={"per_second": 0.3, "burst_count": 10},
) )
self.rc_invites_per_user = RateLimitConfig( self.rc_invites_per_user = RatelimitSettings(
config.get("rc_invites", {}).get("per_user", {}), config.get("rc_invites", {}).get("per_user", {}),
defaults={"per_second": 0.003, "burst_count": 5}, defaults={"per_second": 0.003, "burst_count": 5},
) )
self.rc_invites_per_issuer = RateLimitConfig( self.rc_invites_per_issuer = RatelimitSettings(
config.get("rc_invites", {}).get("per_issuer", {}), config.get("rc_invites", {}).get("per_issuer", {}),
defaults={"per_second": 0.3, "burst_count": 10}, defaults={"per_second": 0.3, "burst_count": 10},
) )
self.rc_third_party_invite = RateLimitConfig( self.rc_third_party_invite = RatelimitSettings(
config.get("rc_third_party_invite", {}), config.get("rc_third_party_invite", {}),
defaults={ defaults={
"per_second": self.rc_message.per_second, "per_second": self.rc_message.per_second,

View File

@ -33,7 +33,7 @@ from synapse.api.ratelimiting import Ratelimiter
from synapse.config import ConfigError from synapse.config import ConfigError
from synapse.config.emailconfig import ThreepidBehaviour from synapse.config.emailconfig import ThreepidBehaviour
from synapse.config.homeserver import HomeServerConfig from synapse.config.homeserver import HomeServerConfig
from synapse.config.ratelimiting import FederationRateLimitConfig from synapse.config.ratelimiting import FederationRatelimitSettings
from synapse.config.server import is_threepid_reserved from synapse.config.server import is_threepid_reserved
from synapse.handlers.auth import AuthHandler from synapse.handlers.auth import AuthHandler
from synapse.handlers.ui_auth import UIAuthSessionDataConstants from synapse.handlers.ui_auth import UIAuthSessionDataConstants
@ -325,7 +325,7 @@ class UsernameAvailabilityRestServlet(RestServlet):
self.registration_handler = hs.get_registration_handler() self.registration_handler = hs.get_registration_handler()
self.ratelimiter = FederationRateLimiter( self.ratelimiter = FederationRateLimiter(
hs.get_clock(), hs.get_clock(),
FederationRateLimitConfig( FederationRatelimitSettings(
# Time window of 2s # Time window of 2s
window_size=2000, window_size=2000,
# Artificially delay requests if rate > sleep_limit/window_size # Artificially delay requests if rate > sleep_limit/window_size

View File

@ -21,7 +21,7 @@ from typing import Any, DefaultDict, Iterator, List, Set
from twisted.internet import defer from twisted.internet import defer
from synapse.api.errors import LimitExceededError from synapse.api.errors import LimitExceededError
from synapse.config.ratelimiting import FederationRateLimitConfig from synapse.config.ratelimiting import FederationRatelimitSettings
from synapse.logging.context import ( from synapse.logging.context import (
PreserveLoggingContext, PreserveLoggingContext,
make_deferred_yieldable, make_deferred_yieldable,
@ -36,7 +36,7 @@ logger = logging.getLogger(__name__)
class FederationRateLimiter: class FederationRateLimiter:
def __init__(self, clock: Clock, config: FederationRateLimitConfig): def __init__(self, clock: Clock, config: FederationRatelimitSettings):
def new_limiter() -> "_PerHostRatelimiter": def new_limiter() -> "_PerHostRatelimiter":
return _PerHostRatelimiter(clock=clock, config=config) return _PerHostRatelimiter(clock=clock, config=config)
@ -63,7 +63,7 @@ class FederationRateLimiter:
class _PerHostRatelimiter: class _PerHostRatelimiter:
def __init__(self, clock: Clock, config: FederationRateLimitConfig): def __init__(self, clock: Clock, config: FederationRatelimitSettings):
""" """
Args: Args:
clock clock