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){


Reply via email to