diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 02304cd06..dbb6b8270 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -11,12 +11,12 @@ import com.vitorpamplona.amethyst.OptOutFromFilters import com.vitorpamplona.amethyst.service.AmberUtils import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.NostrLnZapPaymentResponseDataSource +import com.vitorpamplona.amethyst.service.SignerType import com.vitorpamplona.amethyst.service.relays.Client import com.vitorpamplona.amethyst.service.relays.Constants import com.vitorpamplona.amethyst.service.relays.FeedType import com.vitorpamplona.amethyst.service.relays.Relay import com.vitorpamplona.amethyst.service.relays.RelayPool -import com.vitorpamplona.amethyst.ui.actions.SignerType import com.vitorpamplona.amethyst.ui.components.BundledUpdate import com.vitorpamplona.amethyst.ui.note.combineWith import com.vitorpamplona.quartz.crypto.CryptoUtils @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.encoders.ATag import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.hexToByteArray import com.vitorpamplona.quartz.encoders.toHexKey +import com.vitorpamplona.quartz.encoders.toNpub import com.vitorpamplona.quartz.events.* import kotlinx.collections.immutable.ImmutableSet import kotlinx.collections.immutable.persistentSetOf @@ -117,7 +118,8 @@ class Account( AmberUtils.decryptBlockList( content, keyPair.pubKey.toHexKey(), - blockList.id() + blockList.id(), + keyPair.pubKey.toNpub() ) blockList.decryptedContent = AmberUtils.cachedDecryptedContent[blockList.id] live.invalidateData() @@ -220,7 +222,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val content = AmberUtils.content[event.id] ?: "" if (content.isBlank()) { return @@ -242,7 +244,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val content = AmberUtils.content[event.id] if (content.isBlank()) { return @@ -314,7 +316,7 @@ class Account( keyPair ) - AmberUtils.openAmber(senderReaction) + AmberUtils.openAmber(senderReaction, keyPair.pubKey.toNpub()) val reactionContent = AmberUtils.content[event.id] if (reactionContent.isBlank()) return senderReaction = ReactionEvent.create(senderReaction, reactionContent) @@ -322,7 +324,7 @@ class Account( val giftWraps = users.plus(senderPublicKey).map { val gossip = Gossip.create(senderReaction) val content = Gossip.toJson(gossip) - AmberUtils.encrypt(content, it, gossip.id!!, SignerType.NIP44_ENCRYPT) + AmberUtils.encrypt(content, it, gossip.id!!, keyPair.pubKey.toNpub(), SignerType.NIP44_ENCRYPT) val encryptedContent = AmberUtils.content[gossip.id] if (encryptedContent.isBlank()) return @@ -330,7 +332,7 @@ class Account( encryptedContent = encryptedContent, pubKey = senderPublicKey ) - AmberUtils.openAmber(sealedEvent) + AmberUtils.openAmber(sealedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[sealedEvent.id] ?: "" if (eventContent.isBlank()) return sealedEvent = SealedGossipEvent.create(sealedEvent, eventContent) @@ -367,7 +369,7 @@ class Account( keyPair ) - AmberUtils.openAmber(senderReaction) + AmberUtils.openAmber(senderReaction, keyPair.pubKey.toNpub()) val reactionContent = AmberUtils.content[senderReaction.id] ?: "" if (reactionContent.isBlank()) return senderReaction = ReactionEvent.create(senderReaction, reactionContent) @@ -376,7 +378,7 @@ class Account( newUsers.forEach { val gossip = Gossip.create(senderReaction) val content = Gossip.toJson(gossip) - AmberUtils.encrypt(content, it, gossip.id!!, SignerType.NIP44_ENCRYPT) + AmberUtils.encrypt(content, it, gossip.id!!, keyPair.pubKey.toNpub(), SignerType.NIP44_ENCRYPT) val encryptedContent = AmberUtils.content[gossip.id] if (encryptedContent.isBlank()) return @@ -384,7 +386,7 @@ class Account( encryptedContent = encryptedContent, pubKey = senderPublicKey ) - AmberUtils.openAmber(sealedEvent) + AmberUtils.openAmber(sealedEvent, keyPair.pubKey.toNpub()) val sealedContent = AmberUtils.content[sealedEvent.id] ?: "" if (sealedContent.isBlank()) return sealedEvent = SealedGossipEvent.create(sealedEvent, sealedContent) @@ -415,7 +417,7 @@ class Account( note.event?.let { val event = ReactionEvent.create(emojiUrl, it, keyPair) if (loginWithAmber) { - AmberUtils.signEvent(event) + AmberUtils.signEvent(event, keyPair.pubKey.toNpub()) } else { Client.send(event) LocalCache.consume(event) @@ -429,7 +431,7 @@ class Account( note.event?.let { val event = ReactionEvent.create(reaction, it, keyPair) if (loginWithAmber) { - AmberUtils.signEvent(event) + AmberUtils.signEvent(event, keyPair.pubKey.toNpub()) } else { Client.send(event) LocalCache.consume(event) @@ -462,7 +464,7 @@ class Account( pollOption, message ) - AmberUtils.openAmber(unsignedEvent) + AmberUtils.openAmber(unsignedEvent, keyPair.pubKey.toNpub()) val content = AmberUtils.content[unsignedEvent.id] ?: "" if (content.isBlank()) return null @@ -481,7 +483,7 @@ class Account( pollOption, message ) - AmberUtils.openAmber(unsignedEvent) + AmberUtils.openAmber(unsignedEvent, keyPair.pubKey.toNpub()) val content = AmberUtils.content[unsignedEvent.id] ?: "" if (content.isBlank()) return null @@ -531,7 +533,7 @@ class Account( if (privKey != null) return zapResponseEvent.response(privKey, pubKey) - AmberUtils.decrypt(zapResponseEvent.content, pubKey.toHexKey(), zapResponseEvent.id) + AmberUtils.decrypt(zapResponseEvent.content, pubKey.toHexKey(), zapResponseEvent.id, keyPair.pubKey.toNpub()) val decryptedContent = AmberUtils.content[zapResponseEvent.id] ?: "" if (decryptedContent.isBlank()) return null return zapResponseEvent.response(decryptedContent) @@ -604,7 +606,7 @@ class Account( note.event?.let { var event = ReactionEvent.createWarning(it, keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) return event = ReactionEvent( @@ -623,7 +625,7 @@ class Account( note.event?.let { var event = ReportEvent.create(it, type, keyPair, content = content) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) return event = ReportEvent( @@ -650,7 +652,7 @@ class Account( var event = ReportEvent.create(user.pubkeyHex, type, keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) return event = ReportEvent( @@ -678,7 +680,7 @@ class Account( if (myNotes.isNotEmpty()) { val event = DeletionEvent.create(myNotes, keyPair) if (loginWithAmber) { - AmberUtils.signEvent(event) + AmberUtils.signEvent(event, keyPair.pubKey.toNpub()) } else { Client.send(event) LocalCache.consume(event) @@ -691,7 +693,7 @@ class Account( var event = HTTPAuthorizationEvent.create(url, method, body, keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return null @@ -713,7 +715,7 @@ class Account( if (it.kind() == 1) { val event = RepostEvent.create(it, keyPair) if (loginWithAmber) { - AmberUtils.signEvent(event) + AmberUtils.signEvent(event, keyPair.pubKey.toNpub()) } else { Client.send(event) LocalCache.consume(event) @@ -721,7 +723,7 @@ class Account( } else { val event = GenericRepostEvent.create(it, keyPair) if (loginWithAmber) { - AmberUtils.signEvent(event) + AmberUtils.signEvent(event, keyPair.pubKey.toNpub()) } else { Client.send(event) LocalCache.consume(event) @@ -756,7 +758,7 @@ class Account( it, keyPair ) - AmberUtils.openAmber(unsignedEvent) + AmberUtils.openAmber(unsignedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[unsignedEvent.id] ?: "" returningContactList = if (eventContent.isBlank()) { latestContactList @@ -805,7 +807,7 @@ class Account( } if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -837,7 +839,7 @@ class Account( } if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -870,7 +872,7 @@ class Account( } if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -906,7 +908,7 @@ class Account( } if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -942,7 +944,7 @@ class Account( } if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -967,7 +969,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -993,7 +995,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1019,7 +1021,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1045,7 +1047,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1071,7 +1073,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1094,7 +1096,7 @@ class Account( pubKey = keyPair.pubKey.toHexKey() ) - AmberUtils.openAmber(unsignedData) + AmberUtils.openAmber(unsignedData, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[unsignedData.id] ?: "" if (eventContent.isBlank()) return null val data = FileStorageEvent( @@ -1118,7 +1120,7 @@ class Account( pubKey = keyPair.pubKey.toHexKey() ) - AmberUtils.openAmber(unsignedEvent) + AmberUtils.openAmber(unsignedEvent, keyPair.pubKey.toNpub()) val unsignedEventContent = AmberUtils.content[unsignedEvent.id] ?: "" if (unsignedEventContent.isBlank()) return null val signedEvent = FileStorageHeaderEvent( @@ -1188,7 +1190,7 @@ class Account( sensitiveContent = headerInfo.sensitiveContent, keyPair = keyPair ) - AmberUtils.openAmber(unsignedEvent) + AmberUtils.openAmber(unsignedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[unsignedEvent.id] ?: "" if (eventContent.isBlank()) return null val signedEvent = FileHeaderEvent( @@ -1255,7 +1257,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(signedEvent) + AmberUtils.openAmber(signedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[signedEvent.id] ?: "" if (eventContent.isBlank()) { return @@ -1325,7 +1327,7 @@ class Account( // println("Sending new PollNoteEvent: %s".format(signedEvent.toJson())) if (loginWithAmber) { - AmberUtils.openAmber(signedEvent) + AmberUtils.openAmber(signedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[signedEvent.id] ?: "" if (eventContent.isBlank()) { return @@ -1377,7 +1379,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(signedEvent) + AmberUtils.openAmber(signedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[signedEvent.id] ?: "" if (eventContent.isBlank()) { return @@ -1418,7 +1420,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(signedEvent) + AmberUtils.openAmber(signedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[signedEvent.id] ?: "" if (eventContent.isBlank()) { return @@ -1451,7 +1453,7 @@ class Account( var localMessage = message if (loginWithAmber) { - AmberUtils.encrypt(localMessage, toUser, "encrypt") + AmberUtils.encrypt(localMessage, toUser, "encrypt", keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content["encrypt"] ?: "" if (eventContent.isBlank()) return localMessage = eventContent @@ -1473,7 +1475,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(signedEvent) + AmberUtils.openAmber(signedEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[signedEvent.id] ?: "" if (eventContent.isBlank()) { return @@ -1515,7 +1517,7 @@ class Account( geohash = geohash ) - AmberUtils.openAmber(chatMessageEvent) + AmberUtils.openAmber(chatMessageEvent, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[chatMessageEvent.id] ?: "" if (eventContent.isBlank()) return chatMessageEvent = ChatMessageEvent.create(chatMessageEvent, eventContent) @@ -1523,14 +1525,14 @@ class Account( toUsers.plus(senderPublicKey).toSet().forEach { val gossip = Gossip.create(chatMessageEvent) val content = Gossip.toJson(gossip) - AmberUtils.encrypt(content, it, gossip.id!!, SignerType.NIP44_ENCRYPT) + AmberUtils.encrypt(content, it, gossip.id!!, keyPair.pubKey.toNpub(), SignerType.NIP44_ENCRYPT) val gossipContent = AmberUtils.content[gossip.id] ?: "" if (gossipContent.isNotBlank()) { var sealedEvent = SealedGossipEvent.create( encryptedContent = gossipContent, pubKey = senderPublicKey ) - AmberUtils.openAmber(sealedEvent) + AmberUtils.openAmber(sealedEvent, keyPair.pubKey.toNpub()) val sealedEventContent = AmberUtils.content[sealedEvent.id] ?: "" if (sealedEventContent.isBlank()) return sealedEvent = SealedGossipEvent.create(sealedEvent, sealedEventContent) @@ -1567,12 +1569,12 @@ class Account( // Only keep in cache the GiftWrap for the account. if (it.recipientPubKey() == keyPair.pubKey.toHexKey()) { if (loginWithAmber) { - AmberUtils.decrypt(it.content, it.pubKey, it.id, SignerType.NIP44_DECRYPT) + AmberUtils.decrypt(it.content, it.pubKey, it.id, keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT) val decryptedContent = AmberUtils.cachedDecryptedContent[it.id] ?: "" if (decryptedContent.isEmpty()) return it.cachedGift(keyPair.pubKey, decryptedContent)?.let { cached -> if (cached is SealedGossipEvent) { - AmberUtils.decrypt(cached.content, cached.pubKey, cached.id, SignerType.NIP44_DECRYPT) + AmberUtils.decrypt(cached.content, cached.pubKey, cached.id, keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT) val localDecryptedContent = AmberUtils.cachedDecryptedContent[cached.id] ?: "" if (localDecryptedContent.isEmpty()) return cached.cachedGossip(keyPair.pubKey, localDecryptedContent)?.let { gossip -> @@ -1614,7 +1616,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1636,7 +1638,7 @@ class Account( var event = StatusEvent.update(oldEvent, newStatus, keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1652,7 +1654,7 @@ class Account( var event = StatusEvent.create(newStatus, "general", expiration = null, keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1669,7 +1671,7 @@ class Account( var event = StatusEvent.clear(oldEvent, keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1681,7 +1683,7 @@ class Account( var event2 = DeletionEvent.create(listOf(event.id), keyPair) if (loginWithAmber) { - AmberUtils.openAmber(event2) + AmberUtils.openAmber(event2, keyPair.pubKey.toNpub()) val event2Content = AmberUtils.content[event2.id] ?: "" if (event2Content.isBlank()) { return @@ -1706,7 +1708,7 @@ class Account( ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1743,7 +1745,7 @@ class Account( } if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1782,7 +1784,7 @@ class Account( } val msg = Event.mapper.writeValueAsString(privTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt") + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt", keyPair.pubKey.toNpub()) val encryptedContent = AmberUtils.content["encrypt"] ?: "" AmberUtils.content.remove("encrypt") if (encryptedContent.isBlank()) { @@ -1800,7 +1802,7 @@ class Account( keyPair.pubKey.toHexKey() ) - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1838,7 +1840,7 @@ class Account( } val msg = Event.mapper.writeValueAsString(privTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt") + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt", keyPair.pubKey.toNpub()) val encryptedContent = AmberUtils.content["encrypt"] ?: "" AmberUtils.content.remove("encrypt") if (encryptedContent.isBlank()) { @@ -1856,7 +1858,7 @@ class Account( keyPair.pubKey.toHexKey() ) - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -1924,7 +1926,7 @@ class Account( } val msg = Event.mapper.writeValueAsString(privTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt") + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt", keyPair.pubKey.toNpub()) val encryptedContent = AmberUtils.content["encrypt"] ?: "" AmberUtils.content.remove("encrypt") if (encryptedContent.isBlank()) { @@ -1950,7 +1952,7 @@ class Account( keyPair.pubKey.toHexKey() ) } - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -2040,7 +2042,7 @@ class Account( var event = RelayAuthEvent.create(relay.url, challenge, keyPair.pubKey.toHexKey(), keyPair.privKey) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return null @@ -2108,7 +2110,7 @@ class Account( } val msg = Event.mapper.writeValueAsString(privTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt") + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt", keyPair.pubKey.toNpub()) val encryptedContent = AmberUtils.content["encrypt"] ?: "" AmberUtils.content.remove("encrypt") if (encryptedContent.isBlank()) { @@ -2135,7 +2137,7 @@ class Account( ) } - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) { return @@ -2213,7 +2215,7 @@ class Account( val privateTags = listOf(listOf("p", pubkeyHex)) val msg = Event.mapper.writeValueAsString(privateTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt") + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), "encrypt", keyPair.pubKey.toNpub()) val encryptedContent = AmberUtils.content["encrypted"] ?: "" AmberUtils.content.remove("encrypted") if (encryptedContent.isBlank()) return @@ -2221,7 +2223,7 @@ class Account( } else { var decryptedContent = AmberUtils.cachedDecryptedContent[id] if (decryptedContent == null) { - AmberUtils.decrypt(blockList.content, keyPair.pubKey.toHexKey(), id) + AmberUtils.decrypt(blockList.content, keyPair.pubKey.toHexKey(), id, keyPair.pubKey.toNpub()) val content = AmberUtils.content[id] ?: "" if (content.isBlank()) return decryptedContent = content @@ -2229,7 +2231,7 @@ class Account( val privateTags = blockList.privateTagsOrEmpty(decryptedContent).plus(element = listOf("p", pubkeyHex)) val msg = Event.mapper.writeValueAsString(privateTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), id) + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), id, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[id] ?: "" if (eventContent.isBlank()) return eventContent @@ -2253,7 +2255,7 @@ class Account( ) } - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) return event = PeopleListEvent( @@ -2302,21 +2304,21 @@ class Account( val privateTags = listOf(listOf("p", pubkeyHex)) val msg = Event.mapper.writeValueAsString(privateTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), blockList.id) + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), blockList.id, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[blockList.id] ?: "" if (eventContent.isBlank()) return eventContent } else { var decryptedContent = AmberUtils.cachedDecryptedContent[blockList.id] if (decryptedContent == null) { - AmberUtils.decrypt(blockList.content, keyPair.pubKey.toHexKey(), blockList.id) + AmberUtils.decrypt(blockList.content, keyPair.pubKey.toHexKey(), blockList.id, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[blockList.id] ?: "" if (eventContent.isBlank()) return decryptedContent = eventContent } val privateTags = blockList.privateTagsOrEmpty(decryptedContent).minus(element = listOf("p", pubkeyHex)) val msg = Event.mapper.writeValueAsString(privateTags) - AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), blockList.id) + AmberUtils.encrypt(msg, keyPair.pubKey.toHexKey(), blockList.id, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[blockList.id] ?: "" if (eventContent.isBlank()) return eventContent @@ -2330,7 +2332,7 @@ class Account( encryptedContent ) - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) return event = PeopleListEvent.create(event, eventContent) @@ -2545,7 +2547,7 @@ class Account( keyPair = keyPair ) if (loginWithAmber) { - AmberUtils.openAmber(event) + AmberUtils.openAmber(event, keyPair.pubKey.toNpub()) val eventContent = AmberUtils.content[event.id] ?: "" if (eventContent.isBlank()) return event = ChannelMetadataEvent.create(event, eventContent) @@ -2563,7 +2565,7 @@ class Account( if (loginWithAmber) { var decryptedContent = AmberUtils.cachedDecryptedContent[event.id] if (decryptedContent == null) { - AmberUtils.decrypt(event.content, event.pubKey, event.id, SignerType.NIP44_DECRYPT) + AmberUtils.decrypt(event.content, event.pubKey, event.id, keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT) } decryptedContent = AmberUtils.cachedDecryptedContent[event.id] ?: "" if (decryptedContent.isEmpty()) return null @@ -2579,7 +2581,7 @@ class Account( if (loginWithAmber) { var decryptedContent = AmberUtils.cachedDecryptedContent[event.id] if (decryptedContent == null) { - AmberUtils.decrypt(event.content, event.pubKey, event.id, SignerType.NIP44_DECRYPT) + AmberUtils.decrypt(event.content, event.pubKey, event.id, keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT) } decryptedContent = AmberUtils.cachedDecryptedContent[event.id] ?: "" if (decryptedContent.isEmpty()) return null @@ -2609,7 +2611,8 @@ class Account( AmberUtils.decryptDM( event.content, event.talkingWith(userProfile().pubkeyHex), - event.id + event.id, + keyPair.pubKey.toNpub() ) AmberUtils.cachedDecryptedContent[event.id] } else { @@ -2638,7 +2641,7 @@ class Account( null } } - AmberUtils.decryptZapEvent(event) + AmberUtils.decryptZapEvent(event, keyPair.pubKey.toNpub()) return null } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/AmberUtils.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/AmberUtils.kt index 0e4a54ee0..9ee066807 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/AmberUtils.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/AmberUtils.kt @@ -13,7 +13,6 @@ import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.service.relays.Client import com.vitorpamplona.amethyst.ui.MainActivity -import com.vitorpamplona.amethyst.ui.actions.SignerType import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.toHexKey import com.vitorpamplona.quartz.events.Event @@ -24,6 +23,16 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch +enum class SignerType { + SIGN_EVENT, + NIP04_ENCRYPT, + NIP04_DECRYPT, + NIP44_ENCRYPT, + NIP44_DECRYPT, + GET_PUBLIC_KEY, + DECRYPT_ZAP_EVENT +} + object AmberUtils { val content = LruCache(10) var isActivityRunning: Boolean = false @@ -128,7 +137,8 @@ object AmberUtils { type: SignerType, intentResult: ActivityResultLauncher, pubKey: HexKey, - id: String + id: String, + currentUserNpub: HexKey ) { ServiceManager.shouldPauseService = false val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$data")) @@ -144,14 +154,15 @@ object AmberUtils { intent.putExtra("type", signerType) intent.putExtra("pubKey", pubKey) intent.putExtra("id", id) - intent.`package` = "com.greenart7c3.nostrsigner" + intent.putExtra("current_user", currentUserNpub) + intent.`package` = "com.greenart7c3.nostrsigner.debug" intentResult.launch(intent) } - fun openAmber(event: EventInterface) { + fun openAmber(event: EventInterface, currentUserNpub: HexKey) { checkNotInMainThread() - val result = getDataFromResolver(SignerType.SIGN_EVENT, arrayOf(event.toJson(), event.pubKey())) + val result = getDataFromResolver(SignerType.SIGN_EVENT, arrayOf(event.toJson(), event.pubKey()), currentUserNpub) if (result !== null) { content.put(event.id(), result) return @@ -164,14 +175,15 @@ object AmberUtils { SignerType.SIGN_EVENT, activityResultLauncher, "", - event.id() + event.id(), + currentUserNpub ) while (isActivityRunning) { Thread.sleep(100) } } - fun signEvent(event: EventInterface) { + fun signEvent(event: EventInterface, currentUserNpub: HexKey) { checkNotInMainThread() ServiceManager.shouldPauseService = false isActivityRunning = true @@ -180,12 +192,13 @@ object AmberUtils { SignerType.SIGN_EVENT, signEventResultLauncher, account.keyPair.pubKey.toHexKey(), - event.id() + event.id(), + currentUserNpub ) } - fun decryptBlockList(encryptedContent: String, pubKey: HexKey, id: String, signerType: SignerType = SignerType.NIP04_DECRYPT) { - val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey)) + fun decryptBlockList(encryptedContent: String, pubKey: HexKey, id: String, currentUserNpub: HexKey, signerType: SignerType = SignerType.NIP04_DECRYPT) { + val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey), currentUserNpub) if (result !== null) { content.put(id, result) cachedDecryptedContent[id] = result @@ -197,14 +210,16 @@ object AmberUtils { signerType, blockListResultLauncher, pubKey, - id + id, + currentUserNpub ) } - fun getDataFromResolver(signerType: SignerType, data: Array, columnName: String = "signature"): String? { + fun getDataFromResolver(signerType: SignerType, data: Array, currentUserNpub: HexKey, columnName: String = "signature"): String? { + val localData = data.toList().plus(currentUserNpub).toTypedArray() Amethyst.instance.contentResolver.query( Uri.parse("content://com.greenart7c3.nostrsigner.$signerType"), - data, + localData, null, null, null @@ -219,8 +234,8 @@ object AmberUtils { return null } - fun decrypt(encryptedContent: String, pubKey: HexKey, id: String, signerType: SignerType = SignerType.NIP04_DECRYPT) { - val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey)) + fun decrypt(encryptedContent: String, pubKey: HexKey, id: String, currentUserNpub: HexKey, signerType: SignerType = SignerType.NIP04_DECRYPT) { + val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey), currentUserNpub) if (result !== null) { content.put(id, result) cachedDecryptedContent[id] = result @@ -233,15 +248,16 @@ object AmberUtils { signerType, decryptResultLauncher, pubKey, - id + id, + currentUserNpub ) while (isActivityRunning) { // do nothing } } - fun decryptDM(encryptedContent: String, pubKey: HexKey, id: String, signerType: SignerType = SignerType.NIP04_DECRYPT) { - val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey)) + fun decryptDM(encryptedContent: String, pubKey: HexKey, id: String, currentUserNpub: HexKey, signerType: SignerType = SignerType.NIP04_DECRYPT) { + val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey), currentUserNpub) if (result !== null) { content.put(id, result) cachedDecryptedContent[id] = result @@ -252,12 +268,13 @@ object AmberUtils { signerType, decryptResultLauncher, pubKey, - id + id, + currentUserNpub ) } - fun decryptBookmark(encryptedContent: String, pubKey: HexKey, id: String, signerType: SignerType = SignerType.NIP04_DECRYPT) { - val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey)) + fun decryptBookmark(encryptedContent: String, pubKey: HexKey, id: String, currentUserNpub: HexKey, signerType: SignerType = SignerType.NIP04_DECRYPT) { + val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey), currentUserNpub) if (result !== null) { content.put(id, result) cachedDecryptedContent[id] = result @@ -268,12 +285,13 @@ object AmberUtils { signerType, decryptResultLauncher, pubKey, - id + id, + currentUserNpub ) } - fun encrypt(decryptedContent: String, pubKey: HexKey, id: String, signerType: SignerType = SignerType.NIP04_ENCRYPT) { - val result = getDataFromResolver(signerType, arrayOf(decryptedContent, pubKey)) + fun encrypt(decryptedContent: String, pubKey: HexKey, id: String, currentUserNpub: HexKey, signerType: SignerType = SignerType.NIP04_ENCRYPT) { + val result = getDataFromResolver(signerType, arrayOf(decryptedContent, pubKey), currentUserNpub) if (result !== null) { content.put(id, result) return @@ -285,15 +303,16 @@ object AmberUtils { signerType, activityResultLauncher, pubKey, - id + id, + currentUserNpub ) while (isActivityRunning) { Thread.sleep(100) } } - fun decryptZapEvent(event: LnZapRequestEvent) { - val result = getDataFromResolver(SignerType.DECRYPT_ZAP_EVENT, arrayOf(event.toJson())) + fun decryptZapEvent(event: LnZapRequestEvent, currentUserNpub: HexKey) { + val result = getDataFromResolver(SignerType.DECRYPT_ZAP_EVENT, arrayOf(event.toJson()), currentUserNpub) if (result !== null) { content.put(event.id, result) cachedDecryptedContent[event.id] = result @@ -304,7 +323,8 @@ object AmberUtils { SignerType.DECRYPT_ZAP_EVENT, decryptResultLauncher, event.pubKey, - event.id + event.id, + currentUserNpub ) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt index c0c56b18f..47e94eb16 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrAccountDataSource.kt @@ -8,8 +8,8 @@ import com.vitorpamplona.amethyst.service.relays.EOSEAccount import com.vitorpamplona.amethyst.service.relays.JsonFilter import com.vitorpamplona.amethyst.service.relays.Relay import com.vitorpamplona.amethyst.service.relays.TypedFilter -import com.vitorpamplona.amethyst.ui.actions.SignerType import com.vitorpamplona.quartz.encoders.toHexKey +import com.vitorpamplona.quartz.encoders.toNpub import com.vitorpamplona.quartz.events.AdvertisedRelayListEvent import com.vitorpamplona.quartz.events.BadgeAwardEvent import com.vitorpamplona.quartz.events.BadgeProfilesEvent @@ -162,6 +162,7 @@ object NostrAccountDataSource : NostrDataSource("AccountData") { event.content, event.pubKey, event.id, + account.keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT ) cached = AmberUtils.cachedDecryptedContent[event.id] ?: "" @@ -185,6 +186,7 @@ object NostrAccountDataSource : NostrDataSource("AccountData") { event.content, event.pubKey, event.id, + account.keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT ) cached = AmberUtils.cachedDecryptedContent[event.id] ?: "" @@ -222,7 +224,7 @@ object NostrAccountDataSource : NostrDataSource("AccountData") { if (this::account.isInitialized) { if (account.loginWithAmber) { val event = RelayAuthEvent.create(relay.url, challenge, account.keyPair.pubKey.toHexKey(), account.keyPair.privKey) - val result = AmberUtils.getDataFromResolver(SignerType.SIGN_EVENT, arrayOf(event.toJson()), "event") + val result = AmberUtils.getDataFromResolver(SignerType.SIGN_EVENT, arrayOf(event.toJson(), account.keyPair.pubKey.toNpub()), account.keyPair.pubKey.toNpub(), "event") if (result !== null) { val signedEvent = Event.fromJson(result) Client.send( @@ -231,7 +233,7 @@ object NostrAccountDataSource : NostrDataSource("AccountData") { ) return } - AmberUtils.signEvent(event) + AmberUtils.signEvent(event, account.keyPair.pubKey.toNpub()) } else { val event = account.createAuthEvent(relay, challenge) if (event != null) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt index 25826f923..25439bb40 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt @@ -8,11 +8,12 @@ import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.model.Account import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.service.AmberUtils +import com.vitorpamplona.amethyst.service.SignerType import com.vitorpamplona.amethyst.service.notifications.NotificationUtils.sendDMNotification import com.vitorpamplona.amethyst.service.notifications.NotificationUtils.sendZapNotification -import com.vitorpamplona.amethyst.ui.actions.SignerType import com.vitorpamplona.amethyst.ui.note.showAmount import com.vitorpamplona.quartz.encoders.toHexKey +import com.vitorpamplona.quartz.encoders.toNpub import com.vitorpamplona.quartz.events.ChatMessageEvent import com.vitorpamplona.quartz.events.ChatroomKey import com.vitorpamplona.quartz.events.Event @@ -49,6 +50,7 @@ class EventNotificationConsumer(private val applicationContext: Context) { pushWrappedEvent.content, pushWrappedEvent.pubKey, pushWrappedEvent.id, + account.keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT ) cached = AmberUtils.cachedDecryptedContent[pushWrappedEvent.id] ?: "" @@ -106,6 +108,7 @@ class EventNotificationConsumer(private val applicationContext: Context) { event.content, event.pubKey, event.id, + account.keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT ) cached = AmberUtils.cachedDecryptedContent[event.id] ?: "" @@ -132,6 +135,7 @@ class EventNotificationConsumer(private val applicationContext: Context) { event.content, event.pubKey, event.id, + account.keyPair.pubKey.toNpub(), SignerType.NIP44_DECRYPT ) cached = AmberUtils.cachedDecryptedContent[event.id] ?: "" diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt deleted file mode 100644 index 579ffe2cd..000000000 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt +++ /dev/null @@ -1,189 +0,0 @@ -package com.vitorpamplona.amethyst.ui.actions - -import android.app.Activity.RESULT_OK -import android.widget.Toast -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxHeight -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material.Button -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.OutlinedTextField -import androidx.compose.material.Surface -import androidx.compose.material.Text -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.ContentPaste -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties -import com.vitorpamplona.amethyst.R -import com.vitorpamplona.amethyst.ServiceManager -import com.vitorpamplona.amethyst.service.AmberUtils -import com.vitorpamplona.amethyst.ui.theme.ButtonBorder -import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer -import com.vitorpamplona.quartz.encoders.HexKey -import com.vitorpamplona.quartz.events.Event -import kotlinx.coroutines.launch - -enum class SignerType { - SIGN_EVENT, - NIP04_ENCRYPT, - NIP04_DECRYPT, - NIP44_ENCRYPT, - NIP44_DECRYPT, - GET_PUBLIC_KEY, - DECRYPT_ZAP_EVENT -} - -@Composable -fun SignerDialog( - onClose: () -> Unit, - onPost: (content: String) -> Unit, - data: String, - type: SignerType = SignerType.SIGN_EVENT, - pubKey: HexKey = "" -) { - var signature by remember { mutableStateOf("") } - val scope = rememberCoroutineScope() - val context = LocalContext.current - val intentResult = rememberLauncherForActivityResult( - contract = ActivityResultContracts.StartActivityForResult(), - onResult = { - if (it.resultCode != RESULT_OK) { - scope.launch { - Toast.makeText( - context, - "Sign request rejected", - Toast.LENGTH_SHORT - ).show() - } - return@rememberLauncherForActivityResult - } - - signature = it.data?.getStringExtra("signature") ?: "" - if (type != SignerType.SIGN_EVENT) { - onPost( - signature - ) - } - ServiceManager.shouldPauseService = true - } - ) - - LaunchedEffect(Unit) { - AmberUtils.openAmber(data, type, intentResult, pubKey, "") - } - - Dialog( - onDismissRequest = { onClose() }, - properties = DialogProperties( - usePlatformDefaultWidth = false, - dismissOnClickOutside = false, - decorFitsSystemWindows = false - ) - ) { - Surface( - modifier = Modifier - .fillMaxWidth() - .fillMaxHeight() - ) { - Column( - Modifier - .fillMaxWidth() - .fillMaxHeight() - .padding(start = 10.dp, end = 10.dp, top = 10.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - CloseButton( - onPress = { - onClose() - } - ) - - PostButton( - onPost = { - if (type == SignerType.SIGN_EVENT) { - val event = Event.fromJson(data) - val signedEvent = Event( - event.id(), - event.pubKey(), - event.createdAt(), - event.kind(), - event.tags(), - event.content(), - signature - ) - - if (!signedEvent.hasValidSignature()) { - scope.launch { - Toast.makeText( - context, - "Invalid signature", - Toast.LENGTH_SHORT - ).show() - } - return@PostButton - } - onPost(signedEvent.toJson()) - } else { - onPost(signature) - } - }, - isActive = true - ) - } - - Spacer(modifier = DoubleVertSpacer) - - OutlinedTextField( - modifier = Modifier.fillMaxWidth(), - value = signature, - onValueChange = { - signature = it - }, - placeholder = { Text("Signature (hex)") }, - trailingIcon = { - Row { - IconButton( - onClick = { } - ) { - Icon( - imageVector = Icons.Outlined.ContentPaste, - contentDescription = stringResource(R.string.paste_from_clipboard) - ) - } - } - } - ) - Button( - shape = ButtonBorder, - onClick = { AmberUtils.openAmber(data, type, intentResult, pubKey, "") } - ) { - Text("Open Amber") - } - } - } - } -} diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt index 940dccb55..b177142fb 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/BookmarkPrivateFeedFilter.kt @@ -5,6 +5,7 @@ import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.service.AmberUtils import com.vitorpamplona.quartz.encoders.toHexKey +import com.vitorpamplona.quartz.encoders.toNpub object BookmarkPrivateFeedFilter : FeedFilter() { lateinit var account: Account @@ -24,7 +25,8 @@ object BookmarkPrivateFeedFilter : FeedFilter() { AmberUtils.decryptBookmark( bookmarks.content, account.keyPair.pubKey.toHexKey(), - id + id, + account.keyPair.pubKey.toNpub() ) } else { bookmarks.decryptedContent = decryptedContent diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt index 5c414a283..3100af03d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/UserProfilePicture.kt @@ -50,6 +50,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.ReportNoteDialog import com.vitorpamplona.quartz.encoders.HexKey import com.vitorpamplona.quartz.encoders.toHexKey +import com.vitorpamplona.quartz.encoders.toNpub import kotlinx.collections.immutable.ImmutableSet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -457,7 +458,8 @@ fun NoteDropDownMenu(note: Note, popupExpanded: MutableState, accountVi AmberUtils.decrypt( bookmarks?.content ?: "", accountViewModel.account.keyPair.pubKey.toHexKey(), - bookmarks?.id ?: "" + bookmarks?.id ?: "", + accountViewModel.account.keyPair.pubKey.toNpub() ) bookmarks?.decryptedContent = AmberUtils.cachedDecryptedContent[bookmarks?.id ?: ""] ?: "" accountViewModel.removePrivateBookmark(note, bookmarks?.decryptedContent ?: "") @@ -479,7 +481,8 @@ fun NoteDropDownMenu(note: Note, popupExpanded: MutableState, accountVi AmberUtils.decrypt( bookmarks?.content ?: "", accountViewModel.account.keyPair.pubKey.toHexKey(), - bookmarks?.id ?: "" + bookmarks?.id ?: "", + accountViewModel.account.keyPair.pubKey.toNpub() ) bookmarks?.decryptedContent = AmberUtils.cachedDecryptedContent[bookmarks?.id ?: ""] ?: "" accountViewModel.addPrivateBookmark(note, bookmarks?.decryptedContent ?: "") @@ -502,7 +505,8 @@ fun NoteDropDownMenu(note: Note, popupExpanded: MutableState, accountVi AmberUtils.decrypt( bookmarks?.content ?: "", accountViewModel.account.keyPair.pubKey.toHexKey(), - bookmarks?.id ?: "" + bookmarks?.id ?: "", + accountViewModel.account.keyPair.pubKey.toNpub() ) bookmarks?.decryptedContent = AmberUtils.cachedDecryptedContent[bookmarks?.id ?: ""] ?: "" accountViewModel.removePublicBookmark( @@ -527,7 +531,8 @@ fun NoteDropDownMenu(note: Note, popupExpanded: MutableState, accountVi AmberUtils.decrypt( bookmarks?.content ?: "", accountViewModel.account.keyPair.pubKey.toHexKey(), - bookmarks?.id ?: "" + bookmarks?.id ?: "", + accountViewModel.account.keyPair.pubKey.toNpub() ) bookmarks?.decryptedContent = AmberUtils.cachedDecryptedContent[bookmarks?.id ?: ""] ?: "" accountViewModel.addPublicBookmark( diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt index 25f3d9979..a0bb39eec 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedOff/LoginScreen.kt @@ -44,7 +44,7 @@ import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ServiceManager import com.vitorpamplona.amethyst.service.AmberUtils import com.vitorpamplona.amethyst.service.PackageUtils -import com.vitorpamplona.amethyst.ui.actions.SignerType +import com.vitorpamplona.amethyst.service.SignerType import com.vitorpamplona.amethyst.ui.qrcode.SimpleQrCodeScanner import com.vitorpamplona.amethyst.ui.screen.AccountStateViewModel import com.vitorpamplona.amethyst.ui.screen.loggedIn.ConnectOrbotDialog @@ -121,6 +121,7 @@ fun LoginPage( SignerType.GET_PUBLIC_KEY, activity, "", + "", "" ) } @@ -357,7 +358,7 @@ fun LoginPage( Box(modifier = Modifier.padding(40.dp, 40.dp, 40.dp, 0.dp)) { Button( onClick = { - val result = AmberUtils.getDataFromResolver(SignerType.GET_PUBLIC_KEY, arrayOf("login")) + val result = AmberUtils.getDataFromResolver(SignerType.GET_PUBLIC_KEY, arrayOf("login"), "") if (result == null) { loginWithAmber = true return@Button