diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/Nip19.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/Nip19.kt index 73b0a56bc..e2602a24d 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/Nip19.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/Nip19.kt @@ -1,6 +1,7 @@ package com.vitorpamplona.amethyst.service import com.vitorpamplona.amethyst.model.toHexKey +import com.vitorpamplona.amethyst.service.nip19.TlvTypes import nostr.postr.bechToBytes import java.nio.ByteBuffer import java.nio.ByteOrder @@ -11,7 +12,7 @@ class Nip19 { USER, NOTE, RELAY, ADDRESS } - data class Return(val type: Type, val hex: String, val relay: String?) + data class Return(val type: Type, val hex: String, val relay: String? = null) fun uriToRoute(uri: String?): Return? { try { @@ -39,21 +40,21 @@ class Nip19 { } private fun npub(bytes: ByteArray): Return { - return Return(Type.USER, bytes.toHexKey(), null) + return Return(Type.USER, bytes.toHexKey()) } private fun note(bytes: ByteArray): Return { - return Return(Type.NOTE, bytes.toHexKey(), null) + return Return(Type.NOTE, bytes.toHexKey()) } private fun nprofile(bytes: ByteArray): Return? { val tlv = parseTLV(bytes) - val hex = tlv.get(NIP19TLVTypes.SPECIAL.id) + val hex = tlv.get(TlvTypes.SPECIAL.id) ?.get(0) ?.toHexKey() ?: return null - val relay = tlv.get(NIP19TLVTypes.RELAY.id) + val relay = tlv.get(TlvTypes.RELAY.id) ?.get(0) ?.toString(Charsets.UTF_8) @@ -63,11 +64,11 @@ class Nip19 { private fun nevent(bytes: ByteArray): Return? { val tlv = parseTLV(bytes) - val hex = tlv.get(NIP19TLVTypes.SPECIAL.id) + val hex = tlv.get(TlvTypes.SPECIAL.id) ?.get(0) ?.toHexKey() ?: return null - val relay = tlv.get(NIP19TLVTypes.RELAY.id) + val relay = tlv.get(TlvTypes.RELAY.id) ?.get(0) ?.toString(Charsets.UTF_8) @@ -76,29 +77,29 @@ class Nip19 { private fun nrelay(bytes: ByteArray): Return? { val relayUrl = parseTLV(bytes) - .get(NIP19TLVTypes.SPECIAL.id) + .get(TlvTypes.SPECIAL.id) ?.get(0) ?.toString(Charsets.UTF_8) ?: return null - return Return(Type.RELAY, relayUrl, null) + return Return(Type.RELAY, relayUrl) } private fun naddr(bytes: ByteArray): Return? { val tlv = parseTLV(bytes) - val d = tlv.get(NIP19TLVTypes.SPECIAL.id) + val d = tlv.get(TlvTypes.SPECIAL.id) ?.get(0) ?.toString(Charsets.UTF_8) ?: return null - val relay = tlv.get(NIP19TLVTypes.RELAY.id) + val relay = tlv.get(TlvTypes.RELAY.id) ?.get(0) ?.toString(Charsets.UTF_8) - val author = tlv.get(NIP19TLVTypes.AUTHOR.id) + val author = tlv.get(TlvTypes.AUTHOR.id) ?.get(0) ?.toHexKey() - val kind = tlv.get(NIP19TLVTypes.KIND.id) + val kind = tlv.get(TlvTypes.KIND.id) ?.get(0) ?.let { toInt32(it) } @@ -106,14 +107,6 @@ class Nip19 { } } -// Classes should start with an uppercase letter in kotlin -enum class NIP19TLVTypes(val id: Byte) { - SPECIAL(0), - RELAY(1), - AUTHOR(2), - KIND(3); -} - fun toInt32(bytes: ByteArray): Int { require(bytes.size == 4) { "length must be 4, got: ${bytes.size}" } return ByteBuffer.wrap(bytes, 0, 4).order(ByteOrder.BIG_ENDIAN).int diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/ATag.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/ATag.kt index f54a4c886..948d3b090 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/ATag.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/ATag.kt @@ -3,7 +3,7 @@ package com.vitorpamplona.amethyst.service.model import android.util.Log import com.vitorpamplona.amethyst.model.toByteArray import com.vitorpamplona.amethyst.model.toHexKey -import com.vitorpamplona.amethyst.service.NIP19TLVTypes +import com.vitorpamplona.amethyst.service.nip19.TlvTypes import com.vitorpamplona.amethyst.service.parseTLV import com.vitorpamplona.amethyst.service.toInt32 import fr.acinq.secp256k1.Hex @@ -21,15 +21,15 @@ data class ATag(val kind: Int, val pubKeyHex: String, val dTag: String, val rela val relay = relay?.toByteArray(Charsets.UTF_8) var fullArray = - byteArrayOf(NIP19TLVTypes.SPECIAL.id, dTag.size.toByte()) + dTag + byteArrayOf(TlvTypes.SPECIAL.id, dTag.size.toByte()) + dTag if (relay != null) { - fullArray = fullArray + byteArrayOf(NIP19TLVTypes.RELAY.id, relay.size.toByte()) + relay + fullArray = fullArray + byteArrayOf(TlvTypes.RELAY.id, relay.size.toByte()) + relay } fullArray = fullArray + - byteArrayOf(NIP19TLVTypes.AUTHOR.id, author.size.toByte()) + author + - byteArrayOf(NIP19TLVTypes.KIND.id, kind.size.toByte()) + kind + byteArrayOf(TlvTypes.AUTHOR.id, author.size.toByte()) + author + + byteArrayOf(TlvTypes.KIND.id, kind.size.toByte()) + kind return Bech32.encodeBytes(hrp = "naddr", fullArray, Bech32.Encoding.Bech32) } @@ -64,10 +64,10 @@ data class ATag(val kind: Int, val pubKeyHex: String, val dTag: String, val rela if (key.startsWith("naddr")) { val tlv = parseTLV(key.bechToBytes()) - val d = tlv.get(NIP19TLVTypes.SPECIAL.id)?.get(0)?.toString(Charsets.UTF_8) ?: "" - val relay = tlv.get(NIP19TLVTypes.RELAY.id)?.get(0)?.toString(Charsets.UTF_8) - val author = tlv.get(NIP19TLVTypes.AUTHOR.id)?.get(0)?.toHexKey() - val kind = tlv.get(NIP19TLVTypes.KIND.id)?.get(0)?.let { toInt32(it) } + val d = tlv.get(TlvTypes.SPECIAL.id)?.get(0)?.toString(Charsets.UTF_8) ?: "" + val relay = tlv.get(TlvTypes.RELAY.id)?.get(0)?.toString(Charsets.UTF_8) + val author = tlv.get(TlvTypes.AUTHOR.id)?.get(0)?.toHexKey() + val kind = tlv.get(TlvTypes.KIND.id)?.get(0)?.let { toInt32(it) } if (kind != null && author != null) { return ATag(kind, author, d, relay) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/nip19/TlvTypes.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/nip19/TlvTypes.kt new file mode 100644 index 000000000..7199cc6e3 --- /dev/null +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/nip19/TlvTypes.kt @@ -0,0 +1,8 @@ +package com.vitorpamplona.amethyst.service.nip19 + +enum class TlvTypes(val id: Byte) { + SPECIAL(0), + RELAY(1), + AUTHOR(2), + KIND(3); +}