Skip to content

Commit

Permalink
Merge pull request #139 from kpcyrd/cryptoaddrs
Browse files Browse the repository at this point in the history
Support cryptocurrency addresses
  • Loading branch information
kpcyrd committed Nov 21, 2019
2 parents d8dc71a + d1e76f7 commit 36cd52f
Show file tree
Hide file tree
Showing 21 changed files with 626 additions and 4 deletions.
1 change: 1 addition & 0 deletions migrations/2019-11-19-154056_cryptoaddr/down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DROP TABLE cryptoaddrs;
13 changes: 13 additions & 0 deletions migrations/2019-11-19-154056_cryptoaddr/up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
CREATE TABLE cryptoaddrs (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
value VARCHAR NOT NULL,
currency VARCHAR,
denominator INTEGER,
balance INTEGER,
received INTEGER,
first_seen DATETIME,
last_withdrawal DATETIME,
unscoped BOOLEAN DEFAULT 0 NOT NULL,
description VARCHAR,
CONSTRAINT netblock_unique UNIQUE (value)
);
3 changes: 3 additions & 0 deletions sn0int-registry/sn0int-common/src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ pub enum Source {
Images,
Ports,
Netblocks,
CryptoAddrs(Option<String>),
KeyRing(String),
}

Expand All @@ -61,6 +62,7 @@ impl Source {
Source::Images => "images",
Source::Ports => "ports",
Source::Netblocks => "netblocks",
Source::CryptoAddrs(_) => "cryptoaddrs",
Source::KeyRing(_) => "keyring",
}
}
Expand Down Expand Up @@ -91,6 +93,7 @@ impl FromStr for Source {
("images", None) => Ok(Source::Images),
("ports", None) => Ok(Source::Ports),
("netblocks", None) => Ok(Source::Netblocks),
("cryptoaddrs", param) => Ok(Source::CryptoAddrs(param.map(String::from))),
("keyring", Some(param)) => Ok(Source::KeyRing(param.to_string())),
(x, Some(param)) => bail!("Unknown Source: {:?} ({:?})", x, param),
(x, None) => bail!("Unknown Source: {:?}", x),
Expand Down
37 changes: 34 additions & 3 deletions src/cmd/add_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ pub enum Target {
/// Insert subdomain into the database
#[structopt(name="subdomain")]
Subdomain(AddSubdomain),
/// Insert ip network into the database
#[structopt(name="netblock")]
Netblock(AddNetblock),
/// Insert ip address into the database
#[structopt(name="ipaddr")]
IpAddr(AddIpAddr),
Expand Down Expand Up @@ -63,6 +60,12 @@ pub enum Target {
/// Insert images into the database
#[structopt(name="image")]
Image(AddImage),
/// Insert ip network into the database
#[structopt(name="netblock")]
Netblock(AddNetblock),
/// Insert a crypto currency address into the database
#[structopt(name="cryptoaddr")]
CryptoAddr(AddCryptoAddr),
}

impl Cmd for Args {
Expand All @@ -80,6 +83,7 @@ impl Cmd for Args {
Target::Breach(args) => args.insert(rl, self.dry_run),
Target::Image(args) => args.insert(rl, self.dry_run),
Target::Netblock(args) => args.insert(rl, self.dry_run),
Target::CryptoAddr(args) => args.insert(rl, self.dry_run),
}
}
}
Expand Down Expand Up @@ -550,3 +554,30 @@ impl IntoInsert for AddNetblock {
}))
}
}

#[derive(Debug, StructOpt)]
pub struct AddCryptoAddr {
address: Option<String>,
}

impl IntoInsert for AddCryptoAddr {
fn into_insert(self, _rl: &mut Shell) -> Result<Insert> {
let address = if let Some(address) = self.address {
address
} else {
utils::question("Address")?
};

Ok(Insert::CryptoAddr(NewCryptoAddr {
value: address,
currency: None,
denominator: None,
balance: None,
received: None,
first_seen: None,
last_withdrawal: None,
unscoped: false,
description: None,
}))
}
}
1 change: 1 addition & 0 deletions src/cmd/delete_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ impl Cmd for Args {
Target::Images(filter) => delete::<Image>(rl, &filter),
Target::Ports(filter) => delete::<Port>(rl, &filter),
Target::Netblocks(filter) => delete::<Netblock>(rl, &filter),
Target::CryptoAddrs(filter) => delete::<CryptoAddr>(rl, &filter),
}?;
term::info(&format!("Deleted {} rows", rows));
Ok(())
Expand Down
1 change: 1 addition & 0 deletions src/cmd/noscope_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ impl Cmd for Args {
Target::Images(filter) => noscope::<Image>(rl, &filter),
Target::Ports(filter) => noscope::<Port>(rl, &filter),
Target::Netblocks(filter) => noscope::<Netblock>(rl, &filter),
Target::CryptoAddrs(filter) => noscope::<CryptoAddr>(rl, &filter),
}?;
term::info(&format!("Updated {} rows", rows));
Ok(())
Expand Down
1 change: 1 addition & 0 deletions src/cmd/run_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ pub fn execute(rl: &mut Shell, params: Params, options: HashMap<String, String>)
Some(Source::Images) => prepare_args::<Image>(rl, &filter, None),
Some(Source::Ports) => prepare_args::<Port>(rl, &filter, None),
Some(Source::Netblocks) => prepare_args::<Netblock>(rl, &filter, None),
Some(Source::CryptoAddrs(currency)) => prepare_args::<CryptoAddr>(rl, &filter, currency.as_ref()),
Some(Source::KeyRing(namespace)) => {
let keyring = rl.keyring();
if keyring.is_access_granted(&module, &namespace) {
Expand Down
1 change: 1 addition & 0 deletions src/cmd/scope_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ impl Cmd for Args {
Target::Images(filter) => scope::<Image>(rl, &filter),
Target::Ports(filter) => scope::<Port>(rl, &filter),
Target::Netblocks(filter) => scope::<Netblock>(rl, &filter),
Target::CryptoAddrs(filter) => scope::<CryptoAddr>(rl, &filter),
}?;
term::info(&format!("Updated {} rows", rows));
Ok(())
Expand Down
1 change: 1 addition & 0 deletions src/cmd/select_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ impl Cmd for Args {
Target::Images(filter) => printer.select::<Image>(&filter),
Target::Ports(filter) => printer.select::<Port>(&filter),
Target::Netblocks(filter) => printer.select::<Netblock>(&filter),
Target::CryptoAddrs(filter) => printer.select::<CryptoAddr>(&filter),
}
}
}
2 changes: 2 additions & 0 deletions src/cmd/target_cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ pub fn run(rl: &mut Shell, args: &[String]) -> Result<()> {
Source::Images => select::<Image>(rl, None)?,
Source::Ports => select::<Port>(rl, None)?,
Source::Netblocks => select::<Netblock>(rl, None)?,
Source::CryptoAddrs(currency) => select::<CryptoAddr>(rl, currency.as_ref())?,
Source::KeyRing(namespace) => {
for key in rl.keyring().list_for(&namespace) {
println!("{}:{}", key.namespace, key.name);
Expand Down Expand Up @@ -77,6 +78,7 @@ fn count_selected(rl: &mut Shell, source: &Source) -> Result<usize> {
Source::Images => db.filter::<Image>(&filter)?.len(),
Source::Ports => db.filter::<Port>(&filter)?.len(),
Source::Netblocks => db.filter::<Netblock>(&filter)?.len(),
Source::CryptoAddrs(currency) => db.filter_with_param::<CryptoAddr>(&filter, currency.as_ref())?.len(),
Source::KeyRing(namespace) => rl.keyring().list_for(&namespace).len(),
};
Ok(num)
Expand Down
13 changes: 13 additions & 0 deletions src/db/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ pub enum Family {
Image,
Port,
Netblock,
Cryptoaddr,
}

impl Family {
Expand Down Expand Up @@ -80,6 +81,7 @@ pub enum Table {
Images,
Ports,
Netblocks,
Cryptoaddrs,
}

impl Table {
Expand Down Expand Up @@ -179,6 +181,7 @@ impl Database {
Insert::Image(object) => self.insert_struct(object, scoped),
Insert::Port(object) => self.insert_struct(object, scoped),
Insert::Netblock(object) => self.insert_struct(object, scoped),
Insert::CryptoAddr(object) => self.insert_struct(object, scoped),
}
}

Expand Down Expand Up @@ -268,6 +271,7 @@ impl Database {
Update::Image(update) => self.update_image(update),
Update::Port(update) => self.update_port(update),
Update::Netblock(update) => self.update_netblock(update),
Update::CryptoAddr(update) => self.update_cryptoaddr(update),
}
}

Expand Down Expand Up @@ -375,6 +379,14 @@ impl Database {
Ok(netblock_update.id)
}

pub fn update_cryptoaddr(&self, cryptoaddr_update: &CryptoAddrUpdate) -> Result<i32> {
use crate::schema::cryptoaddrs::columns::*;
diesel::update(cryptoaddrs::table.filter(id.eq(cryptoaddr_update.id)))
.set(cryptoaddr_update)
.execute(&self.db)?;
Ok(cryptoaddr_update.id)
}

fn get_opt_typed<T: Model + Scopable>(&self, value: &T::ID) -> Result<Option<i32>> {
match T::get_opt(self, &value)? {
Some(ref obj) if obj.scoped() => Ok(Some(obj.id())),
Expand All @@ -400,6 +412,7 @@ impl Database {
Family::Image => self.get_opt_typed::<Image>(&value),
Family::Port => self.get_opt_typed::<Port>(&value),
Family::Netblock => self.get_opt_typed::<Netblock>(&value),
Family::Cryptoaddr => self.get_opt_typed::<CryptoAddr>(&value),
}
}

Expand Down
1 change: 1 addition & 0 deletions src/db/ttl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ impl Ttl {
Table::Images => Image::delete_id(db, self.key)?,
Table::Ports => Port::delete_id(db, self.key)?,
Table::Netblocks => Netblock::delete_id(db, self.key)?,
Table::Cryptoaddrs => CryptoAddr::delete_id(db, self.key)?,
};

diesel::delete(self)
Expand Down
1 change: 1 addition & 0 deletions src/engine/ctx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,7 @@ pub fn ctx<'a>(env: Environment, logger: Arc<Mutex<Box<dyn Reporter>>>) -> (hlua
runtime::img_load(&mut lua, state.clone());
runtime::img_nudity(&mut lua, state.clone());
runtime::info(&mut lua, state.clone());
runtime::intval(&mut lua, state.clone());
runtime::json_decode(&mut lua, state.clone());
runtime::json_decode_stream(&mut lua, state.clone());
runtime::json_encode(&mut lua, state.clone());
Expand Down
3 changes: 3 additions & 0 deletions src/filters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ pub enum Target {
/// On ipnets
#[structopt(name="netblocks")]
Netblocks(Filter),
/// On crypto currency addresses
#[structopt(name="cryptoaddrs")]
CryptoAddrs(Filter),
}

#[derive(Debug, StructOpt)]
Expand Down
Loading

0 comments on commit 36cd52f

Please sign in to comment.