From f75c9e4f0ca4f7417ea0c7f2184be4dd1332be05 Mon Sep 17 00:00:00 2001
From: Louis Lam <louislam@users.noreply.github.com>
Date: Thu, 14 Oct 2021 14:09:16 +0800
Subject: [PATCH] add UPTIME_KUMA_HOST, UPTIME_KUMA_PORT and special handling
 for FreeBSD

---
 server/ping-lite.js   |  5 +----
 server/server.js      | 20 +++++++++++++++-----
 server/util-server.js |  6 ++++++
 3 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/server/ping-lite.js b/server/ping-lite.js
index 0af0e970..37709aaf 100644
--- a/server/ping-lite.js
+++ b/server/ping-lite.js
@@ -4,10 +4,7 @@ const net = require("net");
 const spawn = require("child_process").spawn;
 const events = require("events");
 const fs = require("fs");
-const WIN = /^win/.test(process.platform);
-const LIN = /^linux/.test(process.platform);
-const MAC = /^darwin/.test(process.platform);
-const FBSD = /^freebsd/.test(process.platform);
+const { MAC, FBSD, LIN, WIN } = require("./util-server");
 
 module.exports = Ping;
 
diff --git a/server/server.js b/server/server.js
index 7dbd6155..376e7bb3 100644
--- a/server/server.js
+++ b/server/server.js
@@ -43,7 +43,7 @@ console.log("Importing this project modules");
 debug("Importing Monitor");
 const Monitor = require("./model/monitor");
 debug("Importing Settings");
-const { getSettings, setSettings, setting, initJWTSecret, checkLogin, startUnitTest } = require("./util-server");
+const { getSettings, setSettings, setting, initJWTSecret, checkLogin, startUnitTest, FBSD } = require("./util-server");
 
 debug("Importing Notification");
 const { Notification } = require("./notification");
@@ -61,12 +61,22 @@ console.info("Version: " + checkVersion.version);
 
 // If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available and the unspecified IPv4 address (0.0.0.0) otherwise.
 // Dual-stack support for (::)
-const hostname = args.host || process.env.HOST;
-const port = parseInt(args.port || process.env.PORT || 3001);
+let hostname = process.env.UPTIME_KUMA_HOST || args.host;
+
+// Also read HOST if not FreeBSD, as HOST is a system environment variable in FreeBSD
+if (!hostname && !FBSD) {
+    hostname = process.env.HOST;
+}
+
+if (hostname) {
+    console.log("Custom hostname: " + hostname);
+}
+
+const port = parseInt(process.env.UPTIME_KUMA_PORT || process.env.PORT || args.port || 3001);
 
 // SSL
-const sslKey = process.env.SSL_KEY || args["ssl-key"] || undefined;
-const sslCert = process.env.SSL_CERT || args["ssl-cert"] || undefined;
+const sslKey = process.env.UPTIME_KUMA_SSL_KEY || process.env.SSL_KEY || args["ssl-key"] || undefined;
+const sslCert = process.env.UPTIME_KUMA_SSL_CERT || process.env.SSL_CERT || args["ssl-cert"] || undefined;
 
 /**
  * Run unit test after the server is ready
diff --git a/server/util-server.js b/server/util-server.js
index 5620d674..f6faa7a2 100644
--- a/server/util-server.js
+++ b/server/util-server.js
@@ -7,6 +7,12 @@ const dayjs = require("dayjs");
 const { Resolver } = require("dns");
 const child_process = require("child_process");
 
+// From ping-lite
+exports.WIN = /^win/.test(process.platform);
+exports.LIN = /^linux/.test(process.platform);
+exports.MAC = /^darwin/.test(process.platform);
+exports.FBSD = /^freebsd/.test(process.platform);
+
 /**
  * Init or reset JWT secret
  * @returns {Promise<Bean>}