mirror of https://github.com/openclaw/openclaw.git
telegram: tighten topic alias validation and pass cfg
This commit is contained in:
parent
c065d432f0
commit
d8fae6c4d7
|
|
@ -80,10 +80,31 @@ function readTelegramMessageIdParam(
|
||||||
}
|
}
|
||||||
|
|
||||||
function readTelegramTopicIdParam(params: Record<string, unknown>): number | undefined {
|
function readTelegramTopicIdParam(params: Record<string, unknown>): number | undefined {
|
||||||
return (
|
const hasTopicIdParam = Object.hasOwn(params, "topicId") || Object.hasOwn(params, "topic_id");
|
||||||
readNumberParam(params, "topicId", { integer: true, strict: true }) ??
|
const topicId = readNumberParam(params, "topicId", {
|
||||||
readNumberParam(params, "threadId", { integer: true, strict: true })
|
integer: true,
|
||||||
);
|
strict: true,
|
||||||
|
strictInteger: true,
|
||||||
|
});
|
||||||
|
if (hasTopicIdParam && typeof topicId !== "number") {
|
||||||
|
throw new Error("topicId must be a valid integer when provided.");
|
||||||
|
}
|
||||||
|
if (typeof topicId === "number") {
|
||||||
|
return topicId;
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasThreadIdParam =
|
||||||
|
Object.hasOwn(params, "threadId") || Object.hasOwn(params, "thread_id");
|
||||||
|
const threadId = readNumberParam(params, "threadId", {
|
||||||
|
integer: true,
|
||||||
|
strict: true,
|
||||||
|
strictInteger: true,
|
||||||
|
});
|
||||||
|
if (hasThreadIdParam && typeof threadId !== "number") {
|
||||||
|
throw new Error("threadId must be a valid integer when provided.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return threadId;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const telegramMessageActions: ChannelMessageActionAdapter = {
|
export const telegramMessageActions: ChannelMessageActionAdapter = {
|
||||||
|
|
|
||||||
|
|
@ -1443,6 +1443,7 @@ export async function sendPollTelegram(
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
type TelegramDeleteForumTopicOpts = {
|
type TelegramDeleteForumTopicOpts = {
|
||||||
|
cfg?: ReturnType<typeof loadConfig>;
|
||||||
token?: string;
|
token?: string;
|
||||||
accountId?: string;
|
accountId?: string;
|
||||||
verbose?: boolean;
|
verbose?: boolean;
|
||||||
|
|
|
||||||
|
|
@ -629,7 +629,7 @@ describe("handleTelegramAction", () => {
|
||||||
expect(deleteForumTopicTelegram).toHaveBeenCalledWith(
|
expect(deleteForumTopicTelegram).toHaveBeenCalledWith(
|
||||||
"-100123",
|
"-100123",
|
||||||
271,
|
271,
|
||||||
expect.objectContaining({ token: "tok" }),
|
expect.objectContaining({ cfg, token: "tok" }),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -359,6 +359,7 @@ export async function handleTelegramAction(
|
||||||
required: true,
|
required: true,
|
||||||
integer: true,
|
integer: true,
|
||||||
strict: true,
|
strict: true,
|
||||||
|
strictInteger: true,
|
||||||
});
|
});
|
||||||
const token = resolveTelegramToken(cfg, { accountId }).token;
|
const token = resolveTelegramToken(cfg, { accountId }).token;
|
||||||
if (!token) {
|
if (!token) {
|
||||||
|
|
@ -367,6 +368,7 @@ export async function handleTelegramAction(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
await deleteForumTopicTelegram(chatId ?? "", topicId ?? 0, {
|
await deleteForumTopicTelegram(chatId ?? "", topicId ?? 0, {
|
||||||
|
cfg,
|
||||||
token,
|
token,
|
||||||
accountId: accountId ?? undefined,
|
accountId: accountId ?? undefined,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -953,7 +953,53 @@ describe("telegramMessageActions", () => {
|
||||||
},
|
},
|
||||||
cfg,
|
cfg,
|
||||||
}),
|
}),
|
||||||
).rejects.toThrow(/threadId\/topicId is required for action=topic-delete/i);
|
).rejects.toThrow(/topicId must be a valid integer when provided/i);
|
||||||
|
|
||||||
|
expect(handleTelegramAction).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("rejects malformed topicId even when threadId alias is valid", async () => {
|
||||||
|
const cfg = telegramCfg();
|
||||||
|
const handleAction = telegramMessageActions.handleAction;
|
||||||
|
if (!handleAction) {
|
||||||
|
throw new Error("telegram handleAction unavailable");
|
||||||
|
}
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
handleAction({
|
||||||
|
channel: "telegram",
|
||||||
|
action: "topic-delete",
|
||||||
|
params: {
|
||||||
|
to: "-1001234567890",
|
||||||
|
topicId: "oops",
|
||||||
|
threadId: 271,
|
||||||
|
},
|
||||||
|
cfg,
|
||||||
|
}),
|
||||||
|
).rejects.toThrow(/topicId must be a valid integer when provided/i);
|
||||||
|
|
||||||
|
expect(handleTelegramAction).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("rejects malformed delete topicId even when threadId alias is valid", async () => {
|
||||||
|
const cfg = telegramCfg();
|
||||||
|
const handleAction = telegramMessageActions.handleAction;
|
||||||
|
if (!handleAction) {
|
||||||
|
throw new Error("telegram handleAction unavailable");
|
||||||
|
}
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
handleAction({
|
||||||
|
channel: "telegram",
|
||||||
|
action: "delete",
|
||||||
|
params: {
|
||||||
|
to: "-1001234567890",
|
||||||
|
topicId: "oops",
|
||||||
|
threadId: 271,
|
||||||
|
},
|
||||||
|
cfg,
|
||||||
|
}),
|
||||||
|
).rejects.toThrow(/topicId must be a valid integer when provided/i);
|
||||||
|
|
||||||
expect(handleTelegramAction).not.toHaveBeenCalled();
|
expect(handleTelegramAction).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue