package glaze.client; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.ChallengeState; import org.apache.http.auth.Credentials; import org.apache.http.auth.NTCredentials; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; import org.apache.http.client.CookieStore; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.protocol.ClientContext; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.protocol.BasicHttpContext; public abstract class BaseClient implements Client { // TODO lazy creation protected AuthCache authCache; protected CredentialsProvider credentialsProvider; protected CookieStore cookieStore; public BaseClient() { this.authCache = new BasicAuthCache(); this.credentialsProvider = new BasicCredentialsProvider(); this.cookieStore = new BasicCookieStore(); } @Override public Client auth(final AuthScope authScope, final Credentials creds) { this.credentialsProvider.setCredentials(authScope, creds); return this; } @Override public Client auth(final Credentials cred) { return auth(AuthScope.ANY, cred); } @Override public Client auth(final HttpHost host, final Credentials creds) { AuthScope authScope = host != null ? new AuthScope(host) : AuthScope.ANY; return auth(authScope, creds); } @Override public Client auth(final HttpHost host, final String username, final String password) { return auth(host, new UsernamePasswordCredentials(username, password)); } @Override public Client auth(final HttpHost host, final String username, final String password, final String workstation, final String domain) { return auth(host, new NTCredentials(username, password, workstation, domain)); } @Override public Client auth(final String username, final String password) { return auth(new UsernamePasswordCredentials(username, password)); } @Override public Client auth(final String username, final String password, final String workstation, final String domain) { return auth(new NTCredentials(username, password, workstation, domain)); } @Override public Client authPreemptive(final HttpHost host) { this.authCache.put(host, new BasicScheme(ChallengeState.TARGET)); return this; } @Override public Client authPreemptiveProxy(final HttpHost host) { this.authCache.put(host, new BasicScheme(ChallengeState.PROXY)); return this; } @Override public Client clearAuth() { if (this.credentialsProvider != null) { this.credentialsProvider.clear(); } return this; } @Override public Client clearCookies() { if (this.cookieStore != null) { this.cookieStore.clear(); } return this; } @Override public Client cookieStore(final CookieStore cookieStore) { this.cookieStore = cookieStore; return this; } protected BasicHttpContext prepareLocalContext() { BasicHttpContext localContext = new BasicHttpContext(); localContext.setAttribute(ClientContext.CREDS_PROVIDER, this.credentialsProvider); localContext.setAttribute(ClientContext.AUTH_CACHE, this.authCache); localContext.setAttribute(ClientContext.COOKIE_STORE, this.cookieStore); return localContext; } }