diff --git a/synapse/config/server.py b/synapse/config/server.py
index c25feb4c58..fe1b63469a 100644
--- a/synapse/config/server.py
+++ b/synapse/config/server.py
@@ -17,64 +17,85 @@ from ._base import Config
class ServerConfig(Config):
- def __init__(self, args):
- super(ServerConfig, self).__init__(args)
- self.server_name = args.server_name
- self.bind_port = args.bind_port
- self.bind_host = args.bind_host
- self.unsecure_port = args.unsecure_port
- self.daemonize = args.daemonize
- self.pid_file = self.abspath(args.pid_file)
- self.web_client = args.web_client
- self.manhole = args.manhole
- self.soft_file_limit = args.soft_file_limit
- if not args.content_addr:
- host = args.server_name
+ def read_config(self, config):
+ self.server_name = config["server_name"]
+ self.bind_port = config["bind_port"]
+ self.bind_host = config["bind_host"]
+ self.unsecure_port = config["unsecure_port"]
+ self.manhole = config["manhole"]
+ self.pid_file = self.abspath(config.get("pid_file"))
+ self.web_client = config["web_client"]
+ self.soft_file_limit = config["soft_file_limit"]
+
+ # Attempt to guess the content_addr for the v0 content repostitory
+ content_addr = config.get("content_addr")
+ if not content_addr:
+ host = self.server_name
if ':' not in host:
- host = "%s:%d" % (host, args.unsecure_port)
+ host = "%s:%d" % (host, self.unsecure_port)
else:
host = host.split(':')[0]
- host = "%s:%d" % (host, args.unsecure_port)
- args.content_addr = "http://%s" % (host,)
+ host = "%s:%d" % (host, self.unsecure_port)
+ content_addr = "http://%s" % (host,)
+
+ self.content_addr = content_addr
+
+ def default_config(self, config_dir_path, server_name):
+ if ":" in server_name:
+ bind_port = int(server_name.split(":")[1])
+ unsecure_port = bind_port - 400
+ else:
+ bind_port = 8448
+ unsecure_port = 8008
+
+ pid_file = self.abspath("homeserver.pid")
+ return """\
+ ## Server ##
+
+ # The domain name of the server, with optional explicit port.
+ # This is used by remote servers to connect to this server,
+ # e.g. matrix.org, localhost:8080, etc.
+ server_name: "%(server_name)s"
+
+ # The port to listen for HTTPS requests on.
+ # For when matrix traffic is sent directly to synapse.
+ bind_port: %(bind_port)s
- self.content_addr = args.content_addr
+ # The port to listen for HTTP requests on.
+ # For when matrix traffic passes through loadbalancer that unwraps TLS.
+ unsecure_port: %(unsecure_port)s
+
+ # Local interface to listen on.
+ # The empty string will cause synapse to listen on all interfaces.
+ bind_host: ""
+
+ # When running as a daemon, the file to store the pid in
+ pid_file: %(pid_file)s
+
+ # Whether to serve a web client from the HTTP/HTTPS root resource.
+ web_client: True
+
+ # Set the soft limit on the number of file descriptors synapse can use
+ # Zero is used to indicate synapse should set the soft limit to the
+ # hard limit.
+ soft_file_limit: 0
+
+ # Turn on the twisted telnet manhole service on localhost on the given
+ # port.
+ manhole: ~
+ """ % locals()
+
+ def read_arguments(self, args):
+ if args.manhole is not None:
+ self.manhole = args.manhole
+ self.daemonize = args.daemonize
- @classmethod
- def add_arguments(cls, parser):
- super(ServerConfig, cls).add_arguments(parser)
+ def add_arguments(self, parser):
server_group = parser.add_argument_group("server")
- server_group.add_argument(
- "-H", "--server-name", default="localhost",
- help="The domain name of the server, with optional explicit port. "
- "This is used by remote servers to connect to this server, "
- "e.g. matrix.org, localhost:8080, etc."
- )
- server_group.add_argument("-p", "--bind-port", metavar="PORT",
- type=int, help="https port to listen on",
- default=8448)
- server_group.add_argument("--unsecure-port", metavar="PORT",
- type=int, help="http port to listen on",
- default=8008)
- server_group.add_argument("--bind-host", default="",
- help="Local interface to listen on")
server_group.add_argument("-D", "--daemonize", action='store_true',
help="Daemonize the home server")
- server_group.add_argument('--pid-file', default="homeserver.pid",
- help="When running as a daemon, the file to"
- " store the pid in")
- server_group.add_argument('--web_client', default=True, type=bool,
- help="Whether or not to serve a web client")
server_group.add_argument("--manhole", metavar="PORT", dest="manhole",
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")
- server_group.add_argument("--soft-file-limit", type=int, default=0,
- help="Set the soft limit on the number of "
- "file descriptors synapse can use. "
- "Zero is used to indicate synapse "
- "should set the soft limit to the hard"
- "limit.")
|