998de9f
From 6483400667ee34972a392d7efef4eb817bec9862 Mon Sep 17 00:00:00 2001
82aede6
From: Mat Booth <mat.booth@redhat.com>
f789efe
Date: Tue, 17 Nov 2020 10:32:54 +0000
82aede6
Subject: [PATCH 6/6] Remove dep on aether-connector
82aede6
82aede6
---
f789efe
 .../.factorypath                              |   3 -
f789efe
 .../org.eclipse.m2e.maven.runtime/pom.xml     |  18 +-
82aede6
 org.eclipse.m2e.core/META-INF/MANIFEST.MF     |   2 +-
f789efe
 .../nexus/AetherClientResourceFetcher.java    | 198 +++++++-----------
f789efe
 4 files changed, 79 insertions(+), 142 deletions(-)
82aede6
f789efe
diff --git a/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/.factorypath b/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/.factorypath
f789efe
index 72b8866..fe9f4ca 100644
f789efe
--- a/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/.factorypath
f789efe
+++ b/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/.factorypath
f789efe
@@ -38,9 +38,6 @@
f789efe
     <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
f789efe
     <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
f789efe
     <factorypathentry kind="VARJAR" id="M2_REPO/org/sonatype/plexus/plexus-build-api/0.0.7/plexus-build-api-0.0.7.jar" enabled="true" runInBatchMode="false"/>
f789efe
-    <factorypathentry kind="VARJAR" id="M2_REPO/io/takari/aether/aether-connector-okhttp/0.17.8/aether-connector-okhttp-0.17.8.jar" enabled="true" runInBatchMode="false"/>
f789efe
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/3.14.1/okhttp-3.14.1.jar" enabled="true" runInBatchMode="false"/>
f789efe
-    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/1.17.3/okio-1.17.3.jar" enabled="true" runInBatchMode="false"/>
f789efe
     <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-impl/1.4.1/maven-resolver-impl-1.4.1.jar" enabled="true" runInBatchMode="false"/>
f789efe
     <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-connector-basic/1.4.1/maven-resolver-connector-basic-1.4.1.jar" enabled="true" runInBatchMode="false"/>
f789efe
     <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-transport-wagon/1.4.1/maven-resolver-transport-wagon-1.4.1.jar" enabled="true" runInBatchMode="false"/>
82aede6
diff --git a/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/pom.xml b/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/pom.xml
f789efe
index 0ff5875..10b69ff 100644
82aede6
--- a/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/pom.xml
82aede6
+++ b/m2e-maven-runtime/org.eclipse.m2e.maven.runtime/pom.xml
f789efe
@@ -76,17 +76,6 @@
82aede6
       <version>${plexus-build-api.version}</version>
82aede6
       <optional>true</optional>
82aede6
     </dependency>
82aede6
-    <dependency>
82aede6
-      <groupId>io.takari.aether</groupId>
82aede6
-      <artifactId>aether-connector-okhttp</artifactId>
82aede6
-      <version>${okhttp-connector.version}</version>
82aede6
-      <exclusions>
82aede6
-        <exclusion>
82aede6
-          <groupId>org.eclipse.aether</groupId>
82aede6
-          <artifactId>aether-util</artifactId>
82aede6
-        </exclusion>
82aede6
-      </exclusions>
82aede6
-    </dependency>
82aede6
     <dependency>
82aede6
       <groupId>org.apache.maven.resolver</groupId>
82aede6
       <artifactId>maven-resolver-impl</artifactId>
f789efe
@@ -106,6 +95,10 @@
f789efe
       <groupId>org.apache.maven.wagon</groupId>
f789efe
       <artifactId>wagon-file</artifactId>
f789efe
     </dependency>
f789efe
+    <dependency>
f789efe
+      <groupId>org.apache.maven.wagon</groupId>
f789efe
+      <artifactId>wagon-http</artifactId>
f789efe
+    </dependency>
f789efe
     <dependency>
f789efe
       <groupId>org.fusesource.jansi</groupId>
f789efe
       <artifactId>jansi</artifactId>
f789efe
@@ -143,8 +136,7 @@
82aede6
               org.codehaus.plexus.*;provider=m2e,
82aede6
               org.sonatype.plexus.*;provider=m2e,
82aede6
               org.eclipse.aether.*;provider=m2e,
82aede6
-              com.google.inject.*;provider=m2e,
82aede6
-              io.takari.*;provider=m2e
82aede6
+              com.google.inject.*;provider=m2e
82aede6
             </_exportcontents>
82aede6
 
82aede6
             <Import-Package>
