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