From 7433c2013135e0c8744fd1b66928d401a2f4e1e9 Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Wed, 27 Nov 2024 16:38:10 -0500 Subject: [PATCH 1/3] Update server app to not log each NCES file individually when app starts, but total number of files --- app/server/app/index.js | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/app/server/app/index.js b/app/server/app/index.js index b32741d7..c0606940 100644 --- a/app/server/app/index.js +++ b/app/server/app/index.js @@ -78,13 +78,6 @@ function fetchNcesData() { const localFilePath = resolve(__dirname, "./content", filename); const s3FileUrl = `${s3BucketUrl}/content/${filename}`; - const logMessage = - NODE_ENV === "development" - ? `Reading ${filename} file from disk.` - : `Fetching ${filename} from S3 bucket.`; - - log({ level: "info", message: logMessage }); - /** * local development: read files directly from disk * Cloud.gov: fetch files from the public s3 bucket @@ -95,14 +88,19 @@ function fetchNcesData() { }), ) .then((data) => { + const logMessage = + NODE_ENV === "development" + ? `Read ${filenames.length} NCES files from disk.` + : `Fetched ${filenames.length} NCES files from S3 bucket.`; + + log({ level: "info", message: logMessage }); + return { 2023: data[0], 2024: data[1], }; }) .catch((error) => { - console.log(error); - const errorStatus = error.response?.status || 500; const errorMethod = error.response?.config?.method?.toUpperCase(); const errorUrl = error.response?.config?.url; @@ -125,7 +123,7 @@ fetchNcesData().then((ncesData) => { app.use(helmet.hsts({ maxAge: 31536000 })); /** Instruct web browsers to disable caching. */ - app.use((req, res, next) => { + app.use((_req, res, next) => { res.setHeader("Surrogate-Control", "no-store"); res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate"); // prettier-ignore res.setHeader("Pragma", "no-cache"); @@ -164,7 +162,7 @@ fetchNcesData().then((ncesData) => { * (required when using sub path). */ const pathRegex = new RegExp(`^\\${SERVER_BASE_PATH || ""}$`); - app.all(pathRegex, (req, res) => res.redirect(`${basePath}`)); + app.all(pathRegex, (_req, res) => res.redirect(`${basePath}`)); /** * Serve client app's static built files. @@ -180,7 +178,7 @@ fetchNcesData().then((ncesData) => { app.use(protectClientRoutes); /** Serve client-side routes. */ - app.get("*", (req, res) => { + app.get("*", (_req, res) => { res.sendFile(resolve(__dirname, "public/index.html")); }); From 58e04b94328640eaaa321e2d7b1206c2ea9f7b20 Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Wed, 27 Nov 2024 16:39:10 -0500 Subject: [PATCH 2/3] Update content API endpoint to not log each markdown file individually, but just the total number of files --- app/server/app/routes/content.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/server/app/routes/content.js b/app/server/app/routes/content.js index 6b4ab158..7f4350db 100644 --- a/app/server/app/routes/content.js +++ b/app/server/app/routes/content.js @@ -34,13 +34,6 @@ router.get("/", (req, res) => { const localFilePath = resolve(__dirname, "../content", filename); const s3FileUrl = `${s3BucketUrl}/content/${filename}`; - const logMessage = - NODE_ENV === "development" - ? `Reading ${filename} file from disk.` - : `Fetching ${filename} from S3 bucket.`; - - log({ level: "info", message: logMessage }); - /** * local development: read files directly from disk * Cloud.gov: fetch files from the public s3 bucket @@ -51,6 +44,13 @@ router.get("/", (req, res) => { }), ) .then((data) => { + const logMessage = + NODE_ENV === "development" + ? `Read ${filenames.length} content files from disk.` + : `Fetched ${filenames.length} content files from S3 bucket.`; + + log({ level: "info", message: logMessage }); + return res.json({ siteAlert: data[0], helpdeskIntro: data[1], From 7543353991f24da3eab6293b0dd56f6f4bb1ba96 Mon Sep 17 00:00:00 2001 From: Courtney Myers Date: Wed, 27 Nov 2024 17:12:08 -0500 Subject: [PATCH 3/3] Update help API route that updates an existing Formio submission to log when a helpdesk user performs that action --- app/server/app/routes/help.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/server/app/routes/help.js b/app/server/app/routes/help.js index 4657ce1e..bf283fc2 100644 --- a/app/server/app/routes/help.js +++ b/app/server/app/routes/help.js @@ -11,6 +11,7 @@ const { const { ensureAuthenticated, ensureHelpdesk } = require("../middleware"); const { getBapFormSubmissionData } = require("../utilities/bap"); const { getRebateIdFieldName } = require("../utilities/formio"); +const log = require("../utilities/logger"); /** * @typedef {'2022' | '2023' | '2024'} RebateYear @@ -273,6 +274,7 @@ router.get("/formio/submission/:rebateYear/:formType/:id", async (req, res) => { // --- post an update to an existing form submission to Formio (change submission to 'draft') router.post("/formio/submission/:rebateYear/:formType/:mongoId", (req, res) => { const { body } = req; + const { mail } = req.user; const { rebateYear, formType, mongoId } = req.params; // NOTE: included to support EPA API scan @@ -292,14 +294,22 @@ router.post("/formio/submission/:rebateYear/:formType/:mongoId", (req, res) => { if (!formioFormUrl) { const errorStatus = 400; - const errorMessage = `Formio form URL does not exist for ${rebateYear} ${formName}.`; + const errorMessage = `Formio form URL does not exist for ${rebateYear} ${formName} form.`; return res.status(errorStatus).json({ message: errorMessage }); } axiosFormio(req) .put(`${formioFormUrl}/submission/${mongoId}`, body) .then((axiosRes) => axiosRes.data) - .then((submission) => res.json(submission)) + .then((submission) => { + const logMessage = + `Helpdesk: User with email '${mail}' updated ${rebateYear} ` + + `${formType.toUpperCase()} submission '${mongoId}' ` + + `(status: '${submission.state}').`; + log({ level: "info", message: logMessage, req }); + + return res.json(submission); + }) .catch((error) => { // NOTE: error is logged in axiosFormio response interceptor const errorStatus = error.response?.status || 500;