[java-identity-provider] branch master updated: IDP-1170 - REST DataConnector

Scott Cantor cantor.2 at osu.edu
Tue Aug 8 13:44:43 EDT 2017


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=d7e03e98fb39b9c0108b999223c23530677d6da4

The following commit(s) were added to refs/heads/master by this push:
       new  d7e03e9   IDP-1170 - REST DataConnector
d7e03e9 is described below

commit d7e03e98fb39b9c0108b999223c23530677d6da4
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Tue Aug 8 13:44:41 2017 -0400

    IDP-1170 - REST DataConnector
    
    https://issues.shibboleth.net/jira/browse/IDP-1170
    
    Refactor to move security params back into connector.
---
 .../dc/http/impl/AbstractHTTPSearchBuilder.java    | 49 ++++++++++++++--------
 .../resolver/dc/http/impl/HTTPDataConnector.java   | 21 +++++++++-
 .../resolver/dc/http/impl/HTTPSearch.java          |  4 ++
 .../resolver/dc/http/impl/TemplatedURLBuilder.java |  1 +
 .../dc/http/impl/HTTPDataConnectorParser.java      |  7 ++++
 5 files changed, 62 insertions(+), 20 deletions(-)

diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index af76fd4..671ddd8 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -59,10 +59,28 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
     /** HTTP client security parameters. */
     @Nullable private HttpClientSecurityParameters httpClientSecurityParameters;
     
+    
+    /**
+     * Get the optional client security parameters.
+     * 
+     * <p>This is informational to accommodate a scenario in which the parameters should influence
+     * the construction of the request, but the actual parameters to use will be supplied to the
+     * {@link HTTPSearch#execute(HttpClient, HttpClientSecurityParameters, HTTPResponseMappingStrategy)} method.</p>
+     * 
+     * @return client security parameters
+     */
+    @Nullable public HttpClientSecurityParameters getHttpClientSecurityParameters() {
+        return httpClientSecurityParameters;
+    }
+    
     /**
      * Set the optional client security parameters.
      * 
-     * @param params the new client security parameters
+     * <p>This is informational to accommodate a scenario in which the parameters should influence
+     * the construction of the request, but the actual parameters to use will be supplied to the
+     * {@link HTTPSearch#execute(HttpClient, HttpClientSecurityParameters, HTTPResponseMappingStrategy)} method.</p>
+     * 
+     * @param params client security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
@@ -76,9 +94,10 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
             @Nonnull final Map<String, List<IdPAttributeValue<?>>> dependencyAttributes) throws ResolutionException {
         
         final HttpUriRequest request = getHttpRequest(resolutionContext, dependencyAttributes);
-        final HttpClientContext context = buildHttpContext(request);
 
+// Checkstyle: AnonInnerLength OFF
         return new HTTPSearch() {
+            
             /** {@inheritDoc} */
             @Nonnull public String getResultCacheKey() {
                 Constraint.isTrue(request instanceof HttpGet, "Only GET requests are cacheable");
@@ -92,12 +111,19 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
             
             /** {@inheritDoc} */
             @Nonnull public Map<String,IdPAttribute> execute(@Nonnull final HttpClient client,
+                    @Nullable final HttpClientSecurityParameters securityParameters,
                     @Nonnull final HTTPResponseMappingStrategy mappingStrategy) throws IOException {
-                final Map<String,IdPAttribute> results = client.execute(request, mappingStrategy, context);
-                HttpClientSecuritySupport.checkTLSCredentialEvaluated(context, request.getURI().getScheme());
+                
+                final HttpClientContext clientContext = HttpClientContext.create();
+                HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, true);
+                HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, request);
+                final Map<String,IdPAttribute> results = client.execute(request, mappingStrategy, clientContext);
+                HttpClientSecuritySupport.checkTLSCredentialEvaluated(clientContext, request.getURI().getScheme());
                 return results;
             }
+            
         };
+// Checkstyle: AnonInnerLength ON
     }
 
     /**
@@ -131,18 +157,5 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
             throw new ResolutionException(e);
         }
     }
-    
-    /**
-     * Build the {@link HttpClientContext} instance to be used.
-     * 
-     * @param request the HTTP client request
-     * @return the client context instance
-     */
-    @Nonnull private HttpClientContext buildHttpContext(@Nonnull final HttpUriRequest request) {
-        final HttpClientContext clientContext = HttpClientContext.create();
-        HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, false);
-        HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, request);
-        return clientContext;
-    }
-    
+        
 }
