Makes NIP05 work in domain names only (No need for the _@ in the "_@domain" address)

This commit is contained in:
Vitor Pamplona
2023-06-29 15:08:46 -04:00
parent 98bca48359
commit 33f915879b
2 changed files with 29 additions and 10 deletions

View File

@@ -19,6 +19,9 @@ class Nip05Verifier() {
if (parts.size == 2) { if (parts.size == 2) {
return "https://${parts[1]}/.well-known/nostr.json?name=${parts[0]}" return "https://${parts[1]}/.well-known/nostr.json?name=${parts[0]}"
} }
if (parts.size == 1) {
return "https://${parts[0]}/.well-known/nostr.json?name=_"
}
return null return null
} }
@@ -92,7 +95,12 @@ class Nip05Verifier() {
null null
} }
val user = nip05.split("@")[0].lowercase() val parts = nip05.split("@")
val user = if (parts.size == 2) {
parts[0].lowercase()
} else {
"_"
}
val hexKey = nip05url?.get("names")?.get(user)?.asText() val hexKey = nip05url?.get("names")?.get(user)?.asText()

View File

@@ -117,10 +117,7 @@ fun ObserveDisplayNip05Status(baseUser: User, columnModifier: Modifier = Modifie
Crossfade(targetState = nip05, modifier = columnModifier) { Crossfade(targetState = nip05, modifier = columnModifier) {
if (it != null) { if (it != null) {
val isValid = it.split("@").size == 2 DisplayNIP05Line(it, baseUser, columnModifier)
if (isValid) {
DisplayNIP05Line(it, baseUser, columnModifier)
}
} }
} }
} }
@@ -144,7 +141,12 @@ private fun DisplayNIP05(
) { ) {
val uri = LocalUriHandler.current val uri = LocalUriHandler.current
val (user, domain) = remember(nip05) { val (user, domain) = remember(nip05) {
nip05.split("@") val parts = nip05.split("@")
if (parts.size == 1) {
listOf("_", parts[0])
} else {
listOf(parts[0], parts[1])
}
} }
if (user != "_") { if (user != "_") {
@@ -204,7 +206,7 @@ fun DisplayNip05ProfileStatus(user: User) {
val uri = LocalUriHandler.current val uri = LocalUriHandler.current
user.nip05()?.let { nip05 -> user.nip05()?.let { nip05 ->
if (nip05.split("@").size == 2) { if (nip05.split("@").size <= 2) {
val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex) val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex)
Row(verticalAlignment = Alignment.CenterVertically) { Row(verticalAlignment = Alignment.CenterVertically) {
if (nip05Verified == null) { if (nip05Verified == null) {
@@ -232,9 +234,18 @@ fun DisplayNip05ProfileStatus(user: User) {
var domainPadStart = 5.dp var domainPadStart = 5.dp
if (nip05.split("@")[0] != "_") { val (user, domain) = remember(nip05) {
val parts = nip05.split("@")
if (parts.size == 1) {
listOf("_", parts[0])
} else {
listOf(parts[0], parts[1])
}
}
if (user != "_") {
Text( Text(
text = AnnotatedString(nip05.split("@")[0] + "@"), text = remember { AnnotatedString(user + "@") },
modifier = Modifier.padding(top = 1.dp, bottom = 1.dp, start = 5.dp), modifier = Modifier.padding(top = 1.dp, bottom = 1.dp, start = 5.dp),
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
@@ -243,7 +254,7 @@ fun DisplayNip05ProfileStatus(user: User) {
} }
ClickableText( ClickableText(
text = AnnotatedString(nip05.split("@")[1]), text = AnnotatedString(domain),
onClick = { nip05.let { runCatching { uri.openUri("https://${it.split("@")[1]}") } } }, onClick = { nip05.let { runCatching { uri.openUri("https://${it.split("@")[1]}") } } },
style = LocalTextStyle.current.copy(color = MaterialTheme.colors.primary), style = LocalTextStyle.current.copy(color = MaterialTheme.colors.primary),
modifier = Modifier.padding(top = 1.dp, bottom = 1.dp, start = domainPadStart), modifier = Modifier.padding(top = 1.dp, bottom = 1.dp, start = domainPadStart),