Author: joakime
Date: Fri Nov 2 10:47:55 2007
New Revision: 591410
URL: http://svn.apache.org/viewvc?rev=591410&view=rev
Log:
[MRM-569] Browse shows results for all repositories, regardless of security.
Added ArchivaUser interface to obtain the active principal.
Added ArchivaXworkUser implementation to obtain principal from
redback-xwork-integration layer.
Updated (Default)UserRepositories to utilize redback
SecuritySystem.isAuthorized() properly.
Updated BrowseAction and ShowArtifactAction to show the limited view provided.
Added:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
(with props)
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
(with props)
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
(with props)
Modified:
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/DefaultUserRepositories.java
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/java/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.java
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.xml
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
Modified:
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java
Fri Nov 2 10:47:55 2007
@@ -57,7 +57,7 @@
public ArchivaProjectModel getProjectModel( String groupId, String
artifactId, String version )
throws ObjectNotFoundException, ArchivaDatabaseException;
- public List /*<ArchivaProjectModel>*/queryProjectModels( Constraint
constraint )
+ public List<ArchivaProjectModel> queryProjectModels( Constraint constraint
)
throws ObjectNotFoundException, ArchivaDatabaseException;
public ArchivaProjectModel saveProjectModel( ArchivaProjectModel model )
Modified:
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java
Fri Nov 2 10:47:55 2007
@@ -74,7 +74,7 @@
return (ArchivaProjectModel) jdo.getObjectById(
ArchivaProjectModel.class, key, null );
}
- public List queryProjectModels( Constraint constraint )
+ public List<ArchivaProjectModel> queryProjectModels( Constraint constraint
)
throws ObjectNotFoundException, ArchivaDatabaseException
{
return jdo.queryObjects( ArchivaProjectModel.class, constraint );
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
Fri Nov 2 10:47:55 2007
@@ -35,6 +35,10 @@
public static final String REGISTERED_USER_ROLE = "Registered User";
public static final String GUEST_ROLE = "Guest";
+
+ // principals
+
+ public static final String PRINCIPAL_GUEST = "guest";
// dynamic role prefixes
public static final String REPOSITORY_MANAGER_ROLE_PREFIX = "Repository
Manager";
@@ -69,14 +73,11 @@
public static final String TEMPLATE_REPOSITORY_OBSERVER =
"archiva-repository-observer";
+ public static final String TEMPLATE_GLOBAL_REPOSITORY_OBSERVER =
"archiva-global-repository-observer";
+
public static final String TEMPLATE_SYSTEM_ADMIN =
"archiva-system-administrator";
public static final String TEMPLATE_GUEST = "archiva-guest";
-
- public static String toRepositoryObserverRoleId( String repoId )
- {
- return TEMPLATE_REPOSITORY_OBSERVER + "-" + repoId;
- }
public static String toRepositoryObserverRoleName( String repoId )
{
Added:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java?rev=591410&view=auto
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
(added)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
Fri Nov 2 10:47:55 2007
@@ -0,0 +1,36 @@
+package org.apache.maven.archiva.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.
+ */
+
+/**
+ * ArchivaUser- interface to access the active principal.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ArchivaUser
+{
+ /**
+ * Get the active principal from the security system.
+ *
+ * @return the active principal. (if not authenticated, the guest
principal is returned)
+ */
+ public String getActivePrincipal();
+}
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaUser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/DefaultUserRepositories.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/DefaultUserRepositories.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/DefaultUserRepositories.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/DefaultUserRepositories.java
Fri Nov 2 10:47:55 2007
@@ -19,21 +19,22 @@
* under the License.
*/
-import org.codehaus.plexus.redback.rbac.Permission;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.codehaus.plexus.redback.authentication.AuthenticationResult;
+import org.codehaus.plexus.redback.authorization.AuthorizationException;
import org.codehaus.plexus.redback.rbac.RBACManager;
-import org.codehaus.plexus.redback.rbac.RbacManagerException;
-import org.codehaus.plexus.redback.rbac.RbacObjectNotFoundException;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.redback.role.RoleManagerException;
+import org.codehaus.plexus.redback.system.DefaultSecuritySession;
+import org.codehaus.plexus.redback.system.SecuritySession;
import org.codehaus.plexus.redback.system.SecuritySystem;
import org.codehaus.plexus.redback.users.User;
import org.codehaus.plexus.redback.users.UserNotFoundException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
/**
* DefaultUserRepositories
*
@@ -61,6 +62,11 @@
*/
private RoleManager roleManager;
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
public List<String> getObservableRepositoryIds( String principal )
throws PrincipalNotFoundException, AccessDeniedException,
ArchivaSecurityException
{
@@ -73,38 +79,35 @@
{
throw new AccessDeniedException( "User " + principal + "(" +
user.getFullName() + ") is locked." );
}
-
- Map<String, List<Permission>> permissionMap =
rbacManager.getAssignedPermissionMap( principal );
+
+ AuthenticationResult authn = new AuthenticationResult( true,
principal, null );
+ SecuritySession securitySession = new DefaultSecuritySession(
authn, user );
List<String> repoIds = new ArrayList<String>();
+
+ List<ManagedRepositoryConfiguration> repos =
archivaConfiguration.getConfiguration().getManagedRepositories();
- for( Entry<String,List<Permission>> entry:
permissionMap.entrySet() )
+ for ( ManagedRepositoryConfiguration repo : repos )
{
- List<Permission> perms = entry.getValue();
-
- for( Permission perm: perms )
+ try
+ {
+ String repoId = repo.getId();
+ if ( securitySystem.isAuthorized( securitySession,
ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS, repoId ) )
+ {
+ repoIds.add( repoId );
+ }
+ }
+ catch ( AuthorizationException e )
{
- System.out.println( "Principal[" + principal + "] :
Permission[" + entry.getKey() + "]:" + perm.getName() + " - Operation:"
- + perm.getOperation().getName() + " - Resource:" +
perm.getResource().getIdentifier() );
+ // swallow.
}
}
- System.out.println("-");
-
return repoIds;
}
catch ( UserNotFoundException e )
{
throw new PrincipalNotFoundException( "Unable to find principal "
+ principal + "" );
- }
- catch ( RbacObjectNotFoundException e )
- {
- throw new PrincipalNotFoundException( "Unable to find user role
assignments for user " + principal, e );
- }
- catch ( RbacManagerException e )
- {
- throw new ArchivaSecurityException( "Unable to initialize
underlying security framework: " + e.getMessage(),
- e );
}
}
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/java/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/java/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/java/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/java/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.java
Fri Nov 2 10:47:55 2007
@@ -19,22 +19,20 @@
* under the License.
*/
+import java.io.File;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.redback.rbac.Operation;
-import org.codehaus.plexus.redback.rbac.Permission;
import org.codehaus.plexus.redback.rbac.RBACManager;
-import org.codehaus.plexus.redback.rbac.Resource;
-import org.codehaus.plexus.redback.rbac.Role;
-import org.codehaus.plexus.redback.rbac.UserAssignment;
import org.codehaus.plexus.redback.role.RoleManager;
-import org.codehaus.plexus.redback.role.RoleManagerException;
import org.codehaus.plexus.redback.system.SecuritySystem;
import org.codehaus.plexus.redback.users.User;
import org.codehaus.plexus.redback.users.UserManager;
-import java.util.List;
-
/**
* DefaultUserRepositoriesTest
*
@@ -44,8 +42,6 @@
public class DefaultUserRepositoriesTest
extends PlexusTestCase
{
- private static final String PERMISSION_READ_REPOSITORY = "Archiva Read
Repository";
-
private static final String USER_GUEST = "guest";
private static final String USER_ADMIN = "admin";
@@ -58,27 +54,28 @@
private RoleManager roleManager;
+ private ArchivaConfiguration archivaConfiguration;
+
+ private UserRepositories userRepos;
+
public void testGetObservableRepositoryIds()
throws Exception
{
- UserRepositories userRepos = (UserRepositories) lookup(
UserRepositories.class, "default" );
- assertNotNull( userRepos );
-
// create some users.
createUser( USER_ALPACA, "Al 'Archiva' Paca" );
assertEquals( "Expected users", 3,
securitySystem.getUserManager().getUsers().size() );
// some unassigned repo observer roles.
- userRepos.createMissingRepositoryRoles( "central" );
- userRepos.createMissingRepositoryRoles( "coporate" );
- userRepos.createMissingRepositoryRoles( "internal" );
- userRepos.createMissingRepositoryRoles( "snapshots" );
- userRepos.createMissingRepositoryRoles( "secret" );
+ setupRepository( "central" );
+ setupRepository( "corporate" );
+ setupRepository( "internal" );
+ setupRepository( "snapshots" );
+ setupRepository( "secret" );
// some assigned repo observer roles.
- assignRepositoryObserverRole( USER_ALPACA, "central" );
assignRepositoryObserverRole( USER_ALPACA, "corporate" );
+ assignRepositoryObserverRole( USER_ALPACA, "central" );
assignRepositoryObserverRole( USER_GUEST, "corporate" );
// the global repo observer role.
assignGlobalRepositoryObserverRole( USER_ADMIN );
@@ -101,104 +98,30 @@
}
}
- private void assignGlobalRepositoryObserverRole( String principal )
- throws Exception
- {
- Role role = createRepositoryObserverRole(
ArchivaRoleConstants.GLOBAL_REPOSITORY_OBSERVER_ROLE,
- PERMISSION_READ_REPOSITORY,
Resource.GLOBAL );
- assignRole( principal, role );
- }
-
- private void assignRepositoryObserverRole( String principal, String repoId
)
- throws Exception
- {
- // String roleId = ArchivaRoleConstants.toRepositoryObserverRoleId(
repoId );
- String roleId = ArchivaRoleConstants.toRepositoryObserverRoleName(
repoId );
- roleManager.assignRole( roleId, principal );
-
-// Role role = createRepositoryObserverRole( roleName,
PERMISSION_READ_REPOSITORY, repoId );
-// assertEquals( roleName, role.getName() );
-// assignRole( principal, role );
- }
-
- private void assignRole( String principal, Role role )
+ private void setupRepository( String repoId )
throws Exception
{
- UserAssignment ua;
-
- if ( rbacManager.userAssignmentExists( principal ) )
- {
- ua = rbacManager.getUserAssignment( principal );
- }
- else
- {
- ua = rbacManager.createUserAssignment( principal );
- }
-
- ua.addRoleName( role );
+ // Add repo to configuration.
+ ManagedRepositoryConfiguration repoConfig = new
ManagedRepositoryConfiguration();
+ repoConfig.setId( repoId );
+ repoConfig.setName( "Testable repo <" + repoId + ">" );
+ repoConfig.setLocation( getTestPath( "target/test-repo/" + repoId ) );
+ archivaConfiguration.getConfiguration().addManagedRepository(
repoConfig );
- rbacManager.saveUserAssignment( ua );
+ // Add repo roles to security.
+ userRepos.createMissingRepositoryRoles( repoId );
}
- private void createRepositoryObserverRole( String repoId )
+ private void assignGlobalRepositoryObserverRole( String principal )
throws Exception
{
- createRepositoryObserverRole(
ArchivaRoleConstants.toRepositoryObserverRoleName( repoId ),
- PERMISSION_READ_REPOSITORY + "-" +
repoId, repoId );
+ roleManager.assignRole(
ArchivaRoleConstants.TEMPLATE_GLOBAL_REPOSITORY_OBSERVER, principal );
}
- private Role createRepositoryObserverRole( String roleName, String
permissionName, String resourceId )
+ private void assignRepositoryObserverRole( String principal, String repoId
)
throws Exception
{
- if ( rbacManager.roleExists( roleName ) )
- {
- return rbacManager.getRole( roleName );
- }
-
- Permission perm;
- Operation operationRepoAccess;
- Resource resource;
-
- // if ( rbacManager.resourceExists( resourceId ) )
- // {
- // resource = rbacManager.getResource( resourceId );
- // }
- // else
- // {
- // resource = rbacManager.createResource( resourceId );
- // }
- resource = rbacManager.createResource( resourceId );
-
- // if ( rbacManager.operationExists(
ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS ) )
- // {
- // operationRepoAccess = rbacManager.getOperation(
ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS );
- // }
- // else
- // {
- // operationRepoAccess = rbacManager.createOperation(
ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS );
- // }
- operationRepoAccess = rbacManager.createOperation(
ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS );
-
- // if ( rbacManager.permissionExists( permissionName ) )
- // {
- // perm = rbacManager.getPermission( permissionName );
- // }
- // else
- // {
- // perm = rbacManager.createPermission( permissionName );
- // }
- perm = rbacManager.createPermission( permissionName );
- perm.setOperation( operationRepoAccess );
- perm.setResource( resource );
-
- Role role = rbacManager.createRole( roleName );
- role.addPermission( perm );
-
- rbacManager.saveOperation( operationRepoAccess );
- rbacManager.savePermission( perm );
- rbacManager.saveRole( role );
-
- return role;
+ roleManager.assignTemplatedRole(
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId, principal );
}
private User createUser( String principal, String fullname )
@@ -219,10 +142,27 @@
{
super.setUp();
+ File srcConfig = getTestFile(
"src/test/resources/repository-archiva.xml" );
+ File destConfig = getTestFile( "target/test-conf/archiva.xml" );
+
+ destConfig.getParentFile().mkdirs();
+ destConfig.delete();
+
+ FileUtils.copyFile( srcConfig, destConfig );
+
securitySystem = (SecuritySystem) lookup( SecuritySystem.class,
"testable" );
rbacManager = (RBACManager) lookup( RBACManager.class, "memory" );
roleManager = (RoleManager) lookup( RoleManager.class, "default" );
-
+ userRepos = (UserRepositories) lookup( UserRepositories.class,
"default" );
+ archivaConfiguration = (ArchivaConfiguration) lookup(
ArchivaConfiguration.class );
+
+ // Some basic asserts.
+ assertNotNull( securitySystem );
+ assertNotNull( rbacManager );
+ assertNotNull( roleManager );
+ assertNotNull( userRepos );
+ assertNotNull( archivaConfiguration );
+
// Setup Admin User.
User adminUser = createUser( USER_ADMIN, "Admin User" );
roleManager.assignRole( ArchivaRoleConstants.TEMPLATE_SYSTEM_ADMIN,
adminUser.getPrincipal().toString() );
@@ -230,5 +170,6 @@
// Setup Guest User.
User guestUser = createUser( USER_GUEST, "Guest User" );
roleManager.assignRole( ArchivaRoleConstants.TEMPLATE_GUEST,
guestUser.getPrincipal().toString() );
+
}
}
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.xml
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.xml?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.xml
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/DefaultUserRepositoriesTest.xml
Fri Nov 2 10:47:55 2007
@@ -23,6 +23,10 @@
<role-hint>default</role-hint>
<field-name>roleManager</field-name>
</requirement>
+ <requirement>
+
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <field-name>archivaConfiguration</field-name>
+ </requirement>
</requirements>
</component>
@@ -160,6 +164,29 @@
<field-name>rbacManager</field-name>
</requirement>
</requirements>
+ </component>
+
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+
<implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+ <requirements>
+ <requirement>
+ <role>org.codehaus.plexus.registry.Registry</role>
+ <role-hint>configured</role-hint>
+ </requirement>
+ </requirements>
+ </component>
+ <component>
+ <role>org.codehaus.plexus.registry.Registry</role>
+ <role-hint>configured</role-hint>
+
<implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+ <configuration>
+ <properties>
+ <system/>
+ <xml fileName="${basedir}/target/test-conf/archiva.xml"
+ config-name="org.apache.maven.archiva.base"
config-at="org.apache.maven.archiva"/>
+ </properties>
+ </configuration>
</component>
</components>
Added:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml?rev=591410&view=auto
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
(added)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
Fri Nov 2 10:47:55 2007
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ ~ 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.
+ -->
+
+<configuration>
+
+ <version>2</version>
+
+ <repositoryScanning>
+ <fileTypes>
+ <fileType>
+ <id>artifacts</id>
+ <patterns>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.jar</pattern>
+ <pattern>**/*.ear</pattern>
+ <pattern>**/*.war</pattern>
+ <pattern>**/*.car</pattern>
+ <pattern>**/*.sar</pattern>
+ <pattern>**/*.mar</pattern>
+ <pattern>**/*.rar</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ <pattern>**/*.tar.gz</pattern>
+ <pattern>**/*.tar.bz2</pattern>
+ <pattern>**/*.zip</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>indexable-content</id>
+ <patterns>
+ <pattern>**/*.txt</pattern>
+ <pattern>**/*.TXT</pattern>
+ <pattern>**/*.block</pattern>
+ <pattern>**/*.config</pattern>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.xml</pattern>
+ <pattern>**/*.xsd</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>auto-remove</id>
+ <patterns>
+ <pattern>**/*.bak</pattern>
+ <pattern>**/*~</pattern>
+ <pattern>**/*-</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>ignored</id>
+ <patterns>
+ <pattern>**/.htaccess</pattern>
+ <pattern>**/KEYS</pattern>
+ <pattern>**/*.rb</pattern>
+ <pattern>**/*.sh</pattern>
+ <pattern>**/.svn/**</pattern>
+ <pattern>**/.DAV/**</pattern>
+ </patterns>
+ </fileType>
+ </fileTypes>
+ <knownContentConsumers>
+ <knownContentConsumer>update-db-artifact</knownContentConsumer>
+ <knownContentConsumer>create-missing-checksums</knownContentConsumer>
+
<knownContentConsumer>update-db-repository-metadata</knownContentConsumer>
+ <knownContentConsumer>validate-checksum</knownContentConsumer>
+ <knownContentConsumer>validate-signature</knownContentConsumer>
+ <knownContentConsumer>index-content</knownContentConsumer>
+ <knownContentConsumer>auto-remove</knownContentConsumer>
+ <knownContentConsumer>auto-rename</knownContentConsumer>
+ </knownContentConsumers>
+ <invalidContentConsumers>
+ <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
+ </invalidContentConsumers>
+ </repositoryScanning>
+
+ <databaseScanning>
+ <cronExpression>0 0 * * ?</cronExpression>
+ <unprocessedConsumers>
+ <unprocessedConsumer>index-artifact</unprocessedConsumer>
+ <unprocessedConsumer>update-db-project</unprocessedConsumer>
+ <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
+ <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
+ <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
+ <unprocessedConsumer>index-public-methods</unprocessedConsumer>
+ </unprocessedConsumers>
+ <cleanupConsumers>
+ <cleanupConsumer>not-present-remove-db-artifact</cleanupConsumer>
+ <cleanupConsumer>not-present-remove-db-project</cleanupConsumer>
+ <cleanupConsumer>not-present-remove-indexed</cleanupConsumer>
+ </cleanupConsumers>
+ </databaseScanning>
+
+</configuration>
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-security/src/test/resources/repository-archiva.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
Fri Nov 2 10:47:55 2007
@@ -22,8 +22,16 @@
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.database.browsing.BrowsingResults;
import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
+import org.apache.maven.archiva.security.AccessDeniedException;
+import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.apache.maven.archiva.security.PrincipalNotFoundException;
+import org.apache.maven.archiva.security.UserRepositories;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import java.util.Collections;
+import java.util.List;
+
/**
* Browse the repository.
*
@@ -39,6 +47,16 @@
* @plexus.requirement role-hint="default"
*/
private RepositoryBrowsing repoBrowsing;
+
+ /**
+ * @plexus.requirement
+ */
+ private UserRepositories userRepositories;
+
+ /**
+ * @plexus.requirement role-hint="xwork"
+ */
+ private ArchivaUser archivaUser;
private BrowsingResults results;
@@ -48,7 +66,7 @@
public String browse()
{
- this.results = repoBrowsing.getRoot();
+ this.results = repoBrowsing.getRoot( getPrincipal(),
getObservableRepos() );
return SUCCESS;
}
@@ -61,7 +79,7 @@
return ERROR;
}
- this.results = repoBrowsing.selectGroupId( groupId );
+ this.results = repoBrowsing.selectGroupId( getPrincipal(),
getObservableRepos(), groupId );
return SUCCESS;
}
@@ -81,8 +99,35 @@
return ERROR;
}
- this.results = repoBrowsing.selectArtifactId( groupId, artifactId );
+ this.results = repoBrowsing.selectArtifactId( getPrincipal(),
getObservableRepos(), groupId, artifactId );
return SUCCESS;
+ }
+
+ private String getPrincipal()
+ {
+ return archivaUser.getActivePrincipal();
+ }
+
+ private List<String> getObservableRepos()
+ {
+ try
+ {
+ return userRepositories.getObservableRepositoryIds( getPrincipal()
);
+ }
+ catch ( PrincipalNotFoundException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ }
+ catch ( AccessDeniedException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ // TODO: pass this onto the screen.
+ }
+ catch ( ArchivaSecurityException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ }
+ return Collections.emptyList();
}
public String getGroupId()
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
Fri Nov 2 10:47:55 2007
@@ -26,8 +26,14 @@
import org.apache.maven.archiva.database.ObjectNotFoundException;
import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.security.AccessDeniedException;
+import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.apache.maven.archiva.security.PrincipalNotFoundException;
+import org.apache.maven.archiva.security.UserRepositories;
import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+import java.util.Collections;
import java.util.List;
/**
@@ -46,6 +52,16 @@
* @plexus.requirement role-hint="default"
*/
private RepositoryBrowsing repoBrowsing;
+
+ /**
+ * @plexus.requirement
+ */
+ private UserRepositories userRepositories;
+
+ /**
+ * @plexus.requirement role-hint="xwork"
+ */
+ private ArchivaUser archivaUser;
/* .\ Input Parameters \.________________________________________ */
@@ -86,7 +102,7 @@
{
try
{
- this.model = repoBrowsing.selectVersion( groupId, artifactId,
version );
+ this.model = repoBrowsing.selectVersion( getPrincipal(),
getObservableRepos(), groupId, artifactId, version );
}
catch ( ObjectNotFoundException oe )
{
@@ -104,7 +120,7 @@
public String dependencies()
throws ObjectNotFoundException, ArchivaDatabaseException
{
- this.model = repoBrowsing.selectVersion( groupId, artifactId, version
);
+ this.model = repoBrowsing.selectVersion( getPrincipal(),
getObservableRepos(), groupId, artifactId, version );
this.dependencies = model.getDependencies();
@@ -117,7 +133,7 @@
public String mailingLists()
throws ObjectNotFoundException, ArchivaDatabaseException
{
- this.model = repoBrowsing.selectVersion( groupId, artifactId, version
);
+ this.model = repoBrowsing.selectVersion( getPrincipal(),
getObservableRepos(), groupId, artifactId, version );
this.mailingLists = model.getMailingLists();
return SUCCESS;
@@ -142,9 +158,9 @@
public String dependees()
throws ObjectNotFoundException, ArchivaDatabaseException
{
- this.model = repoBrowsing.selectVersion( groupId, artifactId, version
);
+ this.model = repoBrowsing.selectVersion( getPrincipal(),
getObservableRepos(), groupId, artifactId, version );
- this.dependees = repoBrowsing.getUsedBy( groupId, artifactId, version
);
+ this.dependees = repoBrowsing.getUsedBy( getPrincipal(),
getObservableRepos(), groupId, artifactId, version );
return SUCCESS;
}
@@ -155,9 +171,36 @@
public String dependencyTree()
throws ObjectNotFoundException, ArchivaDatabaseException
{
- this.model = repoBrowsing.selectVersion( groupId, artifactId, version
);
+ this.model = repoBrowsing.selectVersion( getPrincipal(),
getObservableRepos(), groupId, artifactId, version );
return SUCCESS;
+ }
+
+ private String getPrincipal()
+ {
+ return archivaUser.getActivePrincipal();
+ }
+
+ private List<String> getObservableRepos()
+ {
+ try
+ {
+ return userRepositories.getObservableRepositoryIds( getPrincipal()
);
+ }
+ catch ( PrincipalNotFoundException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ }
+ catch ( AccessDeniedException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ // TODO: pass this onto the screen.
+ }
+ catch ( ArchivaSecurityException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ }
+ return Collections.emptyList();
}
public void validate()
Modified:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java?rev=591410&r1=591409&r2=591410&view=diff
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
(original)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
Fri Nov 2 10:47:55 2007
@@ -193,14 +193,13 @@
ua = rbacManager.createUserAssignment( principal );
}
- ua.addRoleName(
ArchivaRoleConstants.REPOSITORY_OBSERVER_ROLE_PREFIX + " - " + repoId );
+ ua.addRoleName(
ArchivaRoleConstants.toRepositoryObserverRoleName( repoId ) );
rbacManager.saveUserAssignment( ua );
}
catch ( RbacManagerException e )
{
- getLogger().warn(
- "Unable to add role [" +
ArchivaRoleConstants.REPOSITORY_OBSERVER_ROLE_PREFIX + " - "
- + repoId + "] to " + principal + "
user.", e );
+ getLogger().warn( "Unable to add role [" +
ArchivaRoleConstants.toRepositoryObserverRoleName( repoId )
+ + "] to " + principal + " user.", e );
}
}
}
Added:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java?rev=591410&view=auto
==============================================================================
---
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
(added)
+++
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
Fri Nov 2 10:47:55 2007
@@ -0,0 +1,77 @@
+package org.apache.maven.archiva.web.util;
+
+/*
+ * 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 com.opensymphony.xwork.ActionContext;
+
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.codehaus.plexus.redback.system.SecuritySession;
+import org.codehaus.plexus.redback.users.User;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * ArchivaXworkUser
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.security.ArchivaUser"
+ * role-hint="xwork"
+ */
+public class ArchivaXworkUser
+ implements ArchivaUser
+{
+ private Map<String, Object> getContextSession()
+ {
+ ActionContext context = ActionContext.getContext();
+ Map<String, Object> sessionMap = context.getSession();
+ if ( sessionMap == null )
+ {
+ sessionMap = new HashMap<String, Object>();
+ }
+
+ return sessionMap;
+ }
+
+ private SecuritySession getSecuritySession()
+ {
+ return (SecuritySession) getContextSession().get( SecuritySession.ROLE
);
+ }
+
+ public String getActivePrincipal()
+ {
+ SecuritySession securitySession = getSecuritySession();
+ if ( securitySession == null )
+ {
+ return ArchivaRoleConstants.PRINCIPAL_GUEST;
+ }
+
+ User user = securitySession.getUser();
+ if ( user == null )
+ {
+ return ArchivaRoleConstants.PRINCIPAL_GUEST;
+ }
+
+ return (String) user.getPrincipal();
+ }
+}
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange:
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ArchivaXworkUser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain