diff --git a/extensions/matrix/src/matrix/client.test.ts b/extensions/matrix/src/matrix/client.test.ts index 3c9f625c70d..15a1fac480e 100644 --- a/extensions/matrix/src/matrix/client.test.ts +++ b/extensions/matrix/src/matrix/client.test.ts @@ -718,6 +718,15 @@ describe("resolveMatrixConfig", () => { "Matrix homeserver must use https:// unless it targets a private or loopback host", ); }); + + it("accepts internal http hostnames when the private-network opt-in is explicit", async () => { + await expect( + resolveValidatedMatrixHomeserverUrl("http://localhost.localdomain:8008", { + dangerouslyAllowPrivateNetwork: true, + lookupFn: createLookupFn([{ address: "127.0.0.1", family: 4 }]), + }), + ).resolves.toBe("http://localhost.localdomain:8008"); + }); }); describe("resolveMatrixAuth", () => { diff --git a/extensions/matrix/src/matrix/client/config.ts b/extensions/matrix/src/matrix/client/config.ts index 1b29bd30f1e..12652525b3f 100644 --- a/extensions/matrix/src/matrix/client/config.ts +++ b/extensions/matrix/src/matrix/client/config.ts @@ -510,10 +510,16 @@ export async function resolveValidatedMatrixHomeserverUrl( lookupFn?: LookupFn; }, ): Promise { - const normalized = validateMatrixHomeserverUrl(homeserver, opts); + const allowPrivateNetwork = + typeof opts?.dangerouslyAllowPrivateNetwork === "boolean" + ? opts.dangerouslyAllowPrivateNetwork + : opts?.allowPrivateNetwork; + const normalized = validateMatrixHomeserverUrl(homeserver, { + allowPrivateNetwork, + }); await assertHttpUrlTargetsPrivateNetwork(normalized, { dangerouslyAllowPrivateNetwork: opts?.dangerouslyAllowPrivateNetwork, - allowPrivateNetwork: opts?.allowPrivateNetwork, + allowPrivateNetwork, lookupFn: opts?.lookupFn, errorMessage: MATRIX_HTTP_HOMESERVER_ERROR, });