v0.31.5
This commit is contained in:
1 parent
d942c1a35d
commit
75104f87ba
103 files changed
+1344
-370
No files matched your search
+20
-32
@@ -2,6 +2,21 @@ mod documentation;
|
||||
mod public;
|
||||
mod panel_content;
|
||||
mod panel_assets;
|
||||
|
||||
// Embedded asset URLs change with every build, independent of Cargo package version.
|
||||
// Only an exact identifier from this binary is accepted; arbitrary suffixes are 404.
|
||||
fn asset_build_id() -> &'static str {
|
||||
include_str!(concat!(env!("OUT_DIR"), "/asset-build-id.txt"))
|
||||
}
|
||||
fn fingerprinted_path(path: &str, prefix: &str) -> Option<String> {
|
||||
let name = path.strip_prefix(prefix)?;
|
||||
let (stem, extension) = name.rsplit_once('.')?;
|
||||
if extension != "js" && extension != "css" { return None; }
|
||||
let (base, token) = stem.rsplit_once('_')?;
|
||||
if token != asset_build_id() { return None; }
|
||||
Some(format!("{prefix}{base}.{extension}"))
|
||||
}
|
||||
|
||||
use crate::{
|
||||
auth::{self, Session},
|
||||
config::Update,
|
||||
@@ -107,45 +122,18 @@ pub fn router(state: Arc<App>) -> Router {
|
||||
.route("/logging", get(public::index))
|
||||
.route("/logs", get(public::index))
|
||||
.route("/settings", get(public::index))
|
||||
.route("/assets/login.js", get(panel_assets::serve))
|
||||
.route("/assets/{fingerprinted}", get(panel_assets::serve))
|
||||
.route("/assets/login-langs.json", get(panel_assets::serve))
|
||||
.route("/docs", get(documentation::index))
|
||||
.route("/docs/", get(documentation::index))
|
||||
.route("/docs/openapi.json", get(documentation::schema))
|
||||
.route("/docs/content.json", get(documentation::content))
|
||||
.route("/docs/init.js", get(documentation::script))
|
||||
.route("/docs/style.css", get(documentation::style))
|
||||
.route(
|
||||
"/docs/swagger-ui-bundle.js",
|
||||
get(|| async { documentation::asset("swagger-ui-bundle.js") }),
|
||||
)
|
||||
.route(
|
||||
"/docs/swagger-ui.css",
|
||||
get(|| async { documentation::asset("swagger-ui.css") }),
|
||||
)
|
||||
.route("/docs/{fingerprinted}", get(documentation::fingerprinted))
|
||||
.route(
|
||||
"/docs/licenses.txt",
|
||||
get(|| async { documentation::asset("licenses.txt") }),
|
||||
)
|
||||
.route("/assets/langs.json", get(panel_assets::serve))
|
||||
.route("/assets/app.js", get(panel_assets::serve))
|
||||
.route("/assets/management.js", get(panel_assets::serve))
|
||||
.route("/assets/drafts.js", get(panel_assets::serve))
|
||||
.route("/assets/integrations.js", get(panel_assets::serve))
|
||||
.route("/assets/traffic-panel.js", get(panel_assets::serve))
|
||||
.route("/assets/cache-panel.js", get(panel_assets::serve))
|
||||
.route("/assets/transform-panel.js", get(panel_assets::serve))
|
||||
.route("/assets/file-logs.js", get(panel_assets::serve))
|
||||
.route("/assets/settings.js", get(panel_assets::serve))
|
||||
.route("/assets/acme.js", get(panel_assets::serve))
|
||||
.route("/assets/vhosts.js", get(panel_assets::serve))
|
||||
.route("/assets/web-server-profiles.js", get(panel_assets::serve))
|
||||
.route("/assets/web-server.js", get(panel_assets::serve))
|
||||
.route("/assets/docker.js", get(panel_assets::serve))
|
||||
.route("/assets/streams.js", get(panel_assets::serve))
|
||||
.route("/assets/redirects.js", get(panel_assets::serve))
|
||||
.route("/assets/host404.js", get(panel_assets::serve))
|
||||
.route("/assets/style.css", get(panel_assets::serve))
|
||||
.route("/favicon.svg", get(panel_assets::serve))
|
||||
.route("/healthz", get(|| async { Json(json!({"status":"ok"})) }))
|
||||
.route("/api/status", get(status))
|
||||
@@ -309,11 +297,11 @@ fn panel_document_path(path: &str) -> bool {
|
||||
fn anonymous_allowed(method: &Method, path: &str) -> bool {
|
||||
if method == Method::GET || method == Method::HEAD {
|
||||
panel_document_path(path)
|
||||
|| fingerprinted_path(path, "/assets/")
|
||||
.is_some_and(|base| matches!(base.as_str(), "/assets/login.js" | "/assets/style.css"))
|
||||
|| matches!(
|
||||
path,
|
||||
"/assets/login.js"
|
||||
| "/assets/login-langs.json"
|
||||
| "/assets/style.css"
|
||||
"/assets/login-langs.json"
|
||||
| "/favicon.svg"
|
||||
| "/healthz"
|
||||
| "/api/auth/status"
|
||||
|
||||
Reference in new issue
Block a user