read the content of a rumor event

This commit is contained in:
greenart7c3
2025-10-31 06:11:13 -03:00
parent dcc5391077
commit 7b4e249c6a
4 changed files with 117 additions and 20 deletions
@@ -10,6 +10,6 @@ class ClearTextEncryptedDataKind(val text: String, override val result: String)
class TagArrayEncryptedDataKind(val tagArray: Array<Array<String>>, override val result: String) : EncryptedDataKind
class EventEncryptedDataKind(val event: AmberEvent, override val result: String) : EncryptedDataKind
class EventEncryptedDataKind(val event: AmberEvent, val sealEncryptedDataKind: EncryptedDataKind?, override val result: String) : EncryptedDataKind
class PrivateZapEncryptedDataKind(override val result: String) : EncryptedDataKind
@@ -6,6 +6,7 @@ import android.content.Context
import android.content.Intent
import android.net.Uri
import android.provider.Browser
import android.util.Log
import android.widget.Toast
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.platform.ClipEntry
@@ -42,6 +43,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.crypto.EventHasher
import com.vitorpamplona.quartz.nip01Core.jackson.JacksonMapper
import com.vitorpamplona.quartz.nip19Bech32.toNpub
import com.vitorpamplona.quartz.nip59Giftwrap.seals.SealedRumorEvent
import com.vitorpamplona.quartz.utils.Hex
import com.vitorpamplona.quartz.utils.TimeUtils
import java.io.ByteArrayOutputStream
@@ -199,8 +201,26 @@ object IntentUtils {
else -> {
if (type.name.contains("ENCRYPT")) {
if (localData.startsWith("{")) {
val event = AmberEvent.fromJson(localData)
EventEncryptedDataKind(event, result)
try {
val event = AmberEvent.fromJson(localData)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = account.signer.signerSync.decrypt(event.content, account.hexKey)
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, null, result)
}
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing JSON: ${e.message}")
ClearTextEncryptedDataKind(localData, result)
}
} else if (localData.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(localData)
TagArrayEncryptedDataKind(tagArray, result)
@@ -210,7 +230,20 @@ object IntentUtils {
} else {
if (result.startsWith("{")) {
val event = AmberEvent.fromJson(result)
EventEncryptedDataKind(event, result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = account.signer.signerSync.decrypt(event.content, account.hexKey)
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, null, result)
}
} else if (result.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(result)
TagArrayEncryptedDataKind(tagArray, result)
@@ -416,8 +449,26 @@ object IntentUtils {
else -> {
if (type.name.contains("ENCRYPT")) {
if (data.startsWith("{")) {
val event = AmberEvent.fromJson(data)
EventEncryptedDataKind(event, result)
try {
val event = AmberEvent.fromJson(data)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = account.signer.signerSync.decrypt(event.content, account.hexKey)
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, null, result)
}
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing JSON: ${e.message}")
ClearTextEncryptedDataKind(data, result)
}
} else if (data.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(data)
TagArrayEncryptedDataKind(tagArray, result)
@@ -427,7 +478,20 @@ object IntentUtils {
} else {
if (result.startsWith("{")) {
val event = AmberEvent.fromJson(result)
EventEncryptedDataKind(event, result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = account.signer.signerSync.decrypt(event.content, account.hexKey)
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, null, result)
}
} else if (result.startsWith("[")) {
val tagArray = JacksonMapper.fromJsonToTagArray(result)
TagArrayEncryptedDataKind(tagArray, result)
@@ -124,7 +124,21 @@ fun SeeDetailsScreen(
val event = intent.event!!
if (event.kind == 22242) AmberEvent.relay(event) else event.content
} else {
if (type.name.contains("ENCRYPT") && intent.encryptedData is ClearTextEncryptedDataKind) intent.encryptedData.text else if (intent.encryptedData is EventEncryptedDataKind) intent.encryptedData.event.content else intent.encryptedData?.result ?: ""
if (type.name.contains("ENCRYPT") && intent.encryptedData is ClearTextEncryptedDataKind) {
intent.encryptedData.text
} else if (intent.encryptedData is EventEncryptedDataKind) {
if (intent.encryptedData.sealEncryptedDataKind != null) {
if (intent.encryptedData.sealEncryptedDataKind is EventEncryptedDataKind) {
intent.encryptedData.sealEncryptedDataKind.event.content
} else {
intent.encryptedData.sealEncryptedDataKind.result
}
} else {
intent.encryptedData.event.content
}
} else {
intent.encryptedData?.result ?: ""
}
}
Text(
@@ -127,19 +127,38 @@ fun EncryptDecryptData(
)
if (encryptedData is EventEncryptedDataKind) {
val content = if (encryptedData.event.kind == 22242) encryptedData.event.relay() else encryptedData.event.content
if (encryptedData.event.kind == ContactListEvent.KIND) {
ContactListDetail(
title = stringResource(R.string.following),
text = "${encryptedData.event.verifiedFollowKeySet().size}",
)
if (encryptedData.sealEncryptedDataKind != null) {
if (encryptedData.sealEncryptedDataKind is EventEncryptedDataKind) {
val content = if (encryptedData.sealEncryptedDataKind.event.kind == 22242) encryptedData.sealEncryptedDataKind.event.relay() else encryptedData.sealEncryptedDataKind.event.content
if (encryptedData.event.kind == ContactListEvent.KIND) {
ContactListDetail(
title = stringResource(R.string.following),
text = "${encryptedData.event.verifiedFollowKeySet().size}",
)
} else {
Text(
content,
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
)
}
}
} else {
Text(
content,
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
)
val content = if (encryptedData.event.kind == 22242) encryptedData.event.relay() else encryptedData.event.content
if (encryptedData.event.kind == ContactListEvent.KIND) {
ContactListDetail(
title = stringResource(R.string.following),
text = "${encryptedData.event.verifiedFollowKeySet().size}",
)
} else {
Text(
content,
modifier = Modifier
.fillMaxWidth()
.padding(top = 8.dp),
)
}
}
} else {
val content = if (type.name.contains("ENCRYPT") && encryptedData is ClearTextEncryptedDataKind) encryptedData.text else encryptedData?.result ?: ""