Author: olamy
Date: Tue Aug 30 13:19:07 2011
New Revision: 1163199

URL: http://svn.apache.org/viewvc?rev=1163199&view=rev
Log:
ensure roles for repositories are correclty added/removed

Modified:
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java?rev=1163199&r1=1163198&r2=1163199&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
 Tue Aug 30 13:19:07 2011
@@ -143,14 +143,15 @@ public class DefaultManagedRepositoryAdm
             addManagedRepository( managedRepository.getId(), 
managedRepository.getLayout(), managedRepository.getName(),
                                   managedRepository.getLocation(), 
managedRepository.isBlockRedeployments(),
                                   managedRepository.isReleases(), 
managedRepository.isSnapshots(), needStageRepo,
-                                  managedRepository.getCronExpression() ) != 
null;
+                                  managedRepository.getCronExpression(), 
auditInformation ) != null;
 
     }
 
     private ManagedRepositoryConfiguration addManagedRepository( String 
repoId, String layout, String name,
                                                                  String 
location, boolean blockRedeployments,
                                                                  boolean 
releasesIncluded, boolean snapshotsIncluded,
-                                                                 boolean 
stageRepoNeeded, String cronExpression )
+                                                                 boolean 
stageRepoNeeded, String cronExpression,
+                                                                 
AuditInformation auditInformation )
         throws RepositoryAdminException
     {
 
@@ -220,13 +221,20 @@ public class DefaultManagedRepositoryAdm
         try
         {
             addRepository( repository, config );
+            addRepositoryRoles( repository );
 
             if ( stageRepoNeeded )
             {
                 ManagedRepositoryConfiguration stagingRepository = 
getStageRepoConfig( repository );
                 addRepository( stagingRepository, config );
+                addRepositoryRoles( stagingRepository );
+                triggerAuditEvent( stagingRepository.getId(), null, 
AuditEvent.ADD_MANAGED_REPO, auditInformation );
             }
         }
+        catch ( RoleManagerException e )
+        {
+            throw new RepositoryAdminException( "failed to add repository 
roles " + e.getMessage(), e );
+        }
         catch ( IOException e )
         {
             throw new RepositoryAdminException( "failed to add repository " + 
e.getMessage(), e );
@@ -326,6 +334,15 @@ public class DefaultManagedRepositoryAdm
             }
         }
 
+        try
+        {
+            removeRepositoryRoles( repository );
+        }
+        catch ( RoleManagerException e )
+        {
+            throw new RepositoryAdminException(
+                "fail to remove repository roles for repository " + 
repository.getId() + " : " + e.getMessage(), e );
+        }
         return Boolean.TRUE;
     }
 
@@ -357,7 +374,7 @@ public class DefaultManagedRepositoryAdm
             addManagedRepository( managedRepository.getId(), 
managedRepository.getLayout(), managedRepository.getName(),
                                   managedRepository.getLocation(), 
managedRepository.isBlockRedeployments(),
                                   managedRepository.isReleases(), 
managedRepository.isSnapshots(), needStageRepo,
-                                  managedRepository.getCronExpression() );
+                                  managedRepository.getCronExpression(), 
auditInformation );
 
         // FIXME only location has changed from previous
         boolean resetStats = true;
@@ -548,4 +565,22 @@ public class DefaultManagedRepositoryAdm
             roleManager.createTemplatedRole( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId );
         }
     }
+
+    protected void removeRepositoryRoles( ManagedRepositoryConfiguration 
existingRepository )
+        throws RoleManagerException
+    {
+        String repoId = existingRepository.getId();
+
+        if ( roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId ) )
+        {
+            roleManager.removeTemplatedRole( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId );
+        }
+
+        if ( roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId ) )
+        {
+            roleManager.removeTemplatedRole( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId );
+        }
+
+        log.debug( "removed user roles associated with repository {}", repoId 
);
+    }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java?rev=1163199&r1=1163198&r2=1163199&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
 Tue Aug 30 13:19:07 2011
@@ -22,6 +22,8 @@ import org.apache.archiva.admin.AuditInf
 import org.apache.archiva.admin.mock.MockAuditListener;
 import org.apache.archiva.audit.AuditEvent;
 import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.codehaus.plexus.redback.role.RoleManager;
 import org.codehaus.plexus.redback.users.User;
 import org.codehaus.plexus.redback.users.memory.SimpleUser;
 import org.junit.Test;
@@ -43,6 +45,9 @@ public class ManagedRepositoryAdminTest
     @Inject
     private MockAuditListener mockAuditListener;
 
+    @Inject
+    protected RoleManager roleManager;
+
     @Test
     public void getAllManagedRepos()
         throws Exception
@@ -92,12 +97,22 @@ public class ManagedRepositoryAdminTest
 
         assertNotNull( managedRepositoryAdmin.getManagedRepository( 
"test-new-one" ) );
 
+        assertTrue(
+            roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, "test-new-one" ) );
+        assertTrue(
+            roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, "test-new-one" ) );
+
         managedRepositoryAdmin.deleteManagedRepository( "test-new-one", 
getFakeAuditInformation() );
 
         repos = managedRepositoryAdmin.getManagedRepositories();
         assertNotNull( repos );
         assertEquals( initialSize, repos.size() );
 
+        assertFalse(
+            roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, "test-new-one" ) );
+        assertFalse(
+            roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, "test-new-one" ) );
+
         assertEquals( 2, mockAuditListener.getAuditEvents().size() );
 
         assertEquals( AuditEvent.ADD_MANAGED_REPO, 
mockAuditListener.getAuditEvents().get( 0 ).getAction() );
@@ -144,7 +159,8 @@ public class ManagedRepositoryAdminTest
 
         managedRepositoryAdmin.deleteManagedRepository( repo.getId(), 
getFakeAuditInformation() );
 
-        assertEquals( 3, mockAuditListener.getAuditEvents().size() );
+        assertEquals( "not 3 audit events " + 
mockAuditListener.getAuditEvents(), 3,
+                      mockAuditListener.getAuditEvents().size() );
 
         assertEquals( AuditEvent.ADD_MANAGED_REPO, 
mockAuditListener.getAuditEvents().get( 0 ).getAction() );
         assertEquals( "root", mockAuditListener.getAuditEvents().get( 0 
).getUserId() );


Reply via email to