Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 203b1c66c6641771571bdb8116d262fa197beb2a Author: Wim <wim@42.be> Date: Wed Jun 07 23:54:50 2017 +0000 Allow reuse of api in different gateways. See #189 diff --git a/bridge/api/api.go b/bridge/api/api.go index 48715c5..eb27b2c 100644 --- a/bridge/api/api.go +++ b/bridge/api/api.go @@ -226 +227 @@ type ApiMessage struct {   Text string `json:"text"`   Username string `json:"username"`   Avatar string `json:"avatar"` + Gateway string `json:"gateway"`  }    var flog *log.Entry @@ -7612 +7715 @@ 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 27a48c7..022f606 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -1747 +1747 @@ 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)   }   } @@ -2007 +2006 @@ 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 @@ -2357 +2349 @@ 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) @@ -25713 +25821 @@ 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 @@ -2736 +2828 @@ 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   }   }