/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.directory.studio.openldap.config.editor.pages; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.apache.directory.api.util.Strings; import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils; import org.apache.directory.studio.common.ui.widgets.TableWidget; import org.apache.directory.studio.common.ui.widgets.WidgetModifyEvent; import org.apache.directory.studio.common.ui.widgets.WidgetModifyListener; import org.apache.directory.studio.openldap.common.ui.model.PasswordHashEnum; import org.apache.directory.studio.openldap.config.editor.OpenLDAPServerConfigurationEditor; import org.apache.directory.studio.openldap.config.editor.dialogs.OverlayDialog; import org.apache.directory.studio.openldap.config.editor.dialogs.SaslSecPropsDialog; import org.apache.directory.studio.openldap.config.editor.wrappers.PasswordHashDecorator; import org.apache.directory.studio.openldap.config.editor.wrappers.SsfWrapper; import org.apache.directory.studio.openldap.config.editor.wrappers.SsfDecorator; import org.apache.directory.studio.openldap.config.model.OlcGlobal; /** * This class represents the Security Page of the Server Configuration Editor. It covers * the TLS configuration, the SASL configuration and some othe rseci-urity parameters. * <ul> * <li> TLS : * <ul> * <li>olcTLSCACertificateFile</li> * <li>olcTLSCACertificatePath</li> * <li>olcTLSCertificateFile</li> * <li>olcTLSCertificateKeyFile</li> * <li>olcTLSCipherSuite</li> * <li>olcTLSCrlCheck</li> * <li>olcTLSCrlFile</li> * <li>olcTLSDhParamFile</li> * <li>olcTLSProtocolMin</li> * <li>olcTLSRandFile</li> * <li>olcTLSVerifyClient></li> * </ul> * </li> * <li> SASL : * <ul> * <li>olcSaslAuxProps</li> * <li>olcSaslHost</li> * <li>olcSaslRealm</li> * <li>olcSaslSecProps</li> * </ul> * </li> * <li> Miscellaneous : * <ul> * <li>olcLocalSsf</li> * <li>olcPasswordCryptSaltFormat</li> * <li>olcPasswordHash</li> * <li>olcSecurity</li> * </ul> * </li> * </ul> * * <pre> * +------------------------------------------------------------------------------------------------------+ * | Security Configuration | * +------------------------------------------------------------------------------------------------------+ * | .-----------------------------------------------. .------------------------------------------------. | * | |V TLS Configuration | |V SASL Configuration | | * | +-----------------------------------------------+ +------------------------------------------------+ | * | | TLS Certificate File : [ ] | | SASL Host : [ ] | | * | | TLS Certificate Key File : [ ] | | SASL Realm : [ ] | | * | | TLS CA Certificate File : [ ] | | SASL Auxprops plugin : [ ] | | * | | TLS CA Certificate Path : [ ] | | SASL Security Properties : [ ] (Edit...) | | * | | TLS Cipher Suite : [ ] | +------------------------------------------------+ | * | | TLS CRL Check : [=============] | .------------------------------------------------. | * | | TLS CRL File : [ ] | |V Miscellaneous Security Parameters | | * | | TLS DH Parameter File : [ ] | +------------------------------------------------+ | * | | TLS Minimum Protocol : [=============] | | Local SSF : [ ] pWD Crypt Salt : [ ] | | * | | TLS Random Bits File : [ ] | | | | * | | TLS Verify Client : [=============] | | Password Hash : | | * | +-----------------------------------------------+ | +----------------------------------+ | | * | | | | (Add) | | * | | | | (Delete) | | * | | | | | | * | | +----------------------------------+ | | * | | Security : | | * | | +----------------------------------+ | | * | | | | (Add) | | * | | | | (Edit) | | * | | | | (Delete) | | * | | +----------------------------------+ | | * | +------------------------------------------------+ | * +------------------------------------------------------------------------------------------------------+ * </pre> * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class SecurityPage extends OpenLDAPServerConfigurationEditorPage { /** The Page ID*/ public static final String ID = SecurityPage.class.getName(); //$NON-NLS-1$ /** The Page Title */ private static final String TITLE = Messages.getString( "OpenLDAPSecurityPage.Title" ); //$NON-NLS-1$"Overview";"Security"; // UI Controls for the TLS part /** The olcTLSCACertificateFile Text */ private Text tlsCaCertificateFileText; /** The olcTLSCACertificatePath Text */ private Text tlsCaCertificatePathText; /** The olcTLSCertificateFile Text */ private Text tlsCertificateFileText; /** The olcTLSCertificateKeyFile Text */ private Text tlsCertificateKeyFileText; /** The olcTLSCipherSuite Text */ private Text tlsCipherSuiteText; /** The olcTLSCrlCheck Text */ private Combo tlsCrlCheckCombo; /** The olcTLSCrlFile Text */ private Text tlsCrlFileText; /** The olcTLSDhParamFile Text */ private Text tlsDhParamFileText; /** The olcTLSProtocolMin Text */ private Combo tlsProtocolMinCombo; /** The olcTLSRandFile Text */ private Text tlsRandFileText; /** The olcTLSVerifyClient Text */ private Combo tlsVerifyClientCombo; // UI Controls for the SASL part /** The olcSaslAuxProps */ private Text saslAuxPropsText; /** The olcSaslHost */ private Text saslHostText; /** The olcSaslRealm */ private Text saslRealmText; /** The olcSaslSecProps */ private Text saslSecPropsText; private Button saslSecPropsEditButton; // UI Controls for the Misc part /** The olcLocalSSF */ private Text localSsfText; /** The olcPasswordCryptSaltFormat */ private Text passwordCryptSaltFormatText; /** The olcPasswordHash */ private TableWidget<PasswordHashEnum> passwordHashTableWidget; /** The olcSecurity table widget */ private TableWidget<SsfWrapper> securityTableWidget; /** A constant for the no-selection in Combo */ private static final String NO_CHOICE = "---"; /** The CRL Checks */ private static final String[] crlChecks = new String[] { NO_CHOICE, "none", "peer", "all" }; /** The list of supported protocols */ private static final String[] protocols = new String[] { NO_CHOICE, "3.0", "3.1", "3.2" }; /** The list of VerifyClients */ private static final String[] verifyClients = new String[] { NO_CHOICE, "never", "allow", "try", "demand", "hard", "true" }; /** * The olcLocalSSF listener */ private ModifyListener localSsfListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { if ( !Strings.isEmpty( localSsfText.getText() ) ) { getConfiguration().getGlobal().setOlcLocalSSF( Integer.valueOf( localSsfText.getText() ) ); } } }; /** * The olcPasswordCryptSaltFormat listener */ private ModifyListener passwordCryptSaltFormatListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcPasswordCryptSaltFormat( passwordCryptSaltFormatText.getText() ); } }; /** * The olcPasswordHash listener */ private WidgetModifyListener passwordHashListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> passwordHashes = new ArrayList<String>(); for ( PasswordHashEnum passwordHash : passwordHashTableWidget.getElements() ) { passwordHashes.add( passwordHash.getName() ); } getConfiguration().getGlobal().setOlcPasswordHash( passwordHashes ); } }; /** * The olcSecurity listener */ private WidgetModifyListener securityListener = new WidgetModifyListener() { public void widgetModified( WidgetModifyEvent e ) { List<String> ssfWrappers = new ArrayList<String>(); for ( SsfWrapper ssfWrapper : securityTableWidget.getElements() ) { ssfWrappers.add( ssfWrapper.toString() ); } getConfiguration().getGlobal().setOlcSecurity( ssfWrappers ); } }; /** * The olcTlsCertificateFile listener */ private ModifyListener tlsCertificateFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSCertificateFile( tlsCertificateFileText.getText() ); } }; /** * The olcTlsCertificateKeyFile listener */ private ModifyListener tlsCertificateKeyFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSCertificateKeyFile( tlsCertificateKeyFileText.getText() ); } }; /** * The olcTlsCACertificateFile listener */ private ModifyListener tlsCaCertificateFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSCACertificateFile( tlsCaCertificateFileText.getText() ); } }; /** * The olcTlsCACertificatePath listener */ private ModifyListener tlsCaCertificatePathTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSCACertificatePath( tlsCaCertificatePathText.getText() ); } }; /** * The olcTlsCipherSuite listener */ private ModifyListener tlsCipherSuiteTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSCipherSuite( tlsCipherSuiteText.getText() ); } }; /** * The olcTlsCrlFile listener */ private ModifyListener tlsCrlFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSCRLFile( tlsCrlFileText.getText() ); } }; /** * The olcTlsCrlCheck listener */ private SelectionListener tlsCrlCheckComboListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcTLSCRLCheck( tlsCrlCheckCombo.getText() ); } }; /** * The olcTlsDhParamFile listener */ private ModifyListener tlsDhParamFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSDHParamFile( tlsDhParamFileText.getText() ); } }; /** * The olcTlsRandFile listener */ private ModifyListener tlsRandFileTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcTLSRandFile( tlsRandFileText.getText() ); } }; /** * The olcTlsProtocolMin listener */ private SelectionListener tlsProtocolMinComboListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcTLSProtocolMin( tlsProtocolMinCombo.getText() ); } }; /** * The olcTlsVerifyClient listener */ private SelectionListener tlsVerifyClientComboListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { getConfiguration().getGlobal().setOlcTLSVerifyClient( tlsVerifyClientCombo.getText() ); } }; /** * The olcSaslAuxProps listener */ private ModifyListener saslAuxPropsTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcSaslAuxprops( saslAuxPropsText.getText() ); } }; /** * The olcSaslHost listener */ private ModifyListener saslHostTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcSaslHost( saslHostText.getText() ); } }; /** * The olcSaslrealm listener */ private ModifyListener saslRealmTextListener = new ModifyListener() { public void modifyText( ModifyEvent e ) { getConfiguration().getGlobal().setOlcSaslRealm( saslRealmText.getText() ); } }; /** * The listener for the SaslSecProps Text */ private SelectionListener saslSecPropsEditSelectionListener = new SelectionAdapter() { public void widgetSelected( SelectionEvent e ) { SaslSecPropsDialog dialog = new SaslSecPropsDialog( saslSecPropsText.getShell(), saslSecPropsText.getText() ); if ( dialog.open() == OverlayDialog.OK ) { String saslSecPropsValue = dialog.getSaslSecPropsValue(); if ( saslSecPropsValue != null ) { saslSecPropsText.setText( saslSecPropsValue ); } getConfiguration().getGlobal().setOlcSaslSecProps( saslSecPropsValue ); } } }; /** * Creates a new instance of SecurityPage. * * @param editor the associated editor */ public SecurityPage( OpenLDAPServerConfigurationEditor editor ) { super( editor, ID, TITLE ); } /** * Creates the OpenLDAP Security config Tab. It contains 2 rows, with * 2 columns : * * <pre> * +-----------------------------------+---------------------------------+ * | | | * | | SASL | * | | | * | TLS +---------------------------------+ * | | | * | | miscellaneous | * | | | * +-----------------------------------+---------------------------------+ * </pre> */ protected void createFormContent( Composite parent, FormToolkit toolkit ) { TableWrapLayout twl = new TableWrapLayout(); twl.numColumns = 2; twl.makeColumnsEqualWidth = true; parent.setLayout( twl ); // The TLS part Composite tlsComposite = toolkit.createComposite( parent ); tlsComposite.setLayout( new GridLayout() ); TableWrapData tlsCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP, 2, 1 ); tlsCompositeTableWrapData.grabHorizontal = true; tlsComposite.setLayoutData( tlsCompositeTableWrapData ); // The SASL part Composite saslComposite = toolkit.createComposite( parent ); saslComposite.setLayout( new GridLayout() ); TableWrapData saslCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); saslCompositeTableWrapData.grabHorizontal = true; saslComposite.setLayoutData( saslCompositeTableWrapData ); // The MISC part Composite miscComposite = toolkit.createComposite( parent ); miscComposite.setLayout( new GridLayout() ); TableWrapData miscCompositeTableWrapData = new TableWrapData( TableWrapData.FILL, TableWrapData.TOP ); miscCompositeTableWrapData.grabHorizontal = true; miscComposite.setLayoutData( miscCompositeTableWrapData ); // Now, create the sections createTlsSection( toolkit, tlsComposite ); createSaslSection( toolkit, saslComposite ); createMiscSection( toolkit, miscComposite ); } /** * Creates the TLS section. This section is a grid with 4 columns, * <ul> * <li>olcTLSCACertificateFile</li> * <li>olcTLSCACertificatePath</li> * <li>olcTLSCertificateFile</li> * <li>olcTLSCertificateKeyFile</li> * <li>olcTLSCipherSuite</li> * <li>olcTLSCrlCheck</li> * <li>olcTLSCrlFile</li> * <li>olcTLSDhParamFile</li> * <li>olcTLSProtocolMin</li> * <li>olcTLSRandFile</li> * <li>olcTLSVerifyClient></li> * </ul> * * <pre> * .-----------------------------------------------. * |V TLS parameters | * +-----------------------------------------------+ * | | * | TLS Certificate File : [ ] | * | TLS Certificate Key File : [ ] | * | TLS CA Certificate File : [ ] | * | TLS CA Certificate Path : [ ] | * | TLS Cipher Suite : [ ] | * | TLS CRL Check : [=============] | * | TLS CRL File : [ ] | * | TLS DH Parameter File : [ ] | * | TLS Minimum Protocol : [=============] | * | TLS Random Bits File : [ ] | * | TLS Verify Client : [=============] | * +-----------------------------------------------+ * </pre> * * @param toolkit the toolkit * @param parent the parent composite */ private void createTlsSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPSecurityPage.TlsSection" ) ); // The content Composite tlsSectionComposite = createSectionComposite( toolkit, section, 2, false ); // The tlsCertificateFile parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCertificateFile" ) ); //$NON-NLS-1$ tlsCertificateFileText = toolkit.createText( tlsSectionComposite, "" ); tlsCertificateFileText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsCertificateFileText, tlsCertificateFileTextListener ); // The tlsCertificateKeyFile parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCertificateKeyFile" ) ); //$NON-NLS-1$ tlsCertificateKeyFileText = toolkit.createText( tlsSectionComposite, "" ); tlsCertificateKeyFileText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsCertificateKeyFileText, tlsCertificateKeyFileTextListener ); // The tlsCaCertificateFile parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCACertificateFile" ) ); //$NON-NLS-1$ tlsCaCertificateFileText = toolkit.createText( tlsSectionComposite, "" ); tlsCaCertificateFileText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsCaCertificateFileText, tlsCaCertificateFileTextListener ); // The tlsCaCertificatePath parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCACertificatePath" ) ); //$NON-NLS-1$ tlsCaCertificatePathText = toolkit.createText( tlsSectionComposite, "" ); tlsCaCertificatePathText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsCaCertificatePathText, tlsCaCertificatePathTextListener ); // The tlsCipherSuite parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCipherSuite" ) ); //$NON-NLS-1$ tlsCipherSuiteText = toolkit.createText( tlsSectionComposite, "" ); tlsCipherSuiteText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsCipherSuiteText, tlsCipherSuiteTextListener ); // The tlsDHParamFile parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSDHParamFile" ) ); //$NON-NLS-1$ tlsDhParamFileText = toolkit.createText( tlsSectionComposite, "" ); tlsDhParamFileText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsDhParamFileText, tlsDhParamFileTextListener ); // The tlsRandFile parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSRandFile" ) ); //$NON-NLS-1$ tlsRandFileText = toolkit.createText( tlsSectionComposite, "" ); tlsRandFileText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsRandFileText, tlsRandFileTextListener ); // The tlsCRLFile parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCRLFile" ) ); //$NON-NLS-1$ tlsCrlFileText = toolkit.createText( tlsSectionComposite, "" ); tlsCrlFileText.setLayoutData( new GridData(GridData.FILL_HORIZONTAL ) ); addModifyListener( tlsCrlFileText, tlsCrlFileTextListener ); // The tlsCRLCheck parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSCRLCheck" ) ); //$NON-NLS-1$ tlsCrlCheckCombo = BaseWidgetUtils.createCombo( tlsSectionComposite, crlChecks, -1, 1 ); tlsCrlCheckCombo.addSelectionListener( tlsCrlCheckComboListener ); // The tlsProtocolMin parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSProtocolMin" ) ); //$NON-NLS-1$ tlsProtocolMinCombo = BaseWidgetUtils.createCombo( tlsSectionComposite, protocols, -1, 1 ); tlsProtocolMinCombo.addSelectionListener( tlsProtocolMinComboListener ); // The tlsProtocolMin parameter toolkit.createLabel( tlsSectionComposite, Messages.getString( "OpenLDAPSecurityPage.TLSVerifyClient" ) ); //$NON-NLS-1$ tlsVerifyClientCombo = BaseWidgetUtils.createCombo( tlsSectionComposite, verifyClients, -1, 1 ); tlsVerifyClientCombo.addSelectionListener( tlsVerifyClientComboListener ); } /** * Creates the SASL section. This section is a grid with 4 columns, * <ul> * <li>olcSaslAuxProps</li> * <li>olcSaslHost</li> * <li>olcSaslRealm</li> * <li>olcSaslSecProps</li> * </ul> * * <pre> * .---------------------------------------------------------. * |V SASL Parameters | * +---------------------------------------------------------+ * | SASL Host : [ ] | * | SASL Realm : [ ] | * | SASL Auxprops plugin : [ ] | * | SASL Security Properties : [ ] (Edit...) | * +---------------------------------------------------------+ * </pre> * * * @param toolkit the toolkit * @param parent the parent composite */ private void createSaslSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPSecurityPage.SaslSection" ) ); // The content Composite saslSectionComposite = createSectionComposite( toolkit, section, 3, false ); // The saslHost parameter toolkit.createLabel( saslSectionComposite, Messages.getString( "OpenLDAPSecurityPage.SaslHost" ) ); //$NON-NLS-1$ saslHostText = toolkit.createText( saslSectionComposite, "" ); saslHostText.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false, 2, 1 ) ); addModifyListener( saslHostText, saslHostTextListener ); // The saslRealm parameter toolkit.createLabel( saslSectionComposite, Messages.getString( "OpenLDAPSecurityPage.SaslRealm" ) ); //$NON-NLS-1$ saslRealmText = toolkit.createText( saslSectionComposite, "" ); saslRealmText.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false, 2, 1 ) ); addModifyListener( saslRealmText, saslRealmTextListener ); // The saslAuxProps parameter toolkit.createLabel( saslSectionComposite, Messages.getString( "OpenLDAPSecurityPage.SaslAuxProps" ) ); //$NON-NLS-1$ saslAuxPropsText = toolkit.createText( saslSectionComposite, "" ); saslAuxPropsText.setLayoutData( new GridData( SWT.FILL, SWT.TOP, true, false, 2, 1 ) ); addModifyListener( saslAuxPropsText, saslAuxPropsTextListener ); // The saslSecProps parameter toolkit.createLabel( saslSectionComposite, Messages.getString( "OpenLDAPSecurityPage.SaslSecProps" ) ); //$NON-NLS-1$ saslSecPropsText = toolkit.createText( saslSectionComposite, "" ); saslSecPropsText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) ); saslSecPropsEditButton = BaseWidgetUtils.createButton( saslSectionComposite, Messages.getString( "OpenLDAPSecurityPage.Edit" ), 1 ); saslSecPropsEditButton.setLayoutData( new GridData( SWT.RIGHT, SWT.CENTER, false, false ) ); saslSecPropsEditButton.addSelectionListener( saslSecPropsEditSelectionListener ); } /** * Creates the Misc section. This section is a grid with 4 columns, * <ul> * <li>olcLocalSsf</li> * <li>olcPasswordCryptSaltFormat</li> * <li>olcPasswordHash</li> * <li>olcSecurity</li> * </ul> * * <pre> * .-------------------------------------------------------------------------------. * |V Miscellaneous Security Parameters | * +-------------------------------------------------------------------------------+ * | Local SSF : [ ] Password Crypt Salt format : [ ] | * | | * | Password Hash : | * | +-----------------------------------------------------------------+ | * | | | (Add) | * | | | (Delete) | * | | | | * | +-----------------------------------------------------------------+ | * | Security : | * | +-----------------------------------------------------------------+ | * | | | (Add) | * | | | (Edit) | * | | | (Delete) | * | +-----------------------------------------------------------------+ | * +-------------------------------------------------------------------------------+ * </pre> * * * @param toolkit the toolkit * @param parent the parent composite */ private void createMiscSection( FormToolkit toolkit, Composite parent ) { // Creation of the section Section section = createSection( toolkit, parent, Messages.getString( "OpenLDAPSecurityPage.MiscSection" ) ); // The content Composite miscSectionComposite = createSectionComposite( toolkit, section, 4, false ); // The LocalSSF parameter toolkit.createLabel( miscSectionComposite, Messages.getString( "OpenLDAPSecurityPage.LocalSSF" ) ); //$NON-NLS-1$ localSsfText = toolkit.createText( miscSectionComposite, "" ); addModifyListener( localSsfText, localSsfListener ); // The PasswordCryptSaltFormat parameter toolkit.createLabel( miscSectionComposite, Messages.getString( "OpenLDAPSecurityPage.PasswordCryptSaltFormat" ) ); //$NON-NLS-1$ passwordCryptSaltFormatText = toolkit.createText( miscSectionComposite, "" ); addModifyListener( passwordCryptSaltFormatText, passwordCryptSaltFormatListener ); // A blank line toolkit.createLabel( miscSectionComposite, "" ); toolkit.createLabel( miscSectionComposite, "" ); toolkit.createLabel( miscSectionComposite, "" ); toolkit.createLabel( miscSectionComposite, "" ); // The PasswordHash widget Label passwordHashLabel = toolkit.createLabel( miscSectionComposite, Messages.getString( "OpenLDAPSecurityPage.PasswordHash" ) ); //$NON-NLS-1$ passwordHashLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 4, 1 ) ); passwordHashTableWidget = new TableWidget<PasswordHashEnum>( new PasswordHashDecorator( miscSectionComposite.getShell() ) ); passwordHashTableWidget.createWidgetNoEdit( miscSectionComposite, toolkit ); passwordHashTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) ); addModifyListener( passwordHashTableWidget, passwordHashListener ); // A blank line toolkit.createLabel( miscSectionComposite, "" ); toolkit.createLabel( miscSectionComposite, "" ); toolkit.createLabel( miscSectionComposite, "" ); toolkit.createLabel( miscSectionComposite, "" ); // The Security widget Label securityLabel = toolkit.createLabel( miscSectionComposite, Messages.getString( "OpenLDAPSecurityPage.Security" ) ); //$NON-NLS-1$ securityLabel.setLayoutData( new GridData( SWT.FILL, SWT.FILL, false, false, 4, 1 ) ); securityTableWidget = new TableWidget<SsfWrapper>( new SsfDecorator( miscSectionComposite.getShell() ) ); securityTableWidget.createWidgetWithEdit( miscSectionComposite, toolkit ); securityTableWidget.getControl().setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 4, 1 ) ); addModifyListener( securityTableWidget, securityListener ); } /** * {@inheritDoc} */ public void refreshUI() { removeListeners(); // Getting the global configuration object OlcGlobal global = getConfiguration().getGlobal(); if ( global != null ) { // // Assigning values to UI Controls // // Authentication Auxprop Plugins Text BaseWidgetUtils.setValue( global.getOlcSaslAuxprops(), saslAuxPropsText ); // SASL Host Text BaseWidgetUtils.setValue( global.getOlcSaslHost(), saslHostText ); // SASL Realm Text BaseWidgetUtils.setValue( global.getOlcSaslRealm(), saslRealmText ); // SASL Security Properties Text BaseWidgetUtils.setValue( global.getOlcSaslSecProps(), saslSecPropsText ); // TLS CA Certificate File Text BaseWidgetUtils.setValue( global.getOlcTLSCACertificateFile(), tlsCaCertificateFileText ); // TLS CA Certificate Path Text BaseWidgetUtils.setValue( global.getOlcTLSCACertificatePath(), tlsCaCertificatePathText ); // TLS Certificate File Text BaseWidgetUtils.setValue( global.getOlcTLSCertificateFile(), tlsCertificateFileText ); // TLS Certificate Key File Text BaseWidgetUtils.setValue( global.getOlcTLSCertificateKeyFile(), tlsCertificateKeyFileText ); // Cipher Suite Text BaseWidgetUtils.setValue( global.getOlcTLSCipherSuite(), tlsCipherSuiteText ); // Certificate Revocation List File Text BaseWidgetUtils.setValue( global.getOlcTLSCRLFile(), tlsCrlFileText ); // Certificate Check List Level Combo String tlsCrlCheck = global.getOlcTLSCRLCheck(); if ( tlsCrlCheck != null ) { // Select the right one boolean found = false; for ( String check : crlChecks ) { if ( check.equalsIgnoreCase( tlsCrlCheck ) ) { tlsCrlCheckCombo.setText( check ); found = true; break; } } if ( !found ) { tlsVerifyClientCombo.setText( NO_CHOICE ); } } else { tlsCrlCheckCombo.setText( NO_CHOICE ); } // Diffie-Hellman Parameters File Text BaseWidgetUtils.setValue( global.getOlcTLSDHParamFile(), tlsDhParamFileText ); // TLS Random Bits File Text BaseWidgetUtils.setValue( global.getOlcTLSRandFile(), tlsRandFileText ); // TLS Incoming Certificates Verification Level Combo String tlsVerifyClient = global.getOlcTLSVerifyClient(); if ( tlsVerifyClient != null ) { // Select the right one boolean found = false; for ( String verify : verifyClients ) { if ( verify.equalsIgnoreCase( tlsVerifyClient ) ) { tlsVerifyClientCombo.setText( verify ); found = true; break; } } if ( !found ) { tlsVerifyClientCombo.setText( NO_CHOICE ); } } else { tlsVerifyClientCombo.setText( NO_CHOICE ); } // TLS Protocol Min Combo String tlsProtocolMin = global.getOlcTLSProtocolMin(); if ( tlsProtocolMin != null ) { // Select the right one boolean found = false; for ( String protocol : protocols ) { if ( protocol.equalsIgnoreCase( tlsProtocolMin ) ) { tlsProtocolMinCombo.setText( protocol ); found = true; break; } } if ( !found ) { tlsProtocolMinCombo.setText( NO_CHOICE ); } } else { tlsProtocolMinCombo.setText( NO_CHOICE ); } // Local SSF Text BaseWidgetUtils.setValue( global.getOlcLocalSSF(), localSsfText ); // Password Crypt Format Text BaseWidgetUtils.setValue( global.getOlcPasswordCryptSaltFormat(), passwordCryptSaltFormatText ); // Password Hash Table Widget List<String> passwordHashes = global.getOlcPasswordHash(); List<PasswordHashEnum> hashes = new ArrayList<PasswordHashEnum>(); if ( passwordHashes != null ) { for ( String passwordHashName : passwordHashes ) { hashes.add( PasswordHashEnum.getPasswordHash( passwordHashName ) ); } } passwordHashTableWidget.setElements( hashes ); // Security Table Widget List<String> features = global.getOlcSecurity(); List<SsfWrapper> ssfWrappers = new ArrayList<SsfWrapper>(); if ( features != null ) { for ( String feature : features ) { ssfWrappers.add( new SsfWrapper( feature ) ); } } securityTableWidget.setElements( ssfWrappers ); } addListeners(); } /** * Adds the listeners. */ private void addListeners() { addDirtyListener( localSsfText ); addDirtyListener( passwordCryptSaltFormatText ); addDirtyListener( passwordHashTableWidget ); addDirtyListener( saslAuxPropsText ); addDirtyListener( saslHostText ); addDirtyListener( saslRealmText ); addDirtyListener( saslSecPropsText ); addDirtyListener( securityTableWidget ); addDirtyListener( tlsCaCertificateFileText ); addDirtyListener( tlsCaCertificatePathText ); addDirtyListener( tlsCertificateFileText ); addDirtyListener( tlsCertificateKeyFileText ); addDirtyListener( tlsCipherSuiteText ); addDirtyListener( tlsCrlCheckCombo ); addDirtyListener( tlsCrlFileText ); addDirtyListener( tlsDhParamFileText ); addDirtyListener( tlsProtocolMinCombo ); addDirtyListener( tlsRandFileText ); addDirtyListener( tlsVerifyClientCombo ); } /** * Removes the listeners */ private void removeListeners() { removeDirtyListener( localSsfText ); removeDirtyListener( passwordCryptSaltFormatText ); removeDirtyListener( passwordHashTableWidget ); removeDirtyListener( saslAuxPropsText ); removeDirtyListener( saslHostText ); removeDirtyListener( saslRealmText ); removeDirtyListener( saslSecPropsText ); removeDirtyListener( securityTableWidget ); removeDirtyListener( tlsCaCertificateFileText ); removeDirtyListener( tlsCaCertificatePathText ); removeDirtyListener( tlsCertificateFileText ); removeDirtyListener( tlsCertificateKeyFileText ); removeDirtyListener( tlsCipherSuiteText ); removeDirtyListener( tlsCrlCheckCombo ); removeDirtyListener( tlsCrlFileText ); removeDirtyListener( tlsDhParamFileText ); removeDirtyListener( tlsProtocolMinCombo ); removeDirtyListener( tlsRandFileText ); removeDirtyListener( tlsVerifyClientCombo ); } }