1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
use super::RepoHandler;
use crate::models::repos::{AutomatedSecurityFixes, PrivateVulnerabilityReporting};
use http::StatusCode;
/// Handler for GitHub's repository vulnerability alerts (Dependabot alerts) API.
///
/// Created with [`RepoHandler::vulnerability_alerts`].
pub struct RepoVulnerabilityAlertsHandler<'octo, 'r> {
handler: &'r RepoHandler<'octo>,
}
impl<'octo, 'r> RepoVulnerabilityAlertsHandler<'octo, 'r> {
pub(crate) fn new(handler: &'r RepoHandler<'octo>) -> Self {
Self { handler }
}
/// Check if vulnerability alerts are enabled for a repository.
///
/// Returns `Ok(true)` if enabled (HTTP 204 No Content), `Ok(false)` if disabled (HTTP 404 Not Found).
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-vulnerability-alerts-are-enabled-for-a-repository)
pub async fn check(&self) -> crate::Result<bool> {
let route = format!("/{}/vulnerability-alerts", self.handler.repo);
let response = self.handler.crab._get(route).await?;
match response.status() {
StatusCode::NO_CONTENT => Ok(true),
StatusCode::NOT_FOUND => Ok(false),
_ => Err(crate::map_github_error(response).await.unwrap_err()),
}
}
/// Enable vulnerability alerts for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#enable-vulnerability-alerts)
pub async fn enable(&self) -> crate::Result<()> {
let route = format!("/{}/vulnerability-alerts", self.handler.repo);
let response = self.handler.crab._put(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
/// Disable vulnerability alerts for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#disable-vulnerability-alerts)
pub async fn disable(&self) -> crate::Result<()> {
let route = format!("/{}/vulnerability-alerts", self.handler.repo);
let response = self.handler.crab._delete(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
}
/// Handler for GitHub's repository automated security fixes (Dependabot security updates) API.
///
/// Created with [`RepoHandler::automated_security_fixes`].
pub struct RepoAutomatedSecurityFixesHandler<'octo, 'r> {
handler: &'r RepoHandler<'octo>,
}
impl<'octo, 'r> RepoAutomatedSecurityFixesHandler<'octo, 'r> {
pub(crate) fn new(handler: &'r RepoHandler<'octo>) -> Self {
Self { handler }
}
/// Check if automated security fixes are enabled for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-automated-security-fixes-are-enabled-for-a-repository)
pub async fn get(&self) -> crate::Result<AutomatedSecurityFixes> {
let route = format!("/{}/automated-security-fixes", self.handler.repo);
self.handler.crab.get(route, None::<&()>).await
}
/// Enable automated security fixes for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#enable-automated-security-fixes)
pub async fn enable(&self) -> crate::Result<()> {
let route = format!("/{}/automated-security-fixes", self.handler.repo);
let response = self.handler.crab._put(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
/// Disable automated security fixes for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#disable-automated-security-fixes)
pub async fn disable(&self) -> crate::Result<()> {
let route = format!("/{}/automated-security-fixes", self.handler.repo);
let response = self.handler.crab._delete(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
}
/// Handler for GitHub's repository private vulnerability reporting API.
///
/// Created with [`RepoHandler::private_vulnerability_reporting`].
pub struct RepoPrivateVulnerabilityReportingHandler<'octo, 'r> {
handler: &'r RepoHandler<'octo>,
}
impl<'octo, 'r> RepoPrivateVulnerabilityReportingHandler<'octo, 'r> {
pub(crate) fn new(handler: &'r RepoHandler<'octo>) -> Self {
Self { handler }
}
/// Check if private vulnerability reporting is enabled for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#check-if-private-vulnerability-reporting-is-enabled-for-a-repository)
pub async fn get(&self) -> crate::Result<PrivateVulnerabilityReporting> {
let route = format!("/{}/private-vulnerability-reporting", self.handler.repo);
self.handler.crab.get(route, None::<&()>).await
}
/// Helper to check if private vulnerability reporting is enabled.
pub async fn is_enabled(&self) -> crate::Result<bool> {
self.get().await.map(|r| r.enabled)
}
/// Enable private vulnerability reporting for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#enable-private-vulnerability-reporting)
pub async fn enable(&self) -> crate::Result<()> {
let route = format!("/{}/private-vulnerability-reporting", self.handler.repo);
let response = self.handler.crab._put(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
/// Disable private vulnerability reporting for a repository.
///
/// See: [GitHub API Documentation](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#disable-private-vulnerability-reporting)
pub async fn disable(&self) -> crate::Result<()> {
let route = format!("/{}/private-vulnerability-reporting", self.handler.repo);
let response = self.handler.crab._delete(route, None::<&()>).await?;
if !response.status().is_success() {
return Err(crate::map_github_error(response).await.unwrap_err());
}
Ok(())
}
}