decrypt dms using amber

This commit is contained in:
greenart7c3
2023-08-16 16:39:42 -03:00
parent b8e97525eb
commit 8053119d42
2 changed files with 63 additions and 14 deletions

View File

@@ -41,17 +41,22 @@ import androidx.compose.ui.window.DialogProperties
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.TimeUtils
import com.vitorpamplona.amethyst.service.model.Event
import com.vitorpamplona.amethyst.service.model.EventInterface
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent
import com.vitorpamplona.amethyst.service.model.TextNoteEvent
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer
import kotlinx.coroutines.launch
fun openAmber(
event: Event,
event: EventInterface,
intentResult: ManagedActivityResultLauncher<Intent, ActivityResult>
) {
val json = event.toJson()
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$json"))
if (event is PrivateDmEvent) {
intent.putExtra("type", "nip04_decrypt")
}
intent.`package` = "com.greenart7c3.nostrsigner.debug"
intentResult.launch(intent)
}
@@ -60,7 +65,7 @@ fun openAmber(
fun SignerDialog(
onClose: () -> Unit,
onPost: (signedEvent: Event) -> Unit,
event: Event
event: EventInterface
) {
var signature by remember { mutableStateOf("") }
val scope = rememberCoroutineScope()
@@ -80,6 +85,19 @@ fun SignerDialog(
}
signature = it.data?.getStringExtra("signature") ?: ""
if (event is PrivateDmEvent) {
onPost(
Event(
event.id(),
event.pubKey(),
event.createdAt(),
event.kind(),
event.tags(),
signature,
event.sig()
)
)
}
}
)
@@ -120,16 +138,28 @@ fun SignerDialog(
PostButton(
onPost = {
val signedEvent = Event(
event.id,
event.pubKey,
event.createdAt,
event.kind,
event.tags,
event.content,
signature
)
if (!signedEvent.hasValidSignature()) {
val signedEvent = if (event is PrivateDmEvent) {
Event(
event.id(),
event.pubKey(),
event.createdAt(),
event.kind(),
event.tags(),
signature,
event.sig()
)
} else {
Event(
event.id(),
event.pubKey(),
event.createdAt(),
event.kind(),
event.tags(),
event.content(),
signature
)
}
if (!signedEvent.hasValidSignature() && event !is PrivateDmEvent) {
scope.launch {
Toast.makeText(
context,

View File

@@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.compositeOver
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -44,11 +45,13 @@ import androidx.lifecycle.map
import com.vitorpamplona.amethyst.R
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.service.PackageUtils
import com.vitorpamplona.amethyst.service.model.ChannelCreateEvent
import com.vitorpamplona.amethyst.service.model.ChannelMetadataEvent
import com.vitorpamplona.amethyst.service.model.ChatMessageEvent
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent
import com.vitorpamplona.amethyst.ui.actions.ImmutableListOfLists
import com.vitorpamplona.amethyst.ui.actions.SignerDialog
import com.vitorpamplona.amethyst.ui.actions.toImmutableListOfLists
import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
@@ -634,8 +637,24 @@ private fun RenderRegularTextNote(
nav: (String) -> Unit
) {
val tags = remember(note.event) { note.event?.tags()?.toImmutableListOfLists() ?: ImmutableListOfLists() }
val eventContent = remember { accountViewModel.decrypt(note) }
var eventContent by remember { mutableStateOf(accountViewModel.decrypt(note)) }
val modifier = remember { Modifier.padding(top = 5.dp) }
val context = LocalContext.current
val isAmberInstalled = PackageUtils.isAmberInstalled(context)
var triedToDecrypt by remember { mutableStateOf(false) }
if (isAmberInstalled && !triedToDecrypt && note.event is PrivateDmEvent) {
SignerDialog(
onClose = {
triedToDecrypt = true
eventContent = accountViewModel.decrypt(note)
},
onPost = {
eventContent = it.content
triedToDecrypt = true
},
event = note.event!!
)
}
if (eventContent != null) {
SensitivityWarning(
@@ -643,7 +662,7 @@ private fun RenderRegularTextNote(
accountViewModel = accountViewModel
) {
TranslatableRichTextViewer(
content = eventContent,
content = eventContent!!,
canPreview = canPreview,
modifier = modifier,
tags = tags,