[pdm-devel] [PATCH proxmox v5 06/21] auth-api: introduce new CreateTicket and CreateTickeReponse api types

Shannon Sterz s.sterz at proxmox.com
Tue Mar 4 15:42:32 CET 2025


these types are used for creating a ticket and responding to a new
ticket request.

Signed-off-by: Shannon Sterz <s.sterz at proxmox.com>
---
 proxmox-auth-api/src/types.rs | 65 +++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

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<String> 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<String>,
+
+    /// Verify ticket, and check if user have access 'privs' on 'path'.
+    #[serde(default, skip_serializing_if = "Option::is_none")]
+    pub path: Option<String>,
+
+    /// Verify ticket, and check if user have access 'privs' on 'path'.
+    #[serde(default, skip_serializing_if = "Option::is_none")]
+    pub privs: Option<String>,
+
+    /// Port for verifying terminal tickets.
+    #[serde(default, skip_serializing_if = "Option::is_none")]
+    pub port: Option<u16>,
+
+    /// 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<String>,
+}
+
+#[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<String>,
+
+    /// 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<String>,
+
+    /// 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<String>,
+
+    /// 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 at pam".parse().expect("parsing Userid failed");
-- 
2.39.5





More information about the pdm-devel mailing list