summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim <wim@42.be>2017-06-07 23:54:50 +0200
committerWim <wim@42.be>2017-06-07 23:54:50 +0200
commit359d0f2910d52e0eaba6ee62dd9179bcc0097a9d (patch)
tree91d567d29e1def2194158635a6534be339b33403
parentad3cb0386b72a7f9d46b4a2068ff947570fa67ff (diff)
downloadmatterbridge-msglm-359d0f2910d52e0eaba6ee62dd9179bcc0097a9d.tar.gz
matterbridge-msglm-359d0f2910d52e0eaba6ee62dd9179bcc0097a9d.tar.bz2
matterbridge-msglm-359d0f2910d52e0eaba6ee62dd9179bcc0097a9d.zip
Allow reuse of api in different gateways. See #189
-rw-r--r--bridge/api/api.go4
-rw-r--r--gateway/gateway.go21
2 files changed, 20 insertions, 5 deletions
diff --git a/bridge/api/api.go b/bridge/api/api.go
index 48715c50..eb27b2c1 100644
--- a/bridge/api/api.go
+++ b/bridge/api/api.go
@@ -22,6 +22,7 @@ type ApiMessage struct {
Text string `json:"text"`
Username string `json:"username"`
Avatar string `json:"avatar"`
+ Gateway string `json:"gateway"`
}
var flog *log.Entry
@@ -76,12 +77,15 @@ func (b *Api) handlePostMessage(c echo.Context) error {
if err := c.Bind(message); err != nil {
return err
}
+ flog.Debugf("Sending message from %s on %s to gateway", message.Username, "api")
b.Remote <- config.Message{
Text: message.Text,
Username: message.Username,
Channel: "api",
Avatar: message.Avatar,
Account: b.Account,
+ Gateway: message.Gateway,
+ Protocol: "api",
}
return c.JSON(http.StatusOK, message)
}
diff --git a/gateway/gateway.go b/gateway/gateway.go
index 27a48c75..022f606f 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -174,7 +174,7 @@ func (gw *Gateway) getDestChannel(msg *config.Message, dest bridge.Bridge) []con
if _, ok := gw.Channels[getChannelID(*msg)]; !ok {
continue
}
- if channel.Direction == "out" && channel.Account == dest.Account && gw.validGatewayDest(*msg, channel) {
+ if channel.Direction == "out" && channel.Account == dest.Account && gw.validGatewayDest(msg, channel) {
channels = append(channels, *channel)
}
}
@@ -200,7 +200,6 @@ func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) {
}
log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel.Name)
msg.Channel = channel.Name
- msg.Gateway = gw.Name
gw.modifyAvatar(&msg, dest)
gw.modifyUsername(&msg, dest)
// for api we need originchannel as channel
@@ -235,7 +234,9 @@ func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) {
if nick == "" {
nick = dest.Config.RemoteNickFormat
}
- nick = strings.Replace(nick, "{NOPINGNICK}", msg.Username[:1]+"​"+msg.Username[1:], -1)
+ if len(msg.Username) > 0 {
+ nick = strings.Replace(nick, "{NOPINGNICK}", msg.Username[:1]+"​"+msg.Username[1:], -1)
+ }
nick = strings.Replace(nick, "{NICK}", msg.Username, -1)
nick = strings.Replace(nick, "{BRIDGE}", br.Name, -1)
nick = strings.Replace(nick, "{PROTOCOL}", br.Protocol, -1)
@@ -257,13 +258,21 @@ func getChannelID(msg config.Message) string {
return msg.Channel + msg.Account
}
-func (gw *Gateway) validGatewayDest(msg config.Message, channel *config.ChannelInfo) bool {
- GIDmap := gw.Channels[getChannelID(msg)].GID
+func (gw *Gateway) validGatewayDest(msg *config.Message, channel *config.ChannelInfo) bool {
+ GIDmap := gw.Channels[getChannelID(*msg)].GID
+
+ // gateway is specified in message (probably from api)
+ if msg.Gateway != "" {
+ return channel.GID[msg.Gateway]
+ }
+
// check if we are running a samechannelgateway.
// if it is and the channel name matches it's ok, otherwise we shouldn't use this channel.
for k, _ := range GIDmap {
if channel.SameChannel[k] == true {
if msg.Channel == channel.Name {
+ // add the gateway to our message
+ msg.Gateway = k
return true
} else {
return false
@@ -273,6 +282,8 @@ func (gw *Gateway) validGatewayDest(msg config.Message, channel *config.ChannelI
// check if we are in the correct gateway
for k, _ := range GIDmap {
if channel.GID[k] == true {
+ // add the gateway to our message
+ msg.Gateway = k
return true
}
}