mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-03 08:54:07 +00:00
fix: parse slack cache ttl strictly
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import type { SlackMonitorContext } from "./context.js";
|
||||
|
||||
const readChannelIngressStoreAllowFromForDmPolicyMock = vi.hoisted(() => vi.fn());
|
||||
let authorizeSlackBotRoomMessage: typeof import("./auth.js").authorizeSlackBotRoomMessage;
|
||||
let authorizeSlackSystemEventSender: typeof import("./auth.js").authorizeSlackSystemEventSender;
|
||||
let clearSlackAllowFromCacheForTest: typeof import("./auth.js").clearSlackAllowFromCacheForTest;
|
||||
let resolveSlackEffectiveAllowFrom: typeof import("./auth.js").resolveSlackEffectiveAllowFrom;
|
||||
@@ -109,12 +110,54 @@ describe("resolveSlackEffectiveAllowFrom", () => {
|
||||
|
||||
describe("authorizeSlackSystemEventSender", () => {
|
||||
beforeAll(async () => {
|
||||
({ authorizeSlackSystemEventSender, clearSlackAllowFromCacheForTest } =
|
||||
await import("./auth.js"));
|
||||
({
|
||||
authorizeSlackBotRoomMessage,
|
||||
authorizeSlackSystemEventSender,
|
||||
clearSlackAllowFromCacheForTest,
|
||||
} = await import("./auth.js"));
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
clearSlackAllowFromCacheForTest();
|
||||
delete process.env.OPENCLAW_SLACK_CHANNEL_MEMBERS_CACHE_TTL_MS;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
delete process.env.OPENCLAW_SLACK_CHANNEL_MEMBERS_CACHE_TTL_MS;
|
||||
});
|
||||
|
||||
it("ignores non-decimal channel member cache ttl env values", async () => {
|
||||
process.env.OPENCLAW_SLACK_CHANNEL_MEMBERS_CACHE_TTL_MS = "0x0";
|
||||
const conversationsMembers = vi.fn(async () => ({
|
||||
members: ["UOWNER"],
|
||||
response_metadata: {},
|
||||
}));
|
||||
const ctx = {
|
||||
allowFrom: [],
|
||||
accountId: "main",
|
||||
allowNameMatching: false,
|
||||
app: { client: { conversations: { members: conversationsMembers } } },
|
||||
botToken: "xoxb-test",
|
||||
} as unknown as SlackMonitorContext;
|
||||
|
||||
await expect(
|
||||
authorizeSlackBotRoomMessage({
|
||||
ctx,
|
||||
channelId: "C1",
|
||||
senderId: "U_BOT",
|
||||
allowFromLower: ["uowner"],
|
||||
}),
|
||||
).resolves.toBe(true);
|
||||
await expect(
|
||||
authorizeSlackBotRoomMessage({
|
||||
ctx,
|
||||
channelId: "C1",
|
||||
senderId: "U_BOT",
|
||||
allowFromLower: ["uowner"],
|
||||
}),
|
||||
).resolves.toBe(true);
|
||||
|
||||
expect(conversationsMembers).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("keeps non-interactive channel senders open when only global allowFrom is configured", async () => {
|
||||
|
||||
@@ -145,8 +145,8 @@ function readSlackCacheTtlMs(envName: string, fallback: number): number {
|
||||
if (!raw) {
|
||||
return fallback;
|
||||
}
|
||||
const parsed = Number(raw);
|
||||
return Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed)) : fallback;
|
||||
const parsed = /^\d+$/.test(raw) ? Number(raw) : Number.NaN;
|
||||
return Number.isSafeInteger(parsed) ? parsed : fallback;
|
||||
}
|
||||
|
||||
function getChannelMembersCache(
|
||||
|
||||
Reference in New Issue
Block a user