use new 'id_property' for user::User and use it in api calls
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>
This commit is contained in:
parent
16c75c580b
commit
522c0da0a0
@ -22,37 +22,8 @@ pub const PBS_PASSWORD_SCHEMA: Schema = StringSchema::new("User Password.")
|
|||||||
description: "List users (with config digest).",
|
description: "List users (with config digest).",
|
||||||
type: Array,
|
type: Array,
|
||||||
items: {
|
items: {
|
||||||
type: Object,
|
type: user::User,
|
||||||
description: "User configuration (without password).",
|
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: {
|
access: {
|
||||||
@ -63,14 +34,16 @@ pub const PBS_PASSWORD_SCHEMA: Schema = StringSchema::new("User Password.")
|
|||||||
pub fn list_users(
|
pub fn list_users(
|
||||||
_param: Value,
|
_param: Value,
|
||||||
_info: &ApiMethod,
|
_info: &ApiMethod,
|
||||||
_rpcenv: &mut dyn RpcEnvironment,
|
mut rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Vec<user::User>, Error> {
|
||||||
|
|
||||||
let (config, digest) = user::config()?;
|
let (config, digest) = user::config()?;
|
||||||
|
|
||||||
let value = config.convert_to_array("userid", Some(&digest), &[]);
|
let list = config.convert_to_typed_array("user")?;
|
||||||
|
|
||||||
Ok(value.into())
|
rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
|
||||||
|
|
||||||
|
Ok(list)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[api(
|
#[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 _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()?;
|
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.
|
/// 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 (config, digest) = user::config()?;
|
||||||
let mut data = config.lookup_json("user", &userid)?;
|
let user = config.lookup("user", &userid)?;
|
||||||
data.as_object_mut().unwrap()
|
rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
|
||||||
.insert("digest".into(), proxmox::tools::digest_to_hex(&digest).into());
|
Ok(user)
|
||||||
Ok(data)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
|
@ -56,6 +56,9 @@ pub const EMAIL_SCHEMA: Schema = StringSchema::new("E-Mail Address.")
|
|||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
properties: {
|
properties: {
|
||||||
|
userid: {
|
||||||
|
schema: PROXMOX_USER_ID_SCHEMA,
|
||||||
|
},
|
||||||
comment: {
|
comment: {
|
||||||
optional: true,
|
optional: true,
|
||||||
schema: SINGLE_LINE_COMMENT_SCHEMA,
|
schema: SINGLE_LINE_COMMENT_SCHEMA,
|
||||||
@ -85,6 +88,7 @@ pub const EMAIL_SCHEMA: Schema = StringSchema::new("E-Mail Address.")
|
|||||||
#[derive(Serialize,Deserialize)]
|
#[derive(Serialize,Deserialize)]
|
||||||
/// User properties.
|
/// User properties.
|
||||||
pub struct User {
|
pub struct User {
|
||||||
|
pub userid: String,
|
||||||
#[serde(skip_serializing_if="Option::is_none")]
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
pub comment: Option<String>,
|
pub comment: Option<String>,
|
||||||
#[serde(skip_serializing_if="Option::is_none")]
|
#[serde(skip_serializing_if="Option::is_none")]
|
||||||
@ -105,7 +109,7 @@ fn init() -> SectionConfig {
|
|||||||
_ => unreachable!(),
|
_ => 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);
|
let mut config = SectionConfig::new(&PROXMOX_USER_ID_SCHEMA);
|
||||||
|
|
||||||
config.register_plugin(plugin);
|
config.register_plugin(plugin);
|
||||||
|
Loading…
Reference in New Issue
Block a user