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