summary refs log tree commit diff
path: root/synapse/util/threepids.py
diff options
context:
space:
mode:
Diffstat (limited to 'synapse/util/threepids.py')
-rw-r--r--synapse/util/threepids.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/synapse/util/threepids.py b/synapse/util/threepids.py

index bd63b9107e..527d873935 100644 --- a/synapse/util/threepids.py +++ b/synapse/util/threepids.py
@@ -19,7 +19,7 @@ import re logger = logging.getLogger(__name__) -async def check_3pid_allowed(hs, medium, address): +async def check_3pid_allowed(hs, medium, address, during_registration: bool = False): """Checks whether a given format of 3PID is allowed to be used on this HS Args: @@ -27,11 +27,19 @@ async def check_3pid_allowed(hs, medium, address): medium (str): 3pid medium - e.g. email, msisdn address (str): address within that medium (e.g. "wotan@matrix.org") msisdns need to first have been canonicalised + during_registration: Whether this request has been made while registering a new + user. Returns: bool: whether the 3PID medium/address is allowed to be added to this HS """ - if hs.config.check_is_for_allowed_local_3pids: + if hs.config.check_is_for_allowed_local_3pids and during_registration: + # If this 3pid is being approved as part of registering a new user, + # we'll want to make sure the 3pid has been invited by someone already. + # + # We condition on registration so that user 3pids do not require an invite while + # doing tasks other than registration, such as resetting their password or adding a + # second email to their account. data = await hs.get_simple_http_client().get_json( "https://%s%s" % ( hs.config.check_is_for_allowed_local_3pids, @@ -39,6 +47,10 @@ async def check_3pid_allowed(hs, medium, address): ), {'medium': medium, 'address': address} ) + logger.info( + "Received internal-info data for medium '%s', address '%s': %s", + medium, address, data, + ) # Check for invalid response if 'hs' not in data and 'shadow_hs' not in data: @@ -49,10 +61,19 @@ async def check_3pid_allowed(hs, medium, address): data.get('hs') != hs.config.server_name and data.get('shadow_hs') != hs.config.server_name ): + logger.info( + "%s did not match %s or %s did not match %s", + data.get("hs"), hs.config.server_name, + data.get("shadow_hs"), hs.config.server_name, + ) return False if data.get('requires_invite', False) and not data.get('invited', False): # Requires an invite but hasn't been invited + logger.info( + "3PID check failed due to 'required_invite' = '%s' and 'invited' = '%s'", + data.get('required_invite'), data.get("invited"), + ) return False return True