From fa5e5fb9fa593d4279f9138a1a562b72a3da1781 Mon Sep 17 00:00:00 2001 From: SysAdmin Date: Fri, 3 Oct 2025 13:09:04 +0100 Subject: [PATCH] Fix: Implement selective TOR routing for internal vs external API calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Issue**: Order creation failed because TOR proxy was being used for internal Docker network API calls to littleshop-admin, causing DNS resolution failures. **Root Cause**: - All HTTP clients (BotManager, ActivityTracker, ProductCarousel) used Socks5HttpHandler.Create() which checked Privacy:EnableTor globally - TOR gateway can only proxy external traffic (to Telegram API) - Internal Docker network calls to littleshop-admin failed through TOR **Solution**: - Updated BotManagerService to use Socks5HttpHandler.CreateDirect() - Updated BotActivityTracker to use Socks5HttpHandler.CreateDirect() - Updated ProductCarouselService to use Socks5HttpHandler.CreateDirect() - TelegramBotService continues using TOR for external Telegram API - LittleShop.Client respects LittleShop:UseTor = false setting **Architecture**: ✅ External calls (Telegram API) → TOR for privacy ✅ Internal calls (LittleShop API) → Direct Docker network connection **Testing**: - Bot authenticated successfully with LittleShop API (200 OK) - Telegram Bot API using TOR proxy (socks5://tor-gateway:9050) - Container: 45eab050eeeca479680966b45742cf140cf7df0ed8e8ab5dc8c9e3e17739c88a 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- TeleBot/TeleBot/Program.cs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/TeleBot/TeleBot/Program.cs b/TeleBot/TeleBot/Program.cs index e52191f..59419cb 100644 --- a/TeleBot/TeleBot/Program.cs +++ b/TeleBot/TeleBot/Program.cs @@ -90,13 +90,12 @@ builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); -// Bot Manager Service (for registration and metrics) - Single instance with TOR support +// Bot Manager Service (for registration and metrics) - Single instance with direct connection (internal API) builder.Services.AddHttpClient() .ConfigurePrimaryHttpMessageHandler(sp => { - var config = sp.GetRequiredService(); - var logger = sp.GetRequiredService().CreateLogger("TOR.BotManager"); - return Socks5HttpHandler.Create(config, logger); + var logger = sp.GetRequiredService().CreateLogger("BotManager"); + return Socks5HttpHandler.CreateDirect(logger); }); builder.Services.AddSingleton(); builder.Services.AddHostedService(provider => provider.GetRequiredService()); @@ -106,22 +105,20 @@ builder.Services.AddSingleton(); builder.Services.AddSingleton(sp => sp.GetRequiredService()); builder.Services.AddHostedService(sp => sp.GetRequiredService()); -// Bot Activity Tracking with TOR support +// Bot Activity Tracking with direct connection (internal API) builder.Services.AddHttpClient() .ConfigurePrimaryHttpMessageHandler(sp => { - var config = sp.GetRequiredService(); - var logger = sp.GetRequiredService().CreateLogger("TOR.ActivityTracker"); - return Socks5HttpHandler.Create(config, logger); + var logger = sp.GetRequiredService().CreateLogger("ActivityTracker"); + return Socks5HttpHandler.CreateDirect(logger); }); -// Product Carousel Service with TOR support +// Product Carousel Service with direct connection (internal API) builder.Services.AddHttpClient() .ConfigurePrimaryHttpMessageHandler(sp => { - var config = sp.GetRequiredService(); - var logger = sp.GetRequiredService().CreateLogger("TOR.Carousel"); - return Socks5HttpHandler.Create(config, logger); + var logger = sp.GetRequiredService().CreateLogger("Carousel"); + return Socks5HttpHandler.CreateDirect(logger); }); builder.Services.AddSingleton();