001 package org.apache.archiva.web.runtime.ldap; 002 /* 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 */ 020 021 import org.apache.archiva.admin.model.RepositoryAdminException; 022 import org.apache.archiva.admin.model.beans.LdapConfiguration; 023 import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin; 024 import org.apache.archiva.redback.common.ldap.connection.ConfigurableLdapConnectionFactory; 025 import org.apache.archiva.redback.common.ldap.connection.LdapConnectionConfiguration; 026 import org.springframework.stereotype.Service; 027 028 import javax.annotation.PostConstruct; 029 import javax.inject.Inject; 030 import javax.naming.InvalidNameException; 031 import java.util.Map; 032 import java.util.Properties; 033 034 /** 035 * @author Olivier Lamy 036 * @since 1.4-M4 037 */ 038 @Service( "ldapConnectionFactory#archiva" ) 039 public class ArchivaLdapConnectionFactory 040 extends ConfigurableLdapConnectionFactory 041 { 042 043 @Inject 044 private RedbackRuntimeConfigurationAdmin redbackRuntimeConfigurationAdmin; 045 046 private LdapConnectionConfiguration ldapConnectionConfiguration; 047 048 @PostConstruct 049 public void initialize() 050 { 051 try 052 { 053 LdapConfiguration ldapConfiguration = 054 redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration().getLdapConfiguration(); 055 ldapConnectionConfiguration = new LdapConnectionConfiguration(); 056 ldapConnectionConfiguration.setHostname( ldapConfiguration.getHostName() ); 057 ldapConnectionConfiguration.setPort( ldapConfiguration.getPort() ); 058 ldapConnectionConfiguration.setSsl( ldapConfiguration.isSsl() ); 059 ldapConnectionConfiguration.setBaseDn( ldapConfiguration.getBaseDn() ); 060 ldapConnectionConfiguration.setContextFactory( ldapConfiguration.getContextFactory() ); 061 ldapConnectionConfiguration.setBindDn( ldapConfiguration.getBindDn() ); 062 ldapConnectionConfiguration.setPassword( ldapConfiguration.getPassword() ); 063 ldapConnectionConfiguration.setAuthenticationMethod( ldapConfiguration.getAuthenticationMethod() ); 064 ldapConnectionConfiguration.setExtraProperties( toProperties( ldapConfiguration.getExtraProperties() ) ); 065 } 066 catch ( InvalidNameException e ) 067 { 068 throw new RuntimeException( "Error while initializing connection factory.", e ); 069 } 070 catch ( RepositoryAdminException e ) 071 { 072 throw new RuntimeException( "Error while initializing ldapConnectionConfiguration: " + e.getMessage(), e ); 073 } 074 } 075 076 private Properties toProperties( Map<String, String> map ) 077 { 078 Properties properties = new Properties(); 079 if ( map == null ) 080 { 081 return properties; 082 } 083 for ( Map.Entry<String, String> entry : map.entrySet() ) 084 { 085 properties.put( entry.getKey(), entry.getValue() ); 086 } 087 return properties; 088 } 089 090 @Override 091 public LdapConnectionConfiguration getLdapConnectionConfiguration() 092 { 093 return this.ldapConnectionConfiguration; 094 } 095 096 @Override 097 public void setLdapConnectionConfiguration( LdapConnectionConfiguration ldapConnectionConfiguration ) 098 { 099 this.ldapConnectionConfiguration = ldapConnectionConfiguration; 100 } 101 }