harbor-api 2.0.0

These APIs provide services for manipulating Harbor project.
Documentation
/*
 * Harbor API
 *
 * These APIs provide services for manipulating Harbor project.
 *
 * The version of the OpenAPI document: 2.0
 * 
 * Generated by: https://openapi-generator.tech
 */


use reqwest;
use serde::{Deserialize, Serialize, de::Error as _};
use crate::{apis::ResponseContent, models};
use super::{Error, configuration, ContentType};

/// struct for passing parameters to the method [`import_ldap_user`]
#[derive(Clone, Debug)]
pub struct ImportLdapUserParams {
    /// The uid listed for importing. This list will check users validity of ldap service based on configuration from the system.
    pub uid_list: models::LdapImportUsers,
    /// An unique ID for the request
    pub x_request_id: Option<String>
}

/// struct for passing parameters to the method [`ping_ldap`]
#[derive(Clone, Debug)]
pub struct PingLdapParams {
    /// An unique ID for the request
    pub x_request_id: Option<String>,
    /// ldap configuration. support input ldap service configuration. If it is a empty request, will load current configuration from the system.
    pub ldapconf: Option<models::LdapConf>
}

/// struct for passing parameters to the method [`search_ldap_group`]
#[derive(Clone, Debug)]
pub struct SearchLdapGroupParams {
    /// An unique ID for the request
    pub x_request_id: Option<String>,
    /// Ldap group name
    pub groupname: Option<String>,
    /// The LDAP group DN
    pub groupdn: Option<String>
}

/// struct for passing parameters to the method [`search_ldap_user`]
#[derive(Clone, Debug)]
pub struct SearchLdapUserParams {
    /// An unique ID for the request
    pub x_request_id: Option<String>,
    /// Registered user ID
    pub username: Option<String>
}


/// struct for typed errors of method [`import_ldap_user`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ImportLdapUserError {
    Status400(models::Errors),
    Status401(models::Errors),
    Status403(models::Errors),
    Status404(Vec<models::LdapFailedImportUser>),
    Status500(models::Errors),
    UnknownValue(serde_json::Value),
}

/// struct for typed errors of method [`ping_ldap`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum PingLdapError {
    Status400(models::Errors),
    Status401(models::Errors),
    Status403(models::Errors),
    Status500(models::Errors),
    UnknownValue(serde_json::Value),
}

/// struct for typed errors of method [`search_ldap_group`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SearchLdapGroupError {
    Status400(models::Errors),
    Status401(models::Errors),
    Status403(models::Errors),
    Status500(models::Errors),
    UnknownValue(serde_json::Value),
}

/// struct for typed errors of method [`search_ldap_user`]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SearchLdapUserError {
    Status400(models::Errors),
    Status401(models::Errors),
    Status403(models::Errors),
    Status500(models::Errors),
    UnknownValue(serde_json::Value),
}


/// This endpoint adds the selected available ldap users to harbor based on related configuration parameters from the system. System will try to guess the user email address and realname, add to harbor user information. If have errors when import user, will return the list of importing failed uid and the failed reason. 
pub async fn import_ldap_user(configuration: &configuration::Configuration, params: ImportLdapUserParams) -> Result<(), Error<ImportLdapUserError>> {

    let uri_str = format!("{}/ldap/users/import", configuration.base_path);
    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);

    if let Some(ref user_agent) = configuration.user_agent {
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
    }
    if let Some(param_value) = params.x_request_id {
        req_builder = req_builder.header("X-Request-Id", param_value.to_string());
    }
    if let Some(ref auth_conf) = configuration.basic_auth {
        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
    };
    req_builder = req_builder.json(&params.uid_list);

    let req = req_builder.build()?;
    let resp = configuration.client.execute(req).await?;

    let status = resp.status();

    if !status.is_client_error() && !status.is_server_error() {
        Ok(())
    } else {
        let content = resp.text().await?;
        let entity: Option<ImportLdapUserError> = serde_json::from_str(&content).ok();
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
    }
}

/// This endpoint ping the available ldap service for test related configuration parameters. 
pub async fn ping_ldap(configuration: &configuration::Configuration, params: PingLdapParams) -> Result<models::LdapPingResult, Error<PingLdapError>> {

    let uri_str = format!("{}/ldap/ping", configuration.base_path);
    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);

    if let Some(ref user_agent) = configuration.user_agent {
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
    }
    if let Some(param_value) = params.x_request_id {
        req_builder = req_builder.header("X-Request-Id", param_value.to_string());
    }
    if let Some(ref auth_conf) = configuration.basic_auth {
        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
    };
    req_builder = req_builder.json(&params.ldapconf);

    let req = req_builder.build()?;
    let resp = configuration.client.execute(req).await?;

    let status = resp.status();
    let content_type = resp
        .headers()
        .get("content-type")
        .and_then(|v| v.to_str().ok())
        .unwrap_or("application/octet-stream");
    let content_type = super::ContentType::from(content_type);

    if !status.is_client_error() && !status.is_server_error() {
        let content = resp.text().await?;
        match content_type {
            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::LdapPingResult`"))),
            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::LdapPingResult`")))),
        }
    } else {
        let content = resp.text().await?;
        let entity: Option<PingLdapError> = serde_json::from_str(&content).ok();
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
    }
}

/// This endpoint searches the available ldap groups based on related configuration parameters. support to search by groupname or groupdn. 
pub async fn search_ldap_group(configuration: &configuration::Configuration, params: SearchLdapGroupParams) -> Result<Vec<models::UserGroup>, Error<SearchLdapGroupError>> {

    let uri_str = format!("{}/ldap/groups/search", configuration.base_path);
    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);

    if let Some(ref param_value) = params.groupname {
        req_builder = req_builder.query(&[("groupname", &param_value.to_string())]);
    }
    if let Some(ref param_value) = params.groupdn {
        req_builder = req_builder.query(&[("groupdn", &param_value.to_string())]);
    }
    if let Some(ref user_agent) = configuration.user_agent {
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
    }
    if let Some(param_value) = params.x_request_id {
        req_builder = req_builder.header("X-Request-Id", param_value.to_string());
    }
    if let Some(ref auth_conf) = configuration.basic_auth {
        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
    };

    let req = req_builder.build()?;
    let resp = configuration.client.execute(req).await?;

    let status = resp.status();
    let content_type = resp
        .headers()
        .get("content-type")
        .and_then(|v| v.to_str().ok())
        .unwrap_or("application/octet-stream");
    let content_type = super::ContentType::from(content_type);

    if !status.is_client_error() && !status.is_server_error() {
        let content = resp.text().await?;
        match content_type {
            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::UserGroup&gt;`"))),
            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::UserGroup&gt;`")))),
        }
    } else {
        let content = resp.text().await?;
        let entity: Option<SearchLdapGroupError> = serde_json::from_str(&content).ok();
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
    }
}

/// This endpoint searches the available ldap users based on related configuration parameters. Support searched by input ldap configuration, load configuration from the system and specific filter. 
pub async fn search_ldap_user(configuration: &configuration::Configuration, params: SearchLdapUserParams) -> Result<Vec<models::LdapUser>, Error<SearchLdapUserError>> {

    let uri_str = format!("{}/ldap/users/search", configuration.base_path);
    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);

    if let Some(ref param_value) = params.username {
        req_builder = req_builder.query(&[("username", &param_value.to_string())]);
    }
    if let Some(ref user_agent) = configuration.user_agent {
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
    }
    if let Some(param_value) = params.x_request_id {
        req_builder = req_builder.header("X-Request-Id", param_value.to_string());
    }
    if let Some(ref auth_conf) = configuration.basic_auth {
        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
    };

    let req = req_builder.build()?;
    let resp = configuration.client.execute(req).await?;

    let status = resp.status();
    let content_type = resp
        .headers()
        .get("content-type")
        .and_then(|v| v.to_str().ok())
        .unwrap_or("application/octet-stream");
    let content_type = super::ContentType::from(content_type);

    if !status.is_client_error() && !status.is_server_error() {
        let content = resp.text().await?;
        match content_type {
            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec&lt;models::LdapUser&gt;`"))),
            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec&lt;models::LdapUser&gt;`")))),
        }
    } else {
        let content = resp.text().await?;
        let entity: Option<SearchLdapUserError> = serde_json::from_str(&content).ok();
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
    }
}