summaryrefslogtreecommitdiff
path: root/app/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PasswordStore.java9
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/PgpHandler.java156
-rw-r--r--app/src/main/res/layout/activity_pgp_handler.xml6
3 files changed, 167 insertions, 4 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
index 6c9eb0b2..031f1063 100644
--- a/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
+++ b/app/src/main/java/com/zeapo/pwdstore/PasswordStore.java
@@ -19,6 +19,7 @@ import org.openintents.openpgp.util.OpenPgpListPreference;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
+import java.io.InputStream;
public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentInteractionListener, PasswordFragment.OnFragmentInteractionListener {
@@ -114,15 +115,17 @@ public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentI
@Override
public void onFragmentInteraction(String id) {
- Intent intent = new Intent(this, PgpHandler.class);
- intent.putExtra("FILE_NAME", id);
- startActivity(intent);
try {
byte[] data = new byte[0];
try {
data = FileUtils.readFileToByteArray(PasswordRepository.getFile(id));
+ Intent intent = new Intent(this, PgpHandler.class);
+ intent.putExtra("FILE_CONTENT", data);
+ intent.putExtra("FILE_PATH", PasswordRepository.getFile(id).getAbsolutePath());
+ startActivity(intent);
+
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/app/src/main/java/com/zeapo/pwdstore/PgpHandler.java b/app/src/main/java/com/zeapo/pwdstore/PgpHandler.java
index 22a6f8cc..c97e0156 100644
--- a/app/src/main/java/com/zeapo/pwdstore/PgpHandler.java
+++ b/app/src/main/java/com/zeapo/pwdstore/PgpHandler.java
@@ -1,14 +1,33 @@
package com.zeapo.pwdstore;
import android.app.Activity;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.content.IntentSender;
+import android.content.SharedPreferences;
import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.text.TextUtils;
+import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.View;
import android.widget.TextView;
+import android.widget.Toast;
import com.zeapo.pwdstore.R;
+import org.apache.commons.io.FileUtils;
+import org.openintents.openpgp.OpenPgpError;
+import org.openintents.openpgp.OpenPgpSignatureResult;
+import org.openintents.openpgp.util.OpenPgpApi;
import org.openintents.openpgp.util.OpenPgpServiceConnection;
+import org.openintents.openpgp.util.OpenPgpUtils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
public class PgpHandler extends Activity {
@@ -26,12 +45,30 @@ public class PgpHandler extends Activity {
public static final String TAG = "Keychain";
}
+ private String filePath;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pgp_handler);
+
+ // some persistance
+ SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
+ String providerPackageName = settings.getString("openpgp_provider_list", "");
+
+ System.out.println(getIntent().getExtras().getString("FILE_PATH"));
Bundle extra = getIntent().getExtras();
- ((TextView) findViewById(R.id.hhh)).setText(extra.getString("FILE_NAME"));
+ ((TextView) findViewById(R.id.hhh)).setText(extra.getString("FILE_PATH"));
+
+ if (TextUtils.isEmpty(providerPackageName)) {
+ Toast.makeText(this, "No OpenPGP Provider selected!", Toast.LENGTH_LONG).show();
+ finish();
+ } else {
+ // bind to service
+ mServiceConnection = new OpenPgpServiceConnection(
+ PgpHandler.this, providerPackageName);
+ mServiceConnection.bindToService();
+ }
}
@@ -53,4 +90,121 @@ public class PgpHandler extends Activity {
}
return super.onOptionsItemSelected(item);
}
+
+
+ private void handleError(final OpenPgpError error) {
+ runOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+ Toast.makeText(PgpHandler.this,
+ "onError id:" + error.getErrorId() + "\n\n" + error.getMessage(),
+ Toast.LENGTH_LONG).show();
+ Log.e(Constants.TAG, "onError getErrorId:" + error.getErrorId());
+ Log.e(Constants.TAG, "onError getMessage:" + error.getMessage());
+ }
+ });
+ }
+
+ private void showToast(final String message) {
+ runOnUiThread(new Runnable() {
+
+ @Override
+ public void run() {
+ Toast.makeText(PgpHandler.this,
+ message,
+ Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+
+ private class MyCallback implements OpenPgpApi.IOpenPgpCallback {
+ boolean returnToCiphertextField;
+ ByteArrayOutputStream os;
+ int requestCode;
+
+ private MyCallback(boolean returnToCiphertextField, ByteArrayOutputStream os, int requestCode) {
+ this.returnToCiphertextField = returnToCiphertextField;
+ this.os = os;
+ this.requestCode = requestCode;
+ }
+
+ @Override
+ public void onReturn(Intent result) {
+ switch (result.getIntExtra(OpenPgpApi.RESULT_CODE, OpenPgpApi.RESULT_CODE_ERROR)) {
+ case OpenPgpApi.RESULT_CODE_SUCCESS: {
+ showToast("RESULT_CODE_SUCCESS");
+
+ // encrypt/decrypt/sign/verify
+ if (os != null) {
+ try {
+ Log.d(OpenPgpApi.TAG, "result: " + os.toByteArray().length
+ + " str=" + os.toString("UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ Log.e(Constants.TAG, "UnsupportedEncodingException", e);
+ }
+ }
+
+ // verify
+ if (result.hasExtra(OpenPgpApi.RESULT_SIGNATURE)) {
+ OpenPgpSignatureResult sigResult
+ = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE);
+ showToast(sigResult.toString());
+ }
+
+ // get key ids
+ if (result.hasExtra(OpenPgpApi.RESULT_KEY_IDS)) {
+ long[] keyIds = result.getLongArrayExtra(OpenPgpApi.RESULT_KEY_IDS);
+ String out = "keyIds: ";
+ for (int i = 0; i < keyIds.length; i++) {
+ out += OpenPgpUtils.convertKeyIdToHex(keyIds[i]) + ", ";
+ }
+
+ showToast(out);
+ }
+ break;
+ }
+ case OpenPgpApi.RESULT_CODE_USER_INTERACTION_REQUIRED: {
+ showToast("RESULT_CODE_USER_INTERACTION_REQUIRED");
+
+ PendingIntent pi = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT);
+ try {
+ PgpHandler.this.startIntentSenderForResult(pi.getIntentSender(),
+ requestCode, null, 0, 0, 0);
+ } catch (IntentSender.SendIntentException e) {
+ Log.e(Constants.TAG, "SendIntentException", e);
+ }
+ break;
+ }
+ case OpenPgpApi.RESULT_CODE_ERROR: {
+ showToast("RESULT_CODE_ERROR");
+
+ OpenPgpError error = result.getParcelableExtra(OpenPgpApi.RESULT_ERROR);
+ handleError(error);
+ break;
+ }
+ }
+ }
+ }
+
+ public void getKey(View view) {
+ decryptAndVerify(new Intent());
+ }
+
+ public void decryptAndVerify(Intent data) {
+ data.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY);
+ data.putExtra(OpenPgpApi.EXTRA_REQUEST_ASCII_ARMOR, true);
+ data.putExtra(OpenPgpApi.EXTRA_ACCOUNT_NAME, "Mohamed Zenadi");
+
+ try {
+ InputStream is = FileUtils.openInputStream(new File(getIntent().getExtras().getString("FILE_PATH")));
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ OpenPgpApi api = new OpenPgpApi(this, mServiceConnection.getService());
+ api.executeApiAsync(data, is, os, new MyCallback(false, os, REQUEST_CODE_DECRYPT_AND_VERIFY));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
}
diff --git a/app/src/main/res/layout/activity_pgp_handler.xml b/app/src/main/res/layout/activity_pgp_handler.xml
index 5a876766..159a6a9b 100644
--- a/app/src/main/res/layout/activity_pgp_handler.xml
+++ b/app/src/main/res/layout/activity_pgp_handler.xml
@@ -14,4 +14,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:onClick="getKey"
+ android:text="getkey"/>
+
</RelativeLayout>