1 package org
.argeo
.cms
.auth
;
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
;
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
;
16 /** Callback handler to be used with a command line UI. */
17 public class ConsoleCallbackHandler
implements CallbackHandler
{
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");
25 Scanner scanner
= null;
27 if (console
== null) {// IDE
28 scanner
= new Scanner(System
.in
);
29 writer
= new PrintWriter(System
.out
, true);
31 writer
= console
.writer();
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());
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
, ' ');
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");
63 // writer.write("(" + callback.getDefaultIndex() + ") : ");
64 // String answer = console.readLine();
65 // if (answer.trim().equals(""))
66 // callback.setSelectedIndex(callback.getDefaultIndex());
68 // callback.setSelectedIndex(new Integer(answer.trim()));