mirror of
https://github.com/wassname/pi-telegram.git
synced 2026-06-27 18:24:59 +08:00
15fa661b7a
The first-DM auto-pair behavior combined with ! shell passthrough meant
the first account to DM the bot gained arbitrary shell access. This
removes that footgun entirely.
- allowedUserId must be set before polling starts; missing config blocks
polling with a TUI warning rather than silently accepting any sender
- TELEGRAM_ALLOWED_USER_ID env var is read on session start and
overwrites the saved config value, so rotating the allowed user is a
restart away
- /telegram-setup now prompts for a numeric user ID after the bot token
if one is not already configured
- Denied senders receive an auth error reply; their numeric ID is also
logged to the pi TUI as a warning so operators can identify themselves
on a fresh install without needing @userinfobot
- Dropped the {kind: "pair"} authorization state entirely; undefined
allowedUserId now produces deny, not pair
- Removed pairTelegramUserIfNeeded, shouldPair, shouldNotifyPaired
Existing installs with allowedUserId already in telegram.json are
unaffected. Fresh installs require explicit configuration.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
/**
|
|
* Telegram setup prompt helpers
|
|
* Computes token-prefill defaults and prompt mode selection for /telegram-setup
|
|
*/
|
|
|
|
export interface TelegramBotTokenPromptSpec {
|
|
method: "input" | "editor";
|
|
value: string;
|
|
}
|
|
|
|
export const TELEGRAM_BOT_TOKEN_INPUT_PLACEHOLDER = "123456:ABCDEF...";
|
|
export const TELEGRAM_BOT_TOKEN_ENV_VARS = [
|
|
"TELEGRAM_BOT_TOKEN",
|
|
"TELEGRAM_BOT_KEY",
|
|
"TELEGRAM_TOKEN",
|
|
"TELEGRAM_KEY",
|
|
] as const;
|
|
|
|
export const TELEGRAM_ALLOWED_USER_ID_ENV_VAR = "TELEGRAM_ALLOWED_USER_ID";
|
|
|
|
export function readAllowedUserIdFromEnv(
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
): number | undefined {
|
|
const raw = env[TELEGRAM_ALLOWED_USER_ID_ENV_VAR]?.trim();
|
|
if (!raw) return undefined;
|
|
const parsed = Number(raw);
|
|
if (!Number.isInteger(parsed) || parsed <= 0) {
|
|
throw new Error(
|
|
`${TELEGRAM_ALLOWED_USER_ID_ENV_VAR}="${raw}" is not a valid Telegram user ID (must be a positive integer)`,
|
|
);
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
export function getTelegramBotTokenInputDefault(
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
configToken?: string,
|
|
): string {
|
|
const trimmedConfigToken = configToken?.trim();
|
|
if (trimmedConfigToken) return trimmedConfigToken;
|
|
for (const key of TELEGRAM_BOT_TOKEN_ENV_VARS) {
|
|
const value = env[key]?.trim();
|
|
if (value) return value;
|
|
}
|
|
return TELEGRAM_BOT_TOKEN_INPUT_PLACEHOLDER;
|
|
}
|
|
|
|
export function getTelegramBotTokenPromptSpec(
|
|
env: NodeJS.ProcessEnv = process.env,
|
|
configToken?: string,
|
|
): TelegramBotTokenPromptSpec {
|
|
const value = getTelegramBotTokenInputDefault(env, configToken);
|
|
return {
|
|
method: value === TELEGRAM_BOT_TOKEN_INPUT_PLACEHOLDER ? "input" : "editor",
|
|
value,
|
|
};
|
|
}
|