|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
declare(strict_types = 1); |
|
4
|
|
|
|
|
5
|
|
|
namespace DummyGenerator\Core; |
|
6
|
|
|
|
|
7
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionInterface; |
|
8
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionTrait; |
|
9
|
|
|
use DummyGenerator\Definitions\Extension\UserAgentExtensionInterface; |
|
10
|
|
|
|
|
11
|
|
|
class UserAgent implements UserAgentExtensionInterface, RandomizerAwareExtensionInterface |
|
12
|
|
|
{ |
|
13
|
|
|
use RandomizerAwareExtensionTrait; |
|
14
|
|
|
|
|
15
|
|
|
/** @var string[] */ |
|
16
|
|
|
protected array $userAgents = ['firefox', 'chrome', 'internetExplorer', 'opera', 'safari', 'edge']; |
|
17
|
|
|
|
|
18
|
|
|
/** @var string[] */ |
|
19
|
|
|
protected array $windowsPlatformTokens = [ |
|
20
|
|
|
'Windows NT 6.2', 'Windows NT 6.1', 'Windows NT 6.0', 'Windows NT 5.2', 'Windows NT 5.1', |
|
21
|
|
|
'Windows NT 5.01', 'Windows NT 5.0', 'Windows NT 4.0', 'Windows 98; Win 9x 4.90', 'Windows 98', |
|
22
|
|
|
'Windows 95', 'Windows CE', |
|
23
|
|
|
]; |
|
24
|
|
|
|
|
25
|
|
|
/** |
|
26
|
|
|
* @var string[] |
|
27
|
|
|
* |
|
28
|
|
|
* Possible processors on Linux |
|
29
|
|
|
*/ |
|
30
|
|
|
protected array $linuxProcessor = ['i686', 'x86_64']; |
|
31
|
|
|
|
|
32
|
|
|
/** |
|
33
|
|
|
* @var string[] |
|
34
|
|
|
* |
|
35
|
|
|
* Mac processors (it also added U;) |
|
36
|
|
|
*/ |
|
37
|
|
|
protected array $macProcessor = ['Intel', 'PPC', 'U; Intel', 'U; PPC']; |
|
38
|
|
|
|
|
39
|
|
|
/** |
|
40
|
|
|
* @var string[] |
|
41
|
|
|
* |
|
42
|
|
|
* Add as many languages as you like. |
|
43
|
|
|
*/ |
|
44
|
|
|
protected array $lang = ['en-US', 'sl-SI', 'nl-NL']; |
|
45
|
|
|
|
|
46
|
1 |
|
public function userAgent(): string |
|
47
|
|
|
{ |
|
48
|
1 |
|
$userAgentName = $this->randomizer->randomElement($this->userAgents); |
|
49
|
|
|
|
|
50
|
1 |
|
return $this->$userAgentName(); |
|
51
|
|
|
} |
|
52
|
|
|
|
|
53
|
1 |
|
public function chrome(): string |
|
54
|
|
|
{ |
|
55
|
1 |
|
$saf = $this->randomizer->getInt(531, 536) . $this->randomizer->getInt(0, 2); |
|
56
|
|
|
|
|
57
|
1 |
|
$platforms = [ |
|
58
|
1 |
|
'(' . $this->linuxPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Chrome/" . $this->randomizer->getInt(36, 40) . '.0.' |
|
59
|
1 |
|
. $this->randomizer->getInt(800, 899) . ".0 Mobile Safari/$saf", |
|
60
|
1 |
|
'(' . $this->windowsPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Chrome/" . $this->randomizer->getInt(36, 40) . '.0.' |
|
61
|
1 |
|
. $this->randomizer->getInt(800, 899) . ".0 Mobile Safari/$saf", |
|
62
|
1 |
|
'(' . $this->macPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Chrome/" . $this->randomizer->getInt(36, 40) . '.0.' |
|
63
|
1 |
|
. $this->randomizer->getInt(800, 899) . ".0 Mobile Safari/$saf", |
|
64
|
1 |
|
]; |
|
65
|
|
|
|
|
66
|
1 |
|
return 'Mozilla/5.0 ' . $this->randomizer->randomElement($platforms); |
|
67
|
|
|
} |
|
68
|
|
|
|
|
69
|
1 |
|
public function edge(): string |
|
70
|
|
|
{ |
|
71
|
1 |
|
$saf = $this->randomizer->getInt(531, 537) . '.' . $this->randomizer->getInt(0, 2); |
|
72
|
1 |
|
$chrv = $this->randomizer->getInt(79, 99) . '.0'; |
|
73
|
|
|
|
|
74
|
1 |
|
$platforms = [ |
|
75
|
1 |
|
'(' . $this->windowsPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Chrome/$chrv" . '.' . $this->randomizer->getInt(4000, 4844) |
|
76
|
1 |
|
. '.' . $this->randomizer->getInt(10, 99) . " Safari/$saf Edg/$chrv" . $this->randomizer->getInt(1000, 1146) . '.' |
|
77
|
1 |
|
. $this->randomizer->getInt(0, 99), |
|
78
|
1 |
|
'(' . $this->macPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Chrome/$chrv" . '.' . $this->randomizer->getInt(4000, 4844) |
|
79
|
1 |
|
. '.' . $this->randomizer->getInt(10, 99) . " Safari/$saf Edg/$chrv" . $this->randomizer->getInt(1000, 1146) |
|
80
|
1 |
|
. '.' . $this->randomizer->getInt(0, 99), |
|
81
|
1 |
|
'(' . $this->linuxPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Chrome/$chrv" . '.' . $this->randomizer->getInt(4000, 4844) |
|
82
|
1 |
|
. '.' . $this->randomizer->getInt(10, 99) . " Safari/$saf EdgA/$chrv" . $this->randomizer->getInt(1000, 1146) |
|
83
|
1 |
|
. '.' . $this->randomizer->getInt(0, 99), |
|
84
|
1 |
|
'(' . $this->iosMobileToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Version/15.0 EdgiOS/$chrv" . $this->randomizer->getInt(1000, 1146) |
|
85
|
1 |
|
. '.' . $this->randomizer->getInt(0, 99) . " Mobile/15E148 Safari/$saf", |
|
86
|
1 |
|
]; |
|
87
|
|
|
|
|
88
|
1 |
|
return 'Mozilla/5.0 ' . $this->randomizer->randomElement($platforms); |
|
89
|
|
|
} |
|
90
|
|
|
|
|
91
|
1 |
|
public function firefox(): string |
|
92
|
|
|
{ |
|
93
|
1 |
|
$ver = 'Gecko/' . date('Ymd', $this->randomizer->getInt(strtotime('2010-1-1'), time())) . ' Firefox/' |
|
94
|
1 |
|
. $this->randomizer->getInt(35, 37) . '.0'; |
|
95
|
|
|
|
|
96
|
1 |
|
$platforms = [ |
|
97
|
1 |
|
'(' . $this->windowsPlatformToken() . '; ' . $this->randomizer->randomElement($this->lang) . '; rv:1.9.' . $this->randomizer->getInt(0, 2) |
|
98
|
1 |
|
. '.20) ' . $ver, |
|
99
|
1 |
|
'(' . $this->linuxPlatformToken() . '; rv:' . $this->randomizer->getInt(5, 7) . '.0) ' . $ver, |
|
100
|
1 |
|
'(' . $this->macPlatformToken() . ' rv:' . $this->randomizer->getInt(2, 6) . '.0) ' . $ver, |
|
101
|
1 |
|
]; |
|
102
|
|
|
|
|
103
|
1 |
|
return 'Mozilla/5.0 ' . $this->randomizer->randomElement($platforms); |
|
104
|
|
|
} |
|
105
|
|
|
|
|
106
|
1 |
|
public function safari(): string |
|
107
|
|
|
{ |
|
108
|
1 |
|
$saf = $this->randomizer->getInt(531, 535) . '.' . $this->randomizer->getInt(1, 50) . '.' . $this->randomizer->getInt(1, 7); |
|
109
|
|
|
|
|
110
|
1 |
|
$ver = $this->randomizer->getBool() ? |
|
111
|
1 |
|
$this->randomizer->getInt(4, 5) . '.' . $this->randomizer->getInt(0, 1) |
|
112
|
1 |
|
: |
|
113
|
|
|
$this->randomizer->getInt(4, 5) . '.0.' . $this->randomizer->getInt(1, 5); |
|
114
|
|
|
|
|
115
|
1 |
|
$mobileDevices = [ |
|
116
|
1 |
|
'iPhone; CPU iPhone OS', |
|
117
|
1 |
|
'iPad; CPU OS', |
|
118
|
1 |
|
]; |
|
119
|
|
|
|
|
120
|
1 |
|
$platforms = [ |
|
121
|
1 |
|
'(Windows; U; ' . $this->windowsPlatformToken() . ") AppleWebKit/$saf (KHTML, like Gecko) Version/$ver Safari/$saf", |
|
122
|
1 |
|
'(' . $this->macPlatformToken() . ' rv:' . $this->randomizer->getInt(2, 6) . '.0; ' . $this->randomizer->randomElement($this->lang) |
|
123
|
1 |
|
. ") AppleWebKit/$saf (KHTML, like Gecko) Version/$ver Safari/$saf", |
|
124
|
1 |
|
'(' . $this->randomizer->randomElement($mobileDevices) . ' ' . $this->randomizer->getInt(7, 8) . '_' . $this->randomizer->getInt(0, 2) |
|
125
|
1 |
|
. '_' . $this->randomizer->getInt(1, 2) . ' like Mac OS X; ' . $this->randomizer->randomElement($this->lang) |
|
126
|
1 |
|
. ") AppleWebKit/$saf (KHTML, like Gecko) Version/" . $this->randomizer->getInt(3, 4) . '.0.5 Mobile/8B' |
|
127
|
1 |
|
. $this->randomizer->getInt(111, 119) . " Safari/6$saf", |
|
128
|
1 |
|
]; |
|
129
|
|
|
|
|
130
|
1 |
|
return 'Mozilla/5.0 ' . $this->randomizer->randomElement($platforms); |
|
131
|
|
|
} |
|
132
|
|
|
|
|
133
|
2 |
|
public function opera(): string |
|
134
|
|
|
{ |
|
135
|
2 |
|
$platforms = [ |
|
136
|
2 |
|
'(' . $this->linuxPlatformToken() . '; ' . $this->randomizer->randomElement($this->lang) . ') Presto/2.' . $this->randomizer->getInt(8, 12) |
|
137
|
2 |
|
. '.' . $this->randomizer->getInt(160, 355) . ' Version/' . $this->randomizer->getInt(10, 12) . '.00', |
|
138
|
2 |
|
'(' . $this->windowsPlatformToken() . '; ' . $this->randomizer->randomElement($this->lang) . ') Presto/2.' . $this->randomizer->getInt(8, 12) |
|
139
|
2 |
|
. '.' . $this->randomizer->getInt(160, 355) . ' Version/' . $this->randomizer->getInt(10, 12) . '.00', |
|
140
|
2 |
|
]; |
|
141
|
|
|
|
|
142
|
2 |
|
return 'Opera/' . $this->randomizer->getInt(8, 9) . '.' . $this->randomizer->getInt(10, 99) . ' ' . $this->randomizer->randomElement($platforms); |
|
143
|
|
|
} |
|
144
|
|
|
|
|
145
|
1 |
|
public function internetExplorer(): string |
|
146
|
|
|
{ |
|
147
|
1 |
|
return 'Mozilla/5.0 (compatible; MSIE ' . $this->randomizer->getInt(5, 11) . '.0; ' . $this->windowsPlatformToken() . '; Trident/' |
|
148
|
1 |
|
. $this->randomizer->getInt(3, 5) . '.' . $this->randomizer->getInt(0, 1) . ')'; |
|
149
|
|
|
} |
|
150
|
|
|
|
|
151
|
8 |
|
public function windowsPlatformToken(): string |
|
152
|
|
|
{ |
|
153
|
8 |
|
return $this->randomizer->randomElement($this->windowsPlatformTokens); |
|
154
|
|
|
} |
|
155
|
|
|
|
|
156
|
5 |
|
public function macPlatformToken(): string |
|
157
|
|
|
{ |
|
158
|
5 |
|
return 'Macintosh; ' . $this->randomizer->randomElement($this->macProcessor) . ' Mac OS X 10_' . $this->randomizer->getInt(5, 8) |
|
159
|
5 |
|
. '_' . $this->randomizer->getInt(0, 9); |
|
160
|
|
|
} |
|
161
|
|
|
|
|
162
|
2 |
|
public function iosMobileToken(): string |
|
163
|
|
|
{ |
|
164
|
2 |
|
$iosVer = $this->randomizer->getInt(13, 15) . '_' . $this->randomizer->getInt(0, 2); |
|
165
|
|
|
|
|
166
|
2 |
|
return 'iPhone; CPU iPhone OS ' . $iosVer . ' like Mac OS X'; |
|
167
|
|
|
} |
|
168
|
|
|
|
|
169
|
1 |
|
public function androidMobileToken(): string |
|
170
|
|
|
{ |
|
171
|
1 |
|
return 'Linux; Android ' . $this->randomizer->getInt(8, 15); |
|
172
|
|
|
} |
|
173
|
|
|
|
|
174
|
6 |
|
public function linuxPlatformToken(): string |
|
175
|
|
|
{ |
|
176
|
6 |
|
return 'X11; Linux ' . $this->randomizer->randomElement($this->linuxProcessor); |
|
177
|
|
|
} |
|
178
|
|
|
} |
|
179
|
|
|
|