diff --git a/server/socket-handlers/status-page-socket-handler.js b/server/socket-handlers/status-page-socket-handler.js index c1d66797..7fe17560 100644 --- a/server/socket-handlers/status-page-socket-handler.js +++ b/server/socket-handlers/status-page-socket-handler.js @@ -185,7 +185,7 @@ module.exports.statusPageSocketHandler = (socket) => { }); } catch (error) { - console.log(error); + console.error(error); callback({ ok: false, @@ -194,4 +194,52 @@ module.exports.statusPageSocketHandler = (socket) => { } }); + // Add a new status page + socket.on("addStatusPage", async (title, slug, callback) => { + try { + checkLogin(socket); + + title = title?.trim(); + slug = slug?.trim(); + + // Check empty + if (!title || !slug) { + throw new Error("Please input all fields"); + } + + // Make sure slug is string + if (typeof slug !== "string") { + throw new Error("Slug -Accept string only"); + } + + // lower case only + slug = slug.toLowerCase(); + + // Check slug a-z, 0-9, - only + // Regex from: https://stackoverflow.com/questions/22454258/js-regex-string-validation-for-slug + if (!slug.match(/^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$/)) { + throw new Error("Invalid Slug"); + } + + let statusPage = R.dispense("status_page"); + statusPage.slug = slug; + statusPage.title = title; + statusPage.theme = "light"; + statusPage.icon = ""; + await R.store(statusPage); + + callback({ + ok: true, + msg: "OK!" + }); + + } catch (error) { + console.error(error); + callback({ + ok: false, + msg: error.message, + }); + } + }); + }; diff --git a/src/mixins/socket.js b/src/mixins/socket.js index e092923e..902bde31 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -255,6 +255,14 @@ export default { } }, + toastSuccess(msg) { + toast.success(msg); + }, + + toastError(msg) { + toast.error(msg); + }, + login(username, password, token, callback) { socket.emit("login", { username, diff --git a/src/pages/AddStatusPage.vue b/src/pages/AddStatusPage.vue index f14ebfa6..dd109991 100644 --- a/src/pages/AddStatusPage.vue +++ b/src/pages/AddStatusPage.vue @@ -5,24 +5,33 @@ {{ $t("Add New Status Page") }} -