package co.infinum.https;
import android.content.res.Resources;
import org.apache.http.client.CookieStore;
import org.apache.http.conn.scheme.SocketFactory;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import retrofit.client.ApacheClient;
import retrofit.client.Client;
/**
* Builder for creating Apache HttpClient with pinned certificate that can be used with Retrofit.
*/
public class RetrofitApacheClientBuilder {
protected HttpClientBuilder httpClientBuilder = new HttpClientBuilder();
public RetrofitApacheClientBuilder setConnectionTimeout(int connectionTimeout) {
httpClientBuilder.setConnectionTimeout(connectionTimeout);
return this;
}
public RetrofitApacheClientBuilder setSocketTimeout(int socketTimeout) {
httpClientBuilder.setSocketTimeout(socketTimeout);
return this;
}
public RetrofitApacheClientBuilder setCookieStore(CookieStore cookieStore) {
httpClientBuilder.setCookieStore(cookieStore);
return this;
}
public RetrofitApacheClientBuilder pinCertificates(InputStream resourceStream, char[] password) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
httpClientBuilder.pinCertificates(resourceStream, password);
return this;
}
public RetrofitApacheClientBuilder pinCertificates(Resources resources, int certificateRawResource, char[] password) throws CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException {
httpClientBuilder.pinCertificates(resources, certificateRawResource, password);
return this;
}
public RetrofitApacheClientBuilder ignoreCertificates() {
httpClientBuilder.ignoreCertificates();
return this;
}
public RetrofitApacheClientBuilder registerScheme(String name, SocketFactory factory, int port) {
httpClientBuilder.registerScheme(name, factory, port);
return this;
}
public RetrofitApacheClientBuilder setHttpPort(int port) {
httpClientBuilder.setHttpPort(port);
return this;
}
public RetrofitApacheClientBuilder setHttpsPort(int port) {
httpClientBuilder.setHttpsPort(port);
return this;
}
public Client.Provider build() {
return new Client.Provider() {
public Client get() {
return new ApacheClient(httpClientBuilder.build());
}
};
}
}