package eu.deki.paste; import java.net.URL; import java.net.URLEncoder; import java.net.MalformedURLException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.SSLContext; import java.io.OutputStream; import java.io.InputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.security.KeyStore; import android.content.Context; import android.util.Log; import eu.deki.paste.PasteTask; public class DekiEuPaste extends PasteTask { private static final String pasteUrl = "https://deki.eu/paste/new"; public DekiEuPaste(Context parent) { super(parent); } @Override protected String paste(String title, String content, String delay) throws IOException { System.setProperty("http.keepAlive", "false"); String request = "title=" + URLEncoder.encode(title) + "&content=" + URLEncoder.encode(content) + "&expiration=" + URLEncoder.encode(delay); URL url; try { url = new URL(pasteUrl); } catch(MalformedURLException ex) { // will never happen because of hardcoded URL return null; } InputStream in = parentActivity.getResources().openRawResource(R.raw.deki_eu); SSLContext context = null; try { KeyStore trustedStore = KeyStore.getInstance("BKS"); trustedStore.load(in, "abcdefg".toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); //TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustedStore); context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); } catch(Exception ex) { Log.i("PasteIt", "Could not initialize certificate verification", ex); return null; } finally { in.close(); } HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setSSLSocketFactory(context.getSocketFactory()); conn.setDoOutput(true); conn.setInstanceFollowRedirects(false); conn.setFixedLengthStreamingMode(request.getBytes().length); OutputStream out = new BufferedOutputStream(conn.getOutputStream()); out.write(request.getBytes()); out.close(); String redirectUrl = conn.getHeaderField("Location"); conn.disconnect(); return redirectUrl; } }