UNPKG

@mangadex-pub/nuxt-security

Version:

🛡️ Security Module for Nuxt based on HTTP Headers and Middleware

25 lines (24 loc) 1.15 kB
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); } } } });