Files
Termix/scripts/electron-external-login.test.ts
T

42 lines
1.2 KiB
TypeScript

import { createRequire } from "node:module";
import { describe, expect, it } from "vitest";
const require = createRequire(import.meta.url);
const { isExternalLoginUrl, isCallbackPort } =
require("../electron/external-login.cjs") as {
isExternalLoginUrl: (value: unknown) => boolean;
isCallbackPort: (value: unknown) => boolean;
};
describe("Electron external login", () => {
it.each([
"https://idp.example.com/authorize?client_id=termix",
"http://keycloak.lan:8080/realms/home/protocol/openid-connect/auth",
])("opens web login URLs: %s", (url) => {
expect(isExternalLoginUrl(url)).toBe(true);
});
it.each([
"file:///C:/Windows/System32/calc.exe",
"smb://attacker/share",
"ms-msdt:/id PCWDiagnostic",
"javascript:alert(1)",
"not a url",
undefined,
])("refuses other schemes: %s", (url) => {
expect(isExternalLoginUrl(url)).toBe(false);
});
it("accepts the ports the login screen picks", () => {
expect(isCallbackPort(17832)).toBe(true);
expect(isCallbackPort(17931)).toBe(true);
});
it.each([0, 80, 65536, 17832.5, "17832", NaN, undefined])(
"refuses callback port %s",
(port) => {
expect(isCallbackPort(port)).toBe(false);
},
);
});