use super::checker_type::{Check, Checker};
use crate::checkers::checker_result::CheckResult;
use gibberish_or_not::Sensitivity;
use lemmeknow::{Data, Identifier};
pub struct LemmeKnow;
impl Check for Checker<LemmeKnow> {
fn new() -> Self {
Checker {
name: "LemmeKnow Checker",
description: "Uses LemmeKnow to check for regex matches",
link: "https://swanandx.github.io/lemmeknow-frontend/",
tags: vec!["lemmeknow", "regex"],
expected_runtime: 0.01,
popularity: 1.0,
lemmeknow_config: Identifier::default().min_rarity(0.1),
sensitivity: Sensitivity::Medium, enhanced_detector: None,
_phantom: std::marker::PhantomData,
}
}
fn check(&self, text: &str) -> CheckResult {
let lemmeknow_result = self.lemmeknow_config.identify(text);
let mut is_identified = false;
let mut description = "".to_string();
if !lemmeknow_result.is_empty() {
is_identified = true;
description = format_data_result(&lemmeknow_result[0].data)
}
CheckResult {
is_identified,
text: text.to_owned(),
checker_name: self.name,
checker_description: self.description,
description,
link: self.link,
}
}
fn with_sensitivity(mut self, sensitivity: Sensitivity) -> Self {
self.sensitivity = sensitivity;
self
}
fn get_sensitivity(&self) -> Sensitivity {
self.sensitivity
}
}
fn format_data_result(input: &Data) -> String {
input.name.to_string()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::checkers::checker_type::{Check, Checker};
use gibberish_or_not::Sensitivity;
#[test]
fn test_url_exact_match() {
let checker = Checker::<LemmeKnow>::new().with_sensitivity(Sensitivity::Low);
assert!(checker.check("https://google.com").is_identified);
}
#[test]
fn test_url_with_extra_text_fails() {
let checker = Checker::<LemmeKnow>::new().with_sensitivity(Sensitivity::Low);
assert!(
!checker
.check("https://google.com and some text")
.is_identified
);
}
#[test]
fn test_ip_exact_match() {
let checker = Checker::<LemmeKnow>::new().with_sensitivity(Sensitivity::Low);
assert!(checker.check("192.168.1.1").is_identified);
}
#[test]
fn test_ip_with_extra_text_fails() {
let checker = Checker::<LemmeKnow>::new().with_sensitivity(Sensitivity::Low);
assert!(!checker.check("IP is 192.168.1.1").is_identified);
}
#[test]
fn test_s3_path() {
let checker = Checker::<LemmeKnow>::new().with_sensitivity(Sensitivity::Low);
assert!(checker.check("s3://bucket/path/key").is_identified);
}
#[test]
fn test_bitcoin_with_extra_text_fails() {
let checker = Checker::<LemmeKnow>::new().with_sensitivity(Sensitivity::Low);
assert!(
!checker
.check("BTC address: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2")
.is_identified
);
}
}