You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2012/10/30 16:20:58 UTC

svn commit: r1403737 - in /directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor: LdapLdapsServersPage.java ServerConfigurationEditorPage.java

Author: pamarcelot
Date: Tue Oct 30 15:20:57 2012
New Revision: 1403737

URL: http://svn.apache.org/viewvc?rev=1403737&view=rev
Log:
Fix for DIRSTUDIO-843 (There is no place we can configure the KeyStore to use while configuring an ApacheDS server)

Modified:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java?rev=1403737&r1=1403736&r2=1403737&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LdapLdapsServersPage.java Tue Oct 30 15:20:57 2012
@@ -20,6 +20,7 @@
 package org.apache.directory.studio.apacheds.configuration.v2.editor;
 
 
+import java.io.File;
 import java.util.List;
 
 import org.apache.directory.server.config.beans.DirectoryServiceBean;
@@ -43,11 +44,13 @@ import org.eclipse.swt.events.ModifyEven
 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.FileDialog;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.forms.widgets.FormToolkit;
@@ -110,6 +113,10 @@ public class LdapLdapsServersPage extend
     private Button enableTlsCheckbox;
     private Button enableServerSidePasswordHashingCheckbox;
     private ComboViewer hashingMethodComboViewer;
+    private Text keystoreFileText;
+    private Button keystoreFileBrowseButton;
+    private Text keystorePasswordText;
+    private Button showPasswordCheckbox;
 
     // UI Controls Listeners
     private SelectionAdapter enableLdapCheckboxListener = new SelectionAdapter()
@@ -283,6 +290,81 @@ public class LdapLdapsServersPage extend
             addHashingMethodInterceptor();
         }
     };
