mirror of https://github.com/apache/archiva.git
[MRM-1736] map roles to ldap groups
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1460936 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
bdabf612a2
commit
1323fcc1dc
|
@ -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 +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue