blob: 87bb2c0b323451550bcd7174848925b77ee9e865 [file] [log] [blame]
/**
* Copyright (c) 2010 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial Implementation
*
*/
package org.eclipse.ptp.remotetools.environment.generichost.core;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.ptp.remotetools.core.IAuthInfo;
import org.eclipse.ptp.remotetools.environment.control.ITargetConfig;
import org.eclipse.ptp.remotetools.environment.generichost.messages.Messages;
import org.eclipse.ptp.remotetools.environment.generichost.ui.KeyboardInteractiveDialog;
import org.eclipse.ptp.remotetools.environment.generichost.ui.UserValidationDialog;
import org.eclipse.swt.widgets.Display;
/**
* Provides feedback to user for connection authentication
*
* @since 1.4
*/
public class AuthInfo implements IAuthInfo {
private class PromptSecret {
private String fResult = null;
private boolean fSaveResult = false;
public void prompt(final String message) {
final String finUser = fConfig.getLoginUsername();
getDisplay().syncExec(new Runnable() {
public void run() {
UserValidationDialog uvd = new UserValidationDialog(null, finUser, message);
uvd.setUsernameMutable(false);
if (uvd.open() == Window.OK) {
fResult = uvd.getPassword();
fSaveResult = uvd.isSavePassword();
}
}
});
}
public String getResult() {
return fResult;
}
public boolean isSaveResult() {
return fSaveResult;
}
}
private ITargetConfig fConfig = null;
/*
* Password or passphrase obtained from user prompt (either
* KeyboardInteractiveDialog or UserValidationDialog). These are only used
* once, then we revert back to using the password or passphrase from the
* configuration.
*/
private String fPassword = null;
private String fPassphrase = null;
public AuthInfo(ITargetConfig config) {
fConfig = config;
}
public String getPassphrase() {
if (fPassphrase != null) {
String res = fPassphrase;
fPassphrase = null;
return res;
}
return fConfig.getKeyPassphrase();
}
public String getPassword() {
if (fPassword != null) {
String res = fPassword;
fPassword = null;
return res;
}
return fConfig.getLoginPassword();
}
public String[] promptKeyboardInteractive(final String destination, final String name, final String instruction,
final String[] prompt, final boolean[] echo) {
if (prompt.length == 0) {
// No need to prompt, just return an empty String array
return new String[0];
}
try {
final String[][] finResult = new String[1][];
getDisplay().syncExec(new Runnable() {
public void run() {
KeyboardInteractiveDialog dialog = new KeyboardInteractiveDialog(null, destination, name, instruction, prompt,
echo);
dialog.open();
finResult[0] = dialog.getResult();
}
});
String[] result = finResult[0];
if (result == null)
return null; // cancelled
if (result.length == 1 && prompt.length == 1 && prompt[0].trim().equalsIgnoreCase("password:")) { //$NON-NLS-1$
fPassword = result[0];
}
return result;
} catch (OperationCanceledException e) {
return null;
}
}
public boolean promptPassphrase(String message) {
PromptSecret ps = new PromptSecret();
ps.prompt(message);
fPassphrase = ps.getResult();
if (fPassphrase == null) {
return false;
}
if (ps.isSaveResult()) {
fConfig.setKeyPassphrase(ps.getResult());
}
return true;
}
public boolean promptPassword(String message) {
PromptSecret ps = new PromptSecret();
ps.prompt(message);
fPassword = ps.getResult();
if (fPassword == null) {
return false;
}
if (ps.isSaveResult()) {
fConfig.setLoginPassword(ps.getResult());
}
return true;
}
public boolean promptYesNo(final String str) {
// need to switch to UI thread for prompting
final boolean[] retval = new boolean[1];
getDisplay().syncExec(new Runnable() {
public void run() {
retval[0] = MessageDialog.openQuestion(null, Messages.Environment_Warning, str);
}
});
return retval[0];
}
public void setPassphrase(String passphrase) {
fConfig.setKeyPassphrase(passphrase);
}
public void setPassword(String password) {
fConfig.setLoginPassword(password);
}
public void setUsePassword(boolean usePassword) {
fConfig.setPasswordAuth(usePassword);
}
public void showMessage(final String message) {
getDisplay().syncExec(new Runnable() {
public void run() {
MessageDialog.openInformation(null, Messages.Environment_Info, message);
}
});
}
public String getKeyPath() {
return fConfig.getKeyPath();
}
public String getUsername() {
return fConfig.getLoginUsername();
}
public boolean isPasswordAuth() {
return fConfig.isPasswordAuth();
}
public void setKeyPath(String keyPath) {
fConfig.setKeyPath(keyPath);
}
public void setUsername(String username) {
fConfig.setLoginUsername(username);
}
private static Display getDisplay() {
Display display = Display.getCurrent();
if (display == null) {
display = Display.getDefault();
}
return display;
}
}