diff --git a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/HttpClientTransport.java b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/HttpClientTransport.java index b066cbeed..be3712e0d 100644 --- a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/HttpClientTransport.java +++ b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/HttpClientTransport.java @@ -29,6 +29,7 @@ import org.commonjava.maven.galley.spi.transport.PublishJob; import org.commonjava.maven.galley.spi.transport.Transport; import org.commonjava.maven.galley.transport.htcli.conf.GlobalHttpConfiguration; +import org.commonjava.maven.galley.transport.htcli.conf.HttpJobType; import org.commonjava.maven.galley.transport.htcli.internal.HttpDownload; import org.commonjava.maven.galley.transport.htcli.internal.HttpExistence; import org.commonjava.maven.galley.transport.htcli.internal.HttpListing; @@ -49,6 +50,10 @@ import java.net.URL; import java.util.Map; +import static org.commonjava.maven.galley.transport.htcli.conf.HttpJobType.download; +import static org.commonjava.maven.galley.transport.htcli.conf.HttpJobType.existence; +import static org.commonjava.maven.galley.transport.htcli.conf.HttpJobType.listing; +import static org.commonjava.maven.galley.transport.htcli.conf.HttpJobType.publish; import static org.commonjava.maven.galley.util.UrlUtils.buildUrl; @ApplicationScoped @@ -111,8 +116,8 @@ public DownloadJob createDownloadJob( final ConcreteResource resource, final Tra final EventMetadata eventMetadata ) throws TransferException { - return new HttpDownload( getUrl( resource ), getHttpLocation( resource.getLocation() ), target, transferSizes, eventMetadata, - http, mapper, metricRegistry, metricConfig ); + return new HttpDownload( getUrl( resource ), getHttpLocation( resource.getLocation(), download ), target, + transferSizes, eventMetadata, http, mapper, metricRegistry, metricConfig ); } @Override @@ -120,7 +125,8 @@ public PublishJob createPublishJob( final ConcreteResource resource, final Input final int timeoutSeconds ) throws TransferException { - return new HttpPublish( getUrl( resource ), getHttpLocation( resource.getLocation() ), stream, length, contentType, http ); + return new HttpPublish( getUrl( resource ), getHttpLocation( resource.getLocation(), publish ), stream, length, + contentType, http ); } @Override @@ -148,24 +154,26 @@ public boolean handles( final Location location ) } @Override - public ListingJob createListingJob( final ConcreteResource resource, final Transfer target, final int timeoutSeconds ) - throws TransferException + public ListingJob createListingJob( final ConcreteResource resource, final Transfer target, + final int timeoutSeconds ) + throws TransferException { return new HttpListing( getUrl( resource ), - new ConcreteResource( getHttpLocation( resource.getLocation() ), resource.getPath() ), - http ); + new ConcreteResource( getHttpLocation( resource.getLocation(), listing ), + resource.getPath() ), http ); } - private HttpLocation getHttpLocation( final Location repository ) - throws TransferException + private HttpLocation getHttpLocation( final Location repository, HttpJobType httpJobType ) + throws TransferException { try { - return ( repository instanceof HttpLocation ) ? (HttpLocation) repository : new WrapperHttpLocation( repository, globalConfig ); + return new WrapperHttpLocation( repository, globalConfig, httpJobType ); } catch ( final MalformedURLException e ) { - throw new TransferLocationException( repository, "Failed to parse base-URL for: {}", e, repository.getUri() ); + throw new TransferLocationException( repository, "Failed to parse base-URL for: {}", e, + repository.getUri() ); } } @@ -174,7 +182,8 @@ public ExistenceJob createExistenceJob( final ConcreteResource resource, final T final int timeoutSeconds ) throws TransferException { - return new HttpExistence( getUrl( resource ), getHttpLocation( resource.getLocation() ), target, http, mapper ); + return new HttpExistence( getUrl( resource ), getHttpLocation( resource.getLocation(), existence ), target, + http, mapper ); } private String getUrl( final ConcreteResource resource ) diff --git a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/GlobalHttpConfiguration.java b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/GlobalHttpConfiguration.java index 5fdc92149..f62bedeff 100644 --- a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/GlobalHttpConfiguration.java +++ b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/GlobalHttpConfiguration.java @@ -15,16 +15,22 @@ */ package org.commonjava.maven.galley.transport.htcli.conf; -import java.net.URL; - - public class GlobalHttpConfiguration { - public ProxyConfig getProxyConfig( final URL url ) + ProxyConfig proxyConfig; + + public GlobalHttpConfiguration() + { + } + + public GlobalHttpConfiguration( ProxyConfig proxyConfig ) { - // TODO Auto-generated method stub - return null; + this.proxyConfig = proxyConfig; } + public ProxyConfig getProxyConfig() + { + return proxyConfig; + } } diff --git a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/HttpJobType.java b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/HttpJobType.java new file mode 100644 index 000000000..b3e7bb9af --- /dev/null +++ b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/HttpJobType.java @@ -0,0 +1,9 @@ +package org.commonjava.maven.galley.transport.htcli.conf; + +public enum HttpJobType +{ + download, + publish, + existence, + listing +} diff --git a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/ProxyConfig.java b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/ProxyConfig.java index b9b04e46f..5bf85dca1 100644 --- a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/ProxyConfig.java +++ b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/conf/ProxyConfig.java @@ -15,6 +15,8 @@ */ package org.commonjava.maven.galley.transport.htcli.conf; +import java.util.List; + public interface ProxyConfig { @@ -24,4 +26,5 @@ public interface ProxyConfig String getUser(); + List getAllowHttpJobTypes(); } diff --git a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/internal/model/WrapperHttpLocation.java b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/internal/model/WrapperHttpLocation.java index c64f8c46e..e4f908c6e 100644 --- a/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/internal/model/WrapperHttpLocation.java +++ b/transports/httpclient/src/main/java/org/commonjava/maven/galley/transport/htcli/internal/model/WrapperHttpLocation.java @@ -17,6 +17,7 @@ import org.commonjava.maven.galley.model.Location; import org.commonjava.maven.galley.transport.htcli.conf.GlobalHttpConfiguration; +import org.commonjava.maven.galley.transport.htcli.conf.HttpJobType; import org.commonjava.maven.galley.transport.htcli.conf.ProxyConfig; import org.commonjava.maven.galley.transport.htcli.model.HttpLocation; import org.commonjava.maven.galley.transport.htcli.model.LocationTrustType; @@ -26,7 +27,7 @@ import java.util.Map; public class WrapperHttpLocation - implements HttpLocation + implements HttpLocation { private final Location delegate; @@ -35,12 +36,16 @@ public class WrapperHttpLocation private final GlobalHttpConfiguration globalConfig; - public WrapperHttpLocation( final Location delegate, final GlobalHttpConfiguration globalConfig ) - throws MalformedURLException + private final HttpJobType httpJobType; + + public WrapperHttpLocation( final Location delegate, final GlobalHttpConfiguration globalConfig, + final HttpJobType httpJobType ) + throws MalformedURLException { this.delegate = delegate; this.globalConfig = globalConfig; this.url = new URL( delegate.getUri() ); + this.httpJobType = httpJobType; } @Override @@ -64,32 +69,33 @@ public String getUri() @Override public String getKeyCertPem() { - return null; + return delegate instanceof HttpLocation ? ( (HttpLocation) delegate ).getKeyCertPem() : null; } @Override public String getServerCertPem() { - return null; + return delegate instanceof HttpLocation ? ( (HttpLocation) delegate ).getServerCertPem() : null; } @Override public LocationTrustType getTrustType() { // FIXME: Is this something we should handle in the global config? - return null; + return delegate instanceof HttpLocation ? ( (HttpLocation) delegate ).getTrustType() : null; } @Override public String getHost() { - return url.getHost(); + return delegate instanceof HttpLocation ? ( (HttpLocation) delegate ).getHost() : url.getHost(); } @Override public int getPort() { - return url.getPort() < 0 ? url.getDefaultPort() : url.getPort(); + int port = url.getPort() < 0 ? url.getDefaultPort() : url.getPort(); + return delegate instanceof HttpLocation ? ( (HttpLocation) delegate ).getPort() : port; } @Override @@ -105,34 +111,34 @@ public String getUser() } } - return userpass; + return delegate instanceof HttpLocation ? ( (HttpLocation) delegate ).getUser() : userpass; } @Override public String getProxyHost() { - final ProxyConfig proxy = globalConfig == null ? null : globalConfig.getProxyConfig( url ); - return proxy == null ? null : proxy.getHost(); + ProxyConfig proxy = getProxyConfig(); + return isProxyAllowHttpJobType( proxy ) ? proxy.getHost() : null; } @Override public String getProxyUser() { - final ProxyConfig proxy = globalConfig == null ? null : globalConfig.getProxyConfig( url ); - return proxy == null ? null : proxy.getUser(); + ProxyConfig proxy = getProxyConfig(); + return isProxyAllowHttpJobType( proxy ) ? proxy.getUser() : null; } @Override public int getProxyPort() { - final ProxyConfig proxy = globalConfig == null ? null : globalConfig.getProxyConfig( url ); - return proxy == null ? 8080 : proxy.getPort(); + ProxyConfig proxy = getProxyConfig(); + return isProxyAllowHttpJobType( proxy ) ? proxy.getPort() : 8080; } @Override public boolean isIgnoreHostnameVerification() { - return false; + return delegate instanceof HttpLocation && ( (HttpLocation) delegate ).isIgnoreHostnameVerification(); } @SuppressWarnings( "EqualsWhichDoesntCheckParameterClass" ) @@ -208,4 +214,13 @@ public String getName() return delegate.getName(); } + private ProxyConfig getProxyConfig() + { + return globalConfig == null ? null : globalConfig.getProxyConfig(); + } + + private boolean isProxyAllowHttpJobType( ProxyConfig proxy ) + { + return proxy != null && proxy.getAllowHttpJobTypes().contains( httpJobType.name() ); + } }