]> source.dussan.org Git - archiva.git/commitdiff
implements use of ProxyConnectorRules when fetching files from remote
authorOlivier Lamy <olamy@apache.org>
Tue, 2 Oct 2012 19:57:47 +0000 (19:57 +0000)
committerOlivier Lamy <olamy@apache.org>
Tue, 2 Oct 2012 19:57:47 +0000 (19:57 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1393146 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/archiva/proxy/DefaultRepositoryProxyConnectors.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/proxyconnectorrule/DefaultProxyConnectorRuleAdmin.java
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/redback/redback.js

index f15e7866d2312e678d6a6734dca4d5669c633204..bf2a8039fad40796e6e8d7b00a73462a5879fdf6 100644 (file)
@@ -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<ProxyConnectorConfiguration> proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors();
+        Configuration configuration = archivaConfiguration.getConfiguration();
+
+        List<ProxyConnectorRuleConfiguration> allProxyConnectorRuleConfigurations =
+            configuration.getProxyConnectorRuleConfigurations();
+
+        List<ProxyConnectorConfiguration> proxyConfigs = configuration.getProxyConnectors();
         for ( ProxyConnectorConfiguration proxyConfig : proxyConfigs )
         {
             String key = proxyConfig.getSourceRepoId();
@@ -214,6 +222,29 @@ public class DefaultRepositoryProxyConnectors
                 }
                 connector.setWhitelist( whitelist );
 
+                List<ProxyConnectorRuleConfiguration> 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<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
                 if ( connectors == null )
@@ -263,6 +294,28 @@ public class DefaultRepositoryProxyConnectors
 
     }
 
+    private List<ProxyConnectorRuleConfiguration> findProxyConnectorRules( String sourceRepository,
+                                                                           String targetRepository,
+                                                                           List<ProxyConnectorRuleConfiguration> all )
+    {
+        List<ProxyConnectorRuleConfiguration> proxyConnectorRuleConfigurations =
+            new ArrayList<ProxyConnectorRuleConfiguration>();
+
+        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<ProxyConnector> ret = (List<ProxyConnector>) this.proxyConnectorMap.get( repository.getId() );
+            List<ProxyConnector> ret = this.proxyConnectorMap.get( repository.getId() );
             if ( ret == null )
             {
                 return Collections.emptyList();
index d05c65a2f2b0fd7adc40194d99fb5639c3dd0ce2..71b656058ccec306f8f10b87fc6654f7858ef23a 100644 (file)
@@ -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<ProxyConnectorConfiguration> proxyConnectors =
                     new ArrayList<ProxyConnectorConfiguration>( proxyConnectorRule.getProxyConnectors().size() );
index b4f48d2943ad7defddb3fba3e484668e831d7bd1..6a1bc26d0f0661d02b56f41f2f091b94b22f139a 100644 (file)
@@ -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');
-            }
-          });
-        }
-    });
+            });
+          }
+      });
 
   }