From 5ab3a9be8003498dcf1cc702ddf0e6048c2fb981 Mon Sep 17 00:00:00 2001 From: Matt Goodall Date: Tue, 10 Jul 2012 13:14:46 +0100 Subject: [PATCH] Extract/improve auth response check - it's common to all mechanisms. --- src/xmpp/client.go | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/xmpp/client.go b/src/xmpp/client.go index 31f48a7..fe37912 100644 --- a/src/xmpp/client.go +++ b/src/xmpp/client.go @@ -146,23 +146,30 @@ func authenticatePlain(stream *Stream, user, password string) error { if err := stream.Send(&auth); err != nil { return err } + return authenticateResponse(stream) +} - se, err := stream.Next(nil) - if err != nil { +func authenticateResponse(stream *Stream) error { + if se, err := stream.Next(nil); err != nil { return err - } - switch se.Name.Local { - case "success": - if err := stream.Skip(); err != nil { - return err + } else { + switch se.Name.Local { + case "success": + if err := stream.Skip(); err != nil { + return err + } + return nil + case "failure": + f := new(saslFailure) + if err := stream.DecodeElement(f, se); err != nil { + return err + } + return fmt.Errorf("Authentication failed: %s", f.Reason.Local) + default: + return fmt.Errorf("Unexpected: %s", se.Name) } - case "failure": - f := new(saslFailure) - stream.DecodeElement(f, se) - return errors.New(fmt.Sprintf("Authentication failed: %s", f.Reason.Local)) } - - return nil + panic("unreachable") } type saslAuth struct {