diff options
Diffstat (limited to 'internal/config')
-rw-r--r-- | internal/config/config.go | 57 | ||||
-rw-r--r-- | internal/config/config_appservice.go | 11 | ||||
-rw-r--r-- | internal/config/config_clientapi.go | 16 | ||||
-rw-r--r-- | internal/config/config_currentstate.go | 11 | ||||
-rw-r--r-- | internal/config/config_eduserver.go | 11 | ||||
-rw-r--r-- | internal/config/config_federationapi.go | 16 | ||||
-rw-r--r-- | internal/config/config_federationsender.go | 11 | ||||
-rw-r--r-- | internal/config/config_keyserver.go | 11 | ||||
-rw-r--r-- | internal/config/config_mediaapi.go | 16 | ||||
-rw-r--r-- | internal/config/config_roomserver.go | 11 | ||||
-rw-r--r-- | internal/config/config_serverkey.go | 11 | ||||
-rw-r--r-- | internal/config/config_syncapi.go | 11 | ||||
-rw-r--r-- | internal/config/config_test.go | 69 | ||||
-rw-r--r-- | internal/config/config_userapi.go | 11 |
14 files changed, 168 insertions, 105 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index 6cd04722..4f812885 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -21,6 +21,7 @@ import ( "fmt" "io" "io/ioutil" + "net/url" "path/filepath" "regexp" "strings" @@ -110,6 +111,15 @@ type Derived struct { // servers from creating RoomIDs in exclusive application service namespaces } +type InternalAPIOptions struct { + Listen HTTPAddress `yaml:"listen"` + Connect HTTPAddress `yaml:"connect"` +} + +type ExternalAPIOptions struct { + Listen HTTPAddress `yaml:"listen"` +} + // A Path on the filesystem. type Path string @@ -132,6 +142,17 @@ type Topic string // An Address to listen on. type Address string +// An HTTPAddress to listen on, starting with either http:// or https://. +type HTTPAddress string + +func (h HTTPAddress) Address() (Address, error) { + url, err := url.Parse(string(h)) + if err != nil { + return "", err + } + return Address(url.Host), nil +} + // FileSizeBytes is a file size in bytes type FileSizeBytes int64 @@ -360,6 +381,26 @@ func checkPositive(configErrs *ConfigErrors, key string, value int64) { } } +// checkURL verifies that the parameter is a valid URL +func checkURL(configErrs *ConfigErrors, key, value string) { + if value == "" { + configErrs.Add(fmt.Sprintf("missing config key %q", key)) + return + } + url, err := url.Parse(value) + if err != nil { + configErrs.Add(fmt.Sprintf("config key %q contains invalid URL (%s)", key, err.Error())) + return + } + switch url.Scheme { + case "http": + case "https": + default: + configErrs.Add(fmt.Sprintf("config key %q URL should be http:// or https://", key)) + return + } +} + // checkLogging verifies the parameters logging.* are valid. func (config *Dendrite) checkLogging(configErrs *ConfigErrors) { for _, logrusHook := range config.Logging { @@ -450,7 +491,7 @@ func (config *Dendrite) AppServiceURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.AppServiceAPI.Listen) + return string(config.AppServiceAPI.InternalAPI.Connect) } // RoomServerURL returns an HTTP URL for where the roomserver is listening. @@ -459,7 +500,7 @@ func (config *Dendrite) RoomServerURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.RoomServer.Listen) + return string(config.RoomServer.InternalAPI.Connect) } // UserAPIURL returns an HTTP URL for where the userapi is listening. @@ -468,7 +509,7 @@ func (config *Dendrite) UserAPIURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.UserAPI.Listen) + return string(config.UserAPI.InternalAPI.Connect) } // CurrentStateAPIURL returns an HTTP URL for where the currentstateserver is listening. @@ -477,7 +518,7 @@ func (config *Dendrite) CurrentStateAPIURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.CurrentStateServer.Listen) + return string(config.CurrentStateServer.InternalAPI.Connect) } // EDUServerURL returns an HTTP URL for where the EDU server is listening. @@ -486,7 +527,7 @@ func (config *Dendrite) EDUServerURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.EDUServer.Listen) + return string(config.EDUServer.InternalAPI.Connect) } // FederationSenderURL returns an HTTP URL for where the federation sender is listening. @@ -495,7 +536,7 @@ func (config *Dendrite) FederationSenderURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.FederationSender.Listen) + return string(config.FederationSender.InternalAPI.Connect) } // ServerKeyAPIURL returns an HTTP URL for where the server key API is listening. @@ -504,7 +545,7 @@ func (config *Dendrite) ServerKeyAPIURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.ServerKeyAPI.Listen) + return string(config.ServerKeyAPI.InternalAPI.Connect) } // KeyServerURL returns an HTTP URL for where the key server is listening. @@ -513,7 +554,7 @@ func (config *Dendrite) KeyServerURL() string { // If we support HTTPS we need to think of a practical way to do certificate validation. // People setting up servers shouldn't need to get a certificate valid for the public // internet for an internal API. - return "http://" + string(config.KeyServer.Listen) + return string(config.KeyServer.InternalAPI.Connect) } // SetupTracing configures the opentracing using the supplied configuration. diff --git a/internal/config/config_appservice.go b/internal/config/config_appservice.go index b8962ded..a042691d 100644 --- a/internal/config/config_appservice.go +++ b/internal/config/config_appservice.go @@ -29,8 +29,7 @@ type AppServiceAPI struct { Matrix *Global `yaml:"-"` Derived *Derived `yaml:"-"` // TODO: Nuke Derived from orbit - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` Database DatabaseOptions `yaml:"database"` @@ -38,15 +37,15 @@ type AppServiceAPI struct { } func (c *AppServiceAPI) Defaults() { - c.Listen = "localhost:7777" - c.Bind = "localhost:7777" + c.InternalAPI.Listen = "http://localhost:7777" + c.InternalAPI.Connect = "http://localhost:7777" c.Database.Defaults() c.Database.ConnectionString = "file:appservice.db" } func (c *AppServiceAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "app_service_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "app_service_api.bind", string(c.Bind)) + checkURL(configErrs, "app_service_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "app_service_api.internal_api.bind", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "app_service_api.database.connection_string", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_clientapi.go b/internal/config/config_clientapi.go index ae146fcb..f7878276 100644 --- a/internal/config/config_clientapi.go +++ b/internal/config/config_clientapi.go @@ -9,8 +9,8 @@ type ClientAPI struct { Matrix *Global `yaml:"-"` Derived *Derived `yaml:"-"` // TODO: Nuke Derived from orbit - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` + ExternalAPI ExternalAPIOptions `yaml:"external_api"` // If set disables new users from registering (except via shared // secrets) @@ -37,8 +37,9 @@ type ClientAPI struct { } func (c *ClientAPI) Defaults() { - c.Listen = "localhost:7771" - c.Bind = "localhost:7771" + c.InternalAPI.Listen = "http://localhost:7771" + c.InternalAPI.Connect = "http://localhost:7771" + c.ExternalAPI.Listen = "http://[::]:8071" c.RegistrationSharedSecret = "" c.RecaptchaPublicKey = "" c.RecaptchaPrivateKey = "" @@ -49,8 +50,11 @@ func (c *ClientAPI) Defaults() { } func (c *ClientAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "client_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "client_api.bind", string(c.Bind)) + checkURL(configErrs, "client_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "client_api.internal_api.connect", string(c.InternalAPI.Connect)) + if !isMonolith { + checkURL(configErrs, "client_api.external_api.listen", string(c.ExternalAPI.Listen)) + } if c.RecaptchaEnabled { checkNotEmpty(configErrs, "client_api.recaptcha_public_key", string(c.RecaptchaPublicKey)) checkNotEmpty(configErrs, "client_api.recaptcha_private_key", string(c.RecaptchaPrivateKey)) diff --git a/internal/config/config_currentstate.go b/internal/config/config_currentstate.go index 2687f7f5..c07ebe15 100644 --- a/internal/config/config_currentstate.go +++ b/internal/config/config_currentstate.go @@ -3,8 +3,7 @@ package config type CurrentStateServer struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` // The CurrentState database stores the current state of all rooms. // It is accessed by the CurrentStateServer. @@ -12,14 +11,14 @@ type CurrentStateServer struct { } func (c *CurrentStateServer) Defaults() { - c.Listen = "localhost:7782" - c.Bind = "localhost:7782" + c.InternalAPI.Listen = "http://localhost:7782" + c.InternalAPI.Connect = "http://localhost:7782" c.Database.Defaults() c.Database.ConnectionString = "file:currentstate.db" } func (c *CurrentStateServer) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "current_state_server.listen", string(c.Listen)) - checkNotEmpty(configErrs, "current_state_server.bind", string(c.Bind)) + checkURL(configErrs, "current_state_server.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "current_state_server.internal_api.connect", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "current_state_server.database.connection_string", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_eduserver.go b/internal/config/config_eduserver.go index 02743041..a2ff3697 100644 --- a/internal/config/config_eduserver.go +++ b/internal/config/config_eduserver.go @@ -3,16 +3,15 @@ package config type EDUServer struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` } func (c *EDUServer) Defaults() { - c.Listen = "localhost:7778" - c.Bind = "localhost:7778" + c.InternalAPI.Listen = "http://localhost:7778" + c.InternalAPI.Connect = "http://localhost:7778" } func (c *EDUServer) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "edu_server.listen", string(c.Listen)) - checkNotEmpty(configErrs, "edu_server.bind", string(c.Bind)) + checkURL(configErrs, "edu_server.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "edu_server.internal_api.connect", string(c.InternalAPI.Connect)) } diff --git a/internal/config/config_federationapi.go b/internal/config/config_federationapi.go index d155ef25..727bfce2 100644 --- a/internal/config/config_federationapi.go +++ b/internal/config/config_federationapi.go @@ -5,8 +5,8 @@ import "github.com/matrix-org/gomatrixserverlib" type FederationAPI struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` + ExternalAPI ExternalAPIOptions `yaml:"external_api"` // List of paths to X509 certificates used by the external federation listeners. // These are used to calculate the TLS fingerprints to publish for this server. @@ -21,13 +21,17 @@ type FederationAPI struct { } func (c *FederationAPI) Defaults() { - c.Listen = "localhost:7772" - c.Bind = "localhost:7772" + c.InternalAPI.Listen = "http://localhost:7772" + c.InternalAPI.Connect = "http://localhost:7772" + c.ExternalAPI.Listen = "http://[::]:8072" } func (c *FederationAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "federation_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "federation_api.bind", string(c.Bind)) + checkURL(configErrs, "federation_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "federation_api.internal_api.connect", string(c.InternalAPI.Connect)) + if !isMonolith { + checkURL(configErrs, "federation_api.external_api.listen", string(c.ExternalAPI.Listen)) + } // TODO: not applicable always, e.g. in demos //checkNotZero(configErrs, "federation_api.federation_certificates", int64(len(c.FederationCertificatePaths))) } diff --git a/internal/config/config_federationsender.go b/internal/config/config_federationsender.go index 09d8287b..84f5b6f4 100644 --- a/internal/config/config_federationsender.go +++ b/internal/config/config_federationsender.go @@ -3,8 +3,7 @@ package config type FederationSender struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` // The FederationSender database stores information used by the FederationSender // It is only accessed by the FederationSender. @@ -24,8 +23,8 @@ type FederationSender struct { } func (c *FederationSender) Defaults() { - c.Listen = "localhost:7775" - c.Bind = "localhost:7775" + c.InternalAPI.Listen = "http://localhost:7775" + c.InternalAPI.Connect = "http://localhost:7775" c.Database.Defaults() c.Database.ConnectionString = "file:federationsender.db" @@ -36,8 +35,8 @@ func (c *FederationSender) Defaults() { } func (c *FederationSender) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "federation_sender.listen", string(c.Listen)) - checkNotEmpty(configErrs, "federation_sender.bind", string(c.Bind)) + checkURL(configErrs, "federation_sender.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "federation_sender.internal_api.connect", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "federation_sender.database.connection_string", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_keyserver.go b/internal/config/config_keyserver.go index c0967a8a..89162300 100644 --- a/internal/config/config_keyserver.go +++ b/internal/config/config_keyserver.go @@ -3,21 +3,20 @@ package config type KeyServer struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` Database DatabaseOptions `yaml:"database"` } func (c *KeyServer) Defaults() { - c.Listen = "localhost:7779" - c.Bind = "localhost:7779" + c.InternalAPI.Listen = "http://localhost:7779" + c.InternalAPI.Connect = "http://localhost:7779" c.Database.Defaults() c.Database.ConnectionString = "file:keyserver.db" } func (c *KeyServer) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "key_server.listen", string(c.Listen)) - checkNotEmpty(configErrs, "key_server.bind", string(c.Bind)) + checkURL(configErrs, "key_server.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "key_server.internal_api.bind", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "key_server.database.connection_string", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_mediaapi.go b/internal/config/config_mediaapi.go index 9a4d7e0a..a9425b7b 100644 --- a/internal/config/config_mediaapi.go +++ b/internal/config/config_mediaapi.go @@ -7,8 +7,8 @@ import ( type MediaAPI struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` + ExternalAPI ExternalAPIOptions `yaml:"external_api"` // The MediaAPI database stores information about files uploaded and downloaded // by local users. It is only accessed by the MediaAPI. @@ -36,8 +36,9 @@ type MediaAPI struct { } func (c *MediaAPI) Defaults() { - c.Listen = "localhost:7774" - c.Bind = "localhost:7774" + c.InternalAPI.Listen = "http://localhost:7774" + c.InternalAPI.Connect = "http://localhost:7774" + c.ExternalAPI.Listen = "http://[::]:8074" c.Database.Defaults() c.Database.ConnectionString = "file:mediaapi.db" @@ -48,8 +49,11 @@ func (c *MediaAPI) Defaults() { } func (c *MediaAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "media_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "media_api.bind", string(c.Bind)) + checkURL(configErrs, "media_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "media_api.internal_api.connect", string(c.InternalAPI.Connect)) + if !isMonolith { + checkURL(configErrs, "media_api.external_api.listen", string(c.ExternalAPI.Listen)) + } checkNotEmpty(configErrs, "media_api.database.connection_string", string(c.Database.ConnectionString)) checkNotEmpty(configErrs, "media_api.base_path", string(c.BasePath)) diff --git a/internal/config/config_roomserver.go b/internal/config/config_roomserver.go index 1a16e2b1..2a1fc38b 100644 --- a/internal/config/config_roomserver.go +++ b/internal/config/config_roomserver.go @@ -3,21 +3,20 @@ package config type RoomServer struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` Database DatabaseOptions `yaml:"database"` } func (c *RoomServer) Defaults() { - c.Listen = "localhost:7770" - c.Bind = "localhost:7770" + c.InternalAPI.Listen = "http://localhost:7770" + c.InternalAPI.Connect = "http://localhost:7770" c.Database.Defaults() c.Database.ConnectionString = "file:roomserver.db" } func (c *RoomServer) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "room_server.listen", string(c.Listen)) - checkNotEmpty(configErrs, "room_server.bind", string(c.Bind)) + checkURL(configErrs, "room_server.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "room_server.internal_ap.bind", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "room_server.database.connection_string", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_serverkey.go b/internal/config/config_serverkey.go index 78dc1194..40506d23 100644 --- a/internal/config/config_serverkey.go +++ b/internal/config/config_serverkey.go @@ -5,8 +5,7 @@ import "github.com/matrix-org/gomatrixserverlib" type ServerKeyAPI struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` // The ServerKey database caches the public keys of remote servers. // It may be accessed by the FederationAPI, the ClientAPI, and the MediaAPI. @@ -18,15 +17,15 @@ type ServerKeyAPI struct { } func (c *ServerKeyAPI) Defaults() { - c.Listen = "localhost:7780" - c.Bind = "localhost:7780" + c.InternalAPI.Listen = "http://localhost:7780" + c.InternalAPI.Connect = "http://localhost:7780" c.Database.Defaults() c.Database.ConnectionString = "file:serverkeyapi.db" } func (c *ServerKeyAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "server_key_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "server_key_api.bind", string(c.Bind)) + checkURL(configErrs, "server_key_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "server_key_api.internal_api.bind", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "server_key_api.database.connection_string", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_syncapi.go b/internal/config/config_syncapi.go index 488f6658..fc1bbcf8 100644 --- a/internal/config/config_syncapi.go +++ b/internal/config/config_syncapi.go @@ -3,21 +3,20 @@ package config type SyncAPI struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` Database DatabaseOptions `yaml:"database"` } func (c *SyncAPI) Defaults() { - c.Listen = "localhost:7773" - c.Bind = "localhost:7773" + c.InternalAPI.Listen = "http://localhost:7773" + c.InternalAPI.Connect = "http://localhost:7773" c.Database.Defaults() c.Database.ConnectionString = "file:syncapi.db" } func (c *SyncAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "sync_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "sync_api.bind", string(c.Bind)) + checkURL(configErrs, "sync_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "sync_api.internal_api.bind", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "sync_api.database", string(c.Database.ConnectionString)) } diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 050debff..39b3ee47 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -43,7 +43,8 @@ global: - matrix.org - vector.im kafka: - addresses: [] + addresses: + - localhost:2181 topic_prefix: Dendrite use_naffka: true naffka_database: @@ -57,8 +58,9 @@ global: username: metrics password: metrics app_service_api: - listen: localhost:7777 - bind: localhost:7777 + internal_api: + listen: http://localhost:7777 + connect: http://localhost:7777 database: connection_string: file:appservice.db max_open_conns: 100 @@ -66,8 +68,11 @@ app_service_api: conn_max_lifetime: -1 config_files: [] client_api: - listen: localhost:7771 - bind: localhost:7771 + internal_api: + listen: http://localhost:7771 + connect: http://localhost:7771 + external_api: + listen: http://[::]:8071 registration_disabled: false registration_shared_secret: "" enable_registration_captcha: false @@ -82,23 +87,29 @@ client_api: turn_username: "" turn_password: "" current_state_server: - listen: localhost:7782 - bind: localhost:7782 + internal_api: + listen: http://localhost:7782 + connect: http://localhost:7782 database: connection_string: file:currentstate.db max_open_conns: 100 max_idle_conns: 2 conn_max_lifetime: -1 edu_server: - listen: localhost:7778 - bind: localhost:7778 + internal_api: + listen: http://localhost:7778 + connect: http://localhost:7778 federation_api: - listen: localhost:7772 - bind: localhost:7772 + internal_api: + listen: http://localhost:7772 + connect: http://localhost:7772 + external_api: + listen: http://[::]:8072 federation_certificates: [] federation_sender: - listen: localhost:7775 - bind: localhost:7775 + internal_api: + listen: http://localhost:7775 + connect: http://localhost:7775 database: connection_string: file:federationsender.db max_open_conns: 100 @@ -112,16 +123,20 @@ federation_sender: host: localhost port: 8080 key_server: - listen: localhost:7779 - bind: localhost:7779 + internal_api: + listen: http://localhost:7779 + connect: http://localhost:7779 database: connection_string: file:keyserver.db max_open_conns: 100 max_idle_conns: 2 conn_max_lifetime: -1 media_api: - listen: localhost:7774 - bind: localhost:7774 + internal_api: + listen: http://localhost:7774 + connect: http://localhost:7774 + external_api: + listen: http://[::]:8074 database: connection_string: file:mediaapi.db max_open_conns: 100 @@ -142,16 +157,18 @@ media_api: height: 480 method: scale room_server: - listen: localhost:7770 - bind: localhost:7770 + internal_api: + listen: http://localhost:7770 + connect: http://localhost:7770 database: connection_string: file:roomserver.db max_open_conns: 100 max_idle_conns: 2 conn_max_lifetime: -1 server_key_api: - listen: localhost:7780 - bind: localhost:7780 + internal_api: + listen: http://localhost:7780 + connect: http://localhost:7780 database: connection_string: file:serverkeyapi.db max_open_conns: 100 @@ -165,16 +182,18 @@ server_key_api: - key_id: ed25519:a_RXGa public_key: l8Hft5qXKn1vfHrg3p4+W8gELQVo8N13JkluMfmn2sQ sync_api: - listen: localhost:7773 - bind: localhost:7773 + internal_api: + listen: http://localhost:7773 + connect: http://localhost:7773 database: connection_string: file:syncapi.db max_open_conns: 100 max_idle_conns: 2 conn_max_lifetime: -1 user_api: - listen: localhost:7781 - bind: localhost:7781 + internal_api: + listen: http://localhost:7781 + connect: http://localhost:7781 account_database: connection_string: file:userapi_accounts.db max_open_conns: 100 diff --git a/internal/config/config_userapi.go b/internal/config/config_userapi.go index f7da9e59..2cbd8a45 100644 --- a/internal/config/config_userapi.go +++ b/internal/config/config_userapi.go @@ -3,8 +3,7 @@ package config type UserAPI struct { Matrix *Global `yaml:"-"` - Listen Address `yaml:"listen"` - Bind Address `yaml:"bind"` + InternalAPI InternalAPIOptions `yaml:"internal_api"` // The Account database stores the login details and account information // for local users. It is accessed by the UserAPI. @@ -15,8 +14,8 @@ type UserAPI struct { } func (c *UserAPI) Defaults() { - c.Listen = "localhost:7781" - c.Bind = "localhost:7781" + c.InternalAPI.Listen = "http://localhost:7781" + c.InternalAPI.Connect = "http://localhost:7781" c.AccountDatabase.Defaults() c.DeviceDatabase.Defaults() c.AccountDatabase.ConnectionString = "file:userapi_accounts.db" @@ -24,8 +23,8 @@ func (c *UserAPI) Defaults() { } func (c *UserAPI) Verify(configErrs *ConfigErrors, isMonolith bool) { - checkNotEmpty(configErrs, "user_api.listen", string(c.Listen)) - checkNotEmpty(configErrs, "user_api.bind", string(c.Bind)) + checkURL(configErrs, "user_api.internal_api.listen", string(c.InternalAPI.Listen)) + checkURL(configErrs, "user_api.internal_api.connect", string(c.InternalAPI.Connect)) checkNotEmpty(configErrs, "user_api.account_database.connection_string", string(c.AccountDatabase.ConnectionString)) checkNotEmpty(configErrs, "user_api.device_database.connection_string", string(c.DeviceDatabase.ConnectionString)) } |