diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/models/SignerType.kt b/app/src/main/java/com/greenart7c3/nostrsigner/models/SignerType.kt index 85fde7ea..6a16758e 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/models/SignerType.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/models/SignerType.kt @@ -15,4 +15,5 @@ enum class SignerType { INVALID, SWITCH_RELAYS, SIGN_PSBT, + LOGOUT, } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt index ba2bb3fa..79b05890 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtils.kt @@ -235,6 +235,7 @@ object BunkerRequestUtils { "ping" -> SignerType.PING "switch_relays" -> SignerType.SWITCH_RELAYS "sign_psbt" -> SignerType.SIGN_PSBT + "logout" -> SignerType.LOGOUT else -> SignerType.INVALID } @@ -251,6 +252,7 @@ object BunkerRequestUtils { "nip44v3_encrypt", "nip44v3_decrypt" -> bunkerRequest.params.getOrElse(3) { "" } "ping" -> "pong" "sign_psbt" -> bunkerRequest.params.first() + "logout" -> "ack" else -> "" } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/EventNotificationConsumer.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/EventNotificationConsumer.kt index 46489a54..ba014e63 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/EventNotificationConsumer.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/EventNotificationConsumer.kt @@ -384,6 +384,29 @@ class EventNotificationConsumer(private val applicationContext: Context) { return } + if (type == SignerType.LOGOUT) { + permission?.let { + BunkerRequestUtils.sendBunkerResponse( + context = applicationContext, + account = acc, + bunkerRequest = request, + bunkerResponse = BunkerResponse(bunkerRequest.id, "ack", null), + relays = relays, + onLoading = { }, + onDone = { success -> + if (success) { + Amber.instance.applicationIOScope.launch { + dao.delete(permission.application.key) + historyDao.deleteHistory(permission.application.key) + Amber.instance.notificationSubscription.updateFilter() + } + } + }, + ) + } + return + } + if (type == SignerType.GET_PUBLIC_KEY) { val gpkPermission = dao.getPermission(event.pubKey, "GET_PUBLIC_KEY") val signPolicy = dao.getSignPolicy(event.pubKey) diff --git a/app/src/test/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtilsTest.kt b/app/src/test/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtilsTest.kt index 19fba699..1657894f 100644 --- a/app/src/test/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtilsTest.kt +++ b/app/src/test/java/com/greenart7c3/nostrsigner/service/BunkerRequestUtilsTest.kt @@ -125,6 +125,11 @@ class BunkerRequestUtilsTest { assertEquals(SignerType.SIGN_PSBT, BunkerRequestUtils.getTypeFromBunker(mockBunkerRequest("sign_psbt"))) } + @Test + fun `getTypeFromBunker returns LOGOUT for logout`() { + assertEquals(SignerType.LOGOUT, BunkerRequestUtils.getTypeFromBunker(mockBunkerRequest("logout"))) + } + @Test fun `getTypeFromBunker returns INVALID for unknown method`() { assertEquals(SignerType.INVALID, BunkerRequestUtils.getTypeFromBunker(mockBunkerRequest("unknown_method"))) @@ -235,6 +240,11 @@ class BunkerRequestUtilsTest { assertEquals("", BunkerRequestUtils.getDataFromBunker(mockBunkerRequest("switch_relays"))) } + @Test + fun `getDataFromBunker returns ack for logout`() { + assertEquals("ack", BunkerRequestUtils.getDataFromBunker(mockBunkerRequest("logout"))) + } + @Test fun `getDataFromBunker returns empty string for unknown method`() { assertEquals("", BunkerRequestUtils.getDataFromBunker(mockBunkerRequest("unknown_method")))