1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
use serde::Deserialize; use super::breaches::Breach; use super::core::HIBPError; use super::core::HIBP; use super::http::{fetch, percent_encode}; #[derive(Debug, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct BreachedAccount { pub name: String, } impl HIBP { pub fn breached_account(self, account: &str) -> Result<Vec<BreachedAccount>, HIBPError> { let encoded_account = percent_encode(account); let url = format!( "https://haveibeenpwned.com/api/v3/breachedaccount/{}", encoded_account ); let mut res = fetch(&url, &self.api_key, &self.user_agent)?; let breaches: Vec<BreachedAccount> = res.json()?; Ok(breaches) } pub fn breached_account_full(self, account: &str) -> Result<Vec<Breach>, HIBPError> { let encoded_account = percent_encode(account); let url = format!( "https://haveibeenpwned.com/api/v3/breachedaccount/{}?truncateResponse=false", encoded_account ); let mut res = fetch(&url, &self.api_key, &self.user_agent)?; let breaches: Vec<Breach> = res.json()?; Ok(breaches) } pub fn breached_account_by_domain( self, account: &str, domain: &str, ) -> Result<Vec<BreachedAccount>, HIBPError> { let encoded_account = percent_encode(account); let encoded_domain = percent_encode(domain); let url = format!( "https://haveibeenpwned.com/api/v3/breachedaccount/{}?domain={}", encoded_account, encoded_domain ); let mut res = fetch(&url, &self.api_key, &self.user_agent)?; let breaches: Vec<BreachedAccount> = res.json()?; Ok(breaches) } pub fn breached_account_by_domain_full( self, account: &str, domain: &str, ) -> Result<Vec<Breach>, HIBPError> { let encoded_account = percent_encode(account); let encoded_domain = percent_encode(domain); let url = format!( "https://haveibeenpwned.com/api/v3/breachedaccount/{}?domain={}&truncateResponse=false", encoded_account, encoded_domain ); let mut res = fetch(&url, &self.api_key, &self.user_agent)?; let breaches: Vec<Breach> = res.json()?; Ok(breaches) } }