Skip to main content

ephemeris_forge_github/reconcile/
security.rs

1use ephemeris_forge::RepoRef;
2
3use super::Client;
4use crate::api::{Api, ForgeError};
5use crate::operation::security::Operation;
6use crate::{Live, Security};
7
8impl<A: Api> Client<A> {
9    pub(super) async fn read_security(
10        &self,
11        repository: &RepoRef,
12        config: &Security,
13        live: &mut Live,
14    ) -> Result<(), ForgeError> {
15        if config.vulnerability_alerts.is_some() {
16            live.security.vulnerability_alerts = self.api.vulnerability_alerts(repository).await?;
17        }
18        if config.automated_security_fixes.is_some() {
19            live.security.automated_security_fixes =
20                self.api.automated_security_fixes(repository).await?;
21        }
22        if config.private_vulnerability_reporting.is_some() {
23            live.security.private_vulnerability_reporting =
24                self.api.private_vulnerability_reporting(repository).await?;
25        }
26        if config.code_scanning_default_setup.is_some() {
27            live.security.code_scanning_default_setup =
28                self.api.code_scanning_default_setup(repository).await?;
29        }
30        Ok(())
31    }
32
33    pub(super) async fn apply_security(
34        &self,
35        repository: &RepoRef,
36        operation: &Operation,
37    ) -> Result<(), ForgeError> {
38        match operation {
39            Operation::PatchAnalysis(patch) => {
40                self.api.patch_security_analysis(repository, patch).await
41            }
42            Operation::SetVulnerabilityAlerts(enabled) => {
43                self.api
44                    .set_vulnerability_alerts(repository, *enabled)
45                    .await
46            }
47            Operation::SetAutomatedSecurityFixes(enabled) => {
48                self.api
49                    .set_automated_security_fixes(repository, *enabled)
50                    .await
51            }
52            Operation::SetPrivateVulnerabilityReporting(enabled) => {
53                self.api
54                    .set_private_vulnerability_reporting(repository, *enabled)
55                    .await
56            }
57            Operation::PatchCodeScanning(patch) => {
58                self.api
59                    .patch_code_scanning_default_setup(repository, patch)
60                    .await
61            }
62        }
63    }
64}