use crate::api::repos::secret_scanning_alerts::Params;
use crate::models::dependabot::{
DependabotAlert, DependabotDefaultRepositoryAccessLevel, DependabotRepositoryAccess,
SetDependabotDefaultRepositoryAccessLevel, UpdateDependabotRepositoryAccess,
};
use crate::models::RepositoryId;
use crate::params::Direction;
use crate::{Octocrab, Page, Result};
pub struct EnterpriseHandler<'octo> {
crab: &'octo Octocrab,
enterprise: String,
}
impl<'octo> EnterpriseHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, enterprise: String) -> Self {
Self { crab, enterprise }
}
pub fn secret_scanning(&self) -> EnterpriseSecretScanningAlertsHandler<'_> {
EnterpriseSecretScanningAlertsHandler::new(self)
}
pub fn secrets_scanning(&self) -> EnterpriseSecretScanningAlertsHandler<'_> {
self.secret_scanning()
}
pub fn dependabot(&self) -> EnterpriseDependabotHandler<'octo> {
EnterpriseDependabotHandler::new(self.crab, self.enterprise.clone())
}
}
pub struct EnterpriseSecretScanningAlertsHandler<'octo> {
handler: &'octo EnterpriseHandler<'octo>,
params: Params,
}
impl<'octo> EnterpriseSecretScanningAlertsHandler<'octo> {
pub(crate) fn new(enterprise: &'octo EnterpriseHandler<'octo>) -> Self {
Self {
handler: enterprise,
params: Params::default(),
}
}
pub async fn get_alerts(
&self,
) -> crate::Result<crate::Page<crate::models::repos::secret_scanning_alert::SecretScanningAlert>>
{
let route = format!(
"/enterprises/{}/secret-scanning/alerts",
self.handler.enterprise
);
self.handler.crab.get(route, Some(&self.params)).await
}
pub fn per_page(mut self, per_page: impl Into<u8>) -> Self {
self.params.per_page = Some(per_page.into());
self
}
pub fn page(mut self, page: impl Into<u32>) -> Self {
self.params.page = Some(page.into());
self
}
pub fn state(mut self, state: impl Into<String>) -> Self {
self.params.state = Some(state.into());
self
}
pub fn resolution(mut self, resolution: impl Into<Vec<String>>) -> Self {
self.params.resolution = Some(resolution.into());
self
}
pub fn validity(mut self, validity: impl Into<Vec<String>>) -> Self {
self.params.validity = Some(validity.into());
self
}
pub fn secret_type(mut self, secret_type: impl Into<String>) -> Self {
self.params.secret_type = Some(secret_type.into());
self
}
pub fn is_multi_repo(mut self, is_multi_repo: impl Into<bool>) -> Self {
self.params.is_multi_repo = Some(is_multi_repo.into());
self
}
pub fn is_publicly_leaked(mut self, is_publicly_leaked: impl Into<bool>) -> Self {
self.params.is_publicly_leaked = Some(is_publicly_leaked.into());
self
}
pub fn hide_secret(mut self, hide_secret: impl Into<bool>) -> Self {
self.params.hide_secret = Some(hide_secret.into());
self
}
pub fn is_bypassed(mut self, is_bypassed: impl Into<bool>) -> Self {
self.params.is_bypassed = Some(is_bypassed.into());
self
}
pub fn after(mut self, after: impl Into<String>) -> Self {
self.params.after = Some(after.into());
self
}
pub fn before(mut self, before: impl Into<String>) -> Self {
self.params.before = Some(before.into());
self
}
pub fn sort(mut self, sort: impl Into<String>) -> Self {
self.params.sort = Some(sort.into());
self
}
pub fn direction(mut self, direction: impl Into<String>) -> Self {
self.params.direction = Some(direction.into());
self
}
}
pub struct EnterpriseDependabotHandler<'octo> {
crab: &'octo Octocrab,
enterprise: String,
}
impl<'octo> EnterpriseDependabotHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, enterprise: impl Into<String>) -> Self {
Self {
crab,
enterprise: enterprise.into(),
}
}
pub fn alerts(&self) -> EnterpriseDependabotAlertsHandler<'octo> {
EnterpriseDependabotAlertsHandler::new(self.crab, self.enterprise.clone())
}
pub fn repository_access(&self) -> EnterpriseDependabotRepositoryAccessHandler<'octo> {
EnterpriseDependabotRepositoryAccessHandler::new(self.crab, self.enterprise.clone())
}
}
pub struct EnterpriseDependabotAlertsHandler<'octo> {
crab: &'octo Octocrab,
enterprise: String,
}
impl<'octo> EnterpriseDependabotAlertsHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, enterprise: impl Into<String>) -> Self {
Self {
crab,
enterprise: enterprise.into(),
}
}
pub fn list(&self) -> ListEnterpriseDependabotAlertsBuilder<'octo, '_> {
ListEnterpriseDependabotAlertsBuilder::new(self)
}
}
#[derive(serde::Serialize)]
pub struct ListEnterpriseDependabotAlertsBuilder<'octo, 'r> {
#[serde(skip)]
handler: &'r EnterpriseDependabotAlertsHandler<'octo>,
#[serde(skip_serializing_if = "Option::is_none")]
state: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
severity: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
ecosystem: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
package: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
scope: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
direction: Option<Direction>,
#[serde(skip_serializing_if = "Option::is_none")]
page: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
per_page: Option<u8>,
#[serde(skip_serializing_if = "Option::is_none")]
before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
first: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
last: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
epss_percentage: Option<String>,
}
impl<'octo, 'r> ListEnterpriseDependabotAlertsBuilder<'octo, 'r> {
pub(crate) fn new(handler: &'r EnterpriseDependabotAlertsHandler<'octo>) -> Self {
Self {
handler,
state: None,
severity: None,
ecosystem: None,
package: None,
scope: None,
sort: None,
direction: None,
page: None,
per_page: None,
before: None,
after: None,
first: None,
last: None,
epss_percentage: None,
}
}
pub fn state(mut self, state: impl Into<String>) -> Self {
self.state = Some(state.into());
self
}
pub fn severity(mut self, severity: impl Into<String>) -> Self {
self.severity = Some(severity.into());
self
}
pub fn ecosystem(mut self, ecosystem: impl Into<String>) -> Self {
self.ecosystem = Some(ecosystem.into());
self
}
pub fn package(mut self, package: impl Into<String>) -> Self {
self.package = Some(package.into());
self
}
pub fn scope(mut self, scope: impl Into<String>) -> Self {
self.scope = Some(scope.into());
self
}
pub fn sort(mut self, sort: impl Into<String>) -> Self {
self.sort = Some(sort.into());
self
}
pub fn direction(mut self, direction: impl Into<Direction>) -> Self {
self.direction = Some(direction.into());
self
}
pub fn page(mut self, page: impl Into<u32>) -> Self {
self.page = Some(page.into());
self
}
pub fn per_page(mut self, per_page: impl Into<u8>) -> Self {
self.per_page = Some(per_page.into());
self
}
pub fn before(mut self, before: impl Into<String>) -> Self {
self.before = Some(before.into());
self
}
pub fn after(mut self, after: impl Into<String>) -> Self {
self.after = Some(after.into());
self
}
pub fn first(mut self, first: impl Into<u32>) -> Self {
self.first = Some(first.into());
self
}
pub fn last(mut self, last: impl Into<u32>) -> Self {
self.last = Some(last.into());
self
}
pub fn epss_percentage(mut self, epss_percentage: impl Into<String>) -> Self {
self.epss_percentage = Some(epss_percentage.into());
self
}
pub async fn send(self) -> Result<Page<DependabotAlert>> {
let route = format!("/enterprises/{}/dependabot/alerts", self.handler.enterprise);
self.handler.crab.get(route, Some(&self)).await
}
}
pub struct EnterpriseDependabotRepositoryAccessHandler<'octo> {
crab: &'octo Octocrab,
enterprise: String,
}
impl<'octo> EnterpriseDependabotRepositoryAccessHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, enterprise: impl Into<String>) -> Self {
Self {
crab,
enterprise: enterprise.into(),
}
}
pub fn list(&self) -> ListEnterpriseDependabotRepositoryAccessBuilder<'octo, '_> {
ListEnterpriseDependabotRepositoryAccessBuilder::new(self)
}
pub fn update(&self) -> UpdateEnterpriseDependabotRepositoryAccessBuilder<'octo, '_> {
UpdateEnterpriseDependabotRepositoryAccessBuilder::new(self)
}
pub async fn set_default_level(
&self,
default_level: DependabotDefaultRepositoryAccessLevel,
) -> Result<()> {
let route = format!(
"/enterprises/{}/dependabot/repository-access/default-level",
self.enterprise
);
let body = SetDependabotDefaultRepositoryAccessLevel { default_level };
let resp = self.crab._put(route, Some(&body)).await?;
crate::map_github_error(resp).await?;
Ok(())
}
}
#[derive(serde::Serialize)]
pub struct ListEnterpriseDependabotRepositoryAccessBuilder<'octo, 'r> {
#[serde(skip)]
handler: &'r EnterpriseDependabotRepositoryAccessHandler<'octo>,
#[serde(skip_serializing_if = "Option::is_none")]
page: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
per_page: Option<u8>,
}
impl<'octo, 'r> ListEnterpriseDependabotRepositoryAccessBuilder<'octo, 'r> {
pub(crate) fn new(handler: &'r EnterpriseDependabotRepositoryAccessHandler<'octo>) -> Self {
Self {
handler,
page: None,
per_page: None,
}
}
pub fn page(mut self, page: impl Into<u32>) -> Self {
self.page = Some(page.into());
self
}
pub fn per_page(mut self, per_page: impl Into<u8>) -> Self {
self.per_page = Some(per_page.into());
self
}
pub async fn send(self) -> Result<DependabotRepositoryAccess> {
let route = format!(
"/enterprises/{}/dependabot/repository-access",
self.handler.enterprise
);
self.handler.crab.get(route, Some(&self)).await
}
}
pub struct UpdateEnterpriseDependabotRepositoryAccessBuilder<'octo, 'r> {
handler: &'r EnterpriseDependabotRepositoryAccessHandler<'octo>,
repository_ids_to_add: Vec<RepositoryId>,
repository_ids_to_remove: Vec<RepositoryId>,
}
impl<'octo, 'r> UpdateEnterpriseDependabotRepositoryAccessBuilder<'octo, 'r> {
pub(crate) fn new(handler: &'r EnterpriseDependabotRepositoryAccessHandler<'octo>) -> Self {
Self {
handler,
repository_ids_to_add: Vec::new(),
repository_ids_to_remove: Vec::new(),
}
}
pub fn add_repository(mut self, id: impl Into<RepositoryId>) -> Self {
self.repository_ids_to_add.push(id.into());
self
}
pub fn add_repositories(mut self, ids: impl IntoIterator<Item = RepositoryId>) -> Self {
self.repository_ids_to_add.extend(ids);
self
}
pub fn remove_repository(mut self, id: impl Into<RepositoryId>) -> Self {
self.repository_ids_to_remove.push(id.into());
self
}
pub fn remove_repositories(mut self, ids: impl IntoIterator<Item = RepositoryId>) -> Self {
self.repository_ids_to_remove.extend(ids);
self
}
pub async fn send(self) -> Result<()> {
let route = format!(
"/enterprises/{}/dependabot/repository-access",
self.handler.enterprise
);
let body = UpdateDependabotRepositoryAccess {
repository_ids_to_add: if self.repository_ids_to_add.is_empty() {
None
} else {
Some(&self.repository_ids_to_add)
},
repository_ids_to_remove: if self.repository_ids_to_remove.is_empty() {
None
} else {
Some(&self.repository_ids_to_remove)
},
};
let resp = self.handler.crab._patch(route, Some(&body)).await?;
crate::map_github_error(resp).await?;
Ok(())
}
}