validate Telegram bot token in production
This commit is contained in:
@@ -1958,3 +1958,9 @@ Doğrulama: 284 test geçti, üretim derlemesi başarılı.
|
|||||||
Resend gönderiminden önce alıcılar (en fazla 50 ve metin), konu ve HTML/metin gövdesi tip/uzunluk kontrollerinden geçiyor; trim edilmiş değerler sağlayıcıya gönderiliyor.
|
Resend gönderiminden önce alıcılar (en fazla 50 ve metin), konu ve HTML/metin gövdesi tip/uzunluk kontrollerinden geçiyor; trim edilmiş değerler sağlayıcıya gönderiliyor.
|
||||||
|
|
||||||
Doğrulama: 284 test geçti, üretim derlemesi başarılı.
|
Doğrulama: 284 test geçti, üretim derlemesi başarılı.
|
||||||
|
|
||||||
|
### 2026-09-06 · Telegram üretim token doğrulaması
|
||||||
|
|
||||||
|
Telegram kanalı üretimde artık yalnızca BotFather biçimindeki tokenlarla etkin görünüyor; eksik veya placeholder değerler entegrasyonu yanlışlıkla aktif göstermiyor. Test/geliştirme ortamlarında sentetik tokenlarla mevcut entegrasyon testleri korunuyor.
|
||||||
|
|
||||||
|
Doğrulama: 285 test geçti, üretim derlemesi başarılı.
|
||||||
|
|||||||
+5
-1
@@ -10,7 +10,11 @@
|
|||||||
const API = () => `https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}`;
|
const API = () => `https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}`;
|
||||||
|
|
||||||
export function telegramConfigured() {
|
export function telegramConfigured() {
|
||||||
return Boolean(process.env.TELEGRAM_BOT_TOKEN);
|
const token = String(process.env.TELEGRAM_BOT_TOKEN || '').trim();
|
||||||
|
if (!token) return false;
|
||||||
|
// Üretimde placeholder veya hatalı token ile kanalın aktif görünmesini engelle.
|
||||||
|
if (process.env.NODE_ENV === 'production') return /^\d{6,}:[A-Za-z0-9_-]{20,}$/.test(token);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let botOnbellek = { ad: null, zaman: 0 };
|
let botOnbellek = { ad: null, zaman: 0 };
|
||||||
|
|||||||
@@ -4,13 +4,27 @@ import {mkdtempSync,rmSync} from 'node:fs';
|
|||||||
import {join} from 'node:path';
|
import {join} from 'node:path';
|
||||||
import {tmpdir} from 'node:os';
|
import {tmpdir} from 'node:os';
|
||||||
import {createTelegramLinker} from '../server/telegram-link.mjs';
|
import {createTelegramLinker} from '../server/telegram-link.mjs';
|
||||||
import {kodIleBagla} from '../server/telegram.mjs';
|
import {kodIleBagla,telegramConfigured} from '../server/telegram.mjs';
|
||||||
const directory=mkdtempSync(join(tmpdir(),'telegram-link-'));
|
const directory=mkdtempSync(join(tmpdir(),'telegram-link-'));
|
||||||
process.env.IHALEIST_USER_DATA_DIR=directory;
|
process.env.IHALEIST_USER_DATA_DIR=directory;
|
||||||
const store=await import('../server/user-store.mjs');
|
const store=await import('../server/user-store.mjs');
|
||||||
after(()=>rmSync(directory,{recursive:true,force:true}));
|
after(()=>rmSync(directory,{recursive:true,force:true}));
|
||||||
const found={chatId:'123',ad:'Test'};
|
const found={chatId:'123',ad:'Test'};
|
||||||
|
|
||||||
|
test('production rejects malformed Telegram bot token values',()=>{
|
||||||
|
const oldNode=process.env.NODE_ENV,oldToken=process.env.TELEGRAM_BOT_TOKEN;
|
||||||
|
process.env.NODE_ENV='production';
|
||||||
|
try {
|
||||||
|
process.env.TELEGRAM_BOT_TOKEN='synthetic-token';
|
||||||
|
assert.equal(telegramConfigured(),false);
|
||||||
|
process.env.TELEGRAM_BOT_TOKEN='123456:abcdefghijklmnopqrstuvwxyz';
|
||||||
|
assert.equal(telegramConfigured(),true);
|
||||||
|
} finally {
|
||||||
|
if(oldNode===undefined)delete process.env.NODE_ENV;else process.env.NODE_ENV=oldNode;
|
||||||
|
if(oldToken===undefined)delete process.env.TELEGRAM_BOT_TOKEN;else process.env.TELEGRAM_BOT_TOKEN=oldToken;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
test('server challenge belongs to its account, expires, rotates and is consumed once',async()=>{
|
test('server challenge belongs to its account, expires, rotates and is consumed once',async()=>{
|
||||||
let time=1000000;const linker=createTelegramLinker(store,()=>time),email='link@example.test';
|
let time=1000000;const linker=createTelegramLinker(store,()=>time),email='link@example.test';
|
||||||
const first=linker.issue(email);assert.match(first.kod,/^[a-f0-9]{48}$/);
|
const first=linker.issue(email);assert.match(first.kod,/^[a-f0-9]{48}$/);
|
||||||
|
|||||||
Reference in New Issue
Block a user