1 package org
.argeo
.cms
.internal
.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
.Locale
;
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 import org
.argeo
.ArgeoException
;
17 import org
.argeo
.util
.LocaleChoice
;
19 /** Callback handler to be used with a command line UI. */
20 public class ConsoleCallbackHandler
implements CallbackHandler
{
23 public void handle(Callback
[] callbacks
) throws IOException
,
24 UnsupportedCallbackException
{
25 Console console
= System
.console();
27 throw new ArgeoException("No console available");
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() + ")");
40 String answer
= console
.readLine();
41 if (callback
.getDefaultName() != null
42 && answer
.trim().equals(""))
43 callback
.setName(callback
.getDefaultName());
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 LocaleChoice
) {
53 LocaleChoice callback
= (LocaleChoice
) callbacks
[i
];
54 writer
.write("Language");
56 for (int j
= 0; j
< callback
.getLocales().size(); j
++) {
57 Locale locale
= callback
.getLocales().get(j
);
58 writer
.print(j
+ " : " + locale
.getDisplayName() + "\n");
60 writer
.write("(" + callback
.getDefaultIndex() + ") : ");
61 String answer
= console
.readLine();
62 if (answer
.trim().equals(""))
63 callback
.setSelectedIndex(callback
.getDefaultIndex());
65 callback
.setSelectedIndex(new Integer(answer
.trim()));