82aede6
diff --git a/org.eclipse.m2e.core/META-INF/MANIFEST.MF b/org.eclipse.m2e.core/META-INF/MANIFEST.MF
f789efe
index 7f97012..6d8a47f 100644
82aede6
--- a/org.eclipse.m2e.core/META-INF/MANIFEST.MF
82aede6
+++ b/org.eclipse.m2e.core/META-INF/MANIFEST.MF
f789efe
@@ -19,7 +19,7 @@ Require-Bundle: org.eclipse.osgi;bundle-version="3.10.0",
82aede6
  com.google.guava;bundle-version="[20.0,29.0)"
82aede6
 Bundle-ActivationPolicy: lazy
82aede6
 Bundle-ClassPath: .
82aede6
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
82aede6
+Bundle-RequiredExecutionEnvironment: JavaSE-11
82aede6
 Export-Package: org.eclipse.m2e.core,
82aede6
  org.eclipse.m2e.core.archetype;x-friends:="org.eclipse.m2e.core.ui",
82aede6
  org.eclipse.m2e.core.embedder,
82aede6
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java
f789efe
index b311824..b508478 100644
82aede6
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java
f789efe
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/index/nexus/AetherClientResourceFetcher.java
f789efe
@@ -15,21 +15,27 @@ package org.eclipse.m2e.core.internal.index.nexus;
f789efe
 
f789efe
 import java.io.BufferedOutputStream;
f789efe
 import java.io.File;
f789efe
+import java.io.FileInputStream;
f789efe
 import java.io.FileNotFoundException;
f789efe
 import java.io.FileOutputStream;
f789efe
 import java.io.IOException;
f789efe
 import java.io.InputStream;
f789efe
 import java.io.OutputStream;
82aede6
-import java.net.MalformedURLException;
82aede6
-import java.net.URL;
82aede6
-import java.security.NoSuchAlgorithmException;
82aede6
-import java.util.HashMap;
82aede6
-import java.util.Map;
82aede6
-
82aede6
-import javax.net.ssl.SSLContext;
82aede6
-
82aede6
-import org.slf4j.Logger;
82aede6
-import org.slf4j.LoggerFactory;
f789efe
+import java.net.Authenticator;
f789efe
+import java.net.InetSocketAddress;
f789efe
+import java.net.PasswordAuthentication;
f789efe
+import java.net.Proxy;
f789efe
+import java.net.ProxySelector;
f789efe
+import java.net.SocketAddress;
f789efe
+import java.net.URI;
f789efe
+import java.net.http.HttpClient;
f789efe
+import java.net.http.HttpClient.Redirect;
f789efe
+import java.net.http.HttpClient.Version;
f789efe
+import java.net.http.HttpRequest;
f789efe
+import java.net.http.HttpResponse;
f789efe
+import java.net.http.HttpResponse.BodyHandlers;
f789efe
+import java.time.Duration;
f789efe
+import java.util.List;
f789efe
 
f789efe
 import org.eclipse.core.runtime.IProgressMonitor;
f789efe
 import org.eclipse.core.runtime.NullProgressMonitor;
f789efe
@@ -41,161 +47,103 @@ import org.apache.maven.wagon.proxy.ProxyInfo;
f789efe
 import org.apache.maven.wagon.proxy.ProxyUtils;
f789efe
 
f789efe
 import org.eclipse.m2e.core.internal.MavenPluginActivator;
82aede6
-import org.eclipse.m2e.core.internal.Messages;
82aede6
-
82aede6
-import io.takari.aether.client.AetherClient;
82aede6
-import io.takari.aether.client.AetherClientAuthentication;
82aede6
-import io.takari.aether.client.AetherClientConfig;
82aede6
-import io.takari.aether.client.AetherClientProxy;
82aede6
-import io.takari.aether.client.Response;
82aede6
-import io.takari.aether.okhttp.OkHttpAetherClient;
f789efe
 
f789efe
 
