From 8317f41e3cbba19bfbfbeb6e54e1d3aa4ae489d7 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 13 Jun 2026 18:02:25 -0400 Subject: [PATCH] Claim update (#26) Reviewed-on: http://git.kundeng.us/phoenix/textsender_models/pulls/26 --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/token/mod.rs | 21 +++++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5864ce7..2a64d03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -522,7 +522,7 @@ dependencies = [ [[package]] name = "textsender_models" -version = "0.3.1" +version = "0.3.2" dependencies = [ "const_format", "dotenvy", diff --git a/Cargo.toml b/Cargo.toml index 32c11fa..6c9ac16 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "textsender_models" -version = "0.3.1" +version = "0.3.2" edition = "2024" rust-version = "1.95" description = "Models used for the textsender project" diff --git a/src/token/mod.rs b/src/token/mod.rs index 2f713d8..e2fbf9b 100644 --- a/src/token/mod.rs +++ b/src/token/mod.rs @@ -7,11 +7,32 @@ pub struct Claims { #[serde(alias = "iss")] pub issued: String, #[serde(alias = "exp")] + #[serde(deserialize_with = "deserialize_i64_from_f64")] pub expired: i64, #[serde(alias = "iat")] + #[serde(deserialize_with = "deserialize_i64_from_f64")] pub issued_at: i64, } +fn deserialize_i64_from_f64<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + let val = f64::deserialize(deserializer)?; + // Handle NaN and infinity cases + if val.is_nan() || val.is_infinite() { + return Err(serde::de::Error::custom("invalid float value")); + } + // Round to nearest integer and convert + let rounded = val.round(); + // Check if the rounded value can fit in i64 + if rounded < (i64::MIN as f64) || rounded > (i64::MAX as f64) { + Err(serde::de::Error::custom("float out of i64 range")) + } else { + Ok(rounded as i64) + } +} + #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)] pub struct LoginResult { pub user_id: uuid::Uuid,