You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by br...@apache.org on 2008/05/27 04:33:48 UTC

svn commit: r660354 - in /maven/wagon/trunk: ./ wagon-provider-api/src/main/java/org/apache/maven/wagon/ wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/provider...

Author: brett
Date: Mon May 26 19:33:36 2008
New Revision: 660354

URL: http://svn.apache.org/viewvc?rev=660354&view=rev
Log:
[WAGON-82] make it possible to request a different proxy from the calling application
Submitted by: Jochen Wiedmann

Added:
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyInfoProvider.java   (with props)
Modified:
    maven/wagon/trunk/pom.xml
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java
    maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpsWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java

Modified: maven/wagon/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/pom.xml?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/pom.xml (original)
+++ maven/wagon/trunk/pom.xml Mon May 26 19:33:36 2008
@@ -255,5 +255,8 @@
     <contributor>
       <name>Jason Dillon</name>
     </contributor>
+    <contributor>
+      <name>Jochen Wiedmann</name>
+    </contributor>
   </contributors>
 </project>

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java Mon May 26 19:33:36 2008
@@ -29,6 +29,7 @@
 import org.apache.maven.wagon.events.TransferEventSupport;
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
 import org.apache.maven.wagon.proxy.ProxyUtils;
 import org.apache.maven.wagon.repository.Repository;
 import org.apache.maven.wagon.resource.Resource;
@@ -50,7 +51,6 @@
  *
  * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
  * @version $Id$
- * @todo [BP] The proxy information should probably be validated to match the wagon type
  */
 public abstract class AbstractWagon
     implements Wagon
@@ -63,14 +63,14 @@
 
     protected TransferEventSupport transferEventSupport = new TransferEventSupport();
 
-    protected ProxyInfo proxyInfo;
-
     protected AuthenticationInfo authenticationInfo;
 
     protected boolean interactive = true;
     
     private int connectionTimeout = 60000;
 
+    private ProxyInfoProvider proxyInfoProvider;
+
     // ----------------------------------------------------------------------
     // Accessors
     // ----------------------------------------------------------------------
@@ -82,7 +82,7 @@
 
     public ProxyInfo getProxyInfo()
     {
-        return proxyInfo;
+        return proxyInfoProvider.getProxyInfo( null );
     }
 
     public AuthenticationInfo getAuthenticationInfo()
@@ -103,7 +103,7 @@
     public void connect( Repository repository )
         throws ConnectionException, AuthenticationException
     {
-        connect( repository, null, null );
+        connect( repository, null, (ProxyInfoProvider) null );
     }
 
     public void connect( Repository repository, ProxyInfo proxyInfo )
@@ -112,15 +112,35 @@
         connect( repository, null, proxyInfo );
     }
 
