From 3439074835d1f40dd56ca2b6531dcbbec53071b0 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Thu, 9 Feb 2023 17:42:02 +0800 Subject: [PATCH] Feat: Use message to improve errror status code --- server/routers/api-router.js | 14 +++++++------- server/routers/status-page-router.js | 18 ++++++------------ server/util-server.js | 24 ++++++++++++++++++------ 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/server/routers/api-router.js b/server/routers/api-router.js index 665163aee..2d5f96617 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -1,5 +1,5 @@ let express = require("express"); -const { allowDevAllOrigin, allowAllOrigin, percentageToColor, filterAndJoin, send403 } = require("../util-server"); +const { allowDevAllOrigin, allowAllOrigin, percentageToColor, filterAndJoin, sendHttpError } = require("../util-server"); const { R } = require("redbean-node"); const apicache = require("../modules/apicache"); const Monitor = require("../model/monitor"); @@ -175,7 +175,7 @@ router.get("/api/badge/:id/status", cache("5 minutes"), async (request, response response.type("image/svg+xml"); response.send(svg); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -242,7 +242,7 @@ router.get("/api/badge/:id/uptime/:duration?", cache("5 minutes"), async (reques response.type("image/svg+xml"); response.send(svg); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -303,7 +303,7 @@ router.get("/api/badge/:id/ping/:duration?", cache("5 minutes"), async (request, response.type("image/svg+xml"); response.send(svg); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -373,7 +373,7 @@ router.get("/api/badge/:id/avg-response/:duration?", cache("5 minutes"), async ( response.type("image/svg+xml"); response.send(svg); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -464,7 +464,7 @@ router.get("/api/badge/:id/cert-exp", cache("5 minutes"), async (request, respon response.type("image/svg+xml"); response.send(svg); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -536,7 +536,7 @@ router.get("/api/badge/:id/response", cache("5 minutes"), async (request, respon response.type("image/svg+xml"); response.send(svg); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); diff --git a/server/routers/status-page-router.js b/server/routers/status-page-router.js index de075db8d..28cf5f4c9 100644 --- a/server/routers/status-page-router.js +++ b/server/routers/status-page-router.js @@ -2,7 +2,7 @@ let express = require("express"); const apicache = require("../modules/apicache"); const { UptimeKumaServer } = require("../uptime-kuma-server"); const StatusPage = require("../model/status_page"); -const { allowDevAllOrigin, send403 } = require("../util-server"); +const { allowDevAllOrigin, sendHttpError } = require("../util-server"); const { R } = require("redbean-node"); const Monitor = require("../model/monitor"); @@ -44,10 +44,7 @@ router.get("/api/status-page/:slug", cache("5 minutes"), async (request, respons let statusPageData = await StatusPage.getStatusPageData(statusPage); if (!statusPageData) { - response.statusCode = 404; - response.json({ - msg: "Not Found" - }); + sendHttpError(response, "Not Found"); return; } @@ -55,7 +52,7 @@ router.get("/api/status-page/:slug", cache("5 minutes"), async (request, respons response.json(statusPageData); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -103,7 +100,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques }); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); @@ -119,10 +116,7 @@ router.get("/api/status-page/:slug/manifest.json", cache("1440 minutes"), async ]); if (!statusPage) { - response.statusCode = 404; - response.json({ - msg: "Not Found" - }); + sendHttpError(response, "Not Found"); return; } @@ -141,7 +135,7 @@ router.get("/api/status-page/:slug/manifest.json", cache("1440 minutes"), async }); } catch (error) { - send403(response, error.message); + sendHttpError(response, error.message); } }); diff --git a/server/util-server.js b/server/util-server.js index edce28901..c83c8cd12 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -730,15 +730,27 @@ exports.filterAndJoin = (parts, connector = "") => { }; /** - * Send a 403 response + * Send an Error response * @param {Object} res Express response object * @param {string} [msg=""] Message to send */ -module.exports.send403 = (res, msg = "") => { - res.status(403).json({ - "status": "fail", - "msg": msg, - }); +module.exports.sendHttpError = (res, msg = "") => { + if (msg.includes("SQLITE_BUSY") || msg.includes("SQLITE_LOCKED")) { + res.status(503).json({ + "status": "fail", + "msg": msg, + }); + } else if (msg.toLowerCase().includes("not found")) { + res.status(404).json({ + "status": "fail", + "msg": msg, + }); + } else { + res.status(403).json({ + "status": "fail", + "msg": msg, + }); + } }; function timeObjectConvertTimezone(obj, timezone, timeObjectToUTC = true) {