blob: c214adb4f23667a7cc54ca101f64281506be38ce [file] [log] [blame]
/* -*-mode:java; c-basic-offset:2; -*- */
/**********************************************************************
Copyright (c) 2003,2004 Atsuhiko Yamanaka, JCraft,Inc. and others.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Common Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/cpl-v10.html
Contributors:
Atsuhiko Yamanaka, JCraft,Inc. - initial API and implementation.
**********************************************************************/
package org.eclipse.team.internal.ccvs.ssh2;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.team.internal.ccvs.core.util.Util;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.jcraft.jsch.*;
public class CVSSSH2PreferencePage extends PreferencePage
implements IWorkbenchPreferencePage {
public static String KEY_PROXY="CVSSSH2PreferencePage.PROXY"; //$NON-NLS-1$
public static String KEY_PROXY_TYPE="CVSSSH2PreferencePage.PROXY_TYPE"; //$NON-NLS-1$
public static String KEY_PROXY_HOST="CVSSSH2PreferencePage.PROXY_HOST"; //$NON-NLS-1$
public static String KEY_PROXY_PORT="CVSSSH2PreferencePage.PROXY_PORT"; //$NON-NLS-1$
public static String KEY_PROXY_AUTH="CVSSSH2PreferencePage.PROXY_AUTH"; //$NON-NLS-1$
public static String KEY_PROXY_USER="CVSSSH2PreferencePage.PROXY_USER"; //$NON-NLS-1$
public static String KEY_PROXY_PASS="CVSSSH2PreferencePage.PROXY_PASS"; //$NON-NLS-1$
public static String KEY_SSH2HOME="CVSSSH2PreferencePage.SSH2HOME"; //$NON-NLS-1$
public static String KEY_KEYFILE="CVSSSH2PreferencePage.KEYFILE"; //$NON-NLS-1$
public static String KEY_PRIVATEKEY="CVSSSH2PreferencePage.PRIVATEKEY"; //$NON-NLS-1$
static String SOCKS5="SOCKS5"; //$NON-NLS-1$
static String HTTP="HTTP"; //$NON-NLS-1$
private static String HTTP_DEFAULT_PORT="80"; //$NON-NLS-1$
private static String SOCKS5_DEFAULT_PORT="1080"; //$NON-NLS-1$
private static String privatekeys="id_dsa,id_rsa"; //$NON-NLS-1$
static String DSA="DSA"; //$NON-NLS-1$
static String RSA="RSA"; //$NON-NLS-1$
// private DirectoryFieldEditor ssh2homeEditor;
private Label ssh2HomeLabel;
private Label proxyTypeLabel;
private Label proxyHostLabel;
private Label proxyPortLabel;
private Label proxyUserLabel;
private Label proxyPassLabel;
private Label privateKeyLabel;
private Combo proxyTypeCombo;
private Text ssh2HomeText;
private Text proxyHostText;
private Text proxyPortText;
private Text proxyUserText;
private Text proxyPassText;
private Text privateKeyText;
private Button enableProxy;
private Button enableAuth;
private Button privateKeyAdd;
private boolean useProxy;
private boolean useAuth;
private Button ssh2HomeBrowse;
private Button keyGenerateDSA;
private Button keyGenerateRSA;
private Button keyLoad;
private Button keyExport;
private Button saveKeyPair;
private Label keyCommentLabel;
private Text keyCommentText;
private Label keyFingerPrintLabel;
private Text keyFingerPrintText;
private Label keyPassphrase1Label;
private Text keyPassphrase1Text;
private Label keyPassphrase2Label;
private Text keyPassphrase2Text;
private Label publicKeylabel;
private Text publicKeyText;
private KeyPair kpair=null;
private String kpairComment;
public static final String AUTH_SCHEME = "";//$NON-NLS-1$
public static final URL FAKE_URL;
static {
URL temp = null;
try{
temp = new URL("http://org.eclipse.team.cvs.ssh2");//$NON-NLS-1$
}catch (MalformedURLException e){}
FAKE_URL = temp;
}
public CVSSSH2PreferencePage() {
// super(GRID);
IPreferenceStore store=CVSSSH2Plugin.getDefault().getPreferenceStore();
setPreferenceStore(store);
setDescription(Policy.bind("CVSSSH2PreferencePage.18")); //$NON-NLS-1$
}
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
container.setLayout(layout);
TabFolder tabFolder = new TabFolder(container, SWT.NONE);
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText(Policy.bind("CVSSSH2PreferencePage.19")); //$NON-NLS-1$
tabItem.setControl(createGeneralPage(tabFolder));
tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText(Policy.bind("CVSSSH2PreferencePage.20")); //$NON-NLS-1$
tabItem.setControl(createProxyPage(tabFolder));
tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText(Policy.bind("CVSSSH2PreferencePage.21")); //$NON-NLS-1$
tabItem.setControl(createKeyManagementPage(tabFolder));
tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText(Policy.bind("CVSSSH2PreferencePage.133")); //$NON-NLS-1$
tabItem.setControl(createHostKeyManagementPage(tabFolder));
IPreferenceStore store=CVSSSH2Plugin.getDefault().getPreferenceStore();
initDefaults(store);
initControls();
Dialog.applyDialogFont(parent);
return container;
}
private Control createGeneralPage(Composite parent) {
Composite group=new Composite(parent, SWT.NULL);
GridLayout layout=new GridLayout();
layout.numColumns=3;
group.setLayout(layout);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
group.setLayoutData(data);
createSpacer(group, 3);
ssh2HomeLabel=new Label(group, SWT.NONE);
ssh2HomeLabel.setText(Policy.bind("CVSSSH2PreferencePage.23")); //$NON-NLS-1$
ssh2HomeText=new Text(group, SWT.SINGLE | SWT.BORDER);
ssh2HomeText.setFont(group.getFont());
GridData gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=1;
ssh2HomeText.setLayoutData(gd);
ssh2HomeBrowse=new Button(group, SWT.NULL);
ssh2HomeBrowse.setText(Policy.bind("CVSSSH2PreferencePage.24")); //$NON-NLS-1$
gd=new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan=1;
ssh2HomeBrowse.setLayoutData(gd);
createSpacer(group, 3);
privateKeyLabel=new Label(group, SWT.NONE);
privateKeyLabel.setText(Policy.bind("CVSSSH2PreferencePage.25")); //$NON-NLS-1$
privateKeyText=new Text(group, SWT.SINGLE | SWT.BORDER);
privateKeyText.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=1;
privateKeyText.setLayoutData(gd);
privateKeyAdd=new Button(group, SWT.NULL);
privateKeyAdd.setText(Policy.bind("CVSSSH2PreferencePage.26")); //$NON-NLS-1$
gd=new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan=1;
privateKeyAdd.setLayoutData(gd);
ssh2HomeBrowse.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
String home=ssh2HomeText.getText();
if(!new File(home).exists()){
while(true){
int foo=home.lastIndexOf(java.io.File.separator, home.length());
if(foo==-1)break;
home=home.substring(0, foo);
if(new File(home).exists())break;
}
}
DirectoryDialog dd=new DirectoryDialog(getShell());
dd.setFilterPath(home);
dd.setMessage(Policy.bind("CVSSSH2PreferencePage.27")); //$NON-NLS-1$
String dir=dd.open();
if(dir==null){ // cancel
return;
}
ssh2HomeText.setText(dir);
}
});
privateKeyAdd.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
String home=ssh2HomeText.getText();
FileDialog fd=new FileDialog(getShell(), SWT.OPEN|SWT.MULTI);
fd.setFilterPath(home);
Object o=fd.open();
if(o==null){ // cancel
return;
}
String[] files=fd.getFileNames();
String keys=privateKeyText.getText();
String dir=fd.getFilterPath();
if(dir.equals(home)){dir="";} //$NON-NLS-1$
else{dir+=java.io.File.separator;}
for(int i=0; i<files.length; i++){
String foo=files[i];
if(keys.length()!=0)keys=keys+","; //$NON-NLS-1$
keys=keys+dir+foo;
}
privateKeyText.setText(keys);
}
});
return group;
}
private Control createProxyPage(Composite parent) {
Composite group=new Composite(parent, SWT.NULL);
GridLayout layout=new GridLayout();
layout.numColumns=3;
group.setLayout(layout);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
group.setLayoutData(data);
enableProxy=new Button(group, SWT.CHECK);
enableProxy.setText(Policy.bind("CVSSSH2PreferencePage.30")); //$NON-NLS-1$
GridData gd=new GridData();
gd.horizontalSpan=3;
enableProxy.setLayoutData(gd);
proxyTypeLabel=new Label(group, SWT.NONE);
proxyTypeLabel.setText(Policy.bind("CVSSSH2PreferencePage.31")); //$NON-NLS-1$
proxyTypeCombo=new Combo(group, SWT.READ_ONLY);
proxyTypeCombo.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
proxyTypeCombo.setLayoutData(gd);
proxyTypeCombo.addModifyListener(new ModifyListener () {
public void modifyText(ModifyEvent e){
if(proxyPortText==null) return;
Combo combo=(Combo)(e.getSource());
String foo=combo.getText();
if(foo.equals(HTTP)){
proxyPortText.setText(HTTP_DEFAULT_PORT);
}
else if(foo.equals(SOCKS5)){
proxyPortText.setText(SOCKS5_DEFAULT_PORT);
}
}
});
proxyTypeCombo.add(HTTP);
proxyTypeCombo.add(SOCKS5);
proxyTypeCombo.select(0);
proxyHostLabel=new Label(group, SWT.NONE);
proxyHostLabel.setText(Policy.bind("CVSSSH2PreferencePage.32")); //$NON-NLS-1$
proxyHostText=new Text(group, SWT.SINGLE | SWT.BORDER);
proxyHostText.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
proxyHostText.setLayoutData(gd);
proxyPortLabel=new Label(group, SWT.NONE);
proxyPortLabel.setText(Policy.bind("CVSSSH2PreferencePage.33")); //$NON-NLS-1$
proxyPortText=new Text(group, SWT.SINGLE | SWT.BORDER);
proxyPortText.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
proxyPortText.setLayoutData(gd);
proxyPortText.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
if(isValidPort(proxyPortText.getText())){
setErrorMessage(null);
}
}
});
createSpacer(group, 3);
enableAuth=new Button(group, SWT.CHECK);
enableAuth.setText(Policy.bind("CVSSSH2PreferencePage.34")); //$NON-NLS-1$
gd=new GridData();
gd.horizontalSpan=3;
enableAuth.setLayoutData(gd);
proxyUserLabel=new Label(group, SWT.NONE);
proxyUserLabel.setText(Policy.bind("CVSSSH2PreferencePage.35")); //$NON-NLS-1$
proxyUserText=new Text(group, SWT.SINGLE | SWT.BORDER);
proxyUserText.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
proxyUserText.setLayoutData(gd);
proxyPassLabel=new Label(group, SWT.NONE);
proxyPassLabel.setText(Policy.bind("CVSSSH2PreferencePage.36")); //$NON-NLS-1$
proxyPassText=new Text(group, SWT.SINGLE | SWT.BORDER);
proxyPassText.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
proxyPassText.setLayoutData(gd);
// performDefaults();
enableProxy.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateControls();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
enableAuth.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateControls();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
return group;
}
private Control createKeyManagementPage(Composite parent) {
int columnSpan=3;
Composite group=new Composite(parent, SWT.NULL);
GridLayout layout=new GridLayout();
layout.numColumns=3;
group.setLayout(layout);
GridData gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
group.setLayoutData(gd);
keyGenerateDSA=new Button(group, SWT.NULL);
keyGenerateDSA.setText(Policy.bind("CVSSSH2PreferencePage.131")); //$NON-NLS-1$
gd=new GridData();
gd.horizontalSpan=1;
keyGenerateDSA.setLayoutData(gd);
keyGenerateRSA=new Button(group, SWT.NULL);
keyGenerateRSA.setText(Policy.bind("CVSSSH2PreferencePage.132")); //$NON-NLS-1$
gd=new GridData();
gd.horizontalSpan=1;
keyGenerateRSA.setLayoutData(gd);
keyLoad=new Button(group, SWT.NULL);
keyLoad.setText(Policy.bind("CVSSSH2PreferencePage.128")); //$NON-NLS-1$
gd=new GridData();
gd.horizontalSpan=1;
keyLoad.setLayoutData(gd);
publicKeylabel=new Label(group, SWT.NONE);
publicKeylabel.setText(Policy.bind("CVSSSH2PreferencePage.39")); //$NON-NLS-1$
gd=new GridData();
gd.horizontalSpan=columnSpan;
publicKeylabel.setLayoutData(gd);
publicKeyText=new Text(group,SWT.MULTI|SWT.BORDER|SWT.V_SCROLL|SWT.WRAP);
publicKeyText.setText(""); //$NON-NLS-1$
publicKeyText.setEditable(false);
gd=new GridData();
gd.horizontalSpan=columnSpan;
gd.horizontalAlignment = GridData.FILL;
gd.verticalAlignment = GridData.FILL;
gd.grabExcessHorizontalSpace = true;
gd.grabExcessVerticalSpace = true;
publicKeyText.setLayoutData(gd);
keyExport=new Button(group, SWT.NULL);
keyExport.setText(Policy.bind("CVSSSH2PreferencePage.105")); //$NON-NLS-1$
gd=new GridData(GridData.HORIZONTAL_ALIGN_END);
gd.horizontalSpan=columnSpan;
keyExport.setLayoutData(gd);
keyFingerPrintLabel=new Label(group, SWT.NONE);
keyFingerPrintLabel.setText(Policy.bind("CVSSSH2PreferencePage.41")); //$NON-NLS-1$
keyFingerPrintText=new Text(group, SWT.SINGLE | SWT.BORDER);
keyFingerPrintText.setFont(group.getFont());
keyFingerPrintText.setEditable(false);
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
keyFingerPrintText.setLayoutData(gd);
keyCommentLabel=new Label(group, SWT.NONE);
keyCommentLabel.setText(Policy.bind("CVSSSH2PreferencePage.42")); //$NON-NLS-1$
keyCommentText=new Text(group, SWT.SINGLE | SWT.BORDER);
keyCommentText.setFont(group.getFont());
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
keyCommentText.setLayoutData(gd);
keyCommentText.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
if(kpair==null)return;
try{
ByteArrayOutputStream out=new ByteArrayOutputStream();
kpair.writePublicKey(out, keyCommentText.getText());
out.close();
publicKeyText.setText(out.toString());
}
catch(IOException ee){}
}});
keyPassphrase1Label=new Label(group, SWT.NONE);
keyPassphrase1Label.setText(Policy.bind("CVSSSH2PreferencePage.43")); //$NON-NLS-1$
keyPassphrase1Text=new Text(group, SWT.SINGLE | SWT.BORDER);
keyPassphrase1Text.setFont(group.getFont());
keyPassphrase1Text.setEchoChar('*');
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
keyPassphrase1Text.setLayoutData(gd);
keyPassphrase2Label=new Label(group, SWT.NONE);
keyPassphrase2Label.setText(Policy.bind("CVSSSH2PreferencePage.44")); //$NON-NLS-1$
keyPassphrase2Text=new Text(group, SWT.SINGLE | SWT.BORDER);
keyPassphrase2Text.setFont(group.getFont());
keyPassphrase2Text.setEchoChar('*');
gd=new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan=2;
keyPassphrase2Text.setLayoutData(gd);
keyPassphrase1Text.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
String pass1=keyPassphrase1Text.getText();
String pass2=keyPassphrase2Text.getText();
if(kpair!=null && pass1.equals(pass2)){
saveKeyPair.setEnabled(true);
}
else{
saveKeyPair.setEnabled(false);
}
if(pass2.length()==0){
setErrorMessage(null);
return;
}
if(pass1.equals(pass2)){
setErrorMessage(null);
}
else{
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
}
}
});
keyPassphrase2Text.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
String pass1=keyPassphrase1Text.getText();
String pass2=keyPassphrase2Text.getText();
if(kpair!=null && pass1.equals(pass2)){
saveKeyPair.setEnabled(true);
}
else{
saveKeyPair.setEnabled(false);
}
if(pass2.length()<pass1.length()){
if(pass1.startsWith(pass2)){
setErrorMessage(null);
}
else{
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
}
return;
}
if(pass1.equals(pass2)){
setErrorMessage(null);
}
else{
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
}
}
});
keyPassphrase2Text.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent e){
String pass1=keyPassphrase1Text.getText();
String pass2=keyPassphrase2Text.getText();
if(pass2.length()<pass1.length()){
if(pass1.startsWith(pass2)){
setErrorMessage(null);
}
else{
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
}
return;
}
if(pass1.equals(pass2)){
setErrorMessage(null);
}
else{
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
}
}
public void focusLost(FocusEvent e){
String pass1=keyPassphrase1Text.getText();
String pass2=keyPassphrase2Text.getText();
if(pass1.equals(pass2)){
setErrorMessage(null);
}
else{
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
}
}
});
saveKeyPair=new Button(group, SWT.NULL);
saveKeyPair.setText(Policy.bind("CVSSSH2PreferencePage.45")); //$NON-NLS-1$
gd=new GridData(GridData.HORIZONTAL_ALIGN_END);
gd.horizontalSpan=columnSpan;
saveKeyPair.setLayoutData(gd);
SelectionAdapter keygenadapter=new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
JSch jsch=JSchSession.getJSch();
boolean ok=true;
String _type=""; //$NON-NLS-1$
try{
int type=0;
if(e.widget==keyGenerateDSA){
type=KeyPair.DSA;
_type=DSA;
}
else if(e.widget==keyGenerateRSA){
type=KeyPair.RSA;
_type=RSA;
}
else{
return;
}
final KeyPair[] _kpair=new KeyPair[1];
final JSch _jsch=jsch;
final int __type=type;
final JSchException[] _e=new JSchException[1];
BusyIndicator.showWhile(getShell().getDisplay(),
new Runnable(){
public void run(){
try{
_kpair[0]=KeyPair.genKeyPair(_jsch, __type);
}catch(JSchException e){
_e[0]=e;
}
}}
);
if(_e[0]!=null){
throw _e[0];
}
kpair=_kpair[0];
ByteArrayOutputStream out=new ByteArrayOutputStream();
kpairComment=_type+"-1024"; //$NON-NLS-1$
kpair.writePublicKey(out, kpairComment);
out.close();
publicKeyText.setText(out.toString());
keyFingerPrintText.setText(kpair.getFingerPrint());
keyCommentText.setText(kpairComment);
keyPassphrase1Text.setText(""); //$NON-NLS-1$
keyPassphrase2Text.setText(""); //$NON-NLS-1$
updateControls();
}
catch(IOException ee){
ok=false;
}
catch(JSchException ee){
ok=false;
}
if(!ok){
MessageDialog.openError(getShell(),
Policy.bind("CVSSSH2PreferencePage.error"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.47")); //$NON-NLS-1$
}
}
};
keyGenerateDSA.addSelectionListener(keygenadapter);
keyGenerateRSA.addSelectionListener(keygenadapter);
keyLoad.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
boolean ok=true;
String home=ssh2HomeText.getText();
FileDialog fd=new FileDialog(getShell(), SWT.OPEN);
fd.setFilterPath(home);
Object o=fd.open();
if(o==null){ // cancel
return;
}
String pkey=fd.getFileName();
String pkeyab=(new File(fd.getFilterPath(), pkey)).getAbsolutePath();
try{
JSch jsch=JSchSession.getJSch();
KeyPair _kpair=KeyPair.load(jsch, pkeyab);
PassphrasePrompt prompt=null;
while(_kpair.isEncrypted()){
if(prompt==null){
prompt=new PassphrasePrompt(Policy.bind("CVSSSH2PreferencePage.126", pkey)); //$NON-NLS-1$
}
Display.getDefault().syncExec(prompt);
String passphrase=prompt.getPassphrase();
if(passphrase==null) break;
if(_kpair.decrypt(passphrase)){
break;
}
MessageDialog.openError(getShell(),
Policy.bind("CVSSSH2PreferencePage.error"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.129", pkey)); //$NON-NLS-1$
}
if(_kpair.isEncrypted()){
return;
}
kpair=_kpair;
String _type=(kpair.getKeyType()==KeyPair.DSA)?DSA:RSA;
ByteArrayOutputStream out=new ByteArrayOutputStream();
kpairComment=_type+"-1024"; //$NON-NLS-1$
kpair.writePublicKey(out, kpairComment);
out.close();
publicKeyText.setText(out.toString());
keyFingerPrintText.setText(kpair.getFingerPrint());
keyCommentText.setText(kpairComment);
keyPassphrase1Text.setText(""); //$NON-NLS-1$
keyPassphrase2Text.setText(""); //$NON-NLS-1$
updateControls();
}
catch(IOException ee){
ok=false;
}
catch(JSchException ee){
ok=false;
}
if(!ok){
MessageDialog.openError(getShell(),
Policy.bind("CVSSSH2PreferencePage.error"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.130")); //$NON-NLS-1$
}
}
});
keyExport.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(kpair==null)return;
setErrorMessage(null);
final String[] target=new String[1];
final String title=Policy.bind("CVSSSH2PreferencePage.106"); //$NON-NLS-1$
final String message=Policy.bind("CVSSSH2PreferencePage.107"); //$NON-NLS-1$
Display.getDefault().syncExec(new Runnable(){
public void run(){
Display display=Display.getCurrent();
Shell shell=new Shell(display);
ExportDialog dialog=new ExportDialog(shell, title, message);
dialog.open();
shell.dispose();
target[0]=dialog.getTarget();
}});
if(target[0]==null){
return;
}
String user=""; //$NON-NLS-1$
String host=""; //$NON-NLS-1$
int port=22;
if(target[0].indexOf('@')>0){
user=target[0].substring(0, target[0].indexOf('@'));
host=target[0].substring(target[0].indexOf('@')+1);
}
if(host.indexOf(':')>0){
try{port=Integer.parseInt(host.substring(host.indexOf(':')+1));}
catch(NumberFormatException ee) {
port=-1;
}
host=host.substring(0, host.indexOf(':'));
}
if(user.length()==0 ||
host.length()==0 ||
port==-1){
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.108", target[0])); //$NON-NLS-1$
return;
}
String options=""; //$NON-NLS-1$
try{
ByteArrayOutputStream bos=new ByteArrayOutputStream();
if(options.length()!=0){
try{bos.write((options+" ").getBytes());} //$NON-NLS-1$
catch(IOException eeee){}
}
kpair.writePublicKey(bos, kpairComment);
bos.close();
export_via_sftp(user, host, port,
".ssh/authorized_keys", //$NON-NLS-1$
bos.toByteArray());
}
catch(IOException ee){
}
catch(JSchException ee){
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.111")); //$NON-NLS-1$
}
}});
saveKeyPair.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(kpair==null)return;
String pass=keyPassphrase1Text.getText();
/*
if(!pass.equals(keyPassphrase2Text.getText())){
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.48")); //$NON-NLS-1$
return;
}
*/
if(pass.length()==0){
if(!MessageDialog.openConfirm(getShell(),
Policy.bind("CVSSSH2PreferencePage.confirmation"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.49") //$NON-NLS-1$
)){
return ;
}
}
kpair.setPassphrase(pass);
IPreferenceStore store=CVSSSH2Plugin.getDefault().getPreferenceStore();
String home=ssh2HomeText.getText();
File _home=new File(home);
if(!_home.exists()){
if(!MessageDialog.openConfirm(getShell(),
Policy.bind("CVSSSH2PreferencePage.confirmation"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.50",home) //$NON-NLS-1$
)){
return ;
}
if(!_home.mkdirs()){
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.100")+home); //$NON-NLS-1$
return;
}
}
FileDialog fd=new FileDialog(getShell(), SWT.SAVE);
fd.setFilterPath(home);
String file=(kpair.getKeyType()==KeyPair.RSA) ? "id_rsa" : "id_dsa"; //$NON-NLS-1$ //$NON-NLS-2$
fd.setFileName(file);
file=fd.open();
if(file==null){ // cancel
return;
}
if(new File(file).exists()){
if(!MessageDialog.openConfirm(getShell(),
Policy.bind("CVSSSH2PreferencePage.confirmation"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.53", file) //$NON-NLS-1$
)){
return;
}
}
boolean ok=true;
try{
kpair.writePrivateKey(file);
kpair.writePublicKey(file+".pub", kpairComment); //$NON-NLS-1$
}
catch(Exception ee){
ok=false;
}
if(ok){
MessageDialog.openInformation(getShell(),
Policy.bind("CVSSSH2PreferencePage.information"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.55")+ //$NON-NLS-1$
"\n"+ //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.57")+file+ //$NON-NLS-1$
"\n"+ //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.59")+ //$NON-NLS-1$
file+
".pub"); //$NON-NLS-1$
}
}
});
return group;
}
private TableViewer viewer;
private Button addHostKeyButton;
private Button removeHostKeyButton;
class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
public String getColumnText(Object element, int columnIndex) {
KnownHosts.HostKey entry = (KnownHosts.HostKey)element;
switch (columnIndex) {
case 0:
return entry.getHost();
case 1:
return entry.getType();
case 2:
return entry.getFingerPrint();
default:
return null;
}
}
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
};
private Control createHostKeyManagementPage(Composite parent) {
int columnSpan=3;
Composite group=new Composite(parent, SWT.NULL);
GridLayout layout=new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.numColumns = 2;
group.setLayout(layout);
GridData gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.verticalAlignment = GridData.FILL;
group.setLayoutData(gd);
Label label=new Label(group, SWT.NONE);
label.setText(Policy.bind("CVSSSH2PreferencePage.139")); //$NON-NLS-1$
gd=new GridData();
gd.horizontalSpan=2;
label.setLayoutData(gd);
viewer = new TableViewer(group, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
Table table = viewer.getTable();
new TableEditor(table);
table.setHeaderVisible(true);
table.setLinesVisible(true);
gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = convertWidthInCharsToPixels(30);
/*
* The hardcoded hint does not look elegant, but in reality
* it does not make anything bound to this 100-pixel value,
* because in any case the tree on the left is taller and
* that's what really determines the height.
*/
gd.heightHint = 100;
table.setLayoutData(gd);
table.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
handleSelection();
}
});
// Create the table columns
new TableColumn(table, SWT.NULL);
new TableColumn(table, SWT.NULL);
new TableColumn(table, SWT.NULL);
TableColumn[] columns = table.getColumns();
columns[0].setText(Policy.bind("CVSSSH2PreferencePage.134")); //$NON-NLS-1$
columns[1].setText(Policy.bind("CVSSSH2PreferencePage.135")); //$NON-NLS-1$
columns[2].setText(Policy.bind("CVSSSH2PreferencePage.136")); //$NON-NLS-1$
viewer.setColumnProperties(new String[] {
Policy.bind("CVSSSH2PreferencePage.134"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.135"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.136")}); //$NON-NLS-1$
viewer.setLabelProvider(new TableLabelProvider());
viewer.setContentProvider(new IStructuredContentProvider() {
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public Object[] getElements(Object inputElement) {
if (inputElement == null) return null;
return (Object[])inputElement;
}
});
TableLayout tl = new TableLayout();
tl.addColumnData(new ColumnWeightData(20));
tl.addColumnData(new ColumnWeightData(10));
tl.addColumnData(new ColumnWeightData(70));
table.setLayout(tl);
Composite buttons = new Composite(group, SWT.NULL);
buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
buttons.setLayout(layout);
addHostKeyButton = new Button(buttons, SWT.PUSH);
addHostKeyButton.setText(Policy.bind("CVSSSH2PreferencePage.137")); //$NON-NLS-1$
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
gd.widthHint = Math.max(widthHint, addHostKeyButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
addHostKeyButton.setLayoutData(gd);
addHostKeyButton.setEnabled(false);
addHostKeyButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
//addHostKey();
}
});
removeHostKeyButton = new Button(buttons, SWT.PUSH);
removeHostKeyButton.setText(Policy.bind("CVSSSH2PreferencePage.138")); //$NON-NLS-1$
gd = new GridData();
gd.horizontalAlignment = GridData.FILL;
gd.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
gd.widthHint = Math.max(widthHint, addHostKeyButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
removeHostKeyButton.setLayoutData(gd);
removeHostKeyButton.setEnabled(false);
removeHostKeyButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
removeHostKey();
}
});
Dialog.applyDialogFont(parent);
JSchSession.loadKnownHosts();
viewer.setInput(JSchSession.getJSch().getHostKeys());
handleSelection();
return group;
}
private void handleSelection() {
boolean empty = viewer.getSelection().isEmpty();
removeHostKeyButton.setEnabled(!empty);
}
private void removeHostKey(){
JSch jsch=JSchSession.getJSch();
IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
for (Iterator iterator = selection.iterator(); iterator.hasNext();) {
KnownHosts.HostKey hostkey = (KnownHosts.HostKey) iterator.next();
jsch.removeHostKey(hostkey.getHost(), hostkey.getType());
viewer.remove(hostkey);
}
}
private void export_via_sftp(String user, String host, int port, String target, byte[] pkey) throws JSchException{
try{
/*
int i=0;
String authorized_keys=target;
String dir="";
String separator="/";
i=target.lastIndexOf("/");
if(i<0){
i=target.lastIndexOf("\\");
if(i>=0){ separator="\\"; }
}
else{
}
if(i>=0){
authorized_keys=target.substring(i+1);
dir=target.substring(0, i+1);
}
*/
IProgressMonitor pm=new org.eclipse.core.runtime.NullProgressMonitor();
Session session=JSchSession.getSession(null, user, "", host, port, new JSchSession.ResponsiveSocketFacory(pm)); //$NON-NLS-1$
if(session.getServerVersion().indexOf("OpenSSH")==-1){ //$NON-NLS-1$
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.110")); //$NON-NLS-1$
return;
}
Channel channel=session.openChannel("sftp"); //$NON-NLS-1$
channel.connect();
ChannelSftp c=(ChannelSftp)channel;
String pwd=c.pwd();
SftpATTRS attr=null;
try{ attr=c.stat(".ssh"); } //$NON-NLS-1$
catch(SftpException ee){ }
if(attr==null){
try{ c.mkdir(".ssh"); } //$NON-NLS-1$
catch(SftpException ee){
setErrorMessage(ee.message);
return;
}
}
try{ c.cd(".ssh"); } //$NON-NLS-1$
catch(SftpException ee){
setErrorMessage(ee.message);
return;
}
try{
ByteArrayInputStream bis=new ByteArrayInputStream(pkey);
c.put(bis, "authorized_keys", null, ChannelSftp.APPEND); //$NON-NLS-1$
bis.close();
checkPermission(c, "authorized_keys"); //$NON-NLS-1$
checkPermission(c, "."); // .ssh //$NON-NLS-1$
c.cd(".."); //$NON-NLS-1$
checkPermission(c, "."); // home directory //$NON-NLS-1$
}
catch(SftpException ee){
//setErrorMessage(debug+ee.message);
}
MessageDialog.openInformation(getShell(),
Policy.bind("CVSSSH2PreferencePage.information"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.109")+ //$NON-NLS-1$
(user+"@"+host+(port==22 ? "" : ":"+port)+":~/.ssh/authorized_keys")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
c.disconnect();
//session.disconnect();
}
catch(IOException eee){
setErrorMessage(eee.toString());
}
}
private void checkPermission(ChannelSftp c, String path) throws SftpException{
SftpATTRS attr=c.stat(path);
int permissions=attr.getPermissions();
if((permissions&00022)!=0){
permissions&=~00022;
c.chmod(permissions,path);
}
}
private void updateControls() {
boolean enable=enableProxy.getSelection();
proxyTypeLabel.setEnabled(enable);
proxyTypeCombo.setEnabled(enable);
proxyPortLabel.setEnabled(enable);
proxyPortText.setEnabled(enable);
proxyHostLabel.setEnabled(enable);
proxyHostText.setEnabled(enable);
enableAuth.setEnabled(enable);
enable&=enableAuth.getSelection();
proxyUserLabel.setEnabled(enable);
proxyUserText.setEnabled(enable);
proxyPassLabel.setEnabled(enable);
proxyPassText.setEnabled(enable);
enable=(kpair!=null);
publicKeylabel.setEnabled(enable);
publicKeyText.setEnabled(enable);
keyFingerPrintLabel.setEnabled(enable);
keyFingerPrintText.setEnabled(enable);
keyCommentLabel.setEnabled(enable);
keyCommentText.setEnabled(enable);
keyPassphrase1Label.setEnabled(enable);
keyPassphrase1Text.setEnabled(enable);
keyPassphrase2Label.setEnabled(enable);
keyPassphrase2Text.setEnabled(enable);
keyExport.setEnabled(enable);
saveKeyPair.setEnabled(enable);
}
public void init(IWorkbench workbench) {
// super.init(workbench);
// initControls();
}
public void initialize() {
initControls();
}
public static void initDefaults(IPreferenceStore store) {
setDefault(store, KEY_SSH2HOME, JSchSession.default_ssh_home);
setDefault(store, KEY_PRIVATEKEY, privatekeys);
setDefault(store, KEY_PROXY_TYPE, HTTP);
setDefault(store, KEY_PROXY_PORT, HTTP_DEFAULT_PORT);
setDefault(store, KEY_PROXY_AUTH, "false"); //$NON-NLS-1$
}
private static void setDefault(IPreferenceStore store, String key, String value){
store.setDefault(key, value);
if(store.getString(key).length()==0)
store.setValue(key, value);
}
private void initControls(){
IPreferenceStore store=CVSSSH2Plugin.getDefault().getPreferenceStore();
ssh2HomeText.setText(store.getString(KEY_SSH2HOME));
privateKeyText.setText(store.getString(KEY_PRIVATEKEY));
useProxy=store.getString(KEY_PROXY).equals("true"); //$NON-NLS-1$
enableProxy.setSelection(useProxy);
proxyHostText.setText(store.getString(KEY_PROXY_HOST));
proxyTypeCombo.select(store.getString(KEY_PROXY_TYPE).equals(HTTP)?0:1);
proxyPortText.setText(store.getString(KEY_PROXY_PORT));
useAuth=store.getString(KEY_PROXY_AUTH).equals("true"); //$NON-NLS-1$
enableAuth.setSelection(useAuth);
Map map = Platform.getAuthorizationInfo(FAKE_URL, "proxy", AUTH_SCHEME); //$NON-NLS-1$
if(map!=null){
String username=(String) map.get(KEY_PROXY_USER);
if(username!=null) proxyUserText.setText(username);
String password=(String) map.get(KEY_PROXY_PASS);
if(password!=null) proxyPassText.setText(password);
}
proxyPassText.setEchoChar('*');
updateControls();
}
public boolean performOk() {
boolean result = super.performOk();
if (result) {
setErrorMessage(null);
String home = ssh2HomeText.getText();
File _home = new File(home);
if (!_home.exists()) {
if (MessageDialog.openQuestion(getShell(), Policy.bind("CVSSSH2PreferencePage.question"), //$NON-NLS-1$
Policy.bind("CVSSSH2PreferencePage.99", home) //$NON-NLS-1$
)) {
if (!(_home.mkdirs())) {
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.100") + home); //$NON-NLS-1$
return false;
}
}
}
if (enableProxy.getSelection() && !isValidPort(proxyPortText.getText())) {
return false;
}
IPreferenceStore store = CVSSSH2Plugin.getDefault().getPreferenceStore();
store.setValue(KEY_SSH2HOME, home);
store.setValue(KEY_PRIVATEKEY, privateKeyText.getText());
store.setValue(KEY_PROXY, enableProxy.getSelection());
store.setValue(KEY_PROXY_TYPE, proxyTypeCombo.getText());
store.setValue(KEY_PROXY_HOST, proxyHostText.getText());
store.setValue(KEY_PROXY_PORT, proxyPortText.getText());
store.setValue(KEY_PROXY_AUTH, enableAuth.getSelection());
// Store proxy username and password in the keyring file for now. This is
// not ultra secure, but at least it will be saved between sessions.
Map map = Platform.getAuthorizationInfo(FAKE_URL, "proxy", AUTH_SCHEME); //$NON-NLS-1$
if (map == null)
map = new java.util.HashMap(10);
map.put(KEY_PROXY_USER, proxyUserText.getText());
map.put(KEY_PROXY_PASS, proxyPassText.getText());
try {
Platform.addAuthorizationInfo(FAKE_URL, "proxy", AUTH_SCHEME, map); //$NON-NLS-1$
} catch (CoreException e) {
Util.logError("Cannot save ssh2 proxy authentication information to keyring file", e); //$NON-NLS-1$
}
}
CVSSSH2Plugin.getDefault().savePluginPreferences();
return result;
}
private boolean isValidPort(String port){
int i=-1;
try {
i=Integer.parseInt(port);
}
catch (NumberFormatException ee) {
// setErrorMessage(Policy.bind("CVSSSH2PreferencePage.103")); //$NON-NLS-1$
// return false;
}
if((i < 0) || (i > 65535)){
setErrorMessage(Policy.bind("CVSSSH2PreferencePage.104")); //$NON-NLS-1$
return false;
}
return true;
}
public void performApply() {
performOk();
}
protected void performDefaults(){
super.performDefaults();
enableProxy.setSelection(false);
proxyHostText.setText(""); //$NON-NLS-1$
proxyPortText.setText(HTTP_DEFAULT_PORT);
proxyTypeCombo.select(0);
enableAuth.setSelection(false);
proxyUserText.setText(""); //$NON-NLS-1$
proxyPassText.setText(""); //$NON-NLS-1$
updateControls();
}
protected void createSpacer(Composite composite, int columnSpan) {
Label label=new Label(composite, SWT.NONE);
GridData gd=new GridData();
gd.horizontalSpan=columnSpan;
label.setLayoutData(gd);
}
}
class ExportDialog extends Dialog {
protected Text field;
protected String target=null;
protected String title=null;
protected String message=null;
public ExportDialog(Shell parentShell, String title, String message) {
super(parentShell);
this.title=title;
this.message=message;
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(title);
}
public void create() {
super.create();
field.setFocus();
}
protected Control createDialogArea(Composite parent) {
parent = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
parent.setLayout(layout);
parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Composite main=new Composite(parent, SWT.NONE);
layout=new GridLayout();
layout.numColumns=3;
main.setLayout(layout);
main.setLayoutData(new GridData(GridData.FILL_BOTH));
if (message!=null) {
Label messageLabel=new Label(main, SWT.WRAP);
messageLabel.setText(message);
GridData data=new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan=3;
messageLabel.setLayoutData(data);
}
createTargetFields(main);
Dialog.applyDialogFont(main);
return main;
}
protected void createTargetFields(Composite parent) {
new Label(parent, SWT.NONE).setText(Policy.bind("CVSSSH2PreferencePage.125")); //$NON-NLS-1$
field=new Text(parent, SWT.BORDER);
GridData data=new GridData(GridData.FILL_HORIZONTAL);
data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
data.horizontalSpan=2;
field.setLayoutData(data);
}
public String getTarget() {
return target;
}
protected void okPressed() {
String _target=field.getText();
if(_target==null || _target.length()==0){
return;
}
target=_target;
super.okPressed();
}
protected void cancelPressed() {
target=null;
super.cancelPressed();
}
}
class PassphrasePrompt implements Runnable{
private String message;
private String passphrase;
PassphrasePrompt(String message){
this.message=message;
}
public void run(){
Display display=Display.getCurrent();
Shell shell=new Shell(display);
PassphraseDialog dialog=new PassphraseDialog(shell, message);
dialog.open();
shell.dispose();
passphrase=dialog.getPassphrase();
}
public String getPassphrase(){
return passphrase;
}
}
class PassphraseDialog extends Dialog {
protected Text passphraseField;
protected String passphrase = null;
protected String message = null;
public PassphraseDialog(Shell parentShell, String message) {
super(parentShell);
this.message = message;
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(message);
}
public void create() {
super.create();
passphraseField.setFocus();
}
protected Control createDialogArea(Composite parent) {
Composite main=new Composite(parent, SWT.NONE);
GridLayout layout=new GridLayout();
layout.numColumns=3;
main.setLayout(layout);
main.setLayoutData(new GridData(GridData.FILL_BOTH));
if (message!=null) {
Label messageLabel=new Label(main, SWT.WRAP);
messageLabel.setText(message);
GridData data=new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan=3;
messageLabel.setLayoutData(data);
}
createPassphraseFields(main);
return main;
}
protected void createPassphraseFields(Composite parent) {
new Label(parent, SWT.NONE).setText(Policy.bind("CVSSSH2PreferencePage.127")); //$NON-NLS-1$
passphraseField=new Text(parent, SWT.BORDER);
GridData data=new GridData(GridData.FILL_HORIZONTAL);
data.widthHint=convertHorizontalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH);
passphraseField.setLayoutData(data);
passphraseField.setEchoChar('*');
new Label(parent, SWT.NONE);
}
public String getPassphrase() {
return passphrase;
}
protected void okPressed() {
String _passphrase = passphraseField.getText();
if(_passphrase==null || _passphrase.length()==0){
return;
}
passphrase=_passphrase;
super.okPressed();
}
protected void cancelPressed() {
passphrase=null;
super.cancelPressed();
}
}