mirror of
https://github.com/greenart7c3/Amber.git
synced 2026-10-05 19:08:23 +00:00
add support for get_public_key
This commit is contained in:
@@ -12,5 +12,6 @@ enum class SignerType {
|
||||
NIP04_ENCRYPT,
|
||||
NIP04_DECRYPT,
|
||||
NIP44_ENCRYPT,
|
||||
NIP44_DECRYPT
|
||||
NIP44_DECRYPT,
|
||||
GET_PUBLIC_KEY
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ object IntentUtils {
|
||||
"sign_event" -> SignerType.SIGN_EVENT
|
||||
"nip04_encrypt" -> SignerType.NIP04_ENCRYPT
|
||||
"nip04_decrypt" -> SignerType.NIP04_DECRYPT
|
||||
"get_public_key" -> SignerType.GET_PUBLIC_KEY
|
||||
else -> SignerType.SIGN_EVENT
|
||||
}
|
||||
val split = data.split(";")
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.greenart7c3.nostrsigner.service.CryptoUtils
|
||||
import com.greenart7c3.nostrsigner.service.IntentUtils
|
||||
import com.greenart7c3.nostrsigner.service.getAppCompatActivity
|
||||
import com.greenart7c3.nostrsigner.service.model.Event
|
||||
import com.greenart7c3.nostrsigner.service.toNpub
|
||||
import com.greenart7c3.nostrsigner.service.toShortenHex
|
||||
import com.greenart7c3.nostrsigner.ui.components.Drawer
|
||||
import com.greenart7c3.nostrsigner.ui.components.MainAppBar
|
||||
@@ -104,95 +105,126 @@ fun MainScreen(account: Account, accountStateViewModel: AccountStateViewModel, j
|
||||
} else {
|
||||
json.let {
|
||||
val appName = packageName ?: it.name
|
||||
if (it.type == SignerType.NIP04_DECRYPT || it.type == SignerType.NIP04_ENCRYPT) {
|
||||
EncryptDecryptData(
|
||||
appName,
|
||||
it.data,
|
||||
{
|
||||
val sig = if (it.type == SignerType.NIP04_DECRYPT) {
|
||||
CryptoUtils.decrypt(
|
||||
it.data,
|
||||
account.keyPair.privKey,
|
||||
Hex.decode(it.pubKey)
|
||||
)
|
||||
} else {
|
||||
CryptoUtils.encrypt(
|
||||
it.data,
|
||||
account.keyPair.privKey,
|
||||
Hex.decode(it.pubKey)
|
||||
)
|
||||
}
|
||||
clipboardManager.setText(AnnotatedString(sig))
|
||||
when (it.type) {
|
||||
SignerType.GET_PUBLIC_KEY -> {
|
||||
LoginWithPubKey(
|
||||
appName,
|
||||
{
|
||||
val sig = account.keyPair.pubKey.toNpub()
|
||||
|
||||
coroutineScope.launch {
|
||||
val activity = context.getAppCompatActivity()
|
||||
if (packageName != null) {
|
||||
val intent = Intent()
|
||||
intent.putExtra("signature", sig)
|
||||
activity?.setResult(RESULT_OK, intent)
|
||||
} else {
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.signature_copied_to_the_clipboard),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
activity?.finish()
|
||||
}
|
||||
return@EncryptDecryptData
|
||||
},
|
||||
{
|
||||
context.getAppCompatActivity()?.finish()
|
||||
}
|
||||
)
|
||||
} else {
|
||||
val event = IntentUtils.getIntent(it.data, account.keyPair)
|
||||
|
||||
EventData(
|
||||
it.type,
|
||||
appName,
|
||||
event,
|
||||
event.toJson(),
|
||||
{
|
||||
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 activity = context.getAppCompatActivity()
|
||||
if (packageName != null) {
|
||||
val intent = Intent()
|
||||
intent.putExtra("signature", sig)
|
||||
activity?.setResult(RESULT_OK, intent)
|
||||
} else {
|
||||
clipboardManager.setText(AnnotatedString(sig))
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.signature_copied_to_the_clipboard),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
activity?.finish()
|
||||
}
|
||||
return@EventData
|
||||
return@LoginWithPubKey
|
||||
},
|
||||
{
|
||||
context.getAppCompatActivity()?.finish()
|
||||
}
|
||||
|
||||
val id = event.id.hexToByteArray()
|
||||
val sig = CryptoUtils.sign(id, account.keyPair.privKey).toHexKey()
|
||||
|
||||
clipboardManager.setText(AnnotatedString(sig))
|
||||
|
||||
coroutineScope.launch {
|
||||
val activity = context.getAppCompatActivity()
|
||||
if (packageName != null) {
|
||||
val intent = Intent()
|
||||
val signedEvent = Event(event.id, event.pubKey, event.createdAt, event.kind, event.tags, event.content, sig)
|
||||
intent.putExtra("event", signedEvent.toJson())
|
||||
intent.putExtra("signature", sig)
|
||||
|
||||
activity?.setResult(RESULT_OK, intent)
|
||||
)
|
||||
}
|
||||
SignerType.NIP04_DECRYPT, SignerType.NIP04_ENCRYPT -> {
|
||||
EncryptDecryptData(
|
||||
appName,
|
||||
it.data,
|
||||
{
|
||||
val sig = if (it.type == SignerType.NIP04_DECRYPT) {
|
||||
CryptoUtils.decrypt(
|
||||
it.data,
|
||||
account.keyPair.privKey,
|
||||
Hex.decode(it.pubKey)
|
||||
)
|
||||
} else {
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.signature_copied_to_the_clipboard),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
CryptoUtils.encrypt(
|
||||
it.data,
|
||||
account.keyPair.privKey,
|
||||
Hex.decode(it.pubKey)
|
||||
)
|
||||
}
|
||||
activity?.finish()
|
||||
|
||||
coroutineScope.launch {
|
||||
val activity = context.getAppCompatActivity()
|
||||
if (packageName != null) {
|
||||
val intent = Intent()
|
||||
intent.putExtra("signature", sig)
|
||||
activity?.setResult(RESULT_OK, intent)
|
||||
} else {
|
||||
clipboardManager.setText(AnnotatedString(sig))
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.signature_copied_to_the_clipboard),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
activity?.finish()
|
||||
}
|
||||
return@EncryptDecryptData
|
||||
},
|
||||
{
|
||||
context.getAppCompatActivity()?.finish()
|
||||
}
|
||||
},
|
||||
{
|
||||
context.getAppCompatActivity()?.finish()
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
val event = IntentUtils.getIntent(it.data, account.keyPair)
|
||||
|
||||
EventData(
|
||||
it.type,
|
||||
appName,
|
||||
event,
|
||||
event.toJson(),
|
||||
{
|
||||
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
|
||||
}
|
||||
|
||||
val id = event.id.hexToByteArray()
|
||||
val sig = CryptoUtils.sign(id, account.keyPair.privKey).toHexKey()
|
||||
|
||||
coroutineScope.launch {
|
||||
val activity = context.getAppCompatActivity()
|
||||
if (packageName != null) {
|
||||
val intent = Intent()
|
||||
val signedEvent = Event(event.id, event.pubKey, event.createdAt, event.kind, event.tags, event.content, sig)
|
||||
intent.putExtra("event", signedEvent.toJson())
|
||||
intent.putExtra("signature", sig)
|
||||
|
||||
activity?.setResult(RESULT_OK, intent)
|
||||
} else {
|
||||
clipboardManager.setText(AnnotatedString(sig))
|
||||
Toast.makeText(
|
||||
context,
|
||||
context.getString(R.string.signature_copied_to_the_clipboard),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
activity?.finish()
|
||||
}
|
||||
},
|
||||
{
|
||||
context.getAppCompatActivity()?.finish()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -282,6 +314,43 @@ fun EncryptDecryptData(
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun LoginWithPubKey(
|
||||
appName: String,
|
||||
onAccept: () -> Unit,
|
||||
onReject: () -> Unit
|
||||
) {
|
||||
Column(
|
||||
Modifier
|
||||
.fillMaxSize()
|
||||
.padding(8.dp)
|
||||
) {
|
||||
AppTitle(appName)
|
||||
Spacer(Modifier.size(4.dp))
|
||||
Card(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
) {
|
||||
Column(
|
||||
Modifier
|
||||
.padding(6.dp)
|
||||
) {
|
||||
Text(
|
||||
"wants to read your public key",
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
AcceptRejectButtons(
|
||||
onAccept,
|
||||
onReject
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun EventData(
|
||||
type: SignerType,
|
||||
|
||||
Reference in New Issue
Block a user