mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2024-09-29 16:30:49 +00:00
send the logged in npub to amber
This commit is contained in:
parent
614dbab1fd
commit
9a648d7e84
@ -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
|
||||
}
|
||||
|
||||
|
@ -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<String, String>(10)
|
||||
var isActivityRunning: Boolean = false
|
||||
@ -128,7 +137,8 @@ object AmberUtils {
|
||||
type: SignerType,
|
||||
intentResult: ActivityResultLauncher<Intent>,
|
||||
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<out String>, columnName: String = "signature"): String? {
|
||||
fun getDataFromResolver(signerType: SignerType, data: Array<out String>, 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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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] ?: ""
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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<Note>() {
|
||||
lateinit var account: Account
|
||||
@ -24,7 +25,8 @@ object BookmarkPrivateFeedFilter : FeedFilter<Note>() {
|
||||
AmberUtils.decryptBookmark(
|
||||
bookmarks.content,
|
||||
account.keyPair.pubKey.toHexKey(),
|
||||
id
|
||||
id,
|
||||
account.keyPair.pubKey.toNpub()
|
||||
)
|
||||
} else {
|
||||
bookmarks.decryptedContent = decryptedContent
|
||||
|
@ -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<Boolean>, 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<Boolean>, 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<Boolean>, 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<Boolean>, 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(
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user