diff --git a/PRODUCTION_ACCESS.md b/PRODUCTION_ACCESS.md new file mode 100644 index 0000000..98c3b26 --- /dev/null +++ b/PRODUCTION_ACCESS.md @@ -0,0 +1,196 @@ +# LittleShop Production Access + +**Last Updated:** October 3, 2025 + +## Network Access + +**VPN Required:** WireGuard VPN (10.13.13.0/24 network) + +## Service URLs + +### Primary Access (via VPN) + +| Service | URL | Port | Notes | +|---------|-----|------|-------| +| **LittleShop API** | https://admin.dark.side | 443 | Main application API | +| **Admin Panel** | https://admin.dark.side/Admin | 443 | Web-based admin interface | +| **BTCPay Server** | https://bank.dark.side | 443 | Payment gateway for BTC/crypto | + +### Direct Access (Internal Network) + +| Service | URL | Port | Notes | +|---------|-----|------|-------| +| **LittleShop API** | http://10.13.13.1:5100 | 5100 | Direct container access | +| **TeleBot** | http://localhost:5010 | 5010 | Internal only | +| **SilverPay (Legacy)** | http://31.97.57.205:8001 | 8001 | Alternative payment system | + +## Credentials + +### Admin Access +- **Username:** `admin` +- **Password:** `admin` +- **URL:** https://admin.dark.side/Admin + +### Telegram Bot +- **Bot Token:** `8496279616:AAE7kV_riICbWxn6-MPFqcrWx7K8b4_NKq0` +- **Bot API Key:** `bot_rYgnBOJ5p2KkRkmhX0sBSY6Hw9l0hMwN` +- **Bot Name:** LittleShop TeleBot + +### Database +- **Type:** SQLite +- **Location:** `/app/data/littleshop-production.db` (in container) +- **Host Path:** Volume mounted from host + +## Container Information + +### Running Containers + +```bash +ssh hostinger "docker ps --filter name=littleshop --filter name=telebot" +``` + +| Container | Image | Port Mapping | Status | +|-----------|-------|--------------|--------| +| littleshop-admin | localhost:5000/littleshop:latest | 5100:8080 | Running (healthy) | +| telebot-service | localhost:5000/telebot:latest | Host network | Running | +| silverpay-api | localhost:5000/silverpay:latest | 8001:8000 | Running (healthy) | + +## Testing + +### End-to-End Transaction Test + +```bash +ssh hostinger "bash ~/test-e2e-fixed.sh" +``` + +This tests: +- ✓ LittleShop API health +- ✓ Product catalog (10 products) +- ✓ Order creation +- ✓ Payment generation (BTC) +- ✓ BTCPay integration +- ✓ TeleBot status + +### Manual Testing via Telegram + +1. Open Telegram +2. Search for your bot (using token: 8496279616:AAE7kV_riICbWxn6-MPFqcrWx7K8b4_NKq0) +3. Send `/start` +4. Browse products +5. Create an order +6. Receive Bitcoin payment address +7. Complete payment via BTCPay checkout + +### API Testing + +```bash +# Test health endpoint +curl -k https://admin.dark.side/health + +# Get products (via VPN) +curl -k https://admin.dark.side/api/catalog/products + +# Get categories +curl -k https://admin.dark.side/api/catalog/categories +``` + +## Payment Gateway Configuration + +**Active Payment System:** BTCPay Server + +- **URL:** https://bank.dark.side +- **Store ID:** CvdvHoncGLM7TdMYRAG6Z15YuxQfxeMWRYwi9gvPhh5R +- **Supported Currencies:** BTC, ETH, LTC, DOGE +- **Webhook URL:** http://srv1002428.hstgr.cloud/api/orders/payments/webhook + +**Alternative:** SilverPay (Legacy) +- **URL:** http://31.97.57.205:8001 +- **API Key:** Configured +- **Status:** Available as fallback + +## Deployment Scripts + +### Configuration Script +```bash +/mnt/c/Production/Source/LittleShop/configure-production.sh +``` + +### Deployment +```bash +ssh hostinger +cd ~/telebot +docker-compose up -d # If using docker-compose +# OR +docker restart littleshop-admin telebot-service +``` + +## Monitoring + +### Check Service Status +```bash +ssh hostinger "docker ps" +``` + +### View Logs +```bash +# LittleShop logs +ssh hostinger "docker logs littleshop-admin --tail 100" + +# TeleBot logs +ssh hostinger "docker logs telebot-service --tail 100" +``` + +### Check Health +```bash +ssh hostinger "curl -s http://10.13.13.1:5100/health" +``` + +## System Status + +**Production Environment:** ✅ FULLY OPERATIONAL + +- ✅ LittleShop API running +- ✅ TeleBot connected and authenticated +- ✅ BTCPay Server integrated +- ✅ Payment generation working +- ✅ Order processing functional + +**Last Test Results:** +- Order creation: ✅ Working +- Payment generation: ✅ Working (BTC address generated) +- Test order total: £34.99 +- Test BTC amount: 0.000390930000000000 BTC +- Payment address: bc1qfmuyfqxxw05p2qff8y4pf6sc05lv04v97xews9 + +## Security Notes + +1. **VPN Required:** All .dark.side domains require WireGuard VPN connection +2. **Change Default Password:** Update admin/admin credentials in production +3. **SSL Certificates:** Managed by nginx-proxy-manager +4. **Bot Token:** Keep secret, currently active and connected +5. **API Keys:** Stored in container environment variables + +## Troubleshooting + +### Cannot Access admin.dark.side +- Ensure WireGuard VPN is connected +- Check VPN IP: `ip addr show wg0` +- Expected IP range: 10.13.13.x/24 + +### Bot Not Responding +```bash +ssh hostinger "docker restart telebot-service" +ssh hostinger "docker logs telebot-service --tail 50" +``` + +### Payment Issues +- Check BTCPay Server status at https://bank.dark.side +- Verify webhook configuration +- Check container logs for payment errors + +--- + +**Server:** srv1002428.hstgr.cloud +**SSH Port:** 2255 +**SSH User:** sysadmin +**SSH Key:** ~/.ssh/hostinger_key diff --git a/TeleBot/TeleBot/Http/Socks5HttpHandler.cs b/TeleBot/TeleBot/Http/Socks5HttpHandler.cs index 65d90f7..90bbd9d 100644 --- a/TeleBot/TeleBot/Http/Socks5HttpHandler.cs +++ b/TeleBot/TeleBot/Http/Socks5HttpHandler.cs @@ -52,9 +52,9 @@ namespace TeleBot.Http /// /// Factory method to create handler with TOR enabled /// - public static SocketsHttpHandler CreateWithTor(int torSocksPort = 9050, ILogger? logger = null) + public static SocketsHttpHandler CreateWithTor(string torSocksHost = "127.0.0.1", int torSocksPort = 9050, ILogger? logger = null) { - var proxyUri = $"socks5://127.0.0.1:{torSocksPort}"; + var proxyUri = $"socks5://{torSocksHost}:{torSocksPort}"; logger?.LogInformation("SOCKS5 proxy configured: {ProxyUri}", proxyUri); return new SocketsHttpHandler diff --git a/TeleBot/TeleBot/Services/LittleShopService.cs b/TeleBot/TeleBot/Services/LittleShopService.cs index 57cc1f7..920409e 100644 --- a/TeleBot/TeleBot/Services/LittleShopService.cs +++ b/TeleBot/TeleBot/Services/LittleShopService.cs @@ -609,8 +609,9 @@ namespace TeleBot.Services if (torEnabled) { + var torSocksHost = _configuration.GetValue("Privacy:TorSocksHost") ?? "127.0.0.1"; var torSocksPort = _configuration.GetValue("Privacy:TorSocksPort", 9050); - var proxyUri = $"socks5://127.0.0.1:{torSocksPort}"; + var proxyUri = $"socks5://{torSocksHost}:{torSocksPort}"; var handler = new SocketsHttpHandler { diff --git a/TeleBot/TeleBot/TelegramBotService.cs b/TeleBot/TeleBot/TelegramBotService.cs index f8ee460..c221118 100644 --- a/TeleBot/TeleBot/TelegramBotService.cs +++ b/TeleBot/TeleBot/TelegramBotService.cs @@ -77,8 +77,9 @@ namespace TeleBot var torEnabled = _configuration.GetValue("Privacy:EnableTor"); if (torEnabled) { + var torSocksHost = _configuration.GetValue("Privacy:TorSocksHost") ?? "127.0.0.1"; var torSocksPort = _configuration.GetValue("Privacy:TorSocksPort", 9050); - var proxyUri = $"socks5://127.0.0.1:{torSocksPort}"; + var proxyUri = $"socks5://{torSocksHost}:{torSocksPort}"; _logger.LogInformation("Telegram Bot API: Using SOCKS5 proxy at {ProxyUri}", proxyUri); @@ -232,8 +233,9 @@ namespace TeleBot var torEnabled = _configuration.GetValue("Privacy:EnableTor"); if (torEnabled) { + var torSocksHost = _configuration.GetValue("Privacy:TorSocksHost") ?? "127.0.0.1"; var torSocksPort = _configuration.GetValue("Privacy:TorSocksPort", 9050); - var proxyUri = $"socks5://127.0.0.1:{torSocksPort}"; + var proxyUri = $"socks5://{torSocksHost}:{torSocksPort}"; var handler = new SocketsHttpHandler { diff --git a/configure-production.sh b/configure-production.sh new file mode 100644 index 0000000..0d04f32 --- /dev/null +++ b/configure-production.sh @@ -0,0 +1,339 @@ +#!/bin/bash + +# LittleShop Production Configuration Script +# Configures bot tokens, payment gateway, and all production settings + +set -e + +# Colors for output +GREEN='\033[0;32m' +BLUE='\033[0;34m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' + +echo -e "${BLUE}================================================${NC}" +echo -e "${BLUE}LittleShop Production Configuration${NC}" +echo -e "${BLUE}================================================${NC}" +echo "" + +# Configuration variables +DEPLOY_DIR="/root/LittleShop" +TELEBOT_DIR="/root/TeleBot" + +# Telegram Bot Token (from appsettings) +TELEGRAM_BOT_TOKEN="8496279616:AAE7kV_riICbWxn6-MPFqcrWx7K8b4_NKq0" + +# BTCPay Server (from existing config) +BTCPAY_URL="https://thebankofdebbie.giize.com" +BTCPAY_API_KEY="db920209c0101efdbd1c6b6d1c99a48e3ba9d0de" +BTCPAY_STORE_ID="CvdvHoncGLM7TdMYRAG6Z15YuxQfxeMWRYwi9gvPhh5R" + +# WebPush VAPID Keys (from existing config) +VAPID_PUBLIC="BMc6fFJZ8oIQKQzcl3kMnP9tTsjrm3oI_VxLt3lAGYUMWGInzDKn7jqclEoZzjvXy1QXGFb3dIun8mVBwh-QuS4" +VAPID_PRIVATE="dYuuagbz2CzCnPDFUpO_qkGLBgnN3MEFZQnjXNkc1MY" + +# Production URLs +LITTLESHOP_URL="https://srv1002428.hstgr.cloud:8080" +TELEBOT_WEBHOOK_URL="$LITTLESHOP_URL/api/webhook" + +echo -e "${GREEN}Step 1: Backing up existing configuration...${NC}" +if [ -f "$DEPLOY_DIR/appsettings.Hostinger.json" ]; then + cp "$DEPLOY_DIR/appsettings.Hostinger.json" "$DEPLOY_DIR/appsettings.Hostinger.json.backup.$(date +%Y%m%d-%H%M%S)" + echo "✓ Backup created" +fi + +echo "" +echo -e "${GREEN}Step 2: Configuring LittleShop API...${NC}" + +# Create production appsettings for LittleShop +cat > "$DEPLOY_DIR/appsettings.Hostinger.json" << EOF +{ + "ConnectionStrings": { + "DefaultConnection": "Data Source=/app/data/littleshop.db" + }, + "Jwt": { + "Key": "YourSuperSecretKeyThatIsAtLeast32CharactersLong!", + "Issuer": "LittleShop", + "Audience": "LittleShop", + "ExpiryInHours": 24 + }, + "BTCPayServer": { + "BaseUrl": "$BTCPAY_URL", + "ApiKey": "$BTCPAY_API_KEY", + "StoreId": "$BTCPAY_STORE_ID", + "WebhookSecret": "your-webhook-secret-here" + }, + "RoyalMail": { + "ClientId": "", + "ClientSecret": "", + "BaseUrl": "https://api.royalmail.net/", + "SenderAddress1": "SilverLabs Ltd, 123 Business Street", + "SenderCity": "London", + "SenderPostCode": "SW1A 1AA", + "SenderCountry": "United Kingdom" + }, + "WebPush": { + "VapidPublicKey": "$VAPID_PUBLIC", + "VapidPrivateKey": "$VAPID_PRIVATE", + "Subject": "mailto:admin@littleshop.local" + }, + "TeleBot": { + "ApiUrl": "http://localhost:5010", + "Enabled": true + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning", + "BTCPayServer": "Debug" + } + }, + "AllowedHosts": "*", + "Kestrel": { + "Endpoints": { + "Http": { + "Url": "http://0.0.0.0:8080" + } + } + } +} +EOF + +echo "✓ LittleShop configuration updated" +echo " - Database: /app/data/littleshop.db" +echo " - BTCPay Server: $BTCPAY_URL" +echo " - API Port: 8080" + +echo "" +echo -e "${GREEN}Step 3: Configuring TeleBot...${NC}" + +# Create TeleBot directory if it doesn't exist +mkdir -p "$TELEBOT_DIR" + +# Create production appsettings for TeleBot +cat > "$TELEBOT_DIR/appsettings.json" << EOF +{ + "BotInfo": { + "Name": "LittleShop TeleBot", + "Description": "Privacy-focused e-commerce Telegram bot", + "Version": "1.0.0" + }, + "BotManager": { + "ApiKey": "", + "Comment": "This will be populated after first registration with admin panel" + }, + "Telegram": { + "BotToken": "$TELEGRAM_BOT_TOKEN", + "AdminChatId": "123456789", + "WebhookUrl": "$TELEBOT_WEBHOOK_URL", + "UseWebhook": false, + "Comment": "Bot token configured for production" + }, + "Webhook": { + "Secret": "", + "Comment": "Optional secret key for webhook authentication" + }, + "LittleShop": { + "ApiUrl": "http://localhost:8080", + "OnionUrl": "", + "Username": "admin", + "Password": "admin", + "UseTor": false, + "Comment": "Internal communication on localhost" + }, + "Privacy": { + "Mode": "strict", + "DataRetentionHours": 24, + "SessionTimeoutMinutes": 30, + "EnableAnalytics": false, + "RequirePGPForShipping": false, + "EphemeralByDefault": true, + "EnableTor": false, + "TorSocksPort": 9050, + "TorControlPort": 9051, + "OnionServiceDirectory": "/var/lib/tor/telebot/" + }, + "Redis": { + "ConnectionString": "localhost:6379", + "InstanceName": "TeleBot", + "Enabled": false + }, + "Database": { + "ConnectionString": "Filename=/app/data/telebot.db;Password=;", + "EncryptionKey": "CHANGE_THIS_KEY_IN_PRODUCTION" + }, + "Features": { + "EnableVoiceSearch": false, + "EnableQRCodes": true, + "EnablePGPEncryption": false, + "EnableDisappearingMessages": true, + "EnableOrderMixing": false, + "MixingDelayMinSeconds": 60, + "MixingDelayMaxSeconds": 300 + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "System": "Warning" + }, + "PrivacyMode": true + }, + "Hangfire": { + "Enabled": false, + "DatabasePath": "hangfire.db" + }, + "Cryptocurrencies": [ + "BTC", + "ETH", + "LTC", + "DOGE" + ], + "Kestrel": { + "Endpoints": { + "Http": { + "Url": "http://0.0.0.0:5010" + } + } + } +} +EOF + +echo "✓ TeleBot configuration created" +echo " - Telegram Bot Token: ${TELEGRAM_BOT_TOKEN:0:20}..." +echo " - LittleShop API: http://localhost:8080" +echo " - TeleBot Port: 5010" + +echo "" +echo -e "${GREEN}Step 4: Setting permissions...${NC}" +chmod 600 "$DEPLOY_DIR/appsettings.Hostinger.json" +if [ -f "$TELEBOT_DIR/appsettings.json" ]; then + chmod 600 "$TELEBOT_DIR/appsettings.json" +fi +echo "✓ Permissions set (600 for security)" + +echo "" +echo -e "${GREEN}Step 5: Checking services...${NC}" + +# Check if services are running +if systemctl is-active --quiet littleshop 2>/dev/null; then + echo " LittleShop service: Running" + RESTART_LITTLESHOP=true +else + echo " LittleShop service: Not running" + RESTART_LITTLESHOP=false +fi + +if systemctl is-active --quiet telebot 2>/dev/null; then + echo " TeleBot service: Running" + RESTART_TELEBOT=true +else + echo " TeleBot service: Not running" + RESTART_TELEBOT=false +fi + +echo "" +echo -e "${BLUE}================================================${NC}" +echo -e "${BLUE}Configuration Summary${NC}" +echo -e "${BLUE}================================================${NC}" +echo "" +echo -e "${GREEN}✓ Configuration files updated${NC}" +echo "" +echo "LittleShop API:" +echo " - Database: /app/data/littleshop.db" +echo " - BTCPay Server: $BTCPAY_URL" +echo " - Port: 8080" +echo "" +echo "TeleBot:" +echo " - Bot Token: Configured" +echo " - API Connection: http://localhost:8080" +echo " - Port: 5010" +echo "" +echo "Payment Gateway:" +echo " - Provider: BTCPay Server" +echo " - Store ID: $BTCPAY_STORE_ID" +echo "" + +echo -e "${YELLOW}================================================${NC}" +echo -e "${YELLOW}Next Steps:${NC}" +echo -e "${YELLOW}================================================${NC}" +echo "" +echo "1. Restart services to apply configuration:" +if [ "$RESTART_LITTLESHOP" = true ]; then + echo " systemctl restart littleshop" +else + echo " systemctl start littleshop" +fi + +if [ "$RESTART_TELEBOT" = true ]; then + echo " systemctl restart telebot" +else + echo " systemctl start telebot" +fi +echo "" +echo "2. Register bot in admin panel:" +echo " - Login to: $LITTLESHOP_URL/Admin" +echo " - Username: admin" +echo " - Password: admin" +echo " - Go to: Bots > Create New Bot" +echo " - Enter bot token and save" +echo "" +echo "3. Test end-to-end transaction:" +echo " - Open Telegram and find your bot" +echo " - Send /start" +echo " - Browse products and create an order" +echo " - Verify payment address is generated" +echo "" +echo -e "${GREEN}Configuration complete!${NC}" +echo "" + +# Ask if user wants to restart services now +read -p "Restart services now? (y/n): " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "" + echo "Restarting services..." + + if [ "$RESTART_LITTLESHOP" = true ]; then + systemctl restart littleshop + echo "✓ LittleShop restarted" + else + systemctl start littleshop + echo "✓ LittleShop started" + fi + + sleep 2 + + if [ "$RESTART_TELEBOT" = true ]; then + systemctl restart telebot + echo "✓ TeleBot restarted" + else + systemctl start telebot + echo "✓ TeleBot started" + fi + + echo "" + echo "Checking service status..." + sleep 3 + + if systemctl is-active --quiet littleshop; then + echo -e "${GREEN}✓ LittleShop is running${NC}" + else + echo -e "${RED}✗ LittleShop failed to start${NC}" + echo "Check logs: journalctl -u littleshop -n 50" + fi + + if systemctl is-active --quiet telebot; then + echo -e "${GREEN}✓ TeleBot is running${NC}" + else + echo -e "${RED}✗ TeleBot failed to start${NC}" + echo "Check logs: journalctl -u telebot -n 50" + fi +else + echo "" + echo "Services not restarted. Remember to restart manually." +fi + +echo "" +echo -e "${GREEN}Done!${NC}"