use serde::{Deserialize, Serialize}; use super::*; use proxmox::api::{api, schema::*}; pub const REMOTE_PASSWORD_SCHEMA: Schema = StringSchema::new("Password or auth token for remote host.") .format(&PASSWORD_FORMAT) .min_length(1) .max_length(1024) .schema(); pub const REMOTE_PASSWORD_BASE64_SCHEMA: Schema = StringSchema::new("Password or auth token for remote host (stored as base64 string).") .format(&PASSWORD_FORMAT) .min_length(1) .max_length(1024) .schema(); pub const REMOTE_ID_SCHEMA: Schema = StringSchema::new("Remote ID.") .format(&PROXMOX_SAFE_ID_FORMAT) .min_length(3) .max_length(32) .schema(); #[api( properties: { comment: { optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, }, host: { schema: DNS_NAME_OR_IP_SCHEMA, }, port: { optional: true, description: "The (optional) port", type: u16, }, "auth-id": { type: Authid, }, fingerprint: { optional: true, schema: CERT_FINGERPRINT_SHA256_SCHEMA, }, }, )] #[derive(Serialize,Deserialize,Updater)] #[serde(rename_all = "kebab-case")] /// Remote configuration properties. pub struct RemoteConfig { #[serde(skip_serializing_if="Option::is_none")] pub comment: Option, pub host: String, #[serde(skip_serializing_if="Option::is_none")] pub port: Option, pub auth_id: Authid, #[serde(skip_serializing_if="Option::is_none")] pub fingerprint: Option, } #[api( properties: { name: { schema: REMOTE_ID_SCHEMA, }, config: { type: RemoteConfig, }, password: { schema: REMOTE_PASSWORD_BASE64_SCHEMA, }, }, )] #[derive(Serialize,Deserialize)] #[serde(rename_all = "kebab-case")] /// Remote properties. pub struct Remote { pub name: String, // Note: The stored password is base64 encoded #[serde(skip_serializing_if="String::is_empty")] #[serde(with = "proxmox::tools::serde::string_as_base64")] pub password: String, #[serde(flatten)] pub config: RemoteConfig, }