mirror of
https://github.com/OneUptime/oneuptime
synced 2024-11-22 15:24:55 +00:00
75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import BadDataException from "Common/Types/Exception/BadDataException";
|
|
import ReturnResult from "Common/Types/IsolatedVM/ReturnResult";
|
|
import JSONFunctions from "Common/Types/JSONFunctions";
|
|
import ClusterKeyAuthorization from "Common/Server/Middleware/ClusterKeyAuthorization";
|
|
import Express, {
|
|
ExpressRequest,
|
|
ExpressResponse,
|
|
ExpressRouter,
|
|
NextFunction,
|
|
} from "Common/Server/Utils/Express";
|
|
import logger from "Common/Server/Utils/Logger";
|
|
import Response from "Common/Server/Utils/Response";
|
|
import VMRunner from "Common/Server/Utils/VM/VMRunner";
|
|
|
|
const router: ExpressRouter = Express.getRouter();
|
|
|
|
router.post(
|
|
"/run-code",
|
|
ClusterKeyAuthorization.isAuthorizedServiceMiddleware,
|
|
async (
|
|
req: ExpressRequest,
|
|
res: ExpressResponse,
|
|
next: NextFunction,
|
|
): Promise<void> => {
|
|
try {
|
|
if (!req.body.code) {
|
|
return Response.sendErrorResponse(
|
|
req,
|
|
res,
|
|
new BadDataException("Code is missing"),
|
|
);
|
|
}
|
|
|
|
logger.debug("Running code in sandbox");
|
|
logger.debug(req.body.code);
|
|
|
|
let result: ReturnResult | null = null;
|
|
|
|
try {
|
|
result = await VMRunner.runCodeInSandbox({
|
|
code: req.body.code,
|
|
options: {
|
|
timeout: req.body?.["options"]?.["timeout"] || 5000,
|
|
args: req.body?.["options"]?.["args"] || {},
|
|
},
|
|
});
|
|
} catch (err) {
|
|
logger.error(err);
|
|
throw new BadDataException((err as Error).message);
|
|
}
|
|
|
|
logger.debug("Code execution completed");
|
|
logger.debug(result.returnValue);
|
|
|
|
logger.debug("Code Logs ");
|
|
logger.debug(result.logMessages);
|
|
|
|
if (typeof result.returnValue === "object") {
|
|
result.returnValue = JSONFunctions.removeCircularReferences(
|
|
result.returnValue,
|
|
);
|
|
}
|
|
|
|
return Response.sendJsonObjectResponse(req, res, {
|
|
returnValue: result.returnValue,
|
|
logMessages: result.logMessages,
|
|
});
|
|
} catch (err) {
|
|
return next(err);
|
|
}
|
|
},
|
|
);
|
|
|
|
export default router;
|