aboutsummaryrefslogtreecommitdiff
path: root/internal/config
diff options
context:
space:
mode:
Diffstat (limited to 'internal/config')
-rw-r--r--internal/config/config.go57
-rw-r--r--internal/config/config_appservice.go11
-rw-r--r--internal/config/config_clientapi.go16
-rw-r--r--internal/config/config_currentstate.go11
-rw-r--r--internal/config/config_eduserver.go11
-rw-r--r--internal/config/config_federationapi.go16
-rw-r--r--internal/config/config_federationsender.go11
-rw-r--r--internal/config/config_keyserver.go11
-rw-r--r--internal/config/config_mediaapi.go16
-rw-r--r--internal/config/config_roomserver.go11
-rw-r--r--internal/config/config_serverkey.go11
-rw-r--r--internal/config/config_syncapi.go11
-rw-r--r--internal/config/config_test.go69
-rw-r--r--internal/config/config_userapi.go11
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))
}