/* * DBeaver - Universal Database Manager * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jkiss.dbeaver.ext.postgresql.ui; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.jkiss.dbeaver.core.DBeaverUI; import org.jkiss.dbeaver.ext.postgresql.PostgreConstants; import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration; import org.jkiss.dbeaver.registry.driver.DriverClassFindJob; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.controls.TextWithOpen; import org.jkiss.dbeaver.ui.controls.TextWithOpenFile; import org.jkiss.dbeaver.ui.dialogs.net.SSLConfiguratorAbstractUI; import org.jkiss.utils.CommonUtils; /** * PostgreSSLConfigurator */ public class PostgreSSLConfigurator extends SSLConfiguratorAbstractUI { public static final String[] SSL_MODES = {"","disable","allow","prefer","require","verify-ca","verify-full"}; private TextWithOpen rootCertText; private TextWithOpen clientCertText; private TextWithOpen clientKeyText; private Combo sslModeCombo; private Combo sslFactoryCombo; @Override public void createControl(Composite parent) { final Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(1, false)); GridData gd = new GridData(GridData.FILL_BOTH); gd.minimumHeight = 200; composite.setLayoutData(gd); { Group certGroup = UIUtils.createControlGroup(composite, "Certificates", 2, GridData.FILL_HORIZONTAL, -1); UIUtils.createControlLabel(certGroup, "Root certificate"); gd = new GridData(GridData.FILL_HORIZONTAL); gd.minimumWidth = 130; rootCertText = new TextWithOpenFile(certGroup, "CA Certificate", new String[]{"*.*", "*.crt", "*.cert", "*.pem", "*"}); rootCertText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); UIUtils.createControlLabel(certGroup, "SSL certificate"); gd = new GridData(GridData.FILL_HORIZONTAL); gd.minimumWidth = 130; clientCertText = new TextWithOpenFile(certGroup, "SSL Certificate", new String[]{"*.*", "*.cert", "*.pem", "*"}); clientCertText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); UIUtils.createControlLabel(certGroup, "SSL certificate key"); gd = new GridData(GridData.FILL_HORIZONTAL); gd.minimumWidth = 130; clientKeyText = new TextWithOpenFile(certGroup, "SSL Certificate", new String[]{"*.*", "*.cert", "*.pem", "*"}); clientKeyText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } { Group advGroup = UIUtils.createControlGroup(composite, "Advanced", 2, GridData.FILL_HORIZONTAL, -1); sslModeCombo = UIUtils.createLabelCombo(advGroup, "SSL mode", SWT.READ_ONLY | SWT.DROP_DOWN); sslModeCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); for (String mode : SSL_MODES) { sslModeCombo.add(mode); } sslFactoryCombo = UIUtils.createLabelCombo(advGroup, "SSL Factory", SWT.DROP_DOWN); } } @Override public void loadSettings(final DBWHandlerConfiguration configuration) { clientCertText.setText(CommonUtils.notEmpty(configuration.getProperties().get(PostgreConstants.PROP_SSL_CLIENT_CERT))); clientKeyText.setText(CommonUtils.notEmpty(configuration.getProperties().get(PostgreConstants.PROP_SSL_CLIENT_KEY))); rootCertText.setText(CommonUtils.notEmpty(configuration.getProperties().get(PostgreConstants.PROP_SSL_ROOT_CERT))); UIUtils.setComboSelection(sslModeCombo, CommonUtils.notEmpty(configuration.getProperties().get(PostgreConstants.PROP_SSL_MODE))); final Job resolveJob = new Job("Find factories") { { setUser(true); } @Override protected IStatus run(IProgressMonitor monitor) { final DriverClassFindJob finder = new DriverClassFindJob( configuration.getDriver(), "javax/net/ssl/SSLSocketFactory", false); finder.run(monitor); DBeaverUI.syncExec(new Runnable() { @Override public void run() { for (String cn : finder.getDriverClassNames()) { sslFactoryCombo.add(cn); } final String factoryValue = configuration.getProperties().get(PostgreConstants.PROP_SSL_FACTORY); if (!CommonUtils.isEmpty(factoryValue)) { sslFactoryCombo.setText(factoryValue); } } }); return Status.OK_STATUS; } }; resolveJob.schedule(); } @Override public void saveSettings(DBWHandlerConfiguration configuration) { configuration.getProperties().put(PostgreConstants.PROP_SSL_CLIENT_CERT, clientCertText.getText()); configuration.getProperties().put(PostgreConstants.PROP_SSL_CLIENT_KEY, clientKeyText.getText()); configuration.getProperties().put(PostgreConstants.PROP_SSL_MODE, sslModeCombo.getText()); configuration.getProperties().put(PostgreConstants.PROP_SSL_FACTORY, sslFactoryCombo.getText()); } }