From c8b3b6214cdf85f9f6e3f40d68ef7ea7df05ff53 Mon Sep 17 00:00:00 2001
From: James Hodgkinson
Date: Tue, 15 Oct 2024 11:54:46 +1000
Subject: [PATCH] Cache buster buster (#3091)
---
Cargo.lock | 1 +
libs/profiles/Cargo.toml | 5 +-
libs/profiles/src/lib.rs | 24 +-
libs/sketching/src/otel.rs | 2 +-
scripts/setup_dev_environment.sh | 2 +
server/core/src/config.rs | 5 +
server/core/src/https/cache_buster.rs | 11 +
server/core/src/https/javascript.rs | 2 +-
server/core/src/https/mod.rs | 4 +-
server/core/src/https/ui.rs | 9 +-
server/core/src/https/ui_html.html | 28 ++-
server/core/src/lib.rs | 4 +-
server/core/src/repl/mod.rs | 2 +-
server/core/templates/apps_partial.html | 18 +-
server/core/templates/base.html | 25 +--
server/core/templates/base_htmx.html | 31 +--
server/core/templates/base_icons.html | 10 +
.../templates/credentials_reset_form.html | 56 +++--
.../templates/credentials_update_partial.html | 210 ++++++++++--------
server/core/templates/login_base.html | 31 +--
server/core/templates/login_webauthn.html | 14 +-
server/core/templates/navbar.html | 23 +-
.../templates/recoverable_error_partial.html | 10 +-
server/core/templates/signout_modal.html | 12 +-
.../templates/user_settings_partial_base.html | 19 +-
server/testkit/tests/apidocs.rs | 4 +-
26 files changed, 339 insertions(+), 223 deletions(-)
create mode 100644 server/core/src/https/cache_buster.rs
create mode 100644 server/core/templates/base_icons.html
diff --git a/Cargo.lock b/Cargo.lock
index 1d2606663..ff2deceb9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3249,6 +3249,7 @@ dependencies = [
"base64 0.22.1",
"gix",
"serde",
+ "sha2",
"toml",
]
diff --git a/libs/profiles/Cargo.toml b/libs/profiles/Cargo.toml
index 99555b59a..038b582c4 100644
--- a/libs/profiles/Cargo.toml
+++ b/libs/profiles/Cargo.toml
@@ -20,9 +20,10 @@ test = false
doctest = false
[dependencies]
-serde = { workspace = true, features = ["derive"] }
-toml = { workspace = true }
base64 = { workspace = true }
+serde = { workspace = true, features = ["derive"] }
+sha2 = { workspace = true }
+toml = { workspace = true }
[build-dependencies]
base64 = { workspace = true }
diff --git a/libs/profiles/src/lib.rs b/libs/profiles/src/lib.rs
index 3b2ba2234..136338a10 100644
--- a/libs/profiles/src/lib.rs
+++ b/libs/profiles/src/lib.rs
@@ -1,5 +1,7 @@
+use base64::prelude::BASE64_STANDARD;
use base64::{engine::general_purpose, Engine as _};
use serde::Deserialize;
+use sha2::Digest;
use std::env;
// To debug why a rebuild is requested.
@@ -83,16 +85,22 @@ pub fn apply_profile() {
println!("cargo:rerun-if-env-changed=CARGO_PKG_VERSION");
println!("cargo:rerun-if-env-changed=KANIDM_PKG_COMMIT_REV");
- let version = env!("CARGO_PKG_VERSION");
- if let Some(commit_rev) = option_env!("KANIDM_PKG_COMMIT_REV") {
- println!(
- "cargo:rustc-env=KANIDM_PKG_VERSION={} {}",
- version, commit_rev
- );
- } else {
- println!("cargo:rustc-env=KANIDM_PKG_VERSION={}", version);
+ let kanidm_pkg_version = match option_env!("KANIDM_PKG_COMMIT_REV") {
+ Some(commit_rev) => format!("{} {}", env!("CARGO_PKG_VERSION"), commit_rev),
+ None => env!("CARGO_PKG_VERSION").to_string(),
};
+ println!("cargo:rustc-env=KANIDM_PKG_VERSION={}", kanidm_pkg_version);
+
+ // KANIDM_PKG_VERSION_HASH is used for cache busting in the web UI
+ let mut kanidm_pkg_version_hash = sha2::Sha256::new();
+ kanidm_pkg_version_hash.update(kanidm_pkg_version.as_bytes());
+ let kanidm_pkg_version_hash = &BASE64_STANDARD.encode(kanidm_pkg_version_hash.finalize())[..8];
+ println!(
+ "cargo:rustc-env=KANIDM_PKG_VERSION_HASH={}",
+ kanidm_pkg_version_hash
+ );
+
let version_pre = env!("CARGO_PKG_VERSION_PRE");
if version_pre == "dev" {
println!("cargo:rustc-env=KANIDM_PRE_RELEASE=1");
diff --git a/libs/sketching/src/otel.rs b/libs/sketching/src/otel.rs
index 3fb27d247..5c8fe32d8 100644
--- a/libs/sketching/src/otel.rs
+++ b/libs/sketching/src/otel.rs
@@ -68,7 +68,7 @@ pub fn start_logging_pipeline(
);
// this env var gets set at build time, if we can pull it, add it to the metadata
- let git_rev = match option_env!("KANIDM_KANIDM_PKG_COMMIT_REV") {
+ let git_rev = match option_env!("KANIDM_PKG_COMMIT_REV") {
Some(rev) => format!("-{}", rev),
None => "".to_string(),
};
diff --git a/scripts/setup_dev_environment.sh b/scripts/setup_dev_environment.sh
index 91ceadd45..0fdb91334 100755
--- a/scripts/setup_dev_environment.sh
+++ b/scripts/setup_dev_environment.sh
@@ -7,6 +7,8 @@
# - set up a test oauth2 rp (https://kanidm.com)
# - prompt to reset testuser's creds online
+set -e
+
if [ -n "${BUILD_MODE}" ]; then
BUILD_MODE="--${BUILD_MODE}"
else
diff --git a/server/core/src/config.rs b/server/core/src/config.rs
index ac18b4238..66a9bf00b 100644
--- a/server/core/src/config.rs
+++ b/server/core/src/config.rs
@@ -256,8 +256,13 @@ impl ServerConfig {
let ignorable_build_fields = [
"KANIDM_CPU_FLAGS",
+ "KANIDM_CPU_FLAGS",
+ "KANIDM_DEFAULT_CONFIG_PATH",
"KANIDM_DEFAULT_CONFIG_PATH",
"KANIDM_DEFAULT_UNIX_SHELL_PATH",
+ "KANIDM_DEFAULT_UNIX_SHELL_PATH",
+ "KANIDM_HTMX_UI_PKG_PATH",
+ "KANIDM_PKG_VERSION_HASH",
"KANIDM_PKG_VERSION",
"KANIDM_PRE_RELEASE",
"KANIDM_PROFILE_NAME",
diff --git a/server/core/src/https/cache_buster.rs b/server/core/src/https/cache_buster.rs
new file mode 100644
index 000000000..1d48d94b5
--- /dev/null
+++ b/server/core/src/https/cache_buster.rs
@@ -0,0 +1,11 @@
+//! Used for appending cache-busting query parameters to URLs.
+//!
+
+#[allow(dead_code)] // Because it's used in templates
+/// Gets the git rev from the KANIDM_PKG_COMMIT_REV variable else drops back to the version, to allow for cache-busting parameters in URLs
+#[inline]
+pub fn get_cache_buster_key() -> String {
+ option_env!("KANIDM_PKG_VERSION_HASH") // this comes from the profiles crate at build time
+ .unwrap_or(env!("CARGO_PKG_VERSION"))
+ .to_string()
+}
diff --git a/server/core/src/https/javascript.rs b/server/core/src/https/javascript.rs
index f84901fd5..caca71e4b 100644
--- a/server/core/src/https/javascript.rs
+++ b/server/core/src/https/javascript.rs
@@ -43,7 +43,7 @@ pub struct JavaScriptFile {
}
impl JavaScriptFile {
- /// returns a `
-
+
+
+
(% block head %)(% endblock %)
@@ -26,7 +24,8 @@
(% block body %)(% endblock %)
diff --git a/server/core/templates/base_htmx.html b/server/core/templates/base_htmx.html
index 3f2719cb2..6cd2a6bba 100644
--- a/server/core/templates/base_htmx.html
+++ b/server/core/templates/base_htmx.html
@@ -1,25 +1,26 @@