]> source.dussan.org Git - archiva.git/commitdiff
[MRM-915] and [MRM-926]
authorMaria Odea B. Ching <oching@apache.org>
Wed, 3 Sep 2008 11:45:11 +0000 (11:45 +0000)
committerMaria Odea B. Ching <oching@apache.org>
Wed, 3 Sep 2008 11:45:11 +0000 (11:45 +0000)
-get the default guest users from redback config files instead of the hardcoded constant value

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@691581 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaXworkUser.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/rss/RssFeedServlet.java
archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResource.java
archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/maven/archiva/webdav/ArchivaDavResourceFactory.java
archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/maven/archiva/webdav/DavResourceTest.java
archiva-modules/archiva-web/archiva-webdav/src/test/resources/org/apache/maven/archiva/webdav/RepositoryServletTest.xml

index 4189392e6708315e421d877e65453cb18832f3d4..4c07a0cf489ccdc6fa7b062b7c4c5574181aede3 100644 (file)
@@ -19,27 +19,38 @@ package org.apache.maven.archiva.security;
  * under the License.
  */
 
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.codehaus.plexus.redback.system.SecuritySession;
 import org.codehaus.plexus.redback.system.SecuritySystemConstants;
 import org.codehaus.plexus.redback.users.User;
+import org.codehaus.plexus.registry.Registry;
 
 /**
  * ArchivaXworkUser 
  *
  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
  * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.archiva.security.ArchivaXworkUser"
  */
 public class ArchivaXworkUser
 {
-    public static String getActivePrincipal( Map<String, Object> sessionMap )
-    {
+    /**
+     * @plexus.requirement role-hint="commons-configuration"
+     */
+    private Registry registry;
+    
+    private static final String KEY = "org.codehaus.plexus.redback";
+    
+    private static String guest;
+            
+    public String getActivePrincipal( Map<String, Object> sessionMap )
+    {   
         if ( sessionMap == null )
         {
-            return ArchivaRoleConstants.PRINCIPAL_GUEST;
+            return getGuest();
         }
 
        SecuritySession securitySession =
@@ -52,15 +63,26 @@ public class ArchivaXworkUser
 
         if ( securitySession == null )
         {
-            return ArchivaRoleConstants.PRINCIPAL_GUEST;
+            return getGuest();
         }
 
         User user = securitySession.getUser();        
         if ( user == null )
         {
-            return ArchivaRoleConstants.PRINCIPAL_GUEST;
+            return getGuest();
         }
 
         return (String) user.getPrincipal();
+    }    
+   
+    public String getGuest()
+    {
+        if( guest == null || "".equals( guest ) )
+        {
+            Registry subset = registry.getSubset( KEY );
+            guest = subset.getString( "redback.default.guest", ArchivaRoleConstants.PRINCIPAL_GUEST );
+        }
+        
+        return guest;
     }
 }
index 7dee82270565ea6783018de9361b680a4fb3965d..92b4c8c912ef1dfd928c93814b6f23719dcaa979 100644 (file)
@@ -52,6 +52,11 @@ public class BrowseAction
      */
     private UserRepositories userRepositories;
     
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaXworkUser archivaXworkUser;
+    
     private BrowsingResults results;
 
     private String groupId;
@@ -121,7 +126,7 @@ public class BrowseAction
     
     private String getPrincipal()
     {
-        return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
+        return archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
     }
     
     private List<String> getObservableRepos()
index 39c3bb361e8d55ce6168263fdd84eebab8f23a67..795d3712cacf8479b1817c27c721c77b5159f602 100644 (file)
@@ -75,6 +75,11 @@ public class SearchAction
      */
     private UserRepositories userRepositories;
     
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaXworkUser archivaXworkUser;
+    
     private static final String RESULTS = "results";
 
     private static final String ARTIFACT = "artifact";
@@ -195,7 +200,7 @@ public class SearchAction
     
     private String getPrincipal()
     {
-        return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
+        return archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
     }
     
     private List<String> getObservableRepos()
index 97dca610eb09c739c17fb899250257121ed7c8f0..a402515c3296cb41b8adbf1b1183be094eb07a0b 100644 (file)
@@ -59,6 +59,11 @@ public class ShowArtifactAction
      * @plexus.requirement
      */
     private UserRepositories userRepositories;
+    
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaXworkUser archivaXworkUser;
 
     /* .\ Input Parameters \.________________________________________ */
 
@@ -179,7 +184,7 @@ public class ShowArtifactAction
 
     private String getPrincipal()
     {
-        return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
+        return archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
     }
 
     private List<String> getObservableRepos()
index c539f1962e54cf681c026d4946eaec8076d6c9ff..cb8bcfe48f10d6904076ec5ae67bcc5f2a528f16 100644 (file)
@@ -86,6 +86,11 @@ public class UploadAction
       * @plexus.requirement
       */
      private RepositoryContentConsumers consumers;
+     
+     /**
+      * @plexus.requirement
+      */
+     private ArchivaXworkUser archivaXworkUser;
     
     /**
      * The groupId of the artifact to be deployed.
@@ -456,7 +461,7 @@ public class UploadAction
 
     private String getPrincipal()
     {
-        return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
+        return archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
     }
 
     private void copyFile( File sourceFile, File targetPath, String targetFilename )
index 82c1a6348e1388b7f7b98c04bdd78592573da9c1..89570523a9ffec0f097bdebfb3477707111f12ca 100644 (file)
@@ -40,6 +40,7 @@ import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.security.AccessDeniedException;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
 import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
 import org.apache.maven.archiva.security.PrincipalNotFoundException;
 import org.apache.maven.archiva.security.ServletAuthenticator;
 import org.apache.maven.archiva.security.UserRepositories;
@@ -90,6 +91,8 @@ public class RssFeedServlet
     private ServletAuthenticator servletAuth;
 
     private HttpAuthenticator httpAuth;
+    
+    private ArchivaXworkUser archivaXworkUser;
 
     public void init( javax.servlet.ServletConfig servletConfig )
         throws ServletException
@@ -102,6 +105,7 @@ public class RssFeedServlet
             (ServletAuthenticator) wac.getBean( PlexusToSpringUtils.buildSpringId( ServletAuthenticator.class.getName() ) );
         httpAuth =
             (HttpAuthenticator) wac.getBean( PlexusToSpringUtils.buildSpringId( HttpAuthenticator.ROLE, "basic" ) );
+        archivaXworkUser = (ArchivaXworkUser) wac.getBean( PlexusToSpringUtils.buildSpringId( ArchivaXworkUser.class ) );
     }
 
     public void doGet( HttpServletRequest req, HttpServletResponse res )
@@ -269,7 +273,7 @@ public class RssFeedServlet
 
                 if ( usernamePassword == null || usernamePassword.trim().equals( "" ) )
                 {
-                    repoIds = getObservableRepos( ArchivaRoleConstants.PRINCIPAL_GUEST );
+                    repoIds = getObservableRepos( archivaXworkUser.getGuest() );
                 }
                 else
                 {
@@ -279,7 +283,7 @@ public class RssFeedServlet
             }
             else
             {
-                repoIds = getObservableRepos( ArchivaRoleConstants.PRINCIPAL_GUEST );
+                repoIds = getObservableRepos( archivaXworkUser.getGuest() );
             }
         }
         else
index 0472b7f68ca7839e28a2f455fa1cf891e533d73f..fb47038b3c0f3bfde4fe420d953cb6692e05a290 100644 (file)
@@ -97,17 +97,20 @@ public class ArchivaDavResource
     private final MimeTypes mimeTypes;
 
     private List<AuditListener> auditListeners;
+    
+    private ArchivaXworkUser archivaXworkUser;
 
     public ArchivaDavResource( String localResource, String logicalResource, ManagedRepositoryConfiguration repository,
                                DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory,
                                MimeTypes mimeTypes, List<AuditListener> auditListeners,
-                               RepositoryContentConsumers consumers )
+                               RepositoryContentConsumers consumers, ArchivaXworkUser archivaXworkUser )
     {
         this.localResource = new File( localResource ); 
         this.logicalResource = logicalResource;
         this.locator = locator;
         this.factory = factory;
         this.session = session;
+        this.archivaXworkUser = archivaXworkUser;
         
         // TODO: push into locator as well as moving any references out of the resource factory
         this.repository = repository;
@@ -121,10 +124,10 @@ public class ArchivaDavResource
     public ArchivaDavResource( String localResource, String logicalResource, ManagedRepositoryConfiguration repository,
                                String remoteAddr, DavSession session, ArchivaDavResourceLocator locator,
                                DavResourceFactory factory, MimeTypes mimeTypes, List<AuditListener> auditListeners,
-                               RepositoryContentConsumers consumers )
+                               RepositoryContentConsumers consumers, ArchivaXworkUser archivaXworkUser )
     {
         this( localResource, logicalResource, repository, session, locator, factory, mimeTypes, auditListeners,
-              consumers );
+              consumers, archivaXworkUser );
 
         this.remoteAddr = remoteAddr;
     }
@@ -614,7 +617,7 @@ public class ArchivaDavResource
 
     private void triggerAuditEvent( String remoteIP, String repositoryId, String resource, String action )
     {
-        String activePrincipal = ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
+        String activePrincipal = archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
         AuditEvent event = new AuditEvent( repositoryId, activePrincipal, resource, action );
         event.setRemoteIP( remoteIP );
 
index da69aa7bc71a3196d6784dd5998528d46b0e3a7e..7af32bee73923ef5efa9755e55849bbed6c38580 100644 (file)
@@ -174,6 +174,11 @@ public class ArchivaDavResourceFactory
      * @plexus.requirement role-hint="md5";
      */
     private Digester digestMd5;
+    
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaXworkUser archivaXworkUser;
         
     public DavResource createResource( final DavResourceLocator locator, final DavServletRequest request,
                                        final DavServletResponse response )
@@ -317,7 +322,7 @@ public class ArchivaDavResourceFactory
                         ArchivaDavResource metadataChecksumResource =
                             new ArchivaDavResource( metadataChecksum.getAbsolutePath(), logicalResource.getPath(), null,
                                                     request.getRemoteAddr(), request.getDavSession(), archivaLocator, this,
-                                                    mimeTypes, auditListeners, consumers );
+                                                    mimeTypes, auditListeners, consumers, archivaXworkUser );
                         availableResources.add( 0, metadataChecksumResource );
                     }
                 }
