1 package org
.argeo
.slc
.jsch
;
3 import javax
.security
.auth
.callback
.Callback
;
4 import javax
.security
.auth
.callback
.CallbackHandler
;
5 import javax
.security
.auth
.callback
.PasswordCallback
;
7 import org
.argeo
.slc
.SlcException
;
9 /** Retrieve a password or a passphrase using a standard callback handler. */
10 public final class CallbackHandlerUserInfo
extends SimpleUserInfo
{
11 private CallbackHandler callbackHandler
;
13 private Boolean alwaysPrompt
= false;
15 public boolean promptPassphrase(String message
) {
16 if (passphrase
!= null)
19 if (!alwaysPrompt
&& passphraseSafe
!= null)
23 PasswordCallback passwordCb
= new PasswordCallback("SSH Passphrase",
25 Callback
[] dialogCbs
= new Callback
[] { passwordCb
};
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
);
35 public boolean promptPassword(String message
) {
39 if (!alwaysPrompt
&& passwordSafe
!= null)
43 PasswordCallback passwordCb
= new PasswordCallback("SSH Password",
45 Callback
[] dialogCbs
= new Callback
[] { passwordCb
};
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
);
55 public void setAlwaysPrompt(Boolean alwaysPrompt
) {
56 this.alwaysPrompt
= alwaysPrompt
;
59 public void setCallbackHandler(CallbackHandler defaultCallbackHandler
) {
60 this.callbackHandler
= defaultCallbackHandler
;