

























@@ -624,6 +624,9 @@ describe("workspace .env blocklist completeness", () => {
624624"OPENCLAW_ALLOW_INSECURE_PRIVATE_WS",
625625"OPENCLAW_BROWSER_EXECUTABLE_PATH",
626626"EXAMPLE_API_HOST",
627+"IRC_HOST",
628+"MATTERMOST_URL",
629+"MATRIX_HOMESERVER",
627630"MINIMAX_API_HOST",
628631"BROWSER_EXECUTABLE_PATH",
629632"PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH",
@@ -643,6 +646,8 @@ describe("workspace .env blocklist completeness", () => {
643646"OPENCLAW_NODE_EXEC_HOST",
644647"OPENCLAW_NODE_EXEC_FALLBACK",
645648"OPENCLAW_ALLOW_PROJECT_LOCAL_BIN",
649+"SYNOLOGY_CHAT_INCOMING_URL",
650+"SYNOLOGY_NAS_HOST",
646651];
647652648653await writeEnvFile(
@@ -684,6 +689,62 @@ describe("workspace .env blocklist completeness", () => {
684689});
685690});
686691692+it("blocks bundled connector endpoint vars from workspace .env", async () => {
693+await withIsolatedEnvAndCwd(async () => {
694+await withDotEnvFixture(async ({ cwdDir }) => {
695+await writeEnvFile(
696+path.join(cwdDir, ".env"),
697+[
698+"MATRIX_HOMESERVER=https://evil-matrix.example.com",
699+"MATTERMOST_URL=https://evil-mattermost.example.com",
700+"IRC_HOST=evil-irc.example.com",
701+"SYNOLOGY_CHAT_INCOMING_URL=https://evil-synology.example.com/incoming",
702+"SYNOLOGY_NAS_HOST=evil-synology.example.com",
703+"SAFE_PROVIDER_URL=https://allowed.example.com",
704+].join("\n"),
705+);
706+707+delete process.env.MATRIX_HOMESERVER;
708+delete process.env.MATTERMOST_URL;
709+delete process.env.IRC_HOST;
710+delete process.env.SYNOLOGY_CHAT_INCOMING_URL;
711+delete process.env.SYNOLOGY_NAS_HOST;
712+delete process.env.SAFE_PROVIDER_URL;
713+714+loadWorkspaceDotEnvFile(path.join(cwdDir, ".env"), { quiet: true });
715+716+expect(process.env.MATRIX_HOMESERVER).toBeUndefined();
717+expect(process.env.MATTERMOST_URL).toBeUndefined();
718+expect(process.env.IRC_HOST).toBeUndefined();
719+expect(process.env.SYNOLOGY_CHAT_INCOMING_URL).toBeUndefined();
720+expect(process.env.SYNOLOGY_NAS_HOST).toBeUndefined();
721+expect(process.env.SAFE_PROVIDER_URL).toBe("https://allowed.example.com");
722+});
723+});
724+});
725+726+it("blocks Matrix per-account scoped homeserver vars from workspace .env", async () => {
727+await withIsolatedEnvAndCwd(async () => {
728+await withDotEnvFixture(async ({ cwdDir }) => {
729+await writeEnvFile(
730+path.join(cwdDir, ".env"),
731+[
732+"MATRIX_DEFAULT_HOMESERVER=https://evil-default.example.com",
733+"MATRIX_OPS_HOMESERVER=https://evil-ops.example.com",
734+].join("\n"),
735+);
736+737+delete process.env.MATRIX_DEFAULT_HOMESERVER;
738+delete process.env.MATRIX_OPS_HOMESERVER;
739+740+loadWorkspaceDotEnvFile(path.join(cwdDir, ".env"), { quiet: true });
741+742+expect(process.env.MATRIX_DEFAULT_HOMESERVER).toBeUndefined();
743+expect(process.env.MATRIX_OPS_HOMESERVER).toBeUndefined();
744+});
745+});
746+});
747+687748it("blocks generic endpoint-routing suffixes from workspace .env", async () => {
688749await withIsolatedEnvAndCwd(async () => {
689750await withDotEnvFixture(async ({ cwdDir }) => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。