serverless_workflow_core/models/
authentication.rs1use serde_derive::{Deserialize, Serialize};
2
3fn default_oauth2_request_encoding() -> String{
5 OAuth2RequestEncoding::FORM_URL.to_string()
6}
7
8fn default_token_endpoint() -> String{
10 "/oauth2/token".to_string()
11}
12
13fn default_revocation_endpoint() -> String{
15 "/oauth2/revoke".to_string()
16}
17
18fn default_introspection_endpoint() -> String{
20 "/oauth2/introspect".to_string()
21}
22
23pub struct AuthenticationScheme;
25impl AuthenticationScheme {
26 pub const BASIC: &'static str = "Basic";
28 pub const BEARER: &'static str = "Bearer";
30 pub const CERTIFICATE: &'static str = "Certificate";
32 pub const DIGEST: &'static str = "Digest";
34 pub const OAUTH2: &'static str = "OAuth2";
36 pub const OIDC: &'static str = "OpenIDConnect";
38}
39
40pub struct OAuth2ClientAuthenticationMethod;
42impl OAuth2ClientAuthenticationMethod{
43 pub const BASIC: &'static str = "client_secret_basic";
45 pub const POST: &'static str = "client_secret_post";
47 pub const JWT: &'static str = "client_secret_jwt";
49 pub const PRIVATE_KEY: &'static str = "private_key_jwt";
51 pub const NONE: &'static str = "none";
53}
54
55pub struct OAuth2RequestEncoding;
57impl OAuth2RequestEncoding{
58 pub const FORM_URL: &'static str = "application/x-www-form-urlencoded";
60 pub const JSON: &'static str = "application/json";
62}
63
64#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
66pub struct AuthenticationPolicyDefinition{
67
68 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
70 pub use_: Option<String>,
71
72 #[serde(rename = "basic", skip_serializing_if = "Option::is_none")]
74 pub basic : Option<BasicAuthenticationSchemeDefinition>,
75
76 #[serde(rename = "bearer", skip_serializing_if = "Option::is_none")]
78 pub bearer : Option<BearerAuthenticationSchemeDefinition>,
79
80 #[serde(rename = "certificate", skip_serializing_if = "Option::is_none")]
82 pub certificate : Option<CertificateAuthenticationSchemeDefinition>,
83
84 #[serde(rename = "digest", skip_serializing_if = "Option::is_none")]
86 pub digest : Option<DigestAuthenticationSchemeDefinition>,
87
88 #[serde(rename = "oauth2", skip_serializing_if = "Option::is_none")]
90 pub oauth2 : Option<OAuth2AuthenticationSchemeDefinition>,
91
92 #[serde(rename = "oidc", skip_serializing_if = "Option::is_none")]
94 pub oidc : Option<OpenIDConnectSchemeDefinition>
95
96}
97pub trait AuthenticationSchemeDefinition {
99 fn scheme(&self) -> &str;
101}
102
103#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
105pub struct BasicAuthenticationSchemeDefinition{
106
107 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
109 pub use_: Option<String>,
110
111 #[serde(rename = "username", skip_serializing_if = "Option::is_none")]
113 pub username : Option<String>,
114
115 #[serde(rename = "password", skip_serializing_if = "Option::is_none")]
117 pub password : Option<String>
118
119}
120impl AuthenticationSchemeDefinition for BasicAuthenticationSchemeDefinition {
121 fn scheme(&self) -> &str {
122 AuthenticationScheme::BASIC
123 }
124}
125
126#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
128pub struct BearerAuthenticationSchemeDefinition{
129
130 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
132 pub use_: Option<String>,
133
134 #[serde(rename = "token", skip_serializing_if = "Option::is_none")]
136 pub token : Option<String>
137
138}
139impl AuthenticationSchemeDefinition for BearerAuthenticationSchemeDefinition{
140 fn scheme(&self) -> &str {
141 AuthenticationScheme::BEARER
142 }
143}
144
145#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
147pub struct CertificateAuthenticationSchemeDefinition{
148
149 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
151 pub use_: Option<String>,
152
153}
154impl AuthenticationSchemeDefinition for CertificateAuthenticationSchemeDefinition{
155 fn scheme(&self) -> &str {
156 AuthenticationScheme::CERTIFICATE
157 }
158}
159
160#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
162pub struct DigestAuthenticationSchemeDefinition{
163
164 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
166 pub use_: Option<String>,
167
168 #[serde(rename = "username", skip_serializing_if = "Option::is_none")]
170 pub username : Option<String>,
171
172 #[serde(rename = "password", skip_serializing_if = "Option::is_none")]
174 pub password : Option<String>
175
176}
177impl AuthenticationSchemeDefinition for DigestAuthenticationSchemeDefinition{
178 fn scheme(&self) -> &str {
179 AuthenticationScheme::DIGEST
180 }
181}
182
183#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
185pub struct OAuth2AuthenticationClientDefinition{
186
187 #[serde(rename = "id", skip_serializing_if = "Option::is_none")]
189 pub id : Option<String>,
190
191 #[serde(rename = "secret", skip_serializing_if = "Option::is_none")]
193 pub secret : Option<String>,
194
195 #[serde(rename = "assertion", skip_serializing_if = "Option::is_none")]
197 pub assertion : Option<String>,
198
199 #[serde(rename = "authentication", skip_serializing_if = "Option::is_none")]
201 pub authentication : Option<String>,
202
203}
204
205#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
207pub struct OAuth2AuthenticationRequestDefinition{
208
209 #[serde(rename = "encoding", default = "default_oauth2_request_encoding")]
211 pub encoding : String
212
213}
214
215#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
217pub struct OAuth2TokenDefinition{
218
219 #[serde(rename = "encoding")]
221 pub token : String,
222
223 #[serde(rename = "type")]
225 pub type_ : String
226
227}
228
229#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
231pub struct OAuth2AuthenticationEndpointsDefinition{
232
233 #[serde(rename = "token", default = "default_token_endpoint")]
235 pub token : String,
236
237 #[serde(rename = "revocation", default = "default_revocation_endpoint")]
239 pub revocation : String,
240
241 #[serde(rename = "introspection", default = "default_introspection_endpoint")]
243 pub introspection : String,
244
245}
246
247#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
249pub struct OAuth2AuthenticationSchemeDefinition{
250
251 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
253 pub use_: Option<String>,
254
255 #[serde(rename = "endpoints", skip_serializing_if = "Option::is_none")]
257 pub endpoints : Option<OAuth2AuthenticationEndpointsDefinition>,
258
259 #[serde(rename = "authority", skip_serializing_if = "Option::is_none")]
261 pub authority: Option<String>,
262
263 #[serde(rename = "grant", skip_serializing_if = "Option::is_none")]
265 pub grant: Option<String>,
266
267 #[serde(rename = "client", skip_serializing_if = "Option::is_none")]
269 pub client: Option<OAuth2AuthenticationClientDefinition>,
270
271 #[serde(rename = "request", skip_serializing_if = "Option::is_none")]
273 pub request: Option<OAuth2AuthenticationRequestDefinition>,
274
275 #[serde(rename = "issuers", skip_serializing_if = "Option::is_none")]
277 pub issuers: Option<Vec<String>>, #[serde(rename = "scopes", skip_serializing_if = "Option::is_none")]
281 pub scopes: Option<Vec<String>>,
282
283 #[serde(rename = "audiences", skip_serializing_if = "Option::is_none")]
285 pub audiences: Option<Vec<String>>,
286
287 #[serde(rename = "username", skip_serializing_if = "Option::is_none")]
289 pub username: Option<String>,
290
291 #[serde(rename = "password", skip_serializing_if = "Option::is_none")]
293 pub password: Option<String>,
294
295 #[serde(rename = "subject", skip_serializing_if = "Option::is_none")]
297 pub subject: Option<OAuth2TokenDefinition>,
298
299 #[serde(rename = "actor", skip_serializing_if = "Option::is_none")]
301 pub actor: Option<OAuth2TokenDefinition>
302
303}
304impl AuthenticationSchemeDefinition for OAuth2AuthenticationSchemeDefinition{
305 fn scheme(&self) -> &str {
306 AuthenticationScheme::OAUTH2
307 }
308}
309
310#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
312pub struct OpenIDConnectSchemeDefinition{
313
314 #[serde(rename = "use", skip_serializing_if = "Option::is_none")]
316 pub use_: Option<String>,
317
318 #[serde(rename = "authority", skip_serializing_if = "Option::is_none")]
320 pub authority: Option<String>,
321
322 #[serde(rename = "grant", skip_serializing_if = "Option::is_none")]
324 pub grant: Option<String>,
325
326 #[serde(rename = "client", skip_serializing_if = "Option::is_none")]
328 pub client: Option<OAuth2AuthenticationClientDefinition>,
329
330 #[serde(rename = "request", skip_serializing_if = "Option::is_none")]
332 pub request: Option<OAuth2AuthenticationRequestDefinition>,
333
334 #[serde(rename = "issuers", skip_serializing_if = "Option::is_none")]
336 pub issuers: Option<Vec<String>>, #[serde(rename = "scopes", skip_serializing_if = "Option::is_none")]
340 pub scopes: Option<Vec<String>>,
341
342 #[serde(rename = "audiences", skip_serializing_if = "Option::is_none")]
344 pub audiences: Option<Vec<String>>,
345
346 #[serde(rename = "username", skip_serializing_if = "Option::is_none")]
348 pub username: Option<String>,
349
350 #[serde(rename = "password", skip_serializing_if = "Option::is_none")]
352 pub password: Option<String>,
353
354 #[serde(rename = "subject", skip_serializing_if = "Option::is_none")]
356 pub subject: Option<OAuth2TokenDefinition>,
357
358 #[serde(rename = "actor", skip_serializing_if = "Option::is_none")]
360 pub actor: Option<OAuth2TokenDefinition>
361
362}
363impl AuthenticationSchemeDefinition for OpenIDConnectSchemeDefinition{
364 fn scheme(&self) -> &str {
365 AuthenticationScheme::OIDC
366 }
367}