From 4fda1f179f57e8f44258c128f89545d79bfa5c0c Mon Sep 17 00:00:00 2001 From: Untone Date: Sun, 5 Oct 2025 10:58:24 +0300 Subject: [PATCH] ciopt3 --- CHANGELOG.md | 11 ++++++++++- src/auth.rs | 1 + src/handlers/common.rs | 1 + src/security.rs | 2 ++ src/thumbnail.rs | 1 + 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe9d45c..05ffd0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ ## [0.6.10] - 2025-10-04 +### 🧹 Code Quality: Clippy Fixes +- **✅ Подавлены collapsible_if warnings**: `#[allow(clippy::collapsible_if)]` + - `auth.rs`: extract_token_from_request (3 уровня вложенности) + - `handlers/common.rs`: is_vercel_request (2 функции) + - `security.rs`: header validation, extract_client_ip (3 функции) + - `thumbnail.rs`: cleanup_cache (1 цикл) + - Сохранена читаемость: явные guard clauses вместо let chains + - Let chains нестабильны в Rust 1.90 (требуется nightly) + ### 🚀 CI/CD: Optimization (YAGNI + DRY) - **🪓 Упрощён CI pipeline**: 265 строк → 56 строк (-80%) - Удалены избыточные проверки (`continue-on-error`, условные блоки памяти) @@ -11,7 +20,7 @@ - Прямой `cargo test --all` вместо раздельных unit/integration - Убраны проверки rustfmt/clippy availability (fail fast) - Удалены get_repo_name/get_branch_name (не используются) -- **✅ Использование существующего Rust**: Не переустанавливаем, используем уже установленный +- **✅ Использование Rust**: Не переустанавливаем, используем уже установленный - Быстрее: нет скачивания и установки toolchain - Решает cross-device link errors при обновлении - **✅ Исправлена загрузка SSH ключа**: `printf '%s'` без лишнего `\n` diff --git a/src/auth.rs b/src/auth.rs index de8d30c..8039019 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -85,6 +85,7 @@ fn decode_jwt_token(token: &str) -> Result> { } /// Извлекает токен из HTTP запроса (поддерживает Bearer, X-Session-Token, Cookie) +#[allow(clippy::collapsible_if)] pub fn extract_token_from_request(req: &actix_web::HttpRequest) -> Option { // 1. Bearer токен в Authorization header if let Some(auth_header) = req.headers().get("authorization") { diff --git a/src/handlers/common.rs b/src/handlers/common.rs index 0486721..9f8bba2 100644 --- a/src/handlers/common.rs +++ b/src/handlers/common.rs @@ -117,6 +117,7 @@ pub fn create_file_response_with_analytics( } /// Проверяет, является ли запрос от Vercel Edge API +#[allow(clippy::collapsible_if)] pub fn is_vercel_request(req: &HttpRequest) -> bool { // Проверяем User-Agent на Vercel if let Some(user_agent) = req.headers().get("user-agent") { diff --git a/src/security.rs b/src/security.rs index 231f20e..e089749 100644 --- a/src/security.rs +++ b/src/security.rs @@ -65,6 +65,7 @@ impl SecurityConfig { } // Проверка длины значений заголовков + #[allow(clippy::collapsible_if)] for (name, value) in req.headers() { if let Ok(value_str) = value.to_str() { if value_str.len() > self.max_header_value_length { @@ -187,6 +188,7 @@ impl SecurityConfig { } /// Извлекает IP адрес клиента + #[allow(clippy::collapsible_if)] pub fn extract_client_ip(req: &HttpRequest) -> String { // Проверяем X-Forwarded-For (для прокси) if let Some(forwarded) = req.headers().get("x-forwarded-for") { diff --git a/src/thumbnail.rs b/src/thumbnail.rs index eca1a8b..c8ce49a 100644 --- a/src/thumbnail.rs +++ b/src/thumbnail.rs @@ -313,6 +313,7 @@ pub fn cleanup_cache(cache_dir: &str, max_age_days: u64) -> Result<(), Box