Vydané zdroje
Stáhnout zdroje ZIP
CH-J Server Manager
Procházejte adresáře a soubory konkrétního vydání aplikace.
Zdroje jsou zveřejněny pod CH-J Proprietary Software License 1.14. Jejich dostupnost nemění licenční podmínky ani neposkytuje další oprávnění.
1
"use strict";3
const test = require("node:test");4
const assert = require("node:assert/strict");5
const fs = require("node:fs");6
const os = require("node:os");7
const path = require("node:path");8
const { cleanDownloadCache, removeCachedFile } = require("../src/main/storage/downloadCache");10
test("download cache removes a package and prunes its empty release directories", (t) => {11
const root = fs.mkdtempSync(path.join(os.tmpdir(), "chj-cache-"));12
t.after(() => fs.rmSync(root, { recursive: true, force: true }));13
const cache = path.join(root, "plugins", ".downloads");14
const packagePath = path.join(cache, "chj.test", "0.0.1-release", "test.chjplugin");15
fs.mkdirSync(path.dirname(packagePath), { recursive: true });16
fs.writeFileSync(packagePath, "package");18
assert.equal(removeCachedFile(cache, packagePath).removed, true);19
assert.equal(fs.existsSync(packagePath), false);20
assert.equal(fs.existsSync(path.join(cache, "chj.test")), false);21
});23
test("download cache rejects paths outside its root and can clear abandoned files", (t) => {24
const root = fs.mkdtempSync(path.join(os.tmpdir(), "chj-cache-"));25
t.after(() => fs.rmSync(root, { recursive: true, force: true }));26
const cache = path.join(root, "updates", "downloads");27
const outside = path.join(root, "keep.txt");28
const abandoned = path.join(cache, "0.0.1-release", "installer.dmg");29
fs.mkdirSync(path.dirname(abandoned), { recursive: true });30
fs.writeFileSync(outside, "keep");31
fs.writeFileSync(abandoned, "installer");33
assert.throws(() => removeCachedFile(cache, outside), /outside its cache/);34
assert.equal(cleanDownloadCache(cache).cleaned, true);35
assert.equal(fs.existsSync(abandoned), false);36
assert.equal(fs.existsSync(cache), true);37
assert.equal(fs.readFileSync(outside, "utf8"), "keep");38
});40
test("download cache does not follow a parent symlink outside its root", (t) => {41
const root = fs.mkdtempSync(path.join(os.tmpdir(), "chj-cache-"));42
t.after(() => fs.rmSync(root, { recursive: true, force: true }));43
const cache = path.join(root, "cache");44
const outside = path.join(root, "outside");45
fs.mkdirSync(cache);46
fs.mkdirSync(outside);47
fs.writeFileSync(path.join(outside, "keep.chjplugin"), "keep");48
fs.symlinkSync(outside, path.join(cache, "redirect"), "dir");50
assert.throws(51
() => removeCachedFile(cache, path.join(cache, "redirect", "keep.chjplugin")),52
/resolves outside its cache/53
);54
assert.equal(fs.readFileSync(path.join(outside, "keep.chjplugin"), "utf8"), "keep");55
});SHA-256: e29cebcdf88785330415e3e86d3e02796da6edd46fee49ee613150ba444244cb
SHA-256 archivu: 5ac91caf4fa32a6fdb114f2430deed486fbe7489d5eea343d1f034169fafb5e0