]> git.argeo.org Git - gpl/argeo-slc.git/blob - org.argeo.slc.support/src/org/argeo/slc/jsch/CallbackHandlerUserInfo.java
Add doAs in RCP CmsView.
[gpl/argeo-slc.git] / org.argeo.slc.support / src / org / argeo / slc / jsch / CallbackHandlerUserInfo.java
1 package org.argeo.slc.jsch;
2
3 import javax.security.auth.callback.Callback;
4 import javax.security.auth.callback.CallbackHandler;
5 import javax.security.auth.callback.PasswordCallback;
6
7 import org.argeo.slc.SlcException;
8
9 /** Retrieve a password or a passphrase using a standard callback handler. */
10 public final class CallbackHandlerUserInfo extends SimpleUserInfo {
11 private CallbackHandler callbackHandler;
12
13 private Boolean alwaysPrompt = false;
14
15 public boolean promptPassphrase(String message) {
16 if (passphrase != null)
17 return true;
18
19 if (!alwaysPrompt && passphraseSafe != null)
20 return true;
21
22 reset();
23 PasswordCallback passwordCb = new PasswordCallback("SSH Passphrase",
24 false);
25 Callback[] dialogCbs = new Callback[] { passwordCb };
26 try {
27 callbackHandler.handle(dialogCbs);
28 passphraseSafe = passwordCb.getPassword();
29 return passphraseSafe != null;
30 } catch (Exception e) {
31 throw new SlcException("Cannot ask for a password", e);
32 }
33 }
34
35 public boolean promptPassword(String message) {
36 if (password != null)
37 return true;
38
39 if (!alwaysPrompt && passwordSafe != null)
40 return true;
41
42 reset();
43 PasswordCallback passwordCb = new PasswordCallback("SSH Password",
44 false);
45 Callback[] dialogCbs = new Callback[] { passwordCb };
46 try {
47 callbackHandler.handle(dialogCbs);
48 passwordSafe = passwordCb.getPassword();
49 return passwordSafe != null;
50 } catch (Exception e) {
51 throw new SlcException("Cannot ask for a password", e);
52 }
53 }
54
55 public void setAlwaysPrompt(Boolean alwaysPrompt) {
56 this.alwaysPrompt = alwaysPrompt;
57 }
58
59 public void setCallbackHandler(CallbackHandler defaultCallbackHandler) {
60 this.callbackHandler = defaultCallbackHandler;
61 }
62
63 }