-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Regenerate client from commit e2cc2df0 of spec repo
- Loading branch information
ci.datadog-api-spec
committed
Dec 19, 2024
1 parent
9407a13
commit 21acc9a
Showing
16 changed files
with
849 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// Get AWS Scan Options returns "OK" response | ||
use datadog_api_client::datadog; | ||
use datadog_api_client::datadogV2::api_agentless_scanning::AgentlessScanningAPI; | ||
|
||
#[tokio::main] | ||
async fn main() { | ||
let configuration = datadog::Configuration::new(); | ||
let api = AgentlessScanningAPI::with_config(configuration); | ||
let resp = api.list_aws_scan_options().await; | ||
if let Ok(value) = resp { | ||
println!("{:#?}", value); | ||
} else { | ||
println!("{:#?}", resp.unwrap_err()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. | ||
// This product includes software developed at Datadog (https://www.datadoghq.com/). | ||
// Copyright 2019-Present Datadog, Inc. | ||
use crate::datadog; | ||
use reqwest::header::{HeaderMap, HeaderValue}; | ||
use serde::{Deserialize, Serialize}; | ||
|
||
/// ListAwsScanOptionsError is a struct for typed errors of method [`AgentlessScanningAPI::list_aws_scan_options`] | ||
#[derive(Debug, Clone, Serialize, Deserialize)] | ||
#[serde(untagged)] | ||
pub enum ListAwsScanOptionsError { | ||
APIErrorResponse(crate::datadogV2::model::APIErrorResponse), | ||
UnknownValue(serde_json::Value), | ||
} | ||
|
||
/// Datadog Agentless Scanning provides visibility into risks and vulnerabilities | ||
/// within your hosts, running containers, and serverless functions—all without | ||
/// requiring teams to install Agents on every host or where Agents cannot be installed. | ||
/// Go to <https://www.datadoghq.com/blog/agentless-scanning/> to learn more | ||
#[derive(Debug, Clone)] | ||
pub struct AgentlessScanningAPI { | ||
config: datadog::Configuration, | ||
client: reqwest_middleware::ClientWithMiddleware, | ||
} | ||
|
||
impl Default for AgentlessScanningAPI { | ||
fn default() -> Self { | ||
Self::with_config(datadog::Configuration::default()) | ||
} | ||
} | ||
|
||
impl AgentlessScanningAPI { | ||
pub fn new() -> Self { | ||
Self::default() | ||
} | ||
pub fn with_config(config: datadog::Configuration) -> Self { | ||
let mut reqwest_client_builder = reqwest::Client::builder(); | ||
|
||
if let Some(proxy_url) = &config.proxy_url { | ||
let proxy = reqwest::Proxy::all(proxy_url).expect("Failed to parse proxy URL"); | ||
reqwest_client_builder = reqwest_client_builder.proxy(proxy); | ||
} | ||
|
||
let mut middleware_client_builder = | ||
reqwest_middleware::ClientBuilder::new(reqwest_client_builder.build().unwrap()); | ||
|
||
if config.enable_retry { | ||
struct RetryableStatus; | ||
impl reqwest_retry::RetryableStrategy for RetryableStatus { | ||
fn handle( | ||
&self, | ||
res: &Result<reqwest::Response, reqwest_middleware::Error>, | ||
) -> Option<reqwest_retry::Retryable> { | ||
match res { | ||
Ok(success) => reqwest_retry::default_on_request_success(success), | ||
Err(_) => None, | ||
} | ||
} | ||
} | ||
let backoff_policy = reqwest_retry::policies::ExponentialBackoff::builder() | ||
.build_with_max_retries(config.max_retries); | ||
|
||
let retry_middleware = | ||
reqwest_retry::RetryTransientMiddleware::new_with_policy_and_strategy( | ||
backoff_policy, | ||
RetryableStatus, | ||
); | ||
|
||
middleware_client_builder = middleware_client_builder.with(retry_middleware); | ||
} | ||
|
||
let client = middleware_client_builder.build(); | ||
|
||
Self { config, client } | ||
} | ||
|
||
pub fn with_client_and_config( | ||
config: datadog::Configuration, | ||
client: reqwest_middleware::ClientWithMiddleware, | ||
) -> Self { | ||
Self { config, client } | ||
} | ||
|
||
/// Fetches the scan options configured for AWS accounts. | ||
pub async fn list_aws_scan_options( | ||
&self, | ||
) -> Result< | ||
crate::datadogV2::model::AwsScanOptionsResponse, | ||
datadog::Error<ListAwsScanOptionsError>, | ||
> { | ||
match self.list_aws_scan_options_with_http_info().await { | ||
Ok(response_content) => { | ||
if let Some(e) = response_content.entity { | ||
Ok(e) | ||
} else { | ||
Err(datadog::Error::Serde(serde::de::Error::custom( | ||
"response content was None", | ||
))) | ||
} | ||
} | ||
Err(err) => Err(err), | ||
} | ||
} | ||
|
||
/// Fetches the scan options configured for AWS accounts. | ||
pub async fn list_aws_scan_options_with_http_info( | ||
&self, | ||
) -> Result< | ||
datadog::ResponseContent<crate::datadogV2::model::AwsScanOptionsResponse>, | ||
datadog::Error<ListAwsScanOptionsError>, | ||
> { | ||
let local_configuration = &self.config; | ||
let operation_id = "v2.list_aws_scan_options"; | ||
|
||
let local_client = &self.client; | ||
|
||
let local_uri_str = format!( | ||
"{}/api/v2/agentless_scanning/accounts/aws", | ||
local_configuration.get_operation_host(operation_id) | ||
); | ||
let mut local_req_builder = | ||
local_client.request(reqwest::Method::GET, local_uri_str.as_str()); | ||
|
||
// build headers | ||
let mut headers = HeaderMap::new(); | ||
headers.insert("Accept", HeaderValue::from_static("application/json")); | ||
|
||
// build user agent | ||
match HeaderValue::from_str(local_configuration.user_agent.as_str()) { | ||
Ok(user_agent) => headers.insert(reqwest::header::USER_AGENT, user_agent), | ||
Err(e) => { | ||
log::warn!("Failed to parse user agent header: {e}, falling back to default"); | ||
headers.insert( | ||
reqwest::header::USER_AGENT, | ||
HeaderValue::from_static(datadog::DEFAULT_USER_AGENT.as_str()), | ||
) | ||
} | ||
}; | ||
|
||
// build auth | ||
if let Some(local_key) = local_configuration.auth_keys.get("apiKeyAuth") { | ||
headers.insert( | ||
"DD-API-KEY", | ||
HeaderValue::from_str(local_key.key.as_str()) | ||
.expect("failed to parse DD-API-KEY header"), | ||
); | ||
}; | ||
if let Some(local_key) = local_configuration.auth_keys.get("appKeyAuth") { | ||
headers.insert( | ||
"DD-APPLICATION-KEY", | ||
HeaderValue::from_str(local_key.key.as_str()) | ||
.expect("failed to parse DD-APPLICATION-KEY header"), | ||
); | ||
}; | ||
|
||
local_req_builder = local_req_builder.headers(headers); | ||
let local_req = local_req_builder.build()?; | ||
log::debug!("request content: {:?}", local_req.body()); | ||
let local_resp = local_client.execute(local_req).await?; | ||
|
||
let local_status = local_resp.status(); | ||
let local_content = local_resp.text().await?; | ||
log::debug!("response content: {}", local_content); | ||
|
||
if !local_status.is_client_error() && !local_status.is_server_error() { | ||
match serde_json::from_str::<crate::datadogV2::model::AwsScanOptionsResponse>( | ||
&local_content, | ||
) { | ||
Ok(e) => { | ||
return Ok(datadog::ResponseContent { | ||
status: local_status, | ||
content: local_content, | ||
entity: Some(e), | ||
}) | ||
} | ||
Err(e) => return Err(datadog::Error::Serde(e)), | ||
}; | ||
} else { | ||
let local_entity: Option<ListAwsScanOptionsError> = | ||
serde_json::from_str(&local_content).ok(); | ||
let local_error = datadog::ResponseContent { | ||
status: local_status, | ||
content: local_content, | ||
entity: local_entity, | ||
}; | ||
Err(datadog::Error::ResponseError(local_error)) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.