Add support for SASL EXTERNAL mechanism

This commit is contained in:
J.P. Neverwas
2021-07-03 06:59:00 -07:00
parent 272c4d1650
commit 7309af6dbf
3 changed files with 104 additions and 2 deletions

View File

@@ -31,8 +31,8 @@ func (irc *Connection) setupSASLCallbacks(result chan<- *SASLResult) (callbacks
}
}
if e.Arguments[1] == "ACK" && listContains(e.Arguments[2], "sasl") {
if irc.SASLMech != "PLAIN" {
result <- &SASLResult{true, errors.New("only PLAIN is supported")}
if irc.SASLMech != "PLAIN" && irc.SASLMech != "EXTERNAL" {
result <- &SASLResult{true, errors.New("only PLAIN and EXTERNAL supported")}
}
irc.SendRaw("AUTHENTICATE " + irc.SASLMech)
}
@@ -41,6 +41,10 @@ func (irc *Connection) setupSASLCallbacks(result chan<- *SASLResult) (callbacks
callbacks = append(callbacks, CallbackID{"CAP", id})
id = irc.AddCallback("AUTHENTICATE", func(e *Event) {
if irc.SASLMech == "EXTERNAL" {
irc.SendRaw("AUTHENTICATE +")
return
}
str := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s\x00%s\x00%s", irc.SASLLogin, irc.SASLLogin, irc.SASLPassword)))
irc.SendRaw("AUTHENTICATE " + str)
})