diff --git a/.eslintrc.js b/.eslintrc.js index 21e35910..7fea5f3a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -27,9 +27,9 @@ module.exports = { "properties": "never", "ignoreImports": true }], - // override/add rules settings here, such as: - // 'vue/no-unused-vars': 'error' - "no-unused-vars": "warn", + "no-unused-vars": ["warn", { + "args": "none" + }], indent: [ "error", 4, diff --git a/extra/beta/update-version.js b/extra/beta/update-version.js index 4fddcfeb..3ab47ea9 100644 --- a/extra/beta/update-version.js +++ b/extra/beta/update-version.js @@ -5,7 +5,6 @@ const util = require("../../src/util"); util.polyfill(); -const oldVersion = pkg.version; const version = process.env.VERSION; console.log("Beta Version: " + version); @@ -61,11 +60,3 @@ function tagExists(version) { return res.stdout.toString().trim() === version; } - -function safeDelete(dir) { - if (fs.existsSync(dir)) { - fs.rmdirSync(dir, { - recursive: true, - }); - } -} diff --git a/extra/update-version.js b/extra/update-version.js index d72fee68..abca92e2 100644 --- a/extra/update-version.js +++ b/extra/update-version.js @@ -1,7 +1,6 @@ const pkg = require("../package.json"); const fs = require("fs"); -const rmSync = require("./fs-rmSync.js"); -const child_process = require("child_process"); +const childProcess = require("child_process"); const util = require("../src/util"); util.polyfill(); @@ -42,7 +41,7 @@ if (! exists) { function commit(version) { let msg = "Update to " + version; - let res = child_process.spawnSync("git", ["commit", "-m", msg, "-a"]); + let res = childProcess.spawnSync("git", ["commit", "-m", msg, "-a"]); let stdout = res.stdout.toString().trim(); console.log(stdout); @@ -52,7 +51,7 @@ function commit(version) { } function tag(version) { - let res = child_process.spawnSync("git", ["tag", version]); + let res = childProcess.spawnSync("git", ["tag", version]); console.log(res.stdout.toString().trim()); } @@ -67,7 +66,7 @@ function tagExists(version) { throw new Error("invalid version"); } - let res = child_process.spawnSync("git", ["tag", "-l", version]); + let res = childProcess.spawnSync("git", ["tag", "-l", version]); return res.stdout.toString().trim() === version; } diff --git a/extra/update-wiki-version.js b/extra/update-wiki-version.js index 10631c33..f318839f 100644 --- a/extra/update-wiki-version.js +++ b/extra/update-wiki-version.js @@ -1,4 +1,4 @@ -const child_process = require("child_process"); +const childProcess = require("child_process"); const fs = require("fs"); const newVersion = process.env.VERSION; @@ -16,23 +16,23 @@ function updateWiki(newVersion) { safeDelete(wikiDir); - child_process.spawnSync("git", ["clone", "https://github.com/louislam/uptime-kuma.wiki.git", wikiDir]); + childProcess.spawnSync("git", ["clone", "https://github.com/louislam/uptime-kuma.wiki.git", wikiDir]); let content = fs.readFileSync(howToUpdateFilename).toString(); // Replace the version: https://regex101.com/r/hmj2Bc/1 content = content.replace(/(git checkout )([^\s]+)/, `$1${newVersion}`); fs.writeFileSync(howToUpdateFilename, content); - child_process.spawnSync("git", ["add", "-A"], { + childProcess.spawnSync("git", ["add", "-A"], { cwd: wikiDir, }); - child_process.spawnSync("git", ["commit", "-m", `Update to ${newVersion}`], { + childProcess.spawnSync("git", ["commit", "-m", `Update to ${newVersion}`], { cwd: wikiDir, }); console.log("Pushing to Github"); - child_process.spawnSync("git", ["push"], { + childProcess.spawnSync("git", ["push"], { cwd: wikiDir, }); diff --git a/server/2fa.js b/server/2fa.js index bc8145cf..f8d700bf 100644 --- a/server/2fa.js +++ b/server/2fa.js @@ -1,4 +1,3 @@ -const { checkLogin } = require("./util-server"); const { R } = require("redbean-node"); class TwoFA { diff --git a/server/model/monitor.js b/server/model/monitor.js index d61046df..87572113 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -609,11 +609,11 @@ class Monitor extends BeanModel { } static async sendCertInfo(io, monitorID, userID) { - let tls_info = await R.findOne("monitor_tls_info", "monitor_id = ?", [ + let tlsInfo = await R.findOne("monitor_tls_info", "monitor_id = ?", [ monitorID, ]); - if (tls_info != null) { - io.to(userID).emit("certInfo", monitorID, tls_info.info_json); + if (tlsInfo != null) { + io.to(userID).emit("certInfo", monitorID, tlsInfo.info_json); } } diff --git a/server/notification-providers/apprise.js b/server/notification-providers/apprise.js index 692483d8..aa8daca6 100644 --- a/server/notification-providers/apprise.js +++ b/server/notification-providers/apprise.js @@ -1,12 +1,12 @@ const NotificationProvider = require("./notification-provider"); -const child_process = require("child_process"); +const childProcess = require("child_process"); class Apprise extends NotificationProvider { name = "apprise"; async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { - let s = child_process.spawnSync("apprise", [ "-vv", "-b", msg, notification.appriseURL]); + let s = childProcess.spawnSync("apprise", [ "-vv", "-b", msg, notification.appriseURL]); let output = (s.stdout) ? s.stdout.toString() : "ERROR: maybe apprise not found"; diff --git a/server/notification-providers/smtp.js b/server/notification-providers/smtp.js index d85ee88c..a6a0cc01 100644 --- a/server/notification-providers/smtp.js +++ b/server/notification-providers/smtp.js @@ -1,6 +1,6 @@ const nodemailer = require("nodemailer"); const NotificationProvider = require("./notification-provider"); -const { DOWN, UP } = require("../../src/util"); +const { DOWN } = require("../../src/util"); class SMTP extends NotificationProvider { diff --git a/server/prometheus.js b/server/prometheus.js index 9634c308..ead5c44c 100644 --- a/server/prometheus.js +++ b/server/prometheus.js @@ -9,24 +9,24 @@ const commonLabels = [ "monitor_port", ]; -const monitor_cert_days_remaining = new PrometheusClient.Gauge({ +const monitorCertDaysRemaining = new PrometheusClient.Gauge({ name: "monitor_cert_days_remaining", help: "The number of days remaining until the certificate expires", labelNames: commonLabels }); -const monitor_cert_is_valid = new PrometheusClient.Gauge({ +const monitorCertIsValid = new PrometheusClient.Gauge({ name: "monitor_cert_is_valid", help: "Is the certificate still valid? (1 = Yes, 0= No)", labelNames: commonLabels }); -const monitor_response_time = new PrometheusClient.Gauge({ +const monitorResponseTime = new PrometheusClient.Gauge({ name: "monitor_response_time", help: "Monitor Response Time (ms)", labelNames: commonLabels }); -const monitor_status = new PrometheusClient.Gauge({ +const monitorStatus = new PrometheusClient.Gauge({ name: "monitor_status", help: "Monitor Status (1 = UP, 0= DOWN)", labelNames: commonLabels @@ -55,7 +55,7 @@ class Prometheus { } else { isValid = 0; } - monitor_cert_is_valid.set(this.monitorLabelValues, isValid); + monitorCertIsValid.set(this.monitorLabelValues, isValid); } catch (e) { log.error("prometheus", "Caught error"); log.error("prometheus", e); @@ -63,7 +63,7 @@ class Prometheus { try { if (tlsInfo.certInfo != null) { - monitor_cert_days_remaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining); + monitorCertDaysRemaining.set(this.monitorLabelValues, tlsInfo.certInfo.daysRemaining); } } catch (e) { log.error("prometheus", "Caught error"); @@ -72,7 +72,7 @@ class Prometheus { } try { - monitor_status.set(this.monitorLabelValues, heartbeat.status); + monitorStatus.set(this.monitorLabelValues, heartbeat.status); } catch (e) { log.error("prometheus", "Caught error"); log.error("prometheus", e); @@ -80,10 +80,10 @@ class Prometheus { try { if (typeof heartbeat.ping === "number") { - monitor_response_time.set(this.monitorLabelValues, heartbeat.ping); + monitorResponseTime.set(this.monitorLabelValues, heartbeat.ping); } else { // Is it good? - monitor_response_time.set(this.monitorLabelValues, -1); + monitorResponseTime.set(this.monitorLabelValues, -1); } } catch (e) { log.error("prometheus", "Caught error"); @@ -93,10 +93,10 @@ class Prometheus { remove() { try { - monitor_cert_days_remaining.remove(this.monitorLabelValues); - monitor_cert_is_valid.remove(this.monitorLabelValues); - monitor_response_time.remove(this.monitorLabelValues); - monitor_status.remove(this.monitorLabelValues); + monitorCertDaysRemaining.remove(this.monitorLabelValues); + monitorCertIsValid.remove(this.monitorLabelValues); + monitorResponseTime.remove(this.monitorLabelValues); + monitorStatus.remove(this.monitorLabelValues); } catch (e) { console.error(e); } diff --git a/server/routers/api-router.js b/server/routers/api-router.js index ad1a671b..51aa5f3f 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -1,5 +1,5 @@ let express = require("express"); -const { allowDevAllOrigin, getSettings, setting } = require("../util-server"); +const { allowDevAllOrigin } = require("../util-server"); const { R } = require("redbean-node"); const server = require("../server"); const apicache = require("../modules/apicache"); @@ -195,14 +195,6 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques } }); -/** - * Default is published - * @returns {Promise} - */ -async function isPublished() { - return true; -} - function send403(res, msg = "") { res.status(403).json({ "status": "fail", diff --git a/server/server.js b/server/server.js index ced5626c..8a286d70 100644 --- a/server/server.js +++ b/server/server.js @@ -119,7 +119,7 @@ const disableFrameSameOrigin = args["disable-frame-sameorigin"] || !!process.env const cloudflaredToken = args["cloudflared-token"] || process.env.UPTIME_KUMA_CLOUDFLARED_TOKEN || undefined; // 2FA / notp verification defaults -const twofa_verification_opts = { +const twoFAVerifyOptions = { "window": 1, "time": 30 }; @@ -175,6 +175,7 @@ app.use(function (req, res, next) { /** * Total WebSocket client connected to server currently, no actual use + * * @type {number} */ let totalClient = 0; @@ -379,7 +380,7 @@ try { } if (data.token) { - let verify = notp.totp.verify(data.token, user.twofa_secret, twofa_verification_opts); + let verify = notp.totp.verify(data.token, user.twofa_secret, twoFAVerifyOptions); if (user.twofa_last_token !== data.token && verify) { afterLogin(socket, user); @@ -546,7 +547,7 @@ try { socket.userID, ]); - let verify = notp.totp.verify(token, user.twofa_secret, twofa_verification_opts); + let verify = notp.totp.verify(token, user.twofa_secret, twoFAVerifyOptions); if (user.twofa_last_token !== token && verify) { callback({ diff --git a/server/util-server.js b/server/util-server.js index 61b2ed12..482fbaea 100644 --- a/server/util-server.js +++ b/server/util-server.js @@ -88,9 +88,9 @@ exports.pingAsync = function (hostname, ipv6 = false) { }); }; -exports.dnsResolve = function (hostname, resolver_server, rrtype) { +exports.dnsResolve = function (hostname, resolverServer, rrtype) { const resolver = new Resolver(); - resolver.setServers([resolver_server]); + resolver.setServers([resolverServer]); return new Promise((resolve, reject) => { if (rrtype == "PTR") { resolver.reverse(hostname, (err, records) => { @@ -257,19 +257,19 @@ exports.checkCertificate = function (res) { // Return: true if the status code is within the accepted ranges, false otherwise // Will throw an error if the provided status code is not a valid range string or code string -exports.checkStatusCode = function (status, accepted_codes) { - if (accepted_codes == null || accepted_codes.length === 0) { +exports.checkStatusCode = function (status, acceptedCodes) { + if (acceptedCodes == null || acceptedCodes.length === 0) { return false; } - for (const code_range of accepted_codes) { - const code_range_split = code_range.split("-").map(string => parseInt(string)); - if (code_range_split.length === 1) { - if (status === code_range_split[0]) { + for (const codeRange of acceptedCodes) { + const codeRangeSplit = codeRange.split("-").map(string => parseInt(string)); + if (codeRangeSplit.length === 1) { + if (status === codeRangeSplit[0]) { return true; } - } else if (code_range_split.length === 2) { - if (status >= code_range_split[0] && status <= code_range_split[1]) { + } else if (codeRangeSplit.length === 2) { + if (status >= codeRangeSplit[0] && status <= codeRangeSplit[1]) { return true; } } else { diff --git a/src/components/Confirm.vue b/src/components/Confirm.vue index 99407583..fe5bf288 100644 --- a/src/components/Confirm.vue +++ b/src/components/Confirm.vue @@ -42,6 +42,7 @@ export default { default: "No", }, }, + emits: ["yes"], data: () => ({ modal: null, }), diff --git a/src/components/CopyableInput.vue b/src/components/CopyableInput.vue index 1fe89802..08b60ddd 100644 --- a/src/components/CopyableInput.vue +++ b/src/components/CopyableInput.vue @@ -57,6 +57,7 @@ export default { default: undefined, }, }, + emits: ["update:modelValue"], data() { return { visibility: "password", diff --git a/src/components/HiddenInput.vue b/src/components/HiddenInput.vue index 1d32a2e6..a9a789ce 100644 --- a/src/components/HiddenInput.vue +++ b/src/components/HiddenInput.vue @@ -48,6 +48,7 @@ export default { default: undefined, }, }, + emits: ["update:modelValue"], data() { return { visibility: "password", diff --git a/src/mixins/socket.js b/src/mixins/socket.js index 0f9846d4..e77a0cd4 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -1,6 +1,6 @@ import { io } from "socket.io-client"; import { useToast } from "vue-toastification"; -import jwt_decode from "jwt-decode"; +import jwtDecode from "jwt-decode"; import Favico from "favico.js"; const toast = useToast(); @@ -266,7 +266,7 @@ export default { const jwtToken = this.$root.storage().token; if (jwtToken && jwtToken !== "autoLogin") { - return jwt_decode(jwtToken); + return jwtDecode(jwtToken); } return undefined; }, diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index efe03cae..3baae08b 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -264,6 +264,7 @@ const toast = useToast(); const leavePageMsg = "Do you really want to leave? you have unsaved changes!"; +// eslint-disable-next-line no-unused-vars let feedInterval; const favicon = new Favico({