summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim <wim@42.be>2019-09-09 23:48:00 +0200
committerGitHub <noreply@github.com>2019-09-09 23:48:00 +0200
commit28783a4146361381e57419aa4bcf623f7ab7b80d (patch)
treec796df65d6b02e7151c4d4c7b6714b99df676171
parentf92927eae5b460e768f6cf5fb97e237640dfbd44 (diff)
downloadmatterbridge-msglm-28783a4146361381e57419aa4bcf623f7ab7b80d.tar.gz
matterbridge-msglm-28783a4146361381e57419aa4bcf623f7ab7b80d.tar.bz2
matterbridge-msglm-28783a4146361381e57419aa4bcf623f7ab7b80d.zip
Do configuration validation on start-up. Fixes #888 (#889)
Fail if: * we don't have any gateways configured * we have gateways configured but with non-existing bridge configuration * we have gateways configured without any configuration
-rw-r--r--bridge/config/config.go5
-rw-r--r--gateway/gateway.go14
-rw-r--r--gateway/gateway_test.go14
-rw-r--r--gateway/router.go6
4 files changed, 38 insertions, 1 deletions
diff --git a/bridge/config/config.go b/bridge/config/config.go
index cf6872a0..5da535dc 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -206,6 +206,7 @@ type BridgeValues struct {
}
type Config interface {
+ Viper() *viper.Viper
BridgeValues() *BridgeValues
GetBool(key string) (bool, bool)
GetInt(key string) (int, bool)
@@ -274,6 +275,10 @@ func (c *config) BridgeValues() *BridgeValues {
return c.cv
}
+func (c *config) Viper() *viper.Viper {
+ return c.v
+}
+
func (c *config) GetBool(key string) (bool, bool) {
c.RLock()
defer c.RUnlock()
diff --git a/gateway/gateway.go b/gateway/gateway.go
index b875ccae..af8aecd8 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -85,6 +85,7 @@ func (gw *Gateway) FindCanonicalMsgID(protocol string, mID string) string {
func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
br := gw.Router.getBridge(cfg.Account)
if br == nil {
+ gw.checkConfig(cfg)
br = bridge.New(cfg)
br.Config = gw.Router.Config
br.General = &gw.BridgeValues().General
@@ -104,6 +105,19 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
return nil
}
+func (gw *Gateway) checkConfig(cfg *config.Bridge) {
+ match := false
+ for _, key := range gw.Router.Config.Viper().AllKeys() {
+ if strings.HasPrefix(key, cfg.Account) {
+ match = true
+ break
+ }
+ }
+ if !match {
+ gw.logger.Fatalf("Account %s defined in gateway %s but no configuration found, exiting.", cfg.Account, gw.Name)
+ }
+}
+
// AddConfig associates a new configuration with the gateway object.
func (gw *Gateway) AddConfig(cfg *config.Gateway) error {
gw.Name = cfg.Name
diff --git a/gateway/gateway_test.go b/gateway/gateway_test.go
index b9bb5b93..2d1a1065 100644
--- a/gateway/gateway_test.go
+++ b/gateway/gateway_test.go
@@ -15,10 +15,15 @@ import (
var testconfig = []byte(`
[irc.freenode]
+server=""
[mattermost.test]
+server=""
[gitter.42wim]
+server=""
[discord.test]
+server=""
[slack.test]
+server=""
[[gateway]]
name = "bridge1"
@@ -44,10 +49,15 @@ var testconfig = []byte(`
var testconfig2 = []byte(`
[irc.freenode]
+server=""
[mattermost.test]
+server=""
[gitter.42wim]
+server=""
[discord.test]
+server=""
[slack.test]
+server=""
[[gateway]]
name = "bridge1"
@@ -87,8 +97,11 @@ var testconfig2 = []byte(`
var testconfig3 = []byte(`
[irc.zzz]
+server=""
[telegram.zzz]
+server=""
[slack.zzz]
+server=""
[[gateway]]
name="bridge"
enable=true
@@ -176,7 +189,6 @@ func TestNewRouter(t *testing.T) {
assert.Equal(t, 1, len(r.Gateways))
assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges))
assert.Equal(t, 4, len(r.Gateways["bridge1"].Channels))
-
r = maketestRouter(testconfig2)
assert.Equal(t, 2, len(r.Gateways))
assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges))
diff --git a/gateway/router.go b/gateway/router.go
index 3d531676..56573f74 100644
--- a/gateway/router.go
+++ b/gateway/router.go
@@ -59,8 +59,14 @@ func NewRouter(rootLogger *logrus.Logger, cfg config.Config, bridgeMap map[strin
// between them.
func (r *Router) Start() error {
m := make(map[string]*bridge.Bridge)
+ if len(r.Gateways) == 0 {
+ return fmt.Errorf("no [[gateway]] configured. See https://github.com/42wim/matterbridge/wiki/How-to-create-your-config for more info")
+ }
for _, gw := range r.Gateways {
r.logger.Infof("Parsing gateway %s", gw.Name)
+ if len(gw.Bridges) == 0 {
+ return fmt.Errorf("no bridges configured for gateway %s. See https://github.com/42wim/matterbridge/wiki/How-to-create-your-config for more info", gw.Name)
+ }
for _, br := range gw.Bridges {
m[br.Account] = br
}