summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2015-02-18 13:57:55 +0000
committerErik Johnston <erik@matrix.org>2015-02-18 13:57:55 +0000
commita7925259a15f2995af2fedc2a8c59cdabd78b963 (patch)
tree079f8fefaf9ae250d13bb3d3ec888cc16356a577
parentAdd errback to all deferreds in transaction_queue (diff)
parentMerge pull request #80 from matrix-org/restrict-destinations (diff)
downloadsynapse-a7925259a15f2995af2fedc2a8c59cdabd78b963.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into release-v0.7.1
-rw-r--r--synapse/federation/transaction_queue.py30
-rw-r--r--synapse/python_dependencies.py10
-rw-r--r--synapse/rest/media/v1/base_resource.py2
3 files changed, 33 insertions, 9 deletions
diff --git a/synapse/federation/transaction_queue.py b/synapse/federation/transaction_queue.py
index 1e5505a4bf..7d30c924d1 100644
--- a/synapse/federation/transaction_queue.py
+++ b/synapse/federation/transaction_queue.py
@@ -66,6 +66,26 @@ class TransactionQueue(object):
         # HACK to get unique tx id
         self._next_txn_id = int(self._clock.time_msec())
 
+    def can_send_to(self, destination):
+        """Can we send messages to the given server?
+
+        We can't send messages to ourselves. If we are running on localhost
+        then we can only federation with other servers running on localhost.
+        Otherwise we only federate with servers on a public domain.
+
+        Args:
+            destination(str): The server we are possibly trying to send to.
+        Returns:
+            bool: True if we can send to the server.
+        """
+
+        if destination == self.server_name:
+            return False
+        if self.server_name.startswith("localhost"):
+            return destination.startswith("localhost")
+        else:
+            return not destination.startswith("localhost")
+
     @defer.inlineCallbacks
     @log_function
     def enqueue_pdu(self, pdu, destinations, order):
@@ -74,8 +94,9 @@ class TransactionQueue(object):
         # table and we'll get back to it later.
 
         destinations = set(destinations)
-        destinations.discard(self.server_name)
-        destinations.discard("localhost")
+        destinations = set(
+            dest for dest in destinations if self.can_send_to(dest)
+        )
 
         logger.debug("Sending to: %s", str(destinations))
 
@@ -110,7 +131,7 @@ class TransactionQueue(object):
     def enqueue_edu(self, edu):
         destination = edu.destination
 
-        if destination == self.server_name or destination == "localhost":
+        if not self.can_send_to(destination):
             return
 
         deferred = defer.Deferred()
@@ -139,6 +160,9 @@ class TransactionQueue(object):
 
         deferred = defer.Deferred()
 
+        if not self.can_send_to(destination):
+            return
+
         self.pending_failures_by_dest.setdefault(
             destination, []
         ).append(
diff --git a/synapse/python_dependencies.py b/synapse/python_dependencies.py
index ec78fc3627..9464b4fb62 100644
--- a/synapse/python_dependencies.py
+++ b/synapse/python_dependencies.py
@@ -25,6 +25,11 @@ def github_link(project, version, egg):
 
 DEPENDENCY_LINKS = [
     github_link(
+        project="pyca/pynacl",
+        version="d4d3175589b892f6ea7c22f466e0e223853516fa",
+        egg="pynacl-0.3.0",
+    ),
+    github_link(
         project="matrix-org/syutil",
         version="v0.0.3",
         egg="syutil-0.0.3",
@@ -34,11 +39,6 @@ DEPENDENCY_LINKS = [
         version="v0.6.2",
         egg="matrix_angular_sdk-0.6.2",
     ),
-    github_link(
-        project="pyca/pynacl",
-        version="d4d3175589b892f6ea7c22f466e0e223853516fa",
-        egg="pynacl-0.3.0",
-    )
 ]
 
 
diff --git a/synapse/rest/media/v1/base_resource.py b/synapse/rest/media/v1/base_resource.py
index d44d5f1298..b10cbddb81 100644
--- a/synapse/rest/media/v1/base_resource.py
+++ b/synapse/rest/media/v1/base_resource.py
@@ -54,7 +54,7 @@ class BaseMediaResource(Resource):
             try:
                 yield request_handler(self, request)
             except CodeMessageException as e:
-                logger.exception(e)
+                logger.info("Responding with error: %r", e)
                 respond_with_json(
                     request, e.code, cs_exception(e), send_cors=True
                 )