verifyos_cli/rules/
core.rs1use miette::Diagnostic;
2use serde::{Deserialize, Serialize};
3
4pub const RULESET_VERSION: &str = "0.1.0";
5
6#[derive(Debug, thiserror::Error, Diagnostic)]
7pub enum RuleError {
8 #[error(transparent)]
9 #[diagnostic(transparent)]
10 Entitlements(#[from] crate::rules::entitlements::EntitlementsError),
11
12 #[error(transparent)]
13 #[diagnostic(transparent)]
14 Provisioning(#[from] crate::parsers::provisioning_profile::ProvisioningError),
15
16 #[error(transparent)]
17 #[diagnostic(transparent)]
18 MachO(#[from] crate::parsers::macho_parser::MachOError),
19}
20
21#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
22pub enum Severity {
23 Error,
24 Warning,
25 Info,
26}
27
28#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
29pub enum RuleStatus {
30 Pass,
31 Fail,
32 Error,
33 Skip,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct RuleReport {
38 pub status: RuleStatus,
39 pub message: Option<String>,
40 pub evidence: Option<String>,
41}
42
43#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
44pub enum RuleCategory {
45 Privacy,
46 Signing,
47 Bundling,
48 Entitlements,
49 Ats,
50 ThirdParty,
51 Permissions,
52 Metadata,
53 Other,
54}
55
56pub struct ArtifactContext<'a> {
58 pub app_bundle_path: &'a std::path::Path,
59 pub info_plist: Option<&'a crate::parsers::plist_reader::InfoPlist>,
60}
61
62pub trait AppStoreRule {
63 fn id(&self) -> &'static str;
64 fn name(&self) -> &'static str;
65 fn category(&self) -> RuleCategory;
66 fn severity(&self) -> Severity;
67 fn recommendation(&self) -> &'static str;
68 fn evaluate(&self, artifact: &ArtifactContext) -> Result<RuleReport, RuleError>;
69}