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"
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/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
Sí
@@ -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
Sí
@@ -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
Sí
@@ -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/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]),