diff --git a/proxmox-auth-api/src/types.rs b/proxmox-auth-api/src/types.rs index 64c580a5..0964e072 100644 --- a/proxmox-auth-api/src/types.rs +++ b/proxmox-auth-api/src/types.rs @@ -676,6 +676,71 @@ impl TryFrom for Authid { } } +#[api] +/// The parameter object for creating new ticket. +#[derive(Debug, Deserialize, Serialize)] +pub struct CreateTicket { + /// User name + pub username: Userid, + + /// The secret password. This can also be a valid ticket. Only optional if the ticket is + /// provided in a cookie header and only if the endpoint supports this. + #[serde(default)] + pub password: Option, + + /// Verify ticket, and check if user have access 'privs' on 'path'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub path: Option, + + /// Verify ticket, and check if user have access 'privs' on 'path'. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub privs: Option, + + /// Port for verifying terminal tickets. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub port: Option, + + /// The signed TFA challenge string the user wants to respond to. + #[serde(default, skip_serializing_if = "Option::is_none")] + #[serde(rename = "tfa-challenge")] + pub tfa_challenge: Option, +} + +#[api] +/// The API response for a ticket call. +#[derive(Debug, Deserialize, Serialize)] +pub struct CreateTicketResponse { + /// The CSRF prevention token. + #[serde(default, skip_serializing_if = "Option::is_none")] + #[serde(rename = "CSRFPreventionToken")] + pub csrfprevention_token: Option, + + /// The ticket as is supposed to be used in the authentication header. Not provided here if the + /// endpoint uses HttpOnly cookies to supply the actual ticket. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub ticket: Option, + + /// Like a full ticket, except the signature is missing. Useful in HttpOnly-contexts + /// (browsers). + #[serde(default, skip_serializing_if = "Option::is_none")] + #[serde(rename = "ticket-info")] + pub ticket_info: Option, + + /// The userid. + pub username: Userid, +} + +impl CreateTicketResponse { + pub fn new(username: Userid) -> Self { + Self { + csrfprevention_token: None, + ticket: None, + ticket_info: None, + username, + } + } +} + #[test] fn test_token_id() { let userid: Userid = "test@pam".parse().expect("parsing Userid failed");