From 0033269fb879cab7e6227d0fd601f18402effe00 Mon Sep 17 00:00:00 2001 From: batsumaru <> Date: Fri, 16 Oct 2026 15:41:00 +0900 Subject: Add reject future timestamps on write --- src/models.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/models.rs') diff --git a/src/models.rs b/src/models.rs index 15da87b..480ef2f 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,8 +1,10 @@ -use chrono::{DateTime, Utc}; +use chrono::{DateTime, TimeDelta, Utc}; use serde::{Deserialize, Serialize}; use strum::{EnumIter, IntoStaticStr}; use uuid::Uuid; +const FUTURE_TOLERANCE: TimeDelta = TimeDelta::minutes(5); + #[derive(sqlx::Type, Serialize, Deserialize, EnumIter, Debug, IntoStaticStr, Clone, Copy)] #[sqlx(type_name = "metric_type")] pub enum MetricType { @@ -62,6 +64,9 @@ impl TryFrom for MeasurementData { if value.value < 0.0 || value.value.is_nan() { return Err("Invalid value".to_string()); } + if value.measured_at > Utc::now() + FUTURE_TOLERANCE { + return Err("measured_at is in the future".to_string()); + } if !value.metric_type.accepts(&value.unit) { let metric_type: &'static str = (&value.metric_type).into(); let unit: &'static str = (&value.unit).into(); -- cgit v1.3