Add (PLAIN) SASL support
This commit is contained in:
parent
5fe4b749cf
commit
79ffb76f6e
|
@ -108,6 +108,9 @@ func NewBridge(name string, config *Config, kind string) *Bridge {
|
|||
func (b *Bridge) createIRC(name string) *irc.Connection {
|
||||
i := irc.IRC(b.Config.IRC.Nick, b.Config.IRC.Nick)
|
||||
i.UseTLS = b.Config.IRC.UseTLS
|
||||
i.UseSASL = b.Config.IRC.UseSASL
|
||||
i.SASLLogin = b.Config.IRC.NickServNick
|
||||
i.SASLPassword = b.Config.IRC.NickServPassword
|
||||
i.TLSConfig = &tls.Config{InsecureSkipVerify: b.Config.IRC.SkipTLSVerify}
|
||||
if b.Config.IRC.Password != "" {
|
||||
i.Password = b.Config.IRC.Password
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
type Config struct {
|
||||
IRC struct {
|
||||
UseTLS bool
|
||||
UseSASL bool
|
||||
SkipTLSVerify bool
|
||||
Server string
|
||||
Nick string
|
||||
|
|
|
@ -11,6 +11,11 @@ Server="irc.freenode.net:6667"
|
|||
#OPTIONAL (default false)
|
||||
UseTLS=false
|
||||
|
||||
#Enable SASL (PLAIN) authentication. (freenode requires this from eg AWS hosts)
|
||||
#It uses NickServNick and NickServPassword as login and password
|
||||
#OPTIONAL (deefault false)
|
||||
UseSASL=false
|
||||
|
||||
#Enable to not verify the certificate on your irc server. i
|
||||
#e.g. when using selfsigned certificates
|
||||
#OPTIONAL (default false)
|
||||
|
@ -21,6 +26,7 @@ SkipTLSVerify=true
|
|||
Nick="matterbot"
|
||||
|
||||
#If you registered your bot with a service like Nickserv on freenode.
|
||||
#Also being used when UseSASL=true
|
||||
#OPTIONAL
|
||||
NickServNick="nickserv"
|
||||
NickServPassword="secret"
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
log "github.com/Sirupsen/logrus"
|
||||
)
|
||||
|
||||
var version = "0.5.0-beta1"
|
||||
var version = "0.5.0-beta2"
|
||||
|
||||
func init() {
|
||||
log.SetFormatter(&log.TextFormatter{FullTimestamp: true})
|
||||
|
|
|
@ -439,6 +439,25 @@ func (irc *Connection) Connect(server string) error {
|
|||
if len(irc.Password) > 0 {
|
||||
irc.pwrite <- fmt.Sprintf("PASS %s\r\n", irc.Password)
|
||||
}
|
||||
|
||||
resChan := make(chan *SASLResult)
|
||||
if irc.UseSASL {
|
||||
irc.setupSASLCallbacks(resChan)
|
||||
irc.pwrite <- fmt.Sprintf("CAP LS\r\n")
|
||||
// request SASL
|
||||
irc.pwrite <- fmt.Sprintf("CAP REQ :sasl\r\n")
|
||||
// if sasl request doesn't complete in 15 seconds, close chan and timeout
|
||||
select {
|
||||
case res := <-resChan:
|
||||
if res.Failed {
|
||||
close(resChan)
|
||||
return res.Err
|
||||
}
|
||||
case <-time.After(time.Second * 15):
|
||||
close(resChan)
|
||||
return errors.New("SASL setup timed out. This shouldn't happen.")
|
||||
}
|
||||
}
|
||||
irc.pwrite <- fmt.Sprintf("NICK %s\r\n", irc.nick)
|
||||
irc.pwrite <- fmt.Sprintf("USER %s 0.0.0.0 0.0.0.0 :%s\r\n", irc.user, irc.user)
|
||||
return nil
|
||||
|
@ -466,6 +485,7 @@ func IRC(nick, user string) *Connection {
|
|||
KeepAlive: 4 * time.Minute,
|
||||
Timeout: 1 * time.Minute,
|
||||
PingFreq: 15 * time.Minute,
|
||||
SASLMech: "PLAIN",
|
||||
QuitMessage: "",
|
||||
}
|
||||
irc.setupCallbacks()
|
||||
|
|
|
@ -18,6 +18,10 @@ type Connection struct {
|
|||
Error chan error
|
||||
Password string
|
||||
UseTLS bool
|
||||
UseSASL bool
|
||||
SASLLogin string
|
||||
SASLPassword string
|
||||
SASLMech string
|
||||
TLSConfig *tls.Config
|
||||
Version string
|
||||
Timeout time.Duration
|
||||
|
|
|
@ -113,8 +113,8 @@
|
|||
{
|
||||
"importpath": "github.com/thoj/go-ircevent",
|
||||
"repository": "https://github.com/thoj/go-ircevent",
|
||||
"vcs": "",
|
||||
"revision": "da78ed515c0f0833e7a92c7cc52898176198e2c1",
|
||||
"vcs": "git",
|
||||
"revision": "98c1902dd2097f38142384167e60206ba26f1585",
|
||||
"branch": "master",
|
||||
"notests": true
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue