mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 13:10:43 +00:00
Matrix: forward allowPrivateNetwork config to MatrixClient ssrfPolicy
When createMatrixClient received allowPrivateNetwork=true but no explicit ssrfPolicy, the MatrixClient was created without SSRF policy, blocking connections to homeservers on private IPs (192.168.x.x, localhost). Derive ssrfPolicy from allowPrivateNetwork when no explicit policy is provided, using ssrfPolicyFromDangerouslyAllowPrivateNetwork. Fixes #68299
This commit is contained in:
committed by
Gustavo Madeira Santana
parent
dc3b10285d
commit
480fdf86f7
@@ -86,6 +86,61 @@ describe("createMatrixClient", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("derives ssrfPolicy from allowPrivateNetwork when no explicit policy is provided", async () => {
|
||||
await createMatrixClient({
|
||||
homeserver: "https://matrix.example.org",
|
||||
userId: "@bot:example.org",
|
||||
accessToken: "tok",
|
||||
persistStorage: false,
|
||||
allowPrivateNetwork: true,
|
||||
});
|
||||
|
||||
expect(MatrixClientMock).toHaveBeenCalledWith(
|
||||
"https://matrix.example.org",
|
||||
"tok",
|
||||
expect.objectContaining({
|
||||
ssrfPolicy: { allowPrivateNetwork: true },
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it("prefers explicit ssrfPolicy over allowPrivateNetwork", async () => {
|
||||
const explicitPolicy = { allowPrivateNetwork: true, customField: "test" };
|
||||
await createMatrixClient({
|
||||
homeserver: "https://matrix.example.org",
|
||||
userId: "@bot:example.org",
|
||||
accessToken: "tok",
|
||||
persistStorage: false,
|
||||
allowPrivateNetwork: false,
|
||||
ssrfPolicy: explicitPolicy as never,
|
||||
});
|
||||
|
||||
expect(MatrixClientMock).toHaveBeenCalledWith(
|
||||
"https://matrix.example.org",
|
||||
"tok",
|
||||
expect.objectContaining({
|
||||
ssrfPolicy: explicitPolicy,
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it("leaves ssrfPolicy undefined when allowPrivateNetwork is falsy and no explicit policy", async () => {
|
||||
await createMatrixClient({
|
||||
homeserver: "https://matrix.example.org",
|
||||
userId: "@bot:example.org",
|
||||
accessToken: "tok",
|
||||
persistStorage: false,
|
||||
});
|
||||
|
||||
expect(MatrixClientMock).toHaveBeenCalledWith(
|
||||
"https://matrix.example.org",
|
||||
"tok",
|
||||
expect.objectContaining({
|
||||
ssrfPolicy: undefined,
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it("skips persistent storage wiring when persistence is disabled", async () => {
|
||||
await createMatrixClient({
|
||||
homeserver: "https://matrix.example.org",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import fs from "node:fs";
|
||||
import type { PinnedDispatcherPolicy } from "openclaw/plugin-sdk/ssrf-dispatcher";
|
||||
import { ssrfPolicyFromDangerouslyAllowPrivateNetwork } from "openclaw/plugin-sdk/ssrf-policy";
|
||||
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
||||
import type { SsrFPolicy } from "../../runtime-api.js";
|
||||
import type { MatrixClient } from "../sdk.js";
|
||||
@@ -95,7 +96,8 @@ export async function createMatrixClient(params: {
|
||||
idbSnapshotPath: storagePaths?.idbSnapshotPath,
|
||||
cryptoDatabasePrefix,
|
||||
autoBootstrapCrypto: params.autoBootstrapCrypto,
|
||||
ssrfPolicy: params.ssrfPolicy,
|
||||
ssrfPolicy:
|
||||
params.ssrfPolicy ?? ssrfPolicyFromDangerouslyAllowPrivateNetwork(params.allowPrivateNetwork),
|
||||
dispatcherPolicy: params.dispatcherPolicy,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user