import Cookies from "cookies";
import { versionCookieName } from "@cocalc/util/consts";
import basePath from "@cocalc/backend/base-path";
import getServerSettings from "../servers/server-settings";
import getLogger from "../logger";
export let minVersion: number = 0;
const logger = getLogger("proxy:version");
let initialized = false;
export async function init(): Promise<void> {
if (initialized) {
return;
}
initialized = true;
const serverSettings = await getServerSettings();
minVersion = serverSettings.version.version_min_browser ?? 0;
serverSettings.table.on("change", () => {
minVersion = serverSettings.version.version_min_browser ?? 0;
});
}
export function versionCheckFails(req, res?): boolean {
if (minVersion == 0) {
return false;
}
if (req.url?.includes("raw/.smc/ws")) {
return false;
}
const cookies = new Cookies(req);
const rawVal = cookies.get(versionCookieName(basePath));
if (!rawVal) {
return false;
}
const version = parseInt(rawVal);
logger.debug("version check", { version, minVersion });
if (isNaN(version) || version < minVersion) {
if (res != null) {
res.writeHead(426, { "Content-Type": "text/html" });
res.end(
`426 (UPGRADE REQUIRED): reload CoCalc tab or restart your browser -- version=${version} < minVersion=${minVersion}`,
);
}
return true;
} else {
return false;
}
}