From f3ca0383fa28cb102344b529508fefcd11d77977 Mon Sep 17 00:00:00 2001 From: alopez Date: Thu, 11 Dec 2014 11:27:52 +0100 Subject: [PATCH] Added preemptive authentication --- pom.xml | 2 +- .../java/jenkins/plugins/http_request/HttpRequest.java | 9 +++++++-- .../jenkins/plugins/http_request/auth/Authenticator.java | 4 +++- .../http_request/auth/BasicDigestAuthentication.java | 14 +++++++++++++- .../plugins/http_request/auth/FormAuthentication.java | 8 ++++++-- .../jenkins/plugins/http_request/util/HttpClientUtil.java | 9 ++++++--- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index a79e6fe..bb20362 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ http_request - 1.8.6 + 1.8.6-vector-1 hpi HTTP Request Plugin http://wiki.jenkins-ci.org/display/JENKINS/HTTP+Request+Plugin diff --git a/src/main/java/jenkins/plugins/http_request/HttpRequest.java b/src/main/java/jenkins/plugins/http_request/HttpRequest.java index d6d86ca..3f33304 100644 --- a/src/main/java/jenkins/plugins/http_request/HttpRequest.java +++ b/src/main/java/jenkins/plugins/http_request/HttpRequest.java @@ -19,9 +19,12 @@ import jenkins.plugins.http_request.util.HttpClientUtil; import jenkins.plugins.http_request.util.NameValuePair; import jenkins.plugins.http_request.util.RequestAction; import net.sf.json.JSONObject; + import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.SystemDefaultHttpClient; +import org.apache.http.protocol.BasicHttpContext; +import org.apache.http.protocol.HttpContext; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; import org.kohsuke.stapler.StaplerRequest; @@ -29,6 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletException; + import java.io.IOException; import java.io.PrintStream; import java.net.URISyntaxException; @@ -97,6 +101,7 @@ public class HttpRequest extends Builder { logger.println("HttpMode: " + mode); final SystemDefaultHttpClient httpclient = new SystemDefaultHttpClient(); + HttpContext context = new BasicHttpContext(); logger.println("Parameters: "); final EnvVars envVars = build.getEnvironment(listener); @@ -117,13 +122,13 @@ public class HttpRequest extends Builder { } logger.println("Using authentication: " + auth.getKeyName()); - auth.authenticate(httpclient, method, logger); + auth.authenticate(httpclient, context, method, logger); } boolean tmpLogResponseBody = logResponseBody != null ? logResponseBody : getDescriptor().isDefaultLogResponseBody(); - final HttpResponse execute = clientUtil.execute(httpclient, method, logger, tmpLogResponseBody); + final HttpResponse execute = clientUtil.execute(httpclient, context, method, logger, tmpLogResponseBody); // use global configuration as default if it is unset for this job boolean returnCodeRelevant = returnCodeBuildRelevant != null diff --git a/src/main/java/jenkins/plugins/http_request/auth/Authenticator.java b/src/main/java/jenkins/plugins/http_request/auth/Authenticator.java index 1222a80..979aef3 100644 --- a/src/main/java/jenkins/plugins/http_request/auth/Authenticator.java +++ b/src/main/java/jenkins/plugins/http_request/auth/Authenticator.java @@ -2,8 +2,10 @@ package jenkins.plugins.http_request.auth; import java.io.IOException; import java.io.PrintStream; + import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.protocol.HttpContext; /** * @author Janario Oliveira @@ -12,6 +14,6 @@ public interface Authenticator { String getKeyName(); - void authenticate(DefaultHttpClient client, HttpRequestBase requestBase, + void authenticate(DefaultHttpClient client, HttpContext context, HttpRequestBase requestBase, PrintStream logger) throws IOException; } diff --git a/src/main/java/jenkins/plugins/http_request/auth/BasicDigestAuthentication.java b/src/main/java/jenkins/plugins/http_request/auth/BasicDigestAuthentication.java index 16cbaad..7863988 100644 --- a/src/main/java/jenkins/plugins/http_request/auth/BasicDigestAuthentication.java +++ b/src/main/java/jenkins/plugins/http_request/auth/BasicDigestAuthentication.java @@ -4,13 +4,22 @@ import hudson.Extension; import hudson.model.AbstractDescribableImpl; import hudson.model.Descriptor; import hudson.util.FormValidation; + import java.io.PrintStream; + import jenkins.model.Jenkins; import jenkins.plugins.http_request.HttpRequest; + import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.AuthCache; import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.client.protocol.ClientContext; +import org.apache.http.client.utils.URIUtils; +import org.apache.http.impl.auth.BasicScheme; +import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.protocol.HttpContext; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; @@ -44,11 +53,14 @@ public class BasicDigestAuthentication extends AbstractDescribableImpl= 400 && execute.getStatusLine().getStatusCode() <= 599)) { diff --git a/src/main/java/jenkins/plugins/http_request/util/HttpClientUtil.java b/src/main/java/jenkins/plugins/http_request/util/HttpClientUtil.java index a069a5b..4e57ef7 100644 --- a/src/main/java/jenkins/plugins/http_request/util/HttpClientUtil.java +++ b/src/main/java/jenkins/plugins/http_request/util/HttpClientUtil.java @@ -9,7 +9,9 @@ import java.net.URI; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.List; + import jenkins.plugins.http_request.HttpMode; + import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; @@ -23,6 +25,7 @@ import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.conn.ssl.TrustStrategy; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; /** @@ -95,12 +98,12 @@ public class HttpClientUtil { return httpDelete; } - public HttpResponse execute(DefaultHttpClient client, HttpRequestBase method, - PrintStream logger, boolean logResponseBody) throws IOException { + public HttpResponse execute(DefaultHttpClient client, HttpContext context, + HttpRequestBase method, PrintStream logger, boolean logResponseBody) throws IOException { doSecurity(client, method.getURI()); logger.println("Sending request to url: " + method.getURI()); - final HttpResponse execute = client.execute(method); + final HttpResponse execute = client.execute(method, context); logger.println("Response Code: " + execute.getStatusLine()); if (logResponseBody){ logger.println("Response: \n" + EntityUtils.toString(execute.getEntity())); -- 1.9.0.msysgit.0