mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-29 12:32:45 +02:00
decrypt dms using amber
This commit is contained in:
@@ -41,17 +41,22 @@ import androidx.compose.ui.window.DialogProperties
|
|||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.model.TimeUtils
|
import com.vitorpamplona.amethyst.model.TimeUtils
|
||||||
import com.vitorpamplona.amethyst.service.model.Event
|
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.service.model.TextNoteEvent
|
||||||
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
|
import com.vitorpamplona.amethyst.ui.theme.ButtonBorder
|
||||||
import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer
|
import com.vitorpamplona.amethyst.ui.theme.DoubleVertSpacer
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
fun openAmber(
|
fun openAmber(
|
||||||
event: Event,
|
event: EventInterface,
|
||||||
intentResult: ManagedActivityResultLauncher<Intent, ActivityResult>
|
intentResult: ManagedActivityResultLauncher<Intent, ActivityResult>
|
||||||
) {
|
) {
|
||||||
val json = event.toJson()
|
val json = event.toJson()
|
||||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$json"))
|
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"
|
intent.`package` = "com.greenart7c3.nostrsigner.debug"
|
||||||
intentResult.launch(intent)
|
intentResult.launch(intent)
|
||||||
}
|
}
|
||||||
@@ -60,7 +65,7 @@ fun openAmber(
|
|||||||
fun SignerDialog(
|
fun SignerDialog(
|
||||||
onClose: () -> Unit,
|
onClose: () -> Unit,
|
||||||
onPost: (signedEvent: Event) -> Unit,
|
onPost: (signedEvent: Event) -> Unit,
|
||||||
event: Event
|
event: EventInterface
|
||||||
) {
|
) {
|
||||||
var signature by remember { mutableStateOf("") }
|
var signature by remember { mutableStateOf("") }
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
@@ -80,6 +85,19 @@ fun SignerDialog(
|
|||||||
}
|
}
|
||||||
|
|
||||||
signature = it.data?.getStringExtra("signature") ?: ""
|
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(
|
PostButton(
|
||||||
onPost = {
|
onPost = {
|
||||||
val signedEvent = Event(
|
val signedEvent = if (event is PrivateDmEvent) {
|
||||||
event.id,
|
Event(
|
||||||
event.pubKey,
|
event.id(),
|
||||||
event.createdAt,
|
event.pubKey(),
|
||||||
event.kind,
|
event.createdAt(),
|
||||||
event.tags,
|
event.kind(),
|
||||||
event.content,
|
event.tags(),
|
||||||
|
signature,
|
||||||
|
event.sig()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Event(
|
||||||
|
event.id(),
|
||||||
|
event.pubKey(),
|
||||||
|
event.createdAt(),
|
||||||
|
event.kind(),
|
||||||
|
event.tags(),
|
||||||
|
event.content(),
|
||||||
signature
|
signature
|
||||||
)
|
)
|
||||||
if (!signedEvent.hasValidSignature()) {
|
}
|
||||||
|
if (!signedEvent.hasValidSignature() && event !is PrivateDmEvent) {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
context,
|
context,
|
||||||
|
@@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.graphics.Shape
|
import androidx.compose.ui.graphics.Shape
|
||||||
import androidx.compose.ui.graphics.compositeOver
|
import androidx.compose.ui.graphics.compositeOver
|
||||||
import androidx.compose.ui.layout.onSizeChanged
|
import androidx.compose.ui.layout.onSizeChanged
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@@ -44,11 +45,13 @@ import androidx.lifecycle.map
|
|||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.model.Note
|
import com.vitorpamplona.amethyst.model.Note
|
||||||
import com.vitorpamplona.amethyst.model.User
|
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.ChannelCreateEvent
|
||||||
import com.vitorpamplona.amethyst.service.model.ChannelMetadataEvent
|
import com.vitorpamplona.amethyst.service.model.ChannelMetadataEvent
|
||||||
import com.vitorpamplona.amethyst.service.model.ChatMessageEvent
|
import com.vitorpamplona.amethyst.service.model.ChatMessageEvent
|
||||||
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent
|
import com.vitorpamplona.amethyst.service.model.PrivateDmEvent
|
||||||
import com.vitorpamplona.amethyst.ui.actions.ImmutableListOfLists
|
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.actions.toImmutableListOfLists
|
||||||
import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji
|
import com.vitorpamplona.amethyst.ui.components.CreateClickableTextWithEmoji
|
||||||
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
|
import com.vitorpamplona.amethyst.ui.components.CreateTextWithEmoji
|
||||||
@@ -634,8 +637,24 @@ private fun RenderRegularTextNote(
|
|||||||
nav: (String) -> Unit
|
nav: (String) -> Unit
|
||||||
) {
|
) {
|
||||||
val tags = remember(note.event) { note.event?.tags()?.toImmutableListOfLists() ?: ImmutableListOfLists() }
|
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 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) {
|
if (eventContent != null) {
|
||||||
SensitivityWarning(
|
SensitivityWarning(
|
||||||
@@ -643,7 +662,7 @@ private fun RenderRegularTextNote(
|
|||||||
accountViewModel = accountViewModel
|
accountViewModel = accountViewModel
|
||||||
) {
|
) {
|
||||||
TranslatableRichTextViewer(
|
TranslatableRichTextViewer(
|
||||||
content = eventContent,
|
content = eventContent!!,
|
||||||
canPreview = canPreview,
|
canPreview = canPreview,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
tags = tags,
|
tags = tags,
|
||||||
|
Reference in New Issue
Block a user