1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use url::Url;
use super::spec_extensions;
/// Allows configuration of the supported OAuth Flows.
///
/// See <https://spec.openapis.org/oas/v3.1.1#oauth-flows-object>.
#[derive(Debug, Clone, Default, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Flows {
/// Configuration for the OAuth Implicit flow.
#[serde(skip_serializing_if = "Option::is_none")]
pub implicit: Option<ImplicitFlow>,
/// Configuration for the OAuth Resource Owner Password flow.
#[serde(skip_serializing_if = "Option::is_none")]
pub password: Option<PasswordFlow>,
/// Configuration for the OAuth Client Credentials flow.
#[serde(skip_serializing_if = "Option::is_none")]
pub client_credentials: Option<ClientCredentialsFlow>,
/// Configuration for the OAuth Authorization Code flow.
#[serde(skip_serializing_if = "Option::is_none")]
pub authorization_code: Option<AuthorizationCodeFlow>,
/// Specification extensions.
///
/// Only "x-" prefixed keys are collected, and the prefix is stripped.
///
/// See <https://spec.openapis.org/oas/v3.1.1#specification-extensions>.
#[serde(flatten, with = "spec_extensions")]
pub extensions: BTreeMap<String, serde_json::Value>,
}
/// Configuration details for a implicit OAuth Flow.
///
/// See <https://spec.openapis.org/oas/v3.1.1#oauth-flow-object>.
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ImplicitFlow {
/// The authorization URL to be used for this flow.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
pub authorization_url: Url,
/// The URL to be used for obtaining refresh tokens.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_url: Option<Url>,
/// The available scopes for the OAuth2 security scheme.
///
/// A map between the scope name and a short description for it. The map MAY be empty.
#[serde(default)]
pub scopes: BTreeMap<String, String>,
/// Specification extensions.
///
/// Only "x-" prefixed keys are collected, and the prefix is stripped.
///
/// See <https://spec.openapis.org/oas/v3.1.1#specification-extensions>.
#[serde(flatten, with = "spec_extensions")]
pub extensions: BTreeMap<String, serde_json::Value>,
}
/// Configuration details for a password OAuth Flow.
///
/// See <https://spec.openapis.org/oas/v3.1.1#oauth-flow-object>.
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PasswordFlow {
/// The token URL to be used for this flow.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
pub token_url: Url,
/// The URL to be used for obtaining refresh tokens.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_url: Option<Url>,
/// The available scopes for the OAuth2 security scheme.
///
/// A map between the scope name and a short description for it. The map MAY be empty.
#[serde(default)]
pub scopes: BTreeMap<String, String>,
}
/// Configuration details for a client credentials OAuth Flow.
///
/// See <https://spec.openapis.org/oas/v3.1.1#oauth-flow-object>.
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ClientCredentialsFlow {
/// The token URL to be used for this flow.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
pub token_url: Url,
/// The URL to be used for obtaining refresh tokens.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_url: Option<Url>,
/// The available scopes for the OAuth2 security scheme.
///
/// A map between the scope name and a short description for it. The map MAY be empty.
#[serde(default)]
pub scopes: BTreeMap<String, String>,
}
/// Configuration details for a authorization code OAuth Flow.
///
/// See <https://spec.openapis.org/oas/v3.1.1#oauth-flow-object>.
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AuthorizationCodeFlow {
/// The authorization URL to be used for this flow.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
pub authorization_url: Url,
/// The token URL to be used for this flow.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
pub token_url: Url,
/// The URL to be used for obtaining refresh tokens.
///
/// This MUST be in the form of a URL. The OAuth2 standard requires the use of TLS.
#[serde(skip_serializing_if = "Option::is_none")]
pub refresh_url: Option<Url>,
/// The available scopes for the OAuth2 security scheme.
///
/// A map between the scope name and a short description for it. The map MAY be empty.
#[serde(default)]
pub scopes: BTreeMap<String, String>,
}