rusty-box 0.1.2-alpha

Box.com API wrapper
Documentation
/*
 * Box Platform API
 *
 * [Box Platform](https://box.dev) provides functionality to provide access to content stored within [Box](https://box.com). It provides endpoints for basic manipulation of files and folders, management of users within an enterprise, as well as more complex topics such as legal holds and retention policies.
 *
 * The version of the OpenAPI document: 2.0.0
 * Contact: devrel@box.com
 * Generated by: https://openapi-generator.tech
 */

use reqwest;

use crate::rest_api::api::api_base::{Error, ResponseContent};
use crate::rest_api::api::models::api_config::ApiConfig;

use super::models::access_token::AccessToken;
use super::models::authorization::*;

/// Authorize a user by sending them through the [Box](https://box.com) website and request their permission to act on their behalf.  This is the first step when authenticating a user using OAuth 2.0. To request a user's authorization to use the Box APIs on their behalf you will need to send a user to the URL with this format.
pub async fn get_authorize(
    configuration: &ApiConfig,
    params: GetAuthorizeParams,
) -> Result<String, Error<GetAuthorizeError>> {
    let local_var_configuration = configuration;

    // unbox the parameters
    let response_type = params.response_type;
    let client_id = params.client_id;
    let redirect_uri = params.redirect_uri;
    let state = params.state;
    let scope = params.scope;

    let local_var_client = &local_var_configuration.client;

    let local_var_uri_str = format!("{}/authorize", local_var_configuration.oauth2_authorize_url);
    let mut local_var_req_builder =
        local_var_client.request(reqwest::Method::GET, local_var_uri_str.as_str());

    local_var_req_builder =
        local_var_req_builder.query(&[("response_type", &response_type.to_string())]);
    local_var_req_builder = local_var_req_builder.query(&[("client_id", &client_id.to_string())]);
    if let Some(ref local_var_str) = redirect_uri {
        local_var_req_builder =
            local_var_req_builder.query(&[("redirect_uri", &local_var_str.to_string())]);
    }
    if let Some(ref local_var_str) = state {
        local_var_req_builder =
            local_var_req_builder.query(&[("state", &local_var_str.to_string())]);
    }
    if let Some(ref local_var_str) = scope {
        local_var_req_builder =
            local_var_req_builder.query(&[("scope", &local_var_str.to_string())]);
    }
    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
        local_var_req_builder =
            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
    }

    let local_var_req = local_var_req_builder.build()?;
    let local_var_resp = local_var_client.execute(local_var_req).await?;

    let local_var_status = local_var_resp.status();
    let local_var_content = local_var_resp.text().await?;

    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
        serde_json::from_str(&local_var_content).map_err(Error::from)
    } else {
        let local_var_entity: Option<GetAuthorizeError> =
            serde_json::from_str(&local_var_content).ok();
        let local_var_error = ResponseContent {
            status: local_var_status,
            content: local_var_content,
            entity: local_var_entity,
        };
        Err(Error::ResponseError(local_var_error))
    }
}

/// Revoke an active Access Token, effectively logging a user out that has been previously authenticated.
pub async fn post_oauth2_revoke(
    configuration: &ApiConfig,
    params: PostOauth2RevokeParams,
) -> Result<(), Error<PostOauth2RevokeError>> {
    let local_var_configuration = configuration;

    // unbox the parameters
    let client_id = params.client_id;
    let client_secret = params.client_secret;
    let token = params.token;

    let local_var_client = &local_var_configuration.client;

    let local_var_uri_str = format!("{}/revoke", local_var_configuration.oauth2_api_url);
    let mut local_var_req_builder =
        local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());

    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
        local_var_req_builder =
            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
    }
    let mut local_var_form_params = std::collections::HashMap::new();
    if let Some(local_var_param_value) = client_id {
        local_var_form_params.insert("client_id", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = client_secret {
        local_var_form_params.insert("client_secret", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = token {
        local_var_form_params.insert("token", local_var_param_value.to_string());
    }
    local_var_req_builder = local_var_req_builder.form(&local_var_form_params);

    let local_var_req = local_var_req_builder.build()?;
    let local_var_resp = local_var_client.execute(local_var_req).await?;

    let local_var_status = local_var_resp.status();
    let local_var_content = local_var_resp.text().await?;

    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
        Ok(())
    } else {
        let local_var_entity: Option<PostOauth2RevokeError> =
            serde_json::from_str(&local_var_content).ok();
        let local_var_error = ResponseContent {
            status: local_var_status,
            content: local_var_content,
            entity: local_var_entity,
        };
        Err(Error::ResponseError(local_var_error))
    }
}

/// Request an Access Token using either a client-side obtained OAuth 2.0 authorization code or a server-side JWT assertion.  An Access Token is a string that enables Box to verify that a request belongs to an authorized session. In the normal order of operations you will begin by requesting authentication from the [authorize](#get-authorize) endpoint and Box will send you an authorization code.  You will then send this code to this endpoint to exchange it for an Access Token. The returned Access Token can then be used to to make Box API calls.
pub async fn post_oauth2_token(
    configuration: &ApiConfig,
    params: PostOauth2TokenParams,
) -> Result<AccessToken, Error<PostOauth2TokenError>> {
    let local_var_configuration = configuration;

    // unbox the parameters
    let grant_type = params.grant_type;
    let client_id = params.client_id;
    let client_secret = params.client_secret;
    let code = params.code;
    let refresh_token = params.refresh_token;
    let assertion = params.assertion;
    let subject_token = params.subject_token;
    let subject_token_type = params.subject_token_type;
    let actor_token = params.actor_token;
    let actor_token_type = params.actor_token_type;
    let scope = params.scope;
    let resource = params.resource;
    let box_subject_type = params.box_subject_type;
    let box_subject_id = params.box_subject_id;
    let box_shared_link = params.box_shared_link;

    let local_var_client = &local_var_configuration.client;

    let local_var_uri_str = format!("{}/token", local_var_configuration.oauth2_api_url);
    let mut local_var_req_builder =
        local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());

    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
        local_var_req_builder =
            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
    }
    let mut local_var_form_params = std::collections::HashMap::new();
    local_var_form_params.insert("grant_type", grant_type.to_string());
    if let Some(local_var_param_value) = client_id {
        local_var_form_params.insert("client_id", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = client_secret {
        local_var_form_params.insert("client_secret", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = code {
        local_var_form_params.insert("code", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = refresh_token {
        local_var_form_params.insert("refresh_token", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = assertion {
        local_var_form_params.insert("assertion", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = subject_token {
        local_var_form_params.insert("subject_token", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = subject_token_type {
        local_var_form_params.insert("subject_token_type", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = actor_token {
        local_var_form_params.insert("actor_token", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = actor_token_type {
        local_var_form_params.insert("actor_token_type", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = scope {
        local_var_form_params.insert("scope", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = resource {
        local_var_form_params.insert("resource", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = box_subject_type {
        local_var_form_params.insert("box_subject_type", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = box_subject_id {
        local_var_form_params.insert("box_subject_id", local_var_param_value.to_string());
    }
    if let Some(local_var_param_value) = box_shared_link {
        local_var_form_params.insert("box_shared_link", local_var_param_value.to_string());
    }
    local_var_req_builder = local_var_req_builder.form(&local_var_form_params);

    let local_var_req = local_var_req_builder.build()?;
    let local_var_resp = local_var_client.execute(local_var_req).await?;

    let local_var_status = local_var_resp.status();
    let local_var_content = local_var_resp.text().await?;

    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
        serde_json::from_str(&local_var_content).map_err(Error::from)
    } else {
        let local_var_entity: Option<PostOauth2TokenError> =
            serde_json::from_str(&local_var_content).ok();
        let local_var_error = ResponseContent {
            status: local_var_status,
            content: local_var_content,
            entity: local_var_entity,
        };
        Err(Error::ResponseError(local_var_error))
    }
}

/// Refresh an Access Token using its client ID, secret, and refresh token.
pub async fn post_oauth2_token_refresh(
    configuration: &ApiConfig,
    params: PostOauth2TokenRefreshParams,
) -> Result<AccessToken, Error<PostOauth2TokenRefreshError>> {
    let local_var_configuration = configuration;

    // unbox the parameters
    let grant_type = params.grant_type;
    let client_id = params.client_id;
    let client_secret = params.client_secret;
    let refresh_token = params.refresh_token;

    let local_var_client = &local_var_configuration.client;

    let local_var_uri_str = format!("{}/token", local_var_configuration.oauth2_api_url);
    let mut local_var_req_builder =
        local_var_client.request(reqwest::Method::POST, local_var_uri_str.as_str());

    if let Some(ref local_var_user_agent) = local_var_configuration.user_agent {
        local_var_req_builder =
            local_var_req_builder.header(reqwest::header::USER_AGENT, local_var_user_agent.clone());
    }
    let mut local_var_form_params = std::collections::HashMap::new();
    local_var_form_params.insert("grant_type", grant_type.to_string());
    local_var_form_params.insert("client_id", client_id.to_string());
    local_var_form_params.insert("client_secret", client_secret.to_string());
    local_var_form_params.insert("refresh_token", refresh_token.to_string());
    local_var_req_builder = local_var_req_builder.form(&local_var_form_params);

    let local_var_req = local_var_req_builder.build()?;
    let local_var_resp = local_var_client.execute(local_var_req).await?;

    let local_var_status = local_var_resp.status();
    let local_var_content = local_var_resp.text().await?;

    if !local_var_status.is_client_error() && !local_var_status.is_server_error() {
        serde_json::from_str(&local_var_content).map_err(Error::from)
    } else {
        let local_var_entity: Option<PostOauth2TokenRefreshError> =
            serde_json::from_str(&local_var_content).ok();
        let local_var_error = ResponseContent {
            status: local_var_status,
            content: local_var_content,
            entity: local_var_entity,
        };
        Err(Error::ResponseError(local_var_error))
    }
}