CH-J Server ManagerSSH를 통한 서버 관리
메뉴
공개된 소스

CH-J Server Manager

특정 애플리케이션 릴리스의 디렉터리와 파일을 살펴보세요.

소스 ZIP 다운로드
CH-J / Server Manager 339 개 파일
core-20261014T184258Z-3fbed0b93fdf 추가됨: 날짜 기록 없음 · 빌드됨:
downloadCache.test.js 추가됨: 날짜 기록 없음 2.5 KB · 55 줄
코드 파일 다운로드
1"use strict";
3const test = require("node:test");
4const assert = require("node:assert/strict");
5const fs = require("node:fs");
6const os = require("node:os");
7const path = require("node:path");
8const { cleanDownloadCache, removeCachedFile } = require("../src/main/storage/downloadCache");
10test("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});
23test("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});
40test("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-256e29cebcdf88785330415e3e86d3e02796da6edd46fee49ee613150ba444244cb

CH-J Proprietary Software License 1.14 · 소스는 CH-J Proprietary Software License 1.14에 따라 제공됩니다. 소스를 공개한다고 해서 라이선스 조항이 바뀌거나 추가 권리가 부여되지는 않습니다.

압축 파일 SHA-2563df08cf5e899262a6ce92d7ec2caf5c42b683f1f2b57055662b845ff7dde67a8
파일