mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-16 03:31:10 +00:00
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { createDangerousNameMatchingMutableAllowlistWarningCollector } from "openclaw/plugin-sdk/channel-policy";
|
|
|
|
function asObjectRecord(value: unknown): Record<string, unknown> | null {
|
|
return value && typeof value === "object" && !Array.isArray(value)
|
|
? (value as Record<string, unknown>)
|
|
: null;
|
|
}
|
|
|
|
function isIrcMutableAllowEntry(raw: string): boolean {
|
|
const text = raw.trim().toLowerCase();
|
|
if (!text || text === "*") {
|
|
return false;
|
|
}
|
|
|
|
const normalized = text
|
|
.replace(/^irc:/, "")
|
|
.replace(/^user:/, "")
|
|
.trim();
|
|
|
|
return !normalized.includes("!") && !normalized.includes("@");
|
|
}
|
|
|
|
export const collectIrcMutableAllowlistWarnings =
|
|
createDangerousNameMatchingMutableAllowlistWarningCollector({
|
|
channel: "irc",
|
|
detector: isIrcMutableAllowEntry,
|
|
collectLists: (scope) => {
|
|
const lists = [
|
|
{
|
|
pathLabel: `${scope.prefix}.allowFrom`,
|
|
list: scope.account.allowFrom,
|
|
},
|
|
{
|
|
pathLabel: `${scope.prefix}.groupAllowFrom`,
|
|
list: scope.account.groupAllowFrom,
|
|
},
|
|
];
|
|
const groups = asObjectRecord(scope.account.groups);
|
|
if (groups) {
|
|
for (const [groupKey, groupRaw] of Object.entries(groups)) {
|
|
const group = asObjectRecord(groupRaw);
|
|
if (!group) {
|
|
continue;
|
|
}
|
|
lists.push({
|
|
pathLabel: `${scope.prefix}.groups.${groupKey}.allowFrom`,
|
|
list: group.allowFrom,
|
|
});
|
|
}
|
|
}
|
|
return lists;
|
|
},
|
|
});
|