From d6fa15b7b66d679b7a6291aa6c85780a09cb1755 Mon Sep 17 00:00:00 2001 From: xengineering Date: Fri, 30 Jun 2023 12:28:48 +0200 Subject: Add detection for SASL mechanism This is needed to respond with a SASL auth attempt. --- xmpp/stream_pair.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/xmpp/stream_pair.go b/xmpp/stream_pair.go index 3e42cd1..b353947 100644 --- a/xmpp/stream_pair.go +++ b/xmpp/stream_pair.go @@ -91,6 +91,31 @@ func closeStream(s *session) { } } +func getCharData(t xml.Token) string { + switch c := t.(type) { + case xml.CharData: + return string(c) + default: + return "" + } +} + func streamFeaturesHandler(e []xml.Token) { - log.Println("Received stream features") + mechanism := xml.Name{`urn:ietf:params:xml:ns:xmpp-sasl`, `mechanism`} + + for i, t := range e { + switch s := t.(type) { + case xml.StartElement: + if s.Name == mechanism { + if i+1 < len(e) { + if getCharData(e[i+1]) == `PLAIN` { + log.Println("Got offer for SASL PLAIN") + return + } + } + } + } + } + + log.Println("No compatible SASL mechanism offered!") } -- cgit v1.2.3-70-g09d2