diff --git a/libs/email/lib.rs b/libs/email/lib.rs index 2c69fb2..0c8b482 100644 --- a/libs/email/lib.rs +++ b/libs/email/lib.rs @@ -64,16 +64,20 @@ impl AppEmail { tokio::spawn(async move { while let Some(msg) = rx.recv().await { - if !EMAIL_REGEX.is_match(&msg.clone().to) { - counter!("email_validation_skipped_total").increment(1); - continue; - } + let recipient: Mailbox = match msg.to.parse() { + Ok(addr) => addr, + Err(_) => { + counter!("email_validation_skipped_total").increment(1); + tracing::warn!(to = %msg.to, "Invalid recipient address"); + continue; + } + }; let email = match lettre::Message::builder() .from(from.clone()) - .to(msg.clone().to.parse().unwrap()) - .subject(msg.clone().subject) - .body(msg.clone().body) + .to(recipient) + .subject(msg.subject) + .body(msg.body) { Ok(e) => e, Err(_) => { diff --git a/libs/observability/src/metrics_middleware.rs b/libs/observability/src/metrics_middleware.rs index 9848fdf..36fce0e 100644 --- a/libs/observability/src/metrics_middleware.rs +++ b/libs/observability/src/metrics_middleware.rs @@ -37,7 +37,7 @@ impl HttpMetrics { /// Increment the counter for a specific HTTP endpoint (method + path). pub fn incr_endpoint(&self, method: &str, path: &str) { let key = format!("{} {}", method, path); - let mut map = self.endpoint_counts.write().unwrap(); + let mut map = self.endpoint_counts.write().unwrap_or_else(|e| e.into_inner()); let counter = map.entry(key).or_insert_with(|| AtomicU64::new(0)); counter.fetch_add(1, Ordering::Relaxed); } @@ -52,7 +52,7 @@ impl HttpMetrics { m.insert("http_requests_5xx".into(), serde_json::json!(self.status_5xx.load(Ordering::Relaxed))); // Per-endpoint counters - let map = self.endpoint_counts.read().unwrap(); + let map = self.endpoint_counts.read().unwrap_or_else(|e| e.into_inner()); for (key, counter) in map.iter() { // Sanitize key for use as metric name: replace spaces and slashes with underscores let sanitized = key.replace([' ', '/'], "_").to_lowercase(); diff --git a/libs/service/user/access_key.rs b/libs/service/user/access_key.rs index 3627d05..d744b0f 100644 --- a/libs/service/user/access_key.rs +++ b/libs/service/user/access_key.rs @@ -214,7 +214,7 @@ impl AppService { use std::time::{SystemTime, UNIX_EPOCH}; let now = SystemTime::now() .duration_since(UNIX_EPOCH) - .unwrap() + .unwrap_or_default() .as_nanos(); let chars: Vec = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" .chars() diff --git a/libs/service/user/chpc.rs b/libs/service/user/chpc.rs index 7eb4afb..ac5c793 100644 --- a/libs/service/user/chpc.rs +++ b/libs/service/user/chpc.rs @@ -78,8 +78,8 @@ impl AppService { return Ok(response); } - let start_dt = start_date.and_hms_opt(0, 0, 0).unwrap(); - let end_dt = end_date.and_hms_opt(23, 59, 59).unwrap(); + let start_dt = start_date.and_hms_opt(0, 0, 0).unwrap_or(chrono::NaiveDateTime::MIN); + let end_dt = end_date.and_hms_opt(23, 59, 59).unwrap_or(chrono::NaiveDateTime::MAX); let commits: Vec = repo_commit::Entity::find() .filter(repo_commit::Column::AuthorEmail.is_in(emails.clone()))