This is an automated email from the ASF dual-hosted git repository.

gaul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git


The following commit(s) were added to refs/heads/master by this push:
     new 88f0c341cf JCLOUDS-1616: Proxy credentials validation is missing in 
OkHttpCommandExecutorService API request
88f0c341cf is described below

commit 88f0c341cfc4a6508db63794846e7c3902b8e255
Author: SATYANAN-ANAND <satyanan.an...@gmail.com>
AuthorDate: Tue Aug 2 05:39:34 2022 -0700

    JCLOUDS-1616: Proxy credentials validation is missing in 
OkHttpCommandExecutorService API request
    
    Added support for credentials validation
---
 .../http/okhttp/OkHttpCommandExecutorService.java  | 33 ++++++++++++++++++----
 1 file changed, 28 insertions(+), 5 deletions(-)

diff --git 
a/drivers/okhttp/src/main/java/org/jclouds/http/okhttp/OkHttpCommandExecutorService.java
 
b/drivers/okhttp/src/main/java/org/jclouds/http/okhttp/OkHttpCommandExecutorService.java
index 750d78820e..d3144de57f 100644
--- 
a/drivers/okhttp/src/main/java/org/jclouds/http/okhttp/OkHttpCommandExecutorService.java
+++ 
b/drivers/okhttp/src/main/java/org/jclouds/http/okhttp/OkHttpCommandExecutorService.java
@@ -32,11 +32,14 @@ import java.util.Map;
 import javax.annotation.Nullable;
 import javax.inject.Named;
 
+import okhttp3.Authenticator;
+import okhttp3.Credentials;
 import okhttp3.internal.http.HttpMethod;
 import okhttp3.Headers;
 import okhttp3.MediaType;
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
+import okhttp3.Route;
 import okhttp3.RequestBody;
 import okhttp3.Response;
 
@@ -55,6 +58,7 @@ import org.jclouds.http.internal.HttpWire;
 import org.jclouds.io.ContentMetadataCodec;
 import org.jclouds.io.MutableContentMetadata;
 import org.jclouds.io.Payload;
+import org.jclouds.proxy.internal.GuiceProxyConfig;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMultimap;
@@ -66,17 +70,19 @@ public final class OkHttpCommandExecutorService extends 
BaseHttpCommandExecutorS
    private final Function<URI, Proxy> proxyForURI;
    private final OkHttpClient globalClient;
    private final String userAgent;
+   private final GuiceProxyConfig proxyConfig;
 
    @Inject
    OkHttpCommandExecutorService(HttpUtils utils, ContentMetadataCodec 
contentMetadataCodec,
          DelegatingRetryHandler retryHandler, IOExceptionRetryHandler 
ioRetryHandler,
          DelegatingErrorHandler errorHandler, HttpWire wire, Function<URI, 
Proxy> proxyForURI, OkHttpClient okHttpClient,
          @Named(PROPERTY_IDEMPOTENT_METHODS) String idempotentMethods,
-         @Named(PROPERTY_USER_AGENT) String userAgent) {
+         @Named(PROPERTY_USER_AGENT) String userAgent, GuiceProxyConfig 
proxyConfig) {
       super(utils, contentMetadataCodec, retryHandler, ioRetryHandler, 
errorHandler, wire, idempotentMethods);
       this.proxyForURI = proxyForURI;
       this.globalClient = okHttpClient;
       this.userAgent = userAgent;
+         this.proxyConfig = proxyConfig;
    }
 
    @Override
@@ -172,10 +178,27 @@ public final class OkHttpCommandExecutorService extends 
BaseHttpCommandExecutorS
 
    @Override
    protected HttpResponse invoke(Request nativeRequest) throws IOException, 
InterruptedException {
-      OkHttpClient requestScopedClient = globalClient.newBuilder()
-          .proxy(proxyForURI.apply(nativeRequest.url().uri()))
-          .build();
-
+          
+         OkHttpClient.Builder okHttpClientBuilder = globalClient.newBuilder()
+                               
.proxy(proxyForURI.apply(nativeRequest.url().uri()));
+               
+               if (proxyConfig.getCredentials().isPresent()) {
+                       Authenticator proxyAuthenticator = new Authenticator() {
+                               @Override
+                               public Request authenticate(Route route, 
Response response) throws IOException {
+                                       if (response != null && response.code() 
== 407
+                                                       && 
!response.message().toLowerCase().contains("preemptive authenticate")) {
+                                               return null;
+                                       }
+                                       String credential = 
Credentials.basic(proxyConfig.getCredentials().get().identity,
+                                                       
proxyConfig.getCredentials().get().credential);
+                                       return 
response.request().newBuilder().header("Proxy-Authorization", 
credential).build();
+                               }
+                       };
+                       
okHttpClientBuilder.proxyAuthenticator(proxyAuthenticator);
+               }
+         OkHttpClient requestScopedClient = okHttpClientBuilder.build();
+         
       Response response = requestScopedClient.newCall(nativeRequest).execute();
 
       HttpResponse.Builder<?> builder = HttpResponse.builder();

Reply via email to