Skip to main content

ephemeris_forge_github/api/model/
security.rs

1use facet::Facet;
2
3use super::repository::AnalysisWire;
4use crate::{Language, QuerySuite, Reviewer, RunnerType, SetupState, Status, ThreatModel};
5
6/// The security features GitHub reports on the repository endpoint.
7///
8/// A feature GitHub does not report is `None`.
9#[derive(Clone, Debug, Default, Eq, Facet, PartialEq)]
10#[facet(proxy = AnalysisWire)]
11pub struct Analysis {
12    /// GitHub Advanced Security.
13    #[facet(default)]
14    pub advanced_security: Option<Status>,
15    /// GitHub Code Security.
16    #[facet(default)]
17    pub code_security: Option<Status>,
18    /// Secret scanning.
19    #[facet(default)]
20    pub secret_scanning: Option<Status>,
21    /// Secret scanning push protection.
22    #[facet(default)]
23    pub secret_scanning_push_protection: Option<Status>,
24    /// AI detection of generic secrets.
25    #[facet(default)]
26    pub secret_scanning_ai_detection: Option<Status>,
27    /// Scanning for non-provider patterns.
28    #[facet(default)]
29    pub secret_scanning_non_provider_patterns: Option<Status>,
30    /// Delegated dismissal of secret scanning alerts.
31    #[facet(default)]
32    pub secret_scanning_delegated_alert_dismissal: Option<Status>,
33    /// Delegated bypass of push protection.
34    #[facet(default)]
35    pub secret_scanning_delegated_bypass: Option<Status>,
36    /// The reviewers for delegated bypass, in canonical order.
37    #[facet(default)]
38    pub secret_scanning_delegated_bypass_reviewers: Vec<Reviewer>,
39}
40
41/// Code scanning default setup as GitHub reports it.
42#[derive(Clone, Debug, Eq, Facet, PartialEq)]
43pub struct CodeScanning {
44    /// Whether default setup runs.
45    pub state: SetupState,
46    /// The languages analyzed.
47    #[facet(default)]
48    pub languages: Vec<Language>,
49    /// Where the analysis runs.
50    #[facet(default)]
51    pub runner_type: Option<RunnerType>,
52    /// The label of the runner when the runner type is labeled.
53    #[facet(default)]
54    pub runner_label: Option<String>,
55    /// The set of queries run.
56    #[facet(default)]
57    pub query_suite: Option<QuerySuite>,
58    /// The sources treated as untrusted.
59    #[facet(default)]
60    pub threat_model: Option<ThreatModel>,
61}
62
63/// The security settings that live behind their own endpoints.
64///
65/// A setting whose endpoint cannot be read is `None`.
66#[derive(Clone, Debug, Default, Eq, PartialEq)]
67pub struct Security {
68    /// Dependabot alerts.
69    pub vulnerability_alerts: Option<bool>,
70    /// Dependabot security updates.
71    pub automated_security_fixes: Option<bool>,
72    /// Private vulnerability reporting.
73    pub private_vulnerability_reporting: Option<bool>,
74    /// Code scanning default setup.
75    pub code_scanning_default_setup: Option<CodeScanning>,
76}
77
78/// The body of an endpoint that reports one switch.
79#[derive(Facet)]
80pub(crate) struct EnabledResponse {
81    pub(crate) enabled: bool,
82}