Files
pedwfrontend/pages/api/endpoint/gethash_api.js

58 lines
1.7 KiB
JavaScript

import { hashAPIPath } from "../../../actions/core/hash";
import nextConnect from "next-connect";
import { getSession } from "next-auth/react";
import { respondError, respondSuccess } from "../middleware/apiResponse";
const ApiProxy = nextConnect();
ApiProxy.get(async (req, res) => {
const session = await getSession({ req });
if (!session) {
return respondError(res, {
status: 401,
code: "UNAUTHENTICATED",
message: "Authentication required"
});
}
const rawQueryPath = req.query.path;
const queryPath =
typeof rawQueryPath === "string"
? rawQueryPath.split("?")[0]
: rawQueryPath;
const allowedPrefix = [
"/api/endpoint/getportallogin_api",
"/api/endpoint/deletemyrepresentations_api",
"/api/endpoint/deletewatchedcases_api",
"/api/file/upload",
"/api/file/uploadsinglefile",
"/api/file/deleteblobcase",
"/api/file/deleteblobrep",
"/api/file/createrepcompletemessage_api",
"/api/file/createappealcompletemessage_api",
"/api/file/generatepdf",
"/api/file/generateappealpdf"
];
if (
typeof queryPath !== "string" ||
queryPath.length === 0 ||
!queryPath.startsWith("/api/") ||
!allowedPrefix.some((prefix) => queryPath.startsWith(prefix)) ||
queryPath.includes("/api/endpoint/gethash_api")
) {
return respondError(res, {
status: 400,
code: "INVALID_HASH_PATH",
message: "Invalid path for hash generation"
});
}
return respondSuccess(res, { hash: hashAPIPath(rawQueryPath) });
});
export default ApiProxy;