From 4fab21c88de3b7f20635773686cf4d5befeb20bf Mon Sep 17 00:00:00 2001 From: Markus Fisch Date: Sun, 31 May 2026 21:46:56 +0200 Subject: [PATCH] Support fido:/ URIs Recognize spec-style fido:/ URIs and open them with ACTION_VIEW. Note that FIDO:// URIs already worked before this just fine. --- .../binaryeye/actions/ActionRegistry.kt | 2 + .../binaryeye/actions/fido/FidoAction.kt | 23 ++++++++++++ .../binaryeye/preference/Preferences.kt | 2 +- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-ka/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-lv/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- .../binaryeye/actions/fido/FidoTest.kt | 37 +++++++++++++++++++ 30 files changed, 89 insertions(+), 27 deletions(-) create mode 100644 app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoAction.kt create mode 100644 app/src/test/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoTest.kt diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/ActionRegistry.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/ActionRegistry.kt index 0484302c..9bdd63b4 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/ActionRegistry.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/ActionRegistry.kt @@ -1,5 +1,6 @@ package de.markusfisch.android.binaryeye.actions +import de.markusfisch.android.binaryeye.actions.fido.FidoAction import de.markusfisch.android.binaryeye.actions.mail.MailAction import de.markusfisch.android.binaryeye.actions.mail.MatMsgAction import de.markusfisch.android.binaryeye.actions.otpauth.OtpauthAction @@ -17,6 +18,7 @@ object ActionRegistry { private val REGISTRY: Set = setOf( MailAction, MatMsgAction, + FidoAction, OtpauthAction, SmsAction, TelAction, diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoAction.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoAction.kt new file mode 100644 index 00000000..832534e7 --- /dev/null +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoAction.kt @@ -0,0 +1,23 @@ +package de.markusfisch.android.binaryeye.actions.fido + +import android.content.Context +import de.markusfisch.android.binaryeye.R +import de.markusfisch.android.binaryeye.actions.Action +import de.markusfisch.android.binaryeye.content.openUrl + +object FidoAction : Action() { + private val fidoUriRegex = "^fido:/[0-9]+$".toRegex( + RegexOption.IGNORE_CASE + ) + + override val iconResId: Int = R.drawable.ic_action_open + override val titleResId: Int = R.string.open_url + + override fun canExecuteOn(data: ByteArray): Boolean { + return String(data).trim().matches(fidoUriRegex) + } + + override suspend fun execute(context: Context, data: ByteArray) { + executed = context.openUrl(String(data).trim()) + } +} diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt index cb7a1ef0..1e60ea2d 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/preference/Preferences.kt @@ -924,7 +924,7 @@ class Preferences { private const val PREVIEW_SCALE = "preview_scale" private const val AUTOMATED_ACTIONS = "automated_actions" private const val DYNAMIC_COLORS = "dynamic_colors" - private const val DEFAULT_IGNORE_CODE_PATTERN = "^FIDO://.*" + private const val DEFAULT_IGNORE_CODE_PATTERN = "(?i)^fido:/.*" } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 41d68400..99e560d3 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -144,7 +144,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index f382358b..bb5bd9cf 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index a78f1f90..96acf930 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 0e342a03..5065f308 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -140,7 +140,7 @@ Přidat kód Upravit kód - např. ^FIDO://.* + např. (?i)^fido:/.* Vyžadován regulární výraz Neplatný regulární výraz Odstranit tento ignorovaný kód? diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index c5f325b8..4040360f 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4e919ae6..1f3c760b 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -136,7 +136,7 @@ Code hinzufügen Code bearbeiten - z.B. ^FIDO://.* + z.B. (?i)^fido:/.* Regex erforderlich Ungültiger Regex Diesen ignorierten Code entfernen? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a02060af..9dd45e18 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -137,7 +137,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index a9807dce..b262611e 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index be4ec4ac..17fa56dd 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -137,7 +137,7 @@ Ajouter un code Modifier le code - p. ex. ^FIDO://.* + p. ex. (?i)^fido:/.* Expression régulière requise Expression régulière invalide Supprimer ce code ignoré ? diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index b2c5a3ce..ec228038 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index d1664aea..c0518876 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -135,7 +135,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0bb53ec7..4be3f65b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -144,7 +144,7 @@ Aggiungi codice Modifica codice - es. ^FIDO://.* + es. (?i)^fido:/.* Richeisto regex Regex non valido Vuoi rimuovere questo codice ignorato? diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f6892500..7dada76b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -135,7 +135,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 29d8733d..21693d51 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 8a627b95..8ab67c61 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -135,7 +135,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index b43675e6..6d3b019d 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -38,7 +38,7 @@ Pašreizējais profils Profils: %s Svītrkoda formāti - piem. ^FIDO://.* + piem. (?i)^fido:/.* Nekavējoties atvērt saturu Rādīt metadatus Rādīt kontrolsummu diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5f8d309f..a1787752 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 00c6125b..bd498fc4 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -170,7 +170,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 98079ce9..a5fb279d 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 450b204b..56eeb496 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -140,7 +140,7 @@ Добавить код Изменить код - например ^FIDO://.* + например (?i)^fido:/.* Требуется регулярное выражение Недействительное регулярное выражение Удалить этот игнорируемый код? diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e2dcc23e..9f203fa9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -136,7 +136,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index d6860e67..ef83b091 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -140,7 +140,7 @@ Додати код Редагувати код - наприклад ^FIDO://.* + наприклад (?i)^fido:/.* Потрібен регулярний вираз Недійсний регулярний вираз Видалити цей проігнорований код? diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index ba4396e8..0b579d93 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -135,7 +135,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 06f37bd5..c4360270 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -135,7 +135,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index cb81ce72..ed471389 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -135,7 +135,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 885a78ae..09c4cf24 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -144,7 +144,7 @@ Add code Edit code - e.g. ^FIDO://.* + e.g. (?i)^fido:/.* Regex required Invalid regex Remove this ignored code? diff --git a/app/src/test/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoTest.kt b/app/src/test/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoTest.kt new file mode 100644 index 00000000..01b13385 --- /dev/null +++ b/app/src/test/kotlin/de/markusfisch/android/binaryeye/actions/fido/FidoTest.kt @@ -0,0 +1,37 @@ +package de.markusfisch.android.binaryeye.actions.fido + +import junit.framework.TestCase.assertEquals +import org.junit.Test + +class FidoTest { + @Test + fun correct() { + val urls = listOf( + "fido:/1234567890", + "FIDO:/1234567890", + ) + for (url in urls) { + assertEquals(url, resolve(url)) + } + } + + @Test + fun incorrect() { + val urls = listOf( + "", + "fido:", + "fido:/", + "fido://1234567890", + "fido:/abc", + "fido:/123abc", + "https://example.com", + ) + for (url in urls) { + assertEquals(null, resolve(url)) + } + } +} + +private fun resolve(s: String) = if ( + FidoAction.canExecuteOn(s.toByteArray()) +) s else null