mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-26 21:46:30 +02:00
Improves Bech32 parser to consider only the 58 chars of nsec1, npub1 and note1.
This commit is contained in:
@@ -43,13 +43,13 @@ import java.util.regex.Pattern
|
|||||||
object Nip19Parser {
|
object Nip19Parser {
|
||||||
private val nip19PlusNip46regex: Pattern =
|
private val nip19PlusNip46regex: Pattern =
|
||||||
Pattern.compile(
|
Pattern.compile(
|
||||||
"(nostr:)?@?(nsec1|npub1|nevent1|naddr1|note1|nprofile1|nrelay1|nembed1|ncryptsec1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)([\\S]*)",
|
"(nostr:)?@?((nsec1|npub1|note1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]{58})|(nevent1|naddr1|nprofile1|nrelay1|nembed1|ncryptsec1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+))([\\S]*)",
|
||||||
Pattern.CASE_INSENSITIVE,
|
Pattern.CASE_INSENSITIVE,
|
||||||
)
|
)
|
||||||
|
|
||||||
val nip19regex: Pattern =
|
val nip19regex: Pattern =
|
||||||
Pattern.compile(
|
Pattern.compile(
|
||||||
"(nostr:)?@?(nsec1|npub1|nevent1|naddr1|note1|nprofile1|nrelay1|nembed1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+)([\\S]*)",
|
"(nostr:)?@?((nsec1|npub1|note1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]{58})|(nevent1|naddr1|nprofile1|nrelay1|nembed1)([qpzry9x8gf2tvdw0s3jn54khce6mua7l]+))([\\S]*)",
|
||||||
Pattern.CASE_INSENSITIVE,
|
Pattern.CASE_INSENSITIVE,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -75,8 +75,8 @@ object Nip19Parser {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val type = matcher.group(2) // npub1
|
val type = matcher.group(3) ?: matcher.group(5) // npub1
|
||||||
val key = matcher.group(3) // bech32
|
val key = matcher.group(4) ?: matcher.group(6) // bech32
|
||||||
|
|
||||||
return type!! + key
|
return type!! + key
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
@@ -95,9 +95,9 @@ object Nip19Parser {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val type = matcher.group(2) // npub1
|
val type = matcher.group(3) ?: matcher.group(5) // npub1
|
||||||
val key = matcher.group(3) // bech32
|
val key = matcher.group(4) ?: matcher.group(6) // bech32
|
||||||
val additionalChars = matcher.group(4) // additional chars
|
val additionalChars = matcher.group(7) // additional chars
|
||||||
|
|
||||||
if (type == null) return null
|
if (type == null) return null
|
||||||
|
|
||||||
@@ -136,11 +136,27 @@ object Nip19Parser {
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseAll(
|
fun parseAll(content: String): List<Entity> {
|
||||||
content: String,
|
val matcher = nip19regex.matcher(content)
|
||||||
regex: Pattern,
|
val returningList = mutableListOf<Entity>()
|
||||||
): List<Entity> {
|
while (matcher.find()) {
|
||||||
val matcher2 = regex.matcher(content)
|
val type = matcher.group(3) ?: matcher.group(5) // npub1
|
||||||
|
val key = matcher.group(4) ?: matcher.group(6) // bech32
|
||||||
|
val additionalChars = matcher.group(7) // additional chars
|
||||||
|
|
||||||
|
if (type != null) {
|
||||||
|
val parsed = parseComponents(type, key, additionalChars)?.entity
|
||||||
|
|
||||||
|
if (parsed != null) {
|
||||||
|
returningList.add(parsed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return returningList
|
||||||
|
}
|
||||||
|
|
||||||
|
fun parseAllEvents(content: String): List<Entity> {
|
||||||
|
val matcher2 = nip19regexEvents.matcher(content)
|
||||||
val returningList = mutableListOf<Entity>()
|
val returningList = mutableListOf<Entity>()
|
||||||
while (matcher2.find()) {
|
while (matcher2.find()) {
|
||||||
val type = matcher2.group(2) // npub1
|
val type = matcher2.group(2) // npub1
|
||||||
@@ -157,10 +173,6 @@ object Nip19Parser {
|
|||||||
}
|
}
|
||||||
return returningList
|
return returningList
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseAll(content: String): List<Entity> = parseAll(content, nip19regex)
|
|
||||||
|
|
||||||
fun parseAllEvents(content: String): List<Entity> = parseAll(content, nip19regexEvents)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun decodePublicKey(key: String): ByteArray =
|
fun decodePublicKey(key: String): ByteArray =
|
||||||
|
Reference in New Issue
Block a user