package com.renaghan.notes2cloud; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.HttpClient; import org.apache.http.client.params.ClientPNames; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.AllowAllHostnameVerifier; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.SingleClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.CoreProtocolPNames; import org.apache.http.params.HttpParams; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URI; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Properties; /** * Notes2Cloud utilities * * @author prenagha */ public class Utils { private final Properties props; private final DefaultHttpClient http; public Utils() { try { Properties dflt = new Properties(); InputStream is = ClassLoader.getSystemResourceAsStream("notes2cloud.properties"); if (is == null) throw new RuntimeException("Can't find notes2cloud.properties on classpath"); dflt.load(is); is.close(); String userFileName = System.getProperty("user.home") + File.separator + "notes2cloud.properties"; File userFile = new File(userFileName); if (!userFile.exists()) throw new RuntimeException("Cannot find user property file " + userFileName); if (!userFile.canRead()) throw new RuntimeException("User property file not readable " + userFileName); FileInputStream fis = new FileInputStream(userFile); props = new Properties(dflt); props.load(fis); fis.close(); } catch (Exception e) { throw new RuntimeException("Error loading properties", e); } try { HttpParams params = new BasicHttpParams(); params.setParameter(ClientPNames.COOKIE_POLICY, org.apache.http.client.params.CookiePolicy.BROWSER_COMPATIBILITY); params.setParameter(CoreProtocolPNames.USER_AGENT, getProperty("userAgent")); http = new DefaultHttpClient(new SingleClientConnManager()); if ("false".equals(getProperty("sslValidation"))) { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{new X509TrustManager() { public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}, null); SSLSocketFactory factory = new SSLSocketFactory(sslContext, new AllowAllHostnameVerifier()); Scheme https = new Scheme("https", 443, factory); SchemeRegistry schemeRegistry = http.getConnectionManager().getSchemeRegistry(); schemeRegistry.register(https); } URI uri = new URI(getProperty("cloud.baseUrl")); http.getCredentialsProvider().setCredentials( new AuthScope(uri.getHost(), uri.getPort()), new UsernamePasswordCredentials(getProperty("cloud.userId"), getProperty("cloud.password"))); } catch (Exception e) { throw new RuntimeException("Error creating httpclient", e); } } public String getProperty(String key) { String v = System.getProperty(key); if (v != null) v = v.trim(); if (v == null || v.length() == 0) v = props.getProperty(key); if (v != null) v = v.trim(); if (v == null || v.length() == 0) throw new IllegalArgumentException("Property not found " + key); return v; } public HttpClient getHttpClient() { return http; } public void close() { http.getConnectionManager().shutdown(); } }