fix: v2.7.4 — a developer's System page carries no host or other-user path
- GET /api/settings/info for a developer: no DB path, no hooks file path, and no transcript-cache keys — those were EVERY user's transcript paths (their folders and session ids). GET /api/updates/status: no repo_root. Test: server-mode-leaks. - Also in this release (earlier commits): a member's missing workspace folder is made as them at start; --allow-dangerously-skip-permissions only for an account that accepted the bypass warning or a bypass run. Full suites: server 2889/2889, client 1250/1250, tsc -b.
This commit is contained in:
@@ -148,3 +148,23 @@ describe("server mode: a member's skills/commands come from their own workspaces
|
||||
assert.ok(names(r).includes("max-skill"));
|
||||
});
|
||||
});
|
||||
|
||||
describe("the System page's facts for a developer", () => {
|
||||
// Every string that looks like an absolute path, anywhere in a body.
|
||||
const paths = (o, out = []) => {
|
||||
if (typeof o === "string" && o.startsWith("/")) out.push(o);
|
||||
else if (o && typeof o === "object") for (const v of Object.values(o)) paths(v, out);
|
||||
return out;
|
||||
};
|
||||
|
||||
it("carries no host or other-user path (DB, hooks file, transcript cache keys)", async () => {
|
||||
const mia = await login("mia", "member-pass-1");
|
||||
const info = await call("/api/settings/info", mia);
|
||||
assert.equal(info.status, 200);
|
||||
assert.deepEqual(paths(info.body), []);
|
||||
assert.equal(typeof info.body.db.size, "number", "the numbers stay");
|
||||
const boss = await login("boss", "admin-pass-1");
|
||||
const full = await call("/api/settings/info", boss);
|
||||
assert.ok(full.body.db.path, "an admin still sees the host's paths");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user