Author: olamy
Date: Tue Mar 26 00:07:51 2013
New Revision: 1460936
URL: http://svn.apache.org/r1460936
Log:
[MRM-1736] map roles to ldap groups
Added:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java
(with props)
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
(with props)
Added:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java?rev=1460936&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java
(added)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java
Tue Mar 26 00:07:51 2013
@@ -0,0 +1,115 @@
+package org.apache.archiva.admin.model.beans;
+/*
+ * 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 java.util.Arrays;
+import java.util.Collection;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4-M4
+ */
+public class LdapGroupMapping
+{
+ private String group;
+
+ private Collection<String> roleNames;
+
+ public LdapGroupMapping()
+ {
+ // no op
+ }
+
+ public LdapGroupMapping( String group )
+ {
+ this.group = group;
+ }
+
+ public LdapGroupMapping( String group, Collection<String> roleNames )
+ {
+ this.group = group;
+ this.roleNames = roleNames;
+ }
+
+ public LdapGroupMapping( String group, String[] roleNames )
+ {
+ this.group = group;
+ if ( roleNames != null )
+ {
+ this.roleNames = Arrays.asList( roleNames );
+ }
+ }
+
+ public String getGroup()
+ {
+ return group;
+ }
+
+ public void setGroup( String group )
+ {
+ this.group = group;
+ }
+
+ public Collection<String> getRoleNames()
+ {
+ return roleNames;
+ }
+
+ public void setRoleNames( Collection<String> roleNames )
+ {
+ this.roleNames = roleNames;
+ }
+
+ @Override
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() )
+ {
+ return false;
+ }
+
+ LdapGroupMapping that = (LdapGroupMapping) o;
+
+ if ( group != null ? !group.equals( that.group ) : that.group != null )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return group != null ? group.hashCode() : 0;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "LdapGroupMapping{" +
+ "group='" + group + '\'' +
+ ", roleNames=" + roleNames +
+ '}';
+ }
+}
Propchange:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/LdapGroupMapping.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added:
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java?rev=1460936&view=auto
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
(added)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
Tue Mar 26 00:07:51 2013
@@ -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 );
+ }
+
+ }
+}
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaLdapRoleMapperConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision