fix sending zaps using amber, send some default permissions on login, save the signer package name

This commit is contained in:
greenart7c3
2023-11-20 14:47:46 -03:00
committed by greenart7c3
parent c8365439ee
commit 6db031b208
6 changed files with 102 additions and 47 deletions
@@ -19,9 +19,18 @@ enum class SignerType {
DECRYPT_ZAP_EVENT
}
class Permission(
val type: String,
val kind: Int? = null
) {
fun toJson(): String {
return "{\"type\":\"${type}\",\"kind\":${kind}}"
}
}
class ExternalSignerLauncher(
private val npub: String,
private val signerPackageName: String = "com.greenart7c3.nostrsigner"
val signerPackageName: String = "com.greenart7c3.nostrsigner"
) {
private val contentCache = LruCache<String, (String) -> Unit>(20)
@@ -49,9 +58,11 @@ class ExternalSignerLauncher(
fun newResult(data: Intent) {
val signature = data.getStringExtra("signature") ?: ""
val packageName = data.getStringExtra("package") ?: ""
val id = data.getStringExtra("id") ?: ""
if (id.isNotBlank()) {
contentCache.get(id)?.invoke(signature)
val result = if (packageName.isNotBlank()) "$signature-$packageName" else signature
contentCache.get(id)?.invoke(result)
}
}
@@ -70,6 +81,40 @@ class ExternalSignerLauncher(
}
}
private fun defaultPermissions(): String {
val permissions = listOf(
Permission(
"sign_event",
22242
),
Permission(
"nip04_encrypt"
),
Permission(
"nip04_decrypt"
),
Permission(
"nip44_encrypt"
),
Permission(
"nip44_decrypt"
),
Permission(
"decrypt_zap_event"
),
)
val jsonArray = StringBuilder("[")
permissions.forEachIndexed { index, permission ->
jsonArray.append(permission.toJson())
if (index < permissions.size - 1) {
jsonArray.append(",")
}
}
jsonArray.append("]")
return jsonArray.toString()
}
private fun openSignerApp(
data: String,
type: SignerType,
@@ -93,8 +138,12 @@ class ExternalSignerLauncher(
intent.putExtra("id", id)
if (type !== SignerType.GET_PUBLIC_KEY) {
intent.putExtra("current_user", npub)
} else {
intent.putExtra("permissions", defaultPermissions())
}
if (signerPackageName.isNotBlank()) {
intent.`package` = signerPackageName
}
intent.`package` = signerPackageName
contentCache.put(id, onReady)
@@ -34,17 +34,33 @@ class NostrSignerExternal(
)
launcher.openSigner(event) { signature ->
(EventFactory.create(
event.id,
event.pubKey,
event.createdAt,
event.kind,
event.tags,
event.content,
signature
) as? T?)?.let {
onReady(it)
if (signature.startsWith("{")) {
val localEvent = Event.fromJson(signature)
(EventFactory.create(
localEvent.id,
localEvent.pubKey,
localEvent.createdAt,
localEvent.kind,
localEvent.tags,
localEvent.content,
localEvent.sig
) as? T?)?.let {
onReady(it)
}
} else {
(EventFactory.create(
event.id,
event.pubKey,
event.createdAt,
event.kind,
event.tags,
event.content,
signature
) as? T?)?.let {
onReady(it)
}
}
}
}