Skip to content

Commit

Permalink
Show how many targets matched when setting filter
Browse files Browse the repository at this point in the history
  • Loading branch information
kpcyrd committed Nov 10, 2018
1 parent e40f19e commit 0dca8a3
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions src/cmd/target_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use db;
use shell::Readline;
use sn0int_common::metadata::Source;
use structopt::StructOpt;
use term;
use models::*;


Expand All @@ -22,24 +23,41 @@ pub fn run(rl: &mut Readline, args: &[String]) -> Result<()> {
.ok_or_else(|| format_err!("No module selected"))
.map(|x| x.source().clone())?;

let source = source
.ok_or_else(|| format_err!("Module doesn't have sources"))?;

if args.filter.is_empty() {
match source {
Some(Source::Domains) => select::<Domain>(rl)?,
Some(Source::Subdomains) => select::<Subdomain>(rl)?,
Some(Source::IpAddrs) => select::<IpAddr>(rl)?,
Some(Source::Urls) => select::<Url>(rl)?,
Some(Source::Emails) => select::<Email>(rl)?,
None => bail!("Module doesn't have sources"),
Source::Domains => select::<Domain>(rl)?,
Source::Subdomains => select::<Subdomain>(rl)?,
Source::IpAddrs => select::<IpAddr>(rl)?,
Source::Urls => select::<Url>(rl)?,
Source::Emails => select::<Email>(rl)?,
}
} else {
debug!("Setting filter to {:?}", args.filter);
let filter = db::Filter::parse_optional(&args.filter)?;
rl.set_target(Some(filter));
term::info(&format!("{} entities selected", count_selected(rl, &source)?));
}

Ok(())
}

fn count_selected(rl: &mut Readline, source: &Source) -> Result<usize> {
let db = rl.db();
let filter = rl.scoped_targets();

let num = match source {
Source::Domains => db.filter::<Domain>(&filter)?.len(),
Source::Subdomains => db.filter::<Subdomain>(&filter)?.len(),
Source::IpAddrs => db.filter::<IpAddr>(&filter)?.len(),
Source::Urls => db.filter::<Url>(&filter)?.len(),
Source::Emails => db.filter::<Email>(&filter)?.len(),
};
Ok(num)
}

fn select<T: Model + Detailed>(rl: &mut Readline) -> Result<()> {
let filter = rl.scoped_targets();

Expand Down

0 comments on commit 0dca8a3

Please sign in to comment.