diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py
index 8a7cd07fec..fced1aa243 100755
--- a/synapse/app/homeserver.py
+++ b/synapse/app/homeserver.py
@@ -74,7 +74,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
@@ -248,6 +250,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/server.py b/synapse/http/server.py
index 74c220e869..8b887006bb 100644
--- a/synapse/http/server.py
+++ b/synapse/http/server.py
@@ -215,11 +215,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)
@@ -332,8 +333,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,
|