From 7ea92bc068ea8170f351add28f596f2ad43b055c Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Fri, 18 Aug 2023 10:57:17 -0300 Subject: [PATCH] send dms using amber --- .../vitorpamplona/amethyst/model/Account.kt | 3 +- .../amethyst/ui/actions/SignerDialog.kt | 2 +- .../ui/screen/loggedIn/ChatroomScreen.kt | 67 +++++++++++++++++-- .../quartz/events/PrivateDmEvent.kt | 13 ++-- 4 files changed, 70 insertions(+), 15 deletions(-) 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 fd034067a..a45df8832 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -1069,7 +1069,8 @@ class Account( markAsSensitive = wantsToMarkAsSensitive, zapRaiserAmount = zapRaiserAmount, geohash = geohash, - privateKey = keyPair.privKey!!, + pubKey = keyPair.pubKey.toHexKey(), + privateKey = keyPair.privKey, advertiseNip18 = false ) 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 index 52238f67f..b083b0d73 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/SignerDialog.kt @@ -101,7 +101,7 @@ fun SignerDialog( } signature = it.data?.getStringExtra("signature") ?: "" - if (type == SignerType.NIP04_DECRYPT) { + if (type != SignerType.SIGN_EVENT) { onPost( signature ) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt index d25c3197e..3b713bd53 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/ChatroomScreen.kt @@ -64,13 +64,18 @@ import androidx.lifecycle.distinctUntilChanged import androidx.lifecycle.map import androidx.lifecycle.viewmodel.compose.viewModel import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.ServersAvailable import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.NostrChatroomDataSource +import com.vitorpamplona.amethyst.service.PackageUtils +import com.vitorpamplona.amethyst.service.relays.Client import com.vitorpamplona.amethyst.ui.actions.CloseButton import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel import com.vitorpamplona.amethyst.ui.actions.PostButton +import com.vitorpamplona.amethyst.ui.actions.SignerDialog +import com.vitorpamplona.amethyst.ui.actions.SignerType import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery import com.vitorpamplona.amethyst.ui.components.ObserveDisplayNip05Status import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture @@ -93,6 +98,7 @@ import com.vitorpamplona.amethyst.ui.theme.StdPadding import com.vitorpamplona.amethyst.ui.theme.placeholderText import com.vitorpamplona.quartz.events.ChatMessageEvent import com.vitorpamplona.quartz.events.ChatroomKey +import com.vitorpamplona.quartz.events.Event import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.Dispatchers @@ -278,6 +284,49 @@ fun ChatroomScreen( val scope = rememberCoroutineScope() + var event by remember { mutableStateOf(null) } + if (event != null) { + SignerDialog( + onClose = { + event = null + }, + onPost = { + scope.launch(Dispatchers.IO) { + val signedEvent = Event.fromJson(it) + Client.send(signedEvent) + LocalCache.verifyAndConsume(signedEvent, null) + event = null + } + }, + data = event!!.toJson() + ) + } + + var message by remember { mutableStateOf(null) } + if (message != null) { + SignerDialog( + onClose = { + message = null + }, + onPost = { + scope.launch(Dispatchers.IO) { + event = accountViewModel.account.sendPrivateMessage( + message = it, + toUser = room.users.first(), + replyingTo = replyTo.value, + mentions = null, + wantsToMarkAsSensitive = false, + signEvent = false + ) + message = null + } + }, + data = message!!, + pubKey = room.users.first(), + type = SignerType.NIP04_ENCRYPT + ) + } + // LAST ROW PrivateMessageEditFieldRow(newPostModel, isPrivate = true, accountViewModel) { scope.launch(Dispatchers.IO) { @@ -290,13 +339,17 @@ fun ChatroomScreen( wantsToMarkAsSensitive = false ) } else { - accountViewModel.account.sendPrivateMessage( - message = newPostModel.message.text, - toUser = room.users.first(), - replyingTo = replyTo.value, - mentions = null, - wantsToMarkAsSensitive = false - ) + if (!accountViewModel.isWriteable() && PackageUtils.isAmberInstalled(context)) { + message = newPostModel.message.text + } else { + accountViewModel.account.sendPrivateMessage( + message = newPostModel.message.text, + toUser = room.users.first(), + replyingTo = replyTo.value, + mentions = null, + wantsToMarkAsSensitive = false + ) + } } newPostModel.message = TextFieldValue("") diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt index 5a0120ac4..296947527 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/PrivateDmEvent.kt @@ -86,7 +86,8 @@ class PrivateDmEvent( replyTos: List? = null, mentions: List? = null, zapReceiver: String?, - privateKey: ByteArray, + pubKey: HexKey, + privateKey: ByteArray?, createdAt: Long = TimeUtils.now(), publishedRecipientPubKey: ByteArray? = null, advertiseNip18: Boolean = true, @@ -94,12 +95,12 @@ class PrivateDmEvent( zapRaiserAmount: Long?, geohash: String? = null ): PrivateDmEvent { - val content = CryptoUtils.encryptNIP04( - if (advertiseNip18) { nip18Advertisement } else { "" } + msg, + val message = if (advertiseNip18) { nip18Advertisement } else { "" } + msg + val content = if (privateKey == null) message else CryptoUtils.encryptNIP04( + message, privateKey, recipientPubKey ) - val pubKey = CryptoUtils.pubkeyCreate(privateKey).toHexKey() val tags = mutableListOf>() publishedRecipientPubKey?.let { tags.add(listOf("p", publishedRecipientPubKey.toHexKey())) @@ -124,8 +125,8 @@ class PrivateDmEvent( } val id = generateId(pubKey, createdAt, kind, tags, content) - val sig = CryptoUtils.sign(id, privateKey) - return PrivateDmEvent(id.toHexKey(), pubKey, createdAt, tags, content, sig.toHexKey()) + val sig = if (privateKey == null) null else CryptoUtils.sign(id, privateKey) + return PrivateDmEvent(id.toHexKey(), pubKey, createdAt, tags, content, sig?.toHexKey() ?: "") } } }