]> git.argeo.org Git - lgpl/argeo-commons.git/blob - internal/auth/ConsoleCallbackHandler.java
Prepare next development cycle
[lgpl/argeo-commons.git] / internal / auth / ConsoleCallbackHandler.java
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 /** Callback handler to be used with a command line UI. */
16 public class ConsoleCallbackHandler implements CallbackHandler {
17
18 @Override
19 public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
20 Console console = System.console();
21 if (console == null)
22 throw new IllegalStateException("No console available");
23
24 PrintWriter writer = console.writer();
25 for (int i = 0; i < callbacks.length; i++) {
26 if (callbacks[i] instanceof TextOutputCallback) {
27 TextOutputCallback callback = (TextOutputCallback) callbacks[i];
28 writer.write(callback.getMessage());
29 } else if (callbacks[i] instanceof NameCallback) {
30 NameCallback callback = (NameCallback) callbacks[i];
31 writer.write(callback.getPrompt());
32 if (callback.getDefaultName() != null)
33 writer.write(" (" + callback.getDefaultName() + ")");
34 writer.write(" : ");
35 String answer = console.readLine();
36 if (callback.getDefaultName() != null && answer.trim().equals(""))
37 callback.setName(callback.getDefaultName());
38 else
39 callback.setName(answer);
40 } else if (callbacks[i] instanceof PasswordCallback) {
41 PasswordCallback callback = (PasswordCallback) callbacks[i];
42 writer.write(callback.getPrompt());
43 char[] answer = console.readPassword();
44 callback.setPassword(answer);
45 Arrays.fill(answer, ' ');
46 }
47 // else if (callbacks[i] instanceof LocaleChoice) {
48 // LocaleChoice callback = (LocaleChoice) callbacks[i];
49 // writer.write("Language");
50 // writer.write("\n");
51 // for (int j = 0; j < callback.getLocales().size(); j++) {
52 // Locale locale = callback.getLocales().get(j);
53 // writer.print(j + " : " + locale.getDisplayName() + "\n");
54 // }
55 // writer.write("(" + callback.getDefaultIndex() + ") : ");
56 // String answer = console.readLine();
57 // if (answer.trim().equals(""))
58 // callback.setSelectedIndex(callback.getDefaultIndex());
59 // else
60 // callback.setSelectedIndex(new Integer(answer.trim()));
61 // }
62 }
63 }
64
65 }