SASL LOGIN supports an initial response.
[aox:aox.git] / sasl / sasllogin.cpp
1 // Copyright 2009 The Archiveopteryx Developers <info@aox.org>
2
3 #include "sasllogin.h"
4
5
6 /*! \class SaslLogin sasllogin.h
7     Implement SASL LOGIN authentication.
8
9     LOGIN is a non-standard SASL authentication mechanism, described in
10     the now-abandoned draft-murchison-sasl-login-*.txt
11
12     We issue the standard "User Name" and "Password" challenges, not the
13     permitted alternative "Username:" and "Password:".
14
15     (This class is not named just "Login" because of the IMAP command of
16     the same name.)
17 */
18
19
20 /*! Creates a new SaslLogin object on behalf of \a c. */
21
22 SaslLogin::SaslLogin( EventHandler * c )
23     : SaslMechanism( c, SaslMechanism::Login )
24 {
25     setState( AwaitingInitialResponse );
26 }
27
28
29 EString SaslLogin::challenge()
30 {
31     if ( login().isEmpty() )
32         return "Username:";
33     else
34         return "Password:";
35 }
36
37
38 void SaslLogin::parseResponse( const EString &s )
39 {
40     if ( login().isEmpty() ) {
41         if ( s.isEmpty() ) {
42             setState( Failed );
43         }
44         else {
45             setLogin( s );
46             setState( IssuingChallenge );
47         }
48     }
49     else {
50         setSecret( s );
51         setState( Authenticating );
52     }
53     execute();
54 }