Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
DenBond7 committed Oct 28, 2021
1 parent 5803a9e commit 5c30eb9
Show file tree
Hide file tree
Showing 32 changed files with 484 additions and 586 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ class EmailUtil {
*/
fun genAttInfoFromPubKey(pgpKeyDetails: PgpKeyDetails?): AttachmentInfo? {
if (pgpKeyDetails != null) {
val fileName = "0x" + pgpKeyDetails.fingerprint.toUpperCase(Locale.getDefault()) + ".asc"
val fileName = "0x" + pgpKeyDetails.fingerprint.uppercase(Locale.getDefault()) + ".asc"

return if (!TextUtils.isEmpty(pgpKeyDetails.publicKey)) {
val attachmentInfo = AttachmentInfo()
Expand All @@ -212,7 +212,7 @@ class EmailUtil {
attachmentInfo.encodedSize = pgpKeyDetails.publicKey.length.toLong()
attachmentInfo.rawData = pgpKeyDetails.publicKey.toByteArray()
attachmentInfo.type = Constants.MIME_TYPE_PGP_KEY
attachmentInfo.email = pgpKeyDetails.primaryPgpContact.email
//attachmentInfo.email = pgpKeyDetails.primaryRecipientWithPubKeys.email
attachmentInfo.id = generateContentId()
attachmentInfo.isEncryptionAllowed = false

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ package com.flowcrypt.email.api.retrofit.response.model

import android.os.Parcel
import android.os.Parcelable
import com.flowcrypt.email.model.PgpContact
import com.flowcrypt.email.database.entity.relation.RecipientWithPubKeys

import com.flowcrypt.email.security.model.PgpKeyDetails

import com.google.gson.annotations.Expose
Expand All @@ -29,15 +30,16 @@ data class PublicKeyMsgBlock constructor(
@Expose
override val type: MsgBlock.Type = MsgBlock.Type.PUBLIC_KEY

var existingPgpContact: PgpContact? = null
var existingRecipientWithPubKeys: RecipientWithPubKeys? = null

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)
existingRecipientWithPubKeys =
parcel.readParcelable(RecipientWithPubKeys::class.java.classLoader)
}

override fun writeToParcel(parcel: Parcel, flags: Int) =
Expand All @@ -47,7 +49,7 @@ data class PublicKeyMsgBlock constructor(
writeInt((if (complete) 1 else 0))
writeParcelable(keyDetails, flags)
writeParcelable(error, flags)
writeParcelable(existingPgpContact, flags)
writeParcelable(existingRecipientWithPubKeys, flags)
}

override fun describeContents(): Int = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,5 +68,5 @@ interface RecipientDao : BaseDao<RecipientEntity> {

@Transaction
@Query("SELECT * FROM recipients WHERE email = :email")
fun getRecipientWithPubKeysByEmail(email: String): RecipientWithPubKeys?
suspend fun getRecipientWithPubKeysByEmail(email: String): RecipientWithPubKeys?
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import android.provider.BaseColumns
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Ignore
import androidx.room.Index
import androidx.room.PrimaryKey
import com.flowcrypt.email.security.model.PgpKeyDetails

/**
* @author Denis Bondarenko
Expand Down Expand Up @@ -49,18 +51,31 @@ data class PublicKeyEntity(
@ColumnInfo(name = "fingerprint") val fingerprint: String,
@ColumnInfo(name = "public_key") val publicKey: ByteArray
) : Parcelable {

@Ignore
var pgpKeyDetails: PgpKeyDetails? = null

@Ignore
var isNotUsable: Boolean? = null

constructor(parcel: Parcel) : this(
parcel.readValue(Long::class.java.classLoader) as? Long,
requireNotNull(parcel.readString()),
requireNotNull(parcel.readString()),
requireNotNull(parcel.createByteArray())
)
) {
pgpKeyDetails = parcel.readParcelable(PgpKeyDetails::class.java.classLoader)
isNotUsable = parcel.readValue(Boolean::class.java.classLoader) as? Boolean
}


override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeValue(id)
parcel.writeString(recipient)
parcel.writeString(fingerprint)
parcel.writeByteArray(publicKey)
parcel.writeParcelable(pgpKeyDetails, flags)
parcel.writeValue(isNotUsable)
}

override fun describeContents(): Int {
Expand All @@ -77,6 +92,8 @@ data class PublicKeyEntity(
if (recipient != other.recipient) return false
if (fingerprint != other.fingerprint) return false
if (!publicKey.contentEquals(other.publicKey)) return false
if (pgpKeyDetails != other.pgpKeyDetails) return false
if (isNotUsable != other.isNotUsable) return false

return true
}
Expand All @@ -86,6 +103,8 @@ data class PublicKeyEntity(
result = 31 * result + recipient.hashCode()
result = 31 * result + fingerprint.hashCode()
result = 31 * result + publicKey.contentHashCode()
result = 31 * result + (pgpKeyDetails?.hashCode() ?: 0)
result = 31 * result + (isNotUsable?.hashCode() ?: 0)
return result
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,8 @@ import android.os.Parcelable
import android.provider.BaseColumns
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.Ignore
import androidx.room.Index
import androidx.room.PrimaryKey
import com.flowcrypt.email.model.PgpContact
import com.flowcrypt.email.security.model.PgpKeyDetails

/**
* @author Denis Bondarenko
Expand All @@ -37,26 +34,12 @@ data class RecipientEntity(
@ColumnInfo(name = "last_use", defaultValue = "0") val lastUse: Long = 0
) : Parcelable {

@Ignore
var pgpKeyDetails: PgpKeyDetails? = null

constructor(parcel: Parcel) : this(
parcel.readValue(Long::class.java.classLoader) as? Long,
requireNotNull(parcel.readString()),
parcel.readString(),
parcel.readLong()
) {
pgpKeyDetails = parcel.readParcelable(PgpKeyDetails::class.java.classLoader)
}

fun toPgpContact(): PgpContact {
return PgpContact(
email = email,
name = name,
lastUse = lastUse,
pgpKeyDetails = pgpKeyDetails
)
}
)

//todo-denbond7 need to think about this class.
enum class Type {
Expand All @@ -68,7 +51,6 @@ data class RecipientEntity(
parcel.writeString(email)
parcel.writeString(name)
parcel.writeLong(lastUse)
parcel.writeParcelable(pgpKeyDetails, flags)
}

override fun describeContents(): Int {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@ data class RecipientWithPubKeys(
return 0
}

fun hasPgp(): Boolean {
return publicKeys.isNotEmpty()
}

fun hasNotExpiredKeys(): Boolean {
return publicKeys.any { it.pgpKeyDetails?.isExpired?.not() ?: false }
}

fun hasUsableKeys(): Boolean {
return publicKeys.any { if (it.isNotUsable != null) it.isNotUsable?.not() ?: false else true }
}

companion object CREATOR : Parcelable.Creator<RecipientWithPubKeys> {
override fun createFromParcel(parcel: Parcel) = RecipientWithPubKeys(parcel)
override fun newArray(size: Int): Array<RecipientWithPubKeys?> = arrayOfNulls(size)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
package com.flowcrypt.email.extensions.org.bouncycastle.openpgp

import androidx.annotation.WorkerThread
import com.flowcrypt.email.model.PgpContact
import com.flowcrypt.email.database.entity.relation.RecipientWithPubKeys
import com.flowcrypt.email.security.model.Algo
import com.flowcrypt.email.security.model.KeyId
import com.flowcrypt.email.security.model.PgpKeyDetails
Expand Down Expand Up @@ -85,9 +85,9 @@ fun PGPKeyRing.toPgpKeyDetails(): PgpKeyDetails {
)
}

fun PGPKeyRing.pgpContacts(): List<PgpContact> {
fun PGPKeyRing.RecipientWithPubKeys(): List<RecipientWithPubKeys> {
val list = publicKey.userIDs.iterator().asSequence().toList()
return PgpContact.determinePgpContacts(list)
return emptyList()//RecipientWithPubKeys.determineRecipientWithPubKeyss(list)
}

@Throws(IOException::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,11 +413,11 @@ class MsgDetailsViewModel(
for (block in blocks) {
if (block is PublicKeyMsgBlock) {
val keyDetails = block.keyDetails ?: continue
val pgpContact = keyDetails.primaryPgpContact
//val RecipientWithPubKeys = keyDetails.primaryRecipientWithPubKeys
//todo-denbond7 need to rework on this code
val recipientEntity =
roomDatabase.recipientDao().getRecipientByEmailSuspend(pgpContact.email)
//block.existingPgpContact = recipientEntity?.toPgpContact()
//val recipientEntity =
//roomDatabase.recipientDao().getRecipientByEmailSuspend(RecipientWithPubKeys.email)
//block.existingRecipientWithPubKeys = recipientEntity?.toRecipientWithPubKeys()
}

if (block is DecryptErrorMsgBlock) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import androidx.lifecycle.switchMap
import androidx.lifecycle.viewModelScope
import com.flowcrypt.email.R
import com.flowcrypt.email.api.email.EmailUtil
import com.flowcrypt.email.api.email.gmail.GmailApiHelper
import com.flowcrypt.email.api.email.protocol.OpenStoreHelper
import com.flowcrypt.email.api.email.protocol.SmtpProtocolUtil
import com.flowcrypt.email.api.retrofit.ApiRepository
Expand All @@ -34,7 +33,6 @@ import com.flowcrypt.email.extensions.org.bouncycastle.openpgp.toPgpKeyDetails
import com.flowcrypt.email.extensions.org.pgpainless.util.asString
import com.flowcrypt.email.model.KeyImportDetails
import com.flowcrypt.email.model.KeyImportModel
import com.flowcrypt.email.model.PgpContact
import com.flowcrypt.email.security.KeyStoreCryptoManager
import com.flowcrypt.email.security.KeysStorageImpl
import com.flowcrypt.email.security.SecurityUtils
Expand Down Expand Up @@ -246,15 +244,15 @@ class PrivateKeysViewModel(application: Application) : AccountViewModel(applicat
//update contacts table
val recipientDao = roomDatabase.recipientDao()
val pubKeysDao = roomDatabase.pubKeysDao()
for (pgpContact in keyDetails.pgpContacts) {
pgpContact.pubkey = keyDetails.publicKey
/* for (RecipientWithPubKeys in keyDetails.RecipientWithPubKeys) {
RecipientWithPubKeys.pubkey = keyDetails.publicKey
val recipientWithPubKeys =
recipientDao.getRecipientByEmailSuspend(pgpContact.email)
if (recipientWithPubKeys == null && GeneralUtil.isEmailValid(pgpContact.email)) {
recipientDao.insertWithReplaceSuspend(pgpContact.toRecipientEntity())
pubKeysDao.insertWithReplaceSuspend(pgpContact.toPubKey())
recipientDao.getRecipientByEmailSuspend(RecipientWithPubKeys.email)
if (recipientWithPubKeys == null && GeneralUtil.isEmailValid(RecipientWithPubKeys.email)) {
recipientDao.insertWithReplaceSuspend(RecipientWithPubKeys.toRecipientEntity())
pubKeysDao.insertWithReplaceSuspend(RecipientWithPubKeys.toPublicKeyEntity())
}
}
}*/
}
}
}
Expand Down Expand Up @@ -555,29 +553,29 @@ class PrivateKeysViewModel(application: Application) : AccountViewModel(applicat
}
}

private suspend fun genContacts(accountEntity: AccountEntity): List<PgpContact> =
/*private suspend fun genContacts(accountEntity: AccountEntity): List<RecipientWithPubKeys> =
withContext(Dispatchers.IO) {
val pgpContactMain = PgpContact(accountEntity.email, accountEntity.displayName)
val contacts = ArrayList<PgpContact>()
//val RecipientWithPubKeysMain = RecipientWithPubKeys(accountEntity.email, accountEntity.displayName)
val contacts = ArrayList<RecipientWithPubKeys>()
when (accountEntity.accountType) {
AccountEntity.ACCOUNT_TYPE_GOOGLE -> {
contacts.add(pgpContactMain)
contacts.add(RecipientWithPubKeysMain)
val gmail = GmailApiHelper.generateGmailApiService(getApplication(), accountEntity)
val aliases =
gmail.users().settings().sendAs().list(GmailApiHelper.DEFAULT_USER_ID).execute()
for (alias in aliases.sendAs) {
if (alias.verificationStatus != null) {
contacts.add(PgpContact(alias.sendAsEmail, alias.displayName))
//contacts.add(RecipientWithPubKeys(alias.sendAsEmail, alias.displayName))
}
}
}
else -> contacts.add(pgpContactMain)
else -> contacts.add(RecipientWithPubKeysMain)
}
return@withContext contacts
}
}*/

/**
* Registering a key with attester API.
Expand Down
Loading

0 comments on commit 5c30eb9

Please sign in to comment.