+    private ModifyListener keystoreFileTextListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            String keystoreFile = keystoreFileText.getText();
+
+            if ( !"".equals( keystoreFile ) )
+            {
+                getLdapServerBean().setLdapServerKeystoreFile( keystoreFile );
+            }
+            else
+            {
+                getLdapServerBean().setLdapServerKeystoreFile( null );
+            }
+        }
+    };
+    private SelectionListener keystoreFileBrowseButtonSelectionListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent event )
+        {
+            FileDialog fileDialog = new FileDialog( keystoreFileBrowseButton.getShell(), SWT.OPEN );
+
+            File file = new File( keystoreFileText.getText() );
+            if ( file.isFile() )
+            {
+                fileDialog.setFilterPath( file.getParent() );
+                fileDialog.setFileName( file.getName() );
+            }
+            else if ( file.isDirectory() )
+            {
+                fileDialog.setFilterPath( file.getPath() );
+            }
+            else
+            {
+                fileDialog.setFilterPath( null );
+            }
+
+            String returnedFileName = fileDialog.open();
+            if ( returnedFileName != null )
+            {
+                keystoreFileText.setText( returnedFileName );
+                setEditorDirty();
+            }
+        }
+    };
+    private ModifyListener keystorePasswordTextListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            String keystorePassword = keystorePasswordText.getText();
+
+            if ( !"".equals( keystorePassword ) )
+            {
+                getLdapServerBean().setLdapServerCertificatePassword( keystorePassword );
+            }
+            else
+            {
+                getLdapServerBean().setLdapServerCertificatePassword( null );
+            }
+        }
+    };
+    private SelectionListener showPasswordCheckboxSelectionListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            if ( showPasswordCheckbox.getSelection() )
+            {
+                keystorePasswordText.setEchoChar( '\0' );
+            }
+            else
+            {
+                keystorePasswordText.setEchoChar( '\u2022' );
+            }
+        }
+    };
 
 
     /**
@@ -323,6 +405,7 @@ public class LdapLdapsServersPage extend
         // Creating the sections
         createLdapServerSection( toolkit, leftComposite );
         createLimitsSection( toolkit, leftComposite );
+        createSslStartTlsKeystoreSection( toolkit, leftComposite );
         createAdvancedSection( toolkit, leftComposite );
         createSupportedAuthenticationMechanismsSection( toolkit, rightComposite );
         createSaslSettingsSection( toolkit, rightComposite );
@@ -431,7 +514,7 @@ public class LdapLdapsServersPage extend
 
         // Enable Server-side Password Hashing Checkbox
         enableServerSidePasswordHashingCheckbox = toolkit.createButton( composite,
-            "Enable server-side password\nhashing",
+            "Enable server-side password hashing",
             SWT.CHECK );
         enableServerSidePasswordHashingCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 3, 1 ) );
 
@@ -520,7 +603,7 @@ public class LdapLdapsServersPage extend
         Composite composite = toolkit.createComposite( section );
         composite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
         toolkit.paintBordersFor( composite );
-        composite.setLayout( new GridLayout( 4, true ) );
+        composite.setLayout( new GridLayout( 2, true ) );
         section.setClient( composite );
 
         // Simple Checkbox
@@ -542,22 +625,66 @@ public class LdapLdapsServersPage extend
         // NTLM Checkbox and Text
         authMechNtlmCheckbox = toolkit.createButton( composite, "NTLM", SWT.CHECK ); //$NON-NLS-1$
         authMechNtlmCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        toolkit.createLabel( composite, "" ); //$NON-NLS-1$
         Composite authMechNtlmComposite = toolkit.createComposite( composite );
-        authMechNtlmComposite.setLayout( new GridLayout( 2, false ) );
+        authMechNtlmComposite.setLayout( new GridLayout( 3, false ) );
+        toolkit.createLabel( authMechNtlmComposite, "   " ); //$NON-NLS-1$
         toolkit.createLabel( authMechNtlmComposite, "Provider:" );
         authMechNtlmText = toolkit.createText( authMechNtlmComposite, "" ); //$NON-NLS-1$
         authMechNtlmText.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
-        authMechNtlmComposite.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false, 3, 1 ) );
+        authMechNtlmComposite.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false, 2, 1 ) );
 
         // GSS-SPNEGO Checkbox and Text
         authMechGssSpnegoCheckbox = toolkit.createButton( composite, "GSS-SPNEGO", SWT.CHECK );
         authMechGssSpnegoCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        toolkit.createLabel( composite, "" ); //$NON-NLS-1$
         Composite authMechGssSpnegoComposite = toolkit.createComposite( composite );
-        authMechGssSpnegoComposite.setLayout( new GridLayout( 2, false ) );
+        authMechGssSpnegoComposite.setLayout( new GridLayout( 3, false ) );
+        toolkit.createLabel( authMechGssSpnegoComposite, "   " ); //$NON-NLS-1$
         toolkit.createLabel( authMechGssSpnegoComposite, "Provider:" );
         authMechGssSpnegoText = toolkit.createText( authMechGssSpnegoComposite, "" ); //$NON-NLS-1$
         authMechGssSpnegoText.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
-        authMechGssSpnegoComposite.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 3, 1 ) );
+        authMechGssSpnegoComposite.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 2, 1 ) );
+    }
+
+
+    /**
+     * Creates the SSL/Start TLS Keystore Section
+     *
+     * @param toolkit
+     *      the toolkit to use
+     * @param parent
+     *      the parent composite
+     */
+    private void createSslStartTlsKeystoreSection( FormToolkit toolkit, Composite parent )
+    {
+        // Creation of the section
+        Section section = toolkit.createSection( parent, Section.TITLE_BAR );
+        section.setText( "SSL/Start TLS Keystore" );
+        section.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        Composite composite = toolkit.createComposite( section );
+        toolkit.paintBordersFor( composite );
+        GridLayout glayout = new GridLayout( 3, false );
+        composite.setLayout( glayout );
+        section.setClient( composite );
+
+        // Keystore File Text
+        toolkit.createLabel( composite, "Keystore:" );
+        keystoreFileText = toolkit.createText( composite, "" ); //$NON-NLS-1$
+        setGridDataWithDefaultWidth( keystoreFileText, new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        keystoreFileBrowseButton = toolkit.createButton( composite, "Browse...", SWT.PUSH );
+
+        // Password Text
+        toolkit.createLabel( composite, "Password:" );
+        keystorePasswordText = toolkit.createText( composite, "" ); //$NON-NLS-1$
+        keystorePasswordText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+        keystorePasswordText.setEchoChar( '\u2022' );
+
+        // Show Password Checkbox
+        toolkit.createLabel( composite, "" ); //$NON-NLS-1$
+        showPasswordCheckbox = toolkit.createButton( composite, "Show password", SWT.CHECK );
+        showPasswordCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
+        showPasswordCheckbox.setSelection( false );
     }
 
 
@@ -659,6 +786,20 @@ public class LdapLdapsServersPage extend
         addDirtyListener( authMechGssSpnegoText );
         addModifyListener( authMechGssSpnegoText, authMechGssSpnegoTextListener );
 
+        // Keystore File Text
+        addDirtyListener( keystoreFileText );
+        addModifyListener( keystoreFileText, keystoreFileTextListener );
+
+        // Keystore File Browse Button
+        addSelectionListener( keystoreFileBrowseButton, keystoreFileBrowseButtonSelectionListener );
+
+        // Password Text
+        addDirtyListener( keystorePasswordText );
+        addModifyListener( keystorePasswordText, keystorePasswordTextListener );
+
+        // Show Password Checkbox
+        addSelectionListener( showPasswordCheckbox, showPasswordCheckboxSelectionListener );
+
         // SASL Host Text
         addDirtyListener( saslHostText );
         addModifyListener( saslHostText, saslHostTextListener );
@@ -748,6 +889,20 @@ public class LdapLdapsServersPage extend
         removeDirtyListener( authMechGssSpnegoText );
         removeModifyListener( authMechGssSpnegoText, authMechGssSpnegoTextListener );
 
+        // Keystore File Text
+        removeDirtyListener( keystoreFileText );
+        removeModifyListener( keystoreFileText, keystoreFileTextListener );
+
+        // Keystore File Browse Button
+        removeSelectionListener( keystoreFileBrowseButton, keystoreFileBrowseButtonSelectionListener );
+
+        // Password Text
+        removeDirtyListener( keystorePasswordText );
+        removeModifyListener( keystorePasswordText, keystorePasswordTextListener );
+
+        // Show Password Checkbox
+        removeSelectionListener( showPasswordCheckbox, showPasswordCheckboxSelectionListener );
+
         // SASL Host Text
         removeDirtyListener( saslHostText );
         removeModifyListener( saslHostText, saslHostTextListener );
@@ -804,6 +959,10 @@ public class LdapLdapsServersPage extend
         setText( saslPrincipalText, ldapServerBean.getLdapServerSaslPrincipal() );
         setText( saslSearchBaseDnText, ldapServerBean.getSearchBaseDn().toString() );
 
+        // Keystore Properties
+        setText( keystoreFileText, ldapServerBean.getLdapServerKeystoreFile() );
+        setText( keystorePasswordText, ldapServerBean.getLdapServerCertificatePassword() );
+
         // Supported Auth Mechanisms
         List<SaslMechHandlerBean> saslMechHandlers = ldapServerBean.getSaslMechHandlers();
         uncheckAllSupportedAuthenticationMechanisms();

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java?rev=1403737&r1=1403736&r2=1403737&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java Tue Oct 30 15:20:57 2012
@@ -516,6 +516,11 @@ public abstract class ServerConfiguratio
     {
         if ( ( text != null ) && ( !text.isDisposed() ) )
         {
+            if ( string == null )
+            {
+                string = "";
+            }
+            
             text.setText( string );
         }
     }