Optimizes NIP-05 procedures

This commit is contained in:
Vitor Pamplona
2023-05-22 15:07:47 -04:00
parent 8223476cb3
commit 93282b71ae
@@ -39,33 +39,48 @@ import java.util.Date
@Composable @Composable
fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State<Boolean?> { fun nip05VerificationAsAState(user: UserMetadata, pubkeyHex: String): State<Boolean?> {
var nip05Verified = remember { mutableStateOf<Boolean?>(null) } val nip05Verified = remember(user) {
// starts with null if must verify or already filled in if verified in the last hour
val default = if ((user.nip05LastVerificationTime ?: 0) > (Date().time / 1000 - 60 * 60)) { // 1hour
user.nip05Verified
} else {
null
}
mutableStateOf(default)
}
LaunchedEffect(key1 = user) { LaunchedEffect(key1 = user) {
withContext(Dispatchers.IO) { if (nip05Verified.value == null) {
user.nip05?.ifBlank { null }?.let { nip05 -> withContext(Dispatchers.IO) {
val now = Date().time / 1000 user.nip05?.ifBlank { null }?.let { nip05 ->
if ((user.nip05LastVerificationTime ?: 0) > (now - 60 * 60)) { // 1hour
nip05Verified.value = user.nip05Verified
} else {
Nip05Verifier().verifyNip05( Nip05Verifier().verifyNip05(
nip05, nip05,
onSuccess = { onSuccess = {
// Marks user as verified // Marks user as verified
if (it == pubkeyHex) { if (it == pubkeyHex) {
user.nip05Verified = true user.nip05Verified = true
user.nip05LastVerificationTime = now user.nip05LastVerificationTime = Date().time / 1000
nip05Verified.value = true
if (nip05Verified.value != true) {
nip05Verified.value = true
}
} else { } else {
user.nip05Verified = false user.nip05Verified = false
user.nip05LastVerificationTime = 0 user.nip05LastVerificationTime = 0
nip05Verified.value = false
if (nip05Verified.value != false) {
nip05Verified.value = false
}
} }
}, },
onError = { onError = {
user.nip05LastVerificationTime = 0 user.nip05LastVerificationTime = 0
user.nip05Verified = false user.nip05Verified = false
nip05Verified.value = false
if (nip05Verified.value != false) {
nip05Verified.value = false
}
} }
) )
} }
@@ -90,16 +105,14 @@ fun ObserveDisplayNip05Status(baseNote: Note, columnModifier: Modifier = Modifie
@Composable @Composable
fun ObserveDisplayNip05Status(baseUser: User, columnModifier: Modifier = Modifier) { fun ObserveDisplayNip05Status(baseUser: User, columnModifier: Modifier = Modifier) {
val userState by baseUser.live().metadata.observeAsState() val userState by baseUser.live().metadata.observeAsState()
val user = userState?.user ?: return val user = remember(userState) { userState?.user } ?: return
val parts = remember(userState) { userState?.user?.nip05()?.split("@") } ?: return
user.nip05()?.let { nip05 -> if (parts.size == 2) {
val parts = nip05.split("@") val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex)
if (parts.size == 2) {
val nip05Verified by nip05VerificationAsAState(user.info!!, user.pubkeyHex)
Column(modifier = columnModifier) { Column(modifier = columnModifier) {
DisplayNIP05(parts[0], parts[1], nip05Verified) DisplayNIP05(parts[0], parts[1], nip05Verified)
}
} }
} }
} }