This commit is contained in:
Mateusz Gruszczyński committed 2026-10-13 00:00:06 +02:00
1 parent d23fa5e154
commit 81ab39e70a
51 files changed
+5352 -1489

No files matched your search

+43 -7
View File
@@ -30,8 +30,37 @@ fn default_admin_dashboard_widgets() -> Vec<String> {
.map(|value| (*value).to_owned())
.collect()
}
fn default_file_log_sort() -> String { "time".to_owned() }
fn default_file_log_descending() -> bool { true }
const STREAM_DASHBOARD_WIDGETS: &[&str] = &[
"stream_overview",
"stream_traffic",
"stream_sessions",
"stream_backend_health",
];
fn default_hidden_dashboard_widgets() -> Vec<String> {
STREAM_DASHBOARD_WIDGETS
.iter()
.map(|id| (*id).to_owned())
.collect()
}
// Old accounts stored a complete 12-card order and often an explicit empty
// hidden list. Upgrade it in memory: append opt-in Stream cards as hidden.
fn migrate_dashboard_widgets(prefs: &mut AdminPreferences) {
for id in STREAM_DASHBOARD_WIDGETS {
if !prefs.dashboard_widgets.iter().any(|item| item == id) {
prefs.dashboard_widgets.push((*id).to_owned());
if !prefs.dashboard_hidden_widgets.iter().any(|item| item == id) {
prefs.dashboard_hidden_widgets.push((*id).to_owned());
}
}
}
}
fn default_file_log_sort() -> String {
"time".to_owned()
}
fn default_file_log_descending() -> bool {
true
}
fn default_file_log_columns() -> Vec<String> {
[
"time",
@@ -97,7 +126,7 @@ struct AdminPreferences {
dashboard_density: String,
#[serde(default = "default_admin_dashboard_widgets")]
dashboard_widgets: Vec<String>,
#[serde(default)]
#[serde(default = "default_hidden_dashboard_widgets")]
dashboard_hidden_widgets: Vec<String>,
#[serde(default = "default_file_log_columns")]
file_log_columns: Vec<String>,
@@ -150,7 +179,7 @@ impl Default for AdminPreferences {
table_density: default_admin_table_density(),
dashboard_density: default_admin_dashboard_density(),
dashboard_widgets: default_admin_dashboard_widgets(),
dashboard_hidden_widgets: Vec::new(),
dashboard_hidden_widgets: default_hidden_dashboard_widgets(),
file_log_columns: default_file_log_columns(),
file_log_sort: default_file_log_sort(),
file_log_descending: default_file_log_descending(),
@@ -388,8 +417,16 @@ async fn preferences(
.map_err(auth::internal)?;
let preferences = match stored {
Some(document) => match serde_json::from_str::<AdminPreferences>(&document) {
Ok(preferences) if validate_admin_preferences(&preferences).is_ok() => preferences,
Ok(_) | Err(_) => {
Ok(mut preferences) => {
migrate_dashboard_widgets(&mut preferences);
if validate_admin_preferences(&preferences).is_ok() {
preferences
} else {
tracing::warn!(user = %session.username, "invalid admin view preferences ignored");
AdminPreferences::default()
}
}
Err(_) => {
tracing::warn!(user = %session.username, "invalid admin view preferences ignored");
AdminPreferences::default()
}
@@ -420,4 +457,3 @@ async fn update_preferences(
}
Ok(Json(preferences))
}