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
;
18 /** Callback handler to be used with a command line UI. */
19 public class ConsoleCallbackHandler
implements CallbackHandler
{
22 public void handle(Callback
[] callbacks
) throws IOException
,
23 UnsupportedCallbackException
{
24 Console console
= System
.console();
26 throw new ArgeoException("No console available");
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() + ")");
39 String answer
= console
.readLine();
40 if (callback
.getDefaultName() != null
41 && answer
.trim().equals(""))
42 callback
.setName(callback
.getDefaultName());
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 Arrays
.fill(answer
, ' ');
51 } else if (callbacks
[i
] instanceof LocaleChoice
) {
52 LocaleChoice callback
= (LocaleChoice
) callbacks
[i
];
53 writer
.write("Language");
55 for (int j
= 0; j
< callback
.getLocales().size(); j
++) {
56 Locale locale
= callback
.getLocales().get(j
);
57 writer
.print(j
+ " : " + locale
.getDisplayName() + "\n");
59 writer
.write("(" + callback
.getDefaultIndex() + ") : ");
60 String answer
= console
.readLine();
61 if (answer
.trim().equals(""))
62 callback
.setSelectedIndex(callback
.getDefaultIndex());
64 callback
.setSelectedIndex(new Integer(answer
.trim()));