summary refs log tree commit diff
path: root/synapse/api/auth.py
diff options
context:
space:
mode:
authorWill Hunt <will@half-shot.uk>2018-08-16 01:13:05 +0100
committerWill Hunt <will@half-shot.uk>2018-08-16 01:13:05 +0100
commitb3e005de18d8cc0d871f3f4f4bbfee4d2eca9c24 (patch)
treef2e43f102010ea827fd94e54c79f3036b53f9539 /synapse/api/auth.py
parentisorted this mess (diff)
parentMerge pull request #3686 from matrix-org/rav/changelog_links_to_prs (diff)
downloadsynapse-b3e005de18d8cc0d871f3f4f4bbfee4d2eca9c24.tar.xz
Merge remote-tracking branch 'upstream/develop' into hs/upload-limits
Diffstat (limited to 'synapse/api/auth.py')
-rw-r--r--synapse/api/auth.py36
1 files changed, 33 insertions, 3 deletions
diff --git a/synapse/api/auth.py b/synapse/api/auth.py

index 073229b4c4..3b2a2ab77a 100644 --- a/synapse/api/auth.py +++ b/synapse/api/auth.py
@@ -213,7 +213,7 @@ class Auth(object): default=[b""] )[0] if user and access_token and ip_addr: - self.store.insert_client_ip( + yield self.store.insert_client_ip( user_id=user.to_string(), access_token=access_token, ip=ip_addr, @@ -252,10 +252,10 @@ class Auth(object): if ip_address not in app_service.ip_range_whitelist: defer.returnValue((None, None)) - if "user_id" not in request.args: + if b"user_id" not in request.args: defer.returnValue((app_service.sender, app_service)) - user_id = request.args["user_id"][0] + user_id = request.args[b"user_id"][0].decode('utf8') if app_service.sender == user_id: defer.returnValue((app_service.sender, app_service)) @@ -773,3 +773,33 @@ class Auth(object): raise AuthError( 403, "Guest access not allowed", errcode=Codes.GUEST_ACCESS_FORBIDDEN ) + + @defer.inlineCallbacks + def check_auth_blocking(self, user_id=None): + """Checks if the user should be rejected for some external reason, + such as monthly active user limiting or global disable flag + + Args: + user_id(str|None): If present, checks for presence against existing + MAU cohort + """ + if self.hs.config.hs_disabled: + raise AuthError( + 403, self.hs.config.hs_disabled_message, + errcode=Codes.RESOURCE_LIMIT_EXCEED, + admin_uri=self.hs.config.admin_uri, + ) + if self.hs.config.limit_usage_by_mau is True: + # If the user is already part of the MAU cohort + if user_id: + timestamp = yield self.store.user_last_seen_monthly_active(user_id) + if timestamp: + return + # Else if there is no room in the MAU bucket, bail + current_mau = yield self.store.get_monthly_active_count() + if current_mau >= self.hs.config.max_mau_value: + raise AuthError( + 403, "Monthly Active User Limits AU Limit Exceeded", + admin_uri=self.hs.config.admin_uri, + errcode=Codes.RESOURCE_LIMIT_EXCEED + )