mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-11-04 21:56:12 +08:00 
			
		
		
		
	Allow unused vars in args and fix more eslint issues
This commit is contained in:
		@@ -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,
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
const { checkLogin } = require("./util-server");
 | 
			
		||||
const { R } = require("redbean-node");
 | 
			
		||||
 | 
			
		||||
class TwoFA {
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -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<boolean>}
 | 
			
		||||
 */
 | 
			
		||||
async function isPublished() {
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function send403(res, msg = "") {
 | 
			
		||||
    res.status(403).json({
 | 
			
		||||
        "status": "fail",
 | 
			
		||||
 
 | 
			
		||||
@@ -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({
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,7 @@ export default {
 | 
			
		||||
            default: "No",
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    emits: ["yes"],
 | 
			
		||||
    data: () => ({
 | 
			
		||||
        modal: null,
 | 
			
		||||
    }),
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,7 @@ export default {
 | 
			
		||||
            default: undefined,
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    emits: ["update:modelValue"],
 | 
			
		||||
    data() {
 | 
			
		||||
        return {
 | 
			
		||||
            visibility: "password",
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,7 @@ export default {
 | 
			
		||||
            default: undefined,
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    emits: ["update:modelValue"],
 | 
			
		||||
    data() {
 | 
			
		||||
        return {
 | 
			
		||||
            visibility: "password",
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
        },
 | 
			
		||||
 
 | 
			
		||||
@@ -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({
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user