]> git.proxmox.com Git - proxmox-backup.git/commitdiff
use new 'id_property' for user::User and use it in api calls
authorDominik Csapak <d.csapak@proxmox.com>
Mon, 18 May 2020 12:18:36 +0000 (14:18 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 19 May 2020 07:33:56 +0000 (09:33 +0200)
this allows us to return a user::User (or Vec<> of it)
instead of a generic serde value

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
src/api2/access/user.rs
src/config/user.rs

index 27f52c087e12fa834a03a41f099ea983bac1d8ba..27b2c8089662770f56cbbdb7c5ed2cb0fa05e97c 100644 (file)
@@ -22,37 +22,8 @@ pub const PBS_PASSWORD_SCHEMA: Schema = StringSchema::new("User Password.")
         description: "List users (with config digest).",
         type: Array,
         items: {
-            type: Object,
+            type: user::User,
             description: "User configuration (without password).",
-            properties: {
-                userid: {
-                    schema: PROXMOX_USER_ID_SCHEMA,
-                },
-                comment: {
-                    schema: SINGLE_LINE_COMMENT_SCHEMA,
-                    optional: true,
-                },
-                enable: {
-                    schema: user::ENABLE_USER_SCHEMA,
-                    optional: true,
-                },
-                expire: {
-                    schema: user::EXPIRE_USER_SCHEMA,
-                    optional: true,
-                },
-                firstname: {
-                    schema: user::FIRST_NAME_SCHEMA,
-                    optional: true,
-                },
-                lastname: {
-                    schema: user::LAST_NAME_SCHEMA,
-                    optional: true,
-                },
-                email: {
-                    schema: user::EMAIL_SCHEMA,
-                    optional: true,
-                },
-            },
         },
     },
     access: {
@@ -63,14 +34,16 @@ pub const PBS_PASSWORD_SCHEMA: Schema = StringSchema::new("User Password.")
 pub fn list_users(
     _param: Value,
     _info: &ApiMethod,
-    _rpcenv: &mut dyn RpcEnvironment,
-) -> Result<Value, Error> {
+    mut rpcenv: &mut dyn RpcEnvironment,
+) -> Result<Vec<user::User>, Error> {
 
     let (config, digest) = user::config()?;
 
-    let value = config.convert_to_array("userid", Some(&digest), &[]);
+    let list = config.convert_to_typed_array("user")?;
+
+    rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
 
-    Ok(value.into())
+    Ok(list)
 }
 
 #[api(
@@ -119,7 +92,9 @@ pub fn create_user(userid: String, password: Option<String>, param: Value) -> Re
 
     let _lock = crate::tools::open_file_locked(user::USER_CFG_LOCKFILE, std::time::Duration::new(10, 0))?;
 
-    let user: user::User = serde_json::from_value(param.clone())?;
+    let mut data = param.clone();
+    data["userid"] = Value::from(userid.clone());
+    let user: user::User = serde_json::from_value(data)?;
 
     let (mut config, _digest) = user::config()?;
 
@@ -158,12 +133,11 @@ pub fn create_user(userid: String, password: Option<String>, param: Value) -> Re
     },
 )]
 /// Read user configuration data.
-pub fn read_user(userid: String) -> Result<Value, Error> {
+pub fn read_user(userid: String, mut rpcenv: &mut dyn RpcEnvironment) -> Result<user::User, Error> {
     let (config, digest) = user::config()?;
-    let mut data = config.lookup_json("user", &userid)?;
-    data.as_object_mut().unwrap()
-        .insert("digest".into(), proxmox::tools::digest_to_hex(&digest).into());
-    Ok(data)
+    let user = config.lookup("user", &userid)?;
+    rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
+    Ok(user)
 }
 
 #[api(
index d899c40571a668450066cb1d4c49aadfaabb605b..261b1d21242277b4e7769b6c74c77c176728d39e 100644 (file)
@@ -56,6 +56,9 @@ pub const EMAIL_SCHEMA: Schema = StringSchema::new("E-Mail Address.")
 
 #[api(
     properties: {
+        userid: {
+            schema: PROXMOX_USER_ID_SCHEMA,
+        },
         comment: {
             optional: true,
             schema: SINGLE_LINE_COMMENT_SCHEMA,
@@ -85,6 +88,7 @@ pub const EMAIL_SCHEMA: Schema = StringSchema::new("E-Mail Address.")
 #[derive(Serialize,Deserialize)]
 /// User properties.
 pub struct User {
+    pub userid: String,
     #[serde(skip_serializing_if="Option::is_none")]
     pub comment: Option<String>,
     #[serde(skip_serializing_if="Option::is_none")]
@@ -105,7 +109,7 @@ fn init() -> SectionConfig {
         _ => unreachable!(),
     };
 
-    let plugin = SectionConfigPlugin::new("user".to_string(), None, obj_schema);
+    let plugin = SectionConfigPlugin::new("user".to_string(), Some("userid".to_string()), obj_schema);
     let mut config = SectionConfig::new(&PROXMOX_USER_ID_SCHEMA);
 
     config.register_plugin(plugin);