data_faking/data/it/
agent_bot.rs

1use 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}