forked from svrjs/svrjs
165 lines
5.6 KiB
JavaScript
165 lines
5.6 KiB
JavaScript
const {
|
|
getInitializePath,
|
|
isForbiddenPath,
|
|
isIndexOfForbiddenPath,
|
|
forbiddenPaths
|
|
} = require("../../src/utils/forbiddenPaths.js");
|
|
const os = require("os");
|
|
|
|
jest.mock("os", () => ({
|
|
platform: jest.fn()
|
|
}));
|
|
jest.mock("path", () => {
|
|
const path = jest.requireActual("path");
|
|
const os = require("os");
|
|
return {
|
|
isAbsolute: (...params) =>
|
|
(os.platform() == "win32" ? path.win32 : path.posix).isAbsolute(
|
|
...params
|
|
),
|
|
relative: (...params) =>
|
|
(os.platform() == "win32" ? path.win32 : path.posix).relative(...params)
|
|
};
|
|
});
|
|
|
|
describe("Forbidden paths handling", () => {
|
|
beforeEach(() => {
|
|
os.platform.mockReset();
|
|
forbiddenPaths.config = getInitializePath("./config.json");
|
|
forbiddenPaths.serverSideScriptDirectories = [];
|
|
forbiddenPaths.serverSideScriptDirectories.push(
|
|
getInitializePath("./node_modules")
|
|
);
|
|
forbiddenPaths.serverSideScriptDirectories.push(
|
|
getInitializePath("./mods")
|
|
);
|
|
process.cwd = () => "/usr/lib/mocksvrjs";
|
|
process.dirname = "/usr/lib/mocksvrjs";
|
|
process.filename = "/usr/lib/mocksvrjs/svr.js";
|
|
});
|
|
|
|
describe("getInitializePath", () => {
|
|
test("should return the correct path on Unix", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(getInitializePath("./config.json")).toBe("/config.json");
|
|
});
|
|
|
|
test("should return the correct path on Windows", () => {
|
|
process.cwd = () => "C:\\mocksvrjs";
|
|
process.dirname = "C:\\mocksvrjs";
|
|
process.filename = "C:\\mocksvrjs\\svr.js";
|
|
os.platform.mockReturnValue("win32");
|
|
expect(getInitializePath("./config.json")).toBe("/config.json");
|
|
});
|
|
|
|
test("should handle absolute paths on Unix", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(getInitializePath("/absolute/path")).toBe(
|
|
"/../../../absolute/path"
|
|
);
|
|
});
|
|
|
|
test("should handle absolute paths on Windows", () => {
|
|
process.cwd = () => "C:\\mocksvrjs";
|
|
process.dirname = "C:\\mocksvrjs";
|
|
process.filename = "C:\\mocksvrjs\\svr.js";
|
|
os.platform.mockReturnValue("win32");
|
|
expect(getInitializePath("C:\\absolute\\path")).toBe("/../absolute/path");
|
|
});
|
|
|
|
test("should handle relative paths on Unix", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(getInitializePath("./relative/path")).toBe("/relative/path");
|
|
});
|
|
|
|
test("should handle relative paths on Windows", () => {
|
|
process.cwd = () => "C:\\mocksvrjs";
|
|
process.dirname = "C:\\mocksvrjs";
|
|
process.filename = "C:\\mocksvrjs\\svr.js";
|
|
os.platform.mockReturnValue("win32");
|
|
expect(getInitializePath("./relative\\path")).toBe("/relative/path");
|
|
});
|
|
});
|
|
|
|
describe("isForbiddenPath", () => {
|
|
test("should return true if the path is forbidden", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(isForbiddenPath("/config.json", "config")).toBe(true);
|
|
});
|
|
|
|
test("should return false if the path is not forbidden", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(isForbiddenPath("/notconfig.json", "config")).toBe(false);
|
|
});
|
|
|
|
test("should handle case insensitivity on Windows", () => {
|
|
process.cwd = () => "C:\\mocksvrjs";
|
|
process.dirname = "C:\\mocksvrjs";
|
|
process.filename = "C:\\mocksvrjs\\svr.js";
|
|
os.platform.mockReturnValue("win32");
|
|
expect(isForbiddenPath("/CONFIG.JSON", "config")).toBe(true);
|
|
});
|
|
|
|
test("should handle array of forbidden paths", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(
|
|
isForbiddenPath("/node_modules", "serverSideScriptDirectories")
|
|
).toBe(true);
|
|
expect(isForbiddenPath("/mods", "serverSideScriptDirectories")).toBe(
|
|
true
|
|
);
|
|
expect(
|
|
isForbiddenPath("/notforbidden", "serverSideScriptDirectories")
|
|
).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("isIndexOfForbiddenPath", () => {
|
|
test("should return true if the path is an index of a forbidden path", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(isIndexOfForbiddenPath("/config.json", "config")).toBe(true);
|
|
expect(
|
|
isIndexOfForbiddenPath("/node_modules/", "serverSideScriptDirectories")
|
|
).toBe(true);
|
|
});
|
|
|
|
test("should return false if the path is not an index of a forbidden path", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(isIndexOfForbiddenPath("/notconfig.json", "config")).toBe(false);
|
|
expect(
|
|
isIndexOfForbiddenPath("/notforbidden/", "serverSideScriptDirectories")
|
|
).toBe(false);
|
|
expect(isIndexOfForbiddenPath("/config.json.fake", "config")).toBe(false);
|
|
expect(
|
|
isIndexOfForbiddenPath(
|
|
"/node_modules_fake/",
|
|
"serverSideScriptDirectories"
|
|
)
|
|
).toBe(false);
|
|
});
|
|
|
|
test("should handle case insensitivity on Windows", () => {
|
|
process.cwd = () => "C:\\mocksvrjs";
|
|
process.dirname = "C:\\mocksvrjs";
|
|
process.filename = "C:\\mocksvrjs\\svr.js";
|
|
os.platform.mockReturnValue("win32");
|
|
expect(isIndexOfForbiddenPath("/CONFIG.JSON", "config")).toBe(true);
|
|
expect(
|
|
isIndexOfForbiddenPath("/NODE_MODULES/", "serverSideScriptDirectories")
|
|
).toBe(true);
|
|
});
|
|
|
|
test("should handle array of forbidden paths", () => {
|
|
os.platform.mockReturnValue("linux");
|
|
expect(
|
|
isIndexOfForbiddenPath("/node_modules/", "serverSideScriptDirectories")
|
|
).toBe(true);
|
|
expect(
|
|
isIndexOfForbiddenPath("/mods/", "serverSideScriptDirectories")
|
|
).toBe(true);
|
|
expect(
|
|
isIndexOfForbiddenPath("/notforbidden/", "serverSideScriptDirectories")
|
|
).toBe(false);
|
|
});
|
|
});
|
|
});
|