Ver código fonte

Space scandal retified (hopefully)

7heMech 1 mês atrás
pai
commit
963125f963
3 arquivos alterados com 174 adições e 174 exclusões
  1. 16 16
      backend/routes/main.js
  2. 68 68
      backend/routes/version.js
  3. 90 90
      frontend/src/components/SiteFooter.tsx

+ 16 - 16
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;

+ 68 - 68
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;

+ 90 - 90
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<string | null>(null);
-    const [isNewVersionAvailable, setIsNewVersionAvailable] = useState(false);
+	const health = useHealth();
+	const [latestVersion, setLatestVersion] = useState<string | null>(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 (
-        <footer className="footer d-print-none py-3">
-            <div className="container-xl">
-                <div className="row text-center align-items-center flex-row-reverse">
-                    <div className="col-lg-auto ms-lg-auto">
-                        <ul className="list-inline list-inline-dots mb-0">
-                            <li className="list-inline-item">
-                                <a
-                                    href="https://github.com/NginxProxyManager/nginx-proxy-manager"
-                                    target="_blank"
-                                    className="link-secondary"
-                                    rel="noopener"
-                                >
-                                    <T id="footer.github-fork" />
-                                </a>
-                            </li>
-                        </ul>
-                    </div>
-                    <div className="col-12 col-lg-auto mt-3 mt-lg-0">
-                        <ul className="list-inline list-inline-dots mb-0">
-                            <li className="list-inline-item">
-                                © 2025{" "}
-                                <a href="https://jc21.com" rel="noreferrer" target="_blank" className="link-secondary">
-                                    jc21.com
-                                </a>
-                            </li>
-                            <li className="list-inline-item">
-                                Theme by{" "}
-                                <a href="https://tabler.io" rel="noreferrer" target="_blank" className="link-secondary">
-                                    Tabler
-                                </a>
-                            </li>
-                            <li className="list-inline-item">
-                                <a
-                                    href={`https://github.com/NginxProxyManager/nginx-proxy-manager/releases/tag/${getVersion()}`}
-                                    className="link-secondary"
-                                    target="_blank"
-                                    rel="noopener"
-                                >
-                                    {" "}
-                                    {getVersion()}{" "}
-                                </a>
-                            </li>
-                            {isNewVersionAvailable && latestVersion && (
-                                <li className="list-inline-item">
-                                    <a
-                                        href={`https://github.com/NginxProxyManager/nginx-proxy-manager/releases/tag/${latestVersion}`}
-                                        className="link-warning fw-bold"
-                                        target="_blank"
-                                        rel="noopener"
-                                        title={`New version ${latestVersion} is available`}
-                                    >
-                                        Update Available: ({latestVersion})
-                                    </a>
-                                </li>
-                            )}
-                        </ul>
-                    </div>
-                </div>
-            </div>
-        </footer>
-    );
-}
+	return (
+		<footer className="footer d-print-none py-3">
+			<div className="container-xl">
+				<div className="row text-center align-items-center flex-row-reverse">
+					<div className="col-lg-auto ms-lg-auto">
+						<ul className="list-inline list-inline-dots mb-0">
+							<li className="list-inline-item">
+								<a
+									href="https://github.com/NginxProxyManager/nginx-proxy-manager"
+									target="_blank"
+									className="link-secondary"
+									rel="noopener"
+								>
+									<T id="footer.github-fork" />
+								</a>
+							</li>
+						</ul>
+					</div>
+					<div className="col-12 col-lg-auto mt-3 mt-lg-0">
+						<ul className="list-inline list-inline-dots mb-0">
+							<li className="list-inline-item">
+								© 2025{" "}
+								<a href="https://jc21.com" rel="noreferrer" target="_blank" className="link-secondary">
+									jc21.com
+								</a>
+							</li>
+							<li className="list-inline-item">
+								Theme by{" "}
+								<a href="https://tabler.io" rel="noreferrer" target="_blank" className="link-secondary">
+									Tabler
+								</a>
+							</li>
+							<li className="list-inline-item">
+								<a
+									href={`https://github.com/NginxProxyManager/nginx-proxy-manager/releases/tag/${getVersion()}`}
+									className="link-secondary"
+									target="_blank"
+									rel="noopener"
+								>
+									{" "}
+									{getVersion()}{" "}
+								</a>
+							</li>
+							{isNewVersionAvailable && latestVersion && (
+								<li className="list-inline-item">
+									<a
+										href={`https://github.com/NginxProxyManager/nginx-proxy-manager/releases/tag/${latestVersion}`}
+										className="link-warning fw-bold"
+										target="_blank"
+										rel="noopener"
+										title={`New version ${latestVersion} is available`}
+									>
+										Update Available: ({latestVersion})
+									</a>
+								</li>
+							)}
+						</ul>
+					</div>
+				</div>
+			</div>
+		</footer>
+	);
+}