From 6899603eb7a2dc1cbcf6363f2eafb8c282cd4823 Mon Sep 17 00:00:00 2001
From: Abhigyan Mohanta <110360901+ABHIGYAN-MOHANTA@users.noreply.github.com>
Date: Sat, 9 Nov 2024 21:00:08 +0530
Subject: [PATCH 1/5] fix #5314 Email Address Friendly Name Error (#5318)
---
src/components/notifications/SendGrid.vue | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/components/notifications/SendGrid.vue b/src/components/notifications/SendGrid.vue
index 18118f469..53f1f1137 100644
--- a/src/components/notifications/SendGrid.vue
+++ b/src/components/notifications/SendGrid.vue
@@ -5,20 +5,20 @@
-
+
-
+
-
+
{{ $t("Separate multiple email addresses with commas") }}
From 778363a948513f0f33977563384a1e27d5c7005d Mon Sep 17 00:00:00 2001
From: Dorence Deng
Date: Mon, 11 Nov 2024 18:08:43 +0800
Subject: [PATCH 2/5] fix(notification): #5323 fix EditMonitor.vue useToast
error (#5333)
---
src/pages/EditMonitor.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue
index 4763f8722..a4f93bc2c 100644
--- a/src/pages/EditMonitor.vue
+++ b/src/pages/EditMonitor.vue
@@ -1065,7 +1065,7 @@ import { hostNameRegexPattern } from "../util-frontend";
import HiddenInput from "../components/HiddenInput.vue";
import EditMonitorConditions from "../components/EditMonitorConditions.vue";
-const toast = useToast;
+const toast = useToast();
const pushTokenLength = 32;
From 8a432ac93776f01a5464f70e7d34e223193aad2e Mon Sep 17 00:00:00 2001
From: Ionys <9364594+Ionys320@users.noreply.github.com>
Date: Tue, 12 Nov 2024 19:00:09 +0100
Subject: [PATCH 3/5] fix(status page): Make sure the group deletion is
correctly handled when `groupIDList` is empty (#5340)
---
.../status-page-socket-handler.js | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js
index 0804da15d..cbcc52b8f 100644
--- a/server/socket-handlers/status-page-socket-handler.js
+++ b/server/socket-handlers/status-page-socket-handler.js
@@ -220,13 +220,17 @@ module.exports.statusPageSocketHandler = (socket) => {
// Delete groups that are not in the list
log.debug("socket", "Delete groups that are not in the list");
- const slots = groupIDList.map(() => "?").join(",");
+ if (groupIDList.length === 0) {
+ await R.exec("DELETE FROM `group` WHERE status_page_id = ?", [ statusPage.id ]);
+ } else {
+ const slots = groupIDList.map(() => "?").join(",");
- const data = [
- ...groupIDList,
- statusPage.id
- ];
- await R.exec(`DELETE FROM \`group\` WHERE id NOT IN (${slots}) AND status_page_id = ?`, data);
+ const data = [
+ ...groupIDList,
+ statusPage.id
+ ];
+ await R.exec(`DELETE FROM \`group\` WHERE id NOT IN (${slots}) AND status_page_id = ?`, data);
+ }
const server = UptimeKumaServer.getInstance();
From 4228dd0a29a792c98b1d25f9ce558c74e402b2f4 Mon Sep 17 00:00:00 2001
From: Ionys <9364594+Ionys320@users.noreply.github.com>
Date: Tue, 19 Nov 2024 01:29:35 +0100
Subject: [PATCH 4/5] Fix the timeout value (#5352)
---
src/pages/EditMonitor.vue | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue
index a4f93bc2c..a83f91cab 100644
--- a/src/pages/EditMonitor.vue
+++ b/src/pages/EditMonitor.vue
@@ -1443,11 +1443,14 @@ message HealthCheckResponse {
}
}
- if (this.monitor.type === "snmp") {
+ // Set a default timeout if the monitor type has changed or if it's a new monitor
+ if (oldType || this.isAdd) {
+ if (this.monitor.type === "snmp") {
// snmp is not expected to be executed via the internet => we can choose a lower default timeout
- this.monitor.timeout = 5;
- } else {
- this.monitor.timeout = 48;
+ this.monitor.timeout = 5;
+ } else {
+ this.monitor.timeout = 48;
+ }
}
// Set default SNMP version
From cdb8ad321dbdce48d5baa47970da5b5d1de43df1 Mon Sep 17 00:00:00 2001
From: Luke Thomas <96008479+Zoobdude@users.noreply.github.com>
Date: Tue, 26 Nov 2024 00:56:23 +0000
Subject: [PATCH 5/5] fix: slug input (#5239)
Co-authored-by: Frank Elsinga
---
server/routers/status-page-router.js | 8 +++++++-
server/socket-handlers/status-page-socket-handler.js | 1 +
src/pages/AddStatusPage.vue | 11 ++++++-----
3 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/server/routers/status-page-router.js b/server/routers/status-page-router.js
index b209d33d1..893f57564 100644
--- a/server/routers/status-page-router.js
+++ b/server/routers/status-page-router.js
@@ -15,11 +15,13 @@ const server = UptimeKumaServer.getInstance();
router.get("/status/:slug", cache("5 minutes"), async (request, response) => {
let slug = request.params.slug;
+ slug = slug.toLowerCase();
await StatusPage.handleStatusPageResponse(response, server.indexHTML, slug);
});
router.get("/status/:slug/rss", cache("5 minutes"), async (request, response) => {
let slug = request.params.slug;
+ slug = slug.toLowerCase();
await StatusPage.handleStatusPageRSSResponse(response, slug);
});
@@ -37,6 +39,7 @@ router.get("/status-page", cache("5 minutes"), async (request, response) => {
router.get("/api/status-page/:slug", cache("5 minutes"), async (request, response) => {
allowDevAllOrigin(response);
let slug = request.params.slug;
+ slug = slug.toLowerCase();
try {
// Get Status Page
@@ -69,6 +72,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
let uptimeList = {};
let slug = request.params.slug;
+ slug = slug.toLowerCase();
let statusPageID = await StatusPage.slugToID(slug);
let monitorIDList = await R.getCol(`
@@ -111,6 +115,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
router.get("/api/status-page/:slug/manifest.json", cache("1440 minutes"), async (request, response) => {
allowDevAllOrigin(response);
let slug = request.params.slug;
+ slug = slug.toLowerCase();
try {
// Get Status Page
@@ -145,7 +150,8 @@ router.get("/api/status-page/:slug/manifest.json", cache("1440 minutes"), async
// overall status-page status badge
router.get("/api/status-page/:slug/badge", cache("5 minutes"), async (request, response) => {
allowDevAllOrigin(response);
- const slug = request.params.slug;
+ let slug = request.params.slug;
+ slug = slug.toLowerCase();
const statusPageID = await StatusPage.slugToID(slug);
const {
label,
diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js
index cbcc52b8f..1114d81fd 100644
--- a/server/socket-handlers/status-page-socket-handler.js
+++ b/server/socket-handlers/status-page-socket-handler.js
@@ -292,6 +292,7 @@ module.exports.statusPageSocketHandler = (socket) => {
ok: true,
msg: "successAdded",
msgi18n: true,
+ slug: slug
});
} catch (error) {
diff --git a/src/pages/AddStatusPage.vue b/src/pages/AddStatusPage.vue
index bae61449c..b35091cc2 100644
--- a/src/pages/AddStatusPage.vue
+++ b/src/pages/AddStatusPage.vue
@@ -16,14 +16,11 @@
/status/
-
+
- {{ $t("Accept characters:") }} a-z 0-9 -
-
- a-z 0-9
-
- {{ $t("No consecutive dashes") }} --
default
@@ -65,7 +62,7 @@ export default {
this.processing = false;
if (res.ok) {
- location.href = "/status/" + this.slug + "?edit";
+ location.href = "/status/" + res.slug + "?edit";
} else {
if (res.msg.includes("UNIQUE constraint")) {
@@ -85,4 +82,8 @@ export default {
.shadow-box {
padding: 20px;
}
+
+#slug {
+ text-transform: lowercase;
+}