From 196a7de6a35d45f2c1615bb5f9dc3083011fb2dd Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Mon, 8 Sep 2025 14:05:00 -0300 Subject: [PATCH] When using intents check if it's rejected --- .../api/foreground/intents/responses/DecryptZapResponse.kt | 3 +++ .../api/foreground/intents/responses/DeriveKeyResponse.kt | 3 +++ .../api/foreground/intents/responses/Nip04DecryptResponse.kt | 3 +++ .../api/foreground/intents/responses/Nip04EncryptResponse.kt | 4 ++++ .../api/foreground/intents/responses/Nip44DecryptResponse.kt | 3 +++ .../api/foreground/intents/responses/Nip44EncryptResponse.kt | 3 +++ .../api/foreground/intents/responses/SignResponse.kt | 4 ++++ .../api/foreground/intents/results/IntentResult.kt | 2 ++ .../intents/results/IntentResultJsonDeserializer.kt | 1 + .../foreground/intents/results/IntentResultJsonSerializer.kt | 1 + 10 files changed, 27 insertions(+) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DecryptZapResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DecryptZapResponse.kt index 35b3474a2..fec2ca5ad 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DecryptZapResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DecryptZapResponse.kt @@ -34,6 +34,9 @@ class DecryptZapResponse { ) fun parse(intent: IntentResult): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } val eventJson = intent.result return if (!eventJson.isNullOrBlank()) { if (eventJson.startsWith("{")) { diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DeriveKeyResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DeriveKeyResponse.kt index 3d51fb9a5..c1353a1e6 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DeriveKeyResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/DeriveKeyResponse.kt @@ -33,6 +33,9 @@ class DeriveKeyResponse { ) fun parse(intent: IntentResult): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } val newPrivateKey = intent.result return if (newPrivateKey != null) { SignerResult.RequestAddressed.Successful(DerivationResult(newPrivateKey)) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04DecryptResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04DecryptResponse.kt index 84cc20ab6..ee94be069 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04DecryptResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04DecryptResponse.kt @@ -32,6 +32,9 @@ class Nip04DecryptResponse { ) fun parse(intent: IntentResult): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } val plaintext = intent.result return if (plaintext != null) { SignerResult.RequestAddressed.Successful(DecryptionResult(plaintext)) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04EncryptResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04EncryptResponse.kt index 969520fef..874f782e0 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04EncryptResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip04EncryptResponse.kt @@ -32,6 +32,10 @@ class Nip04EncryptResponse { ) fun parse(intent: IntentResult): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } + val ciphertext = intent.result return if (ciphertext != null) { SignerResult.RequestAddressed.Successful(EncryptionResult(ciphertext)) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44DecryptResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44DecryptResponse.kt index e65dd8f4f..2f609f0e9 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44DecryptResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44DecryptResponse.kt @@ -32,6 +32,9 @@ class Nip44DecryptResponse { ) fun parse(intent: IntentResult): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } val plaintext = intent.result return if (plaintext != null) { SignerResult.RequestAddressed.Successful(DecryptionResult(plaintext)) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44EncryptResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44EncryptResponse.kt index 243856a38..fc5615442 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44EncryptResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/Nip44EncryptResponse.kt @@ -32,6 +32,9 @@ class Nip44EncryptResponse { ) fun parse(intent: IntentResult): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } val ciphertext = intent.result return if (ciphertext != null) { SignerResult.RequestAddressed.Successful(EncryptionResult(ciphertext)) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/SignResponse.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/SignResponse.kt index 6e8a6d639..d37fb0d9a 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/SignResponse.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/responses/SignResponse.kt @@ -39,6 +39,10 @@ class SignResponse { intent: IntentResult, unsignedEvent: Event, ): SignerResult.RequestAddressed { + if (intent.rejected) { + return SignerResult.RequestAddressed.ManuallyRejected() + } + val eventJson = intent.event return if (eventJson != null) { if (eventJson.startsWith("{")) { diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResult.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResult.kt index b1beca7a8..58844729b 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResult.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResult.kt @@ -29,6 +29,7 @@ data class IntentResult( val result: String? = null, val event: String? = null, val id: String? = null, + val rejected: Boolean = false, ) { fun toJson(): String = JsonMapper.mapper.writeValueAsString(this) @@ -48,6 +49,7 @@ data class IntentResult( result = data.getStringExtra("result"), event = data.getStringExtra("event"), `package` = data.getStringExtra("package"), + rejected = data.extras?.containsKey("rejected") == true, ) fun fromJson(json: String): IntentResult = JsonMapper.mapper.readValue(json) diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonDeserializer.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonDeserializer.kt index e53cb8be2..7b21edf39 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonDeserializer.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonDeserializer.kt @@ -36,6 +36,7 @@ class IntentResultJsonDeserializer : StdDeserializer(IntentResult: result = jsonObject.get("result")?.asText()?.intern(), event = jsonObject.get("event")?.asText()?.intern(), id = jsonObject.get("id")?.asText()?.intern(), + rejected = jsonObject.get("rejected")?.asBoolean() ?: false, ) } } diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonSerializer.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonSerializer.kt index 289f4daed..d8e5f9226 100644 --- a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonSerializer.kt +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/nip55AndroidSigner/api/foreground/intents/results/IntentResultJsonSerializer.kt @@ -35,6 +35,7 @@ class IntentResultJsonSerializer : StdSerializer(IntentResult::cla result.result?.let { gen.writeStringField("result", it) } result.event?.let { gen.writeStringField("event", it) } result.id?.let { gen.writeStringField("id", it) } + result.rejected.let { gen.writeBooleanField("rejected", it) } gen.writeEndObject() } }