提交 47aafa63 编写于 作者: S serge-rider

#3508 SSH tunnel test


Former-commit-id: 09eb7505
上级 f335e842
......@@ -92,6 +92,16 @@ public class SSHImplementationJsch extends SSHImplementationAbstract {
}
}
@Override
public String getClientVersion() {
return session == null ? null : session.getClientVersion();
}
@Override
public String getServerVersion() {
return session == null ? null : session.getServerVersion();
}
@Override
public void invalidateTunnel(DBRProgressMonitor monitor) throws DBException, IOException {
boolean isAlive = session != null && session.isConnected();
......
......@@ -106,6 +106,16 @@ public class SSHImplementationSshj extends SSHImplementationAbstract {
}
}
@Override
public String getClientVersion() {
return sshClient == null ? null : sshClient.getTransport().getClientVersion();
}
@Override
public String getServerVersion() {
return sshClient == null ? null : sshClient.getTransport().getServerVersion();
}
@Override
public void invalidateTunnel(DBRProgressMonitor monitor) throws DBException, IOException {
boolean isAlive = sshClient != null && sshClient.isConnected();
......
......@@ -16,23 +16,31 @@
*/
package org.jkiss.dbeaver.ui.net.ssh;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration;
import org.jkiss.dbeaver.model.net.ssh.SSHConstants;
import org.jkiss.dbeaver.model.net.ssh.SSHTunnelImpl;
import org.jkiss.dbeaver.model.net.ssh.registry.SSHImplementationDescriptor;
import org.jkiss.dbeaver.model.net.ssh.registry.SSHImplementationRegistry;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.IObjectPropertyConfigurator;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.TextWithOpen;
import org.jkiss.dbeaver.ui.controls.TextWithOpenFile;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
/**
......@@ -40,6 +48,8 @@ import java.util.Map;
*/
public class SSHTunnelConfiguratorUI implements IObjectPropertyConfigurator<DBWHandlerConfiguration> {
private DBWHandlerConfiguration savedConfiguration;
private Text hostText;
private Spinner portText;
private Text userNameText;
......@@ -107,6 +117,13 @@ public class SSHTunnelConfiguratorUI implements IObjectPropertyConfigurator<DBWH
tunnelTimeout = UIUtils.createLabelSpinner(advancedGroup, SSHUIMessages.model_ssh_configurator_label_tunnel_timeout, SSHConstants.DEFAULT_CONNECT_TIMEOUT, 0, 300000);
}
Button testButton = UIUtils.createPushButton(composite, "Test runnel configuration", null, new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
testTunnelConnection();
}
});
authMethodCombo.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
......@@ -117,6 +134,46 @@ public class SSHTunnelConfiguratorUI implements IObjectPropertyConfigurator<DBWH
}
private void testTunnelConnection() {
DBWHandlerConfiguration configuration = new DBWHandlerConfiguration(savedConfiguration);
saveSettings(configuration);
try {
final String[] tunnelVersions = new String[2];
DBeaverUI.runInProgressDialog(monitor -> {
monitor.beginTask("Instantiate SSH tunnel", 2);
SSHTunnelImpl tunnel = new SSHTunnelImpl();
DBPConnectionConfiguration connectionConfig = new DBPConnectionConfiguration();
connectionConfig.setHostName("localhost");
connectionConfig.setHostPort(configuration.getProperties().get(SSHConstants.PROP_PORT));
try {
monitor.subTask("Initialize tunnel");
tunnel.initializeTunnel(monitor, DBeaverCore.getInstance(), configuration, connectionConfig);
monitor.worked(1);
// Get info
tunnelVersions[0] = tunnel.getImplementation().getClientVersion();
tunnelVersions[1] = tunnel.getImplementation().getServerVersion();
// Close it
monitor.subTask("Close tunnel");
tunnel.closeTunnel(monitor);
monitor.worked(1);
} catch (Exception e) {
throw new InvocationTargetException(e);
}
monitor.done();
});
MessageDialog.openInformation(hostText.getShell(), CoreMessages.dialog_connection_wizard_start_connection_monitor_success,
"Connected!\n\nClient version: " + tunnelVersions[0] + "\nServer version: " + tunnelVersions[1]);
} catch (InvocationTargetException ex) {
DBUserInterface.getInstance().showError(
CoreMessages.dialog_connection_wizard_start_dialog_error_title,
null,
GeneralUtils.makeExceptionStatus(ex.getTargetException()));
}
}
@Override
public void loadSettings(DBWHandlerConfiguration configuration)
{
......@@ -163,6 +220,8 @@ public class SSHTunnelConfiguratorUI implements IObjectPropertyConfigurator<DBWH
tunnelTimeout.setSelection(CommonUtils.toInt(timeoutString));
}
updatePrivateKeyVisibility();
savedConfiguration = new DBWHandlerConfiguration(configuration);
}
@Override
......
......@@ -32,6 +32,10 @@ public interface SSHImplementation {
DBPConnectionConfiguration initTunnel(DBRProgressMonitor monitor, DBPPlatform platform, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo)
throws DBException, IOException;
String getClientVersion();
String getServerVersion();
void invalidateTunnel(DBRProgressMonitor monitor)
throws DBException, IOException;
......
......@@ -43,6 +43,10 @@ public class SSHTunnelImpl implements DBWTunnel {
private SSHImplementation implementation;
public SSHImplementation getImplementation() {
return implementation;
}
@Override
public DBPConnectionConfiguration initializeTunnel(DBRProgressMonitor monitor, DBPPlatform platform, DBWHandlerConfiguration configuration, DBPConnectionConfiguration connectionInfo)
throws DBException, IOException
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册