Skip to content

Commit

Permalink
Merge branch 'master' into nip46
Browse files Browse the repository at this point in the history
  • Loading branch information
greenart7c3 committed Apr 12, 2024
2 parents 24e4b7c + 8e6b952 commit 880be28
Showing 1 changed file with 115 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@ package com.greenart7c3.nostrsigner.ui.components

import android.content.Context
import android.widget.Toast
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
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.graphics.Color
import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalContext
import com.greenart7c3.nostrsigner.R
Expand All @@ -26,6 +35,7 @@ import com.greenart7c3.nostrsigner.service.getAppCompatActivity
import com.greenart7c3.nostrsigner.service.toShortenHex
import com.greenart7c3.nostrsigner.ui.BunkerResponse
import com.greenart7c3.nostrsigner.ui.sendResult
import com.greenart7c3.nostrsigner.ui.theme.ButtonBorder
import com.vitorpamplona.quartz.encoders.toHexKey
import com.vitorpamplona.quartz.encoders.toNpub
import com.vitorpamplona.quartz.events.Event
Expand Down Expand Up @@ -308,83 +318,119 @@ fun SingleEventHomeScreen(
}

else -> {
val event = IntentUtils.getIntent(intentData.data, account.keyPair)
val permission = applicationEntity?.permissions?.firstOrNull {
it.pkKey == key && it.type == intentData.type.toString() && it.kind == event.kind
}
val remember = remember {
mutableStateOf(permission?.acceptable == true)
}
val shouldRunOnAccept = permission?.acceptable == true
val localPackageName = if (intentData.bunkerRequest != null) {
intentData.bunkerRequest.localKey
val result = runCatching { IntentUtils.getIntent(intentData.data, account.keyPair) }
if (result.isFailure) {
var showError by remember {
mutableStateOf(false)
}
Column(
Modifier.fillMaxSize(),
Arrangement.Center,
Alignment.CenterHorizontally
) {
Text("Error occurred while trying to parse event")
Button(
onClick = {
showError = !showError
},
shape = ButtonBorder
) {
Text(text = "Show/Hide", color = Color.White)
}
if (showError) {
OutlinedTextField(
value = result.exceptionOrNull()?.message ?: "",
onValueChange = { },
readOnly = true
)
}
}
} else {
packageName
}
EventData(
shouldRunOnAccept,
remember,
localPackageName,
appName,
applicationName,
event,
intentData.data,
intentData.type,
{
if (event.pubKey != account.keyPair.pubKey.toHexKey()) {
coroutineScope.launch {
Toast.makeText(
context,
context.getString(R.string.event_pubkey_is_not_equal_to_current_logged_in_user),
Toast.LENGTH_SHORT
).show()
val event = result.getOrNull()!!
val permission = applicationEntity?.permissions?.firstOrNull {
it.pkKey == key && it.type == intentData.type.toString() && it.kind == event.kind
}
val remember = remember {
mutableStateOf(permission?.acceptable == true)
}
val shouldRunOnAccept = permission?.acceptable == true
val localPackageName = if (intentData.bunkerRequest != null) {
intentData.bunkerRequest.localKey
} else {
packageName
}
EventData(
shouldRunOnAccept,
remember,
localPackageName,
appName,
applicationName,
event,
intentData.data,
intentData.type,
{
if (event.pubKey != account.keyPair.pubKey.toHexKey()) {
coroutineScope.launch {
Toast.makeText(
context,
context.getString(R.string.event_pubkey_is_not_equal_to_current_logged_in_user),
Toast.LENGTH_SHORT
).show()
}
return@EventData
}
return@EventData
}

val localEvent = try {
Event.fromJson(intentData.data)
} catch (e: Exception) {
Event.fromJson(event.toJson())
}
val localEvent = try {
Event.fromJson(intentData.data)
} catch (e: Exception) {
Event.fromJson(event.toJson())
}

account.signer.sign<Event>(
localEvent.createdAt,
localEvent.kind,
localEvent.tags,
localEvent.content
) { signedEvent ->
coroutineScope.launch {
sendResult(
context,
packageName,
account,
key,
remember.value,
clipboardManager,
signedEvent.toJson(),
if (localEvent is LnZapRequestEvent && localEvent.tags.any { tag -> tag.any { t -> t == "anon" } }) signedEvent.toJson() else signedEvent.sig,
intentData,
localEvent.kind
)
account.signer.sign<Event>(
localEvent.createdAt,
localEvent.kind,
localEvent.tags,
localEvent.content
) { signedEvent ->
coroutineScope.launch {
sendResult(
context,
packageName,
account,
key,
remember.value,
clipboardManager,
signedEvent.toJson(),
if (localEvent is LnZapRequestEvent && localEvent.tags.any { tag -> tag.any { t -> t == "anon" } }) signedEvent.toJson() else signedEvent.sig,
intentData,
localEvent.kind
)
}
}
}
},
{
if (remember.value) {
coroutineScope.launch(Dispatchers.IO) {
acceptOrRejectPermission(key, intentData, event.kind, false, applicationName ?: appName, account)
},
{
if (remember.value) {
coroutineScope.launch(Dispatchers.IO) {
acceptOrRejectPermission(
key,
intentData,
event.kind,
false,
applicationName ?: appName,
account
)
}
}
}

if (intentData.bunkerRequest != null) {
sendBunkerError(account, intentData.bunkerRequest, context)
} else {
context.getAppCompatActivity()?.intent = null
context.getAppCompatActivity()?.finish()
if (intentData.bunkerRequest != null) {
sendBunkerError(account, intentData.bunkerRequest, context)
} else {
context.getAppCompatActivity()?.intent = null
context.getAppCompatActivity()?.finish()
}
}
}
)
)
}
}
}
}

0 comments on commit 880be28

Please sign in to comment.