From 410e2490ca1712075c97cd0f715ae4a3620cd1f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 20 Jul 2020 09:44:19 +0800 Subject: [PATCH] Add message verify with openkeychain --- TMessagesProj/proguard-rules.pro | 1 + .../java/org/telegram/ui/ChatActivity.java | 47 +++++++++++++++++++ .../ui/Components/ChatActivityEnterView.java | 16 ++++--- .../java/org/telegram/ui/LaunchActivity.java | 13 ++++- .../src/main/res/values/strings_nekox.xml | 2 + 5 files changed, 71 insertions(+), 8 deletions(-) diff --git a/TMessagesProj/proguard-rules.pro b/TMessagesProj/proguard-rules.pro index a672589de..0968602e7 100644 --- a/TMessagesProj/proguard-rules.pro +++ b/TMessagesProj/proguard-rules.pro @@ -20,6 +20,7 @@ -keep class org.telegram.tgnet.QuickAckDelegate { *; } -keep class org.telegram.tgnet.WriteToSocketDelegate { *; } -keep class com.v2ray.ang.dto.** { *; } +-keep class org.openintents.openpgp.** { *; } # -keep class io.github.trojan_gfw.** { *; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 342707bbe..c88982ad3 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -18,11 +18,13 @@ import android.annotation.TargetApi; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; +import android.app.PendingIntent; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentSender; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Configuration; @@ -57,6 +59,7 @@ import android.text.style.CharacterStyle; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.URLSpan; +import android.util.Log; import android.util.LongSparseArray; import android.util.Property; import android.util.SparseArray; @@ -96,6 +99,9 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; +import org.openintents.openpgp.OpenPgpDecryptionResult; +import org.openintents.openpgp.OpenPgpSignatureResult; +import org.openintents.openpgp.util.OpenPgpApi; import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; @@ -207,6 +213,7 @@ import org.telegram.ui.Components.URLSpanUserMention; import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.voip.VoIPHelper; +import cn.hutool.core.io.IoUtil; import tw.nekomimi.nekogram.JalaliCalendar; import tw.nekomimi.nekogram.MessageDetailsActivity; import tw.nekomimi.nekogram.MessageHelper; @@ -214,6 +221,7 @@ import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.settings.NekoGeneralSettingsActivity; import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; @@ -235,6 +243,7 @@ import tw.nekomimi.nekogram.NekoXConfig; import tw.nekomimi.nekogram.parts.MessageTransKt; import tw.nekomimi.nekogram.transtale.Translator; import tw.nekomimi.nekogram.utils.AlertUtil; +import tw.nekomimi.nekogram.utils.PGPUtil; @SuppressWarnings("unchecked") public class ChatActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate, DialogsActivity.DialogsActivityDelegate, LocationActivity.LocationActivityDelegate, ChatAttachAlertDocumentLayout.DocumentSelectActivityDelegate { @@ -15023,6 +15032,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not options.add(88); icons.add(R.drawable.ic_translate); } + if (StrUtil.isNotBlank(selectedObject.messageOwner.message) && StrUtil.isNotBlank(NekoConfig.openPGPApp) && selectedObject.messageOwner.message.contains("-----BEGIN PGP")) { + items.add(LocaleController.getString("DecryptVerify", R.string.DecryptVerify)); + options.add(200); + icons.add(R.drawable.baseline_vpn_key_24); + } } if (NekoConfig.showMessageDetails) { items.add(LocaleController.getString("MessageDetails", R.string.MessageDetails)); @@ -16217,6 +16231,39 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not }, null); break; } + case 200: { + + Intent open = new Intent(Intent.ACTION_SEND); + open.setType("application/pgp-message"); + open.putExtra(Intent.EXTRA_TEXT, selectedObject.messageOwner.message); + open.setClassName(NekoConfig.openPGPApp,NekoConfig.openPGPApp + ".ui.DecryptActivity"); + + try { + + getParentActivity().startActivity(open); + + } catch (Exception e) { + + AlertUtil.showToast(e); + + } + +// ByteArrayInputStream is = IoUtil.toUtf8Stream(selectedObject.messageOwner.message); +// +// PGPUtil.post(() -> PGPUtil.api.executeApiAsync(new Intent(OpenPgpApi.ACTION_DECRYPT_VERIFY), is, null, new OpenPgpApi.IOpenPgpCallback() { +// +// @Override +// public void onReturn(Intent result) { +// +// +// OpenPgpSignatureResult s = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE); +// +// } +// +// })); + + break; + } } selectedObject = null; selectedObjectGroup = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java index 9ae91cbbc..bfbf458de 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java @@ -3113,13 +3113,18 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe ((LaunchActivity) parentActivity).callbacks.put(115, result -> { - long keyId = result.getLongExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, 0L); - if (signKeyId < 1L) NekoConfig.setOpenPGPKeyId(keyId); + long keyId = signKeyId; + + if (signKeyId == 0L || signKeyId == 1L) { + + keyId = result.getLongExtra(OpenPgpApi.EXTRA_SIGN_KEY_ID, 0L); + + if (signKeyId == 0L) NekoConfig.setOpenPGPKeyId(keyId); + + } signComment(keyId); - return Unit.INSTANCE; - }); } @@ -3149,8 +3154,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe PendingIntent pi = result.getParcelableExtra(OpenPgpApi.RESULT_INTENT); try { - parentActivity.startIntentSenderFromChild(parentActivity, pi.getIntentSender(), - 115, null, 0, 0, 0); + parentActivity.startIntentSenderFromChild(parentActivity, pi.getIntentSender(), 115, null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { Log.e(OpenPgpApi.TAG, "SendIntentException", e); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 202aa1840..587af380f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -115,11 +115,13 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.Callable; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import kotlin.Unit; +import kotlin.reflect.KFunction; import tw.nekomimi.nekogram.NekoConfig; import tw.nekomimi.nekogram.NekoXConfig; import tw.nekomimi.nekogram.NekoXSettingActivity; @@ -2893,7 +2895,14 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa return rightActionBarLayout; } - public HashMap> callbacks = new HashMap<>(); + @FunctionalInterface + public interface Callback { + + void invoke(Intent data); + + } + + public HashMap callbacks = new HashMap<>(); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -2908,7 +2917,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa if (callbacks.containsKey(requestCode)) { - callbacks.remove(requestCode).apply(data); + callbacks.remove(requestCode).invoke(data); return; diff --git a/TMessagesProj/src/main/res/values/strings_nekox.xml b/TMessagesProj/src/main/res/values/strings_nekox.xml index cf7c9104b..ff6a2e899 100644 --- a/TMessagesProj/src/main/res/values/strings_nekox.xml +++ b/TMessagesProj/src/main/res/values/strings_nekox.xml @@ -227,4 +227,6 @@ None Sign + Decrypt / Verify + \ No newline at end of file