style: apply rustfmt to backend codebase
- Apply rustfmt to all Rust source files in backend/ - Fix trailing whitespace inconsistencies - Standardize formatting across handlers, models, and services - Improve code readability with consistent formatting These changes are purely stylistic and do not affect functionality. All CI checks now pass with proper formatting.
This commit is contained in:
parent
6b7e4d4016
commit
ee0feb77ef
41 changed files with 1266 additions and 819 deletions
|
|
@ -1,8 +1,8 @@
|
|||
use anyhow::Result;
|
||||
use mongodb::bson::{doc, DateTime};
|
||||
use mongodb::Collection;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::RwLock;
|
||||
use anyhow::Result;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct AccountLockout {
|
||||
|
|
@ -26,16 +26,11 @@ impl AccountLockout {
|
|||
max_duration_minutes,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub async fn check_lockout(&self, email: &str) -> Result<bool> {
|
||||
let collection = self.user_collection.read().await;
|
||||
let user = collection
|
||||
.find_one(
|
||||
doc! { "email": email },
|
||||
None,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let user = collection.find_one(doc! { "email": email }, None).await?;
|
||||
|
||||
if let Some(user_doc) = user {
|
||||
if let Some(locked_until_val) = user_doc.get("locked_until") {
|
||||
if let Some(dt) = locked_until_val.as_datetime() {
|
||||
|
|
@ -46,32 +41,28 @@ impl AccountLockout {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Ok(false) // Account is not locked
|
||||
}
|
||||
|
||||
|
||||
pub async fn record_failed_attempt(&self, email: &str) -> Result<bool> {
|
||||
let collection = self.user_collection.write().await;
|
||||
|
||||
|
||||
// Get current failed attempts
|
||||
let user = collection
|
||||
.find_one(
|
||||
doc! { "email": email },
|
||||
None,
|
||||
)
|
||||
.await?;
|
||||
|
||||
let user = collection.find_one(doc! { "email": email }, None).await?;
|
||||
|
||||
let current_attempts = if let Some(user_doc) = user {
|
||||
user_doc.get("failed_login_attempts")
|
||||
user_doc
|
||||
.get("failed_login_attempts")
|
||||
.and_then(|v| v.as_i64())
|
||||
.unwrap_or(0) as u32
|
||||
} else {
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
let new_attempts = current_attempts + 1;
|
||||
let should_lock = new_attempts >= self.max_attempts;
|
||||
|
||||
|
||||
// Calculate lockout duration
|
||||
let lock_duration = if should_lock {
|
||||
let multiplier = (new_attempts as u32).saturating_sub(self.max_attempts) + 1;
|
||||
|
|
@ -80,7 +71,7 @@ impl AccountLockout {
|
|||
} else {
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
let locked_until = if lock_duration > 0 {
|
||||
let now = DateTime::now();
|
||||
let duration_millis = lock_duration as u64 * 60 * 1000;
|
||||
|
|
@ -88,7 +79,7 @@ impl AccountLockout {
|
|||
} else {
|
||||
DateTime::now()
|
||||
};
|
||||
|
||||
|
||||
// Update user
|
||||
collection
|
||||
.update_one(
|
||||
|
|
@ -103,13 +94,13 @@ impl AccountLockout {
|
|||
None,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
||||
Ok(should_lock)
|
||||
}
|
||||
|
||||
|
||||
pub async fn reset_attempts(&self, email: &str) -> Result<()> {
|
||||
let collection = self.user_collection.write().await;
|
||||
|
||||
|
||||
collection
|
||||
.update_one(
|
||||
doc! { "email": email },
|
||||
|
|
@ -122,7 +113,7 @@ impl AccountLockout {
|
|||
None,
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue