diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2012-12-27 22:10:02 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2012-12-27 22:10:02 +0100 |
| commit | 8a2d76c4903687b3f9199c125c2e945b9285d1a3 (patch) | |
| tree | 15631335c6f9314679f0fc949fb65d5f63e50fe0 /src | |
| parent | 2c2a35d664fc7a22d55f6006e58bfd57a76eb093 (diff) | |
working SSL connection and POST request to deki.eu
Diffstat (limited to 'src')
| -rw-r--r-- | src/eu/deki/paste/DekiEuPaste.java | 81 | ||||
| -rw-r--r-- | src/eu/deki/paste/MainActivity.java | 20 | ||||
| -rw-r--r-- | src/eu/deki/paste/PasteTask.java | 62 |
3 files changed, 160 insertions, 3 deletions
diff --git a/src/eu/deki/paste/DekiEuPaste.java b/src/eu/deki/paste/DekiEuPaste.java new file mode 100644 index 0000000..a0d0ba9 --- /dev/null +++ b/src/eu/deki/paste/DekiEuPaste.java @@ -0,0 +1,81 @@ +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.setFixedLengthStreamingMode(request.getBytes().length); + + OutputStream out = new BufferedOutputStream(conn.getOutputStream()); + out.write(request.getBytes()); + out.close(); + + conn.getHeaderFields(); + String redirectUrl = conn.getURL().toString(); + + conn.disconnect(); + + return redirectUrl; + } +} + diff --git a/src/eu/deki/paste/MainActivity.java b/src/eu/deki/paste/MainActivity.java index 032fede..4f721b7 100644 --- a/src/eu/deki/paste/MainActivity.java +++ b/src/eu/deki/paste/MainActivity.java @@ -3,21 +3,35 @@ package eu.deki.paste; import android.app.Activity; import android.os.Bundle; import android.widget.Spinner; +import android.widget.EditText; import android.widget.ArrayAdapter; +import android.view.View; +import eu.deki.paste.PasteTask; +import eu.deki.paste.DekiEuPaste; public class MainActivity extends Activity { - private Spinner expiration; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); - expiration = (Spinner) findViewById(R.id.expiration); + Spinner expiration = (Spinner) findViewById(R.id.expiration); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.expiration_array, android.R.layout.simple_spinner_item); //adapter.setDropDownViewResource(android.R.layout.simple_spinner_item); expiration.setAdapter(adapter); } + + public void onPasteButtonClick(View view) + { + EditText titleText = (EditText) findViewById(R.id.paste_title); + EditText contentText = (EditText) findViewById(R.id.paste_content); + Spinner expiration = (Spinner) findViewById(R.id.expiration); + + // TODO: check network status + + new DekiEuPaste(this).execute(titleText.getText().toString(), contentText.getText().toString(), "1hour"); + } } + diff --git a/src/eu/deki/paste/PasteTask.java b/src/eu/deki/paste/PasteTask.java new file mode 100644 index 0000000..29b5c32 --- /dev/null +++ b/src/eu/deki/paste/PasteTask.java @@ -0,0 +1,62 @@ +package eu.deki.paste; + +import java.io.IOException; +import android.os.AsyncTask; +import android.widget.Toast; +import android.content.Context; +import android.util.Log; + +public abstract class PasteTask extends AsyncTask<String, Void, String> +{ + private String errorMessage = null; + protected Context parentActivity = null; + + public PasteTask(Context parent) + { + super(); + parentActivity = parent; + } + + @Override + protected String doInBackground(String... params) + { + String title, content, expiration, result; + + if(params.length != 3) + return null; + + title = params[0]; + content = params[1]; + expiration = params[2]; + + try + { + result = paste(title, content, expiration); + } + catch(IOException ex) + { + cancel(false); + errorMessage = ex.getLocalizedMessage(); + result = errorMessage; + Log.e("PasteIt", "doInBackground", ex); + } + + return result; + } + + @Override + protected void onPostExecute(String result) + { + + } + + @Override + protected void onCancelled() + { + //Toast toast = Toast.makeText(parentActivity.getApplicationContext(), errorMessage, Toast.LENGTH_SHORT); + //toast.show(); + } + + protected abstract String paste(String title, String content, String delay) throws IOException; +} + |