@@ -349,7 +354,7 @@ public class ArchivaDavResourceFactory
                         ArchivaDavResource metadataResource =
                             new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(), null,
                                                     request.getRemoteAddr(), request.getDavSession(), archivaLocator, this,
-                                                    mimeTypes, auditListeners, consumers );
+                                                    mimeTypes, auditListeners, consumers, archivaXworkUser );
                         availableResources.add( 0, metadataResource );
                     }
                     catch ( RepositoryMetadataException r )
@@ -398,7 +403,7 @@ public class ArchivaDavResourceFactory
             resource =
                 new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource,
                                         managedRepository.getRepository(), davSession, archivaLocator, this, mimeTypes,
-                                        auditListeners, consumers );
+                                        auditListeners, consumers, archivaXworkUser );
         }
         resource.addLockManager(lockManager);
         return resource;
@@ -423,7 +428,7 @@ public class ArchivaDavResourceFactory
         ArchivaDavResource resource =
             new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(),
                                     managedRepository.getRepository(), request.getRemoteAddr(),
-                                    request.getDavSession(), locator, this, mimeTypes, auditListeners, consumers );
+                                    request.getDavSession(), locator, this, mimeTypes, auditListeners, consumers, archivaXworkUser );
 
         if ( !resource.isCollection() )
         {
@@ -468,7 +473,7 @@ public class ArchivaDavResourceFactory
                     new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(),
                                             managedRepository.getRepository(), request.getRemoteAddr(),
                                             request.getDavSession(), locator, this, mimeTypes, auditListeners,
-                                            consumers );
+                                            consumers, archivaXworkUser );
             }
         }
         return resource;
