From 170f891b4daf98aa08dc85304ee87fe2881805f6 Mon Sep 17 00:00:00 2001 From: Trax Bagley Date: Mon, 9 Mar 2026 14:42:50 -0600 Subject: [PATCH 1/3] made expiresAt nullable and do default check with at for backward compatibility with mobile apps --- .../lightningserver/sessions/proofs/proofModels.kt | 2 +- .../lightningserver/sessions/proofs/extensions/Proof.ext.kt | 3 ++- .../lightningserver/sessions/proofs/extensions/Signer.ext.kt | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt b/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt index 4ed576b7..c102d504 100644 --- a/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt +++ b/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt @@ -121,7 +121,7 @@ public data class Proof( val property: String, val value: String, val at: Instant, - val expiresAt: Instant, + val expiresAt: Instant?, // Nullable for now for backwards compatibility with mobile apps val signature: String, ) 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 index 81e9ed79..47b5696d 100644 --- 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 @@ -4,9 +4,10 @@ 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 < now() +public val Proof.expired: Boolean get() = (expiresAt ?: (at + 1.hours)) < now() context(server: ServerRuntime) public suspend fun Proof.isValid(): Boolean = 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 62be7fbd..441a886d 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 @@ -23,7 +23,7 @@ private fun signingInfo( value: String, strength: Int = 1, at: Instant, - expiresAt: Instant, + expiresAt: Instant?, ): ByteArray = Buffer() .apply { writeString(via) @@ -31,7 +31,7 @@ private fun signingInfo( writeString(value) writeInt(strength) writeLong(at.toEpochMilliseconds()) - writeLong(expiresAt.toEpochMilliseconds()) + writeLong(expiresAt?.toEpochMilliseconds() ?: 0L) } .readByteArray() From 5d4d440fc2537f7579c20f2bf3cdf28380364841 Mon Sep 17 00:00:00 2001 From: Trax Bagley Date: Mon, 9 Mar 2026 16:03:50 -0600 Subject: [PATCH 2/3] add default parameter null to expiresAt --- .../lightningserver/sessions/proofs/proofModels.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt b/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt index c102d504..24af2431 100644 --- a/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt +++ b/sessions-shared/src/commonMain/kotlin/com/lightningkite/lightningserver/sessions/proofs/proofModels.kt @@ -121,7 +121,7 @@ public data class Proof( val property: String, val value: String, val at: Instant, - val expiresAt: Instant?, // Nullable for now for backwards compatibility with mobile apps + val expiresAt: Instant? = null, // Nullable for now for backwards compatibility with mobile apps val signature: String, ) From c2e4045c177bc4535f02bb03466a855f6a61246d Mon Sep 17 00:00:00 2001 From: Trax Bagley Date: Mon, 9 Mar 2026 16:23:14 -0600 Subject: [PATCH 3/3] fix signing info to handle the null expires at --- .../lightningserver/sessions/proofs/extensions/Signer.ext.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 441a886d..d748a7dd 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 @@ -15,6 +15,7 @@ import kotlinx.io.readByteArray import kotlinx.io.writeString import kotlin.io.encoding.Base64 import kotlin.time.Duration +import kotlin.time.Duration.Companion.hours import kotlin.time.Instant private fun signingInfo( @@ -23,7 +24,7 @@ private fun signingInfo( value: String, strength: Int = 1, at: Instant, - expiresAt: Instant?, + expiresAt: Instant?=null, ): ByteArray = Buffer() .apply { writeString(via) @@ -31,7 +32,7 @@ private fun signingInfo( writeString(value) writeInt(strength) writeLong(at.toEpochMilliseconds()) - writeLong(expiresAt?.toEpochMilliseconds() ?: 0L) + writeLong(expiresAt?.toEpochMilliseconds() ?: (at.plus(1.hours)).toEpochMilliseconds()) } .readByteArray()