This commit is contained in:
40
src/auth.rs
40
src/auth.rs
@@ -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>,
|
||||
|
||||
Reference in New Issue
Block a user