package hudson.plugins.tfs.model; import com.microsoft.tfs.core.config.ConnectionInstanceData; import com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory; import com.microsoft.tfs.core.httpclient.DefaultNTCredentials; import com.microsoft.tfs.core.httpclient.HostConfiguration; import com.microsoft.tfs.core.httpclient.HttpClient; import com.microsoft.tfs.core.httpclient.HttpState; import com.microsoft.tfs.core.httpclient.UsernamePasswordCredentials; import com.microsoft.tfs.core.httpclient.auth.AuthScope; import hudson.util.Secret; public class ModernHTTPClientFactory extends DefaultHTTPClientFactory { private final ProxyHostEx proxyHost; public ModernHTTPClientFactory(final ConnectionInstanceData connectionInstanceData) { this(connectionInstanceData, null); } public ModernHTTPClientFactory(final ConnectionInstanceData connectionInstanceData, final ProxyHostEx proxyHost) { super(connectionInstanceData); this.proxyHost = proxyHost; } @Override protected String getUserAgentExtraString(final HttpClient httpClient, final ConnectionInstanceData connectionInstanceData) { // https://stackoverflow.com/a/6773868/ final Class<? extends ModernHTTPClientFactory> me = this.getClass(); final Package us = me.getPackage(); String version = us.getImplementationVersion(); if (version == null) { version = "devtest"; } return "TFS-Jenkins " + version; } @Override public void configureClientProxy(final HttpClient httpClient, final HostConfiguration hostConfiguration,final HttpState httpState, final ConnectionInstanceData connectionInstanceData) { hostConfiguration.setProxyHost(proxyHost); if (proxyHost != null) { final String proxyUser = proxyHost.getProxyUser(); final Secret proxySecret = proxyHost.getProxySecret(); if (proxyUser != null && proxySecret != null) { httpState.setProxyCredentials( AuthScope.ANY, new UsernamePasswordCredentials(proxyUser, proxySecret.getPlainText()) ); } else { httpState.setProxyCredentials( AuthScope.ANY, new DefaultNTCredentials() ); } } } }