From f5d766b8878dad4702f219fa17f211f878ddfd58 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 21:41:39 -0400 Subject: [PATCH 01/11] Use enum to better represent target error types --- src/checker.rs | 20 ++++++----------- src/query.rs | 4 ++-- src/sherlock_target_manifest.rs | 39 +++++++++++++++++++-------------- 3 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index 60d4db3..b6433e4 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -93,21 +93,20 @@ pub async fn check_username( let wfthit = waf_hit(&resp_text); let error_type = &info.error_type; - let error_code = &info.error_code; - let status = match (wfthit, &error_type) { + let status = match (wfthit, error_type) { (true, _) => QueryStatus::Waf, - (false, ErrorType::Message) => { - let error_flag = info.error_msg.iter().any(|msg| msg.is_in(&resp_text)); + (false, ErrorType::Message { msg }) => { + let error_flag = msg.is_in(&resp_text); if error_flag { QueryStatus::Available } else { QueryStatus::Claimed } } - (false, ErrorType::StatusCode) => { + (false, ErrorType::StatusCode { codes }) => { let mut status = QueryStatus::Claimed; - if let Some(error_codes) = &error_code { + if let Some(error_codes) = codes { if error_codes.contains(&status_code) { status = QueryStatus::Available; } @@ -117,7 +116,7 @@ pub async fn check_username( status } - (false, ErrorType::ResponseUrl) => { + (false, ErrorType::ResponseUrl { .. }) => { if (200..300).contains(&status_code) { QueryStatus::Claimed } else { @@ -131,15 +130,10 @@ pub async fn check_username( println!("TARGET NAME : {site}"); println!("USERNAME : {username}"); println!("TARGET URL : {:?}", url_probe); + // TODO: Split this out into parts? Impl debug differently? println!("TEST METHOD : {:?}", error_type); - if let Some(error_codes) = &error_code { - println!("ERROR CODES : {:?}", error_codes); - } println!("Results..."); println!("RESPONSE CODE : {}", status_code); - if let Some(error_msg) = &info.error_msg { - println!("ERROR TEXT : {:?}", error_msg); - } println!(">>>>> BEGIN RESPONSE TEXT"); println!("{}", resp_text); println!("<<<<< END RESPONSE TEXT"); diff --git a/src/query.rs b/src/query.rs index f65b952..a20d925 100644 --- a/src/query.rs +++ b/src/query.rs @@ -96,13 +96,13 @@ pub fn add_result_to_channel( } } - let allow_redirects = !matches!(info.error_type, ErrorType::ResponseUrl); + let allow_redirects = !matches!(info.error_type, ErrorType::ResponseUrl { .. }); let req_method = info.request_method.unwrap_or(match info.error_type { // In most cases when we are detecting by status code, // it is not necessary to get the entire body: we can // detect fine with just the HEAD response. - ErrorType::StatusCode => RequestMethod::Head, + ErrorType::StatusCode { .. } => RequestMethod::Head, // Either this detect method needs the content associated // with the GET response, or this specific website will // not respond properly unless we request the whole page. diff --git a/src/sherlock_target_manifest.rs b/src/sherlock_target_manifest.rs index bf6e533..b510d83 100644 --- a/src/sherlock_target_manifest.rs +++ b/src/sherlock_target_manifest.rs @@ -38,16 +38,29 @@ pub struct TargetInfo { pub tags: Option, #[serde(skip_serializing_if = "Option::is_none", default)] pub request_method: Option, - #[serde(rename = "errorType")] + + #[serde(flatten)] pub error_type: ErrorType, - #[serde(skip_serializing_if = "Option::is_none", rename = "errorMsg", default)] - pub error_msg: Option, - #[serde(skip_serializing_if = "Option::is_none", rename = "errorCode", default)] - pub error_code: Option, - #[serde(skip_serializing_if = "Option::is_none", rename = "errorUrl", default)] - pub error_url: Option, - #[serde(skip_serializing_if = "Option::is_none", default)] - pub response_url: Option, + // The json schema says there is a `response_url` field, but it is not present + // in any of the targets in the official repository +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +#[serde(tag = "errorType", rename_all = "snake_case")] +pub enum ErrorType { + Message { + #[serde(rename = "errorMsg")] + msg: ErrorMsg, + }, + ResponseUrl { + #[serde(rename = "errorUrl")] + url: String, + }, + StatusCode { + #[serde(rename = "errorCode")] + #[serde(skip_serializing_if = "Option::is_none", default)] + codes: Option, + }, } #[derive(Debug, Serialize, Deserialize, Clone)] @@ -66,14 +79,6 @@ pub enum RequestMethod { Put, } -#[derive(Debug, Serialize, Deserialize, Clone)] -#[serde(rename_all = "snake_case")] -pub enum ErrorType { - Message, - ResponseUrl, - StatusCode, -} - #[derive(Serialize, Deserialize, Clone)] #[serde(untagged)] pub enum ErrorMsg { From cd1262e66b89c7fbff3eb8f0e29205d5c3257e8d Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 22:23:11 -0400 Subject: [PATCH 02/11] Use Arc over Arc --- src/checker.rs | 21 ++++++++++++--------- src/main.rs | 2 +- src/query.rs | 10 +++++----- src/requests.rs | 4 ++-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index b6433e4..c1a9eca 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -12,7 +12,7 @@ use tokio::sync::mpsc::channel; #[derive(Debug, Clone)] pub struct CheckOptions { pub timeout: u64, - pub proxy: Arc>, + pub proxy: Option>, pub print_all: bool, pub print_found: bool, pub dump_response: bool, @@ -41,15 +41,15 @@ pub async fn check_username( let (tx, mut rx) = channel::(num_of_sites); // ping sites for username matches - let username = Arc::new(username.to_string()); + let username = Arc::from(username); for (site, info) in site_data.iter() { add_result_to_channel( tx.clone(), Arc::clone(&username), - Arc::new(site.to_string()), + Arc::from(&site[..]), Arc::clone(&info), *timeout, - Arc::clone(proxy), + proxy.clone(), )?; } @@ -58,11 +58,14 @@ pub async fn check_username( // save to output data struct let mut results = vec![]; while let Some(result) = rx.recv().await { - let site = result.site; - let info = result.info; - let url = result.url; - let url_probe = result.url_probe; - let username = result.username; + let RequestResult { + username, + site, + info, + url, + url_probe, + .. + } = result; let query_result: QueryResult = match result.response { Err(e) => match e { diff --git a/src/main.rs b/src/main.rs index 8bae243..aacbb43 100644 --- a/src/main.rs +++ b/src/main.rs @@ -131,7 +131,7 @@ async fn main() -> Result<()> { let check_options = CheckOptions { timeout: cli.timeout, - proxy: Arc::new(cli.proxy), + proxy: cli.proxy.map(Arc::from), print_all: cli.print_all, print_found: cli.print_found, dump_response: cli.dump_response, diff --git a/src/query.rs b/src/query.rs index a20d925..008eb6e 100644 --- a/src/query.rs +++ b/src/query.rs @@ -33,8 +33,8 @@ pub enum QueryStatus { #[derive(Debug)] pub struct QueryResult { - pub username: Arc, - pub site_name: Arc, + pub username: Arc, + pub site_name: Arc, pub info: Arc, pub site_url_user: String, pub status: QueryStatus, @@ -54,11 +54,11 @@ impl fmt::Display for QueryResult { pub fn add_result_to_channel( sender: Sender, - username: Arc, - site: Arc, + username: Arc, + site: Arc, info: Arc, timeout: u64, - proxy: Arc>, + proxy: Option>, ) -> color_eyre::Result<()> { let encoded_username = &username.replace(" ", "%20"); let profile_url = info.url.interpolate(encoded_username); diff --git a/src/requests.rs b/src/requests.rs index a293ddc..3df1631 100644 --- a/src/requests.rs +++ b/src/requests.rs @@ -28,8 +28,8 @@ static USER_AGENTS: Lazy<[&str; 8]> = Lazy::new(|| { #[derive(Debug)] pub struct RequestResult { - pub username: Arc, - pub site: Arc, + pub username: Arc, + pub site: Arc, pub info: Arc, pub url: String, pub url_probe: String, From 75771aaec7773ed565f84ea4af52d69f02dccc89 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 22:28:55 -0400 Subject: [PATCH 03/11] Convert timeout to a Duration sooner rather than later --- src/checker.rs | 3 ++- src/main.rs | 10 +++++----- src/query.rs | 4 ++-- src/requests.rs | 2 +- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index c1a9eca..6b0c970 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -6,12 +6,13 @@ use crate::{ waf::waf_hit, }; use color_eyre::eyre; +use std::time::Duration; use std::{collections::HashMap, sync::Arc}; use tokio::sync::mpsc::channel; #[derive(Debug, Clone)] pub struct CheckOptions { - pub timeout: u64, + pub timeout: Duration, pub proxy: Option>, pub print_all: bool, pub print_found: bool, diff --git a/src/main.rs b/src/main.rs index aacbb43..125b11b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,3 @@ -use std::{collections::HashMap, sync::Arc}; - use clap::Parser; use color_eyre::Result; use sherlock::{ @@ -9,6 +7,8 @@ use sherlock::{ sherlock_target_manifest::{SherlockTargetManifest, TargetInfo}, utils::create_username_variants, }; +use std::time::Duration; +use std::{collections::HashMap, sync::Arc}; #[derive(Parser)] #[command(version, about, long_about = None)] @@ -62,8 +62,8 @@ struct Cli { json_file: String, /// Time (in seconds) to wait for response to requests. - #[clap(short, long, alias = "timeout", default_value_t = 60)] - timeout: u64, + #[clap(short, long, alias = "timeout", default_value_t = 60.0)] + timeout: f64, /// Output sites where the username was not found. #[clap(long, alias = "print-all")] @@ -130,7 +130,7 @@ async fn main() -> Result<()> { let username_variants = create_username_variants(&cli.usernames); let check_options = CheckOptions { - timeout: cli.timeout, + timeout: Duration::from_secs_f64(cli.timeout), proxy: cli.proxy.map(Arc::from), print_all: cli.print_all, print_found: cli.print_found, diff --git a/src/query.rs b/src/query.rs index 008eb6e..5037afb 100644 --- a/src/query.rs +++ b/src/query.rs @@ -57,7 +57,7 @@ pub fn add_result_to_channel( username: Arc, site: Arc, info: Arc, - timeout: u64, + timeout: Duration, proxy: Option>, ) -> color_eyre::Result<()> { let encoded_username = &username.replace(" ", "%20"); @@ -114,7 +114,7 @@ pub fn add_result_to_channel( &url_probe, info.headers.clone(), allow_redirects, - Duration::from_secs(timeout), + timeout, req_method, request_body, proxy.as_deref(), diff --git a/src/requests.rs b/src/requests.rs index 3df1631..22feb1a 100644 --- a/src/requests.rs +++ b/src/requests.rs @@ -41,7 +41,7 @@ pub async fn make_request( url: &str, headers: Option>, allow_redirects: bool, - timeout: std::time::Duration, + timeout: Duration, method: RequestMethod, request_payload: Option, proxy: Option<&str>, From 9f9c028f1de9fd02543867bcfa42c72b2aca34f8 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 22:31:34 -0400 Subject: [PATCH 04/11] no need for lazy init of simple static arrays --- Cargo.lock | 1 - Cargo.toml | 1 - src/requests.rs | 7 ++----- src/waf.rs | 14 +++++--------- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82d1eed..b5d3e05 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1262,7 +1262,6 @@ dependencies = [ "colored", "fancy-regex", "futures", - "once_cell", "open", "rand", "regex", diff --git a/Cargo.toml b/Cargo.toml index 9f9b1fd..b350572 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,6 @@ colored = "2.1.0" rust_xlsxwriter = { version = "0.73.0", optional = true } open = "5.3.0" rand = "0.8.5" -once_cell = "1.19.0" [features] xlsx = ["dep:rust_xlsxwriter"] diff --git a/src/requests.rs b/src/requests.rs index 22feb1a..1d0086e 100644 --- a/src/requests.rs +++ b/src/requests.rs @@ -1,4 +1,3 @@ -use once_cell::sync::Lazy; use rand::seq::SliceRandom; use std::{collections::HashMap, sync::Arc, time::Duration}; @@ -13,8 +12,7 @@ use crate::{ sherlock_target_manifest::{RequestMethod, TargetInfo}, }; -static USER_AGENTS: Lazy<[&str; 8]> = Lazy::new(|| { - [ +const USER_AGENTS: [&str; 8] = [ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:115.0) Gecko/20100101 Firefox/115.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67", @@ -23,8 +21,7 @@ static USER_AGENTS: Lazy<[&str; 8]> = Lazy::new(|| { "Mozilla/5.0 (Macintosh; Intel Mac OS X 12.0; rv:115.0) Gecko/20100101 Firefox/115.0", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0", -] -}); +]; #[derive(Debug)] pub struct RequestResult { diff --git a/src/waf.rs b/src/waf.rs index a14ddaa..5997447 100644 --- a/src/waf.rs +++ b/src/waf.rs @@ -1,17 +1,13 @@ -use once_cell::sync::Lazy; - // As WAFs advance and evolve, they will occasionally block Sherlock and // lead to false positives and negatives. Fingerprints should be added // here to filter results that fail to bypass WAFs. Fingerprints should // be highly targetted. Comment at the end of each fingerprint to // indicate target and date fingerprinted. -static WAFHIT_MSGS: Lazy<[&str; 2]> = Lazy::new(|| { - [ - r#".loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark"#, - // 2024-04-09 PerimeterX / Human Security - r#"{return l.onPageView}}),Object.defineProperty(r,"perimeterxIdentifiers",{enumerable:"#, - ] -}); +const WAFHIT_MSGS: [&str; 2] = [ + r#".loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark"#, + // 2024-04-09 PerimeterX / Human Security + r#"{return l.onPageView}}),Object.defineProperty(r,"perimeterxIdentifiers",{enumerable:"#, +]; pub fn waf_hit(resp_text: &str) -> bool { WAFHIT_MSGS.iter().any(|msg| resp_text.contains(msg)) From 6214c2ddbe53504e566d38ef75762af985342099 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 22:49:40 -0400 Subject: [PATCH 05/11] unneeded clone --- src/query.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/query.rs b/src/query.rs index 5037afb..600f457 100644 --- a/src/query.rs +++ b/src/query.rs @@ -71,7 +71,7 @@ pub fn add_result_to_channel( let request_body = info .request_payload - .clone() + .as_ref() .map(|payload| payload.to_string().interpolate(&username)); tokio::spawn(async move { From 11d893a6882f683759390aa8580987963edf7a77 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 23:21:59 -0400 Subject: [PATCH 06/11] pull out an async function to check for a user at a site --- src/checker.rs | 24 ++++------ src/query.rs | 128 ++++++++++++++++++++++++------------------------- 2 files changed, 72 insertions(+), 80 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index 6b0c970..6e0cdd5 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -69,28 +69,22 @@ pub async fn check_username( } = result; let query_result: QueryResult = match result.response { - Err(e) => match e { - QueryError::InvalidUsernameError => QueryResult { - username: Arc::clone(&username), - site_name: Arc::clone(&site), - info: Arc::clone(&info), - site_url_user: url, - status: QueryStatus::Illegal, - http_status: None, - query_time: result.query_time, - context: Some(e.to_string()), - }, - QueryError::RequestError => QueryResult { + Err(e) => { + let status = match e { + QueryError::InvalidUsernameError => QueryStatus::Illegal, + QueryError::RequestError | QueryError::RegexError(_) => QueryStatus::Unknown, + }; + QueryResult { username: Arc::clone(&username), site_name: Arc::clone(&site), info: Arc::clone(&info), site_url_user: url, - status: QueryStatus::Unknown, + status, http_status: None, query_time: result.query_time, context: Some(e.to_string()), - }, - }, + } + } Ok(response) => { let status_code = response.status().as_u16(); let resp_text = response.text().await?; diff --git a/src/query.rs b/src/query.rs index 600f457..53456db 100644 --- a/src/query.rs +++ b/src/query.rs @@ -1,4 +1,5 @@ use fancy_regex::Regex; +use reqwest::Response; use std::sync::Arc; use std::time::Duration; use std::{fmt, time::Instant}; @@ -15,6 +16,8 @@ pub enum QueryError { InvalidUsernameError, #[error("Request error")] RequestError, + #[error(transparent)] + RegexError(#[from] fancy_regex::Error), } #[derive(Debug, PartialEq, Eq)] @@ -60,84 +63,79 @@ pub fn add_result_to_channel( timeout: Duration, proxy: Option>, ) -> color_eyre::Result<()> { - let encoded_username = &username.replace(" ", "%20"); - let profile_url = info.url.interpolate(encoded_username); - let url_probe = match &info.url_probe { - // There is a special URL for probing existence separate - // from where the user profile normally can be found. - Some(url_probe) => url_probe.interpolate(encoded_username), - None => info.url.interpolate(encoded_username), - }; - - let request_body = info - .request_payload - .as_ref() - .map(|payload| payload.to_string().interpolate(&username)); - tokio::spawn(async move { - // use regex to make sure the url and username are valid for the site - if let Some(regex) = &info.regex_check { - let re = Regex::new(regex)?; - let is_match = re.is_match(&username)?; - if !is_match { - // No need to do the check at the site: this username is not allowed. - let request_result = RequestResult { - username: Arc::clone(&username), - site: Arc::clone(&site), - info, - url: profile_url, - url_probe, - response: Err(QueryError::InvalidUsernameError), - query_time: Duration::from_secs(0), - }; - - sender.send(request_result).await?; - return Ok::<_, color_eyre::eyre::Report>(()); - } - } - - let allow_redirects = !matches!(info.error_type, ErrorType::ResponseUrl { .. }); - - let req_method = info.request_method.unwrap_or(match info.error_type { - // In most cases when we are detecting by status code, - // it is not necessary to get the entire body: we can - // detect fine with just the HEAD response. - ErrorType::StatusCode { .. } => RequestMethod::Head, - // Either this detect method needs the content associated - // with the GET response, or this specific website will - // not respond properly unless we request the whole page. - _ => RequestMethod::Get, - }); + let encoded_username = &username.replace(" ", "%20"); + let profile_url = info.url.interpolate(encoded_username); + let url_probe = match &info.url_probe { + // There is a special URL for probing existence separate + // from where the user profile normally can be found. + Some(url_probe) => url_probe.interpolate(encoded_username), + None => info.url.interpolate(encoded_username), + }; let start = Instant::now(); - let resp = make_request( - &url_probe, - info.headers.clone(), - allow_redirects, - timeout, - req_method, - request_body, - proxy.as_deref(), - None, - ) - .await; + let response = + check_user_at_site(&username, &url_probe, &info, timeout, proxy.as_deref()).await; let duration = start.elapsed(); let request_result = RequestResult { - username: Arc::clone(&username), - site: Arc::clone(&site), + username, + site, info, url: profile_url.clone(), url_probe, - response: resp.map_err(|_| QueryError::RequestError), + response, query_time: duration, }; - // send to channel - sender.send(request_result).await?; - - Ok(()) + // send to channel, ignore if the receiver has been dropped + let _ = sender.send(request_result).await; }); Ok(()) } + +async fn check_user_at_site( + username: &str, + url_probe: &str, + info: &TargetInfo, + timeout: Duration, + proxy: Option<&str>, +) -> Result { + let request_body = info + .request_payload + .as_ref() + .map(|payload| payload.to_string().interpolate(&username)); + + // use regex to make sure the url and username are valid for the site + if let Some(regex) = &info.regex_check { + let re = Regex::new(regex)?; + let is_match = re.is_match(&username).unwrap_or(false); + if !is_match { + return Err(QueryError::InvalidUsernameError); + } + } + let allow_redirects = !matches!(info.error_type, ErrorType::ResponseUrl { .. }); + let req_method = info.request_method.unwrap_or(match info.error_type { + // In most cases when we are detecting by status code, + // it is not necessary to get the entire body: we can + // detect fine with just the HEAD response. + ErrorType::StatusCode { .. } => RequestMethod::Head, + // Either this detect method needs the content associated + // with the GET response, or this specific website will + // not respond properly unless we request the whole page. + _ => RequestMethod::Get, + }); + make_request( + url_probe, + info.headers.clone(), + allow_redirects, + timeout, + req_method, + request_body, + proxy, + None, + ) + .await + .map_err(|_| QueryError::RequestError) +} From ba7c3082f7c4af5a9a7be4ca0ffe69c041556d21 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Mon, 2 Sep 2024 23:21:59 -0400 Subject: [PATCH 07/11] misc changes --- src/checker.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index 6e0cdd5..2b89e06 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -34,7 +34,7 @@ pub async fn check_username( browse, } = options; - let num_of_sites = site_data.keys().len(); + let num_of_sites = site_data.len(); if num_of_sites == 0 { return Err(eyre::eyre!("No sites to check")); } @@ -57,7 +57,7 @@ pub async fn check_username( drop(tx); // save to output data struct - let mut results = vec![]; + let mut results = Vec::with_capacity(site_data.len()); while let Some(result) = rx.recv().await { let RequestResult { username, From bbf98ff21cffc8080d1aaf316b81a8dafb454d19 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Tue, 3 Sep 2024 01:04:26 -0400 Subject: [PATCH 08/11] use include_str! and a real json file --- src/data.json | 1 + src/get_data.rs | 2796 +---------------------------------------------- src/main.rs | 1 + 3 files changed, 3 insertions(+), 2795 deletions(-) create mode 100644 src/data.json diff --git a/src/data.json b/src/data.json new file mode 100644 index 0000000..9300d4d --- /dev/null +++ b/src/data.json @@ -0,0 +1 @@ +{"$schema":"data.schema.json","1337x":{"errorMsg":["Error something went wrong.","404 Not Found"],"errorType":"message","regexCheck":"^[A-Za-z0-9]{4,12}$","url":"https://www.1337x.to/user/{}/","urlMain":"https://www.1337x.to/","username_claimed":"FitGirl"},"2Dimensions":{"errorType":"status_code","url":"https://2Dimensions.com/a/{}","urlMain":"https://2Dimensions.com/","username_claimed":"blue"},"3dnews":{"errorMsg":"Пользователь не зарегистрирован и не имеет профиля для просмотра.","errorType":"message","url":"http://forum.3dnews.ru/member.php?username={}","urlMain":"http://forum.3dnews.ru/","username_claimed":"red"},"7Cups":{"errorType":"status_code","url":"https://www.7cups.com/@{}","urlMain":"https://www.7cups.com/","username_claimed":"blue"},"8tracks":{"errorMsg":"This page has vanished","errorType":"message","url":"https://8tracks.com/{}","urlMain":"https://8tracks.com/","username_claimed":"blue"},"9GAG":{"errorType":"status_code","url":"https://www.9gag.com/u/{}","urlMain":"https://www.9gag.com/","username_claimed":"blue"},"APClips":{"errorMsg":"Amateur Porn Content Creators","errorType":"message","isNSFW":true,"url":"https://apclips.com/{}","urlMain":"https://apclips.com/","username_claimed":"onlybbyraq"},"About.me":{"errorType":"status_code","url":"https://about.me/{}","urlMain":"https://about.me/","username_claimed":"blue"},"Academia.edu":{"errorType":"status_code","regexCheck":"^[^.]*$","url":"https://independent.academia.edu/{}","urlMain":"https://www.academia.edu/","username_claimed":"blue"},"AdmireMe.Vip":{"errorMsg":"Page Not Found","errorType":"message","isNSFW":true,"url":"https://admireme.vip/{}","urlMain":"https://admireme.vip/","username_claimed":"DemiDevil"},"Air Pilot Life":{"errorMsg":"Oops! That page doesn’t exist or is private","errorType":"message","url":"https://airlinepilot.life/u/{}","urlMain":"https://airlinepilot.life/","username_claimed":"chris"},"Airbit":{"errorType":"status_code","url":"https://airbit.com/{}","urlMain":"https://airbit.com/","username_claimed":"airbit"},"Airliners":{"errorType":"status_code","url":"https://www.airliners.net/user/{}/profile/photos","urlMain":"https://www.airliners.net/","username_claimed":"yushinlin"},"All Things Worn":{"errorMsg":"Sell Used Panties","errorType":"message","isNSFW":true,"url":"https://www.allthingsworn.com/profile/{}","urlMain":"https://www.allthingsworn.com","username_claimed":"pink"},"AllMyLinks":{"errorMsg":"Not Found","errorType":"message","regexCheck":"^[a-z0-9][a-z0-9-]{2,32}$","url":"https://allmylinks.com/{}","urlMain":"https://allmylinks.com/","username_claimed":"blue"},"Amino":{"errorType":"status_code","url":"https://aminoapps.com/u/{}","urlMain":"https://aminoapps.com","username_claimed":"blue"},"AniWorld":{"errorMsg":"Dieses Profil ist nicht verfügbar","errorType":"message","url":"https://aniworld.to/user/profil/{}","urlMain":"https://aniworld.to/","username_claimed":"blue"},"Anilist":{"errorType":"status_code","regexCheck":"^[A-Za-z0-9]{2,20}$","request_method":"POST","request_payload":{"query":"query($name:String){User(name:$name){id}}","variables":{"name":"{}"}},"url":"https://anilist.co/user/{}/","urlMain":"https://anilist.co/","urlProbe":"https://graphql.anilist.co/","username_claimed":"Josh"},"Apple Developer":{"errorType":"status_code","url":"https://developer.apple.com/forums/profile/{}","urlMain":"https://developer.apple.com","username_claimed":"lio24d"},"Apple Discussions":{"errorMsg":"The page you tried was not found. You may have used an outdated link or may have typed the address (URL) incorrectly.","errorType":"message","url":"https://discussions.apple.com/profile/{}","urlMain":"https://discussions.apple.com","username_claimed":"jason"},"Archive of Our Own":{"errorType":"status_code","regexCheck":"^[^.]*?$","url":"https://archiveofourown.org/users/{}","urlMain":"https://archiveofourown.org/","username_claimed":"test"},"Archive.org":{"__comment__":"'The resource could not be found' relates to archive downtime","errorMsg":["could not fetch an account with user item identifier","The resource could not be found"],"errorType":"message","url":"https://archive.org/details/@{}","urlMain":"https://archive.org","urlProbe":"https://archive.org/details/@{}?noscript=true","username_claimed":"blue"},"ArtStation":{"errorType":"status_code","url":"https://www.artstation.com/{}","urlMain":"https://www.artstation.com/","username_claimed":"Blue"},"Asciinema":{"errorType":"status_code","url":"https://asciinema.org/~{}","urlMain":"https://asciinema.org","username_claimed":"red"},"Ask Fedora":{"errorType":"status_code","url":"https://ask.fedoraproject.org/u/{}","urlMain":"https://ask.fedoraproject.org/","username_claimed":"red"},"AskFM":{"errorMsg":"Well, apparently not anymore.","errorType":"message","regexCheck":"^[a-zA-Z0-9_]{3,40}$","url":"https://ask.fm/{}","urlMain":"https://ask.fm/","username_claimed":"blue"},"Audiojungle":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9_]+$","url":"https://audiojungle.net/user/{}","urlMain":"https://audiojungle.net/","username_claimed":"blue"},"Autofrage":{"errorType":"status_code","url":"https://www.autofrage.net/nutzer/{}","urlMain":"https://www.autofrage.net/","username_claimed":"autofrage"},"Avizo":{"errorType":"response_url","errorUrl":"https://www.avizo.cz/","url":"https://www.avizo.cz/{}/","urlMain":"https://www.avizo.cz/","username_claimed":"blue"},"BLIP.fm":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9_]{1,30}$","url":"https://blip.fm/{}","urlMain":"https://blip.fm/","username_claimed":"blue"},"BOOTH":{"errorType":"response_url","errorUrl":"https://booth.pm/","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.booth.pm/","urlMain":"https://booth.pm/","username_claimed":"blue"},"Bandcamp":{"errorType":"status_code","url":"https://www.bandcamp.com/{}","urlMain":"https://www.bandcamp.com/","username_claimed":"blue"},"Bazar.cz":{"errorType":"response_url","errorUrl":"https://www.bazar.cz/error404.aspx","url":"https://www.bazar.cz/{}/","urlMain":"https://www.bazar.cz/","username_claimed":"pianina"},"Behance":{"errorType":"status_code","url":"https://www.behance.net/{}","urlMain":"https://www.behance.net/","username_claimed":"blue"},"Bezuzyteczna":{"errorType":"status_code","url":"https://bezuzyteczna.pl/uzytkownicy/{}","urlMain":"https://bezuzyteczna.pl","username_claimed":"Jackson"},"BiggerPockets":{"errorType":"status_code","url":"https://www.biggerpockets.com/users/{}","urlMain":"https://www.biggerpockets.com/","username_claimed":"blue"},"Bikemap":{"errorType":"status_code","url":"https://www.bikemap.net/en/u/{}/routes/created/","urlMain":"https://www.bikemap.net/","username_claimed":"bikemap"},"BioHacking":{"errorType":"status_code","url":"https://forum.dangerousthings.com/u/{}","urlMain":"https://forum.dangerousthings.com/","username_claimed":"blue"},"BitBucket":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9-_]{1,30}$","url":"https://bitbucket.org/{}/","urlMain":"https://bitbucket.org/","username_claimed":"white"},"Bitwarden Forum":{"errorType":"status_code","regexCheck":"^(?![.-])[a-zA-Z0-9_.-]{3,20}$","url":"https://community.bitwarden.com/u/{}/summary","urlMain":"https://bitwarden.com/","username_claimed":"blue"},"Blipfoto":{"errorType":"status_code","url":"https://www.blipfoto.com/{}","urlMain":"https://www.blipfoto.com/","username_claimed":"blue"},"Blogger":{"errorType":"status_code","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://{}.blogspot.com","urlMain":"https://www.blogger.com/","username_claimed":"blue"},"BodyBuilding":{"errorType":"response_url","errorUrl":"https://bodyspace.bodybuilding.com/","url":"https://bodyspace.bodybuilding.com/{}","urlMain":"https://bodyspace.bodybuilding.com/","username_claimed":"blue"},"BongaCams":{"errorType":"status_code","isNSFW":true,"url":"https://pt.bongacams.com/profile/{}","urlMain":"https://pt.bongacams.com","username_claimed":"asuna-black"},"Bookcrossing":{"errorType":"status_code","url":"https://www.bookcrossing.com/mybookshelf/{}/","urlMain":"https://www.bookcrossing.com/","username_claimed":"blue"},"BraveCommunity":{"errorType":"status_code","url":"https://community.brave.com/u/{}/","urlMain":"https://community.brave.com/","username_claimed":"blue"},"BugCrowd":{"errorType":"status_code","url":"https://bugcrowd.com/{}","urlMain":"https://bugcrowd.com/","username_claimed":"ppfeister"},"BuyMeACoffee":{"errorType":"status_code","regexCheck":"[a-zA-Z0-9]{3,15}","url":"https://buymeacoff.ee/{}","urlMain":"https://www.buymeacoffee.com/","urlProbe":"https://www.buymeacoffee.com/{}","username_claimed":"red"},"BuzzFeed":{"errorType":"status_code","url":"https://buzzfeed.com/{}","urlMain":"https://buzzfeed.com/","username_claimed":"blue"},"CGTrader":{"errorType":"status_code","regexCheck":"^[^.]*?$","url":"https://www.cgtrader.com/{}","urlMain":"https://www.cgtrader.com","username_claimed":"blue"},"CNET":{"errorType":"status_code","regexCheck":"^[a-z].*$","url":"https://www.cnet.com/profiles/{}/","urlMain":"https://www.cnet.com/","username_claimed":"melliott"},"CSSBattle":{"errorType":"status_code","url":"https://cssbattle.dev/player/{}","urlMain":"https://cssbattle.dev","username_claimed":"beo"},"CTAN":{"errorType":"status_code","url":"https://ctan.org/author/{}","urlMain":"https://ctan.org/","username_claimed":"briggs"},"Caddy Community":{"errorType":"status_code","url":"https://caddy.community/u/{}/summary","urlMain":"https://caddy.community/","username_claimed":"taako_magnusen"},"Car Talk Community":{"errorType":"status_code","url":"https://community.cartalk.com/u/{}/summary","urlMain":"https://community.cartalk.com/","username_claimed":"always_fixing"},"Carbonmade":{"errorType":"response_url","errorUrl":"https://carbonmade.com/fourohfour?domain={}.carbonmade.com","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.carbonmade.com","urlMain":"https://carbonmade.com/","username_claimed":"jenny"},"Career.habr":{"errorMsg":"

Ошибка 404

","errorType":"message","url":"https://career.habr.com/{}","urlMain":"https://career.habr.com/","username_claimed":"blue"},"Championat":{"errorType":"status_code","url":"https://www.championat.com/user/{}","urlMain":"https://www.championat.com/","username_claimed":"blue"},"Chaos":{"errorType":"status_code","url":"https://chaos.social/@{}","urlMain":"https://chaos.social/","username_claimed":"ordnung"},"Chatujme.cz":{"errorMsg":"Neexistujicí profil","errorType":"message","regexCheck":"^[a-zA-Z][a-zA-Z1-9_-]*$","url":"https://profil.chatujme.cz/{}","urlMain":"https://chatujme.cz/","username_claimed":"david"},"ChaturBate":{"errorType":"status_code","isNSFW":true,"url":"https://chaturbate.com/{}","urlMain":"https://chaturbate.com","username_claimed":"cute18cute"},"Chess":{"errorMsg":"Username is valid","errorType":"message","regexCheck":"^[a-z1-9]{3,25}$","url":"https://www.chess.com/member/{}","urlMain":"https://www.chess.com/","urlProbe":"https://www.chess.com/callback/user/valid?username={}","username_claimed":"blue"},"Choice Community":{"errorType":"status_code","url":"https://choice.community/u/{}/summary","urlMain":"https://choice.community/","username_claimed":"gordon"},"Clapper":{"errorType":"status_code","url":"https://clapperapp.com/{}","urlMain":"https://clapperapp.com/","username_claimed":"blue"},"CloudflareCommunity":{"errorType":"status_code","url":"https://community.cloudflare.com/u/{}","urlMain":"https://community.cloudflare.com/","username_claimed":"blue"},"Clozemaster":{"errorMsg":"Oh no! Player not found.","errorType":"message","url":"https://www.clozemaster.com/players/{}","urlMain":"https://www.clozemaster.com","username_claimed":"green"},"Clubhouse":{"errorType":"status_code","url":"https://www.clubhouse.com/@{}","urlMain":"https://www.clubhouse.com","username_claimed":"waniathar"},"Code Snippet Wiki":{"errorMsg":"This user has not filled out their profile page yet","errorType":"message","url":"https://codesnippets.fandom.com/wiki/User:{}","urlMain":"https://codesnippets.fandom.com","username_claimed":"bob"},"Codeberg":{"errorType":"status_code","url":"https://codeberg.org/{}","urlMain":"https://codeberg.org/","username_claimed":"blue"},"Codecademy":{"errorMsg":"This profile could not be found","errorType":"message","url":"https://www.codecademy.com/profiles/{}","urlMain":"https://www.codecademy.com/","username_claimed":"blue"},"Codechef":{"errorType":"response_url","errorUrl":"https://www.codechef.com/","url":"https://www.codechef.com/users/{}","urlMain":"https://www.codechef.com/","username_claimed":"blue"},"Codeforces":{"errorType":"status_code","url":"https://codeforces.com/profile/{}","urlMain":"https://codeforces.com/","urlProbe":"https://codeforces.com/api/user.info?handles={}","username_claimed":"tourist"},"Codepen":{"errorType":"status_code","url":"https://codepen.io/{}","urlMain":"https://codepen.io/","username_claimed":"blue"},"Coders Rank":{"errorMsg":"not a registered member","errorType":"message","regexCheck":"^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$","url":"https://profile.codersrank.io/user/{}/","urlMain":"https://codersrank.io/","username_claimed":"rootkit7628"},"Coderwall":{"errorType":"status_code","url":"https://coderwall.com/{}","urlMain":"https://coderwall.com","username_claimed":"hacker"},"Codewars":{"errorType":"status_code","url":"https://www.codewars.com/users/{}","urlMain":"https://www.codewars.com","username_claimed":"example"},"Coinvote":{"errorType":"status_code","url":"https://coinvote.cc/profile/{}","urlMain":"https://coinvote.cc/","username_claimed":"blue"},"ColourLovers":{"errorType":"status_code","url":"https://www.colourlovers.com/lover/{}","urlMain":"https://www.colourlovers.com/","username_claimed":"blue"},"Contently":{"errorType":"response_url","errorUrl":"https://contently.com","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://{}.contently.com/","urlMain":"https://contently.com/","username_claimed":"jordanteicher"},"Coroflot":{"errorType":"status_code","url":"https://www.coroflot.com/{}","urlMain":"https://coroflot.com/","username_claimed":"blue"},"Cracked":{"errorType":"response_url","errorUrl":"https://www.cracked.com/","url":"https://www.cracked.com/members/{}/","urlMain":"https://www.cracked.com/","username_claimed":"blue"},"Crevado":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.crevado.com","urlMain":"https://crevado.com/","username_claimed":"blue"},"Crowdin":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9._-]{2,255}$","url":"https://crowdin.com/profile/{}","urlMain":"https://crowdin.com/","username_claimed":"blue"},"Cryptomator Forum":{"errorType":"status_code","url":"https://community.cryptomator.org/u/{}","urlMain":"https://community.cryptomator.org/","username_claimed":"michael"},"Cults3D":{"errorMsg":"Oh dear, this page is not working!","errorType":"message","url":"https://cults3d.com/en/users/{}/creations","urlMain":"https://cults3d.com/en","username_claimed":"brown"},"CyberDefenders":{"errorMsg":"Blue Team Training for SOC analysts and DFIR - CyberDefenders","errorType":"message","regexCheck":"^[^\\/:*?\"<>|@]{3,50}$","request_method":"GET","url":"https://cyberdefenders.org/p/{}","urlMain":"https://cyberdefenders.org/","username_claimed":"mlohn"},"DEV Community":{"errorType":"status_code","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://dev.to/{}","urlMain":"https://dev.to/","username_claimed":"blue"},"DMOJ":{"errorMsg":"No such user","errorType":"message","url":"https://dmoj.ca/user/{}","urlMain":"https://dmoj.ca/","username_claimed":"junferno"},"DailyMotion":{"errorType":"status_code","url":"https://www.dailymotion.com/{}","urlMain":"https://www.dailymotion.com/","username_claimed":"blue"},"Dealabs":{"errorMsg":"La page que vous essayez","errorType":"message","regexCheck":"[a-z0-9]{4,16}","url":"https://www.dealabs.com/profile/{}","urlMain":"https://www.dealabs.com/","username_claimed":"blue"},"DeviantART":{"errorType":"status_code","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://{}.deviantart.com","urlMain":"https://deviantart.com","username_claimed":"blue"},"Discogs":{"errorType":"status_code","url":"https://www.discogs.com/user/{}","urlMain":"https://www.discogs.com/","username_claimed":"blue"},"Discord":{"errorType":"message","url":"https://discord.com","urlMain":"https://discord.com/","urlProbe":"https://discord.com/api/v9/unique-username/username-attempt-unauthed","errorMsg":["{\"taken\":false}","The resource is being rate limited"],"request_method":"POST","request_payload":{"username":"{}"},"headers":{"Content-Type":"application/json"},"username_claimed":"blue"},"Discuss.Elastic.co":{"errorType":"status_code","url":"https://discuss.elastic.co/u/{}","urlMain":"https://discuss.elastic.co/","username_claimed":"blue"},"Disqus":{"errorType":"status_code","url":"https://disqus.com/{}","urlMain":"https://disqus.com/","username_claimed":"blue"},"Docker Hub":{"errorType":"status_code","url":"https://hub.docker.com/u/{}/","urlMain":"https://hub.docker.com/","urlProbe":"https://hub.docker.com/v2/users/{}/","username_claimed":"blue"},"Dribbble":{"errorMsg":"Whoops, that page is gone.","errorType":"message","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://dribbble.com/{}","urlMain":"https://dribbble.com/","username_claimed":"blue"},"Duolingo":{"errorMsg":"{\"users\":[]}","errorType":"message","headers":{"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0"},"url":"https://www.duolingo.com/profile/{}","urlMain":"https://duolingo.com/","urlProbe":"https://www.duolingo.com/2017-06-30/users?username={}","username_claimed":"blue"},"Eintracht Frankfurt Forum":{"errorType":"status_code","regexCheck":"^[^.]*?$","url":"https://community.eintracht.de/fans/{}","urlMain":"https://community.eintracht.de/","username_claimed":"mmammu"},"Envato Forum":{"errorType":"status_code","url":"https://forums.envato.com/u/{}","urlMain":"https://forums.envato.com/","username_claimed":"enabled"},"Erome":{"errorType":"status_code","isNSFW":true,"url":"https://www.erome.com/{}","urlMain":"https://www.erome.com/","username_claimed":"bob"},"Exposure":{"errorType":"status_code","url":"https://{}.exposure.co/","urlMain":"https://exposure.co/","username_claimed":"jonasjacobsson"},"EyeEm":{"errorType":"status_code","url":"https://www.eyeem.com/u/{}","urlMain":"https://www.eyeem.com/","username_claimed":"blue"},"F3.cool":{"errorType":"status_code","url":"https://f3.cool/{}/","urlMain":"https://f3.cool/","username_claimed":"blue"},"Fameswap":{"errorType":"status_code","url":"https://fameswap.com/user/{}","urlMain":"https://fameswap.com/","username_claimed":"fameswap"},"Fandom":{"errorType":"status_code","url":"https://www.fandom.com/u/{}","urlMain":"https://www.fandom.com/","username_claimed":"Jungypoo"},"Fanpop":{"errorType":"response_url","errorUrl":"https://www.fanpop.com/","url":"https://www.fanpop.com/fans/{}","urlMain":"https://www.fanpop.com/","username_claimed":"blue"},"Finanzfrage":{"errorType":"status_code","url":"https://www.finanzfrage.net/nutzer/{}","urlMain":"https://www.finanzfrage.net/","username_claimed":"finanzfrage"},"Fiverr":{"errorMsg":"\"status\":\"success\"","errorType":"message","regexCheck":"^[A-Za-z][A-Za-z\\d_]{5,14}$","request_method":"POST","request_payload":{"username":"{}"},"url":"https://www.fiverr.com/{}","urlMain":"https://www.fiverr.com/","urlProbe":"https://www.fiverr.com/validate_username","username_claimed":"blueman"},"Flickr":{"errorType":"status_code","url":"https://www.flickr.com/people/{}","urlMain":"https://www.flickr.com/","username_claimed":"blue"},"Flightradar24":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9_]{3,20}$","url":"https://my.flightradar24.com/{}","urlMain":"https://www.flightradar24.com/","username_claimed":"jebbrooks"},"Flipboard":{"errorType":"status_code","regexCheck":"^([a-zA-Z0-9_]){1,15}$","url":"https://flipboard.com/@{}","urlMain":"https://flipboard.com/","username_claimed":"blue"},"Football":{"errorMsg":"Пользователь с таким именем не найден","errorType":"message","url":"https://www.rusfootball.info/user/{}/","urlMain":"https://www.rusfootball.info/","username_claimed":"solo87"},"FortniteTracker":{"errorType":"status_code","url":"https://fortnitetracker.com/profile/all/{}","urlMain":"https://fortnitetracker.com/challenges","username_claimed":"blue"},"Forum Ophilia":{"errorMsg":"that user does not exist","errorType":"message","isNSFW":true,"url":"https://www.forumophilia.com/profile.php?mode=viewprofile&u={}","urlMain":"https://www.forumophilia.com/","username_claimed":"bob"},"Fosstodon":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9_]{1,30}$","url":"https://fosstodon.org/@{}","urlMain":"https://fosstodon.org/","username_claimed":"blue"},"Freelance.habr":{"errorMsg":"
","errorType":"message","regexCheck":"^((?!\\.).)*$","url":"https://freelance.habr.com/freelancers/{}","urlMain":"https://freelance.habr.com/","username_claimed":"adam"},"Freelancer":{"errorMsg":"\"users\":{}","errorType":"message","url":"https://www.freelancer.com/u/{}","urlMain":"https://www.freelancer.com/","urlProbe":"https://www.freelancer.com/api/users/0.1/users?usernames%5B%5D={}&compact=true","username_claimed":"red0xff"},"Freesound":{"errorType":"status_code","url":"https://freesound.org/people/{}/","urlMain":"https://freesound.org/","username_claimed":"blue"},"GNOME VCS":{"errorType":"response_url","errorUrl":"https://gitlab.gnome.org/{}","regexCheck":"^(?!-)[a-zA-Z0-9_.-]{2,255}(?Web3’s Largest Ethical Hackers Community | HackenProof","errorType":"message","regexCheck":"^[\\w-]{,34}$","url":"https://hackenproof.com/hackers/{}","urlMain":"https://hackenproof.com/","username_claimed":"blazezaria"},"HackerEarth":{"errorMsg":"404. URL not found.","errorType":"message","url":"https://hackerearth.com/@{}","urlMain":"https://hackerearth.com/","username_claimed":"naveennamani877"},"HackerNews":{"__comment__":"First errMsg invalid, second errMsg rate limited. Not ideal. Adjust for better rate limit filtering.","errorMsg":["No such user.","Sorry."],"errorType":"message","url":"https://news.ycombinator.com/user?id={}","urlMain":"https://news.ycombinator.com/","username_claimed":"blue"},"HackerOne":{"errorMsg":"Page not found","errorType":"message","url":"https://hackerone.com/{}","urlMain":"https://hackerone.com/","username_claimed":"stok"},"HackerRank":{"errorMsg":"Something went wrong","errorType":"message","regexCheck":"^[^.]*?$","url":"https://hackerrank.com/{}","urlMain":"https://hackerrank.com/","username_claimed":"satznova"},"Harvard Scholar":{"errorType":"status_code","url":"https://scholar.harvard.edu/{}","urlMain":"https://scholar.harvard.edu/","username_claimed":"ousmanekane"},"Hashnode":{"errorType":"status_code","url":"https://hashnode.com/@{}","urlMain":"https://hashnode.com","username_claimed":"blue"},"Heavy-R":{"errorMsg":"Channel not found","errorType":"message","isNSFW":true,"url":"https://www.heavy-r.com/user/{}","urlMain":"https://www.heavy-r.com/","username_claimed":"kilroy222"},"Holopin":{"errorMsg":"true","errorType":"message","request_method":"POST","request_payload":{"username":"{}"},"url":"https://holopin.io/@{}","urlMain":"https://holopin.io","urlProbe":"https://www.holopin.io/api/auth/username","username_claimed":"red"},"Houzz":{"errorMsg":"The page you requested was not found.","errorType":"message","url":"https://houzz.com/user/{}","urlMain":"https://houzz.com/","username_claimed":"blue"},"HubPages":{"errorType":"status_code","url":"https://hubpages.com/@{}","urlMain":"https://hubpages.com/","username_claimed":"blue"},"Hubski":{"errorMsg":"No such user","errorType":"message","url":"https://hubski.com/user/{}","urlMain":"https://hubski.com/","username_claimed":"blue"},"HudsonRock":{"errorMsg":"No results","errorType":"message","url":"https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-username?username={}","urlMain":"https://hudsonrock.com","username_claimed":"testadmin"},"IFTTT":{"errorType":"status_code","regexCheck":"^[A-Za-z0-9]{3,35}$","url":"https://www.ifttt.com/p/{}","urlMain":"https://www.ifttt.com/","username_claimed":"blue"},"IRC-Galleria":{"errorType":"response_url","errorUrl":"https://irc-galleria.net/users/search?username={}","url":"https://irc-galleria.net/user/{}","urlMain":"https://irc-galleria.net/","username_claimed":"appas"},"Icons8 Community":{"errorType":"status_code","url":"https://community.icons8.com/u/{}/summary","urlMain":"https://community.icons8.com/","username_claimed":"thefourCraft"},"Image Fap":{"errorMsg":"Not found","errorType":"message","isNSFW":true,"url":"https://www.imagefap.com/profile/{}","urlMain":"https://www.imagefap.com/","username_claimed":"blue"},"ImgUp.cz":{"errorType":"status_code","url":"https://imgup.cz/{}","urlMain":"https://imgup.cz/","username_claimed":"adam"},"Imgur":{"errorType":"status_code","url":"https://imgur.com/user/{}","urlMain":"https://imgur.com/","urlProbe":"https://api.imgur.com/account/v1/accounts/{}?client_id=546c25a59c58ad7","username_claimed":"blue"},"Instagram":{"errorType":"status_code","url":"https://instagram.com/{}","urlMain":"https://instagram.com/","urlProbe":"https://www.picuki.com/profile/{}","username_claimed":"instagram"},"Instructables":{"errorType":"status_code","url":"https://www.instructables.com/member/{}","urlMain":"https://www.instructables.com/","urlProbe":"https://www.instructables.com/json-api/showAuthorExists?screenName={}","username_claimed":"blue"},"Intigriti":{"errorType":"status_code","regexCheck":"[a-z0-9_]{1,25}","request_method":"GET","url":"https://app.intigriti.com/profile/{}","urlMain":"https://app.intigriti.com","urlProbe":"https://api.intigriti.com/user/public/profile/{}","username_claimed":"blue"},"Ionic Forum":{"errorType":"status_code","url":"https://forum.ionicframework.com/u/{}","urlMain":"https://forum.ionicframework.com/","username_claimed":"theblue222"},"Issuu":{"errorType":"status_code","url":"https://issuu.com/{}","urlMain":"https://issuu.com/","username_claimed":"jenny"},"Itch.io":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.itch.io/","urlMain":"https://itch.io/","username_claimed":"blue"},"Itemfix":{"errorMsg":"ItemFix - Channel: ","errorType":"message","url":"https://www.itemfix.com/c/{}","urlMain":"https://www.itemfix.com/","username_claimed":"blue"},"Jellyfin Weblate":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@._-]{1,150}$","url":"https://translate.jellyfin.org/user/{}/","urlMain":"https://translate.jellyfin.org/","username_claimed":"EraYaN"},"Jimdo":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.jimdosite.com","urlMain":"https://jimdosite.com/","username_claimed":"jenny"},"Joplin Forum":{"errorType":"status_code","url":"https://discourse.joplinapp.org/u/{}","urlMain":"https://discourse.joplinapp.org/","username_claimed":"laurent"},"KEAKR":{"errorType":"status_code","url":"https://www.keakr.com/en/profile/{}","urlMain":"https://www.keakr.com/","username_claimed":"beats"},"Kaggle":{"errorType":"status_code","url":"https://www.kaggle.com/{}","urlMain":"https://www.kaggle.com/","username_claimed":"dansbecker"},"kaskus":{"errorType":"status_code","url":"https://www.kaskus.co.id/@{}","urlMain":"https://www.kaskus.co.id/","username_claimed":"l0mbart"},"Keybase":{"errorType":"status_code","url":"https://keybase.io/{}","urlMain":"https://keybase.io/","username_claimed":"blue"},"Kick":{"__comment__":"Cloudflare. Only viable when proxied.","errorMsg":"Not Found","errorType":"message","url":"https://kick.com/{}","urlMain":"https://kick.com/","urlProbe":"https://kick.com/api/v2/channels/{}","username_claimed":"blue"},"Kik":{"errorMsg":"The page you requested was not found","errorType":"message","url":"https://kik.me/{}","urlMain":"http://kik.me/","urlProbe":"https://ws2.kik.com/user/{}","username_claimed":"blue"},"Kongregate":{"errorType":"status_code","headers":{"Accept":"text/html","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0"},"regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://www.kongregate.com/accounts/{}","urlMain":"https://www.kongregate.com/","username_claimed":"blue"},"LOR":{"errorType":"status_code","url":"https://www.linux.org.ru/people/{}/profile","urlMain":"https://linux.org.ru/","username_claimed":"red"},"Launchpad":{"errorType":"status_code","url":"https://launchpad.net/~{}","urlMain":"https://launchpad.net/","username_claimed":"blue"},"LeetCode":{"errorType":"status_code","url":"https://leetcode.com/{}","urlMain":"https://leetcode.com/","username_claimed":"blue"},"LessWrong":{"errorType":"status_code","url":"https://www.lesswrong.com/users/@{}","urlMain":"https://www.lesswrong.com/","username_claimed":"blue"},"Letterboxd":{"errorMsg":"Sorry, we can’t find the page you’ve requested.","errorType":"message","url":"https://letterboxd.com/{}","urlMain":"https://letterboxd.com/","username_claimed":"blue"},"LibraryThing":{"errorMsg":"Catalog your books online","errorType":"message","url":"https://www.librarything.com/profile/{}","urlMain":"https://www.librarything.com/","username_claimed":"blue"},"Lichess":{"errorMsg":"Page not found!","errorType":"message","url":"https://lichess.org/@/{}","urlMain":"https://lichess.org","username_claimed":"blue"},"LinkedIn":{"errorType":"status_code","headers":{"User-Agent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36"},"regexCheck":"^[a-zA-Z0-9]{3,100}$","request_method":"GET","url":"https://linkedin.com/in/{}","urlMain":"https://linkedin.com","username_claimed":"paulpfeister"},"Linktree":{"errorMsg":"\"statusCode\":404","errorType":"message","regexCheck":"^[\\w\\.]{2,30}$","url":"https://linktr.ee/{}","urlMain":"https://linktr.ee/","username_claimed":"anne"},"Listed":{"errorType":"response_url","errorUrl":"https://listed.to/@{}","url":"https://listed.to/@{}","urlMain":"https://listed.to/","username_claimed":"listed"},"LiveJournal":{"errorType":"status_code","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://{}.livejournal.com","urlMain":"https://www.livejournal.com/","username_claimed":"blue"},"Lobsters":{"errorType":"status_code","regexCheck":"[A-Za-z0-9][A-Za-z0-9_-]{0,24}","url":"https://lobste.rs/u/{}","urlMain":"https://lobste.rs/","username_claimed":"jcs"},"LottieFiles":{"errorType":"status_code","url":"https://lottiefiles.com/{}","urlMain":"https://lottiefiles.com/","username_claimed":"lottiefiles"},"LushStories":{"errorType":"status_code","isNSFW":true,"url":"https://www.lushstories.com/profile/{}","urlMain":"https://www.lushstories.com/","username_claimed":"chris_brown"},"MMORPG Forum":{"errorType":"status_code","url":"https://forums.mmorpg.com/profile/{}","urlMain":"https://forums.mmorpg.com/","username_claimed":"goku"},"Mapify":{"errorType":"response_url","errorUrl":"https://mapify.travel/{}","url":"https://mapify.travel/{}","urlMain":"https://mapify.travel/","username_claimed":"mapify"},"Medium":{"errorMsg":"Nitro Type | Competitive Typing Game | Race Your Friends","errorType":"message","url":"https://www.nitrotype.com/racer/{}","urlMain":"https://www.nitrotype.com/","username_claimed":"jianclash"},"NotABug.org":{"errorType":"status_code","url":"https://notabug.org/{}","urlMain":"https://notabug.org/","urlProbe":"https://notabug.org/{}/followers","username_claimed":"red"},"Nyaa.si":{"errorType":"status_code","url":"https://nyaa.si/user/{}","urlMain":"https://nyaa.si/","username_claimed":"blue"},"OGUsers":{"errorType":"status_code","url":"https://ogu.gg/{}","urlMain":"https://ogu.gg/","username_claimed":"ogusers"},"OpenStreetMap":{"errorType":"status_code","regexCheck":"^[^.]*?$","url":"https://www.openstreetmap.org/user/{}","urlMain":"https://www.openstreetmap.org/","username_claimed":"blue"},"Opensource":{"errorType":"status_code","url":"https://opensource.com/users/{}","urlMain":"https://opensource.com/","username_claimed":"red"},"OurDJTalk":{"errorMsg":"The specified member cannot be found","errorType":"message","url":"https://ourdjtalk.com/members?username={}","urlMain":"https://ourdjtalk.com/","username_claimed":"steve"},"PCGamer":{"errorMsg":"The specified member cannot be found. Please enter a member's entire name.","errorType":"message","url":"https://forums.pcgamer.com/members/?username={}","urlMain":"https://pcgamer.com","username_claimed":"admin"},"PSNProfiles.com":{"errorType":"response_url","errorUrl":"https://psnprofiles.com/?psnId={}","url":"https://psnprofiles.com/{}","urlMain":"https://psnprofiles.com/","username_claimed":"blue"},"Packagist":{"errorType":"response_url","errorUrl":"https://packagist.org/search/?q={}&reason=vendor_not_found","url":"https://packagist.org/packages/{}/","urlMain":"https://packagist.org/","username_claimed":"psr"},"Pastebin":{"errorMsg":"Not Found (#404)","errorType":"message","url":"https://pastebin.com/u/{}","urlMain":"https://pastebin.com/","username_claimed":"blue"},"Patreon":{"errorType":"status_code","url":"https://www.patreon.com/{}","urlMain":"https://www.patreon.com/","username_claimed":"blue"},"PentesterLab":{"errorType":"status_code","regexCheck":"^[\\w]{4,30}$","url":"https://pentesterlab.com/profile/{}","urlMain":"https://pentesterlab.com/","username_claimed":"0day"},"PepperIT":{"errorMsg":"La pagina che hai provato a raggiungere non si trova qui","errorType":"message","url":"https://www.pepper.it/profile/{}/overview","urlMain":"https://www.pepper.it","username_claimed":"asoluinostrisca"},"Periscope":{"errorType":"status_code","url":"https://www.periscope.tv/{}/","urlMain":"https://www.periscope.tv/","username_claimed":"blue"},"Pinkbike":{"errorType":"status_code","regexCheck":"^[^.]*?$","url":"https://www.pinkbike.com/u/{}/","urlMain":"https://www.pinkbike.com/","username_claimed":"blue"},"PlayStore":{"errorType":"status_code","url":"https://play.google.com/store/apps/developer?id={}","urlMain":"https://play.google.com/store","username_claimed":"Facebook"},"PocketStars":{"errorMsg":"Join Your Favorite Adult Stars","errorType":"message","isNSFW":true,"url":"https://pocketstars.com/{}","urlMain":"https://pocketstars.com/","username_claimed":"hacker"},"Pokemon Showdown":{"errorType":"status_code","url":"https://pokemonshowdown.com/users/{}","urlMain":"https://pokemonshowdown.com","username_claimed":"blue"},"Polarsteps":{"errorType":"status_code","url":"https://polarsteps.com/{}","urlMain":"https://polarsteps.com/","urlProbe":"https://api.polarsteps.com/users/byusername/{}","username_claimed":"james"},"Polygon":{"errorType":"status_code","url":"https://www.polygon.com/users/{}","urlMain":"https://www.polygon.com/","username_claimed":"swiftstickler"},"Polymart":{"errorType":"response_url","errorUrl":"https://polymart.org/user/-1","url":"https://polymart.org/user/{}","urlMain":"https://polymart.org/","username_claimed":"craciu25yt"},"Pornhub":{"errorType":"status_code","isNSFW":true,"url":"https://pornhub.com/users/{}","urlMain":"https://pornhub.com/","username_claimed":"blue"},"ProductHunt":{"errorMsg":"We seem to have lost this page","errorType":"message","url":"https://www.producthunt.com/@{}","urlMain":"https://www.producthunt.com/","username_claimed":"jenny"},"PromoDJ":{"errorType":"status_code","url":"http://promodj.com/{}","urlMain":"http://promodj.com/","username_claimed":"blue"},"PyPi":{"errorType":"status_code","url":"https://pypi.org/user/{}","urlMain":"https://pypi.org","username_claimed":"Blue"},"Rajce.net":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.rajce.idnes.cz/","urlMain":"https://www.rajce.idnes.cz/","username_claimed":"blue"},"Rate Your Music":{"errorType":"status_code","url":"https://rateyourmusic.com/~{}","urlMain":"https://rateyourmusic.com/","username_claimed":"blue"},"Rclone Forum":{"errorType":"status_code","url":"https://forum.rclone.org/u/{}","urlMain":"https://forum.rclone.org/","username_claimed":"ncw"},"RedTube":{"errorType":"status_code","isNSFW":true,"url":"https://www.redtube.com/users/{}","urlMain":"https://www.redtube.com/","username_claimed":"hacker"},"Redbubble":{"errorType":"status_code","url":"https://www.redbubble.com/people/{}","urlMain":"https://www.redbubble.com/","username_claimed":"blue"},"Reddit":{"errorMsg":"Sorry, nobody on Reddit goes by that name.","errorType":"message","headers":{"accept-language":"en-US,en;q=0.9"},"url":"https://www.reddit.com/user/{}","urlMain":"https://www.reddit.com/","username_claimed":"blue"},"Reisefrage":{"errorType":"status_code","url":"https://www.reisefrage.net/nutzer/{}","urlMain":"https://www.reisefrage.net/","username_claimed":"reisefrage"},"Replit.com":{"errorType":"status_code","url":"https://replit.com/@{}","urlMain":"https://replit.com/","username_claimed":"blue"},"ResearchGate":{"errorType":"response_url","errorUrl":"https://www.researchgate.net/directory/profiles","regexCheck":"\\w+_\\w+","url":"https://www.researchgate.net/profile/{}","urlMain":"https://www.researchgate.net/","username_claimed":"John_Smith"},"ReverbNation":{"errorMsg":"Sorry, we couldn't find that page","errorType":"message","url":"https://www.reverbnation.com/{}","urlMain":"https://www.reverbnation.com/","username_claimed":"blue"},"Roblox":{"errorMsg":"Page cannot be found or no longer exists","errorType":"message","url":"https://www.roblox.com/user.aspx?username={}","urlMain":"https://www.roblox.com/","username_claimed":"bluewolfekiller"},"RocketTube":{"errorMsg":"OOPS! Houston, we have a problem","errorType":"message","isNSFW":true,"url":"https://www.rockettube.com/{}","urlMain":"https://www.rockettube.com/","username_claimed":"Tatteddick5600"},"RoyalCams":{"errorType":"status_code","url":"https://royalcams.com/profile/{}","urlMain":"https://royalcams.com","username_claimed":"asuna-black"},"RubyGems":{"errorType":"status_code","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]{1,40}","url":"https://rubygems.org/profiles/{}","urlMain":"https://rubygems.org/","username_claimed":"blue"},"Rumble":{"errorType":"status_code","url":"https://rumble.com/user/{}","urlMain":"https://rumble.com/","username_claimed":"John"},"RuneScape":{"errorMsg":"{\"error\":\"NO_PROFILE\",\"loggedIn\":\"false\"}","errorType":"message","regexCheck":"^(?! )[\\w -]{1,12}(?Telegram Messenger","If you have Telegram, you can contact TGx:Can't show details","errorType":"message","regexCheck":"^[A-Za-z0-9]{3,15}$","url":"https://torrentgalaxy.to/profile/{}","urlMain":"https://torrentgalaxy.to/","username_claimed":"GalaxyRG"},"TradingView":{"errorType":"status_code","request_method":"GET","url":"https://www.tradingview.com/u/{}/","urlMain":"https://www.tradingview.com/","username_claimed":"blue"},"Trakt":{"errorType":"status_code","regexCheck":"^[^.]*$","url":"https://www.trakt.tv/users/{}","urlMain":"https://www.trakt.tv/","username_claimed":"blue"},"TrashboxRU":{"errorType":"status_code","regexCheck":"^[A-Za-z0-9_-]{3,16}$","url":"https://trashbox.ru/users/{}","urlMain":"https://trashbox.ru/","username_claimed":"blue"},"Trawelling":{"errorType":"status_code","url":"https://traewelling.de/@{}","urlMain":"https://traewelling.de/","username_claimed":"lassestolley"},"Trello":{"errorMsg":"model not found","errorType":"message","url":"https://trello.com/{}","urlMain":"https://trello.com/","urlProbe":"https://trello.com/1/Members/{}","username_claimed":"blue"},"TryHackMe":{"errorMsg":"{\"success\":false}","errorType":"message","regexCheck":"^[a-zA-Z0-9.]{1,16}$","url":"https://tryhackme.com/p/{}","urlMain":"https://tryhackme.com/","urlProbe":"https://tryhackme.com/api/user/exist/{}","username_claimed":"ashu"},"Tuna":{"errorType":"status_code","regexCheck":"^[a-z0-9]{4,40}$","url":"https://tuna.voicemod.net/user/{}","urlMain":"https://tuna.voicemod.net/","username_claimed":"bob"},"Tweakers":{"errorType":"status_code","url":"https://tweakers.net/gallery/{}","urlMain":"https://tweakers.net","username_claimed":"femme"},"Twitch":{"errorType":"status_code","url":"https://www.twitch.tv/{}","urlMain":"https://www.twitch.tv/","urlProbe":"https://m.twitch.tv/{}","username_claimed":"jenny"},"Twitter":{"errorMsg":"
User ","errorType":"message","regexCheck":"^[a-zA-Z0-9_]{1,15}$","url":"https://x.com/{}","urlMain":"https://x.com/","urlProbe":"https://nitter.net/{}","username_claimed":"blue"},"Typeracer":{"errorMsg":"Profile Not Found","errorType":"message","url":"https://data.typeracer.com/pit/profile?user={}","urlMain":"https://typeracer.com","username_claimed":"blue"},"Ultimate-Guitar":{"errorType":"status_code","url":"https://ultimate-guitar.com/u/{}","urlMain":"https://ultimate-guitar.com/","username_claimed":"blue"},"Unsplash":{"errorType":"status_code","regexCheck":"^[a-z0-9_]{1,60}$","url":"https://unsplash.com/@{}","urlMain":"https://unsplash.com/","username_claimed":"jenny"},"Untappd":{"errorType":"status_code","url":"https://untappd.com/user/{}","urlMain":"https://untappd.com/","username_claimed":"untappd"},"VK":{"errorType":"response_url","errorUrl":"https://www.quora.com/profile/{}","url":"https://vk.com/{}","urlMain":"https://vk.com/","username_claimed":"brown"},"VSCO":{"errorType":"status_code","url":"https://vsco.co/{}","urlMain":"https://vsco.co/","username_claimed":"blue"},"Velomania":{"errorMsg":"Пользователь не зарегистрирован и не имеет профиля для просмотра.","errorType":"message","url":"https://forum.velomania.ru/member.php?username={}","urlMain":"https://forum.velomania.ru/","username_claimed":"red"},"Venmo":{"errorMsg":["Venmo | Page Not Found"],"errorType":"message","headers":{"Host":"account.venmo.com"},"url":"https://account.venmo.com/u/{}","urlMain":"https://venmo.com/","urlProbe":"https://test1.venmo.com/u/{}","username_claimed":"jenny"},"Vero":{"errorType":"status_code","request_method":"GET","url":"https://vero.co/{}","urlMain":"https://vero.co/","username_claimed":"blue"},"Vimeo":{"errorType":"status_code","url":"https://vimeo.com/{}","urlMain":"https://vimeo.com/","username_claimed":"blue"},"VirusTotal":{"errorType":"status_code","request_method":"GET","url":"https://www.virustotal.com/gui/user/{}","urlMain":"https://www.virustotal.com/","urlProbe":"https://www.virustotal.com/ui/users/{}/avatar","username_claimed":"blue"},"WICG Forum":{"errorType":"status_code","regexCheck":"^(?![.-])[a-zA-Z0-9_.-]{3,20}$","url":"https://discourse.wicg.io/u/{}/summary","urlMain":"https://discourse.wicg.io/","username_claimed":"stefano"},"Warrior Forum":{"errorType":"status_code","url":"https://www.warriorforum.com/members/{}.html","urlMain":"https://www.warriorforum.com/","username_claimed":"blue"},"Wattpad":{"errorType":"status_code","url":"https://www.wattpad.com/user/{}","urlMain":"https://www.wattpad.com/","urlProbe":"https://www.wattpad.com/api/v3/users/{}/","username_claimed":"Dogstho7951"},"WebNode":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.webnode.cz/","urlMain":"https://www.webnode.cz/","username_claimed":"radkabalcarova"},"Weblate":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@._-]{1,150}$","url":"https://hosted.weblate.org/user/{}/","urlMain":"https://hosted.weblate.org/","username_claimed":"adam"},"Weebly":{"errorType":"status_code","url":"https://{}.weebly.com/","urlMain":"https://weebly.com/","username_claimed":"blue"},"Wikidot":{"errorMsg":"User does not exist.","errorType":"message","url":"http://www.wikidot.com/user:info/{}","urlMain":"http://www.wikidot.com/","username_claimed":"blue"},"Wikipedia":{"errorMsg":"centralauth-admin-nonexistent:","errorType":"message","url":"https://en.wikipedia.org/wiki/Special:CentralAuth/{}?uselang=qqx","urlMain":"https://www.wikipedia.org/","username_claimed":"Hoadlck"},"Windy":{"errorType":"status_code","url":"https://community.windy.com/user/{}","urlMain":"https://windy.com/","username_claimed":"blue"},"Wix":{"errorType":"status_code","regexCheck":"^[a-zA-Z0-9@_-]$","url":"https://{}.wix.com","urlMain":"https://wix.com/","username_claimed":"support"},"WolframalphaForum":{"errorType":"status_code","url":"https://community.wolfram.com/web/{}/home","urlMain":"https://community.wolfram.com/","username_claimed":"unico"},"WordPress":{"errorType":"response_url","errorUrl":"wordpress.com/typo/?subdomain=","regexCheck":"^[a-zA-Z][a-zA-Z0-9_-]*$","url":"https://{}.wordpress.com/","urlMain":"https://wordpress.com","username_claimed":"blue"},"WordPressOrg":{"errorType":"response_url","errorUrl":"https://wordpress.org","url":"https://profiles.wordpress.org/{}/","urlMain":"https://wordpress.org/","username_claimed":"blue"},"Wordnik":{"errorMsg":"Page Not Found","errorType":"message","regexCheck":"^[a-zA-Z0-9_.+-]{1,40}$","url":"https://www.wordnik.com/users/{}","urlMain":"https://www.wordnik.com/","username_claimed":"blue"},"Wykop":{"errorType":"status_code","url":"https://www.wykop.pl/ludzie/{}","urlMain":"https://www.wykop.pl","username_claimed":"blue"},"Xbox Gamertag":{"errorType":"status_code","url":"https://xboxgamertag.com/search/{}","urlMain":"https://xboxgamertag.com/","username_claimed":"red"},"Xvideos":{"errorType":"status_code","isNSFW":true,"url":"https://xvideos.com/profiles/{}","urlMain":"https://xvideos.com/","username_claimed":"blue"},"YandexMusic":{"__comment__":"The first and third errorMsg relate to geo-restrictions and bot detection/captchas.","errorMsg":["Ошибка 404","Threads","errorType":"message","headers":{"Sec-Fetch-Mode":"navigate"},"url":"https://www.threads.net/@{}","urlMain":"https://www.threads.net/","username_claimed":"zuck"},"toster":{"errorType":"status_code","url":"https://www.toster.ru/user/{}/answers","urlMain":"https://www.toster.ru/","username_claimed":"adam"},"uid":{"errorType":"status_code","url":"http://uid.me/{}","urlMain":"https://uid.me/","username_claimed":"blue"},"wiki.vg":{"errorType":"status_code","url":"https://wiki.vg/User:{}","urlMain":"https://wiki.vg/","username_claimed":"Auri"},"xHamster":{"errorType":"status_code","isNSFW":true,"url":"https://xhamster.com/users/{}","urlMain":"https://xhamster.com","urlProbe":"https://xhamster.com/users/{}?old_browser=true","username_claimed":"blue"},"znanylekarz.pl":{"errorType":"status_code","url":"https://www.znanylekarz.pl/{}","urlMain":"https://znanylekarz.pl","username_claimed":"janusz-nowak"}} diff --git a/src/get_data.rs b/src/get_data.rs index c27edeb..f8cc74c 100644 --- a/src/get_data.rs +++ b/src/get_data.rs @@ -57,2799 +57,5 @@ pub async fn get_json_data(json_file: String) -> color_eyre::Result { /// the default sites to check for sherlock locally /// includes >400 websites and their error messages pub fn get_default_data() -> String { - r#" -{ - "$schema": "data.schema.json", - "1337x": { - "errorMsg": [ - "Error something went wrong.", - "404 Not Found" - ], - "errorType": "message", - "regexCheck": "^[A-Za-z0-9]{4,12}$", - "url": "https://www.1337x.to/user/{}/", - "urlMain": "https://www.1337x.to/", - "username_claimed": "FitGirl" - }, - "2Dimensions": { - "errorType": "status_code", - "url": "https://2Dimensions.com/a/{}", - "urlMain": "https://2Dimensions.com/", - "username_claimed": "blue" - }, - "3dnews": { - "errorMsg": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", - "errorType": "message", - "url": "http://forum.3dnews.ru/member.php?username={}", - "urlMain": "http://forum.3dnews.ru/", - "username_claimed": "red" - }, - "7Cups": { - "errorType": "status_code", - "url": "https://www.7cups.com/@{}", - "urlMain": "https://www.7cups.com/", - "username_claimed": "blue" - }, - "8tracks": { - "errorMsg": "This page has vanished", - "errorType": "message", - "url": "https://8tracks.com/{}", - "urlMain": "https://8tracks.com/", - "username_claimed": "blue" - }, - "9GAG": { - "errorType": "status_code", - "url": "https://www.9gag.com/u/{}", - "urlMain": "https://www.9gag.com/", - "username_claimed": "blue" - }, - "APClips": { - "errorMsg": "Amateur Porn Content Creators", - "errorType": "message", - "isNSFW": true, - "url": "https://apclips.com/{}", - "urlMain": "https://apclips.com/", - "username_claimed": "onlybbyraq" - }, - "About.me": { - "errorType": "status_code", - "url": "https://about.me/{}", - "urlMain": "https://about.me/", - "username_claimed": "blue" - }, - "Academia.edu": { - "errorType": "status_code", - "regexCheck": "^[^.]*$", - "url": "https://independent.academia.edu/{}", - "urlMain": "https://www.academia.edu/", - "username_claimed": "blue" - }, - "AdmireMe.Vip": { - "errorMsg": "Page Not Found", - "errorType": "message", - "isNSFW": true, - "url": "https://admireme.vip/{}", - "urlMain": "https://admireme.vip/", - "username_claimed": "DemiDevil" - }, - "Air Pilot Life": { - "errorMsg": "Oops! That page doesn\u2019t exist or is private", - "errorType": "message", - "url": "https://airlinepilot.life/u/{}", - "urlMain": "https://airlinepilot.life/", - "username_claimed": "chris" - }, - "Airbit": { - "errorType": "status_code", - "url": "https://airbit.com/{}", - "urlMain": "https://airbit.com/", - "username_claimed": "airbit" - }, - "Airliners": { - "errorType": "status_code", - "url": "https://www.airliners.net/user/{}/profile/photos", - "urlMain": "https://www.airliners.net/", - "username_claimed": "yushinlin" - }, - "All Things Worn": { - "errorMsg": "Sell Used Panties", - "errorType": "message", - "isNSFW": true, - "url": "https://www.allthingsworn.com/profile/{}", - "urlMain": "https://www.allthingsworn.com", - "username_claimed": "pink" - }, - "AllMyLinks": { - "errorMsg": "Not Found", - "errorType": "message", - "regexCheck": "^[a-z0-9][a-z0-9-]{2,32}$", - "url": "https://allmylinks.com/{}", - "urlMain": "https://allmylinks.com/", - "username_claimed": "blue" - }, - "Amino": { - "errorType": "status_code", - "url": "https://aminoapps.com/u/{}", - "urlMain": "https://aminoapps.com", - "username_claimed": "blue" - }, - "AniWorld": { - "errorMsg": "Dieses Profil ist nicht verf\u00fcgbar", - "errorType": "message", - "url": "https://aniworld.to/user/profil/{}", - "urlMain": "https://aniworld.to/", - "username_claimed": "blue" - }, - "Anilist": { - "errorType": "status_code", - "regexCheck": "^[A-Za-z0-9]{2,20}$", - "request_method": "POST", - "request_payload": { - "query": "query($name:String){User(name:$name){id}}", - "variables": { - "name": "{}" - } - }, - "url": "https://anilist.co/user/{}/", - "urlMain": "https://anilist.co/", - "urlProbe": "https://graphql.anilist.co/", - "username_claimed": "Josh" - }, - "Apple Developer": { - "errorType": "status_code", - "url": "https://developer.apple.com/forums/profile/{}", - "urlMain": "https://developer.apple.com", - "username_claimed": "lio24d" - }, - "Apple Discussions": { - "errorMsg": "The page you tried was not found. You may have used an outdated link or may have typed the address (URL) incorrectly.", - "errorType": "message", - "url": "https://discussions.apple.com/profile/{}", - "urlMain": "https://discussions.apple.com", - "username_claimed": "jason" - }, - "Archive of Our Own": { - "errorType": "status_code", - "regexCheck": "^[^.]*?$", - "url": "https://archiveofourown.org/users/{}", - "urlMain": "https://archiveofourown.org/", - "username_claimed": "test" - }, - "Archive.org": { - "__comment__": "'The resource could not be found' relates to archive downtime", - "errorMsg": [ - "could not fetch an account with user item identifier", - "The resource could not be found" - ], - "errorType": "message", - "url": "https://archive.org/details/@{}", - "urlMain": "https://archive.org", - "urlProbe": "https://archive.org/details/@{}?noscript=true", - "username_claimed": "blue" - }, - "ArtStation": { - "errorType": "status_code", - "url": "https://www.artstation.com/{}", - "urlMain": "https://www.artstation.com/", - "username_claimed": "Blue" - }, - "Asciinema": { - "errorType": "status_code", - "url": "https://asciinema.org/~{}", - "urlMain": "https://asciinema.org", - "username_claimed": "red" - }, - "Ask Fedora": { - "errorType": "status_code", - "url": "https://ask.fedoraproject.org/u/{}", - "urlMain": "https://ask.fedoraproject.org/", - "username_claimed": "red" - }, - "AskFM": { - "errorMsg": "Well, apparently not anymore.", - "errorType": "message", - "regexCheck": "^[a-zA-Z0-9_]{3,40}$", - "url": "https://ask.fm/{}", - "urlMain": "https://ask.fm/", - "username_claimed": "blue" - }, - "Audiojungle": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9_]+$", - "url": "https://audiojungle.net/user/{}", - "urlMain": "https://audiojungle.net/", - "username_claimed": "blue" - }, - "Autofrage": { - "errorType": "status_code", - "url": "https://www.autofrage.net/nutzer/{}", - "urlMain": "https://www.autofrage.net/", - "username_claimed": "autofrage" - }, - "Avizo": { - "errorType": "response_url", - "errorUrl": "https://www.avizo.cz/", - "url": "https://www.avizo.cz/{}/", - "urlMain": "https://www.avizo.cz/", - "username_claimed": "blue" - }, - "BLIP.fm": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9_]{1,30}$", - "url": "https://blip.fm/{}", - "urlMain": "https://blip.fm/", - "username_claimed": "blue" - }, - "BOOTH": { - "errorType": "response_url", - "errorUrl": "https://booth.pm/", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.booth.pm/", - "urlMain": "https://booth.pm/", - "username_claimed": "blue" - }, - "Bandcamp": { - "errorType": "status_code", - "url": "https://www.bandcamp.com/{}", - "urlMain": "https://www.bandcamp.com/", - "username_claimed": "blue" - }, - "Bazar.cz": { - "errorType": "response_url", - "errorUrl": "https://www.bazar.cz/error404.aspx", - "url": "https://www.bazar.cz/{}/", - "urlMain": "https://www.bazar.cz/", - "username_claimed": "pianina" - }, - "Behance": { - "errorType": "status_code", - "url": "https://www.behance.net/{}", - "urlMain": "https://www.behance.net/", - "username_claimed": "blue" - }, - "Bezuzyteczna": { - "errorType": "status_code", - "url": "https://bezuzyteczna.pl/uzytkownicy/{}", - "urlMain": "https://bezuzyteczna.pl", - "username_claimed": "Jackson" - }, - "BiggerPockets": { - "errorType": "status_code", - "url": "https://www.biggerpockets.com/users/{}", - "urlMain": "https://www.biggerpockets.com/", - "username_claimed": "blue" - }, - "Bikemap": { - "errorType": "status_code", - "url": "https://www.bikemap.net/en/u/{}/routes/created/", - "urlMain": "https://www.bikemap.net/", - "username_claimed": "bikemap" - }, - "BioHacking": { - "errorType": "status_code", - "url": "https://forum.dangerousthings.com/u/{}", - "urlMain": "https://forum.dangerousthings.com/", - "username_claimed": "blue" - }, - "BitBucket": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9-_]{1,30}$", - "url": "https://bitbucket.org/{}/", - "urlMain": "https://bitbucket.org/", - "username_claimed": "white" - }, - "Bitwarden Forum": { - "errorType": "status_code", - "regexCheck": "^(?![.-])[a-zA-Z0-9_.-]{3,20}$", - "url": "https://community.bitwarden.com/u/{}/summary", - "urlMain": "https://bitwarden.com/", - "username_claimed": "blue" - }, - "Blipfoto": { - "errorType": "status_code", - "url": "https://www.blipfoto.com/{}", - "urlMain": "https://www.blipfoto.com/", - "username_claimed": "blue" - }, - "Blogger": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://{}.blogspot.com", - "urlMain": "https://www.blogger.com/", - "username_claimed": "blue" - }, - "BodyBuilding": { - "errorType": "response_url", - "errorUrl": "https://bodyspace.bodybuilding.com/", - "url": "https://bodyspace.bodybuilding.com/{}", - "urlMain": "https://bodyspace.bodybuilding.com/", - "username_claimed": "blue" - }, - "BongaCams": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://pt.bongacams.com/profile/{}", - "urlMain": "https://pt.bongacams.com", - "username_claimed": "asuna-black" - }, - "Bookcrossing": { - "errorType": "status_code", - "url": "https://www.bookcrossing.com/mybookshelf/{}/", - "urlMain": "https://www.bookcrossing.com/", - "username_claimed": "blue" - }, - "BraveCommunity": { - "errorType": "status_code", - "url": "https://community.brave.com/u/{}/", - "urlMain": "https://community.brave.com/", - "username_claimed": "blue" - }, - "BugCrowd": { - "errorType": "status_code", - "url": "https://bugcrowd.com/{}", - "urlMain": "https://bugcrowd.com/", - "username_claimed": "ppfeister" - }, - "BuyMeACoffee": { - "errorType": "status_code", - "regexCheck": "[a-zA-Z0-9]{3,15}", - "url": "https://buymeacoff.ee/{}", - "urlMain": "https://www.buymeacoffee.com/", - "urlProbe": "https://www.buymeacoffee.com/{}", - "username_claimed": "red" - }, - "BuzzFeed": { - "errorType": "status_code", - "url": "https://buzzfeed.com/{}", - "urlMain": "https://buzzfeed.com/", - "username_claimed": "blue" - }, - "CGTrader": { - "errorType": "status_code", - "regexCheck": "^[^.]*?$", - "url": "https://www.cgtrader.com/{}", - "urlMain": "https://www.cgtrader.com", - "username_claimed": "blue" - }, - "CNET": { - "errorType": "status_code", - "regexCheck": "^[a-z].*$", - "url": "https://www.cnet.com/profiles/{}/", - "urlMain": "https://www.cnet.com/", - "username_claimed": "melliott" - }, - "CSSBattle": { - "errorType": "status_code", - "url": "https://cssbattle.dev/player/{}", - "urlMain": "https://cssbattle.dev", - "username_claimed": "beo" - }, - "CTAN": { - "errorType": "status_code", - "url": "https://ctan.org/author/{}", - "urlMain": "https://ctan.org/", - "username_claimed": "briggs" - }, - "Caddy Community": { - "errorType": "status_code", - "url": "https://caddy.community/u/{}/summary", - "urlMain": "https://caddy.community/", - "username_claimed": "taako_magnusen" - }, - "Car Talk Community": { - "errorType": "status_code", - "url": "https://community.cartalk.com/u/{}/summary", - "urlMain": "https://community.cartalk.com/", - "username_claimed": "always_fixing" - }, - "Carbonmade": { - "errorType": "response_url", - "errorUrl": "https://carbonmade.com/fourohfour?domain={}.carbonmade.com", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.carbonmade.com", - "urlMain": "https://carbonmade.com/", - "username_claimed": "jenny" - }, - "Career.habr": { - "errorMsg": "

\u041e\u0448\u0438\u0431\u043a\u0430 404

", - "errorType": "message", - "url": "https://career.habr.com/{}", - "urlMain": "https://career.habr.com/", - "username_claimed": "blue" - }, - "Championat": { - "errorType": "status_code", - "url": "https://www.championat.com/user/{}", - "urlMain": "https://www.championat.com/", - "username_claimed": "blue" - }, - "Chaos": { - "errorType": "status_code", - "url": "https://chaos.social/@{}", - "urlMain": "https://chaos.social/", - "username_claimed": "ordnung" - }, - "Chatujme.cz": { - "errorMsg": "Neexistujic\u00ed profil", - "errorType": "message", - "regexCheck": "^[a-zA-Z][a-zA-Z1-9_-]*$", - "url": "https://profil.chatujme.cz/{}", - "urlMain": "https://chatujme.cz/", - "username_claimed": "david" - }, - "ChaturBate": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://chaturbate.com/{}", - "urlMain": "https://chaturbate.com", - "username_claimed": "cute18cute" - }, - "Chess": { - "errorMsg": "Username is valid", - "errorType": "message", - "regexCheck": "^[a-z1-9]{3,25}$", - "url": "https://www.chess.com/member/{}", - "urlMain": "https://www.chess.com/", - "urlProbe": "https://www.chess.com/callback/user/valid?username={}", - "username_claimed": "blue" - }, - "Choice Community": { - "errorType": "status_code", - "url": "https://choice.community/u/{}/summary", - "urlMain": "https://choice.community/", - "username_claimed": "gordon" - }, - "Clapper": { - "errorType": "status_code", - "url": "https://clapperapp.com/{}", - "urlMain": "https://clapperapp.com/", - "username_claimed": "blue" - }, - "CloudflareCommunity": { - "errorType": "status_code", - "url": "https://community.cloudflare.com/u/{}", - "urlMain": "https://community.cloudflare.com/", - "username_claimed": "blue" - }, - "Clozemaster": { - "errorMsg": "Oh no! Player not found.", - "errorType": "message", - "url": "https://www.clozemaster.com/players/{}", - "urlMain": "https://www.clozemaster.com", - "username_claimed": "green" - }, - "Clubhouse": { - "errorType": "status_code", - "url": "https://www.clubhouse.com/@{}", - "urlMain": "https://www.clubhouse.com", - "username_claimed": "waniathar" - }, - "Code Snippet Wiki": { - "errorMsg": "This user has not filled out their profile page yet", - "errorType": "message", - "url": "https://codesnippets.fandom.com/wiki/User:{}", - "urlMain": "https://codesnippets.fandom.com", - "username_claimed": "bob" - }, - "Codeberg": { - "errorType": "status_code", - "url": "https://codeberg.org/{}", - "urlMain": "https://codeberg.org/", - "username_claimed": "blue" - }, - "Codecademy": { - "errorMsg": "This profile could not be found", - "errorType": "message", - "url": "https://www.codecademy.com/profiles/{}", - "urlMain": "https://www.codecademy.com/", - "username_claimed": "blue" - }, - "Codechef": { - "errorType": "response_url", - "errorUrl": "https://www.codechef.com/", - "url": "https://www.codechef.com/users/{}", - "urlMain": "https://www.codechef.com/", - "username_claimed": "blue" - }, - "Codeforces": { - "errorType": "status_code", - "url": "https://codeforces.com/profile/{}", - "urlMain": "https://codeforces.com/", - "urlProbe": "https://codeforces.com/api/user.info?handles={}", - "username_claimed": "tourist" - }, - "Codepen": { - "errorType": "status_code", - "url": "https://codepen.io/{}", - "urlMain": "https://codepen.io/", - "username_claimed": "blue" - }, - "Coders Rank": { - "errorMsg": "not a registered member", - "errorType": "message", - "regexCheck": "^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$", - "url": "https://profile.codersrank.io/user/{}/", - "urlMain": "https://codersrank.io/", - "username_claimed": "rootkit7628" - }, - "Coderwall": { - "errorType": "status_code", - "url": "https://coderwall.com/{}", - "urlMain": "https://coderwall.com", - "username_claimed": "hacker" - }, - "Codewars": { - "errorType": "status_code", - "url": "https://www.codewars.com/users/{}", - "urlMain": "https://www.codewars.com", - "username_claimed": "example" - }, - "Coinvote": { - "errorType": "status_code", - "url": "https://coinvote.cc/profile/{}", - "urlMain": "https://coinvote.cc/", - "username_claimed": "blue" - }, - "ColourLovers": { - "errorType": "status_code", - "url": "https://www.colourlovers.com/lover/{}", - "urlMain": "https://www.colourlovers.com/", - "username_claimed": "blue" - }, - "Contently": { - "errorType": "response_url", - "errorUrl": "https://contently.com", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://{}.contently.com/", - "urlMain": "https://contently.com/", - "username_claimed": "jordanteicher" - }, - "Coroflot": { - "errorType": "status_code", - "url": "https://www.coroflot.com/{}", - "urlMain": "https://coroflot.com/", - "username_claimed": "blue" - }, - "Cracked": { - "errorType": "response_url", - "errorUrl": "https://www.cracked.com/", - "url": "https://www.cracked.com/members/{}/", - "urlMain": "https://www.cracked.com/", - "username_claimed": "blue" - }, - "Crevado": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.crevado.com", - "urlMain": "https://crevado.com/", - "username_claimed": "blue" - }, - "Crowdin": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9._-]{2,255}$", - "url": "https://crowdin.com/profile/{}", - "urlMain": "https://crowdin.com/", - "username_claimed": "blue" - }, - "Cryptomator Forum": { - "errorType": "status_code", - "url": "https://community.cryptomator.org/u/{}", - "urlMain": "https://community.cryptomator.org/", - "username_claimed": "michael" - }, - "Cults3D": { - "errorMsg": "Oh dear, this page is not working!", - "errorType": "message", - "url": "https://cults3d.com/en/users/{}/creations", - "urlMain": "https://cults3d.com/en", - "username_claimed": "brown" - }, - "CyberDefenders": { - "errorMsg": "Blue Team Training for SOC analysts and DFIR - CyberDefenders", - "errorType": "message", - "regexCheck": "^[^\\/:*?\"<>|@]{3,50}$", - "request_method": "GET", - "url": "https://cyberdefenders.org/p/{}", - "urlMain": "https://cyberdefenders.org/", - "username_claimed": "mlohn" - }, - "DEV Community": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://dev.to/{}", - "urlMain": "https://dev.to/", - "username_claimed": "blue" - }, - "DMOJ": { - "errorMsg": "No such user", - "errorType": "message", - "url": "https://dmoj.ca/user/{}", - "urlMain": "https://dmoj.ca/", - "username_claimed": "junferno" - }, - "DailyMotion": { - "errorType": "status_code", - "url": "https://www.dailymotion.com/{}", - "urlMain": "https://www.dailymotion.com/", - "username_claimed": "blue" - }, - "Dealabs": { - "errorMsg": "La page que vous essayez", - "errorType": "message", - "regexCheck": "[a-z0-9]{4,16}", - "url": "https://www.dealabs.com/profile/{}", - "urlMain": "https://www.dealabs.com/", - "username_claimed": "blue" - }, - "DeviantART": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://{}.deviantart.com", - "urlMain": "https://deviantart.com", - "username_claimed": "blue" - }, - "Discogs": { - "errorType": "status_code", - "url": "https://www.discogs.com/user/{}", - "urlMain": "https://www.discogs.com/", - "username_claimed": "blue" - }, - "Discord": { - "errorType": "message", - "url": "https://discord.com", - "urlMain": "https://discord.com/", - "urlProbe": "https://discord.com/api/v9/unique-username/username-attempt-unauthed", - "errorMsg": [ - "{\"taken\":false}", - "The resource is being rate limited" - ], - "request_method": "POST", - "request_payload": { - "username": "{}" - }, - "headers": { - "Content-Type": "application/json" - }, - "username_claimed": "blue" - }, - "Discuss.Elastic.co": { - "errorType": "status_code", - "url": "https://discuss.elastic.co/u/{}", - "urlMain": "https://discuss.elastic.co/", - "username_claimed": "blue" - }, - "Disqus": { - "errorType": "status_code", - "url": "https://disqus.com/{}", - "urlMain": "https://disqus.com/", - "username_claimed": "blue" - }, - "Docker Hub": { - "errorType": "status_code", - "url": "https://hub.docker.com/u/{}/", - "urlMain": "https://hub.docker.com/", - "urlProbe": "https://hub.docker.com/v2/users/{}/", - "username_claimed": "blue" - }, - "Dribbble": { - "errorMsg": "Whoops, that page is gone.", - "errorType": "message", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://dribbble.com/{}", - "urlMain": "https://dribbble.com/", - "username_claimed": "blue" - }, - "Duolingo": { - "errorMsg": "{\"users\":[]}", - "errorType": "message", - "headers": { - "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0" - }, - "url": "https://www.duolingo.com/profile/{}", - "urlMain": "https://duolingo.com/", - "urlProbe": "https://www.duolingo.com/2017-06-30/users?username={}", - "username_claimed": "blue" - }, - "Eintracht Frankfurt Forum": { - "errorType": "status_code", - "regexCheck": "^[^.]*?$", - "url": "https://community.eintracht.de/fans/{}", - "urlMain": "https://community.eintracht.de/", - "username_claimed": "mmammu" - }, - "Envato Forum": { - "errorType": "status_code", - "url": "https://forums.envato.com/u/{}", - "urlMain": "https://forums.envato.com/", - "username_claimed": "enabled" - }, - "Erome": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://www.erome.com/{}", - "urlMain": "https://www.erome.com/", - "username_claimed": "bob" - }, - "Exposure": { - "errorType": "status_code", - "url": "https://{}.exposure.co/", - "urlMain": "https://exposure.co/", - "username_claimed": "jonasjacobsson" - }, - "EyeEm": { - "errorType": "status_code", - "url": "https://www.eyeem.com/u/{}", - "urlMain": "https://www.eyeem.com/", - "username_claimed": "blue" - }, - "F3.cool": { - "errorType": "status_code", - "url": "https://f3.cool/{}/", - "urlMain": "https://f3.cool/", - "username_claimed": "blue" - }, - "Fameswap": { - "errorType": "status_code", - "url": "https://fameswap.com/user/{}", - "urlMain": "https://fameswap.com/", - "username_claimed": "fameswap" - }, - "Fandom": { - "errorType": "status_code", - "url": "https://www.fandom.com/u/{}", - "urlMain": "https://www.fandom.com/", - "username_claimed": "Jungypoo" - }, - "Finanzfrage": { - "errorType": "status_code", - "url": "https://www.finanzfrage.net/nutzer/{}", - "urlMain": "https://www.finanzfrage.net/", - "username_claimed": "finanzfrage" - }, - "Fiverr": { - "errorMsg": "\"status\":\"success\"", - "errorType": "message", - "regexCheck": "^[A-Za-z][A-Za-z\\d_]{5,14}$", - "request_method": "POST", - "request_payload": { - "username": "{}" - }, - "url": "https://www.fiverr.com/{}", - "urlMain": "https://www.fiverr.com/", - "urlProbe": "https://www.fiverr.com/validate_username", - "username_claimed": "blueman" - }, - "Flickr": { - "errorType": "status_code", - "url": "https://www.flickr.com/people/{}", - "urlMain": "https://www.flickr.com/", - "username_claimed": "blue" - }, - "Flightradar24": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9_]{3,20}$", - "url": "https://my.flightradar24.com/{}", - "urlMain": "https://www.flightradar24.com/", - "username_claimed": "jebbrooks" - }, - "Flipboard": { - "errorType": "status_code", - "regexCheck": "^([a-zA-Z0-9_]){1,15}$", - "url": "https://flipboard.com/@{}", - "urlMain": "https://flipboard.com/", - "username_claimed": "blue" - }, - "Football": { - "errorMsg": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d", - "errorType": "message", - "url": "https://www.rusfootball.info/user/{}/", - "urlMain": "https://www.rusfootball.info/", - "username_claimed": "solo87" - }, - "FortniteTracker": { - "errorType": "status_code", - "url": "https://fortnitetracker.com/profile/all/{}", - "urlMain": "https://fortnitetracker.com/challenges", - "username_claimed": "blue" - }, - "Forum Ophilia": { - "errorMsg": "that user does not exist", - "errorType": "message", - "isNSFW": true, - "url": "https://www.forumophilia.com/profile.php?mode=viewprofile&u={}", - "urlMain": "https://www.forumophilia.com/", - "username_claimed": "bob" - }, - "Fosstodon": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9_]{1,30}$", - "url": "https://fosstodon.org/@{}", - "urlMain": "https://fosstodon.org/", - "username_claimed": "blue" - }, - "Freelance.habr": { - "errorMsg": "
", - "errorType": "message", - "regexCheck": "^((?!\\.).)*$", - "url": "https://freelance.habr.com/freelancers/{}", - "urlMain": "https://freelance.habr.com/", - "username_claimed": "adam" - }, - "Freelancer": { - "errorMsg": "\"users\":{}", - "errorType": "message", - "url": "https://www.freelancer.com/u/{}", - "urlMain": "https://www.freelancer.com/", - "urlProbe": "https://www.freelancer.com/api/users/0.1/users?usernames%5B%5D={}&compact=true", - "username_claimed": "red0xff" - }, - "Freesound": { - "errorType": "status_code", - "url": "https://freesound.org/people/{}/", - "urlMain": "https://freesound.org/", - "username_claimed": "blue" - }, - "GNOME VCS": { - "errorType": "response_url", - "errorUrl": "https://gitlab.gnome.org/{}", - "regexCheck": "^(?!-)[a-zA-Z0-9_.-]{2,255}(?Web3\u2019s Largest Ethical Hackers Community | HackenProof", - "errorType": "message", - "regexCheck": "^[\\w-]{,34}$", - "url": "https://hackenproof.com/hackers/{}", - "urlMain": "https://hackenproof.com/", - "username_claimed": "blazezaria" - }, - "HackerEarth": { - "errorMsg": "404. URL not found.", - "errorType": "message", - "url": "https://hackerearth.com/@{}", - "urlMain": "https://hackerearth.com/", - "username_claimed": "naveennamani877" - }, - "HackerNews": { - "__comment__": "First errMsg invalid, second errMsg rate limited. Not ideal. Adjust for better rate limit filtering.", - "errorMsg": [ - "No such user.", - "Sorry." - ], - "errorType": "message", - "url": "https://news.ycombinator.com/user?id={}", - "urlMain": "https://news.ycombinator.com/", - "username_claimed": "blue" - }, - "HackerOne": { - "errorMsg": "Page not found", - "errorType": "message", - "url": "https://hackerone.com/{}", - "urlMain": "https://hackerone.com/", - "username_claimed": "stok" - }, - "HackerRank": { - "errorMsg": "Something went wrong", - "errorType": "message", - "regexCheck": "^[^.]*?$", - "url": "https://hackerrank.com/{}", - "urlMain": "https://hackerrank.com/", - "username_claimed": "satznova" - }, - "Harvard Scholar": { - "errorType": "status_code", - "url": "https://scholar.harvard.edu/{}", - "urlMain": "https://scholar.harvard.edu/", - "username_claimed": "ousmanekane" - }, - "Hashnode": { - "errorType": "status_code", - "url": "https://hashnode.com/@{}", - "urlMain": "https://hashnode.com", - "username_claimed": "blue" - }, - "Heavy-R": { - "errorMsg": "Channel not found", - "errorType": "message", - "isNSFW": true, - "url": "https://www.heavy-r.com/user/{}", - "urlMain": "https://www.heavy-r.com/", - "username_claimed": "kilroy222" - }, - "Holopin": { - "errorMsg": "true", - "errorType": "message", - "request_method": "POST", - "request_payload": { - "username": "{}" - }, - "url": "https://holopin.io/@{}", - "urlMain": "https://holopin.io", - "urlProbe": "https://www.holopin.io/api/auth/username", - "username_claimed": "red" - }, - "Houzz": { - "errorMsg": "The page you requested was not found.", - "errorType": "message", - "url": "https://houzz.com/user/{}", - "urlMain": "https://houzz.com/", - "username_claimed": "blue" - }, - "HubPages": { - "errorType": "status_code", - "url": "https://hubpages.com/@{}", - "urlMain": "https://hubpages.com/", - "username_claimed": "blue" - }, - "Hubski": { - "errorMsg": "No such user", - "errorType": "message", - "url": "https://hubski.com/user/{}", - "urlMain": "https://hubski.com/", - "username_claimed": "blue" - }, - "HudsonRock": { - "errorMsg": "No results", - "errorType": "message", - "url": "https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-username?username={}", - "urlMain": "https://hudsonrock.com", - "username_claimed": "testadmin" - }, - "ICQ": { - "errorType": "status_code", - "url": "https://icq.im/{}/en", - "urlMain": "https://icq.com/", - "username_claimed": "Micheal" - }, - "IFTTT": { - "errorType": "status_code", - "regexCheck": "^[A-Za-z0-9]{3,35}$", - "url": "https://www.ifttt.com/p/{}", - "urlMain": "https://www.ifttt.com/", - "username_claimed": "blue" - }, - "IRC-Galleria": { - "errorType": "response_url", - "errorUrl": "https://irc-galleria.net/users/search?username={}", - "url": "https://irc-galleria.net/user/{}", - "urlMain": "https://irc-galleria.net/", - "username_claimed": "appas" - }, - "Icons8 Community": { - "errorType": "status_code", - "url": "https://community.icons8.com/u/{}/summary", - "urlMain": "https://community.icons8.com/", - "username_claimed": "thefourCraft" - }, - "Image Fap": { - "errorMsg": "Not found", - "errorType": "message", - "isNSFW": true, - "url": "https://www.imagefap.com/profile/{}", - "urlMain": "https://www.imagefap.com/", - "username_claimed": "blue" - }, - "ImgUp.cz": { - "errorType": "status_code", - "url": "https://imgup.cz/{}", - "urlMain": "https://imgup.cz/", - "username_claimed": "adam" - }, - "Imgur": { - "errorType": "status_code", - "url": "https://imgur.com/user/{}", - "urlMain": "https://imgur.com/", - "urlProbe": "https://api.imgur.com/account/v1/accounts/{}?client_id=546c25a59c58ad7", - "username_claimed": "blue" - }, - "Instagram": { - "errorType": "status_code", - "url": "https://instagram.com/{}", - "urlMain": "https://instagram.com/", - "urlProbe": "https://www.picuki.com/profile/{}", - "username_claimed": "instagram" - }, - "Instructables": { - "errorType": "status_code", - "url": "https://www.instructables.com/member/{}", - "urlMain": "https://www.instructables.com/", - "urlProbe": "https://www.instructables.com/json-api/showAuthorExists?screenName={}", - "username_claimed": "blue" - }, - "Intigriti": { - "errorType": "status_code", - "regexCheck": "[a-z0-9_]{1,25}", - "request_method": "GET", - "url": "https://app.intigriti.com/profile/{}", - "urlMain": "https://app.intigriti.com", - "urlProbe": "https://api.intigriti.com/user/public/profile/{}", - "username_claimed": "blue" - }, - "Ionic Forum": { - "errorType": "status_code", - "url": "https://forum.ionicframework.com/u/{}", - "urlMain": "https://forum.ionicframework.com/", - "username_claimed": "theblue222" - }, - "Issuu": { - "errorType": "status_code", - "url": "https://issuu.com/{}", - "urlMain": "https://issuu.com/", - "username_claimed": "jenny" - }, - "Itch.io": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.itch.io/", - "urlMain": "https://itch.io/", - "username_claimed": "blue" - }, - "Itemfix": { - "errorMsg": "ItemFix - Channel: ", - "errorType": "message", - "url": "https://www.itemfix.com/c/{}", - "urlMain": "https://www.itemfix.com/", - "username_claimed": "blue" - }, - "Jellyfin Weblate": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@._-]{1,150}$", - "url": "https://translate.jellyfin.org/user/{}/", - "urlMain": "https://translate.jellyfin.org/", - "username_claimed": "EraYaN" - }, - "Jimdo": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.jimdosite.com", - "urlMain": "https://jimdosite.com/", - "username_claimed": "jenny" - }, - "Joplin Forum": { - "errorType": "status_code", - "url": "https://discourse.joplinapp.org/u/{}", - "urlMain": "https://discourse.joplinapp.org/", - "username_claimed": "laurent" - }, - "KEAKR": { - "errorType": "status_code", - "url": "https://www.keakr.com/en/profile/{}", - "urlMain": "https://www.keakr.com/", - "username_claimed": "beats" - }, - "Kaggle": { - "errorType": "status_code", - "url": "https://www.kaggle.com/{}", - "urlMain": "https://www.kaggle.com/", - "username_claimed": "dansbecker" - }, - "Keybase": { - "errorType": "status_code", - "url": "https://keybase.io/{}", - "urlMain": "https://keybase.io/", - "username_claimed": "blue" - }, - "Kick": { - "__comment__": "Cloudflare. Only viable when proxied.", - "errorMsg": "Not Found", - "errorType": "message", - "url": "https://kick.com/{}", - "urlMain": "https://kick.com/", - "urlProbe": "https://kick.com/api/v2/channels/{}", - "username_claimed": "blue" - }, - "Kik": { - "errorMsg": "The page you requested was not found", - "errorType": "message", - "url": "https://kik.me/{}", - "urlMain": "http://kik.me/", - "urlProbe": "https://ws2.kik.com/user/{}", - "username_claimed": "blue" - }, - "Kongregate": { - "errorType": "status_code", - "headers": { - "Accept": "text/html", - "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0" - }, - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://www.kongregate.com/accounts/{}", - "urlMain": "https://www.kongregate.com/", - "username_claimed": "blue" - }, - "LOR": { - "errorType": "status_code", - "url": "https://www.linux.org.ru/people/{}/profile", - "urlMain": "https://linux.org.ru/", - "username_claimed": "red" - }, - "Launchpad": { - "errorType": "status_code", - "url": "https://launchpad.net/~{}", - "urlMain": "https://launchpad.net/", - "username_claimed": "blue" - }, - "LeetCode": { - "errorType": "status_code", - "url": "https://leetcode.com/{}", - "urlMain": "https://leetcode.com/", - "username_claimed": "blue" - }, - "LessWrong": { - "errorType": "status_code", - "url": "https://www.lesswrong.com/users/@{}", - "urlMain": "https://www.lesswrong.com/", - "username_claimed": "blue" - }, - "Letterboxd": { - "errorMsg": "Sorry, we can\u2019t find the page you\u2019ve requested.", - "errorType": "message", - "url": "https://letterboxd.com/{}", - "urlMain": "https://letterboxd.com/", - "username_claimed": "blue" - }, - "LibraryThing": { - "errorMsg": "Catalog your books online", - "errorType": "message", - "url": "https://www.librarything.com/profile/{}", - "urlMain": "https://www.librarything.com/", - "username_claimed": "blue" - }, - "Lichess": { - "errorMsg": "Page not found!", - "errorType": "message", - "url": "https://lichess.org/@/{}", - "urlMain": "https://lichess.org", - "username_claimed": "blue" - }, - "LinkedIn": { - "errorType": "status_code", - "headers": { - "User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36" - }, - "regexCheck": "^[a-zA-Z0-9]{3,100}$", - "request_method": "GET", - "url": "https://linkedin.com/in/{}", - "urlMain": "https://linkedin.com", - "username_claimed": "paulpfeister" - }, - "Linktree": { - "errorMsg": "\"statusCode\":404", - "errorType": "message", - "regexCheck": "^[\\w\\.]{2,30}$", - "url": "https://linktr.ee/{}", - "urlMain": "https://linktr.ee/", - "username_claimed": "anne" - }, - "Listed": { - "errorType": "response_url", - "errorUrl": "https://listed.to/@{}", - "url": "https://listed.to/@{}", - "urlMain": "https://listed.to/", - "username_claimed": "listed" - }, - "LiveJournal": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://{}.livejournal.com", - "urlMain": "https://www.livejournal.com/", - "username_claimed": "blue" - }, - "Lobsters": { - "errorType": "status_code", - "regexCheck": "[A-Za-z0-9][A-Za-z0-9_-]{0,24}", - "url": "https://lobste.rs/u/{}", - "urlMain": "https://lobste.rs/", - "username_claimed": "jcs" - }, - "LottieFiles": { - "errorType": "status_code", - "url": "https://lottiefiles.com/{}", - "urlMain": "https://lottiefiles.com/", - "username_claimed": "lottiefiles" - }, - "LushStories": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://www.lushstories.com/profile/{}", - "urlMain": "https://www.lushstories.com/", - "username_claimed": "chris_brown" - }, - "MMORPG Forum": { - "errorType": "status_code", - "url": "https://forums.mmorpg.com/profile/{}", - "urlMain": "https://forums.mmorpg.com/", - "username_claimed": "goku" - }, - "Mapify": { - "errorType": "response_url", - "errorUrl": "https://mapify.travel/{}", - "url": "https://mapify.travel/{}", - "urlMain": "https://mapify.travel/", - "username_claimed": "mapify" - }, - "Medium": { - "errorMsg": "Nitro Type | Competitive Typing Game | Race Your Friends", - "errorType": "message", - "url": "https://www.nitrotype.com/racer/{}", - "urlMain": "https://www.nitrotype.com/", - "username_claimed": "jianclash" - }, - "NotABug.org": { - "errorType": "status_code", - "url": "https://notabug.org/{}", - "urlMain": "https://notabug.org/", - "urlProbe": "https://notabug.org/{}/followers", - "username_claimed": "red" - }, - "Nyaa.si": { - "errorType": "status_code", - "url": "https://nyaa.si/user/{}", - "urlMain": "https://nyaa.si/", - "username_claimed": "blue" - }, - "OGUsers": { - "errorType": "status_code", - "url": "https://ogu.gg/{}", - "urlMain": "https://ogu.gg/", - "username_claimed": "ogusers" - }, - "OpenStreetMap": { - "errorType": "status_code", - "regexCheck": "^[^.]*?$", - "url": "https://www.openstreetmap.org/user/{}", - "urlMain": "https://www.openstreetmap.org/", - "username_claimed": "blue" - }, - "Opensource": { - "errorType": "status_code", - "url": "https://opensource.com/users/{}", - "urlMain": "https://opensource.com/", - "username_claimed": "red" - }, - "OurDJTalk": { - "errorMsg": "The specified member cannot be found", - "errorType": "message", - "url": "https://ourdjtalk.com/members?username={}", - "urlMain": "https://ourdjtalk.com/", - "username_claimed": "steve" - }, - "PCGamer": { - "errorMsg": "The specified member cannot be found. Please enter a member's entire name.", - "errorType": "message", - "url": "https://forums.pcgamer.com/members/?username={}", - "urlMain": "https://pcgamer.com", - "username_claimed": "admin" - }, - "PSNProfiles.com": { - "errorType": "response_url", - "errorUrl": "https://psnprofiles.com/?psnId={}", - "url": "https://psnprofiles.com/{}", - "urlMain": "https://psnprofiles.com/", - "username_claimed": "blue" - }, - "Packagist": { - "errorType": "response_url", - "errorUrl": "https://packagist.org/search/?q={}&reason=vendor_not_found", - "url": "https://packagist.org/packages/{}/", - "urlMain": "https://packagist.org/", - "username_claimed": "psr" - }, - "Pastebin": { - "errorMsg": "Not Found (#404)", - "errorType": "message", - "url": "https://pastebin.com/u/{}", - "urlMain": "https://pastebin.com/", - "username_claimed": "blue" - }, - "Patreon": { - "errorType": "status_code", - "url": "https://www.patreon.com/{}", - "urlMain": "https://www.patreon.com/", - "username_claimed": "blue" - }, - "PentesterLab": { - "errorType": "status_code", - "regexCheck": "^[\\w]{4,30}$", - "url": "https://pentesterlab.com/profile/{}", - "urlMain": "https://pentesterlab.com/", - "username_claimed": "0day" - }, - "PepperIT": { - "errorMsg": "La pagina che hai provato a raggiungere non si trova qui", - "errorType": "message", - "url": "https://www.pepper.it/profile/{}/overview", - "urlMain": "https://www.pepper.it", - "username_claimed": "asoluinostrisca" - }, - "Periscope": { - "errorType": "status_code", - "url": "https://www.periscope.tv/{}/", - "urlMain": "https://www.periscope.tv/", - "username_claimed": "blue" - }, - "Pinkbike": { - "errorType": "status_code", - "regexCheck": "^[^.]*?$", - "url": "https://www.pinkbike.com/u/{}/", - "urlMain": "https://www.pinkbike.com/", - "username_claimed": "blue" - }, - "PlayStore": { - "errorType": "status_code", - "url": "https://play.google.com/store/apps/developer?id={}", - "urlMain": "https://play.google.com/store", - "username_claimed": "Facebook" - }, - "PocketStars": { - "errorMsg": "Join Your Favorite Adult Stars", - "errorType": "message", - "isNSFW": true, - "url": "https://pocketstars.com/{}", - "urlMain": "https://pocketstars.com/", - "username_claimed": "hacker" - }, - "Pokemon Showdown": { - "errorType": "status_code", - "url": "https://pokemonshowdown.com/users/{}", - "urlMain": "https://pokemonshowdown.com", - "username_claimed": "blue" - }, - "Polarsteps": { - "errorType": "status_code", - "url": "https://polarsteps.com/{}", - "urlMain": "https://polarsteps.com/", - "urlProbe": "https://api.polarsteps.com/users/byusername/{}", - "username_claimed": "james" - }, - "Polygon": { - "errorType": "status_code", - "url": "https://www.polygon.com/users/{}", - "urlMain": "https://www.polygon.com/", - "username_claimed": "swiftstickler" - }, - "Polymart": { - "errorType": "response_url", - "errorUrl": "https://polymart.org/user/-1", - "url": "https://polymart.org/user/{}", - "urlMain": "https://polymart.org/", - "username_claimed": "craciu25yt" - }, - "Pornhub": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://pornhub.com/users/{}", - "urlMain": "https://pornhub.com/", - "username_claimed": "blue" - }, - "ProductHunt": { - "errorMsg": "We seem to have lost this page", - "errorType": "message", - "url": "https://www.producthunt.com/@{}", - "urlMain": "https://www.producthunt.com/", - "username_claimed": "jenny" - }, - "PromoDJ": { - "errorType": "status_code", - "url": "http://promodj.com/{}", - "urlMain": "http://promodj.com/", - "username_claimed": "blue" - }, - "PyPi": { - "errorType": "status_code", - "url": "https://pypi.org/user/{}", - "urlMain": "https://pypi.org", - "username_claimed": "Blue" - }, - "Rajce.net": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.rajce.idnes.cz/", - "urlMain": "https://www.rajce.idnes.cz/", - "username_claimed": "blue" - }, - "Rate Your Music": { - "errorType": "status_code", - "url": "https://rateyourmusic.com/~{}", - "urlMain": "https://rateyourmusic.com/", - "username_claimed": "blue" - }, - "Rclone Forum": { - "errorType": "status_code", - "url": "https://forum.rclone.org/u/{}", - "urlMain": "https://forum.rclone.org/", - "username_claimed": "ncw" - }, - "RedTube": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://www.redtube.com/users/{}", - "urlMain": "https://www.redtube.com/", - "username_claimed": "hacker" - }, - "Redbubble": { - "errorType": "status_code", - "url": "https://www.redbubble.com/people/{}", - "urlMain": "https://www.redbubble.com/", - "username_claimed": "blue" - }, - "Reddit": { - "errorMsg": "Sorry, nobody on Reddit goes by that name.", - "errorType": "message", - "headers": { - "accept-language": "en-US,en;q=0.9" - }, - "url": "https://www.reddit.com/user/{}", - "urlMain": "https://www.reddit.com/", - "username_claimed": "blue" - }, - "Reisefrage": { - "errorType": "status_code", - "url": "https://www.reisefrage.net/nutzer/{}", - "urlMain": "https://www.reisefrage.net/", - "username_claimed": "reisefrage" - }, - "Replit.com": { - "errorType": "status_code", - "url": "https://replit.com/@{}", - "urlMain": "https://replit.com/", - "username_claimed": "blue" - }, - "ResearchGate": { - "errorType": "response_url", - "errorUrl": "https://www.researchgate.net/directory/profiles", - "regexCheck": "\\w+_\\w+", - "url": "https://www.researchgate.net/profile/{}", - "urlMain": "https://www.researchgate.net/", - "username_claimed": "John_Smith" - }, - "ReverbNation": { - "errorMsg": "Sorry, we couldn't find that page", - "errorType": "message", - "url": "https://www.reverbnation.com/{}", - "urlMain": "https://www.reverbnation.com/", - "username_claimed": "blue" - }, - "Roblox": { - "errorMsg": "Page cannot be found or no longer exists", - "errorType": "message", - "url": "https://www.roblox.com/user.aspx?username={}", - "urlMain": "https://www.roblox.com/", - "username_claimed": "bluewolfekiller" - }, - "RocketTube": { - "errorMsg": "OOPS! Houston, we have a problem", - "errorType": "message", - "isNSFW": true, - "url": "https://www.rockettube.com/{}", - "urlMain": "https://www.rockettube.com/", - "username_claimed": "Tatteddick5600" - }, - "RoyalCams": { - "errorType": "status_code", - "url": "https://royalcams.com/profile/{}", - "urlMain": "https://royalcams.com", - "username_claimed": "asuna-black" - }, - "RubyGems": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]{1,40}", - "url": "https://rubygems.org/profiles/{}", - "urlMain": "https://rubygems.org/", - "username_claimed": "blue" - }, - "Rumble": { - "errorType": "status_code", - "url": "https://rumble.com/user/{}", - "urlMain": "https://rumble.com/", - "username_claimed": "John" - }, - "RuneScape": { - "errorMsg": "{\"error\":\"NO_PROFILE\",\"loggedIn\":\"false\"}", - "errorType": "message", - "regexCheck": "^(?! )[\\w -]{1,12}(?Telegram Messenger", - "If you have Telegram, you can contact
TGx:Can't show details", - "errorType": "message", - "regexCheck": "^[A-Za-z0-9]{3,15}$", - "url": "https://torrentgalaxy.to/profile/{}", - "urlMain": "https://torrentgalaxy.to/", - "username_claimed": "GalaxyRG" - }, - "TradingView": { - "errorType": "status_code", - "request_method": "GET", - "url": "https://www.tradingview.com/u/{}/", - "urlMain": "https://www.tradingview.com/", - "username_claimed": "blue" - }, - "Trakt": { - "errorType": "status_code", - "regexCheck": "^[^.]*$", - "url": "https://www.trakt.tv/users/{}", - "urlMain": "https://www.trakt.tv/", - "username_claimed": "blue" - }, - "TrashboxRU": { - "errorType": "status_code", - "regexCheck": "^[A-Za-z0-9_-]{3,16}$", - "url": "https://trashbox.ru/users/{}", - "urlMain": "https://trashbox.ru/", - "username_claimed": "blue" - }, - "Trawelling": { - "errorType": "status_code", - "url": "https://traewelling.de/@{}", - "urlMain": "https://traewelling.de/", - "username_claimed": "lassestolley" - }, - "Trello": { - "errorMsg": "model not found", - "errorType": "message", - "url": "https://trello.com/{}", - "urlMain": "https://trello.com/", - "urlProbe": "https://trello.com/1/Members/{}", - "username_claimed": "blue" - }, - "TryHackMe": { - "errorMsg": "{\"success\":false}", - "errorType": "message", - "regexCheck": "^[a-zA-Z0-9.]{1,16}$", - "url": "https://tryhackme.com/p/{}", - "urlMain": "https://tryhackme.com/", - "urlProbe": "https://tryhackme.com/api/user/exist/{}", - "username_claimed": "ashu" - }, - "Tuna": { - "errorType": "status_code", - "regexCheck": "^[a-z0-9]{4,40}$", - "url": "https://tuna.voicemod.net/user/{}", - "urlMain": "https://tuna.voicemod.net/", - "username_claimed": "bob" - }, - "Tweakers": { - "errorType": "status_code", - "url": "https://tweakers.net/gallery/{}", - "urlMain": "https://tweakers.net", - "username_claimed": "femme" - }, - "Twitch": { - "errorType": "status_code", - "url": "https://www.twitch.tv/{}", - "urlMain": "https://www.twitch.tv/", - "urlProbe": "https://m.twitch.tv/{}", - "username_claimed": "jenny" - }, - "Twitter": { - "errorMsg": "
User ", - "errorType": "message", - "regexCheck": "^[a-zA-Z0-9_]{1,15}$", - "url": "https://x.com/{}", - "urlMain": "https://x.com/", - "urlProbe": "https://nitter.net/{}", - "username_claimed": "blue" - }, - "Typeracer": { - "errorMsg": "Profile Not Found", - "errorType": "message", - "url": "https://data.typeracer.com/pit/profile?user={}", - "urlMain": "https://typeracer.com", - "username_claimed": "blue" - }, - "Ultimate-Guitar": { - "errorType": "status_code", - "url": "https://ultimate-guitar.com/u/{}", - "urlMain": "https://ultimate-guitar.com/", - "username_claimed": "blue" - }, - "Unsplash": { - "errorType": "status_code", - "regexCheck": "^[a-z0-9_]{1,60}$", - "url": "https://unsplash.com/@{}", - "urlMain": "https://unsplash.com/", - "username_claimed": "jenny" - }, - "Untappd": { - "errorType": "status_code", - "url": "https://untappd.com/user/{}", - "urlMain": "https://untappd.com/", - "username_claimed": "untappd" - }, - "VK": { - "errorType": "response_url", - "errorUrl": "https://www.quora.com/profile/{}", - "url": "https://vk.com/{}", - "urlMain": "https://vk.com/", - "username_claimed": "brown" - }, - "VSCO": { - "errorType": "status_code", - "url": "https://vsco.co/{}", - "urlMain": "https://vsco.co/", - "username_claimed": "blue" - }, - "Velomania": { - "errorMsg": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.", - "errorType": "message", - "url": "https://forum.velomania.ru/member.php?username={}", - "urlMain": "https://forum.velomania.ru/", - "username_claimed": "red" - }, - "Venmo": { - "errorMsg": [ - "Venmo | Page Not Found" - ], - "errorType": "message", - "headers": { - "Host": "account.venmo.com" - }, - "url": "https://account.venmo.com/u/{}", - "urlMain": "https://venmo.com/", - "urlProbe": "https://test1.venmo.com/u/{}", - "username_claimed": "jenny" - }, - "Vero": { - "errorType": "status_code", - "request_method": "GET", - "url": "https://vero.co/{}", - "urlMain": "https://vero.co/", - "username_claimed": "blue" - }, - "Vimeo": { - "errorType": "status_code", - "url": "https://vimeo.com/{}", - "urlMain": "https://vimeo.com/", - "username_claimed": "blue" - }, - "VirusTotal": { - "errorType": "status_code", - "request_method": "GET", - "url": "https://www.virustotal.com/gui/user/{}", - "urlMain": "https://www.virustotal.com/", - "urlProbe": "https://www.virustotal.com/ui/users/{}/avatar", - "username_claimed": "blue" - }, - "WICG Forum": { - "errorType": "status_code", - "regexCheck": "^(?![.-])[a-zA-Z0-9_.-]{3,20}$", - "url": "https://discourse.wicg.io/u/{}/summary", - "urlMain": "https://discourse.wicg.io/", - "username_claimed": "stefano" - }, - "Warrior Forum": { - "errorType": "status_code", - "url": "https://www.warriorforum.com/members/{}.html", - "urlMain": "https://www.warriorforum.com/", - "username_claimed": "blue" - }, - "Wattpad": { - "errorType": "status_code", - "url": "https://www.wattpad.com/user/{}", - "urlMain": "https://www.wattpad.com/", - "urlProbe": "https://www.wattpad.com/api/v3/users/{}/", - "username_claimed": "Dogstho7951" - }, - "WebNode": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.webnode.cz/", - "urlMain": "https://www.webnode.cz/", - "username_claimed": "radkabalcarova" - }, - "Weblate": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@._-]{1,150}$", - "url": "https://hosted.weblate.org/user/{}/", - "urlMain": "https://hosted.weblate.org/", - "username_claimed": "adam" - }, - "Weebly": { - "errorType": "status_code", - "url": "https://{}.weebly.com/", - "urlMain": "https://weebly.com/", - "username_claimed": "blue" - }, - "Wikidot": { - "errorMsg": "User does not exist.", - "errorType": "message", - "url": "http://www.wikidot.com/user:info/{}", - "urlMain": "http://www.wikidot.com/", - "username_claimed": "blue" - }, - "Wikipedia": { - "errorMsg": "centralauth-admin-nonexistent:", - "errorType": "message", - "url": "https://en.wikipedia.org/wiki/Special:CentralAuth/{}?uselang=qqx", - "urlMain": "https://www.wikipedia.org/", - "username_claimed": "Hoadlck" - }, - "Windy": { - "errorType": "status_code", - "url": "https://community.windy.com/user/{}", - "urlMain": "https://windy.com/", - "username_claimed": "blue" - }, - "Wix": { - "errorType": "status_code", - "regexCheck": "^[a-zA-Z0-9@_-]$", - "url": "https://{}.wix.com", - "urlMain": "https://wix.com/", - "username_claimed": "support" - }, - "WolframalphaForum": { - "errorType": "status_code", - "url": "https://community.wolfram.com/web/{}/home", - "urlMain": "https://community.wolfram.com/", - "username_claimed": "unico" - }, - "WordPress": { - "errorType": "response_url", - "errorUrl": "wordpress.com/typo/?subdomain=", - "regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$", - "url": "https://{}.wordpress.com/", - "urlMain": "https://wordpress.com", - "username_claimed": "blue" - }, - "WordPressOrg": { - "errorType": "response_url", - "errorUrl": "https://wordpress.org", - "url": "https://profiles.wordpress.org/{}/", - "urlMain": "https://wordpress.org/", - "username_claimed": "blue" - }, - "Wordnik": { - "errorMsg": "Page Not Found", - "errorType": "message", - "regexCheck": "^[a-zA-Z0-9_.+-]{1,40}$", - "url": "https://www.wordnik.com/users/{}", - "urlMain": "https://www.wordnik.com/", - "username_claimed": "blue" - }, - "Wykop": { - "errorType": "status_code", - "url": "https://www.wykop.pl/ludzie/{}", - "urlMain": "https://www.wykop.pl", - "username_claimed": "blue" - }, - "Xbox Gamertag": { - "errorType": "status_code", - "url": "https://xboxgamertag.com/search/{}", - "urlMain": "https://xboxgamertag.com/", - "username_claimed": "red" - }, - "Xvideos": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://xvideos.com/profiles/{}", - "urlMain": "https://xvideos.com/", - "username_claimed": "blue" - }, - "YandexMusic": { - "__comment__": "The first and third errorMsg relate to geo-restrictions and bot detection/captchas.", - "errorMsg": [ - "\u041e\u0448\u0438\u0431\u043a\u0430 404", - "Threads", - "errorType": "message", - "headers": { - "Sec-Fetch-Mode": "navigate" - }, - "url": "https://www.threads.net/@{}", - "urlMain": "https://www.threads.net/", - "username_claimed": "zuck" - }, - "toster": { - "errorType": "status_code", - "url": "https://www.toster.ru/user/{}/answers", - "urlMain": "https://www.toster.ru/", - "username_claimed": "adam" - }, - "uid": { - "errorType": "status_code", - "url": "http://uid.me/{}", - "urlMain": "https://uid.me/", - "username_claimed": "blue" - }, - "wiki.vg": { - "errorType": "status_code", - "url": "https://wiki.vg/User:{}", - "urlMain": "https://wiki.vg/", - "username_claimed": "Auri" - }, - "xHamster": { - "errorType": "status_code", - "isNSFW": true, - "url": "https://xhamster.com/users/{}", - "urlMain": "https://xhamster.com", - "urlProbe": "https://xhamster.com/users/{}?old_browser=true", - "username_claimed": "blue" - }, - "znanylekarz.pl": { - "errorType": "status_code", - "url": "https://www.znanylekarz.pl/{}", - "urlMain": "https://znanylekarz.pl", - "username_claimed": "janusz-nowak" - } -} -"#.into() + include_str!("data.json").to_string() } diff --git a/src/main.rs b/src/main.rs index 125b11b..0f18341 100644 --- a/src/main.rs +++ b/src/main.rs @@ -57,6 +57,7 @@ struct Cli { #[clap( short, long = "json", + conflicts_with = "local", default_value = "https://raw.githubusercontent.com/sherlock-project/sherlock/master/sherlock_project/resources/data.json" )] json_file: String, From e9c92299b027fd55ca9dc14464707429bbef677c Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Tue, 3 Sep 2024 21:00:54 -0400 Subject: [PATCH 09/11] use fs helpers --- src/get_data.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/get_data.rs b/src/get_data.rs index f8cc74c..12e4fdc 100644 --- a/src/get_data.rs +++ b/src/get_data.rs @@ -1,6 +1,5 @@ -use std::{fs::File, io::Read, path::Path}; - use color_eyre::eyre; +use color_eyre::eyre::WrapErr; pub async fn get_json_data(json_file: String) -> color_eyre::Result { // Ensure that the specified data file has the correct extension. @@ -35,18 +34,13 @@ pub async fn get_json_data(json_file: String) -> color_eyre::Result { } false => { // Reference is to a file. - let path = Path::new(&json_file); - - let mut file = File::open(path).map_err(|_| { - eyre::eyre!( - "Problem while attempting to access data file '{}'.", + let contents = std::fs::read_to_string(&json_file).wrap_err_with(|| { + format!( + "Problem while attempting to access data file '{}'", json_file ) })?; - let mut contents = String::new(); - file.read_to_string(&mut contents)?; - contents } }; From b6961cfd5923baa0233027a4b8cdf2c85454d808 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Tue, 3 Sep 2024 21:04:30 -0400 Subject: [PATCH 10/11] cargo clippy fix --- src/checker.rs | 14 +++++++------- src/get_data.rs | 12 ++++-------- src/output.rs | 10 +++++----- src/query.rs | 6 +++--- src/sherlock_target_manifest.rs | 6 ++++-- src/utils.rs | 1 + src/waf.rs | 3 ++- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index 2b89e06..59702ad 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -48,7 +48,7 @@ pub async fn check_username( tx.clone(), Arc::clone(&username), Arc::from(&site[..]), - Arc::clone(&info), + Arc::clone(info), *timeout, proxy.clone(), )?; @@ -127,21 +127,21 @@ pub async fn check_username( println!("+++++++++++++++++++++"); println!("TARGET NAME : {site}"); println!("USERNAME : {username}"); - println!("TARGET URL : {:?}", url_probe); + println!("TARGET URL : {url_probe:?}"); // TODO: Split this out into parts? Impl debug differently? - println!("TEST METHOD : {:?}", error_type); + println!("TEST METHOD : {error_type:?}"); println!("Results..."); - println!("RESPONSE CODE : {}", status_code); + println!("RESPONSE CODE : {status_code}"); println!(">>>>> BEGIN RESPONSE TEXT"); - println!("{}", resp_text); + println!("{resp_text}"); println!("<<<<< END RESPONSE TEXT"); - println!("VERDICT : {:?}", status); + println!("VERDICT : {status:?}"); println!("+++++++++++++++++++++"); } if *browse && status == QueryStatus::Claimed { - open::that(&url).inspect_err(|e| eprintln!("Failed to open browser: {}", e))?; + open::that(&url).inspect_err(|e| eprintln!("Failed to open browser: {e}"))?; } QueryResult { diff --git a/src/get_data.rs b/src/get_data.rs index 12e4fdc..669ab85 100644 --- a/src/get_data.rs +++ b/src/get_data.rs @@ -34,14 +34,9 @@ pub async fn get_json_data(json_file: String) -> color_eyre::Result { } false => { // Reference is to a file. - let contents = std::fs::read_to_string(&json_file).wrap_err_with(|| { - format!( - "Problem while attempting to access data file '{}'", - json_file - ) - })?; - - contents + std::fs::read_to_string(&json_file).wrap_err_with(|| { + format!("Problem while attempting to access data file '{json_file}'") + })? } }; @@ -50,6 +45,7 @@ pub async fn get_json_data(json_file: String) -> color_eyre::Result { /// the default sites to check for sherlock locally /// includes >400 websites and their error messages +#[must_use] pub fn get_default_data() -> String { include_str!("data.json").to_string() } diff --git a/src/output.rs b/src/output.rs index f561d79..a4f8274 100644 --- a/src/output.rs +++ b/src/output.rs @@ -51,8 +51,8 @@ pub fn save_results( let output_file = match (&options.output_file, &options.output_folder) { (Some(output_file), _) => output_file.to_string(), - (None, Some(output_folder)) => format!("{}/{}.txt", output_folder, username), - (None, None) => format!("{}.txt", username), + (None, Some(output_folder)) => format!("{output_folder}/{username}.txt"), + (None, None) => format!("{username}.txt"), }; let mut file = File::create(&output_file)?; @@ -62,7 +62,7 @@ pub fn save_results( } } - writeln!(file, "Total Websites Username Detected On: {}", total_hits)?; + writeln!(file, "Total Websites Username Detected On: {total_hits}")?; if options.csv { write_csv( @@ -162,8 +162,8 @@ pub fn write_csv( print_found: bool, ) -> color_eyre::Result<()> { let csv_filename = match output_folder { - None => format!("{}.csv", username), - Some(folder) => format!("{}/{}.csv", folder, username), + None => format!("{username}.csv"), + Some(folder) => format!("{folder}/{username}.csv"), }; let mut csv_report = File::create(csv_filename)?; diff --git a/src/query.rs b/src/query.rs index 53456db..4cccb11 100644 --- a/src/query.rs +++ b/src/query.rs @@ -64,7 +64,7 @@ pub fn add_result_to_channel( proxy: Option>, ) -> color_eyre::Result<()> { tokio::spawn(async move { - let encoded_username = &username.replace(" ", "%20"); + let encoded_username = &username.replace(' ', "%20"); let profile_url = info.url.interpolate(encoded_username); let url_probe = match &info.url_probe { // There is a special URL for probing existence separate @@ -105,12 +105,12 @@ async fn check_user_at_site( let request_body = info .request_payload .as_ref() - .map(|payload| payload.to_string().interpolate(&username)); + .map(|payload| payload.to_string().interpolate(username)); // use regex to make sure the url and username are valid for the site if let Some(regex) = &info.regex_check { let re = Regex::new(regex)?; - let is_match = re.is_match(&username).unwrap_or(false); + let is_match = re.is_match(username).unwrap_or(false); if !is_match { return Err(QueryError::InvalidUsernameError); } diff --git a/src/sherlock_target_manifest.rs b/src/sherlock_target_manifest.rs index b510d83..61dd275 100644 --- a/src/sherlock_target_manifest.rs +++ b/src/sherlock_target_manifest.rs @@ -87,6 +87,7 @@ pub enum ErrorMsg { } impl ErrorMsg { + #[must_use] pub fn is_in(&self, text: &str) -> bool { match self { ErrorMsg::Single(msg) => text.contains(msg), @@ -98,8 +99,8 @@ impl ErrorMsg { impl fmt::Debug for ErrorMsg { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - ErrorMsg::Single(c) => write!(f, "{}", c), - ErrorMsg::Multiple(codes) => codes.iter().fold(Ok(()), |_, c| write!(f, "{}, ", c)), + ErrorMsg::Single(c) => write!(f, "{c}"), + ErrorMsg::Multiple(codes) => codes.iter().fold(Ok(()), |_, c| write!(f, "{c}, ")), } } } @@ -112,6 +113,7 @@ pub enum ErrorCode { } impl ErrorCode { + #[must_use] pub fn contains(&self, code: &u16) -> bool { match self { ErrorCode::Single(c) => c == code, diff --git a/src/utils.rs b/src/utils.rs index 274a951..f79b99b 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -33,6 +33,7 @@ use std::collections::HashMap; /// "test.user", /// ]); /// ``` +#[must_use] pub fn create_username_variants(usernames: &[String]) -> Vec { let variant_symbol = "{?}"; let check_symbols = ["_", "-", "."]; diff --git a/src/waf.rs b/src/waf.rs index 5997447..46dc95e 100644 --- a/src/waf.rs +++ b/src/waf.rs @@ -4,11 +4,12 @@ // be highly targetted. Comment at the end of each fingerprint to // indicate target and date fingerprinted. const WAFHIT_MSGS: [&str; 2] = [ - r#".loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark"#, + r".loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark", // 2024-04-09 PerimeterX / Human Security r#"{return l.onPageView}}),Object.defineProperty(r,"perimeterxIdentifiers",{enumerable:"#, ]; +#[must_use] pub fn waf_hit(resp_text: &str) -> bool { WAFHIT_MSGS.iter().any(|msg| resp_text.contains(msg)) } From d27c0df1c02c0b5911073f45fb34cb9b7b6d4564 Mon Sep 17 00:00:00 2001 From: Zachary Dremann Date: Tue, 3 Sep 2024 21:53:25 -0400 Subject: [PATCH 11/11] prefer &[T] over &Vec for params --- src/main.rs | 2 +- src/output.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0f18341..ae5f238 100644 --- a/src/main.rs +++ b/src/main.rs @@ -150,7 +150,7 @@ async fn main() -> Result<()> { for username in username_variants { let results = check_username(&username, Arc::clone(&arc_targets), &check_options).await?; - save_results(&username, results, &save_options)?; + save_results(&username, &results, &save_options)?; } Ok(()) diff --git a/src/output.rs b/src/output.rs index a4f8274..b58bce2 100644 --- a/src/output.rs +++ b/src/output.rs @@ -34,7 +34,7 @@ pub struct SaveOptions { /// A Result containing the success or failure of the operation. pub fn save_results( username: &str, - results: Vec, + results: &[QueryResult], options: &SaveOptions, ) -> Result<()> { let total_hits = results @@ -56,7 +56,7 @@ pub fn save_results( }; let mut file = File::create(&output_file)?; - for result in &results { + for result in results { if result.status == QueryStatus::Claimed { writeln!(file, "{}", result.site_url_user)?; } @@ -156,7 +156,7 @@ pub fn write_xlsx( /// A Result containing the success or failure of the operation. pub fn write_csv( username: &str, - results: &Vec, + results: &[QueryResult], output_folder: Option<&str>, print_all: bool, print_found: bool,