summary refs log tree commit diff
path: root/synapse/util
diff options
context:
space:
mode:
authorMatthew Hodgson <matthew@matrix.org>2018-03-13 01:34:20 +0000
committerMatthew Hodgson <matthew@matrix.org>2018-03-13 01:34:20 +0000
commite44607747883af3ec4ebc3ae42f38f2c00010385 (patch)
treefbd8325c8d2dbdd7caab2a4416e3d5f0b11275eb /synapse/util
parentfix thinko on 3pid whitelisting (diff)
downloadsynapse-e44607747883af3ec4ebc3ae42f38f2c00010385.tar.xz
delegate to the IS to check 3PID signup eligibility
Diffstat (limited to 'synapse/util')
-rw-r--r--synapse/util/threepids.py25
1 files changed, 21 insertions, 4 deletions
diff --git a/synapse/util/threepids.py b/synapse/util/threepids.py
index 75efa0117b..cd629c2ec9 100644
--- a/synapse/util/threepids.py
+++ b/synapse/util/threepids.py
@@ -16,9 +16,12 @@
 import logging
 import re
 
+from twisted.internet import defer
+
 logger = logging.getLogger(__name__)
 
 
+@defer.inlineCallbacks
 def check_3pid_allowed(hs, medium, address):
     """Checks whether a given format of 3PID is allowed to be used on this HS
 
@@ -28,9 +31,20 @@ def check_3pid_allowed(hs, medium, address):
         address (str): address within that medium (e.g. "wotan@matrix.org")
             msisdns need to first have been canonicalised
     Returns:
-        bool: whether the 3PID medium/address is allowed to be added to this HS
+        defered bool: whether the 3PID medium/address is allowed to be added to this HS
     """
 
+    if hs.config.check_is_for_allowed_local_3pids:
+        data = yield hs.http_client.get_json(
+            "https://%s%s" % (
+                hs.config.check_is_for_allowed_local_3pids,
+                "/_matrix/identity/api/v1/discover_urls"
+            ),
+            {'medium': medium, 'address': address }
+        )
+        defer.returnValue(data.hs_url+"/" == self.hs.config.public_baseurl)
+        return
+
     if hs.config.allowed_local_3pids:
         for constraint in hs.config.allowed_local_3pids:
             logger.debug(
@@ -41,8 +55,11 @@ def check_3pid_allowed(hs, medium, address):
                 medium == constraint['medium'] and
                 re.match(constraint['pattern'], address)
             ):
-                return True
+                defer.returnValue(True)
+                return
     else:
-        return True
+        defer.returnValue(True)
+        return
 
-    return False
+    defer.returnValue(False)
+    return