f789efe
 public class AetherClientResourceFetcher implements ResourceFetcher {
f789efe
 
82aede6
-  private AetherClient aetherClient;
f789efe
+  private HttpClient client;
f789efe
 
82aede6
-  private final AuthenticationInfo authInfo;
f789efe
+  private Authenticator auth;
f789efe
 
82aede6
-  private final ProxyInfo proxyInfo;
f789efe
+  private ProxySelector proxy;
f789efe
 
82aede6
-  private final String userAgent;
82aede6
-
82aede6
-  private final IProgressMonitor monitor;
f789efe
+  private IProgressMonitor monitor;
f789efe
 
f789efe
   private String baseUrl;
f789efe
 
f789efe
   public AetherClientResourceFetcher(final AuthenticationInfo authInfo, final ProxyInfo proxyInfo,
f789efe
       final IProgressMonitor monitor) {
82aede6
-    this.authInfo = authInfo;
82aede6
-    this.proxyInfo = proxyInfo;
f789efe
+    if(authInfo != null) {
f789efe
+      auth = new Authenticator() {
f789efe
+        @Override
f789efe
+        protected PasswordAuthentication getPasswordAuthentication() {
f789efe
+          return new PasswordAuthentication(authInfo.getUserName(), authInfo.getPassword().toCharArray());
f789efe
+        }
f789efe
+      };
f789efe
+    }
f789efe
+    proxy = new WagonProxySelector(proxyInfo);
f789efe
     this.monitor = (monitor != null) ? monitor : new NullProgressMonitor();
82aede6
-    this.userAgent = MavenPluginActivator.getUserAgent();
f789efe
   }
f789efe
 
82aede6
-  public void connect(String id, String url) {
82aede6
-    this.baseUrl = url;
82aede6
-    aetherClient = new OkHttpAetherClient(
82aede6
-        new AetherClientConfigAdapter(baseUrl, authInfo, proxyInfo, userAgent,
82aede6
-        new HashMap<String, String>()));
f789efe
+  public void connect(String id, String url) throws IOException {
f789efe
+    baseUrl = url;
f789efe
+    HttpClient.Builder builder = HttpClient.newBuilder().version(Version.HTTP_1_1).followRedirects(Redirect.NORMAL)
f789efe
+        .connectTimeout(Duration.ofSeconds(10)).proxy(proxy);
f789efe
+    if(auth != null) {
f789efe
+      builder.authenticator(auth);
f789efe
+    }
f789efe
+    client = builder.build();
f789efe
   }
f789efe
 
f789efe
   public void disconnect() throws IOException {
82aede6
-    aetherClient.close();
f789efe
   }
f789efe
 
82aede6
-  @Deprecated
f789efe
+  public InputStream retrieve(String name) throws IOException, FileNotFoundException {
f789efe
+    final File target = File.createTempFile(name, "");
f789efe
+    retrieve(name, target);
f789efe
+    return new FileInputStream(target) {
f789efe
+      @Override
f789efe
+      public void close() throws IOException {
f789efe
+        super.close();
f789efe
+        target.delete();
f789efe
+      }
f789efe
+    };
f789efe
+  }
f789efe
+
f789efe
   public void retrieve(String name, File targetFile) throws IOException, FileNotFoundException {
82aede6
-    String url = baseUrl + "/" + name;
82aede6
-    try (Response response = aetherClient.get(url);
82aede6
-        InputStream is = response.getInputStream();
82aede6
-        OutputStream os = new BufferedOutputStream(new FileOutputStream(targetFile))) {
f789efe
+    System.out.println();
f789efe
+    System.out.println("Requesting: " + baseUrl + "/" + name);
f789efe
+    HttpRequest request = HttpRequest.newBuilder().uri(URI.create(baseUrl + "/" + name)).timeout(Duration.ofMinutes(2))
f789efe
+        .header("User-Agent", MavenPluginActivator.getUserAgent()).GET().build();
f789efe
+    System.out.println(request.headers());
f789efe
+    try (OutputStream os = new BufferedOutputStream(new FileOutputStream(targetFile))) {
f789efe
+      HttpResponse<InputStream> response = client.send(request, BodyHandlers.ofInputStream());
f789efe
+      System.out.println(response.headers());
f789efe
       final byte[] buffer = new byte[1024 * 1024];
f789efe
       int n = 0;
82aede6
-      while(-1 != (n = is.read(buffer))) {
f789efe
+      while(-1 != (n = response.body().read(buffer))) {
f789efe
         os.write(buffer, 0, n);
f789efe
         if(monitor.isCanceled()) {
f789efe
           throw new OperationCanceledException();
f789efe
         }
f789efe
       }
f789efe
+    } catch(InterruptedException ex) {
f789efe
+      throw new OperationCanceledException();
f789efe
     }
f789efe
+    monitor.worked(1);
f789efe
   }
f789efe
 
82aede6
-  public InputStream retrieve(String name) throws IOException, FileNotFoundException {
82aede6
-    String url = baseUrl + "/" + name;
82aede6
-    Response response = aetherClient.get(url);
82aede6
-
82aede6
-    return response.getInputStream();
82aede6
-  }
82aede6
-
82aede6
-  class AetherClientConfigAdapter extends AetherClientConfig {
82aede6
-    private final Logger log = LoggerFactory.getLogger(AetherClientConfigAdapter.class);
82aede6
-
82aede6
-    int connectionTimeout;
82aede6
-
82aede6
-    int requestTimeout;
82aede6
-
82aede6
-    AuthenticationInfo authInfo;
82aede6
-
82aede6
-    ProxyInfo proxyInfo;
82aede6
-
82aede6
-    String userAgent;
82aede6
-
82aede6
-    String baseUrl;
f789efe
+  static class WagonProxySelector extends ProxySelector {
f789efe
 
82aede6
-    Map<String, String> headers;
f789efe
+    private ProxyInfo proxyInfo;
f789efe
 
82aede6
-    public AetherClientConfigAdapter(String baseUrl, AuthenticationInfo authInfo, ProxyInfo proxyInfo, String userAgent,
82aede6
-        Map<String, String> headers) {
82aede6
-      this.baseUrl = baseUrl;
82aede6
-      this.authInfo = authInfo;
f789efe
+    public WagonProxySelector(ProxyInfo proxyInfo) {
f789efe
       this.proxyInfo = proxyInfo;
82aede6
-      this.userAgent = userAgent;
82aede6
-      this.headers = headers;
82aede6
-
82aede6
-      try {
82aede6
-        // ensure JVM's trust & key stores are used
82aede6
-        setSslSocketFactory(SSLContext.getDefault().getSocketFactory());
82aede6
-      } catch(NoSuchAlgorithmException ex) {
82aede6
-        log.warn(Messages.AetherClientConfigAdapter_error_sslContext);
82aede6
-      }
82aede6
-    }
82aede6
-
82aede6
-    public String getUserAgent() {
82aede6
-      return userAgent;
f789efe
     }
f789efe
 
82aede6
-    public int getConnectionTimeout() {
82aede6
-      return connectionTimeout;
82aede6
-    }
82aede6
-
82aede6
-    public int getRequestTimeout() {
82aede6
-      return requestTimeout;
82aede6
-    }
82aede6
-
82aede6
-    public AetherClientProxy getProxy() {
82aede6
-
82aede6
-      if(proxyInfo == null) {
82aede6
-        return null;
f789efe
+    public List<Proxy> select(URI uri) {
f789efe
+      if(proxyInfo == null || ProxyUtils.validateNonProxyHosts(proxyInfo, uri.getHost())) {
f789efe
+        return List.of(Proxy.NO_PROXY);
f789efe
       }
82aede6
-      //Bug 512006 don't return the proxy for nonProxyHosts 
82aede6
-      try {
82aede6
-        if(ProxyUtils.validateNonProxyHosts(proxyInfo, new URL(baseUrl).getHost())) {
82aede6
-          return null;
82aede6
-        }
82aede6
-      } catch(MalformedURLException ignore) {
82aede6
-      }
82aede6
-
82aede6
-      return new AetherClientProxy() {
82aede6
-
82aede6
-        public String getHost() {
82aede6
-          return proxyInfo.getHost();
82aede6
-        }
82aede6
-
82aede6
-        public int getPort() {
82aede6
-          return proxyInfo.getPort();
82aede6
-        }
82aede6
-
82aede6
-        public AetherClientAuthentication getAuthentication() {
82aede6
-
82aede6
-          if(proxyInfo != null && proxyInfo.getUserName() != null && proxyInfo.getPassword() != null) {
82aede6
-            return new AetherClientAuthentication(proxyInfo.getUserName(), proxyInfo.getPassword());
82aede6
-          }
82aede6
-          return null;
82aede6
-        }
82aede6
-      };
82aede6
-    }
82aede6
-
82aede6
-    public AetherClientAuthentication getAuthentication() {
82aede6
-
82aede6
-      if(authInfo != null) {
82aede6
-        return new AetherClientAuthentication(authInfo.getUserName(), authInfo.getPassword());
82aede6
+      Proxy.Type type = Proxy.Type.HTTP;
82aede6
+      if(!proxyInfo.getType().equals(ProxyInfo.PROXY_HTTP)) {
82aede6
+        type = Proxy.Type.SOCKS;
f789efe
       }
f789efe
-      return null;
82aede6
+      Proxy p = new Proxy(type, new InetSocketAddress(proxyInfo.getHost(), proxyInfo.getPort()));
82aede6
+      return List.of(p);
f789efe
     }
82aede6
 
f789efe
-    public Map<String, String> getHeaders() {
f789efe
-      return headers;
f789efe
+    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
f789efe
     }
f789efe
   }
f789efe
 }
82aede6
-- 
f789efe
2.28.0
82aede6