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

Shannon Sterz s.sterz at proxmox.com
Thu Feb 27 15:06:57 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 | 56 ++++++++++++++++++++++++++++++++++-
 1 file changed, 55 insertions(+), 1 deletion(-)

diff --git a/proxmox-auth-api/src/types.rs b/proxmox-auth-api/src/types.rs
index 64c580a5..81c43ab6 100644
--- a/proxmox-auth-api/src/types.rs
+++ b/proxmox-auth-api/src/types.rs
@@ -417,7 +417,7 @@ impl<'a> TryFrom<&'a str> for &'a TokennameRef {
 }
 
 /// A complete user id consisting of a user name and a realm
-#[derive(Clone, Debug, PartialEq, Eq, Hash, Ord, PartialOrd, UpdaterType)]
+#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, Ord, PartialOrd, UpdaterType)]
 pub struct Userid {
     data: String,
     name_len: usize,
@@ -676,6 +676,60 @@ impl TryFrom<String> for Authid {
     }
 }
 
+#[api]
+/// The parameter object for creating new ticket.
+#[derive(Debug, Default, 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, Default, 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,
+}
+
 #[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