From 2f6b1a11209260f4ee7b9469e39d16e78fb23a0f Mon Sep 17 00:00:00 2001 From: xengineering Date: Fri, 30 Jun 2023 12:09:50 +0200 Subject: Add dummy handler for stream features elements This is the first step to handle stream features correctly with the new routing infrastructure. --- xmpp/router.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'xmpp/router.go') diff --git a/xmpp/router.go b/xmpp/router.go index 839f870..879579d 100644 --- a/xmpp/router.go +++ b/xmpp/router.go @@ -22,7 +22,7 @@ type routingTable []struct { // variable would have the problem that it could be altered during execution. func getRoutingTable() routingTable { return routingTable{ - // TODO fill with entries + {xml.Name{`http://etherx.jabber.org/streams`, `features`}, streamFeaturesHandler}, } } -- cgit v1.2.3-70-g09d2 From 8b608265772ba5df13d24071117c694bdfd1212a Mon Sep 17 00:00:00 2001 From: xengineering Date: Fri, 30 Jun 2023 13:07:12 +0200 Subject: Add session pointer to routing infrastructure It is nearly useless to route a XML element to an appropriate handler function if the latter has no idea how to send responses to the server or the GUI. Passing a pointer to the session solves this issue. --- xmpp/router.go | 6 +++--- xmpp/router_test.go | 7 ++++--- xmpp/stream_pair.go | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) (limited to 'xmpp/router.go') diff --git a/xmpp/router.go b/xmpp/router.go index 879579d..bd619b4 100644 --- a/xmpp/router.go +++ b/xmpp/router.go @@ -12,7 +12,7 @@ import ( // entry of the routingTable. type routingTable []struct { name xml.Name - handler func([]xml.Token) + handler func(*session, []xml.Token) } // getRoutingTable returns the routing table used in @@ -29,7 +29,7 @@ func getRoutingTable() routingTable { // route determines the correct handler function for the given XML element by a // given routingTable. In addition it executes the determined handler function. // If no handler function is found an error message is send via the log module. -func route(e []xml.Token, t routingTable) { +func route(s *session, e []xml.Token, t routingTable) { var name xml.Name // TODO a stronger definition of an XML element (as here @@ -50,7 +50,7 @@ func route(e []xml.Token, t routingTable) { for _, r := range t { if name == r.name { - r.handler(e) + r.handler(s, e) return } } diff --git a/xmpp/router_test.go b/xmpp/router_test.go index ea13712..41484c5 100644 --- a/xmpp/router_test.go +++ b/xmpp/router_test.go @@ -23,9 +23,10 @@ type routerTest struct { // validated. func TestRouter(t *testing.T) { var testpoint int + var s session - factory := func(tp *int, i int) func([]xml.Token) { - return func([]xml.Token) { + factory := func(tp *int, i int) func(*session, []xml.Token) { + return func(*session, []xml.Token) { *tp = i } } @@ -60,7 +61,7 @@ func TestRouter(t *testing.T) { tokens = append(tokens, xml.CopyToken(token)) } - route(tokens, testRouting) + route(&s, tokens, testRouting) if testpoint != v.value { t.Fatalf("XML element was not routed correctly!\n") diff --git a/xmpp/stream_pair.go b/xmpp/stream_pair.go index 8f70318..8ec06a6 100644 --- a/xmpp/stream_pair.go +++ b/xmpp/stream_pair.go @@ -28,7 +28,7 @@ func runStreamPair(s *session) { } if buf.isComplete() { element := buf.reset() - route(element, getRoutingTable()) + route(s, element, getRoutingTable()) } } } @@ -91,7 +91,7 @@ func closeStream(s *session) { } } -func streamFeaturesHandler(e []xml.Token) { +func streamFeaturesHandler(s *session, e []xml.Token) { sasl := hasSaslPlain(e) if sasl { log.Println("Stream is compatible with SASL PLAIN mechanism") -- cgit v1.2.3-70-g09d2 From f3aa8bec6e7d91b84a73688191751f9723c008a8 Mon Sep 17 00:00:00 2001 From: xengineering Date: Fri, 30 Jun 2023 13:21:34 +0200 Subject: Add SASL success handler --- xmpp/router.go | 1 + xmpp/sasl.go | 3 +++ 2 files changed, 4 insertions(+) (limited to 'xmpp/router.go') diff --git a/xmpp/router.go b/xmpp/router.go index bd619b4..84256bb 100644 --- a/xmpp/router.go +++ b/xmpp/router.go @@ -23,6 +23,7 @@ type routingTable []struct { func getRoutingTable() routingTable { return routingTable{ {xml.Name{`http://etherx.jabber.org/streams`, `features`}, streamFeaturesHandler}, + {xml.Name{`urn:ietf:params:xml:ns:xmpp-sasl`, `success`}, saslSuccessHandler}, } } diff --git a/xmpp/sasl.go b/xmpp/sasl.go index e460f5e..62c312f 100644 --- a/xmpp/sasl.go +++ b/xmpp/sasl.go @@ -64,3 +64,6 @@ func hasSaslPlain(e []xml.Token) bool { return false } + +func saslSuccessHandler(s *session, e []xml.Token) { +} -- cgit v1.2.3-70-g09d2 From d7a537267e8bf5631e29ed97218e213da88f3490 Mon Sep 17 00:00:00 2001 From: xengineering Date: Fri, 30 Jun 2023 13:33:14 +0200 Subject: Implement basic handler for failed SASL auth Writing to the log is still better than doing nothing ... --- xmpp/router.go | 1 + xmpp/sasl.go | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'xmpp/router.go') diff --git a/xmpp/router.go b/xmpp/router.go index 84256bb..9d69033 100644 --- a/xmpp/router.go +++ b/xmpp/router.go @@ -24,6 +24,7 @@ func getRoutingTable() routingTable { return routingTable{ {xml.Name{`http://etherx.jabber.org/streams`, `features`}, streamFeaturesHandler}, {xml.Name{`urn:ietf:params:xml:ns:xmpp-sasl`, `success`}, saslSuccessHandler}, + {xml.Name{`urn:ietf:params:xml:ns:xmpp-sasl`, `failure`}, saslFailureHandler}, } } diff --git a/xmpp/sasl.go b/xmpp/sasl.go index 23e8f3f..512fd58 100644 --- a/xmpp/sasl.go +++ b/xmpp/sasl.go @@ -68,3 +68,7 @@ func hasSaslPlain(e []xml.Token) bool { func saslSuccessHandler(s *session, e []xml.Token) { runStreamPair(s) } + +func saslFailureHandler(s *session, e []xml.Token) { + log.Println("SASL autentication failed!") +} -- cgit v1.2.3-70-g09d2