From: Olivier Lamy Date: Fri, 16 Mar 2012 14:01:33 +0000 (+0000) Subject: start working on browsing only one repository to avoid merging incomplete metadata X-Git-Tag: archiva-1.4-M3~1024 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6c2bf258aa5acc6ae9424ea2c2db35f3b227b55d;p=archiva.git start working on browsing only one repository to avoid merging incomplete metadata git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1301522 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml index 052175bc3..331d96ffd 100644 --- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml @@ -165,20 +165,17 @@ org.codehaus.redback redback-users-memory test - ${redback.version} org.codehaus.redback redback-keys-memory test - ${redback.version} org.codehaus.redback redback-rbac-cached - ${redback.version} test diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java index 89a4ff6b9..15ac8ebf1 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java @@ -28,6 +28,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import java.util.List; /** * @author Olivier Lamy @@ -64,4 +65,11 @@ public interface BrowseService ProjectVersionMetadata getProjectVersionMetadata( @PathParam( "g" ) String groupId, @PathParam( "a" ) String artifactId ) throws ArchivaRestServiceException; + + @Path( "userRepositories" ) + @GET + @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @RedbackAuthorization( noPermission = true, noRestriction = true ) + List getUserRepositories() + throws ArchivaRestServiceException; } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java index 7f45c7005..580b91f7a 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java @@ -350,6 +350,12 @@ public class DefaultBrowseService } } + public List getUserRepositories() + throws ArchivaRestServiceException + { + return getObservableRepos(); + } + //--------------------------- // internals //--------------------------- diff --git a/archiva-modules/archiva-web/archiva-security/pom.xml b/archiva-modules/archiva-web/archiva-security/pom.xml index 99bcd20ca..5c47722a8 100644 --- a/archiva-modules/archiva-web/archiva-security/pom.xml +++ b/archiva-modules/archiva-web/archiva-security/pom.xml @@ -33,10 +33,18 @@ org.apache.archiva archiva-configuration + + org.apache.archiva + archiva-repository-admin-api + org.apache.archiva archiva-security-common + + javax.inject + javax.inject + javax.servlet servlet-api @@ -153,6 +161,31 @@ redback-common-test-resources test + + org.apache.archiva + archiva-repository-admin-default + test + + + org.apache.maven.wagon + wagon-http + test + + + org.apache.maven.wagon + wagon-http-lightweight + test + + + org.apache.archiva + metadata-repository-api + test + + + org.apache.archiva + metadata-store-file + test + @@ -190,6 +223,9 @@ maven-surefire-plugin + ${basedir} + ${project.build.directory}/appserver-base + ${project.build.directory}/appserver-base ${project.build.directory}/appserver-base ${redbackTestJdbcUrl} ${redbackTestJdbcDriver} diff --git a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java index 37570d123..7f27d7cc0 100644 --- a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java +++ b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java @@ -20,8 +20,9 @@ package org.apache.archiva.security; */ import com.google.common.collect.Lists; -import org.apache.archiva.configuration.ArchivaConfiguration; -import org.apache.archiva.configuration.ManagedRepositoryConfiguration; +import org.apache.archiva.admin.model.RepositoryAdminException; +import org.apache.archiva.admin.model.beans.ManagedRepository; +import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.security.common.ArchivaRoleConstants; import org.codehaus.plexus.redback.authentication.AuthenticationResult; import org.codehaus.plexus.redback.authorization.AuthorizationException; @@ -57,9 +58,9 @@ public class DefaultUserRepositories private RoleManager roleManager; @Inject - private ArchivaConfiguration archivaConfiguration; + private ManagedRepositoryAdmin managedRepositoryAdmin; - private Logger log = LoggerFactory.getLogger( DefaultUserRepositories.class ); + private Logger log = LoggerFactory.getLogger( getClass() ); public List getObservableRepositoryIds( String principal ) throws PrincipalNotFoundException, AccessDeniedException, ArchivaSecurityException @@ -80,34 +81,55 @@ public class DefaultUserRepositories private List getAccessibleRepositoryIds( String principal, String operation ) throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException { - SecuritySession securitySession = createSession( principal ); - List repoIds = new ArrayList(); + List managedRepositories = getAccessibleRepositories( principal, operation ); + List repoIds = new ArrayList( managedRepositories.size() ); + for ( ManagedRepository managedRepository : managedRepositories ) + { + repoIds.add( managedRepository.getId() ); + } - List repos = archivaConfiguration.getConfiguration().getManagedRepositories(); + return repoIds; + } - for ( ManagedRepositoryConfiguration repo : repos ) + public List getAccessibleRepositories( String principal, String operation ) + throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException + { + SecuritySession securitySession = createSession( principal ); + + List managedRepositories = new ArrayList(); + + try { - try + List repos = managedRepositoryAdmin.getManagedRepositories(); + + for ( ManagedRepository repo : repos ) { - String repoId = repo.getId(); - if ( securitySystem.isAuthorized( securitySession, operation, repoId ) ) + try { - repoIds.add( repoId ); + String repoId = repo.getId(); + if ( securitySystem.isAuthorized( securitySession, operation, repoId ) ) + { + managedRepositories.add( repo ); + } } - } - catch ( AuthorizationException e ) - { - // swallow. - if ( log.isDebugEnabled() ) + catch ( AuthorizationException e ) { - log.debug( "Not authorizing '{}' for repository '{}': {}", - Lists.newArrayList( principal, repo.getId(), e.getMessage() ) ); + // swallow. + if ( log.isDebugEnabled() ) + { + log.debug( "Not authorizing '{}' for repository '{}': {}", + Lists.newArrayList( principal, repo.getId(), e.getMessage() ) ); + } } } - } - return repoIds; + return managedRepositories; + } + catch ( RepositoryAdminException e ) + { + throw new ArchivaSecurityException( e.getMessage(), e ); + } } private SecuritySession createSession( String principal ) @@ -212,14 +234,4 @@ public class DefaultUserRepositories { this.roleManager = roleManager; } - - public ArchivaConfiguration getArchivaConfiguration() - { - return archivaConfiguration; - } - - public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration ) - { - this.archivaConfiguration = archivaConfiguration; - } } diff --git a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java index 0535303f1..18a46855b 100644 --- a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java +++ b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java @@ -19,6 +19,8 @@ package org.apache.archiva.security; * under the License. */ +import org.apache.archiva.admin.model.beans.ManagedRepository; + import java.util.List; /** @@ -84,5 +86,18 @@ public interface UserRepositories */ boolean isAuthorizedToDeleteArtifacts( String principal, String repoId ) throws AccessDeniedException, ArchivaSecurityException; + + /** + * + * @param principal + * @param operation + * @since 1.4-M3 + * @return + * @throws ArchivaSecurityException + * @throws AccessDeniedException + * @throws PrincipalNotFoundException + */ + List getAccessibleRepositories( String principal, String operation ) + throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException; } diff --git a/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml b/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml index 2fc01c431..8b02297c4 100644 --- a/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml +++ b/archiva-modules/archiva-web/archiva-security/src/test/resources/spring-context.xml @@ -37,9 +37,10 @@ - + + @@ -83,7 +84,9 @@ - + + + - \ No newline at end of file diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js index a9cd4a8cd..1f9140047 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js @@ -170,19 +170,29 @@ $(function() { var mainContent = $("#main-content"); mainContent.html($("#browse-tmpl" ).tmpl()); mainContent.find("#browse_result").html(mediumSpinnerImg()); - $.ajax("restServices/archivaServices/browseService/rootGroups", { + + $.ajax("restServices/archivaServices/browseService/userRepositories", { type: "GET", dataType: 'json', success: function(data) { - var browseResultEntries = mapbrowseResultEntries(data); - $.log("size:"+browseResultEntries.length); - var browseViewModel = new BrowseViewModel(browseResultEntries,null,null); - ko.applyBindings(browseViewModel,mainContent.find("#browse_breadcrumb").get(0)); - ko.applyBindings(browseViewModel,mainContent.find("#browse_result").get(0)); - enableAutocompleBrowse(); + mainContent.find("#selected_repository" ).html($("#selected_repository_tmpl" ).tmpl({repositories:data}));// selected_repository_tmpl + $.ajax("restServices/archivaServices/browseService/rootGroups", { + type: "GET", + dataType: 'json', + success: function(data) { + var browseResultEntries = mapbrowseResultEntries(data); + $.log("size:"+browseResultEntries.length); + var browseViewModel = new BrowseViewModel(browseResultEntries,null,null); + ko.applyBindings(browseViewModel,mainContent.find("#browse_breadcrumb").get(0)); + ko.applyBindings(browseViewModel,mainContent.find("#browse_result").get(0)); + enableAutocompleBrowse(); + } + }); } }); + + } enableAutocompleBrowse=function(groupId){ diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html index 24e8187b8..8c742fd04 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html @@ -25,6 +25,7 @@
+
@@ -377,3 +378,12 @@ {{/each}} + + + \ No newline at end of file