summaryrefslogtreecommitdiffstats
path: root/bridge
diff options
context:
space:
mode:
authorWim <wim@42.be>2017-12-19 23:15:03 +0100
committerWim <wim@42.be>2017-12-19 23:15:03 +0100
commit265457b45171dcae96a1aac9454e3bda2cd0557a (patch)
tree35342a6b83e01b708b20442378799c7692fdf519 /bridge
parent4a4a29c9f6fe202cf4379c0df2ba313848bb8d11 (diff)
downloadmatterbridge-msglm-265457b45171dcae96a1aac9454e3bda2cd0557a.tar.gz
matterbridge-msglm-265457b45171dcae96a1aac9454e3bda2cd0557a.tar.bz2
matterbridge-msglm-265457b45171dcae96a1aac9454e3bda2cd0557a.zip
Refactor and add MediaDownloadSize to General
Diffstat (limited to 'bridge')
-rw-r--r--bridge/api/api.go15
-rw-r--r--bridge/bridge.go49
-rw-r--r--bridge/config/config.go8
-rw-r--r--bridge/discord/discord.go11
-rw-r--r--bridge/gitter/gitter.go20
-rw-r--r--bridge/irc/irc.go11
-rw-r--r--bridge/matrix/matrix.go11
-rw-r--r--bridge/mattermost/mattermost.go8
-rw-r--r--bridge/rocketchat/rocketchat.go12
-rw-r--r--bridge/slack/slack.go14
-rw-r--r--bridge/sshchat/sshchat.go16
-rw-r--r--bridge/steam/steam.go11
-rw-r--r--bridge/telegram/telegram.go14
-rw-r--r--bridge/xmpp/xmpp.go11
14 files changed, 80 insertions, 131 deletions
diff --git a/bridge/api/api.go b/bridge/api/api.go
index 8bae1281..45bc11d3 100644
--- a/bridge/api/api.go
+++ b/bridge/api/api.go
@@ -13,11 +13,9 @@ import (
)
type Api struct {
- Config *config.Protocol
- Remote chan config.Message
- Account string
Messages ring.Ring
sync.RWMutex
+ *config.BridgeConfig
}
type ApiMessage struct {
@@ -35,14 +33,11 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Api {
- b := &Api{}
+func New(cfg *config.BridgeConfig) *Api {
+ b := &Api{BridgeConfig: cfg}
e := echo.New()
b.Messages = ring.Ring{}
- b.Messages.SetCapacity(cfg.Buffer)
- b.Config = &cfg
- b.Account = account
- b.Remote = c
+ b.Messages.SetCapacity(b.Config.Buffer)
if b.Config.Token != "" {
e.Use(middleware.KeyAuth(func(key string, c echo.Context) (bool, error) {
return key == b.Config.Token, nil
@@ -52,7 +47,7 @@ func New(cfg config.Protocol, account string, c chan config.Message) *Api {
e.GET("/api/stream", b.handleStream)
e.POST("/api/message", b.handlePostMessage)
go func() {
- flog.Fatal(e.Start(cfg.BindAddress))
+ flog.Fatal(e.Start(b.Config.BindAddress))
}()
return b
}
diff --git a/bridge/bridge.go b/bridge/bridge.go
index 4c0540f6..8c39b230 100644
--- a/bridge/bridge.go
+++ b/bridge/bridge.go
@@ -46,46 +46,47 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid
b.Protocol = protocol
b.Account = bridge.Account
b.Joined = make(map[string]bool)
+ bridgeConfig := &config.BridgeConfig{General: &cfg.General, Account: bridge.Account, Remote: c}
// override config from environment
config.OverrideCfgFromEnv(cfg, protocol, name)
switch protocol {
case "mattermost":
- b.Config = cfg.Mattermost[name]
- b.Bridger = bmattermost.New(cfg.Mattermost[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Mattermost[name]
+ b.Bridger = bmattermost.New(bridgeConfig)
case "irc":
- b.Config = cfg.IRC[name]
- b.Bridger = birc.New(cfg.IRC[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.IRC[name]
+ b.Bridger = birc.New(bridgeConfig)
case "gitter":
- b.Config = cfg.Gitter[name]
- b.Bridger = bgitter.New(cfg.Gitter[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Gitter[name]
+ b.Bridger = bgitter.New(bridgeConfig)
case "slack":
- b.Config = cfg.Slack[name]
- b.Bridger = bslack.New(cfg.Slack[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Slack[name]
+ b.Bridger = bslack.New(bridgeConfig)
case "xmpp":
- b.Config = cfg.Xmpp[name]
- b.Bridger = bxmpp.New(cfg.Xmpp[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Xmpp[name]
+ b.Bridger = bxmpp.New(bridgeConfig)
case "discord":
- b.Config = cfg.Discord[name]
- b.Bridger = bdiscord.New(cfg.Discord[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Discord[name]
+ b.Bridger = bdiscord.New(bridgeConfig)
case "telegram":
- b.Config = cfg.Telegram[name]
- b.Bridger = btelegram.New(cfg.Telegram[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Telegram[name]
+ b.Bridger = btelegram.New(bridgeConfig)
case "rocketchat":
- b.Config = cfg.Rocketchat[name]
- b.Bridger = brocketchat.New(cfg.Rocketchat[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Rocketchat[name]
+ b.Bridger = brocketchat.New(bridgeConfig)
case "matrix":
- b.Config = cfg.Matrix[name]
- b.Bridger = bmatrix.New(cfg.Matrix[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Matrix[name]
+ b.Bridger = bmatrix.New(bridgeConfig)
case "steam":
- b.Config = cfg.Steam[name]
- b.Bridger = bsteam.New(cfg.Steam[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Steam[name]
+ b.Bridger = bsteam.New(bridgeConfig)
case "sshchat":
- b.Config = cfg.Sshchat[name]
- b.Bridger = bsshchat.New(cfg.Sshchat[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Sshchat[name]
+ b.Bridger = bsshchat.New(bridgeConfig)
case "api":
- b.Config = cfg.Api[name]
- b.Bridger = api.New(cfg.Api[name], bridge.Account, c)
+ bridgeConfig.Config = cfg.Api[name]
+ b.Bridger = api.New(bridgeConfig)
}
return b
}
diff --git a/bridge/config/config.go b/bridge/config/config.go
index 6344fa59..10f1d5f0 100644
--- a/bridge/config/config.go
+++ b/bridge/config/config.go
@@ -60,6 +60,7 @@ type Protocol struct {
IgnoreMessages string // all protocols
Jid string // xmpp
Login string // mattermost, matrix
+ MediaDownloadSize int // all protocols
MediaServerDownload string
MediaServerUpload string
MessageDelay int // IRC, time in millisecond to wait between messages
@@ -147,6 +148,13 @@ type Config struct {
SameChannelGateway []SameChannelGateway
}
+type BridgeConfig struct {
+ Config Protocol
+ General *Protocol
+ Account string
+ Remote chan Message
+}
+
func NewConfig(cfgfile string) *Config {
var cfg Config
if _, err := toml.DecodeFile(cfgfile, &cfg); err != nil {
diff --git a/bridge/discord/discord.go b/bridge/discord/discord.go
index 183b1193..a5e20758 100644
--- a/bridge/discord/discord.go
+++ b/bridge/discord/discord.go
@@ -12,9 +12,6 @@ import (
type bdiscord struct {
c *discordgo.Session
- Config *config.Protocol
- Remote chan config.Message
- Account string
Channels []*discordgo.Channel
Nick string
UseChannelID bool
@@ -24,6 +21,7 @@ type bdiscord struct {
webhookToken string
channelInfoMap map[string]*config.ChannelInfo
sync.RWMutex
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -33,11 +31,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *bdiscord {
- b := &bdiscord{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
+func New(cfg *config.BridgeConfig) *bdiscord {
+ b := &bdiscord{BridgeConfig: cfg}
b.userMemberMap = make(map[string]*discordgo.Member)
b.channelInfoMap = make(map[string]*config.ChannelInfo)
if b.Config.WebhookURL != "" {
diff --git a/bridge/gitter/gitter.go b/bridge/gitter/gitter.go
index 64b6344f..fce58c1f 100644
--- a/bridge/gitter/gitter.go
+++ b/bridge/gitter/gitter.go
@@ -9,13 +9,11 @@ import (
)
type Bgitter struct {
- c *gitter.Gitter
- Config *config.Protocol
- Remote chan config.Message
- Account string
- User *gitter.User
- Users []gitter.User
- Rooms []gitter.Room
+ c *gitter.Gitter
+ User *gitter.User
+ Users []gitter.User
+ Rooms []gitter.Room
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -25,12 +23,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bgitter {
- b := &Bgitter{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
- return b
+func New(cfg *config.BridgeConfig) *Bgitter {
+ return &Bgitter{BridgeConfig: cfg}
}
func (b *Bgitter) Connect() error {
diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go
index b493997a..c9c8cbb2 100644
--- a/bridge/irc/irc.go
+++ b/bridge/irc/irc.go
@@ -25,12 +25,11 @@ type Birc struct {
i *girc.Client
Nick string
names map[string][]string
- Config *config.Protocol
- Remote chan config.Message
connected chan struct{}
Local chan config.Message // local queue for flood control
- Account string
FirstConnection bool
+
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -40,13 +39,11 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Birc {
+func New(cfg *config.BridgeConfig) *Birc {
b := &Birc{}
- b.Config = &cfg
+ b.BridgeConfig = cfg
b.Nick = b.Config.Nick
- b.Remote = c
b.names = make(map[string][]string)
- b.Account = account
b.connected = make(chan struct{})
if b.Config.MessageDelay == 0 {
b.Config.MessageDelay = 1300
diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go
index dee301be..03e493f7 100644
--- a/bridge/matrix/matrix.go
+++ b/bridge/matrix/matrix.go
@@ -15,12 +15,10 @@ import (
type Bmatrix struct {
mc *matrix.Client
- Config *config.Protocol
- Remote chan config.Message
- Account string
UserID string
RoomMap map[string]string
sync.RWMutex
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -30,12 +28,9 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bmatrix {
- b := &Bmatrix{}
+func New(cfg *config.BridgeConfig) *Bmatrix {
+ b := &Bmatrix{BridgeConfig: cfg}
b.RoomMap = make(map[string]string)
- b.Config = &cfg
- b.Account = account
- b.Remote = c
return b
}
diff --git a/bridge/mattermost/mattermost.go b/bridge/mattermost/mattermost.go
index 9d9990b2..7d1da4f8 100644
--- a/bridge/mattermost/mattermost.go
+++ b/bridge/mattermost/mattermost.go
@@ -36,6 +36,7 @@ type Bmattermost struct {
Remote chan config.Message
TeamId string
Account string
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -45,11 +46,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bmattermost {
- b := &Bmattermost{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
+func New(cfg *config.BridgeConfig) *Bmattermost {
+ b := &Bmattermost{BridgeConfig: cfg}
b.mmMap = make(map[string]string)
return b
}
diff --git a/bridge/rocketchat/rocketchat.go b/bridge/rocketchat/rocketchat.go
index eac754f5..05238539 100644
--- a/bridge/rocketchat/rocketchat.go
+++ b/bridge/rocketchat/rocketchat.go
@@ -14,9 +14,7 @@ type MMhook struct {
type Brocketchat struct {
MMhook
- Config *config.Protocol
- Remote chan config.Message
- Account string
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -26,12 +24,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Brocketchat {
- b := &Brocketchat{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
- return b
+func New(cfg *config.BridgeConfig) *Brocketchat {
+ return &Brocketchat{BridgeConfig: cfg}
}
func (b *Brocketchat) Command(cmd string) string {
diff --git a/bridge/slack/slack.go b/bridge/slack/slack.go
index 7206bfdd..d6f73ffd 100644
--- a/bridge/slack/slack.go
+++ b/bridge/slack/slack.go
@@ -27,14 +27,12 @@ type MMMessage struct {
type Bslack struct {
mh *matterhook.Client
sc *slack.Client
- Config *config.Protocol
rtm *slack.RTM
Plus bool
- Remote chan config.Message
Users []slack.User
- Account string
si *slack.Info
channels []slack.Channel
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -44,12 +42,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bslack {
- b := &Bslack{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
- return b
+func New(cfg *config.BridgeConfig) *Bslack {
+ return &Bslack{BridgeConfig: cfg}
}
func (b *Bslack) Command(cmd string) string {
@@ -161,7 +155,7 @@ func (b *Bslack) Send(msg config.Message) (string, error) {
np.AsUser = true
}
np.Username = nick
- np.IconURL = config.GetIconURL(&msg, b.Config)
+ np.IconURL = config.GetIconURL(&msg, &b.Config)
if msg.Avatar != "" {
np.IconURL = msg.Avatar
}
diff --git a/bridge/sshchat/sshchat.go b/bridge/sshchat/sshchat.go
index becb688c..81e83244 100644
--- a/bridge/sshchat/sshchat.go
+++ b/bridge/sshchat/sshchat.go
@@ -10,11 +10,9 @@ import (
)
type Bsshchat struct {
- r *bufio.Scanner
- w io.WriteCloser
- Config *config.Protocol
- Remote chan config.Message
- Account string
+ r *bufio.Scanner
+ w io.WriteCloser
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -24,12 +22,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bsshchat {
- b := &Bsshchat{}
- b.Config = &cfg
- b.Account = account
- b.Remote = c
- return b
+func New(cfg *config.BridgeConfig) *Bsshchat {
+ return &Bsshchat{BridgeConfig: cfg}
}
func (b *Bsshchat) Connect() error {
diff --git a/bridge/steam/steam.go b/bridge/steam/steam.go
index 7eaef46a..51e15c5b 100644
--- a/bridge/steam/steam.go
+++ b/bridge/steam/steam.go
@@ -16,11 +16,9 @@ import (
type Bsteam struct {
c *steam.Client
connected chan struct{}
- Config *config.Protocol
- Remote chan config.Message
- Account string
userMap map[steamid.SteamId]string
sync.RWMutex
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -30,11 +28,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bsteam {
- b := &Bsteam{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
+func New(cfg *config.BridgeConfig) *Bsteam {
+ b := &Bsteam{BridgeConfig: cfg}
b.userMap = make(map[steamid.SteamId]string)
b.connected = make(chan struct{})
return b
diff --git a/bridge/telegram/telegram.go b/bridge/telegram/telegram.go
index 650eec12..95492a88 100644
--- a/bridge/telegram/telegram.go
+++ b/bridge/telegram/telegram.go
@@ -12,10 +12,8 @@ import (
)
type Btelegram struct {
- c *tgbotapi.BotAPI
- Config *config.Protocol
- Remote chan config.Message
- Account string
+ c *tgbotapi.BotAPI
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -25,12 +23,8 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Btelegram {
- b := &Btelegram{}
- b.Config = &cfg
- b.Remote = c
- b.Account = account
- return b
+func New(cfg *config.BridgeConfig) *Btelegram {
+ return &Btelegram{BridgeConfig: cfg}
}
func (b *Btelegram) Connect() error {
diff --git a/bridge/xmpp/xmpp.go b/bridge/xmpp/xmpp.go
index b5429b1f..9cb6f6ad 100644
--- a/bridge/xmpp/xmpp.go
+++ b/bridge/xmpp/xmpp.go
@@ -14,9 +14,7 @@ import (
type Bxmpp struct {
xc *xmpp.Client
xmppMap map[string]string
- Config *config.Protocol
- Remote chan config.Message
- Account string
+ *config.BridgeConfig
}
var flog *log.Entry
@@ -26,12 +24,9 @@ func init() {
flog = log.WithFields(log.Fields{"module": protocol})
}
-func New(cfg config.Protocol, account string, c chan config.Message) *Bxmpp {
- b := &Bxmpp{}
+func New(cfg *config.BridgeConfig) *Bxmpp {
+ b := &Bxmpp{BridgeConfig: cfg}
b.xmppMap = make(map[string]string)
- b.Config = &cfg
- b.Account = account
- b.Remote = c
return b
}