/* * 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.ldapservers.apacheds; import org.apache.directory.server.config.beans.ConfigBean; import org.apache.directory.studio.connection.core.Connection; import org.apache.directory.studio.connection.core.ConnectionCorePlugin; import org.apache.directory.studio.connection.core.ConnectionParameter; import org.apache.directory.studio.connection.core.ConnectionParameter.AuthenticationMethod; import org.apache.directory.studio.connection.core.ConnectionParameter.EncryptionMethod; import org.apache.directory.studio.connection.core.ConnectionServerType; import org.apache.directory.studio.connection.core.DetectedConnectionProperties; import org.apache.directory.studio.connection.core.PasswordsKeyStoreManager; import org.apache.directory.studio.connection.ui.PasswordsKeyStoreManagerUtils; import org.apache.directory.studio.ldapservers.actions.CreateConnectionActionHelper; import org.apache.directory.studio.ldapservers.model.LdapServer; import org.apache.directory.studio.ldapservers.views.ServersView; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; /** * This class implements the create connection action for an ApacheDS 2.0.0 server. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public class CreateConnectionAction implements IObjectActionDelegate { /** The {@link ServersView} */ private ServersView view; /** * {@inheritDoc} */ public void run( IAction action ) { if ( view != null ) { // Getting the selection StructuredSelection selection = ( StructuredSelection ) view.getViewer().getSelection(); if ( ( !selection.isEmpty() ) && ( selection.size() == 1 ) ) { // Getting the server LdapServer server = ( LdapServer ) selection.getFirstElement(); // Checking that the server is really an ApacheDS 2.0.0 server if(!ExtensionUtils.verifyApacheDs200OrPrintError( server, view )) { return; } // Parsing the 'config.ldif' file ConfigBean configuration = null; try { configuration = ApacheDS200LdapServerAdapter.getServerConfiguration( server ).getConfigBean(); } catch ( Exception e ) { String message = Messages.getString( "CreateConnectionAction.UnableReadServerConfiguration" ) //$NON-NLS-1$ + "\n\n" //$NON-NLS-1$ + Messages.getString( "CreateConnectionAction.FollowingErrorOccurred" ) + e.getMessage(); //$NON-NLS-1$ reportErrorReadingServerConfiguration( view, message ); return; } // Checking if we could read the 'server.xml' file if ( configuration == null ) { reportErrorReadingServerConfiguration( view, Messages.getString( "CreateConnectionAction.UnableReadServerConfiguration" ) ); //$NON-NLS-1$ return; } // Checking is LDAP and/or LDAPS is/are enabled if ( ( ApacheDS200LdapServerAdapter.isEnableLdap( configuration ) ) || ( ApacheDS200LdapServerAdapter.isEnableLdaps( configuration ) ) ) { // Creating the connection using the helper class createConnection( server, configuration ); } else { // LDAP and LDAPS protocols are disabled, we report this error to the user MessageDialog dialog = new MessageDialog( view.getSite().getShell(), Messages.getString( "CreateConnectionAction.UnableCreateConnection" ), null, //$NON-NLS-1$ Messages.getString( "CreateConnectionAction.LDAPAndLDAPSDisabled" ), MessageDialog.ERROR, //$NON-NLS-1$ new String[] { IDialogConstants.OK_LABEL }, MessageDialog.OK ); dialog.open(); } } } } /** * Reports to the user an error message indicating the server * configuration could not be read correctly. * * @param message * the message */ private void reportErrorReadingServerConfiguration( ServersView view, String message ) { MessageDialog dialog = new MessageDialog( view.getSite().getShell(), Messages.getString( "CreateConnectionAction.UnableReadServerConfiguration" ), //$NON-NLS-1$ null, message, MessageDialog.ERROR, new String[] { IDialogConstants.OK_LABEL }, MessageDialog.OK ); dialog.open(); } /** * Creates the connection */ private void createConnection( LdapServer server, ConfigBean configuration ) { // Creating the connection parameter object ConnectionParameter connectionParameter = new ConnectionParameter(); // Authentication method connectionParameter.setAuthMethod( AuthenticationMethod.SIMPLE ); // LDAP or LDAPS? if ( ApacheDS200LdapServerAdapter.isEnableLdap( configuration ) ) { connectionParameter.setEncryptionMethod( EncryptionMethod.NONE ); connectionParameter.setPort( ApacheDS200LdapServerAdapter.getLdapPort( configuration ) ); } else if ( ApacheDS200LdapServerAdapter.isEnableLdaps( configuration ) ) { connectionParameter.setEncryptionMethod( EncryptionMethod.LDAPS ); connectionParameter.setPort( ApacheDS200LdapServerAdapter.getLdapsPort( configuration ) ); } // Bind password // Checking of the connection passwords keystore is enabled if ( PasswordsKeyStoreManagerUtils.isPasswordsKeystoreEnabled() ) { // Getting the password keystore manager PasswordsKeyStoreManager passwordsKeyStoreManager = ConnectionCorePlugin.getDefault() .getPasswordsKeyStoreManager(); // Checking if the keystore is loaded if ( passwordsKeyStoreManager.isLoaded() ) { passwordsKeyStoreManager.storeConnectionPassword( connectionParameter.getId(), "secret" ); //$NON-NLS-1$ } else { // Asking the user to load the keystore if ( PasswordsKeyStoreManagerUtils.askUserToLoadKeystore() ) { passwordsKeyStoreManager.storeConnectionPassword( connectionParameter.getId(), "secret" ); //$NON-NLS-1$ } } } else { connectionParameter.setBindPassword( "secret" ); //$NON-NLS-1$ } // Bind principal connectionParameter.setBindPrincipal( "uid=admin,ou=system" ); //$NON-NLS-1$ // Host connectionParameter.setHost( "localhost" ); //$NON-NLS-1$ // Name connectionParameter.setName( server.getName() ); // Network Provider connectionParameter.setNetworkProvider( ConnectionCorePlugin.getDefault().getDefaultNetworkProvider() ); // Extended Properties connectionParameter.setExtendedProperty( DetectedConnectionProperties.CONNECTION_PARAMETER_SERVER_TYPE, ConnectionServerType.APACHEDS.toString() ); connectionParameter.setExtendedProperty( DetectedConnectionProperties.CONNECTION_PARAMETER_VENDOR_NAME, "Apache Software Foundation" ); //$NON-NLS-1$ connectionParameter.setExtendedProperty( DetectedConnectionProperties.CONNECTION_PARAMETER_VENDOR_VERSION, "2.0.0" ); //$NON-NLS-1$ // Creating the connection CreateConnectionActionHelper.createLdapBrowserConnection( server, new Connection( connectionParameter ) ); } /** * {@inheritDoc} */ public void selectionChanged( IAction action, ISelection selection ) { // Nothing to do } /** * {@inheritDoc} */ public void setActivePart( IAction action, IWorkbenchPart targetPart ) { // Storing the Servers view if ( targetPart instanceof ServersView ) { view = ( ServersView ) targetPart; } } }