vault_client_rs/types/
response.rs1use std::collections::HashMap;
2use std::fmt;
3
4use secrecy::{ExposeSecret, SecretString};
5use serde::Deserialize;
6use zeroize::{Zeroize, ZeroizeOnDrop};
7
8use super::redaction::redact;
9
10#[derive(Debug, Deserialize, Clone)]
11#[non_exhaustive]
12pub struct VaultResponse<T> {
13 pub request_id: Option<String>,
14 pub lease_id: Option<String>,
15 pub lease_duration: Option<u64>,
16 pub renewable: Option<bool>,
17 pub data: Option<T>,
18 pub auth: Option<AuthInfo>,
19 pub warnings: Option<Vec<String>>,
20 pub wrap_info: Option<WrapInfo>,
21}
22
23#[derive(Deserialize, Zeroize, ZeroizeOnDrop)]
24#[non_exhaustive]
25pub struct AuthInfo {
26 pub client_token: SecretString,
27 pub accessor: String,
28 #[serde(default)]
29 pub policies: Vec<String>,
30 #[serde(default)]
31 pub token_policies: Vec<String>,
32 #[zeroize(skip)]
33 pub metadata: Option<HashMap<String, String>>,
34 pub lease_duration: u64,
35 pub renewable: bool,
36 pub entity_id: String,
37 pub token_type: String,
38 #[serde(default)]
39 pub orphan: bool,
40 #[zeroize(skip)]
41 pub mfa_requirement: Option<serde_json::Value>,
42 pub num_uses: Option<u64>,
43}
44
45impl Clone for AuthInfo {
46 fn clone(&self) -> Self {
47 Self {
48 client_token: self.client_token.clone(),
49 accessor: self.accessor.clone(),
50 policies: self.policies.clone(),
51 token_policies: self.token_policies.clone(),
52 metadata: self.metadata.clone(),
53 lease_duration: self.lease_duration,
54 renewable: self.renewable,
55 entity_id: self.entity_id.clone(),
56 token_type: self.token_type.clone(),
57 orphan: self.orphan,
58 mfa_requirement: self.mfa_requirement.clone(),
59 num_uses: self.num_uses,
60 }
61 }
62}
63
64impl fmt::Debug for AuthInfo {
65 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
66 f.debug_struct("AuthInfo")
67 .field("client_token", &redact(self.client_token.expose_secret()))
68 .field("accessor", &self.accessor)
69 .field("policies", &self.policies)
70 .field("token_policies", &self.token_policies)
71 .field("metadata", &self.metadata)
72 .field("lease_duration", &self.lease_duration)
73 .field("renewable", &self.renewable)
74 .field("entity_id", &self.entity_id)
75 .field("token_type", &self.token_type)
76 .field("orphan", &self.orphan)
77 .field("mfa_requirement", &self.mfa_requirement)
78 .field("num_uses", &self.num_uses)
79 .finish()
80 }
81}
82
83#[derive(Deserialize, Zeroize, ZeroizeOnDrop)]
84#[non_exhaustive]
85pub struct WrapInfo {
86 pub token: SecretString,
87 pub accessor: String,
88 pub ttl: u64,
89 pub creation_time: String,
90 pub creation_path: String,
91 pub wrapped_accessor: Option<String>,
92}
93
94impl Clone for WrapInfo {
95 fn clone(&self) -> Self {
96 Self {
97 token: self.token.clone(),
98 accessor: self.accessor.clone(),
99 ttl: self.ttl,
100 creation_time: self.creation_time.clone(),
101 creation_path: self.creation_path.clone(),
102 wrapped_accessor: self.wrapped_accessor.clone(),
103 }
104 }
105}
106
107impl fmt::Debug for WrapInfo {
108 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
109 f.debug_struct("WrapInfo")
110 .field("token", &redact(self.token.expose_secret()))
111 .field("accessor", &self.accessor)
112 .field("ttl", &self.ttl)
113 .field("creation_time", &self.creation_time)
114 .field("creation_path", &self.creation_path)
115 .field("wrapped_accessor", &self.wrapped_accessor)
116 .finish()
117 }
118}