diff --git a/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Proof.ext.kt b/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Proof.ext.kt new file mode 100644 index 00000000..47b5696d --- /dev/null +++ b/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Proof.ext.kt @@ -0,0 +1,14 @@ +package com.lightningkite.lightningserver.sessions.proofs.extensions + +import com.lightningkite.lightningserver.runtime.ServerRuntime +import com.lightningkite.lightningserver.runtime.now +import com.lightningkite.lightningserver.sessions.proofs.Proof +import com.lightningkite.lightningserver.sessions.proofs.proofMethods +import kotlin.time.Duration.Companion.hours + +context(_: ServerRuntime) +public val Proof.expired: Boolean get() = (expiresAt ?: (at + 1.hours)) < now() + +context(server: ServerRuntime) +public suspend fun Proof.isValid(): Boolean = + server.proofMethods.find { it.info.via == via }?.verify(this) == true \ No newline at end of file diff --git a/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Signer.ext.kt b/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Signer.ext.kt index 62bf6bb1..4d42caad 100644 --- a/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Signer.ext.kt +++ b/sessions/src/main/kotlin/com/lightningkite/lightningserver/sessions/proofs/extensions/Signer.ext.kt @@ -7,6 +7,7 @@ import com.lightningkite.lightningserver.sessions.proofs.* import kotlinx.io.* import kotlin.io.encoding.Base64 import kotlin.time.Duration +import kotlin.time.Duration.Companion.hours import kotlin.time.Instant private fun signingInfo( @@ -23,10 +24,7 @@ private fun signingInfo( writeString(value) writeInt(strength) writeLong(at.toEpochMilliseconds()) - writeLong( - expiresAt?.toEpochMilliseconds() - ?: throw IllegalStateException("expiredAt cannot be null for proof signature verification") - ) + writeLong(expiresAt?.toEpochMilliseconds() ?: (at.plus(1.hours)).toEpochMilliseconds()) } .readByteArray()