Optimizes NIP-05 procedures
This commit is contained in:
@@ -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)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user