summaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-web/archiva-web-common/src
diff options
context:
space:
mode:
authorOlivier Lamy <olamy@apache.org>2013-03-26 00:07:51 +0000
committerOlivier Lamy <olamy@apache.org>2013-03-26 00:07:51 +0000
commit1323fcc1dc58c666f340eea0e99f038f69ec6de5 (patch)
tree6b62c6f479e17dec52de903511f9714d8d96254f /archiva-modules/archiva-web/archiva-web-common/src
parentbdabf612a2621150779efee7d69b7e800d19cdfb (diff)
downloadarchiva-1323fcc1dc58c666f340eea0e99f038f69ec6de5.tar.gz
archiva-1323fcc1dc58c666f340eea0e99f038f69ec6de5.zip
[MRM-1736] map roles to ldap groups
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1460936 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules/archiva-web/archiva-web-common/src')
-rw-r--r--archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java175
1 files changed, 175 insertions, 0 deletions
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java b/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
new file mode 100644
index 000000000..0cf358328
--- /dev/null
+++ b/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
@@ -0,0 +1,175 @@
+package org.apache.archiva.web.security;
+/*
+ * 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.
+ */
+
+import org.apache.archiva.admin.model.RepositoryAdminException;
+import org.apache.archiva.admin.model.beans.LdapGroupMapping;
+import org.apache.archiva.admin.model.beans.RedbackRuntimeConfiguration;
+import org.apache.archiva.admin.model.runtime.RedbackRuntimeConfigurationAdmin;
+import org.apache.archiva.redback.common.ldap.MappingException;
+import org.apache.archiva.redback.common.ldap.role.LdapRoleMapperConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Olivier Lamy
+ * @since 2.1
+ */
+@Service( "ldapRoleMapperConfiguration#archiva" )
+public class ArchivaLdapRoleMapperConfiguration
+ implements LdapRoleMapperConfiguration
+{
+
+ private Logger logger = LoggerFactory.getLogger( getClass() );
+
+ @Inject
+ @Named( value = "redbackRuntimeConfigurationAdmin#default" )
+ private RedbackRuntimeConfigurationAdmin redbackRuntimeConfigurationAdmin;
+
+ public void addLdapMapping( String ldapGroup, List<String> roles )
+ throws MappingException
+ {
+ logger.debug( "addLdapMapping ldapGroup: {}, roles: {}", ldapGroup, roles );
+ // TODO check if already exist first
+ try
+ {
+ RedbackRuntimeConfiguration redbackRuntimeConfiguration =
+ redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
+ boolean added =
+ redbackRuntimeConfiguration.getLdapGroupMappings().add( new LdapGroupMapping( ldapGroup, roles ) );
+ logger.debug( "addLdapMapping ldapGroup: {}, roles: {}, added: {}", ldapGroup, roles, added );
+ redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
+ }
+ catch ( RepositoryAdminException e )
+ {
+ throw new MappingException( e.getMessage(), e );
+ }
+
+ }
+
+ public void updateLdapMapping( String ldapGroup, List<String> roles )
+ throws MappingException
+ {
+
+ try
+ {
+ RedbackRuntimeConfiguration redbackRuntimeConfiguration =
+ redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
+ LdapGroupMapping ldapGroupMapping = new LdapGroupMapping( ldapGroup );
+ int idx = redbackRuntimeConfiguration.getLdapGroupMappings().indexOf( ldapGroupMapping );
+ if ( idx > -1 )
+ {
+ logger.debug( "updateLdapMapping ldapGroup: {}, roles: {}", ldapGroup, roles );
+ ldapGroupMapping = redbackRuntimeConfiguration.getLdapGroupMappings().get( idx );
+ ldapGroupMapping.setRoleNames( roles );
+ }
+ redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
+
+ }
+ catch ( RepositoryAdminException e )
+ {
+ throw new MappingException( e.getMessage(), e );
+ }
+ }
+
+ public void removeLdapMapping( String group )
+ throws MappingException
+ {
+ try
+ {
+ RedbackRuntimeConfiguration redbackRuntimeConfiguration =
+ redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
+ boolean removed =
+ redbackRuntimeConfiguration.getLdapGroupMappings().remove( new LdapGroupMapping( group ) );
+ redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
+ logger.debug( "removeLdapMapping ldapGroup: {}, removed: {}", group, removed );
+ }
+ catch ( RepositoryAdminException e )
+ {
+ throw new MappingException( e.getMessage(), e );
+ }
+
+ }
+
+ public Map<String, Collection<String>> getLdapGroupMappings()
+ throws MappingException
+ {
+ try
+ {
+ RedbackRuntimeConfiguration redbackRuntimeConfiguration =
+ redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
+
+ List<LdapGroupMapping> ldapGroupMappings = redbackRuntimeConfiguration.getLdapGroupMappings();
+
+ if ( ldapGroupMappings == null )
+ {
+ return Collections.emptyMap();
+ }
+
+ Map<String, Collection<String>> res = new HashMap<String, Collection<String>>( ldapGroupMappings.size() );
+
+ for ( LdapGroupMapping ldapGroupMapping : ldapGroupMappings )
+ {
+ res.put( ldapGroupMapping.getGroup(), ldapGroupMapping.getRoleNames() );
+ }
+
+ return res;
+ }
+ catch ( RepositoryAdminException e )
+ {
+ throw new MappingException( e.getMessage(), e );
+ }
+ }
+
+ public void setLdapGroupMappings( Map<String, List<String>> mappings )
+ throws MappingException
+ {
+ try
+ {
+ RedbackRuntimeConfiguration redbackRuntimeConfiguration =
+ redbackRuntimeConfigurationAdmin.getRedbackRuntimeConfiguration();
+
+ List<LdapGroupMapping> ldapGroupMappings = new ArrayList<LdapGroupMapping>( mappings.size() );
+
+ for ( Map.Entry<String, List<String>> entry : mappings.entrySet() )
+ {
+ ldapGroupMappings.add( new LdapGroupMapping( entry.getKey(), entry.getValue() ) );
+ }
+
+ redbackRuntimeConfiguration.setLdapGroupMappings( ldapGroupMappings );
+
+ redbackRuntimeConfigurationAdmin.updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration );
+ }
+ catch ( RepositoryAdminException e )
+ {
+ throw new MappingException( e.getMessage(), e );
+ }
+
+ }
+}