View Javadoc
1   package org.argeo.cms.internal.auth;
2   
3   import java.io.Console;
4   import java.io.IOException;
5   import java.io.PrintWriter;
6   import java.util.Arrays;
7   
8   import javax.security.auth.callback.Callback;
9   import javax.security.auth.callback.CallbackHandler;
10  import javax.security.auth.callback.NameCallback;
11  import javax.security.auth.callback.PasswordCallback;
12  import javax.security.auth.callback.TextOutputCallback;
13  import javax.security.auth.callback.UnsupportedCallbackException;
14  
15  import org.argeo.cms.CmsException;
16  
17  /** Callback handler to be used with a command line UI. */
18  public class ConsoleCallbackHandler implements CallbackHandler {
19  
20  	@Override
21  	public void handle(Callback[] callbacks) throws IOException,
22  			UnsupportedCallbackException {
23  		Console console = System.console();
24  		if (console == null)
25  			throw new CmsException("No console available");
26  
27  		PrintWriter writer = console.writer();
28  		for (int i = 0; i < callbacks.length; i++) {
29  			if (callbacks[i] instanceof TextOutputCallback) {
30  				TextOutputCallback callback = (TextOutputCallback) callbacks[i];
31  				writer.write(callback.getMessage());
32  			} else if (callbacks[i] instanceof NameCallback) {
33  				NameCallback callback = (NameCallback) callbacks[i];
34  				writer.write(callback.getPrompt());
35  				if (callback.getDefaultName() != null)
36  					writer.write(" (" + callback.getDefaultName() + ")");
37  				writer.write(" : ");
38  				String answer = console.readLine();
39  				if (callback.getDefaultName() != null
40  						&& answer.trim().equals(""))
41  					callback.setName(callback.getDefaultName());
42  				else
43  					callback.setName(answer);
44  			} else if (callbacks[i] instanceof PasswordCallback) {
45  				PasswordCallback callback = (PasswordCallback) callbacks[i];
46  				writer.write(callback.getPrompt());
47  				char[] answer = console.readPassword();
48  				callback.setPassword(answer);
49  				Arrays.fill(answer, ' ');
50  			}
51  //			else if (callbacks[i] instanceof LocaleChoice) {
52  //				LocaleChoice callback = (LocaleChoice) callbacks[i];
53  //				writer.write("Language");
54  //				writer.write("\n");
55  //				for (int j = 0; j < callback.getLocales().size(); j++) {
56  //					Locale locale = callback.getLocales().get(j);
57  //					writer.print(j + " : " + locale.getDisplayName() + "\n");
58  //				}
59  //				writer.write("(" + callback.getDefaultIndex() + ") : ");
60  //				String answer = console.readLine();
61  //				if (answer.trim().equals(""))
62  //					callback.setSelectedIndex(callback.getDefaultIndex());
63  //				else
64  //					callback.setSelectedIndex(new Integer(answer.trim()));
65  //			}
66  		}
67  	}
68  
69  }