diff --git a/src/api2/config/access/openid.rs b/src/api2/config/access/openid.rs index b8b07306..7a9bf384 100644 --- a/src/api2/config/access/openid.rs +++ b/src/api2/config/access/openid.rs @@ -6,7 +6,7 @@ use ::serde::{Deserialize, Serialize}; use proxmox::api::{api, Permission, Router, RpcEnvironment}; -use crate::config::domains::{self, OpenIdRealmConfig}; +use crate::config::domains::{self, OpenIdRealmConfig, OpenIdRealmConfigUpdater}; use crate::config::acl::{PRIV_SYS_AUDIT, PRIV_REALM_ALLOCATE}; use crate::api2::types::*; @@ -164,29 +164,9 @@ pub enum DeletableProperty { realm: { schema: REALM_ID_SCHEMA, }, - "issuer-url": { - description: "OpenID Issuer Url", - type: String, - optional: true, - }, - "client-id": { - description: "OpenID Client ID", - type: String, - optional: true, - }, - "client-key": { - description: "OpenID Client Key", - type: String, - optional: true, - }, - autocreate: { - description: "Automatically create users if they do not exist.", - optional: true, - type: bool, - }, - comment: { - schema: SINGLE_LINE_COMMENT_SCHEMA, - optional: true, + update: { + type: OpenIdRealmConfigUpdater, + flatten: true, }, delete: { description: "List of properties to delete.", @@ -210,11 +190,7 @@ pub enum DeletableProperty { /// Update an OpenID realm configuration pub fn update_openid_realm( realm: String, - issuer_url: Option, - client_id: Option, - client_key: Option, - autocreate: Option, - comment: Option, + update: OpenIdRealmConfigUpdater, delete: Option>, digest: Option, _rpcenv: &mut dyn RpcEnvironment, @@ -241,7 +217,7 @@ pub fn update_openid_realm( } } - if let Some(comment) = comment { + if let Some(comment) = update.comment { let comment = comment.trim().to_string(); if comment.is_empty() { config.comment = None; @@ -250,11 +226,11 @@ pub fn update_openid_realm( } } - if let Some(issuer_url) = issuer_url { config.issuer_url = issuer_url; } - if let Some(client_id) = client_id { config.client_id = client_id; } + if let Some(issuer_url) = update.issuer_url { config.issuer_url = issuer_url; } + if let Some(client_id) = update.client_id { config.client_id = client_id; } - if client_key.is_some() { config.client_key = client_key; } - if autocreate.is_some() { config.autocreate = autocreate; } + if update.client_key.is_some() { config.client_key = update.client_key; } + if update.autocreate.is_some() { config.autocreate = update.autocreate; } domains.set_data(&realm, "openid", &config)?; diff --git a/src/config/domains.rs b/src/config/domains.rs index 0d695777..387baeb5 100644 --- a/src/config/domains.rs +++ b/src/config/domains.rs @@ -42,17 +42,7 @@ pub enum OpenIdUserAttribute { realm: { schema: REALM_ID_SCHEMA, }, - "issuer-url": { - description: "OpenID Issuer Url", - type: String, - }, - "client-id": { - description: "OpenID Client ID", - type: String, - }, "client-key": { - description: "OpenID Client Key", - type: String, optional: true, }, comment: { @@ -60,9 +50,7 @@ pub enum OpenIdUserAttribute { schema: SINGLE_LINE_COMMENT_SCHEMA, }, autocreate: { - description: "Automatically create users if they do not exist.", optional: true, - type: bool, default: false, }, "username-claim": { @@ -71,19 +59,25 @@ pub enum OpenIdUserAttribute { }, }, )] -#[derive(Serialize,Deserialize)] +#[derive(Serialize,Deserialize,Updater)] #[serde(rename_all="kebab-case")] /// OpenID configuration properties. pub struct OpenIdRealmConfig { + #[updater(skip)] pub realm: String, + /// OpenID Issuer Url pub issuer_url: String, + /// OpenID Client ID pub client_id: String, + /// OpenID Client Key #[serde(skip_serializing_if="Option::is_none")] pub client_key: Option, #[serde(skip_serializing_if="Option::is_none")] pub comment: Option, + /// Automatically create users if they do not exist. #[serde(skip_serializing_if="Option::is_none")] pub autocreate: Option, + #[updater(skip)] #[serde(skip_serializing_if="Option::is_none")] pub username_claim: Option, }