Fix: Implement selective TOR routing for internal vs external API calls
**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 <noreply@anthropic.com>
This commit is contained in:
parent
7e2d8e50db
commit
fa5e5fb9fa
@ -90,13 +90,12 @@ builder.Services.AddSingleton<ICommandHandler, CommandHandler>();
|
||||
builder.Services.AddSingleton<ICallbackHandler, CallbackHandler>();
|
||||
builder.Services.AddSingleton<IMessageHandler, MessageHandler>();
|
||||
|
||||
// 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<BotManagerService>()
|
||||
.ConfigurePrimaryHttpMessageHandler(sp =>
|
||||
{
|
||||
var config = sp.GetRequiredService<IConfiguration>();
|
||||
var logger = sp.GetRequiredService<ILoggerFactory>().CreateLogger("TOR.BotManager");
|
||||
return Socks5HttpHandler.Create(config, logger);
|
||||
var logger = sp.GetRequiredService<ILoggerFactory>().CreateLogger("BotManager");
|
||||
return Socks5HttpHandler.CreateDirect(logger);
|
||||
});
|
||||
builder.Services.AddSingleton<BotManagerService>();
|
||||
builder.Services.AddHostedService(provider => provider.GetRequiredService<BotManagerService>());
|
||||
@ -106,22 +105,20 @@ builder.Services.AddSingleton<MessageDeliveryService>();
|
||||
builder.Services.AddSingleton<IMessageDeliveryService>(sp => sp.GetRequiredService<MessageDeliveryService>());
|
||||
builder.Services.AddHostedService<MessageDeliveryService>(sp => sp.GetRequiredService<MessageDeliveryService>());
|
||||
|
||||
// Bot Activity Tracking with TOR support
|
||||
// Bot Activity Tracking with direct connection (internal API)
|
||||
builder.Services.AddHttpClient<IBotActivityTracker, BotActivityTracker>()
|
||||
.ConfigurePrimaryHttpMessageHandler(sp =>
|
||||
{
|
||||
var config = sp.GetRequiredService<IConfiguration>();
|
||||
var logger = sp.GetRequiredService<ILoggerFactory>().CreateLogger("TOR.ActivityTracker");
|
||||
return Socks5HttpHandler.Create(config, logger);
|
||||
var logger = sp.GetRequiredService<ILoggerFactory>().CreateLogger("ActivityTracker");
|
||||
return Socks5HttpHandler.CreateDirect(logger);
|
||||
});
|
||||
|
||||
// Product Carousel Service with TOR support
|
||||
// Product Carousel Service with direct connection (internal API)
|
||||
builder.Services.AddHttpClient<ProductCarouselService>()
|
||||
.ConfigurePrimaryHttpMessageHandler(sp =>
|
||||
{
|
||||
var config = sp.GetRequiredService<IConfiguration>();
|
||||
var logger = sp.GetRequiredService<ILoggerFactory>().CreateLogger("TOR.Carousel");
|
||||
return Socks5HttpHandler.Create(config, logger);
|
||||
var logger = sp.GetRequiredService<ILoggerFactory>().CreateLogger("Carousel");
|
||||
return Socks5HttpHandler.CreateDirect(logger);
|
||||
});
|
||||
builder.Services.AddSingleton<IProductCarouselService, ProductCarouselService>();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user