connection-pool-fix
Some checks failed
Deploy on push / deploy (push) Failing after 4s

This commit is contained in:
2025-09-22 01:23:16 +03:00
parent 91e5f5dac4
commit 3ff469c8a1
7 changed files with 528 additions and 95 deletions

View File

@@ -242,6 +242,46 @@ pub async fn authenticate_request(
})
}
/// Универсальная функция аутентификации с использованием connection pool
/// Автоматически получает и возвращает соединения из пула
pub async fn authenticate_request_with_pool(
req: &actix_web::HttpRequest,
app_state: &crate::app_state::AppState,
) -> Result<Author, actix_web::Error> {
// Извлекаем токен из запроса
let token = extract_token_from_request(req).ok_or_else(|| {
warn!("No authorization token provided");
actix_web::error::ErrorUnauthorized("Authorization token required")
})?;
// Получаем соединение из пула
match app_state.get_redis_connection().await {
Ok(mut conn) => {
// Валидируем токен с Redis соединением
let result =
secure_token_validation(&token, Some(&mut conn), app_state.request_timeout).await;
// Возвращаем соединение в пул
app_state.return_redis_connection(conn).await;
result.map_err(|e| {
warn!("Token validation failed: {}", e);
actix_web::error::ErrorUnauthorized("Invalid or expired token")
})
}
Err(_) => {
// Fallback на JWT-only валидацию если Redis недоступен
warn!("Redis pool unavailable, falling back to JWT-only validation");
secure_token_validation(&token, None, app_state.request_timeout)
.await
.map_err(|e| {
warn!("Token validation failed: {}", e);
actix_web::error::ErrorUnauthorized("Invalid or expired token")
})
}
}
}
/// Сохраняет имя файла в Redis для пользователя
pub async fn user_added_file(
redis: Option<&mut MultiplexedConnection>,