From 9458bddffd9c7368203d402725c5fff79ebbd168 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Tue, 5 Oct 2021 17:52:18 +0300 Subject: [PATCH 1/6] Added a better handling when we found an error during parsing pub keys.| #1469 --- .../response/model/DecryptErrorMsgBlock.kt | 36 +++++++-------- .../response/model/DecryptedAttMsgBlock.kt | 23 +++++----- .../model/EncryptedAttLinkMsgBlock.kt | 16 +++---- .../response/model/EncryptedAttMsgBlock.kt | 25 ++++++----- .../response/model/GenericMsgBlock.kt | 22 +++++----- .../api/retrofit/response/model/MsgBlock.kt | 7 +-- .../retrofit/response/model/MsgBlockError.kt | 31 +++++++++++++ .../response/model/MsgBlockFactory.kt | 17 ++++--- .../response/model/PlainAttMsgBlock.kt | 22 +++++----- .../response/model/PublicKeyMsgBlock.kt | 44 +++++++++---------- .../retrofit/response/model/SignedMsgBlock.kt | 22 +++++----- .../jetpack/viewmodel/MsgDetailsViewModel.kt | 4 +- .../flowcrypt/email/security/pgp/PgpMsg.kt | 10 ++--- .../fragment/MessageDetailsFragment.kt | 10 ++--- FlowCrypt/src/main/res/values/strings.xml | 2 +- 15 files changed, 160 insertions(+), 131 deletions(-) create mode 100644 FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockError.kt diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptErrorMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptErrorMsgBlock.kt index 428e2c0016..8132eb1979 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptErrorMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptErrorMsgBlock.kt @@ -19,7 +19,8 @@ import com.google.gson.annotations.SerializedName data class DecryptErrorMsgBlock( @Expose override val content: String?, @Expose override val complete: Boolean, - @SerializedName("decryptErr") @Expose val error: DecryptError? + @SerializedName("decryptErr") @Expose val decryptErr: DecryptError?, + @Expose override val error: MsgBlockError? = null ) : MsgBlock { @Expose @@ -28,31 +29,28 @@ data class DecryptErrorMsgBlock( constructor(source: Parcel) : this( source.readString(), 1 == source.readInt(), - source.readParcelable(DecryptError::class.java.classLoader) + source.readParcelable(DecryptError::class.java.classLoader), + source.readParcelable(MsgBlockError::class.java.classLoader), ) override fun describeContents(): Int { return 0 } - override fun writeToParcel(dest: Parcel, flags: Int) = - with(dest) { - writeParcelable(type, flags) - writeString(content) - writeInt(if (complete) 1 else 0) - writeParcelable(error, flags) + override fun writeToParcel(parcel: Parcel, flags: Int) { + parcel.writeParcelable(type, flags) + parcel.writeString(content) + parcel.writeByte(if (complete) 1 else 0) + parcel.writeParcelable(decryptErr, flags) + parcel.writeParcelable(error, flags) + } + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): DecryptErrorMsgBlock { + parcel.readParcelable(MsgBlock.Type::class.java.classLoader) + return DecryptErrorMsgBlock(parcel) } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = - object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): DecryptErrorMsgBlock { - source.readParcelable(MsgBlock.Type::class.java.classLoader) - return DecryptErrorMsgBlock(source) - } - - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptedAttMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptedAttMsgBlock.kt index ae918e4afd..d2f96f1661 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptedAttMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/DecryptedAttMsgBlock.kt @@ -25,7 +25,8 @@ data class DecryptedAttMsgBlock( @Expose override val content: String?, @Expose override val complete: Boolean, @Expose override val attMeta: AttMeta, - @SerializedName("decryptErr") @Expose val error: DecryptError? + @SerializedName("decryptErr") @Expose val decryptErr: DecryptError?, + @Expose override val error: MsgBlockError? = null ) : AttMsgBlock { var fileUri: Uri? = null @@ -37,7 +38,8 @@ data class DecryptedAttMsgBlock( source.readString(), 1 == source.readInt(), source.readParcelable(AttMeta::class.java.classLoader)!!, - source.readParcelable(DecryptError::class.java.classLoader) + source.readParcelable(DecryptError::class.java.classLoader), + source.readParcelable(MsgBlockError::class.java.classLoader) ) { fileUri = source.readParcelable(Uri::class.java.classLoader) } @@ -52,6 +54,7 @@ data class DecryptedAttMsgBlock( writeString(content) writeInt((if (complete) 1 else 0)) writeParcelable(attMeta, flags) + writeParcelable(decryptErr, flags) writeParcelable(error, flags) writeParcelable(fileUri, flags) } @@ -67,16 +70,12 @@ data class DecryptedAttMsgBlock( ) } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = - object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): DecryptedAttMsgBlock { - source.readParcelable(MsgBlock.Type::class.java.classLoader) - return DecryptedAttMsgBlock(source) - } + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): DecryptedAttMsgBlock { + parcel.readParcelable(MsgBlock.Type::class.java.classLoader) + return DecryptedAttMsgBlock(parcel) + } - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttLinkMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttLinkMsgBlock.kt index 6a4519a547..f1d0d39ca0 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttLinkMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttLinkMsgBlock.kt @@ -12,21 +12,26 @@ import com.google.gson.annotations.Expose data class EncryptedAttLinkMsgBlock( @Expose override val attMeta: AttMeta, + @Expose override val error: MsgBlockError? = null ) : AttMsgBlock { @Expose override val content: String = "" + @Expose override val type: MsgBlock.Type = MsgBlock.Type.ENCRYPTED_ATT_LINK + @Expose override val complete: Boolean = true constructor(source: Parcel) : this( - source.readParcelable(AttMeta::class.java.classLoader)!! + source.readParcelable(AttMeta::class.java.classLoader)!!, + source.readParcelable(MsgBlockError::class.java.classLoader) ) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeParcelable(attMeta, flags) + parcel.writeParcelable(error, flags) } override fun describeContents(): Int { @@ -34,12 +39,7 @@ data class EncryptedAttLinkMsgBlock( } companion object CREATOR : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel): EncryptedAttLinkMsgBlock { - return EncryptedAttLinkMsgBlock(parcel) - } - - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } + override fun createFromParcel(parcel: Parcel) = EncryptedAttLinkMsgBlock(parcel) + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttMsgBlock.kt index 097ddb7a2a..467248e7fd 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/EncryptedAttMsgBlock.kt @@ -13,21 +13,24 @@ import com.google.gson.annotations.Expose data class EncryptedAttMsgBlock( @Expose override val content: String?, - @Expose override val attMeta: AttMeta + @Expose override val attMeta: AttMeta, + @Expose override val error: MsgBlockError? = null ) : AttMsgBlock { var fileUri: Uri? = null @Expose override val complete: Boolean = true + @Expose override val type: MsgBlock.Type = MsgBlock.Type.ENCRYPTED_ATT constructor(source: Parcel) : this( source.readString(), - source.readParcelable(AttMeta::class.java.classLoader)!! + source.readParcelable(AttMeta::class.java.classLoader)!!, + source.readParcelable(MsgBlockError::class.java.classLoader) ) { - fileUri = source.readParcelable(Uri::class.java.classLoader) + fileUri = source.readParcelable(Uri::class.java.classLoader) } override fun describeContents(): Int { @@ -39,18 +42,16 @@ data class EncryptedAttMsgBlock( writeParcelable(type, flags) writeString(content) writeParcelable(attMeta, flags) + writeParcelable(error, flags) writeParcelable(fileUri, flags) } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): EncryptedAttMsgBlock { - source.readParcelable(MsgBlock.Type::class.java.classLoader) - return EncryptedAttMsgBlock(source) - } - - override fun newArray(size: Int): Array = arrayOfNulls(size) + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): EncryptedAttMsgBlock { + parcel.readParcelable(MsgBlock.Type::class.java.classLoader) + return EncryptedAttMsgBlock(parcel) } + + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/GenericMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/GenericMsgBlock.kt index a8e734eae1..d9cf292d44 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/GenericMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/GenericMsgBlock.kt @@ -23,13 +23,15 @@ import com.google.gson.annotations.Expose data class GenericMsgBlock( @Expose override val type: MsgBlock.Type = MsgBlock.Type.UNKNOWN, @Expose override val content: String?, - @Expose override val complete: Boolean + @Expose override val complete: Boolean, + @Expose override val error: MsgBlockError? = null ) : MsgBlock { constructor(type: MsgBlock.Type, source: Parcel) : this( type, source.readString(), - 1 == source.readInt() + 1 == source.readInt(), + source.readParcelable(MsgBlockError::class.java.classLoader) ) override fun describeContents() = 0 @@ -38,17 +40,15 @@ data class GenericMsgBlock( writeParcelable(type, flags) writeString(content) writeInt(if (complete) 1 else 0) + writeParcelable(error, flags) } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): MsgBlock { - val partType = source.readParcelable(MsgBlock.Type::class.java.classLoader)!! - return MsgBlockFactory.fromParcel(partType, source) - } - - override fun newArray(size: Int): Array = arrayOfNulls(size) + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): MsgBlock { + val partType = parcel.readParcelable(MsgBlock.Type::class.java.classLoader)!! + return MsgBlockFactory.fromParcel(partType, parcel) } + + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlock.kt index f5184fdf2b..990d4e261d 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlock.kt @@ -13,6 +13,7 @@ interface MsgBlock : Parcelable { val type: Type val content: String? val complete: Boolean + val error: MsgBlockError? enum class Type : Parcelable { UNKNOWN, @@ -88,7 +89,7 @@ interface MsgBlock : Parcelable { dest.writeInt(ordinal) } - fun isContentBlockType() : Boolean = CONTENT_BLOCK_TYPES.contains(this) + fun isContentBlockType(): Boolean = CONTENT_BLOCK_TYPES.contains(this) companion object { @JvmField @@ -127,8 +128,4 @@ interface MsgBlock : Parcelable { } } } - - companion object { - const val TAG_TYPE = "type" - } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockError.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockError.kt new file mode 100644 index 0000000000..9dae17b0f5 --- /dev/null +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockError.kt @@ -0,0 +1,31 @@ +/* + * © 2016-present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com + * Contributors: DenBond7 + */ + +package com.flowcrypt.email.api.retrofit.response.model + +import android.os.Parcel +import android.os.Parcelable +import com.google.gson.annotations.Expose + +/** + * @author Denis Bondarenko + * Date: 10/1/21 + * Time: 10:27 AM + * E-mail: DenBond7@gmail.com + */ +data class MsgBlockError( + @Expose val errorMsg: String? = null +) : Parcelable { + constructor(parcel: Parcel) : this(parcel.readString()) + + override fun writeToParcel(parcel: Parcel, flags: Int) = parcel.writeString(errorMsg) + + override fun describeContents(): Int = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): MsgBlockError = MsgBlockError(parcel) + override fun newArray(size: Int): Array = arrayOfNulls(size) + } +} diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt index d56a32857a..fc9a4e6299 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt @@ -42,15 +42,22 @@ object MsgBlockFactory { val complete = !missingEnd return when (type) { MsgBlock.Type.PUBLIC_KEY -> { - val keyDetails = if (content != null && complete) { + if (content.isNullOrEmpty()) { + PublicKeyMsgBlock(content, complete, null, MsgBlockError("empty source")) + } else { try { - PgpKey.parseKeys(content).pgpKeyDetailsList.firstOrNull() + val keyDetails = PgpKey.parseKeys(content).pgpKeyDetailsList.firstOrNull() + PublicKeyMsgBlock(content, true, keyDetails) } catch (e: Exception) { e.printStackTrace() - null + PublicKeyMsgBlock( + content = content, + complete = false, + keyDetails = null, + error = MsgBlockError("[" + e.javaClass.simpleName + "]: " + e.message) + ) } - } else null - PublicKeyMsgBlock(content, complete, keyDetails) + } } MsgBlock.Type.DECRYPT_ERROR -> DecryptErrorMsgBlock(content, complete, null) MsgBlock.Type.SIGNED_MSG -> { diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PlainAttMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PlainAttMsgBlock.kt index a6ed09204d..5a62b00e12 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PlainAttMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PlainAttMsgBlock.kt @@ -13,7 +13,8 @@ import com.google.gson.annotations.Expose data class PlainAttMsgBlock( @Expose override val content: String?, - @Expose override val attMeta: AttMeta + @Expose override val attMeta: AttMeta, + @Expose override val error: MsgBlockError? = null ) : AttMsgBlock { var fileUri: Uri? = null @@ -26,7 +27,8 @@ data class PlainAttMsgBlock( constructor(source: Parcel) : this( source.readString(), - source.readParcelable(AttMeta::class.java.classLoader)!! + source.readParcelable(AttMeta::class.java.classLoader)!!, + source.readParcelable(MsgBlockError::class.java.classLoader) ) { fileUri = source.readParcelable(Uri::class.java.classLoader) } @@ -40,18 +42,16 @@ data class PlainAttMsgBlock( writeParcelable(type, flags) writeString(content) writeParcelable(attMeta, flags) + writeParcelable(error, flags) writeParcelable(fileUri, flags) } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): PlainAttMsgBlock { - source.readParcelable(MsgBlock.Type::class.java.classLoader) - return PlainAttMsgBlock(source) - } - - override fun newArray(size: Int): Array = arrayOfNulls(size) + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): PlainAttMsgBlock { + parcel.readParcelable(MsgBlock.Type::class.java.classLoader) + return PlainAttMsgBlock(parcel) } + + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt index 3ba554a876..ea42d563f0 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt @@ -24,43 +24,39 @@ data class PublicKeyMsgBlock constructor( @Expose override val content: String?, @Expose override val complete: Boolean, @Expose val keyDetails: PgpKeyDetails?, - @Expose val parseKeyErrorMsg: String? = null, + @Expose override val error: MsgBlockError? = null ) : MsgBlock { @Expose override val type: MsgBlock.Type = MsgBlock.Type.PUBLIC_KEY var existingPgpContact: PgpContact? = null - constructor(source: Parcel) : this( - source.readString(), - 1 == source.readInt(), - source.readParcelable(PgpKeyDetails::class.java.classLoader), - source.readString(), - ) - - override fun describeContents(): Int { - return 0 + constructor(parcel: Parcel) : this( + parcel.readString(), + parcel.readByte() != 0.toByte(), + parcel.readParcelable(PgpKeyDetails::class.java.classLoader), + parcel.readParcelable(MsgBlockError::class.java.classLoader), + ) { + existingPgpContact = parcel.readParcelable(PgpContact::class.java.classLoader) } - override fun writeToParcel(dest: Parcel, flags: Int) = - with(dest) { + override fun writeToParcel(parcel: Parcel, flags: Int) = + with(parcel) { writeParcelable(type, flags) writeString(content) writeInt((if (complete) 1 else 0)) - writeParcelable(keyDetails, 0) - writeString(parseKeyErrorMsg) + writeParcelable(keyDetails, flags) + writeParcelable(error, flags) } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = - object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): PublicKeyMsgBlock { - source.readParcelable(MsgBlock.Type::class.java.classLoader) - return PublicKeyMsgBlock(source) - } + override fun describeContents(): Int = 0 + + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): PublicKeyMsgBlock { + parcel.readParcelable(MsgBlock.Type::class.java.classLoader) + return PublicKeyMsgBlock(parcel) + } - override fun newArray(size: Int): Array = arrayOfNulls(size) - } + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/SignedMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/SignedMsgBlock.kt index 29b91364f2..7cf9e71d4b 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/SignedMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/SignedMsgBlock.kt @@ -17,7 +17,8 @@ data class SignedMsgBlock( @Expose val signedType: Type, @Expose override val content: String?, @Expose override val complete: Boolean, - @Expose val signature: String? + @Expose val signature: String?, + @Expose override val error: MsgBlockError? = null ) : MsgBlock { @Expose @@ -32,7 +33,8 @@ data class SignedMsgBlock( ?: throw IllegalArgumentException("Undefined type"), source.readString(), 1 == source.readInt(), - source.readString() + source.readString(), + source.readParcelable(MsgBlockError::class.java.classLoader) ) override fun describeContents() = 0 @@ -43,6 +45,7 @@ data class SignedMsgBlock( writeString(content) writeInt(if (complete) 1 else 0) writeString(signature) + writeParcelable(error, flags) } enum class Type : Parcelable { @@ -67,15 +70,12 @@ data class SignedMsgBlock( } } - companion object { - @JvmField - val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): MsgBlock { - val partType = source.readParcelable(MsgBlock.Type::class.java.classLoader)!! - return MsgBlockFactory.fromParcel(partType, source) - } - - override fun newArray(size: Int): Array = arrayOfNulls(size) + companion object CREATOR : Parcelable.Creator { + override fun createFromParcel(parcel: Parcel): MsgBlock { + val partType = parcel.readParcelable(MsgBlock.Type::class.java.classLoader)!! + return MsgBlockFactory.fromParcel(partType, parcel) } + + override fun newArray(size: Int): Array = arrayOfNulls(size) } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/jetpack/viewmodel/MsgDetailsViewModel.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/jetpack/viewmodel/MsgDetailsViewModel.kt index c7708fba4e..792950b0cb 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/jetpack/viewmodel/MsgDetailsViewModel.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/jetpack/viewmodel/MsgDetailsViewModel.kt @@ -419,8 +419,8 @@ class MsgDetailsViewModel( } if (block is DecryptErrorMsgBlock) { - if (block.error?.details?.type == PgpDecrypt.DecryptionErrorType.NEED_PASSPHRASE) { - val fingerprints = block.error.fingerprints ?: emptyList() + if (block.decryptErr?.details?.type == PgpDecrypt.DecryptionErrorType.NEED_PASSPHRASE) { + val fingerprints = block.decryptErr.fingerprints ?: emptyList() if (fingerprints.isEmpty()) { ExceptionUtil.handleError(IllegalStateException("Fingerprints were not provided")) } else { diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/security/pgp/PgpMsg.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/security/pgp/PgpMsg.kt index cac4d25572..b3d0a83152 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/security/pgp/PgpMsg.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/security/pgp/PgpMsg.kt @@ -14,6 +14,7 @@ import com.flowcrypt.email.api.retrofit.response.model.DecryptErrorMsgBlock import com.flowcrypt.email.api.retrofit.response.model.EncryptedAttLinkMsgBlock import com.flowcrypt.email.api.retrofit.response.model.EncryptedAttMsgBlock import com.flowcrypt.email.api.retrofit.response.model.MsgBlock +import com.flowcrypt.email.api.retrofit.response.model.MsgBlockError import com.flowcrypt.email.api.retrofit.response.model.MsgBlockFactory import com.flowcrypt.email.api.retrofit.response.model.PublicKeyMsgBlock import com.flowcrypt.email.api.retrofit.response.model.SignedMsgBlock @@ -30,7 +31,6 @@ import com.flowcrypt.email.extensions.kotlin.toEscapedHtml import com.flowcrypt.email.extensions.kotlin.toInputStream import com.flowcrypt.email.extensions.kotlin.unescapeHtml import com.flowcrypt.email.extensions.org.bouncycastle.openpgp.armor -import com.flowcrypt.email.extensions.org.bouncycastle.openpgp.toPgpKeyDetails import com.flowcrypt.email.extensions.org.owasp.html.allowAttributesOnElementsExt import com.flowcrypt.email.security.KeysStorageImpl import com.flowcrypt.email.util.exception.DecryptionException @@ -798,7 +798,7 @@ object PgpMsg { val keyRings = PgpKey.parseAndNormalizeKeyRings(source) if (keyRings.isNotEmpty()) { resultBlocks.addAll(keyRings.map { - PublicKeyMsgBlock(it.armor(null), true, it.toPgpKeyDetails()) + MsgBlockFactory.fromContent(MsgBlock.Type.PUBLIC_KEY, it.armor(null)) }) } else { resultBlocks.add( @@ -806,7 +806,7 @@ object PgpMsg { content = block.content, complete = false, keyDetails = null, - parseKeyErrorMsg = "empty KeyRing" + error = MsgBlockError("empty KeyRing") ) ) } @@ -817,7 +817,7 @@ object PgpMsg { content = block.content, complete = false, keyDetails = null, - parseKeyErrorMsg = ex.javaClass.simpleName + ": " + ex.message + error = MsgBlockError(ex.javaClass.simpleName + ": " + ex.message) ) ) } @@ -946,7 +946,7 @@ object PgpMsg { DecryptErrorMsgBlock( content = msgBlock.content, complete = true, - error = (decryptionResult.exception as? DecryptionException)?.to() + decryptErr = (decryptionResult.exception as? DecryptionException)?.to() ) ) } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt index da1775c9b9..52bbcdbc6c 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/MessageDetailsFragment.kt @@ -139,9 +139,9 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi for (block in msgInfo?.msgBlocks ?: emptyList()) { if (block.type == MsgBlock.Type.DECRYPT_ERROR) { val decryptErrorMsgBlock = block as? DecryptErrorMsgBlock ?: continue - val decryptErrorDetails = decryptErrorMsgBlock.error?.details ?: continue + val decryptErrorDetails = decryptErrorMsgBlock.decryptErr?.details ?: continue if (decryptErrorDetails.type == PgpDecrypt.DecryptionErrorType.NEED_PASSPHRASE) { - val fingerprints = decryptErrorMsgBlock.error.fingerprints ?: continue + val fingerprints = decryptErrorMsgBlock.decryptErr.fingerprints ?: continue showNeedPassphraseDialog( fingerprints, REQUEST_CODE_SHOW_FIX_EMPTY_PASSPHRASE_DIALOG @@ -952,10 +952,10 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi * @return The generated view. */ private fun genPublicKeyPart(block: PublicKeyMsgBlock, inflater: LayoutInflater): View { - if (!block.complete && block.parseKeyErrorMsg?.isNotEmpty() == true) { + if (!block.complete && block.error?.errorMsg?.isNotEmpty() == true) { return getView( clipLargeText(block.content), - getString(R.string.msg_contains_not_valid_pub_key, block.parseKeyErrorMsg), + getString(R.string.msg_contains_not_valid_pub_key, block.error.errorMsg), layoutInflater ) } @@ -1105,7 +1105,7 @@ class MessageDetailsFragment : BaseFragment(), ProgressBehaviour, View.OnClickLi block: DecryptErrorMsgBlock, layoutInflater: LayoutInflater ): View { - val decryptError = block.error ?: return View(context) + val decryptError = block.decryptErr ?: return View(context) when (decryptError.details?.type) { PgpDecrypt.DecryptionErrorType.KEY_MISMATCH -> return generateMissingPrivateKeyLayout( diff --git a/FlowCrypt/src/main/res/values/strings.xml b/FlowCrypt/src/main/res/values/strings.xml index 3ffec646df..9cf7e1112d 100644 --- a/FlowCrypt/src/main/res/values/strings.xml +++ b/FlowCrypt/src/main/res/values/strings.xml @@ -533,5 +533,5 @@ Could not extract the key details Security threat - opening this message is dangerous because it was modified in transit. Security threat!\n\nMessage is missing integrity checks (MDC). The sender should update their outdated software.\n\nDisplay the message at your own risk. - This message contained a Public Key that was not valid:\n\n%1$s + This message contained a Public Key that was not valid.\n\n%1$s From 250e4ec5aefa162d4d35697702ee3f7153165eb7 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Wed, 6 Oct 2021 16:06:46 +0300 Subject: [PATCH 2/6] Removed unused code --- .../email/api/retrofit/response/model/MsgBlockFactory.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt index fc9a4e6299..74d9eddc42 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/MsgBlockFactory.kt @@ -75,13 +75,6 @@ object MsgBlockFactory { fun fromAttachment(type: MsgBlock.Type, attachment: MimePart): MsgBlock { val attContent = attachment.content - //todo-denbond7 need to test it - - /*val data: String? = when (attContent) { - is String -> Base64.getEncoder().encode(attachment.inputStream.readBytes()) - is InputStream -> attContent.toBase64EncodedString() - else -> null - }*/ val data = attachment.inputStream.readBytes() val attMeta = AttMeta( From a0cbd9650ea27cc3cea09523f81c186467381d7b Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Wed, 6 Oct 2021 16:39:15 +0300 Subject: [PATCH 3/6] Updated sources for docker-mailserver. Updated flowcrypt/flowcrypt-email-server to 0.0.10| #1469 --- docker-mailserver/docker-compose.yml | 2 +- .../default/dovecot.list.index.log | Bin 5852 -> 7604 bytes .../Drafts/dbox-Mails/dovecot.index.log | Bin 336 -> 352 bytes .../mailboxes/INBOX/dbox-Mails/dovecot.index | Bin 0 -> 592 bytes .../INBOX/dbox-Mails/dovecot.index.cache | Bin 14824 -> 17736 bytes .../INBOX/dbox-Mails/dovecot.index.log | Bin 8108 -> 9312 bytes .../default/mailboxes/INBOX/dbox-Mails/u.24 | 43 +++++++++++ .../default/mailboxes/INBOX/dbox-Mails/u.25 | 70 ++++++++++++++++++ .../Junk/dbox-Mails/dovecot.index.log | Bin 336 -> 352 bytes .../Sent/dbox-Mails/dovecot.index.log | Bin 352 -> 368 bytes .../Trash/dbox-Mails/dovecot.index.cache | Bin 2460 -> 3332 bytes .../Trash/dbox-Mails/dovecot.index.log | Bin 1304 -> 2392 bytes .../denbond7/dovecot.list.index | Bin 784 -> 784 bytes .../denbond7/dovecot.list.index.log | Bin 7076 -> 3260 bytes .../Drafts/dbox-Mails/dovecot.index.log | Bin 336 -> 352 bytes .../INBOX/dbox-Mails/dovecot.index.cache | Bin 2272 -> 2272 bytes .../INBOX/dbox-Mails/dovecot.index.log | Bin 1048 -> 1064 bytes .../Junk/dbox-Mails/dovecot.index.log | Bin 336 -> 352 bytes .../Sent/dbox-Mails/dovecot.index.cache | Bin 11828 -> 14872 bytes .../Sent/dbox-Mails/dovecot.index.log | Bin 6128 -> 7364 bytes .../denbond7/mailboxes/Sent/dbox-Mails/u.23 | 34 +++++++++ .../denbond7/mailboxes/Sent/dbox-Mails/u.24 | 61 +++++++++++++++ .../Trash/dbox-Mails/dovecot.index.cache | Bin 2480 -> 3836 bytes .../Trash/dbox-Mails/dovecot.index.log | Bin 1208 -> 2584 bytes 24 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/dovecot.index create mode 100644 docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.24 create mode 100644 docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.25 create mode 100644 docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.23 create mode 100644 docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.24 diff --git a/docker-mailserver/docker-compose.yml b/docker-mailserver/docker-compose.yml index 510a7cbe2c..5c81843000 100644 --- a/docker-mailserver/docker-compose.yml +++ b/docker-mailserver/docker-compose.yml @@ -1,7 +1,7 @@ version: '2' services: mail: - image: flowcrypt/flowcrypt-email-server:0.0.8 + image: flowcrypt/flowcrypt-email-server:0.0.10 hostname: ${HOSTNAME} domainname: ${DOMAINNAME} container_name: ${CONTAINER_NAME} diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/dovecot.list.index.log b/docker-mailserver/maildata_source/flowcrypt.test/default/dovecot.list.index.log index 25a7a5308ec96979365b9e703f6a28dcebc6b6c6..2f30af6e944be1fe9ef76e656a476d2db60b489c 100644 GIT binary patch delta 568 zcmcbkyTy9L9kIzTcuaU%7$ATVNU=`7%dXAHG5H~%zSsg*28KSqn8b#Lh86_|1_1{K z7KRDpll6qfCLa(|;8jqBXai|ynQX|fEhfW;sX;^nsKE?w2S^JmSg{RI@oY5HX8;uo znlW;MtruZuU|4{rKtyt~9Ji4a&|wS(K<92jlTMJFtS4e7rh-N18p+9VqGnOF_1pa!Tw#7t2Ki_{4j1_oeE xHZw4A2;7^nhtY0HZ)dLqm%K1A{;S0}F!-e@r3(U^E6^ delta 7 OcmaFBbb)C@03!el`~tQB diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/dovecot.index b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/dovecot.index new file mode 100644 index 0000000000000000000000000000000000000000..16232e11cad90946459654f4b0b1905e62f7adbd GIT binary patch literal 592 zcmYk3!Ab&A6o&uOax4`qD=|VbiKwh7h+d*yixw@MG*GA<5<^KnuKLl5CU;=X{BO zXg7%?7vBf&9C`MiQhb+YD19qU{h5QxalKWnRxT7fJ1=E5$6E+!eASwYh4mO(96Va| z>fTPVS*x55@@7Q`~ZTnY~$@u-snZ|K%{c2lXqgQe=*7xVr{C e+%vDc5cf8LYc9tYhWp!`mCNY9luzvfpX6V)IX!a# literal 0 HcmV?d00001 diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/dovecot.index.cache b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/dovecot.index.cache index b184296d08161b0b954bbff20dffdc882f7a8cea..2bf317b31f4cc416304bb6bec536ea8302a0322b 100644 GIT binary patch delta 1486 zcmbtU%}*0S6yG9~44aVK_ip1p{r*$!~w}y_wAW*f+DY^lH;4 z*iP9v`}@tAF#-?AaV~;kjpHh|g(YX(`ubz&sNgt(c<-ILmbL=kI$iL>>FS}*&8_h? z*;5wlCX4>;yYs8(B;ApzfYs_&c+J;WM`Nk6p$HG3`FNA+7nOjbN2N zBDkxZ@KnYy^8YXap zyQ#_HVO}5O8u-vTP$y#vg-~>4lmfOr7n}Vl71InP(UJ{TLa>OOYg?6Oh$=$gNcq%y zMEcZ0xckZV^lgSagz4H}w(3?N_0v{aeN;aJt~3q$4`9z}K-^`A`=={m#wGYFsZtLw-e&HyCiiwgOdaf0xFSwu4Lp&UVWutgwewCd?{N<7fXE$*;_{D65?xS^UJwR zy13HcDI^C~F^GNp(;`V~Kn%e{ zdGM&g_2aOlvcbKuM$4NbI9_=;CHZA?X|Q}C5gh2^$=R&L!zzRmZUG8y_L@C*FKQu+ zdmPiunq$m^qi>)}RxuJ`+bs)6#)JI%hW3w^YqEOQye7M31gZ4FVwJ0d{F5aErE@5o zo6qJ9R9K!xH;ol!6pQ&H4`29Lvx@1%Ao*Eq6)8Z>kYC+z?Szr(MXKdZP{XnsR+Iy+ zJ^tk2l&Xk|jImsP5Lh0xv;S!;trV)=4e+DU&i|zUfXKO8_|?+wm}ce%V-M|ZwWNkb ZBnMzc@;4qHkha$Tsm?r$zCiS~`2(zSRZ9Q> delta 120 zcmX@n#rUFFl97XvLEvgvf-exOFfcF(1Mv$>AhA)hSXdfJGsrP9Fh~OFmbIaYFx<5^ fbnK}okevvkK>)wlpf0Q)Wb6N^99Hdehh=C@6-DUuEn*Kj1PO@%F|wVK zNPLi;ElLPWKRuA^%Q9*bBq+SvfN-POLQ2@}p BXWak* delta 7 OcmaFhvBrMG8hHQ@wgZm< diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.24 b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.24 new file mode 100644 index 0000000000..683bf21f39 --- /dev/null +++ b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.24 @@ -0,0 +1,43 @@ +2 M1e C615c0f7e +N 00000000000004E9 +Return-Path: +Delivered-To: default@flowcrypt.test +Received: from mail.flowcrypt.test + by mail.flowcrypt.test with LMTP + id OiFBGH4PXGEbCAAAc/RpdQ + (envelope-from ) + for ; Tue, 05 Oct 2021 08:40:30 +0000 +Received: from localhost (localhost [127.0.0.1]) + by mail.flowcrypt.test (Postfix) with ESMTP id 5D31522A08 + for ; Tue, 5 Oct 2021 08:40:30 +0000 (UTC) +Date: Tue, 5 Oct 2021 11:40:26 +0300 (GMT+03:00) +From: denbond7@flowcrypt.test +To: default@flowcrypt.test +Message-ID: <229386180.1.1633423226719@flowcrypt.test> +Subject: Decryption error. NO_MDC +Mime-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_Part_0_243811031.1633423226707" + +------=_Part_0_243811031.1633423226707 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP MESSAGE----- +Version: PGPainless + +hF4DTxRYvSK3u1MSAQdAdLdyFeP0A84nGXE5n7Bze38EDAxdSdogi/cP6P8I3HAw +owydvIf9YVRhy89dKNF0Yy5yfshR47xWqMO15GCvsEzOcdbFPTDEMYMtSK5ATmBq +yWL2yM5zrfNaG9vvnBYatWhApgzHmvxQNbOr8Wxhv8A1kV22BR5CSZwn3AqA1xUc +6t6Blr1jw/0dkJRobWWXjv04BqyXpL4wFGnx9osoMD12VyoNfTy2zqF9p5OA7Kte +3shL2g== +=tNBK +-----END PGP MESSAGE----- + +------=_Part_0_243811031.1633423226707-- + + +R615c0f7e +V50c +G11b068187e0f5c611b08000073f46975 + diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.25 b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.25 new file mode 100644 index 0000000000..f9e22cab5f --- /dev/null +++ b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/INBOX/dbox-Mails/u.25 @@ -0,0 +1,70 @@ +2 M1e C615da67a +N 0000000000000DEB +Return-Path: +Delivered-To: default@flowcrypt.test +Received: from mail.flowcrypt.test + by mail.flowcrypt.test with LMTP + id BYvqBnqmXWFvBgAAc/RpdQ + (envelope-from ) + for ; Wed, 06 Oct 2021 13:36:58 +0000 +Received: from localhost (localhost [127.0.0.1]) + by mail.flowcrypt.test (Postfix) with ESMTP id 18F13223D7 + for ; Wed, 6 Oct 2021 13:36:58 +0000 (UTC) +Date: Wed, 6 Oct 2021 16:36:55 +0300 (GMT+03:00) +From: denbond7@flowcrypt.test +To: default@flowcrypt.test +Message-ID: <160641524.1.1633527415946@flowcrypt.test> +Subject: Parse an inline pub key error +Mime-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_Part_0_65153003.1633527415907" + +------=_Part_0_65153003.1633527415907 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP MESSAGE----- + +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 +=D5N/ +-----END PGP MESSAGE----- +------=_Part_0_65153003.1633527415907-- + + +R615da67a +Ve29 +Gb915fe067aa65d616f06000073f46975 + diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Junk/dbox-Mails/dovecot.index.log b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Junk/dbox-Mails/dovecot.index.log index 01a963325b18a016436bb7ff5ea966528675b031..744d7f1e2f278292367208afea0570849d3d1900 100644 GIT binary patch delta 24 fcmcb>^nhtY0HZ)dLqm%K1A{;S0}I0m{+L7nVnhbw delta 7 OcmaFBbb)C@03!el`~tQB diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Sent/dbox-Mails/dovecot.index.log b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Sent/dbox-Mails/dovecot.index.log index 415811cd7420cab56437a31022895ac35653044e..b46203ec4a9a0a610ce43222179aec33222bd072 100644 GIT binary patch delta 24 fcmaFB^nqzZ0;51fLqm%K1A{;S0}I0zzL-P+W&sBM delta 7 Ocmeys^nhtY0wVwo+ydqR diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Trash/dbox-Mails/dovecot.index.cache b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Trash/dbox-Mails/dovecot.index.cache index 1dcefb39644b64baf996e7096f7c97a5c3f8bc54..4534e445b421010c52b76bec7da92167c0c77608 100644 GIT binary patch literal 3332 zcmdT`TW{P%6n090c7e7$@Q5^8B*Z0lXFR^sP|{r|O3Uu1yRJy2N?Y%Gl9+mJV|$Zs zo>l_!0Q>_GzknaY1FuL(JitFGXMEXab7`BT0&%3{IcIL3Io~;F&cfvd;rj32J-qev z_YZ}V7T*$tS3#amzy6bV{k>2QKvRjAK%N4>4a}(#g&7Mo(V4`|LZfkz`LUa1H&{4K zCUM5RPiiPmqAVIl!E)V=%fnIDBW;+KgX*4mlN5S28I~?>5 zbfq<(e04zf?YT_>;iqT4(AQ{U9Vbj9YqAL0r zQ;chZun2Scx;ObEpw%QAS*XdvNs4ZIEF46kr+>B`MEm*qrHrN7r?8IOh0|-mcYwiE zIki}tx;sob9tO?m(2iZC8|aSr@5kP=yZgKp(m%?EQMV*X6RkQnv8h zoZf)%JHXcqRp^ZeU$S9lAxV<>9DbMgfcZR5PGljEZMy)*k-ybu=jQW%t3U<05;?wG zz|X^Xt!zYau1CP&p{%J1J{QrdYr*ID=aJjdQmL@r~rh2RpQIR688xvx~yo} zD2$?;)Ksy0CM*fH6l#$&4*wM_Wn#)2)=Y^UKDMcz4@>T^$FQ8GuNj#8ezuE7ewzB> z4tm5Uh$TssTmaW!0nC?$ql__D2&LR0R900*F%;dPc}$+>&y^qYSpDcE8#Gy-C?TU4 zca>1P({D8!aObneD9^2@$0n5(L)8qN<5?Zw!18fC&k{o?=c1mQEg@M&Jr)=52*H+2 zELk}*7s0V}s^YH7HDH3ArqgeJX}}=QIX_-~;GTz{oRb#kXkm_ay+pd*Xb8NmnoirX z+m7gLZP4B!yx!5d4uFOM}RpJeATc z84t5@!ip{y?y(?>nGi=YmBzjo6jGFUED?5~Lm2rZCh^iW6$X9?WoV_qzET?cam=#P z$h>aiv5bKK`@EYxKWNJO+8MJYq@vC+E7KyeD3oZ% mGt=U%9yyv9`Mb6We6d1&wZS$T^-Y5xF$>N9!( delta 759 zcmZpXnj>7#$ic`UaJ4JJZeDi+BLf2iGZ4?=1QI~d(9qBU#1H&|68sP$6cVHdMF5S1 zEYAXz;{ak14PyiOlj}KEWkGf_FfaiD0}~?VhIv;I=;(&Y8(EbnCL}NlO+0AMC_M3}Ij0EJOQMr4 z8G{wYpgeIXEdiw^p|sTGwT$wN(v#0JYHP|s#X!^*sOuDfY*_5VEuOrV)pc?llN_Va ztDUCS*yS&UhW2)h%R&4G3ovZC4z@+=4_05LYZ-6!j?$bjuuo1D)g Ui`D)|EX3Ha%jyiVp9AK10MVUfbpQYW diff --git a/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Trash/dbox-Mails/dovecot.index.log b/docker-mailserver/maildata_source/flowcrypt.test/default/mailboxes/Trash/dbox-Mails/dovecot.index.log index aa62efc12c99e1d6f23bc593f0d65ae16188c0f3..89fa9d2dfb43767c41a888940f03707fb9429e8b 100644 GIT binary patch delta 528 zcmaJ-J4!=Q5S{yZFZV?ZFD6C{izmiP31Sf}6te^iJ1xut6c=FeKt)gyVGsmGEG#Tt zh=u7~f{nTY!E>$z)98gW%;(IUnR{J*op_o~^0F+C3Xyz6yj;|_`?_zM#_N||=z0;k z%|t*sCuLLGQeJKKnKyqzJ8n585G5mV5AkY>?v~!$nL4R& z)kr@S3HgB;3|9$);)-dw)pw{>6|#zyO+_0cA@8G6ae|7F#N8&I*CaY-#q2o&V|2Hfmh+W-In delta 7 Ocmca1G=pn{1S11W~(d@+d|12Pyzr9nI(xL5K4Op5|ZfyrkX1 zqyi)%+9tCw1!x8^GB8Y^<(mkS2AK^4oDhoPffR%R5@(rQ%Oo$s3YB33(rh46AOUj0 M11Sdi1>Ff712Pyzc|bfMkdubc96*X~@>xcC33iA810#^; z0%9E?0n#>^g(*PO04Str(h6O|b0V{-JxX%w^Faas1$+b-K5+D`~fLt;GNXX6y Q8nuNffCpq$%RGot0MyVF#Q*>R diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/dovecot.list.index.log b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/dovecot.list.index.log index e65b3f49b725d9b23e7d3d41722bbd4d11c659b3..e306307afbb3e3a82c8eef3d55aed21fa634424b 100644 GIT binary patch literal 3260 zcmbVOJ#Q015S=839ADvx1Oy0R35pacQo2atf)WXdiUK6lQ@TJ9p_4EKl)pfc!h#f* zkWfk!rEo#PA3#C^35l8_1s%M1_Slp4W_K?mt$gR5k2h~-=XPdpMSj2AYSlz!4om7H z9~K@yKFMdu%@zpiBLOsE~3s@BP_GK*1Csaq;En`tsKh#6iKe&SBU~VG_?5FzJ_NjZ8=p_qEOAeHqmJb*#=`>-h7A}g52-!H`mhh~oIgApz8GI! z=qNX_d={Aqgnh7trFM*?;+|*vygu4g{aF5Ak^c(^^9BkI`^tUr_W7_6$UpI?V#u#e zV-U1KiL&so9tsUcVmQz?ejF~YHq1w^zEEWZMC(W>0Ci2;-T>}AO zU)Jus@fG9Eo*&Cw2s3@&AYh1Mj?IeuqglZosWL12sE?cLZRD@HR{8e7zEwgl>%>|q z_E3*-uki4_a|DJE-?m4H#P&!G!#3jWIW=EBHQ}MkxBnc2LsIkKMeJ`*>>U$3byhOR zfydW@@s--UmM`XFxeWC#?G|VN(fmWbYvbtoRy(`ryE87~lJ&#k?I-?&eW#B5-d(B5 zKZw5bPARw?;k`V^U4t>ySKPDT4SeG1qnsrnE@*cXi=z6WoT%Sg7J2sm(V=_ruECso u9_i~>XZYRV+^O>2=z1_TFhr3<$(zN%I4ZvTgYrfl%Ug_xfd@k$82$q#>#S4& literal 7076 zcmbW4KZsOU6vm(Ks1yIhF|Kh(3@|x{Qq{5;ngal8xkrto<`T_K{VE;y4K89%r?;hB1I16n zJLFfoJyOg$-hFV)PfpFqpUQA9!Y~VgFh1Km(TyZpH%o`v2*YE=kmDVDmqG9L;w3s* z-o3~{2+6mYSHXNG@UDkRFn&lkYu|O=@N-i$@~1MivA~ewIKVM}h{5W4(TyZpH%o_3 zgke!JlxjT|1ACW2@3@z+4!4gi@Ah*LLh>!<+hAS_y!#j?Vf>J8mUl~U`njoD&Uy7T z!mu`iAyqe$Xx%IwrjQ)!FoPS3=#b+bdzV4)xR+2P$-5Q@Atc{oz5(X@fp=55X<&S| zcZWJ|YNr|bQyEqw3=1O|Ebl}&l4#v59X28iZ5+T@L${54@cE)qJV(fP-jh52y3;Ag zTlO}C-g2*@W|FrDI0zy6)|zG@z}pY%_rre`bI$#+dDhQOP063iuoz+Z3Wp=c5A~Pj zt>{J)t(&DoKf>@#F{FCOc_uhHg5L4F=peuITKFu(Jb9j!eEud8J_GXFeH8p{t?u2g zI1n-3>9&d-sb%S=_k`AM95ZXaGys%&aGX{Vd)}4(&mPIy{}%xju5|$gFt1x{YM)ZK zKM#6Du8l8YxAeYHR=A#W1OxLWV*mGv2h7nPjMITN zPevF{U?HMIi5yvv#Q-Z@un&0el5tiaO!{F}zQx=Fb9cSo2dj!X$GhdvHr(vgjQqlE zF+7SeOyf6UN7q6d>07jjMFrYCDGk%Pb8vzg@??|BUNI`5k@&g%6;9E6a3%i}v> zes@pZm%d`o>GivpHr(7Onf0vvEW&Uehd0)c-Rq(oL9}j`4(mt`by!ghIo|P{X3#s{ zgTxEVyO%i#A^8^b860f?{B+?H6WuU-vjIqL9LZ7)FSg8yoI%1Lu2N0 zQLh-+tg4mMpFe-$`;&b^kHF*hqNVeEMCZpN7_5CQy@Ba#yVO74xJO_=Q{P9k$KaZn`Fz0x8>r3w)_Y?V1BgwnpBMgfp7*chk z3|co!hqVa9$*D~pa=hc&%Aj{BTj^kVhv{6T>efYXeY*O7&ATEbrDM4C{&^$2*=o40?yMl@6A7n9fD2Za2{1-K7s}-YvWm s*KNn3Ha}wjgMajm_l}z7+)q~`4DDCr43>AI8yU53mUkNwh7t__1G?zAnE(I) diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Drafts/dbox-Mails/dovecot.index.log b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Drafts/dbox-Mails/dovecot.index.log index fba7da47b89f08e40cc6549649104b453c6dde87..fa3cae8ab49807af5770a22b33b0e68156281784 100644 GIT binary patch delta 24 fcmcb>^nhtY0HZ)dLqm%K1A{;S0}F!-e@r3(U^E6^ delta 7 OcmaFBbb)C@03!el`~tQB diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/INBOX/dbox-Mails/dovecot.index.cache b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/INBOX/dbox-Mails/dovecot.index.cache index 3edcba4dc9fdfd6161b3230b0d13915e3849e226..57a6e8c919d48326b9a3b2fd17bf662a72ed5b42 100644 GIT binary patch delta 16 YcmaDL_&{*O3RdRYWwD!Avzjsk06jPcUH||9 delta 16 YcmaDL_&{*O3RdQ=GkrI&W;JC706skic>n+a diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/INBOX/dbox-Mails/dovecot.index.log b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/INBOX/dbox-Mails/dovecot.index.log index a1687e1d55048773f48f2858b8403d3dd470ea71..c920bef45979f28d8f455262f6768e829a4504e7 100644 GIT binary patch delta 24 fcmbQiv4UfR1dBjJLqm%K1A{;S0}I1qzL-P+RI>&n delta 7 OcmZ3%F@s}+1PcHPD*_z= diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Junk/dbox-Mails/dovecot.index.log b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Junk/dbox-Mails/dovecot.index.log index 5086669d656a5d18a31c9b309c77c4849411a8a1..9f4b0957fd87049cfa1165dcf7db1aeaf41d84dc 100644 GIT binary patch delta 24 fcmcb>^nhtY0HZ)dLqm%K1A{;S0}I0uzL-P+Vlf8Y delta 7 OcmaFBbb)C@03!el`~tQB diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/dovecot.index.cache b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/dovecot.index.cache index c7acae16bd44c99e1109d826af51b27b4dae9669..869f8a9a0186073ffd70a66d8847084f73bb8b64 100644 GIT binary patch delta 1521 zcmb_b&rcIU6y8DzbRia@wN#|8wUj{EGPB#={xHNeuwsq2wOs=>Xj$kQs&s+cM(|)s zG$uwp%|R36ftY|-qX%!oU!dMS7~_$HS7S_^*&R$F5J>bTFW&0YKI>yiESG5&5c6KIijqER-DR#+arX1!>W{Z@;s z3Nu?M2NOv?qogn9cr|6lmy~QaKBn-AQ8V1Jmeq}dUN-Y1sidkTRbI`dtvX3%JUf<2 zT}fxn^>ikY$|TerEpkrDD9I7UTASe0nG1B8nHpf2C%8MpTMl~*c48y*MnyL&yt=%g z$GB2;u2Njk%9Wu~aY-+n;aL0heAOsu<>g_t#RvLX{L69kM~3O9c!FXNMFQW^XaD*@ z6o1)hc2uk21JtTM$Vpskrost8fE~wh>tv*S+Kd4%_2(kT#A~pnK z0=nlohI#FC3sEs5!w3leZCViIFhr{z7Og}R|3)jw3n39t3Wz(70Ab$&qCuSj4_flK zdwx-pTJcLJwoTpZrcwqRL~*z1+4p?(q1)xUTF2#GhxPKekmeh+4WY#b z=Si%L+d8KiT+x^-8alU7o#t-o%bZ>=&zD&SZS;XXqYW0JHjXAhJC z5wsAZyh}nDhtZIX443ae=^5l@2}&XWqN!(k1mXQKdY+-Amni-u)57L&wQzd~kE|ik j)%z5C$qbJozA# zG^6ljM;3Xe28qf4n9L-7t3Ch~F))CX3IZ`qsR&r92v{kPBuFXWy%K~{0fx!69gCVNh-twLHmXMf=%f$^6^4eX(TN~&kTvL71SlplxlzoV zQ?vqNgV^MQV!}e=KyjdRz}|9TU}1=mnq0>!#wZTA6Qsbw1Y{>Gh*>&0k5dJS+jX9AuV`IoQJ> p<|H1lQE(44Jda5PiR1J%$ioJYTOf`FsYG|IBv1_5`$uFL7y!O}V+H^K delta 7 OcmX?N`9Xif2XO!pECbX4 diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.23 b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.23 new file mode 100644 index 0000000000..6f0a6eaa84 --- /dev/null +++ b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.23 @@ -0,0 +1,34 @@ +2 M1e C615c0f7e +N 000000000000035A +Date: Tue, 5 Oct 2021 11:40:26 +0300 (GMT+03:00) +From: denbond7@flowcrypt.test +To: default@flowcrypt.test +Message-ID: <229386180.1.1633423226719@flowcrypt.test> +Subject: Decryption error. NO_MDC +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_Part_0_243811031.1633423226707" +User-Agent: FlowCrypt_Android_1.2.3_dev_123__2021_10_05 + +------=_Part_0_243811031.1633423226707 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP MESSAGE----- +Version: PGPainless + +hF4DTxRYvSK3u1MSAQdAdLdyFeP0A84nGXE5n7Bze38EDAxdSdogi/cP6P8I3HAw +owydvIf9YVRhy89dKNF0Yy5yfshR47xWqMO15GCvsEzOcdbFPTDEMYMtSK5ATmBq +yWL2yM5zrfNaG9vvnBYatWhApgzHmvxQNbOr8Wxhv8A1kV22BR5CSZwn3AqA1xUc +6t6Blr1jw/0dkJRobWWXjv04BqyXpL4wFGnx9osoMD12VyoNfTy2zqF9p5OA7Kte +3shL2g== +=tNBK +-----END PGP MESSAGE----- + +------=_Part_0_243811031.1633423226707-- + + +R615c0f7a +V374 +Gd014ee137e0f5c610a08000073f46975 + diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.24 b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.24 new file mode 100644 index 0000000000..48218fde8e --- /dev/null +++ b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Sent/dbox-Mails/u.24 @@ -0,0 +1,61 @@ +2 M1e C615da67a +N 0000000000000C5C +Date: Wed, 6 Oct 2021 16:36:55 +0300 (GMT+03:00) +From: denbond7@flowcrypt.test +To: default@flowcrypt.test +Message-ID: <160641524.1.1633527415946@flowcrypt.test> +Subject: Parse an inline pub key error +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_Part_0_65153003.1633527415907" +User-Agent: FlowCrypt_Android_1.2.3_dev_123__2021_10_06 + +------=_Part_0_65153003.1633527415907 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP MESSAGE----- + +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 +=D5N/ +-----END PGP MESSAGE----- +------=_Part_0_65153003.1633527415907-- + + +R615da677 +Vc91 +G800bac047aa65d615b06000073f46975 + diff --git a/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Trash/dbox-Mails/dovecot.index.cache b/docker-mailserver/maildata_source/flowcrypt.test/denbond7/mailboxes/Trash/dbox-Mails/dovecot.index.cache index fd98fb3346089a723a9d5e716c4cc05df12514c7..148f42249341b397a440c73ba0c10aaea17e8b22 100644 GIT binary patch literal 3836 zcmdUy&2QsG6u{lGz;1xu6Gx;`koc_K8IQkdfo|fKbjb&aSG22@f)h_$vx#kNr``0F z190Jg;K%_X@fUFCzzq)E_y_nCkl>9SXVbJ@(Uz^mQ(or7^X2)y_h!6wb4jRu`^{(D zpu$xCx-AGVKz=g$@>gE<=aL}6FO%hI`W&Pa&|A}TB@9v)q@pv9n1zO;LFz|toUXE< zACIGydGD1_6o+Zp4+raIH;M*+-%b56SdI20an`B~&3fS|@Z5O3UZ&yL)E*7)H5x&$ zbF3@%(fEsFa`Z_o@0i*>+8dQiH(-7Vl&4&(ZVK~n#{LST7;Qu`lCew>HZ4pos-kx> z#keF0&qG_@uXvx$I2>B2%7Sr%);t#U!obr%+#7^P+4`lFCF%RnkM9eY7eTi{`95%| zvm|l%nOLh@XpL$f@l173R6MsQ%HEzU%DSwJ)HJ9q^0;u`r9M-$=jK4FN z^H>l4$G{ntZapC=f~Ns-c-68Ae?NhAJkwT>5Vq*24f8>T?WrOEoR!8huwLI+k@) z14EsAN2q-|!?m**e&l;_Dj+va-TuK4t}PO3ZM9bGwYn`KCmg<+phFfXz_@gg*gKhg z_5A~2dI#qG?)F3Xhf6AF_V*=4xN$<3PDHOAh5sw(y@9)*2p-(w zr3BnE&&90I{6pqV>)k_^zh87PPT(VAAoxQ!l6s*xev(Vlc+^ivG0Ur1aL5K>#Dpk} zs5J7uL7od^kHx}1R0u2s1G-Ffar022LOW1Pu)h9YFllpOJxqA0mW8g7lyWpmC7p zS%7jJKn$W`Y#@JfIk&1T$W8_ZCLmy7Vgv#p2ZS4d7^tF`M~}TMv#6vrF=z5tp1OJg zurLFI0+22MsuKayAQPjwfdmw^0lgv%WP72x5av^uI&>P@#W1xndipHiL?GJ;98@qt z7!8tyDoB8N4@866lMA`ECp&PfOy0mLVuj{e78HQ$bp}viAi(549$lo6sGR(pbFE|p zP|E`#hQ$vobOa|_wlfM%JZR1+Jn^SFCn%6WKyykd4wpdqx9`ojGd!#J*Ce+RFa|JPsB`xNzu%ui}_gv&Z zCCg@b;gY>~7$b(U#6v+bb~n)L&E*O53yYY^ka$Sg);jt@r4Q7(it<8 delta 7 OcmbOsvV(KO4i*3l=K|UQ From ab7c885c1716bee240cae9fcc231c0dd4dd4cc2b Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Wed, 6 Oct 2021 16:58:44 +0300 Subject: [PATCH 4/6] Fixed JUnit tests.| #1469 --- .../email/api/retrofit/response/model/PublicKeyMsgBlock.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt index ea42d563f0..790d6f916c 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/api/retrofit/response/model/PublicKeyMsgBlock.kt @@ -47,6 +47,7 @@ data class PublicKeyMsgBlock constructor( writeInt((if (complete) 1 else 0)) writeParcelable(keyDetails, flags) writeParcelable(error, flags) + writeParcelable(existingPgpContact, flags) } override fun describeContents(): Int = 0 From c2466529530b280cb202e2bec643a1dec03b326b Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Wed, 6 Oct 2021 17:01:53 +0300 Subject: [PATCH 5/6] Fixed Instrumentation tests.| #1469 --- .../activity/MessageDetailsActivityPassphraseInRamTest.kt | 6 +++--- .../email/ui/activity/MessageDetailsActivityTest.kt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityPassphraseInRamTest.kt b/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityPassphraseInRamTest.kt index efd8eb2e21..77a22fbde6 100644 --- a/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityPassphraseInRamTest.kt +++ b/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityPassphraseInRamTest.kt @@ -77,7 +77,7 @@ class MessageDetailsActivityPassphraseInRamTest : BaseMessageDetailsActivityTest .perform(click()) val decryptErrorMsgBlock = incomingMsgInfo.msgBlocks?.get(1) as DecryptErrorMsgBlock - val decryptError = decryptErrorMsgBlock.error!! + val decryptError = decryptErrorMsgBlock.decryptErr!! assertEquals(PgpDecrypt.DecryptionErrorType.NEED_PASSPHRASE, decryptError.details?.type) //check error message @@ -164,7 +164,7 @@ class MessageDetailsActivityPassphraseInRamTest : BaseMessageDetailsActivityTest launchActivity(incomingMsgInfo!!.msgEntity) val decryptErrorMsgBlock = incomingMsgInfo.msgBlocks?.get(1) as DecryptErrorMsgBlock - val fingerprint = decryptErrorMsgBlock.error?.fingerprints?.first() + val fingerprint = decryptErrorMsgBlock.decryptErr?.fingerprints?.first() val fingerprintFormatted = GeneralUtil.doSectionsInText( originalString = fingerprint, groupSize = 4 ) @@ -297,7 +297,7 @@ class MessageDetailsActivityPassphraseInRamTest : BaseMessageDetailsActivityTest val decryptErrorMsgBlock = incomingMsgInfo.msgBlocks?.get(1) as DecryptErrorMsgBlock val expectedKeysCount = 2 - assertEquals(expectedKeysCount, decryptErrorMsgBlock.error?.fingerprints?.size) + assertEquals(expectedKeysCount, decryptErrorMsgBlock.decryptErr?.fingerprints?.size) val tVStatusMessageText = getQuantityString( resId = R.plurals.please_provide_passphrase_for_following_keys, diff --git a/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt b/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt index 491239a06b..022c24388c 100644 --- a/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt +++ b/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt @@ -242,7 +242,7 @@ class MessageDetailsActivityTest : BaseMessageDetailsActivityTest() { matchHeader(msgInfo) val block = msgInfo.msgBlocks?.get(1) as DecryptErrorMsgBlock - val decryptError = block.error + val decryptError = block.decryptErr val formatErrorMsg = (getResString( R.string.decrypt_error_message_badly_formatted, getResString(R.string.app_name) @@ -270,7 +270,7 @@ class MessageDetailsActivityTest : BaseMessageDetailsActivityTest() { matchHeader(msgInfo) val block = msgInfo.msgBlocks?.get(1) as DecryptErrorMsgBlock - val decryptError = block.error + val decryptError = block.decryptErr val errorMsg = getResString( R.string.could_not_decrypt_message_due_to_error, decryptError?.details?.type.toString() + ": " + getResString(R.string.decrypt_error_message_no_mdc) From 425c3e95522b1a3111f31a725c2a7ab20625135f Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Wed, 6 Oct 2021 17:08:52 +0300 Subject: [PATCH 6/6] Added UI test to check parse pub key error.| #1469 --- ...rypted_msg_inline_pub_key_parse_error.json | 54 ++++++++++++++++ ...crypted_msg_inline_pub_key_parse_error.txt | 62 +++++++++++++++++++ .../ui/activity/MessageDetailsActivityTest.kt | 24 +++++++ 3 files changed, 140 insertions(+) create mode 100644 FlowCrypt/src/androidTest/assets/messages/info/encrypted_msg_inline_pub_key_parse_error.json create mode 100644 FlowCrypt/src/androidTest/assets/messages/mime/encrypted_msg_inline_pub_key_parse_error.txt diff --git a/FlowCrypt/src/androidTest/assets/messages/info/encrypted_msg_inline_pub_key_parse_error.json b/FlowCrypt/src/androidTest/assets/messages/info/encrypted_msg_inline_pub_key_parse_error.json new file mode 100644 index 0000000000..325a1aa22b --- /dev/null +++ b/FlowCrypt/src/androidTest/assets/messages/info/encrypted_msg_inline_pub_key_parse_error.json @@ -0,0 +1,54 @@ +{ + "encryptionType": "ENCRYPTED", + "msgBlocks": [ + { + "complete": true, + "content": " \u003c!DOCTYPE html\u003e\n \u003chtml\u003e\n \u003chead\u003e\n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width\"/\u003e\n \u003cstyle\u003e\n body { word-wrap: break-word; word-break: break-word; hyphens: auto; margin-left: 0px; padding-left: 0px; }\n body img { display: inline !important; height: auto !important; max-width: 95% !important; }\n body pre { white-space: pre-wrap !important; }\n body \u003e div.MsgBlock \u003e table { zoom: 75% } /* table layouts tend to overflow - eg emails from fb */\n \u003c/style\u003e\n \u003c/head\u003e\n \u003cbody\u003e\u003cdiv class\u003d\"MsgBlock GREEN\" style\u003d\"background: white;padding-left: 8px;min-height: 50px;padding-top: 4px;padding-bottom: 4px;width: 100%;border: 1px solid #f0f0f0;border-left: 8px solid #31A217;border-right: none;background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAMAAAAPdrEwAAAAh1BMVEXw8PD////w8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PD7MuHIAAAALXRSTlMAAAECBAcICw4QEhUZIyYqMTtGTV5kdn2Ii5mfoKOqrbG0uL6/xcnM0NTX2t1l7cN4AAAB0UlEQVR4Ae3Y3Y4SQRCG4bdHweFHRBTBH1FRFLXv//qsA8kmvbMdXhh2Q0KfknpSCQc130c67s22+e9+v/+d84fxkSPH0m/+5P9vN7vRV0vPfx7or1NB23e99KAHuoXOOc6moQsBwNN1Q9g4Wdh1uq3MA7Qn0+2ylAt7WbWpyT+Wo8roKH6v2QhZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2ghZ2gjZ2AUNOLmwgQdogEJ2dnF3UJdU3WjqO/u96aYtVd/7jqvIyu76G5se6GaY7tNNcy5d7se7eWVnDz87fMkuVuS8epF6f9NPObPY5re9y4N1/vya9Gr3se2bfvl9M0mkyZdv077p+a/3z4Meby5Br4NWiV51BaiUqfLro9I3WiR61RVcffwfXI7u5zZ20EOA82Uu8x3SlrSwXQuBSvSqK0AletUVoBK96gpIwlZy0MJWctDCVnLQwlZy0MJWctDCVnLQwlZy0MJWctDCVnLQwlZy0MJWctDCVnLQwlZy0MJWckIletUVIJJxITN6wtZd2EI+0NquyIJOnUpFVvRpcwmV6FVXgEr0qitAJXrVFaASveoKUIledQWoRK+6AlSiV13BP+/VVbky7Xq1AAAAAElFTkSuQmCC);\"\u003e\u003chtml\u003e\u003chead\u003e\u003c/head\u003e\u003cbody\u003e33333\n\u003cbr\u003e\n\u003cbr\u003e\u003c/body\u003e\u003c/html\u003e\u003c/div\u003e\u003c!-- next MsgBlock --\u003e\n\u003c/body\u003e\n \u003c/html\u003e", + "type": "plainHtml" + }, + { + "complete": false, + "content": "-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: PGPainless\n\nmDMEYIucWBYJKwYBBAHaRw8BAQdAew+8mzMWyf3+Pfy49qa60uKV6e5os7de4TdZ\nceAWUq+0F2RlbmJvbmQ3QGZsb3djcnlwdC50ZXN0iHgEExYKACAFAmCLnFgCGwMF\nFgIDAQAECwkIBwUVCgkICwIeAQIZAQAKCRDDIInNavjWzm3JAQCgFgCEyD58iEa/\nunaAldoabgO4OARgi5xYEgorBgEEAZdVAQUBAQdAB1/Mrq5JGYim4KqGTSK4OESQ\nUwPgK56q0yrkiU9WgyYDAQgHiHUEGBYKAB0FAmCLnFgCGwwFFgIDAQAECwkIBwUV\nCgkICwIeAQAKCRDDIInNavjWzjMgAQCU+R1fItqdY6lt9jXUqipmXuqVaEFPwNA8\nYJ1rIwDwVQEAyUc8162KWzA2iQB5akwLwNr/pLDDtOWwhLUkrBb3mAc\u003d\n\u003dpXF6\n-----END PGP PUBLIC KEY BLOCK-----\n", + "error": { + "errorMsg": "EOFException: null" + }, + "type": "publicKey" + } + ], + "msgEntity": { + "cc": [], + "email": "default@flowcrypt.test", + "flags": "\\RECENT \\SEEN", + "folder": "INBOX", + "from": [ + { + "address": "denbond7@flowcrypt.test" + } + ], + "fromAddress": "denbond7@flowcrypt.test", + "hasAttachments": false, + "id": 26, + "isEncrypted": true, + "isNew": false, + "isSeen": true, + "msgState": "NONE", + "receivedDate": 1633527418000, + "replyTo": "denbond7@flowcrypt.test", + "replyToAddress": [ + { + "address": "denbond7@flowcrypt.test" + } + ], + "sentDate": 1633527415000, + "subject": "Parse an inline pub key error", + "to": [ + { + "address": "default@flowcrypt.test" + } + ], + "toAddress": "default@flowcrypt.test", + "uid": 25, + "uidAsHEX": "19" + }, + "text": "33333" +} diff --git a/FlowCrypt/src/androidTest/assets/messages/mime/encrypted_msg_inline_pub_key_parse_error.txt b/FlowCrypt/src/androidTest/assets/messages/mime/encrypted_msg_inline_pub_key_parse_error.txt new file mode 100644 index 0000000000..00e394fd90 --- /dev/null +++ b/FlowCrypt/src/androidTest/assets/messages/mime/encrypted_msg_inline_pub_key_parse_error.txt @@ -0,0 +1,62 @@ +Return-Path: +Delivered-To: default@flowcrypt.test +Received: from mail.flowcrypt.test + by mail.flowcrypt.test with LMTP + id BYvqBnqmXWFvBgAAc/RpdQ + (envelope-from ) + for ; Wed, 06 Oct 2021 13:36:58 +0000 +Received: from localhost (localhost [127.0.0.1]) + by mail.flowcrypt.test (Postfix) with ESMTP id 18F13223D7 + for ; Wed, 6 Oct 2021 13:36:58 +0000 (UTC) +Date: Wed, 6 Oct 2021 16:36:55 +0300 (GMT+03:00) +From: denbond7@flowcrypt.test +To: default@flowcrypt.test +Message-ID: <160641524.1.1633527415946@flowcrypt.test> +Subject: Parse an inline pub key error +Mime-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----=_Part_0_65153003.1633527415907" + +------=_Part_0_65153003.1633527415907 +Content-Type: text/plain; charset=us-ascii +Content-Transfer-Encoding: 7bit + +-----BEGIN PGP MESSAGE----- + +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 +=D5N/ +-----END PGP MESSAGE----- +------=_Part_0_65153003.1633527415907-- diff --git a/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt b/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt index 022c24388c..43bc70e63e 100644 --- a/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt +++ b/FlowCrypt/src/androidTest/java/com/flowcrypt/email/ui/activity/MessageDetailsActivityTest.kt @@ -544,6 +544,30 @@ class MessageDetailsActivityTest : BaseMessageDetailsActivityTest() { baseCheck(msgInfo) } + @Test + fun testShowParsePubKeyError() { + val msgInfo = getMsgInfo( + "messages/info/encrypted_msg_inline_pub_key_parse_error.json", + "messages/mime/encrypted_msg_inline_pub_key_parse_error.txt" + ) ?: throw NullPointerException() + + assertThat(msgInfo, notNullValue()) + + val details = msgInfo.msgEntity + + launchActivity(details) + matchHeader(msgInfo) + + val block = msgInfo.msgBlocks?.get(1) as PublicKeyMsgBlock + val errorMsg = getResString( + R.string.msg_contains_not_valid_pub_key, requireNotNull(block.error?.errorMsg) + ) + onView(withId(R.id.textViewErrorMessage)) + .check(matches(withText(errorMsg))) + testSwitch(block.content ?: "") + matchReplyButtons(details) + } + private fun testMissingKey(incomingMsgInfo: IncomingMessageInfo?) { assertThat(incomingMsgInfo, notNullValue())