From 7685fe1724075c66ac140700c42ea1c21c19d510 Mon Sep 17 00:00:00 2001 From: Wim Date: Wed, 4 Jan 2017 14:10:35 +0100 Subject: [PATCH] Add channel key support (irc). Closes #27 --- bridge/config/config.go | 5 +++++ gateway/gateway.go | 25 ++++++++++++++++++------- matterbridge.toml.sample | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/bridge/config/config.go b/bridge/config/config.go index 971013d7..ac3e939b 100644 --- a/bridge/config/config.go +++ b/bridge/config/config.go @@ -52,9 +52,14 @@ type Protocol struct { UseTLS bool // IRC } +type ChannelOptions struct { + Key string // irc +} + type Bridge struct { Account string Channel string + Options ChannelOptions } type Gateway struct { diff --git a/gateway/gateway.go b/gateway/gateway.go index e36d1a4d..41779733 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -13,12 +13,13 @@ type Gateway struct { *config.Config MyConfig *config.Gateway //Bridges []*bridge.Bridge - Bridges map[string]*bridge.Bridge - ChannelsOut map[string][]string - ChannelsIn map[string][]string - ignoreNicks map[string][]string - Name string - Message chan config.Message + Bridges map[string]*bridge.Bridge + ChannelsOut map[string][]string + ChannelsIn map[string][]string + ignoreNicks map[string][]string + ChannelOptions map[string]config.ChannelOptions + Name string + Message chan config.Message } func New(cfg *config.Config, gateway *config.Gateway) *Gateway { @@ -47,8 +48,13 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error { exists := make(map[string]bool) for _, channel := range append(gw.ChannelsOut[br.Account], gw.ChannelsIn[br.Account]...) { if !exists[br.Account+channel] { + mychannel := channel log.Infof("%s: joining %s", br.Account, channel) - br.JoinChannel(channel) + if br.Protocol == "irc" && gw.ChannelOptions[br.Account+channel].Key != "" { + log.Debugf("using key %s for channel %s", gw.ChannelOptions[br.Account+channel].Key, channel) + mychannel = mychannel + " " + gw.ChannelOptions[br.Account+channel].Key + } + br.JoinChannel(mychannel) exists[br.Account+channel] = true } } @@ -81,21 +87,26 @@ func (gw *Gateway) handleReceive() { } func (gw *Gateway) mapChannels() error { + options := make(map[string]config.ChannelOptions) m := make(map[string][]string) for _, br := range gw.MyConfig.Out { m[br.Account] = append(m[br.Account], br.Channel) + options[br.Account+br.Channel] = br.Options } gw.ChannelsOut = m m = nil m = make(map[string][]string) for _, br := range gw.MyConfig.In { m[br.Account] = append(m[br.Account], br.Channel) + options[br.Account+br.Channel] = br.Options } gw.ChannelsIn = m for _, br := range gw.MyConfig.InOut { gw.ChannelsIn[br.Account] = append(gw.ChannelsIn[br.Account], br.Channel) gw.ChannelsOut[br.Account] = append(gw.ChannelsOut[br.Account], br.Channel) + options[br.Account+br.Channel] = br.Options } + gw.ChannelOptions = options return nil } diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample index ea7f7aec..2c9a4d37 100644 --- a/matterbridge.toml.sample +++ b/matterbridge.toml.sample @@ -534,18 +534,32 @@ enable=true #REQUIRED channel="#testing" + #OPTIONAL - only used for IRC protocol at the moment + [gateway.in.options] + #OPTIONAL - your irc channel key + key="yourkey" + #[[gateway.out]] specifies the account and channels we will sent messages to. [[gateway.out]] account="irc.freenode" channel="#testing" + #OPTIONAL - only used for IRC protocol at the moment + [gateway.out.options] + #OPTIONAL - your irc channel key + key="yourkey" + #[[gateway.inout]] can be used when then channel will be used to receive from #and send messages to [[gateway.inout]] account="mattermost.work" channel="off-topic" + #OPTIONAL - only used for IRC protocol at the moment + [gateway.inout.options] + #OPTIONAL - your irc channel key + key="yourkey" #If you want to do a 1:1 mapping between protocols where the channelnames are the same #e.g. slack and mattermost you can use the samechannelgateway configuration