mirror of
https://github.com/sbrl/powahroot.git
synced 2024-11-28 00:43:02 +00:00
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
import RouterContext from 'powahroot/Server/RouterContext.mjs';
|
||
|
//import { middleware_catch_errors } from './monitor.mjs';
|
||
|
|
||
|
// Maximum body size in characters
|
||
|
const max_request_body_length = 128 * 1024; // 128K
|
||
|
|
||
|
|
||
|
function depostify(postdata) {
|
||
|
return postdata.split("&").reduce(function (decoded, chunk) {
|
||
|
chunk = chunk.split("=").map(decodeURIComponent);
|
||
|
decoded[chunk[0]] = chunk[1];
|
||
|
return decoded;
|
||
|
}, {})
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Parses URL-encoded POST data out into the context.env.post_data variable.
|
||
|
* @param {RouterContext} context The context object.
|
||
|
* @param {Function} next Function to invoke the next middleware item
|
||
|
*/
|
||
|
async function middleware_parse_post(context, next) {
|
||
|
let raw_post_data = "";
|
||
|
context.request.on("data", async (chunk) => {
|
||
|
if(raw_post_data.length + chunk.length > max_request_body_length) {
|
||
|
context.send.plain(413, "Error: Request payload was too large.");
|
||
|
return;
|
||
|
}
|
||
|
raw_post_data += chunk;
|
||
|
});
|
||
|
|
||
|
context.request.on("end", async () => {
|
||
|
context.env.post_data = depostify(raw_post_data);
|
||
|
// Institute another error-catching safety net. This is needed because
|
||
|
// we're in an event here, which breaks the async chain.
|
||
|
//await middleware_catch_errors(context, next);
|
||
|
await next();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
export default middleware_parse_post;
|