@@ -497,7 +502,7 @@ public class ArchivaDavResourceFactory
 
         return new ArchivaDavResource( resourceFile.getAbsolutePath(), logicalResource.getPath(),
                                        managedRepository.getRepository(), request.getRemoteAddr(),
-                                       request.getDavSession(), locator, this, mimeTypes, auditListeners, consumers );
+                                       request.getDavSession(), locator, this, mimeTypes, auditListeners, consumers, archivaXworkUser );
     }
 
     private boolean fetchContentFromProxies( ManagedRepositoryContent managedRepository, DavServletRequest request,
@@ -622,7 +627,7 @@ public class ArchivaDavResourceFactory
     // TODO: remove?
     private void triggerAuditEvent( String remoteIP, String repositoryId, String resource, String action )
     {
-        String activePrincipal = ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
+        String activePrincipal = archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
         AuditEvent event = new AuditEvent( repositoryId, activePrincipal, resource, action );
         event.setRemoteIP( remoteIP );
 
@@ -769,7 +774,7 @@ public class ArchivaDavResourceFactory
                             request.getSession().getAttribute( SecuritySystemConstants.SECURITY_SESSION_KEY ) );
         }
 
-        String activePrincipal = ArchivaXworkUser.getActivePrincipal( sessionMap );
+        String activePrincipal = archivaXworkUser.getActivePrincipal( sessionMap );
         boolean allow = isAllowedToContinue( request, repositories, activePrincipal );
 
         if( allow )
index cbbc8f58961f7418113b77f073ae900a71ecb0bf..b53007004cce0826335257e3e048e952e08b7531 100644 (file)
@@ -20,7 +20,6 @@ package org.apache.maven.archiva.webdav;
  */
 
 import java.io.File;
-import java.util.List;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.webdav.DavException;
@@ -37,12 +36,11 @@ import org.apache.jackrabbit.webdav.lock.Scope;
 import org.apache.jackrabbit.webdav.lock.SimpleLockManager;
 import org.apache.jackrabbit.webdav.lock.Type;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.maven.archiva.repository.audit.AuditListener;
 import org.apache.maven.archiva.repository.scanner.RepositoryContentConsumers;
+import org.apache.maven.archiva.security.ArchivaXworkUser;
 import org.apache.maven.archiva.webdav.util.MimeTypes;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.codehaus.plexus.spring.PlexusToSpringUtils;
-import org.easymock.MockControl;
 
 import edu.emory.mathcs.backport.java.util.Collections;
 
@@ -69,6 +67,8 @@ public class DavResourceTest extends PlexusInSpringTestCase
     private RepositoryContentConsumers consumers;
 
     private ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration();
+    
+    private ArchivaXworkUser archivaXworkUser;
 
     @Override
     protected void setUp()
@@ -87,6 +87,7 @@ public class DavResourceTest extends PlexusInSpringTestCase
         lockManager = new SimpleLockManager();
         resource.addLockManager(lockManager);
         consumers = new RepositoryContentConsumers();
+        archivaXworkUser = (ArchivaXworkUser) getApplicationContext().getBean( PlexusToSpringUtils.buildSpringId( ArchivaXworkUser.class ) );
     }
 
     @Override
@@ -101,7 +102,7 @@ public class DavResourceTest extends PlexusInSpringTestCase
     private DavResource getDavResource(String logicalPath, File file)
     {
         return new ArchivaDavResource( file.getAbsolutePath(), logicalPath, repository, session, resourceLocator,
-                                       resourceFactory, mimeTypes, Collections.emptyList(), consumers );
+                                       resourceFactory, mimeTypes, Collections.emptyList(), consumers, archivaXworkUser );
     }
     
     public void testDeleteNonExistantResourceShould404()
@@ -302,7 +303,7 @@ public class DavResourceTest extends PlexusInSpringTestCase
 
         public DavResource createResource(DavResourceLocator locator, DavSession session) throws DavException {
             return new ArchivaDavResource( baseDir.getAbsolutePath(), "/", repository, session, resourceLocator,
-                                           resourceFactory, mimeTypes, Collections.emptyList(), consumers );
+                                           resourceFactory, mimeTypes, Collections.emptyList(), consumers, archivaXworkUser );
         }
     }
 }
index 83fd2a4e6b11f99d7fe379a4eed37dd8fa6d70c0..c691ee037ca362e6a98048182dc9f0889650de39 100644 (file)
           <role>org.codehaus.plexus.digest.Digester</role>
           <role-hint>md5</role-hint>
           <field-name>digestMd5</field-name>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.security.ArchivaXworkUser</role>
+          <field-name>archivaXworkUser</field-name>
         </requirement>        
       </requirements>
     </component>