Code1 now only submits within the correct time window
This commit is contained in:
+27
-1
@@ -1,9 +1,13 @@
|
||||
use axum::{extract::ConnectInfo, http::StatusCode, Json};
|
||||
use chrono::Timelike;
|
||||
use serde_json::Value;
|
||||
use std::net::SocketAddr;
|
||||
|
||||
pub const ID: &str = "code1";
|
||||
const TARGET_DELAY_MS: i64 = 6430;
|
||||
const MAX_BUZZ_DELTA_MS: i64 = 500;
|
||||
const ACCEPTANCE_START_SECONDS: u32 = 11 * 60 * 60;
|
||||
const ACCEPTANCE_END_SECONDS: u32 = 13 * 60 * 60 + 30 * 60;
|
||||
const SELF_NOTIFICATION: &str = "Code 1 has been submitted while the server is live.";
|
||||
const CHALLENGE_1_FIRST: &str = "SECDED-13\nPARITY MSB...LSB";
|
||||
const CHALLENGE_1_SECOND: &str = "0x144A
|
||||
@@ -77,10 +81,32 @@ pub async fn buzz_event_handler(
|
||||
));
|
||||
}
|
||||
|
||||
let chicago_now = chrono::Utc::now().with_timezone(&chrono_tz::America::Chicago);
|
||||
let seconds_since_midnight = chicago_now.num_seconds_from_midnight();
|
||||
let after_start = seconds_since_midnight >= ACCEPTANCE_START_SECONDS;
|
||||
let before_or_at_end = seconds_since_midnight < ACCEPTANCE_END_SECONDS
|
||||
|| (seconds_since_midnight == ACCEPTANCE_END_SECONDS && chicago_now.nanosecond() == 0);
|
||||
if !after_start || !before_or_at_end {
|
||||
leptos::logging::log!(
|
||||
"Code 1 buzz rejected outside acceptance window: local_time={}, source={}",
|
||||
chicago_now.format("%Y-%m-%d %H:%M:%S %Z"),
|
||||
address.ip()
|
||||
);
|
||||
return Ok(StatusCode::OK);
|
||||
}
|
||||
|
||||
let delta_ms = delay_ms - TARGET_DELAY_MS;
|
||||
if delta_ms.abs() > MAX_BUZZ_DELTA_MS {
|
||||
leptos::logging::log!(
|
||||
"Code 1 buzz rejected: delay_ms={delay_ms}, delta_ms={delta_ms}, source={}",
|
||||
address.ip()
|
||||
);
|
||||
return Ok(StatusCode::OK);
|
||||
}
|
||||
|
||||
let live = crate::manage::server_live_state();
|
||||
crate::codes::history::record_successful_submission(address.ip(), live, ID)
|
||||
.map_err(|error| (StatusCode::INTERNAL_SERVER_ERROR, error.to_string()))?;
|
||||
let delta_ms = delay_ms - TARGET_DELAY_MS;
|
||||
on_submit(live, delta_ms).await.map_err(|error| {
|
||||
leptos::logging::log!("Code 1 buzz event failed: {error}");
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user