\ No newline at end of file
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
index 2eb808f..90951e2 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPDataConnector.java
@@ -28,6 +28,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.apache.http.client.HttpClient;
+import org.opensaml.security.httpclient.HttpClientSecurityParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -49,6 +50,9 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
     /** The {@link HttpClient} to use. */
     @NonnullAfterInit private HttpClient httpClient;
     
+    /** HTTP client security parameters. */
+    @Nullable private HttpClientSecurityParameters httpClientSecurityParameters;
+    
     /** Constructor. */
     public HTTPDataConnector() {
         setValidator(new Validator() {
@@ -68,7 +72,19 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
 
         httpClient = Constraint.isNotNull(client, "HttpClient cannot be null");
     }
-        
+
+    /**
+     * Set the optional client security parameters.
+     * 
+     * @param params the new client security parameters
+     */
+    public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+
+        httpClientSecurityParameters = params;
+    }
+    
     /** {@inheritDoc} */
     public void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
@@ -84,7 +100,8 @@ public class HTTPDataConnector extends AbstractSearchDataConnector<HTTPSearch,HT
             throws ResolutionException {
 
         try {
-            return getMappingStrategy().map(executable.execute(httpClient, getMappingStrategy()));
+            return getMappingStrategy().map(
+                    executable.execute(httpClient, httpClientSecurityParameters, getMappingStrategy()));
         } catch (final IOException e) {
             throw new ResolutionException(getLogPrefix() + " HTTP request failed", e);
         }
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java
index 8bf0ec3..c760e59 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/HTTPSearch.java
@@ -21,8 +21,10 @@ import java.io.IOException;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 import org.apache.http.client.HttpClient;
+import org.opensaml.security.httpclient.HttpClientSecurityParameters;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.dc.impl.ExecutableSearch;
@@ -34,12 +36,14 @@ public interface HTTPSearch extends ExecutableSearch {
      * The abstraction that will contact the service and obtain results.
      * 
      * @param client the HTTP client
+     * @param securityParameters client security settings
      * @param mappingStrategy response mapping strategy
      * 
      * @return attribute results
      * @throws IOException if an error occurs
      */
     @Nonnull Map<String,IdPAttribute> execute(@Nonnull final HttpClient client,
+            @Nullable final HttpClientSecurityParameters securityParameters,
             @Nonnull final HTTPResponseMappingStrategy mappingStrategy) throws IOException;
     
 }
\ No newline at end of file
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
index ca3cf8d2..61e2ee9 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/TemplatedURLBuilder.java
@@ -167,6 +167,7 @@ public class TemplatedURLBuilder extends AbstractHTTPSearchBuilder {
         log.trace("Creating request URL using attribute resolution context {}", resolutionContext);
         context.put("resolutionContext", resolutionContext);
 
+        context.put("httpClientSecurityParameters", getHttpClientSecurityParameters());
         context.put("paramEscaper", paramEscaper);
         context.put("fragmentEscaper", fragmentEscaper);
         context.put("pathEscaper", pathEscaper);
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java
index b3f40d7..2733151 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/http/impl/HTTPDataConnectorParser.java
@@ -71,6 +71,12 @@ public class HTTPDataConnectorParser extends AbstractDataConnectorParser {
         if (httpClientID != null) {
             builder.addPropertyReference("httpClient", httpClientID);
         }
+        
+        final String securityParams =
+                StringSupport.trimOrNull(config.getAttributeNS(null, "httpClientSecurityParametersRef"));
+        if (securityParams != null) {
+            builder.addPropertyReference("httpClientSecurityParameters", securityParams);
+        }
 
         final String searchBuilderID = v2Parser.getBeanSearchBuilderID();
         if (searchBuilderID != null) {
@@ -171,6 +177,7 @@ public class HTTPDataConnectorParser extends AbstractDataConnectorParser {
             }
             templateBuilder.addPropertyReference("velocityEngine", velocityEngineRef);
 
+            // This is duplication but allows the built-in builder to access the parameters if desired.
             final String securityParams =
                     StringSupport.trimOrNull(configElement.getAttributeNS(null, "httpClientSecurityParametersRef"));
             if (securityParams != null) {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list