mirror of
https://github.com/openclaw/openclaw.git
synced 2026-02-19 18:39:20 -05:00
fix (commands): keep webchat auth on internal provider
This commit is contained in:
@@ -4,6 +4,7 @@ import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { MsgContext } from "./templating.js";
|
||||
import { getChannelDock, listChannelDocks } from "../channels/dock.js";
|
||||
import { normalizeAnyChannelId } from "../channels/registry.js";
|
||||
import { INTERNAL_MESSAGE_CHANNEL, normalizeMessageChannel } from "../utils/message-channel.js";
|
||||
|
||||
export type CommandAuthorization = {
|
||||
providerId?: ChannelId;
|
||||
@@ -16,7 +17,15 @@ export type CommandAuthorization = {
|
||||
};
|
||||
|
||||
function resolveProviderFromContext(ctx: MsgContext, cfg: OpenClawConfig): ChannelId | undefined {
|
||||
const explicitMessageChannel =
|
||||
normalizeMessageChannel(ctx.Provider) ??
|
||||
normalizeMessageChannel(ctx.Surface) ??
|
||||
normalizeMessageChannel(ctx.OriginatingChannel);
|
||||
if (explicitMessageChannel === INTERNAL_MESSAGE_CHANNEL) {
|
||||
return undefined;
|
||||
}
|
||||
const direct =
|
||||
normalizeAnyChannelId(explicitMessageChannel ?? undefined) ??
|
||||
normalizeAnyChannelId(ctx.Provider) ??
|
||||
normalizeAnyChannelId(ctx.Surface) ??
|
||||
normalizeAnyChannelId(ctx.OriginatingChannel);
|
||||
@@ -27,7 +36,13 @@ function resolveProviderFromContext(ctx: MsgContext, cfg: OpenClawConfig): Chann
|
||||
.filter((value): value is string => Boolean(value?.trim()))
|
||||
.flatMap((value) => value.split(":").map((part) => part.trim()));
|
||||
for (const candidate of candidates) {
|
||||
const normalized = normalizeAnyChannelId(candidate);
|
||||
const normalizedCandidateChannel = normalizeMessageChannel(candidate);
|
||||
if (normalizedCandidateChannel === INTERNAL_MESSAGE_CHANNEL) {
|
||||
return undefined;
|
||||
}
|
||||
const normalized =
|
||||
normalizeAnyChannelId(normalizedCandidateChannel ?? undefined) ??
|
||||
normalizeAnyChannelId(candidate);
|
||||
if (normalized) {
|
||||
return normalized;
|
||||
}
|
||||
|
||||
@@ -212,6 +212,28 @@ describe("resolveCommandAuthorization", () => {
|
||||
expect(auth.ownerList).toEqual(["123"]);
|
||||
});
|
||||
|
||||
it("does not infer a provider from channel allowlists for webchat command contexts", () => {
|
||||
const cfg = {
|
||||
channels: { whatsapp: { allowFrom: ["+15551234567"] } },
|
||||
} as OpenClawConfig;
|
||||
|
||||
const ctx = {
|
||||
Provider: "webchat",
|
||||
Surface: "webchat",
|
||||
OriginatingChannel: "webchat",
|
||||
SenderId: "openclaw-control-ui",
|
||||
} as MsgContext;
|
||||
|
||||
const auth = resolveCommandAuthorization({
|
||||
ctx,
|
||||
cfg,
|
||||
commandAuthorized: true,
|
||||
});
|
||||
|
||||
expect(auth.providerId).toBeUndefined();
|
||||
expect(auth.isAuthorizedSender).toBe(true);
|
||||
});
|
||||
|
||||
describe("commands.allowFrom", () => {
|
||||
const commandsAllowFromConfig = {
|
||||
commands: {
|
||||
|
||||
Reference in New Issue
Block a user