Fixes error when trying to decrypt the PrivateOutboxRelayList event for an account that is not currently active.

This commit is contained in:
Vitor Pamplona 2024-06-27 16:49:05 -04:00
parent 989099c791
commit 6c0b22f129
4 changed files with 47 additions and 48 deletions

View File

@ -104,7 +104,14 @@ object NostrAccountDataSource : AmethystNostrDataSource("AccountData") {
types = COMMON_FEED_TYPES,
filter =
Filter(
kinds = listOf(StatusEvent.KIND, AdvertisedRelayListEvent.KIND, ChatMessageRelayListEvent.KIND, SearchRelayListEvent.KIND, PrivateOutboxRelayListEvent.KIND),
kinds =
listOf(
StatusEvent.KIND,
AdvertisedRelayListEvent.KIND,
ChatMessageRelayListEvent.KIND,
SearchRelayListEvent.KIND,
PrivateOutboxRelayListEvent.KIND,
),
authors = listOf(account.userProfile().pubkeyHex),
limit = 10,
),
@ -122,7 +129,6 @@ object NostrAccountDataSource : AmethystNostrDataSource("AccountData") {
ContactListEvent.KIND,
AdvertisedRelayListEvent.KIND,
ChatMessageRelayListEvent.KIND,
PrivateOutboxRelayListEvent.KIND,
SearchRelayListEvent.KIND,
FileServersEvent.KIND,
MuteListEvent.KIND,

View File

@ -57,7 +57,7 @@ class NIP90ContentDiscoveryResponseEvent(
}
}
} catch (e: Throwable) {
Log.w("GeneralList", "Error parsing the JSON ${e.message}")
Log.w("NIP90ContentDiscoveryResponseEvent", "Error parsing the JSON ${e.message}")
}
return events ?: listOf()

View File

@ -41,27 +41,25 @@ class PrivateOutboxRelayListEvent(
override fun dTag() = FIXED_D_TAG
fun relays(): List<String>? {
return tags.mapNotNull {
if (it.size > 1 && it[0] == "relay") {
it[1]
} else {
null
}
}.plus(
privateTagsCache?.mapNotNull {
fun relays(): List<String>? =
tags
.mapNotNull {
if (it.size > 1 && it[0] == "relay") {
it[1]
} else {
null
}
} ?: emptyList(),
).ifEmpty { null }
}
}.plus(
privateTagsCache?.mapNotNull {
if (it.size > 1 && it[0] == "relay") {
it[1]
} else {
null
}
} ?: emptyList(),
).ifEmpty { null }
fun cachedPrivateTags(): Array<Array<String>>? {
return privateTagsCache
}
fun cachedPrivateTags(): Array<Array<String>>? = privateTagsCache
fun privateTags(
signer: NostrSigner,
@ -79,11 +77,15 @@ class PrivateOutboxRelayListEvent(
try {
signer.nip44Decrypt(content, pubKey) {
privateTagsCache = mapper.readValue<Array<Array<String>>>(it)
privateTagsCache?.let { onReady(it) }
try {
privateTagsCache = mapper.readValue<Array<Array<String>>>(it)
privateTagsCache?.let { onReady(it) }
} catch (e: Throwable) {
Log.w("PrivateOutboxRelayListEvent", "Error parsing the JSON: ${e.message}. Json `$it` from event `${toNostrUri()}`")
}
}
} catch (e: Throwable) {
Log.w("GeneralList", "Error parsing the JSON ${e.message}")
Log.w("PrivateOutboxRelayListEvent", "Error decrypting content: ${e.message}. Event: `${toNostrUri()}`")
}
}
@ -92,13 +94,9 @@ class PrivateOutboxRelayListEvent(
const val FIXED_D_TAG = ""
val TAGS = arrayOf(arrayOf("alt", "Relay list to store private content from this author"))
fun createAddressATag(pubKey: HexKey): ATag {
return ATag(KIND, pubKey, FIXED_D_TAG, null)
}
fun createAddressATag(pubKey: HexKey): ATag = ATag(KIND, pubKey, FIXED_D_TAG, null)
fun createAddressTag(pubKey: HexKey): String {
return ATag.assembleATag(KIND, pubKey, FIXED_D_TAG)
}
fun createAddressTag(pubKey: HexKey): String = ATag.assembleATag(KIND, pubKey, FIXED_D_TAG)
fun encryptTags(
privateTags: Array<Array<String>>? = null,
@ -114,11 +112,11 @@ class PrivateOutboxRelayListEvent(
)
}
fun createTagArray(relays: List<String>): Array<Array<String>> {
return relays.map {
arrayOf("relay", it)
}.toTypedArray()
}
fun createTagArray(relays: List<String>): Array<Array<String>> =
relays
.map {
arrayOf("relay", it)
}.toTypedArray()
fun updateRelayList(
earlierVersion: PrivateOutboxRelayListEvent,
@ -128,11 +126,13 @@ class PrivateOutboxRelayListEvent(
onReady: (PrivateOutboxRelayListEvent) -> Unit,
) {
val tags =
earlierVersion.privateTagsCache?.filter { it[0] != "relay" }?.plus(
relays.map {
arrayOf("relay", it)
},
)?.toTypedArray() ?: emptyArray()
earlierVersion.privateTagsCache
?.filter { it[0] != "relay" }
?.plus(
relays.map {
arrayOf("relay", it)
},
)?.toTypedArray() ?: emptyArray()
encryptTags(tags, signer) {
signer.sign<PrivateOutboxRelayListEvent>(createdAt, KIND, TAGS, it) {

View File

@ -52,9 +52,7 @@ class Permission(
val type: String,
val kind: Int? = null,
) {
fun toJson(): String {
return "{\"type\":\"${type}\",\"kind\":$kind}"
}
fun toJson(): String = "{\"type\":\"${type}\",\"kind\":$kind}"
}
class Result(
@ -89,9 +87,7 @@ class Result(
/**
* Parses the json with a string of events to an Array of Event objects.
*/
fun fromJsonArray(json: String): Array<Result> {
return mapper.readValue(json)
}
fun fromJsonArray(json: String): Array<Result> = mapper.readValue(json)
}
}
@ -272,9 +268,7 @@ class ExternalSignerLauncher(
signerType: SignerType,
data: Array<out String>,
columnName: String = "signature",
): kotlin.Result<String?> {
return getDataFromResolver(signerType, data, columnName, contentResolver)
}
): kotlin.Result<String?> = getDataFromResolver(signerType, data, columnName, contentResolver)
private fun getDataFromResolver(
signerType: SignerType,
@ -298,8 +292,7 @@ class ExternalSignerLauncher(
"1",
null,
null,
)
.use {
).use {
if (it == null) {
return kotlin.Result.success(null)
}