[pbs-devel] [PATCH proxmox-backup 1/2] proxmox-backup-debug api: parse parameters before sending to api

Dominik Csapak d.csapak at proxmox.com
Tue Mar 8 13:20:56 CET 2022


when we use http to make the api call, we have to parse the parameters
before, else we might send the string "true" instead of the boolean true
and the api rejects it with a 'Parameter verification error'.

We already have all api call schemas here, so parsing is possible.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 src/bin/proxmox_backup_debug/api.rs | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/bin/proxmox_backup_debug/api.rs b/src/bin/proxmox_backup_debug/api.rs
index dd8c0e6b..64a4c01b 100644
--- a/src/bin/proxmox_backup_debug/api.rs
+++ b/src/bin/proxmox_backup_debug/api.rs
@@ -143,7 +143,7 @@ fn get_api_method(
 }
 
 fn merge_parameters(
-    uri_param: HashMap<String, String>,
+    uri_param: &HashMap<String, String>,
     param: Option<Value>,
     schema: ParameterSchema,
 ) -> Result<Value, Error> {
@@ -179,14 +179,18 @@ async fn call_api(
     rpcenv: &mut dyn RpcEnvironment,
     params: Option<Value>,
 ) -> Result<Value, Error> {
+    let (api_method, uri_params) = get_api_method(method, path)?;
+    let mut params = merge_parameters(&uri_params, params, api_method.parameters)?;
+
     if use_http_client() {
-        return call_api_http(method, path, params).await;
+        // remove url parameters here
+        for (param, _) in uri_params {
+            params.as_object_mut().unwrap().remove(&param);
+        }
+        return call_api_http(method, path, Some(params)).await;
     }
 
-    let (method, uri_param) = get_api_method(method, path)?;
-    let params = merge_parameters(uri_param, params, method.parameters)?;
-
-    call_api_code(method, rpcenv, params).await
+    call_api_code(api_method, rpcenv, params).await
 }
 
 async fn call_api_http(method: &str, path: &str, params: Option<Value>) -> Result<Value, Error> {
-- 
2.30.2





More information about the pbs-devel mailing list