mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-13 14:37:26 +00:00
This commit is contained in:
parent
5cfece3b84
commit
9d2c485071
1 changed files with 21 additions and 2 deletions
|
|
@ -261,7 +261,13 @@ async function route(request: IncomingMessage, response: ServerResponse) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.method === "POST" && url.pathname === "/api/plugins/c0mpute/jobs/dispatch") {
|
if (request.method === "POST" && url.pathname === "/api/plugins/c0mpute/jobs/dispatch") {
|
||||||
const body = await readJson(request);
|
let body: unknown;
|
||||||
|
try {
|
||||||
|
body = await readJson(request);
|
||||||
|
} catch {
|
||||||
|
json(response, 400, { error: "Invalid JSON body" });
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!isRecord(body) || typeof body.job_id !== "string") {
|
if (!isRecord(body) || typeof body.job_id !== "string") {
|
||||||
json(response, 422, { error: "Expected job_id" });
|
json(response, 422, { error: "Expected job_id" });
|
||||||
return;
|
return;
|
||||||
|
|
@ -277,7 +283,13 @@ async function route(request: IncomingMessage, response: ServerResponse) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.method === "POST" && url.pathname === "/api/plugins/c0mpute/quotes") {
|
if (request.method === "POST" && url.pathname === "/api/plugins/c0mpute/quotes") {
|
||||||
const body = await readJson(request);
|
let body: unknown;
|
||||||
|
try {
|
||||||
|
body = await readJson(request);
|
||||||
|
} catch {
|
||||||
|
json(response, 400, { error: "Invalid JSON body" });
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!isRecord(body) || typeof body.workload !== "string") {
|
if (!isRecord(body) || typeof body.workload !== "string") {
|
||||||
json(response, 422, { error: "Expected workload" });
|
json(response, 422, { error: "Expected workload" });
|
||||||
return;
|
return;
|
||||||
|
|
@ -311,9 +323,16 @@ function text(response: ServerResponse, status: number, contentType: string, bod
|
||||||
response.end(body);
|
response.end(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const MAX_BODY_BYTES = 1_048_576; // 1 MB
|
||||||
|
|
||||||
async function readJson(request: IncomingMessage) {
|
async function readJson(request: IncomingMessage) {
|
||||||
const chunks: Buffer[] = [];
|
const chunks: Buffer[] = [];
|
||||||
|
let total = 0;
|
||||||
for await (const chunk of request) {
|
for await (const chunk of request) {
|
||||||
|
total += chunk.length;
|
||||||
|
if (total > MAX_BODY_BYTES) {
|
||||||
|
throw new Error("Request body too large");
|
||||||
|
}
|
||||||
chunks.push(Buffer.from(chunk));
|
chunks.push(Buffer.from(chunk));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue