forked from x52dev/oas3-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflows.rs
168 lines (145 loc) · 6.27 KB
/
flows.rs
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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.0#oauth-flows-object>.
#[derive(Clone, Debug, Default, Deserialize, Serialize, PartialEq)]
#[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.0#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.0#oauth-flow-object>.
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
#[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.0#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.0#oauth-flow-object>.
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
#[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.0#oauth-flow-object>.
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
#[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.0#oauth-flow-object>.
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
#[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>,
}
// TODO: Implement
/// Map of possible out-of band callbacks related to the parent operation.
///
/// Each value in the map is a Path Item Object that describes a set of requests that may be
/// initiated by the API provider and the expected responses. The key value used to identify the
/// callback object is an expression, evaluated at runtime, that identifies a URL to use for the
/// callback operation.
///
/// See <https://spec.openapis.org/oas/v3.1.0#callback-object>.
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Default)]
pub struct Callback(
/// A Path Item Object used to define a callback request and expected responses.
serde_json::Value, // TODO: Add "Specification Extensions" https://spec.openapis.org/oas/v3.1.0#specificationExtensions}
);
// FIXME: Implement
// /// Allows configuration of the supported OAuth Flows.
// /// https://spec.openapis.org/oas/v3.1.0#oauthFlowsObject
// #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Default)]
// pub struct OAuthFlows {
// }