Files
Portfolio/containers/privacy-worker-a/worker.mjs

46 lines
1.6 KiB
JavaScript

import { createHash } from "node:crypto";
import { readFile, writeFile } from "node:fs/promises";
import { pathToFileURL } from "node:url";
export function inspectObject(request, bytes) {
if (
request?.schema !== "portfolio-privacy-worker-request/v1" ||
request.workerId !== "worker-a" ||
!/^[a-f0-9]{64}$/u.test(request.inputDigest) ||
!/^[a-f0-9]{64}$/u.test(request.imageDigest) ||
!/^[A-Za-z0-9][A-Za-z0-9._/-]{0,127}$/u.test(request.checkId)
)
throw new Error("Invalid worker request.");
const actual = createHash("sha256").update(bytes).digest("hex");
if (actual !== request.inputDigest) throw new Error("Input digest mismatch.");
const normalizedMembers = [`unsupported:${actual}`];
return {
schema: "portfolio-privacy-worker-report/v1",
workerId: "worker-a",
imageDigest: request.imageDigest,
toolchain: "scanner-unavailable-js/v1",
inputDigest: actual,
checkId: request.checkId,
normalizedOutputDigest: createHash("sha256")
.update(Buffer.from(JSON.stringify(normalizedMembers)))
.digest("hex"),
normalizedMembers,
verdict: "unsupported",
findingsDigest: createHash("sha256")
.update("scanner-unavailable")
.digest("hex"),
};
}
async function main() {
const request = JSON.parse(await readFile("/input/request.json", "utf8"));
const output = inspectObject(request, await readFile("/input/object"));
await writeFile("/output/report.json", JSON.stringify(output), {
flag: "wx",
mode: 0o400,
});
}
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
await main();