mirror of
https://git.proxmox.com/git/proxmox
synced 2025-08-13 20:15:10 +00:00
pbs-api-types: introduce proper types for PAM and PBS realms
Introduces two new, simple API types representing the built-in PAM and PBS authentication realms. Signed-off-by: Christoph Heiss <c.heiss@proxmox.com> Reviewed-by: Lukas Wagner <l.wagner@proxmox.com> Tested-by: Lukas Wagner <l.wagner@proxmox.com> [TL: adapt doc-comment for new default field like Shannon pointed out but with a slightly different text than she proposed] Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
b143160c12
commit
969e1ad645
@ -6,7 +6,8 @@ use serde::{Deserialize, Serialize};
|
||||
pub mod percent_encoding;
|
||||
|
||||
use proxmox_schema::{
|
||||
api, const_regex, ApiStringFormat, ApiType, ArraySchema, ReturnType, Schema, StringSchema,
|
||||
api, const_regex, ApiStringFormat, ApiType, ArraySchema, EnumEntry, ReturnType, Schema,
|
||||
StringSchema, Updater,
|
||||
};
|
||||
use proxmox_time::parse_daily_duration;
|
||||
|
||||
@ -224,6 +225,20 @@ pub const REALM_ID_SCHEMA: Schema = StringSchema::new("Realm name.")
|
||||
.max_length(32)
|
||||
.schema();
|
||||
|
||||
const PAM_REALM_ID_SCHEMA: Schema = StringSchema::new("Realm name.")
|
||||
.format(&ApiStringFormat::Enum(&[EnumEntry::new(
|
||||
"pam",
|
||||
"Default PAM realm.",
|
||||
)]))
|
||||
.schema();
|
||||
|
||||
const PBS_REALM_ID_SCHEMA: Schema = StringSchema::new("Realm name.")
|
||||
.format(&ApiStringFormat::Enum(&[EnumEntry::new(
|
||||
"pbs",
|
||||
"Default PBS realm.",
|
||||
)]))
|
||||
.schema();
|
||||
|
||||
pub const SUBSCRIPTION_KEY_SCHEMA: Schema =
|
||||
StringSchema::new("Proxmox Backup Server subscription key.")
|
||||
.format(&SUBSCRIPTION_KEY_FORMAT)
|
||||
@ -378,3 +393,99 @@ pub struct BasicRealmInfo {
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub comment: Option<String>,
|
||||
}
|
||||
|
||||
#[api(
|
||||
properties: {
|
||||
realm: {
|
||||
schema: REALM_ID_SCHEMA,
|
||||
},
|
||||
"type": {
|
||||
type: RealmType,
|
||||
},
|
||||
comment: {
|
||||
optional: true,
|
||||
schema: SINGLE_LINE_COMMENT_SCHEMA,
|
||||
},
|
||||
"default": {
|
||||
optional: true,
|
||||
default: false,
|
||||
},
|
||||
}
|
||||
)]
|
||||
#[derive(Serialize, Deserialize, Updater, Clone)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
/// Built-in PAM realm configuration properties.
|
||||
pub struct PamRealmConfig {
|
||||
/// Realm name. Always "pam".
|
||||
#[updater(skip)]
|
||||
pub realm: String,
|
||||
/// Realm type. Always [`RealmType::Pam`].
|
||||
#[updater(skip)]
|
||||
#[serde(rename = "type")]
|
||||
pub ty: RealmType,
|
||||
/// Comment for this realm
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub comment: Option<String>,
|
||||
/// True if you want this to be the default realm selected on login.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub default: Option<bool>,
|
||||
}
|
||||
|
||||
impl Default for PamRealmConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
realm: "pam".to_owned(),
|
||||
ty: RealmType::Pam,
|
||||
comment: Some("Linux PAM standard authentication".to_owned()),
|
||||
default: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[api(
|
||||
properties: {
|
||||
realm: {
|
||||
schema: REALM_ID_SCHEMA,
|
||||
},
|
||||
"type": {
|
||||
type: RealmType,
|
||||
},
|
||||
comment: {
|
||||
optional: true,
|
||||
schema: SINGLE_LINE_COMMENT_SCHEMA,
|
||||
},
|
||||
"default": {
|
||||
optional: true,
|
||||
default: false,
|
||||
},
|
||||
}
|
||||
)]
|
||||
#[derive(Serialize, Deserialize, Updater, Clone)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
/// Built-in Proxmox Backup Server realm configuration properties.
|
||||
pub struct PbsRealmConfig {
|
||||
/// Realm name. Always "pbs".
|
||||
#[updater(skip)]
|
||||
pub realm: String,
|
||||
/// Realm type. Always [`RealmType::Pbs`].
|
||||
#[updater(skip)]
|
||||
#[serde(rename = "type")]
|
||||
pub ty: RealmType,
|
||||
/// Comment for this realm
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub comment: Option<String>,
|
||||
/// True if you want this to be the default realm selected on login.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub default: Option<bool>,
|
||||
}
|
||||
|
||||
impl Default for PbsRealmConfig {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
realm: "pbs".to_owned(),
|
||||
ty: RealmType::Pbs,
|
||||
comment: Some("Proxmox Backup authentication server".to_owned()),
|
||||
default: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user