summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xsynapse/app/homeserver.py5
-rw-r--r--synapse/config/server.py12
-rw-r--r--synapse/http/content_repository.py7
3 files changed, 20 insertions, 4 deletions
diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index 5e2a91b1da..0fa4b40c94 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -75,7 +75,9 @@ class SynapseHomeServer(HomeServer):
         return File("webclient")  # TODO configurable?
 
     def build_resource_for_content_repo(self):
-        return ContentRepoResource(self, self.upload_dir, self.auth)
+        return ContentRepoResource(
+            self, self.upload_dir, self.auth, self.content_addr
+        )
 
     def build_db_pool(self):
         """ Set up all the dbs. Since all the *.sql have IF NOT EXISTS, so we
@@ -249,6 +251,7 @@ def setup():
         db_name=config.database_path,
         tls_context_factory=tls_context_factory,
         config=config,
+        content_addr=config.content_addr,
     )
 
     hs.register_servlets()
diff --git a/synapse/config/server.py b/synapse/config/server.py
index 36143e3c9c..cb178435ea 100644
--- a/synapse/config/server.py
+++ b/synapse/config/server.py
@@ -32,6 +32,14 @@ class ServerConfig(Config):
         self.webclient = True
         self.manhole = args.manhole
 
+        if not args.content_addr:
+            host = args.server_name
+            if ':' not in host:
+                host  = "%s:%d" % (host, args.bind_port)
+            args.content_addr = "https://%s" % (host,)
+
+        self.content_addr = args.content_addr
+
     @classmethod
     def add_arguments(cls, parser):
         super(ServerConfig, cls).add_arguments(parser)
@@ -57,6 +65,9 @@ class ServerConfig(Config):
                                   type=int,
                                   help="Turn on the twisted telnet manhole"
                                   " service on the given port.")
+        server_group.add_argument("--content-addr", default=None,
+                                  help="The host and scheme to use for the "
+                                  "content repository")
 
     def read_signing_key(self, signing_key_path):
         signing_key_base64 = self.read_file(signing_key_path, "signing_key")
@@ -77,3 +88,4 @@ class ServerConfig(Config):
             with open(args.signing_key_path, "w") as signing_key_file:
                 key = nacl.signing.SigningKey.generate()
                 signing_key_file.write(encode_base64(key.encode()))
+
diff --git a/synapse/http/content_repository.py b/synapse/http/content_repository.py
index 9b1ab3fc3e..5f5cd9b9e0 100644
--- a/synapse/http/content_repository.py
+++ b/synapse/http/content_repository.py
@@ -50,11 +50,12 @@ class ContentRepoResource(resource.Resource):
     """
     isLeaf = True
 
-    def __init__(self, hs, directory, auth):
+    def __init__(self, hs, directory, auth, external_addr):
         resource.Resource.__init__(self)
         self.hs = hs
         self.directory = directory
         self.auth = auth
+        self.external_addr = external_addr.rstrip('/')
 
         if not os.path.isdir(self.directory):
             os.mkdir(self.directory)
@@ -167,8 +168,8 @@ class ContentRepoResource(resource.Resource):
             # ...plus self-signed SSL won't work to remote clients anyway
             # ...and we can't assume that it's SSL anyway, as we might want to
             # server it via the non-SSL listener...
-            url = "https://%s/_matrix/content/%s" % (
-                self.hs.domain_with_port, file_name
+            url = "%s/_matrix/content/%s" % (
+                self.external_addr, file_name
             )
 
             respond_with_json_bytes(request, 200,