From aae2ffebd71d38917fd5f0df96ca2d1fc11c3ee1 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 19 Oct 2024 14:17:17 -0400 Subject: [PATCH 1/3] Fixes the bug of unable to decrypt mute lists. --- .../notifications/EventNotificationConsumer.kt | 3 ++- .../quartz/crypto/nip04/Nip04Test.kt | 17 +++++++++++++++++ .../vitorpamplona/quartz/crypto/nip04/Nip04.kt | 13 ++++++++++--- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt index 05842ca5d..8988d1664 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/service/notifications/EventNotificationConsumer.kt @@ -154,8 +154,9 @@ class EventNotificationConsumer( acc: AccountSettings, ) { if ( - event.createdAt > TimeUtils.fifteenMinutesAgo() && // old event being re-broadcasted + event.createdAt > TimeUtils.fifteenMinutesAgo() && + // don't display if it comes from me. event.pubKey != signer.pubKey ) { // from the user Log.d(TAG, "Notifying") diff --git a/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip04/Nip04Test.kt b/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip04/Nip04Test.kt index da3f42214..1564cc46c 100644 --- a/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip04/Nip04Test.kt +++ b/quartz/src/androidTest/java/com/vitorpamplona/quartz/crypto/nip04/Nip04Test.kt @@ -93,4 +93,21 @@ class Nip04Test { assertTrue(Nip04.isNIP04("zJxfaJ32rN5Dg1ODjOlEew==?iv=EV5bUjcc4OX2Km/zPp4ndQ==")) assertTrue(Nip04.isNIP04("6f8dMstm+udOu7yipSn33orTmwQpWbtfuY95NH+eTU1kArysWJIDkYgI2D25EAGIDJsNd45jOJ2NbVOhFiL3ZP/NWsTwXokk34iyHyA/lkjzugQ1bHXoMD1fP/Ay4hB4al1NHb8HXHKZaxPrErwdRDb8qa/I6dXb/1xxyVvNQBHHvmsM5yIFaPwnCN1DZqXf2KbTA/Ekz7Hy+7R+Sy3TXLQDFpWYqykppkXc7Fs0qSuPRyxz5+anuN0dxZa9GTwTEnBrZPbthKkNRrvZMdTGJ6WumOh9aUq8OJJWy9aOgsXvs7qjN1UqcCqQqYaVnEOhCaqWNDsVtsFrVDj+SaLIBvCiomwF4C4nIgngJ5I69tx0UNI0q+ZnvOGQZ7m1PpW2NYP7Yw43HJNdeUEQAmdCPnh/PJwzLTnIxHmQU7n7SPlMdV0SFa6H8y2HHvex697GAkyE5t8c2uO24OnqIwF1tR3blIqXzTSRl0GA6QvrSj2p4UtnWjvF7xT7RiIEyTtgU/AsihTrXyXzWWZaIBJogpgw6erlZqWjCH7sZy/WoGYEiblobOAqMYxax6vRbeuGtoYksr/myX+x9rfLrYuoDRTw4woXOLmMrrj+Mf0TbAgc3SjdkqdsPU1553rlSqIEZXuFgoWmxvVQDtekgTYyS97G81TDSK9nTJT5ilku8NVq2LgtBXGwsNIw/xekcOUzJke3kpnFPutNaexR1VF3ohIuqRKYRGcd8ADJP2lfwMcaGRiplAmFoaVS1YUhQwYFNq9rMLf7YauRGV4BJg/t9srdGxf5RoKCvRo+XM/nLxxysTR9MVaEP/3lDqjwChMxs+eWfLHE5vRWV8hUEqdrWNZV29gsx5nQpzJ4PARGZVu310pQzc6JAlc2XAhhFk6RamkYJnmCSMnb/RblzIATBi2kNrCVAlaXIon188inB62rEpZGPkRIP7PUfu27S/elLQHBHeGDsxOXsBRo1gl3te+raoBHsxo6zvRnYbwdAQa5taDE63eh+fT6kFI+xYmXNAQkU8Dp0MVhEh4JQI06Ni/AKrvYpC95TXXIphZcF+/Pv/vaGkhG2X9S3uhugwWK?iv=2vWkOQQi0WynNJz/aZ4k2g==")) } + + @Test + fun isNIP04EncodeWithBug() { + assertTrue( + Nip04.isNIP04( + "QOAYBWa88ConWs2C4kSvNqAcowCtg0ZRtAl7FyLSv9VMaJH4oCiDx0h8VLBnV97HdE4lv" + + "TW7AYC1eEw8/t1dbe0qRc3XrOt7MrPAO8yqpy1/3lFB1+10kip0+KdgT8Quvv02wTP8Dqi" + + "xpr2fliAIG2ONvDn+O5V0q9aVUN9HitgL/myTyR0T42edmxWeZoMBEOKvJyO80FekSsgVL" + + "ASafA/T5z4xs8oG88pSe9wSbSsw0xNjJeh3xLRCLuEuA9KI8hQ1Ys9nEax2UlaB/IL3o77" + + "OwBL+rrdUbNHTxYifgygRhg3BaXMsXRFNJbqYeMaRaNbvHkLVAQV2jLY4P/cKHBjEcTC/f" + + "lrCc2NCYF34rOQUY5EJVnFzM8qYVw6xNupBHTS7WFx1r60cPjG19P/+yoiTZ6bPdHTU0X2" + + "t64ovF2YWUq6/iKAclMaZDhWfrKqf82e62oIff55WQw2bw8A/jtBQVCf66EtEJ2OSFxNaZ" + + "rO+A4oLkHDCnAV+6fYzwo89gPOvORcVvSvg55yGiBFUZx9EHS6kdH1SU80/Mbxe2oI=" + + "?iv=gxz9pUFJFZHuV+D+hgKEOw==-null", + ), + ) + } } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip04/Nip04.kt b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip04/Nip04.kt index 7ee60712b..6c6b8e8d3 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip04/Nip04.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/crypto/nip04/Nip04.kt @@ -153,14 +153,21 @@ class Nip04( } fun isNIP04(encoded: String): Boolean { - val l = encoded.length + // cleaning up some bug from some client. + val cleanedUp = encoded.removeSuffix("-null") + + val l = cleanedUp.length if (l < 28) return false - return encoded[l - 28] == '?' && encoded[l - 27] == 'i' && encoded[l - 26] == 'v' && encoded[l - 25] == '=' + return cleanedUp[l - 28] == '?' && + cleanedUp[l - 27] == 'i' && + cleanedUp[l - 26] == 'v' && + cleanedUp[l - 25] == '=' } fun decodeFromNIP04(payload: String): EncryptedInfo? = try { - val parts = payload.split("?iv=") + // cleaning up some bug from some client. + val parts = payload.removeSuffix("-null").split("?iv=") EncryptedInfo( ciphertext = Base64.getDecoder().decode(parts[0]), nonce = Base64.getDecoder().decode(parts[1]), From f0b14edef625ec8b650b03e75c9cfde1c4d62787 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 19 Oct 2024 14:17:42 -0400 Subject: [PATCH 2/3] v0.92.7 --- amethyst/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/amethyst/build.gradle b/amethyst/build.gradle index f3d08d403..6e90195e3 100644 --- a/amethyst/build.gradle +++ b/amethyst/build.gradle @@ -16,8 +16,8 @@ android { applicationId "com.vitorpamplona.amethyst" minSdk libs.versions.android.minSdk.get().toInteger() targetSdk libs.versions.android.targetSdk.get().toInteger() - versionCode 411 - versionName "0.92.6" + versionCode 412 + versionName "0.92.7" buildConfigField "String", "RELEASE_NOTES_ID", "\"98f2acaf9b3eb70d87607942e576f9a086ac28adf37869da9a29f4815cecac86\"" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From 4c0d92f89f7a3ce20ab31b7857eefe823cc777fd Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sat, 19 Oct 2024 18:19:59 +0000 Subject: [PATCH 3/3] New Crowdin translations by GitHub Action --- .../src/main/res/values-es-rES/strings.xml | 47 +++++++++++++++++++ .../src/main/res/values-es-rMX/strings.xml | 47 +++++++++++++++++++ .../src/main/res/values-es-rUS/strings.xml | 47 +++++++++++++++++++ 3 files changed, 141 insertions(+) diff --git a/amethyst/src/main/res/values-es-rES/strings.xml b/amethyst/src/main/res/values-es-rES/strings.xml index c23b7de94..6d415cad9 100644 --- a/amethyst/src/main/res/values-es-rES/strings.xml +++ b/amethyst/src/main/res/values-es-rES/strings.xml @@ -121,6 +121,8 @@ Guardar en la galería Imagen guardada en la galería Error al guardar la imagen + Video guardado en la galería de videos del teléfono + Error al guardar el video Cargar imagen Cargando… El usuario no tiene una configuración de dirección Lightning para recibir sats @@ -358,8 +360,11 @@ Eliminar servidor multimedia Tus relés (NIP-95) Los archivos están alojados en tus relés. Nuevo NIP: comprueba si son compatibles. + Opciones de privacidad Configuración de Tor/Orbot Conéctate a través de tu configuración de Orbot + Ajustar + Configuración de Tor ¿Desconectarse de tu Orbot/Tor? Los datos se transferirán de inmediato en la red normal @@ -368,6 +373,7 @@ Todos los seguidos Global Lista de silenciados + El puerto predeterminado es 9050 ## Conéctate a través de Tor con Orbot \n\n1. Instala [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android). \n2. Inicia Orbot. @@ -377,6 +383,45 @@ \n6. Presiona y activa el botón para usar Orbot como proxy. Puerto Socks de Orbot + Motor de Tor activo + Usar la versión interna u Orbot + Preconfiguración de Tor y privacidad + Modificar rápidamente todos los ajustes a continuación + Url/Relés tipo onion + Usar Tor para cualquier URL .onion + Relés de mensajes directos + Forzar Tor para enviar y recibir mensajes directos + Relés no confiables + Forzar Tor en la bandeja de salida/entrada + Relés de confianza + Forzar Tor en todos los relés de tus listas + Imágenes de perfil + Forzar Tor al cargar imágenes de perfil + Vistas previas de URL + Forzar Tor al cargar vistas previas de URL + Imágenes + Forzar Tor al cargar imágenes + Videos + Forzar Tor al cargar videos + Operaciones monetarias + Forzar Tor en transferencias de zaps, Lightning y Cashu + Verificación de dirección de Nostr + Forzar Tor al verificar direcciones NIP-05 + Subidas multimedia + Forzar Tor al subir contenido + Interno + Orbot + Desactivado + Básico + Predeterminado + Todo excepto contenido multimedia + Privacidad total + Personalizado + Usar Tor cuando lo requiera el servidor + Ocultar tu IP de relés aleatorios + Ocultar tu IP de todo, excepto imágenes y videos + Oculta tu IP en todas las conexiones + Crea el tuyo Número de puerto inválido Usar Orbot Desconectar Tor/Orbot @@ -462,6 +507,7 @@ Esta comunidad no tiene descripción. Habla con el propietario para agregar una. Contenido delicado Agrega una advertencia de contenido sensible antes de mostrarlo + Preferencias de la app Configuración Siempre Solo Wi-Fi @@ -474,6 +520,7 @@ Claro Oscuro Preferencias de la aplicación + Wallet Connect Idioma Tema Vista previa de imagen diff --git a/amethyst/src/main/res/values-es-rMX/strings.xml b/amethyst/src/main/res/values-es-rMX/strings.xml index 71fdff217..a3a2d59cc 100644 --- a/amethyst/src/main/res/values-es-rMX/strings.xml +++ b/amethyst/src/main/res/values-es-rMX/strings.xml @@ -121,6 +121,8 @@ Guardar en la galería Imagen guardada en la galería Error al guardar la imagen + Video guardado en la galería de videos del teléfono + Error al guardar el video Subir imagen Subiendo… El usuario no tiene configurada una dirección de Lightning para recibir sats @@ -358,8 +360,11 @@ Eliminar servidor multimedia Tus relés (NIP-95) Los archivos están alojados en tus relés. Nuevo NIP: comprueba si son compatibles. + Opciones de privacidad Configuración de Tor/Orbot Conéctate a través de tu configuración de Orbot + Ajustar + Configuración de Tor ¿Desconectarse de tu Orbot/Tor? Los datos se transferirán de inmediato en la red normal @@ -368,6 +373,7 @@ Todos los seguidos Global Lista de silenciados + El puerto predeterminado es 9050 ## Conéctate a través de Tor con Orbot \n\n1. Instala [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android). \n2. Inicia Orbot. @@ -377,6 +383,45 @@ \n6. Presiona y activa el botón para usar Orbot como proxy. Puerto Socks de Orbot + Motor de Tor activo + Usar la versión interna u Orbot + Preconfiguración de Tor y privacidad + Modificar rápidamente todos los ajustes a continuación + Url/Relés tipo onion + Usar Tor para cualquier URL .onion + Relés de mensajes directos + Forzar Tor para enviar y recibir mensajes directos + Relés no confiables + Forzar Tor en la bandeja de salida/entrada + Relés de confianza + Forzar Tor en todos los relés de tus listas + Imágenes de perfil + Forzar Tor al cargar imágenes de perfil + Vistas previas de URL + Forzar Tor al cargar vistas previas de URL + Imágenes + Forzar Tor al cargar imágenes + Videos + Forzar Tor al cargar videos + Operaciones monetarias + Forzar Tor en transferencias de zaps, Lightning y Cashu + Verificación de dirección de Nostr + Forzar Tor al verificar direcciones NIP-05 + Subidas multimedia + Forzar Tor al subir contenido + Interno + Orbot + Desactivado + Básico + Predeterminado + Todo excepto contenido multimedia + Privacidad total + Personalizado + Usar Tor cuando lo requiera el servidor + Ocultar tu IP de relés aleatorios + Ocultar tu IP de todo, excepto imágenes y videos + Ocultar su IP en todas las conexiones + Crea el tuyo Número de puerto inválido Usar Orbot Desconectar Tor/Orbot @@ -462,6 +507,7 @@ Esta comunidad no tiene descripción. Habla con el propietario para agregar una. Contenido delicado Agrega una advertencia de contenido sensible antes de mostrarlo + Preferencias de la app Configuración Siempre Solo Wi-Fi @@ -474,6 +520,7 @@ Claro Oscuro Preferencias de la aplicación + Wallet Connect Idioma Tema Vista previa de imagen diff --git a/amethyst/src/main/res/values-es-rUS/strings.xml b/amethyst/src/main/res/values-es-rUS/strings.xml index c71adde4f..32ba7edbf 100644 --- a/amethyst/src/main/res/values-es-rUS/strings.xml +++ b/amethyst/src/main/res/values-es-rUS/strings.xml @@ -121,6 +121,8 @@ Guardar en la galería Imagen guardada en la galería Error al guardar la imagen + Video guardado en la galería de videos del teléfono + Error al guardar el video Subir imagen Subiendo… El usuario no tiene configurada una dirección de Lightning para recibir sats @@ -358,8 +360,11 @@ Eliminar servidor multimedia Tus relés (NIP-95) Los archivos están alojados en tus relés. Nuevo NIP: comprueba si son compatibles. + Opciones de privacidad Configuración de Tor/Orbot Conéctate a través de tu configuración de Orbot + Ajustar + Configuración de Tor ¿Desconectarse de tu Orbot/Tor? Los datos se transferirán de inmediato en la red normal @@ -368,6 +373,7 @@ Todos los seguidos Global Lista de silenciados + El puerto predeterminado es 9050 ## Conéctate a través de Tor con Orbot \n\n1. Instala [Orbot](https://play.google.com/store/apps/details?id=org.torproject.android). \n2. Inicia Orbot. @@ -377,6 +383,45 @@ \n6. Presiona y activa el botón para usar Orbot como proxy. Puerto Socks de Orbot + Motor de Tor activo + Usar la versión interna u Orbot + Preconfiguración de Tor y privacidad + Modificar rápidamente todos los ajustes a continuación + Url/Relés tipo onion + Usar Tor para cualquier URL .onion + Relés de mensajes directos + Forzar Tor para enviar y recibir mensajes directos + Relés no confiables + Forzar Tor en la bandeja de salida/entrada + Relés de confianza + Forzar Tor en todos los relés de tus listas + Imágenes de perfil + Forzar Tor al cargar imágenes de perfil + Vistas previas de URL + Forzar Tor al cargar vistas previas de URL + Imágenes + Forzar Tor al cargar imágenes + Videos + Forzar Tor al cargar videos + Operaciones monetarias + Forzar Tor en transferencias de zaps, Lightning y Cashu + Verificación de dirección de Nostr + Forzar Tor al verificar direcciones NIP-05 + Subidas multimedia + Forzar Tor al subir contenido + Interno + Orbot + Desactivado + Básico + Predeterminado + Todo excepto contenido multimedia + Privacidad total + Personalizado + Usar Tor cuando lo requiera el servidor + Ocultar tu IP de relés aleatorios + Ocultar tu IP de todo, excepto imágenes y videos + Oculta tu IP en todas las conexiones + Crea el tuyo Número de puerto inválido Usar Orbot Desconectar Tor/Orbot @@ -462,6 +507,7 @@ Esta comunidad no tiene descripción. Habla con el propietario para agregar una. Contenido delicado Agrega una advertencia de contenido sensible antes de mostrarlo + Preferencias de la app Configuración Siempre Solo Wi-Fi @@ -474,6 +520,7 @@ Claro Oscuro Preferencias de la aplicación + Wallet Connect Idioma Tema Vista previa de imagen