[pdm-devel] [PATCH datacenter-manager v2 18/18] server: api: views: check layout string for validity

Dominik Csapak d.csapak at proxmox.com
Fri Nov 14 13:11:32 CET 2025


check the validity by trying to serialize into a ViewTemplate, since
that is what the ui expects. Fail the api call if that does not work.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 server/src/api/config/views.rs | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/server/src/api/config/views.rs b/server/src/api/config/views.rs
index 8c5a1d29..8c6744e2 100644
--- a/server/src/api/config/views.rs
+++ b/server/src/api/config/views.rs
@@ -6,7 +6,7 @@ use proxmox_router::{http_bail, http_err, Permission, Router, RpcEnvironment};
 use proxmox_schema::{api, param_bail};
 
 use pdm_api_types::{
-    views::{ViewConfig, ViewConfigEntry, ViewConfigUpdater},
+    views::{ViewConfig, ViewConfigEntry, ViewConfigUpdater, ViewTemplate},
     PRIV_RESOURCE_AUDIT, PRIV_RESOURCE_MODIFY,
 };
 use serde::{Deserialize, Serialize};
@@ -91,6 +91,12 @@ pub fn add_view(view: ViewConfig, digest: Option<ConfigDigest>) -> Result<(), Er
 
     let id = view.id.clone();
 
+    if !view.layout.is_empty() {
+        if let Err(err) = serde_json::from_str::<ViewTemplate>(&view.layout) {
+            param_bail!("layout", "layout is not valid: '{}'", err)
+        }
+    }
+
     if let Some(ViewConfigEntry::View(_)) = config.insert(id.clone(), ViewConfigEntry::View(view)) {
         param_bail!("id", "view '{}' already exists.", id)
     }
@@ -181,6 +187,11 @@ pub fn update_view(
     }
 
     if let Some(layout) = view.layout {
+        if !layout.is_empty() {
+            if let Err(err) = serde_json::from_str::<ViewTemplate>(&layout) {
+                param_bail!("layout", "layout is not valid: '{}'", err)
+            }
+        }
         conf.layout = layout;
     }
 
-- 
2.47.3





More information about the pdm-devel mailing list