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