Improve JSON parsing and error handling in decryption services

- Add try-catch blocks around JSON parsing for decrypted bunker requests in `EventNotificationConsumer`.
- Implement similar error handling for JSON parsing in `IntentUtils` to prevent crashes when processing malformed data.
- Log parsing errors and fallback to `ClearTextEncryptedDataKind` when JSON conversion fails.
This commit is contained in:
greenart7c3
2026-02-04 07:34:39 -03:00
parent 59cce28d06
commit d90282b6a7
2 changed files with 68 additions and 53 deletions
@@ -464,28 +464,33 @@ class EventNotificationConsumer(private val applicationContext: Context) {
val result = acc.nip44Decrypt(bunkerRequest.ciphertext, bunkerRequest.pubKey)
if (result.startsWith("{")) {
val event = AmberEvent.fromJson(result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = try {
acc.decrypt(event.content, acc.hexKey)
} catch (_: Exception) {
event.content
}
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
try {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
try {
val event = AmberEvent.fromJson(result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = try {
acc.decrypt(event.content, acc.hexKey)
} catch (_: Exception) {
event.content
}
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
try {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} catch (_: Exception) {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
EventEncryptedDataKind(event, null, result)
}
} else {
EventEncryptedDataKind(event, null, result)
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing JSON: ${e.message}")
ClearTextEncryptedDataKind(bunkerRequest.ciphertext, result)
}
} else if (result.startsWith("[")) {
try {
@@ -542,28 +547,33 @@ class EventNotificationConsumer(private val applicationContext: Context) {
val result = acc.nip04Decrypt(bunkerRequest.ciphertext, bunkerRequest.pubKey)
if (result.startsWith("{")) {
val event = AmberEvent.fromJson(result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = try {
acc.decrypt(event.content, acc.hexKey)
} catch (_: Exception) {
event.content
}
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
try {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
try {
val event = AmberEvent.fromJson(result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = try {
acc.decrypt(event.content, acc.hexKey)
} catch (_: Exception) {
event.content
}
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
try {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} catch (_: Exception) {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
EventEncryptedDataKind(event, null, result)
}
} else {
EventEncryptedDataKind(event, null, result)
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing JSON: ${e.message}")
ClearTextEncryptedDataKind(bunkerRequest.ciphertext, result)
}
} else if (result.startsWith("[")) {
try {
@@ -511,29 +511,34 @@ object IntentUtils {
}
} else {
if (result.startsWith("{")) {
val event = AmberEvent.fromJson(result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = try {
account.decrypt(event.content, account.hexKey)
} catch (_: Exception) {
event.content
}
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
try {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing TagArray: ${e.message}")
try {
val event = AmberEvent.fromJson(result)
if (event.kind == SealedRumorEvent.KIND) {
val decryptedSealData = try {
account.decrypt(event.content, account.hexKey)
} catch (_: Exception) {
event.content
}
if (decryptedSealData.startsWith("{")) {
val sealEvent = AmberEvent.fromJson(decryptedSealData)
EventEncryptedDataKind(event, EventEncryptedDataKind(sealEvent, null, decryptedSealData), result)
} else if (decryptedSealData.startsWith("[")) {
try {
val tagArray = JacksonMapper.fromJsonToTagArray(decryptedSealData)
EventEncryptedDataKind(event, TagArrayEncryptedDataKind(tagArray, decryptedSealData), decryptedSealData)
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing TagArray: ${e.message}")
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
}
} else {
EventEncryptedDataKind(event, ClearTextEncryptedDataKind(event.content, decryptedSealData), result)
EventEncryptedDataKind(event, null, result)
}
} else {
EventEncryptedDataKind(event, null, result)
} catch (e: Exception) {
Log.e("IntentUtils", "Error parsing JSON: ${e.message}")
ClearTextEncryptedDataKind(data, result)
}
} else if (result.startsWith("[")) {
try {