summaryrefslogtreecommitdiffstats
path: root/gateway
diff options
context:
space:
mode:
Diffstat (limited to 'gateway')
-rw-r--r--gateway/gateway.go25
-rw-r--r--gateway/router.go17
-rw-r--r--gateway/samechannel/samechannel.go6
-rw-r--r--gateway/samechannel/samechannel_test.go59
4 files changed, 78 insertions, 29 deletions
diff --git a/gateway/gateway.go b/gateway/gateway.go
index 9baeef9e..bbaef04f 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -33,7 +33,8 @@ import (
)
type Gateway struct {
- *config.Config
+ config.Config
+
Router *Router
MyConfig *config.Gateway
Bridges map[string]*bridge.Bridge
@@ -107,7 +108,7 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
if br == nil {
br = bridge.New(cfg)
br.Config = gw.Router.Config
- br.General = &gw.General
+ br.General = &gw.ConfigValues().General
// set logging
br.Log = log.WithFields(log.Fields{"prefix": "bridge"})
brconfig := &bridge.Config{Remote: gw.Message, Log: log.WithFields(log.Fields{"prefix": br.Protocol}), Bridge: br}
@@ -278,7 +279,7 @@ func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) []*BrM
// Get the ID of the parent message in thread
var canonicalParentMsgID string
- if msg.ParentID != "" && (gw.Config.General.PreserveThreading || dest.GetBool("PreserveThreading")) {
+ if msg.ParentID != "" && (gw.ConfigValues().General.PreserveThreading || dest.GetBool("PreserveThreading")) {
thisParentMsgID := dest.Protocol + " " + msg.ParentID
canonicalParentMsgID = gw.FindCanonicalMsgID(thisParentMsgID)
}
@@ -391,13 +392,13 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool {
func (gw *Gateway) modifyUsername(msg config.Message, dest *bridge.Bridge) string {
br := gw.Bridges[msg.Account]
msg.Protocol = br.Protocol
- if gw.Config.General.StripNick || dest.GetBool("StripNick") {
+ if gw.ConfigValues().General.StripNick || dest.GetBool("StripNick") {
re := regexp.MustCompile("[^a-zA-Z0-9]+")
msg.Username = re.ReplaceAllString(msg.Username, "")
}
nick := dest.GetString("RemoteNickFormat")
if nick == "" {
- nick = gw.Config.General.RemoteNickFormat
+ nick = gw.ConfigValues().General.RemoteNickFormat
}
// loop to replace nicks
@@ -436,7 +437,7 @@ func (gw *Gateway) modifyUsername(msg config.Message, dest *bridge.Bridge) strin
}
func (gw *Gateway) modifyAvatar(msg config.Message, dest *bridge.Bridge) string {
- iconurl := gw.Config.General.IconURL
+ iconurl := gw.ConfigValues().General.IconURL
if iconurl == "" {
iconurl = dest.GetString("IconURL")
}
@@ -477,7 +478,9 @@ func (gw *Gateway) handleFiles(msg *config.Message) {
reg := regexp.MustCompile("[^a-zA-Z0-9]+")
// If we don't have a attachfield or we don't have a mediaserver configured return
- if msg.Extra == nil || (gw.Config.General.MediaServerUpload == "" && gw.Config.General.MediaDownloadPath == "") {
+ if msg.Extra == nil ||
+ (gw.ConfigValues().General.MediaServerUpload == "" &&
+ gw.ConfigValues().General.MediaDownloadPath == "") {
return
}
@@ -499,10 +502,10 @@ func (gw *Gateway) handleFiles(msg *config.Message) {
sha1sum := fmt.Sprintf("%x", sha1.Sum(*fi.Data))[:8]
- if gw.Config.General.MediaServerUpload != "" {
+ if gw.ConfigValues().General.MediaServerUpload != "" {
// Use MediaServerUpload. Upload using a PUT HTTP request and basicauth.
- url := gw.Config.General.MediaServerUpload + "/" + sha1sum + "/" + fi.Name
+ url := gw.ConfigValues().General.MediaServerUpload + "/" + sha1sum + "/" + fi.Name
req, err := http.NewRequest("PUT", url, bytes.NewReader(*fi.Data))
if err != nil {
@@ -521,7 +524,7 @@ func (gw *Gateway) handleFiles(msg *config.Message) {
} else {
// Use MediaServerPath. Place the file on the current filesystem.
- dir := gw.Config.General.MediaDownloadPath + "/" + sha1sum
+ dir := gw.ConfigValues().General.MediaDownloadPath + "/" + sha1sum
err := os.Mkdir(dir, os.ModePerm)
if err != nil && !os.IsExist(err) {
flog.Errorf("mediaserver path failed, could not mkdir: %s %#v", err, err)
@@ -539,7 +542,7 @@ func (gw *Gateway) handleFiles(msg *config.Message) {
}
// Download URL.
- durl := gw.Config.General.MediaServerDownload + "/" + sha1sum + "/" + fi.Name
+ durl := gw.ConfigValues().General.MediaServerDownload + "/" + sha1sum + "/" + fi.Name
flog.Debugf("mediaserver download URL = %s", durl)
diff --git a/gateway/router.go b/gateway/router.go
index 030b7b1e..a6c6dafb 100644
--- a/gateway/router.go
+++ b/gateway/router.go
@@ -2,27 +2,32 @@ package gateway
import (
"fmt"
+ "time"
"github.com/42wim/matterbridge/bridge"
"github.com/42wim/matterbridge/bridge/config"
samechannelgateway "github.com/42wim/matterbridge/gateway/samechannel"
- // "github.com/davecgh/go-spew/spew"
- "time"
)
type Router struct {
+ config.Config
+
Gateways map[string]*Gateway
Message chan config.Message
MattermostPlugin chan config.Message
- *config.Config
}
-func NewRouter(cfg *config.Config) (*Router, error) {
- r := &Router{Message: make(chan config.Message), MattermostPlugin: make(chan config.Message), Gateways: make(map[string]*Gateway), Config: cfg}
+func NewRouter(cfg config.Config) (*Router, error) {
+ r := &Router{
+ Config: cfg,
+ Message: make(chan config.Message),
+ MattermostPlugin: make(chan config.Message),
+ Gateways: make(map[string]*Gateway),
+ }
sgw := samechannelgateway.New(cfg)
gwconfigs := sgw.GetConfig()
- for _, entry := range append(gwconfigs, cfg.Gateway...) {
+ for _, entry := range append(gwconfigs, cfg.ConfigValues().Gateway...) {
if !entry.Enable {
continue
}
diff --git a/gateway/samechannel/samechannel.go b/gateway/samechannel/samechannel.go
index 937d769b..ea846e92 100644
--- a/gateway/samechannel/samechannel.go
+++ b/gateway/samechannel/samechannel.go
@@ -5,17 +5,17 @@ import (
)
type SameChannelGateway struct {
- *config.Config
+ config.Config
}
-func New(cfg *config.Config) *SameChannelGateway {
+func New(cfg config.Config) *SameChannelGateway {
return &SameChannelGateway{Config: cfg}
}
func (sgw *SameChannelGateway) GetConfig() []config.Gateway {
var gwconfigs []config.Gateway
cfg := sgw.Config
- for _, gw := range cfg.SameChannelGateway {
+ for _, gw := range cfg.ConfigValues().SameChannelGateway {
gwconfig := config.Gateway{Name: gw.Name, Enable: gw.Enable}
for _, account := range gw.Accounts {
for _, channel := range gw.Channels {
diff --git a/gateway/samechannel/samechannel_test.go b/gateway/samechannel/samechannel_test.go
index 7c75444f..c0e579ae 100644
--- a/gateway/samechannel/samechannel_test.go
+++ b/gateway/samechannel/samechannel_test.go
@@ -1,16 +1,13 @@
package samechannelgateway
import (
- "fmt"
-
"github.com/42wim/matterbridge/bridge/config"
- "github.com/BurntSushi/toml"
"github.com/stretchr/testify/assert"
"testing"
)
-var testconfig = `
+const testConfig = `
[mattermost.test]
[slack.test]
@@ -21,12 +18,56 @@ var testconfig = `
channels = [ "testing","testing2","testing10"]
`
-func TestGetConfig(t *testing.T) {
- var cfg *config.Config
- if _, err := toml.Decode(testconfig, &cfg); err != nil {
- fmt.Println(err)
+var (
+ expectedConfig = config.Gateway{
+ Name: "blah",
+ Enable: true,
+ In: []config.Bridge(nil),
+ Out: []config.Bridge(nil),
+ InOut: []config.Bridge{
+ {
+ Account: "mattermost.test",
+ Channel: "testing",
+ Options: config.ChannelOptions{Key: ""},
+ SameChannel: true,
+ },
+ {
+ Account: "mattermost.test",
+ Channel: "testing2",
+ Options: config.ChannelOptions{Key: ""},
+ SameChannel: true,
+ },
+ {
+ Account: "mattermost.test",
+ Channel: "testing10",
+ Options: config.ChannelOptions{Key: ""},
+ SameChannel: true,
+ },
+ {
+ Account: "slack.test",
+ Channel: "testing",
+ Options: config.ChannelOptions{Key: ""},
+ SameChannel: true,
+ },
+ {
+ Account: "slack.test",
+ Channel: "testing2",
+ Options: config.ChannelOptions{Key: ""},
+ SameChannel: true,
+ },
+ {
+ Account: "slack.test",
+ Channel: "testing10",
+ Options: config.ChannelOptions{Key: ""},
+ SameChannel: true,
+ },
+ },
}
+)
+
+func TestGetConfig(t *testing.T) {
+ cfg := config.NewConfigFromString([]byte(testConfig))
sgw := New(cfg)
configs := sgw.GetConfig()
- assert.Equal(t, []config.Gateway{{Name: "blah", Enable: true, In: []config.Bridge(nil), Out: []config.Bridge(nil), InOut: []config.Bridge{{Account: "mattermost.test", Channel: "testing", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "mattermost.test", Channel: "testing2", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "mattermost.test", Channel: "testing10", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "slack.test", Channel: "testing", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "slack.test", Channel: "testing2", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "slack.test", Channel: "testing10", Options: config.ChannelOptions{Key: ""}, SameChannel: true}}}}, configs)
+ assert.Equal(t, []config.Gateway{expectedConfig}, configs)
}