Author: olamy
Date: Tue Mar 26 00:07:15 2013
New Revision: 1460935
URL: http://svn.apache.org/r1460935
Log:
[MRM-1736] map roles to ldap groups
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultRedbackRuntimeConfigurationAdmin.java
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/resources/META-INF/spring-context.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/applicationContext.xml
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo?rev=1460935&r1=1460934&r2=1460935&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
Tue Mar 26 00:07:15 2013
@@ -1513,6 +1513,15 @@
</association>
</field>
<field>
+ <name>ldapGroupMappings</name>
+ <description>LdapGroupMappings</description>
+ <version>1.4.0+</version>
+ <association>
+ <type>LdapGroupMapping</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
<name>configurationProperties</name>
<description>extra properties for redback configuration.
String/String</description>
<version>1.4.0+</version>
@@ -1673,6 +1682,29 @@
</fields>
</class>
+ <class>
+ <name>LdapGroupMapping</name>
+ <version>1.4.0+</version>
+ <description>configuration of a LDAP group to Archiva roles</description>
+ <fields>
+ <field>
+ <name>group</name>
+ <description>LDAP Group</description>
+ <version>1.4.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>roleNames</name>
+ <version>1.4.0+</version>
+ <description>Archiva roles.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
</classes>
</model>
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.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/RedbackRuntimeConfiguration.java?rev=1460935&r1=1460934&r2=1460935&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RedbackRuntimeConfiguration.java
Tue Mar 26 00:07:15 2013
@@ -67,6 +67,11 @@ public class RedbackRuntimeConfiguration
private CacheConfiguration usersCacheConfiguration;
+ /**
+ * Field ldapGroupMappings.
+ */
+ private List<LdapGroupMapping> ldapGroupMappings;
+
public RedbackRuntimeConfiguration()
{
// no op
@@ -170,6 +175,16 @@ public class RedbackRuntimeConfiguration
this.rbacManagerImpls = rbacManagerImpls;
}
+ public List<LdapGroupMapping> getLdapGroupMappings()
+ {
+ return ldapGroupMappings;
+ }
+
+ public void setLdapGroupMappings( List<LdapGroupMapping> ldapGroupMappings
)
+ {
+ this.ldapGroupMappings = ldapGroupMappings;
+ }
+
@Override
public String toString()
{
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultRedbackRuntimeConfigurationAdmin.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultRedbackRuntimeConfigurationAdmin.java?rev=1460935&r1=1460934&r2=1460935&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultRedbackRuntimeConfigurationAdmin.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/runtime/DefaultRedbackRuntimeConfigurationAdmin.java
Tue Mar 26 00:07:15 2013
@@ -22,12 +22,11 @@ import net.sf.beanlib.provider.replicato
import org.apache.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.beans.CacheConfiguration;
import org.apache.archiva.admin.model.beans.LdapConfiguration;
+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.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ConfigurationEvent;
-import org.apache.archiva.configuration.ConfigurationListener;
import org.apache.archiva.configuration.IndeterminateConfigurationException;
import org.apache.archiva.redback.components.cache.Cache;
import org.apache.archiva.redback.components.registry.RegistryException;
@@ -42,6 +41,7 @@ import org.springframework.stereotype.Se
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -53,7 +53,7 @@ import java.util.Set;
* @author Olivier Lamy
* @since 1.4-M4
*/
-@Service("userConfiguration#archiva")
+@Service( "redbackRuntimeConfigurationAdmin#default" )
public class DefaultRedbackRuntimeConfigurationAdmin
implements RedbackRuntimeConfigurationAdmin, UserConfiguration
{
@@ -64,11 +64,11 @@ public class DefaultRedbackRuntimeConfig
private ArchivaConfiguration archivaConfiguration;
@Inject
- @Named(value = "userConfiguration#redback")
- UserConfiguration userConfiguration;
+ @Named( value = "userConfiguration#redback" )
+ private UserConfiguration userConfiguration;
@Inject
- @Named(value = "cache#users")
+ @Named( value = "cache#users" )
private Cache usersCache;
@PostConstruct
@@ -149,6 +149,31 @@ public class DefaultRedbackRuntimeConfig
userConfiguration.getBoolean(
UserConfigurationKeys.LDAP_BIND_AUTHENTICATOR_ENABLED, false );
ldapConfiguration.setBindAuthenticatorEnabled(
ldapBindAuthenticatorEnabled );
+ // LDAP groups mapping reading !!
+ // UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY
+ // userConfiguration.getKeys()
+
+ Collection<String> keys = userConfiguration.getKeys();
+
+ List<LdapGroupMapping> ldapGroupMappings = new
ArrayList<LdapGroupMapping>();
+
+ for ( String key : keys )
+ {
+ if ( key.startsWith(
UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
+ {
+ String group =
+ StringUtils.substringAfter( key,
UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY );
+ String val = userConfiguration.getConcatenatedList(
key, "" );
+ if ( !StringUtils.isEmpty( val ) )
+ {
+ String[] roles = StringUtils.split( val, ',' );
+ ldapGroupMappings.add( new LdapGroupMapping(
group, roles ) );
+ }
+ }
+ }
+
+ redbackRuntimeConfiguration.setLdapGroupMappings(
ldapGroupMappings );
+
redbackRuntimeConfiguration.setMigratedFromRedbackConfiguration( true );
updateRedbackRuntimeConfiguration( redbackRuntimeConfiguration
);
@@ -300,6 +325,20 @@ public class DefaultRedbackRuntimeConfig
redbackRuntimeConfiguration.setUsersCacheConfiguration( new
CacheConfiguration() );
}
+ List<org.apache.archiva.configuration.LdapGroupMapping> mappings =
runtimeConfiguration.getLdapGroupMappings();
+
+ if ( mappings != null && mappings.size() > 0 )
+ {
+ List<LdapGroupMapping> ldapGroupMappings = new
ArrayList<LdapGroupMapping>( mappings.size() );
+
+ for ( org.apache.archiva.configuration.LdapGroupMapping mapping :
mappings )
+ {
+ ldapGroupMappings.add( new LdapGroupMapping(
mapping.getGroup(), mapping.getRoleNames() ) );
+ }
+
+ redbackRuntimeConfiguration.setLdapGroupMappings(
ldapGroupMappings );
+ }
+
cleanupProperties( redbackRuntimeConfiguration );
return redbackRuntimeConfiguration;
@@ -359,10 +398,30 @@ public class DefaultRedbackRuntimeConfig
new BeanReplicator().replicateBean(
archivaRuntimeConfiguration.getUsersCacheConfiguration(),
org.apache.archiva.configuration.CacheConfiguration.class ) );
+ List<LdapGroupMapping> ldapGroupMappings =
archivaRuntimeConfiguration.getLdapGroupMappings();
+
+ if ( ldapGroupMappings != null && ldapGroupMappings.size() > 0 )
+ {
+
+ List<org.apache.archiva.configuration.LdapGroupMapping> mappings =
+ new
ArrayList<org.apache.archiva.configuration.LdapGroupMapping>(
ldapGroupMappings.size() );
+
+ for ( LdapGroupMapping ldapGroupMapping : ldapGroupMappings )
+ {
+
+ org.apache.archiva.configuration.LdapGroupMapping mapping =
+ new org.apache.archiva.configuration.LdapGroupMapping();
+ mapping.setGroup( ldapGroupMapping.getGroup() );
+ mapping.setRoleNames( new ArrayList<String>(
ldapGroupMapping.getRoleNames() ) );
+ mappings.add( mapping );
+
+ }
+ redbackRuntimeConfiguration.setLdapGroupMappings( mappings );
+ }
return redbackRuntimeConfiguration;
}
- // wrapper for UserConfiguration to intercept values (and store it not yet
migrated
+ // wrapper for UserConfiguration to intercept values (and store it not yet
migrated)
public String getString( String key )
@@ -373,6 +432,18 @@ public class DefaultRedbackRuntimeConfig
return getRedbackRuntimeConfiguration().getUserManagerImpls().get(
0 );
}
+ if ( StringUtils.startsWith( key,
UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) )
+ {
+ RedbackRuntimeConfiguration redbackRuntimeConfiguration =
getRedbackRuntimeConfiguration();
+ int index =
redbackRuntimeConfiguration.getLdapGroupMappings().indexOf( new
LdapGroupMapping(
+ StringUtils.substringAfter( key,
UserConfigurationKeys.LDAP_GROUPS_ROLE_START_KEY ) ) );
+ if ( index > -1 )
+ {
+ return StringUtils.join(
redbackRuntimeConfiguration.getLdapGroupMappings().get( index ).getRoleNames(),
+ ',' );
+ }
+ }
+
RedbackRuntimeConfiguration conf = getRedbackRuntimeConfiguration();
if ( conf.getConfigurationProperties().containsKey( key ) )
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/resources/META-INF/spring-context.xml
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/resources/META-INF/spring-context.xml?rev=1460935&r1=1460934&r2=1460935&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/resources/META-INF/spring-context.xml
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/resources/META-INF/spring-context.xml
Tue Mar 26 00:07:15 2013
@@ -31,6 +31,6 @@
<context:component-scan
base-package="org.apache.archiva.admin.repository"/>
-
+ <alias name="redbackRuntimeConfigurationAdmin#default"
alias="userConfiguration#archiva"/>
</beans>
\ No newline at end of file
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/applicationContext.xml
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/applicationContext.xml?rev=1460935&r1=1460934&r2=1460935&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/applicationContext.xml
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/applicationContext.xml
Tue Mar 26 00:07:15 2013
@@ -45,6 +45,8 @@
<alias name="ldapConnectionFactory#archiva" alias="ldapConnectionFactory"/>
<alias name="ldapConnectionFactory#archiva"
alias="ldapConnectionFactory#configurable"/>
+
+ <alias name="ldapRoleMapperConfiguration#archiva"
alias="ldapRoleMapperConfiguration#default"/>
<bean id="loggerManager"
class="org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager"
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js?rev=1460935&r1=1460934&r2=1460935&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
Tue Mar 26 00:07:15 2013
@@ -1727,7 +1727,7 @@ define("archiva.general-admin",["jquery"
addLdapGroupMapping=function(){
// FIXME validate datas from ldapGroupMapping
- $.log("addLdapGroupMapping:"+self.newLdapGroupMapping().group());
+
$.log("addLdapGroupMapping:"+self.newLdapGroupMapping().group()+",roles:"+self.newLdapGroupMapping().roleNames().length);
clearUserMessages();
if (self.newLdapGroupMapping().roleNames().length<1){