diff --git a/backend/routes/main.js b/backend/routes/main.js index 2108144a..94682cfb 100644 --- a/backend/routes/main.js +++ b/backend/routes/main.js @@ -17,9 +17,9 @@ import usersRoutes from "./users.js"; import versionRoutes from "./version.js"; const router = express.Router({ - caseSensitive: true, - strict: true, - mergeParams: true, + caseSensitive: true, + strict: true, + mergeParams: true, }); /** @@ -27,18 +27,18 @@ const router = express.Router({ * GET /api */ router.get("/", async (_, res /*, next*/) => { - const version = pjson.version.split("-").shift().split("."); - const setup = await isSetup(); + const version = pjson.version.split("-").shift().split("."); + const setup = await isSetup(); - res.status(200).send({ - status: "OK", - setup, - version: { - major: Number.parseInt(version.shift(), 10), - minor: Number.parseInt(version.shift(), 10), - revision: Number.parseInt(version.shift(), 10), - }, - }); + res.status(200).send({ + status: "OK", + setup, + version: { + major: Number.parseInt(version.shift(), 10), + minor: Number.parseInt(version.shift(), 10), + revision: Number.parseInt(version.shift(), 10), + }, + }); }); router.use("/schema", schemaRoutes); @@ -61,8 +61,8 @@ router.use("/nginx/certificates", certificatesHostsRoutes); * ALL /api/* */ router.all(/(.+)/, (req, _, next) => { - req.params.page = req.params["0"]; - next(new errs.ItemNotFoundError(req.params.page)); + req.params.page = req.params["0"]; + next(new errs.ItemNotFoundError(req.params.page)); }); export default router; diff --git a/backend/routes/version.js b/backend/routes/version.js index de614f0c..328888af 100644 --- a/backend/routes/version.js +++ b/backend/routes/version.js @@ -5,97 +5,97 @@ import https from "node:https"; import { ProxyAgent } from "proxy-agent"; const router = express.Router({ - caseSensitive: true, - strict: true, - mergeParams: true, + caseSensitive: true, + strict: true, + mergeParams: true, }); /** * /api/version/check */ router - .route("/check") - .options((_, res) => { - res.sendStatus(204); - }) + .route("/check") + .options((_, res) => { + res.sendStatus(204); + }) - /** - * GET /api/version/check - * - * Check for available updates - */ - .get(async (req, res, next) => { - try { - const agent = new ProxyAgent(); - const url = "https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest"; + /** + * GET /api/version/check + * + * Check for available updates + */ + .get(async (req, res, next) => { + try { + const agent = new ProxyAgent(); + const url = "https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest"; - const data = await new Promise((resolve, reject) => { - https - .get(url, { agent }, (response) => { - if (response.statusCode !== 200) { - reject(new Error(`GitHub API returned ${response.statusCode}`)); - return; - } + const data = await new Promise((resolve, reject) => { + https + .get(url, { agent }, (response) => { + if (response.statusCode !== 200) { + reject(new Error(`GitHub API returned ${response.statusCode}`)); + return; + } - response.setEncoding("utf8"); - let raw_data = ""; + response.setEncoding("utf8"); + let raw_data = ""; - response.on("data", (chunk) => { - raw_data += chunk; - }); + response.on("data", (chunk) => { + raw_data += chunk; + }); - response.on("end", () => { - try { - resolve(JSON.parse(raw_data)); - } catch (err) { - reject(err); - } - }); - }) - .on("error", (err) => { - reject(err); - }); - }); + response.on("end", () => { + try { + resolve(JSON.parse(raw_data)); + } catch (err) { + reject(err); + } + }); + }) + .on("error", (err) => { + reject(err); + }); + }); - const latestVersion = data.tag_name; + const latestVersion = data.tag_name; - const version = pjson.version.split("-").shift().split("."); - const currentVersion = `v${version[0]}.${version[1]}.${version[2]}`; + const version = pjson.version.split("-").shift().split("."); + const currentVersion = `v${version[0]}.${version[1]}.${version[2]}`; - res.status(200).send({ - current: currentVersion, - latest: latestVersion, - updateAvailable: compareVersions(currentVersion, latestVersion), - }); - } catch (error) { - debug(logger, `${req.method.toUpperCase()} ${req.path}: ${error}`); - res.status(200).send({ - current: null, - latest: null, - updateAvailable: false, - }); - } - }); + res.status(200).send({ + current: currentVersion, + latest: latestVersion, + updateAvailable: compareVersions(currentVersion, latestVersion), + }); + } catch (error) { + debug(logger, `${req.method.toUpperCase()} ${req.path}: ${error}`); + res.status(200).send({ + current: null, + latest: null, + updateAvailable: false, + }); + } + }); /** * Compare two version strings * */ function compareVersions(current, latest) { - const cleanCurrent = current.replace(/^v/, ""); - const cleanLatest = latest.replace(/^v/, ""); + const cleanCurrent = current.replace(/^v/, ""); + const cleanLatest = latest.replace(/^v/, ""); - const currentParts = cleanCurrent.split(".").map(Number); - const latestParts = cleanLatest.split(".").map(Number); + const currentParts = cleanCurrent.split(".").map(Number); + const latestParts = cleanLatest.split(".").map(Number); - for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) { - const curr = currentParts[i] || 0; - const lat = latestParts[i] || 0; + for (let i = 0; i < Math.max(currentParts.length, latestParts.length); i++) { + const curr = currentParts[i] || 0; + const lat = latestParts[i] || 0; - if (lat > curr) return true; - if (lat < curr) return false; - } - return false; + if (lat > curr) return true; + if (lat < curr) return false; + } + return false; } export default router; diff --git a/frontend/src/components/SiteFooter.tsx b/frontend/src/components/SiteFooter.tsx index e529a19d..2135d2c6 100644 --- a/frontend/src/components/SiteFooter.tsx +++ b/frontend/src/components/SiteFooter.tsx @@ -3,97 +3,97 @@ import { useHealth } from "src/hooks"; import { T } from "src/locale"; export function SiteFooter() { - const health = useHealth(); - const [latestVersion, setLatestVersion] = useState(null); - const [isNewVersionAvailable, setIsNewVersionAvailable] = useState(false); + const health = useHealth(); + const [latestVersion, setLatestVersion] = useState(null); + const [isNewVersionAvailable, setIsNewVersionAvailable] = useState(false); - const getVersion = () => { - if (!health.data) { - return ""; - } - const v = health.data.version; - return `v${v.major}.${v.minor}.${v.revision}`; - }; + const getVersion = () => { + if (!health.data) { + return ""; + } + const v = health.data.version; + return `v${v.major}.${v.minor}.${v.revision}`; + }; - useEffect(() => { - const checkForUpdates = async () => { - try { - const response = await fetch("/api/version/check"); - if (response.ok) { - const data = await response.json(); - setLatestVersion(data.latest); - setIsNewVersionAvailable(data.updateAvailable); - } - } catch (error) { - console.debug("Could not check for updates:", error); - } - }; + useEffect(() => { + const checkForUpdates = async () => { + try { + const response = await fetch("/api/version/check"); + if (response.ok) { + const data = await response.json(); + setLatestVersion(data.latest); + setIsNewVersionAvailable(data.updateAvailable); + } + } catch (error) { + console.debug("Could not check for updates:", error); + } + }; - if (health.data) { - checkForUpdates(); - } - }, [health.data]); + if (health.data) { + checkForUpdates(); + } + }, [health.data]); - return ( - - ); -} \ No newline at end of file + return ( + + ); +}