+    public void connect( Repository repository, ProxyInfoProvider proxyInfoProvider )
+        throws ConnectionException, AuthenticationException
+    {
+        connect( repository, null, proxyInfoProvider );
+    }
+
     public void connect( Repository repository, AuthenticationInfo authenticationInfo )
         throws ConnectionException, AuthenticationException
     {
-        connect( repository, authenticationInfo, null );
+        connect( repository, authenticationInfo, (ProxyInfoProvider) null );
     }
 
     public void connect( Repository repository, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo )
         throws ConnectionException, AuthenticationException
     {
+        final ProxyInfo proxy = proxyInfo;
+        connect( repository, authenticationInfo, new ProxyInfoProvider()
+        {
+            public ProxyInfo getProxyInfo( String protocol )
+            {
+                return proxy;
+            }
+        } );
+    }
+    
+    public void connect( Repository repository, AuthenticationInfo authenticationInfo,
+                         ProxyInfoProvider proxyInfoProvider )
+        throws ConnectionException, AuthenticationException
+    {
         if ( repository == null )
         {
             throw new IllegalStateException( "The repository specified cannot be null." );
@@ -148,14 +168,6 @@
 
         // TODO: Do these needs to be fields, or are they only used in openConnection()?
         this.authenticationInfo = authenticationInfo;
-        this.proxyInfo = null;
-        if ( proxyInfo != null )
-        {
-            if ( !ProxyUtils.validateNonProxyHosts( proxyInfo, this.repository.getHost() ) )
-            {
-                this.proxyInfo = proxyInfo;
-            }
-        }
         
         fireSessionOpening();
 
@@ -753,4 +765,17 @@
     {
         throw new UnsupportedOperationException( "The wagon you are using has not implemented resourceExists()" );
     }
+
+    protected ProxyInfo getProxyInfo( String protocol, String host )
+    {
+        if ( proxyInfoProvider != null )
+        {
+            ProxyInfo proxyInfo = proxyInfoProvider.getProxyInfo( protocol );
+            if ( !ProxyUtils.validateNonProxyHosts( proxyInfo, host ) )
+            {
+                return proxyInfo;
+            }
+        }
+        return null;
+    }
 }

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java Mon May 26 19:33:36 2008
@@ -25,6 +25,7 @@
 import org.apache.maven.wagon.events.SessionListener;
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
 import org.apache.maven.wagon.repository.Repository;
 
 import java.io.File;
@@ -170,11 +171,23 @@
     /**
      * Initiate the connection to the repository.
      *
+     * @param source the repository to connect to
+     * @param proxyInfoProvider  the provider to obtain a network proxy to use to connect to the remote repository
+     * @throws ConnectionException if there is a problem connecting
+     * @throws org.apache.maven.wagon.authentication.AuthenticationException
+     *                             if the credentials for connecting are not sufficient
+     */
+    void connect( Repository source, ProxyInfoProvider proxyInfoProvider )
+        throws ConnectionException, AuthenticationException;
+
+    /**
+     * Initiate the connection to the repository.
+     *
      * @param source             the repository to connect to
      * @param authenticationInfo authentication credentials for connecting
      * @throws ConnectionException if there is a problem connecting
      * @throws org.apache.maven.wagon.authentication.AuthenticationException
-     *                             if ther credentials for connecting are not sufficient
+     *                             if the credentials for connecting are not sufficient
      */
     void connect( Repository source, AuthenticationInfo authenticationInfo )
         throws ConnectionException, AuthenticationException;
@@ -187,7 +200,7 @@
      * @param proxyInfo          the network proxy to use to connect to the remote repository
      * @throws ConnectionException if there is a problem connecting
      * @throws org.apache.maven.wagon.authentication.AuthenticationException
-     *                             if ther credentials for connecting are not sufficient
+     *                             if the credentials for connecting are not sufficient
      */
     void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo )
         throws ConnectionException, AuthenticationException;
@@ -195,6 +208,19 @@
     /**
      * Initiate the connection to the repository.
      *
+     * @param source             the repository to connect to
+     * @param authenticationInfo authentication credentials for connecting
+     * @param proxyInfoProvider  the provider to obtain a network proxy to use to connect to the remote repository
+     * @throws ConnectionException if there is a problem connecting
+     * @throws org.apache.maven.wagon.authentication.AuthenticationException
+     *                             if the credentials for connecting are not sufficient
+     */
+    void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider )
+        throws ConnectionException, AuthenticationException;
+
+    /**
+     * Initiate the connection to the repository.
+     *
      * @throws ConnectionException if there is a problem connecting
      * @throws org.apache.maven.wagon.authentication.AuthenticationException
      *                             if ther credentials for connecting are not sufficient

Added: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyInfoProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyInfoProvider.java?rev=660354&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyInfoProvider.java (added)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyInfoProvider.java Mon May 26 19:33:36 2008
@@ -0,0 +1,33 @@
+package org.apache.maven.wagon.proxy;
+
+/*
+ * 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.
+ */
+
+/**
+ * Interface of an object, which provides the proxy settings. Typically, this is the artifact manager.
+ */
+public interface ProxyInfoProvider
+{
+    /**
+     * Returns the proxy settings for the given protocol.
+     * 
+     * @return Proxy settings or null, if no proxy is configured for this protocol.
+     */
+    ProxyInfo getProxyInfo( String protocol );
+}

