package fr.ydelouis.selfoss.rest; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EBean; import org.springframework.http.client.SimpleClientHttpRequestFactory; import java.io.IOException; import java.net.HttpURLConnection; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import fr.ydelouis.selfoss.config.model.Config; import fr.ydelouis.selfoss.config.model.ConfigManager; @EBean public class SelfossApiRequestFactory extends SimpleClientHttpRequestFactory implements HostnameVerifier, X509TrustManager { @Bean protected ConfigManager configManager; private Config config; public SelfossApiRequestFactory() { trustAllHosts(); } public void setConfig(Config config) { this.config = config; } private Config getConfig() { if (config != null) { return config; } return configManager.get(); } @Override protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException { Config config = getConfig(); if (config != null && config.trustAllCertificates() && connection instanceof HttpsURLConnection) { ((HttpsURLConnection) connection).setHostnameVerifier(this); } super.prepareConnection(connection, httpMethod); } @Override public boolean verify(String s, SSLSession sslSession) { return true; } @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain,String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } private void trustAllHosts() { try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, new TrustManager[]{this}, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } } }