From b36cafd1c99ba2bc20739d4c6b59a9948a43e780 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Tue, 2 Oct 2012 19:57:47 +0000 Subject: [PATCH] implements use of ProxyConnectorRules when fetching files from remote git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1393146 13f79535-47bb-0310-9956-ffa450edef68 --- .../DefaultRepositoryProxyConnectors.java | 69 +++++++++++++-- .../DefaultProxyConnectorRuleAdmin.java | 4 +- .../src/main/webapp/js/redback/redback.js | 84 +++++++++---------- 3 files changed, 105 insertions(+), 52 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java index f15e7866d..bf2a8039f 100644 --- a/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java +++ b/archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java @@ -22,11 +22,14 @@ package org.apache.archiva.proxy; import com.google.common.io.Files; import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.beans.NetworkProxy; +import org.apache.archiva.admin.model.beans.ProxyConnectorRuleType; import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin; import org.apache.archiva.configuration.ArchivaConfiguration; +import org.apache.archiva.configuration.Configuration; import org.apache.archiva.configuration.ConfigurationNames; import org.apache.archiva.configuration.NetworkProxyConfiguration; import org.apache.archiva.configuration.ProxyConnectorConfiguration; +import org.apache.archiva.configuration.ProxyConnectorRuleConfiguration; import org.apache.archiva.model.ArtifactReference; import org.apache.archiva.model.Keys; import org.apache.archiva.model.RepositoryURL; @@ -92,7 +95,7 @@ import java.util.concurrent.ConcurrentHashMap; * @todo exception handling needs work - "not modified" is not really an exceptional case, and it has more layers than * your average brown onion */ -@Service ( "repositoryProxyConnectors#default" ) +@Service ("repositoryProxyConnectors#default") public class DefaultRepositoryProxyConnectors implements RepositoryProxyConnectors, RegistryListener { @@ -102,21 +105,21 @@ public class DefaultRepositoryProxyConnectors * */ @Inject - @Named ( value = "archivaConfiguration#default" ) + @Named (value = "archivaConfiguration#default") private ArchivaConfiguration archivaConfiguration; /** * */ @Inject - @Named ( value = "repositoryContentFactory#default" ) + @Named (value = "repositoryContentFactory#default") private RepositoryContentFactory repositoryFactory; /** * */ @Inject - @Named ( value = "metadataTools#default" ) + @Named (value = "metadataTools#default") private MetadataTools metadataTools; /** @@ -157,7 +160,7 @@ public class DefaultRepositoryProxyConnectors * */ @Inject - @Named ( value = "archivaTaskScheduler#repository" ) + @Named (value = "archivaTaskScheduler#repository") private ArchivaTaskScheduler scheduler; @Inject @@ -171,14 +174,19 @@ public class DefaultRepositoryProxyConnectors } - @SuppressWarnings ( "unchecked" ) + @SuppressWarnings ("unchecked") private void initConnectorsAndNetworkProxies() { ProxyConnectorOrderComparator proxyOrderSorter = new ProxyConnectorOrderComparator(); this.proxyConnectorMap.clear(); - List proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors(); + Configuration configuration = archivaConfiguration.getConfiguration(); + + List allProxyConnectorRuleConfigurations = + configuration.getProxyConnectorRuleConfigurations(); + + List proxyConfigs = configuration.getProxyConnectors(); for ( ProxyConnectorConfiguration proxyConfig : proxyConfigs ) { String key = proxyConfig.getSourceRepoId(); @@ -214,6 +222,29 @@ public class DefaultRepositoryProxyConnectors } connector.setWhitelist( whitelist ); + List proxyConnectorRuleConfigurations = + findProxyConnectorRules( connector.getSourceRepository().getId(), + connector.getTargetRepository().getId(), + allProxyConnectorRuleConfigurations ); + + if ( !proxyConnectorRuleConfigurations.isEmpty() ) + { + for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : proxyConnectorRuleConfigurations ) + { + if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(), + ProxyConnectorRuleType.BLACK_LIST.getRuleType() ) ) + { + connector.getBlacklist().add( proxyConnectorRuleConfiguration.getPattern() ); + } + + if ( StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(), + ProxyConnectorRuleType.WHITE_LIST.getRuleType() ) ) + { + connector.getWhitelist().add( proxyConnectorRuleConfiguration.getPattern() ); + } + } + } + // Get other connectors List connectors = this.proxyConnectorMap.get( key ); if ( connectors == null ) @@ -263,6 +294,28 @@ public class DefaultRepositoryProxyConnectors } + private List findProxyConnectorRules( String sourceRepository, + String targetRepository, + List all ) + { + List proxyConnectorRuleConfigurations = + new ArrayList(); + + for ( ProxyConnectorRuleConfiguration proxyConnectorRuleConfiguration : all ) + { + for ( ProxyConnectorConfiguration proxyConnector : proxyConnectorRuleConfiguration.getProxyConnectors() ) + { + if ( StringUtils.equals( sourceRepository, proxyConnector.getSourceRepoId() ) && StringUtils.equals( + targetRepository, proxyConnector.getTargetRepoId() ) ) + { + proxyConnectorRuleConfigurations.add( proxyConnectorRuleConfiguration ); + } + } + } + + return proxyConnectorRuleConfigurations; + } + public File fetchFromProxies( ManagedRepositoryContent repository, ArtifactReference artifact ) throws ProxyDownloadException { @@ -1171,7 +1224,7 @@ public class DefaultRepositoryProxyConnectors { synchronized ( this.proxyConnectorMap ) { - List ret = (List) this.proxyConnectorMap.get( repository.getId() ); + List ret = this.proxyConnectorMap.get( repository.getId() ); if ( ret == null ) { return Collections.emptyList(); diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/proxyconnectorrule/DefaultProxyConnectorRuleAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/proxyconnectorrule/DefaultProxyConnectorRuleAdmin.java index d05c65a2f..71b656058 100644 --- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/proxyconnectorrule/DefaultProxyConnectorRuleAdmin.java +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/proxyconnectorrule/DefaultProxyConnectorRuleAdmin.java @@ -127,7 +127,7 @@ public class DefaultProxyConnectorRuleAdmin { if ( StringUtils.equals( proxyConnectorRuleConfiguration.getPattern(), proxyConnectorRule.getPattern() ) && StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(), - proxyConnectorRule.getProxyConnectorRuleType().toString() ) ) + proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ) ) { toSave = true; } @@ -154,7 +154,7 @@ public class DefaultProxyConnectorRuleAdmin { if ( StringUtils.equals( proxyConnectorRuleConfiguration.getPattern(), proxyConnectorRule.getPattern() ) && StringUtils.equals( proxyConnectorRuleConfiguration.getRuleType(), - proxyConnectorRule.getProxyConnectorRuleType().toString() ) ) + proxyConnectorRule.getProxyConnectorRuleType().getRuleType() ) ) { List proxyConnectors = new ArrayList( proxyConnectorRule.getProxyConnectors().size() ); diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/redback.js b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/redback.js index b4f48d294..6a1bc26d0 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/redback.js +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/redback.js @@ -137,50 +137,50 @@ define("redback",["jquery","utils","jquery.validate","jquery.json","knockout", $('#modal-register-footer').append(smallSpinnerImg()); - $.ajax({ - url: "restServices/archivaServices/archivaAdministrationService/applicationUrl", - type: "GET", - dataType: 'text', - success: function(data){ - $.log("applicationUrl ok:"+data); - - var user = { - username: $("#user-register-form-username").val(), - fullName: $("#user-register-form-fullname").val(), - email: $("#user-register-form-email").val() - }; - - var userRegistrationRequest=new UserRegistrationRequest(user,data); - $.ajax({ - url: 'restServices/redbackServices/userService/registerUser', - data: JSON.stringify(userRegistrationRequest), - type: 'POST', - contentType: "application/json", - success: function(result){ - var registered = false; - if (result == "-1") { - registered = false; - } else { - registered = true; - } - - if (registered == true) { + $.ajax({ + url: "restServices/archivaServices/archivaAdministrationService/applicationUrl", + type: "GET", + dataType: 'text', + success: function(data){ + $.log("applicationUrl ok:"+data); + + var user = { + username: $("#user-register-form-username").val(), + fullName: $("#user-register-form-fullname").val(), + email: $("#user-register-form-email").val() + }; + + var userRegistrationRequest=new UserRegistrationRequest(user,data); + $.ajax({ + url: 'restServices/redbackServices/userService/registerUser', + data: JSON.stringify(userRegistrationRequest), + type: 'POST', + contentType: "application/json", + success: function(result){ + var registered = false; + if (result == "-1") { + registered = false; + } else { + registered = true; + } + + if (registered == true) { + window.modalRegisterWindow.modal('hide'); + $("#register-link").hide(); + // FIXME i18n + displaySuccessMessage("registered your key has been sent"); + } + }, + complete: function(){ + $("#modal-register-ok").removeAttr("disabled"); + removeSmallSpinnerImg(); + }, + error: function(result) { window.modalRegisterWindow.modal('hide'); - $("#register-link").hide(); - // FIXME i18n - displaySuccessMessage("registered your key has been sent"); } - }, - complete: function(){ - $("#modal-register-ok").removeAttr("disabled"); - removeSmallSpinnerImg(); - }, - error: function(result) { - window.modalRegisterWindow.modal('hide'); - } - }); - } - }); + }); + } + }); } -- 2.39.5