Propchange: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyInfoProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java Mon May 26 19:33:36 2008
@@ -191,7 +191,7 @@
         previousHttpProxyPort = System.getProperty( "http.proxyPort" );
         previousProxyExclusions = System.getProperty( "http.nonProxyHosts" );
 
-        final ProxyInfo proxyInfo = this.proxyInfo;
+        final ProxyInfo proxyInfo = getProxyInfo( "http", getRepository().getHost() );
         if ( proxyInfo != null )
         {
             System.setProperty( "http.proxyHost", proxyInfo.getHost() );

Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpsWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpsWagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpsWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpsWagon.java Mon May 26 19:33:36 2008
@@ -51,7 +51,7 @@
         previousHttpsProxyHost = System.getProperty( "https.proxyHost" );
         previousHttpsProxyPort = System.getProperty( "https.proxyPort" );
         
-        final ProxyInfo proxyInfo = this.proxyInfo;
+        final ProxyInfo proxyInfo = getProxyInfo( "https", getRepository().getHost() );
         if ( proxyInfo != null )
         {
             System.setProperty( "https.proxyHost", proxyInfo.getHost() );

Modified: maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java Mon May 26 19:33:36 2008
@@ -49,6 +49,7 @@
 import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.proxy.ProxyInfo;
 import org.apache.maven.wagon.repository.Repository;
 import org.apache.maven.wagon.resource.Resource;
 import org.codehaus.plexus.util.IOUtil;
@@ -94,6 +95,7 @@
 
         HostConfiguration hc = new HostConfiguration();
 
+        ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
         if ( proxyInfo != null )
         {
             String proxyUsername = proxyInfo.getUserName();

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java Mon May 26 19:33:36 2008
@@ -19,11 +19,11 @@
  * under the License.
  */
 
-import ch.ethz.ssh2.Connection;
-import ch.ethz.ssh2.HTTPProxyData;
-import ch.ethz.ssh2.ProxyData;
-import ch.ethz.ssh2.Session;
-import ch.ethz.ssh2.StreamGobbler;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 
 import org.apache.maven.wagon.CommandExecutionException;
 import org.apache.maven.wagon.Streams;
@@ -33,13 +33,14 @@
 import org.apache.maven.wagon.providers.ssh.SshWagon;
 import org.apache.maven.wagon.providers.ssh.interactive.InteractiveUserInfo;
 import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider;
+import org.apache.maven.wagon.proxy.ProxyInfo;
 import org.codehaus.plexus.util.IOUtil;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import ch.ethz.ssh2.Connection;
+import ch.ethz.ssh2.HTTPProxyData;
+import ch.ethz.ssh2.ProxyData;
+import ch.ethz.ssh2.Session;
+import ch.ethz.ssh2.StreamGobbler;
 
 /**
  * AbstractGanymedWagon 
@@ -82,6 +83,8 @@
 
         connection = new Connection( host, port );
 
+        // TODO: should the protocol be http?
+        ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
         if ( proxyInfo != null && proxyInfo.getHost() != null )
         {
             ProxyData proxy = new HTTPProxyData( proxyInfo.getHost(), proxyInfo.getPort(), proxyInfo.getUserName(),

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java?rev=660354&r1=660353&r2=660354&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java Mon May 26 19:33:36 2008
@@ -43,6 +43,7 @@
 import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostChangedException;
 import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider;
 import org.apache.maven.wagon.providers.ssh.knownhost.UnknownHostException;
+import org.apache.maven.wagon.proxy.ProxyInfo;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringInputStream;
 
@@ -124,6 +125,8 @@
             throw new AuthenticationException( "Cannot connect. Reason: " + e.getMessage(), e );
         }
 
+        // TODO: should the protocol be http? Can then use SOCKS5 has a protocol also. If so, retain "scp" for backwards compat
+        ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
         if ( proxyInfo != null && proxyInfo.getHost() != null )
         {
             Proxy proxy;



---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org