data_faking/data/it/
agent_bot.rs1use std::collections::HashMap;
2use crate::utils::seeder;
3use wasm_bindgen::prelude::*;
4
5#[wasm_bindgen]
6pub fn bot_agent(agent: Option<String>) -> String {
7 let mut vendor: String = "".to_owned();
8 if let Some(arg) = agent {
9 vendor.replace_range(.., &arg);
10 } else {
11 vendor.replace_range(.., &random_vendor())
12 }
13
14 let agents = AGENT_HASHMAP.get(vendor.as_str());
15 if let Some(arg) = agents {
16 let agent = arg[seeder::gen_range(0..arg.len())].to_owned();
17 return agent;
18 }
19
20 "".to_owned()
21}
22
23fn random_vendor() -> String {
24 VENDOR_LIST[seeder::gen_range(0..VENDOR_LIST_LEN)].to_owned()
25}
26
27static AGENT_GOOGLEBOT: &str = "googlebot";
28static AGENTS_GOOGLEBOT: [&'static str; 5] = [
29 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/83.0.4103.122 Safari/537.36",
30 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/99.0.4844.84 Safari/537.36",
31 "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
32 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/87.0.4280.90 Safari/537.36",
33 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Safari/537.36 Googlebot-Image/1.0"
34];
35
36static AGENT_BINGBOT: &str = "bingbot";
37static AGENTS_BINGBOT: [&'static str; 5] = [
38 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/86.0.4240.68 Safari/537.36 Edg/86.0.622.31",
39 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534 +(KHTML, like Gecko) BingPreview/1.0b",
40 "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0; BingPreview/1.0b) like Gecko",
41 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/98.0.4758.102 Safari/537.36",
42 "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
43];
44
45static AGENT_DUCKDUCKBOT: &str = "duckduckbot";
46static AGENTS_DUCKDUCKBOT: [&'static str; 5] = [
47 "DuckDuckBot-Https/1.1; (+https://duckduckgo.com/duckduckbot)",
48 "Mozilla/5.0 (compatible; DuckDuckBot-Https/1.1; https://duckduckgo.com/duckduckbot)",
49 "DuckDuckBot/1.1; (+http://duckduckgo.com/duckduckbot.html)",
50 "DuckDuckBot-Https/1.1; (+https://duckduckgo.com/duckduckbot)",
51 "Mozilla/5.0 (compatible; DuckDuckBot-Https/1.1; https://duckduckgo.com/duckduckbot)"
52];
53
54static AGENT_BAIDUSPIDER: &str = "baiduspider";
55static AGENTS_BAIDUSPIDER: [&'static str; 3] = [
56 "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0 ; +http://www.baidu.com/search/spider.html)",
57 "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0 ; Smartapp; +http://www.baidu.com/search/spider.html)",
58 "Mozilla/5.0 (compatible; Baiduspider-render/2.0 ; +http://www.baidu.com/search/spider.html)"
59];
60
61static AGENT_YANDEXBOT: &str = "yandexbot";
62static AGENTS_YANDEXBOT: [&'static str; 5] = [
63 "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)",
64 "Mozilla/5.0 (compatible; YandexDirect/3.0; +http://yandex.com/bots)",
65 "Mozilla/5.0 (compatible; YandexMetrika/2.0; +http://yandex.com/bots yabs01)",
66 "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.268",
67 "Mozilla/5.0 (compatible; YandexImages/3.0; +http://yandex.com/bots)"
68];
69
70static VENDOR_LIST: [&'static str; 5] = [
71 AGENT_GOOGLEBOT,
72 AGENT_BINGBOT,
73 AGENT_DUCKDUCKBOT,
74 AGENT_BAIDUSPIDER,
75 AGENT_YANDEXBOT
76];
77static VENDOR_LIST_LEN: usize = VENDOR_LIST.len();
78
79lazy_static! {
80 static ref AGENT_HASHMAP: HashMap<&'static str, Vec<&'static str>> = {
81 let mut m = HashMap::new();
82 m.insert(
83 AGENT_GOOGLEBOT,
84 AGENTS_GOOGLEBOT.to_vec()
85 );
86
87 m.insert(
88 AGENT_BINGBOT,
89 AGENTS_BINGBOT.to_vec()
90 );
91
92 m.insert(
93 AGENT_DUCKDUCKBOT,
94 AGENTS_DUCKDUCKBOT.to_vec()
95 );
96
97 m.insert(
98 AGENT_BAIDUSPIDER,
99 AGENTS_BAIDUSPIDER.to_vec()
100 );
101
102 m.insert(
103 AGENT_YANDEXBOT,
104 AGENTS_YANDEXBOT.to_vec()
105 );
106 m
107 };
108}