@mangadex-pub/nuxt-security
Version:
🛡️ Security Module for Nuxt based on HTTP Headers and Middleware
25 lines (24 loc) • 1.15 kB
JavaScript
import { defineEventHandler, getRequestHeader, createError } from "h3";
import { getRouteRules } from "#imports";
const FILE_UPLOAD_HEADER = "multipart/form-data";
export default defineEventHandler((event) => {
const routeRules = getRouteRules(event);
if (routeRules.security.requestSizeLimiter !== false) {
if (["POST", "PUT", "DELETE"].includes(event.node.req.method)) {
const contentLengthValue = getRequestHeader(event, "content-length");
const contentTypeValue = getRequestHeader(event, "content-type");
const isFileUpload = contentTypeValue?.includes(FILE_UPLOAD_HEADER);
const requestLimit = isFileUpload ? routeRules.security.requestSizeLimiter.maxUploadFileRequestInBytes : routeRules.security.requestSizeLimiter.maxRequestSizeInBytes;
if (parseInt(contentLengthValue) >= requestLimit) {
const payloadTooLargeError = {
statusCode: 413,
statusMessage: "Payload Too Large"
};
if (routeRules.security.requestSizeLimiter.throwError === false) {
return payloadTooLargeError;
}
throw createError(payloadTooLargeError);
}
}
}
});