Merge pull request #744 from greenart7c3/reject_permission_amber

add support for always rejected permissions from external signer
This commit is contained in:
Vitor Pamplona 2024-01-17 07:23:13 -05:00 committed by GitHub
commit db12ff0532
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -252,7 +252,10 @@ class ExternalSignerLauncher(
arrayOf(event.toJson(), event.pubKey()), arrayOf(event.toJson(), event.pubKey()),
columnName, columnName,
) )
if (result == null) { result.fold(
onFailure = { },
onSuccess = {
if (it == null) {
openSignerApp( openSignerApp(
event.toJson(), event.toJson(),
SignerType.SIGN_EVENT, SignerType.SIGN_EVENT,
@ -261,24 +264,26 @@ class ExternalSignerLauncher(
onReady, onReady,
) )
} else { } else {
onReady(result) onReady(it)
} }
},
)
} }
fun getDataFromResolver( private fun getDataFromResolver(
signerType: SignerType, signerType: SignerType,
data: Array<out String>, data: Array<out String>,
columnName: String = "signature", columnName: String = "signature",
): String? { ): kotlin.Result<String?> {
return getDataFromResolver(signerType, data, columnName, contentResolver) return getDataFromResolver(signerType, data, columnName, contentResolver)
} }
fun getDataFromResolver( private fun getDataFromResolver(
signerType: SignerType, signerType: SignerType,
data: Array<out String>, data: Array<out String>,
columnName: String = "signature", columnName: String = "signature",
contentResolver: (() -> ContentResolver)? = null, contentResolver: (() -> ContentResolver)? = null,
): String? { ): kotlin.Result<String?> {
val localData = val localData =
if (signerType !== SignerType.GET_PUBLIC_KEY) { if (signerType !== SignerType.GET_PUBLIC_KEY) {
data.toList().plus(npub).toTypedArray() data.toList().plus(npub).toTypedArray()
@ -292,29 +297,33 @@ class ExternalSignerLauncher(
?.query( ?.query(
Uri.parse("content://$signerPackageName.$signerType"), Uri.parse("content://$signerPackageName.$signerType"),
localData, localData,
null, "1",
null, null,
null, null,
) )
.use { .use {
if (it == null) { if (it == null) {
return null return kotlin.Result.success(null)
} }
if (it.moveToFirst()) { if (it.moveToFirst()) {
if (it.getColumnIndex("rejected") > -1) {
Log.d("getDataFromResolver", "Permission denied")
return kotlin.Result.failure(Exception("Permission denied"))
}
val index = it.getColumnIndex(columnName) val index = it.getColumnIndex(columnName)
if (index < 0) { if (index < 0) {
Log.d("getDataFromResolver", "column '$columnName' not found") Log.d("getDataFromResolver", "column '$columnName' not found")
return null return kotlin.Result.success(null)
} }
return it.getString(index) return kotlin.Result.success(it.getString(index))
} }
} }
} catch (e: Exception) { } catch (e: Exception) {
Log.e("ExternalSignerLauncher", "Failed to query the Signer app in the background") Log.e("ExternalSignerLauncher", "Failed to query the Signer app in the background")
return null return kotlin.Result.success(null)
} }
return null return kotlin.Result.success(null)
} }
fun decrypt( fun decrypt(
@ -325,7 +334,10 @@ class ExternalSignerLauncher(
) { ) {
val id = (encryptedContent + pubKey + onReady.toString()).hashCode().toString() val id = (encryptedContent + pubKey + onReady.toString()).hashCode().toString()
val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey)) val result = getDataFromResolver(signerType, arrayOf(encryptedContent, pubKey))
if (result == null) { result.fold(
onFailure = { },
onSuccess = {
if (it == null) {
openSignerApp( openSignerApp(
encryptedContent, encryptedContent,
signerType, signerType,
@ -334,8 +346,10 @@ class ExternalSignerLauncher(
onReady, onReady,
) )
} else { } else {
onReady(result) onReady(it)
} }
},
)
} }
fun encrypt( fun encrypt(
@ -346,7 +360,10 @@ class ExternalSignerLauncher(
) { ) {
val id = (decryptedContent + pubKey + onReady.toString()).hashCode().toString() val id = (decryptedContent + pubKey + onReady.toString()).hashCode().toString()
val result = getDataFromResolver(signerType, arrayOf(decryptedContent, pubKey)) val result = getDataFromResolver(signerType, arrayOf(decryptedContent, pubKey))
if (result == null) { result.fold(
onFailure = { },
onSuccess = {
if (it == null) {
openSignerApp( openSignerApp(
decryptedContent, decryptedContent,
signerType, signerType,
@ -355,8 +372,10 @@ class ExternalSignerLauncher(
onReady, onReady,
) )
} else { } else {
onReady(result) onReady(it)
} }
},
)
} }
fun decryptZapEvent( fun decryptZapEvent(
@ -365,7 +384,10 @@ class ExternalSignerLauncher(
) { ) {
val result = val result =
getDataFromResolver(SignerType.DECRYPT_ZAP_EVENT, arrayOf(event.toJson(), event.pubKey)) getDataFromResolver(SignerType.DECRYPT_ZAP_EVENT, arrayOf(event.toJson(), event.pubKey))
if (result == null) { result.fold(
onFailure = { },
onSuccess = {
if (it == null) {
openSignerApp( openSignerApp(
event.toJson(), event.toJson(),
SignerType.DECRYPT_ZAP_EVENT, SignerType.DECRYPT_ZAP_EVENT,
@ -374,7 +396,9 @@ class ExternalSignerLauncher(
onReady, onReady,
) )
} else { } else {
onReady(result) onReady(it)
} }
},
)
} }
} }