34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { test } from "node:test";
|
|
import { createRequire } from "node:module";
|
|
const require = createRequire(import.meta.url);
|
|
const { isInternal, isExternal } = require("../desktop/navigation.cjs");
|
|
|
|
test("desktop navigation confines remote content to the production origin", () => {
|
|
assert.equal(isInternal("https://minegeo.vercel.app/play?map=1"), true);
|
|
for (const url of [
|
|
"http://minegeo.vercel.app",
|
|
"https://minegeo.vercel.app.evil.test",
|
|
"https://minegeo.vercel.app@evil.test",
|
|
"file:///C:/Windows",
|
|
"javascript:alert(1)",
|
|
"not a URL",
|
|
]) {
|
|
assert.equal(isInternal(url), false, url);
|
|
}
|
|
});
|
|
|
|
test("desktop only opens credential-free HTTPS links in external apps", () => {
|
|
assert.equal(isExternal("https://discord.com/invite/example"), true);
|
|
for (const url of [
|
|
"file:///C:/Windows",
|
|
"javascript:alert(1)",
|
|
"ms-settings:windowsupdate",
|
|
"http://example.com",
|
|
"https://user:password@example.com",
|
|
"not a URL",
|
|
]) {
|
|
assert.equal(isExternal(url), false, url);
|
|
}
|
|
});
|