forked from lug/matterbridge
		
	Add channel key support (irc). Closes #27
This commit is contained in:
		@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ type Gateway struct {
 | 
			
		||||
	ChannelsOut    map[string][]string
 | 
			
		||||
	ChannelsIn     map[string][]string
 | 
			
		||||
	ignoreNicks    map[string][]string
 | 
			
		||||
	ChannelOptions map[string]config.ChannelOptions
 | 
			
		||||
	Name           string
 | 
			
		||||
	Message        chan config.Message
 | 
			
		||||
}
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user