@nodecg/types
Version:
Dynamic broadcast graphics rendered in a browser
31 lines (25 loc) • 646 B
text/typescript
import path from "node:path";
import type express from "express";
import { isChildPath } from "../is-child-path";
export function sendFile(
directoryToPreventTraversalOutOf: string,
fileLocation: string,
res: express.Response,
next: express.NextFunction,
): void {
if (isChildPath(directoryToPreventTraversalOutOf, fileLocation)) {
res.sendFile(fileLocation, (error?: NodeJS.ErrnoException) => {
if (!error) {
return;
}
if (error.code === "ENOENT") {
return res.type(path.extname(fileLocation)).sendStatus(404);
}
if (!res.headersSent) {
return next(error);
}
});
} else {
res.sendStatus(404);
}
}