From 9466e07237cace254ab15da4b8d615e2db98d435 Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 2 Sep 2025 18:45:11 +0300 Subject: [PATCH] Fix Redis username: auto-correct empty username to 'redis' when password is present --- src/app_state.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/app_state.rs b/src/app_state.rs index 096323d..12ec7f9 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -48,7 +48,7 @@ impl AppState { // Парсим URL для детального анализа log::warn!("🔍 Parsing Redis URL..."); - match url::Url::parse(&redis_url) { + let final_redis_url = match url::Url::parse(&redis_url) { Ok(parsed_url) => { log::warn!("✅ Redis URL parsed successfully"); log::warn!(" Host: {}", parsed_url.host_str().unwrap_or("none")); @@ -57,27 +57,30 @@ impl AppState { let username = parsed_url.username(); let password = parsed_url.password(); - // Определяем правильное имя пользователя для диагностики - let effective_username = if username.is_empty() && password.is_some() { - "redis" // Дефолтное имя пользователя для Redis - } else { - username - }; - - log::warn!(" Username: '{}' (effective: '{}')", username, effective_username); + log::warn!(" Username: '{}'", username); log::warn!(" Password: {}", if password.is_some() { "***" } else { "none" }); + // Если username пустой и есть пароль, исправляем URL if username.is_empty() && password.is_some() { - log::warn!(" ℹ️ Redis client will use default username 'redis' for authentication"); + let corrected_url = redis_url.replace("redis://:", "redis://redis:"); + log::warn!(" 🔧 Correcting URL to use explicit username 'redis'"); + corrected_url + } else { + redis_url } } Err(e) => { log::error!("❌ Failed to parse Redis URL: {}", e); panic!("Invalid Redis URL: {}", e); } - } + }; + // Используем исправленный URL + Self::create_app_state_with_redis_url(security_config, final_redis_url).await + } + /// Создает AppState с указанным Redis URL. + async fn create_app_state_with_redis_url(security_config: SecurityConfig, redis_url: String) -> Self { let redis_client = match RedisClient::open(redis_url) { Ok(client) => { log::warn!("✅ Redis client created successfully");