diff --git a/web/base.pug b/web/base.pug index 4dd5f04a..a1423aa6 100644 --- a/web/base.pug +++ b/web/base.pug @@ -23,7 +23,7 @@ doctype html ============================================================================== - - var prefix = "./" + var root_prefix = "./" title = "" main_js = "" @@ -36,7 +36,7 @@ block vars block _vars_dynamic - - share_dir = `${prefix}share` + share_dir = `${root_prefix}share` css_dir = `${share_dir}/css` js_dir = `${share_dir}/js` svg_dir = `${share_dir}/svg` @@ -61,6 +61,8 @@ html(lang="en") if main_js script(type="module") + | import {setRootPrefix} from "#{js_dir}/vars.js"; + | setRootPrefix("#{root_prefix}"); | import {main} from "#{js_dir}/#{main_js}.js"; | main(); diff --git a/web/index.html b/web/index.html index a1ad9c54..af565537 100644 --- a/web/index.html +++ b/web/index.html @@ -40,7 +40,9 @@ - @@ -66,7 +68,7 @@
| Server: | -+ |
This PiKVM device has running kvmd-ipmi daemon and provides IPMI 2.0 interface for some basic BMC operations like on/off/reset the server. diff --git a/web/ipmi/index.pug b/web/ipmi/index.pug index 6fb6bb68..381ae63e 100644 --- a/web/ipmi/index.pug +++ b/web/ipmi/index.pug @@ -3,7 +3,7 @@ extends ../start.pug append vars - - prefix = "../" + root_prefix = "../" title = "PiKVM IPMI Info" main_js = "ipmi/main" index_link = true diff --git a/web/kvm/index.html b/web/kvm/index.html index 41529564..6458193f 100644 --- a/web/kvm/index.html +++ b/web/kvm/index.html @@ -52,13 +52,15 @@ -
No datadiff --git a/web/kvm/index.pug b/web/kvm/index.pug index 5b0bf260..d202ada4 100644 --- a/web/kvm/index.pug +++ b/web/kvm/index.pug @@ -3,7 +3,7 @@ extends ../base.pug append vars - - prefix = "../" + root_prefix = "../" title = "PiKVM Session" main_js = "kvm/main" body_class = "body-no-select" diff --git a/web/kvm/navbar-health.pug b/web/kvm/navbar-health.pug index f33e3482..91696915 100644 --- a/web/kvm/navbar-health.pug +++ b/web/kvm/navbar-health.pug @@ -31,4 +31,4 @@ #fan-health-message-fail hr +menu_message("led-fan", "Fan failed", "led-gray") - | A fan error occured, please #[a(href="/api/log?seek=3600&follow=1" target="_blank") check the log] + | A fan error occured, please #[a(href=`${root_prefix}api/log?seek=3600&follow=1` target="_blank") check the log] diff --git a/web/kvm/navbar.pug b/web/kvm/navbar.pug index 4ea9812a..9ef1464e 100644 --- a/web/kvm/navbar.pug +++ b/web/kvm/navbar.pug @@ -83,7 +83,7 @@ mixin menu_spoiler(title) ul#navbar li.left - a(id="logo" href="/") ← + a(id="logo" href=root_prefix) ← img.svg-gray(src=`${svg_dir}/logo.svg` alt="π-kvm") include navbar-health.pug diff --git a/web/kvm/window-about.pug b/web/kvm/window-about.pug index 0c717aa3..8a1dc361 100644 --- a/web/kvm/window-about.pug +++ b/web/kvm/window-about.pug @@ -34,7 +34,8 @@ mixin about_tab(name, title, checked=false) +about_tab("meta", "Meta", true) div span.code-comment - | // You can get this JSON using handle #[a(target="_blank" href="/api/info?fields=meta") /api/info?fields=meta]#[br] + | // You can get this JSON using handle + | #[a(target="_blank" href=`${root_prefix}api/info?fields=meta`) /api/info?fields=meta]#[br] | // In the standard configuration this data#[br] | // is specified in the file /etc/kvmd/meta.yaml br diff --git a/web/login/index.html b/web/login/index.html index 389b5871..a8cbedd9 100644 --- a/web/login/index.html +++ b/web/login/index.html @@ -39,7 +39,9 @@ - diff --git a/web/login/index.pug b/web/login/index.pug index 084e017c..11600c01 100644 --- a/web/login/index.pug +++ b/web/login/index.pug @@ -3,7 +3,7 @@ extends ../base.pug append vars - - prefix = "../" + root_prefix = "../" title = "PiKVM Login" main_js = "login/main" css_list.push("window", "modal", "login/login") diff --git a/web/share/js/bb.js b/web/share/js/bb.js index ba49efa6..38549da6 100644 --- a/web/share/js/bb.js +++ b/web/share/js/bb.js @@ -23,6 +23,9 @@ "use strict"; +import {ROOT_PREFIX} from "./vars.js"; + + export var browser = new function() { // https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser/9851769 // https://github.com/fingerprintjs/fingerprintjs/discussions/641 @@ -133,12 +136,12 @@ export function checkBrowser(desktop_css, mobile_css) { let force_desktop = (new URL(window.location.href)).searchParams.get("force_desktop"); let force_mobile = (new URL(window.location.href)).searchParams.get("force_mobile"); if ((force_desktop || !browser.is_mobile) && !force_mobile) { - __addCssLink("/share/css/x-desktop.css"); + __addCssLink("x-desktop.css"); if (desktop_css) { __addCssLink(desktop_css); } } else { - __addCssLink("/share/css/x-mobile.css"); + __addCssLink("x-mobile.css"); if (mobile_css) { __addCssLink(mobile_css); } @@ -148,6 +151,7 @@ export function checkBrowser(desktop_css, mobile_css) { } function __addCssLink(path) { + path = `${ROOT_PREFIX}share/css/${path}`; console.log("===== Adding CSS:", path); let el_head = document.getElementsByTagName("head")[0]; let el_link = document.createElement("link"); diff --git a/web/share/js/index/main.js b/web/share/js/index/main.js index 19cba440..9ebb1f60 100644 --- a/web/share/js/index/main.js +++ b/web/share/js/index/main.js @@ -23,6 +23,7 @@ "use strict"; +import {ROOT_PREFIX} from "../vars.js"; import {tools, $} from "../tools.js"; import {checkBrowser} from "../bb.js"; import {wm, initWindowManager} from "../wm.js"; @@ -51,7 +52,7 @@ function __setAppText() { } function __loadKvmdInfo() { - tools.httpGet("/api/info", {"fields": "auth,meta,extras"}, function(http) { + tools.httpGet("api/info", {"fields": "auth,meta,extras"}, function(http) { if (http.status === 200) { let info = JSON.parse(http.responseText).result; @@ -100,7 +101,7 @@ function __loadKvmdInfo() { document.title = "PiKVM Index"; } } else if (http.status === 401 || http.status === 403) { - document.location.href = "/login"; + tools.currentOpen("login"); } else { setTimeout(__loadKvmdInfo, 1000); } @@ -108,11 +109,14 @@ function __loadKvmdInfo() { } function __makeApp(id, path, icon, name) { + // Tailing slash in href is added to avoid Nginx 301 redirect + // when the location doesn't have tailing slash: "foo -> foo/". + // Reverse proxy over PiKVM can be misconfigured to handle this. return `
This PiKVM device has running kvmd-vnc daemon and provides VNC access to the server.
WARNING! We strongly don't recommend you to use VNC in untrusted networks without diff --git a/web/vnc/index.pug b/web/vnc/index.pug index 5d9c1146..de1a9c01 100644 --- a/web/vnc/index.pug +++ b/web/vnc/index.pug @@ -3,7 +3,7 @@ extends ../start.pug append vars - - prefix = "../" + root_prefix = "../" title = "PiKVM VNC Info" main_js = "vnc/main" index_link = true