core_standalone/
core_standalone.rs1use keyhog_core::allowlist::Allowlist;
2use keyhog_core::{
3 DetectorSpec, PatternSpec, Severity, load_detectors_with_gate, redact, validate_detector,
4};
5use std::path::Path;
6
7fn main() {
8 let detector = DetectorSpec {
9 id: "demo-token".into(),
10 name: "Demo Token".into(),
11 service: "demo".into(),
12 severity: Severity::High,
13 patterns: vec![PatternSpec {
14 regex: "demo_[A-Z0-9]{8}".into(),
15 description: Some("Simple standalone example".into()),
16 group: None,
17 }],
18 companion: None,
19 verify: None,
20 keywords: vec!["demo_".into()],
21 };
22
23 let issues = validate_detector(&detector);
24 let allowlist = Allowlist::parse("path:**/*.md\n");
25 let maybe_detectors = load_detectors_with_gate(Path::new("detectors"), true).ok();
26
27 println!("detector={} issues={}", detector.id, issues.len());
28 println!("redacted={}", redact("demo_ABC12345"));
29 println!(
30 "ignores_docs={}",
31 allowlist.is_path_ignored("docs/README.md")
32 );
33 println!(
34 "workspace_detectors_loaded={}",
35 maybe_detectors.as_ref().map_or(0, Vec::len)
36 );
37}