mirror of
https://github.com/louislam/uptime-kuma.git
synced 2026-01-31 11:03:11 +08:00
Previously, errors in cloudflared socket handlers were silently swallowed by empty catch blocks, making debugging difficult. This commit adds proper error logging to all empty catch blocks in the cloudflared socket handler to improve observability and debugging. - Added error logging to join handler - Added error logging to leave handler - Added error logging to start handler - Added error logging to removeToken handler
131 lines
3.8 KiB
JavaScript
131 lines
3.8 KiB
JavaScript
const { checkLogin, setSetting, setting, doubleCheckPassword } = require("../util-server");
|
|
const { CloudflaredTunnel } = require("node-cloudflared-tunnel");
|
|
const { UptimeKumaServer } = require("../uptime-kuma-server");
|
|
const { log } = require("../../src/util");
|
|
const io = UptimeKumaServer.getInstance().io;
|
|
|
|
const prefix = "cloudflared_";
|
|
const cloudflared = new CloudflaredTunnel();
|
|
|
|
/**
|
|
* Change running state
|
|
* @param {string} running Is it running?
|
|
* @param {string} message Message to pass
|
|
* @returns {void}
|
|
*/
|
|
cloudflared.change = (running, message) => {
|
|
io.to("cloudflared").emit(prefix + "running", running);
|
|
io.to("cloudflared").emit(prefix + "message", message);
|
|
};
|
|
|
|
/**
|
|
* Emit an error message
|
|
* @param {string} errorMessage Error message to send
|
|
* @returns {void}
|
|
*/
|
|
cloudflared.error = (errorMessage) => {
|
|
io.to("cloudflared").emit(prefix + "errorMessage", errorMessage);
|
|
};
|
|
|
|
/**
|
|
* Handler for cloudflared
|
|
* @param {Socket} socket Socket.io instance
|
|
* @returns {void}
|
|
*/
|
|
module.exports.cloudflaredSocketHandler = (socket) => {
|
|
|
|
socket.on(prefix + "join", async () => {
|
|
try {
|
|
checkLogin(socket);
|
|
socket.join("cloudflared");
|
|
io.to(socket.userID).emit(prefix + "installed", cloudflared.checkInstalled());
|
|
io.to(socket.userID).emit(prefix + "running", cloudflared.running);
|
|
io.to(socket.userID).emit(prefix + "token", await setting("cloudflaredTunnelToken"));
|
|
} catch (error) {
|
|
log.error("cloudflared", "Error in join handler: " + error.message);
|
|
}
|
|
});
|
|
|
|
socket.on(prefix + "leave", async () => {
|
|
try {
|
|
checkLogin(socket);
|
|
socket.leave("cloudflared");
|
|
} catch (error) {
|
|
log.error("cloudflared", "Error in leave handler: " + error.message);
|
|
}
|
|
});
|
|
|
|
socket.on(prefix + "start", async (token) => {
|
|
try {
|
|
checkLogin(socket);
|
|
if (token && typeof token === "string") {
|
|
await setSetting("cloudflaredTunnelToken", token);
|
|
cloudflared.token = token;
|
|
} else {
|
|
cloudflared.token = null;
|
|
}
|
|
cloudflared.start();
|
|
} catch (error) {
|
|
log.error("cloudflared", "Error in start handler: " + error.message);
|
|
}
|
|
});
|
|
|
|
socket.on(prefix + "stop", async (currentPassword, callback) => {
|
|
try {
|
|
checkLogin(socket);
|
|
const disabledAuth = await setting("disableAuth");
|
|
if (!disabledAuth) {
|
|
await doubleCheckPassword(socket, currentPassword);
|
|
}
|
|
cloudflared.stop();
|
|
} catch (error) {
|
|
callback({
|
|
ok: false,
|
|
msg: error.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
socket.on(prefix + "removeToken", async () => {
|
|
try {
|
|
checkLogin(socket);
|
|
await setSetting("cloudflaredTunnelToken", "");
|
|
} catch (error) {
|
|
log.error("cloudflared", "Error in removeToken handler: " + error.message);
|
|
}
|
|
});
|
|
|
|
};
|
|
|
|
/**
|
|
* Automatically start cloudflared
|
|
* @param {string} token Cloudflared tunnel token
|
|
* @returns {Promise<void>}
|
|
*/
|
|
module.exports.autoStart = async (token) => {
|
|
if (!token) {
|
|
token = await setting("cloudflaredTunnelToken");
|
|
} else {
|
|
// Override the current token via args or env var
|
|
await setSetting("cloudflaredTunnelToken", token);
|
|
console.log("Use cloudflared token from args or env var");
|
|
}
|
|
|
|
if (token) {
|
|
console.log("Start cloudflared");
|
|
cloudflared.token = token;
|
|
cloudflared.start();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Stop cloudflared
|
|
* @returns {Promise<void>}
|
|
*/
|
|
module.exports.stop = async () => {
|
|
log.info("cloudflared", "Stop cloudflared");
|
|
if (cloudflared) {
|
|
cloudflared.stop();
|
|
}
|
|
};
|