openid cleanup: derive and use Updater
This commit is contained in:
		| @ -6,7 +6,7 @@ use ::serde::{Deserialize, Serialize}; | |||||||
|  |  | ||||||
| use proxmox::api::{api, Permission, Router, RpcEnvironment}; | 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::config::acl::{PRIV_SYS_AUDIT, PRIV_REALM_ALLOCATE}; | ||||||
| use crate::api2::types::*; | use crate::api2::types::*; | ||||||
|  |  | ||||||
| @ -164,29 +164,9 @@ pub enum DeletableProperty { | |||||||
|             realm: { |             realm: { | ||||||
|                 schema: REALM_ID_SCHEMA, |                 schema: REALM_ID_SCHEMA, | ||||||
|             }, |             }, | ||||||
|             "issuer-url": { |             update: { | ||||||
|                 description: "OpenID Issuer Url", |                 type: OpenIdRealmConfigUpdater, | ||||||
|                 type: String, |                 flatten: true, | ||||||
|                 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, |  | ||||||
|             }, |             }, | ||||||
|             delete: { |             delete: { | ||||||
|                 description: "List of properties to delete.", |                 description: "List of properties to delete.", | ||||||
| @ -210,11 +190,7 @@ pub enum DeletableProperty { | |||||||
| /// Update an OpenID realm configuration | /// Update an OpenID realm configuration | ||||||
| pub fn update_openid_realm( | pub fn update_openid_realm( | ||||||
|     realm: String, |     realm: String, | ||||||
|     issuer_url: Option<String>, |     update: OpenIdRealmConfigUpdater, | ||||||
|     client_id: Option<String>, |  | ||||||
|     client_key: Option<String>, |  | ||||||
|     autocreate: Option<bool>, |  | ||||||
|     comment: Option<String>, |  | ||||||
|     delete: Option<Vec<DeletableProperty>>, |     delete: Option<Vec<DeletableProperty>>, | ||||||
|     digest: Option<String>, |     digest: Option<String>, | ||||||
|     _rpcenv: &mut dyn RpcEnvironment, |     _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(); |         let comment = comment.trim().to_string(); | ||||||
|         if comment.is_empty() { |         if comment.is_empty() { | ||||||
|             config.comment = None; |             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(issuer_url) = update.issuer_url { config.issuer_url = issuer_url; } | ||||||
|     if let Some(client_id) = client_id { config.client_id = client_id; } |     if let Some(client_id) = update.client_id { config.client_id = client_id; } | ||||||
|  |  | ||||||
|     if client_key.is_some() { config.client_key = client_key; } |     if update.client_key.is_some() { config.client_key = update.client_key; } | ||||||
|     if autocreate.is_some() { config.autocreate = autocreate; } |     if update.autocreate.is_some() { config.autocreate = update.autocreate; } | ||||||
|  |  | ||||||
|     domains.set_data(&realm, "openid", &config)?; |     domains.set_data(&realm, "openid", &config)?; | ||||||
|  |  | ||||||
|  | |||||||
| @ -42,17 +42,7 @@ pub enum OpenIdUserAttribute { | |||||||
|         realm: { |         realm: { | ||||||
|             schema: REALM_ID_SCHEMA, |             schema: REALM_ID_SCHEMA, | ||||||
|         }, |         }, | ||||||
|         "issuer-url": { |  | ||||||
|             description: "OpenID Issuer Url", |  | ||||||
|             type: String, |  | ||||||
|         }, |  | ||||||
|         "client-id": { |  | ||||||
|             description: "OpenID Client ID", |  | ||||||
|             type: String, |  | ||||||
|         }, |  | ||||||
|         "client-key": { |         "client-key": { | ||||||
|             description: "OpenID Client Key", |  | ||||||
|             type: String, |  | ||||||
|             optional: true, |             optional: true, | ||||||
|         }, |         }, | ||||||
|         comment: { |         comment: { | ||||||
| @ -60,9 +50,7 @@ pub enum OpenIdUserAttribute { | |||||||
|             schema: SINGLE_LINE_COMMENT_SCHEMA, |             schema: SINGLE_LINE_COMMENT_SCHEMA, | ||||||
|         }, |         }, | ||||||
|         autocreate: { |         autocreate: { | ||||||
|             description: "Automatically create users if they do not exist.", |  | ||||||
|             optional: true, |             optional: true, | ||||||
|             type: bool, |  | ||||||
|             default: false, |             default: false, | ||||||
|         }, |         }, | ||||||
|         "username-claim": { |         "username-claim": { | ||||||
| @ -71,19 +59,25 @@ pub enum OpenIdUserAttribute { | |||||||
|         }, |         }, | ||||||
|     }, |     }, | ||||||
| )] | )] | ||||||
| #[derive(Serialize,Deserialize)] | #[derive(Serialize,Deserialize,Updater)] | ||||||
| #[serde(rename_all="kebab-case")] | #[serde(rename_all="kebab-case")] | ||||||
| /// OpenID configuration properties. | /// OpenID configuration properties. | ||||||
| pub struct OpenIdRealmConfig { | pub struct OpenIdRealmConfig { | ||||||
|  |     #[updater(skip)] | ||||||
|     pub realm: String, |     pub realm: String, | ||||||
|  |     /// OpenID Issuer Url | ||||||
|     pub issuer_url: String, |     pub issuer_url: String, | ||||||
|  |     /// OpenID Client ID | ||||||
|     pub client_id: String, |     pub client_id: String, | ||||||
|  |     /// OpenID Client Key | ||||||
|     #[serde(skip_serializing_if="Option::is_none")] |     #[serde(skip_serializing_if="Option::is_none")] | ||||||
|     pub client_key: Option<String>, |     pub client_key: Option<String>, | ||||||
|     #[serde(skip_serializing_if="Option::is_none")] |     #[serde(skip_serializing_if="Option::is_none")] | ||||||
|     pub comment: Option<String>, |     pub comment: Option<String>, | ||||||
|  |     /// Automatically create users if they do not exist. | ||||||
|     #[serde(skip_serializing_if="Option::is_none")] |     #[serde(skip_serializing_if="Option::is_none")] | ||||||
|     pub autocreate: Option<bool>, |     pub autocreate: Option<bool>, | ||||||
|  |     #[updater(skip)] | ||||||
|     #[serde(skip_serializing_if="Option::is_none")] |     #[serde(skip_serializing_if="Option::is_none")] | ||||||
|     pub username_claim: Option<OpenIdUserAttribute>, |     pub username_claim: Option<OpenIdUserAttribute>, | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user