View Javadoc

1   package com.atlassian.httpclient.apache.httpcomponents.proxy;
2   
3   import com.atlassian.fugue.Effect;
4   import com.atlassian.fugue.Option;
5   import com.atlassian.httpclient.api.factory.HttpClientOptions;
6   import com.google.common.base.Predicate;
7   import com.google.common.collect.Iterables;
8   import org.apache.http.auth.AuthScope;
9   import org.apache.http.auth.Credentials;
10  import org.apache.http.client.CredentialsProvider;
11  import org.apache.http.impl.client.SystemDefaultCredentialsProvider;
12  
13  import static com.atlassian.httpclient.apache.httpcomponents.proxy.ProxyConfig.AuthenticationInfo;
14  
15  /**
16   * Configuration of credentials for proxy.
17   */
18  public class ProxyCredentialsProvider implements CredentialsProvider {
19      private final SystemDefaultCredentialsProvider delegate;
20  
21      private ProxyCredentialsProvider(final SystemDefaultCredentialsProvider delegate) {
22          this.delegate = delegate;
23      }
24  
25      public static Option<ProxyCredentialsProvider> build(final HttpClientOptions options) {
26          final Iterable<AuthenticationInfo> authenticationInfos = Iterables.filter(
27                  ProxyConfigFactory.getProxyAuthentication(options),
28                  authenticationInfo -> authenticationInfo.getCredentials().isDefined());
29  
30          return Iterables.isEmpty(authenticationInfos) ? Option.<ProxyCredentialsProvider>none() : Option.some(createCredentialProvider(authenticationInfos));
31      }
32  
33      private static ProxyCredentialsProvider createCredentialProvider(final Iterable<AuthenticationInfo> authenticationInfos) {
34          final SystemDefaultCredentialsProvider credentialsProvider = new SystemDefaultCredentialsProvider();
35  
36          for (final AuthenticationInfo authenticationInfo : authenticationInfos) {
37              authenticationInfo.getCredentials().foreach(credentials ->
38                      credentialsProvider.setCredentials(authenticationInfo.getAuthScope(), credentials));
39          }
40  
41          return new ProxyCredentialsProvider(credentialsProvider);
42      }
43  
44      @Override
45      public void setCredentials(final AuthScope authscope, final Credentials credentials) {
46          delegate.setCredentials(authscope, credentials);
47      }
48  
49      @Override
50      public Credentials getCredentials(final AuthScope authscope) {
51          return delegate.getCredentials(authscope);
52      }
53  
54      @Override
55      public void clear() {
56          delegate.clear();
57      }
58  }