Skip to main content

box_open_sdk/managers/
authorization.rs

1// Code generated by box-gantry. DO NOT EDIT.
2
3use crate::runtime::{self, Error};
4
5/// Optional parameters for [`AuthorizationManager::authorize`].
6#[derive(Clone, Debug, Default)]
7pub struct AuthorizationAuthorizeOptions {
8    pub redirect_uri: Option<String>,
9    pub state: Option<String>,
10    pub scope: Option<String>,
11}
12
13/// Operations for the "authorization" API area.
14pub struct AuthorizationManager {
15    session: std::sync::Arc<runtime::Client>,
16}
17
18impl AuthorizationManager {
19    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
20        Self { session }
21    }
22
23    pub async fn authorize(
24        &self,
25        response_type: crate::models::schemas::GetAuthorizeResponseType,
26        client_id: String,
27        opts: Option<AuthorizationAuthorizeOptions>,
28    ) -> Result<String, Error> {
29        let mut url = self.session.base_url("oauth_authorize");
30        url.push_str("/authorize");
31        let mut req = self.session.new_request("GET", &url);
32        req = runtime::with_query(req, "response_type", &response_type.0);
33        req = runtime::with_query(req, "client_id", &client_id);
34        let opts = opts.unwrap_or_default();
35        if let Some(value) = opts.redirect_uri {
36            req = runtime::with_query(req, "redirect_uri", &value);
37        }
38        if let Some(value) = opts.state {
39            req = runtime::with_query(req, "state", &value);
40        }
41        if let Some(value) = opts.scope {
42            req = runtime::with_query(req, "scope", &value);
43        }
44        let resp = self.session.fetch(req).await?;
45        let data = runtime::response_bytes(&resp)?;
46        Ok(String::from_utf8_lossy(&data).into_owned())
47    }
48
49    pub async fn create_oauth2_token(
50        &self,
51        body: crate::models::schemas::PostOAuth2Token,
52    ) -> Result<crate::models::schemas::AccessToken, Error> {
53        let mut url = self.session.base_url("api_root");
54        url.push_str("/oauth2");
55        url.push_str("/token");
56        let mut req = self.session.new_request("POST", &url);
57        let mut form: Vec<(&str, String)> = vec![("grant_type", body.grant_type.0.clone())];
58        if let Some(value) = &body.client_id {
59            form.push(("client_id", value.clone()));
60        }
61        if let Some(value) = &body.client_secret {
62            form.push(("client_secret", value.clone()));
63        }
64        if let Some(value) = &body.code {
65            form.push(("code", value.clone()));
66        }
67        if let Some(value) = &body.refresh_token {
68            form.push(("refresh_token", value.clone()));
69        }
70        if let Some(value) = &body.assertion {
71            form.push(("assertion", value.clone()));
72        }
73        if let Some(value) = &body.subject_token {
74            form.push(("subject_token", value.clone()));
75        }
76        if let Some(value) = &body.subject_token_type {
77            form.push(("subject_token_type", value.0.clone()));
78        }
79        if let Some(value) = &body.actor_token {
80            form.push(("actor_token", value.clone()));
81        }
82        if let Some(value) = &body.actor_token_type {
83            form.push(("actor_token_type", value.0.clone()));
84        }
85        if let Some(value) = &body.scope {
86            form.push(("scope", value.clone()));
87        }
88        if let Some(value) = &body.resource {
89            form.push(("resource", value.clone()));
90        }
91        if let Some(value) = &body.box_subject_type {
92            form.push(("box_subject_type", value.0.clone()));
93        }
94        if let Some(value) = &body.box_subject_id {
95            form.push(("box_subject_id", value.clone()));
96        }
97        if let Some(value) = &body.box_shared_link {
98            form.push(("box_shared_link", value.clone()));
99        }
100        let payload = crate::internal::form_encode(&form);
101        req = runtime::with_form_body(req, payload.as_bytes());
102        let resp = self.session.fetch(req).await?;
103        let data = runtime::response_bytes(&resp)?;
104        Ok(serde_json::from_slice(&data)?)
105    }
106
107    pub async fn create_oauth2_token_refresh(
108        &self,
109        body: crate::models::schemas::PostOAuth2TokenRefreshAccessToken,
110    ) -> Result<crate::models::schemas::AccessToken, Error> {
111        let mut url = self.session.base_url("api_root");
112        url.push_str("/oauth2");
113        url.push_str("/token");
114        let mut req = self.session.new_request("POST", &url);
115        let form: Vec<(&str, String)> = vec![
116            ("grant_type", body.grant_type.0.clone()),
117            ("client_id", body.client_id.clone()),
118            ("client_secret", body.client_secret.clone()),
119            ("refresh_token", body.refresh_token.clone()),
120        ];
121        let payload = crate::internal::form_encode(&form);
122        req = runtime::with_form_body(req, payload.as_bytes());
123        let resp = self.session.fetch(req).await?;
124        let data = runtime::response_bytes(&resp)?;
125        Ok(serde_json::from_slice(&data)?)
126    }
127
128    pub async fn revoke_oauth2(
129        &self,
130        body: crate::models::schemas::PostOAuth2Revoke,
131    ) -> Result<(), Error> {
132        let mut url = self.session.base_url("api_root");
133        url.push_str("/oauth2");
134        url.push_str("/revoke");
135        let mut req = self.session.new_request("POST", &url);
136        let mut form: Vec<(&str, String)> = Vec::new();
137        if let Some(value) = &body.client_id {
138            form.push(("client_id", value.clone()));
139        }
140        if let Some(value) = &body.client_secret {
141            form.push(("client_secret", value.clone()));
142        }
143        if let Some(value) = &body.token {
144            form.push(("token", value.clone()));
145        }
146        let payload = crate::internal::form_encode(&form);
147        req = runtime::with_form_body(req, payload.as_bytes());
148        let _ = self.session.fetch(req).await?;
149        Ok(())
150    }
151}