Skip to main content

verifyos_cli/rules/
private_api.rs

1use crate::rules::core::{
2    AppStoreRule, ArtifactContext, RuleCategory, RuleError, RuleReport, RuleStatus, Severity,
3};
4
5pub struct PrivateApiRule;
6
7impl AppStoreRule for PrivateApiRule {
8    fn id(&self) -> &'static str {
9        "RULE_PRIVATE_API"
10    }
11
12    fn name(&self) -> &'static str {
13        "Private API Usage Detected"
14    }
15
16    fn category(&self) -> RuleCategory {
17        RuleCategory::ThirdParty
18    }
19
20    fn severity(&self) -> Severity {
21        Severity::Warning
22    }
23
24    fn recommendation(&self) -> &'static str {
25        "Remove private API usage or replace with public alternatives."
26    }
27
28    fn evaluate(&self, artifact: &ArtifactContext) -> Result<RuleReport, RuleError> {
29        let scan = match artifact.private_api_scan() {
30            Ok(scan) => scan,
31            Err(err) => {
32                return Ok(RuleReport {
33                    status: RuleStatus::Skip,
34                    message: Some(format!("Private API scan skipped: {err}")),
35                    evidence: None,
36                });
37            }
38        };
39
40        if scan.hits.is_empty() {
41            return Ok(RuleReport {
42                status: RuleStatus::Pass,
43                message: None,
44                evidence: None,
45            });
46        }
47
48        Ok(RuleReport {
49            status: RuleStatus::Fail,
50            message: Some("Private API signatures found".to_string()),
51            evidence: Some(scan.hits.join(", ")),
52        })
53    }
54}