KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > ristretto > auth > mechanism > CramMD5Mechanism


1 package org.columba.ristretto.auth.mechanism;
2
3 import java.io.IOException JavaDoc;
4 import java.util.Hashtable JavaDoc;
5 import java.util.logging.Logger JavaDoc;
6
7 import javax.security.auth.callback.Callback JavaDoc;
8 import javax.security.auth.callback.CallbackHandler JavaDoc;
9 import javax.security.auth.callback.NameCallback JavaDoc;
10 import javax.security.auth.callback.PasswordCallback JavaDoc;
11 import javax.security.auth.callback.TextOutputCallback JavaDoc;
12 import javax.security.auth.callback.UnsupportedCallbackException JavaDoc;
13
14 import org.columba.ristretto.auth.AuthenticationException;
15 import org.columba.ristretto.auth.AuthenticationMechanism;
16 import org.columba.ristretto.auth.AuthenticationServer;
17
18 public class CramMD5Mechanism implements AuthenticationMechanism, CallbackHandler JavaDoc {
19
20     /** JDK 1.4+ logging framework logger, used for logging. */
21     private static final Logger JavaDoc LOG = Logger.getLogger("org.columba.ristretto.auth.mechanism");
22
23     private String JavaDoc username;
24     private char[] password;
25     
26     SaslWrapper sasl;
27     
28     
29     /**
30      * @see org.columba.ristretto.auth.AuthenticationMechanism#authenticate(org.columba.ristretto.auth.AuthenticationServer, java.lang.String, char[])
31      */

32     public void authenticate(AuthenticationServer server, String JavaDoc user,
33             char[] password) throws IOException JavaDoc, AuthenticationException {
34         
35         this.username = user;
36         this.password = password;
37         try {
38             sasl = new SaslWrapper();
39             sasl.createClient(new String JavaDoc[]{"CRAM-MD5"},
40                     user, server.getService(), server.getHostName(),
41                     new Hashtable JavaDoc(), this);
42             byte[] serverChallenge = server.authReceive();
43             LOG.fine(new String JavaDoc(serverChallenge));
44             
45             byte[] response = sasl.evaluateChallenge(serverChallenge);
46             LOG.fine(new String JavaDoc(response));
47             server.authSend(response);
48         } catch (Exception JavaDoc e) {
49             if( e.getCause() instanceof IOException JavaDoc ) throw (IOException JavaDoc)e.getCause();
50             else throw new AuthenticationException(e.getCause());
51         }
52     }
53     
54     /**
55      * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
56      */

57     public void handle(Callback JavaDoc[] callbacks) throws IOException JavaDoc, UnsupportedCallbackException JavaDoc {
58         for (int i = 0; i < callbacks.length; i++) {
59             if (callbacks[i] instanceof TextOutputCallback JavaDoc) {
60                 // display the message according to the specified type
61
TextOutputCallback JavaDoc toc = (TextOutputCallback JavaDoc) callbacks[i];
62                 switch (toc.getMessageType()) {
63                     case TextOutputCallback.INFORMATION :
64                         LOG.info(toc.getMessage());
65                         break;
66                     case TextOutputCallback.ERROR :
67                         LOG.severe(toc.getMessage());
68                         break;
69                     case TextOutputCallback.WARNING :
70                         LOG.warning(toc.getMessage());
71                         break;
72                     default :
73                         LOG.fine(toc.getMessage());
74                 }
75             } else if (callbacks[i] instanceof NameCallback JavaDoc) {
76                 NameCallback JavaDoc nc = (NameCallback JavaDoc) callbacks[i];
77                 nc.setName(username);
78             } else if (callbacks[i] instanceof PasswordCallback JavaDoc) {
79                 PasswordCallback JavaDoc pc = (PasswordCallback JavaDoc) callbacks[i];
80                 pc.setPassword(password);
81             } else if (sasl.handle(callbacks[i]) ) {
82             } else {
83                 throw new UnsupportedCallbackException JavaDoc(callbacks[i],
84                         "Unrecognized Callback");
85             }
86         }
87     }
88
89 }
90
Popular Tags