ws_auth/oauth2/token/
mod.rs1use chrono::{DateTime, Utc};
2use uuid::Uuid;
3
4#[derive(Debug, Serialize, Deserialize)]
5pub enum GrantType {
6 #[serde(rename = "refresh_token")]
7 RefreshToken,
8
9 #[serde(rename = "authorization_code")]
10 AuthorizationCode,
11}
12
13#[derive(Debug, Serialize, Deserialize)]
14pub enum ErrorCode {
15 #[serde(rename = "invalid_request")]
16 InvalidRequest,
17
18 #[serde(rename = "invalid_grant")]
19 InvalidGrant,
20
21 #[serde(rename = "unauthorized_client")]
22 UnauthorizedClient,
23
24 #[serde(rename = "invalid_client")]
25 InvalidClient,
26
27 #[serde(rename = "unsupported_grant_type")]
28 UnsupportedGrantType,
29
30 #[serde(rename = "invalid_resource")]
31 InvalidResource,
32
33 #[serde(rename = "interaction_required")]
34 InteractionRequired,
35
36 #[serde(rename = "temporarily_unavailable")]
37 TemporarilyUnavailable,
38
39 #[serde(rename = "consent_required")]
40 ConsentRequired,
41
42 #[serde(rename = "invalid_scope")]
43 InvalidScope,
44}
45
46#[derive(Debug, Serialize, Deserialize)]
48pub struct TokenRequest {
49 #[serde(skip_serializing_if = "Option::is_none")]
50 #[serde(default)]
51 pub client_id: Option<String>,
52
53 #[serde(skip_serializing_if = "Option::is_none")]
54 #[serde(default)]
55 pub client_secret: Option<String>,
56
57 #[serde(skip_serializing_if = "Option::is_none")]
58 #[serde(default)]
59 pub client_assertion_type: Option<String>,
60
61 #[serde(skip_serializing_if = "Option::is_none")]
62 #[serde(default)]
63 pub client_assertion: Option<String>,
64
65 #[serde(skip_serializing_if = "Option::is_none")]
66 #[serde(default)]
67 pub scope: Option<String>,
68
69 #[serde(skip_serializing_if = "Option::is_none")]
70 #[serde(default)]
71 pub code: Option<String>,
72
73 #[serde(skip_serializing_if = "Option::is_none")]
74 #[serde(default)]
75 pub redirect_uri: Option<String>,
76
77 #[serde(skip_serializing_if = "Option::is_none")]
78 #[serde(default)]
79 pub grant_type: Option<GrantType>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
82 #[serde(default)]
83 pub code_verifier: Option<String>,
84}
85
86#[derive(Debug, Serialize, Deserialize)]
87pub struct TokenErrorResponse {
88 #[serde(skip_serializing_if = "Option::is_none")]
89 #[serde(default)]
90 pub error: Option<ErrorCode>,
91
92 #[serde(skip_serializing_if = "Option::is_none")]
93 #[serde(default)]
94 pub error_description: Option<String>,
95
96 #[serde(skip_serializing_if = "Option::is_none")]
97 #[serde(default)]
98 pub error_codes: Option<Vec<u64>>,
99
100 #[serde(skip_serializing_if = "Option::is_none")]
101 #[serde(default)]
102 timestamp: Option<DateTime<Utc>>,
103
104 #[serde(skip_serializing_if = "Option::is_none")]
105 #[serde(default)]
106 trace_id: Option<String>,
107
108 #[serde(skip_serializing_if = "Option::is_none")]
109 #[serde(default)]
110 correlation_id: Option<String>,
111}
112
113impl TokenErrorResponse {
114 pub fn new() -> TokenErrorResponse {
115 let trace_id = Uuid::new_v4();
116 let correlation_id = Uuid::new_v4();
117
118 return TokenErrorResponse {
119 error: Option::None,
120 error_description: Option::None,
121 error_codes: Option::None,
122 timestamp: Some(Utc::now()),
123 trace_id: Some(trace_id.to_string()),
124 correlation_id: Some(correlation_id.to_string()),
125 };
126 }
127
128 pub fn new_with_tracking(trace_id: String, correlation_id: String) -> TokenErrorResponse {
129 return TokenErrorResponse {
130 error: Option::None,
131 error_description: Option::None,
132 error_codes: Option::None,
133 timestamp: Some(Utc::now()),
134 trace_id: Some(trace_id.to_owned()),
135 correlation_id: Some(correlation_id.to_owned()),
136 };
137 }
138}