fix sending zaps using amber, send some default permissions on login, save the signer package name
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user