From 31321749b20a963d1d2c2e4d5da4d9972e3a6884 Mon Sep 17 00:00:00 2001 From: Jeffer Marcelino Date: Sun, 22 Jun 2025 17:11:01 +0200 Subject: [PATCH 1/6] fix: syntax errors in NetworkService.js and en.json causing build failure --- client/src/Utils/NetworkService.js | 2 +- client/src/locales/en.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/Utils/NetworkService.js b/client/src/Utils/NetworkService.js index d9a3853e1..e7021d585 100644 --- a/client/src/Utils/NetworkService.js +++ b/client/src/Utils/NetworkService.js @@ -1033,7 +1033,7 @@ class NetworkService { async flushQueue() { return this.axiosInstance.post(`/queue/flush`); - + } async exportMonitors() { const response = await this.axiosInstance.get("/monitors/export", { diff --git a/client/src/locales/en.json b/client/src/locales/en.json index d3a274a32..81a664290 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -786,6 +786,7 @@ "failedAtHeader": "Last failed at", "failReasonHeader": "Fail reason" } + }, "export": { "title": "Export Monitors", "success": "Monitors exported successfully!", From 7c5516cd7505dc9045d9cad92a8246d4de25fc19 Mon Sep 17 00:00:00 2001 From: Jeffer Marcelino Date: Sun, 22 Jun 2025 18:26:20 +0200 Subject: [PATCH 2/6] feat(api): add backend support for toggling admin login link visibility on status page --- server/db/models/StatusPage.js | 4 ++++ server/db/mongo/modules/statusPageModule.js | 1 + server/validation/joi.js | 1 + 3 files changed, 6 insertions(+) diff --git a/server/db/models/StatusPage.js b/server/db/models/StatusPage.js index e4c81707f..dd64c184a 100755 --- a/server/db/models/StatusPage.js +++ b/server/db/models/StatusPage.js @@ -70,6 +70,10 @@ const StatusPageSchema = mongoose.Schema( type: Boolean, default: true, }, + showAdminLoginLink: { + type: Boolean, + default: false, + } }, { timestamps: true } ); diff --git a/server/db/mongo/modules/statusPageModule.js b/server/db/mongo/modules/statusPageModule.js index d6331fcf8..e94ffbd55 100755 --- a/server/db/mongo/modules/statusPageModule.js +++ b/server/db/mongo/modules/statusPageModule.js @@ -153,6 +153,7 @@ const getStatusPage = async (url) => { showCharts: 1, showUptimePercentage: 1, timezone: 1, + showAdminLoginLink: 1, url: 1, }, monitors: { diff --git a/server/validation/joi.js b/server/validation/joi.js index 448a844f1..e5c1d6e43 100755 --- a/server/validation/joi.js +++ b/server/validation/joi.js @@ -463,6 +463,7 @@ const createStatusPageBodyValidation = joi.object({ isPublished: joi.boolean(), showCharts: joi.boolean().optional(), showUptimePercentage: joi.boolean(), + showAdminLoginLink: joi.boolean().optional(), }); const imageValidation = joi From e6fd57d0bb4a1649bdd41415d231d7834a57a354 Mon Sep 17 00:00:00 2001 From: Jeffer Marcelino Date: Sun, 22 Jun 2025 18:27:56 +0200 Subject: [PATCH 3/6] feat: optionally hide the "Administrator? Login Here" on status page --- client/src/Pages/StatusPage/Status/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/Pages/StatusPage/Status/index.jsx b/client/src/Pages/StatusPage/Status/index.jsx index 727daeeb1..45822f6c6 100644 --- a/client/src/Pages/StatusPage/Status/index.jsx +++ b/client/src/Pages/StatusPage/Status/index.jsx @@ -48,7 +48,7 @@ const PublicStatus = () => { let link = undefined; const isPublic = location.pathname.startsWith("/status/uptime/public"); // Public status page - if (isPublic) { + if (isPublic && statusPage && statusPage.showAdminLoginLink === true) { sx = { paddingTop: theme.spacing(20), paddingLeft: "20vw", From 4a36bd3157c24ef48cb375457db96187938fa1ad Mon Sep 17 00:00:00 2001 From: Jeffer Marcelino Date: Sun, 22 Jun 2025 18:28:17 +0200 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20add=20toggle=20to=20show/hide=20?= =?UTF-8?q?=E2=80=9CAdministrator=3F=20Login=20Here=E2=80=9D=20link=20in?= =?UTF-8?q?=20status=20page=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pages/StatusPage/Create/Components/Tabs/Content.jsx | 7 +++++++ client/src/Pages/StatusPage/Create/index.jsx | 4 +++- client/src/Utils/NetworkService.js | 3 +++ client/src/Validation/validation.js | 1 + client/src/locales/en.json | 1 + client/src/locales/pt-BR.json | 1 + 6 files changed, 16 insertions(+), 1 deletion(-) diff --git a/client/src/Pages/StatusPage/Create/Components/Tabs/Content.jsx b/client/src/Pages/StatusPage/Create/Components/Tabs/Content.jsx index 7423b05bd..327a2fb0a 100644 --- a/client/src/Pages/StatusPage/Create/Components/Tabs/Content.jsx +++ b/client/src/Pages/StatusPage/Create/Components/Tabs/Content.jsx @@ -90,6 +90,13 @@ const Content = ({ isChecked={form.showUptimePercentage} onChange={handleFormChange} /> + diff --git a/client/src/Pages/StatusPage/Create/index.jsx b/client/src/Pages/StatusPage/Create/index.jsx index 50535cd90..63c248786 100644 --- a/client/src/Pages/StatusPage/Create/index.jsx +++ b/client/src/Pages/StatusPage/Create/index.jsx @@ -20,7 +20,7 @@ const TAB_LIST = ["General settings", "Contents"]; const ERROR_TAB_MAPPING = [ ["companyName", "url", "timezone", "color", "isPublished", "logo"], - ["monitors", "showUptimePercentage", "showCharts"], + ["monitors", "showUptimePercentage", "showCharts", "showAdminLoginLink"], ]; const CreateStatusPage = () => { @@ -39,6 +39,7 @@ const CreateStatusPage = () => { monitors: [], showCharts: true, showUptimePercentage: true, + showAdminLoginLink: false, }); const [errors, setErrors] = useState({}); const [selectedMonitors, setSelectedMonitors] = useState([]); @@ -195,6 +196,7 @@ const CreateStatusPage = () => { logo: newLogo, showCharts: statusPage?.showCharts ?? true, showUptimePercentage: statusPage?.showUptimePercentage ?? true, + showAdminLoginLink: statusPage?.showAdminLoginLink ?? false, }; }); setSelectedMonitors(statusPageMonitors); diff --git a/client/src/Utils/NetworkService.js b/client/src/Utils/NetworkService.js index e7021d585..20281abf5 100644 --- a/client/src/Utils/NetworkService.js +++ b/client/src/Utils/NetworkService.js @@ -871,6 +871,9 @@ class NetworkService { if (form.showUptimePercentage !== undefined) { fd.append("showUptimePercentage", String(form.showUptimePercentage)); } + if (form.showAdminLoginLink !== undefined) { + fd.append("showAdminLoginLink", String(form.showAdminLoginLink)); + } form.monitors && form.monitors.forEach((monitorId) => { fd.append("monitors[]", monitorId); diff --git a/client/src/Validation/validation.js b/client/src/Validation/validation.js index 4e6a806c8..d86bbd556 100644 --- a/client/src/Validation/validation.js +++ b/client/src/Validation/validation.js @@ -277,6 +277,7 @@ const statusPageValidation = joi.object({ logo: logoImageValidation, showUptimePercentage: joi.boolean(), showCharts: joi.boolean(), + showAdminLoginLink: joi.boolean(), }); const settingsValidation = joi.object({ diff --git a/client/src/locales/en.json b/client/src/locales/en.json index 81a664290..818258905 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -319,6 +319,7 @@ "statusPageCreateTabsContentFeaturesDescription": "Show more details on the status page", "showCharts": "Show charts", "showUptimePercentage": "Show uptime percentage", + "showAdminLoginLink": "Show \"Administrator? Login Here\" link on the status page", "removeLogo": "Remove Logo", "statusPageStatus": "A public status page is not set up.", "statusPageStatusContactAdmin": "Please contact to your administrator", diff --git a/client/src/locales/pt-BR.json b/client/src/locales/pt-BR.json index a783a820c..7368c360c 100644 --- a/client/src/locales/pt-BR.json +++ b/client/src/locales/pt-BR.json @@ -312,6 +312,7 @@ "statusPageCreateTabsContentFeaturesDescription": "Mostrar mais detalhes na página de status", "showCharts": "Mostrar gráficos", "showUptimePercentage": "Mostrar porcentagem de Uptime", + "showAdminLoginLink": "Mostrar o link \"Administrador? Efetue login aqui\" na página de status", "removeLogo": "Remover logo", "statusPageStatus": "Uma página de status pública não está configurada.", "statusPageStatusContactAdmin": "Entre em contato com seu administrador", From 465bdd29457159c650b94a3cb459f81a14acea3b Mon Sep 17 00:00:00 2001 From: Jeffer Marcelino Date: Sun, 22 Jun 2025 18:33:58 +0200 Subject: [PATCH 5/6] chore: format --- client/src/Utils/NetworkService.js | 2 +- server/db/models/StatusPage.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/Utils/NetworkService.js b/client/src/Utils/NetworkService.js index 20281abf5..653ed5c5b 100644 --- a/client/src/Utils/NetworkService.js +++ b/client/src/Utils/NetworkService.js @@ -1037,7 +1037,7 @@ class NetworkService { async flushQueue() { return this.axiosInstance.post(`/queue/flush`); } - + async exportMonitors() { const response = await this.axiosInstance.get("/monitors/export", { responseType: "blob", diff --git a/server/db/models/StatusPage.js b/server/db/models/StatusPage.js index dd64c184a..92cbab1cd 100755 --- a/server/db/models/StatusPage.js +++ b/server/db/models/StatusPage.js @@ -73,7 +73,7 @@ const StatusPageSchema = mongoose.Schema( showAdminLoginLink: { type: Boolean, default: false, - } + }, }, { timestamps: true } ); From 5fcf8ce7ba240fa9f7aa5a62bb57a87b8f176bc3 Mon Sep 17 00:00:00 2001 From: Jeffer Marcelino Date: Mon, 23 Jun 2025 02:58:51 +0200 Subject: [PATCH 6/6] chore: format --- client/src/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/locales/en.json b/client/src/locales/en.json index 17907f189..0fe4ceb3d 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -797,5 +797,5 @@ "import": "Import Monitors", "export": "Export Monitors" } - }, + } }