From c1169032ee0809fcc0f52f8e7d1b8cdfd4c1f375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Fri, 8 May 2026 17:51:50 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20SOCKS5=20?= =?UTF-8?q?=D0=B2=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/server.js | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/backend/src/server.js b/backend/src/server.js index d7970d3..124bbf7 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -42,6 +42,48 @@ await app.register(websocket); const clients = new Map(); +function validateSocks5Settings(settings) { + const proxy = settings.proxy || {}; + + if (!proxy.enabled) { + return { + ok: true, + status: 'disabled', + message: 'SOCKS5 выключен. Telegram будет подключаться напрямую.' + }; + } + + if (proxy.type !== 'socks5') { + return { + ok: false, + status: 'invalid', + message: 'Сейчас поддерживается только socks5.' + }; + } + + if (!proxy.host) { + return { + ok: false, + status: 'invalid', + message: 'Укажите host SOCKS5 прокси.' + }; + } + + if (!Number.isInteger(proxy.port) || proxy.port < 1 || proxy.port > 65535) { + return { + ok: false, + status: 'invalid', + message: 'Порт SOCKS5 должен быть от 1 до 65535.' + }; + } + + return { + ok: true, + status: 'configured', + message: `SOCKS5 включен: ${proxy.host}:${proxy.port}. Полная проверка Telegram будет доступна после подключения bot bridge.` + }; +} + app.get('/health', async () => ({ ok: true, service: 'wschat-backend', @@ -88,6 +130,16 @@ app.post('/api/admin/telegram/settings', async (request, reply) => { } }); +app.post('/api/admin/telegram/test-proxy', async () => { + const settings = getTelegramSettings({ revealSecrets: true }); + const result = validateSocks5Settings(settings); + + return { + ...result, + settings: getTelegramSettings() + }; +}); + app.post('/api/widget/message', async (request) => { const body = request.body || {}; const siteId = String(body.siteId || body.widgetKey || '');