Version Description
= 3.9.30 = Worker plugin is now fully compatible with WordPress 4.0, adding websites is now easier and we have made fixes and improvements in Backup and Clone tools
= 3.9.29 = Worker plugin is 36% faster and uses 83% less memory. Backup tool no longer relies on WordPress cron
= 3.9.28 = It is now possible to control WordPress automatic background updates for plugins and themes!
= 3.9.27 = We have added compatibility with Better WP Security. Also, it is now possible to backup and clone to SFTP
Download this release
Release Info
Developer | freediver |
Plugin | ManageWP Worker |
Version | 4.0.1 |
Comparing to | |
See all releases |
Code changes from version 3.9.30 to 4.0.1
- functions.php +1482 -576
- init.php +252 -2071
- publickeys/managewp.pub +9 -9
- publickeys/managewp_d.pub +9 -9
- publickeys/{ManageWP_mt.pub → managewp_mt.pub} +9 -9
- publickeys/managewp_t.pub +9 -9
- publickeys/partner1.pub +9 -9
- publickeys/partner10.pub +9 -9
- publickeys/partner11.pub +9 -9
- publickeys/partner12.pub +9 -9
- publickeys/partner13.pub +9 -9
- publickeys/partner14.pub +9 -9
- publickeys/partner15.pub +9 -9
- publickeys/partner16.pub +9 -9
- publickeys/partner17.pub +9 -9
- publickeys/partner2.pub +9 -9
- publickeys/partner3.pub +9 -9
- publickeys/partner4.pub +8 -8
- publickeys/partner5.pub +9 -9
- publickeys/partner6.pub +9 -9
- publickeys/partner7.pub +9 -9
- publickeys/partner8.pub +9 -9
- publickeys/partner9.pub +9 -9
- readme.txt +385 -380
- src/Dropbox/certs/trusted-certs.crt +1395 -1395
- src/Google/Auth/OAuth2.php +1 -0
- src/Google/IO/cacerts.pem +738 -738
- src/LICENSE +360 -360
- src/MMB/Backup.php +244 -462
- src/MMB/Core.php +117 -484
- src/MMB/Helper.php +16 -117
- src/MMB/Installer.php +4 -5
- src/MMB/Link.php +0 -172
- src/MMB/Post.php +0 -1
- src/MMB/Security.php +0 -384
- src/MMB/Stats.php +99 -255
- src/MMB/Updater.php +10 -10
- src/MMB/Widget.php +0 -44
- src/MMB/img/mwp.png +0 -0
- src/MWP/Action/Abstract.php +23 -0
- src/MWP/Action/ConnectWebsite.php +56 -0
- src/MWP/Action/Definition.php +72 -0
- src/MWP/Action/Exception.php +13 -0
- src/MWP/Action/GetState.php +280 -0
- src/MWP/Action/Registry.php +39 -0
- src/MWP/Backup/ArrayHelper.php +8 -0
- src/MWP/Backup/Buffer/File.php +8 -0
- src/MWP/Backup/Database.php +8 -0
- src/MWP/Backup/Exception.php +8 -0
- src/MWP/Backup/MysqlDump/DumpFactory.php +8 -0
- src/MWP/Backup/MysqlDump/MysqlDump.php +8 -0
- src/MWP/Backup/MysqlDump/QuerySequenceDump.php +8 -0
- src/MWP/Backup/MysqlDump/ShellDump.php +8 -0
- src/MWP/Backup/Writer/GzipWriter.php +8 -0
- src/MWP/Backup/Writer/PlainWriter.php +8 -0
- src/MWP/Backup/Writer/WriterFactory.php +8 -0
- src/MWP/Backup/Writer/WriterInterface.php +8 -0
- src/MWP/Crypter/Factory.php +31 -0
- src/MWP/Crypter/Interface.php +36 -0
- src/MWP/Crypter/OpenSslCrypter.php +58 -0
- src/MWP/Crypter/PhpSecLibCrypter.php +62 -0
- src/MWP/Debug/ErrorCatcher.php +21 -2
- src/MWP/Debug/EvalErrorHandler.php +32 -0
- src/MWP/Debug/FatalErrorException.php +22 -0
- src/MWP/Event/AbstractRequest.php +67 -0
- src/MWP/Event/ActionException.php +78 -0
- src/MWP/Event/ActionRequest.php +53 -0
- src/MWP/Event/ActionResponse.php +79 -0
- src/MWP/Event/Events.php +58 -0
- src/MWP/Event/MasterRequest.php +35 -0
- src/MWP/Event/MasterResponse.php +41 -0
- src/MWP/Event/PublicRequest.php +13 -0
- src/MWP/EventListener/ActionException/SetExceptionData.php +57 -0
- src/MWP/EventListener/ActionRequest/SetSettings.php +49 -0
- src/MWP/EventListener/ActionResponse/ChainState.php +43 -0
- src/MWP/EventListener/ActionResponse/SetActionData.php +24 -0
- src/MWP/EventListener/ActionResponse/SetLegacyPhpExecutionData.php +51 -0
- src/MWP/EventListener/ActionResponse/SetLegacyWebsiteConnectionData.php +55 -0
- src/MWP/EventListener/EncodeMasterResponse.php +39 -0
- src/MWP/EventListener/MasterRequest/AttachJsonMessageHandler.php +43 -0
- src/MWP/EventListener/MasterRequest/AuthenticateLegacyRequest.php +69 -0
- src/MWP/EventListener/MasterRequest/AuthenticateRequest.php +66 -0
- src/MWP/EventListener/MasterRequest/RemoveUsernameParam.php +35 -0
- src/MWP/EventListener/MasterRequest/SetCurrentUser.php +64 -0
- src/MWP/EventListener/MasterRequest/SetErrorHandler.php +177 -0
- src/MWP/EventListener/MasterRequest/VerifyConnectionInfo.php +73 -0
- src/MWP/EventListener/MasterRequest/VerifyNonce.php +48 -0
- src/MWP/EventListener/PublicRequest/AutomaticLogin.php +145 -0
- src/MWP/EventListener/PublicRequest/BrandContactSupport.php +222 -0
- src/MWP/EventListener/PublicRequest/DisableEditor.php +43 -0
- src/MWP/EventListener/PublicRequest/SetHitCounter.php +106 -0
- src/MWP/EventListener/PublicRequest/SetPluginInfo.php +144 -0
- src/MWP/Extension/HitCounter.php +76 -0
- src/MWP/Http/JsonResponse.php +23 -0
- src/MWP/Http/LegacyWorkerResponse.php +20 -0
- src/MWP/Http/RedirectResponse.php +34 -0
- src/MWP/Http/Response.php +66 -0
- src/MWP/Http/ResponseInterface.php +34 -0
- src/MWP/Monolog/Handler/JsonMessageHandler.php +49 -0
- src/MWP/Monolog/Processor/ExceptionProcessor.php +8 -0
- src/MWP/Monolog/Processor/ProcessProcessor.php +8 -0
- src/MWP/Monolog/Processor/TimeUsageProcessor.php +8 -0
- src/MWP/Parser/DefinitionTokenizer.php +8 -0
- src/MWP/Progress/Abstract.php +8 -0
- src/MWP/Progress/CurlCallbackInterface.php +8 -0
- src/MWP/Progress/Download.php +8 -0
- src/MWP/Progress/Upload.php +8 -0
- src/MWP/Security/Exception/NonceAlreadyUsed.php +14 -0
- src/MWP/Security/Exception/NonceExpired.php +14 -0
- src/MWP/Security/Exception/NonceFormatInvalid.php +14 -0
- src/MWP/Security/HashNonce.php +8 -0
- src/MWP/Security/NonceInterface.php +8 -0
- src/MWP/Security/NonceManager.php +72 -0
- src/MWP/ServiceContainer/Abstract.php +490 -0
- src/MWP/ServiceContainer/ContainerAwareInterface.php +14 -0
- src/MWP/ServiceContainer/Interface.php +141 -0
- src/MWP/ServiceContainer/Production.php +293 -0
- src/MWP/Signer/Factory.php +31 -0
- src/MWP/Signer/Interface.php +21 -0
- src/MWP/Signer/OpenSslSigner.php +54 -0
- src/MWP/Signer/PhpSecLibSigner.php +37 -0
- src/MWP/Updater/AutoUpdateManager.php +62 -0
- src/MWP/Updater/CoreUpdate.php +24 -0
- src/MWP/Updater/PluginUpdate.php +45 -0
- src/MWP/Updater/ThemeUpdate.php +34 -0
- src/MWP/Updater/UpdateManager.php +168 -0
- src/MWP/WordPress/Context.php +674 -0
- src/MWP/WordPress/HookProxy.php +47 -0
- src/MWP/WordPress/Provider/Interface.php +14 -0
- src/MWP/WordPress/Provider/Plugin.php +118 -0
- src/MWP/WordPress/Provider/Theme.php +92 -0
- src/MWP/WordPress/Query/Abstract.php +41 -0
- src/MWP/WordPress/Query/Comment.php +28 -0
- src/MWP/WordPress/Query/Interface.php +19 -0
- src/MWP/WordPress/Query/Post.php +59 -0
- src/MWP/WordPress/Query/User.php +28 -0
- src/MWP/Worker/ActionResponse.php +28 -0
- src/MWP/Worker/Brand.php +210 -0
- src/MWP/Worker/Configuration.php +60 -0
- src/MWP/Worker/Exception.php +87 -0
- src/MWP/Worker/Installer.php +140 -0
- src/MWP/Worker/Kernel.php +203 -0
- src/MWP/Worker/Request.php +332 -0
- src/MWP/Worker/RequestStack.php +89 -0
- src/MWP/Worker/ResponseCallback.php +34 -0
- src/Monolog/ErrorHandler.php +3 -5
- src/PHPSecLib/openssl.cnf +6 -6
- src/Symfony/EventDispatcher/Event.php +62 -0
- src/Symfony/EventDispatcher/EventDispatcher.php +177 -0
- src/Symfony/EventDispatcher/EventDispatcherInterface.php +94 -0
- src/Symfony/EventDispatcher/EventSubscriberInterface.php +48 -0
- version +2 -2
functions.php
CHANGED
@@ -1,576 +1,1482 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
function mwp_autoload($class)
|
4 |
-
{
|
5 |
-
if (substr($class, 0, 8) === 'Dropbox_'
|
6 |
-
|| substr($class, 0, 8) === 'Symfony_'
|
7 |
-
|| substr($class, 0, 8) === 'Monolog_'
|
8 |
-
|| substr($class, 0, 5) === 'Gelf_'
|
9 |
-
|| substr($class, 0, 4) === 'MWP_'
|
10 |
-
|| substr($class, 0, 4) === 'MMB_'
|
11 |
-
|| substr($class, 0, 3) === 'S3_'
|
12 |
-
) {
|
13 |
-
$file = dirname(__FILE__).'/src/'.str_replace('_', '/', $class).'.php';
|
14 |
-
if (file_exists($file)) {
|
15 |
-
include_once $file;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
}
|
19 |
-
|
20 |
-
function mwp_register_autoload_google()
|
21 |
-
{
|
22 |
-
static $registered;
|
23 |
-
|
24 |
-
if ($registered) {
|
25 |
-
return;
|
26 |
-
} else {
|
27 |
-
$registered = true;
|
28 |
-
}
|
29 |
-
|
30 |
-
if (version_compare(PHP_VERSION, '5.3', '<')) {
|
31 |
-
spl_autoload_register('mwp_autoload_google');
|
32 |
-
} else {
|
33 |
-
spl_autoload_register('mwp_autoload_google', true, true);
|
34 |
-
}
|
35 |
-
}
|
36 |
-
|
37 |
-
function mwp_autoload_google($class)
|
38 |
-
{
|
39 |
-
if (substr($class, 0, 7) === 'Google_') {
|
40 |
-
$file = dirname(__FILE__).'/src/'.str_replace('_', '/', $class).'.php';
|
41 |
-
if (file_exists($file)) {
|
42 |
-
include_once $file;
|
43 |
-
}
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
$
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
}
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
$
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
}
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
if (isset($
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
}
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
$
|
329 |
-
$
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
{
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
}
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
$
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
$
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
}
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
$
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
}
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
}
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
function mwp_autoload($class)
|
4 |
+
{
|
5 |
+
if (substr($class, 0, 8) === 'Dropbox_'
|
6 |
+
|| substr($class, 0, 8) === 'Symfony_'
|
7 |
+
|| substr($class, 0, 8) === 'Monolog_'
|
8 |
+
|| substr($class, 0, 5) === 'Gelf_'
|
9 |
+
|| substr($class, 0, 4) === 'MWP_'
|
10 |
+
|| substr($class, 0, 4) === 'MMB_'
|
11 |
+
|| substr($class, 0, 3) === 'S3_'
|
12 |
+
) {
|
13 |
+
$file = dirname(__FILE__).'/src/'.str_replace('_', '/', $class).'.php';
|
14 |
+
if (file_exists($file)) {
|
15 |
+
include_once $file;
|
16 |
+
}
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
function mwp_register_autoload_google()
|
21 |
+
{
|
22 |
+
static $registered;
|
23 |
+
|
24 |
+
if ($registered) {
|
25 |
+
return;
|
26 |
+
} else {
|
27 |
+
$registered = true;
|
28 |
+
}
|
29 |
+
|
30 |
+
if (version_compare(PHP_VERSION, '5.3', '<')) {
|
31 |
+
spl_autoload_register('mwp_autoload_google');
|
32 |
+
} else {
|
33 |
+
spl_autoload_register('mwp_autoload_google', true, true);
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
function mwp_autoload_google($class)
|
38 |
+
{
|
39 |
+
if (substr($class, 0, 7) === 'Google_') {
|
40 |
+
$file = dirname(__FILE__).'/src/'.str_replace('_', '/', $class).'.php';
|
41 |
+
if (file_exists($file)) {
|
42 |
+
include_once $file;
|
43 |
+
}
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @return Monolog_Psr_LoggerInterface
|
49 |
+
*/
|
50 |
+
function mwp_logger()
|
51 |
+
{
|
52 |
+
return mwp_container()->getLogger();
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return MWP_WordPress_Context
|
57 |
+
*/
|
58 |
+
function mwp_context()
|
59 |
+
{
|
60 |
+
return mwp_container()->getWordPressContext();
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @param $appKey
|
65 |
+
* @param $appSecret
|
66 |
+
* @param $token
|
67 |
+
* @param $tokenSecret
|
68 |
+
*
|
69 |
+
* @return Dropbox_Client
|
70 |
+
*/
|
71 |
+
function mwp_dropbox_oauth_factory($appKey, $appSecret, $token, $tokenSecret = null)
|
72 |
+
{
|
73 |
+
if ($tokenSecret) {
|
74 |
+
$oauthToken = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_consumer_key="'.$appKey.'", oauth_token="'.$token.'", oauth_signature="'.$appSecret.'&'.$tokenSecret.'"';
|
75 |
+
$clientIdentifier = $token;
|
76 |
+
} else {
|
77 |
+
$oauthToken = 'Bearer '.$token;
|
78 |
+
$clientIdentifier = 'PHP-ManageWp/1.0';
|
79 |
+
}
|
80 |
+
|
81 |
+
return new Dropbox_Client($oauthToken, $clientIdentifier);
|
82 |
+
}
|
83 |
+
|
84 |
+
function mwp_format_memory_limit($limit)
|
85 |
+
{
|
86 |
+
if ((string) (int) $limit === (string) $limit) {
|
87 |
+
// The number is numeric.
|
88 |
+
return mwp_format_bytes($limit);
|
89 |
+
}
|
90 |
+
|
91 |
+
$units = strtolower(substr($limit, -1));
|
92 |
+
|
93 |
+
if (!in_array($units, array('b', 'k', 'm', 'g'))) {
|
94 |
+
// Invalid size unit.
|
95 |
+
return $limit;
|
96 |
+
}
|
97 |
+
|
98 |
+
$number = substr($limit, 0, -1);
|
99 |
+
|
100 |
+
if ((string) (int) $number !== $number) {
|
101 |
+
// The number isn't numeric.
|
102 |
+
return $number;
|
103 |
+
}
|
104 |
+
|
105 |
+
switch ($units) {
|
106 |
+
case 'g':
|
107 |
+
return $number.' GB';
|
108 |
+
case 'm':
|
109 |
+
return $number.' MB';
|
110 |
+
case 'k':
|
111 |
+
return $number.' KB';
|
112 |
+
case 'b':
|
113 |
+
default:
|
114 |
+
return $number.' B';
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
function mwp_format_bytes($bytes)
|
119 |
+
{
|
120 |
+
$bytes = (int) $bytes;
|
121 |
+
|
122 |
+
if ($bytes > 1024 * 1024 * 1024) {
|
123 |
+
return round($bytes / 1024 / 1024 / 1024, 2).' GB';
|
124 |
+
} elseif ($bytes > 1024 * 1024) {
|
125 |
+
return round($bytes / 1024 / 1024, 2).' MB';
|
126 |
+
} elseif ($bytes > 1024) {
|
127 |
+
return round($bytes / 1024, 2).' KB';
|
128 |
+
}
|
129 |
+
|
130 |
+
return $bytes.' B';
|
131 |
+
}
|
132 |
+
|
133 |
+
function mwp_log_warnings()
|
134 |
+
{
|
135 |
+
// If mbstring.func_overload is set, it changes the behavior of the standard string functions in
|
136 |
+
// ways that makes external libraries like Dropbox break.
|
137 |
+
$mbstring_func_overload = ini_get("mbstring.func_overload");
|
138 |
+
if ($mbstring_func_overload & 2 == 2) {
|
139 |
+
mwp_logger()->warning('"mbstring.func_overload" changes the behavior of the standard string functions in ways that makes external libraries like Dropbox break');
|
140 |
+
}
|
141 |
+
|
142 |
+
if (strlen((string) PHP_INT_MAX) < 19) {
|
143 |
+
// Looks like we're running on a 32-bit build of PHP. This could cause problems because some of the numbers
|
144 |
+
// we use (file sizes, quota, etc) can be larger than 32-bit ints can handle.
|
145 |
+
mwp_logger()->warning("Some external libraries rely on 64-bit integers, but it looks like we're running on a version of PHP that doesn't support 64-bit integers (PHP_INT_MAX=".((string) PHP_INT_MAX).").");
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
function mmb_get_extended_info($stats)
|
150 |
+
{
|
151 |
+
$params = get_option('mmb_stats_filter');
|
152 |
+
$filter = isset($params['plugins']['cleanup']) ? $params['plugins']['cleanup'] : array();
|
153 |
+
$stats['num_revisions'] = mmb_num_revisions($filter['revisions']);
|
154 |
+
//$stats['num_revisions'] = 5;
|
155 |
+
$stats['overhead'] = mmb_handle_overhead(false);
|
156 |
+
$stats['num_spam_comments'] = mmb_num_spam_comments();
|
157 |
+
|
158 |
+
return $stats;
|
159 |
+
}
|
160 |
+
|
161 |
+
/* Revisions */
|
162 |
+
function cleanup_delete_worker($params = array())
|
163 |
+
{
|
164 |
+
$revision_params = get_option('mmb_stats_filter');
|
165 |
+
$revision_filter = isset($revision_params['plugins']['cleanup']) ? $revision_params['plugins']['cleanup'] : array();
|
166 |
+
|
167 |
+
$params_array = explode('_', $params['actions']);
|
168 |
+
$return_array = array();
|
169 |
+
|
170 |
+
foreach ($params_array as $param) {
|
171 |
+
switch ($param) {
|
172 |
+
case 'revision':
|
173 |
+
if (mmb_delete_all_revisions($revision_filter['revisions'])) {
|
174 |
+
$return_array['revision'] = 'OK';
|
175 |
+
} else {
|
176 |
+
$return_array['revision_error'] = 'OK, nothing to do';
|
177 |
+
}
|
178 |
+
break;
|
179 |
+
case 'overhead':
|
180 |
+
if (mmb_handle_overhead(true)) {
|
181 |
+
$return_array['overhead'] = 'OK';
|
182 |
+
} else {
|
183 |
+
$return_array['overhead_error'] = 'OK, nothing to do';
|
184 |
+
}
|
185 |
+
break;
|
186 |
+
case 'comment':
|
187 |
+
if (mmb_delete_spam_comments()) {
|
188 |
+
$return_array['comment'] = 'OK';
|
189 |
+
} else {
|
190 |
+
$return_array['comment_error'] = 'OK, nothing to do';
|
191 |
+
}
|
192 |
+
break;
|
193 |
+
default:
|
194 |
+
break;
|
195 |
+
}
|
196 |
+
}
|
197 |
+
|
198 |
+
unset($params);
|
199 |
+
|
200 |
+
mmb_response($return_array, true);
|
201 |
+
}
|
202 |
+
|
203 |
+
function mmb_num_revisions($filter)
|
204 |
+
{
|
205 |
+
global $wpdb;
|
206 |
+
|
207 |
+
$allRevisions = $wpdb->get_results("SELECT ID, post_name FROM {$wpdb->posts} WHERE post_type = 'revision'", ARRAY_A);
|
208 |
+
|
209 |
+
$revisionsToDelete = 0;
|
210 |
+
$revisionsToKeepCount = array();
|
211 |
+
|
212 |
+
if (isset($filter['num_to_keep']) && !empty($filter['num_to_keep'])) {
|
213 |
+
$num_rev = str_replace("r_", "", $filter['num_to_keep']);
|
214 |
+
|
215 |
+
foreach ($allRevisions as $revision) {
|
216 |
+
$revisionsToKeepCount[$revision['post_name']] = isset($revisionsToKeepCount[$revision['post_name']])
|
217 |
+
? $revisionsToKeepCount[$revision['post_name']] + 1
|
218 |
+
: 1;
|
219 |
+
|
220 |
+
if ($revisionsToKeepCount[$revision['post_name']] > $num_rev) {
|
221 |
+
++$revisionsToDelete;
|
222 |
+
}
|
223 |
+
}
|
224 |
+
} else {
|
225 |
+
$revisionsToDelete = count($allRevisions);
|
226 |
+
}
|
227 |
+
|
228 |
+
return $revisionsToDelete;
|
229 |
+
}
|
230 |
+
|
231 |
+
function mmb_select_all_revisions()
|
232 |
+
{
|
233 |
+
global $wpdb;
|
234 |
+
$sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'revision'";
|
235 |
+
$revisions = $wpdb->get_results($sql);
|
236 |
+
|
237 |
+
return $revisions;
|
238 |
+
}
|
239 |
+
|
240 |
+
function mmb_delete_all_revisions($filter)
|
241 |
+
{
|
242 |
+
global $wpdb;
|
243 |
+
$where = '';
|
244 |
+
$keep = isset($filter['num_to_keep']) ? $filter['num_to_keep'] : false;
|
245 |
+
if ($keep) {
|
246 |
+
$num_rev = str_replace("r_", "", $keep);
|
247 |
+
$allRevisions = $wpdb->get_results("SELECT ID, post_name FROM {$wpdb->posts} WHERE post_type = 'revision' ORDER BY post_date DESC", ARRAY_A);
|
248 |
+
$revisionsToKeep = array(0 => 0);
|
249 |
+
$revisionsToKeepCount = array();
|
250 |
+
|
251 |
+
foreach ($allRevisions as $revision) {
|
252 |
+
$revisionsToKeepCount[$revision['post_name']] = isset($revisionsToKeepCount[$revision['post_name']])
|
253 |
+
? $revisionsToKeepCount[$revision['post_name']] + 1
|
254 |
+
: 1;
|
255 |
+
|
256 |
+
if ($revisionsToKeepCount[$revision['post_name']] <= $num_rev) {
|
257 |
+
$revisionsToKeep[] = $revision['ID'];
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
$notInQuery = join(', ', $revisionsToKeep);
|
262 |
+
|
263 |
+
$where = "AND a.ID NOT IN ({$notInQuery})";
|
264 |
+
}
|
265 |
+
|
266 |
+
$sql = "DELETE a,b,c FROM $wpdb->posts a LEFT JOIN $wpdb->term_relationships b ON (a.ID = b.object_id) LEFT JOIN $wpdb->postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision' {$where}";
|
267 |
+
|
268 |
+
$revisions = $wpdb->query($sql);
|
269 |
+
|
270 |
+
return $revisions;
|
271 |
+
}
|
272 |
+
|
273 |
+
function mmb_handle_overhead($clear = false)
|
274 |
+
{
|
275 |
+
/** @var wpdb $wpdb */
|
276 |
+
global $wpdb;
|
277 |
+
$query = 'SHOW TABLE STATUS';
|
278 |
+
$tables = $wpdb->get_results($query, ARRAY_A);
|
279 |
+
$total_gain = 0;
|
280 |
+
$table_string = '';
|
281 |
+
foreach ($tables as $table) {
|
282 |
+
if (isset($table['Engine']) && $table['Engine'] === 'MyISAM') {
|
283 |
+
if ($wpdb->base_prefix != $wpdb->prefix) {
|
284 |
+
if (preg_match('/^'.$wpdb->prefix.'*/Ui', $table['Name'])) {
|
285 |
+
if ($table['Data_free'] > 0) {
|
286 |
+
$total_gain += $table['Data_free'] / 1024;
|
287 |
+
$table_string .= $table['Name'].",";
|
288 |
+
}
|
289 |
+
}
|
290 |
+
} else {
|
291 |
+
if (preg_match('/^'.$wpdb->prefix.'[0-9]{1,20}_*/Ui', $table['Name'])) {
|
292 |
+
continue;
|
293 |
+
} else {
|
294 |
+
if ($table['Data_free'] > 0) {
|
295 |
+
$total_gain += $table['Data_free'] / 1024;
|
296 |
+
$table_string .= $table['Name'].",";
|
297 |
+
}
|
298 |
+
}
|
299 |
+
}
|
300 |
+
// @todo check if the cleanup was successful, if not, set a flag always skip innodb cleanup
|
301 |
+
//} elseif (isset($table['Engine']) && $table['Engine'] == 'InnoDB') {
|
302 |
+
// $innodb_file_per_table = $wpdb->get_results("SHOW VARIABLES LIKE 'innodb_file_per_table'");
|
303 |
+
// if (isset($innodb_file_per_table[0]->Value) && $innodb_file_per_table[0]->Value === "ON") {
|
304 |
+
// if ($table['Data_free'] > 0) {
|
305 |
+
// $total_gain += $table['Data_free'] / 1024;
|
306 |
+
// $table_string .= $table['Name'].",";
|
307 |
+
// }
|
308 |
+
// }
|
309 |
+
}
|
310 |
+
}
|
311 |
+
|
312 |
+
if ($clear) {
|
313 |
+
$table_string = substr($table_string, 0, strlen($table_string) - 1); //remove last ,
|
314 |
+
$table_string = rtrim($table_string);
|
315 |
+
$query = "OPTIMIZE TABLE $table_string";
|
316 |
+
$optimize = $wpdb->query($query);
|
317 |
+
|
318 |
+
return (bool) $optimize;
|
319 |
+
} else {
|
320 |
+
return round($total_gain, 3);
|
321 |
+
}
|
322 |
+
}
|
323 |
+
|
324 |
+
/* Spam Comments */
|
325 |
+
function mmb_num_spam_comments()
|
326 |
+
{
|
327 |
+
global $wpdb;
|
328 |
+
$sql = "SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'";
|
329 |
+
$num_spams = $wpdb->get_var($sql);
|
330 |
+
|
331 |
+
return $num_spams;
|
332 |
+
}
|
333 |
+
|
334 |
+
function mmb_delete_spam_comments()
|
335 |
+
{
|
336 |
+
global $wpdb;
|
337 |
+
$spam = 1;
|
338 |
+
$total = 0;
|
339 |
+
while (!empty($spam)) {
|
340 |
+
$getCommentIds = "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = 'spam' LIMIT 200";
|
341 |
+
$spam = $wpdb->get_results($getCommentIds);
|
342 |
+
foreach ($spam as $comment) {
|
343 |
+
wp_delete_comment($comment->comment_ID, true);
|
344 |
+
}
|
345 |
+
$total += count($spam);
|
346 |
+
if (!empty($spam)) {
|
347 |
+
usleep(100000);
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
return $total;
|
352 |
+
}
|
353 |
+
|
354 |
+
function mmb_get_spam_comments()
|
355 |
+
{
|
356 |
+
global $wpdb;
|
357 |
+
$sql = "SELECT * FROM $wpdb->comments as a LEFT JOIN $wpdb->commentmeta as b WHERE a.comment_ID = b.comment_id AND a.comment_approved = 'spam'";
|
358 |
+
$spams = $wpdb->get_results($sql);
|
359 |
+
|
360 |
+
return $spams;
|
361 |
+
}
|
362 |
+
|
363 |
+
function mwp_is_nio_shell_available()
|
364 |
+
{
|
365 |
+
static $check;
|
366 |
+
if (isset($check)) {
|
367 |
+
return $check;
|
368 |
+
}
|
369 |
+
try {
|
370 |
+
$process = new Symfony_Process_Process("cd .", dirname(__FILE__), array(), null, 1);
|
371 |
+
$process->run();
|
372 |
+
$check = $process->isSuccessful();
|
373 |
+
} catch (Exception $e) {
|
374 |
+
$check = false;
|
375 |
+
}
|
376 |
+
|
377 |
+
return $check;
|
378 |
+
}
|
379 |
+
|
380 |
+
function mwp_is_shell_available()
|
381 |
+
{
|
382 |
+
if (mwp_is_safe_mode()) {
|
383 |
+
return false;
|
384 |
+
}
|
385 |
+
if (!function_exists('proc_open') || !function_exists('escapeshellarg')) {
|
386 |
+
return false;
|
387 |
+
}
|
388 |
+
|
389 |
+
if (extension_loaded('suhosin') && $suhosin = ini_get('suhosin.executor.func.blacklist')) {
|
390 |
+
$suhosin = explode(',', $suhosin);
|
391 |
+
$blacklist = array_map('trim', $suhosin);
|
392 |
+
$blacklist = array_map('strtolower', $blacklist);
|
393 |
+
if (in_array('proc_open', $blacklist)) {
|
394 |
+
return false;
|
395 |
+
}
|
396 |
+
}
|
397 |
+
|
398 |
+
if (!mwp_is_nio_shell_available()) {
|
399 |
+
return false;
|
400 |
+
}
|
401 |
+
|
402 |
+
return true;
|
403 |
+
}
|
404 |
+
|
405 |
+
function mwp_get_disabled_functions()
|
406 |
+
{
|
407 |
+
$list = array_merge(explode(',', ini_get('disable_functions')), explode(',', ini_get('suhosin.executor.func.blacklist')));
|
408 |
+
$list = array_map('trim', $list);
|
409 |
+
$list = array_map('strtolower', $list);
|
410 |
+
$list = array_filter($list);
|
411 |
+
|
412 |
+
return $list;
|
413 |
+
}
|
414 |
+
|
415 |
+
function mwp_is_safe_mode()
|
416 |
+
{
|
417 |
+
$value = ini_get("safe_mode");
|
418 |
+
if ((int) $value === 0 || strtolower($value) === "off") {
|
419 |
+
return false;
|
420 |
+
}
|
421 |
+
|
422 |
+
return true;
|
423 |
+
}
|
424 |
+
|
425 |
+
// Everything below was moved from init.php
|
426 |
+
|
427 |
+
function mmb_parse_request()
|
428 |
+
{
|
429 |
+
global $mmb_core, $wp_db_version, $_wp_using_ext_object_cache, $_mwp_data, $_mwp_auth;
|
430 |
+
$_wp_using_ext_object_cache = false;
|
431 |
+
@set_time_limit(1200);
|
432 |
+
|
433 |
+
if (isset($_mwp_data['setting'])) {
|
434 |
+
if (array_key_exists("dataown", $_mwp_data['setting'])) {
|
435 |
+
$oldconfiguration = array("dataown" => $_mwp_data['setting']['dataown']);
|
436 |
+
$mmb_core->save_options($oldconfiguration);
|
437 |
+
unset($_mwp_data['setting']['dataown']);
|
438 |
+
}
|
439 |
+
|
440 |
+
$configurationService = new MWP_Configuration_Service();
|
441 |
+
$configuration = new MWP_Configuration_Conf($_mwp_data['setting']);
|
442 |
+
$configurationService->saveConfiguration($configuration);
|
443 |
+
}
|
444 |
+
|
445 |
+
if ($_mwp_data['action'] === 'add_site') {
|
446 |
+
mmb_add_site($_mwp_data['params']);
|
447 |
+
mmb_response('You should never see this.', false);
|
448 |
+
}
|
449 |
+
|
450 |
+
/* in case database upgrade required, do database backup and perform upgrade ( wordpress wp_upgrade() function ) */
|
451 |
+
if (strlen(trim($wp_db_version)) && !defined('ACX_PLUGIN_DIR')) {
|
452 |
+
if (get_option('db_version') != $wp_db_version) {
|
453 |
+
/* in multisite network, please update database manualy */
|
454 |
+
if (!is_multisite()) {
|
455 |
+
if (!function_exists('wp_upgrade')) {
|
456 |
+
include_once ABSPATH.'wp-admin/includes/upgrade.php';
|
457 |
+
}
|
458 |
+
|
459 |
+
ob_clean();
|
460 |
+
@wp_upgrade();
|
461 |
+
@do_action('after_db_upgrade');
|
462 |
+
ob_end_clean();
|
463 |
+
}
|
464 |
+
}
|
465 |
+
}
|
466 |
+
|
467 |
+
if (isset($_mwp_data['params']['secure'])) {
|
468 |
+
if (is_array($_mwp_data['params']['secure'])) {
|
469 |
+
$secureParams = $_mwp_data['params']['secure'];
|
470 |
+
foreach ($secureParams as $key => $value) {
|
471 |
+
$secureParams[$key] = base64_decode($value);
|
472 |
+
}
|
473 |
+
$_mwp_data['params']['secure'] = $secureParams;
|
474 |
+
} else {
|
475 |
+
$_mwp_data['params']['secure'] = base64_decode($_mwp_data['params']['secure']);
|
476 |
+
}
|
477 |
+
if ($decrypted = $mmb_core->_secure_data($_mwp_data['params']['secure'])) {
|
478 |
+
$decrypted = maybe_unserialize($decrypted);
|
479 |
+
if (is_array($decrypted)) {
|
480 |
+
foreach ($decrypted as $key => $val) {
|
481 |
+
if (!is_numeric($key)) {
|
482 |
+
$_mwp_data['params'][$key] = $val;
|
483 |
+
}
|
484 |
+
}
|
485 |
+
unset($_mwp_data['params']['secure']);
|
486 |
+
} else {
|
487 |
+
$_mwp_data['params']['secure'] = $decrypted;
|
488 |
+
}
|
489 |
+
}
|
490 |
+
|
491 |
+
if (!$decrypted && $mmb_core->get_random_signature() !== false) {
|
492 |
+
require_once dirname(__FILE__).'/src/PHPSecLib/Crypt/AES.php';
|
493 |
+
$cipher = new Crypt_AES(CRYPT_AES_MODE_ECB);
|
494 |
+
$cipher->setKey($mmb_core->get_random_signature());
|
495 |
+
$decrypted = $cipher->decrypt($_mwp_data['params']['secure']);
|
496 |
+
$_mwp_data['params']['account_info'] = json_decode($decrypted, true);
|
497 |
+
}
|
498 |
+
}
|
499 |
+
|
500 |
+
$logData = array(
|
501 |
+
'action' => $_mwp_data['action'],
|
502 |
+
'action_parameters' => $_mwp_data['params'],
|
503 |
+
'action_settings' => $_mwp_data['setting'],
|
504 |
+
);
|
505 |
+
|
506 |
+
if (!empty($_mwp_data['setting'])) {
|
507 |
+
$logData['settings'] = $_mwp_data['setting'];
|
508 |
+
}
|
509 |
+
|
510 |
+
mwp_logger()->debug('Master request: "{action}"', $logData);
|
511 |
+
}
|
512 |
+
|
513 |
+
function mmb_response($response = false, $success = true)
|
514 |
+
{
|
515 |
+
mwp_logger()->debug('Master response: {action_response_status}', array(
|
516 |
+
'action_response_status' => $success ? 'success' : 'error',
|
517 |
+
'action_response' => $response,
|
518 |
+
'headers_sent' => headers_sent(),
|
519 |
+
));
|
520 |
+
|
521 |
+
if (!$success) {
|
522 |
+
if (!is_scalar($response)) {
|
523 |
+
$response = json_encode($response);
|
524 |
+
}
|
525 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::GENERAL_ERROR, $response);
|
526 |
+
}
|
527 |
+
|
528 |
+
throw new MWP_Worker_ActionResponse($response);
|
529 |
+
}
|
530 |
+
|
531 |
+
function mmb_remove_site($params)
|
532 |
+
{
|
533 |
+
extract($params);
|
534 |
+
global $mmb_core;
|
535 |
+
$mmb_core->deactivate($deactivate);
|
536 |
+
|
537 |
+
include_once ABSPATH.'wp-admin/includes/plugin.php';
|
538 |
+
$plugin_slug = 'worker/init.php';
|
539 |
+
|
540 |
+
if ($deactivate) {
|
541 |
+
deactivate_plugins($plugin_slug, true);
|
542 |
+
} else {
|
543 |
+
// Prolong the worker deactivation upon site removal.
|
544 |
+
update_option('mmb_worker_activation_time', time());
|
545 |
+
}
|
546 |
+
|
547 |
+
if (!is_plugin_active($plugin_slug)) {
|
548 |
+
mmb_response(
|
549 |
+
array(
|
550 |
+
'deactivated' => 'Site removed successfully. <br /><br />ManageWP Worker plugin successfully deactivated.',
|
551 |
+
),
|
552 |
+
true
|
553 |
+
);
|
554 |
+
} else {
|
555 |
+
mmb_response(
|
556 |
+
array(
|
557 |
+
'removed_data' => 'Site removed successfully. <br /><br /><b>ManageWP Worker plugin was not deactivated.</b>',
|
558 |
+
),
|
559 |
+
true
|
560 |
+
);
|
561 |
+
}
|
562 |
+
}
|
563 |
+
|
564 |
+
function mmb_stats_get($params)
|
565 |
+
{
|
566 |
+
global $mmb_core;
|
567 |
+
$mmb_core->get_stats_instance();
|
568 |
+
|
569 |
+
mwp_context()->requireWpRewrite();
|
570 |
+
mwp_context()->requireTaxonomies();
|
571 |
+
mwp_context()->requirePostTypes();
|
572 |
+
mwp_context()->requireTheme();
|
573 |
+
|
574 |
+
$data = array_merge($mmb_core->stats_instance->get($params), mmb_pre_init_stats($params));
|
575 |
+
mmb_response($data, true);
|
576 |
+
}
|
577 |
+
|
578 |
+
function mmb_worker_header()
|
579 |
+
{
|
580 |
+
global $mmb_core, $current_user;
|
581 |
+
|
582 |
+
if (!headers_sent()) {
|
583 |
+
if (isset($current_user->ID)) {
|
584 |
+
$expiration = time() + apply_filters('auth_cookie_expiration', 10800, $current_user->ID, false);
|
585 |
+
} else {
|
586 |
+
$expiration = time() + 10800;
|
587 |
+
}
|
588 |
+
|
589 |
+
setcookie(MMB_XFRAME_COOKIE, md5(MMB_XFRAME_COOKIE), $expiration, COOKIEPATH, COOKIE_DOMAIN, false, true);
|
590 |
+
$_COOKIE[MMB_XFRAME_COOKIE] = md5(MMB_XFRAME_COOKIE);
|
591 |
+
}
|
592 |
+
}
|
593 |
+
|
594 |
+
function mmb_pre_init_stats($params)
|
595 |
+
{
|
596 |
+
global $mmb_core;
|
597 |
+
|
598 |
+
mwp_context()->requireWpRewrite();
|
599 |
+
mwp_context()->requireTaxonomies();
|
600 |
+
mwp_context()->requirePostTypes();
|
601 |
+
mwp_context()->requireTheme();
|
602 |
+
|
603 |
+
$mmb_core->get_stats_instance();
|
604 |
+
|
605 |
+
return $mmb_core->stats_instance->pre_init_stats($params);
|
606 |
+
}
|
607 |
+
|
608 |
+
function mwp_datasend($params = array())
|
609 |
+
{
|
610 |
+
global $mmb_core, $_mmb_item_filter, $_mmb_options;
|
611 |
+
|
612 |
+
$_mmb_remoteurl = get_option('home');
|
613 |
+
$_mmb_remoteown = isset($_mmb_options['dataown']) && !empty($_mmb_options['dataown']) ? $_mmb_options['dataown'] : false;
|
614 |
+
|
615 |
+
if (empty($_mmb_remoteown)) {
|
616 |
+
return;
|
617 |
+
}
|
618 |
+
|
619 |
+
$_mmb_item_filter['pre_init_stats'] = array('core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled', 'site_statistics');
|
620 |
+
$_mmb_item_filter['get'] = array('updates', 'errors');
|
621 |
+
$mmb_core->get_stats_instance();
|
622 |
+
|
623 |
+
$filter = array(
|
624 |
+
'refresh' => 'transient',
|
625 |
+
'item_filter' => array(
|
626 |
+
'get_stats' => array(
|
627 |
+
array('updates', array('plugins' => true, 'themes' => true, 'premium' => true)),
|
628 |
+
array('core_update', array('core' => true)),
|
629 |
+
array('posts', array('numberposts' => 5)),
|
630 |
+
array('drafts', array('numberposts' => 5)),
|
631 |
+
array('scheduled', array('numberposts' => 5)),
|
632 |
+
array('hit_counter'),
|
633 |
+
array('comments', array('numberposts' => 5)),
|
634 |
+
array('backups'),
|
635 |
+
'plugins' => array(
|
636 |
+
'cleanup' => array(
|
637 |
+
'overhead' => array(),
|
638 |
+
'revisions' => array('num_to_keep' => 'r_5'),
|
639 |
+
'spam' => array(),
|
640 |
+
),
|
641 |
+
),
|
642 |
+
),
|
643 |
+
),
|
644 |
+
);
|
645 |
+
|
646 |
+
$pre_init_data = $mmb_core->stats_instance->pre_init_stats($filter);
|
647 |
+
$init_data = $mmb_core->stats_instance->get($filter);
|
648 |
+
|
649 |
+
$data = array_merge($init_data, $pre_init_data);
|
650 |
+
$data['server_ip'] = $_SERVER['SERVER_ADDR'];
|
651 |
+
$data['uhost'] = php_uname('n');
|
652 |
+
$hash = $mmb_core->get_secure_hash();
|
653 |
+
|
654 |
+
if (mwp_datasend_trigger($data)) { // adds trigger to check if really need to send something
|
655 |
+
$configurationService = new MWP_Configuration_Service();
|
656 |
+
$configuration = $configurationService->getConfiguration();
|
657 |
+
|
658 |
+
set_transient("mwp_cache_notifications", $data);
|
659 |
+
set_transient("mwp_cache_notifications_time", time());
|
660 |
+
|
661 |
+
$datasend['datasend'] = $mmb_core->encrypt_data($data);
|
662 |
+
$datasend['sitehome'] = base64_encode($_mmb_remoteown.'[]'.$_mmb_remoteurl);
|
663 |
+
$datasend['sitehash'] = md5($hash.$_mmb_remoteown.$_mmb_remoteurl);
|
664 |
+
$datasend['setting_checksum_order'] = implode(",", array_keys($configuration->getVariables()));
|
665 |
+
$datasend['setting_checksum'] = md5(json_encode($configuration->toArray()));
|
666 |
+
if (!class_exists('WP_Http')) {
|
667 |
+
include_once ABSPATH.WPINC.'/class-http.php';
|
668 |
+
}
|
669 |
+
|
670 |
+
$remote = array();
|
671 |
+
$remote['body'] = $datasend;
|
672 |
+
$remote['timeout'] = 20;
|
673 |
+
|
674 |
+
$result = wp_remote_post($configuration->getMasterCronUrl(), $remote);
|
675 |
+
if (!is_wp_error($result)) {
|
676 |
+
if (isset($result['body']) && !empty($result['body'])) {
|
677 |
+
$settings = @unserialize($result['body']);
|
678 |
+
/* rebrand worker or set default */
|
679 |
+
$brand = '';
|
680 |
+
if ($settings['worker_brand']) {
|
681 |
+
$brand = $settings['worker_brand'];
|
682 |
+
}
|
683 |
+
update_option("mwp_worker_brand", $brand);
|
684 |
+
/* change worker version */
|
685 |
+
$w_version = @$settings['worker_updates']['version'];
|
686 |
+
$w_url = @$settings['worker_updates']['url'];
|
687 |
+
if (version_compare($GLOBALS['MMB_WORKER_VERSION'], $w_version, '<')) {
|
688 |
+
//automatic update
|
689 |
+
$mmb_core->update_worker_plugin(array("download_url" => $w_url));
|
690 |
+
}
|
691 |
+
|
692 |
+
if (!empty($settings['mwp_worker_configuration'])) {
|
693 |
+
require_once dirname(__FILE__).'/src/PHPSecLib/Crypt/RSA.php';
|
694 |
+
$rsa = new Crypt_RSA();
|
695 |
+
$keyName = $configuration->getKeyName();
|
696 |
+
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
697 |
+
$rsa->loadKey(file_get_contents(dirname(__FILE__)."/publickeys/$keyName.pub")); // public key
|
698 |
+
$signature = base64_decode($settings['mwp_worker_configuration_signature']);
|
699 |
+
if ($rsa->verify(json_encode($settings['mwp_worker_configuration']), $signature)) {
|
700 |
+
$configuration = new MWP_Configuration_Conf($settings['mwp_worker_configuration']);
|
701 |
+
$configurationService->saveConfiguration($configuration);
|
702 |
+
}
|
703 |
+
}
|
704 |
+
}
|
705 |
+
} else {
|
706 |
+
//$mmb_core->_log($result);
|
707 |
+
}
|
708 |
+
}
|
709 |
+
}
|
710 |
+
|
711 |
+
// trigger function, returns true if notifications should be sent
|
712 |
+
function mwp_datasend_trigger($stats)
|
713 |
+
{
|
714 |
+
$configurationService = new MWP_Configuration_Service();
|
715 |
+
$configuration = $configurationService->getConfiguration();
|
716 |
+
|
717 |
+
$cachedData = get_transient("mwp_cache_notifications");
|
718 |
+
$cacheTime = (int) get_transient("mwp_cache_notifications_time");
|
719 |
+
|
720 |
+
$returnValue = false;
|
721 |
+
if (false == $cachedData || empty($configuration)) {
|
722 |
+
$returnValue = true;
|
723 |
+
}
|
724 |
+
/**
|
725 |
+
* Cache lifetime check
|
726 |
+
*/
|
727 |
+
if (!$returnValue) {
|
728 |
+
$now = time();
|
729 |
+
if ($now - $configuration->getNotiCacheLifeTime() >= $cacheTime) {
|
730 |
+
$returnValue = true;
|
731 |
+
}
|
732 |
+
}
|
733 |
+
|
734 |
+
/**
|
735 |
+
* Themes difference check section
|
736 |
+
* First check if array differ in size. If same size,then check values difference
|
737 |
+
*/
|
738 |
+
if (!$returnValue && empty($stats['upgradable_themes']) != empty($cachedData['upgradable_themes'])) {
|
739 |
+
$returnValue = true;
|
740 |
+
}
|
741 |
+
if (!$returnValue && !empty($stats['upgradable_themes'])) {
|
742 |
+
$themesArr = mwp_std_to_array($stats['upgradable_themes']);
|
743 |
+
$cachedThemesArr = mwp_std_to_array($cachedData['upgradable_themes']);
|
744 |
+
if ($themesArr != $cachedThemesArr) {
|
745 |
+
$returnValue = true;
|
746 |
+
}
|
747 |
+
}
|
748 |
+
|
749 |
+
/**
|
750 |
+
* Plugins difference check section
|
751 |
+
* First check if array differ in size. If same size,then check values difference
|
752 |
+
*/
|
753 |
+
if (!$returnValue && empty($stats['upgradable_plugins']) != empty($cachedData['upgradable_plugins'])) {
|
754 |
+
$returnValue = true;
|
755 |
+
}
|
756 |
+
|
757 |
+
if (!$returnValue && !empty($stats['upgradable_plugins'])) { //we have hear stdclass
|
758 |
+
$pluginsArr = mwp_std_to_array($stats['upgradable_plugins']);
|
759 |
+
$cachedPluginsArr = mwp_std_to_array($cachedData['upgradable_plugins']);
|
760 |
+
if ($pluginsArr != $cachedPluginsArr) {
|
761 |
+
$returnValue = true;
|
762 |
+
}
|
763 |
+
}
|
764 |
+
|
765 |
+
/**
|
766 |
+
* Premium difference check section
|
767 |
+
* First check if array differ in size. If same size,then check values difference
|
768 |
+
*/
|
769 |
+
if (!$returnValue && empty($stats['premium_updates']) != empty($cachedData['premium_updates'])) {
|
770 |
+
$returnValue = true;
|
771 |
+
}
|
772 |
+
if (!$returnValue && !empty($stats['premium_updates'])) {
|
773 |
+
$premiumArr = mwp_std_to_array($stats['premium_updates']);
|
774 |
+
$cachedPremiumArr = mwp_std_to_array($cachedData['premium_updates']);
|
775 |
+
if ($premiumArr != $cachedPremiumArr) {
|
776 |
+
$returnValue = true;
|
777 |
+
}
|
778 |
+
}
|
779 |
+
/**
|
780 |
+
* Comments
|
781 |
+
* Check if we have configs first, then check trasholds
|
782 |
+
*/
|
783 |
+
if (!$returnValue && (int) $stats['num_spam_comments'] >= $configuration->getNotiTresholdSpamComments() && $stats['num_spam_comments'] != (int) $cachedData['num_spam_comments']) {
|
784 |
+
$returnValue = true;
|
785 |
+
}
|
786 |
+
if (!$returnValue && (int) $stats['num_spam_comments'] < (int) $cachedData['num_spam_comments']) {
|
787 |
+
$returnValue = true;
|
788 |
+
}
|
789 |
+
|
790 |
+
if (!$returnValue && !empty($stats['comments'])) {
|
791 |
+
if (!empty($stats['comments']['pending']) && count($stats['comments']['pending']) >= $configuration->getNotiTresholdPendingComments()) {
|
792 |
+
$pendingArr = mwp_std_to_array($stats['comments']['pending']);
|
793 |
+
$cachedPendingArr = mwp_std_to_array($cachedData['comments']['pending']);
|
794 |
+
if ($pendingArr != $cachedPendingArr) {
|
795 |
+
$returnValue = true;
|
796 |
+
}
|
797 |
+
}
|
798 |
+
|
799 |
+
if (!empty($stats['comments']['approved']) && count($stats['comments']['approved']) >= $configuration->getNotiTresholdApprovedComments()) {
|
800 |
+
$approvedArr = mwp_std_to_array($stats['comments']['approved']);
|
801 |
+
$cachedApprovedArr = mwp_std_to_array($cachedData['comments']['approved']);
|
802 |
+
if ($approvedArr != $cachedApprovedArr) {
|
803 |
+
$returnValue = true;
|
804 |
+
}
|
805 |
+
}
|
806 |
+
}
|
807 |
+
|
808 |
+
/**
|
809 |
+
* Drafts, posts
|
810 |
+
*/
|
811 |
+
|
812 |
+
if (!$returnValue && !empty($stats['drafts']) && count($stats['drafts']) >= $configuration->getNotiTresholdDrafts()) {
|
813 |
+
if (count($stats['drafts']) > $configuration->getNotiTresholdDrafts() && empty($cachedData['drafts'])) {
|
814 |
+
$returnValue = true;
|
815 |
+
} else {
|
816 |
+
$draftsArr = mwp_std_to_array($stats['drafts']);
|
817 |
+
$cachedDraftsArr = mwp_std_to_array($cachedData['drafts']);
|
818 |
+
if ($draftsArr != $cachedDraftsArr) {
|
819 |
+
$returnValue = true;
|
820 |
+
}
|
821 |
+
}
|
822 |
+
}
|
823 |
+
|
824 |
+
if (!$returnValue && !empty($stats['posts']) && count($stats['posts']) >= $configuration->getNotiTresholdPosts()) {
|
825 |
+
if (count($stats['posts']) > $configuration->getNotiTresholdPosts() && empty($cachedData['posts'])) {
|
826 |
+
$returnValue = true;
|
827 |
+
} else {
|
828 |
+
$postsArr = mwp_std_to_array($stats['posts']);
|
829 |
+
$cachedPostsArr = mwp_std_to_array($cachedData['posts']);
|
830 |
+
if ($postsArr != $cachedPostsArr) {
|
831 |
+
$returnValue = true;
|
832 |
+
}
|
833 |
+
}
|
834 |
+
}
|
835 |
+
|
836 |
+
/**
|
837 |
+
* Core updates & backups
|
838 |
+
*/
|
839 |
+
if (!$returnValue && empty($stats['core_updates']) != empty($cachedData['core_updates'])) {
|
840 |
+
$returnValue = true;
|
841 |
+
}
|
842 |
+
if (!$returnValue && !empty($stats['core_updates'])) {
|
843 |
+
$coreArr = mwp_std_to_array($stats['core_updates']);
|
844 |
+
$cachedCoreArr = mwp_std_to_array($cachedData['core_updates']);
|
845 |
+
if ($coreArr != $cachedCoreArr) {
|
846 |
+
$returnValue = true;
|
847 |
+
}
|
848 |
+
}
|
849 |
+
|
850 |
+
if (!$returnValue && empty($stats['mwp_backups']) != empty($cachedData['mwp_backups'])) {
|
851 |
+
$returnValue = true;
|
852 |
+
}
|
853 |
+
if (!$returnValue && !empty($stats['mwp_backups'])) {
|
854 |
+
$backupArr = mwp_std_to_array($stats['mwp_backups']);
|
855 |
+
$cachedBackupArr = mwp_std_to_array($cachedData['mwp_backups']);
|
856 |
+
if ($backupArr != $cachedBackupArr) {
|
857 |
+
$returnValue = true;
|
858 |
+
}
|
859 |
+
}
|
860 |
+
|
861 |
+
return $returnValue;
|
862 |
+
}
|
863 |
+
|
864 |
+
function mwp_std_to_array($obj)
|
865 |
+
{
|
866 |
+
if (is_object($obj)) {
|
867 |
+
$objArr = clone $obj;
|
868 |
+
} else {
|
869 |
+
$objArr = $obj;
|
870 |
+
}
|
871 |
+
if (!empty($objArr)) {
|
872 |
+
foreach ($objArr as &$element) {
|
873 |
+
if ($element instanceof stdClass || is_array($element)) {
|
874 |
+
$element = mwp_std_to_array($element);
|
875 |
+
}
|
876 |
+
}
|
877 |
+
$objArr = (array) $objArr;
|
878 |
+
}
|
879 |
+
|
880 |
+
return $objArr;
|
881 |
+
}
|
882 |
+
|
883 |
+
function mmb_post_create($params)
|
884 |
+
{
|
885 |
+
global $mmb_core;
|
886 |
+
|
887 |
+
mwp_context()->requireWpRewrite();
|
888 |
+
mwp_context()->requireTaxonomies();
|
889 |
+
mwp_context()->requirePostTypes();
|
890 |
+
|
891 |
+
$mmb_core->get_post_instance();
|
892 |
+
$return = $mmb_core->post_instance->create($params);
|
893 |
+
if (is_int($return)) {
|
894 |
+
mmb_response($return, true);
|
895 |
+
} else {
|
896 |
+
if (isset($return['error'])) {
|
897 |
+
mmb_response($return['error'], false);
|
898 |
+
} else {
|
899 |
+
mmb_response($return, false);
|
900 |
+
}
|
901 |
+
}
|
902 |
+
}
|
903 |
+
|
904 |
+
function mmb_change_post_status($params)
|
905 |
+
{
|
906 |
+
global $mmb_core;
|
907 |
+
$mmb_core->get_post_instance();
|
908 |
+
$return = $mmb_core->post_instance->change_status($params);
|
909 |
+
if (is_wp_error($return)) {
|
910 |
+
mmb_response($return->get_error_message(), false);
|
911 |
+
} elseif (empty($return)) {
|
912 |
+
mmb_response("Post status can not be changed", false);
|
913 |
+
} else {
|
914 |
+
mmb_response($return, true);
|
915 |
+
}
|
916 |
+
}
|
917 |
+
|
918 |
+
function mmb_backup_now($params)
|
919 |
+
{
|
920 |
+
global $mmb_core;
|
921 |
+
|
922 |
+
$mmb_core->get_backup_instance();
|
923 |
+
$return = $mmb_core->backup_instance->backup($params);
|
924 |
+
|
925 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
926 |
+
mmb_response($return['error'], false);
|
927 |
+
} else {
|
928 |
+
mmb_response($return, true);
|
929 |
+
}
|
930 |
+
}
|
931 |
+
|
932 |
+
function mwp_ping_backup($params)
|
933 |
+
{
|
934 |
+
global $mmb_core;
|
935 |
+
|
936 |
+
$mmb_core->get_backup_instance();
|
937 |
+
$return = $mmb_core->backup_instance->ping_backup($params);
|
938 |
+
|
939 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
940 |
+
mmb_response($return['error'], false);
|
941 |
+
} else {
|
942 |
+
mmb_response($return, true);
|
943 |
+
}
|
944 |
+
}
|
945 |
+
|
946 |
+
function mmb_run_task_now($params)
|
947 |
+
{
|
948 |
+
global $mmb_core;
|
949 |
+
$mmb_core->get_backup_instance();
|
950 |
+
|
951 |
+
$task_name = isset($params['task_name']) ? $params['task_name'] : false;
|
952 |
+
$google_drive_token = isset($params['google_drive_token']) ? $params['google_drive_token'] : false;
|
953 |
+
$resultUuid = !empty($params['resultUuid']) ? $params['resultUuid'] : false;
|
954 |
+
|
955 |
+
if ($task_name) {
|
956 |
+
$return = $mmb_core->backup_instance->task_now($task_name, $google_drive_token, $resultUuid);
|
957 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
958 |
+
mmb_response($return['error'], false);
|
959 |
+
} else {
|
960 |
+
mmb_response($return, true);
|
961 |
+
}
|
962 |
+
} else {
|
963 |
+
mmb_response("Task name is not provided.", false);
|
964 |
+
}
|
965 |
+
}
|
966 |
+
|
967 |
+
function mmb_get_backup_req($params)
|
968 |
+
{
|
969 |
+
global $mmb_core;
|
970 |
+
$mmb_core->get_stats_instance();
|
971 |
+
$return = $mmb_core->stats_instance->get_backup_req($params);
|
972 |
+
|
973 |
+
mmb_response($return, true);
|
974 |
+
}
|
975 |
+
|
976 |
+
// Fires when Backup Now, or some backup task is saved.
|
977 |
+
function mmb_scheduled_backup($params)
|
978 |
+
{
|
979 |
+
global $mmb_core;
|
980 |
+
$mmb_core->get_backup_instance();
|
981 |
+
$return = $mmb_core->backup_instance->set_backup_task($params);
|
982 |
+
mmb_response($return, $return);
|
983 |
+
}
|
984 |
+
|
985 |
+
function mmm_delete_backup($params)
|
986 |
+
{
|
987 |
+
global $mmb_core;
|
988 |
+
$mmb_core->get_backup_instance();
|
989 |
+
$return = $mmb_core->backup_instance->delete_backup($params);
|
990 |
+
mmb_response($return, $return);
|
991 |
+
}
|
992 |
+
|
993 |
+
function mmb_restore_now($params)
|
994 |
+
{
|
995 |
+
global $mmb_core;
|
996 |
+
$mmb_core->get_backup_instance();
|
997 |
+
$return = $mmb_core->backup_instance->restore($params);
|
998 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
999 |
+
mmb_response($return['error'], false);
|
1000 |
+
} else {
|
1001 |
+
mmb_response($return, true);
|
1002 |
+
}
|
1003 |
+
}
|
1004 |
+
|
1005 |
+
function mmb_remote_backup_now($params)
|
1006 |
+
{
|
1007 |
+
global $mmb_core;
|
1008 |
+
$backup_instance = $mmb_core->get_backup_instance();
|
1009 |
+
$return = $mmb_core->backup_instance->remote_backup_now($params);
|
1010 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1011 |
+
mmb_response($return['error'], false);
|
1012 |
+
} else {
|
1013 |
+
mmb_response($return, true);
|
1014 |
+
}
|
1015 |
+
}
|
1016 |
+
|
1017 |
+
function mmb_run_forked_action()
|
1018 |
+
{
|
1019 |
+
if (!isset($_POST['mmb_fork_nonce'])) {
|
1020 |
+
return false;
|
1021 |
+
}
|
1022 |
+
|
1023 |
+
$originalUser = wp_get_current_user();
|
1024 |
+
$usernameUsed = array_key_exists('username', $_POST) ? $_POST : null;
|
1025 |
+
|
1026 |
+
if ($usernameUsed && !is_user_logged_in()) {
|
1027 |
+
$user = function_exists('get_user_by') ? get_user_by('login', $_POST['username']) : get_user_by('login', $_POST['username']);
|
1028 |
+
}
|
1029 |
+
|
1030 |
+
if (isset($user) && isset($user->ID)) {
|
1031 |
+
wp_set_current_user($user->ID);
|
1032 |
+
// Compatibility with All In One Security
|
1033 |
+
update_user_meta($user->ID, 'last_login_time', current_time('mysql'));
|
1034 |
+
}
|
1035 |
+
|
1036 |
+
if (!wp_verify_nonce($_POST['mmb_fork_nonce'], 'mmb-fork-nonce')) {
|
1037 |
+
wp_set_current_user($originalUser->ID);
|
1038 |
+
|
1039 |
+
return false;
|
1040 |
+
}
|
1041 |
+
|
1042 |
+
$public_key = get_option('_worker_public_key');
|
1043 |
+
if (!isset($_POST['public_key']) || $public_key !== $_POST['public_key']) {
|
1044 |
+
wp_set_current_user($originalUser->ID);
|
1045 |
+
|
1046 |
+
return false;
|
1047 |
+
}
|
1048 |
+
$args = @json_decode(stripslashes($_POST['args']), true);
|
1049 |
+
$args['forked'] = true;
|
1050 |
+
|
1051 |
+
if (!isset($args)) {
|
1052 |
+
wp_set_current_user($originalUser->ID);
|
1053 |
+
|
1054 |
+
return false;
|
1055 |
+
}
|
1056 |
+
$cron_action = isset($_POST['mwp_forked_action']) ? $_POST['mwp_forked_action'] : false;
|
1057 |
+
if ($cron_action) {
|
1058 |
+
do_action($cron_action, $args);
|
1059 |
+
}
|
1060 |
+
//unset($_POST['public_key']);
|
1061 |
+
unset($_POST['mmb_fork_nonce']);
|
1062 |
+
unset($_POST['args']);
|
1063 |
+
unset($_POST['mwp_forked_action']);
|
1064 |
+
|
1065 |
+
wp_set_current_user($originalUser->ID);
|
1066 |
+
|
1067 |
+
return true;
|
1068 |
+
}
|
1069 |
+
|
1070 |
+
function mmb_update_worker_plugin($params)
|
1071 |
+
{
|
1072 |
+
global $mmb_core;
|
1073 |
+
mmb_response($mmb_core->update_worker_plugin($params), true);
|
1074 |
+
}
|
1075 |
+
|
1076 |
+
function mmb_install_addon($params)
|
1077 |
+
{
|
1078 |
+
global $mmb_core;
|
1079 |
+
|
1080 |
+
mwp_context()->requireTheme();
|
1081 |
+
mwp_load_required_components();
|
1082 |
+
|
1083 |
+
$mmb_core->get_installer_instance();
|
1084 |
+
$return = $mmb_core->installer_instance->install_remote_file($params);
|
1085 |
+
mmb_response($return, true);
|
1086 |
+
}
|
1087 |
+
|
1088 |
+
function mmb_do_upgrade($params)
|
1089 |
+
{
|
1090 |
+
global $mmb_core, $mmb_upgrading;
|
1091 |
+
|
1092 |
+
mwp_context()->requireTheme();
|
1093 |
+
|
1094 |
+
$mmb_core->get_installer_instance();
|
1095 |
+
$return = $mmb_core->installer_instance->do_upgrade($params);
|
1096 |
+
mmb_response($return, true);
|
1097 |
+
}
|
1098 |
+
|
1099 |
+
function mmb_get_comments($params)
|
1100 |
+
{
|
1101 |
+
global $mmb_core;
|
1102 |
+
$mmb_core->get_comment_instance();
|
1103 |
+
$return = $mmb_core->comment_instance->get_comments($params);
|
1104 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1105 |
+
mmb_response($return['error'], false);
|
1106 |
+
} else {
|
1107 |
+
mmb_response($return, true);
|
1108 |
+
}
|
1109 |
+
}
|
1110 |
+
|
1111 |
+
function mmb_bulk_action_comments($params)
|
1112 |
+
{
|
1113 |
+
global $mmb_core;
|
1114 |
+
$mmb_core->get_comment_instance();
|
1115 |
+
|
1116 |
+
$return = $mmb_core->comment_instance->bulk_action_comments($params);
|
1117 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1118 |
+
mmb_response($return['error'], false);
|
1119 |
+
} else {
|
1120 |
+
mmb_response($return, true);
|
1121 |
+
}
|
1122 |
+
}
|
1123 |
+
|
1124 |
+
function mmb_reply_comment($params)
|
1125 |
+
{
|
1126 |
+
global $mmb_core;
|
1127 |
+
$mmb_core->get_comment_instance();
|
1128 |
+
|
1129 |
+
$return = $mmb_core->comment_instance->reply_comment($params);
|
1130 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1131 |
+
mmb_response($return['error'], false);
|
1132 |
+
} else {
|
1133 |
+
mmb_response($return, true);
|
1134 |
+
}
|
1135 |
+
}
|
1136 |
+
|
1137 |
+
function mmb_add_user($params)
|
1138 |
+
{
|
1139 |
+
global $mmb_core;
|
1140 |
+
$mmb_core->get_user_instance();
|
1141 |
+
$return = $mmb_core->user_instance->add_user($params);
|
1142 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1143 |
+
mmb_response($return['error'], false);
|
1144 |
+
} else {
|
1145 |
+
mmb_response($return, true);
|
1146 |
+
}
|
1147 |
+
}
|
1148 |
+
|
1149 |
+
function mmb_get_users($params)
|
1150 |
+
{
|
1151 |
+
global $mmb_core;
|
1152 |
+
$mmb_core->get_user_instance();
|
1153 |
+
$return = $mmb_core->user_instance->get_users($params);
|
1154 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1155 |
+
mmb_response($return['error'], false);
|
1156 |
+
} else {
|
1157 |
+
mmb_response($return, true);
|
1158 |
+
}
|
1159 |
+
}
|
1160 |
+
|
1161 |
+
function mmb_edit_users($params)
|
1162 |
+
{
|
1163 |
+
global $mmb_core;
|
1164 |
+
$mmb_core->get_user_instance();
|
1165 |
+
$users = $mmb_core->user_instance->edit_users($params);
|
1166 |
+
$response = 'User updated.';
|
1167 |
+
$check_error = false;
|
1168 |
+
foreach ($users as $username => $user) {
|
1169 |
+
$check_error = array_key_exists('error', $user);
|
1170 |
+
if ($check_error) {
|
1171 |
+
$response = $username.': '.$user['error'];
|
1172 |
+
}
|
1173 |
+
}
|
1174 |
+
mmb_response($response, !$check_error);
|
1175 |
+
}
|
1176 |
+
|
1177 |
+
function mmb_get_posts($params)
|
1178 |
+
{
|
1179 |
+
global $mmb_core;
|
1180 |
+
$mmb_core->get_post_instance();
|
1181 |
+
|
1182 |
+
$return = $mmb_core->post_instance->get_posts($params);
|
1183 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1184 |
+
mmb_response($return['error'], false);
|
1185 |
+
} else {
|
1186 |
+
mmb_response($return, true);
|
1187 |
+
}
|
1188 |
+
}
|
1189 |
+
|
1190 |
+
function mmb_delete_post($params)
|
1191 |
+
{
|
1192 |
+
global $mmb_core;
|
1193 |
+
$mmb_core->get_post_instance();
|
1194 |
+
|
1195 |
+
$return = $mmb_core->post_instance->delete_post($params);
|
1196 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1197 |
+
mmb_response($return['error'], false);
|
1198 |
+
} else {
|
1199 |
+
mmb_response($return, true);
|
1200 |
+
}
|
1201 |
+
}
|
1202 |
+
|
1203 |
+
function mmb_delete_posts($params)
|
1204 |
+
{
|
1205 |
+
global $mmb_core;
|
1206 |
+
$mmb_core->get_post_instance();
|
1207 |
+
|
1208 |
+
$return = $mmb_core->post_instance->delete_posts($params);
|
1209 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1210 |
+
mmb_response($return['error'], false);
|
1211 |
+
} else {
|
1212 |
+
mmb_response($return, true);
|
1213 |
+
}
|
1214 |
+
}
|
1215 |
+
|
1216 |
+
function mmb_get_pages($params)
|
1217 |
+
{
|
1218 |
+
global $mmb_core;
|
1219 |
+
$mmb_core->get_post_instance();
|
1220 |
+
|
1221 |
+
$return = $mmb_core->post_instance->get_pages($params);
|
1222 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1223 |
+
mmb_response($return['error'], false);
|
1224 |
+
} else {
|
1225 |
+
mmb_response($return, true);
|
1226 |
+
}
|
1227 |
+
}
|
1228 |
+
|
1229 |
+
function mmb_delete_page($params)
|
1230 |
+
{
|
1231 |
+
global $mmb_core;
|
1232 |
+
$mmb_core->get_post_instance();
|
1233 |
+
|
1234 |
+
$return = $mmb_core->post_instance->delete_page($params);
|
1235 |
+
if (is_array($return) && array_key_exists('error', $return)) {
|
1236 |
+
mmb_response($return['error'], false);
|
1237 |
+
} else {
|
1238 |
+
mmb_response($return, true);
|
1239 |
+
}
|
1240 |
+
}
|
1241 |
+
|
1242 |
+
function mmb_iframe_plugins_fix($update_actions)
|
1243 |
+
{
|
1244 |
+
foreach ($update_actions as $key => $action) {
|
1245 |
+
$update_actions[$key] = str_replace('target="_parent"', '', $action);
|
1246 |
+
}
|
1247 |
+
|
1248 |
+
return $update_actions;
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
function mmb_execute_php_code($params)
|
1252 |
+
{
|
1253 |
+
ob_start();
|
1254 |
+
$errorHandler = new MWP_Debug_EvalErrorHandler();
|
1255 |
+
set_error_handler(array($errorHandler, 'handleError'));
|
1256 |
+
$returnValue = eval($params['code']);
|
1257 |
+
$errors = $errorHandler->getErrorMessages();
|
1258 |
+
restore_error_handler();
|
1259 |
+
$return = array('output' => ob_get_clean(), 'returnValue' => $returnValue);
|
1260 |
+
|
1261 |
+
if (count($errors)) {
|
1262 |
+
$return['errorLog'] = $errors;
|
1263 |
+
}
|
1264 |
+
|
1265 |
+
$lastError = error_get_last();
|
1266 |
+
$fatalError = null;
|
1267 |
+
|
1268 |
+
if (($lastError !== null)
|
1269 |
+
&& ($lastError['type'] & (E_PARSE | E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR))
|
1270 |
+
&& (strpos($lastError['file'], __FILE__) !== false)
|
1271 |
+
&& (strpos($lastError['file'], 'eval()') !== false)
|
1272 |
+
) {
|
1273 |
+
$return['fatalError'] = $lastError;
|
1274 |
+
}
|
1275 |
+
|
1276 |
+
mmb_response($return, true);
|
1277 |
+
}
|
1278 |
+
|
1279 |
+
function mmb_more_reccurences($schedules)
|
1280 |
+
{
|
1281 |
+
$schedules['halfminute'] = array('interval' => 30, 'display' => 'Once in a half minute');
|
1282 |
+
$schedules['minutely'] = array('interval' => 60, 'display' => 'Once in a minute');
|
1283 |
+
$schedules['fiveminutes'] = array('interval' => 300, 'display' => 'Once every five minutes');
|
1284 |
+
$schedules['tenminutes'] = array('interval' => 600, 'display' => 'Once every ten minutes');
|
1285 |
+
$schedules['sixhours'] = array('interval' => 21600, 'display' => 'Every six hours');
|
1286 |
+
$schedules['fourhours'] = array('interval' => 14400, 'display' => 'Every four hours');
|
1287 |
+
$schedules['threehours'] = array('interval' => 10800, 'display' => 'Every three hours');
|
1288 |
+
|
1289 |
+
return $schedules;
|
1290 |
+
}
|
1291 |
+
|
1292 |
+
function mmb_call_scheduled_remote_upload($args)
|
1293 |
+
{
|
1294 |
+
global $mmb_core, $_wp_using_ext_object_cache;
|
1295 |
+
$_wp_using_ext_object_cache = false;
|
1296 |
+
|
1297 |
+
$mmb_core->get_backup_instance();
|
1298 |
+
if (isset($args['task_name'])) {
|
1299 |
+
$mmb_core->backup_instance->remote_backup_now($args);
|
1300 |
+
}
|
1301 |
+
}
|
1302 |
+
|
1303 |
+
function mwp_check_notifications()
|
1304 |
+
{
|
1305 |
+
global $mmb_core, $_wp_using_ext_object_cache;
|
1306 |
+
$_wp_using_ext_object_cache = false;
|
1307 |
+
|
1308 |
+
$mmb_core->get_stats_instance();
|
1309 |
+
$mmb_core->stats_instance->check_notifications();
|
1310 |
+
}
|
1311 |
+
|
1312 |
+
function mmb_get_plugins_themes($params)
|
1313 |
+
{
|
1314 |
+
global $mmb_core;
|
1315 |
+
|
1316 |
+
mwp_context()->requireTheme();
|
1317 |
+
|
1318 |
+
$mmb_core->get_installer_instance();
|
1319 |
+
$return = $mmb_core->installer_instance->get($params);
|
1320 |
+
mmb_response($return, true);
|
1321 |
+
}
|
1322 |
+
|
1323 |
+
function mmb_get_autoupdate_plugins_themes($params)
|
1324 |
+
{
|
1325 |
+
mwp_context()->requireTheme();
|
1326 |
+
|
1327 |
+
$return = MMB_Updater::getSettings($params);
|
1328 |
+
mmb_response($return, true);
|
1329 |
+
}
|
1330 |
+
|
1331 |
+
function mmb_edit_plugins_themes($params)
|
1332 |
+
{
|
1333 |
+
global $mmb_core;
|
1334 |
+
$mmb_core->get_installer_instance();
|
1335 |
+
$return = $mmb_core->installer_instance->edit($params);
|
1336 |
+
mmb_response($return, true);
|
1337 |
+
}
|
1338 |
+
|
1339 |
+
function mmb_edit_autoupdate_plugins_themes($params)
|
1340 |
+
{
|
1341 |
+
$return = MMB_Updater::setSettings($params);
|
1342 |
+
mmb_response($return, true);
|
1343 |
+
}
|
1344 |
+
|
1345 |
+
function mmb_worker_brand($params)
|
1346 |
+
{
|
1347 |
+
update_option("mwp_worker_brand", $params['brand']);
|
1348 |
+
mmb_response(true, true);
|
1349 |
+
}
|
1350 |
+
|
1351 |
+
function mmb_maintenance_mode($params)
|
1352 |
+
{
|
1353 |
+
global $wp_object_cache;
|
1354 |
+
|
1355 |
+
$default = get_option('mwp_maintenace_mode');
|
1356 |
+
$params = empty($default) ? $params : array_merge($default, $params);
|
1357 |
+
update_option("mwp_maintenace_mode", $params);
|
1358 |
+
|
1359 |
+
if (!empty($wp_object_cache)) {
|
1360 |
+
@$wp_object_cache->flush();
|
1361 |
+
}
|
1362 |
+
mmb_response(true, true);
|
1363 |
+
}
|
1364 |
+
|
1365 |
+
function mmb_plugin_actions()
|
1366 |
+
{
|
1367 |
+
global $pagenow, $current_user, $mmode;
|
1368 |
+
if (!is_admin() && !in_array($pagenow, array('wp-login.php'))) {
|
1369 |
+
$mmode = get_option('mwp_maintenace_mode');
|
1370 |
+
if (!empty($mmode)) {
|
1371 |
+
if (isset($mmode['active']) && $mmode['active'] == true) {
|
1372 |
+
if (isset($current_user->data) && !empty($current_user->data) && isset($mmode['hidecaps']) && !empty($mmode['hidecaps'])) {
|
1373 |
+
$usercaps = array();
|
1374 |
+
if (isset($current_user->caps) && !empty($current_user->caps)) {
|
1375 |
+
$usercaps = $current_user->caps;
|
1376 |
+
}
|
1377 |
+
foreach ($mmode['hidecaps'] as $cap => $hide) {
|
1378 |
+
if (!$hide) {
|
1379 |
+
continue;
|
1380 |
+
}
|
1381 |
+
|
1382 |
+
foreach ($usercaps as $ucap => $val) {
|
1383 |
+
if ($ucap == $cap) {
|
1384 |
+
ob_end_clean();
|
1385 |
+
ob_end_flush();
|
1386 |
+
die($mmode['template']);
|
1387 |
+
}
|
1388 |
+
}
|
1389 |
+
}
|
1390 |
+
} else {
|
1391 |
+
die($mmode['template']);
|
1392 |
+
}
|
1393 |
+
}
|
1394 |
+
}
|
1395 |
+
}
|
1396 |
+
|
1397 |
+
if (file_exists(dirname(__FILE__).'/log')) {
|
1398 |
+
unlink(dirname(__FILE__).'/log');
|
1399 |
+
}
|
1400 |
+
}
|
1401 |
+
|
1402 |
+
function mwp_return_core_reference()
|
1403 |
+
{
|
1404 |
+
global $mmb_core, $mmb_core_backup;
|
1405 |
+
if (!$mmb_core instanceof MMB_Core) {
|
1406 |
+
$mmb_core = $mmb_core_backup;
|
1407 |
+
}
|
1408 |
+
}
|
1409 |
+
|
1410 |
+
function mwb_edit_redirect_override($location = false, $comment_id = false)
|
1411 |
+
{
|
1412 |
+
if (isset($_COOKIE[MMB_XFRAME_COOKIE])) {
|
1413 |
+
$location = get_site_url().'/wp-admin/edit-comments.php';
|
1414 |
+
}
|
1415 |
+
|
1416 |
+
return $location;
|
1417 |
+
}
|
1418 |
+
|
1419 |
+
function mwp_set_plugin_priority()
|
1420 |
+
{
|
1421 |
+
$pluginBasename = 'worker/init.php';
|
1422 |
+
$activePlugins = get_option('active_plugins');
|
1423 |
+
|
1424 |
+
if (reset($activePlugins) === $pluginBasename) {
|
1425 |
+
return;
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
$workerKey = array_search($pluginBasename, $activePlugins);
|
1429 |
+
|
1430 |
+
if ($workerKey === false) {
|
1431 |
+
return;
|
1432 |
+
}
|
1433 |
+
|
1434 |
+
unset($activePlugins[$workerKey]);
|
1435 |
+
array_unshift($activePlugins, $pluginBasename);
|
1436 |
+
update_option('active_plugins', array_values($activePlugins));
|
1437 |
+
}
|
1438 |
+
|
1439 |
+
/**
|
1440 |
+
* @return MMB_Core
|
1441 |
+
*/
|
1442 |
+
function mwp_core()
|
1443 |
+
{
|
1444 |
+
static $core;
|
1445 |
+
|
1446 |
+
global $mmb_core;
|
1447 |
+
|
1448 |
+
if (!$mmb_core instanceof MMB_Core) {
|
1449 |
+
$mmb_core = new MMB_Core();
|
1450 |
+
$core = $mmb_core;
|
1451 |
+
}
|
1452 |
+
|
1453 |
+
return $core;
|
1454 |
+
}
|
1455 |
+
|
1456 |
+
/**
|
1457 |
+
* Auto-loads classes that may not exists after this plugin's update.
|
1458 |
+
*/
|
1459 |
+
function mwp_load_required_components()
|
1460 |
+
{
|
1461 |
+
class_exists('MWP_Http_ResponseInterface');
|
1462 |
+
class_exists('MWP_Http_Response');
|
1463 |
+
class_exists('MWP_Http_LegacyWorkerResponse');
|
1464 |
+
class_exists('MWP_Http_JsonResponse');
|
1465 |
+
class_exists('MWP_Worker_ActionResponse');
|
1466 |
+
class_exists('MWP_Worker_Exception');
|
1467 |
+
class_exists('MWP_Event_ActionResponse');
|
1468 |
+
class_exists('MWP_Event_MasterResponse');
|
1469 |
+
}
|
1470 |
+
|
1471 |
+
function mmb_change_comment_status($params)
|
1472 |
+
{
|
1473 |
+
global $mmb_core;
|
1474 |
+
$mmb_core->get_comment_instance();
|
1475 |
+
$return = $mmb_core->comment_instance->change_status($params);
|
1476 |
+
if ($return) {
|
1477 |
+
$mmb_core->get_stats_instance();
|
1478 |
+
mmb_response($mmb_core->stats_instance->get_comments_stats($params), true);
|
1479 |
+
} else {
|
1480 |
+
mmb_response('Comment not updated', false);
|
1481 |
+
}
|
1482 |
+
}
|
init.php
CHANGED
@@ -1,2071 +1,252 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Plugin Name: ManageWP - Worker
|
4 |
-
Plugin URI: https://managewp.com
|
5 |
-
Description: ManageWP Worker plugin allows you to manage your WordPress sites from one dashboard. Visit <a href="https://managewp.com">ManageWP.com</a> for more information.
|
6 |
-
Version:
|
7 |
-
Author: ManageWP
|
8 |
-
Author URI: https://managewp.com
|
9 |
-
License: GPL2
|
10 |
-
*/
|
11 |
-
|
12 |
-
/*************************************************************
|
13 |
-
* init.php
|
14 |
-
* Initialize the communication with master
|
15 |
-
* Copyright (c) 2011 Prelovac Media
|
16 |
-
* www.prelovac.com
|
17 |
-
**************************************************************/
|
18 |
-
if (!defined('ABSPATH')) {
|
19 |
-
exit;
|
20 |
-
}
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
$
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
$
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
{
|
125 |
-
|
126 |
-
}
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
$
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
}
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
$
|
196 |
-
$
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
if
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
'administrator'
|
254 |
-
),
|
255 |
-
'username' => '',
|
256 |
-
'username_filter' => '',
|
257 |
-
);
|
258 |
-
$users = $mmb_core->get_user_instance()->get_users($filter);
|
259 |
-
|
260 |
-
if (empty($users['users'])) {
|
261 |
-
mmb_response('We could not find an administrator user to use. Please contact support.', false);
|
262 |
-
}
|
263 |
-
|
264 |
-
$_mwp_data['params']['username'] = $users['users'][0]['user_login'];
|
265 |
-
}
|
266 |
-
|
267 |
-
if (isset($_mwp_data['params']['username']) && !is_user_logged_in()) {
|
268 |
-
$user = function_exists('get_user_by') ? get_user_by('login', $_mwp_data['params']['username']) : get_user_by('login', $_mwp_data['params']['username']);
|
269 |
-
}
|
270 |
-
|
271 |
-
if ($_mwp_data['action'] === 'add_site') {
|
272 |
-
$_mwp_auth = mwp_add_site_verify_signature($_mwp_data, $usernameUsed);
|
273 |
-
if (isset($user)) {
|
274 |
-
$GLOBALS['mwp_user_id'] = $user->ID;
|
275 |
-
}
|
276 |
-
|
277 |
-
return;
|
278 |
-
} else {
|
279 |
-
$_mwp_auth = $mmb_core->authenticate_message($_mwp_data['action'].$_mwp_data['id'], $_mwp_data['signature'], $_mwp_data['id']);
|
280 |
-
}
|
281 |
-
|
282 |
-
if ($_mwp_auth !== true) {
|
283 |
-
mmb_response($_mwp_auth['error'], false);
|
284 |
-
}
|
285 |
-
|
286 |
-
if (isset($user)) {
|
287 |
-
wp_set_current_user($user->ID);
|
288 |
-
// Compatibility with All In One Security
|
289 |
-
update_user_meta($user->ID, 'last_login_time', current_time('mysql'));
|
290 |
-
}
|
291 |
-
|
292 |
-
if (defined('ALTERNATE_WP_CRON') && !defined('DOING_AJAX') && ALTERNATE_WP_CRON === true) {
|
293 |
-
define('DOING_AJAX', true);
|
294 |
-
}
|
295 |
-
}
|
296 |
-
}
|
297 |
-
|
298 |
-
if (!function_exists("mwp_add_site_verify_signature")) {
|
299 |
-
function mwp_add_site_verify_signature($_mwp_data, $posted_username = null)
|
300 |
-
{
|
301 |
-
global $mmb_plugin_dir;
|
302 |
-
|
303 |
-
$nonce = new MWP_Security_HashNonce();
|
304 |
-
$nonce->setValue($_mwp_data['id']);
|
305 |
-
if (!$nonce->verify()) {
|
306 |
-
$_mwp_auth = array(
|
307 |
-
'error' => 'Invalid nonce used. Please contact support'
|
308 |
-
);
|
309 |
-
mmb_response($_mwp_auth['error'], false);
|
310 |
-
} else {
|
311 |
-
|
312 |
-
if (!empty($_mwp_data['add_site_signature']) && !empty($_mwp_data['add_site_signature_id'])) {
|
313 |
-
$signature = base64_decode($_mwp_data['add_site_signature']);
|
314 |
-
$signature_id = $_mwp_data['add_site_signature_id'];
|
315 |
-
$plaintext = array();
|
316 |
-
$plaintext['setting'] = $_mwp_data['setting'];
|
317 |
-
$plaintext['params'] = $_mwp_data['params'];
|
318 |
-
if (isset($posted_username)) {
|
319 |
-
$plaintext['params']['username'] = $posted_username;
|
320 |
-
}
|
321 |
-
if (file_exists($mmb_plugin_dir.'/publickeys/'.$signature_id.'.pub')) {
|
322 |
-
$plaintext = json_encode($plaintext);
|
323 |
-
require_once dirname(__FILE__).'/src/PHPSecLib/Crypt/RSA.php';
|
324 |
-
$rsa = new Crypt_RSA();
|
325 |
-
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
326 |
-
$rsa->loadKey(file_get_contents($mmb_plugin_dir.'/publickeys/'.$signature_id.'.pub')); // public key
|
327 |
-
$_mwp_auth = $rsa->verify($plaintext, $signature);
|
328 |
-
} else {
|
329 |
-
$_mwp_auth = false; // we don't have key
|
330 |
-
}
|
331 |
-
} else {
|
332 |
-
$_mwp_auth = false;
|
333 |
-
}
|
334 |
-
|
335 |
-
if ($_mwp_auth !== true) {
|
336 |
-
$_mwp_auth = array(
|
337 |
-
'error' => 'Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.'
|
338 |
-
);
|
339 |
-
mmb_response($_mwp_auth['error'], false);
|
340 |
-
}
|
341 |
-
}
|
342 |
-
|
343 |
-
return $_mwp_auth;
|
344 |
-
}
|
345 |
-
}
|
346 |
-
|
347 |
-
if (!function_exists('mmb_parse_request')) {
|
348 |
-
function mmb_parse_request()
|
349 |
-
{
|
350 |
-
global $mmb_core, $wp_db_version, $wpmu_version, $_wp_using_ext_object_cache, $_mwp_data, $_mwp_auth;
|
351 |
-
if (empty($_mwp_auth)) {
|
352 |
-
MMB_Stats::set_hit_count();
|
353 |
-
|
354 |
-
return;
|
355 |
-
}
|
356 |
-
ob_start();
|
357 |
-
$_wp_using_ext_object_cache = false;
|
358 |
-
@set_time_limit(1200);
|
359 |
-
|
360 |
-
if (isset($_mwp_data['setting'])) {
|
361 |
-
if (array_key_exists("dataown", $_mwp_data['setting'])) {
|
362 |
-
$oldconfiguration = array("dataown" => $_mwp_data['setting']['dataown']);
|
363 |
-
$mmb_core->save_options($oldconfiguration);
|
364 |
-
unset($_mwp_data['setting']['dataown']);
|
365 |
-
}
|
366 |
-
|
367 |
-
$configurationService = new MWP_Configuration_Service();
|
368 |
-
$configuration = new MWP_Configuration_Conf($_mwp_data['setting']);
|
369 |
-
$configurationService->saveConfiguration($configuration);
|
370 |
-
}
|
371 |
-
|
372 |
-
if ($_mwp_data['action'] === 'add_site') {
|
373 |
-
mmb_add_site($_mwp_data['params']);
|
374 |
-
mmb_response('You should never see this.', false);
|
375 |
-
}
|
376 |
-
|
377 |
-
/* in case database upgrade required, do database backup and perform upgrade ( wordpress wp_upgrade() function ) */
|
378 |
-
if (strlen(trim($wp_db_version)) && !defined('ACX_PLUGIN_DIR')) {
|
379 |
-
if (get_option('db_version') != $wp_db_version) {
|
380 |
-
/* in multisite network, please update database manualy */
|
381 |
-
if (empty($wpmu_version) || (function_exists('is_multisite') && !is_multisite())) {
|
382 |
-
if (!function_exists('wp_upgrade')) {
|
383 |
-
include_once(ABSPATH.'wp-admin/includes/upgrade.php');
|
384 |
-
}
|
385 |
-
|
386 |
-
ob_clean();
|
387 |
-
@wp_upgrade();
|
388 |
-
@do_action('after_db_upgrade');
|
389 |
-
ob_end_clean();
|
390 |
-
}
|
391 |
-
}
|
392 |
-
}
|
393 |
-
|
394 |
-
if (isset($_mwp_data['params']['secure'])) {
|
395 |
-
if (is_array($_mwp_data['params']['secure'])) {
|
396 |
-
$secureParams = $_mwp_data['params']['secure'];
|
397 |
-
foreach ($secureParams as $key => $value) {
|
398 |
-
$secureParams[$key] = base64_decode($value);
|
399 |
-
}
|
400 |
-
$_mwp_data['params']['secure'] = $secureParams;
|
401 |
-
} else {
|
402 |
-
$_mwp_data['params']['secure'] = base64_decode($_mwp_data['params']['secure']);
|
403 |
-
}
|
404 |
-
if ($decrypted = $mmb_core->_secure_data($_mwp_data['params']['secure'])) {
|
405 |
-
$decrypted = maybe_unserialize($decrypted);
|
406 |
-
if (is_array($decrypted)) {
|
407 |
-
foreach ($decrypted as $key => $val) {
|
408 |
-
if (!is_numeric($key)) {
|
409 |
-
$_mwp_data['params'][$key] = $val;
|
410 |
-
}
|
411 |
-
}
|
412 |
-
unset($_mwp_data['params']['secure']);
|
413 |
-
} else {
|
414 |
-
$_mwp_data['params']['secure'] = $decrypted;
|
415 |
-
}
|
416 |
-
}
|
417 |
-
|
418 |
-
if (!$decrypted && $mmb_core->get_random_signature() !== false) {
|
419 |
-
require_once dirname(__FILE__).'/src/PHPSecLib/Crypt/AES.php';
|
420 |
-
$cipher = new Crypt_AES(CRYPT_AES_MODE_ECB);
|
421 |
-
$cipher->setKey($mmb_core->get_random_signature());
|
422 |
-
$decrypted = $cipher->decrypt($_mwp_data['params']['secure']);
|
423 |
-
$_mwp_data['params']['account_info'] = json_decode($decrypted, true);
|
424 |
-
}
|
425 |
-
|
426 |
-
}
|
427 |
-
|
428 |
-
$logData = array(
|
429 |
-
'action' => $_mwp_data['action'],
|
430 |
-
'action_parameters' => $_mwp_data['params'],
|
431 |
-
'action_settings' => $_mwp_data['setting'],
|
432 |
-
);
|
433 |
-
|
434 |
-
if (!empty($_mwp_data['setting'])) {
|
435 |
-
$logData['settings'] = $_mwp_data['setting'];
|
436 |
-
}
|
437 |
-
|
438 |
-
mwp_logger()->debug('Master request: "{action}"', $logData);
|
439 |
-
|
440 |
-
if (!$mmb_core->register_action_params($_mwp_data['action'], $_mwp_data['params'])) {
|
441 |
-
global $_mmb_plugin_actions;
|
442 |
-
$_mmb_plugin_actions[$_mwp_data['action']] = $_mwp_data['params'];
|
443 |
-
}
|
444 |
-
|
445 |
-
ob_end_clean();
|
446 |
-
}
|
447 |
-
}
|
448 |
-
/* Main response function */
|
449 |
-
if (!function_exists('mmb_response')) {
|
450 |
-
|
451 |
-
function mmb_response($response = false, $success = true)
|
452 |
-
{
|
453 |
-
$return = array();
|
454 |
-
|
455 |
-
if ((is_array($response) && empty($response)) || (!is_array($response) && strlen($response) == 0)) {
|
456 |
-
$return['error'] = 'Empty response.';
|
457 |
-
} else {
|
458 |
-
if ($success) {
|
459 |
-
$return['success'] = $response;
|
460 |
-
} else {
|
461 |
-
$return['error'] = $response;
|
462 |
-
}
|
463 |
-
}
|
464 |
-
|
465 |
-
if (!headers_sent()) {
|
466 |
-
header('HTTP/1.0 200 OK');
|
467 |
-
header('Content-Type: text/plain');
|
468 |
-
}
|
469 |
-
|
470 |
-
mwp_logger()->debug('Master response: {action_response_status}', array(
|
471 |
-
'action_response_status' => $success ? 'success' : 'error',
|
472 |
-
'action_response' => $return,
|
473 |
-
'headers_sent' => headers_sent(),
|
474 |
-
));
|
475 |
-
|
476 |
-
exit("<MWPHEADER>".base64_encode(serialize($return))."<ENDMWPHEADER>");
|
477 |
-
}
|
478 |
-
}
|
479 |
-
|
480 |
-
|
481 |
-
if (!function_exists('mmb_add_site')) {
|
482 |
-
function mmb_add_site($params)
|
483 |
-
{
|
484 |
-
global $mmb_core;
|
485 |
-
$num = extract($params);
|
486 |
-
|
487 |
-
if ($num) {
|
488 |
-
if (!get_option('_worker_public_key')) {
|
489 |
-
$public_key = base64_decode($public_key);
|
490 |
-
|
491 |
-
if (function_exists('openssl_verify')) {
|
492 |
-
$verify = openssl_verify($action.$id, base64_decode($signature), $public_key);
|
493 |
-
if ($verify == 1) {
|
494 |
-
$mmb_core->set_master_public_key($public_key);
|
495 |
-
//$mmb_core->set_worker_message_id($id);
|
496 |
-
|
497 |
-
|
498 |
-
$mmb_core->get_stats_instance();
|
499 |
-
if (isset($notifications) && is_array($notifications) && !empty($notifications)) {
|
500 |
-
$mmb_core->stats_instance->set_notifications($notifications);
|
501 |
-
}
|
502 |
-
if (isset($brand) && is_array($brand) && !empty($brand)) {
|
503 |
-
update_option('mwp_worker_brand', $brand);
|
504 |
-
}
|
505 |
-
|
506 |
-
if (isset($add_settigns) && is_array($add_settigns) && !empty($add_settigns)) {
|
507 |
-
apply_filters('mwp_website_add', $add_settigns);
|
508 |
-
}
|
509 |
-
|
510 |
-
mmb_response($mmb_core->stats_instance->get_initial_stats(), true);
|
511 |
-
} else {
|
512 |
-
if ($verify == 0) {
|
513 |
-
|
514 |
-
//mmb_response('Site could not be added. OpenSSL verification error: "'.openssl_error_string().'". Contact your hosting support to check the OpenSSL configuration.', false);
|
515 |
-
|
516 |
-
} else {
|
517 |
-
mmb_response('Command not successful. Please try again.', false);
|
518 |
-
}
|
519 |
-
}
|
520 |
-
}
|
521 |
-
|
522 |
-
if (!get_option('_worker_nossl_key')) {
|
523 |
-
srand();
|
524 |
-
|
525 |
-
$random_key = md5(base64_encode($public_key).rand(0, getrandmax()));
|
526 |
-
|
527 |
-
$mmb_core->set_random_signature($random_key);
|
528 |
-
//$mmb_core->set_worker_message_id($id);
|
529 |
-
$mmb_core->set_master_public_key($public_key);
|
530 |
-
|
531 |
-
|
532 |
-
$mmb_core->get_stats_instance();
|
533 |
-
if (is_array($notifications) && !empty($notifications)) {
|
534 |
-
$mmb_core->stats_instance->set_notifications($notifications);
|
535 |
-
}
|
536 |
-
|
537 |
-
if (is_array($brand) && !empty($brand)) {
|
538 |
-
update_option('mwp_worker_brand', $brand);
|
539 |
-
}
|
540 |
-
|
541 |
-
mmb_response($mmb_core->stats_instance->get_initial_stats(), true);
|
542 |
-
} else {
|
543 |
-
mmb_response('Sorry, we were unable to communicate with your website. Please deactivate, then activate ManageWP Worker plugin on your website and try again or contact our support.', false);
|
544 |
-
}
|
545 |
-
|
546 |
-
} else {
|
547 |
-
mmb_response('Sorry, we were unable to communicate with your website. Please deactivate, then activate ManageWP Worker plugin on your website and try again or contact our support.', false);
|
548 |
-
}
|
549 |
-
} else {
|
550 |
-
mmb_response('Invalid parameters received. Please try again.', false);
|
551 |
-
}
|
552 |
-
}
|
553 |
-
}
|
554 |
-
|
555 |
-
if (!function_exists('mmb_remove_site')) {
|
556 |
-
function mmb_remove_site($params)
|
557 |
-
{
|
558 |
-
extract($params);
|
559 |
-
global $mmb_core;
|
560 |
-
$mmb_core->uninstall($deactivate);
|
561 |
-
|
562 |
-
include_once(ABSPATH.'wp-admin/includes/plugin.php');
|
563 |
-
$plugin_slug = basename(dirname(__FILE__)).'/'.basename(__FILE__);
|
564 |
-
|
565 |
-
if ($deactivate) {
|
566 |
-
deactivate_plugins($plugin_slug, true);
|
567 |
-
} else {
|
568 |
-
// Prolong the worker deactivation upon site removal.
|
569 |
-
update_option('mmb_worker_activation_time', time());
|
570 |
-
}
|
571 |
-
|
572 |
-
if (!is_plugin_active($plugin_slug)) {
|
573 |
-
mmb_response(
|
574 |
-
array(
|
575 |
-
'deactivated' => 'Site removed successfully. <br /><br />ManageWP Worker plugin successfully deactivated.'
|
576 |
-
),
|
577 |
-
true
|
578 |
-
);
|
579 |
-
} else {
|
580 |
-
mmb_response(
|
581 |
-
array(
|
582 |
-
'removed_data' => 'Site removed successfully. <br /><br /><b>ManageWP Worker plugin was not deactivated.</b>'
|
583 |
-
),
|
584 |
-
true
|
585 |
-
);
|
586 |
-
}
|
587 |
-
|
588 |
-
}
|
589 |
-
}
|
590 |
-
if (!function_exists('mmb_stats_get')) {
|
591 |
-
function mmb_stats_get($params)
|
592 |
-
{
|
593 |
-
global $mmb_core;
|
594 |
-
$mmb_core->get_stats_instance();
|
595 |
-
mmb_response($mmb_core->stats_instance->get($params), true);
|
596 |
-
}
|
597 |
-
}
|
598 |
-
|
599 |
-
if (!function_exists('mmb_worker_header')) {
|
600 |
-
function mmb_worker_header()
|
601 |
-
{
|
602 |
-
global $mmb_core, $current_user;
|
603 |
-
|
604 |
-
if (!headers_sent()) {
|
605 |
-
if (isset($current_user->ID)) {
|
606 |
-
$expiration = time() + apply_filters('auth_cookie_expiration', 10800, $current_user->ID, false);
|
607 |
-
} else {
|
608 |
-
$expiration = time() + 10800;
|
609 |
-
}
|
610 |
-
|
611 |
-
setcookie(MMB_XFRAME_COOKIE, md5(MMB_XFRAME_COOKIE), $expiration, COOKIEPATH, COOKIE_DOMAIN, false, true);
|
612 |
-
$_COOKIE[MMB_XFRAME_COOKIE] = md5(MMB_XFRAME_COOKIE);
|
613 |
-
}
|
614 |
-
}
|
615 |
-
}
|
616 |
-
|
617 |
-
if (!function_exists('mmb_pre_init_stats')) {
|
618 |
-
function mmb_pre_init_stats($params)
|
619 |
-
{
|
620 |
-
global $mmb_core;
|
621 |
-
$mmb_core->get_stats_instance();
|
622 |
-
|
623 |
-
return $mmb_core->stats_instance->pre_init_stats($params);
|
624 |
-
}
|
625 |
-
}
|
626 |
-
|
627 |
-
if (!function_exists('mwp_datasend')) {
|
628 |
-
function mwp_datasend($params = array())
|
629 |
-
{
|
630 |
-
global $mmb_core, $_mmb_item_filter, $_mmb_options;
|
631 |
-
|
632 |
-
|
633 |
-
$_mmb_remoteurl = get_option('home');
|
634 |
-
$_mmb_remoteown = isset($_mmb_options['dataown']) && !empty($_mmb_options['dataown']) ? $_mmb_options['dataown'] : false;
|
635 |
-
|
636 |
-
if (empty($_mmb_remoteown)) {
|
637 |
-
return;
|
638 |
-
}
|
639 |
-
|
640 |
-
$_mmb_item_filter['pre_init_stats'] = array('core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled');
|
641 |
-
$_mmb_item_filter['get'] = array('updates', 'errors');
|
642 |
-
$mmb_core->get_stats_instance();
|
643 |
-
|
644 |
-
$filter = array(
|
645 |
-
'refresh' => 'transient',
|
646 |
-
'item_filter' => array(
|
647 |
-
'get_stats' => array(
|
648 |
-
array('updates', array('plugins' => true, 'themes' => true, 'premium' => true)),
|
649 |
-
array('core_update', array('core' => true)),
|
650 |
-
array('posts', array('numberposts' => 5)),
|
651 |
-
array('drafts', array('numberposts' => 5)),
|
652 |
-
array('scheduled', array('numberposts' => 5)),
|
653 |
-
array('hit_counter'),
|
654 |
-
array('comments', array('numberposts' => 5)),
|
655 |
-
array('backups'),
|
656 |
-
'plugins' => array(
|
657 |
-
'cleanup' => array(
|
658 |
-
'overhead' => array(),
|
659 |
-
'revisions' => array('num_to_keep' => 'r_5'),
|
660 |
-
'spam' => array(),
|
661 |
-
)
|
662 |
-
),
|
663 |
-
),
|
664 |
-
)
|
665 |
-
);
|
666 |
-
|
667 |
-
$pre_init_data = $mmb_core->stats_instance->pre_init_stats($filter);
|
668 |
-
$init_data = $mmb_core->stats_instance->get($filter);
|
669 |
-
|
670 |
-
$data = array_merge($init_data, $pre_init_data);
|
671 |
-
$data['server_ip'] = $_SERVER['SERVER_ADDR'];
|
672 |
-
$data['uhost'] = php_uname('n');
|
673 |
-
$hash = $mmb_core->get_secure_hash();
|
674 |
-
|
675 |
-
if (mwp_datasend_trigger($data)) { // adds trigger to check if really need to send something
|
676 |
-
$configurationService = new MWP_Configuration_Service();
|
677 |
-
$configuration = $configurationService->getConfiguration();
|
678 |
-
|
679 |
-
set_transient("mwp_cache_notifications", $data);
|
680 |
-
set_transient("mwp_cache_notifications_time", time());
|
681 |
-
|
682 |
-
$datasend['datasend'] = $mmb_core->encrypt_data($data);
|
683 |
-
$datasend['sitehome'] = base64_encode($_mmb_remoteown.'[]'.$_mmb_remoteurl);
|
684 |
-
$datasend['sitehash'] = md5($hash.$_mmb_remoteown.$_mmb_remoteurl);
|
685 |
-
$datasend['setting_checksum_order'] = implode(",", array_keys($configuration->getVariables()));
|
686 |
-
$datasend['setting_checksum'] = md5(json_encode($configuration->toArray()));
|
687 |
-
if (!class_exists('WP_Http')) {
|
688 |
-
include_once(ABSPATH.WPINC.'/class-http.php');
|
689 |
-
}
|
690 |
-
|
691 |
-
$remote = array();
|
692 |
-
$remote['body'] = $datasend;
|
693 |
-
$remote['timeout'] = 20;
|
694 |
-
|
695 |
-
$result = wp_remote_post($configuration->getMasterCronUrl(), $remote);
|
696 |
-
if (!is_wp_error($result)) {
|
697 |
-
if (isset($result['body']) && !empty($result['body'])) {
|
698 |
-
$settings = @unserialize($result['body']);
|
699 |
-
/* rebrand worker or set default */
|
700 |
-
$brand = '';
|
701 |
-
if ($settings['worker_brand']) {
|
702 |
-
$brand = $settings['worker_brand'];
|
703 |
-
}
|
704 |
-
update_option("mwp_worker_brand", $brand);
|
705 |
-
/* change worker version */
|
706 |
-
$w_version = @$settings['worker_updates']['version'];
|
707 |
-
$w_url = @$settings['worker_updates']['url'];
|
708 |
-
if (version_compare($GLOBALS['MMB_WORKER_VERSION'], $w_version, '<')) {
|
709 |
-
//automatic update
|
710 |
-
$mmb_core->update_worker_plugin(array("download_url" => $w_url));
|
711 |
-
}
|
712 |
-
|
713 |
-
if (!empty($settings['mwp_worker_configuration'])) {
|
714 |
-
require_once dirname(__FILE__).'/src/PHPSecLib/Crypt/RSA.php';
|
715 |
-
$rsa = new Crypt_RSA();
|
716 |
-
$keyName = $configuration->getKeyName();
|
717 |
-
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
718 |
-
$rsa->loadKey(file_get_contents(dirname(__FILE__)."/publickeys/$keyName.pub")); // public key
|
719 |
-
$signature = base64_decode($settings['mwp_worker_configuration_signature']);
|
720 |
-
if ($rsa->verify(json_encode($settings['mwp_worker_configuration']), $signature)) {
|
721 |
-
$configuration = new MWP_Configuration_Conf($settings['mwp_worker_configuration']);
|
722 |
-
$configurationService->saveConfiguration($configuration);
|
723 |
-
}
|
724 |
-
}
|
725 |
-
}
|
726 |
-
} else {
|
727 |
-
//$mmb_core->_log($result);
|
728 |
-
}
|
729 |
-
|
730 |
-
}
|
731 |
-
|
732 |
-
}
|
733 |
-
|
734 |
-
}
|
735 |
-
|
736 |
-
if (!function_exists("mwp_datasend_trigger")) {
|
737 |
-
// trigger function, returns true if notifications should be sent
|
738 |
-
function mwp_datasend_trigger($stats)
|
739 |
-
{
|
740 |
-
|
741 |
-
$configurationService = new MWP_Configuration_Service();
|
742 |
-
$configuration = $configurationService->getConfiguration();
|
743 |
-
|
744 |
-
$cachedData = get_transient("mwp_cache_notifications");
|
745 |
-
$cacheTime = (int) get_transient("mwp_cache_notifications_time");
|
746 |
-
|
747 |
-
$returnValue = false;
|
748 |
-
if (false == $cachedData || empty($configuration)) {
|
749 |
-
$returnValue = true;
|
750 |
-
}
|
751 |
-
/**
|
752 |
-
* Cache lifetime check
|
753 |
-
*/
|
754 |
-
if (!$returnValue) {
|
755 |
-
$now = time();
|
756 |
-
if ($now - $configuration->getNotiCacheLifeTime() >= $cacheTime) {
|
757 |
-
$returnValue = true;
|
758 |
-
}
|
759 |
-
}
|
760 |
-
|
761 |
-
/**
|
762 |
-
* Themes difference check section
|
763 |
-
* First check if array differ in size. If same size,then check values difference
|
764 |
-
*/
|
765 |
-
if (!$returnValue && empty($stats['upgradable_themes']) != empty($cachedData['upgradable_themes'])) {
|
766 |
-
$returnValue = true;
|
767 |
-
}
|
768 |
-
if (!$returnValue && !empty($stats['upgradable_themes'])) {
|
769 |
-
$themesArr = mwp_std_to_array($stats['upgradable_themes']);
|
770 |
-
$cachedThemesArr = mwp_std_to_array($cachedData['upgradable_themes']);
|
771 |
-
if ($themesArr != $cachedThemesArr) {
|
772 |
-
$returnValue = true;
|
773 |
-
}
|
774 |
-
}
|
775 |
-
|
776 |
-
/**
|
777 |
-
* Plugins difference check section
|
778 |
-
* First check if array differ in size. If same size,then check values difference
|
779 |
-
*/
|
780 |
-
if (!$returnValue && empty($stats['upgradable_plugins']) != empty($cachedData['upgradable_plugins'])) {
|
781 |
-
$returnValue = true;
|
782 |
-
}
|
783 |
-
|
784 |
-
if (!$returnValue && !empty($stats['upgradable_plugins'])) { //we have hear stdclass
|
785 |
-
$pluginsArr = mwp_std_to_array($stats['upgradable_plugins']);
|
786 |
-
$cachedPluginsArr = mwp_std_to_array($cachedData['upgradable_plugins']);
|
787 |
-
if ($pluginsArr != $cachedPluginsArr) {
|
788 |
-
$returnValue = true;
|
789 |
-
}
|
790 |
-
}
|
791 |
-
|
792 |
-
/**
|
793 |
-
* Premium difference check section
|
794 |
-
* First check if array differ in size. If same size,then check values difference
|
795 |
-
*/
|
796 |
-
if (!$returnValue && empty($stats['premium_updates']) != empty($cachedData['premium_updates'])) {
|
797 |
-
$returnValue = true;
|
798 |
-
}
|
799 |
-
if (!$returnValue && !empty($stats['premium_updates'])) {
|
800 |
-
$premiumArr = mwp_std_to_array($stats['premium_updates']);
|
801 |
-
$cachedPremiumArr = mwp_std_to_array($cachedData['premium_updates']);
|
802 |
-
if ($premiumArr != $cachedPremiumArr) {
|
803 |
-
$returnValue = true;
|
804 |
-
}
|
805 |
-
}
|
806 |
-
/**
|
807 |
-
* Comments
|
808 |
-
* Check if we have configs first, then check trasholds
|
809 |
-
*/
|
810 |
-
if (!$returnValue && (int) $stats['num_spam_comments'] >= $configuration->getNotiTresholdSpamComments() && $stats['num_spam_comments'] != (int) $cachedData['num_spam_comments']) {
|
811 |
-
$returnValue = true;
|
812 |
-
}
|
813 |
-
if (!$returnValue && (int) $stats['num_spam_comments'] < (int) $cachedData['num_spam_comments']) {
|
814 |
-
$returnValue = true;
|
815 |
-
}
|
816 |
-
|
817 |
-
if (!$returnValue && !empty($stats['comments'])) {
|
818 |
-
if (!empty($stats['comments']['pending']) && count($stats['comments']['pending']) >= $configuration->getNotiTresholdPendingComments()) {
|
819 |
-
$pendingArr = mwp_std_to_array($stats['comments']['pending']);
|
820 |
-
$cachedPendingArr = mwp_std_to_array($cachedData['comments']['pending']);
|
821 |
-
if ($pendingArr != $cachedPendingArr) {
|
822 |
-
$returnValue = true;
|
823 |
-
}
|
824 |
-
}
|
825 |
-
|
826 |
-
if (!empty($stats['comments']['approved']) && count($stats['comments']['approved']) >= $configuration->getNotiTresholdApprovedComments()) {
|
827 |
-
$approvedArr = mwp_std_to_array($stats['comments']['approved']);
|
828 |
-
$cachedApprovedArr = mwp_std_to_array($cachedData['comments']['approved']);
|
829 |
-
if ($approvedArr != $cachedApprovedArr) {
|
830 |
-
$returnValue = true;
|
831 |
-
}
|
832 |
-
}
|
833 |
-
}
|
834 |
-
|
835 |
-
/**
|
836 |
-
* Drafts, posts
|
837 |
-
*/
|
838 |
-
|
839 |
-
if (!$returnValue && !empty($stats['drafts']) && count($stats['drafts']) >= $configuration->getNotiTresholdDrafts()) {
|
840 |
-
if (count($stats['drafts']) > $configuration->getNotiTresholdDrafts() && empty($cachedData['drafts'])) {
|
841 |
-
$returnValue = true;
|
842 |
-
} else {
|
843 |
-
$draftsArr = mwp_std_to_array($stats['drafts']);
|
844 |
-
$cachedDraftsArr = mwp_std_to_array($cachedData['drafts']);
|
845 |
-
if ($draftsArr != $cachedDraftsArr) {
|
846 |
-
$returnValue = true;
|
847 |
-
}
|
848 |
-
}
|
849 |
-
|
850 |
-
}
|
851 |
-
|
852 |
-
if (!$returnValue && !empty($stats['posts']) && count($stats['posts']) >= $configuration->getNotiTresholdPosts()) {
|
853 |
-
if (count($stats['posts']) > $configuration->getNotiTresholdPosts() && empty($cachedData['posts'])) {
|
854 |
-
$returnValue = true;
|
855 |
-
} else {
|
856 |
-
$postsArr = mwp_std_to_array($stats['posts']);
|
857 |
-
$cachedPostsArr = mwp_std_to_array($cachedData['posts']);
|
858 |
-
if ($postsArr != $cachedPostsArr) {
|
859 |
-
$returnValue = true;
|
860 |
-
}
|
861 |
-
}
|
862 |
-
}
|
863 |
-
|
864 |
-
/**
|
865 |
-
* Core updates & backups
|
866 |
-
*/
|
867 |
-
if (!$returnValue && empty($stats['core_updates']) != empty($cachedData['core_updates'])) {
|
868 |
-
$returnValue = true;
|
869 |
-
}
|
870 |
-
if (!$returnValue && !empty($stats['core_updates'])) {
|
871 |
-
$coreArr = mwp_std_to_array($stats['core_updates']);
|
872 |
-
$cachedCoreArr = mwp_std_to_array($cachedData['core_updates']);
|
873 |
-
if ($coreArr != $cachedCoreArr) {
|
874 |
-
$returnValue = true;
|
875 |
-
}
|
876 |
-
}
|
877 |
-
|
878 |
-
if (!$returnValue && empty($stats['mwp_backups']) != empty($cachedData['mwp_backups'])) {
|
879 |
-
$returnValue = true;
|
880 |
-
}
|
881 |
-
if (!$returnValue && !empty($stats['mwp_backups'])) {
|
882 |
-
$backupArr = mwp_std_to_array($stats['mwp_backups']);
|
883 |
-
$cachedBackupArr = mwp_std_to_array($cachedData['mwp_backups']);
|
884 |
-
if ($backupArr != $cachedBackupArr) {
|
885 |
-
$returnValue = true;
|
886 |
-
}
|
887 |
-
}
|
888 |
-
|
889 |
-
return $returnValue;
|
890 |
-
}
|
891 |
-
}
|
892 |
-
|
893 |
-
if (!function_exists("mwp_std_to_array")) {
|
894 |
-
function mwp_std_to_array($obj)
|
895 |
-
{
|
896 |
-
if (is_object($obj)) {
|
897 |
-
$objArr = clone $obj;
|
898 |
-
} else {
|
899 |
-
$objArr = $obj;
|
900 |
-
}
|
901 |
-
if (!empty($objArr)) {
|
902 |
-
foreach ($objArr as &$element) {
|
903 |
-
if ($element instanceof stdClass || is_array($element)) {
|
904 |
-
$element = mwp_std_to_array($element);
|
905 |
-
}
|
906 |
-
}
|
907 |
-
$objArr = (array) $objArr;
|
908 |
-
}
|
909 |
-
|
910 |
-
return $objArr;
|
911 |
-
}
|
912 |
-
}
|
913 |
-
|
914 |
-
|
915 |
-
//post
|
916 |
-
if (!function_exists('mmb_post_create')) {
|
917 |
-
function mmb_post_create($params)
|
918 |
-
{
|
919 |
-
global $mmb_core;
|
920 |
-
$mmb_core->get_post_instance();
|
921 |
-
$return = $mmb_core->post_instance->create($params);
|
922 |
-
if (is_int($return)) {
|
923 |
-
mmb_response($return, true);
|
924 |
-
} else {
|
925 |
-
if (isset($return['error'])) {
|
926 |
-
mmb_response($return['error'], false);
|
927 |
-
} else {
|
928 |
-
mmb_response($return, false);
|
929 |
-
}
|
930 |
-
}
|
931 |
-
}
|
932 |
-
}
|
933 |
-
|
934 |
-
if (!function_exists('mmb_change_post_status')) {
|
935 |
-
function mmb_change_post_status($params)
|
936 |
-
{
|
937 |
-
global $mmb_core;
|
938 |
-
$mmb_core->get_post_instance();
|
939 |
-
$return = $mmb_core->post_instance->change_status($params);
|
940 |
-
if (is_wp_error($return)) {
|
941 |
-
mmb_response($return->get_error_message(), false);
|
942 |
-
} elseif (empty($return)) {
|
943 |
-
mmb_response("Post status can not be changed", false);
|
944 |
-
} else {
|
945 |
-
mmb_response($return, true);
|
946 |
-
}
|
947 |
-
}
|
948 |
-
}
|
949 |
-
|
950 |
-
//comments
|
951 |
-
if (!function_exists('mmb_change_comment_status')) {
|
952 |
-
function mmb_change_comment_status($params)
|
953 |
-
{
|
954 |
-
global $mmb_core;
|
955 |
-
$mmb_core->get_comment_instance();
|
956 |
-
$return = $mmb_core->comment_instance->change_status($params);
|
957 |
-
//mmb_response($return, true);
|
958 |
-
if ($return) {
|
959 |
-
$mmb_core->get_stats_instance();
|
960 |
-
mmb_response($mmb_core->stats_instance->get_comments_stats($params), true);
|
961 |
-
} else {
|
962 |
-
mmb_response('Comment not updated', false);
|
963 |
-
}
|
964 |
-
}
|
965 |
-
|
966 |
-
}
|
967 |
-
if (!function_exists('mmb_comment_stats_get')) {
|
968 |
-
function mmb_comment_stats_get($params)
|
969 |
-
{
|
970 |
-
global $mmb_core;
|
971 |
-
$mmb_core->get_stats_instance();
|
972 |
-
mmb_response($mmb_core->stats_instance->get_comments_stats($params), true);
|
973 |
-
}
|
974 |
-
}
|
975 |
-
|
976 |
-
if (!function_exists('mmb_backup_now')) {
|
977 |
-
//backup
|
978 |
-
function mmb_backup_now($params)
|
979 |
-
{
|
980 |
-
global $mmb_core;
|
981 |
-
|
982 |
-
$mmb_core->get_backup_instance();
|
983 |
-
$return = $mmb_core->backup_instance->backup($params);
|
984 |
-
|
985 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
986 |
-
mmb_response($return['error'], false);
|
987 |
-
} else {
|
988 |
-
mmb_response($return, true);
|
989 |
-
}
|
990 |
-
}
|
991 |
-
}
|
992 |
-
|
993 |
-
if (!function_exists('mwp_ping_backup')) {
|
994 |
-
//ping backup
|
995 |
-
function mwp_ping_backup($params)
|
996 |
-
{
|
997 |
-
global $mmb_core;
|
998 |
-
|
999 |
-
$mmb_core->get_backup_instance();
|
1000 |
-
$return = $mmb_core->backup_instance->ping_backup($params);
|
1001 |
-
|
1002 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1003 |
-
mmb_response($return['error'], false);
|
1004 |
-
} else {
|
1005 |
-
mmb_response($return, true);
|
1006 |
-
}
|
1007 |
-
}
|
1008 |
-
}
|
1009 |
-
|
1010 |
-
if (!function_exists('mmb_run_task_now')) {
|
1011 |
-
function mmb_run_task_now($params)
|
1012 |
-
{
|
1013 |
-
global $mmb_core;
|
1014 |
-
$mmb_core->get_backup_instance();
|
1015 |
-
|
1016 |
-
$task_name = isset($params['task_name']) ? $params['task_name'] : false;
|
1017 |
-
$google_drive_token = isset($params['google_drive_token']) ? $params['google_drive_token'] : false;
|
1018 |
-
|
1019 |
-
if ($task_name) {
|
1020 |
-
$return = $mmb_core->backup_instance->task_now($task_name, $google_drive_token);
|
1021 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1022 |
-
mmb_response($return['error'], false);
|
1023 |
-
} else {
|
1024 |
-
mmb_response($return, true);
|
1025 |
-
}
|
1026 |
-
} else {
|
1027 |
-
mmb_response("Task name is not provided.", false);
|
1028 |
-
}
|
1029 |
-
|
1030 |
-
}
|
1031 |
-
}
|
1032 |
-
|
1033 |
-
if (!function_exists('mmb_email_backup')) {
|
1034 |
-
function mmb_email_backup($params)
|
1035 |
-
{
|
1036 |
-
global $mmb_core;
|
1037 |
-
$mmb_core->get_backup_instance();
|
1038 |
-
$return = $mmb_core->backup_instance->email_backup($params);
|
1039 |
-
|
1040 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1041 |
-
mmb_response($return['error'], false);
|
1042 |
-
} else {
|
1043 |
-
mmb_response($return, true);
|
1044 |
-
}
|
1045 |
-
}
|
1046 |
-
}
|
1047 |
-
|
1048 |
-
if (!function_exists('mmb_check_backup_compat')) {
|
1049 |
-
function mmb_check_backup_compat($params)
|
1050 |
-
{
|
1051 |
-
global $mmb_core;
|
1052 |
-
$mmb_core->get_backup_instance();
|
1053 |
-
$return = $mmb_core->backup_instance->check_backup_compat($params);
|
1054 |
-
|
1055 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1056 |
-
mmb_response($return['error'], false);
|
1057 |
-
} else {
|
1058 |
-
mmb_response($return, true);
|
1059 |
-
}
|
1060 |
-
}
|
1061 |
-
}
|
1062 |
-
|
1063 |
-
if (!function_exists('mmb_get_backup_req')) {
|
1064 |
-
function mmb_get_backup_req($params)
|
1065 |
-
{
|
1066 |
-
global $mmb_core;
|
1067 |
-
$mmb_core->get_stats_instance();
|
1068 |
-
$return = $mmb_core->stats_instance->get_backup_req($params);
|
1069 |
-
|
1070 |
-
mmb_response($return, true);
|
1071 |
-
}
|
1072 |
-
}
|
1073 |
-
|
1074 |
-
// Fires when Backup Now, or some backup task is saved.
|
1075 |
-
if (!function_exists('mmb_scheduled_backup')) {
|
1076 |
-
function mmb_scheduled_backup($params)
|
1077 |
-
{
|
1078 |
-
global $mmb_core;
|
1079 |
-
$mmb_core->get_backup_instance();
|
1080 |
-
$return = $mmb_core->backup_instance->set_backup_task($params);
|
1081 |
-
mmb_response($return, $return);
|
1082 |
-
}
|
1083 |
-
}
|
1084 |
-
|
1085 |
-
if (!function_exists('mmm_delete_backup')) {
|
1086 |
-
function mmm_delete_backup($params)
|
1087 |
-
{
|
1088 |
-
global $mmb_core;
|
1089 |
-
$mmb_core->get_backup_instance();
|
1090 |
-
$return = $mmb_core->backup_instance->delete_backup($params);
|
1091 |
-
mmb_response($return, $return);
|
1092 |
-
}
|
1093 |
-
}
|
1094 |
-
|
1095 |
-
if (!function_exists('mmb_optimize_tables')) {
|
1096 |
-
function mmb_optimize_tables($params)
|
1097 |
-
{
|
1098 |
-
global $mmb_core;
|
1099 |
-
$mmb_core->get_backup_instance();
|
1100 |
-
$return = $mmb_core->backup_instance->optimize_tables();
|
1101 |
-
if ($return) {
|
1102 |
-
mmb_response($return, true);
|
1103 |
-
} else {
|
1104 |
-
mmb_response(false, false);
|
1105 |
-
}
|
1106 |
-
}
|
1107 |
-
}
|
1108 |
-
if (!function_exists('mmb_restore_now')) {
|
1109 |
-
function mmb_restore_now($params)
|
1110 |
-
{
|
1111 |
-
global $mmb_core;
|
1112 |
-
$mmb_core->get_backup_instance();
|
1113 |
-
$return = $mmb_core->backup_instance->restore($params);
|
1114 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1115 |
-
mmb_response($return['error'], false);
|
1116 |
-
} else {
|
1117 |
-
mmb_response($return, true);
|
1118 |
-
}
|
1119 |
-
|
1120 |
-
}
|
1121 |
-
}
|
1122 |
-
|
1123 |
-
if (!function_exists('mmb_remote_backup_now')) {
|
1124 |
-
function mmb_remote_backup_now($params)
|
1125 |
-
{
|
1126 |
-
global $mmb_core;
|
1127 |
-
$backup_instance = $mmb_core->get_backup_instance();
|
1128 |
-
$return = $mmb_core->backup_instance->remote_backup_now($params);
|
1129 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1130 |
-
mmb_response($return['error'], false);
|
1131 |
-
} else {
|
1132 |
-
mmb_response($return, true);
|
1133 |
-
}
|
1134 |
-
}
|
1135 |
-
}
|
1136 |
-
|
1137 |
-
|
1138 |
-
if (!function_exists('mmb_clean_orphan_backups')) {
|
1139 |
-
function mmb_clean_orphan_backups()
|
1140 |
-
{
|
1141 |
-
global $mmb_core;
|
1142 |
-
$backup_instance = $mmb_core->get_backup_instance();
|
1143 |
-
$return = $mmb_core->backup_instance->cleanup();
|
1144 |
-
if (is_array($return)) {
|
1145 |
-
mmb_response($return, true);
|
1146 |
-
} else {
|
1147 |
-
mmb_response($return, false);
|
1148 |
-
}
|
1149 |
-
}
|
1150 |
-
}
|
1151 |
-
|
1152 |
-
function mmb_run_forked_action()
|
1153 |
-
{
|
1154 |
-
if (!isset($_POST['mmb_fork_nonce'])) {
|
1155 |
-
return false;
|
1156 |
-
}
|
1157 |
-
|
1158 |
-
$originalUser = wp_get_current_user();
|
1159 |
-
$usernameUsed = array_key_exists('username', $_POST) ? $_POST : null;
|
1160 |
-
|
1161 |
-
if ($usernameUsed && !is_user_logged_in()) {
|
1162 |
-
$user = function_exists('get_user_by') ? get_user_by('login', $_POST['username']) : get_user_by('login', $_POST['username']);
|
1163 |
-
}
|
1164 |
-
|
1165 |
-
if (isset($user) && isset($user->ID)) {
|
1166 |
-
wp_set_current_user($user->ID);
|
1167 |
-
// Compatibility with All In One Security
|
1168 |
-
update_user_meta($user->ID, 'last_login_time', current_time('mysql'));
|
1169 |
-
}
|
1170 |
-
|
1171 |
-
if (!wp_verify_nonce($_POST['mmb_fork_nonce'], 'mmb-fork-nonce')) {
|
1172 |
-
wp_set_current_user($originalUser->ID);
|
1173 |
-
|
1174 |
-
return false;
|
1175 |
-
}
|
1176 |
-
|
1177 |
-
$public_key = get_option('_worker_public_key');
|
1178 |
-
if (!isset($_POST['public_key']) || $public_key !== $_POST['public_key']) {
|
1179 |
-
wp_set_current_user($originalUser->ID);
|
1180 |
-
|
1181 |
-
return false;
|
1182 |
-
}
|
1183 |
-
$args = @json_decode(stripslashes($_POST['args']), true);
|
1184 |
-
$args['forked'] = true;
|
1185 |
-
|
1186 |
-
if (!isset($args)) {
|
1187 |
-
wp_set_current_user($originalUser->ID);
|
1188 |
-
|
1189 |
-
return false;
|
1190 |
-
}
|
1191 |
-
$cron_action = isset($_POST['mwp_forked_action']) ? $_POST['mwp_forked_action'] : false;
|
1192 |
-
if ($cron_action) {
|
1193 |
-
do_action($cron_action, $args);
|
1194 |
-
}
|
1195 |
-
//unset($_POST['public_key']);
|
1196 |
-
unset($_POST['mmb_fork_nonce']);
|
1197 |
-
unset($_POST['args']);
|
1198 |
-
unset($_POST['mwp_forked_action']);
|
1199 |
-
|
1200 |
-
wp_set_current_user($originalUser->ID);
|
1201 |
-
|
1202 |
-
return true;
|
1203 |
-
}
|
1204 |
-
|
1205 |
-
add_filter('mwp_website_add', 'mmb_readd_backup_task');
|
1206 |
-
|
1207 |
-
if (!function_exists('mmb_readd_backup_task')) {
|
1208 |
-
function mmb_readd_backup_task($params = array())
|
1209 |
-
{
|
1210 |
-
global $mmb_core;
|
1211 |
-
$backup_instance = $mmb_core->get_backup_instance();
|
1212 |
-
$settings = $backup_instance->readd_tasks($params);
|
1213 |
-
|
1214 |
-
return $settings;
|
1215 |
-
}
|
1216 |
-
}
|
1217 |
-
|
1218 |
-
if (!function_exists('mmb_update_worker_plugin')) {
|
1219 |
-
function mmb_update_worker_plugin($params)
|
1220 |
-
{
|
1221 |
-
global $mmb_core;
|
1222 |
-
mmb_response($mmb_core->update_worker_plugin($params), true);
|
1223 |
-
}
|
1224 |
-
}
|
1225 |
-
|
1226 |
-
if (!function_exists('mmb_wp_checkversion')) {
|
1227 |
-
function mmb_wp_checkversion($params)
|
1228 |
-
{
|
1229 |
-
include_once(ABSPATH.'wp-includes/version.php');
|
1230 |
-
global $mmb_wp_version, $mmb_core;
|
1231 |
-
mmb_response($mmb_wp_version, true);
|
1232 |
-
}
|
1233 |
-
}
|
1234 |
-
if (!function_exists('mmb_search_posts_by_term')) {
|
1235 |
-
function mmb_search_posts_by_term($params)
|
1236 |
-
{
|
1237 |
-
global $mmb_core;
|
1238 |
-
$mmb_core->get_search_instance();
|
1239 |
-
|
1240 |
-
$search_type = trim($params['search_type']);
|
1241 |
-
$search_term = strtolower(trim($params['search_term']));
|
1242 |
-
|
1243 |
-
switch ($search_type) {
|
1244 |
-
case 'page_post':
|
1245 |
-
$return = $mmb_core->search_instance->search_posts_by_term($params);
|
1246 |
-
if ($return) {
|
1247 |
-
$return = serialize($return);
|
1248 |
-
mmb_response($return, true);
|
1249 |
-
} else {
|
1250 |
-
mmb_response('No posts found', false);
|
1251 |
-
}
|
1252 |
-
break;
|
1253 |
-
|
1254 |
-
case 'plugin':
|
1255 |
-
$plugins = get_option('active_plugins');
|
1256 |
-
|
1257 |
-
$have_plugin = false;
|
1258 |
-
foreach ($plugins as $plugin) {
|
1259 |
-
if (strpos($plugin, $search_term) > -1) {
|
1260 |
-
$have_plugin = true;
|
1261 |
-
}
|
1262 |
-
}
|
1263 |
-
if ($have_plugin) {
|
1264 |
-
mmb_response(serialize($plugin), true);
|
1265 |
-
} else {
|
1266 |
-
mmb_response(false, false);
|
1267 |
-
}
|
1268 |
-
break;
|
1269 |
-
case 'theme':
|
1270 |
-
$theme = strtolower(get_option('template'));
|
1271 |
-
if (strpos($theme, $search_term) > -1) {
|
1272 |
-
mmb_response($theme, true);
|
1273 |
-
} else {
|
1274 |
-
mmb_response(false, false);
|
1275 |
-
}
|
1276 |
-
break;
|
1277 |
-
default:
|
1278 |
-
mmb_response(false, false);
|
1279 |
-
}
|
1280 |
-
$return = $mmb_core->search_instance->search_posts_by_term($params);
|
1281 |
-
|
1282 |
-
|
1283 |
-
if ($return_if_true) {
|
1284 |
-
mmb_response($return_value, true);
|
1285 |
-
} else {
|
1286 |
-
mmb_response($return_if_false, false);
|
1287 |
-
}
|
1288 |
-
}
|
1289 |
-
}
|
1290 |
-
|
1291 |
-
if (!function_exists('mmb_install_addon')) {
|
1292 |
-
function mmb_install_addon($params)
|
1293 |
-
{
|
1294 |
-
global $mmb_core;
|
1295 |
-
$mmb_core->get_installer_instance();
|
1296 |
-
$return = $mmb_core->installer_instance->install_remote_file($params);
|
1297 |
-
mmb_response($return, true);
|
1298 |
-
|
1299 |
-
}
|
1300 |
-
}
|
1301 |
-
|
1302 |
-
if (!function_exists('mmb_install_addons')) {
|
1303 |
-
function mmb_install_addons($params)
|
1304 |
-
{
|
1305 |
-
global $mmb_core;
|
1306 |
-
$mmb_core->get_installer_instance();
|
1307 |
-
$return = $mmb_core->installer_instance->install_remote_files($params);
|
1308 |
-
mmb_response($return, true);
|
1309 |
-
|
1310 |
-
}
|
1311 |
-
}
|
1312 |
-
|
1313 |
-
if (!function_exists('mmb_do_upgrade')) {
|
1314 |
-
function mmb_do_upgrade($params)
|
1315 |
-
{
|
1316 |
-
global $mmb_core, $mmb_upgrading;
|
1317 |
-
$mmb_core->get_installer_instance();
|
1318 |
-
$return = $mmb_core->installer_instance->do_upgrade($params);
|
1319 |
-
mmb_response($return, true);
|
1320 |
-
|
1321 |
-
}
|
1322 |
-
}
|
1323 |
-
|
1324 |
-
if (!function_exists('mmb_get_links')) {
|
1325 |
-
function mmb_get_links($params)
|
1326 |
-
{
|
1327 |
-
global $mmb_core;
|
1328 |
-
$mmb_core->get_link_instance();
|
1329 |
-
$return = $mmb_core->link_instance->get_links($params);
|
1330 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1331 |
-
mmb_response($return['error'], false);
|
1332 |
-
} else {
|
1333 |
-
mmb_response($return, true);
|
1334 |
-
}
|
1335 |
-
}
|
1336 |
-
}
|
1337 |
-
|
1338 |
-
if (!function_exists('mmb_add_link')) {
|
1339 |
-
function mmb_add_link($params)
|
1340 |
-
{
|
1341 |
-
global $mmb_core;
|
1342 |
-
$mmb_core->get_link_instance();
|
1343 |
-
$return = $mmb_core->link_instance->add_link($params);
|
1344 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1345 |
-
mmb_response($return['error'], false);
|
1346 |
-
} else {
|
1347 |
-
mmb_response($return, true);
|
1348 |
-
}
|
1349 |
-
|
1350 |
-
}
|
1351 |
-
}
|
1352 |
-
|
1353 |
-
if (!function_exists('mmb_delete_link')) {
|
1354 |
-
function mmb_delete_link($params)
|
1355 |
-
{
|
1356 |
-
global $mmb_core;
|
1357 |
-
$mmb_core->get_link_instance();
|
1358 |
-
|
1359 |
-
$return = $mmb_core->link_instance->delete_link($params);
|
1360 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1361 |
-
mmb_response($return['error'], false);
|
1362 |
-
} else {
|
1363 |
-
mmb_response($return, true);
|
1364 |
-
}
|
1365 |
-
}
|
1366 |
-
}
|
1367 |
-
|
1368 |
-
if (!function_exists('mmb_delete_links')) {
|
1369 |
-
function mmb_delete_links($params)
|
1370 |
-
{
|
1371 |
-
global $mmb_core;
|
1372 |
-
$mmb_core->get_link_instance();
|
1373 |
-
|
1374 |
-
$return = $mmb_core->link_instance->delete_links($params);
|
1375 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1376 |
-
mmb_response($return['error'], false);
|
1377 |
-
} else {
|
1378 |
-
mmb_response($return, true);
|
1379 |
-
}
|
1380 |
-
}
|
1381 |
-
}
|
1382 |
-
|
1383 |
-
if (!function_exists('mmb_get_comments')) {
|
1384 |
-
function mmb_get_comments($params)
|
1385 |
-
{
|
1386 |
-
global $mmb_core;
|
1387 |
-
$mmb_core->get_comment_instance();
|
1388 |
-
$return = $mmb_core->comment_instance->get_comments($params);
|
1389 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1390 |
-
mmb_response($return['error'], false);
|
1391 |
-
} else {
|
1392 |
-
mmb_response($return, true);
|
1393 |
-
}
|
1394 |
-
}
|
1395 |
-
}
|
1396 |
-
|
1397 |
-
if (!function_exists('mmb_action_comment')) {
|
1398 |
-
function mmb_action_comment($params)
|
1399 |
-
{
|
1400 |
-
global $mmb_core;
|
1401 |
-
$mmb_core->get_comment_instance();
|
1402 |
-
|
1403 |
-
$return = $mmb_core->comment_instance->action_comment($params);
|
1404 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1405 |
-
mmb_response($return['error'], false);
|
1406 |
-
} else {
|
1407 |
-
mmb_response($return, true);
|
1408 |
-
}
|
1409 |
-
}
|
1410 |
-
}
|
1411 |
-
|
1412 |
-
if (!function_exists('mmb_bulk_action_comments')) {
|
1413 |
-
function mmb_bulk_action_comments($params)
|
1414 |
-
{
|
1415 |
-
global $mmb_core;
|
1416 |
-
$mmb_core->get_comment_instance();
|
1417 |
-
|
1418 |
-
$return = $mmb_core->comment_instance->bulk_action_comments($params);
|
1419 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1420 |
-
mmb_response($return['error'], false);
|
1421 |
-
} else {
|
1422 |
-
mmb_response($return, true);
|
1423 |
-
}
|
1424 |
-
}
|
1425 |
-
}
|
1426 |
-
|
1427 |
-
if (!function_exists('mmb_reply_comment')) {
|
1428 |
-
function mmb_reply_comment($params)
|
1429 |
-
{
|
1430 |
-
global $mmb_core;
|
1431 |
-
$mmb_core->get_comment_instance();
|
1432 |
-
|
1433 |
-
$return = $mmb_core->comment_instance->reply_comment($params);
|
1434 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1435 |
-
mmb_response($return['error'], false);
|
1436 |
-
} else {
|
1437 |
-
mmb_response($return, true);
|
1438 |
-
}
|
1439 |
-
}
|
1440 |
-
}
|
1441 |
-
|
1442 |
-
if (!function_exists('mmb_add_user')) {
|
1443 |
-
function mmb_add_user($params)
|
1444 |
-
{
|
1445 |
-
global $mmb_core;
|
1446 |
-
$mmb_core->get_user_instance();
|
1447 |
-
$return = $mmb_core->user_instance->add_user($params);
|
1448 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1449 |
-
mmb_response($return['error'], false);
|
1450 |
-
} else {
|
1451 |
-
mmb_response($return, true);
|
1452 |
-
}
|
1453 |
-
|
1454 |
-
}
|
1455 |
-
}
|
1456 |
-
|
1457 |
-
if (!function_exists('mbb_security_check')) {
|
1458 |
-
function mbb_security_check($params)
|
1459 |
-
{
|
1460 |
-
global $mmb_core;
|
1461 |
-
$mmb_core->get_security_instance();
|
1462 |
-
$return = $mmb_core->security_instance->security_check($params);
|
1463 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1464 |
-
mmb_response($return['error'], false);
|
1465 |
-
} else {
|
1466 |
-
mmb_response($return, true);
|
1467 |
-
}
|
1468 |
-
|
1469 |
-
}
|
1470 |
-
}
|
1471 |
-
|
1472 |
-
if (!function_exists('mbb_security_fix_folder_listing')) {
|
1473 |
-
function mbb_security_fix_folder_listing($params)
|
1474 |
-
{
|
1475 |
-
global $mmb_core;
|
1476 |
-
$mmb_core->get_security_instance();
|
1477 |
-
$return = $mmb_core->security_instance->security_fix_dir_listing($params);
|
1478 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1479 |
-
mmb_response($return['error'], false);
|
1480 |
-
} else {
|
1481 |
-
mmb_response($return, true);
|
1482 |
-
}
|
1483 |
-
|
1484 |
-
}
|
1485 |
-
}
|
1486 |
-
|
1487 |
-
if (!function_exists('mbb_security_fix_php_reporting')) {
|
1488 |
-
function mbb_security_fix_php_reporting($params)
|
1489 |
-
{
|
1490 |
-
global $mmb_core;
|
1491 |
-
$mmb_core->get_security_instance();
|
1492 |
-
$return = $mmb_core->security_instance->security_fix_php_reporting($params);
|
1493 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1494 |
-
mmb_response($return['error'], false);
|
1495 |
-
} else {
|
1496 |
-
mmb_response($return, true);
|
1497 |
-
}
|
1498 |
-
|
1499 |
-
}
|
1500 |
-
}
|
1501 |
-
|
1502 |
-
if (!function_exists('mbb_security_fix_database_reporting')) {
|
1503 |
-
function mbb_security_fix_database_reporting($params)
|
1504 |
-
{
|
1505 |
-
global $mmb_core;
|
1506 |
-
$mmb_core->get_security_instance();
|
1507 |
-
$return = $mmb_core->security_instance->security_fix_database_reporting($params);
|
1508 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1509 |
-
mmb_response($return['error'], false);
|
1510 |
-
} else {
|
1511 |
-
mmb_response($return, true);
|
1512 |
-
}
|
1513 |
-
|
1514 |
-
}
|
1515 |
-
}
|
1516 |
-
|
1517 |
-
//security_fix_wp_version
|
1518 |
-
|
1519 |
-
if (!function_exists('mbb_security_fix_wp_version')) {
|
1520 |
-
function mbb_security_fix_wp_version($params)
|
1521 |
-
{
|
1522 |
-
global $mmb_core;
|
1523 |
-
$mmb_core->get_security_instance();
|
1524 |
-
$return = $mmb_core->security_instance->security_fix_wp_version($params);
|
1525 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1526 |
-
mmb_response($return['error'], false);
|
1527 |
-
} else {
|
1528 |
-
mmb_response($return, true);
|
1529 |
-
}
|
1530 |
-
|
1531 |
-
}
|
1532 |
-
}
|
1533 |
-
|
1534 |
-
//mbb_security_fix_admin_username
|
1535 |
-
|
1536 |
-
if (!function_exists('mbb_security_fix_admin_username')) {
|
1537 |
-
function mbb_security_fix_admin_username($params)
|
1538 |
-
{
|
1539 |
-
global $mmb_core;
|
1540 |
-
$mmb_core->get_security_instance();
|
1541 |
-
$return = $mmb_core->security_instance->security_fix_admin_username($params);
|
1542 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1543 |
-
mmb_response($return['error'], false);
|
1544 |
-
} else {
|
1545 |
-
mmb_response($return, true);
|
1546 |
-
}
|
1547 |
-
|
1548 |
-
}
|
1549 |
-
}
|
1550 |
-
|
1551 |
-
if (!function_exists('mbb_security_fix_scripts_styles')) {
|
1552 |
-
function mbb_security_fix_scripts_styles($params)
|
1553 |
-
{
|
1554 |
-
global $mmb_core;
|
1555 |
-
$mmb_core->get_security_instance();
|
1556 |
-
$return = $mmb_core->security_instance->security_fix_scripts_styles($params);
|
1557 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1558 |
-
mmb_response($return['error'], false);
|
1559 |
-
} else {
|
1560 |
-
mmb_response($return, true);
|
1561 |
-
}
|
1562 |
-
|
1563 |
-
}
|
1564 |
-
}
|
1565 |
-
|
1566 |
-
//mbb_security_fix_file_permission
|
1567 |
-
if (!function_exists('mbb_security_fix_file_permission')) {
|
1568 |
-
function mbb_security_fix_file_permission($params)
|
1569 |
-
{
|
1570 |
-
global $mmb_core;
|
1571 |
-
$mmb_core->get_security_instance();
|
1572 |
-
$return = $mmb_core->security_instance->security_fix_permissions($params);
|
1573 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1574 |
-
mmb_response($return['error'], false);
|
1575 |
-
} else {
|
1576 |
-
mmb_response($return, true);
|
1577 |
-
}
|
1578 |
-
|
1579 |
-
}
|
1580 |
-
}
|
1581 |
-
|
1582 |
-
//mbb_security_fix_all
|
1583 |
-
if (!function_exists('mbb_security_fix_all')) {
|
1584 |
-
function mbb_security_fix_all($params)
|
1585 |
-
{
|
1586 |
-
global $mmb_core;
|
1587 |
-
$mmb_core->get_security_instance();
|
1588 |
-
$return = $mmb_core->security_instance->security_fix_all($params);
|
1589 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1590 |
-
mmb_response($return['error'], false);
|
1591 |
-
} else {
|
1592 |
-
mmb_response($return, true);
|
1593 |
-
}
|
1594 |
-
}
|
1595 |
-
}
|
1596 |
-
|
1597 |
-
//mbb_security_fix_htaccess_permission
|
1598 |
-
|
1599 |
-
if (!function_exists('mbb_security_fix_htaccess_permission')) {
|
1600 |
-
function mbb_security_fix_htaccess_permission($params)
|
1601 |
-
{
|
1602 |
-
global $mmb_core;
|
1603 |
-
$mmb_core->get_security_instance();
|
1604 |
-
$return = $mmb_core->security_instance->security_fix_htaccess_permission($params);
|
1605 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1606 |
-
mmb_response($return['error'], false);
|
1607 |
-
} else {
|
1608 |
-
mmb_response($return, true);
|
1609 |
-
}
|
1610 |
-
|
1611 |
-
}
|
1612 |
-
}
|
1613 |
-
|
1614 |
-
if (!function_exists('mmb_get_users')) {
|
1615 |
-
function mmb_get_users($params)
|
1616 |
-
{
|
1617 |
-
global $mmb_core;
|
1618 |
-
$mmb_core->get_user_instance();
|
1619 |
-
$return = $mmb_core->user_instance->get_users($params);
|
1620 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1621 |
-
mmb_response($return['error'], false);
|
1622 |
-
} else {
|
1623 |
-
mmb_response($return, true);
|
1624 |
-
}
|
1625 |
-
}
|
1626 |
-
}
|
1627 |
-
|
1628 |
-
if (!function_exists('mmb_edit_users')) {
|
1629 |
-
function mmb_edit_users($params)
|
1630 |
-
{
|
1631 |
-
global $mmb_core;
|
1632 |
-
$mmb_core->get_user_instance();
|
1633 |
-
$users = $mmb_core->user_instance->edit_users($params);
|
1634 |
-
$response = 'User updated.';
|
1635 |
-
$check_error = false;
|
1636 |
-
foreach ($users as $username => $user) {
|
1637 |
-
$check_error = array_key_exists('error', $user);
|
1638 |
-
if ($check_error) {
|
1639 |
-
$response = $username.': '.$user['error'];
|
1640 |
-
}
|
1641 |
-
}
|
1642 |
-
mmb_response($response, !$check_error);
|
1643 |
-
}
|
1644 |
-
}
|
1645 |
-
|
1646 |
-
if (!function_exists('mmb_get_posts')) {
|
1647 |
-
function mmb_get_posts($params)
|
1648 |
-
{
|
1649 |
-
global $mmb_core;
|
1650 |
-
$mmb_core->get_post_instance();
|
1651 |
-
|
1652 |
-
$return = $mmb_core->post_instance->get_posts($params);
|
1653 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1654 |
-
mmb_response($return['error'], false);
|
1655 |
-
} else {
|
1656 |
-
mmb_response($return, true);
|
1657 |
-
}
|
1658 |
-
}
|
1659 |
-
}
|
1660 |
-
|
1661 |
-
if (!function_exists('mmb_delete_post')) {
|
1662 |
-
function mmb_delete_post($params)
|
1663 |
-
{
|
1664 |
-
global $mmb_core;
|
1665 |
-
$mmb_core->get_post_instance();
|
1666 |
-
|
1667 |
-
$return = $mmb_core->post_instance->delete_post($params);
|
1668 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1669 |
-
mmb_response($return['error'], false);
|
1670 |
-
} else {
|
1671 |
-
mmb_response($return, true);
|
1672 |
-
}
|
1673 |
-
}
|
1674 |
-
}
|
1675 |
-
|
1676 |
-
if (!function_exists('mmb_delete_posts')) {
|
1677 |
-
function mmb_delete_posts($params)
|
1678 |
-
{
|
1679 |
-
global $mmb_core;
|
1680 |
-
$mmb_core->get_post_instance();
|
1681 |
-
|
1682 |
-
$return = $mmb_core->post_instance->delete_posts($params);
|
1683 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1684 |
-
mmb_response($return['error'], false);
|
1685 |
-
} else {
|
1686 |
-
mmb_response($return, true);
|
1687 |
-
}
|
1688 |
-
}
|
1689 |
-
}
|
1690 |
-
|
1691 |
-
|
1692 |
-
if (!function_exists('mmb_edit_posts')) {
|
1693 |
-
function mmb_edit_posts($params)
|
1694 |
-
{
|
1695 |
-
global $mmb_core;
|
1696 |
-
$mmb_core->get_posts_instance();
|
1697 |
-
$return = $mmb_core->posts_instance->edit_posts($params);
|
1698 |
-
mmb_response($return, true);
|
1699 |
-
}
|
1700 |
-
}
|
1701 |
-
|
1702 |
-
if (!function_exists('mmb_get_pages')) {
|
1703 |
-
function mmb_get_pages($params)
|
1704 |
-
{
|
1705 |
-
global $mmb_core;
|
1706 |
-
$mmb_core->get_post_instance();
|
1707 |
-
|
1708 |
-
$return = $mmb_core->post_instance->get_pages($params);
|
1709 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1710 |
-
mmb_response($return['error'], false);
|
1711 |
-
} else {
|
1712 |
-
mmb_response($return, true);
|
1713 |
-
}
|
1714 |
-
}
|
1715 |
-
}
|
1716 |
-
|
1717 |
-
if (!function_exists('mmb_delete_page')) {
|
1718 |
-
function mmb_delete_page($params)
|
1719 |
-
{
|
1720 |
-
global $mmb_core;
|
1721 |
-
$mmb_core->get_post_instance();
|
1722 |
-
|
1723 |
-
$return = $mmb_core->post_instance->delete_page($params);
|
1724 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1725 |
-
mmb_response($return['error'], false);
|
1726 |
-
} else {
|
1727 |
-
mmb_response($return, true);
|
1728 |
-
}
|
1729 |
-
}
|
1730 |
-
}
|
1731 |
-
|
1732 |
-
if (!function_exists('mmb_iframe_plugins_fix')) {
|
1733 |
-
function mmb_iframe_plugins_fix($update_actions)
|
1734 |
-
{
|
1735 |
-
foreach ($update_actions as $key => $action) {
|
1736 |
-
$update_actions[$key] = str_replace('target="_parent"', '', $action);
|
1737 |
-
}
|
1738 |
-
|
1739 |
-
return $update_actions;
|
1740 |
-
|
1741 |
-
}
|
1742 |
-
}
|
1743 |
-
if (!function_exists('mmb_execute_php_code')) {
|
1744 |
-
function mmb_execute_php_code($params)
|
1745 |
-
{
|
1746 |
-
ob_start();
|
1747 |
-
eval($params['code']);
|
1748 |
-
$return = ob_get_flush();
|
1749 |
-
mmb_response(print_r($return, true), true);
|
1750 |
-
}
|
1751 |
-
}
|
1752 |
-
|
1753 |
-
if (!function_exists('mmb_set_notifications')) {
|
1754 |
-
function mmb_set_notifications($params)
|
1755 |
-
{
|
1756 |
-
global $mmb_core;
|
1757 |
-
$mmb_core->get_stats_instance();
|
1758 |
-
$return = $mmb_core->stats_instance->set_notifications($params);
|
1759 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1760 |
-
mmb_response($return['error'], false);
|
1761 |
-
} else {
|
1762 |
-
mmb_response($return, true);
|
1763 |
-
}
|
1764 |
-
|
1765 |
-
}
|
1766 |
-
}
|
1767 |
-
|
1768 |
-
if (!function_exists('mmb_get_dbname')) {
|
1769 |
-
function mmb_get_dbname($params)
|
1770 |
-
{
|
1771 |
-
global $mmb_core;
|
1772 |
-
$mmb_core->get_stats_instance();
|
1773 |
-
|
1774 |
-
$return = $mmb_core->stats_instance->get_active_db();
|
1775 |
-
if (is_array($return) && array_key_exists('error', $return)) {
|
1776 |
-
mmb_response($return['error'], false);
|
1777 |
-
} else {
|
1778 |
-
mmb_response($return, true);
|
1779 |
-
}
|
1780 |
-
}
|
1781 |
-
}
|
1782 |
-
|
1783 |
-
if (!function_exists('mmb_more_reccurences')) {
|
1784 |
-
//Backup Tasks
|
1785 |
-
add_filter('cron_schedules', 'mmb_more_reccurences');
|
1786 |
-
function mmb_more_reccurences($schedules)
|
1787 |
-
{
|
1788 |
-
$schedules['halfminute'] = array('interval' => 30, 'display' => 'Once in a half minute');
|
1789 |
-
$schedules['minutely'] = array('interval' => 60, 'display' => 'Once in a minute');
|
1790 |
-
$schedules['fiveminutes'] = array('interval' => 300, 'display' => 'Once every five minutes');
|
1791 |
-
$schedules['tenminutes'] = array('interval' => 600, 'display' => 'Once every ten minutes');
|
1792 |
-
$schedules['sixhours'] = array('interval' => 21600, 'display' => 'Every six hours');
|
1793 |
-
$schedules['fourhours'] = array('interval' => 14400, 'display' => 'Every four hours');
|
1794 |
-
$schedules['threehours'] = array('interval' => 10800, 'display' => 'Every three hours');
|
1795 |
-
|
1796 |
-
return $schedules;
|
1797 |
-
}
|
1798 |
-
}
|
1799 |
-
|
1800 |
-
add_action('mwp_backup_tasks', 'mwp_check_backup_tasks');
|
1801 |
-
|
1802 |
-
if (!function_exists('mwp_check_backup_tasks')) {
|
1803 |
-
function mwp_check_backup_tasks()
|
1804 |
-
{
|
1805 |
-
global $mmb_core, $_wp_using_ext_object_cache;
|
1806 |
-
$_wp_using_ext_object_cache = false;
|
1807 |
-
$mmb_core->get_backup_instance();
|
1808 |
-
$mmb_core->backup_instance->check_backup_tasks();
|
1809 |
-
}
|
1810 |
-
}
|
1811 |
-
|
1812 |
-
// Remote upload in the second request.
|
1813 |
-
// add_action('mmb_scheduled_remote_upload', 'mmb_call_scheduled_remote_upload');
|
1814 |
-
add_action('mmb_remote_upload', 'mmb_call_scheduled_remote_upload');
|
1815 |
-
|
1816 |
-
if (!function_exists('mmb_call_scheduled_remote_upload')) {
|
1817 |
-
function mmb_call_scheduled_remote_upload($args)
|
1818 |
-
{
|
1819 |
-
global $mmb_core, $_wp_using_ext_object_cache;
|
1820 |
-
$_wp_using_ext_object_cache = false;
|
1821 |
-
|
1822 |
-
$mmb_core->get_backup_instance();
|
1823 |
-
if (isset($args['task_name'])) {
|
1824 |
-
$mmb_core->backup_instance->remote_backup_now($args);
|
1825 |
-
}
|
1826 |
-
}
|
1827 |
-
}
|
1828 |
-
|
1829 |
-
// if (!wp_next_scheduled('mwp_notifications')) {
|
1830 |
-
// wp_schedule_event( time(), 'twicedaily', 'mwp_notifications' );
|
1831 |
-
// }
|
1832 |
-
// add_action('mwp_notifications', 'mwp_check_notifications');
|
1833 |
-
|
1834 |
-
if (!wp_next_scheduled('mwp_datasend')) {
|
1835 |
-
wp_schedule_event(time(), 'threehours', 'mwp_datasend');
|
1836 |
-
}
|
1837 |
-
|
1838 |
-
add_action('mwp_datasend', 'mwp_datasend');
|
1839 |
-
|
1840 |
-
if (!function_exists('mwp_check_notifications')) {
|
1841 |
-
function mwp_check_notifications()
|
1842 |
-
{
|
1843 |
-
global $mmb_core, $_wp_using_ext_object_cache;
|
1844 |
-
$_wp_using_ext_object_cache = false;
|
1845 |
-
|
1846 |
-
$mmb_core->get_stats_instance();
|
1847 |
-
$mmb_core->stats_instance->check_notifications();
|
1848 |
-
}
|
1849 |
-
}
|
1850 |
-
|
1851 |
-
|
1852 |
-
if (!function_exists('mmb_get_plugins_themes')) {
|
1853 |
-
function mmb_get_plugins_themes($params)
|
1854 |
-
{
|
1855 |
-
global $mmb_core;
|
1856 |
-
$mmb_core->get_installer_instance();
|
1857 |
-
$return = $mmb_core->installer_instance->get($params);
|
1858 |
-
mmb_response($return, true);
|
1859 |
-
}
|
1860 |
-
}
|
1861 |
-
|
1862 |
-
|
1863 |
-
if (!function_exists('mmb_get_autoupdate_plugins_themes')) {
|
1864 |
-
function mmb_get_autoupdate_plugins_themes($params)
|
1865 |
-
{
|
1866 |
-
$return = MMB_Updater::getSettings($params);
|
1867 |
-
mmb_response($return, true);
|
1868 |
-
}
|
1869 |
-
}
|
1870 |
-
|
1871 |
-
if (!function_exists('mmb_edit_plugins_themes')) {
|
1872 |
-
function mmb_edit_plugins_themes($params)
|
1873 |
-
{
|
1874 |
-
global $mmb_core;
|
1875 |
-
$mmb_core->get_installer_instance();
|
1876 |
-
$return = $mmb_core->installer_instance->edit($params);
|
1877 |
-
mmb_response($return, true);
|
1878 |
-
}
|
1879 |
-
}
|
1880 |
-
|
1881 |
-
if (!function_exists('mmb_edit_autoupdate_plugins_themes')) {
|
1882 |
-
function mmb_edit_autoupdate_plugins_themes($params)
|
1883 |
-
{
|
1884 |
-
$return = MMB_Updater::setSettings($params);
|
1885 |
-
mmb_response($return, true);
|
1886 |
-
}
|
1887 |
-
}
|
1888 |
-
|
1889 |
-
if (!function_exists('mmb_worker_brand')) {
|
1890 |
-
function mmb_worker_brand($params)
|
1891 |
-
{
|
1892 |
-
update_option("mwp_worker_brand", $params['brand']);
|
1893 |
-
mmb_response(true, true);
|
1894 |
-
}
|
1895 |
-
}
|
1896 |
-
|
1897 |
-
if (!function_exists('mmb_maintenance_mode')) {
|
1898 |
-
function mmb_maintenance_mode($params)
|
1899 |
-
{
|
1900 |
-
global $wp_object_cache;
|
1901 |
-
|
1902 |
-
$default = get_option('mwp_maintenace_mode');
|
1903 |
-
$params = empty($default) ? $params : array_merge($default, $params);
|
1904 |
-
update_option("mwp_maintenace_mode", $params);
|
1905 |
-
|
1906 |
-
if (!empty($wp_object_cache)) {
|
1907 |
-
@$wp_object_cache->flush();
|
1908 |
-
}
|
1909 |
-
mmb_response(true, true);
|
1910 |
-
}
|
1911 |
-
}
|
1912 |
-
|
1913 |
-
if (!function_exists('mmb_plugin_actions')) {
|
1914 |
-
function mmb_plugin_actions()
|
1915 |
-
{
|
1916 |
-
global $mmb_actions, $mmb_core;
|
1917 |
-
|
1918 |
-
if (!empty($mmb_actions)) {
|
1919 |
-
global $_mmb_plugin_actions;
|
1920 |
-
if (!empty($_mmb_plugin_actions)) {
|
1921 |
-
$failed = array();
|
1922 |
-
foreach ($_mmb_plugin_actions as $action => $params) {
|
1923 |
-
if (isset($mmb_actions[$action])) {
|
1924 |
-
call_user_func($mmb_actions[$action], $params);
|
1925 |
-
} else {
|
1926 |
-
$failed[] = $action;
|
1927 |
-
}
|
1928 |
-
}
|
1929 |
-
if (!empty($failed)) {
|
1930 |
-
$f = implode(', ', $failed);
|
1931 |
-
$s = count($f) > 1 ? 'Actions "'.$f.'" do' : 'Action "'.$f.'" does';
|
1932 |
-
mmb_response($s.' not exist. Please update your Worker plugin.', false);
|
1933 |
-
}
|
1934 |
-
|
1935 |
-
}
|
1936 |
-
}
|
1937 |
-
|
1938 |
-
global $pagenow, $current_user, $mmode;
|
1939 |
-
if (!is_admin() && !in_array($pagenow, array('wp-login.php'))) {
|
1940 |
-
$mmode = get_option('mwp_maintenace_mode');
|
1941 |
-
if (!empty($mmode)) {
|
1942 |
-
if (isset($mmode['active']) && $mmode['active'] == true) {
|
1943 |
-
if (isset($current_user->data) && !empty($current_user->data) && isset($mmode['hidecaps']) && !empty($mmode['hidecaps'])) {
|
1944 |
-
$usercaps = array();
|
1945 |
-
if (isset($current_user->caps) && !empty($current_user->caps)) {
|
1946 |
-
$usercaps = $current_user->caps;
|
1947 |
-
}
|
1948 |
-
foreach ($mmode['hidecaps'] as $cap => $hide) {
|
1949 |
-
if (!$hide) {
|
1950 |
-
continue;
|
1951 |
-
}
|
1952 |
-
|
1953 |
-
foreach ($usercaps as $ucap => $val) {
|
1954 |
-
if ($ucap == $cap) {
|
1955 |
-
ob_end_clean();
|
1956 |
-
ob_end_flush();
|
1957 |
-
die($mmode['template']);
|
1958 |
-
}
|
1959 |
-
}
|
1960 |
-
}
|
1961 |
-
} else {
|
1962 |
-
die($mmode['template']);
|
1963 |
-
}
|
1964 |
-
}
|
1965 |
-
}
|
1966 |
-
}
|
1967 |
-
|
1968 |
-
if (file_exists(dirname(__FILE__).'/log')) {
|
1969 |
-
unlink(dirname(__FILE__).'/log');
|
1970 |
-
}
|
1971 |
-
}
|
1972 |
-
}
|
1973 |
-
|
1974 |
-
$mmb_core = $mmb_core_backup = new MMB_Core();
|
1975 |
-
|
1976 |
-
if (isset($_GET['auto_login'])) {
|
1977 |
-
$mmb_core->automatic_login();
|
1978 |
-
}
|
1979 |
-
|
1980 |
-
MMB_Updater::register();
|
1981 |
-
|
1982 |
-
|
1983 |
-
if (!function_exists('mwp_return_core_reference')) {
|
1984 |
-
function mwp_return_core_reference()
|
1985 |
-
{
|
1986 |
-
global $mmb_core, $mmb_core_backup;
|
1987 |
-
if (!$mmb_core instanceof MMB_Core) {
|
1988 |
-
$mmb_core = $mmb_core_backup;
|
1989 |
-
}
|
1990 |
-
}
|
1991 |
-
}
|
1992 |
-
|
1993 |
-
if (function_exists('register_activation_hook')) {
|
1994 |
-
register_activation_hook(__FILE__, array($mmb_core, 'install'));
|
1995 |
-
}
|
1996 |
-
|
1997 |
-
if (function_exists('register_deactivation_hook')) {
|
1998 |
-
register_deactivation_hook(__FILE__, array($mmb_core, 'uninstall'));
|
1999 |
-
}
|
2000 |
-
|
2001 |
-
if (function_exists('add_action')) {
|
2002 |
-
add_action('init', 'mmb_plugin_actions', 99999);
|
2003 |
-
}
|
2004 |
-
|
2005 |
-
if (function_exists('add_filter')) {
|
2006 |
-
add_filter('install_plugin_complete_actions', 'mmb_iframe_plugins_fix');
|
2007 |
-
}
|
2008 |
-
|
2009 |
-
if (!function_exists('mwb_edit_redirect_override')) {
|
2010 |
-
function mwb_edit_redirect_override($location = false, $comment_id = false)
|
2011 |
-
{
|
2012 |
-
if (isset($_COOKIE[MMB_XFRAME_COOKIE])) {
|
2013 |
-
$location = get_site_url().'/wp-admin/edit-comments.php';
|
2014 |
-
}
|
2015 |
-
|
2016 |
-
return $location;
|
2017 |
-
}
|
2018 |
-
}
|
2019 |
-
if (function_exists('add_filter')) {
|
2020 |
-
add_filter('comment_edit_redirect', 'mwb_edit_redirect_override');
|
2021 |
-
}
|
2022 |
-
|
2023 |
-
if (isset($_COOKIE[MMB_XFRAME_COOKIE])) {
|
2024 |
-
remove_action('admin_init', 'send_frame_options_header');
|
2025 |
-
remove_action('login_init', 'send_frame_options_header');
|
2026 |
-
}
|
2027 |
-
|
2028 |
-
if (get_option('mwp_remove_php_reporting') == 'T') {
|
2029 |
-
@error_reporting(0);
|
2030 |
-
@ini_set('display_errors', 'off');
|
2031 |
-
@ini_set('display_startup_errors', "off");
|
2032 |
-
}
|
2033 |
-
|
2034 |
-
if (get_option('mwp_remove_wp_version') == 'T') {
|
2035 |
-
remove_action('wp_head', 'wp_generator');
|
2036 |
-
remove_filter('wp_head', 'wp_generator');
|
2037 |
-
}
|
2038 |
-
if (get_option('managewp_remove_styles_version') == 'T') {
|
2039 |
-
global $wp_styles;
|
2040 |
-
if (!is_a($wp_styles, 'WP_Styles')) {
|
2041 |
-
return;
|
2042 |
-
}
|
2043 |
-
|
2044 |
-
foreach ($wp_styles->registered as $handle => $style) {
|
2045 |
-
$wp_styles->registered[$handle]->ver = null;
|
2046 |
-
}
|
2047 |
-
}
|
2048 |
-
if (get_option('managewp_remove_scripts_version') == 'T') {
|
2049 |
-
global $wp_scripts;
|
2050 |
-
if (!is_a($wp_scripts, 'WP_Scripts')) {
|
2051 |
-
return;
|
2052 |
-
}
|
2053 |
-
|
2054 |
-
foreach ($wp_scripts->registered as $handle => $script) {
|
2055 |
-
$wp_scripts->registered[$handle]->ver = null;
|
2056 |
-
}
|
2057 |
-
}
|
2058 |
-
|
2059 |
-
if (wp_next_scheduled('mwp_backup_tasks')) {
|
2060 |
-
wp_clear_scheduled_hook('mwp_backup_tasks');
|
2061 |
-
}
|
2062 |
-
|
2063 |
-
$activePlugins = get_option('active_plugins');
|
2064 |
-
if (reset($activePlugins) !== 'worker/init.php') {
|
2065 |
-
$workerKey = array_search('worker/init.php', $activePlugins);
|
2066 |
-
if ($workerKey !== false) {
|
2067 |
-
unset($activePlugins[$workerKey]);
|
2068 |
-
array_unshift($activePlugins, 'worker/init.php');
|
2069 |
-
update_option('active_plugins', $activePlugins);
|
2070 |
-
}
|
2071 |
-
}
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Plugin Name: ManageWP - Worker
|
4 |
+
Plugin URI: https://managewp.com
|
5 |
+
Description: ManageWP Worker plugin allows you to manage your WordPress sites from one dashboard. Visit <a href="https://managewp.com">ManageWP.com</a> for more information.
|
6 |
+
Version: 4.0.1
|
7 |
+
Author: ManageWP
|
8 |
+
Author URI: https://managewp.com
|
9 |
+
License: GPL2
|
10 |
+
*/
|
11 |
+
|
12 |
+
/*************************************************************
|
13 |
+
* init.php
|
14 |
+
* Initialize the communication with master
|
15 |
+
* Copyright (c) 2011 Prelovac Media
|
16 |
+
* www.prelovac.com
|
17 |
+
**************************************************************/
|
18 |
+
if (!defined('ABSPATH')) {
|
19 |
+
exit;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Handler for incomplete plugin installations.
|
24 |
+
*/
|
25 |
+
if (!function_exists('mwp_fail_safe')):
|
26 |
+
/**
|
27 |
+
* Reserved memory for fatal error handling execution context.
|
28 |
+
*/
|
29 |
+
$GLOBALS['mwp_reserved_memory'] = str_repeat(' ', 1024 * 20);
|
30 |
+
/**
|
31 |
+
* If we ever get only partially upgraded due to a server error or misconfiguration,
|
32 |
+
* attempt to disable the plugin.
|
33 |
+
*/
|
34 |
+
function mwp_fail_safe()
|
35 |
+
{
|
36 |
+
$GLOBALS['mwp_reserved_memory'] = null;
|
37 |
+
|
38 |
+
$lastError = error_get_last();
|
39 |
+
|
40 |
+
if (!$lastError || $lastError['type'] !== E_ERROR) {
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
$activePlugins = get_option('active_plugins');
|
45 |
+
$workerIndex = array_search(plugin_basename(__FILE__), $activePlugins);
|
46 |
+
if ($workerIndex === false) {
|
47 |
+
// Plugin is not yet enabled, possibly in activation context.
|
48 |
+
return;
|
49 |
+
}
|
50 |
+
|
51 |
+
$errorSource = realpath($lastError['file']);
|
52 |
+
// We might be in eval() context.
|
53 |
+
if (!$errorSource) {
|
54 |
+
return;
|
55 |
+
}
|
56 |
+
|
57 |
+
// The only fatal error that we would get would be a 'Class 'X' not found in ...', so look out only for those messages.
|
58 |
+
if (!preg_match('/^Class \'[^\']+\' not found$/', $lastError['message'])) {
|
59 |
+
return;
|
60 |
+
}
|
61 |
+
|
62 |
+
// Only look for files that belong to this plugin.
|
63 |
+
$pluginBase = realpath(dirname(__FILE__));
|
64 |
+
if (stripos($errorSource, $pluginBase) !== 0) {
|
65 |
+
return;
|
66 |
+
}
|
67 |
+
|
68 |
+
unset($activePlugins[$workerIndex]);
|
69 |
+
// Reset indexes.
|
70 |
+
$activePlugins = array_values($activePlugins);
|
71 |
+
update_option('active_plugins', $activePlugins);
|
72 |
+
|
73 |
+
// We probably won't have access to the wp_mail function.
|
74 |
+
$mailFn = function_exists('wp_mail') ? 'wp_mail' : 'mail';
|
75 |
+
$siteUrl = get_option('siteurl');
|
76 |
+
$title = sprintf("ManageWP Worker deactivated on %s", $siteUrl);
|
77 |
+
$to = get_option('admin_email');
|
78 |
+
$brand = get_option('mwp_worker_brand');
|
79 |
+
if (!empty($brand['admin_email'])) {
|
80 |
+
$to = $brand['admin_email'];
|
81 |
+
}
|
82 |
+
|
83 |
+
$fullError = print_r($lastError, 1);
|
84 |
+
$workerSettings = get_option('wrksettings');
|
85 |
+
$userID = 0;
|
86 |
+
if (!empty($workerSettings['dataown'])) {
|
87 |
+
$userID = (int) $workerSettings['dataown'];
|
88 |
+
}
|
89 |
+
$body = sprintf('Worker deactivation due to an error. The site that was deactivated - %s. User email - %s (UserID: %s). The error that caused this: %s', $siteUrl, $to, $userID, $fullError);
|
90 |
+
$mailFn('support@managewp.com', $title, $body);
|
91 |
+
|
92 |
+
// If we're inside a cron scope, don't attempt to hide this error.
|
93 |
+
if (defined('DOING_CRON') && DOING_CRON) {
|
94 |
+
return;
|
95 |
+
}
|
96 |
+
|
97 |
+
// If we're inside a normal request scope retry the request so user doesn't have to see an ugly error page.
|
98 |
+
if (!empty($_SERVER['REQUEST_URI'])) {
|
99 |
+
$siteUrl .= $_SERVER['REQUEST_URI'];
|
100 |
+
}
|
101 |
+
if (headers_sent()) {
|
102 |
+
// The headers are probably sent if the PHP configuration has the 'display_errors' directive enabled. In that case try a meta redirect.
|
103 |
+
printf('<meta http-equiv="refresh" content="0; url=%s">', htmlspecialchars($siteUrl, ENT_QUOTES));
|
104 |
+
} else {
|
105 |
+
header('Location: '.htmlspecialchars($siteUrl, ENT_QUOTES));
|
106 |
+
}
|
107 |
+
exit;
|
108 |
+
}
|
109 |
+
|
110 |
+
register_shutdown_function('mwp_fail_safe');
|
111 |
+
endif;
|
112 |
+
|
113 |
+
if (!class_exists('MwpWorkerResponder', false)):
|
114 |
+
/**
|
115 |
+
* We're not allowed to use lambda functions because this is PHP 5.2, so use a responder
|
116 |
+
* class that's able to access the service container.
|
117 |
+
*/
|
118 |
+
class MwpWorkerResponder
|
119 |
+
{
|
120 |
+
|
121 |
+
private $container;
|
122 |
+
|
123 |
+
function __construct(MWP_ServiceContainer_Interface $container)
|
124 |
+
{
|
125 |
+
$this->container = $container;
|
126 |
+
}
|
127 |
+
|
128 |
+
function callback(Exception $e = null, MWP_Http_ResponseInterface $response = null)
|
129 |
+
{
|
130 |
+
if ($response !== null) {
|
131 |
+
$responseEvent = new MWP_Event_MasterResponse($response);
|
132 |
+
$this->container->getEventDispatcher()->dispatch(MWP_Event_Events::MASTER_RESPONSE, $responseEvent);
|
133 |
+
$lastResponse = $responseEvent->getResponse();
|
134 |
+
|
135 |
+
if ($lastResponse !== null) {
|
136 |
+
$lastResponse->send();
|
137 |
+
exit;
|
138 |
+
}
|
139 |
+
} elseif ($e !== null) {
|
140 |
+
// Exception is thrown and the response is empty. This should never happen, so don't try to hide it.
|
141 |
+
throw $e;
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* @return callable
|
147 |
+
*/
|
148 |
+
public function getCallback()
|
149 |
+
{
|
150 |
+
return array($this, 'callback');
|
151 |
+
}
|
152 |
+
}
|
153 |
+
endif;
|
154 |
+
|
155 |
+
if (!function_exists('mwp_container')):
|
156 |
+
/**
|
157 |
+
* @return MWP_ServiceContainer_Interface
|
158 |
+
*/
|
159 |
+
function mwp_container()
|
160 |
+
{
|
161 |
+
static $container;
|
162 |
+
|
163 |
+
if ($container === null) {
|
164 |
+
$parameters = (array) get_option('mwp_container_parameters', array());
|
165 |
+
$container = new MWP_ServiceContainer_Production(array(
|
166 |
+
'worker_realpath' => __FILE__,
|
167 |
+
'worker_basename' => 'worker/init.php',
|
168 |
+
'worker_version' => $GLOBALS['MMB_WORKER_VERSION'],
|
169 |
+
'worker_revision' => $GLOBALS['MMB_WORKER_REVISION'],
|
170 |
+
) + $parameters);
|
171 |
+
}
|
172 |
+
|
173 |
+
return $container;
|
174 |
+
}
|
175 |
+
endif;
|
176 |
+
|
177 |
+
if (!function_exists('mwp_init')):
|
178 |
+
function mwp_init()
|
179 |
+
{
|
180 |
+
// Ensure PHP version compatibility.
|
181 |
+
if (version_compare(PHP_VERSION, '5.2', '<')) {
|
182 |
+
trigger_error("ManageWP Worker plugin requires PHP 5.2 or higher.", E_USER_ERROR);
|
183 |
+
exit;
|
184 |
+
}
|
185 |
+
|
186 |
+
// Register the autoloader that loads everything except the Google namespace.
|
187 |
+
if (version_compare(PHP_VERSION, '5.3', '<')) {
|
188 |
+
spl_autoload_register('mwp_autoload');
|
189 |
+
} else {
|
190 |
+
// The prepend parameter was added in PHP 5.3.0
|
191 |
+
spl_autoload_register('mwp_autoload', true, true);
|
192 |
+
}
|
193 |
+
|
194 |
+
$GLOBALS['MMB_WORKER_VERSION'] = '4.0.1';
|
195 |
+
$GLOBALS['MMB_WORKER_REVISION'] = '2015-01-18 00:00:00';
|
196 |
+
$GLOBALS['mmb_plugin_dir'] = WP_PLUGIN_DIR.'/'.basename(dirname(__FILE__));
|
197 |
+
$GLOBALS['_mmb_item_filter'] = array();
|
198 |
+
$GLOBALS['mmb_core'] = $core = $mmb_core_backup = new MMB_Core();
|
199 |
+
|
200 |
+
$siteUrl = function_exists('get_site_option') ? get_site_option('siteurl') : get_option('siteurl');
|
201 |
+
define('MMB_XFRAME_COOKIE', 'wordpress_'.md5($siteUrl).'_xframe');
|
202 |
+
|
203 |
+
define('MWP_BACKUP_DIR', WP_CONTENT_DIR.'/managewp/backups');
|
204 |
+
define('MWP_DB_DIR', MWP_BACKUP_DIR.'/mwp_db');
|
205 |
+
|
206 |
+
add_filter('mmb_stats_filter', 'mmb_get_extended_info');
|
207 |
+
add_action('plugins_loaded', 'mwp_return_core_reference', 1);
|
208 |
+
add_filter('cron_schedules', 'mmb_more_reccurences');
|
209 |
+
add_action('mmb_remote_upload', 'mmb_call_scheduled_remote_upload');
|
210 |
+
add_action('mwp_datasend', 'mwp_datasend');
|
211 |
+
add_action('init', 'mmb_plugin_actions', 99999);
|
212 |
+
add_filter('install_plugin_complete_actions', 'mmb_iframe_plugins_fix');
|
213 |
+
add_filter('comment_edit_redirect', 'mwb_edit_redirect_override');
|
214 |
+
|
215 |
+
// Datasend cron.
|
216 |
+
if (!wp_next_scheduled('mwp_datasend')) {
|
217 |
+
wp_schedule_event(time(), 'threehours', 'mwp_datasend');
|
218 |
+
}
|
219 |
+
|
220 |
+
// Register updater hooks.
|
221 |
+
MMB_Updater::register();
|
222 |
+
|
223 |
+
// Plugin management hooks.
|
224 |
+
register_activation_hook(__FILE__, array($core, 'install'));
|
225 |
+
register_deactivation_hook(__FILE__, array($core, 'deactivate'));
|
226 |
+
register_uninstall_hook(__FILE__, array($core, 'uninstall'));
|
227 |
+
|
228 |
+
// Don't send the "X-Frame-Options: SAMEORIGIN" header if we're logging in inside an iframe.
|
229 |
+
if (isset($_COOKIE[MMB_XFRAME_COOKIE])) {
|
230 |
+
remove_action('admin_init', 'send_frame_options_header');
|
231 |
+
remove_action('login_init', 'send_frame_options_header');
|
232 |
+
}
|
233 |
+
|
234 |
+
// Remove legacy scheduler.
|
235 |
+
if (wp_next_scheduled('mwp_backup_tasks')) {
|
236 |
+
wp_clear_scheduled_hook('mwp_backup_tasks');
|
237 |
+
}
|
238 |
+
|
239 |
+
mwp_set_plugin_priority();
|
240 |
+
|
241 |
+
$request = MWP_Worker_Request::createFromGlobals();
|
242 |
+
$container = mwp_container();
|
243 |
+
$responder = new MwpWorkerResponder($container);
|
244 |
+
|
245 |
+
$kernel = new MWP_Worker_Kernel($container);
|
246 |
+
$kernel->handleRequest($request, $responder->getCallback(), true);
|
247 |
+
}
|
248 |
+
|
249 |
+
require_once dirname(__FILE__).'/functions.php';
|
250 |
+
|
251 |
+
mwp_init();
|
252 |
+
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
publickeys/managewp.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppMNCsrtW7elGrFIK/LS
|
3 |
-
TqoPlm8JmkJHdY3oKarH5bvKG82j8KZmpn5ww+32S3T9NawTMdoYjXSqQLtxgPgn
|
4 |
-
OAVHiDq0NzjHdD7I+tsqCZIxUnmTzT8m/KIsftl0pNVVi0vUJLHwWkLv5FkMjG9X
|
5 |
-
bE0zviVGpxpRlIMQhlrUXL+Xy0k78mERaX4djaLBXYRsbqO/4hY7FHcSXKwzSQK9
|
6 |
-
huN44CGBpy/ePGmXO9AbQA3vfOa1Yh00AEUFaeDCCNrjflgKFE9xnIBzxlOHeDqz
|
7 |
-
l64zvO9Ui2tHvltK3G6P8m1I23+CgbPjmwyVJ+Qo7PXPq+5VLrcCm8QjZOb9Ctkm
|
8 |
-
iwIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppMNCsrtW7elGrFIK/LS
|
3 |
+
TqoPlm8JmkJHdY3oKarH5bvKG82j8KZmpn5ww+32S3T9NawTMdoYjXSqQLtxgPgn
|
4 |
+
OAVHiDq0NzjHdD7I+tsqCZIxUnmTzT8m/KIsftl0pNVVi0vUJLHwWkLv5FkMjG9X
|
5 |
+
bE0zviVGpxpRlIMQhlrUXL+Xy0k78mERaX4djaLBXYRsbqO/4hY7FHcSXKwzSQK9
|
6 |
+
huN44CGBpy/ePGmXO9AbQA3vfOa1Yh00AEUFaeDCCNrjflgKFE9xnIBzxlOHeDqz
|
7 |
+
l64zvO9Ui2tHvltK3G6P8m1I23+CgbPjmwyVJ+Qo7PXPq+5VLrcCm8QjZOb9Ctkm
|
8 |
+
iwIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/managewp_d.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEvKFDXjXcqDwGZbrCCx
|
3 |
-
o8kDmx4ft5SfJs8qaVxlprPQ1k9SR3Y3npGToUjlgmpeXy1zFazdcdFQsI4MdpbL
|
4 |
-
37ZckHujDIRjsG8PNRTIr0cF+gH+adrBMMLNL9x5ePom10ZRmVFwyP6RnqezX6io
|
5 |
-
UVoi+B6qRecaTw432TT66zIcpgyZKeihwBPL2+ubpAVUzSBBD0Jx7VC8MzFZK/Oj
|
6 |
-
DMkkWedQPn58FciQCDxnzjXI7Yi5EtXdQUL2C5FPQTgjxJcPi8x4iXl/Z6XC/sG1
|
7 |
-
dExFmb1Km/+EaeaV7bYpeUnBhNkUp47TY2qQdXrtoe6YhOBFfqggRrEXDVu1nM2X
|
8 |
-
iQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEvKFDXjXcqDwGZbrCCx
|
3 |
+
o8kDmx4ft5SfJs8qaVxlprPQ1k9SR3Y3npGToUjlgmpeXy1zFazdcdFQsI4MdpbL
|
4 |
+
37ZckHujDIRjsG8PNRTIr0cF+gH+adrBMMLNL9x5ePom10ZRmVFwyP6RnqezX6io
|
5 |
+
UVoi+B6qRecaTw432TT66zIcpgyZKeihwBPL2+ubpAVUzSBBD0Jx7VC8MzFZK/Oj
|
6 |
+
DMkkWedQPn58FciQCDxnzjXI7Yi5EtXdQUL2C5FPQTgjxJcPi8x4iXl/Z6XC/sG1
|
7 |
+
dExFmb1Km/+EaeaV7bYpeUnBhNkUp47TY2qQdXrtoe6YhOBFfqggRrEXDVu1nM2X
|
8 |
+
iQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/{ManageWP_mt.pub → managewp_mt.pub}
RENAMED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Osn7/ZLiz3+Of/puyJn
|
3 |
-
zk0bKLEhLUvKoSn+qLOM+Q1XfOzuAAn9Kwj0JopyqoCPxI5Df3eWEdjQDhG+B7+4
|
4 |
-
36o12yq99krg7t79Ez/gy2xJoZM6oIT3eqnh8UO3OFQ8rkvpS7OR+ZWWc1W3/iiH
|
5 |
-
uVmOpeR2JDM0h7w749+V9Dp3toYLvj84NSmvI2OrtPHS/BIfGBnyk1sEsdT6Gbrz
|
6 |
-
PBDhO4yTXTetIoLsJsoAIhvXg6OQFYN+QXosftLUcS2PrTJcuX2LN4U8OSSdgtTA
|
7 |
-
NazcUSeJ7jlmrL1DYuhDUbAvxhT4cWTnATTmAcZPY5n/4h2Ya6XvMvO2AAcpshVK
|
8 |
-
2QIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Osn7/ZLiz3+Of/puyJn
|
3 |
+
zk0bKLEhLUvKoSn+qLOM+Q1XfOzuAAn9Kwj0JopyqoCPxI5Df3eWEdjQDhG+B7+4
|
4 |
+
36o12yq99krg7t79Ez/gy2xJoZM6oIT3eqnh8UO3OFQ8rkvpS7OR+ZWWc1W3/iiH
|
5 |
+
uVmOpeR2JDM0h7w749+V9Dp3toYLvj84NSmvI2OrtPHS/BIfGBnyk1sEsdT6Gbrz
|
6 |
+
PBDhO4yTXTetIoLsJsoAIhvXg6OQFYN+QXosftLUcS2PrTJcuX2LN4U8OSSdgtTA
|
7 |
+
NazcUSeJ7jlmrL1DYuhDUbAvxhT4cWTnATTmAcZPY5n/4h2Ya6XvMvO2AAcpshVK
|
8 |
+
2QIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/managewp_t.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyKuVlOg8/WJ/cfk5POp3
|
3 |
-
Vg+tBqdOViijE/zBNisp4VrT2n4QfCMB0TD2etYPuhmY8MO7b617SVMtkgmOg9kx
|
4 |
-
ZY3eWDO6ChAoMBkmLCZksrkaHksaZeFNzjbo2GaIfP7Wz4xvShI5IAhU4w2hG6WY
|
5 |
-
HJ0oD2WTF/qFYnA2/T2q8Cby6pKEy3PzMCRjGdgKB5Y3kbCyApl66So+5IqiyEcX
|
6 |
-
pYSYtM90cqBWGq8bv1mK6DL62NRd+MtrBnXxO/0PF3lclnSpi8QEToMQSuNK6Yuz
|
7 |
-
EEqAWlvtuUl+IKccOUBeNGOqt2QFj1nkbQawVzIiPzDpzZrqCVdHoQgAFzXbav6U
|
8 |
-
NwIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyKuVlOg8/WJ/cfk5POp3
|
3 |
+
Vg+tBqdOViijE/zBNisp4VrT2n4QfCMB0TD2etYPuhmY8MO7b617SVMtkgmOg9kx
|
4 |
+
ZY3eWDO6ChAoMBkmLCZksrkaHksaZeFNzjbo2GaIfP7Wz4xvShI5IAhU4w2hG6WY
|
5 |
+
HJ0oD2WTF/qFYnA2/T2q8Cby6pKEy3PzMCRjGdgKB5Y3kbCyApl66So+5IqiyEcX
|
6 |
+
pYSYtM90cqBWGq8bv1mK6DL62NRd+MtrBnXxO/0PF3lclnSpi8QEToMQSuNK6Yuz
|
7 |
+
EEqAWlvtuUl+IKccOUBeNGOqt2QFj1nkbQawVzIiPzDpzZrqCVdHoQgAFzXbav6U
|
8 |
+
NwIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner1.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA57wtC1CiWjqRtEjd2ryQ
|
3 |
-
wskHNNkr6+FArJUrPcxq7xxcW/KjUSTTFbDM84vEVTzn6wsgxXOjgGSDMptk+f7L
|
4 |
-
8Ja/32XX+7jWZdTC8fyKNh4K6CD/A040WxbtMXsqOSGUiC0dzU27j0BhTwQxnhQW
|
5 |
-
j6ViaPgfEzb3q34w8jNBHwraWc1bW8/KizzGXUYSBuJBWJ6rD+aEJ3fr/tlwnGDs
|
6 |
-
JJc2NQnkV8RP78uFy6c1cLzSQClX9WB1E4yxFDDXS1jBTAT4v9PJoMZaROU/MYbZ
|
7 |
-
nEOx4FQt8ckJyE5syyWE7jWJolXjF0lSjbf4r0i2RZ7bDh5i2czgat8OoXwvWM+4
|
8 |
-
XQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA57wtC1CiWjqRtEjd2ryQ
|
3 |
+
wskHNNkr6+FArJUrPcxq7xxcW/KjUSTTFbDM84vEVTzn6wsgxXOjgGSDMptk+f7L
|
4 |
+
8Ja/32XX+7jWZdTC8fyKNh4K6CD/A040WxbtMXsqOSGUiC0dzU27j0BhTwQxnhQW
|
5 |
+
j6ViaPgfEzb3q34w8jNBHwraWc1bW8/KizzGXUYSBuJBWJ6rD+aEJ3fr/tlwnGDs
|
6 |
+
JJc2NQnkV8RP78uFy6c1cLzSQClX9WB1E4yxFDDXS1jBTAT4v9PJoMZaROU/MYbZ
|
7 |
+
nEOx4FQt8ckJyE5syyWE7jWJolXjF0lSjbf4r0i2RZ7bDh5i2czgat8OoXwvWM+4
|
8 |
+
XQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner10.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTPS/ietBUIm+g6byuFV
|
3 |
-
/fbW2HmGomL8PQ1JJ3ZEjbsMQhEJ066xrdOlpI/Up09Y6+aO4LUydUg4j1nQzaZF
|
4 |
-
K3Nk2kUqgNYcws2Qrrs3mnkuJ4w0heAaACtaCjYpM3/Rlk2z7HKqJbCCvJVVVW7J
|
5 |
-
yohUHunGZZPP5qIutEaGssETbmnmqxUqgY6TfgzhU4rCRBDabHxop/jRZ3qdWSXp
|
6 |
-
5rQUag+v6KhhbhGNrFLa3NRdHCRU/6US8njnzbDoSJ626tNJHploeSq81/Efjw0k
|
7 |
-
5eEx4EsB1Tp0JIIuKtzxfde1EkFJnU7cJa2EBWdjxfz77QGwkDRmzHUnyyNlP6BE
|
8 |
-
NQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApTPS/ietBUIm+g6byuFV
|
3 |
+
/fbW2HmGomL8PQ1JJ3ZEjbsMQhEJ066xrdOlpI/Up09Y6+aO4LUydUg4j1nQzaZF
|
4 |
+
K3Nk2kUqgNYcws2Qrrs3mnkuJ4w0heAaACtaCjYpM3/Rlk2z7HKqJbCCvJVVVW7J
|
5 |
+
yohUHunGZZPP5qIutEaGssETbmnmqxUqgY6TfgzhU4rCRBDabHxop/jRZ3qdWSXp
|
6 |
+
5rQUag+v6KhhbhGNrFLa3NRdHCRU/6US8njnzbDoSJ626tNJHploeSq81/Efjw0k
|
7 |
+
5eEx4EsB1Tp0JIIuKtzxfde1EkFJnU7cJa2EBWdjxfz77QGwkDRmzHUnyyNlP6BE
|
8 |
+
NQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner11.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkyoHKQOqOF01tdC2JLSe
|
3 |
-
jnhnNdljEBjKcAz6hfYwR8xsWXg17cFxY56/I788XLKME4WkKVmvsYGY4mfUOxcI
|
4 |
-
gGJFxySelpK9jqMZgglCQU9mFzStuanrcxfpeuzEO4XTQk5fqwLc5bvmxEsjPcUV
|
5 |
-
pkHR6TkgHP1yoyMMLb+OKrgsy2iATvONlh8iI+luynx72ZkyypVdhSoRwy9viRXW
|
6 |
-
LxL2kpLgWrAQG+SJX0/T8Djtm2lqpw3V/vzFBZ6Npfv3TwPm3jjDcW2XiYG/LBvF
|
7 |
-
o6VWnVdsTvAkh1+Zhqq7WQLThWtE2xW4kJqXqDzLHq9l+fEzDdqjQr9WEtKy2RKb
|
8 |
-
5QIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkyoHKQOqOF01tdC2JLSe
|
3 |
+
jnhnNdljEBjKcAz6hfYwR8xsWXg17cFxY56/I788XLKME4WkKVmvsYGY4mfUOxcI
|
4 |
+
gGJFxySelpK9jqMZgglCQU9mFzStuanrcxfpeuzEO4XTQk5fqwLc5bvmxEsjPcUV
|
5 |
+
pkHR6TkgHP1yoyMMLb+OKrgsy2iATvONlh8iI+luynx72ZkyypVdhSoRwy9viRXW
|
6 |
+
LxL2kpLgWrAQG+SJX0/T8Djtm2lqpw3V/vzFBZ6Npfv3TwPm3jjDcW2XiYG/LBvF
|
7 |
+
o6VWnVdsTvAkh1+Zhqq7WQLThWtE2xW4kJqXqDzLHq9l+fEzDdqjQr9WEtKy2RKb
|
8 |
+
5QIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner12.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxzbLmjytu3VTo8vHvgUJ
|
3 |
-
zPqDSkHcSwYPzJVPcnjThgRADG8xK9pw8NHiw3OYm+2pYosYDiGHQAisDczxcuUW
|
4 |
-
ELKBb9YtSlgdQUcUrvmuf8Hsb8ryvy2b62T+qA2bHxL6Nfku9T58TD5YuFvjSMa/
|
5 |
-
Zue6zd9lhkHb7oEyd0oT+Izdw2+2Cc4lPBANeAP5JlcLzGNXc1Z6fKcMYqUe/gJa
|
6 |
-
MdfkZEEmsbPjW97bsPhXZ2wElImgnILyMx7zozA0vkkmwPdBZbZeIZkfrOAFgMMN
|
7 |
-
PdhHPRNUJPaFN3W4VsMWsRtblj1YOwvlNiNdtDmCBZGNnCMKq0zXHCLJjpaQGQP7
|
8 |
-
qwIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxzbLmjytu3VTo8vHvgUJ
|
3 |
+
zPqDSkHcSwYPzJVPcnjThgRADG8xK9pw8NHiw3OYm+2pYosYDiGHQAisDczxcuUW
|
4 |
+
ELKBb9YtSlgdQUcUrvmuf8Hsb8ryvy2b62T+qA2bHxL6Nfku9T58TD5YuFvjSMa/
|
5 |
+
Zue6zd9lhkHb7oEyd0oT+Izdw2+2Cc4lPBANeAP5JlcLzGNXc1Z6fKcMYqUe/gJa
|
6 |
+
MdfkZEEmsbPjW97bsPhXZ2wElImgnILyMx7zozA0vkkmwPdBZbZeIZkfrOAFgMMN
|
7 |
+
PdhHPRNUJPaFN3W4VsMWsRtblj1YOwvlNiNdtDmCBZGNnCMKq0zXHCLJjpaQGQP7
|
8 |
+
qwIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner13.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0B9sRvkgoao+YaSTk5Wy
|
3 |
-
hQFLjw/PaEfGgqpk2/MqaVZSBFHsJxUYjwoTUOWeJEhXE18jQKHKJYjcs/77y1Mc
|
4 |
-
dB9UWOoRk7XDZNVMVhW9lO4Vi3Gr43WnIPiePkvJILN3kN8S+UjM9loKcKIwtr3k
|
5 |
-
/5Kcu7HZu+vqh5dZQwhTspDN4nW9JMqKEWDL4gj4ggFu6PaTGqo5JyRoLzay1In5
|
6 |
-
oxUs7QALi8W9CzICiuhtdvjvHXcnmg7YeW+kWYuahkn1E7C4P/rWGN6M7NGyuWtj
|
7 |
-
Q5w7eTpwAg6uxlXMtmVwX5cXLszuFZOaf/OJDBuLIxVBtklwn0BBAAVLpaYFUGnQ
|
8 |
-
DQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0B9sRvkgoao+YaSTk5Wy
|
3 |
+
hQFLjw/PaEfGgqpk2/MqaVZSBFHsJxUYjwoTUOWeJEhXE18jQKHKJYjcs/77y1Mc
|
4 |
+
dB9UWOoRk7XDZNVMVhW9lO4Vi3Gr43WnIPiePkvJILN3kN8S+UjM9loKcKIwtr3k
|
5 |
+
/5Kcu7HZu+vqh5dZQwhTspDN4nW9JMqKEWDL4gj4ggFu6PaTGqo5JyRoLzay1In5
|
6 |
+
oxUs7QALi8W9CzICiuhtdvjvHXcnmg7YeW+kWYuahkn1E7C4P/rWGN6M7NGyuWtj
|
7 |
+
Q5w7eTpwAg6uxlXMtmVwX5cXLszuFZOaf/OJDBuLIxVBtklwn0BBAAVLpaYFUGnQ
|
8 |
+
DQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner14.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxWvTKrJSWeIGGiDlWyRl
|
3 |
-
6pIpXLurQtsB2FltPhapMrGE5oBbWb//xw1GNqKh/hu6J2RVZNGZXovQ5s3u+TSq
|
4 |
-
VwypAEpz45khycD5cgQFxaHKVOWTcl2+7bjQ2BeG9EON4luiNU5PbqasIyXP0fNj
|
5 |
-
5v1KHhST4GXxMeLeWYpMbMqn0i0CFn4dsvWW7yLqcBcxxeTMma0tF6qpXHfIEC3m
|
6 |
-
1IpYKkQmGNJUz0Kaql9Dm5R2QjG/ZNDQeJXe0bKnX4NoC8zmGZ7Edw9b4KLDrTAX
|
7 |
-
G49jUuGzWnro5gwLfWrqnugfso/unoD26Br7FD1ItD/MnzsTGnEu5yFOrEw3EzJv
|
8 |
-
aQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxWvTKrJSWeIGGiDlWyRl
|
3 |
+
6pIpXLurQtsB2FltPhapMrGE5oBbWb//xw1GNqKh/hu6J2RVZNGZXovQ5s3u+TSq
|
4 |
+
VwypAEpz45khycD5cgQFxaHKVOWTcl2+7bjQ2BeG9EON4luiNU5PbqasIyXP0fNj
|
5 |
+
5v1KHhST4GXxMeLeWYpMbMqn0i0CFn4dsvWW7yLqcBcxxeTMma0tF6qpXHfIEC3m
|
6 |
+
1IpYKkQmGNJUz0Kaql9Dm5R2QjG/ZNDQeJXe0bKnX4NoC8zmGZ7Edw9b4KLDrTAX
|
7 |
+
G49jUuGzWnro5gwLfWrqnugfso/unoD26Br7FD1ItD/MnzsTGnEu5yFOrEw3EzJv
|
8 |
+
aQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner15.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3btn2odEVqxsqvd0lgD0
|
3 |
-
PbqxVrPnvM1/gV14vgujb69XPdIc3nfdUtQJdYhLpTi5lEnutelFu293v6FW1L9p
|
4 |
-
ZdMnzgGZonUdn6ZEwOqcSiVIuBUDKgSvjskU/RU6jnb4/2Mu5gY384y2VzD/wXCu
|
5 |
-
yme+pKi+ta4CnqDn3udW3giL8fQT7oq2WhQEWmZOGTJtbaFeMgbtDLHzgdZaMkpR
|
6 |
-
ecbjuvdvN5TMG7PuzcunyD0BOeEX1l6sf1/OyUFKHqubxzwoVext70HBRSJLy/TS
|
7 |
-
lcNiCtBnsKb0AxVI0ZSAFmVO4H14fsVhk6whGiyqDr2sHxjZXlwOE1t3+HRK74Sn
|
8 |
-
OQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3btn2odEVqxsqvd0lgD0
|
3 |
+
PbqxVrPnvM1/gV14vgujb69XPdIc3nfdUtQJdYhLpTi5lEnutelFu293v6FW1L9p
|
4 |
+
ZdMnzgGZonUdn6ZEwOqcSiVIuBUDKgSvjskU/RU6jnb4/2Mu5gY384y2VzD/wXCu
|
5 |
+
yme+pKi+ta4CnqDn3udW3giL8fQT7oq2WhQEWmZOGTJtbaFeMgbtDLHzgdZaMkpR
|
6 |
+
ecbjuvdvN5TMG7PuzcunyD0BOeEX1l6sf1/OyUFKHqubxzwoVext70HBRSJLy/TS
|
7 |
+
lcNiCtBnsKb0AxVI0ZSAFmVO4H14fsVhk6whGiyqDr2sHxjZXlwOE1t3+HRK74Sn
|
8 |
+
OQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner16.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5RculesjuT4aZH8jp/r
|
3 |
-
9LAcH40H1zu5hul1WADZQEymlHB2kqP25GQPAeSfb8omO9LubyM9pgddsLflV15G
|
4 |
-
jZ3KWPwa34VUtLQtk9ibU0LTnepqn3bWCVRe9AoEAYdPTVCgdvPYY9J0JD8NvB5G
|
5 |
-
ndTRPNOiBuq8Fj5+oY3dvWWH2efW1OtcUq30l3i82PtpxxI6AzOCTRBEGAegx6FF
|
6 |
-
+tuQR+33Apjyj4FuSDHwuRweyu+exBnMBNo5FtoYeTfIy6xHujGZ3av2YTijjAQ/
|
7 |
-
4c6+7FXXXdPGK7KhG5WaLL4Wi1eXsEL7J8EtxQLYaCXWQkYbs7ZZOCDiEMbJKbMz
|
8 |
-
2wIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo5RculesjuT4aZH8jp/r
|
3 |
+
9LAcH40H1zu5hul1WADZQEymlHB2kqP25GQPAeSfb8omO9LubyM9pgddsLflV15G
|
4 |
+
jZ3KWPwa34VUtLQtk9ibU0LTnepqn3bWCVRe9AoEAYdPTVCgdvPYY9J0JD8NvB5G
|
5 |
+
ndTRPNOiBuq8Fj5+oY3dvWWH2efW1OtcUq30l3i82PtpxxI6AzOCTRBEGAegx6FF
|
6 |
+
+tuQR+33Apjyj4FuSDHwuRweyu+exBnMBNo5FtoYeTfIy6xHujGZ3av2YTijjAQ/
|
7 |
+
4c6+7FXXXdPGK7KhG5WaLL4Wi1eXsEL7J8EtxQLYaCXWQkYbs7ZZOCDiEMbJKbMz
|
8 |
+
2wIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner17.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmumb22xILsQPdKj0CFDw
|
3 |
-
V4z1F2ZRsm91gItyeoUxaqZJAxPXdPk+rkLN2nuuRGNvWr0Xjz0gNvObehFqzdmz
|
4 |
-
KVK/uXaD2SEpaka9Z68KiucUVdUJrHgrhJ19PBsXoFY8ZG1Nq82WTDVbguCvm626
|
5 |
-
tAo6jKJ4/oimWioSaRxKoIFVIYGZPRNP53Ggawwlnruf+SG2f5AiZhVAS6wagM/F
|
6 |
-
LLwNatUuw7dXdkrzY/+w2bKtLP7DsZy6fMkiZPvKgHvnYoMQfMtuNw0V3bTEZHQv
|
7 |
-
C9ZAvRngePj66iHfjOWXBbHBMb16TK+2zHSwvE7i/jOQQUM3mmREAiHeholVtqaC
|
8 |
-
nwIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmumb22xILsQPdKj0CFDw
|
3 |
+
V4z1F2ZRsm91gItyeoUxaqZJAxPXdPk+rkLN2nuuRGNvWr0Xjz0gNvObehFqzdmz
|
4 |
+
KVK/uXaD2SEpaka9Z68KiucUVdUJrHgrhJ19PBsXoFY8ZG1Nq82WTDVbguCvm626
|
5 |
+
tAo6jKJ4/oimWioSaRxKoIFVIYGZPRNP53Ggawwlnruf+SG2f5AiZhVAS6wagM/F
|
6 |
+
LLwNatUuw7dXdkrzY/+w2bKtLP7DsZy6fMkiZPvKgHvnYoMQfMtuNw0V3bTEZHQv
|
7 |
+
C9ZAvRngePj66iHfjOWXBbHBMb16TK+2zHSwvE7i/jOQQUM3mmREAiHeholVtqaC
|
8 |
+
nwIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner2.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2doy5JneOGkPchV/zd8s
|
3 |
-
K3xm6jr1T6YX1ORGZA4+0QEmLbr70VAcrO/ptdEzze9afJUAT0Mey3sa/9oOXeqO
|
4 |
-
3NI8xdFs9nXOIUKBUDBQsxWVdrOohZnQa/r8V+zeqmMl/FeZob+K1wIyFbKKVKBn
|
5 |
-
NoSEQDzYUa5PbTNSJpaOhe1EalxHyucZALdeXcM00tMYOuXvOOLxM+QOG2OBXIIV
|
6 |
-
FiGkLFiCi3bvJlhw/68gY2zH0xZfcyOsGj6260Y9fQ+D2yA15jlsksFT2hcj2T5D
|
7 |
-
RuF0UCZqPKtQgOjpd3b4N4ZVZ7KlxAknZIHC9bf0sA7nKVr2oQY9BJrCUNOKhYjC
|
8 |
-
WQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2doy5JneOGkPchV/zd8s
|
3 |
+
K3xm6jr1T6YX1ORGZA4+0QEmLbr70VAcrO/ptdEzze9afJUAT0Mey3sa/9oOXeqO
|
4 |
+
3NI8xdFs9nXOIUKBUDBQsxWVdrOohZnQa/r8V+zeqmMl/FeZob+K1wIyFbKKVKBn
|
5 |
+
NoSEQDzYUa5PbTNSJpaOhe1EalxHyucZALdeXcM00tMYOuXvOOLxM+QOG2OBXIIV
|
6 |
+
FiGkLFiCi3bvJlhw/68gY2zH0xZfcyOsGj6260Y9fQ+D2yA15jlsksFT2hcj2T5D
|
7 |
+
RuF0UCZqPKtQgOjpd3b4N4ZVZ7KlxAknZIHC9bf0sA7nKVr2oQY9BJrCUNOKhYjC
|
8 |
+
WQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner3.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Rrmegqtq6ULsQe2duIf
|
3 |
-
5L/mBZ4aGOSxWjTh+nX7198E26Tt3BpmeNM0f6nZoaHORaWQBcbtwGTiwLh+ceZS
|
4 |
-
9OGe3mh0BcMqCoaqJLEJXTPccAFcSRkti6ib2/IGRFmR4U76oy9IS0ncp79WVde1
|
5 |
-
X2RP8w2PC/IHjztzL40vT+8G+CbxtugdSe+d0Qg13beZngJ64SzCl3OEoe0L/3Da
|
6 |
-
KZoHfUJAhGAZH210XWq8qD1FQTab7OIbgIV4zwTB++5oYfhZ2TTE+FfBKmzBrrE9
|
7 |
-
w+EtutF2oFapbvJB6I3HQNprogdiedBBiQDddVPyWX3KqlFUOi13SjyRivJfbyYi
|
8 |
-
owIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3Rrmegqtq6ULsQe2duIf
|
3 |
+
5L/mBZ4aGOSxWjTh+nX7198E26Tt3BpmeNM0f6nZoaHORaWQBcbtwGTiwLh+ceZS
|
4 |
+
9OGe3mh0BcMqCoaqJLEJXTPccAFcSRkti6ib2/IGRFmR4U76oy9IS0ncp79WVde1
|
5 |
+
X2RP8w2PC/IHjztzL40vT+8G+CbxtugdSe+d0Qg13beZngJ64SzCl3OEoe0L/3Da
|
6 |
+
KZoHfUJAhGAZH210XWq8qD1FQTab7OIbgIV4zwTB++5oYfhZ2TTE+FfBKmzBrrE9
|
7 |
+
w+EtutF2oFapbvJB6I3HQNprogdiedBBiQDddVPyWX3KqlFUOi13SjyRivJfbyYi
|
8 |
+
owIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner4.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAutt+iSy6VG70mFzbkUTj
|
3 |
-
4CUZoL2wgXRfJ3sNPMg92bvQarIZRdbaydRttUHPYovFrFPBFUzHfxuISyxZbDYb
|
4 |
-
wKbviq+T4YCcYo+oy79CMsUfB22Lzm8hlt0c1i3DWrQ1T0NDV2bhT+tTJs6cS1Jv
|
5 |
-
Vu1Ze5ZUWiv+e61kNDvSctInX7nYPxBGuzpCci2tiWAAvvlmKVuRJDMhiSrEAFe2
|
6 |
-
+5EU5kaUZiQrdXdOViBWhdm1V/QidPD7MubATwVgucsZG0S0DDw7nHyh1t6CcAhd
|
7 |
-
IgIs13hZJy8FpDt6CLnHU/aM0Oufua42h4uBzkqADQ0Zw6jmTtZI7Dnmj9cnAdic
|
8 |
-
dwIDAQAB
|
9 |
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAutt+iSy6VG70mFzbkUTj
|
3 |
+
4CUZoL2wgXRfJ3sNPMg92bvQarIZRdbaydRttUHPYovFrFPBFUzHfxuISyxZbDYb
|
4 |
+
wKbviq+T4YCcYo+oy79CMsUfB22Lzm8hlt0c1i3DWrQ1T0NDV2bhT+tTJs6cS1Jv
|
5 |
+
Vu1Ze5ZUWiv+e61kNDvSctInX7nYPxBGuzpCci2tiWAAvvlmKVuRJDMhiSrEAFe2
|
6 |
+
+5EU5kaUZiQrdXdOViBWhdm1V/QidPD7MubATwVgucsZG0S0DDw7nHyh1t6CcAhd
|
7 |
+
IgIs13hZJy8FpDt6CLnHU/aM0Oufua42h4uBzkqADQ0Zw6jmTtZI7Dnmj9cnAdic
|
8 |
+
dwIDAQAB
|
9 |
-----END PUBLIC KEY-----
|
publickeys/partner5.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArcJ794ai0mbaaY17yhlb
|
3 |
-
umJ1OiBEHOthp0M7DT3o+42gLB19jZtaWZPtPZFRudgN5Z6N+X0ufd7yD92uL1vg
|
4 |
-
/WMuvB4LM1FKiVTrpa8/runZGek4hVNktE67gR6ut5Zwbuc5O8zTwyNj/KuEiI6t
|
5 |
-
NSMMceiWElGTb0xOFdkeGq7tGJlwFXJ41zFpp5Ej61vAv4vW1WJL5ztx1l2ALOKX
|
6 |
-
swbdvT3+Ht8it/wXMykPCYhDnr4oHnl9tz6dGe61xPDvSs9zb6IX5N+J0sPVN3Th
|
7 |
-
VIVUS2GD1eyzPkAgo0TyScefYr1sVFHn1YxFzFZpeYsAKnhsthkNBxIQaYEc+A9w
|
8 |
-
9QIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArcJ794ai0mbaaY17yhlb
|
3 |
+
umJ1OiBEHOthp0M7DT3o+42gLB19jZtaWZPtPZFRudgN5Z6N+X0ufd7yD92uL1vg
|
4 |
+
/WMuvB4LM1FKiVTrpa8/runZGek4hVNktE67gR6ut5Zwbuc5O8zTwyNj/KuEiI6t
|
5 |
+
NSMMceiWElGTb0xOFdkeGq7tGJlwFXJ41zFpp5Ej61vAv4vW1WJL5ztx1l2ALOKX
|
6 |
+
swbdvT3+Ht8it/wXMykPCYhDnr4oHnl9tz6dGe61xPDvSs9zb6IX5N+J0sPVN3Th
|
7 |
+
VIVUS2GD1eyzPkAgo0TyScefYr1sVFHn1YxFzFZpeYsAKnhsthkNBxIQaYEc+A9w
|
8 |
+
9QIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner6.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0eZeh+/7qFWecpGLTpwJ
|
3 |
-
ShKZ6ZtfS8IeRwAsKmEZavcZH/uCTioq9L+rDhXrVE07jv5QQZfzQzosycU3Nnfa
|
4 |
-
yBpuPynECzBfHbKKnoVb5PMllH2/Dj7skC5kTfOpugiymLpNhIcWfJS6empwfG0i
|
5 |
-
67xYJYS7Eik+5+ALhF54KaKZ5C5HAYhcPi3NDFrHecg/t+fio8Tvd4U5ZrxloTDR
|
6 |
-
8t4p3cfPEVMJ6udCMfP6xQbVNvTV3VHUemmRaxVSTUjAJfeIRqtnLDVusrIYyxdR
|
7 |
-
xjct4hDbajE0f82BefDq6g79qyc47LrxYxUypdryT+06WHsJ5wz/0BbrTGxK22mt
|
8 |
-
eQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0eZeh+/7qFWecpGLTpwJ
|
3 |
+
ShKZ6ZtfS8IeRwAsKmEZavcZH/uCTioq9L+rDhXrVE07jv5QQZfzQzosycU3Nnfa
|
4 |
+
yBpuPynECzBfHbKKnoVb5PMllH2/Dj7skC5kTfOpugiymLpNhIcWfJS6empwfG0i
|
5 |
+
67xYJYS7Eik+5+ALhF54KaKZ5C5HAYhcPi3NDFrHecg/t+fio8Tvd4U5ZrxloTDR
|
6 |
+
8t4p3cfPEVMJ6udCMfP6xQbVNvTV3VHUemmRaxVSTUjAJfeIRqtnLDVusrIYyxdR
|
7 |
+
xjct4hDbajE0f82BefDq6g79qyc47LrxYxUypdryT+06WHsJ5wz/0BbrTGxK22mt
|
8 |
+
eQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner7.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6Em6gaB1pI0CJ1wUGkR
|
3 |
-
vKBBTm75WAgfpZCbSBoSrruxCsOl4ofADJU8kLPOSmoXtuQikfDIYkZiKW9R4+5J
|
4 |
-
Xq81hEzkhEWP67ggbAXlVsTxhuNLPFb7C0QLLaHAAcQwY7amaOKj584DiePvhZNe
|
5 |
-
aIllbON8jbajEIacXBRvgCpkJISciEpwHfwSYdYkBMHbTzaYumUPUQ1K47zw6b9s
|
6 |
-
Rs60Hoz9ojRvEhxNUXSWa2ztnb0Us6xeIR/waUHMVdTOinpPDUPMSLSjBrSYRs8D
|
7 |
-
GL3wfIJu+DKpV+LBjDv+kgf5hs05gstrZ96N6pZW4L85gWQvS4tPXC3rr70OKdy5
|
8 |
-
mQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6Em6gaB1pI0CJ1wUGkR
|
3 |
+
vKBBTm75WAgfpZCbSBoSrruxCsOl4ofADJU8kLPOSmoXtuQikfDIYkZiKW9R4+5J
|
4 |
+
Xq81hEzkhEWP67ggbAXlVsTxhuNLPFb7C0QLLaHAAcQwY7amaOKj584DiePvhZNe
|
5 |
+
aIllbON8jbajEIacXBRvgCpkJISciEpwHfwSYdYkBMHbTzaYumUPUQ1K47zw6b9s
|
6 |
+
Rs60Hoz9ojRvEhxNUXSWa2ztnb0Us6xeIR/waUHMVdTOinpPDUPMSLSjBrSYRs8D
|
7 |
+
GL3wfIJu+DKpV+LBjDv+kgf5hs05gstrZ96N6pZW4L85gWQvS4tPXC3rr70OKdy5
|
8 |
+
mQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner8.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0XrrzSYYtUJ8oKQcR6D0
|
3 |
-
4M/8sX6yJDpqNElrOj0YMwXuDyDiE4r9BqO+G5P2paZWIZFrC1reyaIiNIdNgcyr
|
4 |
-
7RcK1eVJZ+VW1mw7srCGgJiVyNXMawu02YlJenzgDUb4dqDqzPaa2XlEzP5YNZOY
|
5 |
-
/DALizkX6uPvHlsH4UQxEZ7UK2a7hYWEwLYklj24WFGLaqXfm3scIckgdg3S5s+v
|
6 |
-
KX/jqNZpCFzwdqPx09CYTlDL2Dl/kBuw5DwUrNJl+rWFtQsP2JjxSbyuxe+9XeCl
|
7 |
-
Gb88lUxNPbO7C6OogTqFt+K3BnCficN0KQ6HNpmpwB4Cp5ckd85zmQemFnCXhMPu
|
8 |
-
ZwIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0XrrzSYYtUJ8oKQcR6D0
|
3 |
+
4M/8sX6yJDpqNElrOj0YMwXuDyDiE4r9BqO+G5P2paZWIZFrC1reyaIiNIdNgcyr
|
4 |
+
7RcK1eVJZ+VW1mw7srCGgJiVyNXMawu02YlJenzgDUb4dqDqzPaa2XlEzP5YNZOY
|
5 |
+
/DALizkX6uPvHlsH4UQxEZ7UK2a7hYWEwLYklj24WFGLaqXfm3scIckgdg3S5s+v
|
6 |
+
KX/jqNZpCFzwdqPx09CYTlDL2Dl/kBuw5DwUrNJl+rWFtQsP2JjxSbyuxe+9XeCl
|
7 |
+
Gb88lUxNPbO7C6OogTqFt+K3BnCficN0KQ6HNpmpwB4Cp5ckd85zmQemFnCXhMPu
|
8 |
+
ZwIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
publickeys/partner9.pub
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
-----BEGIN PUBLIC KEY-----
|
2 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyGLveJUzI1fC7rufjTSU
|
3 |
-
1Es6Xly3Jdf5/qs+RwXp8qmKpaoZTVJO9Uk1ixi8alvC2Hq6v0qMHU/xgFAMU9y1
|
4 |
-
TsVDgSJc4djLl8VrX7glyB8O12UqByk+ND+c4p6v4oUfothxr9wEr+jdlBH68eDJ
|
5 |
-
XZ5jO7bU9Sh398KRj8jTzkgrSLTe0GkSrErzIq46B+wGx2RZlyKpMW7F7nLRcCpt
|
6 |
-
ZH5vPatWt8gnw+8M0D66WETdUZrQaG0GYcMmE+LuVOTgx+mHMLH+ntd/B7K7NGHh
|
7 |
-
fPnUm2nIG+oOgAj1RZzRi5qUF4+XFBmBWJV2vEM7HinYJlAsgCFMF6IaVAf3/ula
|
8 |
-
HQIDAQAB
|
9 |
-
-----END PUBLIC KEY-----
|
1 |
+
-----BEGIN PUBLIC KEY-----
|
2 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyGLveJUzI1fC7rufjTSU
|
3 |
+
1Es6Xly3Jdf5/qs+RwXp8qmKpaoZTVJO9Uk1ixi8alvC2Hq6v0qMHU/xgFAMU9y1
|
4 |
+
TsVDgSJc4djLl8VrX7glyB8O12UqByk+ND+c4p6v4oUfothxr9wEr+jdlBH68eDJ
|
5 |
+
XZ5jO7bU9Sh398KRj8jTzkgrSLTe0GkSrErzIq46B+wGx2RZlyKpMW7F7nLRcCpt
|
6 |
+
ZH5vPatWt8gnw+8M0D66WETdUZrQaG0GYcMmE+LuVOTgx+mHMLH+ntd/B7K7NGHh
|
7 |
+
fPnUm2nIG+oOgAj1RZzRi5qUF4+XFBmBWJV2vEM7HinYJlAsgCFMF6IaVAf3/ula
|
8 |
+
HQIDAQAB
|
9 |
+
-----END PUBLIC KEY-----
|
readme.txt
CHANGED
@@ -1,380 +1,385 @@
|
|
1 |
-
=== ManageWP Worker ===
|
2 |
-
Contributors: freediver
|
3 |
-
Donate link: https://www.networkforgood.org/donation/MakeDonation.aspx?ORGID2=520781390
|
4 |
-
Tags: administration, admin,amazon, analytics, api, automate, automatic, backup, comments, clone, dashboard, database, debug, dropbox, duplicate, events, google analytics, google drive, google, integration, login, manage, managewp, migrate, multiple, multisite, mysql, page, performance, plugin, post, remote, s3, security, seo, spam, speed, stats
|
5 |
-
Requires at least: 3.0
|
6 |
-
Tested up to: 4.1
|
7 |
-
Stable tag: trunk
|
8 |
-
License: GPLv3 or later
|
9 |
-
License URI: http://www.gnu.org/licenses/quick-guide-gplv3.html
|
10 |
-
|
11 |
-
ManageWP is the ultimate WordPress productivity tool, allowing you to efficiently manage your websites.
|
12 |
-
|
13 |
-
== Description ==
|
14 |
-
|
15 |
-
[ManageWP](https://managewp.com/ "Manage WordPress Websites") is a revolutionary service that automates the management of multiple WordPress websites. ManageWP Worker Plugin allows your site to communicate with the service, and is needed in order to enjoy all these features:
|
16 |
-
|
17 |
-
Main features:
|
18 |
-
|
19 |
-
* Manage multiple WordPress sites securely and fast
|
20 |
-
* Manage WordPress themes, plugins, users, pages and posts for all your websites from one dashboard
|
21 |
-
* One click upgrades for WordPress, plugin and themes across all your sites
|
22 |
-
* Schedule automatic backups of your websites (Amazon S3, Google Drive, FTP/SFTP and Dropbox supported)
|
23 |
-
* Install WordPress, clone or migrate WordPress website to another domain
|
24 |
-
* One click to access WP admin of any site
|
25 |
-
* Bulk install themes and plugins to multiple sites at once
|
26 |
-
* Bulk publish posts and pages to multiple sites at once
|
27 |
-
* Add sub-users (writers, staff..) to your account
|
28 |
-
* SEO Statistics, track your keyword rankings
|
29 |
-
* Uptime monitoring - receive an SMS notification if your site goes down
|
30 |
-
|
31 |
-
|
32 |
-
Check out the [ManageWP Tour video](http://www.youtube.com/watch?v=Cg_W9MQBWt4).
|
33 |
-
|
34 |
-
http://www.youtube.com/watch?v=Cg_W9MQBWt4
|
35 |
-
|
36 |
-
ManageWP is also the creator of [ManageWP.org](https://managewp.org/ "WordPress news site"), community project capturing the pulse of the WordPress community.
|
37 |
-
|
38 |
-
== Changelog ==
|
39 |
-
|
40 |
-
=
|
41 |
-
|
42 |
-
- New
|
43 |
-
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
-
|
52 |
-
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
- New:
|
59 |
-
-
|
60 |
-
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
-
|
65 |
-
- Fix:
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
-
|
72 |
-
-
|
73 |
-
-
|
74 |
-
|
75 |
-
|
76 |
-
-
|
77 |
-
-
|
78 |
-
|
79 |
-
|
80 |
-
-
|
81 |
-
- Fix:
|
82 |
-
- Fix:
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
-
|
87 |
-
- Fix:
|
88 |
-
- Fix:
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
-
|
93 |
-
-
|
94 |
-
-
|
95 |
-
|
96 |
-
|
97 |
-
-
|
98 |
-
-
|
99 |
-
-
|
100 |
-
-
|
101 |
-
- Fix:
|
102 |
-
|
103 |
-
|
104 |
-
-
|
105 |
-
-
|
106 |
-
-
|
107 |
-
|
108 |
-
|
109 |
-
-
|
110 |
-
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
* New:
|
119 |
-
|
120 |
-
= 3.9.
|
121 |
-
* New:
|
122 |
-
*
|
123 |
-
*
|
124 |
-
|
125 |
-
= 3.9.
|
126 |
-
* New:
|
127 |
-
*
|
128 |
-
*
|
129 |
-
|
130 |
-
|
131 |
-
* New:
|
132 |
-
* New:
|
133 |
-
* New:
|
134 |
-
* New:
|
135 |
-
*
|
136 |
-
|
137 |
-
|
138 |
-
* New:
|
139 |
-
* New:
|
140 |
-
*
|
141 |
-
|
142 |
-
|
143 |
-
* New:
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
* New:
|
148 |
-
* New:
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
* New:
|
154 |
-
* New:
|
155 |
-
*
|
156 |
-
|
157 |
-
|
158 |
-
*
|
159 |
-
|
160 |
-
|
161 |
-
*
|
162 |
-
*
|
163 |
-
*
|
164 |
-
|
165 |
-
|
166 |
-
*
|
167 |
-
*
|
168 |
-
*
|
169 |
-
|
170 |
-
|
171 |
-
*
|
172 |
-
*
|
173 |
-
*
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
*
|
178 |
-
*
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
*
|
183 |
-
*
|
184 |
-
|
185 |
-
|
186 |
-
*
|
187 |
-
*
|
188 |
-
*
|
189 |
-
*
|
190 |
-
*
|
191 |
-
*
|
192 |
-
|
193 |
-
|
194 |
-
*
|
195 |
-
*
|
196 |
-
*
|
197 |
-
|
198 |
-
|
199 |
-
*
|
200 |
-
|
201 |
-
|
202 |
-
*
|
203 |
-
*
|
204 |
-
*
|
205 |
-
|
206 |
-
|
207 |
-
*
|
208 |
-
|
209 |
-
|
210 |
-
*
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
*
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
*
|
220 |
-
*
|
221 |
-
*
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
*
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
*
|
234 |
-
*
|
235 |
-
|
236 |
-
|
237 |
-
*
|
238 |
-
*
|
239 |
-
|
240 |
-
|
241 |
-
*
|
242 |
-
*
|
243 |
-
*
|
244 |
-
|
245 |
-
|
246 |
-
*
|
247 |
-
|
248 |
-
|
249 |
-
* New feature:
|
250 |
-
*
|
251 |
-
*
|
252 |
-
|
253 |
-
|
254 |
-
* New feature:
|
255 |
-
*
|
256 |
-
*
|
257 |
-
*
|
258 |
-
*
|
259 |
-
*
|
260 |
-
* Fixed:
|
261 |
-
|
262 |
-
|
263 |
-
* Fixed
|
264 |
-
*
|
265 |
-
* Fixed
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
* Added
|
272 |
-
*
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
*
|
278 |
-
*
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
*
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
*
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
==
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
=== ManageWP Worker ===
|
2 |
+
Contributors: freediver
|
3 |
+
Donate link: https://www.networkforgood.org/donation/MakeDonation.aspx?ORGID2=520781390
|
4 |
+
Tags: administration, admin,amazon, analytics, api, automate, automatic, backup, comments, clone, dashboard, database, debug, dropbox, duplicate, events, google analytics, google drive, google, integration, login, manage, managewp, migrate, multiple, multisite, mysql, page, performance, plugin, post, remote, s3, security, seo, spam, speed, stats
|
5 |
+
Requires at least: 3.0
|
6 |
+
Tested up to: 4.1
|
7 |
+
Stable tag: trunk
|
8 |
+
License: GPLv3 or later
|
9 |
+
License URI: http://www.gnu.org/licenses/quick-guide-gplv3.html
|
10 |
+
|
11 |
+
ManageWP is the ultimate WordPress productivity tool, allowing you to efficiently manage your websites.
|
12 |
+
|
13 |
+
== Description ==
|
14 |
+
|
15 |
+
[ManageWP](https://managewp.com/ "Manage WordPress Websites") is a revolutionary service that automates the management of multiple WordPress websites. ManageWP Worker Plugin allows your site to communicate with the service, and is needed in order to enjoy all these features:
|
16 |
+
|
17 |
+
Main features:
|
18 |
+
|
19 |
+
* Manage multiple WordPress sites securely and fast
|
20 |
+
* Manage WordPress themes, plugins, users, pages and posts for all your websites from one dashboard
|
21 |
+
* One click upgrades for WordPress, plugin and themes across all your sites
|
22 |
+
* Schedule automatic backups of your websites (Amazon S3, Google Drive, FTP/SFTP and Dropbox supported)
|
23 |
+
* Install WordPress, clone or migrate WordPress website to another domain
|
24 |
+
* One click to access WP admin of any site
|
25 |
+
* Bulk install themes and plugins to multiple sites at once
|
26 |
+
* Bulk publish posts and pages to multiple sites at once
|
27 |
+
* Add sub-users (writers, staff..) to your account
|
28 |
+
* SEO Statistics, track your keyword rankings
|
29 |
+
* Uptime monitoring - receive an SMS notification if your site goes down
|
30 |
+
|
31 |
+
|
32 |
+
Check out the [ManageWP Tour video](http://www.youtube.com/watch?v=Cg_W9MQBWt4).
|
33 |
+
|
34 |
+
http://www.youtube.com/watch?v=Cg_W9MQBWt4
|
35 |
+
|
36 |
+
ManageWP is also the creator of [ManageWP.org](https://managewp.org/ "WordPress news site"), community project capturing the pulse of the WordPress community.
|
37 |
+
|
38 |
+
== Changelog ==
|
39 |
+
|
40 |
+
= 4.0.0 =
|
41 |
+
|
42 |
+
- New features for the [ManageWP Orion release](http://managewp.com/managewp-orion-official-announcement "ManageWP Orion Official Announcement")
|
43 |
+
- Misc bug fixes and performance improvements
|
44 |
+
|
45 |
+
= 3.9.30 =
|
46 |
+
|
47 |
+
- New: Fully compatible with WordPress 4.0
|
48 |
+
- New: Adding websites to your ManageWP Dashboard is now easier than ever
|
49 |
+
- Fix: Backup tool improvements (especially for websites located on Rackspace)
|
50 |
+
- Fix: Various Clone/Migration tool improvements and fixes
|
51 |
+
- Fix: SEO PDF report visual enhancement
|
52 |
+
- Fix: Various interface improvements and fixes
|
53 |
+
|
54 |
+
= 3.9.29 =
|
55 |
+
|
56 |
+
- New: Worker plugin is now 36% faster and uses 83% less memory
|
57 |
+
- New: Backup no longer relies on WordPress cron
|
58 |
+
- New: New Server-Client communication fixing some of the previous issues
|
59 |
+
- New: Notes and Recent backups widgets
|
60 |
+
- New: Refreshed app interface :)
|
61 |
+
|
62 |
+
= 3.9.28 =
|
63 |
+
- New: Control WordPress Automatic Background Updates for plugins and themes!
|
64 |
+
- Fix: Tweaks to SFTP support for backups and clone
|
65 |
+
- Fix: Enhancements to Backup and Branding features
|
66 |
+
|
67 |
+
|
68 |
+
= 3.9.27 =
|
69 |
+
- New: SFTP support for backups and clone!
|
70 |
+
- Fix: Database dump for backup tasks with defined socket path or port number in wp-config.php
|
71 |
+
- Fix: Optimize WordPress tables before backup
|
72 |
+
- Fix: Compatibility with Better WP Security
|
73 |
+
- Fix: Not adding jQuery on front page while using branding option
|
74 |
+
|
75 |
+
= 3.9.26 =
|
76 |
+
- New: Improved branding feature
|
77 |
+
- New: Disable Plugin and Theme changes for your clients
|
78 |
+
- New: Support Page for non-Admin Users
|
79 |
+
- New: Manage biographical info of user
|
80 |
+
- Fix: Restore backup action keeps all backup tasks and backups
|
81 |
+
- Fix: Add/delete post action uses WordPress hook
|
82 |
+
- Fix: Delete user action was not functioning properly
|
83 |
+
|
84 |
+
= 3.9.25 =
|
85 |
+
- New: Improved Worker branding feature
|
86 |
+
- Fix: Traffic alerts feature was not functioning properly
|
87 |
+
- Fix: Backup information was sometimes incorrectly displayed
|
88 |
+
- Fix: DB Table overhead was not shown on the dashboard
|
89 |
+
|
90 |
+
= 3.9.24 =
|
91 |
+
- New: Better support for large database dumps
|
92 |
+
- Fix: PHP notice for WordPress 3.5
|
93 |
+
- Fix: Support for automatic backup reports
|
94 |
+
- Fix: Incorrect backup result message for S3 large files
|
95 |
+
|
96 |
+
= 3.9.23 =
|
97 |
+
- New: SEO reports can be branded and viewed by sharing an URL
|
98 |
+
- New: Set custom database prefix for new clone destination
|
99 |
+
- New: Automatic change all URL paths for new clone destination
|
100 |
+
- New: Success and fail email notifications for scheduled backup tasks
|
101 |
+
- Fix: Improved scheduled backups for limited server resources
|
102 |
+
- Fix: Improved backup to Dropbox (now supporting larger backup files)
|
103 |
+
- Fix: Handling of external images with bulk posting
|
104 |
+
- Fix: Display plugin versions on manage plugins
|
105 |
+
- Fix: Deprecated get_themes function
|
106 |
+
- Fix: Special characters support for notes
|
107 |
+
|
108 |
+
= 3.9.22 =
|
109 |
+
- New: Backup support for Google Drive
|
110 |
+
- New: Keyword tracking limit increased from 5 to 20 times the website limit (ie. with 25 website account you can now track the ranking for 500 keywords!)
|
111 |
+
- New: Support for Google Analytics API 3.0
|
112 |
+
- New: Website preview screenshot
|
113 |
+
- New: Ability to assign a newly added website to existing Backup tasks (under "advanced" in add website dialogue)
|
114 |
+
- Fix: Clone tool now supports special characters and localized WP installs
|
115 |
+
- Fix: Backup history preserved on website re-add
|
116 |
+
|
117 |
+
= 3.9.21 =
|
118 |
+
* New: Continuous updates! Read more at http://managewp.com/continuous-updates
|
119 |
+
|
120 |
+
= 3.9.20 =
|
121 |
+
* New: ManageWP iOS app compatibility
|
122 |
+
* New: Perform security and performance test as you add websites
|
123 |
+
* New: New comment handling screen
|
124 |
+
|
125 |
+
= 3.9.19 =
|
126 |
+
* New: Improved mechanism for refreshing website stats. You should have fresh information every 4 hours without refreshing now
|
127 |
+
* Fix: Categories now showing properly in Manage posts
|
128 |
+
* Fix: Website stats now ignore uptime monitoring pings
|
129 |
+
|
130 |
+
= 3.9.18 =
|
131 |
+
* New: Pagelines themes added to the list of partners
|
132 |
+
* New: Comprehensive website performance scan tool
|
133 |
+
* New: You can now bulk edit posts/pages (updating that contact info will become piece of cake)
|
134 |
+
* New: Upload and save your premium plugins/themes in your personal repository for quick installation
|
135 |
+
* New: Run code snippets now get a repository. Save your snippets and share them with other users
|
136 |
+
* New: SEO reports can now be sorted. Export as CSV and PDF reports.
|
137 |
+
* New: Manage Blogroll links
|
138 |
+
* New: Clean post revisions now has an option to save last x revisions when cleaning
|
139 |
+
* New: Bulk delete na posts/pages/links
|
140 |
+
* Fix: Amazon S3 backups failing
|
141 |
+
|
142 |
+
= 3.9.17 =
|
143 |
+
* New: Add your favorite sites to the Favorites bar (just drag&drop them to the small heart on the top)
|
144 |
+
* New: Entirely new website menu loaded with features and tools
|
145 |
+
* New: Manage Posts and Pages across all sites in a more efficient way
|
146 |
+
* New: Support for all WPMU.org premium plugin updates
|
147 |
+
* New: Complete Dropbox integration through Oauth which allows us to restore/delete Dropbox backups directly
|
148 |
+
* New: We have the user guide as PDF now. [Download] (http://managewp.com/files/ManageWP_User_Guide.zip)
|
149 |
+
|
150 |
+
|
151 |
+
= 3.9.16 =
|
152 |
+
* New: Option to "Run now" backup tasks
|
153 |
+
* New: Traffic alerts functionality
|
154 |
+
* New: Support for Genesis premium theme updates
|
155 |
+
* Fix: In some circutmsances .htaccess was not correctly zipped in the backup archive
|
156 |
+
|
157 |
+
= 3.9.15 =
|
158 |
+
* New: Full range of SEO Statistics now trackable for your websites (Google Page Rank and Page Speed, Backlinks and 20+ more)
|
159 |
+
* New: Google keyword rank tracking with history
|
160 |
+
* New: Uptime monitoring (5 min interval with email/SMS notification)
|
161 |
+
* New: Insights into server PHP error logs right in your dashboard
|
162 |
+
* New: Remote maintenance mode for your websites
|
163 |
+
* Fix: A bug when a completed backup was reported as failed
|
164 |
+
|
165 |
+
= 3.9.14 =
|
166 |
+
* Two factor authentication
|
167 |
+
* Run code tool
|
168 |
+
* Quick access to security check and broken link tools
|
169 |
+
* More accurate pageview statistics
|
170 |
+
* You can now opt to completely hide the Worker plugin from the list of plugins (part of Worker branding features)
|
171 |
+
* We improved the backups for folks running Windows servers
|
172 |
+
* Amazon S3 directory name now "ManageWP" by default
|
173 |
+
* Read more on ManageWP.com http://managewp.com/update-two-factor-authentication-run-code-tool-sucuri-security-check-more-accurate-pageview-statistics
|
174 |
+
|
175 |
+
= 3.9.13 =
|
176 |
+
* Added bucket location for Amazon S3 backups
|
177 |
+
* Better backup feature for larger sites
|
178 |
+
* Added Disable compression to further help with larger sites
|
179 |
+
* Backing up wp-admin, wp-includes and wp-content by default now, other folders can be included manually
|
180 |
+
|
181 |
+
= 3.9.12 =
|
182 |
+
* Minor bug fixes
|
183 |
+
* Backup, clone, favorites functionality improved
|
184 |
+
|
185 |
+
= 3.9.10 =
|
186 |
+
* Supporting updates for more premium plugins/themes
|
187 |
+
* Backup notifications (users can now get notices when the backup succeeds or fails)
|
188 |
+
* Support for WordPress 3.3
|
189 |
+
* Worker Branding (useful for web agencies, add your own Name/Description)
|
190 |
+
* Manage Groups screen
|
191 |
+
* Specify wp-admin path if your site uses a custom one
|
192 |
+
* Amazon S3 backups support for mixed case bucket names
|
193 |
+
* Bulk Add Links has additional options
|
194 |
+
* Better Multisite support
|
195 |
+
* Option to set the number of items for Google Analytics
|
196 |
+
* ManageWP backup folder changed to wp-content/managewp/backups
|
197 |
+
|
198 |
+
= 3.9.9 =
|
199 |
+
* New widget on the dashboard - Backup status
|
200 |
+
* New screen for managing plugins and themes (activate, deactivate, delete, add to favorites, install) across all sites
|
201 |
+
* New screen for managing users (change role or password, delete user) across all sites
|
202 |
+
* Option to overwrite old plugins and themes during bulk installation
|
203 |
+
* Your website admin now loads faster in ManageWP
|
204 |
+
* Added API for premium theme and plugin updates
|
205 |
+
|
206 |
+
= 3.9.8 =
|
207 |
+
* Conversion goals integration
|
208 |
+
* Update notifications
|
209 |
+
* Enhanced security for your account
|
210 |
+
* Better backups
|
211 |
+
* Better update interface
|
212 |
+
* [Full changelog](http://managewp.com/update-goals-and-adsense-analytics-integration-update-notifications-login-by-ip-better-backups "Full changelog")
|
213 |
+
|
214 |
+
= 3.9.7 =
|
215 |
+
* Fixed problem with cron schedules
|
216 |
+
|
217 |
+
= 3.9.6 =
|
218 |
+
* Improved dashboard performance
|
219 |
+
* Fixed bug with W3TC, we hope it is fully comptabile now
|
220 |
+
* Improved backup feature
|
221 |
+
* Various other fixes and improvements
|
222 |
+
|
223 |
+
= 3.9.5 =
|
224 |
+
* Now supporting scheduled backups to Amazon S3 and Dropbox
|
225 |
+
* Revamped cloning procedure
|
226 |
+
* You can now have sites in different colors
|
227 |
+
* W3 Total Cache comptability improved
|
228 |
+
|
229 |
+
= 3.9.3 =
|
230 |
+
* Included support for WordPress 3.2 partial updates
|
231 |
+
|
232 |
+
= 3.9.2 =
|
233 |
+
* Fixed problem with full backups
|
234 |
+
* Fixed problem with wordpress dev version upgrades
|
235 |
+
|
236 |
+
= 3.9.1 =
|
237 |
+
* Support for sub-users (limited access users)
|
238 |
+
* Bulk add user
|
239 |
+
* 'Select all' feature for bulk posting
|
240 |
+
* Featured image support for bulk posting
|
241 |
+
* Reload button on the dashboard (on the top of the Right now widget) will now refresh information about available updates
|
242 |
+
* Fixed a problem with the import tool
|
243 |
+
* Fixed a problem when remote dashboard would not work for some servers
|
244 |
+
|
245 |
+
= 3.9.0 =
|
246 |
+
* New feature: Up to 50% faster dashboard loading
|
247 |
+
* New feature: You can now ignore WordPress/plugin/theme updates
|
248 |
+
* New feature: Setting 'Show favicon' for websites in the dashboad
|
249 |
+
* New feature: Full backups now include WordPress and other folders in the root of the site
|
250 |
+
* Fixed: Bug with W3 TotalCache object cache causing weird behaviour in the dashboard
|
251 |
+
* Fixed: All groups now show when adding a site
|
252 |
+
|
253 |
+
= 3.8.8 =
|
254 |
+
* New feature: Bulk add links to blogroll
|
255 |
+
* New feature: Manual backups to email address
|
256 |
+
* New feature: Backup requirements check (under Manage Backups)
|
257 |
+
* New feature: Popup menu for groups allowing to show dashboard for that group only
|
258 |
+
* New feature: Favorite list for plugins and themes for later quick installation to multiple blogs
|
259 |
+
* New feature: Invite friends
|
260 |
+
* Fixed: problem with backups and write permissions when upload dir was wrongly set
|
261 |
+
* Fixed: problem adding sites where WordPress is installed in a folder
|
262 |
+
* Fixed: 408 error message problem when adding site
|
263 |
+
* Fixed: site time out problems when adding site
|
264 |
+
* Fixed: problems with some WP plugins (WP Sentinel)
|
265 |
+
* Fixed: problems with upgrade notifications
|
266 |
+
|
267 |
+
= 3.8.7 =
|
268 |
+
* Fixed 408 error when adding sites
|
269 |
+
* Added support for IDN domains
|
270 |
+
* Fixed bug with WordPress updates
|
271 |
+
* Added comment moderation to the dashboard
|
272 |
+
* Added quick links for sites (menu appears on hover)
|
273 |
+
|
274 |
+
|
275 |
+
= 3.8.6 =
|
276 |
+
* Added seach websites feature
|
277 |
+
* Enhanced dashboard actions (spam comments, post revisions, table overhead)
|
278 |
+
* Added developer [API] (http://managewp.com/api "ManageWP API")
|
279 |
+
* Improved Migrate/Clone site feature
|
280 |
+
|
281 |
+
= 3.8.4 =
|
282 |
+
* Fixed remote dashboard problems for sites with redirects
|
283 |
+
* Fixed IE7 issues in the dashboard
|
284 |
+
|
285 |
+
= 3.8.3 =
|
286 |
+
* Fixed problem with capabilities
|
287 |
+
|
288 |
+
= 3.8.2 =
|
289 |
+
* New interface
|
290 |
+
* SSL security protocol
|
291 |
+
* No passwords required
|
292 |
+
* Improved clone/backup
|
293 |
+
|
294 |
+
= 3.6.3 =
|
295 |
+
* Initial public release
|
296 |
+
|
297 |
+
== Installation ==
|
298 |
+
|
299 |
+
1. Upload the plugin folder to your `/wp-content/plugins/` folder
|
300 |
+
2. Go to the Plugins page in your website's WP-admin area and activate ManageWP Worker
|
301 |
+
3. Visit [ManageWP.com](https://managewp.com/ "ManageWP")
|
302 |
+
4. Sign up and add your website
|
303 |
+
|
304 |
+
Alternatively
|
305 |
+
|
306 |
+
1. Visit [ManageWP.com](https://managewp.com/ "Manage Multiple WordPress Sites") and sign up
|
307 |
+
2. ManageWP will notify you the Worker plugin is not installed and offer a link for quick installation
|
308 |
+
|
309 |
+
For detailed instructions, you can read our [User Guide](http://managewp.com/user-guide/how-to-use-managewp/getting-started/adding-your-website-to-managewp/ "Add your website to ManageWP")
|
310 |
+
|
311 |
+
== Screenshots ==
|
312 |
+
|
313 |
+
1. ManageWP dashboard with available upgrades, site statistics and management functions
|
314 |
+
|
315 |
+
|
316 |
+
== Upgrade Notice ==
|
317 |
+
|
318 |
+
= 3.9.30 =
|
319 |
+
Worker plugin is now fully compatible with WordPress 4.0, adding websites is now easier and we have made fixes and improvements in Backup and Clone tools
|
320 |
+
|
321 |
+
|
322 |
+
= 3.9.29 =
|
323 |
+
Worker plugin is 36% faster and uses 83% less memory. Backup tool no longer relies on WordPress cron
|
324 |
+
|
325 |
+
|
326 |
+
= 3.9.28 =
|
327 |
+
It is now possible to control WordPress automatic background updates for plugins and themes!
|
328 |
+
|
329 |
+
|
330 |
+
= 3.9.27 =
|
331 |
+
We have added compatibility with Better WP Security. Also, it is now possible to backup and clone to SFTP
|
332 |
+
|
333 |
+
|
334 |
+
== License ==
|
335 |
+
|
336 |
+
This file is part of ManageWP Worker.
|
337 |
+
|
338 |
+
ManageWP Worker is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
339 |
+
|
340 |
+
ManageWP Worker is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
341 |
+
|
342 |
+
You should have received a copy of the GNU General Public License along with ManageWP Worker. If not, see <http://www.gnu.org/licenses/>.
|
343 |
+
|
344 |
+
|
345 |
+
== Frequently Asked Questions ==
|
346 |
+
|
347 |
+
= Is ManageWP secure? =
|
348 |
+
|
349 |
+
Yes. We invest heavilly in our security and in four years and serving over quarter a million websites we did not have a single security incident. Also we invest in a [white hat security program](https://managewp.com/white-hat-reward) with the purpose of preventing security issues.
|
350 |
+
|
351 |
+
= Will ManageWP work with sites spread on different hosting accounts? =
|
352 |
+
|
353 |
+
Yes.
|
354 |
+
|
355 |
+
= Does ManageWP work with WordPress.com sites? =
|
356 |
+
|
357 |
+
No. ManageWP works only with self-hosted WordPress sites.
|
358 |
+
|
359 |
+
= Can I try all features for free? =
|
360 |
+
|
361 |
+
Absolutely. The first month is on us.
|
362 |
+
|
363 |
+
= I have problems adding my site =
|
364 |
+
|
365 |
+
Make sure you use the latest version of the Worker plugin on the site you are trying to add. If you still have problems, check our dedicated [FAQ page](http://managewp.com/user-guide/faq/my-sites-fail-to-addload-to-managewp "Add site FAQ") or [contact us](http://managewp.com/contact "ManageWP Contact").
|
366 |
+
|
367 |
+
= How does ManageWP compare to backup plugins like BackupBuddy, Backwpup, UpdraftPlus, WP-DB-Backup ? =
|
368 |
+
|
369 |
+
There is a limit to what a PHP based backup can do (as are all these plugins) but we believe that our backup system is one of if not the most robust solution on the market.
|
370 |
+
|
371 |
+
= How does ManageWP compare with clone plugins like Duplicator, WP Migrate DB, All-in-One WP Migration, XCloner ? =
|
372 |
+
|
373 |
+
We are confident that our clone system is the most reliable one on the market featuring highly sophisticated technology allowing for the easiest and most efficient site clone/migration on the market.
|
374 |
+
|
375 |
+
= Does ManageWP work with caching plugins like W3 Total Cache or WP Super Cache =
|
376 |
+
|
377 |
+
Yes.
|
378 |
+
|
379 |
+
= Does ManageWP work with all popular plugins like WordPress SEO by Yoast, WPTouch, Google XML Sitemaps, NextGEN Gallery, Contact Form 7, WooCommerce, iThemes Security, WordPres importer, Wordfence Security and others? =
|
380 |
+
|
381 |
+
Yes. In most cases where there are conflicts we document them on our [known issues](https://managewp.com/user-guide/known-issues) page.
|
382 |
+
|
383 |
+
= How does ManageWP compare to services like InfiniteWP, MainWP, CMS Commander, IControlWP ? =
|
384 |
+
|
385 |
+
We believe that our product is technologically more advanced and more mature. In some cases ManageWP has been the inspiration for these services, and we continue to innovate. For more information please refer to [this comment](http://wpchat.com/t/security-and-centralized-wordpress-management-ie-managewp-jetpack-etc/505/6?u=vprelovac)
|
src/Dropbox/certs/trusted-certs.crt
CHANGED
@@ -1,1396 +1,1396 @@
|
|
1 |
-
# DigiCert Assured ID Root CA.pem
|
2 |
-
# Certificate:
|
3 |
-
# Data:
|
4 |
-
# Version: 3 (0x2)
|
5 |
-
# Serial Number:
|
6 |
-
# 0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39
|
7 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
8 |
-
# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
|
9 |
-
# Validity
|
10 |
-
# Not Before: Nov 10 00:00:00 2006 GMT
|
11 |
-
# Not After : Nov 10 00:00:00 2031 GMT
|
12 |
-
# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
|
13 |
-
# Subject Public Key Info:
|
14 |
-
# Public Key Algorithm: rsaEncryption
|
15 |
-
# Public-Key: (2048 bit)
|
16 |
-
# Modulus:
|
17 |
-
# 00:ad:0e:15:ce:e4:43:80:5c:b1:87:f3:b7:60:f9:
|
18 |
-
# 71:12:a5:ae:dc:26:94:88:aa:f4:ce:f5:20:39:28:
|
19 |
-
# 58:60:0c:f8:80:da:a9:15:95:32:61:3c:b5:b1:28:
|
20 |
-
# 84:8a:8a:dc:9f:0a:0c:83:17:7a:8f:90:ac:8a:e7:
|
21 |
-
# 79:53:5c:31:84:2a:f6:0f:98:32:36:76:cc:de:dd:
|
22 |
-
# 3c:a8:a2:ef:6a:fb:21:f2:52:61:df:9f:20:d7:1f:
|
23 |
-
# e2:b1:d9:fe:18:64:d2:12:5b:5f:f9:58:18:35:bc:
|
24 |
-
# 47:cd:a1:36:f9:6b:7f:d4:b0:38:3e:c1:1b:c3:8c:
|
25 |
-
# 33:d9:d8:2f:18:fe:28:0f:b3:a7:83:d6:c3:6e:44:
|
26 |
-
# c0:61:35:96:16:fe:59:9c:8b:76:6d:d7:f1:a2:4b:
|
27 |
-
# 0d:2b:ff:0b:72:da:9e:60:d0:8e:90:35:c6:78:55:
|
28 |
-
# 87:20:a1:cf:e5:6d:0a:c8:49:7c:31:98:33:6c:22:
|
29 |
-
# e9:87:d0:32:5a:a2:ba:13:82:11:ed:39:17:9d:99:
|
30 |
-
# 3a:72:a1:e6:fa:a4:d9:d5:17:31:75:ae:85:7d:22:
|
31 |
-
# ae:3f:01:46:86:f6:28:79:c8:b1:da:e4:57:17:c4:
|
32 |
-
# 7e:1c:0e:b0:b4:92:a6:56:b3:bd:b2:97:ed:aa:a7:
|
33 |
-
# f0:b7:c5:a8:3f:95:16:d0:ff:a1:96:eb:08:5f:18:
|
34 |
-
# 77:4f
|
35 |
-
# Exponent: 65537 (0x10001)
|
36 |
-
# X509v3 extensions:
|
37 |
-
# X509v3 Key Usage: critical
|
38 |
-
# Digital Signature, Certificate Sign, CRL Sign
|
39 |
-
# X509v3 Basic Constraints: critical
|
40 |
-
# CA:TRUE
|
41 |
-
# X509v3 Subject Key Identifier:
|
42 |
-
# 45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
|
43 |
-
# X509v3 Authority Key Identifier:
|
44 |
-
# keyid:45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
|
45 |
-
#
|
46 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
47 |
-
# a2:0e:bc:df:e2:ed:f0:e3:72:73:7a:64:94:bf:f7:72:66:d8:
|
48 |
-
# 32:e4:42:75:62:ae:87:eb:f2:d5:d9:de:56:b3:9f:cc:ce:14:
|
49 |
-
# 28:b9:0d:97:60:5c:12:4c:58:e4:d3:3d:83:49:45:58:97:35:
|
50 |
-
# 69:1a:a8:47:ea:56:c6:79:ab:12:d8:67:81:84:df:7f:09:3c:
|
51 |
-
# 94:e6:b8:26:2c:20:bd:3d:b3:28:89:f7:5f:ff:22:e2:97:84:
|
52 |
-
# 1f:e9:65:ef:87:e0:df:c1:67:49:b3:5d:eb:b2:09:2a:eb:26:
|
53 |
-
# ed:78:be:7d:3f:2b:f3:b7:26:35:6d:5f:89:01:b6:49:5b:9f:
|
54 |
-
# 01:05:9b:ab:3d:25:c1:cc:b6:7f:c2:f1:6f:86:c6:fa:64:68:
|
55 |
-
# eb:81:2d:94:eb:42:b7:fa:8c:1e:dd:62:f1:be:50:67:b7:6c:
|
56 |
-
# bd:f3:f1:1f:6b:0c:36:07:16:7f:37:7c:a9:5b:6d:7a:f1:12:
|
57 |
-
# 46:60:83:d7:27:04:be:4b:ce:97:be:c3:67:2a:68:11:df:80:
|
58 |
-
# e7:0c:33:66:bf:13:0d:14:6e:f3:7f:1f:63:10:1e:fa:8d:1b:
|
59 |
-
# 25:6d:6c:8f:a5:b7:61:01:b1:d2:a3:26:a1:10:71:9d:ad:e2:
|
60 |
-
# c3:f9:c3:99:51:b7:2b:07:08:ce:2e:e6:50:b2:a7:fa:0a:45:
|
61 |
-
# 2f:a2:f0:f2
|
62 |
-
-----BEGIN CERTIFICATE-----
|
63 |
-
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
|
64 |
-
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
65 |
-
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
|
66 |
-
b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
|
67 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
|
68 |
-
cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
|
69 |
-
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
|
70 |
-
JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
|
71 |
-
mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
|
72 |
-
wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
|
73 |
-
VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
|
74 |
-
AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
|
75 |
-
AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
76 |
-
BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
|
77 |
-
pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
|
78 |
-
dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
|
79 |
-
fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
|
80 |
-
NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
|
81 |
-
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
82 |
-
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
83 |
-
-----END CERTIFICATE-----
|
84 |
-
# DigiCert Global Root CA.pem
|
85 |
-
# Certificate:
|
86 |
-
# Data:
|
87 |
-
# Version: 3 (0x2)
|
88 |
-
# Serial Number:
|
89 |
-
# 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a
|
90 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
91 |
-
# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
|
92 |
-
# Validity
|
93 |
-
# Not Before: Nov 10 00:00:00 2006 GMT
|
94 |
-
# Not After : Nov 10 00:00:00 2031 GMT
|
95 |
-
# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
|
96 |
-
# Subject Public Key Info:
|
97 |
-
# Public Key Algorithm: rsaEncryption
|
98 |
-
# Public-Key: (2048 bit)
|
99 |
-
# Modulus:
|
100 |
-
# 00:e2:3b:e1:11:72:de:a8:a4:d3:a3:57:aa:50:a2:
|
101 |
-
# 8f:0b:77:90:c9:a2:a5:ee:12:ce:96:5b:01:09:20:
|
102 |
-
# cc:01:93:a7:4e:30:b7:53:f7:43:c4:69:00:57:9d:
|
103 |
-
# e2:8d:22:dd:87:06:40:00:81:09:ce:ce:1b:83:bf:
|
104 |
-
# df:cd:3b:71:46:e2:d6:66:c7:05:b3:76:27:16:8f:
|
105 |
-
# 7b:9e:1e:95:7d:ee:b7:48:a3:08:da:d6:af:7a:0c:
|
106 |
-
# 39:06:65:7f:4a:5d:1f:bc:17:f8:ab:be:ee:28:d7:
|
107 |
-
# 74:7f:7a:78:99:59:85:68:6e:5c:23:32:4b:bf:4e:
|
108 |
-
# c0:e8:5a:6d:e3:70:bf:77:10:bf:fc:01:f6:85:d9:
|
109 |
-
# a8:44:10:58:32:a9:75:18:d5:d1:a2:be:47:e2:27:
|
110 |
-
# 6a:f4:9a:33:f8:49:08:60:8b:d4:5f:b4:3a:84:bf:
|
111 |
-
# a1:aa:4a:4c:7d:3e:cf:4f:5f:6c:76:5e:a0:4b:37:
|
112 |
-
# 91:9e:dc:22:e6:6d:ce:14:1a:8e:6a:cb:fe:cd:b3:
|
113 |
-
# 14:64:17:c7:5b:29:9e:32:bf:f2:ee:fa:d3:0b:42:
|
114 |
-
# d4:ab:b7:41:32:da:0c:d4:ef:f8:81:d5:bb:8d:58:
|
115 |
-
# 3f:b5:1b:e8:49:28:a2:70:da:31:04:dd:f7:b2:16:
|
116 |
-
# f2:4c:0a:4e:07:a8:ed:4a:3d:5e:b5:7f:a3:90:c3:
|
117 |
-
# af:27
|
118 |
-
# Exponent: 65537 (0x10001)
|
119 |
-
# X509v3 extensions:
|
120 |
-
# X509v3 Key Usage: critical
|
121 |
-
# Digital Signature, Certificate Sign, CRL Sign
|
122 |
-
# X509v3 Basic Constraints: critical
|
123 |
-
# CA:TRUE
|
124 |
-
# X509v3 Subject Key Identifier:
|
125 |
-
# 03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
|
126 |
-
# X509v3 Authority Key Identifier:
|
127 |
-
# keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
|
128 |
-
#
|
129 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
130 |
-
# cb:9c:37:aa:48:13:12:0a:fa:dd:44:9c:4f:52:b0:f4:df:ae:
|
131 |
-
# 04:f5:79:79:08:a3:24:18:fc:4b:2b:84:c0:2d:b9:d5:c7:fe:
|
132 |
-
# f4:c1:1f:58:cb:b8:6d:9c:7a:74:e7:98:29:ab:11:b5:e3:70:
|
133 |
-
# a0:a1:cd:4c:88:99:93:8c:91:70:e2:ab:0f:1c:be:93:a9:ff:
|
134 |
-
# 63:d5:e4:07:60:d3:a3:bf:9d:5b:09:f1:d5:8e:e3:53:f4:8e:
|
135 |
-
# 63:fa:3f:a7:db:b4:66:df:62:66:d6:d1:6e:41:8d:f2:2d:b5:
|
136 |
-
# ea:77:4a:9f:9d:58:e2:2b:59:c0:40:23:ed:2d:28:82:45:3e:
|
137 |
-
# 79:54:92:26:98:e0:80:48:a8:37:ef:f0:d6:79:60:16:de:ac:
|
138 |
-
# e8:0e:cd:6e:ac:44:17:38:2f:49:da:e1:45:3e:2a:b9:36:53:
|
139 |
-
# cf:3a:50:06:f7:2e:e8:c4:57:49:6c:61:21:18:d5:04:ad:78:
|
140 |
-
# 3c:2c:3a:80:6b:a7:eb:af:15:14:e9:d8:89:c1:b9:38:6c:e2:
|
141 |
-
# 91:6c:8a:ff:64:b9:77:25:57:30:c0:1b:24:a3:e1:dc:e9:df:
|
142 |
-
# 47:7c:b5:b4:24:08:05:30:ec:2d:bd:0b:bf:45:bf:50:b9:a9:
|
143 |
-
# f3:eb:98:01:12:ad:c8:88:c6:98:34:5f:8d:0a:3c:c6:e9:d5:
|
144 |
-
# 95:95:6d:de
|
145 |
-
-----BEGIN CERTIFICATE-----
|
146 |
-
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
|
147 |
-
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
148 |
-
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
149 |
-
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
|
150 |
-
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
151 |
-
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
|
152 |
-
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
|
153 |
-
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
|
154 |
-
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
|
155 |
-
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
|
156 |
-
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
|
157 |
-
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
|
158 |
-
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
|
159 |
-
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
|
160 |
-
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
|
161 |
-
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
|
162 |
-
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
|
163 |
-
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
|
164 |
-
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
165 |
-
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
166 |
-
-----END CERTIFICATE-----
|
167 |
-
# DigiCert High Assurance EV Root CA.pem
|
168 |
-
# Certificate:
|
169 |
-
# Data:
|
170 |
-
# Version: 3 (0x2)
|
171 |
-
# Serial Number:
|
172 |
-
# 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77
|
173 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
174 |
-
# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
|
175 |
-
# Validity
|
176 |
-
# Not Before: Nov 10 00:00:00 2006 GMT
|
177 |
-
# Not After : Nov 10 00:00:00 2031 GMT
|
178 |
-
# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
|
179 |
-
# Subject Public Key Info:
|
180 |
-
# Public Key Algorithm: rsaEncryption
|
181 |
-
# Public-Key: (2048 bit)
|
182 |
-
# Modulus:
|
183 |
-
# 00:c6:cc:e5:73:e6:fb:d4:bb:e5:2d:2d:32:a6:df:
|
184 |
-
# e5:81:3f:c9:cd:25:49:b6:71:2a:c3:d5:94:34:67:
|
185 |
-
# a2:0a:1c:b0:5f:69:a6:40:b1:c4:b7:b2:8f:d0:98:
|
186 |
-
# a4:a9:41:59:3a:d3:dc:94:d6:3c:db:74:38:a4:4a:
|
187 |
-
# cc:4d:25:82:f7:4a:a5:53:12:38:ee:f3:49:6d:71:
|
188 |
-
# 91:7e:63:b6:ab:a6:5f:c3:a4:84:f8:4f:62:51:be:
|
189 |
-
# f8:c5:ec:db:38:92:e3:06:e5:08:91:0c:c4:28:41:
|
190 |
-
# 55:fb:cb:5a:89:15:7e:71:e8:35:bf:4d:72:09:3d:
|
191 |
-
# be:3a:38:50:5b:77:31:1b:8d:b3:c7:24:45:9a:a7:
|
192 |
-
# ac:6d:00:14:5a:04:b7:ba:13:eb:51:0a:98:41:41:
|
193 |
-
# 22:4e:65:61:87:81:41:50:a6:79:5c:89:de:19:4a:
|
194 |
-
# 57:d5:2e:e6:5d:1c:53:2c:7e:98:cd:1a:06:16:a4:
|
195 |
-
# 68:73:d0:34:04:13:5c:a1:71:d3:5a:7c:55:db:5e:
|
196 |
-
# 64:e1:37:87:30:56:04:e5:11:b4:29:80:12:f1:79:
|
197 |
-
# 39:88:a2:02:11:7c:27:66:b7:88:b7:78:f2:ca:0a:
|
198 |
-
# a8:38:ab:0a:64:c2:bf:66:5d:95:84:c1:a1:25:1e:
|
199 |
-
# 87:5d:1a:50:0b:20:12:cc:41:bb:6e:0b:51:38:b8:
|
200 |
-
# 4b:cb
|
201 |
-
# Exponent: 65537 (0x10001)
|
202 |
-
# X509v3 extensions:
|
203 |
-
# X509v3 Key Usage: critical
|
204 |
-
# Digital Signature, Certificate Sign, CRL Sign
|
205 |
-
# X509v3 Basic Constraints: critical
|
206 |
-
# CA:TRUE
|
207 |
-
# X509v3 Subject Key Identifier:
|
208 |
-
# B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
|
209 |
-
# X509v3 Authority Key Identifier:
|
210 |
-
# keyid:B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
|
211 |
-
#
|
212 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
213 |
-
# 1c:1a:06:97:dc:d7:9c:9f:3c:88:66:06:08:57:21:db:21:47:
|
214 |
-
# f8:2a:67:aa:bf:18:32:76:40:10:57:c1:8a:f3:7a:d9:11:65:
|
215 |
-
# 8e:35:fa:9e:fc:45:b5:9e:d9:4c:31:4b:b8:91:e8:43:2c:8e:
|
216 |
-
# b3:78:ce:db:e3:53:79:71:d6:e5:21:94:01:da:55:87:9a:24:
|
217 |
-
# 64:f6:8a:66:cc:de:9c:37:cd:a8:34:b1:69:9b:23:c8:9e:78:
|
218 |
-
# 22:2b:70:43:e3:55:47:31:61:19:ef:58:c5:85:2f:4e:30:f6:
|
219 |
-
# a0:31:16:23:c8:e7:e2:65:16:33:cb:bf:1a:1b:a0:3d:f8:ca:
|
220 |
-
# 5e:8b:31:8b:60:08:89:2d:0c:06:5c:52:b7:c4:f9:0a:98:d1:
|
221 |
-
# 15:5f:9f:12:be:7c:36:63:38:bd:44:a4:7f:e4:26:2b:0a:c4:
|
222 |
-
# 97:69:0d:e9:8c:e2:c0:10:57:b8:c8:76:12:91:55:f2:48:69:
|
223 |
-
# d8:bc:2a:02:5b:0f:44:d4:20:31:db:f4:ba:70:26:5d:90:60:
|
224 |
-
# 9e:bc:4b:17:09:2f:b4:cb:1e:43:68:c9:07:27:c1:d2:5c:f7:
|
225 |
-
# ea:21:b9:68:12:9c:3c:9c:bf:9e:fc:80:5c:9b:63:cd:ec:47:
|
226 |
-
# aa:25:27:67:a0:37:f3:00:82:7d:54:d7:a9:f8:e9:2e:13:a3:
|
227 |
-
# 77:e8:1f:4a
|
228 |
-
-----BEGIN CERTIFICATE-----
|
229 |
-
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
|
230 |
-
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
231 |
-
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
|
232 |
-
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
|
233 |
-
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
|
234 |
-
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
|
235 |
-
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
|
236 |
-
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
|
237 |
-
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
|
238 |
-
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
|
239 |
-
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
|
240 |
-
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
|
241 |
-
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
|
242 |
-
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
|
243 |
-
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
|
244 |
-
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
|
245 |
-
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
|
246 |
-
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
|
247 |
-
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
248 |
-
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
|
249 |
-
+OkuE6N36B9K
|
250 |
-
-----END CERTIFICATE-----
|
251 |
-
# Entrust Root Certification Authority - EC1.pem
|
252 |
-
# Certificate:
|
253 |
-
# Data:
|
254 |
-
# Version: 3 (0x2)
|
255 |
-
# Serial Number:
|
256 |
-
# a6:8b:79:29:00:00:00:00:50:d0:91:f9
|
257 |
-
# Signature Algorithm: ecdsa-with-SHA384
|
258 |
-
# Issuer: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1
|
259 |
-
# Validity
|
260 |
-
# Not Before: Dec 18 15:25:36 2012 GMT
|
261 |
-
# Not After : Dec 18 15:55:36 2037 GMT
|
262 |
-
# Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1
|
263 |
-
# Subject Public Key Info:
|
264 |
-
# Public Key Algorithm: id-ecPublicKey
|
265 |
-
# Public-Key: (384 bit)
|
266 |
-
# pub:
|
267 |
-
# 04:84:13:c9:d0:ba:6d:41:7b:e2:6c:d0:eb:55:5f:
|
268 |
-
# 66:02:1a:24:f4:5b:89:69:47:e3:b8:c2:7d:f1:f2:
|
269 |
-
# 02:c5:9f:a0:f6:5b:d5:8b:06:19:86:4f:53:10:6d:
|
270 |
-
# 07:24:27:a1:a0:f8:d5:47:19:61:4c:7d:ca:93:27:
|
271 |
-
# ea:74:0c:ef:6f:96:09:fe:63:ec:70:5d:36:ad:67:
|
272 |
-
# 77:ae:c9:9d:7c:55:44:3a:a2:63:51:1f:f5:e3:62:
|
273 |
-
# d4:a9:47:07:3e:cc:20
|
274 |
-
# ASN1 OID: secp384r1
|
275 |
-
# X509v3 extensions:
|
276 |
-
# X509v3 Key Usage: critical
|
277 |
-
# Certificate Sign, CRL Sign
|
278 |
-
# X509v3 Basic Constraints: critical
|
279 |
-
# CA:TRUE
|
280 |
-
# X509v3 Subject Key Identifier:
|
281 |
-
# B7:63:E7:1A:DD:8D:E9:08:A6:55:83:A4:E0:6A:50:41:65:11:42:49
|
282 |
-
# Signature Algorithm: ecdsa-with-SHA384
|
283 |
-
# 30:64:02:30:61:79:d8:e5:42:47:df:1c:ae:53:99:17:b6:6f:
|
284 |
-
# 1c:7d:e1:bf:11:94:d1:03:88:75:e4:8d:89:a4:8a:77:46:de:
|
285 |
-
# 6d:61:ef:02:f5:fb:b5:df:cc:fe:4e:ff:fe:a9:e6:a7:02:30:
|
286 |
-
# 5b:99:d7:85:37:06:b5:7b:08:fd:eb:27:8b:4a:94:f9:e1:fa:
|
287 |
-
# a7:8e:26:08:e8:7c:92:68:6d:73:d8:6f:26:ac:21:02:b8:99:
|
288 |
-
# b7:26:41:5b:25:60:ae:d0:48:1a:ee:06
|
289 |
-
-----BEGIN CERTIFICATE-----
|
290 |
-
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
|
291 |
-
A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
|
292 |
-
d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
|
293 |
-
dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
|
294 |
-
RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
|
295 |
-
MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
|
296 |
-
VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
|
297 |
-
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
|
298 |
-
Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
|
299 |
-
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
|
300 |
-
A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
|
301 |
-
ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
|
302 |
-
Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
|
303 |
-
BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
|
304 |
-
R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
|
305 |
-
hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
|
306 |
-
-----END CERTIFICATE-----
|
307 |
-
# Entrust Root Certification Authority - G2.pem
|
308 |
-
# Certificate:
|
309 |
-
# Data:
|
310 |
-
# Version: 3 (0x2)
|
311 |
-
# Serial Number: 1246989352 (0x4a538c28)
|
312 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
313 |
-
# Issuer: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2
|
314 |
-
# Validity
|
315 |
-
# Not Before: Jul 7 17:25:54 2009 GMT
|
316 |
-
# Not After : Dec 7 17:55:54 2030 GMT
|
317 |
-
# Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2
|
318 |
-
# Subject Public Key Info:
|
319 |
-
# Public Key Algorithm: rsaEncryption
|
320 |
-
# Public-Key: (2048 bit)
|
321 |
-
# Modulus:
|
322 |
-
# 00:ba:84:b6:72:db:9e:0c:6b:e2:99:e9:30:01:a7:
|
323 |
-
# 76:ea:32:b8:95:41:1a:c9:da:61:4e:58:72:cf:fe:
|
324 |
-
# f6:82:79:bf:73:61:06:0a:a5:27:d8:b3:5f:d3:45:
|
325 |
-
# 4e:1c:72:d6:4e:32:f2:72:8a:0f:f7:83:19:d0:6a:
|
326 |
-
# 80:80:00:45:1e:b0:c7:e7:9a:bf:12:57:27:1c:a3:
|
327 |
-
# 68:2f:0a:87:bd:6a:6b:0e:5e:65:f3:1c:77:d5:d4:
|
328 |
-
# 85:8d:70:21:b4:b3:32:e7:8b:a2:d5:86:39:02:b1:
|
329 |
-
# b8:d2:47:ce:e4:c9:49:c4:3b:a7:de:fb:54:7d:57:
|
330 |
-
# be:f0:e8:6e:c2:79:b2:3a:0b:55:e2:50:98:16:32:
|
331 |
-
# 13:5c:2f:78:56:c1:c2:94:b3:f2:5a:e4:27:9a:9f:
|
332 |
-
# 24:d7:c6:ec:d0:9b:25:82:e3:cc:c2:c4:45:c5:8c:
|
333 |
-
# 97:7a:06:6b:2a:11:9f:a9:0a:6e:48:3b:6f:db:d4:
|
334 |
-
# 11:19:42:f7:8f:07:bf:f5:53:5f:9c:3e:f4:17:2c:
|
335 |
-
# e6:69:ac:4e:32:4c:62:77:ea:b7:e8:e5:bb:34:bc:
|
336 |
-
# 19:8b:ae:9c:51:e7:b7:7e:b5:53:b1:33:22:e5:6d:
|
337 |
-
# cf:70:3c:1a:fa:e2:9b:67:b6:83:f4:8d:a5:af:62:
|
338 |
-
# 4c:4d:e0:58:ac:64:34:12:03:f8:b6:8d:94:63:24:
|
339 |
-
# a4:71
|
340 |
-
# Exponent: 65537 (0x10001)
|
341 |
-
# X509v3 extensions:
|
342 |
-
# X509v3 Key Usage: critical
|
343 |
-
# Certificate Sign, CRL Sign
|
344 |
-
# X509v3 Basic Constraints: critical
|
345 |
-
# CA:TRUE
|
346 |
-
# X509v3 Subject Key Identifier:
|
347 |
-
# 6A:72:26:7A:D0:1E:EF:7D:E7:3B:69:51:D4:6C:8D:9F:90:12:66:AB
|
348 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
349 |
-
# 79:9f:1d:96:c6:b6:79:3f:22:8d:87:d3:87:03:04:60:6a:6b:
|
350 |
-
# 9a:2e:59:89:73:11:ac:43:d1:f5:13:ff:8d:39:2b:c0:f2:bd:
|
351 |
-
# 4f:70:8c:a9:2f:ea:17:c4:0b:54:9e:d4:1b:96:98:33:3c:a8:
|
352 |
-
# ad:62:a2:00:76:ab:59:69:6e:06:1d:7e:c4:b9:44:8d:98:af:
|
353 |
-
# 12:d4:61:db:0a:19:46:47:f3:eb:f7:63:c1:40:05:40:a5:d2:
|
354 |
-
# b7:f4:b5:9a:36:bf:a9:88:76:88:04:55:04:2b:9c:87:7f:1a:
|
355 |
-
# 37:3c:7e:2d:a5:1a:d8:d4:89:5e:ca:bd:ac:3d:6c:d8:6d:af:
|
356 |
-
# d5:f3:76:0f:cd:3b:88:38:22:9d:6c:93:9a:c4:3d:bf:82:1b:
|
357 |
-
# 65:3f:a6:0f:5d:aa:fc:e5:b2:15:ca:b5:ad:c6:bc:3d:d0:84:
|
358 |
-
# e8:ea:06:72:b0:4d:39:32:78:bf:3e:11:9c:0b:a4:9d:9a:21:
|
359 |
-
# f3:f0:9b:0b:30:78:db:c1:dc:87:43:fe:bc:63:9a:ca:c5:c2:
|
360 |
-
# 1c:c9:c7:8d:ff:3b:12:58:08:e6:b6:3d:ec:7a:2c:4e:fb:83:
|
361 |
-
# 96:ce:0c:3c:69:87:54:73:a4:73:c2:93:ff:51:10:ac:15:54:
|
362 |
-
# 01:d8:fc:05:b1:89:a1:7f:74:83:9a:49:d7:dc:4e:7b:8a:48:
|
363 |
-
# 6f:8b:45:f6
|
364 |
-
-----BEGIN CERTIFICATE-----
|
365 |
-
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
|
366 |
-
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
|
367 |
-
cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
|
368 |
-
IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
|
369 |
-
dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
|
370 |
-
NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
|
371 |
-
dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
|
372 |
-
dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
|
373 |
-
aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
|
374 |
-
YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
375 |
-
AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
|
376 |
-
RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
|
377 |
-
cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
|
378 |
-
wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
|
379 |
-
U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
|
380 |
-
jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
|
381 |
-
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
|
382 |
-
BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
|
383 |
-
jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
|
384 |
-
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
|
385 |
-
1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
|
386 |
-
nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
|
387 |
-
VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
|
388 |
-
-----END CERTIFICATE-----
|
389 |
-
# Entrust Root Certification Authority.pem
|
390 |
-
# Certificate:
|
391 |
-
# Data:
|
392 |
-
# Version: 3 (0x2)
|
393 |
-
# Serial Number: 1164660820 (0x456b5054)
|
394 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
395 |
-
# Issuer: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
|
396 |
-
# Validity
|
397 |
-
# Not Before: Nov 27 20:23:42 2006 GMT
|
398 |
-
# Not After : Nov 27 20:53:42 2026 GMT
|
399 |
-
# Subject: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
|
400 |
-
# Subject Public Key Info:
|
401 |
-
# Public Key Algorithm: rsaEncryption
|
402 |
-
# Public-Key: (2048 bit)
|
403 |
-
# Modulus:
|
404 |
-
# 00:b6:95:b6:43:42:fa:c6:6d:2a:6f:48:df:94:4c:
|
405 |
-
# 39:57:05:ee:c3:79:11:41:68:36:ed:ec:fe:9a:01:
|
406 |
-
# 8f:a1:38:28:fc:f7:10:46:66:2e:4d:1e:1a:b1:1a:
|
407 |
-
# 4e:c6:d1:c0:95:88:b0:c9:ff:31:8b:33:03:db:b7:
|
408 |
-
# 83:7b:3e:20:84:5e:ed:b2:56:28:a7:f8:e0:b9:40:
|
409 |
-
# 71:37:c5:cb:47:0e:97:2a:68:c0:22:95:62:15:db:
|
410 |
-
# 47:d9:f5:d0:2b:ff:82:4b:c9:ad:3e:de:4c:db:90:
|
411 |
-
# 80:50:3f:09:8a:84:00:ec:30:0a:3d:18:cd:fb:fd:
|
412 |
-
# 2a:59:9a:23:95:17:2c:45:9e:1f:6e:43:79:6d:0c:
|
413 |
-
# 5c:98:fe:48:a7:c5:23:47:5c:5e:fd:6e:e7:1e:b4:
|
414 |
-
# f6:68:45:d1:86:83:5b:a2:8a:8d:b1:e3:29:80:fe:
|
415 |
-
# 25:71:88:ad:be:bc:8f:ac:52:96:4b:aa:51:8d:e4:
|
416 |
-
# 13:31:19:e8:4e:4d:9f:db:ac:b3:6a:d5:bc:39:54:
|
417 |
-
# 71:ca:7a:7a:7f:90:dd:7d:1d:80:d9:81:bb:59:26:
|
418 |
-
# c2:11:fe:e6:93:e2:f7:80:e4:65:fb:34:37:0e:29:
|
419 |
-
# 80:70:4d:af:38:86:2e:9e:7f:57:af:9e:17:ae:eb:
|
420 |
-
# 1c:cb:28:21:5f:b6:1c:d8:e7:a2:04:22:f9:d3:da:
|
421 |
-
# d8:cb
|
422 |
-
# Exponent: 65537 (0x10001)
|
423 |
-
# X509v3 extensions:
|
424 |
-
# X509v3 Key Usage: critical
|
425 |
-
# Certificate Sign, CRL Sign
|
426 |
-
# X509v3 Basic Constraints: critical
|
427 |
-
# CA:TRUE
|
428 |
-
# X509v3 Private Key Usage Period:
|
429 |
-
# Not Before: Nov 27 20:23:42 2006 GMT, Not After: Nov 27 20:53:42 2026 GMT
|
430 |
-
# X509v3 Authority Key Identifier:
|
431 |
-
# keyid:68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
|
432 |
-
#
|
433 |
-
# X509v3 Subject Key Identifier:
|
434 |
-
# 68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
|
435 |
-
# 1.2.840.113533.7.65.0:
|
436 |
-
# 0...V7.1:4.0....
|
437 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
438 |
-
# 93:d4:30:b0:d7:03:20:2a:d0:f9:63:e8:91:0c:05:20:a9:5f:
|
439 |
-
# 19:ca:7b:72:4e:d4:b1:db:d0:96:fb:54:5a:19:2c:0c:08:f7:
|
440 |
-
# b2:bc:85:a8:9d:7f:6d:3b:52:b3:2a:db:e7:d4:84:8c:63:f6:
|
441 |
-
# 0f:cb:26:01:91:50:6c:f4:5f:14:e2:93:74:c0:13:9e:30:3a:
|
442 |
-
# 50:e3:b4:60:c5:1c:f0:22:44:8d:71:47:ac:c8:1a:c9:e9:9b:
|
443 |
-
# 9a:00:60:13:ff:70:7e:5f:11:4d:49:1b:b3:15:52:7b:c9:54:
|
444 |
-
# da:bf:9d:95:af:6b:9a:d8:9e:e9:f1:e4:43:8d:e2:11:44:3a:
|
445 |
-
# bf:af:bd:83:42:73:52:8b:aa:bb:a7:29:cf:f5:64:1c:0a:4d:
|
446 |
-
# d1:bc:aa:ac:9f:2a:d0:ff:7f:7f:da:7d:ea:b1:ed:30:25:c1:
|
447 |
-
# 84:da:34:d2:5b:78:83:56:ec:9c:36:c3:26:e2:11:f6:67:49:
|
448 |
-
# 1d:92:ab:8c:fb:eb:ff:7a:ee:85:4a:a7:50:80:f0:a7:5c:4a:
|
449 |
-
# 94:2e:5f:05:99:3c:52:41:e0:cd:b4:63:cf:01:43:ba:9c:83:
|
450 |
-
# dc:8f:60:3b:f3:5a:b4:b4:7b:ae:da:0b:90:38:75:ef:81:1d:
|
451 |
-
# 66:d2:f7:57:70:36:b3:bf:fc:28:af:71:25:85:5b:13:fe:1e:
|
452 |
-
# 7f:5a:b4:3c
|
453 |
-
-----BEGIN CERTIFICATE-----
|
454 |
-
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
|
455 |
-
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
|
456 |
-
Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
|
457 |
-
KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
|
458 |
-
cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
|
459 |
-
NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
|
460 |
-
NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
|
461 |
-
ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
|
462 |
-
BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
|
463 |
-
KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
|
464 |
-
Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
|
465 |
-
4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
|
466 |
-
KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
|
467 |
-
rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
|
468 |
-
94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
|
469 |
-
sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
|
470 |
-
gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
|
471 |
-
kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
|
472 |
-
vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
473 |
-
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
|
474 |
-
O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
|
475 |
-
AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
|
476 |
-
9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
|
477 |
-
eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
|
478 |
-
0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
479 |
-
-----END CERTIFICATE-----
|
480 |
-
# Entrust.net Certification Authority (2048).pem
|
481 |
-
# Certificate:
|
482 |
-
# Data:
|
483 |
-
# Version: 3 (0x2)
|
484 |
-
# Serial Number: 946069240 (0x3863def8)
|
485 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
486 |
-
# Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
|
487 |
-
# Validity
|
488 |
-
# Not Before: Dec 24 17:50:51 1999 GMT
|
489 |
-
# Not After : Jul 24 14:15:12 2029 GMT
|
490 |
-
# Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
|
491 |
-
# Subject Public Key Info:
|
492 |
-
# Public Key Algorithm: rsaEncryption
|
493 |
-
# Public-Key: (2048 bit)
|
494 |
-
# Modulus:
|
495 |
-
# 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64:
|
496 |
-
# 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7:
|
497 |
-
# 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76:
|
498 |
-
# 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf:
|
499 |
-
# e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1:
|
500 |
-
# 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29:
|
501 |
-
# b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64:
|
502 |
-
# ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c:
|
503 |
-
# e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89:
|
504 |
-
# a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90:
|
505 |
-
# 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2:
|
506 |
-
# cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a:
|
507 |
-
# fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55:
|
508 |
-
# 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86:
|
509 |
-
# 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26:
|
510 |
-
# 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e:
|
511 |
-
# 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0:
|
512 |
-
# 07:e1
|
513 |
-
# Exponent: 65537 (0x10001)
|
514 |
-
# X509v3 extensions:
|
515 |
-
# X509v3 Key Usage: critical
|
516 |
-
# Certificate Sign, CRL Sign
|
517 |
-
# X509v3 Basic Constraints: critical
|
518 |
-
# CA:TRUE
|
519 |
-
# X509v3 Subject Key Identifier:
|
520 |
-
# 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
|
521 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
522 |
-
# 3b:9b:8f:56:9b:30:e7:53:99:7c:7a:79:a7:4d:97:d7:19:95:
|
523 |
-
# 90:fb:06:1f:ca:33:7c:46:63:8f:96:66:24:fa:40:1b:21:27:
|
524 |
-
# ca:e6:72:73:f2:4f:fe:31:99:fd:c8:0c:4c:68:53:c6:80:82:
|
525 |
-
# 13:98:fa:b6:ad:da:5d:3d:f1:ce:6e:f6:15:11:94:82:0c:ee:
|
526 |
-
# 3f:95:af:11:ab:0f:d7:2f:de:1f:03:8f:57:2c:1e:c9:bb:9a:
|
527 |
-
# 1a:44:95:eb:18:4f:a6:1f:cd:7d:57:10:2f:9b:04:09:5a:84:
|
528 |
-
# b5:6e:d8:1d:3a:e1:d6:9e:d1:6c:79:5e:79:1c:14:c5:e3:d0:
|
529 |
-
# 4c:93:3b:65:3c:ed:df:3d:be:a6:e5:95:1a:c3:b5:19:c3:bd:
|
530 |
-
# 5e:5b:bb:ff:23:ef:68:19:cb:12:93:27:5c:03:2d:6f:30:d0:
|
531 |
-
# 1e:b6:1a:ac:de:5a:f7:d1:aa:a8:27:a6:fe:79:81:c4:79:99:
|
532 |
-
# 33:57:ba:12:b0:a9:e0:42:6c:93:ca:56:de:fe:6d:84:0b:08:
|
533 |
-
# 8b:7e:8d:ea:d7:98:21:c6:f3:e7:3c:79:2f:5e:9c:d1:4c:15:
|
534 |
-
# 8d:e1:ec:22:37:cc:9a:43:0b:97:dc:80:90:8d:b3:67:9b:6f:
|
535 |
-
# 48:08:15:56:cf:bf:f1:2b:7c:5e:9a:76:e9:59:90:c5:7c:83:
|
536 |
-
# 35:11:65:51
|
537 |
-
-----BEGIN CERTIFICATE-----
|
538 |
-
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
|
539 |
-
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
|
540 |
-
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
|
541 |
-
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
|
542 |
-
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
|
543 |
-
MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
|
544 |
-
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
|
545 |
-
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
|
546 |
-
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
|
547 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
|
548 |
-
K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
|
549 |
-
sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
|
550 |
-
MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
|
551 |
-
XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
|
552 |
-
HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
|
553 |
-
4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
|
554 |
-
HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
|
555 |
-
j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
|
556 |
-
U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
|
557 |
-
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
|
558 |
-
u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
|
559 |
-
bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
|
560 |
-
fF6adulZkMV8gzURZVE=
|
561 |
-
-----END CERTIFICATE-----
|
562 |
-
# GeoTrust Global CA.pem
|
563 |
-
# Certificate:
|
564 |
-
# Data:
|
565 |
-
# Version: 3 (0x2)
|
566 |
-
# Serial Number: 144470 (0x23456)
|
567 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
568 |
-
# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
|
569 |
-
# Validity
|
570 |
-
# Not Before: May 21 04:00:00 2002 GMT
|
571 |
-
# Not After : May 21 04:00:00 2022 GMT
|
572 |
-
# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
|
573 |
-
# Subject Public Key Info:
|
574 |
-
# Public Key Algorithm: rsaEncryption
|
575 |
-
# Public-Key: (2048 bit)
|
576 |
-
# Modulus:
|
577 |
-
# 00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df:
|
578 |
-
# 3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8:
|
579 |
-
# 43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29:
|
580 |
-
# bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4:
|
581 |
-
# 60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3:
|
582 |
-
# ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92:
|
583 |
-
# 2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d:
|
584 |
-
# 80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14:
|
585 |
-
# 15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd:
|
586 |
-
# d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6:
|
587 |
-
# d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5:
|
588 |
-
# 5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39:
|
589 |
-
# 19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05:
|
590 |
-
# 9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2:
|
591 |
-
# fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32:
|
592 |
-
# eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07:
|
593 |
-
# 36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b:
|
594 |
-
# e4:f9
|
595 |
-
# Exponent: 65537 (0x10001)
|
596 |
-
# X509v3 extensions:
|
597 |
-
# X509v3 Basic Constraints: critical
|
598 |
-
# CA:TRUE
|
599 |
-
# X509v3 Subject Key Identifier:
|
600 |
-
# C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
601 |
-
# X509v3 Authority Key Identifier:
|
602 |
-
# keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
603 |
-
#
|
604 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
605 |
-
# 35:e3:29:6a:e5:2f:5d:54:8e:29:50:94:9f:99:1a:14:e4:8f:
|
606 |
-
# 78:2a:62:94:a2:27:67:9e:d0:cf:1a:5e:47:e9:c1:b2:a4:cf:
|
607 |
-
# dd:41:1a:05:4e:9b:4b:ee:4a:6f:55:52:b3:24:a1:37:0a:eb:
|
608 |
-
# 64:76:2a:2e:2c:f3:fd:3b:75:90:bf:fa:71:d8:c7:3d:37:d2:
|
609 |
-
# b5:05:95:62:b9:a6:de:89:3d:36:7b:38:77:48:97:ac:a6:20:
|
610 |
-
# 8f:2e:a6:c9:0c:c2:b2:99:45:00:c7:ce:11:51:22:22:e0:a5:
|
611 |
-
# ea:b6:15:48:09:64:ea:5e:4f:74:f7:05:3e:c7:8a:52:0c:db:
|
612 |
-
# 15:b4:bd:6d:9b:e5:c6:b1:54:68:a9:e3:69:90:b6:9a:a5:0f:
|
613 |
-
# b8:b9:3f:20:7d:ae:4a:b5:b8:9c:e4:1d:b6:ab:e6:94:a5:c1:
|
614 |
-
# c7:83:ad:db:f5:27:87:0e:04:6c:d5:ff:dd:a0:5d:ed:87:52:
|
615 |
-
# b7:2b:15:02:ae:39:a6:6a:74:e9:da:c4:e7:bc:4d:34:1e:a9:
|
616 |
-
# 5c:4d:33:5f:92:09:2f:88:66:5d:77:97:c7:1d:76:13:a9:d5:
|
617 |
-
# e5:f1:16:09:11:35:d5:ac:db:24:71:70:2c:98:56:0b:d9:17:
|
618 |
-
# b4:d1:e3:51:2b:5e:75:e8:d5:d0:dc:4f:34:ed:c2:05:66:80:
|
619 |
-
# a1:cb:e6:33
|
620 |
-
-----BEGIN CERTIFICATE-----
|
621 |
-
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
|
622 |
-
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
623 |
-
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
|
624 |
-
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
|
625 |
-
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
|
626 |
-
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
|
627 |
-
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
|
628 |
-
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
|
629 |
-
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
|
630 |
-
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
|
631 |
-
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
|
632 |
-
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
|
633 |
-
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
|
634 |
-
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
|
635 |
-
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
|
636 |
-
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
|
637 |
-
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
|
638 |
-
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
|
639 |
-
-----END CERTIFICATE-----
|
640 |
-
# GeoTrust Primary Certification Authority - G2.pem
|
641 |
-
# Certificate:
|
642 |
-
# Data:
|
643 |
-
# Version: 3 (0x2)
|
644 |
-
# Serial Number:
|
645 |
-
# 3c:b2:f4:48:0a:00:e2:fe:eb:24:3b:5e:60:3e:c3:6b
|
646 |
-
# Signature Algorithm: ecdsa-with-SHA384
|
647 |
-
# Issuer: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
|
648 |
-
# Validity
|
649 |
-
# Not Before: Nov 5 00:00:00 2007 GMT
|
650 |
-
# Not After : Jan 18 23:59:59 2038 GMT
|
651 |
-
# Subject: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
|
652 |
-
# Subject Public Key Info:
|
653 |
-
# Public Key Algorithm: id-ecPublicKey
|
654 |
-
# Public-Key: (384 bit)
|
655 |
-
# pub:
|
656 |
-
# 04:15:b1:e8:fd:03:15:43:e5:ac:eb:87:37:11:62:
|
657 |
-
# ef:d2:83:36:52:7d:45:57:0b:4a:8d:7b:54:3b:3a:
|
658 |
-
# 6e:5f:15:02:c0:50:a6:cf:25:2f:7d:ca:48:b8:c7:
|
659 |
-
# 50:63:1c:2a:21:08:7c:9a:36:d8:0b:fe:d1:26:c5:
|
660 |
-
# 58:31:30:28:25:f3:5d:5d:a3:b8:b6:a5:b4:92:ed:
|
661 |
-
# 6c:2c:9f:eb:dd:43:89:a2:3c:4b:48:91:1d:50:ec:
|
662 |
-
# 26:df:d6:60:2e:bd:21
|
663 |
-
# ASN1 OID: secp384r1
|
664 |
-
# X509v3 extensions:
|
665 |
-
# X509v3 Basic Constraints: critical
|
666 |
-
# CA:TRUE
|
667 |
-
# X509v3 Key Usage: critical
|
668 |
-
# Certificate Sign, CRL Sign
|
669 |
-
# X509v3 Subject Key Identifier:
|
670 |
-
# 15:5F:35:57:51:55:FB:25:B2:AD:03:69:FC:01:A3:FA:BE:11:55:D5
|
671 |
-
# Signature Algorithm: ecdsa-with-SHA384
|
672 |
-
# 30:64:02:30:64:96:59:a6:e8:09:de:8b:ba:fa:5a:88:88:f0:
|
673 |
-
# 1f:91:d3:46:a8:f2:4a:4c:02:63:fb:6c:5f:38:db:2e:41:93:
|
674 |
-
# a9:0e:e6:9d:dc:31:1c:b2:a0:a7:18:1c:79:e1:c7:36:02:30:
|
675 |
-
# 3a:56:af:9a:74:6c:f6:fb:83:e0:33:d3:08:5f:a1:9c:c2:5b:
|
676 |
-
# 9f:46:d6:b6:cb:91:06:63:a2:06:e7:33:ac:3e:a8:81:12:d0:
|
677 |
-
# cb:ba:d0:92:0b:b6:9e:96:aa:04:0f:8a
|
678 |
-
-----BEGIN CERTIFICATE-----
|
679 |
-
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
|
680 |
-
MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
|
681 |
-
KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
|
682 |
-
MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
683 |
-
eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
|
684 |
-
BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
|
685 |
-
NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
|
686 |
-
BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
|
687 |
-
MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
|
688 |
-
So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
|
689 |
-
tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
|
690 |
-
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
|
691 |
-
CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
|
692 |
-
qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
|
693 |
-
rD6ogRLQy7rQkgu2npaqBA+K
|
694 |
-
-----END CERTIFICATE-----
|
695 |
-
# GeoTrust Primary Certification Authority - G3.pem
|
696 |
-
# Certificate:
|
697 |
-
# Data:
|
698 |
-
# Version: 3 (0x2)
|
699 |
-
# Serial Number:
|
700 |
-
# 15:ac:6e:94:19:b2:79:4b:41:f6:27:a9:c3:18:0f:1f
|
701 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
702 |
-
# Issuer: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
|
703 |
-
# Validity
|
704 |
-
# Not Before: Apr 2 00:00:00 2008 GMT
|
705 |
-
# Not After : Dec 1 23:59:59 2037 GMT
|
706 |
-
# Subject: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
|
707 |
-
# Subject Public Key Info:
|
708 |
-
# Public Key Algorithm: rsaEncryption
|
709 |
-
# Public-Key: (2048 bit)
|
710 |
-
# Modulus:
|
711 |
-
# 00:dc:e2:5e:62:58:1d:33:57:39:32:33:fa:eb:cb:
|
712 |
-
# 87:8c:a7:d4:4a:dd:06:88:ea:64:8e:31:98:a5:38:
|
713 |
-
# 90:1e:98:cf:2e:63:2b:f0:46:bc:44:b2:89:a1:c0:
|
714 |
-
# 28:0c:49:70:21:95:9f:64:c0:a6:93:12:02:65:26:
|
715 |
-
# 86:c6:a5:89:f0:fa:d7:84:a0:70:af:4f:1a:97:3f:
|
716 |
-
# 06:44:d5:c9:eb:72:10:7d:e4:31:28:fb:1c:61:e6:
|
717 |
-
# 28:07:44:73:92:22:69:a7:03:88:6c:9d:63:c8:52:
|
718 |
-
# da:98:27:e7:08:4c:70:3e:b4:c9:12:c1:c5:67:83:
|
719 |
-
# 5d:33:f3:03:11:ec:6a:d0:53:e2:d1:ba:36:60:94:
|
720 |
-
# 80:bb:61:63:6c:5b:17:7e:df:40:94:1e:ab:0d:c2:
|
721 |
-
# 21:28:70:88:ff:d6:26:6c:6c:60:04:25:4e:55:7e:
|
722 |
-
# 7d:ef:bf:94:48:de:b7:1d:dd:70:8d:05:5f:88:a5:
|
723 |
-
# 9b:f2:c2:ee:ea:d1:40:41:6d:62:38:1d:56:06:c5:
|
724 |
-
# 03:47:51:20:19:fc:7b:10:0b:0e:62:ae:76:55:bf:
|
725 |
-
# 5f:77:be:3e:49:01:53:3d:98:25:03:76:24:5a:1d:
|
726 |
-
# b4:db:89:ea:79:e5:b6:b3:3b:3f:ba:4c:28:41:7f:
|
727 |
-
# 06:ac:6a:8e:c1:d0:f6:05:1d:7d:e6:42:86:e3:a5:
|
728 |
-
# d5:47
|
729 |
-
# Exponent: 65537 (0x10001)
|
730 |
-
# X509v3 extensions:
|
731 |
-
# X509v3 Basic Constraints: critical
|
732 |
-
# CA:TRUE
|
733 |
-
# X509v3 Key Usage: critical
|
734 |
-
# Certificate Sign, CRL Sign
|
735 |
-
# X509v3 Subject Key Identifier:
|
736 |
-
# C4:79:CA:8E:A1:4E:03:1D:1C:DC:6B:DB:31:5B:94:3E:3F:30:7F:2D
|
737 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
738 |
-
# 2d:c5:13:cf:56:80:7b:7a:78:bd:9f:ae:2c:99:e7:ef:da:df:
|
739 |
-
# 94:5e:09:69:a7:e7:6e:68:8c:bd:72:be:47:a9:0e:97:12:b8:
|
740 |
-
# 4a:f1:64:d3:39:df:25:34:d4:c1:cd:4e:81:f0:0f:04:c4:24:
|
741 |
-
# b3:34:96:c6:a6:aa:30:df:68:61:73:d7:f9:8e:85:89:ef:0e:
|
742 |
-
# 5e:95:28:4a:2a:27:8f:10:8e:2e:7c:86:c4:02:9e:da:0c:77:
|
743 |
-
# 65:0e:44:0d:92:fd:fd:b3:16:36:fa:11:0d:1d:8c:0e:07:89:
|
744 |
-
# 6a:29:56:f7:72:f4:dd:15:9c:77:35:66:57:ab:13:53:d8:8e:
|
745 |
-
# c1:40:c5:d7:13:16:5a:72:c7:b7:69:01:c4:7a:b1:83:01:68:
|
746 |
-
# 7d:8d:41:a1:94:18:c1:25:5c:fc:f0:fe:83:02:87:7c:0d:0d:
|
747 |
-
# cf:2e:08:5c:4a:40:0d:3e:ec:81:61:e6:24:db:ca:e0:0e:2d:
|
748 |
-
# 07:b2:3e:56:dc:8d:f5:41:85:07:48:9b:0c:0b:cb:49:3f:7d:
|
749 |
-
# ec:b7:fd:cb:8d:67:89:1a:ab:ed:bb:1e:a3:00:08:08:17:2a:
|
750 |
-
# 82:5c:31:5d:46:8a:2d:0f:86:9b:74:d9:45:fb:d4:40:b1:7a:
|
751 |
-
# aa:68:2d:86:b2:99:22:e1:c1:2b:c7:9c:f8:f3:5f:a8:82:12:
|
752 |
-
# eb:19:11:2d
|
753 |
-
-----BEGIN CERTIFICATE-----
|
754 |
-
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
|
755 |
-
mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
|
756 |
-
MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
757 |
-
eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
758 |
-
cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
|
759 |
-
BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
760 |
-
MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
|
761 |
-
BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
762 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
|
763 |
-
+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
|
764 |
-
hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
|
765 |
-
5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
|
766 |
-
JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
|
767 |
-
DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
|
768 |
-
huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
|
769 |
-
HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
|
770 |
-
AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
|
771 |
-
zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
|
772 |
-
kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
773 |
-
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
|
774 |
-
SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
|
775 |
-
spki4cErx5z481+oghLrGREt
|
776 |
-
-----END CERTIFICATE-----
|
777 |
-
# GeoTrust Primary Certification Authority.pem
|
778 |
-
# Certificate:
|
779 |
-
# Data:
|
780 |
-
# Version: 3 (0x2)
|
781 |
-
# Serial Number:
|
782 |
-
# 18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1
|
783 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
784 |
-
# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
|
785 |
-
# Validity
|
786 |
-
# Not Before: Nov 27 00:00:00 2006 GMT
|
787 |
-
# Not After : Jul 16 23:59:59 2036 GMT
|
788 |
-
# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
|
789 |
-
# Subject Public Key Info:
|
790 |
-
# Public Key Algorithm: rsaEncryption
|
791 |
-
# Public-Key: (2048 bit)
|
792 |
-
# Modulus:
|
793 |
-
# 00:be:b8:15:7b:ff:d4:7c:7d:67:ad:83:64:7b:c8:
|
794 |
-
# 42:53:2d:df:f6:84:08:20:61:d6:01:59:6a:9c:44:
|
795 |
-
# 11:af:ef:76:fd:95:7e:ce:61:30:bb:7a:83:5f:02:
|
796 |
-
# bd:01:66:ca:ee:15:8d:6f:a1:30:9c:bd:a1:85:9e:
|
797 |
-
# 94:3a:f3:56:88:00:31:cf:d8:ee:6a:96:02:d9:ed:
|
798 |
-
# 03:8c:fb:75:6d:e7:ea:b8:55:16:05:16:9a:f4:e0:
|
799 |
-
# 5e:b1:88:c0:64:85:5c:15:4d:88:c7:b7:ba:e0:75:
|
800 |
-
# e9:ad:05:3d:9d:c7:89:48:e0:bb:28:c8:03:e1:30:
|
801 |
-
# 93:64:5e:52:c0:59:70:22:35:57:88:8a:f1:95:0a:
|
802 |
-
# 83:d7:bc:31:73:01:34:ed:ef:46:71:e0:6b:02:a8:
|
803 |
-
# 35:72:6b:97:9b:66:e0:cb:1c:79:5f:d8:1a:04:68:
|
804 |
-
# 1e:47:02:e6:9d:60:e2:36:97:01:df:ce:35:92:df:
|
805 |
-
# be:67:c7:6d:77:59:3b:8f:9d:d6:90:15:94:bc:42:
|
806 |
-
# 34:10:c1:39:f9:b1:27:3e:7e:d6:8a:75:c5:b2:af:
|
807 |
-
# 96:d3:a2:de:9b:e4:98:be:7d:e1:e9:81:ad:b6:6f:
|
808 |
-
# fc:d7:0e:da:e0:34:b0:0d:1a:77:e7:e3:08:98:ef:
|
809 |
-
# 58:fa:9c:84:b7:36:af:c2:df:ac:d2:f4:10:06:70:
|
810 |
-
# 71:35
|
811 |
-
# Exponent: 65537 (0x10001)
|
812 |
-
# X509v3 extensions:
|
813 |
-
# X509v3 Basic Constraints: critical
|
814 |
-
# CA:TRUE
|
815 |
-
# X509v3 Key Usage: critical
|
816 |
-
# Certificate Sign, CRL Sign
|
817 |
-
# X509v3 Subject Key Identifier:
|
818 |
-
# 2C:D5:50:41:97:15:8B:F0:8F:36:61:5B:4A:FB:6B:D9:99:C9:33:92
|
819 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
820 |
-
# 5a:70:7f:2c:dd:b7:34:4f:f5:86:51:a9:26:be:4b:b8:aa:f1:
|
821 |
-
# 71:0d:dc:61:c7:a0:ea:34:1e:7a:77:0f:04:35:e8:27:8f:6c:
|
822 |
-
# 90:bf:91:16:24:46:3e:4a:4e:ce:2b:16:d5:0b:52:1d:fc:1f:
|
823 |
-
# 67:a2:02:45:31:4f:ce:f3:fa:03:a7:79:9d:53:6a:d9:da:63:
|
824 |
-
# 3a:f8:80:d7:d3:99:e1:a5:e1:be:d4:55:71:98:35:3a:be:93:
|
825 |
-
# ea:ae:ad:42:b2:90:6f:e0:fc:21:4d:35:63:33:89:49:d6:9b:
|
826 |
-
# 4e:ca:c7:e7:4e:09:00:f7:da:c7:ef:99:62:99:77:b6:95:22:
|
827 |
-
# 5e:8a:a0:ab:f4:b8:78:98:ca:38:19:99:c9:72:9e:78:cd:4b:
|
828 |
-
# ac:af:19:a0:73:12:2d:fc:c2:41:ba:81:91:da:16:5a:31:b7:
|
829 |
-
# f9:b4:71:80:12:48:99:72:73:5a:59:53:c1:63:52:33:ed:a7:
|
830 |
-
# c9:d2:39:02:70:fa:e0:b1:42:66:29:aa:9b:51:ed:30:54:22:
|
831 |
-
# 14:5f:d9:ab:1d:c1:e4:94:f0:f8:f5:2b:f7:ea:ca:78:46:d6:
|
832 |
-
# b8:91:fd:a6:0d:2b:1a:14:01:3e:80:f0:42:a0:95:07:5e:6d:
|
833 |
-
# cd:cc:4b:a4:45:8d:ab:12:e8:b3:de:5a:e5:a0:7c:e8:0f:22:
|
834 |
-
# 1d:5a:e9:59
|
835 |
-
-----BEGIN CERTIFICATE-----
|
836 |
-
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
|
837 |
-
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
|
838 |
-
R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
|
839 |
-
MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
840 |
-
Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
|
841 |
-
ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
842 |
-
AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
|
843 |
-
AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
|
844 |
-
ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
|
845 |
-
7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
|
846 |
-
kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
|
847 |
-
mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
|
848 |
-
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
|
849 |
-
KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
|
850 |
-
6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
|
851 |
-
4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
|
852 |
-
oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
|
853 |
-
UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
|
854 |
-
AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
855 |
-
-----END CERTIFICATE-----
|
856 |
-
# Go Daddy Class 2 Certification Authority.pem
|
857 |
-
# Certificate:
|
858 |
-
# Data:
|
859 |
-
# Version: 3 (0x2)
|
860 |
-
# Serial Number: 0 (0x0)
|
861 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
862 |
-
# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
|
863 |
-
# Validity
|
864 |
-
# Not Before: Jun 29 17:06:20 2004 GMT
|
865 |
-
# Not After : Jun 29 17:06:20 2034 GMT
|
866 |
-
# Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
|
867 |
-
# Subject Public Key Info:
|
868 |
-
# Public Key Algorithm: rsaEncryption
|
869 |
-
# Public-Key: (2048 bit)
|
870 |
-
# Modulus:
|
871 |
-
# 00:de:9d:d7:ea:57:18:49:a1:5b:eb:d7:5f:48:86:
|
872 |
-
# ea:be:dd:ff:e4:ef:67:1c:f4:65:68:b3:57:71:a0:
|
873 |
-
# 5e:77:bb:ed:9b:49:e9:70:80:3d:56:18:63:08:6f:
|
874 |
-
# da:f2:cc:d0:3f:7f:02:54:22:54:10:d8:b2:81:d4:
|
875 |
-
# c0:75:3d:4b:7f:c7:77:c3:3e:78:ab:1a:03:b5:20:
|
876 |
-
# 6b:2f:6a:2b:b1:c5:88:7e:c4:bb:1e:b0:c1:d8:45:
|
877 |
-
# 27:6f:aa:37:58:f7:87:26:d7:d8:2d:f6:a9:17:b7:
|
878 |
-
# 1f:72:36:4e:a6:17:3f:65:98:92:db:2a:6e:5d:a2:
|
879 |
-
# fe:88:e0:0b:de:7f:e5:8d:15:e1:eb:cb:3a:d5:e2:
|
880 |
-
# 12:a2:13:2d:d8:8e:af:5f:12:3d:a0:08:05:08:b6:
|
881 |
-
# 5c:a5:65:38:04:45:99:1e:a3:60:60:74:c5:41:a5:
|
882 |
-
# 72:62:1b:62:c5:1f:6f:5f:1a:42:be:02:51:65:a8:
|
883 |
-
# ae:23:18:6a:fc:78:03:a9:4d:7f:80:c3:fa:ab:5a:
|
884 |
-
# fc:a1:40:a4:ca:19:16:fe:b2:c8:ef:5e:73:0d:ee:
|
885 |
-
# 77:bd:9a:f6:79:98:bc:b1:07:67:a2:15:0d:dd:a0:
|
886 |
-
# 58:c6:44:7b:0a:3e:62:28:5f:ba:41:07:53:58:cf:
|
887 |
-
# 11:7e:38:74:c5:f8:ff:b5:69:90:8f:84:74:ea:97:
|
888 |
-
# 1b:af
|
889 |
-
# Exponent: 3 (0x3)
|
890 |
-
# X509v3 extensions:
|
891 |
-
# X509v3 Subject Key Identifier:
|
892 |
-
# D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
|
893 |
-
# X509v3 Authority Key Identifier:
|
894 |
-
# keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
|
895 |
-
# DirName:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
|
896 |
-
# serial:00
|
897 |
-
#
|
898 |
-
# X509v3 Basic Constraints:
|
899 |
-
# CA:TRUE
|
900 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
901 |
-
# 32:4b:f3:b2:ca:3e:91:fc:12:c6:a1:07:8c:8e:77:a0:33:06:
|
902 |
-
# 14:5c:90:1e:18:f7:08:a6:3d:0a:19:f9:87:80:11:6e:69:e4:
|
903 |
-
# 96:17:30:ff:34:91:63:72:38:ee:cc:1c:01:a3:1d:94:28:a4:
|
904 |
-
# 31:f6:7a:c4:54:d7:f6:e5:31:58:03:a2:cc:ce:62:db:94:45:
|
905 |
-
# 73:b5:bf:45:c9:24:b5:d5:82:02:ad:23:79:69:8d:b8:b6:4d:
|
906 |
-
# ce:cf:4c:ca:33:23:e8:1c:88:aa:9d:8b:41:6e:16:c9:20:e5:
|
907 |
-
# 89:9e:cd:3b:da:70:f7:7e:99:26:20:14:54:25:ab:6e:73:85:
|
908 |
-
# e6:9b:21:9d:0a:6c:82:0e:a8:f8:c2:0c:fa:10:1e:6c:96:ef:
|
909 |
-
# 87:0d:c4:0f:61:8b:ad:ee:83:2b:95:f8:8e:92:84:72:39:eb:
|
910 |
-
# 20:ea:83:ed:83:cd:97:6e:08:bc:eb:4e:26:b6:73:2b:e4:d3:
|
911 |
-
# f6:4c:fe:26:71:e2:61:11:74:4a:ff:57:1a:87:0f:75:48:2e:
|
912 |
-
# cf:51:69:17:a0:02:12:61:95:d5:d1:40:b2:10:4c:ee:c4:ac:
|
913 |
-
# 10:43:a6:a5:9e:0a:d5:95:62:9a:0d:cf:88:82:c5:32:0c:e4:
|
914 |
-
# 2b:9f:45:e6:0d:9f:28:9c:b1:b9:2a:5a:57:ad:37:0f:af:1d:
|
915 |
-
# 7f:db:bd:9f
|
916 |
-
-----BEGIN CERTIFICATE-----
|
917 |
-
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
|
918 |
-
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
|
919 |
-
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
|
920 |
-
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
|
921 |
-
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
|
922 |
-
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
|
923 |
-
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
|
924 |
-
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
|
925 |
-
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
|
926 |
-
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
|
927 |
-
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
|
928 |
-
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
|
929 |
-
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
|
930 |
-
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
|
931 |
-
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
|
932 |
-
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
933 |
-
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
|
934 |
-
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
|
935 |
-
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
936 |
-
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
|
937 |
-
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
|
938 |
-
ReYNnyicsbkqWletNw+vHX/bvZ8=
|
939 |
-
-----END CERTIFICATE-----
|
940 |
-
# Go Daddy Root Certificate Authority - G2.pem
|
941 |
-
# Certificate:
|
942 |
-
# Data:
|
943 |
-
# Version: 3 (0x2)
|
944 |
-
# Serial Number: 0 (0x0)
|
945 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
946 |
-
# Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
|
947 |
-
# Validity
|
948 |
-
# Not Before: Sep 1 00:00:00 2009 GMT
|
949 |
-
# Not After : Dec 31 23:59:59 2037 GMT
|
950 |
-
# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
|
951 |
-
# Subject Public Key Info:
|
952 |
-
# Public Key Algorithm: rsaEncryption
|
953 |
-
# Public-Key: (2048 bit)
|
954 |
-
# Modulus:
|
955 |
-
# 00:bf:71:62:08:f1:fa:59:34:f7:1b:c9:18:a3:f7:
|
956 |
-
# 80:49:58:e9:22:83:13:a6:c5:20:43:01:3b:84:f1:
|
957 |
-
# e6:85:49:9f:27:ea:f6:84:1b:4e:a0:b4:db:70:98:
|
958 |
-
# c7:32:01:b1:05:3e:07:4e:ee:f4:fa:4f:2f:59:30:
|
959 |
-
# 22:e7:ab:19:56:6b:e2:80:07:fc:f3:16:75:80:39:
|
960 |
-
# 51:7b:e5:f9:35:b6:74:4e:a9:8d:82:13:e4:b6:3f:
|
961 |
-
# a9:03:83:fa:a2:be:8a:15:6a:7f:de:0b:c3:b6:19:
|
962 |
-
# 14:05:ca:ea:c3:a8:04:94:3b:46:7c:32:0d:f3:00:
|
963 |
-
# 66:22:c8:8d:69:6d:36:8c:11:18:b7:d3:b2:1c:60:
|
964 |
-
# b4:38:fa:02:8c:ce:d3:dd:46:07:de:0a:3e:eb:5d:
|
965 |
-
# 7c:c8:7c:fb:b0:2b:53:a4:92:62:69:51:25:05:61:
|
966 |
-
# 1a:44:81:8c:2c:a9:43:96:23:df:ac:3a:81:9a:0e:
|
967 |
-
# 29:c5:1c:a9:e9:5d:1e:b6:9e:9e:30:0a:39:ce:f1:
|
968 |
-
# 88:80:fb:4b:5d:cc:32:ec:85:62:43:25:34:02:56:
|
969 |
-
# 27:01:91:b4:3b:70:2a:3f:6e:b1:e8:9c:88:01:7d:
|
970 |
-
# 9f:d4:f9:db:53:6d:60:9d:bf:2c:e7:58:ab:b8:5f:
|
971 |
-
# 46:fc:ce:c4:1b:03:3c:09:eb:49:31:5c:69:46:b3:
|
972 |
-
# e0:47
|
973 |
-
# Exponent: 65537 (0x10001)
|
974 |
-
# X509v3 extensions:
|
975 |
-
# X509v3 Basic Constraints: critical
|
976 |
-
# CA:TRUE
|
977 |
-
# X509v3 Key Usage: critical
|
978 |
-
# Certificate Sign, CRL Sign
|
979 |
-
# X509v3 Subject Key Identifier:
|
980 |
-
# 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
|
981 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
982 |
-
# 99:db:5d:79:d5:f9:97:59:67:03:61:f1:7e:3b:06:31:75:2d:
|
983 |
-
# a1:20:8e:4f:65:87:b4:f7:a6:9c:bc:d8:e9:2f:d0:db:5a:ee:
|
984 |
-
# cf:74:8c:73:b4:38:42:da:05:7b:f8:02:75:b8:fd:a5:b1:d7:
|
985 |
-
# ae:f6:d7:de:13:cb:53:10:7e:8a:46:d1:97:fa:b7:2e:2b:11:
|
986 |
-
# ab:90:b0:27:80:f9:e8:9f:5a:e9:37:9f:ab:e4:df:6c:b3:85:
|
987 |
-
# 17:9d:3d:d9:24:4f:79:91:35:d6:5f:04:eb:80:83:ab:9a:02:
|
988 |
-
# 2d:b5:10:f4:d8:90:c7:04:73:40:ed:72:25:a0:a9:9f:ec:9e:
|
989 |
-
# ab:68:12:99:57:c6:8f:12:3a:09:a4:bd:44:fd:06:15:37:c1:
|
990 |
-
# 9b:e4:32:a3:ed:38:e8:d8:64:f3:2c:7e:14:fc:02:ea:9f:cd:
|
991 |
-
# ff:07:68:17:db:22:90:38:2d:7a:8d:d1:54:f1:69:e3:5f:33:
|
992 |
-
# ca:7a:3d:7b:0a:e3:ca:7f:5f:39:e5:e2:75:ba:c5:76:18:33:
|
993 |
-
# ce:2c:f0:2f:4c:ad:f7:b1:e7:ce:4f:a8:c4:9b:4a:54:06:c5:
|
994 |
-
# 7f:7d:d5:08:0f:e2:1c:fe:7e:17:b8:ac:5e:f6:d4:16:b2:43:
|
995 |
-
# 09:0c:4d:f6:a7:6b:b4:99:84:65:ca:7a:88:e2:e2:44:be:5c:
|
996 |
-
# f7:ea:1c:f5
|
997 |
-
-----BEGIN CERTIFICATE-----
|
998 |
-
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
|
999 |
-
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
|
1000 |
-
EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
|
1001 |
-
ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
|
1002 |
-
NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
|
1003 |
-
EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
|
1004 |
-
AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
|
1005 |
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
|
1006 |
-
E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
|
1007 |
-
/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
|
1008 |
-
DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
|
1009 |
-
GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
|
1010 |
-
tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
|
1011 |
-
AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
|
1012 |
-
FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
|
1013 |
-
WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
|
1014 |
-
9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
|
1015 |
-
gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
|
1016 |
-
2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
1017 |
-
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
|
1018 |
-
4uJEvlz36hz1
|
1019 |
-
-----END CERTIFICATE-----
|
1020 |
-
# Go Daddy Secure Certification Authority serialNumber=07969287.pem
|
1021 |
-
# Certificate:
|
1022 |
-
# Data:
|
1023 |
-
# Version: 3 (0x2)
|
1024 |
-
# Serial Number: 769 (0x301)
|
1025 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
1026 |
-
# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
|
1027 |
-
# Validity
|
1028 |
-
# Not Before: Nov 16 01:54:37 2006 GMT
|
1029 |
-
# Not After : Nov 16 01:54:37 2026 GMT
|
1030 |
-
# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
|
1031 |
-
# Subject Public Key Info:
|
1032 |
-
# Public Key Algorithm: rsaEncryption
|
1033 |
-
# Public-Key: (2048 bit)
|
1034 |
-
# Modulus:
|
1035 |
-
# 00:c4:2d:d5:15:8c:9c:26:4c:ec:32:35:eb:5f:b8:
|
1036 |
-
# 59:01:5a:a6:61:81:59:3b:70:63:ab:e3:dc:3d:c7:
|
1037 |
-
# 2a:b8:c9:33:d3:79:e4:3a:ed:3c:30:23:84:8e:b3:
|
1038 |
-
# 30:14:b6:b2:87:c3:3d:95:54:04:9e:df:99:dd:0b:
|
1039 |
-
# 25:1e:21:de:65:29:7e:35:a8:a9:54:eb:f6:f7:32:
|
1040 |
-
# 39:d4:26:55:95:ad:ef:fb:fe:58:86:d7:9e:f4:00:
|
1041 |
-
# 8d:8c:2a:0c:bd:42:04:ce:a7:3f:04:f6:ee:80:f2:
|
1042 |
-
# aa:ef:52:a1:69:66:da:be:1a:ad:5d:da:2c:66:ea:
|
1043 |
-
# 1a:6b:bb:e5:1a:51:4a:00:2f:48:c7:98:75:d8:b9:
|
1044 |
-
# 29:c8:ee:f8:66:6d:0a:9c:b3:f3:fc:78:7c:a2:f8:
|
1045 |
-
# a3:f2:b5:c3:f3:b9:7a:91:c1:a7:e6:25:2e:9c:a8:
|
1046 |
-
# ed:12:65:6e:6a:f6:12:44:53:70:30:95:c3:9c:2b:
|
1047 |
-
# 58:2b:3d:08:74:4a:f2:be:51:b0:bf:87:d0:4c:27:
|
1048 |
-
# 58:6b:b5:35:c5:9d:af:17:31:f8:0b:8f:ee:ad:81:
|
1049 |
-
# 36:05:89:08:98:cf:3a:af:25:87:c0:49:ea:a7:fd:
|
1050 |
-
# 67:f7:45:8e:97:cc:14:39:e2:36:85:b5:7e:1a:37:
|
1051 |
-
# fd:16:f6:71:11:9a:74:30:16:fe:13:94:a3:3f:84:
|
1052 |
-
# 0d:4f
|
1053 |
-
# Exponent: 65537 (0x10001)
|
1054 |
-
# X509v3 extensions:
|
1055 |
-
# X509v3 Subject Key Identifier:
|
1056 |
-
# FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
|
1057 |
-
# X509v3 Authority Key Identifier:
|
1058 |
-
# keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
|
1059 |
-
#
|
1060 |
-
# X509v3 Basic Constraints: critical
|
1061 |
-
# CA:TRUE, pathlen:0
|
1062 |
-
# Authority Information Access:
|
1063 |
-
# OCSP - URI:http://ocsp.godaddy.com
|
1064 |
-
#
|
1065 |
-
# X509v3 CRL Distribution Points:
|
1066 |
-
#
|
1067 |
-
# Full Name:
|
1068 |
-
# URI:http://certificates.godaddy.com/repository/gdroot.crl
|
1069 |
-
#
|
1070 |
-
# X509v3 Certificate Policies:
|
1071 |
-
# Policy: X509v3 Any Policy
|
1072 |
-
# CPS: http://certificates.godaddy.com/repository
|
1073 |
-
#
|
1074 |
-
# X509v3 Key Usage: critical
|
1075 |
-
# Certificate Sign, CRL Sign
|
1076 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
1077 |
-
# d2:86:c0:ec:bd:f9:a1:b6:67:ee:66:0b:a2:06:3a:04:50:8e:
|
1078 |
-
# 15:72:ac:4a:74:95:53:cb:37:cb:44:49:ef:07:90:6b:33:d9:
|
1079 |
-
# 96:f0:94:56:a5:13:30:05:3c:85:32:21:7b:c9:c7:0a:a8:24:
|
1080 |
-
# a4:90:de:46:d3:25:23:14:03:67:c2:10:d6:6f:0f:5d:7b:7a:
|
1081 |
-
# cc:9f:c5:58:2a:c1:c4:9e:21:a8:5a:f3:ac:a4:46:f3:9e:e4:
|
1082 |
-
# 63:cb:2f:90:a4:29:29:01:d9:72:2c:29:df:37:01:27:bc:4f:
|
1083 |
-
# ee:68:d3:21:8f:c0:b3:e4:f5:09:ed:d2:10:aa:53:b4:be:f0:
|
1084 |
-
# cc:59:0b:d6:3b:96:1c:95:24:49:df:ce:ec:fd:a7:48:91:14:
|
1085 |
-
# 45:0e:3a:36:6f:da:45:b3:45:a2:41:c9:d4:d7:44:4e:3e:b9:
|
1086 |
-
# 74:76:d5:a2:13:55:2c:c6:87:a3:b5:99:ac:06:84:87:7f:75:
|
1087 |
-
# 06:fc:bf:14:4c:0e:cc:6e:c4:df:3d:b7:12:71:f4:e8:f1:51:
|
1088 |
-
# 40:22:28:49:e0:1d:4b:87:a8:34:cc:06:a2:dd:12:5a:d1:86:
|
1089 |
-
# 36:64:03:35:6f:6f:77:6e:eb:f2:85:50:98:5e:ab:03:53:ad:
|
1090 |
-
# 91:23:63:1f:16:9c:cd:b9:b2:05:63:3a:e1:f4:68:1b:17:05:
|
1091 |
-
# 35:95:53:ee
|
1092 |
-
-----BEGIN CERTIFICATE-----
|
1093 |
-
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
|
1094 |
-
ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1095 |
-
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
|
1096 |
-
MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
|
1097 |
-
QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
|
1098 |
-
b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
|
1099 |
-
b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
|
1100 |
-
YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
|
1101 |
-
AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
|
1102 |
-
KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
|
1103 |
-
VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
|
1104 |
-
SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
|
1105 |
-
cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
|
1106 |
-
6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
|
1107 |
-
MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
|
1108 |
-
kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
|
1109 |
-
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
|
1110 |
-
BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
|
1111 |
-
c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
|
1112 |
-
AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
|
1113 |
-
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
|
1114 |
-
OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
|
1115 |
-
A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
|
1116 |
-
0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
|
1117 |
-
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
|
1118 |
-
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
|
1119 |
-
U+4=
|
1120 |
-
-----END CERTIFICATE-----
|
1121 |
-
# Thawte Premium Server CA.pem
|
1122 |
-
# Certificate:
|
1123 |
-
# Data:
|
1124 |
-
# Version: 3 (0x2)
|
1125 |
-
# Serial Number: 1 (0x1)
|
1126 |
-
# Signature Algorithm: md5WithRSAEncryption
|
1127 |
-
# Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
|
1128 |
-
# Validity
|
1129 |
-
# Not Before: Aug 1 00:00:00 1996 GMT
|
1130 |
-
# Not After : Dec 31 23:59:59 2020 GMT
|
1131 |
-
# Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
|
1132 |
-
# Subject Public Key Info:
|
1133 |
-
# Public Key Algorithm: rsaEncryption
|
1134 |
-
# Public-Key: (1024 bit)
|
1135 |
-
# Modulus:
|
1136 |
-
# 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f:
|
1137 |
-
# 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18:
|
1138 |
-
# 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af:
|
1139 |
-
# 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2:
|
1140 |
-
# 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93:
|
1141 |
-
# cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44:
|
1142 |
-
# 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73:
|
1143 |
-
# b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07:
|
1144 |
-
# 8d:f4:42:4d:e7:40:9d:1c:37
|
1145 |
-
# Exponent: 65537 (0x10001)
|
1146 |
-
# X509v3 extensions:
|
1147 |
-
# X509v3 Basic Constraints: critical
|
1148 |
-
# CA:TRUE
|
1149 |
-
# Signature Algorithm: md5WithRSAEncryption
|
1150 |
-
# 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7:
|
1151 |
-
# c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5:
|
1152 |
-
# 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb:
|
1153 |
-
# c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59:
|
1154 |
-
# 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9:
|
1155 |
-
# a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92:
|
1156 |
-
# 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07:
|
1157 |
-
# 14:42
|
1158 |
-
-----BEGIN CERTIFICATE-----
|
1159 |
-
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
|
1160 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
1161 |
-
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
1162 |
-
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
|
1163 |
-
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
|
1164 |
-
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
|
1165 |
-
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
|
1166 |
-
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
1167 |
-
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
|
1168 |
-
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
|
1169 |
-
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
|
1170 |
-
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
|
1171 |
-
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
|
1172 |
-
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
|
1173 |
-
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
|
1174 |
-
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
|
1175 |
-
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
|
1176 |
-
-----END CERTIFICATE-----
|
1177 |
-
# Thawte Primary Root CA - G2.pem
|
1178 |
-
# Certificate:
|
1179 |
-
# Data:
|
1180 |
-
# Version: 3 (0x2)
|
1181 |
-
# Serial Number:
|
1182 |
-
# 35:fc:26:5c:d9:84:4f:c9:3d:26:3d:57:9b:ae:d7:56
|
1183 |
-
# Signature Algorithm: ecdsa-with-SHA384
|
1184 |
-
# Issuer: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
|
1185 |
-
# Validity
|
1186 |
-
# Not Before: Nov 5 00:00:00 2007 GMT
|
1187 |
-
# Not After : Jan 18 23:59:59 2038 GMT
|
1188 |
-
# Subject: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
|
1189 |
-
# Subject Public Key Info:
|
1190 |
-
# Public Key Algorithm: id-ecPublicKey
|
1191 |
-
# Public-Key: (384 bit)
|
1192 |
-
# pub:
|
1193 |
-
# 04:a2:d5:9c:82:7b:95:9d:f1:52:78:87:fe:8a:16:
|
1194 |
-
# bf:05:e6:df:a3:02:4f:0d:07:c6:00:51:ba:0c:02:
|
1195 |
-
# 52:2d:22:a4:42:39:c4:fe:8f:ea:c9:c1:be:d4:4d:
|
1196 |
-
# ff:9f:7a:9e:e2:b1:7c:9a:ad:a7:86:09:73:87:d1:
|
1197 |
-
# e7:9a:e3:7a:a5:aa:6e:fb:ba:b3:70:c0:67:88:a2:
|
1198 |
-
# 35:d4:a3:9a:b1:fd:ad:c2:ef:31:fa:a8:b9:f3:fb:
|
1199 |
-
# 08:c6:91:d1:fb:29:95
|
1200 |
-
# ASN1 OID: secp384r1
|
1201 |
-
# X509v3 extensions:
|
1202 |
-
# X509v3 Basic Constraints: critical
|
1203 |
-
# CA:TRUE
|
1204 |
-
# X509v3 Key Usage: critical
|
1205 |
-
# Certificate Sign, CRL Sign
|
1206 |
-
# X509v3 Subject Key Identifier:
|
1207 |
-
# 9A:D8:00:30:00:E7:6B:7F:85:18:EE:8B:B6:CE:8A:0C:F8:11:E1:BB
|
1208 |
-
# Signature Algorithm: ecdsa-with-SHA384
|
1209 |
-
# 30:66:02:31:00:dd:f8:e0:57:47:5b:a7:e6:0a:c3:bd:f5:80:
|
1210 |
-
# 8a:97:35:0d:1b:89:3c:54:86:77:28:ca:a1:f4:79:de:b5:e6:
|
1211 |
-
# 38:b0:f0:65:70:8c:7f:02:54:c2:bf:ff:d8:a1:3e:d9:cf:02:
|
1212 |
-
# 31:00:c4:8d:94:fc:dc:53:d2:dc:9d:78:16:1f:15:33:23:53:
|
1213 |
-
# 52:e3:5a:31:5d:9d:ca:ae:bd:13:29:44:0d:27:5b:a8:e7:68:
|
1214 |
-
# 9c:12:f7:58:3f:2e:72:02:57:a3:8f:a1:14:2e
|
1215 |
-
-----BEGIN CERTIFICATE-----
|
1216 |
-
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
|
1217 |
-
MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
|
1218 |
-
IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
|
1219 |
-
BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
|
1220 |
-
MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
1221 |
-
d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
|
1222 |
-
YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
|
1223 |
-
dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
|
1224 |
-
BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
|
1225 |
-
papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
|
1226 |
-
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
|
1227 |
-
DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
|
1228 |
-
KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
|
1229 |
-
XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
1230 |
-
-----END CERTIFICATE-----
|
1231 |
-
# Thawte Primary Root CA - G3.pem
|
1232 |
-
# Certificate:
|
1233 |
-
# Data:
|
1234 |
-
# Version: 3 (0x2)
|
1235 |
-
# Serial Number:
|
1236 |
-
# 60:01:97:b7:46:a7:ea:b4:b4:9a:d6:4b:2f:f7:90:fb
|
1237 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
1238 |
-
# Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
|
1239 |
-
# Validity
|
1240 |
-
# Not Before: Apr 2 00:00:00 2008 GMT
|
1241 |
-
# Not After : Dec 1 23:59:59 2037 GMT
|
1242 |
-
# Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
|
1243 |
-
# Subject Public Key Info:
|
1244 |
-
# Public Key Algorithm: rsaEncryption
|
1245 |
-
# Public-Key: (2048 bit)
|
1246 |
-
# Modulus:
|
1247 |
-
# 00:b2:bf:27:2c:fb:db:d8:5b:dd:78:7b:1b:9e:77:
|
1248 |
-
# 66:81:cb:3e:bc:7c:ae:f3:a6:27:9a:34:a3:68:31:
|
1249 |
-
# 71:38:33:62:e4:f3:71:66:79:b1:a9:65:a3:a5:8b:
|
1250 |
-
# d5:8f:60:2d:3f:42:cc:aa:6b:32:c0:23:cb:2c:41:
|
1251 |
-
# dd:e4:df:fc:61:9c:e2:73:b2:22:95:11:43:18:5f:
|
1252 |
-
# c4:b6:1f:57:6c:0a:05:58:22:c8:36:4c:3a:7c:a5:
|
1253 |
-
# d1:cf:86:af:88:a7:44:02:13:74:71:73:0a:42:59:
|
1254 |
-
# 02:f8:1b:14:6b:42:df:6f:5f:ba:6b:82:a2:9d:5b:
|
1255 |
-
# e7:4a:bd:1e:01:72:db:4b:74:e8:3b:7f:7f:7d:1f:
|
1256 |
-
# 04:b4:26:9b:e0:b4:5a:ac:47:3d:55:b8:d7:b0:26:
|
1257 |
-
# 52:28:01:31:40:66:d8:d9:24:bd:f6:2a:d8:ec:21:
|
1258 |
-
# 49:5c:9b:f6:7a:e9:7f:55:35:7e:96:6b:8d:93:93:
|
1259 |
-
# 27:cb:92:bb:ea:ac:40:c0:9f:c2:f8:80:cf:5d:f4:
|
1260 |
-
# 5a:dc:ce:74:86:a6:3e:6c:0b:53:ca:bd:92:ce:19:
|
1261 |
-
# 06:72:e6:0c:5c:38:69:c7:04:d6:bc:6c:ce:5b:f6:
|
1262 |
-
# f7:68:9c:dc:25:15:48:88:a1:e9:a9:f8:98:9c:e0:
|
1263 |
-
# f3:d5:31:28:61:11:6c:67:96:8d:39:99:cb:c2:45:
|
1264 |
-
# 24:39
|
1265 |
-
# Exponent: 65537 (0x10001)
|
1266 |
-
# X509v3 extensions:
|
1267 |
-
# X509v3 Basic Constraints: critical
|
1268 |
-
# CA:TRUE
|
1269 |
-
# X509v3 Key Usage: critical
|
1270 |
-
# Certificate Sign, CRL Sign
|
1271 |
-
# X509v3 Subject Key Identifier:
|
1272 |
-
# AD:6C:AA:94:60:9C:ED:E4:FF:FA:3E:0A:74:2B:63:03:F7:B6:59:BF
|
1273 |
-
# Signature Algorithm: sha256WithRSAEncryption
|
1274 |
-
# 1a:40:d8:95:65:ac:09:92:89:c6:39:f4:10:e5:a9:0e:66:53:
|
1275 |
-
# 5d:78:de:fa:24:91:bb:e7:44:51:df:c6:16:34:0a:ef:6a:44:
|
1276 |
-
# 51:ea:2b:07:8a:03:7a:c3:eb:3f:0a:2c:52:16:a0:2b:43:b9:
|
1277 |
-
# 25:90:3f:70:a9:33:25:6d:45:1a:28:3b:27:cf:aa:c3:29:42:
|
1278 |
-
# 1b:df:3b:4c:c0:33:34:5b:41:88:bf:6b:2b:65:af:28:ef:b2:
|
1279 |
-
# f5:c3:aa:66:ce:7b:56:ee:b7:c8:cb:67:c1:c9:9c:1a:18:b8:
|
1280 |
-
# c4:c3:49:03:f1:60:0e:50:cd:46:c5:f3:77:79:f7:b6:15:e0:
|
1281 |
-
# 38:db:c7:2f:28:a0:0c:3f:77:26:74:d9:25:12:da:31:da:1a:
|
1282 |
-
# 1e:dc:29:41:91:22:3c:69:a7:bb:02:f2:b6:5c:27:03:89:f4:
|
1283 |
-
# 06:ea:9b:e4:72:82:e3:a1:09:c1:e9:00:19:d3:3e:d4:70:6b:
|
1284 |
-
# ba:71:a6:aa:58:ae:f4:bb:e9:6c:b6:ef:87:cc:9b:bb:ff:39:
|
1285 |
-
# e6:56:61:d3:0a:a7:c4:5c:4c:60:7b:05:77:26:7a:bf:d8:07:
|
1286 |
-
# 52:2c:62:f7:70:63:d9:39:bc:6f:1c:c2:79:dc:76:29:af:ce:
|
1287 |
-
# c5:2c:64:04:5e:88:36:6e:31:d4:40:1a:62:34:36:3f:35:01:
|
1288 |
-
# ae:ac:63:a0
|
1289 |
-
-----BEGIN CERTIFICATE-----
|
1290 |
-
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
|
1291 |
-
rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
1292 |
-
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
1293 |
-
MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
|
1294 |
-
BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
|
1295 |
-
Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
|
1296 |
-
LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
|
1297 |
-
MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
|
1298 |
-
ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
|
1299 |
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
|
1300 |
-
gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
|
1301 |
-
YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
|
1302 |
-
b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
|
1303 |
-
9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
|
1304 |
-
zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
|
1305 |
-
OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
|
1306 |
-
HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
|
1307 |
-
2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
|
1308 |
-
oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
1309 |
-
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
|
1310 |
-
KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
|
1311 |
-
m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
|
1312 |
-
MdRAGmI0Nj81Aa6sY6A=
|
1313 |
-
-----END CERTIFICATE-----
|
1314 |
-
# Thawte Primary Root CA.pem
|
1315 |
-
# Certificate:
|
1316 |
-
# Data:
|
1317 |
-
# Version: 3 (0x2)
|
1318 |
-
# Serial Number:
|
1319 |
-
# 34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d
|
1320 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
1321 |
-
# Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
|
1322 |
-
# Validity
|
1323 |
-
# Not Before: Nov 17 00:00:00 2006 GMT
|
1324 |
-
# Not After : Jul 16 23:59:59 2036 GMT
|
1325 |
-
# Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
|
1326 |
-
# Subject Public Key Info:
|
1327 |
-
# Public Key Algorithm: rsaEncryption
|
1328 |
-
# Public-Key: (2048 bit)
|
1329 |
-
# Modulus:
|
1330 |
-
# 00:ac:a0:f0:fb:80:59:d4:9c:c7:a4:cf:9d:a1:59:
|
1331 |
-
# 73:09:10:45:0c:0d:2c:6e:68:f1:6c:5b:48:68:49:
|
1332 |
-
# 59:37:fc:0b:33:19:c2:77:7f:cc:10:2d:95:34:1c:
|
1333 |
-
# e6:eb:4d:09:a7:1c:d2:b8:c9:97:36:02:b7:89:d4:
|
1334 |
-
# 24:5f:06:c0:cc:44:94:94:8d:02:62:6f:eb:5a:dd:
|
1335 |
-
# 11:8d:28:9a:5c:84:90:10:7a:0d:bd:74:66:2f:6a:
|
1336 |
-
# 38:a0:e2:d5:54:44:eb:1d:07:9f:07:ba:6f:ee:e9:
|
1337 |
-
# fd:4e:0b:29:f5:3e:84:a0:01:f1:9c:ab:f8:1c:7e:
|
1338 |
-
# 89:a4:e8:a1:d8:71:65:0d:a3:51:7b:ee:bc:d2:22:
|
1339 |
-
# 60:0d:b9:5b:9d:df:ba:fc:51:5b:0b:af:98:b2:e9:
|
1340 |
-
# 2e:e9:04:e8:62:87:de:2b:c8:d7:4e:c1:4c:64:1e:
|
1341 |
-
# dd:cf:87:58:ba:4a:4f:ca:68:07:1d:1c:9d:4a:c6:
|
1342 |
-
# d5:2f:91:cc:7c:71:72:1c:c5:c0:67:eb:32:fd:c9:
|
1343 |
-
# 92:5c:94:da:85:c0:9b:bf:53:7d:2b:09:f4:8c:9d:
|
1344 |
-
# 91:1f:97:6a:52:cb:de:09:36:a4:77:d8:7b:87:50:
|
1345 |
-
# 44:d5:3e:6e:29:69:fb:39:49:26:1e:09:a5:80:7b:
|
1346 |
-
# 40:2d:eb:e8:27:85:c9:fe:61:fd:7e:e6:7c:97:1d:
|
1347 |
-
# d5:9d
|
1348 |
-
# Exponent: 65537 (0x10001)
|
1349 |
-
# X509v3 extensions:
|
1350 |
-
# X509v3 Basic Constraints: critical
|
1351 |
-
# CA:TRUE
|
1352 |
-
# X509v3 Key Usage: critical
|
1353 |
-
# Certificate Sign, CRL Sign
|
1354 |
-
# X509v3 Subject Key Identifier:
|
1355 |
-
# 7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50
|
1356 |
-
# Signature Algorithm: sha1WithRSAEncryption
|
1357 |
-
# 79:11:c0:4b:b3:91:b6:fc:f0:e9:67:d4:0d:6e:45:be:55:e8:
|
1358 |
-
# 93:d2:ce:03:3f:ed:da:25:b0:1d:57:cb:1e:3a:76:a0:4c:ec:
|
1359 |
-
# 50:76:e8:64:72:0c:a4:a9:f1:b8:8b:d6:d6:87:84:bb:32:e5:
|
1360 |
-
# 41:11:c0:77:d9:b3:60:9d:eb:1b:d5:d1:6e:44:44:a9:a6:01:
|
1361 |
-
# ec:55:62:1d:77:b8:5c:8e:48:49:7c:9c:3b:57:11:ac:ad:73:
|
1362 |
-
# 37:8e:2f:78:5c:90:68:47:d9:60:60:e6:fc:07:3d:22:20:17:
|
1363 |
-
# c4:f7:16:e9:c4:d8:72:f9:c8:73:7c:df:16:2f:15:a9:3e:fd:
|
1364 |
-
# 6a:27:b6:a1:eb:5a:ba:98:1f:d5:e3:4d:64:0a:9d:13:c8:61:
|
1365 |
-
# ba:f5:39:1c:87:ba:b8:bd:7b:22:7f:f6:fe:ac:40:79:e5:ac:
|
1366 |
-
# 10:6f:3d:8f:1b:79:76:8b:c4:37:b3:21:18:84:e5:36:00:eb:
|
1367 |
-
# 63:20:99:b9:e9:fe:33:04:bb:41:c8:c1:02:f9:44:63:20:9e:
|
1368 |
-
# 81:ce:42:d3:d6:3f:2c:76:d3:63:9c:59:dd:8f:a6:e1:0e:a0:
|
1369 |
-
# 2e:41:f7:2e:95:47:cf:bc:fd:33:f3:f6:0b:61:7e:7e:91:2b:
|
1370 |
-
# 81:47:c2:27:30:ee:a7:10:5d:37:8f:5c:39:2b:e4:04:f0:7b:
|
1371 |
-
# 8d:56:8c:68
|
1372 |
-
-----BEGIN CERTIFICATE-----
|
1373 |
-
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
|
1374 |
-
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
1375 |
-
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
1376 |
-
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
1377 |
-
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
|
1378 |
-
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
|
1379 |
-
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
|
1380 |
-
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
1381 |
-
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
|
1382 |
-
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
|
1383 |
-
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
|
1384 |
-
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
|
1385 |
-
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
|
1386 |
-
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
|
1387 |
-
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
|
1388 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
|
1389 |
-
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
|
1390 |
-
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
|
1391 |
-
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
1392 |
-
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
|
1393 |
-
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
|
1394 |
-
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
|
1395 |
-
jVaMaA==
|
1396 |
-----END CERTIFICATE-----
|
1 |
+
# DigiCert Assured ID Root CA.pem
|
2 |
+
# Certificate:
|
3 |
+
# Data:
|
4 |
+
# Version: 3 (0x2)
|
5 |
+
# Serial Number:
|
6 |
+
# 0c:e7:e0:e5:17:d8:46:fe:8f:e5:60:fc:1b:f0:30:39
|
7 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
8 |
+
# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
|
9 |
+
# Validity
|
10 |
+
# Not Before: Nov 10 00:00:00 2006 GMT
|
11 |
+
# Not After : Nov 10 00:00:00 2031 GMT
|
12 |
+
# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Assured ID Root CA
|
13 |
+
# Subject Public Key Info:
|
14 |
+
# Public Key Algorithm: rsaEncryption
|
15 |
+
# Public-Key: (2048 bit)
|
16 |
+
# Modulus:
|
17 |
+
# 00:ad:0e:15:ce:e4:43:80:5c:b1:87:f3:b7:60:f9:
|
18 |
+
# 71:12:a5:ae:dc:26:94:88:aa:f4:ce:f5:20:39:28:
|
19 |
+
# 58:60:0c:f8:80:da:a9:15:95:32:61:3c:b5:b1:28:
|
20 |
+
# 84:8a:8a:dc:9f:0a:0c:83:17:7a:8f:90:ac:8a:e7:
|
21 |
+
# 79:53:5c:31:84:2a:f6:0f:98:32:36:76:cc:de:dd:
|
22 |
+
# 3c:a8:a2:ef:6a:fb:21:f2:52:61:df:9f:20:d7:1f:
|
23 |
+
# e2:b1:d9:fe:18:64:d2:12:5b:5f:f9:58:18:35:bc:
|
24 |
+
# 47:cd:a1:36:f9:6b:7f:d4:b0:38:3e:c1:1b:c3:8c:
|
25 |
+
# 33:d9:d8:2f:18:fe:28:0f:b3:a7:83:d6:c3:6e:44:
|
26 |
+
# c0:61:35:96:16:fe:59:9c:8b:76:6d:d7:f1:a2:4b:
|
27 |
+
# 0d:2b:ff:0b:72:da:9e:60:d0:8e:90:35:c6:78:55:
|
28 |
+
# 87:20:a1:cf:e5:6d:0a:c8:49:7c:31:98:33:6c:22:
|
29 |
+
# e9:87:d0:32:5a:a2:ba:13:82:11:ed:39:17:9d:99:
|
30 |
+
# 3a:72:a1:e6:fa:a4:d9:d5:17:31:75:ae:85:7d:22:
|
31 |
+
# ae:3f:01:46:86:f6:28:79:c8:b1:da:e4:57:17:c4:
|
32 |
+
# 7e:1c:0e:b0:b4:92:a6:56:b3:bd:b2:97:ed:aa:a7:
|
33 |
+
# f0:b7:c5:a8:3f:95:16:d0:ff:a1:96:eb:08:5f:18:
|
34 |
+
# 77:4f
|
35 |
+
# Exponent: 65537 (0x10001)
|
36 |
+
# X509v3 extensions:
|
37 |
+
# X509v3 Key Usage: critical
|
38 |
+
# Digital Signature, Certificate Sign, CRL Sign
|
39 |
+
# X509v3 Basic Constraints: critical
|
40 |
+
# CA:TRUE
|
41 |
+
# X509v3 Subject Key Identifier:
|
42 |
+
# 45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
|
43 |
+
# X509v3 Authority Key Identifier:
|
44 |
+
# keyid:45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F
|
45 |
+
#
|
46 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
47 |
+
# a2:0e:bc:df:e2:ed:f0:e3:72:73:7a:64:94:bf:f7:72:66:d8:
|
48 |
+
# 32:e4:42:75:62:ae:87:eb:f2:d5:d9:de:56:b3:9f:cc:ce:14:
|
49 |
+
# 28:b9:0d:97:60:5c:12:4c:58:e4:d3:3d:83:49:45:58:97:35:
|
50 |
+
# 69:1a:a8:47:ea:56:c6:79:ab:12:d8:67:81:84:df:7f:09:3c:
|
51 |
+
# 94:e6:b8:26:2c:20:bd:3d:b3:28:89:f7:5f:ff:22:e2:97:84:
|
52 |
+
# 1f:e9:65:ef:87:e0:df:c1:67:49:b3:5d:eb:b2:09:2a:eb:26:
|
53 |
+
# ed:78:be:7d:3f:2b:f3:b7:26:35:6d:5f:89:01:b6:49:5b:9f:
|
54 |
+
# 01:05:9b:ab:3d:25:c1:cc:b6:7f:c2:f1:6f:86:c6:fa:64:68:
|
55 |
+
# eb:81:2d:94:eb:42:b7:fa:8c:1e:dd:62:f1:be:50:67:b7:6c:
|
56 |
+
# bd:f3:f1:1f:6b:0c:36:07:16:7f:37:7c:a9:5b:6d:7a:f1:12:
|
57 |
+
# 46:60:83:d7:27:04:be:4b:ce:97:be:c3:67:2a:68:11:df:80:
|
58 |
+
# e7:0c:33:66:bf:13:0d:14:6e:f3:7f:1f:63:10:1e:fa:8d:1b:
|
59 |
+
# 25:6d:6c:8f:a5:b7:61:01:b1:d2:a3:26:a1:10:71:9d:ad:e2:
|
60 |
+
# c3:f9:c3:99:51:b7:2b:07:08:ce:2e:e6:50:b2:a7:fa:0a:45:
|
61 |
+
# 2f:a2:f0:f2
|
62 |
+
-----BEGIN CERTIFICATE-----
|
63 |
+
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
|
64 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
65 |
+
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
|
66 |
+
b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
|
67 |
+
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
|
68 |
+
cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
|
69 |
+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
|
70 |
+
JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
|
71 |
+
mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
|
72 |
+
wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
|
73 |
+
VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
|
74 |
+
AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
|
75 |
+
AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
|
76 |
+
BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
|
77 |
+
pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
|
78 |
+
dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
|
79 |
+
fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
|
80 |
+
NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
|
81 |
+
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
|
82 |
+
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
|
83 |
+
-----END CERTIFICATE-----
|
84 |
+
# DigiCert Global Root CA.pem
|
85 |
+
# Certificate:
|
86 |
+
# Data:
|
87 |
+
# Version: 3 (0x2)
|
88 |
+
# Serial Number:
|
89 |
+
# 08:3b:e0:56:90:42:46:b1:a1:75:6a:c9:59:91:c7:4a
|
90 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
91 |
+
# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
|
92 |
+
# Validity
|
93 |
+
# Not Before: Nov 10 00:00:00 2006 GMT
|
94 |
+
# Not After : Nov 10 00:00:00 2031 GMT
|
95 |
+
# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert Global Root CA
|
96 |
+
# Subject Public Key Info:
|
97 |
+
# Public Key Algorithm: rsaEncryption
|
98 |
+
# Public-Key: (2048 bit)
|
99 |
+
# Modulus:
|
100 |
+
# 00:e2:3b:e1:11:72:de:a8:a4:d3:a3:57:aa:50:a2:
|
101 |
+
# 8f:0b:77:90:c9:a2:a5:ee:12:ce:96:5b:01:09:20:
|
102 |
+
# cc:01:93:a7:4e:30:b7:53:f7:43:c4:69:00:57:9d:
|
103 |
+
# e2:8d:22:dd:87:06:40:00:81:09:ce:ce:1b:83:bf:
|
104 |
+
# df:cd:3b:71:46:e2:d6:66:c7:05:b3:76:27:16:8f:
|
105 |
+
# 7b:9e:1e:95:7d:ee:b7:48:a3:08:da:d6:af:7a:0c:
|
106 |
+
# 39:06:65:7f:4a:5d:1f:bc:17:f8:ab:be:ee:28:d7:
|
107 |
+
# 74:7f:7a:78:99:59:85:68:6e:5c:23:32:4b:bf:4e:
|
108 |
+
# c0:e8:5a:6d:e3:70:bf:77:10:bf:fc:01:f6:85:d9:
|
109 |
+
# a8:44:10:58:32:a9:75:18:d5:d1:a2:be:47:e2:27:
|
110 |
+
# 6a:f4:9a:33:f8:49:08:60:8b:d4:5f:b4:3a:84:bf:
|
111 |
+
# a1:aa:4a:4c:7d:3e:cf:4f:5f:6c:76:5e:a0:4b:37:
|
112 |
+
# 91:9e:dc:22:e6:6d:ce:14:1a:8e:6a:cb:fe:cd:b3:
|
113 |
+
# 14:64:17:c7:5b:29:9e:32:bf:f2:ee:fa:d3:0b:42:
|
114 |
+
# d4:ab:b7:41:32:da:0c:d4:ef:f8:81:d5:bb:8d:58:
|
115 |
+
# 3f:b5:1b:e8:49:28:a2:70:da:31:04:dd:f7:b2:16:
|
116 |
+
# f2:4c:0a:4e:07:a8:ed:4a:3d:5e:b5:7f:a3:90:c3:
|
117 |
+
# af:27
|
118 |
+
# Exponent: 65537 (0x10001)
|
119 |
+
# X509v3 extensions:
|
120 |
+
# X509v3 Key Usage: critical
|
121 |
+
# Digital Signature, Certificate Sign, CRL Sign
|
122 |
+
# X509v3 Basic Constraints: critical
|
123 |
+
# CA:TRUE
|
124 |
+
# X509v3 Subject Key Identifier:
|
125 |
+
# 03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
|
126 |
+
# X509v3 Authority Key Identifier:
|
127 |
+
# keyid:03:DE:50:35:56:D1:4C:BB:66:F0:A3:E2:1B:1B:C3:97:B2:3D:D1:55
|
128 |
+
#
|
129 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
130 |
+
# cb:9c:37:aa:48:13:12:0a:fa:dd:44:9c:4f:52:b0:f4:df:ae:
|
131 |
+
# 04:f5:79:79:08:a3:24:18:fc:4b:2b:84:c0:2d:b9:d5:c7:fe:
|
132 |
+
# f4:c1:1f:58:cb:b8:6d:9c:7a:74:e7:98:29:ab:11:b5:e3:70:
|
133 |
+
# a0:a1:cd:4c:88:99:93:8c:91:70:e2:ab:0f:1c:be:93:a9:ff:
|
134 |
+
# 63:d5:e4:07:60:d3:a3:bf:9d:5b:09:f1:d5:8e:e3:53:f4:8e:
|
135 |
+
# 63:fa:3f:a7:db:b4:66:df:62:66:d6:d1:6e:41:8d:f2:2d:b5:
|
136 |
+
# ea:77:4a:9f:9d:58:e2:2b:59:c0:40:23:ed:2d:28:82:45:3e:
|
137 |
+
# 79:54:92:26:98:e0:80:48:a8:37:ef:f0:d6:79:60:16:de:ac:
|
138 |
+
# e8:0e:cd:6e:ac:44:17:38:2f:49:da:e1:45:3e:2a:b9:36:53:
|
139 |
+
# cf:3a:50:06:f7:2e:e8:c4:57:49:6c:61:21:18:d5:04:ad:78:
|
140 |
+
# 3c:2c:3a:80:6b:a7:eb:af:15:14:e9:d8:89:c1:b9:38:6c:e2:
|
141 |
+
# 91:6c:8a:ff:64:b9:77:25:57:30:c0:1b:24:a3:e1:dc:e9:df:
|
142 |
+
# 47:7c:b5:b4:24:08:05:30:ec:2d:bd:0b:bf:45:bf:50:b9:a9:
|
143 |
+
# f3:eb:98:01:12:ad:c8:88:c6:98:34:5f:8d:0a:3c:c6:e9:d5:
|
144 |
+
# 95:95:6d:de
|
145 |
+
-----BEGIN CERTIFICATE-----
|
146 |
+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
|
147 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
148 |
+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
149 |
+
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
|
150 |
+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
151 |
+
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
|
152 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
|
153 |
+
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
|
154 |
+
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
|
155 |
+
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
|
156 |
+
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
|
157 |
+
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
|
158 |
+
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
|
159 |
+
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
|
160 |
+
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
|
161 |
+
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
|
162 |
+
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
|
163 |
+
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
|
164 |
+
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
|
165 |
+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
|
166 |
+
-----END CERTIFICATE-----
|
167 |
+
# DigiCert High Assurance EV Root CA.pem
|
168 |
+
# Certificate:
|
169 |
+
# Data:
|
170 |
+
# Version: 3 (0x2)
|
171 |
+
# Serial Number:
|
172 |
+
# 02:ac:5c:26:6a:0b:40:9b:8f:0b:79:f2:ae:46:25:77
|
173 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
174 |
+
# Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
|
175 |
+
# Validity
|
176 |
+
# Not Before: Nov 10 00:00:00 2006 GMT
|
177 |
+
# Not After : Nov 10 00:00:00 2031 GMT
|
178 |
+
# Subject: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert High Assurance EV Root CA
|
179 |
+
# Subject Public Key Info:
|
180 |
+
# Public Key Algorithm: rsaEncryption
|
181 |
+
# Public-Key: (2048 bit)
|
182 |
+
# Modulus:
|
183 |
+
# 00:c6:cc:e5:73:e6:fb:d4:bb:e5:2d:2d:32:a6:df:
|
184 |
+
# e5:81:3f:c9:cd:25:49:b6:71:2a:c3:d5:94:34:67:
|
185 |
+
# a2:0a:1c:b0:5f:69:a6:40:b1:c4:b7:b2:8f:d0:98:
|
186 |
+
# a4:a9:41:59:3a:d3:dc:94:d6:3c:db:74:38:a4:4a:
|
187 |
+
# cc:4d:25:82:f7:4a:a5:53:12:38:ee:f3:49:6d:71:
|
188 |
+
# 91:7e:63:b6:ab:a6:5f:c3:a4:84:f8:4f:62:51:be:
|
189 |
+
# f8:c5:ec:db:38:92:e3:06:e5:08:91:0c:c4:28:41:
|
190 |
+
# 55:fb:cb:5a:89:15:7e:71:e8:35:bf:4d:72:09:3d:
|
191 |
+
# be:3a:38:50:5b:77:31:1b:8d:b3:c7:24:45:9a:a7:
|
192 |
+
# ac:6d:00:14:5a:04:b7:ba:13:eb:51:0a:98:41:41:
|
193 |
+
# 22:4e:65:61:87:81:41:50:a6:79:5c:89:de:19:4a:
|
194 |
+
# 57:d5:2e:e6:5d:1c:53:2c:7e:98:cd:1a:06:16:a4:
|
195 |
+
# 68:73:d0:34:04:13:5c:a1:71:d3:5a:7c:55:db:5e:
|
196 |
+
# 64:e1:37:87:30:56:04:e5:11:b4:29:80:12:f1:79:
|
197 |
+
# 39:88:a2:02:11:7c:27:66:b7:88:b7:78:f2:ca:0a:
|
198 |
+
# a8:38:ab:0a:64:c2:bf:66:5d:95:84:c1:a1:25:1e:
|
199 |
+
# 87:5d:1a:50:0b:20:12:cc:41:bb:6e:0b:51:38:b8:
|
200 |
+
# 4b:cb
|
201 |
+
# Exponent: 65537 (0x10001)
|
202 |
+
# X509v3 extensions:
|
203 |
+
# X509v3 Key Usage: critical
|
204 |
+
# Digital Signature, Certificate Sign, CRL Sign
|
205 |
+
# X509v3 Basic Constraints: critical
|
206 |
+
# CA:TRUE
|
207 |
+
# X509v3 Subject Key Identifier:
|
208 |
+
# B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
|
209 |
+
# X509v3 Authority Key Identifier:
|
210 |
+
# keyid:B1:3E:C3:69:03:F8:BF:47:01:D4:98:26:1A:08:02:EF:63:64:2B:C3
|
211 |
+
#
|
212 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
213 |
+
# 1c:1a:06:97:dc:d7:9c:9f:3c:88:66:06:08:57:21:db:21:47:
|
214 |
+
# f8:2a:67:aa:bf:18:32:76:40:10:57:c1:8a:f3:7a:d9:11:65:
|
215 |
+
# 8e:35:fa:9e:fc:45:b5:9e:d9:4c:31:4b:b8:91:e8:43:2c:8e:
|
216 |
+
# b3:78:ce:db:e3:53:79:71:d6:e5:21:94:01:da:55:87:9a:24:
|
217 |
+
# 64:f6:8a:66:cc:de:9c:37:cd:a8:34:b1:69:9b:23:c8:9e:78:
|
218 |
+
# 22:2b:70:43:e3:55:47:31:61:19:ef:58:c5:85:2f:4e:30:f6:
|
219 |
+
# a0:31:16:23:c8:e7:e2:65:16:33:cb:bf:1a:1b:a0:3d:f8:ca:
|
220 |
+
# 5e:8b:31:8b:60:08:89:2d:0c:06:5c:52:b7:c4:f9:0a:98:d1:
|
221 |
+
# 15:5f:9f:12:be:7c:36:63:38:bd:44:a4:7f:e4:26:2b:0a:c4:
|
222 |
+
# 97:69:0d:e9:8c:e2:c0:10:57:b8:c8:76:12:91:55:f2:48:69:
|
223 |
+
# d8:bc:2a:02:5b:0f:44:d4:20:31:db:f4:ba:70:26:5d:90:60:
|
224 |
+
# 9e:bc:4b:17:09:2f:b4:cb:1e:43:68:c9:07:27:c1:d2:5c:f7:
|
225 |
+
# ea:21:b9:68:12:9c:3c:9c:bf:9e:fc:80:5c:9b:63:cd:ec:47:
|
226 |
+
# aa:25:27:67:a0:37:f3:00:82:7d:54:d7:a9:f8:e9:2e:13:a3:
|
227 |
+
# 77:e8:1f:4a
|
228 |
+
-----BEGIN CERTIFICATE-----
|
229 |
+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
|
230 |
+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
231 |
+
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
|
232 |
+
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
|
233 |
+
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
|
234 |
+
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
|
235 |
+
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
|
236 |
+
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
|
237 |
+
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
|
238 |
+
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
|
239 |
+
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
|
240 |
+
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
|
241 |
+
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
|
242 |
+
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
|
243 |
+
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
|
244 |
+
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
|
245 |
+
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
|
246 |
+
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
|
247 |
+
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
|
248 |
+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
|
249 |
+
+OkuE6N36B9K
|
250 |
+
-----END CERTIFICATE-----
|
251 |
+
# Entrust Root Certification Authority - EC1.pem
|
252 |
+
# Certificate:
|
253 |
+
# Data:
|
254 |
+
# Version: 3 (0x2)
|
255 |
+
# Serial Number:
|
256 |
+
# a6:8b:79:29:00:00:00:00:50:d0:91:f9
|
257 |
+
# Signature Algorithm: ecdsa-with-SHA384
|
258 |
+
# Issuer: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1
|
259 |
+
# Validity
|
260 |
+
# Not Before: Dec 18 15:25:36 2012 GMT
|
261 |
+
# Not After : Dec 18 15:55:36 2037 GMT
|
262 |
+
# Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2012 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - EC1
|
263 |
+
# Subject Public Key Info:
|
264 |
+
# Public Key Algorithm: id-ecPublicKey
|
265 |
+
# Public-Key: (384 bit)
|
266 |
+
# pub:
|
267 |
+
# 04:84:13:c9:d0:ba:6d:41:7b:e2:6c:d0:eb:55:5f:
|
268 |
+
# 66:02:1a:24:f4:5b:89:69:47:e3:b8:c2:7d:f1:f2:
|
269 |
+
# 02:c5:9f:a0:f6:5b:d5:8b:06:19:86:4f:53:10:6d:
|
270 |
+
# 07:24:27:a1:a0:f8:d5:47:19:61:4c:7d:ca:93:27:
|
271 |
+
# ea:74:0c:ef:6f:96:09:fe:63:ec:70:5d:36:ad:67:
|
272 |
+
# 77:ae:c9:9d:7c:55:44:3a:a2:63:51:1f:f5:e3:62:
|
273 |
+
# d4:a9:47:07:3e:cc:20
|
274 |
+
# ASN1 OID: secp384r1
|
275 |
+
# X509v3 extensions:
|
276 |
+
# X509v3 Key Usage: critical
|
277 |
+
# Certificate Sign, CRL Sign
|
278 |
+
# X509v3 Basic Constraints: critical
|
279 |
+
# CA:TRUE
|
280 |
+
# X509v3 Subject Key Identifier:
|
281 |
+
# B7:63:E7:1A:DD:8D:E9:08:A6:55:83:A4:E0:6A:50:41:65:11:42:49
|
282 |
+
# Signature Algorithm: ecdsa-with-SHA384
|
283 |
+
# 30:64:02:30:61:79:d8:e5:42:47:df:1c:ae:53:99:17:b6:6f:
|
284 |
+
# 1c:7d:e1:bf:11:94:d1:03:88:75:e4:8d:89:a4:8a:77:46:de:
|
285 |
+
# 6d:61:ef:02:f5:fb:b5:df:cc:fe:4e:ff:fe:a9:e6:a7:02:30:
|
286 |
+
# 5b:99:d7:85:37:06:b5:7b:08:fd:eb:27:8b:4a:94:f9:e1:fa:
|
287 |
+
# a7:8e:26:08:e8:7c:92:68:6d:73:d8:6f:26:ac:21:02:b8:99:
|
288 |
+
# b7:26:41:5b:25:60:ae:d0:48:1a:ee:06
|
289 |
+
-----BEGIN CERTIFICATE-----
|
290 |
+
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
|
291 |
+
A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
|
292 |
+
d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
|
293 |
+
dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
|
294 |
+
RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
|
295 |
+
MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
|
296 |
+
VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
|
297 |
+
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
|
298 |
+
Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
|
299 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
|
300 |
+
A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
|
301 |
+
ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
|
302 |
+
Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
|
303 |
+
BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
|
304 |
+
R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
|
305 |
+
hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
|
306 |
+
-----END CERTIFICATE-----
|
307 |
+
# Entrust Root Certification Authority - G2.pem
|
308 |
+
# Certificate:
|
309 |
+
# Data:
|
310 |
+
# Version: 3 (0x2)
|
311 |
+
# Serial Number: 1246989352 (0x4a538c28)
|
312 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
313 |
+
# Issuer: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2
|
314 |
+
# Validity
|
315 |
+
# Not Before: Jul 7 17:25:54 2009 GMT
|
316 |
+
# Not After : Dec 7 17:55:54 2030 GMT
|
317 |
+
# Subject: C=US, O=Entrust, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2009 Entrust, Inc. - for authorized use only, CN=Entrust Root Certification Authority - G2
|
318 |
+
# Subject Public Key Info:
|
319 |
+
# Public Key Algorithm: rsaEncryption
|
320 |
+
# Public-Key: (2048 bit)
|
321 |
+
# Modulus:
|
322 |
+
# 00:ba:84:b6:72:db:9e:0c:6b:e2:99:e9:30:01:a7:
|
323 |
+
# 76:ea:32:b8:95:41:1a:c9:da:61:4e:58:72:cf:fe:
|
324 |
+
# f6:82:79:bf:73:61:06:0a:a5:27:d8:b3:5f:d3:45:
|
325 |
+
# 4e:1c:72:d6:4e:32:f2:72:8a:0f:f7:83:19:d0:6a:
|
326 |
+
# 80:80:00:45:1e:b0:c7:e7:9a:bf:12:57:27:1c:a3:
|
327 |
+
# 68:2f:0a:87:bd:6a:6b:0e:5e:65:f3:1c:77:d5:d4:
|
328 |
+
# 85:8d:70:21:b4:b3:32:e7:8b:a2:d5:86:39:02:b1:
|
329 |
+
# b8:d2:47:ce:e4:c9:49:c4:3b:a7:de:fb:54:7d:57:
|
330 |
+
# be:f0:e8:6e:c2:79:b2:3a:0b:55:e2:50:98:16:32:
|
331 |
+
# 13:5c:2f:78:56:c1:c2:94:b3:f2:5a:e4:27:9a:9f:
|
332 |
+
# 24:d7:c6:ec:d0:9b:25:82:e3:cc:c2:c4:45:c5:8c:
|
333 |
+
# 97:7a:06:6b:2a:11:9f:a9:0a:6e:48:3b:6f:db:d4:
|
334 |
+
# 11:19:42:f7:8f:07:bf:f5:53:5f:9c:3e:f4:17:2c:
|
335 |
+
# e6:69:ac:4e:32:4c:62:77:ea:b7:e8:e5:bb:34:bc:
|
336 |
+
# 19:8b:ae:9c:51:e7:b7:7e:b5:53:b1:33:22:e5:6d:
|
337 |
+
# cf:70:3c:1a:fa:e2:9b:67:b6:83:f4:8d:a5:af:62:
|
338 |
+
# 4c:4d:e0:58:ac:64:34:12:03:f8:b6:8d:94:63:24:
|
339 |
+
# a4:71
|
340 |
+
# Exponent: 65537 (0x10001)
|
341 |
+
# X509v3 extensions:
|
342 |
+
# X509v3 Key Usage: critical
|
343 |
+
# Certificate Sign, CRL Sign
|
344 |
+
# X509v3 Basic Constraints: critical
|
345 |
+
# CA:TRUE
|
346 |
+
# X509v3 Subject Key Identifier:
|
347 |
+
# 6A:72:26:7A:D0:1E:EF:7D:E7:3B:69:51:D4:6C:8D:9F:90:12:66:AB
|
348 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
349 |
+
# 79:9f:1d:96:c6:b6:79:3f:22:8d:87:d3:87:03:04:60:6a:6b:
|
350 |
+
# 9a:2e:59:89:73:11:ac:43:d1:f5:13:ff:8d:39:2b:c0:f2:bd:
|
351 |
+
# 4f:70:8c:a9:2f:ea:17:c4:0b:54:9e:d4:1b:96:98:33:3c:a8:
|
352 |
+
# ad:62:a2:00:76:ab:59:69:6e:06:1d:7e:c4:b9:44:8d:98:af:
|
353 |
+
# 12:d4:61:db:0a:19:46:47:f3:eb:f7:63:c1:40:05:40:a5:d2:
|
354 |
+
# b7:f4:b5:9a:36:bf:a9:88:76:88:04:55:04:2b:9c:87:7f:1a:
|
355 |
+
# 37:3c:7e:2d:a5:1a:d8:d4:89:5e:ca:bd:ac:3d:6c:d8:6d:af:
|
356 |
+
# d5:f3:76:0f:cd:3b:88:38:22:9d:6c:93:9a:c4:3d:bf:82:1b:
|
357 |
+
# 65:3f:a6:0f:5d:aa:fc:e5:b2:15:ca:b5:ad:c6:bc:3d:d0:84:
|
358 |
+
# e8:ea:06:72:b0:4d:39:32:78:bf:3e:11:9c:0b:a4:9d:9a:21:
|
359 |
+
# f3:f0:9b:0b:30:78:db:c1:dc:87:43:fe:bc:63:9a:ca:c5:c2:
|
360 |
+
# 1c:c9:c7:8d:ff:3b:12:58:08:e6:b6:3d:ec:7a:2c:4e:fb:83:
|
361 |
+
# 96:ce:0c:3c:69:87:54:73:a4:73:c2:93:ff:51:10:ac:15:54:
|
362 |
+
# 01:d8:fc:05:b1:89:a1:7f:74:83:9a:49:d7:dc:4e:7b:8a:48:
|
363 |
+
# 6f:8b:45:f6
|
364 |
+
-----BEGIN CERTIFICATE-----
|
365 |
+
MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
|
366 |
+
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50
|
367 |
+
cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs
|
368 |
+
IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz
|
369 |
+
dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy
|
370 |
+
NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu
|
371 |
+
dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt
|
372 |
+
dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0
|
373 |
+
aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj
|
374 |
+
YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
375 |
+
AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T
|
376 |
+
RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN
|
377 |
+
cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW
|
378 |
+
wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1
|
379 |
+
U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0
|
380 |
+
jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP
|
381 |
+
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN
|
382 |
+
BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/
|
383 |
+
jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
|
384 |
+
Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v
|
385 |
+
1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R
|
386 |
+
nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH
|
387 |
+
VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g==
|
388 |
+
-----END CERTIFICATE-----
|
389 |
+
# Entrust Root Certification Authority.pem
|
390 |
+
# Certificate:
|
391 |
+
# Data:
|
392 |
+
# Version: 3 (0x2)
|
393 |
+
# Serial Number: 1164660820 (0x456b5054)
|
394 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
395 |
+
# Issuer: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
|
396 |
+
# Validity
|
397 |
+
# Not Before: Nov 27 20:23:42 2006 GMT
|
398 |
+
# Not After : Nov 27 20:53:42 2026 GMT
|
399 |
+
# Subject: C=US, O=Entrust, Inc., OU=www.entrust.net/CPS is incorporated by reference, OU=(c) 2006 Entrust, Inc., CN=Entrust Root Certification Authority
|
400 |
+
# Subject Public Key Info:
|
401 |
+
# Public Key Algorithm: rsaEncryption
|
402 |
+
# Public-Key: (2048 bit)
|
403 |
+
# Modulus:
|
404 |
+
# 00:b6:95:b6:43:42:fa:c6:6d:2a:6f:48:df:94:4c:
|
405 |
+
# 39:57:05:ee:c3:79:11:41:68:36:ed:ec:fe:9a:01:
|
406 |
+
# 8f:a1:38:28:fc:f7:10:46:66:2e:4d:1e:1a:b1:1a:
|
407 |
+
# 4e:c6:d1:c0:95:88:b0:c9:ff:31:8b:33:03:db:b7:
|
408 |
+
# 83:7b:3e:20:84:5e:ed:b2:56:28:a7:f8:e0:b9:40:
|
409 |
+
# 71:37:c5:cb:47:0e:97:2a:68:c0:22:95:62:15:db:
|
410 |
+
# 47:d9:f5:d0:2b:ff:82:4b:c9:ad:3e:de:4c:db:90:
|
411 |
+
# 80:50:3f:09:8a:84:00:ec:30:0a:3d:18:cd:fb:fd:
|
412 |
+
# 2a:59:9a:23:95:17:2c:45:9e:1f:6e:43:79:6d:0c:
|
413 |
+
# 5c:98:fe:48:a7:c5:23:47:5c:5e:fd:6e:e7:1e:b4:
|
414 |
+
# f6:68:45:d1:86:83:5b:a2:8a:8d:b1:e3:29:80:fe:
|
415 |
+
# 25:71:88:ad:be:bc:8f:ac:52:96:4b:aa:51:8d:e4:
|
416 |
+
# 13:31:19:e8:4e:4d:9f:db:ac:b3:6a:d5:bc:39:54:
|
417 |
+
# 71:ca:7a:7a:7f:90:dd:7d:1d:80:d9:81:bb:59:26:
|
418 |
+
# c2:11:fe:e6:93:e2:f7:80:e4:65:fb:34:37:0e:29:
|
419 |
+
# 80:70:4d:af:38:86:2e:9e:7f:57:af:9e:17:ae:eb:
|
420 |
+
# 1c:cb:28:21:5f:b6:1c:d8:e7:a2:04:22:f9:d3:da:
|
421 |
+
# d8:cb
|
422 |
+
# Exponent: 65537 (0x10001)
|
423 |
+
# X509v3 extensions:
|
424 |
+
# X509v3 Key Usage: critical
|
425 |
+
# Certificate Sign, CRL Sign
|
426 |
+
# X509v3 Basic Constraints: critical
|
427 |
+
# CA:TRUE
|
428 |
+
# X509v3 Private Key Usage Period:
|
429 |
+
# Not Before: Nov 27 20:23:42 2006 GMT, Not After: Nov 27 20:53:42 2026 GMT
|
430 |
+
# X509v3 Authority Key Identifier:
|
431 |
+
# keyid:68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
|
432 |
+
#
|
433 |
+
# X509v3 Subject Key Identifier:
|
434 |
+
# 68:90:E4:67:A4:A6:53:80:C7:86:66:A4:F1:F7:4B:43:FB:84:BD:6D
|
435 |
+
# 1.2.840.113533.7.65.0:
|
436 |
+
# 0...V7.1:4.0....
|
437 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
438 |
+
# 93:d4:30:b0:d7:03:20:2a:d0:f9:63:e8:91:0c:05:20:a9:5f:
|
439 |
+
# 19:ca:7b:72:4e:d4:b1:db:d0:96:fb:54:5a:19:2c:0c:08:f7:
|
440 |
+
# b2:bc:85:a8:9d:7f:6d:3b:52:b3:2a:db:e7:d4:84:8c:63:f6:
|
441 |
+
# 0f:cb:26:01:91:50:6c:f4:5f:14:e2:93:74:c0:13:9e:30:3a:
|
442 |
+
# 50:e3:b4:60:c5:1c:f0:22:44:8d:71:47:ac:c8:1a:c9:e9:9b:
|
443 |
+
# 9a:00:60:13:ff:70:7e:5f:11:4d:49:1b:b3:15:52:7b:c9:54:
|
444 |
+
# da:bf:9d:95:af:6b:9a:d8:9e:e9:f1:e4:43:8d:e2:11:44:3a:
|
445 |
+
# bf:af:bd:83:42:73:52:8b:aa:bb:a7:29:cf:f5:64:1c:0a:4d:
|
446 |
+
# d1:bc:aa:ac:9f:2a:d0:ff:7f:7f:da:7d:ea:b1:ed:30:25:c1:
|
447 |
+
# 84:da:34:d2:5b:78:83:56:ec:9c:36:c3:26:e2:11:f6:67:49:
|
448 |
+
# 1d:92:ab:8c:fb:eb:ff:7a:ee:85:4a:a7:50:80:f0:a7:5c:4a:
|
449 |
+
# 94:2e:5f:05:99:3c:52:41:e0:cd:b4:63:cf:01:43:ba:9c:83:
|
450 |
+
# dc:8f:60:3b:f3:5a:b4:b4:7b:ae:da:0b:90:38:75:ef:81:1d:
|
451 |
+
# 66:d2:f7:57:70:36:b3:bf:fc:28:af:71:25:85:5b:13:fe:1e:
|
452 |
+
# 7f:5a:b4:3c
|
453 |
+
-----BEGIN CERTIFICATE-----
|
454 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
|
455 |
+
VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
|
456 |
+
Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
|
457 |
+
KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
|
458 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
|
459 |
+
NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
|
460 |
+
NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
|
461 |
+
ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
|
462 |
+
BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
|
463 |
+
KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
|
464 |
+
Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
|
465 |
+
4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
|
466 |
+
KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
|
467 |
+
rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
|
468 |
+
94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
|
469 |
+
sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
|
470 |
+
gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
|
471 |
+
kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
|
472 |
+
vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
473 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
|
474 |
+
O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
|
475 |
+
AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
|
476 |
+
9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
|
477 |
+
eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
|
478 |
+
0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
479 |
+
-----END CERTIFICATE-----
|
480 |
+
# Entrust.net Certification Authority (2048).pem
|
481 |
+
# Certificate:
|
482 |
+
# Data:
|
483 |
+
# Version: 3 (0x2)
|
484 |
+
# Serial Number: 946069240 (0x3863def8)
|
485 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
486 |
+
# Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
|
487 |
+
# Validity
|
488 |
+
# Not Before: Dec 24 17:50:51 1999 GMT
|
489 |
+
# Not After : Jul 24 14:15:12 2029 GMT
|
490 |
+
# Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
|
491 |
+
# Subject Public Key Info:
|
492 |
+
# Public Key Algorithm: rsaEncryption
|
493 |
+
# Public-Key: (2048 bit)
|
494 |
+
# Modulus:
|
495 |
+
# 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64:
|
496 |
+
# 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7:
|
497 |
+
# 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76:
|
498 |
+
# 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf:
|
499 |
+
# e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1:
|
500 |
+
# 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29:
|
501 |
+
# b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64:
|
502 |
+
# ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c:
|
503 |
+
# e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89:
|
504 |
+
# a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90:
|
505 |
+
# 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2:
|
506 |
+
# cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a:
|
507 |
+
# fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55:
|
508 |
+
# 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86:
|
509 |
+
# 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26:
|
510 |
+
# 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e:
|
511 |
+
# 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0:
|
512 |
+
# 07:e1
|
513 |
+
# Exponent: 65537 (0x10001)
|
514 |
+
# X509v3 extensions:
|
515 |
+
# X509v3 Key Usage: critical
|
516 |
+
# Certificate Sign, CRL Sign
|
517 |
+
# X509v3 Basic Constraints: critical
|
518 |
+
# CA:TRUE
|
519 |
+
# X509v3 Subject Key Identifier:
|
520 |
+
# 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70
|
521 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
522 |
+
# 3b:9b:8f:56:9b:30:e7:53:99:7c:7a:79:a7:4d:97:d7:19:95:
|
523 |
+
# 90:fb:06:1f:ca:33:7c:46:63:8f:96:66:24:fa:40:1b:21:27:
|
524 |
+
# ca:e6:72:73:f2:4f:fe:31:99:fd:c8:0c:4c:68:53:c6:80:82:
|
525 |
+
# 13:98:fa:b6:ad:da:5d:3d:f1:ce:6e:f6:15:11:94:82:0c:ee:
|
526 |
+
# 3f:95:af:11:ab:0f:d7:2f:de:1f:03:8f:57:2c:1e:c9:bb:9a:
|
527 |
+
# 1a:44:95:eb:18:4f:a6:1f:cd:7d:57:10:2f:9b:04:09:5a:84:
|
528 |
+
# b5:6e:d8:1d:3a:e1:d6:9e:d1:6c:79:5e:79:1c:14:c5:e3:d0:
|
529 |
+
# 4c:93:3b:65:3c:ed:df:3d:be:a6:e5:95:1a:c3:b5:19:c3:bd:
|
530 |
+
# 5e:5b:bb:ff:23:ef:68:19:cb:12:93:27:5c:03:2d:6f:30:d0:
|
531 |
+
# 1e:b6:1a:ac:de:5a:f7:d1:aa:a8:27:a6:fe:79:81:c4:79:99:
|
532 |
+
# 33:57:ba:12:b0:a9:e0:42:6c:93:ca:56:de:fe:6d:84:0b:08:
|
533 |
+
# 8b:7e:8d:ea:d7:98:21:c6:f3:e7:3c:79:2f:5e:9c:d1:4c:15:
|
534 |
+
# 8d:e1:ec:22:37:cc:9a:43:0b:97:dc:80:90:8d:b3:67:9b:6f:
|
535 |
+
# 48:08:15:56:cf:bf:f1:2b:7c:5e:9a:76:e9:59:90:c5:7c:83:
|
536 |
+
# 35:11:65:51
|
537 |
+
-----BEGIN CERTIFICATE-----
|
538 |
+
MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
|
539 |
+
RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
|
540 |
+
bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
|
541 |
+
IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
|
542 |
+
ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3
|
543 |
+
MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
|
544 |
+
LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
|
545 |
+
YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
|
546 |
+
A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
|
547 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
|
548 |
+
K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
|
549 |
+
sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
|
550 |
+
MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
|
551 |
+
XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
|
552 |
+
HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
|
553 |
+
4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
|
554 |
+
HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub
|
555 |
+
j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo
|
556 |
+
U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
|
557 |
+
zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b
|
558 |
+
u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+
|
559 |
+
bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er
|
560 |
+
fF6adulZkMV8gzURZVE=
|
561 |
+
-----END CERTIFICATE-----
|
562 |
+
# GeoTrust Global CA.pem
|
563 |
+
# Certificate:
|
564 |
+
# Data:
|
565 |
+
# Version: 3 (0x2)
|
566 |
+
# Serial Number: 144470 (0x23456)
|
567 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
568 |
+
# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
|
569 |
+
# Validity
|
570 |
+
# Not Before: May 21 04:00:00 2002 GMT
|
571 |
+
# Not After : May 21 04:00:00 2022 GMT
|
572 |
+
# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA
|
573 |
+
# Subject Public Key Info:
|
574 |
+
# Public Key Algorithm: rsaEncryption
|
575 |
+
# Public-Key: (2048 bit)
|
576 |
+
# Modulus:
|
577 |
+
# 00:da:cc:18:63:30:fd:f4:17:23:1a:56:7e:5b:df:
|
578 |
+
# 3c:6c:38:e4:71:b7:78:91:d4:bc:a1:d8:4c:f8:a8:
|
579 |
+
# 43:b6:03:e9:4d:21:07:08:88:da:58:2f:66:39:29:
|
580 |
+
# bd:05:78:8b:9d:38:e8:05:b7:6a:7e:71:a4:e6:c4:
|
581 |
+
# 60:a6:b0:ef:80:e4:89:28:0f:9e:25:d6:ed:83:f3:
|
582 |
+
# ad:a6:91:c7:98:c9:42:18:35:14:9d:ad:98:46:92:
|
583 |
+
# 2e:4f:ca:f1:87:43:c1:16:95:57:2d:50:ef:89:2d:
|
584 |
+
# 80:7a:57:ad:f2:ee:5f:6b:d2:00:8d:b9:14:f8:14:
|
585 |
+
# 15:35:d9:c0:46:a3:7b:72:c8:91:bf:c9:55:2b:cd:
|
586 |
+
# d0:97:3e:9c:26:64:cc:df:ce:83:19:71:ca:4e:e6:
|
587 |
+
# d4:d5:7b:a9:19:cd:55:de:c8:ec:d2:5e:38:53:e5:
|
588 |
+
# 5c:4f:8c:2d:fe:50:23:36:fc:66:e6:cb:8e:a4:39:
|
589 |
+
# 19:00:b7:95:02:39:91:0b:0e:fe:38:2e:d1:1d:05:
|
590 |
+
# 9a:f6:4d:3e:6f:0f:07:1d:af:2c:1e:8f:60:39:e2:
|
591 |
+
# fa:36:53:13:39:d4:5e:26:2b:db:3d:a8:14:bd:32:
|
592 |
+
# eb:18:03:28:52:04:71:e5:ab:33:3d:e1:38:bb:07:
|
593 |
+
# 36:84:62:9c:79:ea:16:30:f4:5f:c0:2b:e8:71:6b:
|
594 |
+
# e4:f9
|
595 |
+
# Exponent: 65537 (0x10001)
|
596 |
+
# X509v3 extensions:
|
597 |
+
# X509v3 Basic Constraints: critical
|
598 |
+
# CA:TRUE
|
599 |
+
# X509v3 Subject Key Identifier:
|
600 |
+
# C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
601 |
+
# X509v3 Authority Key Identifier:
|
602 |
+
# keyid:C0:7A:98:68:8D:89:FB:AB:05:64:0C:11:7D:AA:7D:65:B8:CA:CC:4E
|
603 |
+
#
|
604 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
605 |
+
# 35:e3:29:6a:e5:2f:5d:54:8e:29:50:94:9f:99:1a:14:e4:8f:
|
606 |
+
# 78:2a:62:94:a2:27:67:9e:d0:cf:1a:5e:47:e9:c1:b2:a4:cf:
|
607 |
+
# dd:41:1a:05:4e:9b:4b:ee:4a:6f:55:52:b3:24:a1:37:0a:eb:
|
608 |
+
# 64:76:2a:2e:2c:f3:fd:3b:75:90:bf:fa:71:d8:c7:3d:37:d2:
|
609 |
+
# b5:05:95:62:b9:a6:de:89:3d:36:7b:38:77:48:97:ac:a6:20:
|
610 |
+
# 8f:2e:a6:c9:0c:c2:b2:99:45:00:c7:ce:11:51:22:22:e0:a5:
|
611 |
+
# ea:b6:15:48:09:64:ea:5e:4f:74:f7:05:3e:c7:8a:52:0c:db:
|
612 |
+
# 15:b4:bd:6d:9b:e5:c6:b1:54:68:a9:e3:69:90:b6:9a:a5:0f:
|
613 |
+
# b8:b9:3f:20:7d:ae:4a:b5:b8:9c:e4:1d:b6:ab:e6:94:a5:c1:
|
614 |
+
# c7:83:ad:db:f5:27:87:0e:04:6c:d5:ff:dd:a0:5d:ed:87:52:
|
615 |
+
# b7:2b:15:02:ae:39:a6:6a:74:e9:da:c4:e7:bc:4d:34:1e:a9:
|
616 |
+
# 5c:4d:33:5f:92:09:2f:88:66:5d:77:97:c7:1d:76:13:a9:d5:
|
617 |
+
# e5:f1:16:09:11:35:d5:ac:db:24:71:70:2c:98:56:0b:d9:17:
|
618 |
+
# b4:d1:e3:51:2b:5e:75:e8:d5:d0:dc:4f:34:ed:c2:05:66:80:
|
619 |
+
# a1:cb:e6:33
|
620 |
+
-----BEGIN CERTIFICATE-----
|
621 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
|
622 |
+
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
|
623 |
+
YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
|
624 |
+
EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
|
625 |
+
R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
|
626 |
+
9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
|
627 |
+
fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
|
628 |
+
iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
|
629 |
+
1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
|
630 |
+
bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
|
631 |
+
MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
|
632 |
+
ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
|
633 |
+
uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
|
634 |
+
Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
|
635 |
+
tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
|
636 |
+
PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
|
637 |
+
hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
|
638 |
+
5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
|
639 |
+
-----END CERTIFICATE-----
|
640 |
+
# GeoTrust Primary Certification Authority - G2.pem
|
641 |
+
# Certificate:
|
642 |
+
# Data:
|
643 |
+
# Version: 3 (0x2)
|
644 |
+
# Serial Number:
|
645 |
+
# 3c:b2:f4:48:0a:00:e2:fe:eb:24:3b:5e:60:3e:c3:6b
|
646 |
+
# Signature Algorithm: ecdsa-with-SHA384
|
647 |
+
# Issuer: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
|
648 |
+
# Validity
|
649 |
+
# Not Before: Nov 5 00:00:00 2007 GMT
|
650 |
+
# Not After : Jan 18 23:59:59 2038 GMT
|
651 |
+
# Subject: C=US, O=GeoTrust Inc., OU=(c) 2007 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G2
|
652 |
+
# Subject Public Key Info:
|
653 |
+
# Public Key Algorithm: id-ecPublicKey
|
654 |
+
# Public-Key: (384 bit)
|
655 |
+
# pub:
|
656 |
+
# 04:15:b1:e8:fd:03:15:43:e5:ac:eb:87:37:11:62:
|
657 |
+
# ef:d2:83:36:52:7d:45:57:0b:4a:8d:7b:54:3b:3a:
|
658 |
+
# 6e:5f:15:02:c0:50:a6:cf:25:2f:7d:ca:48:b8:c7:
|
659 |
+
# 50:63:1c:2a:21:08:7c:9a:36:d8:0b:fe:d1:26:c5:
|
660 |
+
# 58:31:30:28:25:f3:5d:5d:a3:b8:b6:a5:b4:92:ed:
|
661 |
+
# 6c:2c:9f:eb:dd:43:89:a2:3c:4b:48:91:1d:50:ec:
|
662 |
+
# 26:df:d6:60:2e:bd:21
|
663 |
+
# ASN1 OID: secp384r1
|
664 |
+
# X509v3 extensions:
|
665 |
+
# X509v3 Basic Constraints: critical
|
666 |
+
# CA:TRUE
|
667 |
+
# X509v3 Key Usage: critical
|
668 |
+
# Certificate Sign, CRL Sign
|
669 |
+
# X509v3 Subject Key Identifier:
|
670 |
+
# 15:5F:35:57:51:55:FB:25:B2:AD:03:69:FC:01:A3:FA:BE:11:55:D5
|
671 |
+
# Signature Algorithm: ecdsa-with-SHA384
|
672 |
+
# 30:64:02:30:64:96:59:a6:e8:09:de:8b:ba:fa:5a:88:88:f0:
|
673 |
+
# 1f:91:d3:46:a8:f2:4a:4c:02:63:fb:6c:5f:38:db:2e:41:93:
|
674 |
+
# a9:0e:e6:9d:dc:31:1c:b2:a0:a7:18:1c:79:e1:c7:36:02:30:
|
675 |
+
# 3a:56:af:9a:74:6c:f6:fb:83:e0:33:d3:08:5f:a1:9c:c2:5b:
|
676 |
+
# 9f:46:d6:b6:cb:91:06:63:a2:06:e7:33:ac:3e:a8:81:12:d0:
|
677 |
+
# cb:ba:d0:92:0b:b6:9e:96:aa:04:0f:8a
|
678 |
+
-----BEGIN CERTIFICATE-----
|
679 |
+
MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL
|
680 |
+
MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj
|
681 |
+
KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2
|
682 |
+
MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
683 |
+
eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV
|
684 |
+
BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw
|
685 |
+
NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV
|
686 |
+
BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
|
687 |
+
MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL
|
688 |
+
So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal
|
689 |
+
tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO
|
690 |
+
BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG
|
691 |
+
CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT
|
692 |
+
qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz
|
693 |
+
rD6ogRLQy7rQkgu2npaqBA+K
|
694 |
+
-----END CERTIFICATE-----
|
695 |
+
# GeoTrust Primary Certification Authority - G3.pem
|
696 |
+
# Certificate:
|
697 |
+
# Data:
|
698 |
+
# Version: 3 (0x2)
|
699 |
+
# Serial Number:
|
700 |
+
# 15:ac:6e:94:19:b2:79:4b:41:f6:27:a9:c3:18:0f:1f
|
701 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
702 |
+
# Issuer: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
|
703 |
+
# Validity
|
704 |
+
# Not Before: Apr 2 00:00:00 2008 GMT
|
705 |
+
# Not After : Dec 1 23:59:59 2037 GMT
|
706 |
+
# Subject: C=US, O=GeoTrust Inc., OU=(c) 2008 GeoTrust Inc. - For authorized use only, CN=GeoTrust Primary Certification Authority - G3
|
707 |
+
# Subject Public Key Info:
|
708 |
+
# Public Key Algorithm: rsaEncryption
|
709 |
+
# Public-Key: (2048 bit)
|
710 |
+
# Modulus:
|
711 |
+
# 00:dc:e2:5e:62:58:1d:33:57:39:32:33:fa:eb:cb:
|
712 |
+
# 87:8c:a7:d4:4a:dd:06:88:ea:64:8e:31:98:a5:38:
|
713 |
+
# 90:1e:98:cf:2e:63:2b:f0:46:bc:44:b2:89:a1:c0:
|
714 |
+
# 28:0c:49:70:21:95:9f:64:c0:a6:93:12:02:65:26:
|
715 |
+
# 86:c6:a5:89:f0:fa:d7:84:a0:70:af:4f:1a:97:3f:
|
716 |
+
# 06:44:d5:c9:eb:72:10:7d:e4:31:28:fb:1c:61:e6:
|
717 |
+
# 28:07:44:73:92:22:69:a7:03:88:6c:9d:63:c8:52:
|
718 |
+
# da:98:27:e7:08:4c:70:3e:b4:c9:12:c1:c5:67:83:
|
719 |
+
# 5d:33:f3:03:11:ec:6a:d0:53:e2:d1:ba:36:60:94:
|
720 |
+
# 80:bb:61:63:6c:5b:17:7e:df:40:94:1e:ab:0d:c2:
|
721 |
+
# 21:28:70:88:ff:d6:26:6c:6c:60:04:25:4e:55:7e:
|
722 |
+
# 7d:ef:bf:94:48:de:b7:1d:dd:70:8d:05:5f:88:a5:
|
723 |
+
# 9b:f2:c2:ee:ea:d1:40:41:6d:62:38:1d:56:06:c5:
|
724 |
+
# 03:47:51:20:19:fc:7b:10:0b:0e:62:ae:76:55:bf:
|
725 |
+
# 5f:77:be:3e:49:01:53:3d:98:25:03:76:24:5a:1d:
|
726 |
+
# b4:db:89:ea:79:e5:b6:b3:3b:3f:ba:4c:28:41:7f:
|
727 |
+
# 06:ac:6a:8e:c1:d0:f6:05:1d:7d:e6:42:86:e3:a5:
|
728 |
+
# d5:47
|
729 |
+
# Exponent: 65537 (0x10001)
|
730 |
+
# X509v3 extensions:
|
731 |
+
# X509v3 Basic Constraints: critical
|
732 |
+
# CA:TRUE
|
733 |
+
# X509v3 Key Usage: critical
|
734 |
+
# Certificate Sign, CRL Sign
|
735 |
+
# X509v3 Subject Key Identifier:
|
736 |
+
# C4:79:CA:8E:A1:4E:03:1D:1C:DC:6B:DB:31:5B:94:3E:3F:30:7F:2D
|
737 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
738 |
+
# 2d:c5:13:cf:56:80:7b:7a:78:bd:9f:ae:2c:99:e7:ef:da:df:
|
739 |
+
# 94:5e:09:69:a7:e7:6e:68:8c:bd:72:be:47:a9:0e:97:12:b8:
|
740 |
+
# 4a:f1:64:d3:39:df:25:34:d4:c1:cd:4e:81:f0:0f:04:c4:24:
|
741 |
+
# b3:34:96:c6:a6:aa:30:df:68:61:73:d7:f9:8e:85:89:ef:0e:
|
742 |
+
# 5e:95:28:4a:2a:27:8f:10:8e:2e:7c:86:c4:02:9e:da:0c:77:
|
743 |
+
# 65:0e:44:0d:92:fd:fd:b3:16:36:fa:11:0d:1d:8c:0e:07:89:
|
744 |
+
# 6a:29:56:f7:72:f4:dd:15:9c:77:35:66:57:ab:13:53:d8:8e:
|
745 |
+
# c1:40:c5:d7:13:16:5a:72:c7:b7:69:01:c4:7a:b1:83:01:68:
|
746 |
+
# 7d:8d:41:a1:94:18:c1:25:5c:fc:f0:fe:83:02:87:7c:0d:0d:
|
747 |
+
# cf:2e:08:5c:4a:40:0d:3e:ec:81:61:e6:24:db:ca:e0:0e:2d:
|
748 |
+
# 07:b2:3e:56:dc:8d:f5:41:85:07:48:9b:0c:0b:cb:49:3f:7d:
|
749 |
+
# ec:b7:fd:cb:8d:67:89:1a:ab:ed:bb:1e:a3:00:08:08:17:2a:
|
750 |
+
# 82:5c:31:5d:46:8a:2d:0f:86:9b:74:d9:45:fb:d4:40:b1:7a:
|
751 |
+
# aa:68:2d:86:b2:99:22:e1:c1:2b:c7:9c:f8:f3:5f:a8:82:12:
|
752 |
+
# eb:19:11:2d
|
753 |
+
-----BEGIN CERTIFICATE-----
|
754 |
+
MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB
|
755 |
+
mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT
|
756 |
+
MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
757 |
+
eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
758 |
+
cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ
|
759 |
+
BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
|
760 |
+
MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0
|
761 |
+
BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
762 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz
|
763 |
+
+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm
|
764 |
+
hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn
|
765 |
+
5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W
|
766 |
+
JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL
|
767 |
+
DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC
|
768 |
+
huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
|
769 |
+
HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB
|
770 |
+
AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB
|
771 |
+
zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN
|
772 |
+
kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
|
773 |
+
AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH
|
774 |
+
SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G
|
775 |
+
spki4cErx5z481+oghLrGREt
|
776 |
+
-----END CERTIFICATE-----
|
777 |
+
# GeoTrust Primary Certification Authority.pem
|
778 |
+
# Certificate:
|
779 |
+
# Data:
|
780 |
+
# Version: 3 (0x2)
|
781 |
+
# Serial Number:
|
782 |
+
# 18:ac:b5:6a:fd:69:b6:15:3a:63:6c:af:da:fa:c4:a1
|
783 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
784 |
+
# Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
|
785 |
+
# Validity
|
786 |
+
# Not Before: Nov 27 00:00:00 2006 GMT
|
787 |
+
# Not After : Jul 16 23:59:59 2036 GMT
|
788 |
+
# Subject: C=US, O=GeoTrust Inc., CN=GeoTrust Primary Certification Authority
|
789 |
+
# Subject Public Key Info:
|
790 |
+
# Public Key Algorithm: rsaEncryption
|
791 |
+
# Public-Key: (2048 bit)
|
792 |
+
# Modulus:
|
793 |
+
# 00:be:b8:15:7b:ff:d4:7c:7d:67:ad:83:64:7b:c8:
|
794 |
+
# 42:53:2d:df:f6:84:08:20:61:d6:01:59:6a:9c:44:
|
795 |
+
# 11:af:ef:76:fd:95:7e:ce:61:30:bb:7a:83:5f:02:
|
796 |
+
# bd:01:66:ca:ee:15:8d:6f:a1:30:9c:bd:a1:85:9e:
|
797 |
+
# 94:3a:f3:56:88:00:31:cf:d8:ee:6a:96:02:d9:ed:
|
798 |
+
# 03:8c:fb:75:6d:e7:ea:b8:55:16:05:16:9a:f4:e0:
|
799 |
+
# 5e:b1:88:c0:64:85:5c:15:4d:88:c7:b7:ba:e0:75:
|
800 |
+
# e9:ad:05:3d:9d:c7:89:48:e0:bb:28:c8:03:e1:30:
|
801 |
+
# 93:64:5e:52:c0:59:70:22:35:57:88:8a:f1:95:0a:
|
802 |
+
# 83:d7:bc:31:73:01:34:ed:ef:46:71:e0:6b:02:a8:
|
803 |
+
# 35:72:6b:97:9b:66:e0:cb:1c:79:5f:d8:1a:04:68:
|
804 |
+
# 1e:47:02:e6:9d:60:e2:36:97:01:df:ce:35:92:df:
|
805 |
+
# be:67:c7:6d:77:59:3b:8f:9d:d6:90:15:94:bc:42:
|
806 |
+
# 34:10:c1:39:f9:b1:27:3e:7e:d6:8a:75:c5:b2:af:
|
807 |
+
# 96:d3:a2:de:9b:e4:98:be:7d:e1:e9:81:ad:b6:6f:
|
808 |
+
# fc:d7:0e:da:e0:34:b0:0d:1a:77:e7:e3:08:98:ef:
|
809 |
+
# 58:fa:9c:84:b7:36:af:c2:df:ac:d2:f4:10:06:70:
|
810 |
+
# 71:35
|
811 |
+
# Exponent: 65537 (0x10001)
|
812 |
+
# X509v3 extensions:
|
813 |
+
# X509v3 Basic Constraints: critical
|
814 |
+
# CA:TRUE
|
815 |
+
# X509v3 Key Usage: critical
|
816 |
+
# Certificate Sign, CRL Sign
|
817 |
+
# X509v3 Subject Key Identifier:
|
818 |
+
# 2C:D5:50:41:97:15:8B:F0:8F:36:61:5B:4A:FB:6B:D9:99:C9:33:92
|
819 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
820 |
+
# 5a:70:7f:2c:dd:b7:34:4f:f5:86:51:a9:26:be:4b:b8:aa:f1:
|
821 |
+
# 71:0d:dc:61:c7:a0:ea:34:1e:7a:77:0f:04:35:e8:27:8f:6c:
|
822 |
+
# 90:bf:91:16:24:46:3e:4a:4e:ce:2b:16:d5:0b:52:1d:fc:1f:
|
823 |
+
# 67:a2:02:45:31:4f:ce:f3:fa:03:a7:79:9d:53:6a:d9:da:63:
|
824 |
+
# 3a:f8:80:d7:d3:99:e1:a5:e1:be:d4:55:71:98:35:3a:be:93:
|
825 |
+
# ea:ae:ad:42:b2:90:6f:e0:fc:21:4d:35:63:33:89:49:d6:9b:
|
826 |
+
# 4e:ca:c7:e7:4e:09:00:f7:da:c7:ef:99:62:99:77:b6:95:22:
|
827 |
+
# 5e:8a:a0:ab:f4:b8:78:98:ca:38:19:99:c9:72:9e:78:cd:4b:
|
828 |
+
# ac:af:19:a0:73:12:2d:fc:c2:41:ba:81:91:da:16:5a:31:b7:
|
829 |
+
# f9:b4:71:80:12:48:99:72:73:5a:59:53:c1:63:52:33:ed:a7:
|
830 |
+
# c9:d2:39:02:70:fa:e0:b1:42:66:29:aa:9b:51:ed:30:54:22:
|
831 |
+
# 14:5f:d9:ab:1d:c1:e4:94:f0:f8:f5:2b:f7:ea:ca:78:46:d6:
|
832 |
+
# b8:91:fd:a6:0d:2b:1a:14:01:3e:80:f0:42:a0:95:07:5e:6d:
|
833 |
+
# cd:cc:4b:a4:45:8d:ab:12:e8:b3:de:5a:e5:a0:7c:e8:0f:22:
|
834 |
+
# 1d:5a:e9:59
|
835 |
+
-----BEGIN CERTIFICATE-----
|
836 |
+
MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
|
837 |
+
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
|
838 |
+
R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
|
839 |
+
MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
840 |
+
Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
|
841 |
+
ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
842 |
+
AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
|
843 |
+
AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
|
844 |
+
ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
|
845 |
+
7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
|
846 |
+
kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
|
847 |
+
mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
|
848 |
+
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
|
849 |
+
KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
|
850 |
+
6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
|
851 |
+
4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
|
852 |
+
oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
|
853 |
+
UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
|
854 |
+
AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
|
855 |
+
-----END CERTIFICATE-----
|
856 |
+
# Go Daddy Class 2 Certification Authority.pem
|
857 |
+
# Certificate:
|
858 |
+
# Data:
|
859 |
+
# Version: 3 (0x2)
|
860 |
+
# Serial Number: 0 (0x0)
|
861 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
862 |
+
# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
|
863 |
+
# Validity
|
864 |
+
# Not Before: Jun 29 17:06:20 2004 GMT
|
865 |
+
# Not After : Jun 29 17:06:20 2034 GMT
|
866 |
+
# Subject: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
|
867 |
+
# Subject Public Key Info:
|
868 |
+
# Public Key Algorithm: rsaEncryption
|
869 |
+
# Public-Key: (2048 bit)
|
870 |
+
# Modulus:
|
871 |
+
# 00:de:9d:d7:ea:57:18:49:a1:5b:eb:d7:5f:48:86:
|
872 |
+
# ea:be:dd:ff:e4:ef:67:1c:f4:65:68:b3:57:71:a0:
|
873 |
+
# 5e:77:bb:ed:9b:49:e9:70:80:3d:56:18:63:08:6f:
|
874 |
+
# da:f2:cc:d0:3f:7f:02:54:22:54:10:d8:b2:81:d4:
|
875 |
+
# c0:75:3d:4b:7f:c7:77:c3:3e:78:ab:1a:03:b5:20:
|
876 |
+
# 6b:2f:6a:2b:b1:c5:88:7e:c4:bb:1e:b0:c1:d8:45:
|
877 |
+
# 27:6f:aa:37:58:f7:87:26:d7:d8:2d:f6:a9:17:b7:
|
878 |
+
# 1f:72:36:4e:a6:17:3f:65:98:92:db:2a:6e:5d:a2:
|
879 |
+
# fe:88:e0:0b:de:7f:e5:8d:15:e1:eb:cb:3a:d5:e2:
|
880 |
+
# 12:a2:13:2d:d8:8e:af:5f:12:3d:a0:08:05:08:b6:
|
881 |
+
# 5c:a5:65:38:04:45:99:1e:a3:60:60:74:c5:41:a5:
|
882 |
+
# 72:62:1b:62:c5:1f:6f:5f:1a:42:be:02:51:65:a8:
|
883 |
+
# ae:23:18:6a:fc:78:03:a9:4d:7f:80:c3:fa:ab:5a:
|
884 |
+
# fc:a1:40:a4:ca:19:16:fe:b2:c8:ef:5e:73:0d:ee:
|
885 |
+
# 77:bd:9a:f6:79:98:bc:b1:07:67:a2:15:0d:dd:a0:
|
886 |
+
# 58:c6:44:7b:0a:3e:62:28:5f:ba:41:07:53:58:cf:
|
887 |
+
# 11:7e:38:74:c5:f8:ff:b5:69:90:8f:84:74:ea:97:
|
888 |
+
# 1b:af
|
889 |
+
# Exponent: 3 (0x3)
|
890 |
+
# X509v3 extensions:
|
891 |
+
# X509v3 Subject Key Identifier:
|
892 |
+
# D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
|
893 |
+
# X509v3 Authority Key Identifier:
|
894 |
+
# keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
|
895 |
+
# DirName:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
|
896 |
+
# serial:00
|
897 |
+
#
|
898 |
+
# X509v3 Basic Constraints:
|
899 |
+
# CA:TRUE
|
900 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
901 |
+
# 32:4b:f3:b2:ca:3e:91:fc:12:c6:a1:07:8c:8e:77:a0:33:06:
|
902 |
+
# 14:5c:90:1e:18:f7:08:a6:3d:0a:19:f9:87:80:11:6e:69:e4:
|
903 |
+
# 96:17:30:ff:34:91:63:72:38:ee:cc:1c:01:a3:1d:94:28:a4:
|
904 |
+
# 31:f6:7a:c4:54:d7:f6:e5:31:58:03:a2:cc:ce:62:db:94:45:
|
905 |
+
# 73:b5:bf:45:c9:24:b5:d5:82:02:ad:23:79:69:8d:b8:b6:4d:
|
906 |
+
# ce:cf:4c:ca:33:23:e8:1c:88:aa:9d:8b:41:6e:16:c9:20:e5:
|
907 |
+
# 89:9e:cd:3b:da:70:f7:7e:99:26:20:14:54:25:ab:6e:73:85:
|
908 |
+
# e6:9b:21:9d:0a:6c:82:0e:a8:f8:c2:0c:fa:10:1e:6c:96:ef:
|
909 |
+
# 87:0d:c4:0f:61:8b:ad:ee:83:2b:95:f8:8e:92:84:72:39:eb:
|
910 |
+
# 20:ea:83:ed:83:cd:97:6e:08:bc:eb:4e:26:b6:73:2b:e4:d3:
|
911 |
+
# f6:4c:fe:26:71:e2:61:11:74:4a:ff:57:1a:87:0f:75:48:2e:
|
912 |
+
# cf:51:69:17:a0:02:12:61:95:d5:d1:40:b2:10:4c:ee:c4:ac:
|
913 |
+
# 10:43:a6:a5:9e:0a:d5:95:62:9a:0d:cf:88:82:c5:32:0c:e4:
|
914 |
+
# 2b:9f:45:e6:0d:9f:28:9c:b1:b9:2a:5a:57:ad:37:0f:af:1d:
|
915 |
+
# 7f:db:bd:9f
|
916 |
+
-----BEGIN CERTIFICATE-----
|
917 |
+
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
|
918 |
+
MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
|
919 |
+
YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
|
920 |
+
MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
|
921 |
+
ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
|
922 |
+
MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
|
923 |
+
ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
|
924 |
+
PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
|
925 |
+
wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
|
926 |
+
EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
|
927 |
+
avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
|
928 |
+
YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
|
929 |
+
sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
|
930 |
+
/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
|
931 |
+
IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
|
932 |
+
YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
|
933 |
+
ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
|
934 |
+
OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
|
935 |
+
TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
|
936 |
+
HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
|
937 |
+
dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
|
938 |
+
ReYNnyicsbkqWletNw+vHX/bvZ8=
|
939 |
+
-----END CERTIFICATE-----
|
940 |
+
# Go Daddy Root Certificate Authority - G2.pem
|
941 |
+
# Certificate:
|
942 |
+
# Data:
|
943 |
+
# Version: 3 (0x2)
|
944 |
+
# Serial Number: 0 (0x0)
|
945 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
946 |
+
# Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
|
947 |
+
# Validity
|
948 |
+
# Not Before: Sep 1 00:00:00 2009 GMT
|
949 |
+
# Not After : Dec 31 23:59:59 2037 GMT
|
950 |
+
# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., CN=Go Daddy Root Certificate Authority - G2
|
951 |
+
# Subject Public Key Info:
|
952 |
+
# Public Key Algorithm: rsaEncryption
|
953 |
+
# Public-Key: (2048 bit)
|
954 |
+
# Modulus:
|
955 |
+
# 00:bf:71:62:08:f1:fa:59:34:f7:1b:c9:18:a3:f7:
|
956 |
+
# 80:49:58:e9:22:83:13:a6:c5:20:43:01:3b:84:f1:
|
957 |
+
# e6:85:49:9f:27:ea:f6:84:1b:4e:a0:b4:db:70:98:
|
958 |
+
# c7:32:01:b1:05:3e:07:4e:ee:f4:fa:4f:2f:59:30:
|
959 |
+
# 22:e7:ab:19:56:6b:e2:80:07:fc:f3:16:75:80:39:
|
960 |
+
# 51:7b:e5:f9:35:b6:74:4e:a9:8d:82:13:e4:b6:3f:
|
961 |
+
# a9:03:83:fa:a2:be:8a:15:6a:7f:de:0b:c3:b6:19:
|
962 |
+
# 14:05:ca:ea:c3:a8:04:94:3b:46:7c:32:0d:f3:00:
|
963 |
+
# 66:22:c8:8d:69:6d:36:8c:11:18:b7:d3:b2:1c:60:
|
964 |
+
# b4:38:fa:02:8c:ce:d3:dd:46:07:de:0a:3e:eb:5d:
|
965 |
+
# 7c:c8:7c:fb:b0:2b:53:a4:92:62:69:51:25:05:61:
|
966 |
+
# 1a:44:81:8c:2c:a9:43:96:23:df:ac:3a:81:9a:0e:
|
967 |
+
# 29:c5:1c:a9:e9:5d:1e:b6:9e:9e:30:0a:39:ce:f1:
|
968 |
+
# 88:80:fb:4b:5d:cc:32:ec:85:62:43:25:34:02:56:
|
969 |
+
# 27:01:91:b4:3b:70:2a:3f:6e:b1:e8:9c:88:01:7d:
|
970 |
+
# 9f:d4:f9:db:53:6d:60:9d:bf:2c:e7:58:ab:b8:5f:
|
971 |
+
# 46:fc:ce:c4:1b:03:3c:09:eb:49:31:5c:69:46:b3:
|
972 |
+
# e0:47
|
973 |
+
# Exponent: 65537 (0x10001)
|
974 |
+
# X509v3 extensions:
|
975 |
+
# X509v3 Basic Constraints: critical
|
976 |
+
# CA:TRUE
|
977 |
+
# X509v3 Key Usage: critical
|
978 |
+
# Certificate Sign, CRL Sign
|
979 |
+
# X509v3 Subject Key Identifier:
|
980 |
+
# 3A:9A:85:07:10:67:28:B6:EF:F6:BD:05:41:6E:20:C1:94:DA:0F:DE
|
981 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
982 |
+
# 99:db:5d:79:d5:f9:97:59:67:03:61:f1:7e:3b:06:31:75:2d:
|
983 |
+
# a1:20:8e:4f:65:87:b4:f7:a6:9c:bc:d8:e9:2f:d0:db:5a:ee:
|
984 |
+
# cf:74:8c:73:b4:38:42:da:05:7b:f8:02:75:b8:fd:a5:b1:d7:
|
985 |
+
# ae:f6:d7:de:13:cb:53:10:7e:8a:46:d1:97:fa:b7:2e:2b:11:
|
986 |
+
# ab:90:b0:27:80:f9:e8:9f:5a:e9:37:9f:ab:e4:df:6c:b3:85:
|
987 |
+
# 17:9d:3d:d9:24:4f:79:91:35:d6:5f:04:eb:80:83:ab:9a:02:
|
988 |
+
# 2d:b5:10:f4:d8:90:c7:04:73:40:ed:72:25:a0:a9:9f:ec:9e:
|
989 |
+
# ab:68:12:99:57:c6:8f:12:3a:09:a4:bd:44:fd:06:15:37:c1:
|
990 |
+
# 9b:e4:32:a3:ed:38:e8:d8:64:f3:2c:7e:14:fc:02:ea:9f:cd:
|
991 |
+
# ff:07:68:17:db:22:90:38:2d:7a:8d:d1:54:f1:69:e3:5f:33:
|
992 |
+
# ca:7a:3d:7b:0a:e3:ca:7f:5f:39:e5:e2:75:ba:c5:76:18:33:
|
993 |
+
# ce:2c:f0:2f:4c:ad:f7:b1:e7:ce:4f:a8:c4:9b:4a:54:06:c5:
|
994 |
+
# 7f:7d:d5:08:0f:e2:1c:fe:7e:17:b8:ac:5e:f6:d4:16:b2:43:
|
995 |
+
# 09:0c:4d:f6:a7:6b:b4:99:84:65:ca:7a:88:e2:e2:44:be:5c:
|
996 |
+
# f7:ea:1c:f5
|
997 |
+
-----BEGIN CERTIFICATE-----
|
998 |
+
MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
|
999 |
+
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
|
1000 |
+
EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
|
1001 |
+
ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
|
1002 |
+
NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
|
1003 |
+
EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
|
1004 |
+
AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
|
1005 |
+
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
|
1006 |
+
E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
|
1007 |
+
/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
|
1008 |
+
DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
|
1009 |
+
GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
|
1010 |
+
tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
|
1011 |
+
AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
|
1012 |
+
FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
|
1013 |
+
WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
|
1014 |
+
9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
|
1015 |
+
gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
|
1016 |
+
2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
|
1017 |
+
LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
|
1018 |
+
4uJEvlz36hz1
|
1019 |
+
-----END CERTIFICATE-----
|
1020 |
+
# Go Daddy Secure Certification Authority serialNumber=07969287.pem
|
1021 |
+
# Certificate:
|
1022 |
+
# Data:
|
1023 |
+
# Version: 3 (0x2)
|
1024 |
+
# Serial Number: 769 (0x301)
|
1025 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
1026 |
+
# Issuer: C=US, O=The Go Daddy Group, Inc., OU=Go Daddy Class 2 Certification Authority
|
1027 |
+
# Validity
|
1028 |
+
# Not Before: Nov 16 01:54:37 2006 GMT
|
1029 |
+
# Not After : Nov 16 01:54:37 2026 GMT
|
1030 |
+
# Subject: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certificates.godaddy.com/repository, CN=Go Daddy Secure Certification Authority/serialNumber=07969287
|
1031 |
+
# Subject Public Key Info:
|
1032 |
+
# Public Key Algorithm: rsaEncryption
|
1033 |
+
# Public-Key: (2048 bit)
|
1034 |
+
# Modulus:
|
1035 |
+
# 00:c4:2d:d5:15:8c:9c:26:4c:ec:32:35:eb:5f:b8:
|
1036 |
+
# 59:01:5a:a6:61:81:59:3b:70:63:ab:e3:dc:3d:c7:
|
1037 |
+
# 2a:b8:c9:33:d3:79:e4:3a:ed:3c:30:23:84:8e:b3:
|
1038 |
+
# 30:14:b6:b2:87:c3:3d:95:54:04:9e:df:99:dd:0b:
|
1039 |
+
# 25:1e:21:de:65:29:7e:35:a8:a9:54:eb:f6:f7:32:
|
1040 |
+
# 39:d4:26:55:95:ad:ef:fb:fe:58:86:d7:9e:f4:00:
|
1041 |
+
# 8d:8c:2a:0c:bd:42:04:ce:a7:3f:04:f6:ee:80:f2:
|
1042 |
+
# aa:ef:52:a1:69:66:da:be:1a:ad:5d:da:2c:66:ea:
|
1043 |
+
# 1a:6b:bb:e5:1a:51:4a:00:2f:48:c7:98:75:d8:b9:
|
1044 |
+
# 29:c8:ee:f8:66:6d:0a:9c:b3:f3:fc:78:7c:a2:f8:
|
1045 |
+
# a3:f2:b5:c3:f3:b9:7a:91:c1:a7:e6:25:2e:9c:a8:
|
1046 |
+
# ed:12:65:6e:6a:f6:12:44:53:70:30:95:c3:9c:2b:
|
1047 |
+
# 58:2b:3d:08:74:4a:f2:be:51:b0:bf:87:d0:4c:27:
|
1048 |
+
# 58:6b:b5:35:c5:9d:af:17:31:f8:0b:8f:ee:ad:81:
|
1049 |
+
# 36:05:89:08:98:cf:3a:af:25:87:c0:49:ea:a7:fd:
|
1050 |
+
# 67:f7:45:8e:97:cc:14:39:e2:36:85:b5:7e:1a:37:
|
1051 |
+
# fd:16:f6:71:11:9a:74:30:16:fe:13:94:a3:3f:84:
|
1052 |
+
# 0d:4f
|
1053 |
+
# Exponent: 65537 (0x10001)
|
1054 |
+
# X509v3 extensions:
|
1055 |
+
# X509v3 Subject Key Identifier:
|
1056 |
+
# FD:AC:61:32:93:6C:45:D6:E2:EE:85:5F:9A:BA:E7:76:99:68:CC:E7
|
1057 |
+
# X509v3 Authority Key Identifier:
|
1058 |
+
# keyid:D2:C4:B0:D2:91:D4:4C:11:71:B3:61:CB:3D:A1:FE:DD:A8:6A:D4:E3
|
1059 |
+
#
|
1060 |
+
# X509v3 Basic Constraints: critical
|
1061 |
+
# CA:TRUE, pathlen:0
|
1062 |
+
# Authority Information Access:
|
1063 |
+
# OCSP - URI:http://ocsp.godaddy.com
|
1064 |
+
#
|
1065 |
+
# X509v3 CRL Distribution Points:
|
1066 |
+
#
|
1067 |
+
# Full Name:
|
1068 |
+
# URI:http://certificates.godaddy.com/repository/gdroot.crl
|
1069 |
+
#
|
1070 |
+
# X509v3 Certificate Policies:
|
1071 |
+
# Policy: X509v3 Any Policy
|
1072 |
+
# CPS: http://certificates.godaddy.com/repository
|
1073 |
+
#
|
1074 |
+
# X509v3 Key Usage: critical
|
1075 |
+
# Certificate Sign, CRL Sign
|
1076 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
1077 |
+
# d2:86:c0:ec:bd:f9:a1:b6:67:ee:66:0b:a2:06:3a:04:50:8e:
|
1078 |
+
# 15:72:ac:4a:74:95:53:cb:37:cb:44:49:ef:07:90:6b:33:d9:
|
1079 |
+
# 96:f0:94:56:a5:13:30:05:3c:85:32:21:7b:c9:c7:0a:a8:24:
|
1080 |
+
# a4:90:de:46:d3:25:23:14:03:67:c2:10:d6:6f:0f:5d:7b:7a:
|
1081 |
+
# cc:9f:c5:58:2a:c1:c4:9e:21:a8:5a:f3:ac:a4:46:f3:9e:e4:
|
1082 |
+
# 63:cb:2f:90:a4:29:29:01:d9:72:2c:29:df:37:01:27:bc:4f:
|
1083 |
+
# ee:68:d3:21:8f:c0:b3:e4:f5:09:ed:d2:10:aa:53:b4:be:f0:
|
1084 |
+
# cc:59:0b:d6:3b:96:1c:95:24:49:df:ce:ec:fd:a7:48:91:14:
|
1085 |
+
# 45:0e:3a:36:6f:da:45:b3:45:a2:41:c9:d4:d7:44:4e:3e:b9:
|
1086 |
+
# 74:76:d5:a2:13:55:2c:c6:87:a3:b5:99:ac:06:84:87:7f:75:
|
1087 |
+
# 06:fc:bf:14:4c:0e:cc:6e:c4:df:3d:b7:12:71:f4:e8:f1:51:
|
1088 |
+
# 40:22:28:49:e0:1d:4b:87:a8:34:cc:06:a2:dd:12:5a:d1:86:
|
1089 |
+
# 36:64:03:35:6f:6f:77:6e:eb:f2:85:50:98:5e:ab:03:53:ad:
|
1090 |
+
# 91:23:63:1f:16:9c:cd:b9:b2:05:63:3a:e1:f4:68:1b:17:05:
|
1091 |
+
# 35:95:53:ee
|
1092 |
+
-----BEGIN CERTIFICATE-----
|
1093 |
+
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
|
1094 |
+
ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
1095 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
|
1096 |
+
MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
|
1097 |
+
QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
|
1098 |
+
b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
|
1099 |
+
b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
|
1100 |
+
YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
|
1101 |
+
AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
|
1102 |
+
KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
|
1103 |
+
VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
|
1104 |
+
SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
|
1105 |
+
cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
|
1106 |
+
6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
|
1107 |
+
MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
|
1108 |
+
kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
|
1109 |
+
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
|
1110 |
+
BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
|
1111 |
+
c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
|
1112 |
+
AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
|
1113 |
+
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
|
1114 |
+
OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
|
1115 |
+
A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
|
1116 |
+
0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
|
1117 |
+
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
|
1118 |
+
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
|
1119 |
+
U+4=
|
1120 |
+
-----END CERTIFICATE-----
|
1121 |
+
# Thawte Premium Server CA.pem
|
1122 |
+
# Certificate:
|
1123 |
+
# Data:
|
1124 |
+
# Version: 3 (0x2)
|
1125 |
+
# Serial Number: 1 (0x1)
|
1126 |
+
# Signature Algorithm: md5WithRSAEncryption
|
1127 |
+
# Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
|
1128 |
+
# Validity
|
1129 |
+
# Not Before: Aug 1 00:00:00 1996 GMT
|
1130 |
+
# Not After : Dec 31 23:59:59 2020 GMT
|
1131 |
+
# Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/emailAddress=premium-server@thawte.com
|
1132 |
+
# Subject Public Key Info:
|
1133 |
+
# Public Key Algorithm: rsaEncryption
|
1134 |
+
# Public-Key: (1024 bit)
|
1135 |
+
# Modulus:
|
1136 |
+
# 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f:
|
1137 |
+
# 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18:
|
1138 |
+
# 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af:
|
1139 |
+
# 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2:
|
1140 |
+
# 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93:
|
1141 |
+
# cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44:
|
1142 |
+
# 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73:
|
1143 |
+
# b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07:
|
1144 |
+
# 8d:f4:42:4d:e7:40:9d:1c:37
|
1145 |
+
# Exponent: 65537 (0x10001)
|
1146 |
+
# X509v3 extensions:
|
1147 |
+
# X509v3 Basic Constraints: critical
|
1148 |
+
# CA:TRUE
|
1149 |
+
# Signature Algorithm: md5WithRSAEncryption
|
1150 |
+
# 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7:
|
1151 |
+
# c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5:
|
1152 |
+
# 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb:
|
1153 |
+
# c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59:
|
1154 |
+
# 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9:
|
1155 |
+
# a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92:
|
1156 |
+
# 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07:
|
1157 |
+
# 14:42
|
1158 |
+
-----BEGIN CERTIFICATE-----
|
1159 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
|
1160 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
1161 |
+
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
1162 |
+
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
|
1163 |
+
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
|
1164 |
+
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
|
1165 |
+
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
|
1166 |
+
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
1167 |
+
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
|
1168 |
+
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
|
1169 |
+
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
|
1170 |
+
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
|
1171 |
+
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
|
1172 |
+
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
|
1173 |
+
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
|
1174 |
+
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
|
1175 |
+
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
|
1176 |
+
-----END CERTIFICATE-----
|
1177 |
+
# Thawte Primary Root CA - G2.pem
|
1178 |
+
# Certificate:
|
1179 |
+
# Data:
|
1180 |
+
# Version: 3 (0x2)
|
1181 |
+
# Serial Number:
|
1182 |
+
# 35:fc:26:5c:d9:84:4f:c9:3d:26:3d:57:9b:ae:d7:56
|
1183 |
+
# Signature Algorithm: ecdsa-with-SHA384
|
1184 |
+
# Issuer: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
|
1185 |
+
# Validity
|
1186 |
+
# Not Before: Nov 5 00:00:00 2007 GMT
|
1187 |
+
# Not After : Jan 18 23:59:59 2038 GMT
|
1188 |
+
# Subject: C=US, O=thawte, Inc., OU=(c) 2007 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G2
|
1189 |
+
# Subject Public Key Info:
|
1190 |
+
# Public Key Algorithm: id-ecPublicKey
|
1191 |
+
# Public-Key: (384 bit)
|
1192 |
+
# pub:
|
1193 |
+
# 04:a2:d5:9c:82:7b:95:9d:f1:52:78:87:fe:8a:16:
|
1194 |
+
# bf:05:e6:df:a3:02:4f:0d:07:c6:00:51:ba:0c:02:
|
1195 |
+
# 52:2d:22:a4:42:39:c4:fe:8f:ea:c9:c1:be:d4:4d:
|
1196 |
+
# ff:9f:7a:9e:e2:b1:7c:9a:ad:a7:86:09:73:87:d1:
|
1197 |
+
# e7:9a:e3:7a:a5:aa:6e:fb:ba:b3:70:c0:67:88:a2:
|
1198 |
+
# 35:d4:a3:9a:b1:fd:ad:c2:ef:31:fa:a8:b9:f3:fb:
|
1199 |
+
# 08:c6:91:d1:fb:29:95
|
1200 |
+
# ASN1 OID: secp384r1
|
1201 |
+
# X509v3 extensions:
|
1202 |
+
# X509v3 Basic Constraints: critical
|
1203 |
+
# CA:TRUE
|
1204 |
+
# X509v3 Key Usage: critical
|
1205 |
+
# Certificate Sign, CRL Sign
|
1206 |
+
# X509v3 Subject Key Identifier:
|
1207 |
+
# 9A:D8:00:30:00:E7:6B:7F:85:18:EE:8B:B6:CE:8A:0C:F8:11:E1:BB
|
1208 |
+
# Signature Algorithm: ecdsa-with-SHA384
|
1209 |
+
# 30:66:02:31:00:dd:f8:e0:57:47:5b:a7:e6:0a:c3:bd:f5:80:
|
1210 |
+
# 8a:97:35:0d:1b:89:3c:54:86:77:28:ca:a1:f4:79:de:b5:e6:
|
1211 |
+
# 38:b0:f0:65:70:8c:7f:02:54:c2:bf:ff:d8:a1:3e:d9:cf:02:
|
1212 |
+
# 31:00:c4:8d:94:fc:dc:53:d2:dc:9d:78:16:1f:15:33:23:53:
|
1213 |
+
# 52:e3:5a:31:5d:9d:ca:ae:bd:13:29:44:0d:27:5b:a8:e7:68:
|
1214 |
+
# 9c:12:f7:58:3f:2e:72:02:57:a3:8f:a1:14:2e
|
1215 |
+
-----BEGIN CERTIFICATE-----
|
1216 |
+
MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL
|
1217 |
+
MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp
|
1218 |
+
IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi
|
1219 |
+
BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw
|
1220 |
+
MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
|
1221 |
+
d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig
|
1222 |
+
YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v
|
1223 |
+
dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/
|
1224 |
+
BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6
|
1225 |
+
papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E
|
1226 |
+
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K
|
1227 |
+
DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3
|
1228 |
+
KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox
|
1229 |
+
XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
|
1230 |
+
-----END CERTIFICATE-----
|
1231 |
+
# Thawte Primary Root CA - G3.pem
|
1232 |
+
# Certificate:
|
1233 |
+
# Data:
|
1234 |
+
# Version: 3 (0x2)
|
1235 |
+
# Serial Number:
|
1236 |
+
# 60:01:97:b7:46:a7:ea:b4:b4:9a:d6:4b:2f:f7:90:fb
|
1237 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
1238 |
+
# Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
|
1239 |
+
# Validity
|
1240 |
+
# Not Before: Apr 2 00:00:00 2008 GMT
|
1241 |
+
# Not After : Dec 1 23:59:59 2037 GMT
|
1242 |
+
# Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2008 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA - G3
|
1243 |
+
# Subject Public Key Info:
|
1244 |
+
# Public Key Algorithm: rsaEncryption
|
1245 |
+
# Public-Key: (2048 bit)
|
1246 |
+
# Modulus:
|
1247 |
+
# 00:b2:bf:27:2c:fb:db:d8:5b:dd:78:7b:1b:9e:77:
|
1248 |
+
# 66:81:cb:3e:bc:7c:ae:f3:a6:27:9a:34:a3:68:31:
|
1249 |
+
# 71:38:33:62:e4:f3:71:66:79:b1:a9:65:a3:a5:8b:
|
1250 |
+
# d5:8f:60:2d:3f:42:cc:aa:6b:32:c0:23:cb:2c:41:
|
1251 |
+
# dd:e4:df:fc:61:9c:e2:73:b2:22:95:11:43:18:5f:
|
1252 |
+
# c4:b6:1f:57:6c:0a:05:58:22:c8:36:4c:3a:7c:a5:
|
1253 |
+
# d1:cf:86:af:88:a7:44:02:13:74:71:73:0a:42:59:
|
1254 |
+
# 02:f8:1b:14:6b:42:df:6f:5f:ba:6b:82:a2:9d:5b:
|
1255 |
+
# e7:4a:bd:1e:01:72:db:4b:74:e8:3b:7f:7f:7d:1f:
|
1256 |
+
# 04:b4:26:9b:e0:b4:5a:ac:47:3d:55:b8:d7:b0:26:
|
1257 |
+
# 52:28:01:31:40:66:d8:d9:24:bd:f6:2a:d8:ec:21:
|
1258 |
+
# 49:5c:9b:f6:7a:e9:7f:55:35:7e:96:6b:8d:93:93:
|
1259 |
+
# 27:cb:92:bb:ea:ac:40:c0:9f:c2:f8:80:cf:5d:f4:
|
1260 |
+
# 5a:dc:ce:74:86:a6:3e:6c:0b:53:ca:bd:92:ce:19:
|
1261 |
+
# 06:72:e6:0c:5c:38:69:c7:04:d6:bc:6c:ce:5b:f6:
|
1262 |
+
# f7:68:9c:dc:25:15:48:88:a1:e9:a9:f8:98:9c:e0:
|
1263 |
+
# f3:d5:31:28:61:11:6c:67:96:8d:39:99:cb:c2:45:
|
1264 |
+
# 24:39
|
1265 |
+
# Exponent: 65537 (0x10001)
|
1266 |
+
# X509v3 extensions:
|
1267 |
+
# X509v3 Basic Constraints: critical
|
1268 |
+
# CA:TRUE
|
1269 |
+
# X509v3 Key Usage: critical
|
1270 |
+
# Certificate Sign, CRL Sign
|
1271 |
+
# X509v3 Subject Key Identifier:
|
1272 |
+
# AD:6C:AA:94:60:9C:ED:E4:FF:FA:3E:0A:74:2B:63:03:F7:B6:59:BF
|
1273 |
+
# Signature Algorithm: sha256WithRSAEncryption
|
1274 |
+
# 1a:40:d8:95:65:ac:09:92:89:c6:39:f4:10:e5:a9:0e:66:53:
|
1275 |
+
# 5d:78:de:fa:24:91:bb:e7:44:51:df:c6:16:34:0a:ef:6a:44:
|
1276 |
+
# 51:ea:2b:07:8a:03:7a:c3:eb:3f:0a:2c:52:16:a0:2b:43:b9:
|
1277 |
+
# 25:90:3f:70:a9:33:25:6d:45:1a:28:3b:27:cf:aa:c3:29:42:
|
1278 |
+
# 1b:df:3b:4c:c0:33:34:5b:41:88:bf:6b:2b:65:af:28:ef:b2:
|
1279 |
+
# f5:c3:aa:66:ce:7b:56:ee:b7:c8:cb:67:c1:c9:9c:1a:18:b8:
|
1280 |
+
# c4:c3:49:03:f1:60:0e:50:cd:46:c5:f3:77:79:f7:b6:15:e0:
|
1281 |
+
# 38:db:c7:2f:28:a0:0c:3f:77:26:74:d9:25:12:da:31:da:1a:
|
1282 |
+
# 1e:dc:29:41:91:22:3c:69:a7:bb:02:f2:b6:5c:27:03:89:f4:
|
1283 |
+
# 06:ea:9b:e4:72:82:e3:a1:09:c1:e9:00:19:d3:3e:d4:70:6b:
|
1284 |
+
# ba:71:a6:aa:58:ae:f4:bb:e9:6c:b6:ef:87:cc:9b:bb:ff:39:
|
1285 |
+
# e6:56:61:d3:0a:a7:c4:5c:4c:60:7b:05:77:26:7a:bf:d8:07:
|
1286 |
+
# 52:2c:62:f7:70:63:d9:39:bc:6f:1c:c2:79:dc:76:29:af:ce:
|
1287 |
+
# c5:2c:64:04:5e:88:36:6e:31:d4:40:1a:62:34:36:3f:35:01:
|
1288 |
+
# ae:ac:63:a0
|
1289 |
+
-----BEGIN CERTIFICATE-----
|
1290 |
+
MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB
|
1291 |
+
rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
1292 |
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
1293 |
+
MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV
|
1294 |
+
BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa
|
1295 |
+
Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl
|
1296 |
+
LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u
|
1297 |
+
MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl
|
1298 |
+
ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz
|
1299 |
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm
|
1300 |
+
gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8
|
1301 |
+
YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf
|
1302 |
+
b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9
|
1303 |
+
9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S
|
1304 |
+
zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk
|
1305 |
+
OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
|
1306 |
+
HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA
|
1307 |
+
2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW
|
1308 |
+
oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
|
1309 |
+
t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c
|
1310 |
+
KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM
|
1311 |
+
m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu
|
1312 |
+
MdRAGmI0Nj81Aa6sY6A=
|
1313 |
+
-----END CERTIFICATE-----
|
1314 |
+
# Thawte Primary Root CA.pem
|
1315 |
+
# Certificate:
|
1316 |
+
# Data:
|
1317 |
+
# Version: 3 (0x2)
|
1318 |
+
# Serial Number:
|
1319 |
+
# 34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d
|
1320 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
1321 |
+
# Issuer: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
|
1322 |
+
# Validity
|
1323 |
+
# Not Before: Nov 17 00:00:00 2006 GMT
|
1324 |
+
# Not After : Jul 16 23:59:59 2036 GMT
|
1325 |
+
# Subject: C=US, O=thawte, Inc., OU=Certification Services Division, OU=(c) 2006 thawte, Inc. - For authorized use only, CN=thawte Primary Root CA
|
1326 |
+
# Subject Public Key Info:
|
1327 |
+
# Public Key Algorithm: rsaEncryption
|
1328 |
+
# Public-Key: (2048 bit)
|
1329 |
+
# Modulus:
|
1330 |
+
# 00:ac:a0:f0:fb:80:59:d4:9c:c7:a4:cf:9d:a1:59:
|
1331 |
+
# 73:09:10:45:0c:0d:2c:6e:68:f1:6c:5b:48:68:49:
|
1332 |
+
# 59:37:fc:0b:33:19:c2:77:7f:cc:10:2d:95:34:1c:
|
1333 |
+
# e6:eb:4d:09:a7:1c:d2:b8:c9:97:36:02:b7:89:d4:
|
1334 |
+
# 24:5f:06:c0:cc:44:94:94:8d:02:62:6f:eb:5a:dd:
|
1335 |
+
# 11:8d:28:9a:5c:84:90:10:7a:0d:bd:74:66:2f:6a:
|
1336 |
+
# 38:a0:e2:d5:54:44:eb:1d:07:9f:07:ba:6f:ee:e9:
|
1337 |
+
# fd:4e:0b:29:f5:3e:84:a0:01:f1:9c:ab:f8:1c:7e:
|
1338 |
+
# 89:a4:e8:a1:d8:71:65:0d:a3:51:7b:ee:bc:d2:22:
|
1339 |
+
# 60:0d:b9:5b:9d:df:ba:fc:51:5b:0b:af:98:b2:e9:
|
1340 |
+
# 2e:e9:04:e8:62:87:de:2b:c8:d7:4e:c1:4c:64:1e:
|
1341 |
+
# dd:cf:87:58:ba:4a:4f:ca:68:07:1d:1c:9d:4a:c6:
|
1342 |
+
# d5:2f:91:cc:7c:71:72:1c:c5:c0:67:eb:32:fd:c9:
|
1343 |
+
# 92:5c:94:da:85:c0:9b:bf:53:7d:2b:09:f4:8c:9d:
|
1344 |
+
# 91:1f:97:6a:52:cb:de:09:36:a4:77:d8:7b:87:50:
|
1345 |
+
# 44:d5:3e:6e:29:69:fb:39:49:26:1e:09:a5:80:7b:
|
1346 |
+
# 40:2d:eb:e8:27:85:c9:fe:61:fd:7e:e6:7c:97:1d:
|
1347 |
+
# d5:9d
|
1348 |
+
# Exponent: 65537 (0x10001)
|
1349 |
+
# X509v3 extensions:
|
1350 |
+
# X509v3 Basic Constraints: critical
|
1351 |
+
# CA:TRUE
|
1352 |
+
# X509v3 Key Usage: critical
|
1353 |
+
# Certificate Sign, CRL Sign
|
1354 |
+
# X509v3 Subject Key Identifier:
|
1355 |
+
# 7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50
|
1356 |
+
# Signature Algorithm: sha1WithRSAEncryption
|
1357 |
+
# 79:11:c0:4b:b3:91:b6:fc:f0:e9:67:d4:0d:6e:45:be:55:e8:
|
1358 |
+
# 93:d2:ce:03:3f:ed:da:25:b0:1d:57:cb:1e:3a:76:a0:4c:ec:
|
1359 |
+
# 50:76:e8:64:72:0c:a4:a9:f1:b8:8b:d6:d6:87:84:bb:32:e5:
|
1360 |
+
# 41:11:c0:77:d9:b3:60:9d:eb:1b:d5:d1:6e:44:44:a9:a6:01:
|
1361 |
+
# ec:55:62:1d:77:b8:5c:8e:48:49:7c:9c:3b:57:11:ac:ad:73:
|
1362 |
+
# 37:8e:2f:78:5c:90:68:47:d9:60:60:e6:fc:07:3d:22:20:17:
|
1363 |
+
# c4:f7:16:e9:c4:d8:72:f9:c8:73:7c:df:16:2f:15:a9:3e:fd:
|
1364 |
+
# 6a:27:b6:a1:eb:5a:ba:98:1f:d5:e3:4d:64:0a:9d:13:c8:61:
|
1365 |
+
# ba:f5:39:1c:87:ba:b8:bd:7b:22:7f:f6:fe:ac:40:79:e5:ac:
|
1366 |
+
# 10:6f:3d:8f:1b:79:76:8b:c4:37:b3:21:18:84:e5:36:00:eb:
|
1367 |
+
# 63:20:99:b9:e9:fe:33:04:bb:41:c8:c1:02:f9:44:63:20:9e:
|
1368 |
+
# 81:ce:42:d3:d6:3f:2c:76:d3:63:9c:59:dd:8f:a6:e1:0e:a0:
|
1369 |
+
# 2e:41:f7:2e:95:47:cf:bc:fd:33:f3:f6:0b:61:7e:7e:91:2b:
|
1370 |
+
# 81:47:c2:27:30:ee:a7:10:5d:37:8f:5c:39:2b:e4:04:f0:7b:
|
1371 |
+
# 8d:56:8c:68
|
1372 |
+
-----BEGIN CERTIFICATE-----
|
1373 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
|
1374 |
+
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
1375 |
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
1376 |
+
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
1377 |
+
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
|
1378 |
+
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
|
1379 |
+
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
|
1380 |
+
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
1381 |
+
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
|
1382 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
|
1383 |
+
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
|
1384 |
+
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
|
1385 |
+
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
|
1386 |
+
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
|
1387 |
+
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
|
1388 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
|
1389 |
+
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
|
1390 |
+
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
|
1391 |
+
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
1392 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
|
1393 |
+
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
|
1394 |
+
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
|
1395 |
+
jVaMaA==
|
1396 |
-----END CERTIFICATE-----
|
src/Google/Auth/OAuth2.php
CHANGED
@@ -502,6 +502,7 @@ class Google_Auth_OAuth2 extends Google_Auth_Abstract
|
|
502 |
// Check signature
|
503 |
$verified = false;
|
504 |
foreach ($certs as $keyName => $pem) {
|
|
|
505 |
$public_key = new Google_Verifier_Pem($pem);
|
506 |
if ($public_key->verify($signed, $signature)) {
|
507 |
$verified = true;
|
502 |
// Check signature
|
503 |
$verified = false;
|
504 |
foreach ($certs as $keyName => $pem) {
|
505 |
+
// @todo make a fallback using PHPSecLib, since it's completely trivial; this is the only part of the Worker plugin that requires openssl extension.
|
506 |
$public_key = new Google_Verifier_Pem($pem);
|
507 |
if ($public_key->verify($signed, $signature)) {
|
508 |
$verified = true;
|
src/Google/IO/cacerts.pem
CHANGED
@@ -1,738 +1,738 @@
|
|
1 |
-
# Certifcate Authority certificates for validating SSL connections.
|
2 |
-
#
|
3 |
-
# This file contains PEM format certificates generated from
|
4 |
-
# http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt
|
5 |
-
#
|
6 |
-
# ***** BEGIN LICENSE BLOCK *****
|
7 |
-
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
8 |
-
#
|
9 |
-
# The contents of this file are subject to the Mozilla Public License Version
|
10 |
-
# 1.1 (the "License"); you may not use this file except in compliance with
|
11 |
-
# the License. You may obtain a copy of the License at
|
12 |
-
# http://www.mozilla.org/MPL/
|
13 |
-
#
|
14 |
-
# Software distributed under the License is distributed on an "AS IS" basis,
|
15 |
-
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
16 |
-
# for the specific language governing rights and limitations under the
|
17 |
-
# License.
|
18 |
-
#
|
19 |
-
# The Original Code is the Netscape security libraries.
|
20 |
-
#
|
21 |
-
# The Initial Developer of the Original Code is
|
22 |
-
# Netscape Communications Corporation.
|
23 |
-
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
24 |
-
# the Initial Developer. All Rights Reserved.
|
25 |
-
#
|
26 |
-
# Contributor(s):
|
27 |
-
#
|
28 |
-
# Alternatively, the contents of this file may be used under the terms of
|
29 |
-
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
30 |
-
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
31 |
-
# in which case the provisions of the GPL or the LGPL are applicable instead
|
32 |
-
# of those above. If you wish to allow use of your version of this file only
|
33 |
-
# under the terms of either the GPL or the LGPL, and not to allow others to
|
34 |
-
# use your version of this file under the terms of the MPL, indicate your
|
35 |
-
# decision by deleting the provisions above and replace them with the notice
|
36 |
-
# and other provisions required by the GPL or the LGPL. If you do not delete
|
37 |
-
# the provisions above, a recipient may use your version of this file under
|
38 |
-
# the terms of any one of the MPL, the GPL or the LGPL.
|
39 |
-
#
|
40 |
-
# ***** END LICENSE BLOCK *****
|
41 |
-
|
42 |
-
Verisign/RSA Secure Server CA
|
43 |
-
=============================
|
44 |
-
|
45 |
-
-----BEGIN CERTIFICATE-----
|
46 |
-
MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
|
47 |
-
A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
|
48 |
-
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
|
49 |
-
MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
|
50 |
-
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
|
51 |
-
dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
|
52 |
-
ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
|
53 |
-
0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
|
54 |
-
uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
|
55 |
-
hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
|
56 |
-
YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
|
57 |
-
1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
|
58 |
-
-----END CERTIFICATE-----
|
59 |
-
|
60 |
-
Thawte Personal Basic CA
|
61 |
-
========================
|
62 |
-
|
63 |
-
-----BEGIN CERTIFICATE-----
|
64 |
-
MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
|
65 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
66 |
-
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
67 |
-
ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
|
68 |
-
IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
|
69 |
-
DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
|
70 |
-
EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
|
71 |
-
ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
72 |
-
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
|
73 |
-
QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
|
74 |
-
BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
|
75 |
-
dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
|
76 |
-
wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
|
77 |
-
G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
|
78 |
-
AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
|
79 |
-
c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
|
80 |
-
9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
|
81 |
-
-----END CERTIFICATE-----
|
82 |
-
|
83 |
-
Thawte Personal Premium CA
|
84 |
-
==========================
|
85 |
-
|
86 |
-
-----BEGIN CERTIFICATE-----
|
87 |
-
MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
|
88 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
89 |
-
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
90 |
-
ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
|
91 |
-
dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
|
92 |
-
bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
|
93 |
-
QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
|
94 |
-
BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
|
95 |
-
IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
|
96 |
-
bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
|
97 |
-
Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
|
98 |
-
Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
|
99 |
-
Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
|
100 |
-
ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
101 |
-
SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
|
102 |
-
b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
|
103 |
-
KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
|
104 |
-
-----END CERTIFICATE-----
|
105 |
-
|
106 |
-
Thawte Personal Freemail CA
|
107 |
-
===========================
|
108 |
-
|
109 |
-
-----BEGIN CERTIFICATE-----
|
110 |
-
MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
|
111 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
112 |
-
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
113 |
-
ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
|
114 |
-
YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
|
115 |
-
Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
|
116 |
-
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
|
117 |
-
MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
118 |
-
b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
|
119 |
-
cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
|
120 |
-
d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
|
121 |
-
DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
|
122 |
-
rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
|
123 |
-
uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
|
124 |
-
BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
|
125 |
-
MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
|
126 |
-
/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
|
127 |
-
gQ==
|
128 |
-
-----END CERTIFICATE-----
|
129 |
-
|
130 |
-
Thawte Server CA
|
131 |
-
================
|
132 |
-
|
133 |
-
-----BEGIN CERTIFICATE-----
|
134 |
-
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
|
135 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
136 |
-
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
137 |
-
biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
|
138 |
-
MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
|
139 |
-
MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
140 |
-
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
|
141 |
-
dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
|
142 |
-
cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
|
143 |
-
DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
|
144 |
-
gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
|
145 |
-
yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
|
146 |
-
L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
|
147 |
-
EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
|
148 |
-
7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
|
149 |
-
QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
|
150 |
-
qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
151 |
-
-----END CERTIFICATE-----
|
152 |
-
|
153 |
-
Thawte Premium Server CA
|
154 |
-
========================
|
155 |
-
|
156 |
-
-----BEGIN CERTIFICATE-----
|
157 |
-
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
|
158 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
159 |
-
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
160 |
-
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
|
161 |
-
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
|
162 |
-
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
|
163 |
-
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
|
164 |
-
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
165 |
-
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
|
166 |
-
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
|
167 |
-
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
|
168 |
-
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
|
169 |
-
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
|
170 |
-
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
|
171 |
-
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
|
172 |
-
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
|
173 |
-
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
|
174 |
-
-----END CERTIFICATE-----
|
175 |
-
|
176 |
-
Equifax Secure CA
|
177 |
-
=================
|
178 |
-
|
179 |
-
-----BEGIN CERTIFICATE-----
|
180 |
-
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
181 |
-
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
182 |
-
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
183 |
-
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
184 |
-
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
185 |
-
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
186 |
-
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
187 |
-
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
188 |
-
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
189 |
-
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
190 |
-
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
191 |
-
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
192 |
-
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
193 |
-
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
194 |
-
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
195 |
-
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
196 |
-
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
197 |
-
-----END CERTIFICATE-----
|
198 |
-
|
199 |
-
Verisign Class 1 Public Primary Certification Authority
|
200 |
-
=======================================================
|
201 |
-
|
202 |
-
-----BEGIN CERTIFICATE-----
|
203 |
-
MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
|
204 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
|
205 |
-
c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
|
206 |
-
NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
|
207 |
-
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
|
208 |
-
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
|
209 |
-
jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
|
210 |
-
H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
|
211 |
-
4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
|
212 |
-
BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
|
213 |
-
EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
|
214 |
-
FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
|
215 |
-
lA==
|
216 |
-
-----END CERTIFICATE-----
|
217 |
-
|
218 |
-
Verisign Class 2 Public Primary Certification Authority
|
219 |
-
=======================================================
|
220 |
-
|
221 |
-
-----BEGIN CERTIFICATE-----
|
222 |
-
MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
|
223 |
-
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
224 |
-
cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
225 |
-
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
226 |
-
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
|
227 |
-
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
228 |
-
ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
|
229 |
-
YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
|
230 |
-
FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
|
231 |
-
CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
|
232 |
-
J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
|
233 |
-
r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
|
234 |
-
-----END CERTIFICATE-----
|
235 |
-
|
236 |
-
Verisign Class 3 Public Primary Certification Authority
|
237 |
-
=======================================================
|
238 |
-
|
239 |
-
-----BEGIN CERTIFICATE-----
|
240 |
-
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
241 |
-
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
242 |
-
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
243 |
-
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
244 |
-
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
245 |
-
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
246 |
-
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
247 |
-
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
248 |
-
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
249 |
-
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
250 |
-
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
251 |
-
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
252 |
-
-----END CERTIFICATE-----
|
253 |
-
|
254 |
-
Verisign Class 1 Public Primary Certification Authority - G2
|
255 |
-
============================================================
|
256 |
-
|
257 |
-
-----BEGIN CERTIFICATE-----
|
258 |
-
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
259 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
260 |
-
c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
261 |
-
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
262 |
-
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
263 |
-
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
264 |
-
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
|
265 |
-
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
266 |
-
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
267 |
-
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
268 |
-
AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
|
269 |
-
VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
|
270 |
-
Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
|
271 |
-
AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
|
272 |
-
h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
|
273 |
-
uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
|
274 |
-
DzFc6PLZ
|
275 |
-
-----END CERTIFICATE-----
|
276 |
-
|
277 |
-
Verisign Class 2 Public Primary Certification Authority - G2
|
278 |
-
============================================================
|
279 |
-
|
280 |
-
-----BEGIN CERTIFICATE-----
|
281 |
-
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
|
282 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
|
283 |
-
YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
|
284 |
-
MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
285 |
-
aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
|
286 |
-
Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
|
287 |
-
MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
|
288 |
-
IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
|
289 |
-
KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
290 |
-
eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
|
291 |
-
AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
|
292 |
-
HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
|
293 |
-
DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
|
294 |
-
AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
|
295 |
-
nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
|
296 |
-
rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
|
297 |
-
jBJ7xUS0rg==
|
298 |
-
-----END CERTIFICATE-----
|
299 |
-
|
300 |
-
Verisign Class 3 Public Primary Certification Authority - G2
|
301 |
-
============================================================
|
302 |
-
|
303 |
-
-----BEGIN CERTIFICATE-----
|
304 |
-
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
305 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
306 |
-
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
307 |
-
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
308 |
-
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
309 |
-
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
310 |
-
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
|
311 |
-
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
312 |
-
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
313 |
-
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
314 |
-
AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
|
315 |
-
pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
|
316 |
-
13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
|
317 |
-
AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
|
318 |
-
U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
|
319 |
-
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
|
320 |
-
oJ2daZH9
|
321 |
-
-----END CERTIFICATE-----
|
322 |
-
|
323 |
-
Verisign Class 4 Public Primary Certification Authority - G2
|
324 |
-
============================================================
|
325 |
-
|
326 |
-
-----BEGIN CERTIFICATE-----
|
327 |
-
MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
328 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
329 |
-
c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
330 |
-
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
331 |
-
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
332 |
-
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
333 |
-
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
|
334 |
-
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
335 |
-
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
336 |
-
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
337 |
-
AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
|
338 |
-
HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
|
339 |
-
qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
|
340 |
-
AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
|
341 |
-
cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
|
342 |
-
cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
|
343 |
-
T8qAkbYp
|
344 |
-
-----END CERTIFICATE-----
|
345 |
-
|
346 |
-
Verisign Class 1 Public Primary Certification Authority - G3
|
347 |
-
============================================================
|
348 |
-
|
349 |
-
-----BEGIN CERTIFICATE-----
|
350 |
-
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
351 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
352 |
-
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
353 |
-
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
354 |
-
aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
355 |
-
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
356 |
-
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
357 |
-
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
358 |
-
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
359 |
-
IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
360 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
|
361 |
-
nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
|
362 |
-
8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
|
363 |
-
ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
|
364 |
-
PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
|
365 |
-
6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
|
366 |
-
n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
|
367 |
-
qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
|
368 |
-
wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
369 |
-
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
|
370 |
-
pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
|
371 |
-
E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
372 |
-
-----END CERTIFICATE-----
|
373 |
-
|
374 |
-
Verisign Class 2 Public Primary Certification Authority - G3
|
375 |
-
============================================================
|
376 |
-
|
377 |
-
-----BEGIN CERTIFICATE-----
|
378 |
-
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
|
379 |
-
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
|
380 |
-
aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
|
381 |
-
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
|
382 |
-
Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
383 |
-
eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
|
384 |
-
BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
|
385 |
-
Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
|
386 |
-
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
|
387 |
-
Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
|
388 |
-
IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
|
389 |
-
J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
|
390 |
-
JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
|
391 |
-
wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
|
392 |
-
koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
|
393 |
-
qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
|
394 |
-
Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
|
395 |
-
xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
|
396 |
-
7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
397 |
-
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
|
398 |
-
sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
|
399 |
-
cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
400 |
-
-----END CERTIFICATE-----
|
401 |
-
|
402 |
-
Verisign Class 3 Public Primary Certification Authority - G3
|
403 |
-
============================================================
|
404 |
-
|
405 |
-
-----BEGIN CERTIFICATE-----
|
406 |
-
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
407 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
408 |
-
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
409 |
-
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
410 |
-
aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
411 |
-
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
412 |
-
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
413 |
-
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
414 |
-
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
415 |
-
IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
416 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
|
417 |
-
N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
|
418 |
-
KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
|
419 |
-
kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
|
420 |
-
CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
|
421 |
-
Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
|
422 |
-
imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
|
423 |
-
2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
|
424 |
-
DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
425 |
-
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
|
426 |
-
F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
|
427 |
-
TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
428 |
-
-----END CERTIFICATE-----
|
429 |
-
|
430 |
-
Verisign Class 4 Public Primary Certification Authority - G3
|
431 |
-
============================================================
|
432 |
-
|
433 |
-
-----BEGIN CERTIFICATE-----
|
434 |
-
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
435 |
-
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
436 |
-
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
437 |
-
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
438 |
-
aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
439 |
-
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
440 |
-
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
441 |
-
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
442 |
-
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
443 |
-
IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
444 |
-
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
|
445 |
-
GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
|
446 |
-
+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
|
447 |
-
U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
|
448 |
-
NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
|
449 |
-
ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
|
450 |
-
ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
|
451 |
-
CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
|
452 |
-
g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
453 |
-
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
|
454 |
-
2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
|
455 |
-
bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
456 |
-
-----END CERTIFICATE-----
|
457 |
-
|
458 |
-
Equifax Secure Global eBusiness CA
|
459 |
-
==================================
|
460 |
-
|
461 |
-
-----BEGIN CERTIFICATE-----
|
462 |
-
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
|
463 |
-
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
|
464 |
-
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
|
465 |
-
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
|
466 |
-
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
|
467 |
-
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
|
468 |
-
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
|
469 |
-
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
|
470 |
-
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
|
471 |
-
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
|
472 |
-
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
|
473 |
-
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
|
474 |
-
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
|
475 |
-
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
476 |
-
-----END CERTIFICATE-----
|
477 |
-
|
478 |
-
Equifax Secure eBusiness CA 1
|
479 |
-
=============================
|
480 |
-
|
481 |
-
-----BEGIN CERTIFICATE-----
|
482 |
-
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
|
483 |
-
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
|
484 |
-
ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
|
485 |
-
MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
|
486 |
-
LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
|
487 |
-
KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
|
488 |
-
RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
|
489 |
-
WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
|
490 |
-
Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
|
491 |
-
AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
|
492 |
-
eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
|
493 |
-
zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
|
494 |
-
WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
|
495 |
-
/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
496 |
-
-----END CERTIFICATE-----
|
497 |
-
|
498 |
-
Equifax Secure eBusiness CA 2
|
499 |
-
=============================
|
500 |
-
|
501 |
-
-----BEGIN CERTIFICATE-----
|
502 |
-
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
503 |
-
UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
|
504 |
-
dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
|
505 |
-
NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
|
506 |
-
VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
|
507 |
-
AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
|
508 |
-
vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
|
509 |
-
BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
|
510 |
-
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
|
511 |
-
MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
|
512 |
-
IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
|
513 |
-
NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
|
514 |
-
y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
|
515 |
-
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
516 |
-
A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
|
517 |
-
0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
|
518 |
-
E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
|
519 |
-
-----END CERTIFICATE-----
|
520 |
-
|
521 |
-
Thawte Time Stamping CA
|
522 |
-
=======================
|
523 |
-
|
524 |
-
-----BEGIN CERTIFICATE-----
|
525 |
-
MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
|
526 |
-
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
|
527 |
-
BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
|
528 |
-
BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
|
529 |
-
MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
|
530 |
-
Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
|
531 |
-
A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
|
532 |
-
c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
|
533 |
-
6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
|
534 |
-
Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
|
535 |
-
8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
|
536 |
-
Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
|
537 |
-
9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
|
538 |
-
pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
|
539 |
-
CayJSdM=
|
540 |
-
-----END CERTIFICATE-----
|
541 |
-
|
542 |
-
thawte Primary Root CA
|
543 |
-
======================
|
544 |
-
|
545 |
-
-----BEGIN CERTIFICATE-----
|
546 |
-
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
|
547 |
-
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
548 |
-
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
549 |
-
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
550 |
-
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
|
551 |
-
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
|
552 |
-
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
|
553 |
-
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
554 |
-
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
|
555 |
-
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
|
556 |
-
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
|
557 |
-
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
|
558 |
-
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
|
559 |
-
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
|
560 |
-
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
|
561 |
-
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
|
562 |
-
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
|
563 |
-
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
|
564 |
-
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
565 |
-
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
|
566 |
-
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
|
567 |
-
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
|
568 |
-
jVaMaA==
|
569 |
-
-----END CERTIFICATE-----
|
570 |
-
|
571 |
-
VeriSign Class 3 Public Primary Certification Authority - G5
|
572 |
-
============================================================
|
573 |
-
|
574 |
-
-----BEGIN CERTIFICATE-----
|
575 |
-
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
|
576 |
-
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
577 |
-
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
|
578 |
-
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
|
579 |
-
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
|
580 |
-
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
|
581 |
-
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
|
582 |
-
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
|
583 |
-
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
|
584 |
-
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
|
585 |
-
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
|
586 |
-
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
|
587 |
-
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
|
588 |
-
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
|
589 |
-
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
|
590 |
-
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
|
591 |
-
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
|
592 |
-
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
|
593 |
-
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
594 |
-
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
|
595 |
-
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
|
596 |
-
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
|
597 |
-
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
|
598 |
-
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
|
599 |
-
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
|
600 |
-
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
601 |
-
-----END CERTIFICATE-----
|
602 |
-
|
603 |
-
Entrust.net Secure Server Certification Authority
|
604 |
-
=================================================
|
605 |
-
|
606 |
-
-----BEGIN CERTIFICATE-----
|
607 |
-
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
|
608 |
-
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
|
609 |
-
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
|
610 |
-
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
|
611 |
-
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
|
612 |
-
MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
|
613 |
-
ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
|
614 |
-
b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
615 |
-
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
|
616 |
-
U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
|
617 |
-
A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
|
618 |
-
I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
|
619 |
-
wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
|
620 |
-
AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
|
621 |
-
oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
|
622 |
-
BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
|
623 |
-
dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
|
624 |
-
MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
|
625 |
-
b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
626 |
-
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
|
627 |
-
MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
|
628 |
-
E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
|
629 |
-
MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
|
630 |
-
hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
|
631 |
-
95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
|
632 |
-
2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
633 |
-
-----END CERTIFICATE-----
|
634 |
-
|
635 |
-
Go Daddy Certification Authority Root Certificate Bundle
|
636 |
-
========================================================
|
637 |
-
|
638 |
-
-----BEGIN CERTIFICATE-----
|
639 |
-
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
|
640 |
-
ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
641 |
-
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
|
642 |
-
MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
|
643 |
-
QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
|
644 |
-
b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
|
645 |
-
b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
|
646 |
-
YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
|
647 |
-
AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
|
648 |
-
KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
|
649 |
-
VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
|
650 |
-
SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
|
651 |
-
cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
|
652 |
-
6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
|
653 |
-
MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
|
654 |
-
kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
|
655 |
-
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
|
656 |
-
BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
|
657 |
-
c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
|
658 |
-
AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
|
659 |
-
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
|
660 |
-
OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
|
661 |
-
A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
|
662 |
-
0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
|
663 |
-
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
|
664 |
-
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
|
665 |
-
U+4=
|
666 |
-
-----END CERTIFICATE-----
|
667 |
-
-----BEGIN CERTIFICATE-----
|
668 |
-
MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
|
669 |
-
bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
|
670 |
-
Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
|
671 |
-
QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
|
672 |
-
BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
|
673 |
-
DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
|
674 |
-
YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
|
675 |
-
aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
|
676 |
-
ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
677 |
-
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
|
678 |
-
N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
|
679 |
-
r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
|
680 |
-
f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
|
681 |
-
U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
|
682 |
-
TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
|
683 |
-
VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
|
684 |
-
SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
|
685 |
-
biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
|
686 |
-
MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
|
687 |
-
AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
|
688 |
-
ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
|
689 |
-
Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
|
690 |
-
IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
|
691 |
-
bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
|
692 |
-
QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
|
693 |
-
WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
|
694 |
-
SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
|
695 |
-
-----END CERTIFICATE-----
|
696 |
-
-----BEGIN CERTIFICATE-----
|
697 |
-
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
698 |
-
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
699 |
-
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
|
700 |
-
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
|
701 |
-
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
|
702 |
-
NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
|
703 |
-
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
704 |
-
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
|
705 |
-
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
|
706 |
-
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
|
707 |
-
dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
|
708 |
-
WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
|
709 |
-
v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
|
710 |
-
UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
|
711 |
-
IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
|
712 |
-
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
|
713 |
-
-----END CERTIFICATE-----
|
714 |
-
|
715 |
-
GeoTrust Global CA
|
716 |
-
==================
|
717 |
-
|
718 |
-
-----BEGIN CERTIFICATE-----
|
719 |
-
MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
|
720 |
-
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
|
721 |
-
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
|
722 |
-
WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
|
723 |
-
AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
724 |
-
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
|
725 |
-
OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
|
726 |
-
T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
|
727 |
-
JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
|
728 |
-
Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
|
729 |
-
PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
|
730 |
-
aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
|
731 |
-
TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
|
732 |
-
LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
|
733 |
-
BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
|
734 |
-
dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
|
735 |
-
AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
|
736 |
-
NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
|
737 |
-
b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
|
738 |
-
-----END CERTIFICATE-----
|
1 |
+
# Certifcate Authority certificates for validating SSL connections.
|
2 |
+
#
|
3 |
+
# This file contains PEM format certificates generated from
|
4 |
+
# http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt
|
5 |
+
#
|
6 |
+
# ***** BEGIN LICENSE BLOCK *****
|
7 |
+
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
8 |
+
#
|
9 |
+
# The contents of this file are subject to the Mozilla Public License Version
|
10 |
+
# 1.1 (the "License"); you may not use this file except in compliance with
|
11 |
+
# the License. You may obtain a copy of the License at
|
12 |
+
# http://www.mozilla.org/MPL/
|
13 |
+
#
|
14 |
+
# Software distributed under the License is distributed on an "AS IS" basis,
|
15 |
+
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
16 |
+
# for the specific language governing rights and limitations under the
|
17 |
+
# License.
|
18 |
+
#
|
19 |
+
# The Original Code is the Netscape security libraries.
|
20 |
+
#
|
21 |
+
# The Initial Developer of the Original Code is
|
22 |
+
# Netscape Communications Corporation.
|
23 |
+
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
24 |
+
# the Initial Developer. All Rights Reserved.
|
25 |
+
#
|
26 |
+
# Contributor(s):
|
27 |
+
#
|
28 |
+
# Alternatively, the contents of this file may be used under the terms of
|
29 |
+
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
30 |
+
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
31 |
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
32 |
+
# of those above. If you wish to allow use of your version of this file only
|
33 |
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
34 |
+
# use your version of this file under the terms of the MPL, indicate your
|
35 |
+
# decision by deleting the provisions above and replace them with the notice
|
36 |
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
37 |
+
# the provisions above, a recipient may use your version of this file under
|
38 |
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
39 |
+
#
|
40 |
+
# ***** END LICENSE BLOCK *****
|
41 |
+
|
42 |
+
Verisign/RSA Secure Server CA
|
43 |
+
=============================
|
44 |
+
|
45 |
+
-----BEGIN CERTIFICATE-----
|
46 |
+
MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
|
47 |
+
A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
|
48 |
+
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
|
49 |
+
MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
|
50 |
+
BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
|
51 |
+
dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
|
52 |
+
ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
|
53 |
+
0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
|
54 |
+
uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
|
55 |
+
hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
|
56 |
+
YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
|
57 |
+
1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
|
58 |
+
-----END CERTIFICATE-----
|
59 |
+
|
60 |
+
Thawte Personal Basic CA
|
61 |
+
========================
|
62 |
+
|
63 |
+
-----BEGIN CERTIFICATE-----
|
64 |
+
MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
|
65 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
66 |
+
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
67 |
+
ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
|
68 |
+
IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
|
69 |
+
DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
|
70 |
+
EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
|
71 |
+
ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
72 |
+
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
|
73 |
+
QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
|
74 |
+
BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
|
75 |
+
dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
|
76 |
+
wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
|
77 |
+
G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
|
78 |
+
AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
|
79 |
+
c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
|
80 |
+
9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
|
81 |
+
-----END CERTIFICATE-----
|
82 |
+
|
83 |
+
Thawte Personal Premium CA
|
84 |
+
==========================
|
85 |
+
|
86 |
+
-----BEGIN CERTIFICATE-----
|
87 |
+
MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
|
88 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
89 |
+
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
90 |
+
ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
|
91 |
+
dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
|
92 |
+
bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
|
93 |
+
QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
|
94 |
+
BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
|
95 |
+
IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
|
96 |
+
bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
|
97 |
+
Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
|
98 |
+
Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
|
99 |
+
Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
|
100 |
+
ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
|
101 |
+
SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
|
102 |
+
b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
|
103 |
+
KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
|
104 |
+
-----END CERTIFICATE-----
|
105 |
+
|
106 |
+
Thawte Personal Freemail CA
|
107 |
+
===========================
|
108 |
+
|
109 |
+
-----BEGIN CERTIFICATE-----
|
110 |
+
MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
|
111 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
|
112 |
+
VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
|
113 |
+
ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
|
114 |
+
YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
|
115 |
+
Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
|
116 |
+
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
|
117 |
+
MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
118 |
+
b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
|
119 |
+
cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
|
120 |
+
d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
|
121 |
+
DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
|
122 |
+
rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
|
123 |
+
uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
|
124 |
+
BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
|
125 |
+
MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
|
126 |
+
/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
|
127 |
+
gQ==
|
128 |
+
-----END CERTIFICATE-----
|
129 |
+
|
130 |
+
Thawte Server CA
|
131 |
+
================
|
132 |
+
|
133 |
+
-----BEGIN CERTIFICATE-----
|
134 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
|
135 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
136 |
+
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
137 |
+
biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
|
138 |
+
MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
|
139 |
+
MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
140 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
|
141 |
+
dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
|
142 |
+
cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
|
143 |
+
DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
|
144 |
+
gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
|
145 |
+
yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
|
146 |
+
L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
|
147 |
+
EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
|
148 |
+
7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
|
149 |
+
QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
|
150 |
+
qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
151 |
+
-----END CERTIFICATE-----
|
152 |
+
|
153 |
+
Thawte Premium Server CA
|
154 |
+
========================
|
155 |
+
|
156 |
+
-----BEGIN CERTIFICATE-----
|
157 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
|
158 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
|
159 |
+
VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
|
160 |
+
biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
|
161 |
+
dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
|
162 |
+
MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
|
163 |
+
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
|
164 |
+
A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
|
165 |
+
b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
|
166 |
+
cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
|
167 |
+
bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
|
168 |
+
VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
|
169 |
+
ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
|
170 |
+
uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
|
171 |
+
9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
|
172 |
+
hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
|
173 |
+
pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
|
174 |
+
-----END CERTIFICATE-----
|
175 |
+
|
176 |
+
Equifax Secure CA
|
177 |
+
=================
|
178 |
+
|
179 |
+
-----BEGIN CERTIFICATE-----
|
180 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
181 |
+
UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
|
182 |
+
dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
|
183 |
+
MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
|
184 |
+
dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
|
185 |
+
AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
|
186 |
+
BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
|
187 |
+
cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
|
188 |
+
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
|
189 |
+
MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
|
190 |
+
aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
|
191 |
+
ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
|
192 |
+
IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
|
193 |
+
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
194 |
+
A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
|
195 |
+
7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
|
196 |
+
1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
|
197 |
+
-----END CERTIFICATE-----
|
198 |
+
|
199 |
+
Verisign Class 1 Public Primary Certification Authority
|
200 |
+
=======================================================
|
201 |
+
|
202 |
+
-----BEGIN CERTIFICATE-----
|
203 |
+
MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
|
204 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
|
205 |
+
c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
|
206 |
+
NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
|
207 |
+
VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
|
208 |
+
bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
|
209 |
+
jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
|
210 |
+
H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
|
211 |
+
4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
|
212 |
+
BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
|
213 |
+
EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
|
214 |
+
FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
|
215 |
+
lA==
|
216 |
+
-----END CERTIFICATE-----
|
217 |
+
|
218 |
+
Verisign Class 2 Public Primary Certification Authority
|
219 |
+
=======================================================
|
220 |
+
|
221 |
+
-----BEGIN CERTIFICATE-----
|
222 |
+
MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
|
223 |
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
224 |
+
cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
225 |
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
226 |
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
|
227 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
228 |
+
ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
|
229 |
+
YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
|
230 |
+
FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
|
231 |
+
CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
|
232 |
+
J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
|
233 |
+
r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
|
234 |
+
-----END CERTIFICATE-----
|
235 |
+
|
236 |
+
Verisign Class 3 Public Primary Certification Authority
|
237 |
+
=======================================================
|
238 |
+
|
239 |
+
-----BEGIN CERTIFICATE-----
|
240 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
241 |
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
242 |
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
243 |
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
244 |
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
245 |
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
246 |
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
247 |
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
248 |
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
249 |
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
250 |
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
251 |
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
252 |
+
-----END CERTIFICATE-----
|
253 |
+
|
254 |
+
Verisign Class 1 Public Primary Certification Authority - G2
|
255 |
+
============================================================
|
256 |
+
|
257 |
+
-----BEGIN CERTIFICATE-----
|
258 |
+
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
259 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
260 |
+
c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
261 |
+
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
262 |
+
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
263 |
+
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
264 |
+
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
|
265 |
+
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
266 |
+
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
267 |
+
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
268 |
+
AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
|
269 |
+
VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
|
270 |
+
Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
|
271 |
+
AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
|
272 |
+
h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
|
273 |
+
uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
|
274 |
+
DzFc6PLZ
|
275 |
+
-----END CERTIFICATE-----
|
276 |
+
|
277 |
+
Verisign Class 2 Public Primary Certification Authority - G2
|
278 |
+
============================================================
|
279 |
+
|
280 |
+
-----BEGIN CERTIFICATE-----
|
281 |
+
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
|
282 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
|
283 |
+
YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
|
284 |
+
MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
285 |
+
aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
|
286 |
+
Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
|
287 |
+
MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
|
288 |
+
IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
|
289 |
+
KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
|
290 |
+
eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
|
291 |
+
AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
|
292 |
+
HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
|
293 |
+
DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
|
294 |
+
AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
|
295 |
+
nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
|
296 |
+
rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
|
297 |
+
jBJ7xUS0rg==
|
298 |
+
-----END CERTIFICATE-----
|
299 |
+
|
300 |
+
Verisign Class 3 Public Primary Certification Authority - G2
|
301 |
+
============================================================
|
302 |
+
|
303 |
+
-----BEGIN CERTIFICATE-----
|
304 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
305 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
306 |
+
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
307 |
+
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
308 |
+
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
309 |
+
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
310 |
+
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
|
311 |
+
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
312 |
+
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
313 |
+
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
314 |
+
AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
|
315 |
+
pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
|
316 |
+
13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
|
317 |
+
AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
|
318 |
+
U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
|
319 |
+
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
|
320 |
+
oJ2daZH9
|
321 |
+
-----END CERTIFICATE-----
|
322 |
+
|
323 |
+
Verisign Class 4 Public Primary Certification Authority - G2
|
324 |
+
============================================================
|
325 |
+
|
326 |
+
-----BEGIN CERTIFICATE-----
|
327 |
+
MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
328 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
329 |
+
c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
330 |
+
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
331 |
+
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
332 |
+
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
333 |
+
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
|
334 |
+
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
335 |
+
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
336 |
+
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
337 |
+
AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
|
338 |
+
HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
|
339 |
+
qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
|
340 |
+
AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
|
341 |
+
cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
|
342 |
+
cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
|
343 |
+
T8qAkbYp
|
344 |
+
-----END CERTIFICATE-----
|
345 |
+
|
346 |
+
Verisign Class 1 Public Primary Certification Authority - G3
|
347 |
+
============================================================
|
348 |
+
|
349 |
+
-----BEGIN CERTIFICATE-----
|
350 |
+
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
351 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
352 |
+
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
353 |
+
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
354 |
+
aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
355 |
+
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
356 |
+
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
357 |
+
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
358 |
+
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
359 |
+
IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
360 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
|
361 |
+
nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
|
362 |
+
8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
|
363 |
+
ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
|
364 |
+
PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
|
365 |
+
6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
|
366 |
+
n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
|
367 |
+
qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
|
368 |
+
wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
369 |
+
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
|
370 |
+
pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
|
371 |
+
E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
372 |
+
-----END CERTIFICATE-----
|
373 |
+
|
374 |
+
Verisign Class 2 Public Primary Certification Authority - G3
|
375 |
+
============================================================
|
376 |
+
|
377 |
+
-----BEGIN CERTIFICATE-----
|
378 |
+
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
|
379 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
|
380 |
+
aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
|
381 |
+
IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
|
382 |
+
Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
383 |
+
eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
|
384 |
+
BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
|
385 |
+
Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
|
386 |
+
Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
|
387 |
+
Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
|
388 |
+
IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
|
389 |
+
J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
|
390 |
+
JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
|
391 |
+
wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
|
392 |
+
koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
|
393 |
+
qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
|
394 |
+
Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
|
395 |
+
xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
|
396 |
+
7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
397 |
+
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
|
398 |
+
sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
|
399 |
+
cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
400 |
+
-----END CERTIFICATE-----
|
401 |
+
|
402 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
403 |
+
============================================================
|
404 |
+
|
405 |
+
-----BEGIN CERTIFICATE-----
|
406 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
407 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
408 |
+
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
409 |
+
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
410 |
+
aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
411 |
+
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
412 |
+
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
413 |
+
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
414 |
+
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
415 |
+
IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
416 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
|
417 |
+
N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
|
418 |
+
KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
|
419 |
+
kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
|
420 |
+
CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
|
421 |
+
Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
|
422 |
+
imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
|
423 |
+
2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
|
424 |
+
DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
425 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
|
426 |
+
F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
|
427 |
+
TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
428 |
+
-----END CERTIFICATE-----
|
429 |
+
|
430 |
+
Verisign Class 4 Public Primary Certification Authority - G3
|
431 |
+
============================================================
|
432 |
+
|
433 |
+
-----BEGIN CERTIFICATE-----
|
434 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
|
435 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
|
436 |
+
cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
|
437 |
+
LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
|
438 |
+
aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
|
439 |
+
dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
|
440 |
+
VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
|
441 |
+
aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
|
442 |
+
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
|
443 |
+
IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
|
444 |
+
LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
|
445 |
+
GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
|
446 |
+
+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
|
447 |
+
U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
|
448 |
+
NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
|
449 |
+
ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
|
450 |
+
ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
|
451 |
+
CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
|
452 |
+
g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
453 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
|
454 |
+
2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
|
455 |
+
bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
456 |
+
-----END CERTIFICATE-----
|
457 |
+
|
458 |
+
Equifax Secure Global eBusiness CA
|
459 |
+
==================================
|
460 |
+
|
461 |
+
-----BEGIN CERTIFICATE-----
|
462 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
|
463 |
+
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
|
464 |
+
ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
|
465 |
+
MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
|
466 |
+
dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
|
467 |
+
c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
|
468 |
+
UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
|
469 |
+
58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
|
470 |
+
o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
|
471 |
+
MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
|
472 |
+
aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
|
473 |
+
A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
|
474 |
+
Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
|
475 |
+
8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
476 |
+
-----END CERTIFICATE-----
|
477 |
+
|
478 |
+
Equifax Secure eBusiness CA 1
|
479 |
+
=============================
|
480 |
+
|
481 |
+
-----BEGIN CERTIFICATE-----
|
482 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
|
483 |
+
MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
|
484 |
+
ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
|
485 |
+
MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
|
486 |
+
LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
|
487 |
+
KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
|
488 |
+
RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
|
489 |
+
WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
|
490 |
+
Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
|
491 |
+
AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
|
492 |
+
eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
|
493 |
+
zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
|
494 |
+
WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
|
495 |
+
/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
496 |
+
-----END CERTIFICATE-----
|
497 |
+
|
498 |
+
Equifax Secure eBusiness CA 2
|
499 |
+
=============================
|
500 |
+
|
501 |
+
-----BEGIN CERTIFICATE-----
|
502 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
|
503 |
+
UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
|
504 |
+
dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
|
505 |
+
NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
|
506 |
+
VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
|
507 |
+
AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
|
508 |
+
vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
|
509 |
+
BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
|
510 |
+
AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
|
511 |
+
MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
|
512 |
+
IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
|
513 |
+
NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
|
514 |
+
y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
|
515 |
+
MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
|
516 |
+
A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
|
517 |
+
0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
|
518 |
+
E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
|
519 |
+
-----END CERTIFICATE-----
|
520 |
+
|
521 |
+
Thawte Time Stamping CA
|
522 |
+
=======================
|
523 |
+
|
524 |
+
-----BEGIN CERTIFICATE-----
|
525 |
+
MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
|
526 |
+
FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
|
527 |
+
BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
|
528 |
+
BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
|
529 |
+
MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
|
530 |
+
Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
|
531 |
+
A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
|
532 |
+
c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
|
533 |
+
6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
|
534 |
+
Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
|
535 |
+
8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
|
536 |
+
Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
|
537 |
+
9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
|
538 |
+
pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
|
539 |
+
CayJSdM=
|
540 |
+
-----END CERTIFICATE-----
|
541 |
+
|
542 |
+
thawte Primary Root CA
|
543 |
+
======================
|
544 |
+
|
545 |
+
-----BEGIN CERTIFICATE-----
|
546 |
+
MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
|
547 |
+
qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
|
548 |
+
Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
|
549 |
+
MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
|
550 |
+
BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
|
551 |
+
NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
|
552 |
+
LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
|
553 |
+
A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
554 |
+
IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
|
555 |
+
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
|
556 |
+
W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
|
557 |
+
3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
|
558 |
+
6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
|
559 |
+
Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
|
560 |
+
NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
|
561 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
|
562 |
+
r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
|
563 |
+
DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
|
564 |
+
YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
|
565 |
+
xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
|
566 |
+
/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
|
567 |
+
LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
|
568 |
+
jVaMaA==
|
569 |
+
-----END CERTIFICATE-----
|
570 |
+
|
571 |
+
VeriSign Class 3 Public Primary Certification Authority - G5
|
572 |
+
============================================================
|
573 |
+
|
574 |
+
-----BEGIN CERTIFICATE-----
|
575 |
+
MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
|
576 |
+
yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
|
577 |
+
ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
|
578 |
+
U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
|
579 |
+
ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
|
580 |
+
aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
|
581 |
+
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
|
582 |
+
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
|
583 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
|
584 |
+
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
|
585 |
+
aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
|
586 |
+
nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
|
587 |
+
t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
|
588 |
+
SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
|
589 |
+
BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
|
590 |
+
rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
|
591 |
+
NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
|
592 |
+
BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
|
593 |
+
BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
|
594 |
+
aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
|
595 |
+
MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
|
596 |
+
p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
|
597 |
+
5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
|
598 |
+
WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
|
599 |
+
4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
|
600 |
+
hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
|
601 |
+
-----END CERTIFICATE-----
|
602 |
+
|
603 |
+
Entrust.net Secure Server Certification Authority
|
604 |
+
=================================================
|
605 |
+
|
606 |
+
-----BEGIN CERTIFICATE-----
|
607 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
|
608 |
+
VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
|
609 |
+
ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
|
610 |
+
KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
|
611 |
+
ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
|
612 |
+
MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
|
613 |
+
ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
|
614 |
+
b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
615 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
|
616 |
+
U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
|
617 |
+
A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
|
618 |
+
I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
|
619 |
+
wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
|
620 |
+
AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
|
621 |
+
oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
|
622 |
+
BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
|
623 |
+
dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
|
624 |
+
MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
|
625 |
+
b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
626 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
|
627 |
+
MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
|
628 |
+
E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
|
629 |
+
MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
|
630 |
+
hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
|
631 |
+
95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
|
632 |
+
2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
633 |
+
-----END CERTIFICATE-----
|
634 |
+
|
635 |
+
Go Daddy Certification Authority Root Certificate Bundle
|
636 |
+
========================================================
|
637 |
+
|
638 |
+
-----BEGIN CERTIFICATE-----
|
639 |
+
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
|
640 |
+
ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
|
641 |
+
RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
|
642 |
+
MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
|
643 |
+
QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
|
644 |
+
b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
|
645 |
+
b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
|
646 |
+
YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
|
647 |
+
AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
|
648 |
+
KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
|
649 |
+
VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
|
650 |
+
SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
|
651 |
+
cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
|
652 |
+
6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
|
653 |
+
MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
|
654 |
+
kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
|
655 |
+
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
|
656 |
+
BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
|
657 |
+
c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
|
658 |
+
AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
|
659 |
+
BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
|
660 |
+
OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
|
661 |
+
A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
|
662 |
+
0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
|
663 |
+
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
|
664 |
+
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
|
665 |
+
U+4=
|
666 |
+
-----END CERTIFICATE-----
|
667 |
+
-----BEGIN CERTIFICATE-----
|
668 |
+
MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
|
669 |
+
bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
|
670 |
+
Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
|
671 |
+
QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
|
672 |
+
BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
|
673 |
+
DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
|
674 |
+
YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
|
675 |
+
aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
|
676 |
+
ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
|
677 |
+
2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
|
678 |
+
N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
|
679 |
+
r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
|
680 |
+
f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
|
681 |
+
U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
|
682 |
+
TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
|
683 |
+
VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
|
684 |
+
SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
|
685 |
+
biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
|
686 |
+
MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
|
687 |
+
AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
|
688 |
+
ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
|
689 |
+
Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
|
690 |
+
IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
|
691 |
+
bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
|
692 |
+
QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
|
693 |
+
WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
|
694 |
+
SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
|
695 |
+
-----END CERTIFICATE-----
|
696 |
+
-----BEGIN CERTIFICATE-----
|
697 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
|
698 |
+
IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
|
699 |
+
BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
|
700 |
+
aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
|
701 |
+
9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
|
702 |
+
NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
|
703 |
+
azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
704 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
|
705 |
+
Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
|
706 |
+
cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
|
707 |
+
dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
|
708 |
+
WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
|
709 |
+
v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
|
710 |
+
UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
|
711 |
+
IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
|
712 |
+
W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
|
713 |
+
-----END CERTIFICATE-----
|
714 |
+
|
715 |
+
GeoTrust Global CA
|
716 |
+
==================
|
717 |
+
|
718 |
+
-----BEGIN CERTIFICATE-----
|
719 |
+
MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
|
720 |
+
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
|
721 |
+
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
|
722 |
+
WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
|
723 |
+
AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
724 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
|
725 |
+
OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
|
726 |
+
T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
|
727 |
+
JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
|
728 |
+
Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
|
729 |
+
PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
|
730 |
+
aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
|
731 |
+
TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
|
732 |
+
LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
|
733 |
+
BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
|
734 |
+
dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
|
735 |
+
AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
|
736 |
+
NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
|
737 |
+
b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
|
738 |
+
-----END CERTIFICATE-----
|
src/LICENSE
CHANGED
@@ -1,360 +1,360 @@
|
|
1 |
-
===============================================================================
|
2 |
-
|
3 |
-
Symfony2 license:
|
4 |
-
|
5 |
-
Copyright (c) 2004-2014 Fabien Potencier
|
6 |
-
|
7 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
8 |
-
of this software and associated documentation files (the "Software"), to deal
|
9 |
-
in the Software without restriction, including without limitation the rights
|
10 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11 |
-
copies of the Software, and to permit persons to whom the Software is furnished
|
12 |
-
to do so, subject to the following conditions:
|
13 |
-
|
14 |
-
The above copyright notice and this permission notice shall be included in all
|
15 |
-
copies or substantial portions of the Software.
|
16 |
-
|
17 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23 |
-
THE SOFTWARE.
|
24 |
-
|
25 |
-
===============================================================================
|
26 |
-
|
27 |
-
Dropbox PHP SDK license:
|
28 |
-
|
29 |
-
Copyright (c) 2013 Dropbox Inc., http://www.dropbox.com/
|
30 |
-
|
31 |
-
Permission is hereby granted, free of charge, to any person obtaining
|
32 |
-
a copy of this software and associated documentation files (the
|
33 |
-
"Software"), to deal in the Software without restriction, including
|
34 |
-
without limitation the rights to use, copy, modify, merge, publish,
|
35 |
-
distribute, sublicense, and/or sell copies of the Software, and to
|
36 |
-
permit persons to whom the Software is furnished to do so, subject to
|
37 |
-
the following conditions:
|
38 |
-
|
39 |
-
The above copyright notice and this permission notice shall be
|
40 |
-
included in all copies or substantial portions of the Software.
|
41 |
-
|
42 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
43 |
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44 |
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
45 |
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
46 |
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
47 |
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
48 |
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
49 |
-
|
50 |
-
===============================================================================
|
51 |
-
|
52 |
-
gelf-php license:
|
53 |
-
|
54 |
-
Copyright (c) 2010-2012 Lennart Koopmann
|
55 |
-
|
56 |
-
Permission is hereby granted, free of charge, to any person obtaining
|
57 |
-
a copy of this software and associated documentation files (the
|
58 |
-
"Software"), to deal in the Software without restriction, including
|
59 |
-
without limitation the rights to use, copy, modify, merge, publish,
|
60 |
-
distribute, sublicense, and/or sell copies of the Software, and to
|
61 |
-
permit persons to whom the Software is furnished to do so, subject to
|
62 |
-
the following conditions:
|
63 |
-
|
64 |
-
The above copyright notice and this permission notice shall be
|
65 |
-
included in all copies or substantial portions of the Software.
|
66 |
-
|
67 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
68 |
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
69 |
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
70 |
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
71 |
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
72 |
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
73 |
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
74 |
-
|
75 |
-
===============================================================================
|
76 |
-
|
77 |
-
Monolog - Logging for PHP license:
|
78 |
-
|
79 |
-
Copyright (c) Jordi Boggiano
|
80 |
-
|
81 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
82 |
-
of this software and associated documentation files (the "Software"), to deal
|
83 |
-
in the Software without restriction, including without limitation the rights
|
84 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
85 |
-
copies of the Software, and to permit persons to whom the Software is furnished
|
86 |
-
to do so, subject to the following conditions:
|
87 |
-
|
88 |
-
The above copyright notice and this permission notice shall be included in all
|
89 |
-
copies or substantial portions of the Software.
|
90 |
-
|
91 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
92 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
93 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
94 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
95 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
96 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
97 |
-
THE SOFTWARE.
|
98 |
-
|
99 |
-
===============================================================================
|
100 |
-
|
101 |
-
Amazon S3 PHP Class license:
|
102 |
-
|
103 |
-
Copyright (c) 2013, Donovan Schönknecht. All rights reserved.
|
104 |
-
|
105 |
-
Redistribution and use in source and binary forms, with or without
|
106 |
-
modification, are permitted provided that the following conditions are met:
|
107 |
-
|
108 |
-
- Redistributions of source code must retain the above copyright notice,
|
109 |
-
this list of conditions and the following disclaimer.
|
110 |
-
- Redistributions in binary form must reproduce the above copyright
|
111 |
-
notice, this list of conditions and the following disclaimer in the
|
112 |
-
documentation and/or other materials provided with the distribution.
|
113 |
-
|
114 |
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
115 |
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
116 |
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
117 |
-
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
118 |
-
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
119 |
-
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
120 |
-
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
121 |
-
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
122 |
-
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
123 |
-
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
124 |
-
POSSIBILITY OF SUCH DAMAGE.
|
125 |
-
|
126 |
-
Amazon S3 is a trademark of Amazon.com, Inc. or its affiliates.
|
127 |
-
|
128 |
-
===============================================================================
|
129 |
-
|
130 |
-
Google APIs Client Library for PHP license:
|
131 |
-
|
132 |
-
Apache License
|
133 |
-
Version 2.0, January 2004
|
134 |
-
http://www.apache.org/licenses/
|
135 |
-
|
136 |
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
137 |
-
|
138 |
-
1. Definitions.
|
139 |
-
|
140 |
-
"License" shall mean the terms and conditions for use, reproduction,
|
141 |
-
and distribution as defined by Sections 1 through 9 of this document.
|
142 |
-
|
143 |
-
"Licensor" shall mean the copyright owner or entity authorized by
|
144 |
-
the copyright owner that is granting the License.
|
145 |
-
|
146 |
-
"Legal Entity" shall mean the union of the acting entity and all
|
147 |
-
other entities that control, are controlled by, or are under common
|
148 |
-
control with that entity. For the purposes of this definition,
|
149 |
-
"control" means (i) the power, direct or indirect, to cause the
|
150 |
-
direction or management of such entity, whether by contract or
|
151 |
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
152 |
-
outstanding shares, or (iii) beneficial ownership of such entity.
|
153 |
-
|
154 |
-
"You" (or "Your") shall mean an individual or Legal Entity
|
155 |
-
exercising permissions granted by this License.
|
156 |
-
|
157 |
-
"Source" form shall mean the preferred form for making modifications,
|
158 |
-
including but not limited to software source code, documentation
|
159 |
-
source, and configuration files.
|
160 |
-
|
161 |
-
"Object" form shall mean any form resulting from mechanical
|
162 |
-
transformation or translation of a Source form, including but
|
163 |
-
not limited to compiled object code, generated documentation,
|
164 |
-
and conversions to other media types.
|
165 |
-
|
166 |
-
"Work" shall mean the work of authorship, whether in Source or
|
167 |
-
Object form, made available under the License, as indicated by a
|
168 |
-
copyright notice that is included in or attached to the work
|
169 |
-
(an example is provided in the Appendix below).
|
170 |
-
|
171 |
-
"Derivative Works" shall mean any work, whether in Source or Object
|
172 |
-
form, that is based on (or derived from) the Work and for which the
|
173 |
-
editorial revisions, annotations, elaborations, or other modifications
|
174 |
-
represent, as a whole, an original work of authorship. For the purposes
|
175 |
-
of this License, Derivative Works shall not include works that remain
|
176 |
-
separable from, or merely link (or bind by name) to the interfaces of,
|
177 |
-
the Work and Derivative Works thereof.
|
178 |
-
|
179 |
-
"Contribution" shall mean any work of authorship, including
|
180 |
-
the original version of the Work and any modifications or additions
|
181 |
-
to that Work or Derivative Works thereof, that is intentionally
|
182 |
-
submitted to Licensor for inclusion in the Work by the copyright owner
|
183 |
-
or by an individual or Legal Entity authorized to submit on behalf of
|
184 |
-
the copyright owner. For the purposes of this definition, "submitted"
|
185 |
-
means any form of electronic, verbal, or written communication sent
|
186 |
-
to the Licensor or its representatives, including but not limited to
|
187 |
-
communication on electronic mailing lists, source code control systems,
|
188 |
-
and issue tracking systems that are managed by, or on behalf of, the
|
189 |
-
Licensor for the purpose of discussing and improving the Work, but
|
190 |
-
excluding communication that is conspicuously marked or otherwise
|
191 |
-
designated in writing by the copyright owner as "Not a Contribution."
|
192 |
-
|
193 |
-
"Contributor" shall mean Licensor and any individual or Legal Entity
|
194 |
-
on behalf of whom a Contribution has been received by Licensor and
|
195 |
-
subsequently incorporated within the Work.
|
196 |
-
|
197 |
-
2. Grant of Copyright License. Subject to the terms and conditions of
|
198 |
-
this License, each Contributor hereby grants to You a perpetual,
|
199 |
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
200 |
-
copyright license to reproduce, prepare Derivative Works of,
|
201 |
-
publicly display, publicly perform, sublicense, and distribute the
|
202 |
-
Work and such Derivative Works in Source or Object form.
|
203 |
-
|
204 |
-
3. Grant of Patent License. Subject to the terms and conditions of
|
205 |
-
this License, each Contributor hereby grants to You a perpetual,
|
206 |
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
207 |
-
(except as stated in this section) patent license to make, have made,
|
208 |
-
use, offer to sell, sell, import, and otherwise transfer the Work,
|
209 |
-
where such license applies only to those patent claims licensable
|
210 |
-
by such Contributor that are necessarily infringed by their
|
211 |
-
Contribution(s) alone or by combination of their Contribution(s)
|
212 |
-
with the Work to which such Contribution(s) was submitted. If You
|
213 |
-
institute patent litigation against any entity (including a
|
214 |
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
215 |
-
or a Contribution incorporated within the Work constitutes direct
|
216 |
-
or contributory patent infringement, then any patent licenses
|
217 |
-
granted to You under this License for that Work shall terminate
|
218 |
-
as of the date such litigation is filed.
|
219 |
-
|
220 |
-
4. Redistribution. You may reproduce and distribute copies of the
|
221 |
-
Work or Derivative Works thereof in any medium, with or without
|
222 |
-
modifications, and in Source or Object form, provided that You
|
223 |
-
meet the following conditions:
|
224 |
-
|
225 |
-
(a) You must give any other recipients of the Work or
|
226 |
-
Derivative Works a copy of this License; and
|
227 |
-
|
228 |
-
(b) You must cause any modified files to carry prominent notices
|
229 |
-
stating that You changed the files; and
|
230 |
-
|
231 |
-
(c) You must retain, in the Source form of any Derivative Works
|
232 |
-
that You distribute, all copyright, patent, trademark, and
|
233 |
-
attribution notices from the Source form of the Work,
|
234 |
-
excluding those notices that do not pertain to any part of
|
235 |
-
the Derivative Works; and
|
236 |
-
|
237 |
-
(d) If the Work includes a "NOTICE" text file as part of its
|
238 |
-
distribution, then any Derivative Works that You distribute must
|
239 |
-
include a readable copy of the attribution notices contained
|
240 |
-
within such NOTICE file, excluding those notices that do not
|
241 |
-
pertain to any part of the Derivative Works, in at least one
|
242 |
-
of the following places: within a NOTICE text file distributed
|
243 |
-
as part of the Derivative Works; within the Source form or
|
244 |
-
documentation, if provided along with the Derivative Works; or,
|
245 |
-
within a display generated by the Derivative Works, if and
|
246 |
-
wherever such third-party notices normally appear. The contents
|
247 |
-
of the NOTICE file are for informational purposes only and
|
248 |
-
do not modify the License. You may add Your own attribution
|
249 |
-
notices within Derivative Works that You distribute, alongside
|
250 |
-
or as an addendum to the NOTICE text from the Work, provided
|
251 |
-
that such additional attribution notices cannot be construed
|
252 |
-
as modifying the License.
|
253 |
-
|
254 |
-
You may add Your own copyright statement to Your modifications and
|
255 |
-
may provide additional or different license terms and conditions
|
256 |
-
for use, reproduction, or distribution of Your modifications, or
|
257 |
-
for any such Derivative Works as a whole, provided Your use,
|
258 |
-
reproduction, and distribution of the Work otherwise complies with
|
259 |
-
the conditions stated in this License.
|
260 |
-
|
261 |
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
262 |
-
any Contribution intentionally submitted for inclusion in the Work
|
263 |
-
by You to the Licensor shall be under the terms and conditions of
|
264 |
-
this License, without any additional terms or conditions.
|
265 |
-
Notwithstanding the above, nothing herein shall supersede or modify
|
266 |
-
the terms of any separate license agreement you may have executed
|
267 |
-
with Licensor regarding such Contributions.
|
268 |
-
|
269 |
-
6. Trademarks. This License does not grant permission to use the trade
|
270 |
-
names, trademarks, service marks, or product names of the Licensor,
|
271 |
-
except as required for reasonable and customary use in describing the
|
272 |
-
origin of the Work and reproducing the content of the NOTICE file.
|
273 |
-
|
274 |
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
275 |
-
agreed to in writing, Licensor provides the Work (and each
|
276 |
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
277 |
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
278 |
-
implied, including, without limitation, any warranties or conditions
|
279 |
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
280 |
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
281 |
-
appropriateness of using or redistributing the Work and assume any
|
282 |
-
risks associated with Your exercise of permissions under this License.
|
283 |
-
|
284 |
-
8. Limitation of Liability. In no event and under no legal theory,
|
285 |
-
whether in tort (including negligence), contract, or otherwise,
|
286 |
-
unless required by applicable law (such as deliberate and grossly
|
287 |
-
negligent acts) or agreed to in writing, shall any Contributor be
|
288 |
-
liable to You for damages, including any direct, indirect, special,
|
289 |
-
incidental, or consequential damages of any character arising as a
|
290 |
-
result of this License or out of the use or inability to use the
|
291 |
-
Work (including but not limited to damages for loss of goodwill,
|
292 |
-
work stoppage, computer failure or malfunction, or any and all
|
293 |
-
other commercial damages or losses), even if such Contributor
|
294 |
-
has been advised of the possibility of such damages.
|
295 |
-
|
296 |
-
9. Accepting Warranty or Additional Liability. While redistributing
|
297 |
-
the Work or Derivative Works thereof, You may choose to offer,
|
298 |
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
299 |
-
or other liability obligations and/or rights consistent with this
|
300 |
-
License. However, in accepting such obligations, You may act only
|
301 |
-
on Your own behalf and on Your sole responsibility, not on behalf
|
302 |
-
of any other Contributor, and only if You agree to indemnify,
|
303 |
-
defend, and hold each Contributor harmless for any liability
|
304 |
-
incurred by, or claims asserted against, such Contributor by reason
|
305 |
-
of your accepting any such warranty or additional liability.
|
306 |
-
|
307 |
-
END OF TERMS AND CONDITIONS
|
308 |
-
|
309 |
-
APPENDIX: How to apply the Apache License to your work.
|
310 |
-
|
311 |
-
To apply the Apache License to your work, attach the following
|
312 |
-
boilerplate notice, with the fields enclosed by brackets "[]"
|
313 |
-
replaced with your own identifying information. (Don't include
|
314 |
-
the brackets!) The text should be enclosed in the appropriate
|
315 |
-
comment syntax for the file format. We also recommend that a
|
316 |
-
file or class name and description of purpose be included on the
|
317 |
-
same "printed page" as the copyright notice for easier
|
318 |
-
identification within third-party archives.
|
319 |
-
|
320 |
-
Copyright [yyyy] [name of copyright owner]
|
321 |
-
|
322 |
-
Licensed under the Apache License, Version 2.0 (the "License");
|
323 |
-
you may not use this file except in compliance with the License.
|
324 |
-
You may obtain a copy of the License at
|
325 |
-
|
326 |
-
http://www.apache.org/licenses/LICENSE-2.0
|
327 |
-
|
328 |
-
Unless required by applicable law or agreed to in writing, software
|
329 |
-
distributed under the License is distributed on an "AS IS" BASIS,
|
330 |
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
331 |
-
See the License for the specific language governing permissions and
|
332 |
-
limitations under the License.
|
333 |
-
|
334 |
-
===============================================================================
|
335 |
-
|
336 |
-
PHPSecLib license:
|
337 |
-
|
338 |
-
Copyright 2007-2013 TerraFrost and other contributors
|
339 |
-
http://phpseclib.sourceforge.net/
|
340 |
-
|
341 |
-
Permission is hereby granted, free of charge, to any person obtaining
|
342 |
-
a copy of this software and associated documentation files (the
|
343 |
-
"Software"), to deal in the Software without restriction, including
|
344 |
-
without limitation the rights to use, copy, modify, merge, publish,
|
345 |
-
distribute, sublicense, and/or sell copies of the Software, and to
|
346 |
-
permit persons to whom the Software is furnished to do so, subject to
|
347 |
-
the following conditions:
|
348 |
-
|
349 |
-
The above copyright notice and this permission notice shall be
|
350 |
-
included in all copies or substantial portions of the Software.
|
351 |
-
|
352 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
353 |
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
354 |
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
355 |
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
356 |
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
357 |
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
358 |
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
359 |
-
|
360 |
-
===============================================================================
|
1 |
+
===============================================================================
|
2 |
+
|
3 |
+
Symfony2 license:
|
4 |
+
|
5 |
+
Copyright (c) 2004-2014 Fabien Potencier
|
6 |
+
|
7 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
8 |
+
of this software and associated documentation files (the "Software"), to deal
|
9 |
+
in the Software without restriction, including without limitation the rights
|
10 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
12 |
+
to do so, subject to the following conditions:
|
13 |
+
|
14 |
+
The above copyright notice and this permission notice shall be included in all
|
15 |
+
copies or substantial portions of the Software.
|
16 |
+
|
17 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23 |
+
THE SOFTWARE.
|
24 |
+
|
25 |
+
===============================================================================
|
26 |
+
|
27 |
+
Dropbox PHP SDK license:
|
28 |
+
|
29 |
+
Copyright (c) 2013 Dropbox Inc., http://www.dropbox.com/
|
30 |
+
|
31 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
32 |
+
a copy of this software and associated documentation files (the
|
33 |
+
"Software"), to deal in the Software without restriction, including
|
34 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
35 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
36 |
+
permit persons to whom the Software is furnished to do so, subject to
|
37 |
+
the following conditions:
|
38 |
+
|
39 |
+
The above copyright notice and this permission notice shall be
|
40 |
+
included in all copies or substantial portions of the Software.
|
41 |
+
|
42 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
43 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
45 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
46 |
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
47 |
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
48 |
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
49 |
+
|
50 |
+
===============================================================================
|
51 |
+
|
52 |
+
gelf-php license:
|
53 |
+
|
54 |
+
Copyright (c) 2010-2012 Lennart Koopmann
|
55 |
+
|
56 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
57 |
+
a copy of this software and associated documentation files (the
|
58 |
+
"Software"), to deal in the Software without restriction, including
|
59 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
60 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
61 |
+
permit persons to whom the Software is furnished to do so, subject to
|
62 |
+
the following conditions:
|
63 |
+
|
64 |
+
The above copyright notice and this permission notice shall be
|
65 |
+
included in all copies or substantial portions of the Software.
|
66 |
+
|
67 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
68 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
69 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
70 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
71 |
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
72 |
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
73 |
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
74 |
+
|
75 |
+
===============================================================================
|
76 |
+
|
77 |
+
Monolog - Logging for PHP license:
|
78 |
+
|
79 |
+
Copyright (c) Jordi Boggiano
|
80 |
+
|
81 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
82 |
+
of this software and associated documentation files (the "Software"), to deal
|
83 |
+
in the Software without restriction, including without limitation the rights
|
84 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
85 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
86 |
+
to do so, subject to the following conditions:
|
87 |
+
|
88 |
+
The above copyright notice and this permission notice shall be included in all
|
89 |
+
copies or substantial portions of the Software.
|
90 |
+
|
91 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
92 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
93 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
94 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
95 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
96 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
97 |
+
THE SOFTWARE.
|
98 |
+
|
99 |
+
===============================================================================
|
100 |
+
|
101 |
+
Amazon S3 PHP Class license:
|
102 |
+
|
103 |
+
Copyright (c) 2013, Donovan Schönknecht. All rights reserved.
|
104 |
+
|
105 |
+
Redistribution and use in source and binary forms, with or without
|
106 |
+
modification, are permitted provided that the following conditions are met:
|
107 |
+
|
108 |
+
- Redistributions of source code must retain the above copyright notice,
|
109 |
+
this list of conditions and the following disclaimer.
|
110 |
+
- Redistributions in binary form must reproduce the above copyright
|
111 |
+
notice, this list of conditions and the following disclaimer in the
|
112 |
+
documentation and/or other materials provided with the distribution.
|
113 |
+
|
114 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
115 |
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
116 |
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
117 |
+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
118 |
+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
119 |
+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
120 |
+
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
121 |
+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
122 |
+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
123 |
+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
124 |
+
POSSIBILITY OF SUCH DAMAGE.
|
125 |
+
|
126 |
+
Amazon S3 is a trademark of Amazon.com, Inc. or its affiliates.
|
127 |
+
|
128 |
+
===============================================================================
|
129 |
+
|
130 |
+
Google APIs Client Library for PHP license:
|
131 |
+
|
132 |
+
Apache License
|
133 |
+
Version 2.0, January 2004
|
134 |
+
http://www.apache.org/licenses/
|
135 |
+
|
136 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
137 |
+
|
138 |
+
1. Definitions.
|
139 |
+
|
140 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
141 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
142 |
+
|
143 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
144 |
+
the copyright owner that is granting the License.
|
145 |
+
|
146 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
147 |
+
other entities that control, are controlled by, or are under common
|
148 |
+
control with that entity. For the purposes of this definition,
|
149 |
+
"control" means (i) the power, direct or indirect, to cause the
|
150 |
+
direction or management of such entity, whether by contract or
|
151 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
152 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
153 |
+
|
154 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
155 |
+
exercising permissions granted by this License.
|
156 |
+
|
157 |
+
"Source" form shall mean the preferred form for making modifications,
|
158 |
+
including but not limited to software source code, documentation
|
159 |
+
source, and configuration files.
|
160 |
+
|
161 |
+
"Object" form shall mean any form resulting from mechanical
|
162 |
+
transformation or translation of a Source form, including but
|
163 |
+
not limited to compiled object code, generated documentation,
|
164 |
+
and conversions to other media types.
|
165 |
+
|
166 |
+
"Work" shall mean the work of authorship, whether in Source or
|
167 |
+
Object form, made available under the License, as indicated by a
|
168 |
+
copyright notice that is included in or attached to the work
|
169 |
+
(an example is provided in the Appendix below).
|
170 |
+
|
171 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
172 |
+
form, that is based on (or derived from) the Work and for which the
|
173 |
+
editorial revisions, annotations, elaborations, or other modifications
|
174 |
+
represent, as a whole, an original work of authorship. For the purposes
|
175 |
+
of this License, Derivative Works shall not include works that remain
|
176 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
177 |
+
the Work and Derivative Works thereof.
|
178 |
+
|
179 |
+
"Contribution" shall mean any work of authorship, including
|
180 |
+
the original version of the Work and any modifications or additions
|
181 |
+
to that Work or Derivative Works thereof, that is intentionally
|
182 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
183 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
184 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
185 |
+
means any form of electronic, verbal, or written communication sent
|
186 |
+
to the Licensor or its representatives, including but not limited to
|
187 |
+
communication on electronic mailing lists, source code control systems,
|
188 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
189 |
+
Licensor for the purpose of discussing and improving the Work, but
|
190 |
+
excluding communication that is conspicuously marked or otherwise
|
191 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
192 |
+
|
193 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
194 |
+
on behalf of whom a Contribution has been received by Licensor and
|
195 |
+
subsequently incorporated within the Work.
|
196 |
+
|
197 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
198 |
+
this License, each Contributor hereby grants to You a perpetual,
|
199 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
200 |
+
copyright license to reproduce, prepare Derivative Works of,
|
201 |
+
publicly display, publicly perform, sublicense, and distribute the
|
202 |
+
Work and such Derivative Works in Source or Object form.
|
203 |
+
|
204 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
205 |
+
this License, each Contributor hereby grants to You a perpetual,
|
206 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
207 |
+
(except as stated in this section) patent license to make, have made,
|
208 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
209 |
+
where such license applies only to those patent claims licensable
|
210 |
+
by such Contributor that are necessarily infringed by their
|
211 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
212 |
+
with the Work to which such Contribution(s) was submitted. If You
|
213 |
+
institute patent litigation against any entity (including a
|
214 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
215 |
+
or a Contribution incorporated within the Work constitutes direct
|
216 |
+
or contributory patent infringement, then any patent licenses
|
217 |
+
granted to You under this License for that Work shall terminate
|
218 |
+
as of the date such litigation is filed.
|
219 |
+
|
220 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
221 |
+
Work or Derivative Works thereof in any medium, with or without
|
222 |
+
modifications, and in Source or Object form, provided that You
|
223 |
+
meet the following conditions:
|
224 |
+
|
225 |
+
(a) You must give any other recipients of the Work or
|
226 |
+
Derivative Works a copy of this License; and
|
227 |
+
|
228 |
+
(b) You must cause any modified files to carry prominent notices
|
229 |
+
stating that You changed the files; and
|
230 |
+
|
231 |
+
(c) You must retain, in the Source form of any Derivative Works
|
232 |
+
that You distribute, all copyright, patent, trademark, and
|
233 |
+
attribution notices from the Source form of the Work,
|
234 |
+
excluding those notices that do not pertain to any part of
|
235 |
+
the Derivative Works; and
|
236 |
+
|
237 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
238 |
+
distribution, then any Derivative Works that You distribute must
|
239 |
+
include a readable copy of the attribution notices contained
|
240 |
+
within such NOTICE file, excluding those notices that do not
|
241 |
+
pertain to any part of the Derivative Works, in at least one
|
242 |
+
of the following places: within a NOTICE text file distributed
|
243 |
+
as part of the Derivative Works; within the Source form or
|
244 |
+
documentation, if provided along with the Derivative Works; or,
|
245 |
+
within a display generated by the Derivative Works, if and
|
246 |
+
wherever such third-party notices normally appear. The contents
|
247 |
+
of the NOTICE file are for informational purposes only and
|
248 |
+
do not modify the License. You may add Your own attribution
|
249 |
+
notices within Derivative Works that You distribute, alongside
|
250 |
+
or as an addendum to the NOTICE text from the Work, provided
|
251 |
+
that such additional attribution notices cannot be construed
|
252 |
+
as modifying the License.
|
253 |
+
|
254 |
+
You may add Your own copyright statement to Your modifications and
|
255 |
+
may provide additional or different license terms and conditions
|
256 |
+
for use, reproduction, or distribution of Your modifications, or
|
257 |
+
for any such Derivative Works as a whole, provided Your use,
|
258 |
+
reproduction, and distribution of the Work otherwise complies with
|
259 |
+
the conditions stated in this License.
|
260 |
+
|
261 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
262 |
+
any Contribution intentionally submitted for inclusion in the Work
|
263 |
+
by You to the Licensor shall be under the terms and conditions of
|
264 |
+
this License, without any additional terms or conditions.
|
265 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
266 |
+
the terms of any separate license agreement you may have executed
|
267 |
+
with Licensor regarding such Contributions.
|
268 |
+
|
269 |
+
6. Trademarks. This License does not grant permission to use the trade
|
270 |
+
names, trademarks, service marks, or product names of the Licensor,
|
271 |
+
except as required for reasonable and customary use in describing the
|
272 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
273 |
+
|
274 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
275 |
+
agreed to in writing, Licensor provides the Work (and each
|
276 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
277 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
278 |
+
implied, including, without limitation, any warranties or conditions
|
279 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
280 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
281 |
+
appropriateness of using or redistributing the Work and assume any
|
282 |
+
risks associated with Your exercise of permissions under this License.
|
283 |
+
|
284 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
285 |
+
whether in tort (including negligence), contract, or otherwise,
|
286 |
+
unless required by applicable law (such as deliberate and grossly
|
287 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
288 |
+
liable to You for damages, including any direct, indirect, special,
|
289 |
+
incidental, or consequential damages of any character arising as a
|
290 |
+
result of this License or out of the use or inability to use the
|
291 |
+
Work (including but not limited to damages for loss of goodwill,
|
292 |
+
work stoppage, computer failure or malfunction, or any and all
|
293 |
+
other commercial damages or losses), even if such Contributor
|
294 |
+
has been advised of the possibility of such damages.
|
295 |
+
|
296 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
297 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
298 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
299 |
+
or other liability obligations and/or rights consistent with this
|
300 |
+
License. However, in accepting such obligations, You may act only
|
301 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
302 |
+
of any other Contributor, and only if You agree to indemnify,
|
303 |
+
defend, and hold each Contributor harmless for any liability
|
304 |
+
incurred by, or claims asserted against, such Contributor by reason
|
305 |
+
of your accepting any such warranty or additional liability.
|
306 |
+
|
307 |
+
END OF TERMS AND CONDITIONS
|
308 |
+
|
309 |
+
APPENDIX: How to apply the Apache License to your work.
|
310 |
+
|
311 |
+
To apply the Apache License to your work, attach the following
|
312 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
313 |
+
replaced with your own identifying information. (Don't include
|
314 |
+
the brackets!) The text should be enclosed in the appropriate
|
315 |
+
comment syntax for the file format. We also recommend that a
|
316 |
+
file or class name and description of purpose be included on the
|
317 |
+
same "printed page" as the copyright notice for easier
|
318 |
+
identification within third-party archives.
|
319 |
+
|
320 |
+
Copyright [yyyy] [name of copyright owner]
|
321 |
+
|
322 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
323 |
+
you may not use this file except in compliance with the License.
|
324 |
+
You may obtain a copy of the License at
|
325 |
+
|
326 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
327 |
+
|
328 |
+
Unless required by applicable law or agreed to in writing, software
|
329 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
330 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
331 |
+
See the License for the specific language governing permissions and
|
332 |
+
limitations under the License.
|
333 |
+
|
334 |
+
===============================================================================
|
335 |
+
|
336 |
+
PHPSecLib license:
|
337 |
+
|
338 |
+
Copyright 2007-2013 TerraFrost and other contributors
|
339 |
+
http://phpseclib.sourceforge.net/
|
340 |
+
|
341 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
342 |
+
a copy of this software and associated documentation files (the
|
343 |
+
"Software"), to deal in the Software without restriction, including
|
344 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
345 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
346 |
+
permit persons to whom the Software is furnished to do so, subject to
|
347 |
+
the following conditions:
|
348 |
+
|
349 |
+
The above copyright notice and this permission notice shall be
|
350 |
+
included in all copies or substantial portions of the Software.
|
351 |
+
|
352 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
353 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
354 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
355 |
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
356 |
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
357 |
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
358 |
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
359 |
+
|
360 |
+
===============================================================================
|
src/MMB/Backup.php
CHANGED
@@ -16,12 +16,19 @@
|
|
16 |
*/
|
17 |
class MMB_Backup extends MMB_Core
|
18 |
{
|
|
|
19 |
public $site_name;
|
|
|
20 |
public $statuses;
|
|
|
21 |
public $tasks;
|
|
|
22 |
public $s3;
|
|
|
23 |
public $ftp;
|
|
|
24 |
public $dropbox;
|
|
|
25 |
public $google_drive;
|
26 |
|
27 |
private static $zip_errors = array(
|
@@ -154,11 +161,26 @@ class MMB_Backup extends MMB_Core
|
|
154 |
{
|
155 |
//$params => [$task_name, $args, $error]
|
156 |
if (!empty($params)) {
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
162 |
extract($params);
|
163 |
|
164 |
//$before = $this->get_backup_settings();
|
@@ -178,11 +200,7 @@ class MMB_Backup extends MMB_Core
|
|
178 |
}
|
179 |
|
180 |
$before[$task_name]['task_args'] = $args;
|
181 |
-
|
182 |
-
$before[$task_name]['task_args']['next'] = $this->schedule_next($args['type'], $args['schedule']);
|
183 |
-
}
|
184 |
-
|
185 |
-
$return = $before[$task_name];
|
186 |
}
|
187 |
|
188 |
//Update with error
|
@@ -202,10 +220,10 @@ class MMB_Backup extends MMB_Core
|
|
202 |
}
|
203 |
|
204 |
$this->update_tasks($before);
|
205 |
-
//update_option('mwp_backup_tasks', $before);
|
206 |
|
207 |
if ($task_name == 'Backup Now') {
|
208 |
-
$
|
|
|
209 |
$backup_settings = $this->tasks;
|
210 |
|
211 |
if (is_array($result) && array_key_exists('error', $result)) {
|
@@ -221,109 +239,16 @@ class MMB_Backup extends MMB_Core
|
|
221 |
return false;
|
222 |
}
|
223 |
|
224 |
-
/**
|
225 |
-
* Checks if scheduled task is ready for execution,
|
226 |
-
* if it is ready master sends google_drive_token, failed_emails, success_emails if are needed.
|
227 |
-
* @deprecated deprecated since version 3.9.29
|
228 |
-
* @return void
|
229 |
-
*/
|
230 |
-
public function check_backup_tasks()
|
231 |
-
{
|
232 |
-
$this->check_cron_remove();
|
233 |
-
|
234 |
-
$failed_emails = array();
|
235 |
-
$settings = $this->tasks;
|
236 |
-
if (is_array($settings) && !empty($settings)) {
|
237 |
-
foreach ($settings as $task_name => $setting) {
|
238 |
-
if (isset($setting['task_args']['next']) && $setting['task_args']['next'] < time()) {
|
239 |
-
//if ($setting['task_args']['next'] && $_GET['force_backup']) {
|
240 |
-
if ($setting['task_args']['url'] && $setting['task_args']['task_id'] && $setting['task_args']['site_key']) {
|
241 |
-
//Check orphan task
|
242 |
-
$check_data = array(
|
243 |
-
'task_name' => $task_name,
|
244 |
-
'task_id' => $setting['task_args']['task_id'],
|
245 |
-
'site_key' => $setting['task_args']['site_key'],
|
246 |
-
'worker_version' => $GLOBALS['MMB_WORKER_VERSION'],
|
247 |
-
);
|
248 |
-
|
249 |
-
if (isset($setting['task_args']['account_info']['mwp_google_drive']['google_drive_token'])) {
|
250 |
-
$check_data['mwp_google_drive_refresh_token'] = true;
|
251 |
-
}
|
252 |
-
|
253 |
-
$check = $this->validate_task($check_data, $setting['task_args']['url']);
|
254 |
-
if ($check == 'paused' || $check == 'deleted') {
|
255 |
-
continue;
|
256 |
-
}
|
257 |
-
$worker_upto_3_9_22 = ($GLOBALS['MMB_WORKER_VERSION'] <= '3.9.22'); // worker version is less or equals to 3.9.22
|
258 |
-
|
259 |
-
// This is the patch done in worker 3.9.22 because old worked provided message in the following format:
|
260 |
-
// token - not found or token - {...json...}
|
261 |
-
// The new message is a serialized string with google_drive_token or message.
|
262 |
-
if ($worker_upto_3_9_22) {
|
263 |
-
$potential_token = substr($check, 8);
|
264 |
-
if (substr($check, 0, 8) == 'token - ' && $potential_token != 'not found') {
|
265 |
-
$this->tasks[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
266 |
-
$settings[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
267 |
-
$setting['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
268 |
-
}
|
269 |
-
} else {
|
270 |
-
$potential_token = isset($check['google_drive_token']) ? $check['google_drive_token'] : false;
|
271 |
-
if ($potential_token) {
|
272 |
-
$this->tasks[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
273 |
-
$settings[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
274 |
-
$setting['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
275 |
-
}
|
276 |
-
}
|
277 |
-
}
|
278 |
-
|
279 |
-
$update = array(
|
280 |
-
'task_name' => $task_name,
|
281 |
-
'args' => $settings[$task_name]['task_args'],
|
282 |
-
);
|
283 |
-
|
284 |
-
if ($check != 'paused') {
|
285 |
-
$update['time'] = time();
|
286 |
-
}
|
287 |
-
|
288 |
-
//Update task with next schedule
|
289 |
-
$this->set_backup_task($update);
|
290 |
-
|
291 |
-
if ($check == 'paused') {
|
292 |
-
continue;
|
293 |
-
}
|
294 |
-
|
295 |
-
$result = $this->backup($setting['task_args'], $task_name);
|
296 |
-
$error = '';
|
297 |
-
|
298 |
-
if (is_array($result) && array_key_exists('error', $result)) {
|
299 |
-
$error = $result;
|
300 |
-
$this->set_backup_task(
|
301 |
-
array(
|
302 |
-
'task_name' => $task_name,
|
303 |
-
'args' => $settings[$task_name]['task_args'],
|
304 |
-
'error' => $error,
|
305 |
-
));
|
306 |
-
} else {
|
307 |
-
if (@count($setting['task_args']['account_info'])) {
|
308 |
-
$this->mwp_remote_upload($task_name);
|
309 |
-
}
|
310 |
-
}
|
311 |
-
|
312 |
-
break; //Only one backup per cron
|
313 |
-
}
|
314 |
-
}
|
315 |
-
}
|
316 |
-
}
|
317 |
-
|
318 |
/**
|
319 |
* Runs backup task invoked from ManageWP master.
|
320 |
*
|
321 |
-
* @param string
|
322 |
* @param string|bool[optional] $google_drive_token false if backup destination is not Google Drive, json of Google Drive token if it is remote destination (default: false)
|
|
|
323 |
*
|
324 |
* @return mixed array with backup statistics if successful, array with error message if not
|
325 |
*/
|
326 |
-
public function task_now($task_name, $google_drive_token = false)
|
327 |
{
|
328 |
if ($google_drive_token) {
|
329 |
$this->tasks[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $google_drive_token;
|
@@ -343,7 +268,7 @@ class MMB_Backup extends MMB_Core
|
|
343 |
));
|
344 |
|
345 |
//Run backup
|
346 |
-
$result = $this->backup($setting['task_args'], $task_name);
|
347 |
|
348 |
//Check for error
|
349 |
if (is_array($result) && array_key_exists('error', $result)) {
|
@@ -363,17 +288,18 @@ class MMB_Backup extends MMB_Core
|
|
363 |
* Backup a full wordpress instance, including a database dump, which is placed in mwp_db dir in root folder.
|
364 |
* All backups are compressed by zip and placed in wp-content/managewp/backups folder.
|
365 |
*
|
366 |
-
* @param string
|
367 |
* [type] -> db, full
|
368 |
* [what] -> daily, weekly, monthly
|
369 |
* [account_info] -> remote destinations ftp, amazons3, dropbox, google_drive, email with their parameters
|
370 |
* [include] -> array of folders from site root which are included to backup (wp-admin, wp-content, wp-includes are default)
|
371 |
* [exclude] -> array of files of folders to exclude, relative to site's root
|
372 |
* @param bool|string[optional] $task_name the name of backup task, which backup is done (default: false)
|
|
|
373 |
*
|
374 |
* @return bool|array false if $args are missing, array with error if error has occured, ture if is successful
|
375 |
*/
|
376 |
-
public function backup($args, $task_name = false)
|
377 |
{
|
378 |
if (!$args || empty($args)) {
|
379 |
return false;
|
@@ -476,6 +402,9 @@ class MMB_Backup extends MMB_Core
|
|
476 |
}
|
477 |
|
478 |
$paths['duration'] = $duration.'s';
|
|
|
|
|
|
|
479 |
|
480 |
if ($task_name != 'Backup Now') {
|
481 |
$paths['server'] = array(
|
@@ -509,7 +438,10 @@ class MMB_Backup extends MMB_Core
|
|
509 |
}
|
510 |
|
511 |
if (isset($backup_settings[$task_name]['task_args']['account_info']['mwp_google_drive'])) {
|
512 |
-
$paths['google_drive'] =
|
|
|
|
|
|
|
513 |
}
|
514 |
|
515 |
$temp = $backup_settings[$task_name]['task_results'];
|
@@ -525,7 +457,6 @@ class MMB_Backup extends MMB_Core
|
|
525 |
|
526 |
$backup_settings[$task_name]['task_results'] = $temp;
|
527 |
$this->update_tasks($backup_settings);
|
528 |
-
//update_option('mwp_backup_tasks', $backup_settings);
|
529 |
}
|
530 |
|
531 |
// If there are not remote destination, set up task status to finished
|
@@ -540,10 +471,10 @@ class MMB_Backup extends MMB_Core
|
|
540 |
* Backup a full wordpress instance, including a database dump, which is placed in mwp_db dir in root folder.
|
541 |
* All backups are compressed by zip and placed in wp-content/managewp/backups folder.
|
542 |
*
|
543 |
-
* @param string
|
544 |
-
* @param string
|
545 |
-
* @param
|
546 |
-
* @param
|
547 |
*
|
548 |
* @return bool|array true if backup is successful, or an array with error message if is failed
|
549 |
*/
|
@@ -602,7 +533,7 @@ class MMB_Backup extends MMB_Core
|
|
602 |
@unlink($db_result);
|
603 |
@rmdir(MWP_DB_DIR);
|
604 |
|
605 |
-
$remove
|
606 |
trim(basename(WP_CONTENT_DIR))."/managewp/backups",
|
607 |
trim(basename(WP_CONTENT_DIR))."/infinitewp/backups",
|
608 |
trim(basename(WP_CONTENT_DIR))."/".md5('mmb-worker')."/mwp_backups",
|
@@ -613,6 +544,7 @@ class MMB_Backup extends MMB_Core
|
|
613 |
trim(basename(WP_CONTENT_DIR))."/old-cache",
|
614 |
trim(basename(WP_CONTENT_DIR))."/uploads/backupbuddy_backups",
|
615 |
trim(basename(WP_CONTENT_DIR))."/w3tc",
|
|
|
616 |
"dbcache",
|
617 |
"pgcache",
|
618 |
"objectcache",
|
@@ -1193,12 +1125,10 @@ class MMB_Backup extends MMB_Core
|
|
1193 |
if (!$zip_db_result) {
|
1194 |
$zip_archive_db_result = false;
|
1195 |
if (class_exists("ZipArchive")) {
|
1196 |
-
$this->_log("DB zip, fallback to ZipArchive");
|
1197 |
$zip_archive_db_result = $this->zip_archive_backup_db($task_name, $db_result, $backup_file);
|
1198 |
}
|
1199 |
|
1200 |
if (!$zip_archive_db_result) {
|
1201 |
-
$this->_log("DB zip, fallback to PclZip");
|
1202 |
$pclzip_db_result = $this->pclzip_backup_db($task_name, $backup_file);
|
1203 |
if (!$pclzip_db_result) {
|
1204 |
@unlink(MWP_BACKUP_DIR.'/mwp_db/index.php');
|
@@ -1491,10 +1421,28 @@ class MMB_Backup extends MMB_Core
|
|
1491 |
return false;
|
1492 |
}
|
1493 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1494 |
if (isset($params['google_drive_token'])) {
|
1495 |
$this->tasks[$params['task_name']]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $params['google_drive_token'];
|
1496 |
}
|
1497 |
-
if (!empty($params['backup_url']) || !isset($this->tasks[$params['task_name']]['task_results'][$
|
1498 |
/* If it is on server don't delete zipped file file after restore */
|
1499 |
$deleteBackupAfterRestore = true;
|
1500 |
}
|
@@ -1502,7 +1450,7 @@ class MMB_Backup extends MMB_Core
|
|
1502 |
$this->set_memory();
|
1503 |
/* Get backup file*/
|
1504 |
try {
|
1505 |
-
$backupFile = $this->getBackup(stripslashes($params['task_name']), $
|
1506 |
} catch (Exception $e) {
|
1507 |
return array(
|
1508 |
'error' => $e->getMessage(),
|
@@ -1620,14 +1568,28 @@ class MMB_Backup extends MMB_Core
|
|
1620 |
return $result;
|
1621 |
}
|
1622 |
|
|
|
|
|
|
|
1623 |
private function getAdminUsers()
|
1624 |
{
|
1625 |
-
global $wpdb;
|
1626 |
$users = get_users(array(
|
1627 |
'role' => array('administrator'),
|
1628 |
'fields' => array('user_login'),
|
1629 |
));
|
1630 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1631 |
return $users;
|
1632 |
}
|
1633 |
|
@@ -1683,9 +1645,16 @@ class MMB_Backup extends MMB_Core
|
|
1683 |
throw new Exception('Failed to download file from Dropbox.');
|
1684 |
}
|
1685 |
} elseif (isset($task['task_results'][$resultId]['google_drive'])) {
|
1686 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1687 |
$params = $task['task_args']['account_info']['mwp_google_drive'];
|
1688 |
$params['backup_file'] = $googleDriveFile;
|
|
|
1689 |
$backupFile = $this->get_google_drive_backup($params);
|
1690 |
|
1691 |
if (is_array($backupFile) && isset($backupFile['error'])) {
|
@@ -1726,6 +1695,7 @@ class MMB_Backup extends MMB_Core
|
|
1726 |
if (trim($cloneFromUrl) || trim($mwpClone)) {
|
1727 |
$oldOptions['clone_options']['_worker_nossl_key'] = get_option('_worker_nossl_key');
|
1728 |
$oldOptions['clone_options']['_worker_public_key'] = get_option('_worker_public_key');
|
|
|
1729 |
$oldOptions['clone_options']['_action_message_id'] = get_option('_action_message_id');
|
1730 |
}
|
1731 |
$oldOptions['clone_options']['upload_path'] = get_option('upload_path');
|
@@ -2383,8 +2353,8 @@ class MMB_Backup extends MMB_Core
|
|
2383 |
$attachments = array(
|
2384 |
$backup_file,
|
2385 |
);
|
2386 |
-
$headers
|
2387 |
-
$subject
|
2388 |
ob_start();
|
2389 |
$result = wp_mail($email, $subject, $subject, $headers, $attachments);
|
2390 |
ob_end_clean();
|
@@ -3285,6 +3255,8 @@ class MMB_Backup extends MMB_Core
|
|
3285 |
* Uploads backup file from server to Google Drive.
|
3286 |
*
|
3287 |
* @param array $args arguments passed to the function
|
|
|
|
|
3288 |
* [google_drive_token] -> user's Google drive token in json form
|
3289 |
* [google_drive_directory] -> folder on user's Google Drive account which backup file should be upload to
|
3290 |
* [google_drive_site_folder] -> subfolder with site name in google_drive_directory which backup file should be upload to
|
@@ -3457,6 +3429,7 @@ class MMB_Backup extends MMB_Core
|
|
3457 |
'error' => 'Upload to Google Drive was not successful.',
|
3458 |
);
|
3459 |
}
|
|
|
3460 |
|
3461 |
mwp_logger()->info('Upload to Google Drive completed; average speed is {speed}/s', array(
|
3462 |
'speed' => mwp_format_bytes(round($fileSize / (microtime(true) - $started))),
|
@@ -3497,6 +3470,16 @@ class MMB_Backup extends MMB_Core
|
|
3497 |
|
3498 |
$driveService = new Google_Service_Drive($googleClient);
|
3499 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3500 |
mwp_logger()->info('Fetching Google Drive root folder ID');
|
3501 |
try {
|
3502 |
$about = $driveService->about->get();
|
@@ -3534,7 +3517,6 @@ class MMB_Backup extends MMB_Core
|
|
3534 |
$listFiles = $driveService->files->listFiles(array("q" => "title='".addslashes($subFolderTitle)."' and '$managewpFolderId' in parents and trashed = false"));
|
3535 |
$files = $listFiles->getItems();
|
3536 |
} catch (Exception $e) {
|
3537 |
-
$this->_log($e->getMessage());
|
3538 |
/*return array(
|
3539 |
'error' => $e->getMessage(),
|
3540 |
);*/
|
@@ -3553,7 +3535,6 @@ class MMB_Backup extends MMB_Core
|
|
3553 |
$listFiles = $driveService->files->listFiles(array("q" => "title='".addslashes($args['backup_file'])."' and '$backup_folder_id' in parents and trashed = false"));
|
3554 |
$files = $listFiles->getItems();
|
3555 |
} catch (Exception $e) {
|
3556 |
-
$this->_log($e->getMessage());
|
3557 |
/*return array(
|
3558 |
'error' => $e->getMessage(),
|
3559 |
);*/
|
@@ -3577,6 +3558,7 @@ class MMB_Backup extends MMB_Core
|
|
3577 |
* [google_drive_directory] -> folder on user's Google Drive account which backup file should be downloaded from
|
3578 |
* [google_drive_site_folder] -> subfolder with site name in google_drive_directory which backup file should be downloaded from
|
3579 |
* [backup_file] -> absolute path of backup file on local server
|
|
|
3580 |
*
|
3581 |
* @return bool|array absolute path to downloaded file is successful, array with error message if not
|
3582 |
*/
|
@@ -3600,79 +3582,94 @@ class MMB_Backup extends MMB_Core
|
|
3600 |
'error' => 'Error while connecting to Google Drive: '.$e->getMessage(),
|
3601 |
);
|
3602 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3603 |
|
3604 |
-
|
3605 |
-
|
3606 |
-
|
3607 |
-
|
3608 |
-
));
|
3609 |
-
} catch (Exception $e) {
|
3610 |
-
mwp_logger()->error('Error while looking for backup directory', array(
|
3611 |
-
'exception' => $e,
|
3612 |
-
));
|
3613 |
|
3614 |
-
|
3615 |
-
|
3616 |
-
|
3617 |
-
|
3618 |
|
3619 |
-
|
3620 |
-
|
3621 |
-
|
3622 |
-
|
3623 |
|
3624 |
-
|
3625 |
-
|
3626 |
-
|
3627 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3628 |
|
3629 |
-
|
3630 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3631 |
|
3632 |
-
if ($args['google_drive_site_folder']) {
|
3633 |
-
mwp_logger()->info('Looking into the site folder');
|
3634 |
try {
|
3635 |
-
$
|
3636 |
-
'q' => sprintf("title='%s' and '%s' in parents and trashed = false", addslashes($
|
3637 |
));
|
3638 |
} catch (Exception $e) {
|
3639 |
-
mwp_logger()->error('Error while
|
|
|
3640 |
'exception' => $e,
|
3641 |
));
|
3642 |
|
3643 |
return array(
|
3644 |
-
'error' => 'Error while
|
3645 |
);
|
3646 |
}
|
3647 |
|
3648 |
-
if (
|
3649 |
-
|
|
|
|
|
3650 |
}
|
3651 |
-
|
3652 |
-
|
3653 |
-
|
3654 |
-
|
3655 |
-
|
3656 |
-
|
3657 |
-
|
3658 |
-
|
3659 |
-
|
3660 |
-
|
3661 |
-
|
3662 |
-
|
3663 |
-
return array(
|
3664 |
-
'error' => 'Error while fetching Google Drive backup file: '.$e->getMessage(),
|
3665 |
-
);
|
3666 |
-
}
|
3667 |
|
3668 |
-
|
3669 |
-
|
3670 |
-
|
3671 |
-
|
3672 |
}
|
3673 |
|
3674 |
-
/** @var Google_Service_Drive_DriveFile $backupFile */
|
3675 |
-
$backupFile = $backupFiles->offsetGet(0);
|
3676 |
$downloadUrl = $backupFile->getDownloadUrl();
|
3677 |
$downloadLocation = ABSPATH.'mwp_temp_backup.zip';
|
3678 |
$fileSize = $backupFile->getFileSize();
|
@@ -3726,101 +3723,6 @@ class MMB_Backup extends MMB_Core
|
|
3726 |
return $downloadLocation;
|
3727 |
}
|
3728 |
|
3729 |
-
/**
|
3730 |
-
* Schedules the next execution of some backup task.
|
3731 |
-
*
|
3732 |
-
* @param string $type daily, weekly or monthly
|
3733 |
-
* @param string $schedule format: task_time (if daily), task_time|task_day (if weekly), task_time|task_date (if monthly)
|
3734 |
-
*
|
3735 |
-
* @return bool|int timestamp if sucessful, false if not
|
3736 |
-
*/
|
3737 |
-
public function schedule_next($type, $schedule)
|
3738 |
-
{
|
3739 |
-
$schedule = explode("|", $schedule);
|
3740 |
-
|
3741 |
-
if (empty($schedule)) {
|
3742 |
-
return false;
|
3743 |
-
}
|
3744 |
-
switch ($type) {
|
3745 |
-
case 'daily':
|
3746 |
-
if (isset($schedule[1]) && $schedule[1]) {
|
3747 |
-
$delay_time = $schedule[1] * 60;
|
3748 |
-
}
|
3749 |
-
|
3750 |
-
$current_hour = date("H");
|
3751 |
-
$schedule_hour = $schedule[0];
|
3752 |
-
if ($current_hour >= $schedule_hour) {
|
3753 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), date("d") + 1, date("Y"));
|
3754 |
-
} else {
|
3755 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), date("d"), date("Y"));
|
3756 |
-
}
|
3757 |
-
break;
|
3758 |
-
|
3759 |
-
case 'weekly':
|
3760 |
-
if (isset($schedule[2]) && $schedule[2]) {
|
3761 |
-
$delay_time = $schedule[2] * 60;
|
3762 |
-
}
|
3763 |
-
$current_weekday = date('w');
|
3764 |
-
$schedule_weekday = $schedule[1];
|
3765 |
-
$current_hour = date("H");
|
3766 |
-
$schedule_hour = $schedule[0];
|
3767 |
-
|
3768 |
-
if ($current_weekday > $schedule_weekday) {
|
3769 |
-
$weekday_offset = 7 - ($week_day - $task_schedule[1]);
|
3770 |
-
} else {
|
3771 |
-
$weekday_offset = $schedule_weekday - $current_weekday;
|
3772 |
-
}
|
3773 |
-
|
3774 |
-
if (!$weekday_offset) { //today is scheduled weekday
|
3775 |
-
if ($current_hour >= $schedule_hour) {
|
3776 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), date("d") + 7, date("Y"));
|
3777 |
-
} else {
|
3778 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), date("d"), date("Y"));
|
3779 |
-
}
|
3780 |
-
} else {
|
3781 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), date("d") + $weekday_offset, date("Y"));
|
3782 |
-
}
|
3783 |
-
break;
|
3784 |
-
|
3785 |
-
case 'monthly':
|
3786 |
-
if (isset($schedule[2]) && $schedule[2]) {
|
3787 |
-
$delay_time = $schedule[2] * 60;
|
3788 |
-
}
|
3789 |
-
$current_monthday = date('j');
|
3790 |
-
$schedule_monthday = $schedule[1];
|
3791 |
-
$current_hour = date("H");
|
3792 |
-
$schedule_hour = $schedule[0];
|
3793 |
-
|
3794 |
-
if ($current_monthday > $schedule_monthday) {
|
3795 |
-
$time = mktime($schedule_hour, 0, 0, date("m") + 1, $schedule_monthday, date("Y"));
|
3796 |
-
} else {
|
3797 |
-
if ($current_monthday < $schedule_monthday) {
|
3798 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), $schedule_monthday, date("Y"));
|
3799 |
-
} else {
|
3800 |
-
if ($current_monthday == $schedule_monthday) {
|
3801 |
-
if ($current_hour >= $schedule_hour) {
|
3802 |
-
$time = mktime($schedule_hour, 0, 0, date("m") + 1, $schedule_monthday, date("Y"));
|
3803 |
-
} else {
|
3804 |
-
$time = mktime($schedule_hour, 0, 0, date("m"), $schedule_monthday, date("Y"));
|
3805 |
-
}
|
3806 |
-
break;
|
3807 |
-
}
|
3808 |
-
}
|
3809 |
-
}
|
3810 |
-
|
3811 |
-
break;
|
3812 |
-
|
3813 |
-
default:
|
3814 |
-
break;
|
3815 |
-
}
|
3816 |
-
|
3817 |
-
if (isset($delay_time) && $delay_time) {
|
3818 |
-
$time += $delay_time;
|
3819 |
-
}
|
3820 |
-
|
3821 |
-
return $time;
|
3822 |
-
}
|
3823 |
-
|
3824 |
/**
|
3825 |
* Parse task arguments for info on master.
|
3826 |
*
|
@@ -3850,24 +3752,6 @@ class MMB_Backup extends MMB_Core
|
|
3850 |
return $stats;
|
3851 |
}
|
3852 |
|
3853 |
-
/**
|
3854 |
-
* Returns all backup tasks with information when the next schedule will be.
|
3855 |
-
*
|
3856 |
-
* @return mixed associative array with timestamp with next schedule for every backup task
|
3857 |
-
*/
|
3858 |
-
public function get_next_schedules()
|
3859 |
-
{
|
3860 |
-
$stats = array();
|
3861 |
-
$tasks = $this->tasks;
|
3862 |
-
if (is_array($tasks) && !empty($tasks)) {
|
3863 |
-
foreach ($tasks as $task_name => $info) {
|
3864 |
-
$stats[$task_name] = isset($info['task_args']['next']) ? $info['task_args']['next'] : array();
|
3865 |
-
}
|
3866 |
-
}
|
3867 |
-
|
3868 |
-
return $stats;
|
3869 |
-
}
|
3870 |
-
|
3871 |
/**
|
3872 |
* Deletes all old backups from local server.
|
3873 |
* It depends on configuration on master (Number of backups to keep).
|
@@ -3928,9 +3812,16 @@ class MMB_Backup extends MMB_Core
|
|
3928 |
}
|
3929 |
|
3930 |
if (isset($backups[$task_name]['task_results'][$i]['google_drive']) && isset($backups[$task_name]['task_args']['account_info']['mwp_google_drive'])) {
|
3931 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3932 |
$args = $backups[$task_name]['task_args']['account_info']['mwp_google_drive'];
|
3933 |
$args['backup_file'] = $google_drive_file;
|
|
|
3934 |
$this->remove_google_drive_backup($args);
|
3935 |
}
|
3936 |
|
@@ -3955,8 +3846,9 @@ class MMB_Backup extends MMB_Core
|
|
3955 |
*
|
3956 |
* @param array $args arguments passed to function
|
3957 |
* [task_name] -> name of backup task
|
3958 |
-
* [result_id] -> id of baskup task result, which should be restored
|
3959 |
* [google_drive_token] -> json of Google Drive token, if it is remote destination
|
|
|
3960 |
*
|
3961 |
* @return bool true if successful, false if not
|
3962 |
*/
|
@@ -3973,9 +3865,21 @@ class MMB_Backup extends MMB_Core
|
|
3973 |
|
3974 |
$tasks = $this->tasks;
|
3975 |
|
3976 |
-
$task
|
3977 |
-
$backups
|
3978 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3979 |
|
3980 |
if (isset($backup['server'])) {
|
3981 |
@unlink($backup['server']['file_path']);
|
@@ -4010,9 +3914,16 @@ class MMB_Backup extends MMB_Core
|
|
4010 |
}
|
4011 |
|
4012 |
if (isset($backup['google_drive'])) {
|
4013 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
4014 |
$args = $tasks[$task_name]['task_args']['account_info']['mwp_google_drive'];
|
4015 |
$args['backup_file'] = $google_drive_file;
|
|
|
4016 |
$this->remove_google_drive_backup($args);
|
4017 |
}
|
4018 |
|
@@ -4026,7 +3937,6 @@ class MMB_Backup extends MMB_Core
|
|
4026 |
|
4027 |
$this->update_tasks($tasks);
|
4028 |
|
4029 |
-
//update_option('mwp_backup_tasks', $tasks);
|
4030 |
return true;
|
4031 |
}
|
4032 |
|
@@ -4129,10 +4039,22 @@ class MMB_Backup extends MMB_Core
|
|
4129 |
extract($task['task_args']);
|
4130 |
}
|
4131 |
|
4132 |
-
$results
|
|
|
|
|
4133 |
|
4134 |
if (is_array($results) && count($results)) {
|
4135 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4136 |
}
|
4137 |
|
4138 |
if ($backup_file && file_exists($backup_file)) {
|
@@ -4200,8 +4122,11 @@ class MMB_Backup extends MMB_Core
|
|
4200 |
|
4201 |
if (isset($account_info['mwp_google_drive']) && !empty($account_info['mwp_google_drive'])) {
|
4202 |
$this->update_status($task_name, $this->statuses['google_drive']);
|
4203 |
-
$account_info['mwp_google_drive']['backup_file']
|
4204 |
-
$
|
|
|
|
|
|
|
4205 |
$this->wpdb_reconnect();
|
4206 |
|
4207 |
if (!(is_array($return) && isset($return['error']))) {
|
@@ -4217,6 +4142,7 @@ class MMB_Backup extends MMB_Core
|
|
4217 |
unset($tasks[$task_name]['task_results'][count($tasks[$task_name]['task_results']) - 1]['server']);
|
4218 |
}
|
4219 |
$this->update_tasks($tasks);
|
|
|
4220 |
} else {
|
4221 |
$return = array(
|
4222 |
'error' => 'Backup file not found on your server. Please try again.',
|
@@ -4227,65 +4153,6 @@ class MMB_Backup extends MMB_Core
|
|
4227 |
return $return;
|
4228 |
}
|
4229 |
|
4230 |
-
/**
|
4231 |
-
* Checks if scheduled backup tasks should be executed.
|
4232 |
-
*
|
4233 |
-
* @param array $args arguments passed to function
|
4234 |
-
* [task_name] -> name of backup task
|
4235 |
-
* [task_id] -> id of backup task
|
4236 |
-
* [$site_key] -> hash key of backup task
|
4237 |
-
* [worker_version] -> version of worker
|
4238 |
-
* [mwp_google_drive_refresh_token] -> should be Google Drive token be refreshed, true if it is remote destination of task
|
4239 |
-
* @param string $url url on master where worker validate task
|
4240 |
-
*
|
4241 |
-
* @return string|array|boolean
|
4242 |
-
*/
|
4243 |
-
public function validate_task($args, $url)
|
4244 |
-
{
|
4245 |
-
if (!class_exists('WP_Http')) {
|
4246 |
-
include_once ABSPATH.WPINC.'/class-http.php';
|
4247 |
-
}
|
4248 |
-
|
4249 |
-
$worker_upto_3_9_22 = ($GLOBALS['MMB_WORKER_VERSION'] <= '3.9.22'); // worker version is less or equals to 3.9.22
|
4250 |
-
$params = array('timeout' => 100);
|
4251 |
-
$params['body'] = $args;
|
4252 |
-
$result = wp_remote_post($url, $params);
|
4253 |
-
|
4254 |
-
if ($worker_upto_3_9_22) {
|
4255 |
-
if (is_array($result) && $result['body'] == 'mwp_delete_task') {
|
4256 |
-
//$tasks = $this->get_backup_settings();
|
4257 |
-
$tasks = $this->tasks;
|
4258 |
-
unset($tasks[$args['task_name']]);
|
4259 |
-
$this->update_tasks($tasks);
|
4260 |
-
$this->cleanup();
|
4261 |
-
|
4262 |
-
return 'deleted';
|
4263 |
-
} elseif (is_array($result) && $result['body'] == 'mwp_pause_task') {
|
4264 |
-
return 'paused';
|
4265 |
-
} elseif (is_array($result) && substr($result['body'], 0, 8) == 'token - ') {
|
4266 |
-
return $result['body'];
|
4267 |
-
}
|
4268 |
-
} else {
|
4269 |
-
if (is_array($result) && $result['body']) {
|
4270 |
-
$response = unserialize($result['body']);
|
4271 |
-
if ($response['message'] == 'mwp_delete_task') {
|
4272 |
-
$tasks = $this->tasks;
|
4273 |
-
unset($tasks[$args['task_name']]);
|
4274 |
-
$this->update_tasks($tasks);
|
4275 |
-
$this->cleanup();
|
4276 |
-
|
4277 |
-
return 'deleted';
|
4278 |
-
} elseif ($response['message'] == 'mwp_pause_task') {
|
4279 |
-
return 'paused';
|
4280 |
-
} elseif ($response['message'] == 'mwp_do_task') {
|
4281 |
-
return $response;
|
4282 |
-
}
|
4283 |
-
}
|
4284 |
-
}
|
4285 |
-
|
4286 |
-
return false;
|
4287 |
-
}
|
4288 |
-
|
4289 |
/**
|
4290 |
* Updates status of backup task.
|
4291 |
* Positive number if completed, negative if not.
|
@@ -4324,7 +4191,6 @@ class MMB_Backup extends MMB_Core
|
|
4324 |
}
|
4325 |
|
4326 |
$this->update_tasks($tasks);
|
4327 |
-
//update_option('mwp_backup_tasks',$tasks);
|
4328 |
}
|
4329 |
}
|
4330 |
|
@@ -4382,93 +4248,6 @@ class MMB_Backup extends MMB_Core
|
|
4382 |
}
|
4383 |
}
|
4384 |
|
4385 |
-
/**
|
4386 |
-
* Removes cron for checking scheduled tasks, if there are not any scheduled task.
|
4387 |
-
*
|
4388 |
-
* @return void
|
4389 |
-
*/
|
4390 |
-
public function check_cron_remove()
|
4391 |
-
{
|
4392 |
-
if (empty($this->tasks) || (count($this->tasks) == 1 && isset($this->tasks['Backup Now']))) {
|
4393 |
-
wp_clear_scheduled_hook('mwp_backup_tasks');
|
4394 |
-
exit;
|
4395 |
-
}
|
4396 |
-
}
|
4397 |
-
|
4398 |
-
/**
|
4399 |
-
* Re-add tasks on website re-add.
|
4400 |
-
*
|
4401 |
-
* @param array $params arguments passed to function
|
4402 |
-
*
|
4403 |
-
* @return array $params without backups
|
4404 |
-
*/
|
4405 |
-
public function readd_tasks($params = array())
|
4406 |
-
{
|
4407 |
-
global $mmb_core;
|
4408 |
-
|
4409 |
-
if (empty($params) || !isset($params['backups'])) {
|
4410 |
-
return $params;
|
4411 |
-
}
|
4412 |
-
|
4413 |
-
$before = array();
|
4414 |
-
$tasks = $params['backups'];
|
4415 |
-
if (!empty($tasks)) {
|
4416 |
-
$mmb_backup = new MMB_Backup();
|
4417 |
-
|
4418 |
-
if (function_exists('wp_next_scheduled')) {
|
4419 |
-
/*if (!wp_next_scheduled('mwp_backup_tasks')) {
|
4420 |
-
wp_schedule_event(time(), 'tenminutes', 'mwp_backup_tasks');
|
4421 |
-
}*/
|
4422 |
-
}
|
4423 |
-
|
4424 |
-
foreach ($tasks as $task) {
|
4425 |
-
$before[$task['task_name']] = array();
|
4426 |
-
|
4427 |
-
if (isset($task['secure'])) {
|
4428 |
-
if (is_array($task['secure'])) {
|
4429 |
-
$secureParams = $task['secure'];
|
4430 |
-
foreach ($secureParams as $key => $value) {
|
4431 |
-
$secureParams[$key] = base64_decode($value);
|
4432 |
-
}
|
4433 |
-
$task['secure'] = $secureParams;
|
4434 |
-
} else {
|
4435 |
-
$task['secure'] = base64_decode($task['secure']);
|
4436 |
-
}
|
4437 |
-
if ($decrypted = $mmb_core->_secure_data($task['secure'])) {
|
4438 |
-
$decrypted = maybe_unserialize($decrypted);
|
4439 |
-
if (is_array($decrypted)) {
|
4440 |
-
foreach ($decrypted as $key => $val) {
|
4441 |
-
if (!is_numeric($key)) {
|
4442 |
-
$task[$key] = $val;
|
4443 |
-
}
|
4444 |
-
}
|
4445 |
-
unset($task['secure']);
|
4446 |
-
} else {
|
4447 |
-
$task['secure'] = $decrypted;
|
4448 |
-
}
|
4449 |
-
}
|
4450 |
-
if (!$decrypted && $mmb_core->get_random_signature() !== false) {
|
4451 |
-
$cipher = new Crypt_AES(CRYPT_AES_MODE_ECB);
|
4452 |
-
$cipher->setKey($mmb_core->get_random_signature());
|
4453 |
-
$decrypted = $cipher->decrypt($task['secure']);
|
4454 |
-
$task['account_info'] = json_decode($decrypted, true);
|
4455 |
-
}
|
4456 |
-
}
|
4457 |
-
if (isset($task['account_info']) && is_array($task['account_info'])) { //only if sends from master first time(secure data)
|
4458 |
-
$task['args']['account_info'] = $task['account_info'];
|
4459 |
-
}
|
4460 |
-
|
4461 |
-
$before[$task['task_name']]['task_args'] = $task['args'];
|
4462 |
-
$before[$task['task_name']]['task_args']['next'] = $mmb_backup->schedule_next($task['args']['type'], $task['args']['schedule']);
|
4463 |
-
}
|
4464 |
-
}
|
4465 |
-
update_option('mwp_backup_tasks', $before);
|
4466 |
-
|
4467 |
-
unset($params['backups']);
|
4468 |
-
|
4469 |
-
return $params;
|
4470 |
-
}
|
4471 |
-
|
4472 |
/**
|
4473 |
* Start backup process. Invoked from remote ping
|
4474 |
*
|
@@ -4492,11 +4271,12 @@ class MMB_Backup extends MMB_Core
|
|
4492 |
$this->tasks[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
4493 |
$task['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
4494 |
}
|
|
|
4495 |
/**
|
4496 |
* From this point I am simulating previous way of working. In order to fix this,
|
4497 |
* I need to refactor greater part, and release is tomorrow morning
|
4498 |
*/
|
4499 |
-
$update
|
4500 |
'task_name' => $task_name,
|
4501 |
'args' => $task['task_args'],
|
4502 |
);
|
@@ -4505,7 +4285,7 @@ class MMB_Backup extends MMB_Core
|
|
4505 |
$this->tasks = get_option('mwp_backup_tasks');
|
4506 |
$task = $this->tasks[$task_name];
|
4507 |
|
4508 |
-
$result = $this->backup($task['task_args'], $task_name);
|
4509 |
|
4510 |
if (is_array($result) && array_key_exists('error', $result)) {
|
4511 |
$return = $result;
|
@@ -4548,10 +4328,6 @@ class MMB_Backup extends MMB_Core
|
|
4548 |
}
|
4549 |
}
|
4550 |
|
4551 |
-
/*if( function_exists('add_filter') ) {
|
4552 |
-
add_filter( 'mwp_website_add', 'MMB_Backup::readd_tasks' );
|
4553 |
-
}*/
|
4554 |
-
|
4555 |
if (!function_exists('get_all_files_from_dir')) {
|
4556 |
/**
|
4557 |
* Get all files in directory
|
@@ -4677,8 +4453,8 @@ function restore_migrate_urls()
|
|
4677 |
$path = getKey('path', $parsedOldSiteUrl, '');
|
4678 |
$oldSiteUrlNoWww = preg_replace('#^www\.(.+\.)#i', '$1', $host).$path;
|
4679 |
$parsedOldSiteUrlNoWww = parse_url(strpos($oldSiteUrlNoWww, '://') === false
|
4680 |
-
|
4681 |
-
|
4682 |
);
|
4683 |
if (isset($parse['scheme'])) {
|
4684 |
$oldSiteUrlNoWww = "{$parse['scheme']}://$oldSiteUrlNoWww";
|
@@ -4788,6 +4564,12 @@ function restore_htaccess()
|
|
4788 |
if ($htaccessRealpath) {
|
4789 |
@rename($htaccessRealpath, "$htaccessRealpath.old");
|
4790 |
}
|
4791 |
-
|
4792 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
4793 |
}
|
16 |
*/
|
17 |
class MMB_Backup extends MMB_Core
|
18 |
{
|
19 |
+
|
20 |
public $site_name;
|
21 |
+
|
22 |
public $statuses;
|
23 |
+
|
24 |
public $tasks;
|
25 |
+
|
26 |
public $s3;
|
27 |
+
|
28 |
public $ftp;
|
29 |
+
|
30 |
public $dropbox;
|
31 |
+
|
32 |
public $google_drive;
|
33 |
|
34 |
private static $zip_errors = array(
|
161 |
{
|
162 |
//$params => [$task_name, $args, $error]
|
163 |
if (!empty($params)) {
|
164 |
+
if (!empty($params['secure'])) {
|
165 |
+
$secure = (array) $params['secure'];
|
166 |
+
$secure = array_map('base64_decode', $secure);
|
167 |
+
if ($secureKey = mwp_container()->getConfiguration()->getSecureKey()) {
|
168 |
+
$secure = implode('', $secure);
|
169 |
+
require_once dirname(__FILE__).'/../PHPSecLib/Crypt/AES.php';
|
170 |
+
$cipher = new Crypt_AES(CRYPT_AES_MODE_ECB);
|
171 |
+
$cipher->setKey($secureKey);
|
172 |
+
$decrypted = array('account_info' => json_decode($cipher->decrypt($secure), true));
|
173 |
+
} else {
|
174 |
+
$decrypted = '';
|
175 |
+
$publicKey = mwp_container()->getConfiguration()->getPublicKey();
|
176 |
+
$crypter = mwp_container()->getCrypter();
|
177 |
+
foreach ($secure as $segment) {
|
178 |
+
$decrypted .= $crypter->publicDecrypt($segment, $publicKey);
|
179 |
+
}
|
180 |
+
$decrypted = unserialize($decrypted);
|
181 |
+
}
|
182 |
+
$params = array_merge($params, (array) $decrypted);
|
183 |
+
}
|
184 |
extract($params);
|
185 |
|
186 |
//$before = $this->get_backup_settings();
|
200 |
}
|
201 |
|
202 |
$before[$task_name]['task_args'] = $args;
|
203 |
+
$return = $before[$task_name];
|
|
|
|
|
|
|
|
|
204 |
}
|
205 |
|
206 |
//Update with error
|
220 |
}
|
221 |
|
222 |
$this->update_tasks($before);
|
|
|
223 |
|
224 |
if ($task_name == 'Backup Now') {
|
225 |
+
$resultUuid = !empty($params['resultUuid']) ? $params['resultUuid'] : false;
|
226 |
+
$result = $this->backup($args, $task_name, $resultUuid);
|
227 |
$backup_settings = $this->tasks;
|
228 |
|
229 |
if (is_array($result) && array_key_exists('error', $result)) {
|
239 |
return false;
|
240 |
}
|
241 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
242 |
/**
|
243 |
* Runs backup task invoked from ManageWP master.
|
244 |
*
|
245 |
+
* @param string $task_name name of backup task
|
246 |
* @param string|bool[optional] $google_drive_token false if backup destination is not Google Drive, json of Google Drive token if it is remote destination (default: false)
|
247 |
+
* @param bool $resultUuid
|
248 |
*
|
249 |
* @return mixed array with backup statistics if successful, array with error message if not
|
250 |
*/
|
251 |
+
public function task_now($task_name, $google_drive_token = false, $resultUuid = false)
|
252 |
{
|
253 |
if ($google_drive_token) {
|
254 |
$this->tasks[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $google_drive_token;
|
268 |
));
|
269 |
|
270 |
//Run backup
|
271 |
+
$result = $this->backup($setting['task_args'], $task_name, $resultUuid);
|
272 |
|
273 |
//Check for error
|
274 |
if (is_array($result) && array_key_exists('error', $result)) {
|
288 |
* Backup a full wordpress instance, including a database dump, which is placed in mwp_db dir in root folder.
|
289 |
* All backups are compressed by zip and placed in wp-content/managewp/backups folder.
|
290 |
*
|
291 |
+
* @param string $args arguments passed from master
|
292 |
* [type] -> db, full
|
293 |
* [what] -> daily, weekly, monthly
|
294 |
* [account_info] -> remote destinations ftp, amazons3, dropbox, google_drive, email with their parameters
|
295 |
* [include] -> array of folders from site root which are included to backup (wp-admin, wp-content, wp-includes are default)
|
296 |
* [exclude] -> array of files of folders to exclude, relative to site's root
|
297 |
* @param bool|string[optional] $task_name the name of backup task, which backup is done (default: false)
|
298 |
+
* @param bool $resultUuid unique identifier for backup result
|
299 |
*
|
300 |
* @return bool|array false if $args are missing, array with error if error has occured, ture if is successful
|
301 |
*/
|
302 |
+
public function backup($args, $task_name = false, $resultUuid = false)
|
303 |
{
|
304 |
if (!$args || empty($args)) {
|
305 |
return false;
|
402 |
}
|
403 |
|
404 |
$paths['duration'] = $duration.'s';
|
405 |
+
if ($resultUuid) {
|
406 |
+
$paths['resultUuid'] = $resultUuid;
|
407 |
+
}
|
408 |
|
409 |
if ($task_name != 'Backup Now') {
|
410 |
$paths['server'] = array(
|
438 |
}
|
439 |
|
440 |
if (isset($backup_settings[$task_name]['task_args']['account_info']['mwp_google_drive'])) {
|
441 |
+
$paths['google_drive'] = array(
|
442 |
+
'file' => basename($backup_url),
|
443 |
+
'file_id' => ''
|
444 |
+
);
|
445 |
}
|
446 |
|
447 |
$temp = $backup_settings[$task_name]['task_results'];
|
457 |
|
458 |
$backup_settings[$task_name]['task_results'] = $temp;
|
459 |
$this->update_tasks($backup_settings);
|
|
|
460 |
}
|
461 |
|
462 |
// If there are not remote destination, set up task status to finished
|
471 |
* Backup a full wordpress instance, including a database dump, which is placed in mwp_db dir in root folder.
|
472 |
* All backups are compressed by zip and placed in wp-content/managewp/backups folder.
|
473 |
*
|
474 |
+
* @param string $task_name the name of backup task, which backup is done
|
475 |
+
* @param string $backup_file relative path to file which backup is stored
|
476 |
+
* @param array [optional] $exclude the list of files and folders, which are excluded from backup (default: array())
|
477 |
+
* @param array [optional] $include the list of folders in wordpress root which are included to backup, expect wp-admin, wp-content, wp-includes, which are default (default: array())
|
478 |
*
|
479 |
* @return bool|array true if backup is successful, or an array with error message if is failed
|
480 |
*/
|
533 |
@unlink($db_result);
|
534 |
@rmdir(MWP_DB_DIR);
|
535 |
|
536 |
+
$remove = array(
|
537 |
trim(basename(WP_CONTENT_DIR))."/managewp/backups",
|
538 |
trim(basename(WP_CONTENT_DIR))."/infinitewp/backups",
|
539 |
trim(basename(WP_CONTENT_DIR))."/".md5('mmb-worker')."/mwp_backups",
|
544 |
trim(basename(WP_CONTENT_DIR))."/old-cache",
|
545 |
trim(basename(WP_CONTENT_DIR))."/uploads/backupbuddy_backups",
|
546 |
trim(basename(WP_CONTENT_DIR))."/w3tc",
|
547 |
+
"error_log",
|
548 |
"dbcache",
|
549 |
"pgcache",
|
550 |
"objectcache",
|
1125 |
if (!$zip_db_result) {
|
1126 |
$zip_archive_db_result = false;
|
1127 |
if (class_exists("ZipArchive")) {
|
|
|
1128 |
$zip_archive_db_result = $this->zip_archive_backup_db($task_name, $db_result, $backup_file);
|
1129 |
}
|
1130 |
|
1131 |
if (!$zip_archive_db_result) {
|
|
|
1132 |
$pclzip_db_result = $this->pclzip_backup_db($task_name, $backup_file);
|
1133 |
if (!$pclzip_db_result) {
|
1134 |
@unlink(MWP_BACKUP_DIR.'/mwp_db/index.php');
|
1421 |
return false;
|
1422 |
}
|
1423 |
|
1424 |
+
$task = $this->tasks[$params['task_name']];
|
1425 |
+
$backups = $task['task_results'];
|
1426 |
+
$result_id = !empty($params['result_id']) ? $params['result_id'] : null;
|
1427 |
+
$backup = !empty($backups[$result_id]) ? $backups[$result_id] : false;
|
1428 |
+
foreach ($backups as $key => $result) {
|
1429 |
+
if ($result['resultUuid'] == $params['resultUuid']) {
|
1430 |
+
$backup = $result;
|
1431 |
+
$result_id = $key;
|
1432 |
+
break;
|
1433 |
+
}
|
1434 |
+
}
|
1435 |
+
|
1436 |
+
if (!$backup && empty($params['backup_url'])) {
|
1437 |
+
return array(
|
1438 |
+
'error' => 'Unknown result UUID or backup URL.',
|
1439 |
+
);
|
1440 |
+
}
|
1441 |
+
|
1442 |
if (isset($params['google_drive_token'])) {
|
1443 |
$this->tasks[$params['task_name']]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $params['google_drive_token'];
|
1444 |
}
|
1445 |
+
if (!empty($params['backup_url']) || !isset($this->tasks[$params['task_name']]['task_results'][$result_id]['server'])) {
|
1446 |
/* If it is on server don't delete zipped file file after restore */
|
1447 |
$deleteBackupAfterRestore = true;
|
1448 |
}
|
1450 |
$this->set_memory();
|
1451 |
/* Get backup file*/
|
1452 |
try {
|
1453 |
+
$backupFile = $this->getBackup(stripslashes($params['task_name']), $result_id, $params['backup_url']);
|
1454 |
} catch (Exception $e) {
|
1455 |
return array(
|
1456 |
'error' => $e->getMessage(),
|
1568 |
return $result;
|
1569 |
}
|
1570 |
|
1571 |
+
/**
|
1572 |
+
* @return array An array of stdClass-es with the single property 'user_login' (string). Example: [ (object) ['user_login' => 'admin' ] ]
|
1573 |
+
*/
|
1574 |
private function getAdminUsers()
|
1575 |
{
|
|
|
1576 |
$users = get_users(array(
|
1577 |
'role' => array('administrator'),
|
1578 |
'fields' => array('user_login'),
|
1579 |
));
|
1580 |
|
1581 |
+
if (!count($users)) {
|
1582 |
+
// @todo Investigate why the above doesn't work on PHP 5.2.
|
1583 |
+
$users = get_users(array('role' => 'administrator', 'number' => 1, 'orderby' => 'ID'));
|
1584 |
+
if (!empty($users[0]->user_login)) {
|
1585 |
+
$users = array(
|
1586 |
+
(object) array(
|
1587 |
+
'user_login' => $users[0]->user_login,
|
1588 |
+
),
|
1589 |
+
);
|
1590 |
+
}
|
1591 |
+
}
|
1592 |
+
|
1593 |
return $users;
|
1594 |
}
|
1595 |
|
1645 |
throw new Exception('Failed to download file from Dropbox.');
|
1646 |
}
|
1647 |
} elseif (isset($task['task_results'][$resultId]['google_drive'])) {
|
1648 |
+
if (is_array($task['task_results'][$resultId]['google_drive'])) {
|
1649 |
+
$googleDriveFile = $task['task_results'][$resultId]['google_drive']['file'];
|
1650 |
+
$googleDriveFileId = $task['task_results'][$resultId]['google_drive']['file_id'];
|
1651 |
+
} else {
|
1652 |
+
$googleDriveFile = $task['task_results'][$resultId]['google_drive'];
|
1653 |
+
$googleDriveFileId = "";
|
1654 |
+
}
|
1655 |
$params = $task['task_args']['account_info']['mwp_google_drive'];
|
1656 |
$params['backup_file'] = $googleDriveFile;
|
1657 |
+
$params['file_id'] = $googleDriveFileId;
|
1658 |
$backupFile = $this->get_google_drive_backup($params);
|
1659 |
|
1660 |
if (is_array($backupFile) && isset($backupFile['error'])) {
|
1695 |
if (trim($cloneFromUrl) || trim($mwpClone)) {
|
1696 |
$oldOptions['clone_options']['_worker_nossl_key'] = get_option('_worker_nossl_key');
|
1697 |
$oldOptions['clone_options']['_worker_public_key'] = get_option('_worker_public_key');
|
1698 |
+
$oldOptions['clone_options']['_worker_orion_key'] = get_option('_worker_orion_key');
|
1699 |
$oldOptions['clone_options']['_action_message_id'] = get_option('_action_message_id');
|
1700 |
}
|
1701 |
$oldOptions['clone_options']['upload_path'] = get_option('upload_path');
|
2353 |
$attachments = array(
|
2354 |
$backup_file,
|
2355 |
);
|
2356 |
+
$headers = 'From: ManageWP <no-reply@managewp.com>'."\r\n";
|
2357 |
+
$subject = "ManageWP - ".$task_name." - ".$this->site_name;
|
2358 |
ob_start();
|
2359 |
$result = wp_mail($email, $subject, $subject, $headers, $attachments);
|
2360 |
ob_end_clean();
|
3255 |
* Uploads backup file from server to Google Drive.
|
3256 |
*
|
3257 |
* @param array $args arguments passed to the function
|
3258 |
+
* [task_name] -> Task name for wich we are uploading
|
3259 |
+
* [task_result_key] -> Result key that we are uploading
|
3260 |
* [google_drive_token] -> user's Google drive token in json form
|
3261 |
* [google_drive_directory] -> folder on user's Google Drive account which backup file should be upload to
|
3262 |
* [google_drive_site_folder] -> subfolder with site name in google_drive_directory which backup file should be upload to
|
3429 |
'error' => 'Upload to Google Drive was not successful.',
|
3430 |
);
|
3431 |
}
|
3432 |
+
$this->tasks[$args['task_name']]['task_results'][$args['task_result_key']]['google_drive']['file_id'] = $status->getId();
|
3433 |
|
3434 |
mwp_logger()->info('Upload to Google Drive completed; average speed is {speed}/s', array(
|
3435 |
'speed' => mwp_format_bytes(round($fileSize / (microtime(true) - $started))),
|
3470 |
|
3471 |
$driveService = new Google_Service_Drive($googleClient);
|
3472 |
|
3473 |
+
if (!empty($args['file_id'])) {
|
3474 |
+
mwp_logger()->info('Deleting Google file by id');
|
3475 |
+
try {
|
3476 |
+
$driveService->files->delete($args['file_id']);
|
3477 |
+
} catch (Exception $e) {
|
3478 |
+
mwp_logger()->error('Error deleting google file by id', array('file_id' => $args['file_id']));
|
3479 |
+
}
|
3480 |
+
|
3481 |
+
return;
|
3482 |
+
}
|
3483 |
mwp_logger()->info('Fetching Google Drive root folder ID');
|
3484 |
try {
|
3485 |
$about = $driveService->about->get();
|
3517 |
$listFiles = $driveService->files->listFiles(array("q" => "title='".addslashes($subFolderTitle)."' and '$managewpFolderId' in parents and trashed = false"));
|
3518 |
$files = $listFiles->getItems();
|
3519 |
} catch (Exception $e) {
|
|
|
3520 |
/*return array(
|
3521 |
'error' => $e->getMessage(),
|
3522 |
);*/
|
3535 |
$listFiles = $driveService->files->listFiles(array("q" => "title='".addslashes($args['backup_file'])."' and '$backup_folder_id' in parents and trashed = false"));
|
3536 |
$files = $listFiles->getItems();
|
3537 |
} catch (Exception $e) {
|
|
|
3538 |
/*return array(
|
3539 |
'error' => $e->getMessage(),
|
3540 |
);*/
|
3558 |
* [google_drive_directory] -> folder on user's Google Drive account which backup file should be downloaded from
|
3559 |
* [google_drive_site_folder] -> subfolder with site name in google_drive_directory which backup file should be downloaded from
|
3560 |
* [backup_file] -> absolute path of backup file on local server
|
3561 |
+
* [file_id] -> google file id
|
3562 |
*
|
3563 |
* @return bool|array absolute path to downloaded file is successful, array with error message if not
|
3564 |
*/
|
3582 |
'error' => 'Error while connecting to Google Drive: '.$e->getMessage(),
|
3583 |
);
|
3584 |
}
|
3585 |
+
if (empty($args['file_id'])) {
|
3586 |
+
mwp_logger()->info('Looking for backup directory');
|
3587 |
+
try {
|
3588 |
+
$backupFolderFiles = $driveService->files->listFiles(array(
|
3589 |
+
'q' => sprintf("title='%s' and '%s' in parents and trashed = false", addslashes($args['google_drive_directory']), $rootFolderId),
|
3590 |
+
));
|
3591 |
+
} catch (Exception $e) {
|
3592 |
+
mwp_logger()->error('Error while looking for backup directory', array(
|
3593 |
+
'exception' => $e,
|
3594 |
+
));
|
3595 |
|
3596 |
+
return array(
|
3597 |
+
'error' => 'Error while looking for backup directory: '.$e->getMessage(),
|
3598 |
+
);
|
3599 |
+
}
|
|
|
|
|
|
|
|
|
|
|
3600 |
|
3601 |
+
if (!$backupFolderFiles->offsetExists(0)) {
|
3602 |
+
mwp_logger()->error('Backup directory ("{directory}") does not exist', array(
|
3603 |
+
'directory' => $args['google_drive_directory'],
|
3604 |
+
));
|
3605 |
|
3606 |
+
return array(
|
3607 |
+
'error' => sprintf("The backup directory (%s) does not exist.", $args['google_drive_directory']),
|
3608 |
+
);
|
3609 |
+
}
|
3610 |
|
3611 |
+
/** @var Google_Service_Drive_DriveFile $backupFolder */
|
3612 |
+
$backupFolder = $backupFolderFiles->offsetGet(0);
|
3613 |
+
|
3614 |
+
if ($args['google_drive_site_folder']) {
|
3615 |
+
mwp_logger()->info('Looking into the site folder');
|
3616 |
+
try {
|
3617 |
+
$siteFolderFiles = $driveService->files->listFiles(array(
|
3618 |
+
'q' => sprintf("title='%s' and '%s' in parents and trashed = false", addslashes($this->site_name), $backupFolder->getId()),
|
3619 |
+
));
|
3620 |
+
} catch (Exception $e) {
|
3621 |
+
mwp_logger()->error('Error while looking for the site folder', array(
|
3622 |
+
'exception' => $e,
|
3623 |
+
));
|
3624 |
|
3625 |
+
return array(
|
3626 |
+
'error' => 'Error while looking for the site folder: '.$e->getMessage(),
|
3627 |
+
);
|
3628 |
+
}
|
3629 |
+
|
3630 |
+
if ($siteFolderFiles->offsetExists(0)) {
|
3631 |
+
$backupFolder = $siteFolderFiles->offsetGet(0);
|
3632 |
+
}
|
3633 |
+
}
|
3634 |
|
|
|
|
|
3635 |
try {
|
3636 |
+
$backupFiles = $driveService->files->listFiles(array(
|
3637 |
+
'q' => sprintf("title='%s' and '%s' in parents and trashed = false", addslashes($args['backup_file']), $backupFolder->getId()),
|
3638 |
));
|
3639 |
} catch (Exception $e) {
|
3640 |
+
mwp_logger()->error('Error while fetching Google Drive backup file', array(
|
3641 |
+
'file_name' => $args['backup_file'],
|
3642 |
'exception' => $e,
|
3643 |
));
|
3644 |
|
3645 |
return array(
|
3646 |
+
'error' => 'Error while fetching Google Drive backup file: '.$e->getMessage(),
|
3647 |
);
|
3648 |
}
|
3649 |
|
3650 |
+
if (!$backupFiles->offsetExists(0)) {
|
3651 |
+
return array(
|
3652 |
+
'error' => sprintf('Backup file "%s" was not found on your Google Drive account.', $args['backup_file']),
|
3653 |
+
);
|
3654 |
}
|
3655 |
+
/** @var Google_Service_Drive_DriveFile $backupFile */
|
3656 |
+
$backupFile = $backupFiles->offsetGet(0);
|
3657 |
+
} else {
|
3658 |
+
try {
|
3659 |
+
/** @var Google_Service_Drive_DriveFile $backupFile */
|
3660 |
+
$backupFile = $driveService->files->get($args['file_id']);
|
3661 |
+
} catch (Exception $e) {
|
3662 |
+
mwp_logger()->error('Error while fetching Google Drive backup file by id', array(
|
3663 |
+
'file_id' => $args['file_id'],
|
3664 |
+
'exception' => $e,
|
3665 |
+
));
|
|
|
|
|
|
|
|
|
|
|
3666 |
|
3667 |
+
return array(
|
3668 |
+
'error' => 'Error while fetching Google Drive backup file: '.$e->getMessage(),
|
3669 |
+
);
|
3670 |
+
}
|
3671 |
}
|
3672 |
|
|
|
|
|
3673 |
$downloadUrl = $backupFile->getDownloadUrl();
|
3674 |
$downloadLocation = ABSPATH.'mwp_temp_backup.zip';
|
3675 |
$fileSize = $backupFile->getFileSize();
|
3723 |
return $downloadLocation;
|
3724 |
}
|
3725 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3726 |
/**
|
3727 |
* Parse task arguments for info on master.
|
3728 |
*
|
3752 |
return $stats;
|
3753 |
}
|
3754 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3755 |
/**
|
3756 |
* Deletes all old backups from local server.
|
3757 |
* It depends on configuration on master (Number of backups to keep).
|
3812 |
}
|
3813 |
|
3814 |
if (isset($backups[$task_name]['task_results'][$i]['google_drive']) && isset($backups[$task_name]['task_args']['account_info']['mwp_google_drive'])) {
|
3815 |
+
if (is_array($backups[$task_name]['task_results'][$i]['google_drive'])) {
|
3816 |
+
$google_drive_file = $backups[$task_name]['task_results'][$i]['google_drive']['file'];
|
3817 |
+
$google_file_id = $backups[$task_name]['task_results'][$i]['google_drive']['file_id'];
|
3818 |
+
} else {
|
3819 |
+
$google_drive_file = $backups[$task_name]['task_results'][$i]['google_drive'];
|
3820 |
+
$google_file_id = "";
|
3821 |
+
}
|
3822 |
$args = $backups[$task_name]['task_args']['account_info']['mwp_google_drive'];
|
3823 |
$args['backup_file'] = $google_drive_file;
|
3824 |
+
$args['file_id'] = $google_file_id;
|
3825 |
$this->remove_google_drive_backup($args);
|
3826 |
}
|
3827 |
|
3846 |
*
|
3847 |
* @param array $args arguments passed to function
|
3848 |
* [task_name] -> name of backup task
|
3849 |
+
* [result_id] -> id of baskup task result, which should be restored (deprecated, use result Uuid now)
|
3850 |
* [google_drive_token] -> json of Google Drive token, if it is remote destination
|
3851 |
+
* [resultUuid] -> unique backup identifier
|
3852 |
*
|
3853 |
* @return bool true if successful, false if not
|
3854 |
*/
|
3865 |
|
3866 |
$tasks = $this->tasks;
|
3867 |
|
3868 |
+
$task = $tasks[$task_name];
|
3869 |
+
$backups = $task['task_results'];
|
3870 |
+
$result_id = !empty($args['result_id']) ? $args['result_id'] : null;
|
3871 |
+
$backup = !empty($backups[$result_id]) ? $backups[$result_id] : false;
|
3872 |
+
foreach ($backups as $key => $result) {
|
3873 |
+
if ($result['resultUuid'] == $args['resultUuid']) {
|
3874 |
+
$backup = $result;
|
3875 |
+
$result_id = $key;
|
3876 |
+
break;
|
3877 |
+
}
|
3878 |
+
}
|
3879 |
+
|
3880 |
+
if (!$backup) {
|
3881 |
+
return false;
|
3882 |
+
}
|
3883 |
|
3884 |
if (isset($backup['server'])) {
|
3885 |
@unlink($backup['server']['file_path']);
|
3914 |
}
|
3915 |
|
3916 |
if (isset($backup['google_drive'])) {
|
3917 |
+
if (is_array($backup['google_drive'])) {
|
3918 |
+
$google_drive_file = $backup['google_drive']['file'];
|
3919 |
+
$google_file_id = $backup['google_drive']['file_id'];
|
3920 |
+
} else {
|
3921 |
+
$google_drive_file = $backup['google_drive'];
|
3922 |
+
$google_file_id = "";
|
3923 |
+
}
|
3924 |
$args = $tasks[$task_name]['task_args']['account_info']['mwp_google_drive'];
|
3925 |
$args['backup_file'] = $google_drive_file;
|
3926 |
+
$args['file_id'] = $google_file_id;
|
3927 |
$this->remove_google_drive_backup($args);
|
3928 |
}
|
3929 |
|
3937 |
|
3938 |
$this->update_tasks($tasks);
|
3939 |
|
|
|
3940 |
return true;
|
3941 |
}
|
3942 |
|
4039 |
extract($task['task_args']);
|
4040 |
}
|
4041 |
|
4042 |
+
$results = $task['task_results'];
|
4043 |
+
$taskResultKey = null;
|
4044 |
+
$backup_file = false;
|
4045 |
|
4046 |
if (is_array($results) && count($results)) {
|
4047 |
+
foreach ($results as $key => $result) {
|
4048 |
+
if (array_key_exists('resultUuid', $result) && $result['resultUuid'] == $args['resultUuid']) {
|
4049 |
+
$backup_file = $result['server']['file_path'];
|
4050 |
+
$taskResultKey = $key;
|
4051 |
+
break;
|
4052 |
+
}
|
4053 |
+
}
|
4054 |
+
if (!$backup_file) {
|
4055 |
+
$backup_file = $results[count($results) - 1]['server']['file_path'];
|
4056 |
+
$taskResultKey = count($results) - 1;
|
4057 |
+
}
|
4058 |
}
|
4059 |
|
4060 |
if ($backup_file && file_exists($backup_file)) {
|
4122 |
|
4123 |
if (isset($account_info['mwp_google_drive']) && !empty($account_info['mwp_google_drive'])) {
|
4124 |
$this->update_status($task_name, $this->statuses['google_drive']);
|
4125 |
+
$account_info['mwp_google_drive']['backup_file'] = $backup_file;
|
4126 |
+
$account_info['mwp_google_drive']['task_name'] = $task_name;
|
4127 |
+
$account_info['mwp_google_drive']['task_result_key'] = $taskResultKey;
|
4128 |
+
|
4129 |
+
$return = $this->google_drive_backup($account_info['mwp_google_drive']);
|
4130 |
$this->wpdb_reconnect();
|
4131 |
|
4132 |
if (!(is_array($return) && isset($return['error']))) {
|
4142 |
unset($tasks[$task_name]['task_results'][count($tasks[$task_name]['task_results']) - 1]['server']);
|
4143 |
}
|
4144 |
$this->update_tasks($tasks);
|
4145 |
+
$return = $this->tasks[$task_name]['task_results'][$taskResultKey];
|
4146 |
} else {
|
4147 |
$return = array(
|
4148 |
'error' => 'Backup file not found on your server. Please try again.',
|
4153 |
return $return;
|
4154 |
}
|
4155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4156 |
/**
|
4157 |
* Updates status of backup task.
|
4158 |
* Positive number if completed, negative if not.
|
4191 |
}
|
4192 |
|
4193 |
$this->update_tasks($tasks);
|
|
|
4194 |
}
|
4195 |
}
|
4196 |
|
4248 |
}
|
4249 |
}
|
4250 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4251 |
/**
|
4252 |
* Start backup process. Invoked from remote ping
|
4253 |
*
|
4271 |
$this->tasks[$task_name]['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
4272 |
$task['task_args']['account_info']['mwp_google_drive']['google_drive_token'] = $potential_token;
|
4273 |
}
|
4274 |
+
$resultUuid = !empty($args['resultUuid']) ? $args['resultUuid'] : false;
|
4275 |
/**
|
4276 |
* From this point I am simulating previous way of working. In order to fix this,
|
4277 |
* I need to refactor greater part, and release is tomorrow morning
|
4278 |
*/
|
4279 |
+
$update = array(
|
4280 |
'task_name' => $task_name,
|
4281 |
'args' => $task['task_args'],
|
4282 |
);
|
4285 |
$this->tasks = get_option('mwp_backup_tasks');
|
4286 |
$task = $this->tasks[$task_name];
|
4287 |
|
4288 |
+
$result = $this->backup($task['task_args'], $task_name, $resultUuid);
|
4289 |
|
4290 |
if (is_array($result) && array_key_exists('error', $result)) {
|
4291 |
$return = $result;
|
4328 |
}
|
4329 |
}
|
4330 |
|
|
|
|
|
|
|
|
|
4331 |
if (!function_exists('get_all_files_from_dir')) {
|
4332 |
/**
|
4333 |
* Get all files in directory
|
4453 |
$path = getKey('path', $parsedOldSiteUrl, '');
|
4454 |
$oldSiteUrlNoWww = preg_replace('#^www\.(.+\.)#i', '$1', $host).$path;
|
4455 |
$parsedOldSiteUrlNoWww = parse_url(strpos($oldSiteUrlNoWww, '://') === false
|
4456 |
+
? "http://$oldSiteUrlNoWww"
|
4457 |
+
: $oldSiteUrlNoWww
|
4458 |
);
|
4459 |
if (isset($parse['scheme'])) {
|
4460 |
$oldSiteUrlNoWww = "{$parse['scheme']}://$oldSiteUrlNoWww";
|
4564 |
if ($htaccessRealpath) {
|
4565 |
@rename($htaccessRealpath, "$htaccessRealpath.old");
|
4566 |
}
|
4567 |
+
|
4568 |
+
if (isset($GLOBALS['wp_rewrite'])) {
|
4569 |
+
$wpRewrite = $GLOBALS['wp_rewrite'];
|
4570 |
+
} else {
|
4571 |
+
$wpRewrite = new WP_Rewrite();
|
4572 |
+
}
|
4573 |
+
|
4574 |
+
$wpRewrite->flush_rules(true);
|
4575 |
}
|
src/MMB/Core.php
CHANGED
@@ -8,55 +8,56 @@
|
|
8 |
**************************************************************/
|
9 |
class MMB_Core extends MMB_Helper
|
10 |
{
|
11 |
-
|
12 |
public $slug;
|
|
|
13 |
public $settings;
|
|
|
14 |
public $remote_client;
|
|
|
15 |
public $comment_instance;
|
|
|
16 |
public $plugin_instance;
|
|
|
17 |
public $theme_instance;
|
|
|
18 |
public $wp_instance;
|
|
|
19 |
public $post_instance;
|
|
|
20 |
public $stats_instance;
|
|
|
21 |
public $search_instance;
|
22 |
-
|
23 |
public $user_instance;
|
24 |
-
|
25 |
public $backup_instance;
|
|
|
26 |
public $installer_instance;
|
|
|
27 |
public $mmb_multisite;
|
|
|
28 |
public $network_admin_install;
|
|
|
29 |
private $action_call;
|
|
|
30 |
private $action_params;
|
31 |
-
|
32 |
-
private $mmb_pre_init_filters;
|
33 |
private $mmb_init_actions;
|
34 |
|
35 |
public function __construct()
|
36 |
{
|
37 |
-
global $
|
38 |
|
39 |
-
$_mmb_plugin_actions = array();
|
40 |
$_mmb_options = get_option('wrksettings');
|
41 |
$_mmb_options = !empty($_mmb_options) ? $_mmb_options : array();
|
42 |
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
if (function_exists('is_multisite')) {
|
48 |
-
if (is_multisite()) {
|
49 |
-
$this->mmb_multisite = $blog_id;
|
50 |
-
$this->network_admin_install = get_option('mmb_network_admin_install');
|
51 |
-
}
|
52 |
} else {
|
53 |
-
|
54 |
-
|
55 |
-
$this->network_admin_install = get_option('mmb_network_admin_install');
|
56 |
-
} else {
|
57 |
-
$this->mmb_multisite = false;
|
58 |
-
$this->network_admin_install = null;
|
59 |
-
}
|
60 |
}
|
61 |
|
62 |
// admin notices
|
@@ -77,100 +78,13 @@ class MMB_Core extends MMB_Helper
|
|
77 |
}
|
78 |
}
|
79 |
|
80 |
-
|
81 |
-
//$this->mmb_pre_init_filters['get_stats']['mmb_stats_filter'][] = array('MMB_Stats', 'pre_init_stats'); // called with class name, use global $mmb_core inside the function instead of $this
|
82 |
-
$this->mmb_pre_init_filters['get_stats']['mmb_stats_filter'][] = 'mmb_pre_init_stats';
|
83 |
-
|
84 |
-
$_mmb_item_filter['pre_init_stats'] = array('core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled');
|
85 |
$_mmb_item_filter['get'] = array('updates', 'errors');
|
86 |
|
87 |
-
$this->
|
88 |
-
'backup_req' => 'mmb_get_backup_req',
|
89 |
-
);
|
90 |
-
|
91 |
-
$this->mmb_init_actions = array(
|
92 |
-
'do_upgrade' => 'mmb_do_upgrade',
|
93 |
-
'get_stats' => 'mmb_stats_get',
|
94 |
-
'remove_site' => 'mmb_remove_site',
|
95 |
-
'backup_clone' => 'mmb_backup_now',
|
96 |
-
'restore' => 'mmb_restore_now',
|
97 |
-
'optimize_tables' => 'mmb_optimize_tables',
|
98 |
-
'check_wp_version' => 'mmb_wp_checkversion',
|
99 |
-
'create_post' => 'mmb_post_create',
|
100 |
-
'update_worker' => 'mmb_update_worker_plugin',
|
101 |
-
'change_comment_status' => 'mmb_change_comment_status',
|
102 |
-
'change_post_status' => 'mmb_change_post_status',
|
103 |
-
'get_comment_stats' => 'mmb_comment_stats_get',
|
104 |
-
'install_addon' => 'mmb_install_addon',
|
105 |
-
'install_addons' => 'mmb_install_addons',
|
106 |
-
'get_links' => 'mmb_get_links',
|
107 |
-
'add_link' => 'mmb_add_link',
|
108 |
-
'delete_link' => 'mmb_delete_link',
|
109 |
-
'delete_links' => 'mmb_delete_links',
|
110 |
-
'get_comments' => 'mmb_get_comments',
|
111 |
-
'action_comment' => 'mmb_action_comment',
|
112 |
-
'bulk_action_comments' => 'mmb_bulk_action_comments',
|
113 |
-
'replyto_comment' => 'mmb_reply_comment',
|
114 |
-
'add_user' => 'mmb_add_user',
|
115 |
-
'email_backup' => 'mmb_email_backup',
|
116 |
-
'check_backup_compat' => 'mmb_check_backup_compat',
|
117 |
-
'scheduled_backup' => 'mmb_scheduled_backup',
|
118 |
-
'run_task' => 'mmb_run_task_now',
|
119 |
-
'execute_php_code' => 'mmb_execute_php_code',
|
120 |
-
'delete_backup' => 'mmm_delete_backup',
|
121 |
-
'remote_backup_now' => 'mmb_remote_backup_now',
|
122 |
-
'set_notifications' => 'mmb_set_notifications',
|
123 |
-
'clean_orphan_backups' => 'mmb_clean_orphan_backups',
|
124 |
-
'get_users' => 'mmb_get_users',
|
125 |
-
'edit_users' => 'mmb_edit_users',
|
126 |
-
'get_posts' => 'mmb_get_posts',
|
127 |
-
'delete_post' => 'mmb_delete_post',
|
128 |
-
'delete_posts' => 'mmb_delete_posts',
|
129 |
-
'edit_posts' => 'mmb_edit_posts',
|
130 |
-
'get_pages' => 'mmb_get_pages',
|
131 |
-
'delete_page' => 'mmb_delete_page',
|
132 |
-
'get_plugins_themes' => 'mmb_get_plugins_themes',
|
133 |
-
'edit_plugins_themes' => 'mmb_edit_plugins_themes',
|
134 |
-
'worker_brand' => 'mmb_worker_brand',
|
135 |
-
'maintenance' => 'mmb_maintenance_mode',
|
136 |
-
'get_dbname' => 'mmb_get_dbname',
|
137 |
-
'security_check' => 'mbb_security_check',
|
138 |
-
'security_fix_folder_listing' => 'mbb_security_fix_folder_listing',
|
139 |
-
'security_fix_php_reporting' => 'mbb_security_fix_php_reporting',
|
140 |
-
'security_fix_database_reporting' => 'mbb_security_fix_database_reporting',
|
141 |
-
'security_fix_wp_version' => 'mbb_security_fix_wp_version',
|
142 |
-
'security_fix_admin_username' => 'mbb_security_fix_admin_username',
|
143 |
-
'security_fix_htaccess_permission' => 'mbb_security_fix_htaccess_permission',
|
144 |
-
'security_fix_scripts_styles' => 'mbb_security_fix_scripts_styles',
|
145 |
-
'security_fix_file_permission' => 'mbb_security_fix_file_permission',
|
146 |
-
'security_fix_all' => 'mbb_security_fix_all',
|
147 |
-
'get_autoupdate_plugins_themes' => 'mmb_get_autoupdate_plugins_themes',
|
148 |
-
'edit_autoupdate_plugins_themes' => 'mmb_edit_autoupdate_plugins_themes',
|
149 |
-
'ping_backup' => 'mwp_ping_backup',
|
150 |
-
);
|
151 |
|
152 |
-
$mwp_worker_brand = get_option("mwp_worker_brand");
|
153 |
-
//!$mwp_worker_brand['hide_managed_remotely']
|
154 |
-
if ($mwp_worker_brand == false || (is_array($mwp_worker_brand) && !array_key_exists('hide_managed_remotely', $mwp_worker_brand))) {
|
155 |
-
add_action('rightnow_end', array(&$this, 'add_right_now_info'));
|
156 |
-
}
|
157 |
-
if ($mwp_worker_brand != false && is_array($mwp_worker_brand) && isset($mwp_worker_brand['text_for_client']) && ($mwp_worker_brand['email_or_link'] != 0)) {
|
158 |
-
add_action('admin_init', array($this, 'enqueue_scripts'));
|
159 |
-
add_action('admin_init', array($this, 'enqueue_styles'));
|
160 |
-
add_action('admin_menu', array($this, 'add_support_page'));
|
161 |
-
add_action('admin_head', array($this, 'support_page_script'));
|
162 |
-
add_action('admin_footer', array($this, 'support_page_dialog'));
|
163 |
-
add_action('admin_init', array($this, 'send_email_to_admin'));
|
164 |
-
}
|
165 |
-
add_action('plugins_loaded', array(&$this, 'dissalow_text_editor'));
|
166 |
-
|
167 |
-
add_action('admin_init', array(&$this, 'admin_actions'));
|
168 |
add_action('init', array(&$this, 'mmb_remote_action'), 9999);
|
169 |
add_action('setup_theme', 'mmb_run_forked_action', 1);
|
170 |
-
add_action('plugins_loaded', 'mmb_authenticate', 1);
|
171 |
-
add_action('setup_theme', 'mmb_parse_request');
|
172 |
-
add_action('set_auth_cookie', array(&$this, 'mmb_set_auth_cookie'));
|
173 |
-
add_action('set_logged_in_cookie', array(&$this, 'mmb_set_logged_in_cookie'));
|
174 |
|
175 |
if (!get_option('_worker_nossl_key') && !get_option('_worker_public_key')) {
|
176 |
add_action('init', array(&$this, 'deactivateWorkerIfNotAddedAfterTenMinutes'));
|
@@ -185,42 +99,6 @@ class MMB_Core extends MMB_Helper
|
|
185 |
}
|
186 |
}
|
187 |
|
188 |
-
public function register_action_params($action = false, $params = array())
|
189 |
-
{
|
190 |
-
if (isset($this->mmb_pre_init_actions[$action]) && function_exists($this->mmb_pre_init_actions[$action])) {
|
191 |
-
call_user_func($this->mmb_pre_init_actions[$action], $params);
|
192 |
-
}
|
193 |
-
|
194 |
-
if (isset($this->mmb_init_actions[$action]) && function_exists($this->mmb_init_actions[$action])) {
|
195 |
-
$this->action_call = $this->mmb_init_actions[$action];
|
196 |
-
$this->action_params = $params;
|
197 |
-
|
198 |
-
if (isset($this->mmb_pre_init_filters[$action]) && !empty($this->mmb_pre_init_filters[$action])) {
|
199 |
-
global $mmb_filters;
|
200 |
-
|
201 |
-
foreach ($this->mmb_pre_init_filters[$action] as $_name => $_functions) {
|
202 |
-
if (!empty($_functions)) {
|
203 |
-
$data = array();
|
204 |
-
|
205 |
-
foreach ($_functions as $_callback) {
|
206 |
-
if (is_array($_callback) && method_exists($_callback[0], $_callback[1])) {
|
207 |
-
$data = call_user_func($_callback, $params);
|
208 |
-
} elseif (is_string($_callback) && function_exists($_callback)) {
|
209 |
-
$data = call_user_func($_callback, $params);
|
210 |
-
}
|
211 |
-
$mmb_filters[$_name] = isset($mmb_filters[$_name]) && !empty($mmb_filters[$_name]) ? array_merge($mmb_filters[$_name], $data) : $data;
|
212 |
-
add_filter($_name, create_function('$a', 'global $mmb_filters; return array_merge($a, $mmb_filters["'.$_name.'"]);'));
|
213 |
-
}
|
214 |
-
}
|
215 |
-
}
|
216 |
-
}
|
217 |
-
|
218 |
-
return true;
|
219 |
-
}
|
220 |
-
|
221 |
-
return false;
|
222 |
-
}
|
223 |
-
|
224 |
/**
|
225 |
* Add notice to network admin dashboard for security reasons
|
226 |
*/
|
@@ -262,78 +140,6 @@ class MMB_Core extends MMB_Helper
|
|
262 |
echo $notice;
|
263 |
}
|
264 |
|
265 |
-
//
|
266 |
-
|
267 |
-
/**
|
268 |
-
* Add an item into the Right Now Dashboard widget
|
269 |
-
* to inform that the blog can be managed remotely
|
270 |
-
*/
|
271 |
-
public function add_right_now_info()
|
272 |
-
{
|
273 |
-
$mwp_worker_brand = get_option('mwp_worker_brand');
|
274 |
-
echo '<div class="mmb-slave-info">';
|
275 |
-
if ($mwp_worker_brand && isset($mwp_worker_brand['remotely_managed_text'])) {
|
276 |
-
/*$url = isset($mwp_worker_brand['author_url']) ? $mwp_worker_brand['author_url'] : null;
|
277 |
-
if($url) {
|
278 |
-
$scheme = parse_url($mwp_worker_brand['author_url'], PHP_URL_SCHEME);
|
279 |
-
if(empty($scheme)) {
|
280 |
-
$url = 'http://' . $url;
|
281 |
-
}
|
282 |
-
}
|
283 |
-
if($url) {
|
284 |
-
$managedBy = '<a target="_blank" href="'.htmlspecialchars($url).'">'
|
285 |
-
.htmlspecialchars($mwp_worker_brand['author'])
|
286 |
-
.'</a>';
|
287 |
-
} else {
|
288 |
-
$managedBy = htmlspecialchars($mwp_worker_brand['author']);
|
289 |
-
}
|
290 |
-
echo sprintf('<p>This site is managed by %s.</p>', $managedBy);*/
|
291 |
-
echo '<p>'.$mwp_worker_brand['remotely_managed_text'].'</p>';
|
292 |
-
} else {
|
293 |
-
echo '<p>This site can be managed remotely.</p>';
|
294 |
-
}
|
295 |
-
echo '</div>';
|
296 |
-
}
|
297 |
-
|
298 |
-
public function enqueue_scripts()
|
299 |
-
{
|
300 |
-
wp_enqueue_script('jquery');
|
301 |
-
wp_enqueue_script('jquery-ui-core');
|
302 |
-
wp_enqueue_script('jquery-ui-dialog');
|
303 |
-
}
|
304 |
-
|
305 |
-
public function enqueue_styles()
|
306 |
-
{
|
307 |
-
wp_enqueue_style('wp-jquery-ui');
|
308 |
-
wp_enqueue_style('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/smoothness/jquery-ui.css');
|
309 |
-
}
|
310 |
-
|
311 |
-
public function send_email_to_admin()
|
312 |
-
{
|
313 |
-
if (!isset($_POST['support_mwp_message'])) {
|
314 |
-
return;
|
315 |
-
}
|
316 |
-
global $current_user;
|
317 |
-
if (empty($_POST['support_mwp_message'])) {
|
318 |
-
$this->mwp_send_ajax_response(false, "Please enter a message.");
|
319 |
-
}
|
320 |
-
$mwp_worker_brand = get_option('mwp_worker_brand');
|
321 |
-
if (empty($mwp_worker_brand['admin_email'])) {
|
322 |
-
$this->mwp_send_ajax_response(false, "Unable to send email to admin.");
|
323 |
-
}
|
324 |
-
$subject = 'New ticket for site '.get_bloginfo('url');
|
325 |
-
$message = <<<EOF
|
326 |
-
Hi,
|
327 |
-
User with a username {$current_user->user_login} has a new question:
|
328 |
-
{$_POST['support_mwp_message']}
|
329 |
-
EOF;
|
330 |
-
$has_been_sent = wp_mail($mwp_worker_brand['admin_email'], $subject, $message);
|
331 |
-
if (!$has_been_sent) {
|
332 |
-
$this->mwp_send_ajax_response(false, "Unable to send email. Please try again.");
|
333 |
-
}
|
334 |
-
$this->mwp_send_ajax_response(true, "Message successfully sent.");
|
335 |
-
}
|
336 |
-
|
337 |
public function mwp_send_ajax_response($success = true, $message = '')
|
338 |
{
|
339 |
$response = json_encode(
|
@@ -346,121 +152,6 @@ EOF;
|
|
346 |
exit;
|
347 |
}
|
348 |
|
349 |
-
public function support_page_dialog()
|
350 |
-
{
|
351 |
-
$mwp_worker_brand = get_option('mwp_worker_brand');
|
352 |
-
|
353 |
-
if ($mwp_worker_brand && isset($mwp_worker_brand['text_for_client']) && ($mwp_worker_brand['text_for_client'] != '')) {
|
354 |
-
$notification_text = $mwp_worker_brand['text_for_client'];
|
355 |
-
}
|
356 |
-
?>
|
357 |
-
<div id="support_dialog" style="display: none;">
|
358 |
-
<?php if (!empty($notification_text)): ?>
|
359 |
-
<div>
|
360 |
-
<p><?php echo $notification_text;
|
361 |
-
?></p>
|
362 |
-
</div>
|
363 |
-
<?php endif ?>
|
364 |
-
<?php if ($mwp_worker_brand['email_or_link'] == 1): ?>
|
365 |
-
<div style="margin: 19px 0 0;">
|
366 |
-
<form method="post" id="support_form">
|
367 |
-
<textarea name="support_mwp_message" id="support_message" style="width:500px;height:150px;display:block;margin-left:auto;margin-right:auto;"></textarea>
|
368 |
-
<button type="submit" class="button-primary" style="display:block;margin:20px auto 7px auto;border:1px solid #a1a1a1;padding:0 31px;border-radius: 4px;">Send</button>
|
369 |
-
</form>
|
370 |
-
<div id="support_response_id" style="margin-top: 14px"></div>
|
371 |
-
<style scoped="scoped">
|
372 |
-
.mwp-support-dialog.ui-dialog {
|
373 |
-
z-index: 300002;
|
374 |
-
}
|
375 |
-
</style>
|
376 |
-
</div>
|
377 |
-
<?php endif ?>
|
378 |
-
</div>
|
379 |
-
<?php
|
380 |
-
|
381 |
-
}
|
382 |
-
|
383 |
-
public function support_page_script()
|
384 |
-
{
|
385 |
-
?>
|
386 |
-
<script type="text/javascript">
|
387 |
-
jQuery(document).ready(function ($) {
|
388 |
-
var $dialog = $('#support_dialog');
|
389 |
-
var $form = $('#support_form');
|
390 |
-
var $messageContainer = $('#support_response_id');
|
391 |
-
$form.submit(function (e) {
|
392 |
-
e.preventDefault();
|
393 |
-
var data = $(this).serialize();
|
394 |
-
$.ajax({
|
395 |
-
type: "POST",
|
396 |
-
url: 'index.php',
|
397 |
-
dataType: 'json',
|
398 |
-
data: data,
|
399 |
-
success: function (data, textStatus, jqXHR) {
|
400 |
-
if (data.success) {
|
401 |
-
$form.slideUp();
|
402 |
-
}
|
403 |
-
$messageContainer.html(data.message);
|
404 |
-
},
|
405 |
-
error: function (jqXHR, textStatus, errorThrown) {
|
406 |
-
$messageContainer.html('An error occurred, please try again.');
|
407 |
-
}
|
408 |
-
});
|
409 |
-
});
|
410 |
-
$('.toplevel_page_mwp-support').click(function (e) {
|
411 |
-
e.preventDefault();
|
412 |
-
$form.show();
|
413 |
-
$messageContainer.empty();
|
414 |
-
$dialog.dialog({
|
415 |
-
draggable: false,
|
416 |
-
resizable: false,
|
417 |
-
modal: true,
|
418 |
-
width: '530px',
|
419 |
-
height: 'auto',
|
420 |
-
title: 'Contact Support',
|
421 |
-
dialogClass: 'mwp-support-dialog',
|
422 |
-
close: function () {
|
423 |
-
$('#support_response_id').html('');
|
424 |
-
$(this).dialog("destroy");
|
425 |
-
}
|
426 |
-
});
|
427 |
-
});
|
428 |
-
});
|
429 |
-
</script>
|
430 |
-
<?php
|
431 |
-
|
432 |
-
}
|
433 |
-
|
434 |
-
/**
|
435 |
-
* Add Support page on Top Menu
|
436 |
-
*/
|
437 |
-
public function add_support_page()
|
438 |
-
{
|
439 |
-
$mwp_worker_brand = get_option('mwp_worker_brand');
|
440 |
-
if ($mwp_worker_brand && isset($mwp_worker_brand['text_for_client']) && ($mwp_worker_brand['text_for_client'] != '')) {
|
441 |
-
add_menu_page(__('Support', 'wp-support'), __('Support', 'wp-support'), 'read', 'mwp-support', array(&$this, 'support_function'), '');
|
442 |
-
}
|
443 |
-
}
|
444 |
-
|
445 |
-
/**
|
446 |
-
* Support page handler
|
447 |
-
*/
|
448 |
-
public function support_function()
|
449 |
-
{
|
450 |
-
}
|
451 |
-
|
452 |
-
/**
|
453 |
-
* Remove editor from plugins&themes submenu page
|
454 |
-
*/
|
455 |
-
public function dissalow_text_editor()
|
456 |
-
{
|
457 |
-
$mwp_worker_brand = get_option('mwp_worker_brand');
|
458 |
-
if ($mwp_worker_brand && isset($mwp_worker_brand['dissalow_edit']) && ($mwp_worker_brand['dissalow_edit'] == 'checked')) {
|
459 |
-
define('DISALLOW_FILE_EDIT', true);
|
460 |
-
define('DISALLOW_FILE_MODS', true);
|
461 |
-
}
|
462 |
-
}
|
463 |
-
|
464 |
/**
|
465 |
* Get parent blog options
|
466 |
*/
|
@@ -509,18 +200,6 @@ EOF;
|
|
509 |
return $this->user_instance;
|
510 |
}
|
511 |
|
512 |
-
/**
|
513 |
-
* Gets an instance of Security
|
514 |
-
*/
|
515 |
-
public function get_security_instance()
|
516 |
-
{
|
517 |
-
if (!isset($this->security_instance)) {
|
518 |
-
$this->security_instance = new MMB_Security();
|
519 |
-
}
|
520 |
-
|
521 |
-
return $this->security_instance;
|
522 |
-
}
|
523 |
-
|
524 |
/**
|
525 |
* Gets an instance of stats class
|
526 |
*/
|
@@ -545,26 +224,87 @@ EOF;
|
|
545 |
return $this->backup_instance;
|
546 |
}
|
547 |
|
548 |
-
|
549 |
-
|
|
|
|
|
|
|
550 |
|
551 |
-
|
552 |
-
|
|
|
|
|
553 |
{
|
554 |
-
|
555 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
}
|
557 |
|
558 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
559 |
}
|
560 |
|
561 |
-
public function
|
562 |
{
|
563 |
-
|
564 |
-
|
|
|
|
|
|
|
565 |
}
|
566 |
|
567 |
-
|
|
|
|
|
|
|
|
|
|
|
568 |
}
|
569 |
|
570 |
/**
|
@@ -573,6 +313,12 @@ EOF;
|
|
573 |
*/
|
574 |
public function install()
|
575 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
576 |
/** @var wpdb $wpdb */
|
577 |
global $wpdb, $_wp_using_ext_object_cache;
|
578 |
$_wp_using_ext_object_cache = false;
|
@@ -607,7 +353,6 @@ EOF;
|
|
607 |
delete_option('_action_message_id');
|
608 |
}
|
609 |
|
610 |
-
//delete_option('mwp_backup_tasks');
|
611 |
delete_option('mwp_notifications');
|
612 |
delete_option('mwp_worker_brand');
|
613 |
delete_option('mwp_pageview_alerts');
|
@@ -635,11 +380,21 @@ EOF;
|
|
635 |
update_option('wrksettings', $options);
|
636 |
}
|
637 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
638 |
/**
|
639 |
* Deletes options for communication with master
|
640 |
*/
|
641 |
-
public function
|
642 |
{
|
|
|
643 |
/** @var wpdb $wpdb */
|
644 |
global $current_user, $wpdb, $_wp_using_ext_object_cache;
|
645 |
$_wp_using_ext_object_cache = false;
|
@@ -656,7 +411,6 @@ EOF;
|
|
656 |
delete_blog_option($blog_id, '_worker_public_key');
|
657 |
delete_blog_option($blog_id, '_action_message_id');
|
658 |
delete_blog_option($blog_id, 'mwp_maintenace_mode');
|
659 |
-
//delete_blog_option($blog_id, 'mwp_backup_tasks');
|
660 |
delete_blog_option($blog_id, 'mwp_notifications');
|
661 |
delete_blog_option($blog_id, 'mwp_worker_brand');
|
662 |
delete_blog_option($blog_id, 'mwp_pageview_alerts');
|
@@ -681,7 +435,6 @@ EOF;
|
|
681 |
|
682 |
//Delete options
|
683 |
delete_option('mwp_maintenace_mode');
|
684 |
-
//delete_option('mwp_backup_tasks');
|
685 |
delete_option('mwp_notifications');
|
686 |
delete_option('mwp_worker_brand');
|
687 |
delete_option('mwp_pageview_alerts');
|
@@ -726,6 +479,8 @@ EOF;
|
|
726 |
);
|
727 |
}
|
728 |
|
|
|
|
|
729 |
ob_start();
|
730 |
@unlink(dirname(__FILE__));
|
731 |
$upgrader = new Plugin_Upgrader();
|
@@ -757,128 +512,6 @@ EOF;
|
|
757 |
);
|
758 |
}
|
759 |
|
760 |
-
/**
|
761 |
-
* Automatically logs in when called from Master
|
762 |
-
*/
|
763 |
-
public function automatic_login()
|
764 |
-
{
|
765 |
-
$where = isset($_GET['mwp_goto']) ? $_GET['mwp_goto'] : false;
|
766 |
-
$username = isset($_GET['username']) ? $_GET['username'] : '';
|
767 |
-
$auto_login = isset($_GET['auto_login']) ? $_GET['auto_login'] : 0;
|
768 |
-
|
769 |
-
if (!function_exists('is_user_logged_in')) {
|
770 |
-
include_once ABSPATH.'wp-includes/pluggable.php';
|
771 |
-
}
|
772 |
-
|
773 |
-
if (($auto_login && strlen(trim($username)) && !is_user_logged_in()) || (isset($this->mmb_multisite) && $this->mmb_multisite)) {
|
774 |
-
$signature = base64_decode($_GET['signature']);
|
775 |
-
$message_id = trim($_GET['message_id']);
|
776 |
-
|
777 |
-
$auth = $this->authenticate_message($where.$message_id, $signature, $message_id);
|
778 |
-
if ($auth === true) {
|
779 |
-
if (!headers_sent()) {
|
780 |
-
header('P3P: CP="CAO PSA OUR"');
|
781 |
-
}
|
782 |
-
|
783 |
-
if (!defined('MMB_USER_LOGIN')) {
|
784 |
-
define('MMB_USER_LOGIN', true);
|
785 |
-
}
|
786 |
-
|
787 |
-
$siteurl = function_exists('get_site_option') ? get_site_option('siteurl') : get_option('siteurl');
|
788 |
-
$user = $this->mmb_get_user_info($username);
|
789 |
-
wp_set_current_user($user->ID);
|
790 |
-
// Compatibility with All In One Security
|
791 |
-
update_user_meta($user->ID, 'last_login_time', current_time('mysql'));
|
792 |
-
|
793 |
-
if (!defined('COOKIEHASH') || (isset($this->mmb_multisite) && $this->mmb_multisite)) {
|
794 |
-
wp_cookie_constants();
|
795 |
-
}
|
796 |
-
|
797 |
-
wp_set_auth_cookie($user->ID);
|
798 |
-
@mmb_worker_header();
|
799 |
-
|
800 |
-
if ((isset($this->mmb_multisite) && $this->mmb_multisite) || isset($_REQUEST['mwpredirect'])) {
|
801 |
-
if (function_exists('wp_safe_redirect') && function_exists('admin_url')) {
|
802 |
-
wp_safe_redirect(admin_url($where));
|
803 |
-
exit();
|
804 |
-
}
|
805 |
-
}
|
806 |
-
} else {
|
807 |
-
wp_die($auth['error']);
|
808 |
-
}
|
809 |
-
} elseif (is_user_logged_in()) {
|
810 |
-
@mmb_worker_header();
|
811 |
-
if (isset($_REQUEST['mwpredirect'])) {
|
812 |
-
if (function_exists('wp_safe_redirect') && function_exists('admin_url')) {
|
813 |
-
wp_safe_redirect(admin_url($where));
|
814 |
-
exit();
|
815 |
-
}
|
816 |
-
}
|
817 |
-
}
|
818 |
-
}
|
819 |
-
|
820 |
-
public function mmb_set_auth_cookie($auth_cookie)
|
821 |
-
{
|
822 |
-
if (!defined('MMB_USER_LOGIN')) {
|
823 |
-
return;
|
824 |
-
}
|
825 |
-
|
826 |
-
if (!defined('COOKIEHASH')) {
|
827 |
-
wp_cookie_constants();
|
828 |
-
}
|
829 |
-
|
830 |
-
$_COOKIE['wordpress_'.COOKIEHASH] = $auth_cookie;
|
831 |
-
}
|
832 |
-
|
833 |
-
public function mmb_set_logged_in_cookie($logged_in_cookie)
|
834 |
-
{
|
835 |
-
if (!defined('MMB_USER_LOGIN')) {
|
836 |
-
return;
|
837 |
-
}
|
838 |
-
|
839 |
-
if (!defined('COOKIEHASH')) {
|
840 |
-
wp_cookie_constants();
|
841 |
-
}
|
842 |
-
|
843 |
-
$_COOKIE['wordpress_logged_in_'.COOKIEHASH] = $logged_in_cookie;
|
844 |
-
}
|
845 |
-
|
846 |
-
public function admin_actions()
|
847 |
-
{
|
848 |
-
add_filter('all_plugins', array($this, 'worker_replace'));
|
849 |
-
}
|
850 |
-
|
851 |
-
public function worker_replace($all_plugins)
|
852 |
-
{
|
853 |
-
$replace = get_option("mwp_worker_brand");
|
854 |
-
if (is_array($replace)) {
|
855 |
-
if ($replace['name'] || $replace['desc'] || $replace['author'] || $replace['author_url']) {
|
856 |
-
$all_plugins['worker/init.php']['Name'] = $replace['name'];
|
857 |
-
$all_plugins['worker/init.php']['Title'] = $replace['name'];
|
858 |
-
$all_plugins['worker/init.php']['Description'] = $replace['desc'];
|
859 |
-
$all_plugins['worker/init.php']['AuthorURI'] = $replace['author_url'];
|
860 |
-
$all_plugins['worker/init.php']['Author'] = $replace['author'];
|
861 |
-
$all_plugins['worker/init.php']['AuthorName'] = $replace['author'];
|
862 |
-
$all_plugins['worker/init.php']['PluginURI'] = '';
|
863 |
-
}
|
864 |
-
|
865 |
-
if ($replace['hide']) {
|
866 |
-
if (!function_exists('get_plugins')) {
|
867 |
-
include_once ABSPATH.'wp-admin/includes/plugin.php';
|
868 |
-
}
|
869 |
-
$activated_plugins = get_option('active_plugins');
|
870 |
-
if (!$activated_plugins) {
|
871 |
-
$activated_plugins = array();
|
872 |
-
}
|
873 |
-
if (in_array('worker/init.php', $activated_plugins)) {
|
874 |
-
unset($all_plugins['worker/init.php']);
|
875 |
-
}
|
876 |
-
}
|
877 |
-
}
|
878 |
-
|
879 |
-
return $all_plugins;
|
880 |
-
}
|
881 |
-
|
882 |
public function deactivateWorkerIfNotAddedAfterTenMinutes()
|
883 |
{
|
884 |
$workerActivationTime = get_option("mmb_worker_activation_time");
|
8 |
**************************************************************/
|
9 |
class MMB_Core extends MMB_Helper
|
10 |
{
|
11 |
+
|
12 |
public $slug;
|
13 |
+
|
14 |
public $settings;
|
15 |
+
|
16 |
public $remote_client;
|
17 |
+
|
18 |
public $comment_instance;
|
19 |
+
|
20 |
public $plugin_instance;
|
21 |
+
|
22 |
public $theme_instance;
|
23 |
+
|
24 |
public $wp_instance;
|
25 |
+
|
26 |
public $post_instance;
|
27 |
+
|
28 |
public $stats_instance;
|
29 |
+
|
30 |
public $search_instance;
|
31 |
+
|
32 |
public $user_instance;
|
33 |
+
|
34 |
public $backup_instance;
|
35 |
+
|
36 |
public $installer_instance;
|
37 |
+
|
38 |
public $mmb_multisite;
|
39 |
+
|
40 |
public $network_admin_install;
|
41 |
+
|
42 |
private $action_call;
|
43 |
+
|
44 |
private $action_params;
|
45 |
+
|
|
|
46 |
private $mmb_init_actions;
|
47 |
|
48 |
public function __construct()
|
49 |
{
|
50 |
+
global $blog_id, $_mmb_item_filter, $_mmb_options;
|
51 |
|
|
|
52 |
$_mmb_options = get_option('wrksettings');
|
53 |
$_mmb_options = !empty($_mmb_options) ? $_mmb_options : array();
|
54 |
|
55 |
+
if (is_multisite()) {
|
56 |
+
$this->mmb_multisite = $blog_id;
|
57 |
+
$this->network_admin_install = get_option('mmb_network_admin_install');
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
} else {
|
59 |
+
$this->mmb_multisite = false;
|
60 |
+
$this->network_admin_install = null;
|
|
|
|
|
|
|
|
|
|
|
61 |
}
|
62 |
|
63 |
// admin notices
|
78 |
}
|
79 |
}
|
80 |
|
81 |
+
$_mmb_item_filter['pre_init_stats'] = array('core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled', 'site_statistics');
|
|
|
|
|
|
|
|
|
82 |
$_mmb_item_filter['get'] = array('updates', 'errors');
|
83 |
|
84 |
+
$this->mmb_init_actions = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
add_action('init', array(&$this, 'mmb_remote_action'), 9999);
|
87 |
add_action('setup_theme', 'mmb_run_forked_action', 1);
|
|
|
|
|
|
|
|
|
88 |
|
89 |
if (!get_option('_worker_nossl_key') && !get_option('_worker_public_key')) {
|
90 |
add_action('init', array(&$this, 'deactivateWorkerIfNotAddedAfterTenMinutes'));
|
99 |
}
|
100 |
}
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
/**
|
103 |
* Add notice to network admin dashboard for security reasons
|
104 |
*/
|
140 |
echo $notice;
|
141 |
}
|
142 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
public function mwp_send_ajax_response($success = true, $message = '')
|
144 |
{
|
145 |
$response = json_encode(
|
152 |
exit;
|
153 |
}
|
154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
/**
|
156 |
* Get parent blog options
|
157 |
*/
|
200 |
return $this->user_instance;
|
201 |
}
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
/**
|
204 |
* Gets an instance of stats class
|
205 |
*/
|
224 |
return $this->backup_instance;
|
225 |
}
|
226 |
|
227 |
+
public function get_installer_instance()
|
228 |
+
{
|
229 |
+
if (!isset($this->installer_instance)) {
|
230 |
+
$this->installer_instance = new MMB_Installer();
|
231 |
+
}
|
232 |
|
233 |
+
return $this->installer_instance;
|
234 |
+
}
|
235 |
+
|
236 |
+
public function buildLoaderContent($pluginBasename)
|
237 |
{
|
238 |
+
$loader = <<<EOF
|
239 |
+
<?php
|
240 |
+
|
241 |
+
/*
|
242 |
+
Plugin Name: ManageWP - Worker Loader
|
243 |
+
Plugin URI: https://managewp.com
|
244 |
+
Description: This is automatically generated by the ManageWP Worker plugin to increase performance and reliability. It is automatically disabled when disabling the main plugin.
|
245 |
+
Author: ManageWP
|
246 |
+
Author URI: https://managewp.com
|
247 |
+
License: GPL2
|
248 |
+
*/
|
249 |
+
|
250 |
+
if (!function_exists('untrailingslashit') || !defined('WP_PLUGIN_DIR')) {
|
251 |
+
// WordPress is probably not bootstrapped.
|
252 |
+
exit;
|
253 |
+
}
|
254 |
+
|
255 |
+
if (file_exists(untrailingslashit(WP_PLUGIN_DIR).'/$pluginBasename')) {
|
256 |
+
if (in_array('$pluginBasename', (array) get_option('active_plugins'))) {
|
257 |
+
\$GLOBALS['mwp_is_mu'] = true;
|
258 |
+
include_once untrailingslashit(WP_PLUGIN_DIR).'/$pluginBasename';
|
259 |
+
}
|
260 |
+
}
|
261 |
+
|
262 |
+
EOF;
|
263 |
+
|
264 |
+
return $loader;
|
265 |
+
}
|
266 |
+
|
267 |
+
public function registerMustUse($loaderName, $loaderContent)
|
268 |
+
{
|
269 |
+
$mustUsePluginDir = rtrim(WPMU_PLUGIN_DIR, '/');
|
270 |
+
$loaderPath = $mustUsePluginDir.'/'.$loaderName;
|
271 |
+
|
272 |
+
if (file_exists($loaderPath) && md5($loaderContent) === md5_file($loaderPath)) {
|
273 |
+
return;
|
274 |
}
|
275 |
|
276 |
+
if (!is_dir($mustUsePluginDir)) {
|
277 |
+
$dirMade = @mkdir($mustUsePluginDir);
|
278 |
+
|
279 |
+
if (!$dirMade) {
|
280 |
+
$error = error_get_last();
|
281 |
+
throw new Exception(sprintf('Unable to create loader directory: %s', $error['message']));
|
282 |
+
}
|
283 |
+
}
|
284 |
+
|
285 |
+
$loaderWritten = @file_put_contents($loaderPath, $loaderContent);
|
286 |
+
|
287 |
+
if (!$loaderWritten) {
|
288 |
+
$error = error_get_last();
|
289 |
+
throw new Exception(sprintf('Unable to write loader: %s', $error['message']));
|
290 |
+
}
|
291 |
}
|
292 |
|
293 |
+
public function unRegisterMustUse($loaderName)
|
294 |
{
|
295 |
+
$mustUsePluginDir = rtrim(WPMU_PLUGIN_DIR, '/');
|
296 |
+
$loaderPath = $mustUsePluginDir.'/'.$loaderName;
|
297 |
+
|
298 |
+
if (!file_exists($loaderPath)) {
|
299 |
+
return;
|
300 |
}
|
301 |
|
302 |
+
$removed = @unlink($loaderPath);
|
303 |
+
|
304 |
+
if (!$removed) {
|
305 |
+
$error = error_get_last();
|
306 |
+
throw new Exception(sprintf('Unable to remove loader: %s', $error['message']));
|
307 |
+
}
|
308 |
}
|
309 |
|
310 |
/**
|
313 |
*/
|
314 |
public function install()
|
315 |
{
|
316 |
+
try {
|
317 |
+
$this->registerMustUse('0-worker.php', $this->buildLoaderContent('worker/init.php'));
|
318 |
+
} catch (Exception $e) {
|
319 |
+
mwp_logger()->error('Unable to write ManageWP loader', array('exception' => $e));
|
320 |
+
}
|
321 |
+
|
322 |
/** @var wpdb $wpdb */
|
323 |
global $wpdb, $_wp_using_ext_object_cache;
|
324 |
$_wp_using_ext_object_cache = false;
|
353 |
delete_option('_action_message_id');
|
354 |
}
|
355 |
|
|
|
356 |
delete_option('mwp_notifications');
|
357 |
delete_option('mwp_worker_brand');
|
358 |
delete_option('mwp_pageview_alerts');
|
380 |
update_option('wrksettings', $options);
|
381 |
}
|
382 |
|
383 |
+
public function uninstall()
|
384 |
+
{
|
385 |
+
try {
|
386 |
+
$this->unRegisterMustUse('0-worker.php');
|
387 |
+
} catch (Exception $e) {
|
388 |
+
mwp_logger()->error('Unable to remove loader', array('exception' => $e));
|
389 |
+
}
|
390 |
+
}
|
391 |
+
|
392 |
/**
|
393 |
* Deletes options for communication with master
|
394 |
*/
|
395 |
+
public function deactivate($deactivate = false)
|
396 |
{
|
397 |
+
$this->uninstall();
|
398 |
/** @var wpdb $wpdb */
|
399 |
global $current_user, $wpdb, $_wp_using_ext_object_cache;
|
400 |
$_wp_using_ext_object_cache = false;
|
411 |
delete_blog_option($blog_id, '_worker_public_key');
|
412 |
delete_blog_option($blog_id, '_action_message_id');
|
413 |
delete_blog_option($blog_id, 'mwp_maintenace_mode');
|
|
|
414 |
delete_blog_option($blog_id, 'mwp_notifications');
|
415 |
delete_blog_option($blog_id, 'mwp_worker_brand');
|
416 |
delete_blog_option($blog_id, 'mwp_pageview_alerts');
|
435 |
|
436 |
//Delete options
|
437 |
delete_option('mwp_maintenace_mode');
|
|
|
438 |
delete_option('mwp_notifications');
|
439 |
delete_option('mwp_worker_brand');
|
440 |
delete_option('mwp_pageview_alerts');
|
479 |
);
|
480 |
}
|
481 |
|
482 |
+
mwp_load_required_components();
|
483 |
+
|
484 |
ob_start();
|
485 |
@unlink(dirname(__FILE__));
|
486 |
$upgrader = new Plugin_Upgrader();
|
512 |
);
|
513 |
}
|
514 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
515 |
public function deactivateWorkerIfNotAddedAfterTenMinutes()
|
516 |
{
|
517 |
$workerActivationTime = get_option("mmb_worker_activation_time");
|
src/MMB/Helper.php
CHANGED
@@ -8,38 +8,8 @@
|
|
8 |
**************************************************************/
|
9 |
class MMB_Helper
|
10 |
{
|
11 |
-
public $mmb_multisite;
|
12 |
-
|
13 |
-
/**
|
14 |
-
* A helper function to log data
|
15 |
-
*
|
16 |
-
* @deprecated use mwp_logger() instead
|
17 |
-
*
|
18 |
-
* @param mixed $mixed
|
19 |
-
*/
|
20 |
-
public function _log($mixed)
|
21 |
-
{
|
22 |
-
if ((defined('MWP_SHOW_LOG') && MWP_SHOW_LOG == true) || get_option('mwp_debug_enable')) {
|
23 |
-
if (is_array($mixed)) {
|
24 |
-
$mixed = print_r($mixed, 1);
|
25 |
-
} else {
|
26 |
-
if (is_object($mixed)) {
|
27 |
-
ob_start();
|
28 |
-
var_dump($mixed);
|
29 |
-
$mixed = ob_get_clean();
|
30 |
-
}
|
31 |
-
}
|
32 |
|
33 |
-
|
34 |
-
if ($md5 === false) {
|
35 |
-
$md5 = md5(date('jS F Y h:i:s A'));
|
36 |
-
update_option('mwp_log_md5', $md5);
|
37 |
-
}
|
38 |
-
$handle = fopen(dirname(__FILE__).'/log_'.$md5, 'a');
|
39 |
-
fwrite($handle, $mixed.PHP_EOL);
|
40 |
-
fclose($handle);
|
41 |
-
}
|
42 |
-
}
|
43 |
|
44 |
/**
|
45 |
* Initializes the file system
|
@@ -257,22 +227,6 @@ class MMB_Helper
|
|
257 |
return false;
|
258 |
}
|
259 |
|
260 |
-
public function get_worker_message_id()
|
261 |
-
{
|
262 |
-
return (int) get_option('_action_message_id');
|
263 |
-
}
|
264 |
-
|
265 |
-
public function set_master_public_key($public_key = false)
|
266 |
-
{
|
267 |
-
if ($public_key && !get_option('_worker_public_key')) {
|
268 |
-
add_option('_worker_public_key', base64_encode($public_key));
|
269 |
-
|
270 |
-
return true;
|
271 |
-
}
|
272 |
-
|
273 |
-
return false;
|
274 |
-
}
|
275 |
-
|
276 |
public function get_master_public_key()
|
277 |
{
|
278 |
if (!get_option('_worker_public_key')) {
|
@@ -291,76 +245,6 @@ class MMB_Helper
|
|
291 |
return base64_decode(get_option('_worker_nossl_key'));
|
292 |
}
|
293 |
|
294 |
-
public function set_random_signature($random_key = false)
|
295 |
-
{
|
296 |
-
if ($random_key && !get_option('_worker_nossl_key')) {
|
297 |
-
add_option('_worker_nossl_key', base64_encode($random_key));
|
298 |
-
|
299 |
-
return true;
|
300 |
-
}
|
301 |
-
|
302 |
-
return false;
|
303 |
-
}
|
304 |
-
|
305 |
-
public function authenticate_message($data = false, $signature = false, $message_id = false)
|
306 |
-
{
|
307 |
-
if (!$data && !$signature) {
|
308 |
-
return array(
|
309 |
-
'error' => 'Authentication failed.',
|
310 |
-
);
|
311 |
-
}
|
312 |
-
$nonce = new MWP_Security_HashNonce();
|
313 |
-
$nonce->setValue($message_id);
|
314 |
-
if (!$nonce->verify()) {
|
315 |
-
return array(
|
316 |
-
'error' => 'Invalid nonce used. Please contact support',
|
317 |
-
);
|
318 |
-
}
|
319 |
-
|
320 |
-
$pl_key = $this->get_master_public_key();
|
321 |
-
if (!$pl_key) {
|
322 |
-
return array(
|
323 |
-
'error' => 'Authentication failed. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.',
|
324 |
-
);
|
325 |
-
}
|
326 |
-
|
327 |
-
if (function_exists('openssl_verify') && !$this->get_random_signature()) {
|
328 |
-
$verify = openssl_verify($data, $signature, $pl_key);
|
329 |
-
if ($verify == 1) {
|
330 |
-
//$this->set_worker_message_id($message_id);
|
331 |
-
|
332 |
-
return true;
|
333 |
-
} else {
|
334 |
-
if ($verify == 0) {
|
335 |
-
return array(
|
336 |
-
'error' => 'Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.',
|
337 |
-
);
|
338 |
-
} else {
|
339 |
-
return array(
|
340 |
-
'error' => 'Command not successful! Please try again.',
|
341 |
-
);
|
342 |
-
}
|
343 |
-
}
|
344 |
-
} else {
|
345 |
-
if ($this->get_random_signature()) {
|
346 |
-
if (md5($data.$this->get_random_signature()) === $signature) {
|
347 |
-
//$this->set_worker_message_id($message_id);
|
348 |
-
|
349 |
-
return true;
|
350 |
-
}
|
351 |
-
|
352 |
-
return array(
|
353 |
-
'error' => 'Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.',
|
354 |
-
);
|
355 |
-
} // no rand key - deleted in get_stat maybe
|
356 |
-
else {
|
357 |
-
return array(
|
358 |
-
'error' => 'Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.',
|
359 |
-
);
|
360 |
-
}
|
361 |
-
}
|
362 |
-
}
|
363 |
-
|
364 |
public function get_secure_hash()
|
365 |
{
|
366 |
$pl_key = $this->get_master_public_key();
|
@@ -584,4 +468,19 @@ class MMB_Helper
|
|
584 |
|
585 |
return $users_authors;
|
586 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
587 |
}
|
8 |
**************************************************************/
|
9 |
class MMB_Helper
|
10 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
+
public $mmb_multisite;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
/**
|
15 |
* Initializes the file system
|
227 |
return false;
|
228 |
}
|
229 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
230 |
public function get_master_public_key()
|
231 |
{
|
232 |
if (!get_option('_worker_public_key')) {
|
245 |
return base64_decode(get_option('_worker_nossl_key'));
|
246 |
}
|
247 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
public function get_secure_hash()
|
249 |
{
|
250 |
$pl_key = $this->get_master_public_key();
|
468 |
|
469 |
return $users_authors;
|
470 |
}
|
471 |
+
|
472 |
+
private function verifySignature($data, $signature, $publicKey)
|
473 |
+
{
|
474 |
+
if (function_exists('openssl_verify')) {
|
475 |
+
return (openssl_verify($data, $signature, $publicKey) === 1);
|
476 |
+
}
|
477 |
+
|
478 |
+
require_once dirname(__FILE__).'/../PHPSecLib/Crypt/RSA.php';
|
479 |
+
$rsa = new Crypt_RSA();
|
480 |
+
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
481 |
+
$rsa->loadKey($publicKey);
|
482 |
+
$verify = $rsa->verify($data, $signature);
|
483 |
+
|
484 |
+
return $verify;
|
485 |
+
}
|
486 |
}
|
src/MMB/Installer.php
CHANGED
@@ -156,7 +156,8 @@ class MMB_Installer extends MMB_Core
|
|
156 |
}
|
157 |
}
|
158 |
}
|
159 |
-
ob_clean()
|
|
|
160 |
$this->mmb_maintenance_mode(false);
|
161 |
|
162 |
return $install_info;
|
@@ -254,7 +255,7 @@ class MMB_Installer extends MMB_Core
|
|
254 |
}
|
255 |
}
|
256 |
}
|
257 |
-
ob_clean();
|
258 |
$this->mmb_maintenance_mode(false);
|
259 |
|
260 |
return $upgrades;
|
@@ -321,7 +322,7 @@ class MMB_Installer extends MMB_Core
|
|
321 |
);
|
322 |
}
|
323 |
if ($current_update != false) {
|
324 |
-
global $
|
325 |
|
326 |
if (version_compare($wp_version, '3.1.9', '>')) {
|
327 |
if (!class_exists('Core_Upgrader')) {
|
@@ -567,8 +568,6 @@ class MMB_Installer extends MMB_Core
|
|
567 |
|
568 |
public function upgrade_premium($premium = false)
|
569 |
{
|
570 |
-
global $mmb_plugin_url;
|
571 |
-
|
572 |
if (!class_exists('WP_Upgrader')) {
|
573 |
include_once ABSPATH.'wp-admin/includes/class-wp-upgrader.php';
|
574 |
}
|
156 |
}
|
157 |
}
|
158 |
}
|
159 |
+
// Can generate "E_NOTICE: ob_clean(): failed to delete buffer. No buffer to delete."
|
160 |
+
@ob_clean();
|
161 |
$this->mmb_maintenance_mode(false);
|
162 |
|
163 |
return $install_info;
|
255 |
}
|
256 |
}
|
257 |
}
|
258 |
+
@ob_clean();
|
259 |
$this->mmb_maintenance_mode(false);
|
260 |
|
261 |
return $upgrades;
|
322 |
);
|
323 |
}
|
324 |
if ($current_update != false) {
|
325 |
+
global $wp_filesystem, $wp_version;
|
326 |
|
327 |
if (version_compare($wp_version, '3.1.9', '>')) {
|
328 |
if (!class_exists('Core_Upgrader')) {
|
568 |
|
569 |
public function upgrade_premium($premium = false)
|
570 |
{
|
|
|
|
|
571 |
if (!class_exists('WP_Upgrader')) {
|
572 |
include_once ABSPATH.'wp-admin/includes/class-wp-upgrader.php';
|
573 |
}
|
src/MMB/Link.php
DELETED
@@ -1,172 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*************************************************************
|
4 |
-
* link.class.php
|
5 |
-
* Manage/Add Links
|
6 |
-
* Copyright (c) 2011 Prelovac Media
|
7 |
-
* www.prelovac.com
|
8 |
-
**************************************************************/
|
9 |
-
class MMB_Link extends MMB_Core
|
10 |
-
{
|
11 |
-
public function __construct()
|
12 |
-
{
|
13 |
-
parent::__construct();
|
14 |
-
}
|
15 |
-
|
16 |
-
public function add_link($args)
|
17 |
-
{
|
18 |
-
extract($args);
|
19 |
-
|
20 |
-
$params['link_url'] = esc_html($url);
|
21 |
-
$params['link_url'] = esc_url($params['link_url']);
|
22 |
-
$params['link_name'] = esc_html($name);
|
23 |
-
$params['link_id'] = '';
|
24 |
-
$params['link_description'] = $description;
|
25 |
-
$params['link_target'] = $link_target;
|
26 |
-
$params['link_category'] = array();
|
27 |
-
|
28 |
-
//Add Link category
|
29 |
-
if (is_array($link_category) && !empty($link_category)) {
|
30 |
-
$terms = get_terms('link_category', array('hide_empty' => 0));
|
31 |
-
|
32 |
-
if ($terms) {
|
33 |
-
foreach ($terms as $term) {
|
34 |
-
if (in_array($term->name, $link_category)) {
|
35 |
-
$params['link_category'][] = $term->term_id;
|
36 |
-
$link_category = $this->remove_element($link_category, $term->name);
|
37 |
-
}
|
38 |
-
}
|
39 |
-
}
|
40 |
-
if (!empty($link_category)) {
|
41 |
-
foreach ($link_category as $linkkey => $linkval) {
|
42 |
-
if (!empty($linkval)) {
|
43 |
-
$link = wp_insert_term($linkval, 'link_category');
|
44 |
-
|
45 |
-
if (isset($link['term_id']) && !empty($link['term_id'])) {
|
46 |
-
$params['link_category'][] = $link['term_id'];
|
47 |
-
}
|
48 |
-
}
|
49 |
-
}
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
//Add Link Owner
|
54 |
-
$user_obj = get_userdatabylogin($user);
|
55 |
-
if ($user_obj && $user_obj->ID) {
|
56 |
-
$params['link_owner'] = $user_obj->ID;
|
57 |
-
}
|
58 |
-
|
59 |
-
if (!function_exists('wp_insert_link')) {
|
60 |
-
include_once ABSPATH.'wp-admin/includes/bookmark.php';
|
61 |
-
}
|
62 |
-
|
63 |
-
$is_success = wp_insert_link($params);
|
64 |
-
|
65 |
-
return $is_success ? true : array('error' => 'Failed to add link.');
|
66 |
-
}
|
67 |
-
|
68 |
-
public function remove_element($arr, $val)
|
69 |
-
{
|
70 |
-
foreach ($arr as $key => $value) {
|
71 |
-
if ($value == $val) {
|
72 |
-
unset($arr[$key]);
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
return $arr = array_values($arr);
|
77 |
-
}
|
78 |
-
|
79 |
-
public function get_links($args)
|
80 |
-
{
|
81 |
-
global $wpdb;
|
82 |
-
|
83 |
-
$where = '';
|
84 |
-
|
85 |
-
extract($args);
|
86 |
-
|
87 |
-
if (!empty($filter_links)) {
|
88 |
-
$where .= " AND (link_name LIKE '%".esc_sql($filter_links)."%' OR link_url LIKE '%".esc_sql($filter_links)."%')";
|
89 |
-
}
|
90 |
-
|
91 |
-
$linkcats = $this->getLinkCats();
|
92 |
-
$sql_query = "$wpdb->links WHERE 1=1 ".$where;
|
93 |
-
|
94 |
-
$links_total = $wpdb->get_results("SELECT count(*) as total_links FROM ".$sql_query);
|
95 |
-
$total = $links_total[0]->total_links;
|
96 |
-
|
97 |
-
$query_links = $wpdb->get_results("SELECT link_id, link_url, link_name, link_target, link_visible, link_rating, link_rel FROM ".$sql_query." ORDER BY link_name ASC LIMIT 500");
|
98 |
-
$links = array();
|
99 |
-
foreach ($query_links as $link_info) {
|
100 |
-
$link_cat = $linkcats[$link_info->link_id];
|
101 |
-
$cats = array();
|
102 |
-
foreach ($link_cat as $catkey => $catval) {
|
103 |
-
$cats[] = $catval;
|
104 |
-
}
|
105 |
-
|
106 |
-
$links[$link_info->link_id] = array(
|
107 |
-
"link_url" => $link_info->link_url,
|
108 |
-
"link_name" => $link_info->link_name,
|
109 |
-
"link_target" => $link_info->link_target,
|
110 |
-
"link_visible" => $link_info->link_visible,
|
111 |
-
"link_rating" => $link_info->link_rating,
|
112 |
-
"link_rel" => $link_info->link_rel,
|
113 |
-
"link_cats" => $cats,
|
114 |
-
);
|
115 |
-
}
|
116 |
-
|
117 |
-
return array('links' => $links, 'total' => $total);
|
118 |
-
}
|
119 |
-
|
120 |
-
public function getLinkCats($taxonomy = 'link_category')
|
121 |
-
{
|
122 |
-
global $wpdb;
|
123 |
-
|
124 |
-
$cats = $wpdb->get_results(
|
125 |
-
"SELECT l.link_id, $wpdb->terms.name
|
126 |
-
FROM $wpdb->links AS l
|
127 |
-
INNER JOIN $wpdb->term_relationships ON ( l.link_id = $wpdb->term_relationships.object_id )
|
128 |
-
INNER JOIN $wpdb->term_taxonomy ON ( $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
|
129 |
-
AND $wpdb->term_taxonomy.taxonomy = '".$taxonomy."' )
|
130 |
-
INNER JOIN $wpdb->terms ON ( $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id )"
|
131 |
-
);
|
132 |
-
|
133 |
-
foreach ($cats as $post_val) {
|
134 |
-
$post_cats[$post_val->link_id][] = $post_val->name;
|
135 |
-
}
|
136 |
-
|
137 |
-
return $post_cats;
|
138 |
-
}
|
139 |
-
|
140 |
-
public function delete_link($args)
|
141 |
-
{
|
142 |
-
global $wpdb;
|
143 |
-
|
144 |
-
if (!empty($args['link_id'])) {
|
145 |
-
$delete_query = "DELETE FROM $wpdb->links WHERE link_id = ".$args['link_id'];
|
146 |
-
$wpdb->get_results($delete_query);
|
147 |
-
|
148 |
-
return 'Link deleted.';
|
149 |
-
} else {
|
150 |
-
return 'No ID...';
|
151 |
-
}
|
152 |
-
}
|
153 |
-
|
154 |
-
public function delete_links($args)
|
155 |
-
{
|
156 |
-
global $wpdb;
|
157 |
-
extract($args);
|
158 |
-
|
159 |
-
if ($deleteaction == 'delete') {
|
160 |
-
$delete_query_intro = "DELETE FROM $wpdb->links WHERE link_id = ";
|
161 |
-
}
|
162 |
-
foreach ($args as $key => $val) {
|
163 |
-
if (!empty($val) && is_numeric($val)) {
|
164 |
-
$delete_query = $delete_query_intro.$val;
|
165 |
-
|
166 |
-
$wpdb->query($delete_query);
|
167 |
-
}
|
168 |
-
}
|
169 |
-
|
170 |
-
return "Link deleted";
|
171 |
-
}
|
172 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/MMB/Post.php
CHANGED
@@ -10,7 +10,6 @@ class MMB_Post extends MMB_Core
|
|
10 |
{
|
11 |
public function create($args)
|
12 |
{
|
13 |
-
//$this->_log($args);
|
14 |
global $wpdb;
|
15 |
|
16 |
/**
|
10 |
{
|
11 |
public function create($args)
|
12 |
{
|
|
|
13 |
global $wpdb;
|
14 |
|
15 |
/**
|
src/MMB/Security.php
DELETED
@@ -1,384 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class MMB_Security extends MMB_Core
|
4 |
-
{
|
5 |
-
public function security_check($args)
|
6 |
-
{
|
7 |
-
if (MMB_Security::prevent_listing_ok()) {
|
8 |
-
$output["prevent_listing_ok"] = true;
|
9 |
-
} else {
|
10 |
-
$output["prevent_listing_ok"] = false;
|
11 |
-
}
|
12 |
-
|
13 |
-
if (MMB_Security::remove_wp_version_ok()) {
|
14 |
-
$output["remove_wp_version_ok"] = true;
|
15 |
-
} else {
|
16 |
-
$output["remove_wp_version_ok"] = false;
|
17 |
-
}
|
18 |
-
|
19 |
-
if (MMB_Security::remove_database_reporting_ok()) {
|
20 |
-
$output["remove_database_reporting_ok"] = true;
|
21 |
-
} else {
|
22 |
-
$output["remove_database_reporting_ok"] = false;
|
23 |
-
}
|
24 |
-
|
25 |
-
if (MMB_Security::remove_php_reporting_ok()) {
|
26 |
-
$output["remove_php_reporting_ok"] = true;
|
27 |
-
} else {
|
28 |
-
$output["remove_php_reporting_ok"] = false;
|
29 |
-
}
|
30 |
-
|
31 |
-
if (MMB_Security::admin_user_ok()) {
|
32 |
-
$output["admin_user_ok"] = true;
|
33 |
-
} else {
|
34 |
-
$output["admin_user_ok"] = false;
|
35 |
-
}
|
36 |
-
|
37 |
-
if (MMB_Security::htaccess_permission_ok()) {
|
38 |
-
$output["htaccess_permission_ok"] = true;
|
39 |
-
} else {
|
40 |
-
$output["htaccess_permission_ok"] = false;
|
41 |
-
}
|
42 |
-
if (MMB_Security::remove_scripts_version_ok() && MMB_Security::remove_styles_version_ok()) {
|
43 |
-
$output["remove_scripts_and_styles_version_ok"] = true;
|
44 |
-
} else {
|
45 |
-
$output["remove_scripts_and_styles_version_ok"] = false;
|
46 |
-
}
|
47 |
-
if (MMB_Security::file_permission_ok()) {
|
48 |
-
$output["file_permission_ok"] = true;
|
49 |
-
} else {
|
50 |
-
$output["file_permission_ok"] = false;
|
51 |
-
}
|
52 |
-
|
53 |
-
return $output;
|
54 |
-
}
|
55 |
-
|
56 |
-
public function security_fix_dir_listing($args)
|
57 |
-
{
|
58 |
-
MMB_Security::prevent_listing();
|
59 |
-
|
60 |
-
return $this->security_check($args);
|
61 |
-
}
|
62 |
-
|
63 |
-
public function security_fix_permissions($args)
|
64 |
-
{
|
65 |
-
MMB_Security::file_permission();
|
66 |
-
|
67 |
-
return $this->security_check($args);
|
68 |
-
}
|
69 |
-
|
70 |
-
public function security_fix_php_reporting($args)
|
71 |
-
{
|
72 |
-
MMB_Security::remove_php_reporting();
|
73 |
-
|
74 |
-
return $this->security_check($args);
|
75 |
-
}
|
76 |
-
|
77 |
-
public function security_fix_database_reporting($args)
|
78 |
-
{
|
79 |
-
MMB_Security::remove_database_reporting();
|
80 |
-
|
81 |
-
return $this->security_check($args);
|
82 |
-
}
|
83 |
-
|
84 |
-
public function security_fix_wp_version($args)
|
85 |
-
{
|
86 |
-
MMB_Security::remove_wp_version();
|
87 |
-
|
88 |
-
return $this->security_check($args);
|
89 |
-
}
|
90 |
-
|
91 |
-
public function security_fix_admin_username($args)
|
92 |
-
{
|
93 |
-
$username = $args[0];
|
94 |
-
MMB_Security::change_admin_username($username);
|
95 |
-
$scan_res = $this->security_check($args);
|
96 |
-
$scan_res["admin_user_ok"] = true;
|
97 |
-
|
98 |
-
return $scan_res;
|
99 |
-
}
|
100 |
-
|
101 |
-
public function security_fix_scripts_styles($args)
|
102 |
-
{
|
103 |
-
MMB_Security::remove_styles_version();
|
104 |
-
MMB_Security::remove_scripts_version();
|
105 |
-
|
106 |
-
return $this->security_check($args);
|
107 |
-
}
|
108 |
-
|
109 |
-
public function security_fix_htaccess_permission($args)
|
110 |
-
{
|
111 |
-
MMB_Security::htaccess_permission();
|
112 |
-
|
113 |
-
return $this->security_check($args);
|
114 |
-
}
|
115 |
-
|
116 |
-
//Prevent listing wp-content, wp-content/plugins, wp-content/themes, wp-content/uploads
|
117 |
-
private static $listingDirectories = null;
|
118 |
-
|
119 |
-
private static function init_listingDirectories()
|
120 |
-
{
|
121 |
-
if (MMB_Security::$listingDirectories == null) {
|
122 |
-
$wp_upload_dir = wp_upload_dir();
|
123 |
-
MMB_Security::$listingDirectories = array(WP_CONTENT_DIR, WP_PLUGIN_DIR, get_theme_root(), $wp_upload_dir['basedir']);
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
-
public static function prevent_listing_ok()
|
128 |
-
{
|
129 |
-
MMB_Security::init_listingDirectories();
|
130 |
-
foreach (MMB_Security::$listingDirectories as $directory) {
|
131 |
-
$file = $directory.DIRECTORY_SEPARATOR.'index.php';
|
132 |
-
if (!file_exists($file)) {
|
133 |
-
return false;
|
134 |
-
}
|
135 |
-
}
|
136 |
-
|
137 |
-
return true;
|
138 |
-
}
|
139 |
-
|
140 |
-
public static function prevent_listing()
|
141 |
-
{
|
142 |
-
MMB_Security::init_listingDirectories();
|
143 |
-
foreach (MMB_Security::$listingDirectories as $directory) {
|
144 |
-
$file = $directory.DIRECTORY_SEPARATOR.'index.php';
|
145 |
-
if (!file_exists($file)) {
|
146 |
-
chmod($directory, 0777);
|
147 |
-
$h = fopen($file, 'w');
|
148 |
-
fwrite($h, '<?php die(); ?>');
|
149 |
-
fclose($h);
|
150 |
-
chmod($directory, 0755);
|
151 |
-
}
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
//Removed wp-version
|
156 |
-
public static function remove_wp_version_ok()
|
157 |
-
{
|
158 |
-
return !(has_action('wp_head', 'wp_generator') || has_filter('wp_head', 'wp_generator'));
|
159 |
-
}
|
160 |
-
|
161 |
-
public static function remove_wp_version()
|
162 |
-
{
|
163 |
-
update_option('mwp_remove_wp_version', 'T');
|
164 |
-
if (get_option('mwp_remove_wp_version') == 'T') {
|
165 |
-
remove_action('wp_head', 'wp_generator');
|
166 |
-
remove_filter('wp_head', 'wp_generator');
|
167 |
-
}
|
168 |
-
}
|
169 |
-
|
170 |
-
//Database error reporting turned on/off
|
171 |
-
public static function remove_database_reporting_ok()
|
172 |
-
{
|
173 |
-
global $wpdb;
|
174 |
-
|
175 |
-
return ($wpdb->show_errors == false);
|
176 |
-
}
|
177 |
-
|
178 |
-
public static function remove_database_reporting()
|
179 |
-
{
|
180 |
-
global $wpdb;
|
181 |
-
|
182 |
-
$wpdb->hide_errors();
|
183 |
-
$wpdb->suppress_errors();
|
184 |
-
}
|
185 |
-
|
186 |
-
//PHP error reporting turned on/off
|
187 |
-
public static function remove_php_reporting_ok()
|
188 |
-
{
|
189 |
-
return !(((ini_get('display_errors') != 0) && (ini_get('display_errors') != 'off')) || ((ini_get('display_startup_errors') != 0) && (ini_get('display_startup_errors') != 'off')));
|
190 |
-
}
|
191 |
-
|
192 |
-
public static function remove_php_reporting()
|
193 |
-
{
|
194 |
-
update_option('mwp_remove_php_reporting', 'T');
|
195 |
-
if (get_option('mwp_remove_php_reporting') == 'T') {
|
196 |
-
@ini_set('display_errors', 'off');
|
197 |
-
@ini_set('display_startup_errors', "off");
|
198 |
-
}
|
199 |
-
}
|
200 |
-
|
201 |
-
//Admin user name is not admin
|
202 |
-
public static function admin_user_ok()
|
203 |
-
{
|
204 |
-
$user = get_user_by('login', 'admin');
|
205 |
-
|
206 |
-
return !($user && ($user->wp_user_level == 10 || (isset($user->user_level) && $user->user_level == 10)));
|
207 |
-
}
|
208 |
-
|
209 |
-
public static function change_admin_username($new_username)
|
210 |
-
{
|
211 |
-
global $wpdb;
|
212 |
-
$wpdb->query($wpdb->prepare("Update {$wpdb->prefix}users SET user_login='%s' where user_login='admin'", $new_username));
|
213 |
-
}
|
214 |
-
|
215 |
-
//Admin user name is not admin
|
216 |
-
public static function htaccess_permission_ok()
|
217 |
-
{
|
218 |
-
$htaccessPerm = substr(sprintf('%o', fileperms(ABSPATH."/.htaccess")), -4);
|
219 |
-
if ($htaccessPerm === "0644" || $htaccessPerm === "0444") {
|
220 |
-
return true;
|
221 |
-
} else {
|
222 |
-
return false;
|
223 |
-
}
|
224 |
-
}
|
225 |
-
|
226 |
-
public static function htaccess_permission()
|
227 |
-
{
|
228 |
-
$htaccessPerm = fileperms(ABSPATH.".htaccess");
|
229 |
-
$succ = chmod(ABSPATH.".htaccess", 0644);
|
230 |
-
}
|
231 |
-
|
232 |
-
public static function remove_scripts_version_ok()
|
233 |
-
{
|
234 |
-
return (get_option('managewp_remove_scripts_version') == 'T');
|
235 |
-
}
|
236 |
-
|
237 |
-
public static function remove_script_versions($src)
|
238 |
-
{
|
239 |
-
update_option('managewp_remove_scripts_version', 'T');
|
240 |
-
if (get_option('managewp_remove_scripts_version') == 'T') {
|
241 |
-
if (strpos($src, '?ver=')) {
|
242 |
-
$src = remove_query_arg('ver', $src);
|
243 |
-
}
|
244 |
-
|
245 |
-
return $src;
|
246 |
-
}
|
247 |
-
|
248 |
-
return $src;
|
249 |
-
}
|
250 |
-
|
251 |
-
public static function remove_theme_versions($src)
|
252 |
-
{
|
253 |
-
update_option('managewp_remove_styles_version', 'T');
|
254 |
-
if (get_option('managewp_remove_styles_version') == 'T') {
|
255 |
-
if (strpos($src, '?ver=')) {
|
256 |
-
$src = remove_query_arg('ver', $src);
|
257 |
-
}
|
258 |
-
|
259 |
-
return $src;
|
260 |
-
}
|
261 |
-
|
262 |
-
return $src;
|
263 |
-
}
|
264 |
-
|
265 |
-
public static function remove_scripts_version()
|
266 |
-
{
|
267 |
-
update_option('managewp_remove_scripts_version', 'T');
|
268 |
-
if (get_option('managewp_remove_scripts_version') == 'T') {
|
269 |
-
global $wp_scripts;
|
270 |
-
if (!is_a($wp_scripts, 'WP_Scripts')) {
|
271 |
-
return;
|
272 |
-
}
|
273 |
-
|
274 |
-
foreach ($wp_scripts->registered as $handle => $script) {
|
275 |
-
$wp_scripts->registered[$handle]->ver = null;
|
276 |
-
}
|
277 |
-
}
|
278 |
-
}
|
279 |
-
|
280 |
-
public static function remove_styles_version_ok()
|
281 |
-
{
|
282 |
-
return (get_option('managewp_remove_styles_version') == 'T');
|
283 |
-
}
|
284 |
-
|
285 |
-
public static function remove_styles_version()
|
286 |
-
{
|
287 |
-
update_option('managewp_remove_styles_version', 'T');
|
288 |
-
if (get_option('managewp_remove_styles_version') == 'T') {
|
289 |
-
global $wp_styles;
|
290 |
-
if (!is_a($wp_styles, 'WP_Styles')) {
|
291 |
-
return;
|
292 |
-
}
|
293 |
-
|
294 |
-
foreach ($wp_styles->registered as $handle => $style) {
|
295 |
-
$wp_styles->registered[$handle]->ver = null;
|
296 |
-
}
|
297 |
-
}
|
298 |
-
}
|
299 |
-
|
300 |
-
public static function file_permission_ok($dir = ABSPATH)
|
301 |
-
{
|
302 |
-
$files = scandir($dir);
|
303 |
-
$dir = rtrim($dir, "/");
|
304 |
-
foreach ($files as $file) {
|
305 |
-
if ($file !== "." && $file !== ".." && $file !== "wp-admin" && $file !== "wp-includes" && $file !== "plugins" && $file !== "themes" && $file !== "uploads") {
|
306 |
-
if (is_dir($dir."/".$file)) {
|
307 |
-
$dirPerm = substr(sprintf('%o', fileperms($dir."/".$file)), -4);
|
308 |
-
if ($dirPerm !== "0755") {
|
309 |
-
return false;
|
310 |
-
}
|
311 |
-
$res = MMB_Security::file_permission_ok($dir."/".$file);
|
312 |
-
if ($res === false) {
|
313 |
-
return false;
|
314 |
-
}
|
315 |
-
} else {
|
316 |
-
$filePerm = substr(sprintf('%o', fileperms($dir."/".$file)), -4);
|
317 |
-
if ($filePerm !== "0644") {
|
318 |
-
return false;
|
319 |
-
}
|
320 |
-
}
|
321 |
-
}
|
322 |
-
}
|
323 |
-
|
324 |
-
return true;
|
325 |
-
}
|
326 |
-
|
327 |
-
public static function file_permission($dir = ABSPATH)
|
328 |
-
{
|
329 |
-
$files = scandir($dir);
|
330 |
-
$dir = rtrim($dir, "/");
|
331 |
-
foreach ($files as $file) {
|
332 |
-
if ($file !== "." && $file !== ".." && $file !== "wp-admin" && $file !== "wp-includes" && $file !== "plugins" && $file !== "themes" && $file !== "uploads") {
|
333 |
-
if (is_dir($dir."/".$file)) {
|
334 |
-
$dirPerm = substr(sprintf('%o', fileperms($dir."/".$file)), -4);
|
335 |
-
if ($dirPerm !== "0755") {
|
336 |
-
chmod($dir."/".$file, 0755);
|
337 |
-
}
|
338 |
-
|
339 |
-
MMB_Security::file_permission($dir."/".$file);
|
340 |
-
} else {
|
341 |
-
$filePerm = substr(sprintf('%o', fileperms($dir."/".$file)), -4);
|
342 |
-
if ($filePerm !== "0644") {
|
343 |
-
chmod($dir."/".$file, 0644);
|
344 |
-
}
|
345 |
-
}
|
346 |
-
}
|
347 |
-
}
|
348 |
-
}
|
349 |
-
|
350 |
-
public function security_fix_all($args) // Potrebno dosta promena pre release
|
351 |
-
{
|
352 |
-
$user_name = $args['new_user_name'];
|
353 |
-
|
354 |
-
if ($args['fix_listing']) {
|
355 |
-
MMB_Security::security_fix_dir_listing($args); // ovo drugacije implementirati, ovako ne moze
|
356 |
-
}
|
357 |
-
if ($args['fix_wp_version']) {
|
358 |
-
MMB_Security::security_fix_wp_version($args);
|
359 |
-
}
|
360 |
-
if ($args['fix_database_reporting']) {
|
361 |
-
MMB_Security::security_fix_database_reporting($args); // treba da iskljuci samo prikazivanje errora
|
362 |
-
}
|
363 |
-
if ($args['fix_php_reporting']) {
|
364 |
-
MMB_Security::security_fix_php_reporting($args); // treba da iskljuci samo prikazivanje errora
|
365 |
-
}
|
366 |
-
if ($args['security_fix_scripts_styles']) {
|
367 |
-
MMB_Security::security_fix_scripts_styles($args); // ovo skloniti
|
368 |
-
}
|
369 |
-
if ($args['fix_htaccess_permission']) {
|
370 |
-
MMB_Security::security_fix_htaccess_permission($args); // skloniti, sve bez chmod-a
|
371 |
-
}
|
372 |
-
if ($args['security_fix_permissions']) {
|
373 |
-
MMB_Security::security_fix_permissions($args); // skloniti, sve bez chmod-a
|
374 |
-
}
|
375 |
-
$scan_res = $this->security_check($args);
|
376 |
-
if ($args['fix_admin_username']) {
|
377 |
-
$params[] = $user_name;
|
378 |
-
MMB_Security::security_fix_admin_username($params);
|
379 |
-
$scan_res["admin_user_ok"] = true;
|
380 |
-
}
|
381 |
-
|
382 |
-
return $scan_res;
|
383 |
-
}
|
384 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/MMB/Stats.php
CHANGED
@@ -13,15 +13,56 @@ class MMB_Stats extends MMB_Core
|
|
13 |
* (functions to be called after a remote call from Master)
|
14 |
**************************************************************/
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
public function get_core_update($stats, $options = array())
|
17 |
{
|
18 |
-
global $wp_version
|
19 |
$current_transient = null;
|
20 |
if (isset($options['core']) && $options['core']) {
|
21 |
-
$
|
|
|
22 |
if (isset($core->updates) && !empty($core->updates)) {
|
23 |
foreach ($core->updates as $update) {
|
24 |
-
if ($update->locale ==
|
25 |
$current_transient = $update;
|
26 |
break;
|
27 |
}
|
@@ -30,7 +71,7 @@ class MMB_Stats extends MMB_Core
|
|
30 |
if (!$current_transient) {
|
31 |
$current_transient = $core->updates[0];
|
32 |
}
|
33 |
-
if ($current_transient->response == "development" || version_compare($wp_version, $current_transient->current, '<') ||
|
34 |
$current_transient->current_version = $wp_version;
|
35 |
$stats['core_updates'] = $current_transient;
|
36 |
} else {
|
@@ -46,15 +87,6 @@ class MMB_Stats extends MMB_Core
|
|
46 |
|
47 |
public function get_hit_counter($stats, $options = array())
|
48 |
{
|
49 |
-
$mmb_user_hits = get_option('user_hit_count');
|
50 |
-
if (is_array($mmb_user_hits)) {
|
51 |
-
end($mmb_user_hits);
|
52 |
-
$last_key_date = key($mmb_user_hits);
|
53 |
-
$current_date = date('Y-m-d');
|
54 |
-
if ($last_key_date != $current_date) {
|
55 |
-
$this->set_hit_count(true);
|
56 |
-
}
|
57 |
-
}
|
58 |
$stats['hit_counter'] = get_option('user_hit_count');
|
59 |
|
60 |
return $stats;
|
@@ -186,13 +218,7 @@ class MMB_Stats extends MMB_Core
|
|
186 |
}
|
187 |
}
|
188 |
if (!empty($recent_drafts)) {
|
189 |
-
usort(
|
190 |
-
$recent_drafts,
|
191 |
-
array(
|
192 |
-
$this,
|
193 |
-
'cmp_posts_worker',
|
194 |
-
)
|
195 |
-
);
|
196 |
$stats['drafts'] = array_slice($recent_drafts, 0, $nposts);
|
197 |
}
|
198 |
}
|
@@ -202,46 +228,37 @@ class MMB_Stats extends MMB_Core
|
|
202 |
|
203 |
public function get_scheduled($stats, $options = array())
|
204 |
{
|
205 |
-
$
|
|
|
206 |
|
207 |
-
if (
|
208 |
-
$
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
$scheduled_posts[] = $recent;
|
219 |
-
}
|
220 |
-
}
|
221 |
-
$scheduled = get_pages('post_status=future&numberposts='.$nposts.'&orderby=post_date&order=desc');
|
222 |
-
$recent_pages_drafts = array();
|
223 |
-
if (!empty($scheduled)) {
|
224 |
-
foreach ((array) $scheduled as $id => $scheduled) {
|
225 |
-
$recent = new stdClass();
|
226 |
-
$recent->post_permalink = get_permalink($scheduled->ID);
|
227 |
-
$recent->ID = $scheduled->ID;
|
228 |
-
$recent->post_type = $scheduled->post_type;
|
229 |
-
$recent->post_date = $scheduled->post_date;
|
230 |
-
$recent->post_title = $scheduled->post_title;
|
231 |
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
|
|
|
|
|
|
245 |
}
|
246 |
|
247 |
return $stats;
|
@@ -249,25 +266,22 @@ class MMB_Stats extends MMB_Core
|
|
249 |
|
250 |
public function get_backups($stats, $options = array())
|
251 |
{
|
252 |
-
$stats['mwp_backups']
|
253 |
-
$stats['mwp_next_backups'] = $this->get_backup_instance()->get_next_schedules();
|
254 |
|
255 |
return $stats;
|
256 |
}
|
257 |
|
258 |
public function get_backup_req($stats = array(), $options = array())
|
259 |
{
|
260 |
-
$stats['mwp_backups']
|
261 |
-
$stats['
|
262 |
-
$stats['mwp_backup_req'] = $this->get_backup_instance()->check_backup_compat();
|
263 |
|
264 |
return $stats;
|
265 |
}
|
266 |
|
267 |
public function get_updates($stats, $options = array())
|
268 |
{
|
269 |
-
$
|
270 |
-
$premium = array();
|
271 |
if (isset($options['premium']) && $options['premium']) {
|
272 |
$premium_updates = array();
|
273 |
$upgrades = apply_filters('mwp_premium_update_notification', $premium_updates);
|
@@ -278,7 +292,6 @@ class MMB_Stats extends MMB_Core
|
|
278 |
}
|
279 |
}
|
280 |
$stats['premium_updates'] = $upgrades;
|
281 |
-
$upgrades = false;
|
282 |
}
|
283 |
}
|
284 |
if (isset($options['themes']) && $options['themes']) {
|
@@ -286,7 +299,6 @@ class MMB_Stats extends MMB_Core
|
|
286 |
$upgrades = $this->installer_instance->get_upgradable_themes($premium);
|
287 |
if (!empty($upgrades)) {
|
288 |
$stats['upgradable_themes'] = $upgrades;
|
289 |
-
$upgrades = false;
|
290 |
}
|
291 |
}
|
292 |
|
@@ -295,7 +307,6 @@ class MMB_Stats extends MMB_Core
|
|
295 |
$upgrades = $this->installer_instance->get_upgradable_plugins($premium);
|
296 |
if (!empty($upgrades)) {
|
297 |
$stats['upgradable_plugins'] = $upgrades;
|
298 |
-
$upgrades = false;
|
299 |
}
|
300 |
}
|
301 |
|
@@ -360,7 +371,7 @@ class MMB_Stats extends MMB_Core
|
|
360 |
'username' => '',
|
361 |
'username_filter' => '',
|
362 |
);
|
363 |
-
$users
|
364 |
|
365 |
if (empty($users['users']) || !is_array($users['users'])) {
|
366 |
return array();
|
@@ -376,10 +387,8 @@ class MMB_Stats extends MMB_Core
|
|
376 |
|
377 |
public function pre_init_stats($params)
|
378 |
{
|
379 |
-
global $_mmb_item_filter;
|
380 |
-
|
381 |
include_once ABSPATH.'wp-includes/update.php';
|
382 |
-
include_once ABSPATH.'
|
383 |
|
384 |
$stats = $this->mmb_parse_action_params('pre_init_stats', $params, $this);
|
385 |
$num = extract($params);
|
@@ -393,7 +402,7 @@ class MMB_Stats extends MMB_Core
|
|
393 |
@wp_update_themes();
|
394 |
}
|
395 |
|
396 |
-
if ($refresh == 'transient') {
|
397 |
$current = $this->mmb_get_transient('update_core');
|
398 |
if (isset($current->last_checked) || get_option('mmb_forcerefresh')) {
|
399 |
update_option('mmb_forcerefresh', false);
|
@@ -405,12 +414,13 @@ class MMB_Stats extends MMB_Core
|
|
405 |
}
|
406 |
}
|
407 |
|
408 |
-
|
|
|
409 |
|
410 |
$stats['worker_version'] = $GLOBALS['MMB_WORKER_VERSION'];
|
411 |
$stats['worker_revision'] = $GLOBALS['MMB_WORKER_REVISION'];
|
412 |
$stats['wordpress_version'] = $wp_version;
|
413 |
-
$stats['wordpress_locale_pckg'] =
|
414 |
$stats['php_version'] = phpversion();
|
415 |
$stats['mysql_version'] = $wpdb->db_version();
|
416 |
$stats['server_functionality'] = $this->get_backup_instance()->getServerInformationForStats();
|
@@ -419,10 +429,16 @@ class MMB_Stats extends MMB_Core
|
|
419 |
$stats['cookies'] = $this->get_stat_cookies();
|
420 |
$stats['admin_usernames'] = $this->getUserList();
|
421 |
$stats['site_title'] = get_bloginfo('name');
|
|
|
|
|
|
|
|
|
422 |
|
423 |
if (!function_exists('get_filesystem_method')) {
|
424 |
include_once ABSPATH.'wp-admin/includes/file.php';
|
425 |
}
|
|
|
|
|
426 |
$mmode = get_option('mwp_maintenace_mode');
|
427 |
|
428 |
if (!empty($mmode) && isset($mmode['active']) && $mmode['active'] == true) {
|
@@ -435,8 +451,6 @@ class MMB_Stats extends MMB_Core
|
|
435 |
|
436 |
public function get($params)
|
437 |
{
|
438 |
-
global $wpdb, $mmb_wp_version, $mmb_plugin_dir, $_mmb_item_filter;
|
439 |
-
|
440 |
include_once ABSPATH.'wp-includes/update.php';
|
441 |
include_once ABSPATH.'wp-admin/includes/update.php';
|
442 |
|
@@ -476,6 +490,7 @@ class MMB_Stats extends MMB_Core
|
|
476 |
|
477 |
public function get_multisite($stats = array())
|
478 |
{
|
|
|
479 |
global $current_user, $wpdb;
|
480 |
$user_blogs = get_blogs_of_user($current_user->ID);
|
481 |
$network_blogs = $wpdb->get_results("select `blog_id`, `site_id` from `{$wpdb->blogs}`");
|
@@ -584,7 +599,7 @@ class MMB_Stats extends MMB_Core
|
|
584 |
|
585 |
public function get_initial_stats()
|
586 |
{
|
587 |
-
global $mmb_plugin_dir, $_mmb_item_filter
|
588 |
|
589 |
$stats = array(
|
590 |
'email' => get_option('admin_email'),
|
@@ -601,6 +616,8 @@ class MMB_Stats extends MMB_Core
|
|
601 |
'wp_multisite' => $this->mmb_multisite,
|
602 |
'network_install' => $this->network_admin_install,
|
603 |
'cookies' => $this->get_stat_cookies(),
|
|
|
|
|
604 |
);
|
605 |
|
606 |
if ($this->mmb_multisite) {
|
@@ -618,7 +635,7 @@ class MMB_Stats extends MMB_Core
|
|
618 |
|
619 |
$stats['writable'] = $this->is_server_writable();
|
620 |
|
621 |
-
$_mmb_item_filter['pre_init_stats'] = array('core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled');
|
622 |
$_mmb_item_filter['get'] = array('updates', 'errors');
|
623 |
|
624 |
$filter = array(
|
@@ -633,11 +650,12 @@ class MMB_Stats extends MMB_Core
|
|
633 |
array('hit_counter'),
|
634 |
array('comments', array('numberposts' => 5)),
|
635 |
array('backups'),
|
|
|
636 |
'plugins' => array(
|
637 |
'cleanup' => array(
|
638 |
'overhead' => array(),
|
639 |
'revisions' => array('num_to_keep' => 'r_5'),
|
640 |
-
'spam'
|
641 |
),
|
642 |
),
|
643 |
),
|
@@ -663,171 +681,11 @@ class MMB_Stats extends MMB_Core
|
|
663 |
return $active_db;
|
664 |
}
|
665 |
|
666 |
-
public static function set_hit_count($fix_count = false)
|
667 |
-
{
|
668 |
-
global $mmb_core;
|
669 |
-
$uptime_robot = array(
|
670 |
-
"74.86.158.106",
|
671 |
-
"74.86.158.107",
|
672 |
-
"74.86.158.109",
|
673 |
-
"74.86.158.110",
|
674 |
-
"74.86.158.108",
|
675 |
-
"46.137.190.132",
|
676 |
-
"122.248.234.23",
|
677 |
-
"188.226.183.141",
|
678 |
-
"178.62.52.237",
|
679 |
-
"54.79.28.129",
|
680 |
-
"54.94.142.218",
|
681 |
-
); //don't let uptime robot to affect visit count
|
682 |
-
|
683 |
-
if ($fix_count || (!is_admin() && !MMB_Stats::is_bot() && !isset($_GET['doing_wp_cron']) && !in_array($_SERVER['REMOTE_ADDR'], $uptime_robot))) {
|
684 |
-
$date = date('Y-m-d');
|
685 |
-
$user_hit_count = (array) get_option('user_hit_count');
|
686 |
-
if (!$user_hit_count) {
|
687 |
-
$user_hit_count[$date] = 1;
|
688 |
-
update_option('user_hit_count', $user_hit_count);
|
689 |
-
} else {
|
690 |
-
$dated_keys = array_keys($user_hit_count);
|
691 |
-
$last_visit_date = $dated_keys[count($dated_keys) - 1];
|
692 |
-
|
693 |
-
$days = intval((strtotime($date) - strtotime($last_visit_date)) / 60 / 60 / 24);
|
694 |
-
|
695 |
-
if ($days > 1) {
|
696 |
-
$date_to_add = date('Y-m-d', strtotime($last_visit_date));
|
697 |
-
|
698 |
-
for ($i = 1; $i < $days; $i++) {
|
699 |
-
if (count($user_hit_count) > 14) {
|
700 |
-
$shifted = @array_shift($user_hit_count);
|
701 |
-
}
|
702 |
-
|
703 |
-
$next_key = strtotime('+1 day', strtotime($date_to_add));
|
704 |
-
if ($next_key == $date) {
|
705 |
-
break;
|
706 |
-
} else {
|
707 |
-
$user_hit_count[$next_key] = 0;
|
708 |
-
}
|
709 |
-
}
|
710 |
-
}
|
711 |
-
|
712 |
-
if (!isset($user_hit_count[$date])) {
|
713 |
-
$user_hit_count[$date] = 0;
|
714 |
-
}
|
715 |
-
if (!$fix_count) {
|
716 |
-
$user_hit_count[$date] = ((int) $user_hit_count[$date]) + 1;
|
717 |
-
}
|
718 |
-
|
719 |
-
if (count($user_hit_count) > 14) {
|
720 |
-
$shifted = @array_shift($user_hit_count);
|
721 |
-
}
|
722 |
-
|
723 |
-
update_option('user_hit_count', $user_hit_count);
|
724 |
-
}
|
725 |
-
}
|
726 |
-
}
|
727 |
-
|
728 |
public function get_hit_count()
|
729 |
{
|
730 |
-
// Check if there are no hits on last key date
|
731 |
-
$mmb_user_hits = get_option('user_hit_count');
|
732 |
-
if (is_array($mmb_user_hits)) {
|
733 |
-
end($mmb_user_hits);
|
734 |
-
$last_key_date = key($mmb_user_hits);
|
735 |
-
$current_date = date('Y-m-d');
|
736 |
-
if ($last_key_date != $curent_date) {
|
737 |
-
$this->set_hit_count(true);
|
738 |
-
}
|
739 |
-
}
|
740 |
-
|
741 |
return get_option('user_hit_count');
|
742 |
}
|
743 |
|
744 |
-
public static function is_bot()
|
745 |
-
{
|
746 |
-
$agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
|
747 |
-
|
748 |
-
if ($agent == '') {
|
749 |
-
return true;
|
750 |
-
}
|
751 |
-
|
752 |
-
$bot_list = array(
|
753 |
-
'bot',
|
754 |
-
'crawl',
|
755 |
-
'feed',
|
756 |
-
'java/',
|
757 |
-
'spider',
|
758 |
-
'curl',
|
759 |
-
'libwww',
|
760 |
-
'alexa',
|
761 |
-
'altavista',
|
762 |
-
'aolserver',
|
763 |
-
'appie',
|
764 |
-
'Ask Jeeves',
|
765 |
-
'baidu',
|
766 |
-
'Bing',
|
767 |
-
'borg',
|
768 |
-
'BrowserMob',
|
769 |
-
'ccooter',
|
770 |
-
'dataparksearch',
|
771 |
-
'Download Demon',
|
772 |
-
'echoping',
|
773 |
-
'FAST',
|
774 |
-
'findlinks',
|
775 |
-
'Firefly',
|
776 |
-
'froogle',
|
777 |
-
'GomezA',
|
778 |
-
'Google',
|
779 |
-
'grub-client',
|
780 |
-
'htdig',
|
781 |
-
'http%20client',
|
782 |
-
'HttpMonitor',
|
783 |
-
'ia_archiver',
|
784 |
-
'InfoSeek',
|
785 |
-
'inktomi',
|
786 |
-
'larbin',
|
787 |
-
'looksmart',
|
788 |
-
'Microsoft URL Control',
|
789 |
-
'Minimo',
|
790 |
-
'mogimogi',
|
791 |
-
'NationalDirectory',
|
792 |
-
'netcraftsurvey',
|
793 |
-
'nuhk',
|
794 |
-
'oegp',
|
795 |
-
'panopta',
|
796 |
-
'rabaz',
|
797 |
-
'Read%20Later',
|
798 |
-
'Scooter',
|
799 |
-
'scrubby',
|
800 |
-
'SearchExpress',
|
801 |
-
'searchsight',
|
802 |
-
'semanticdiscovery',
|
803 |
-
'Slurp',
|
804 |
-
'snappy',
|
805 |
-
'Spade',
|
806 |
-
'TechnoratiSnoop',
|
807 |
-
'TECNOSEEK',
|
808 |
-
'teoma',
|
809 |
-
'twiceler',
|
810 |
-
'URL2PNG',
|
811 |
-
'vortex',
|
812 |
-
'WebBug',
|
813 |
-
'www.galaxy.com',
|
814 |
-
'yahoo',
|
815 |
-
'yandex',
|
816 |
-
'zao',
|
817 |
-
'zeal',
|
818 |
-
'ZooShot',
|
819 |
-
'ZyBorg',
|
820 |
-
);
|
821 |
-
|
822 |
-
foreach ($bot_list as $bot) {
|
823 |
-
if (stripos($agent, $bot) !== false) {
|
824 |
-
return true;
|
825 |
-
}
|
826 |
-
}
|
827 |
-
|
828 |
-
return false;
|
829 |
-
}
|
830 |
-
|
831 |
public function set_notifications($params)
|
832 |
{
|
833 |
if (empty($params)) {
|
@@ -856,7 +714,7 @@ class MMB_Stats extends MMB_Core
|
|
856 |
//Cron update check for notifications
|
857 |
public function check_notifications()
|
858 |
{
|
859 |
-
global $
|
860 |
|
861 |
$mwp_notifications = get_option('mwp_notifications', true);
|
862 |
|
@@ -961,18 +819,4 @@ class MMB_Stats extends MMB_Core
|
|
961 |
|
962 |
return $content;
|
963 |
}
|
964 |
-
|
965 |
-
public static function readd_alerts($params = array())
|
966 |
-
{
|
967 |
-
if (empty($params) || !isset($params['alerts'])) {
|
968 |
-
return $params;
|
969 |
-
}
|
970 |
-
|
971 |
-
if (!empty($params['alerts'])) {
|
972 |
-
update_option('mwp_pageview_alerts', $params['alerts']);
|
973 |
-
unset($params['alerts']);
|
974 |
-
}
|
975 |
-
|
976 |
-
return $params;
|
977 |
-
}
|
978 |
}
|
13 |
* (functions to be called after a remote call from Master)
|
14 |
**************************************************************/
|
15 |
|
16 |
+
public function get_site_statistics($stats, $options = array())
|
17 |
+
{
|
18 |
+
/** @var wpdb $wpdb */
|
19 |
+
global $wpdb;
|
20 |
+
$siteStatistics = array();
|
21 |
+
$prefix = $wpdb->prefix;
|
22 |
+
|
23 |
+
if (!empty($options['users'])) {
|
24 |
+
$siteStatistics['users'] = (int) $wpdb->get_var("SELECT COUNT(*) FROM {$prefix}users");
|
25 |
+
}
|
26 |
+
|
27 |
+
if (!empty($options['approvedComments'])) {
|
28 |
+
$siteStatistics['approvedComments'] = (int) $wpdb->get_var("SELECT COUNT(*) FROM {$prefix}comments WHERE comment_approved='1'");
|
29 |
+
}
|
30 |
+
|
31 |
+
if (!empty($options['activePlugins'])) {
|
32 |
+
$siteStatistics['activePlugins'] = count((array) array(get_option('active_plugins', array())));
|
33 |
+
}
|
34 |
+
|
35 |
+
if (!empty($options['publishedPosts'])) {
|
36 |
+
$siteStatistics['publishedPosts'] = (int) $wpdb->get_var("SELECT COUNT(*) FROM {$prefix}posts WHERE post_type='post' AND post_status='publish'");
|
37 |
+
}
|
38 |
+
|
39 |
+
if (!empty($options['draftPosts'])) {
|
40 |
+
$siteStatistics['draftPosts'] = (int) $wpdb->get_var("SELECT COUNT(*) FROM {$prefix}posts WHERE post_type='post' AND post_status='draft'");
|
41 |
+
}
|
42 |
+
|
43 |
+
if (!empty($options['publishedPages'])) {
|
44 |
+
$siteStatistics['publishedPages'] = (int) $wpdb->get_var("SELECT COUNT(*) FROM {$prefix}posts WHERE post_type='page' AND post_status='publish'");
|
45 |
+
}
|
46 |
+
|
47 |
+
if (!empty($options['draftPages'])) {
|
48 |
+
$siteStatistics['draftPages'] = (int) $wpdb->get_var("SELECT COUNT(*) FROM {$prefix}posts WHERE post_type='page' AND post_status='draft'");
|
49 |
+
}
|
50 |
+
|
51 |
+
$stats['site_statistics'] = $siteStatistics;
|
52 |
+
|
53 |
+
return $stats;
|
54 |
+
}
|
55 |
+
|
56 |
public function get_core_update($stats, $options = array())
|
57 |
{
|
58 |
+
global $wp_version;
|
59 |
$current_transient = null;
|
60 |
if (isset($options['core']) && $options['core']) {
|
61 |
+
$locale = get_locale();
|
62 |
+
$core = $this->mmb_get_transient('update_core');
|
63 |
if (isset($core->updates) && !empty($core->updates)) {
|
64 |
foreach ($core->updates as $update) {
|
65 |
+
if ($update->locale == $locale && strtolower($update->response) == "upgrade") {
|
66 |
$current_transient = $update;
|
67 |
break;
|
68 |
}
|
71 |
if (!$current_transient) {
|
72 |
$current_transient = $core->updates[0];
|
73 |
}
|
74 |
+
if ($current_transient->response == "development" || version_compare($wp_version, $current_transient->current, '<') || $locale !== $current_transient->locale) {
|
75 |
$current_transient->current_version = $wp_version;
|
76 |
$stats['core_updates'] = $current_transient;
|
77 |
} else {
|
87 |
|
88 |
public function get_hit_counter($stats, $options = array())
|
89 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
$stats['hit_counter'] = get_option('user_hit_count');
|
91 |
|
92 |
return $stats;
|
218 |
}
|
219 |
}
|
220 |
if (!empty($recent_drafts)) {
|
221 |
+
usort($recent_drafts, array($this, 'cmp_posts_worker',));
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
$stats['drafts'] = array_slice($recent_drafts, 0, $nposts);
|
223 |
}
|
224 |
}
|
228 |
|
229 |
public function get_scheduled($stats, $options = array())
|
230 |
{
|
231 |
+
$numberOfItems = isset($options['numberposts']) ? (int) $options['numberposts'] : 20;
|
232 |
+
$scheduledItems = array();
|
233 |
|
234 |
+
if (!$numberOfItems) {
|
235 |
+
return $stats;
|
236 |
+
}
|
237 |
+
$scheduledPosts = get_posts('post_status=future&numberposts='.$numberOfItems.'&orderby=post_date&order=desc');
|
238 |
+
foreach ($scheduledPosts as $id => $scheduledPost) {
|
239 |
+
$recentPost = new stdClass();
|
240 |
+
$recentPost->post_permalink = get_permalink($scheduledPost->ID);
|
241 |
+
$recentPost->ID = $scheduledPost->ID;
|
242 |
+
$recentPost->post_date = $scheduledPost->post_date;
|
243 |
+
$recentPost->post_type = $scheduledPost->post_type;
|
244 |
+
$recentPost->post_title = $scheduledPost->post_title;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
|
246 |
+
$scheduledItems[] = $recentPost;
|
247 |
+
}
|
248 |
+
$scheduledPages = get_pages('post_status=future&numberposts='.$numberOfItems.'&orderby=post_date&order=desc');
|
249 |
+
foreach ((array) $scheduledPages as $id => $scheduledPage) {
|
250 |
+
$recentPage = new stdClass();
|
251 |
+
$recentPage->post_permalink = get_permalink($scheduledPage->ID);
|
252 |
+
$recentPage->ID = $scheduledPage->ID;
|
253 |
+
$recentPage->post_type = $scheduledPage->post_type;
|
254 |
+
$recentPage->post_date = $scheduledPage->post_date;
|
255 |
+
$recentPage->post_title = $scheduledPage->post_title;
|
256 |
+
|
257 |
+
$scheduledItems[] = $recentPage;
|
258 |
+
}
|
259 |
+
if (!empty($scheduledItems)) {
|
260 |
+
usort($scheduledItems, array($this, 'cmp_posts_worker'));
|
261 |
+
$stats['scheduled'] = array_slice($scheduledItems, 0, $numberOfItems);
|
262 |
}
|
263 |
|
264 |
return $stats;
|
266 |
|
267 |
public function get_backups($stats, $options = array())
|
268 |
{
|
269 |
+
$stats['mwp_backups'] = $this->get_backup_instance()->get_backup_stats();
|
|
|
270 |
|
271 |
return $stats;
|
272 |
}
|
273 |
|
274 |
public function get_backup_req($stats = array(), $options = array())
|
275 |
{
|
276 |
+
$stats['mwp_backups'] = $this->get_backup_instance()->get_backup_stats();
|
277 |
+
$stats['mwp_backup_req'] = $this->get_backup_instance()->check_backup_compat();
|
|
|
278 |
|
279 |
return $stats;
|
280 |
}
|
281 |
|
282 |
public function get_updates($stats, $options = array())
|
283 |
{
|
284 |
+
$premium = array();
|
|
|
285 |
if (isset($options['premium']) && $options['premium']) {
|
286 |
$premium_updates = array();
|
287 |
$upgrades = apply_filters('mwp_premium_update_notification', $premium_updates);
|
292 |
}
|
293 |
}
|
294 |
$stats['premium_updates'] = $upgrades;
|
|
|
295 |
}
|
296 |
}
|
297 |
if (isset($options['themes']) && $options['themes']) {
|
299 |
$upgrades = $this->installer_instance->get_upgradable_themes($premium);
|
300 |
if (!empty($upgrades)) {
|
301 |
$stats['upgradable_themes'] = $upgrades;
|
|
|
302 |
}
|
303 |
}
|
304 |
|
307 |
$upgrades = $this->installer_instance->get_upgradable_plugins($premium);
|
308 |
if (!empty($upgrades)) {
|
309 |
$stats['upgradable_plugins'] = $upgrades;
|
|
|
310 |
}
|
311 |
}
|
312 |
|
371 |
'username' => '',
|
372 |
'username_filter' => '',
|
373 |
);
|
374 |
+
$users = $this->get_user_instance()->get_users($filter);
|
375 |
|
376 |
if (empty($users['users']) || !is_array($users['users'])) {
|
377 |
return array();
|
387 |
|
388 |
public function pre_init_stats($params)
|
389 |
{
|
|
|
|
|
390 |
include_once ABSPATH.'wp-includes/update.php';
|
391 |
+
include_once ABSPATH.'wp-admin/includes/update.php';
|
392 |
|
393 |
$stats = $this->mmb_parse_action_params('pre_init_stats', $params, $this);
|
394 |
$num = extract($params);
|
402 |
@wp_update_themes();
|
403 |
}
|
404 |
|
405 |
+
if ($params['refresh'] == 'transient') {
|
406 |
$current = $this->mmb_get_transient('update_core');
|
407 |
if (isset($current->last_checked) || get_option('mmb_forcerefresh')) {
|
408 |
update_option('mmb_forcerefresh', false);
|
414 |
}
|
415 |
}
|
416 |
|
417 |
+
/** @var $wpdb wpdb */
|
418 |
+
global $wpdb, $wp_version;
|
419 |
|
420 |
$stats['worker_version'] = $GLOBALS['MMB_WORKER_VERSION'];
|
421 |
$stats['worker_revision'] = $GLOBALS['MMB_WORKER_REVISION'];
|
422 |
$stats['wordpress_version'] = $wp_version;
|
423 |
+
$stats['wordpress_locale_pckg'] = get_locale();
|
424 |
$stats['php_version'] = phpversion();
|
425 |
$stats['mysql_version'] = $wpdb->db_version();
|
426 |
$stats['server_functionality'] = $this->get_backup_instance()->getServerInformationForStats();
|
429 |
$stats['cookies'] = $this->get_stat_cookies();
|
430 |
$stats['admin_usernames'] = $this->getUserList();
|
431 |
$stats['site_title'] = get_bloginfo('name');
|
432 |
+
$stats['site_tagline'] = get_bloginfo('description');
|
433 |
+
$stats['blog_public'] = get_option('blog_public');
|
434 |
+
$stats['timezone'] = get_option('timezone_string');
|
435 |
+
$stats['timezone_offset'] = get_option('gmt_offset');
|
436 |
|
437 |
if (!function_exists('get_filesystem_method')) {
|
438 |
include_once ABSPATH.'wp-admin/includes/file.php';
|
439 |
}
|
440 |
+
$stats['fs_method'] = get_filesystem_method();
|
441 |
+
|
442 |
$mmode = get_option('mwp_maintenace_mode');
|
443 |
|
444 |
if (!empty($mmode) && isset($mmode['active']) && $mmode['active'] == true) {
|
451 |
|
452 |
public function get($params)
|
453 |
{
|
|
|
|
|
454 |
include_once ABSPATH.'wp-includes/update.php';
|
455 |
include_once ABSPATH.'wp-admin/includes/update.php';
|
456 |
|
490 |
|
491 |
public function get_multisite($stats = array())
|
492 |
{
|
493 |
+
/** @var $wpdb wpdb */
|
494 |
global $current_user, $wpdb;
|
495 |
$user_blogs = get_blogs_of_user($current_user->ID);
|
496 |
$network_blogs = $wpdb->get_results("select `blog_id`, `site_id` from `{$wpdb->blogs}`");
|
599 |
|
600 |
public function get_initial_stats()
|
601 |
{
|
602 |
+
global $mmb_plugin_dir, $_mmb_item_filter;
|
603 |
|
604 |
$stats = array(
|
605 |
'email' => get_option('admin_email'),
|
616 |
'wp_multisite' => $this->mmb_multisite,
|
617 |
'network_install' => $this->network_admin_install,
|
618 |
'cookies' => $this->get_stat_cookies(),
|
619 |
+
'timezone' => get_option('timezone_string'),
|
620 |
+
'timezone_offset' => get_option('gmt_offset'),
|
621 |
);
|
622 |
|
623 |
if ($this->mmb_multisite) {
|
635 |
|
636 |
$stats['writable'] = $this->is_server_writable();
|
637 |
|
638 |
+
$_mmb_item_filter['pre_init_stats'] = array('core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled', 'site_statistics');
|
639 |
$_mmb_item_filter['get'] = array('updates', 'errors');
|
640 |
|
641 |
$filter = array(
|
650 |
array('hit_counter'),
|
651 |
array('comments', array('numberposts' => 5)),
|
652 |
array('backups'),
|
653 |
+
array('site_statistics', array('users' => true, 'approvedComments' => true, 'activePlugins' => true, 'publishedPosts' => true, 'draftPosts' => true, 'publishedPages' => true, 'draftPages' => true)),
|
654 |
'plugins' => array(
|
655 |
'cleanup' => array(
|
656 |
'overhead' => array(),
|
657 |
'revisions' => array('num_to_keep' => 'r_5'),
|
658 |
+
'spam' => array(),
|
659 |
),
|
660 |
),
|
661 |
),
|
681 |
return $active_db;
|
682 |
}
|
683 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
684 |
public function get_hit_count()
|
685 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
686 |
return get_option('user_hit_count');
|
687 |
}
|
688 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
689 |
public function set_notifications($params)
|
690 |
{
|
691 |
if (empty($params)) {
|
714 |
//Cron update check for notifications
|
715 |
public function check_notifications()
|
716 |
{
|
717 |
+
global $wp_version;
|
718 |
|
719 |
$mwp_notifications = get_option('mwp_notifications', true);
|
720 |
|
819 |
|
820 |
return $content;
|
821 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
822 |
}
|
src/MMB/Updater.php
CHANGED
@@ -28,19 +28,19 @@ class MMB_Updater
|
|
28 |
$autoUpdateCore = get_option('mwp_core_autoupdate');
|
29 |
|
30 |
if ($autoUpdateCore === 'never') {
|
31 |
-
add_filter('allow_minor_auto_core_updates', '__return_false',
|
32 |
-
add_filter('allow_major_auto_core_updates', '__return_false',
|
33 |
} elseif ($autoUpdateCore === 'minor') {
|
34 |
-
add_filter('allow_minor_auto_core_updates', '__return_true',
|
35 |
-
add_filter('allow_major_auto_core_updates', '__return_false',
|
36 |
} elseif ($autoUpdateCore === 'major') {
|
37 |
-
add_filter('allow_minor_auto_core_updates', '__return_true',
|
38 |
-
add_filter('allow_major_auto_core_updates', '__return_true',
|
39 |
}
|
40 |
|
41 |
-
add_filter('auto_update_plugin', array($updater, 'updatePlugin'),
|
42 |
-
add_filter('auto_update_theme', array($updater, 'updateTheme'),
|
43 |
-
add_filter('auto_update_translation', array($updater, 'updateTranslation'),
|
44 |
}
|
45 |
|
46 |
public function updatePlugin($update, $item)
|
@@ -56,7 +56,7 @@ class MMB_Updater
|
|
56 |
}
|
57 |
*/
|
58 |
$slug = $item->plugin;
|
59 |
-
if ($slug
|
60 |
return false;
|
61 |
}
|
62 |
$alwaysUpdatePlugins = get_option('mwp_global_plugins_autoupdate', 'disabled');
|
28 |
$autoUpdateCore = get_option('mwp_core_autoupdate');
|
29 |
|
30 |
if ($autoUpdateCore === 'never') {
|
31 |
+
add_filter('allow_minor_auto_core_updates', '__return_false', PHP_INT_MAX);
|
32 |
+
add_filter('allow_major_auto_core_updates', '__return_false', PHP_INT_MAX);
|
33 |
} elseif ($autoUpdateCore === 'minor') {
|
34 |
+
add_filter('allow_minor_auto_core_updates', '__return_true', PHP_INT_MAX);
|
35 |
+
add_filter('allow_major_auto_core_updates', '__return_false', PHP_INT_MAX);
|
36 |
} elseif ($autoUpdateCore === 'major') {
|
37 |
+
add_filter('allow_minor_auto_core_updates', '__return_true', PHP_INT_MAX);
|
38 |
+
add_filter('allow_major_auto_core_updates', '__return_true', PHP_INT_MAX);
|
39 |
}
|
40 |
|
41 |
+
add_filter('auto_update_plugin', array($updater, 'updatePlugin'), PHP_INT_MAX, 2);
|
42 |
+
add_filter('auto_update_theme', array($updater, 'updateTheme'), PHP_INT_MAX, 2);
|
43 |
+
add_filter('auto_update_translation', array($updater, 'updateTranslation'), PHP_INT_MAX, 1);
|
44 |
}
|
45 |
|
46 |
public function updatePlugin($update, $item)
|
56 |
}
|
57 |
*/
|
58 |
$slug = $item->plugin;
|
59 |
+
if ($slug === 'worker/init.php') {
|
60 |
return false;
|
61 |
}
|
62 |
$alwaysUpdatePlugins = get_option('mwp_global_plugins_autoupdate', 'disabled');
|
src/MMB/Widget.php
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* MMB_Widget Class
|
5 |
-
*/
|
6 |
-
class MMB_Widget extends WP_Widget
|
7 |
-
{
|
8 |
-
/** constructor -- name this the same as the class above */
|
9 |
-
public function __construct()
|
10 |
-
{
|
11 |
-
parent::__construct(false, 'ManageWP', array('description' => 'ManageWP widget.'));
|
12 |
-
}
|
13 |
-
|
14 |
-
/** @see WP_Widget::widget -- do not rename this */
|
15 |
-
public function widget($args, $instance)
|
16 |
-
{
|
17 |
-
extract($args);
|
18 |
-
$instance['title'] = 'ManageWP';
|
19 |
-
$instance['message'] = 'We are happily using <a href="http://managewp.com" target="_blank">ManageWP</a>';
|
20 |
-
$title = apply_filters('widget_title', $instance['title']);
|
21 |
-
$message = $instance['message'];
|
22 |
-
?>
|
23 |
-
<?php echo $before_widget;
|
24 |
-
?>
|
25 |
-
<?php if ($title) {
|
26 |
-
echo $before_title.$title.$after_title;
|
27 |
-
}
|
28 |
-
?>
|
29 |
-
<ul>
|
30 |
-
<li><?php echo $message ?></li>
|
31 |
-
</ul>
|
32 |
-
<?php echo $after_widget ?>
|
33 |
-
<?php
|
34 |
-
|
35 |
-
}
|
36 |
-
|
37 |
-
/** @see WP_Widget::form -- do not rename this */
|
38 |
-
public function form($instance)
|
39 |
-
{
|
40 |
-
$title = 'ManageWP';
|
41 |
-
$message = 'We are happily using <a href="http://managewp.com" target="_blank">ManageWP</a>';
|
42 |
-
echo '<p>'.$message.'</p>';
|
43 |
-
}
|
44 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/MMB/img/mwp.png
CHANGED
Binary file
|
src/MWP/Action/Abstract.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
abstract class MWP_Action_Abstract implements MWP_ServiceContainer_ContainerAwareInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var MWP_ServiceContainer_Interface
|
16 |
+
*/
|
17 |
+
protected $container;
|
18 |
+
|
19 |
+
public function setContainer(MWP_ServiceContainer_Interface $container)
|
20 |
+
{
|
21 |
+
$this->container = $container;
|
22 |
+
}
|
23 |
+
}
|
src/MWP/Action/ConnectWebsite.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Action_ConnectWebsite extends MWP_Action_Abstract
|
12 |
+
{
|
13 |
+
|
14 |
+
public function execute(array $params = array(), MWP_Worker_Request $request)
|
15 |
+
{
|
16 |
+
if (empty($params['public_key'])) {
|
17 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::CONNECTION_PUBLIC_KEY_NOT_PROVIDED);
|
18 |
+
}
|
19 |
+
|
20 |
+
$publicKey = base64_decode($params['public_key']);
|
21 |
+
$configuration = $this->container->getConfiguration();
|
22 |
+
$existingPublicKey = $configuration->getPublicKey();
|
23 |
+
|
24 |
+
if (!empty($existingPublicKey) && ($publicKey !== $existingPublicKey)) {
|
25 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::CONNECTION_PUBLIC_KEY_EXISTS, "Sorry, the site appears to be already added to a ManageWP account. Please deactivate, then activate ManageWP Worker plugin on your website and try again or contact our support.");
|
26 |
+
}
|
27 |
+
|
28 |
+
if (!empty($params['skipVerificationTest'])) {
|
29 |
+
// Legacy support for worker key.
|
30 |
+
$signer = $this->container->getSigner();
|
31 |
+
$messageId = $request->getAction().$request->getNonce();
|
32 |
+
$verify = $signer->verify($messageId, $request->getSignature(), $publicKey);
|
33 |
+
|
34 |
+
if (!$verify) {
|
35 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::CONNECTION_VERIFICATION_TEST_FAILED, "Unable to verify security signature. Contact your hosting support to check the OpenSSL configuration.");
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
$configuration->setPublicKey($publicKey);
|
40 |
+
|
41 |
+
$this->setBrand($params);
|
42 |
+
|
43 |
+
return array();
|
44 |
+
}
|
45 |
+
|
46 |
+
private function setBrand(array $params)
|
47 |
+
{
|
48 |
+
if (!empty($params['brand']) && is_array($params['brand'])) {
|
49 |
+
$this->container->getBrand()->update($params['brand']);
|
50 |
+
|
51 |
+
return;
|
52 |
+
}
|
53 |
+
|
54 |
+
$this->container->getBrand()->delete();
|
55 |
+
}
|
56 |
+
}
|
src/MWP/Action/Definition.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Action_Definition
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var callable
|
16 |
+
*/
|
17 |
+
private $callback;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var array
|
21 |
+
*/
|
22 |
+
private $options;
|
23 |
+
|
24 |
+
private static $defaultOptions = array(
|
25 |
+
'hook_name' => null,
|
26 |
+
'hook_priority' => 10,
|
27 |
+
);
|
28 |
+
|
29 |
+
/**
|
30 |
+
* First parameter is callback to be executed.
|
31 |
+
* Second parameter accepts the following option names:
|
32 |
+
* - 'hook_name' - WordPress hook to attach the action to.
|
33 |
+
* - 'hook_priority' - WordPress hook priority; used only when 'hook_name' is set.
|
34 |
+
*
|
35 |
+
* @param callable $callback
|
36 |
+
* @param array $options
|
37 |
+
*/
|
38 |
+
public function __construct($callback, array $options = array())
|
39 |
+
{
|
40 |
+
$this->validateOptions($options);
|
41 |
+
$options += self::$defaultOptions;
|
42 |
+
|
43 |
+
$this->callback = $callback;
|
44 |
+
$this->options = $options;
|
45 |
+
}
|
46 |
+
|
47 |
+
private function validateOptions(array $options)
|
48 |
+
{
|
49 |
+
foreach ($options as $optionName => $optionDefault) {
|
50 |
+
if (!array_key_exists($optionName, self::$defaultOptions)) {
|
51 |
+
throw new InvalidArgumentException(sprintf('Option "%s" is not registered, valid options are "%s"', $optionName, implode('", "', array_keys(self::$defaultOptions))));
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @return callable
|
58 |
+
*/
|
59 |
+
public function getCallback()
|
60 |
+
{
|
61 |
+
return $this->callback;
|
62 |
+
}
|
63 |
+
|
64 |
+
public function getOption($name)
|
65 |
+
{
|
66 |
+
if (!array_key_exists($name, $this->options)) {
|
67 |
+
throw new InvalidArgumentException(sprintf('Option "%s" is not recognized', $name));
|
68 |
+
}
|
69 |
+
|
70 |
+
return $this->options[$name];
|
71 |
+
}
|
72 |
+
}
|
src/MWP/Action/Exception.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Action_Exception extends MWP_Worker_Exception
|
12 |
+
{
|
13 |
+
}
|
src/MWP/Action/GetState.php
ADDED
@@ -0,0 +1,280 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Action_GetState extends MWP_Action_Abstract
|
12 |
+
{
|
13 |
+
const USERS = 'users';
|
14 |
+
|
15 |
+
const POSTS = 'posts';
|
16 |
+
|
17 |
+
const COMMENTS = 'comments';
|
18 |
+
|
19 |
+
const PLUGINS = 'plugins';
|
20 |
+
|
21 |
+
const THEMES = 'themes';
|
22 |
+
|
23 |
+
const PLUGIN_UPDATES = 'pluginUpdates';
|
24 |
+
|
25 |
+
const THEME_UPDATES = 'themeUpdates';
|
26 |
+
|
27 |
+
const CORE_UPDATES = 'coreUpdates';
|
28 |
+
|
29 |
+
const ROLES = 'roles';
|
30 |
+
|
31 |
+
const SITE_INFO = 'siteInfo';
|
32 |
+
|
33 |
+
const SERVER_INFO = 'serverInfo';
|
34 |
+
|
35 |
+
public function execute(array $params = array())
|
36 |
+
{
|
37 |
+
$result = array();
|
38 |
+
|
39 |
+
foreach ($params as $fieldName => $queryInfo) {
|
40 |
+
$start = microtime(true);
|
41 |
+
$queryResult = $this->getField($queryInfo['type'], $queryInfo['options']);
|
42 |
+
$end = sprintf("%.6f", microtime(true) - $start);
|
43 |
+
$result[$fieldName] = array(
|
44 |
+
'type' => $queryInfo['type'],
|
45 |
+
'options' => $queryInfo['options'],
|
46 |
+
'benchmark' => $end,
|
47 |
+
'result' => $queryResult,
|
48 |
+
'resultCount' => count($queryResult),
|
49 |
+
);
|
50 |
+
}
|
51 |
+
|
52 |
+
return $result;
|
53 |
+
}
|
54 |
+
|
55 |
+
private function getField($type, $options)
|
56 |
+
{
|
57 |
+
switch ($type) {
|
58 |
+
case self::USERS:
|
59 |
+
return $this->getUsers($options);
|
60 |
+
case self::POSTS:
|
61 |
+
return $this->getPosts($options);
|
62 |
+
case self::COMMENTS:
|
63 |
+
return $this->getComments($options);
|
64 |
+
case self::PLUGINS:
|
65 |
+
return $this->getPlugins($options);
|
66 |
+
case self::THEMES:
|
67 |
+
return $this->getThemes($options);
|
68 |
+
case self::PLUGIN_UPDATES:
|
69 |
+
return $this->getPluginUpdates($options);
|
70 |
+
case self::THEME_UPDATES:
|
71 |
+
return $this->getThemeUpdates($options);
|
72 |
+
case self::CORE_UPDATES:
|
73 |
+
return $this->getCoreUpdates($options);
|
74 |
+
case self::ROLES:
|
75 |
+
return $this->getRoles($options);
|
76 |
+
case self::SITE_INFO:
|
77 |
+
return $this->getSiteInfo($options);
|
78 |
+
case self::SERVER_INFO:
|
79 |
+
return $this->getServerInfo($options);
|
80 |
+
default:
|
81 |
+
throw new RuntimeException(sprintf('Undefined field type provided: "%s".', $type));
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
protected function getUsers(array $options = array())
|
86 |
+
{
|
87 |
+
$userQuery = $this->container->getUserQuery();
|
88 |
+
|
89 |
+
$users = $userQuery->query($options);
|
90 |
+
|
91 |
+
return $users;
|
92 |
+
}
|
93 |
+
|
94 |
+
protected function getPosts(array $options = array())
|
95 |
+
{
|
96 |
+
$postQuery = $this->container->getPostQuery();
|
97 |
+
$posts = $postQuery->query($options);
|
98 |
+
|
99 |
+
return $posts;
|
100 |
+
}
|
101 |
+
|
102 |
+
protected function getComments(array $options = array())
|
103 |
+
{
|
104 |
+
$commentQuery = $this->container->getCommentQuery();
|
105 |
+
$comments = $commentQuery->query($options);
|
106 |
+
|
107 |
+
return $comments;
|
108 |
+
}
|
109 |
+
|
110 |
+
protected function getPlugins(array $options = array())
|
111 |
+
{
|
112 |
+
$options += array(
|
113 |
+
'fetchAutoUpdate' => true,
|
114 |
+
'fetchAvailableUpdate' => true,
|
115 |
+
'fetchActivatedAt' => true,
|
116 |
+
);
|
117 |
+
|
118 |
+
$pluginProvider = $this->container->getPluginProvider();
|
119 |
+
$plugins = $pluginProvider->fetch();
|
120 |
+
$autoUpdateManager = $this->container->getAutoUpdateManager();
|
121 |
+
|
122 |
+
if ($options['fetchAutoUpdate']) {
|
123 |
+
foreach ($plugins as &$plugin) {
|
124 |
+
$plugin['autoUpdate'] = $autoUpdateManager->isEnabledForPlugin($plugin['slug']);
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
if ($options['fetchAvailableUpdate']) {
|
129 |
+
$um = $this->container->getUpdateManager();
|
130 |
+
foreach ($plugins as &$plugin) {
|
131 |
+
$update = $um->getPluginUpdate($plugin['basename']);
|
132 |
+
if ($update !== null) {
|
133 |
+
$plugin['updateVersion'] = $update->version;
|
134 |
+
$plugin['updatePackage'] = $update->package;
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
if ($options['fetchActivatedAt']) {
|
140 |
+
$recentlyActivated = $this->container->getWordPressContext()->optionGet('recently_activated');
|
141 |
+
foreach ($plugins as &$plugin) {
|
142 |
+
if (isset($recentlyActivated[$plugin['basename']])) {
|
143 |
+
$plugin['activatedAt'] = date('Y-m-d\TH:i:sO', $recentlyActivated[$plugin['basename']]);
|
144 |
+
}
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
return $plugins;
|
149 |
+
}
|
150 |
+
|
151 |
+
protected function getThemes(array $options = array())
|
152 |
+
{
|
153 |
+
$options += array(
|
154 |
+
'fetchAutoUpdate' => true,
|
155 |
+
'fetchAvailableUpdate' => true,
|
156 |
+
);
|
157 |
+
|
158 |
+
$themeProvider = $this->container->getThemeProvider();
|
159 |
+
$themes = $themeProvider->fetch();
|
160 |
+
$autoUpdateManager = $this->container->getAutoUpdateManager();
|
161 |
+
|
162 |
+
if ($options['fetchAutoUpdate']) {
|
163 |
+
foreach ($themes as &$theme) {
|
164 |
+
$theme['autoUpdate'] = $autoUpdateManager->isEnabledForTheme($theme['name']);
|
165 |
+
}
|
166 |
+
}
|
167 |
+
|
168 |
+
if ($options['fetchAvailableUpdate']) {
|
169 |
+
$um = $this->container->getUpdateManager();
|
170 |
+
foreach ($themes as &$theme) {
|
171 |
+
$update = $um->getThemeUpdate($theme['slug']);
|
172 |
+
if ($update !== null) {
|
173 |
+
$theme['updateVersion'] = $update->version;
|
174 |
+
$theme['updatePackage'] = $update->package;
|
175 |
+
}
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
return $themes;
|
180 |
+
}
|
181 |
+
|
182 |
+
public function getPluginUpdates(array $options = array())
|
183 |
+
{
|
184 |
+
$um = $this->container->getUpdateManager();
|
185 |
+
|
186 |
+
return $um->getPluginUpdates();
|
187 |
+
}
|
188 |
+
|
189 |
+
public function getThemeUpdates(array $options = array())
|
190 |
+
{
|
191 |
+
$um = $this->container->getUpdateManager();
|
192 |
+
|
193 |
+
return $um->getThemeUpdates();
|
194 |
+
}
|
195 |
+
|
196 |
+
public function getCoreUpdates(array $options = array())
|
197 |
+
{
|
198 |
+
$um = $this->container->getUpdateManager();
|
199 |
+
|
200 |
+
return $um->getCoreUpdates();
|
201 |
+
}
|
202 |
+
|
203 |
+
public function getRoles(array $options = array())
|
204 |
+
{
|
205 |
+
$options += array(
|
206 |
+
'capabilities' => false,
|
207 |
+
);
|
208 |
+
|
209 |
+
$roles = $this->container->getWordPressContext()->getUserRoles();
|
210 |
+
|
211 |
+
$result = array();
|
212 |
+
|
213 |
+
foreach ($roles as $roleSlug => $roleInfo) {
|
214 |
+
$role = array(
|
215 |
+
'slug' => $roleSlug,
|
216 |
+
'name' => $roleInfo['name'],
|
217 |
+
);
|
218 |
+
if ($options['capabilities']) {
|
219 |
+
$role['capabilities'] = $roleInfo['capabilities'];
|
220 |
+
}
|
221 |
+
$result[] = $role;
|
222 |
+
}
|
223 |
+
|
224 |
+
return $result;
|
225 |
+
}
|
226 |
+
|
227 |
+
public function getSiteInfo(array $options = array())
|
228 |
+
{
|
229 |
+
$context = $this->container->getWordPressContext();
|
230 |
+
|
231 |
+
return array(
|
232 |
+
'title' => $context->getSiteTitle(),
|
233 |
+
'description' => $context->getSiteDescription(),
|
234 |
+
'siteUrl' => $context->getSiteUrl(),
|
235 |
+
'homeUrl' => $context->getHomeUrl(),
|
236 |
+
'masterSiteUrl' => $context->getMasterSiteUrl(),
|
237 |
+
'isMultisite' => $context->isMultisite(),
|
238 |
+
'public' => $context->optionGet('blog_public'),
|
239 |
+
'siteId' => $context->getSiteId(),
|
240 |
+
'currentUserId' => $context->getCurrentUser()->ID,
|
241 |
+
'currentUserUsername' => $context->getCurrentUser()->user_login,
|
242 |
+
'workerRealpath' => $this->container->getParameter('worker_realpath'),
|
243 |
+
'workerVersion' => $this->container->getParameter('worker_version'),
|
244 |
+
'workerRevision' => $this->container->getParameter('worker_revision'),
|
245 |
+
'timezone' => $this->container->getWordPressContext()->optionGet('timezone_string'),
|
246 |
+
'timezoneOffset' => $this->container->getWordPressContext()->optionGet('gmt_offset'),
|
247 |
+
);
|
248 |
+
}
|
249 |
+
|
250 |
+
public function getServerInfo(array $options = array())
|
251 |
+
{
|
252 |
+
$context = $this->container->getWordPressContext();
|
253 |
+
|
254 |
+
return array(
|
255 |
+
// @todo: move the checks below to a separate component.
|
256 |
+
'phpVersion' => PHP_VERSION,
|
257 |
+
'mysqlVersion' => $context->getDb()->db_version(),
|
258 |
+
'extensionPdoMysql' => extension_loaded('pdo_mysql'),
|
259 |
+
'extensionOpenSsl' => extension_loaded('openssl'),
|
260 |
+
'extensionFtp' => extension_loaded('ftp'),
|
261 |
+
'extensionZlib' => extension_loaded('zlib'),
|
262 |
+
'extensionBz2' => extension_loaded('bz2'),
|
263 |
+
'extensionZip' => extension_loaded('zip'),
|
264 |
+
'extensionCurl' => extension_loaded('curl'),
|
265 |
+
'extensionGd' => extension_loaded('gd'),
|
266 |
+
'extensionImagick' => extension_loaded('imagick'),
|
267 |
+
'extensionSockets' => extension_loaded('sockets'),
|
268 |
+
'extensionSsh2' => extension_loaded('ssh2'),
|
269 |
+
'shellAvailable' => mwp_is_shell_available(),
|
270 |
+
'safeMode' => mwp_is_safe_mode(),
|
271 |
+
'memoryLimit' => mwp_format_memory_limit(ini_get('memory_limit')),
|
272 |
+
'disabledFunctions' => mwp_get_disabled_functions(),
|
273 |
+
'processArchitecture' => strlen(decbin(~0)), // Results in 32 or 62.
|
274 |
+
'internalIp' => $this->container->getRequestStack()->getMasterRequest()->server['SERVER_ADDR'],
|
275 |
+
'uname' => php_uname('a'),
|
276 |
+
'hostname' => php_uname('n'),
|
277 |
+
'os' => (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? 'windows' : 'unix',
|
278 |
+
);
|
279 |
+
}
|
280 |
+
}
|
src/MWP/Action/Registry.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Action_Registry
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var MWP_Action_Definition[]
|
16 |
+
*/
|
17 |
+
private $definitions = array();
|
18 |
+
|
19 |
+
public function addDefinition($name, MWP_Action_Definition $definition)
|
20 |
+
{
|
21 |
+
$this->definitions[$name] = $definition;
|
22 |
+
}
|
23 |
+
|
24 |
+
public function getDefinition($name)
|
25 |
+
{
|
26 |
+
if (!isset($this->definitions[$name])) {
|
27 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::ACTION_NOT_REGISTERED, sprintf('Action "%s" is not registered', $name), array(
|
28 |
+
'action' => $name,
|
29 |
+
));
|
30 |
+
}
|
31 |
+
|
32 |
+
return $this->definitions[$name];
|
33 |
+
}
|
34 |
+
|
35 |
+
public function hasDefinition($name)
|
36 |
+
{
|
37 |
+
return isset($this->definitions[$name]);
|
38 |
+
}
|
39 |
+
}
|
src/MWP/Backup/ArrayHelper.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_ArrayHelper
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_ArrayHelper
|
12 |
{
|
src/MWP/Backup/Buffer/File.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_Buffer_File
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_Buffer_File
|
12 |
{
|
src/MWP/Backup/Database.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
/**
|
4 |
* Class MWP_Backup_Database
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
/**
|
12 |
* Class MWP_Backup_Database
|
src/MWP/Backup/Exception.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
/**
|
4 |
* Backup Exception
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
/**
|
12 |
* Backup Exception
|
src/MWP/Backup/MysqlDump/DumpFactory.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_MysqlDump_DumpFactory
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_MysqlDump_DumpFactory
|
12 |
{
|
src/MWP/Backup/MysqlDump/MysqlDump.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
abstract class MWP_Backup_MysqlDump_MysqlDump
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
abstract class MWP_Backup_MysqlDump_MysqlDump
|
12 |
{
|
src/MWP/Backup/MysqlDump/QuerySequenceDump.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_MysqlDump_QuerySequenceDump extends MWP_Backup_MysqlDump_MysqlDump
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_MysqlDump_QuerySequenceDump extends MWP_Backup_MysqlDump_MysqlDump
|
12 |
{
|
src/MWP/Backup/MysqlDump/ShellDump.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_MysqlDump_ShellDump extends MWP_Backup_MysqlDump_MysqlDump
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_MysqlDump_ShellDump extends MWP_Backup_MysqlDump_MysqlDump
|
12 |
{
|
src/MWP/Backup/Writer/GzipWriter.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_Writer_GzipWriter implements MWP_Backup_Writer_WriterInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_Writer_GzipWriter implements MWP_Backup_Writer_WriterInterface
|
12 |
{
|
src/MWP/Backup/Writer/PlainWriter.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_Writer_PlainWriter implements MWP_Backup_Writer_WriterInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_Writer_PlainWriter implements MWP_Backup_Writer_WriterInterface
|
12 |
{
|
src/MWP/Backup/Writer/WriterFactory.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Backup_Writer_WriterFactory
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Backup_Writer_WriterFactory
|
12 |
{
|
src/MWP/Backup/Writer/WriterInterface.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
interface MWP_Backup_Writer_WriterInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
interface MWP_Backup_Writer_WriterInterface
|
12 |
{
|
src/MWP/Crypter/Factory.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Crypter_Factory
|
12 |
+
{
|
13 |
+
public static function createCrypter()
|
14 |
+
{
|
15 |
+
if (extension_loaded('openssl')) {
|
16 |
+
return self::createOpenSslCrypter();
|
17 |
+
}
|
18 |
+
|
19 |
+
return self::createPhpSecLibCrypter();
|
20 |
+
}
|
21 |
+
|
22 |
+
public static function createOpenSslCrypter()
|
23 |
+
{
|
24 |
+
return new MWP_Crypter_OpenSslCrypter();
|
25 |
+
}
|
26 |
+
|
27 |
+
public static function createPhpSecLibCrypter()
|
28 |
+
{
|
29 |
+
return new MWP_Crypter_PhpSecLibCrypter();
|
30 |
+
}
|
31 |
+
}
|
src/MWP/Crypter/Interface.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_Crypter_Interface
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* Encrypts data with public key. It can be only encrypted with the corresponding private key.
|
15 |
+
*
|
16 |
+
* @param string $data
|
17 |
+
* @param string $publicKey
|
18 |
+
*
|
19 |
+
* @return string
|
20 |
+
*
|
21 |
+
* @throws MWP_Worker_Exception If there's anything wrong with the OpenSSL extension.
|
22 |
+
*/
|
23 |
+
public function publicEncrypt($data, $publicKey);
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Decrypts data encrypted with private key. It can be only decrypted with the corresponding public key.
|
27 |
+
*
|
28 |
+
* @param string $data
|
29 |
+
* @param string $publicKey
|
30 |
+
*
|
31 |
+
* @return string|null
|
32 |
+
*
|
33 |
+
* @throws MWP_Worker_Exception If there's anything wrong with the OpenSSL extension.
|
34 |
+
*/
|
35 |
+
public function publicDecrypt($data, $publicKey);
|
36 |
+
}
|
src/MWP/Crypter/OpenSslCrypter.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Crypter_OpenSslCrypter implements MWP_Crypter_Interface
|
12 |
+
{
|
13 |
+
public function publicEncrypt($data, $publicKey)
|
14 |
+
{
|
15 |
+
$errorCatcher = new MWP_Debug_ErrorCatcher();
|
16 |
+
$errorCatcher->register('openssl_public_encrypt');
|
17 |
+
$success = @openssl_public_encrypt($data, $crypted, $publicKey);
|
18 |
+
$lastError = $errorCatcher->yieldErrorMessage(true);
|
19 |
+
|
20 |
+
if ($success === false) {
|
21 |
+
$error = $errorRow = '';
|
22 |
+
|
23 |
+
while (($errorRow = openssl_error_string()) !== false) {
|
24 |
+
$error = $errorRow."\n".$error;
|
25 |
+
}
|
26 |
+
|
27 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::OPENSSL_ENCRYPT_ERROR, "There was an error while trying to use OpenSSL to encrypt a message.", array(
|
28 |
+
'openSslError' => $error,
|
29 |
+
'error' => isset($lastError['message']) ? $lastError['message'] : null,
|
30 |
+
));
|
31 |
+
}
|
32 |
+
|
33 |
+
return $crypted;
|
34 |
+
}
|
35 |
+
|
36 |
+
public function publicDecrypt($data, $publicKey)
|
37 |
+
{
|
38 |
+
$errorCatcher = new MWP_Debug_ErrorCatcher();
|
39 |
+
$errorCatcher->register('openssl_public_decrypt');
|
40 |
+
$success = @openssl_public_decrypt($data, $decrypted, $publicKey);
|
41 |
+
$lastError = $errorCatcher->yieldErrorMessage(true);
|
42 |
+
|
43 |
+
if ($success === false && $lastError !== null) {
|
44 |
+
$error = $errorRow = '';
|
45 |
+
|
46 |
+
while (($errorRow = openssl_error_string()) !== false) {
|
47 |
+
$error = $errorRow."\n".$error;
|
48 |
+
}
|
49 |
+
|
50 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::OPENSSL_DECRYPT_ERROR, "There was an error while trying to use OpenSSL to decrypt a message.", array(
|
51 |
+
'openSslError' => $error,
|
52 |
+
'error' => $lastError,
|
53 |
+
));
|
54 |
+
}
|
55 |
+
|
56 |
+
return $decrypted === false ? null : $decrypted;
|
57 |
+
}
|
58 |
+
}
|
src/MWP/Crypter/PhpSecLibCrypter.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Crypter_PhpSecLibCrypter implements MWP_Crypter_Interface
|
12 |
+
{
|
13 |
+
public function publicEncrypt($data, $publicKey)
|
14 |
+
{
|
15 |
+
$this->requireLibrary();
|
16 |
+
|
17 |
+
$rsa = new Crypt_RSA();
|
18 |
+
$rsa->setEncryptionMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
19 |
+
$rsa->loadKey($publicKey);
|
20 |
+
|
21 |
+
$errorCatcher = new MWP_Debug_ErrorCatcher();
|
22 |
+
$errorCatcher->register();
|
23 |
+
$encrypted = $rsa->encrypt($data);
|
24 |
+
$error = $errorCatcher->yieldErrorMessage(true);
|
25 |
+
|
26 |
+
if ($encrypted === false && $error !== null) {
|
27 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::PHPSECLIB_ENCRYPT_ERROR, "Error while trying to use OpenSSL to encrypt a message.", array(
|
28 |
+
'error' => $error,
|
29 |
+
));
|
30 |
+
}
|
31 |
+
|
32 |
+
return $encrypted;
|
33 |
+
}
|
34 |
+
|
35 |
+
public function publicDecrypt($data, $publicKey)
|
36 |
+
{
|
37 |
+
$this->requireLibrary();
|
38 |
+
|
39 |
+
$rsa = new Crypt_RSA();
|
40 |
+
$rsa->setEncryptionMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
41 |
+
$rsa->loadKey($publicKey);
|
42 |
+
|
43 |
+
$errorCatcher = new MWP_Debug_ErrorCatcher();
|
44 |
+
$errorCatcher->register();
|
45 |
+
$decrypted = $rsa->decrypt($data);
|
46 |
+
$error = $errorCatcher->yieldErrorMessage(true);
|
47 |
+
|
48 |
+
// "Decryption error" is generated by the library when the public key is not correct.
|
49 |
+
if ($decrypted === false && $error !== 'Decryption error') {
|
50 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::PHPSECLIB_DECRYPT_ERROR, "Error while trying to use OpenSSL to decrypt a message.", array(
|
51 |
+
'error' => $error,
|
52 |
+
));
|
53 |
+
}
|
54 |
+
|
55 |
+
return $decrypted === false ? null : $decrypted;
|
56 |
+
}
|
57 |
+
|
58 |
+
private function requireLibrary()
|
59 |
+
{
|
60 |
+
require_once dirname(__FILE__).'/../../PHPSecLib/Crypt/RSA.php';
|
61 |
+
}
|
62 |
+
}
|
src/MWP/Debug/ErrorCatcher.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Debug_ErrorCatcher
|
4 |
{
|
@@ -8,7 +16,7 @@ class MWP_Debug_ErrorCatcher
|
|
8 |
|
9 |
public function handleError($code, $message, $file = '', $line = 0, $context = array())
|
10 |
{
|
11 |
-
if (is_string($this->registered) && !($message = preg_replace('{^'.$this->registered.'\(.*?\): }', '', $message))) {
|
12 |
return;
|
13 |
}
|
14 |
|
@@ -20,14 +28,25 @@ class MWP_Debug_ErrorCatcher
|
|
20 |
return $this->errorMessage;
|
21 |
}
|
22 |
|
23 |
-
public function yieldErrorMessage()
|
24 |
{
|
25 |
$message = $this->errorMessage;
|
26 |
$this->errorMessage = null;
|
27 |
|
|
|
|
|
|
|
|
|
28 |
return $message;
|
29 |
}
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
public function register($capture = true)
|
32 |
{
|
33 |
if ($this->registered) {
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Debug_ErrorCatcher
|
12 |
{
|
16 |
|
17 |
public function handleError($code, $message, $file = '', $line = 0, $context = array())
|
18 |
{
|
19 |
+
if (is_string($this->registered) && !($message = preg_replace('{^'.$this->registered.'\(.*?\): }i', '', $message))) {
|
20 |
return;
|
21 |
}
|
22 |
|
28 |
return $this->errorMessage;
|
29 |
}
|
30 |
|
31 |
+
public function yieldErrorMessage($unRegister = false)
|
32 |
{
|
33 |
$message = $this->errorMessage;
|
34 |
$this->errorMessage = null;
|
35 |
|
36 |
+
if ($unRegister) {
|
37 |
+
$this->unRegister();
|
38 |
+
}
|
39 |
+
|
40 |
return $message;
|
41 |
}
|
42 |
|
43 |
+
/**
|
44 |
+
* Set the $capture parameter to "true" to capture any error message; or to a function name
|
45 |
+
* to capture only error messages for that function. It will rely on PHP's standard error
|
46 |
+
* reporting which always starts with the name of the function that generated the error.
|
47 |
+
*
|
48 |
+
* @param bool|string $capture
|
49 |
+
*/
|
50 |
public function register($capture = true)
|
51 |
{
|
52 |
if ($this->registered) {
|
src/MWP/Debug/EvalErrorHandler.php
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Debug_EvalErrorHandler
|
12 |
+
{
|
13 |
+
|
14 |
+
private $errorMessages = array();
|
15 |
+
|
16 |
+
public function getErrorMessages()
|
17 |
+
{
|
18 |
+
return $this->errorMessages;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function handleError($code, $message, $file = '', $line = 0, $context = array())
|
22 |
+
{
|
23 |
+
$this->errorMessages[] = array(
|
24 |
+
// Use 'type' instead of 'code' to be consistent with error_get_last()
|
25 |
+
'type' => $code,
|
26 |
+
'message' => $message,
|
27 |
+
'file' => $file,
|
28 |
+
'line' => $line,
|
29 |
+
'datetime' => date('Y-m-d H:i:s'),
|
30 |
+
);
|
31 |
+
}
|
32 |
+
}
|
src/MWP/Debug/FatalErrorException.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Debug_FatalErrorException extends Exception
|
12 |
+
{
|
13 |
+
public function setLine($line)
|
14 |
+
{
|
15 |
+
$this->line = $line;
|
16 |
+
}
|
17 |
+
|
18 |
+
public function setFile($file)
|
19 |
+
{
|
20 |
+
$this->file = $file;
|
21 |
+
}
|
22 |
+
}
|
src/MWP/Event/AbstractRequest.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
abstract class MWP_Event_AbstractRequest extends Symfony_EventDispatcher_Event
|
12 |
+
{
|
13 |
+
|
14 |
+
private $request;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @var MWP_Http_ResponseInterface|null
|
18 |
+
*/
|
19 |
+
private $response;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @param MWP_Worker_Request $request
|
23 |
+
*/
|
24 |
+
public function __construct(MWP_Worker_Request $request)
|
25 |
+
{
|
26 |
+
$this->request = $request;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @return MWP_Worker_Request
|
31 |
+
*/
|
32 |
+
public function getRequest()
|
33 |
+
{
|
34 |
+
return $this->request;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @return MWP_Http_ResponseInterface
|
39 |
+
*
|
40 |
+
* @throws RuntimeException If the response does not exist.
|
41 |
+
*/
|
42 |
+
public function getResponse()
|
43 |
+
{
|
44 |
+
if ($this->response === null) {
|
45 |
+
throw new RuntimeException('Response is not set');
|
46 |
+
}
|
47 |
+
|
48 |
+
return $this->response;
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* @param MWP_Http_ResponseInterface|null $response
|
53 |
+
*/
|
54 |
+
public function setResponse(MWP_Http_ResponseInterface $response)
|
55 |
+
{
|
56 |
+
$this->response = $response;
|
57 |
+
}
|
58 |
+
|
59 |
+
public function hasResponse()
|
60 |
+
{
|
61 |
+
if ($this->response === null) {
|
62 |
+
return false;
|
63 |
+
}
|
64 |
+
|
65 |
+
return true;
|
66 |
+
}
|
67 |
+
}
|
src/MWP/Event/ActionException.php
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_ActionException extends Symfony_EventDispatcher_Event
|
12 |
+
{
|
13 |
+
|
14 |
+
private $request;
|
15 |
+
|
16 |
+
private $exception;
|
17 |
+
|
18 |
+
private $data = array();
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @var MWP_Http_ResponseInterface|null
|
22 |
+
*/
|
23 |
+
private $response;
|
24 |
+
|
25 |
+
public function __construct(MWP_Worker_Request $request, Exception $exception)
|
26 |
+
{
|
27 |
+
$this->request = $request;
|
28 |
+
$this->exception = $exception;
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @return Exception
|
33 |
+
*/
|
34 |
+
public function getException()
|
35 |
+
{
|
36 |
+
return $this->exception;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @return MWP_Http_ResponseInterface|null
|
41 |
+
*/
|
42 |
+
public function getResponse()
|
43 |
+
{
|
44 |
+
return $this->response;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @param MWP_Http_ResponseInterface|null $response
|
49 |
+
*/
|
50 |
+
public function setResponse(MWP_Http_ResponseInterface $response = null)
|
51 |
+
{
|
52 |
+
$this->response = $response;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @return array
|
57 |
+
*/
|
58 |
+
public function getData()
|
59 |
+
{
|
60 |
+
return $this->data;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* @param array $data
|
65 |
+
*/
|
66 |
+
public function setData(array $data)
|
67 |
+
{
|
68 |
+
$this->data = $data;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* @return MWP_Worker_Request
|
73 |
+
*/
|
74 |
+
public function getRequest()
|
75 |
+
{
|
76 |
+
return $this->request;
|
77 |
+
}
|
78 |
+
}
|
src/MWP/Event/ActionRequest.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_ActionRequest extends Symfony_EventDispatcher_Event
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var MWP_Worker_Request
|
16 |
+
*/
|
17 |
+
private $request;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var array
|
21 |
+
*/
|
22 |
+
private $params;
|
23 |
+
|
24 |
+
public function __construct(MWP_Worker_Request $request, array $params)
|
25 |
+
{
|
26 |
+
$this->request = $request;
|
27 |
+
$this->params = $params;
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @return MWP_Worker_Request
|
32 |
+
*/
|
33 |
+
public function getRequest()
|
34 |
+
{
|
35 |
+
return $this->request;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @return array
|
40 |
+
*/
|
41 |
+
public function getParams()
|
42 |
+
{
|
43 |
+
return $this->params;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @param array $params
|
48 |
+
*/
|
49 |
+
public function setParams(array $params)
|
50 |
+
{
|
51 |
+
$this->params = $params;
|
52 |
+
}
|
53 |
+
}
|
src/MWP/Event/ActionResponse.php
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_ActionResponse extends Symfony_EventDispatcher_Event
|
12 |
+
{
|
13 |
+
|
14 |
+
private $request;
|
15 |
+
|
16 |
+
private $params;
|
17 |
+
|
18 |
+
private $data;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @var MWP_Http_ResponseInterface
|
22 |
+
*/
|
23 |
+
private $response;
|
24 |
+
|
25 |
+
public function __construct(MWP_Worker_Request $request, array $params, $data)
|
26 |
+
{
|
27 |
+
$this->request = $request;
|
28 |
+
$this->params = $params;
|
29 |
+
$this->data = $data;
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @return mixed
|
34 |
+
*/
|
35 |
+
public function getData()
|
36 |
+
{
|
37 |
+
return $this->data;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @param mixed $data
|
42 |
+
*/
|
43 |
+
public function setData($data)
|
44 |
+
{
|
45 |
+
$this->data = $data;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @return MWP_Http_ResponseInterface|null
|
50 |
+
*/
|
51 |
+
public function getResponse()
|
52 |
+
{
|
53 |
+
return $this->response;
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* @param MWP_Http_ResponseInterface|null $response
|
58 |
+
*/
|
59 |
+
public function setResponse(MWP_Http_ResponseInterface $response = null)
|
60 |
+
{
|
61 |
+
$this->response = $response;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @return MWP_Worker_Request
|
66 |
+
*/
|
67 |
+
public function getRequest()
|
68 |
+
{
|
69 |
+
return $this->request;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @return array
|
74 |
+
*/
|
75 |
+
public function getParams()
|
76 |
+
{
|
77 |
+
return $this->params;
|
78 |
+
}
|
79 |
+
}
|
src/MWP/Event/Events.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_Events
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* Fired if the master response is detected.
|
15 |
+
*
|
16 |
+
* @see MWP_Event_MasterRequest
|
17 |
+
*/
|
18 |
+
const MASTER_REQUEST = 'kernel.master_request';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Fired if non-master response is detected.
|
22 |
+
*
|
23 |
+
* @see MWP_Event_PublicRequest
|
24 |
+
*/
|
25 |
+
const PUBLIC_REQUEST = 'kernel.public_request';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Fired when the HTTP response is ready to be sent.
|
29 |
+
*
|
30 |
+
* @see MWP_Event_MasterResponse
|
31 |
+
*/
|
32 |
+
const MASTER_RESPONSE = 'kernel.master_response';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Fired just before the action and arguments are passed to it.
|
36 |
+
*
|
37 |
+
* @see MWP_Event_ActionRequest
|
38 |
+
*/
|
39 |
+
const ACTION_REQUEST = 'action.request';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Fired right after the action sends a response.
|
43 |
+
*
|
44 |
+
* @see MWP_Event_ActionResponse
|
45 |
+
*/
|
46 |
+
const ACTION_RESPONSE = 'action.response';
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Fired after an exception is thrown.
|
50 |
+
*
|
51 |
+
* @see MWP_Event_ActionException
|
52 |
+
*/
|
53 |
+
const ACTION_EXCEPTION = 'action.exception';
|
54 |
+
|
55 |
+
private function __construct()
|
56 |
+
{
|
57 |
+
}
|
58 |
+
}
|
src/MWP/Event/MasterRequest.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_MasterRequest extends MWP_Event_AbstractRequest
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var array
|
16 |
+
*/
|
17 |
+
private $params;
|
18 |
+
|
19 |
+
function __construct(MWP_Worker_Request $request, array $params)
|
20 |
+
{
|
21 |
+
$this->params = $params;
|
22 |
+
|
23 |
+
parent::__construct($request);
|
24 |
+
}
|
25 |
+
|
26 |
+
public function getParams()
|
27 |
+
{
|
28 |
+
return $this->params;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function setParams(array $params)
|
32 |
+
{
|
33 |
+
$this->params = $params;
|
34 |
+
}
|
35 |
+
}
|
src/MWP/Event/MasterResponse.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_MasterResponse extends Symfony_EventDispatcher_Event
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var MWP_Http_ResponseInterface|null
|
16 |
+
*/
|
17 |
+
private $response;
|
18 |
+
|
19 |
+
public function __construct(MWP_Http_ResponseInterface $response)
|
20 |
+
{
|
21 |
+
$this->response = $response;
|
22 |
+
}
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @return MWP_Http_ResponseInterface
|
26 |
+
*/
|
27 |
+
public function getResponse()
|
28 |
+
{
|
29 |
+
return $this->response;
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Give listeners a chance to remove the response.
|
34 |
+
*
|
35 |
+
* @param MWP_Http_ResponseInterface|null $response
|
36 |
+
*/
|
37 |
+
public function setResponse(MWP_Http_ResponseInterface $response = null)
|
38 |
+
{
|
39 |
+
$this->response = $response;
|
40 |
+
}
|
41 |
+
}
|
src/MWP/Event/PublicRequest.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Event_PublicRequest extends MWP_Event_AbstractRequest
|
12 |
+
{
|
13 |
+
}
|
src/MWP/EventListener/ActionException/SetExceptionData.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_ActionException_SetExceptionData implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
public static function getSubscribedEvents()
|
14 |
+
{
|
15 |
+
return array(
|
16 |
+
MWP_Event_Events::ACTION_EXCEPTION => array('onActionException', 200),
|
17 |
+
);
|
18 |
+
}
|
19 |
+
|
20 |
+
public function onActionException(MWP_Event_ActionException $event)
|
21 |
+
{
|
22 |
+
$exception = $event->getException();
|
23 |
+
|
24 |
+
if ($exception instanceof MWP_Worker_Exception) {
|
25 |
+
$exceptionData = $this->getDataForWorkerException($exception);
|
26 |
+
} else {
|
27 |
+
$exceptionData = $this->getDataForGenericException($exception);
|
28 |
+
}
|
29 |
+
|
30 |
+
$data = array(
|
31 |
+
'error' => $exception->getMessage(),
|
32 |
+
'exception' => $exceptionData,
|
33 |
+
);
|
34 |
+
|
35 |
+
$event->setData($data);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function getDataForWorkerException(MWP_Worker_Exception $exception)
|
39 |
+
{
|
40 |
+
return array(
|
41 |
+
'context' => $exception->getContext(),
|
42 |
+
'type' => $exception->getErrorName(),
|
43 |
+
) + $this->getDataForGenericException($exception);
|
44 |
+
}
|
45 |
+
|
46 |
+
public function getDataForGenericException(Exception $exception)
|
47 |
+
{
|
48 |
+
return array(
|
49 |
+
'class' => get_class($exception),
|
50 |
+
'message' => $exception->getMessage(),
|
51 |
+
'line' => $exception->getLine(),
|
52 |
+
'file' => $exception->getFile(),
|
53 |
+
'code' => $exception->getCode(),
|
54 |
+
'traceString' => $exception->getTraceAsString(),
|
55 |
+
);
|
56 |
+
}
|
57 |
+
}
|
src/MWP/EventListener/ActionRequest/SetSettings.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_ActionRequest_SetSettings implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
public function __construct(MWP_WordPress_Context $context)
|
17 |
+
{
|
18 |
+
$this->context = $context;
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function getSubscribedEvents()
|
22 |
+
{
|
23 |
+
return array(
|
24 |
+
MWP_Event_Events::ACTION_REQUEST => 'onActionRequest',
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function onActionRequest(MWP_Event_ActionRequest $event)
|
29 |
+
{
|
30 |
+
set_time_limit(1800);
|
31 |
+
|
32 |
+
$this->context->set('_wp_using_ext_object_cache', false);
|
33 |
+
|
34 |
+
$data = $event->getRequest()->getData();
|
35 |
+
|
36 |
+
if (empty($data['setting'])) {
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
+
if (!empty($data['setting']['dataown'])) {
|
41 |
+
$oldSettings = (array) $this->context->optionGet('wrksettings');
|
42 |
+
$this->context->optionSet('wrksettings', array_merge($oldSettings, array('dataown' => $data['setting']['dataown'])));
|
43 |
+
}
|
44 |
+
|
45 |
+
$configurationService = new MWP_Configuration_Service();
|
46 |
+
$configuration = new MWP_Configuration_Conf($data['setting']);
|
47 |
+
$configurationService->saveConfiguration($configuration);
|
48 |
+
}
|
49 |
+
}
|
src/MWP/EventListener/ActionResponse/ChainState.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_ActionResponse_ChainState implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $container;
|
15 |
+
|
16 |
+
public function __construct(MWP_ServiceContainer_Interface $container)
|
17 |
+
{
|
18 |
+
$this->container;
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function getSubscribedEvents()
|
22 |
+
{
|
23 |
+
return array(
|
24 |
+
MWP_Event_Events::ACTION_RESPONSE => array('onActionResponse', -500),
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function onActionResponse(MWP_Event_ActionResponse $event)
|
29 |
+
{
|
30 |
+
$rawData = $event->getRequest()->getData();
|
31 |
+
|
32 |
+
if (empty($rawData['stateParams'])) {
|
33 |
+
return;
|
34 |
+
}
|
35 |
+
|
36 |
+
$stateAction = new MWP_Action_GetState();
|
37 |
+
$stateAction->setContainer($this->container);
|
38 |
+
$stateData = $stateAction->execute($rawData['stateParams']);
|
39 |
+
|
40 |
+
$actionData = $event->getData();
|
41 |
+
$actionData['state'] = $stateData;
|
42 |
+
}
|
43 |
+
}
|
src/MWP/EventListener/ActionResponse/SetActionData.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_ActionResponse_SetActionData implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
public static function getSubscribedEvents()
|
14 |
+
{
|
15 |
+
return array(
|
16 |
+
MWP_Event_Events::ACTION_RESPONSE => array('encodeResponse', 100),
|
17 |
+
);
|
18 |
+
}
|
19 |
+
|
20 |
+
public function encodeResponse(MWP_Event_ActionResponse $event)
|
21 |
+
{
|
22 |
+
$event->setData(array('success' => $event->getData()));
|
23 |
+
}
|
24 |
+
}
|
src/MWP/EventListener/ActionResponse/SetLegacyPhpExecutionData.php
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @deprecated This is used to convert the result of PHP execution to raw response or an error response.
|
13 |
+
*/
|
14 |
+
class MWP_EventListener_ActionResponse_SetLegacyPhpExecutionData implements Symfony_EventDispatcher_EventSubscriberInterface
|
15 |
+
{
|
16 |
+
|
17 |
+
private static $errorMap = array(
|
18 |
+
E_PARSE => 'E_PARSE',
|
19 |
+
E_ERROR => 'E_ERROR',
|
20 |
+
E_CORE_ERROR => 'E_CORE_ERROR',
|
21 |
+
E_COMPILE_ERROR => 'E_COMPILE_ERROR',
|
22 |
+
);
|
23 |
+
|
24 |
+
public static function getSubscribedEvents()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
MWP_Event_Events::ACTION_RESPONSE => array('onActionResponse', 500),
|
28 |
+
);
|
29 |
+
}
|
30 |
+
|
31 |
+
public function onActionResponse(MWP_Event_ActionResponse $event)
|
32 |
+
{
|
33 |
+
$data = $event->getData();
|
34 |
+
|
35 |
+
if ($event->getRequest()->getAction() !== 'execute_php_code') {
|
36 |
+
return;
|
37 |
+
}
|
38 |
+
|
39 |
+
if ($event->getRequest()->getProtocol() >= 1) {
|
40 |
+
return;
|
41 |
+
}
|
42 |
+
|
43 |
+
if (!empty($data['fatalError']['message'])) {
|
44 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::PHP_EVAL_ERROR, sprintf('Fatal error [%s]: %s in %s on line %d', self::$errorMap[$data['fatalError']['type']], $data['fatalError']['message'], $data['fatalError']['file'], $data['fatalError']['line']));
|
45 |
+
}
|
46 |
+
|
47 |
+
if (isset($data['output'])) {
|
48 |
+
$event->setData($data['output']);
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
src/MWP/EventListener/ActionResponse/SetLegacyWebsiteConnectionData.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Attaches initial site statistics after connecting the worker to a master instance.
|
13 |
+
*
|
14 |
+
* @deprecated Not used in master v2.
|
15 |
+
*/
|
16 |
+
class MWP_EventListener_ActionResponse_SetLegacyWebsiteConnectionData implements Symfony_EventDispatcher_EventSubscriberInterface
|
17 |
+
{
|
18 |
+
|
19 |
+
private $context;
|
20 |
+
|
21 |
+
public function __construct(MWP_WordPress_Context $context)
|
22 |
+
{
|
23 |
+
$this->context = $context;
|
24 |
+
}
|
25 |
+
|
26 |
+
public static function getSubscribedEvents()
|
27 |
+
{
|
28 |
+
return array(
|
29 |
+
MWP_Event_Events::ACTION_RESPONSE => array('onActionResponse', 200),
|
30 |
+
);
|
31 |
+
}
|
32 |
+
|
33 |
+
public function onActionResponse(MWP_Event_ActionResponse $event)
|
34 |
+
{
|
35 |
+
if ($event->getRequest()->getAction() !== 'add_site') {
|
36 |
+
return;
|
37 |
+
}
|
38 |
+
|
39 |
+
$params = $event->getRequest()->getParams();
|
40 |
+
|
41 |
+
if (!array_key_exists('notifications', $params)) {
|
42 |
+
// This is not a legacy call.
|
43 |
+
return;
|
44 |
+
}
|
45 |
+
|
46 |
+
$this->context->requireWpRewrite();
|
47 |
+
$this->context->requireTaxonomies();
|
48 |
+
$this->context->requirePostTypes();
|
49 |
+
$this->context->requireTheme();
|
50 |
+
|
51 |
+
$stats = new MMB_Stats();
|
52 |
+
$this->context->optionSet('mwp_notifications', $params['notifications']);
|
53 |
+
$event->setData($stats->get_initial_stats());
|
54 |
+
}
|
55 |
+
}
|
src/MWP/EventListener/EncodeMasterResponse.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_EncodeMasterResponse implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
public static function getSubscribedEvents()
|
14 |
+
{
|
15 |
+
return array(
|
16 |
+
MWP_Event_Events::ACTION_RESPONSE => array('onActionResponse', 100),
|
17 |
+
MWP_Event_Events::ACTION_EXCEPTION => array('onActionException', 100),
|
18 |
+
);
|
19 |
+
}
|
20 |
+
|
21 |
+
public function onActionResponse(MWP_Event_ActionResponse $event)
|
22 |
+
{
|
23 |
+
$event->setResponse($this->getResponseForRequest($event->getRequest(), $event->getData()));
|
24 |
+
}
|
25 |
+
|
26 |
+
public function onActionException(MWP_Event_ActionException $event)
|
27 |
+
{
|
28 |
+
$event->setResponse($this->getResponseForRequest($event->getRequest(), $event->getData()));
|
29 |
+
}
|
30 |
+
|
31 |
+
private function getResponseForRequest(MWP_Worker_Request $request, $data)
|
32 |
+
{
|
33 |
+
if (strpos($request->getHeader('Accept'), 'application/json') === false) {
|
34 |
+
return new MWP_Http_LegacyWorkerResponse($data);
|
35 |
+
}
|
36 |
+
|
37 |
+
return new MWP_Http_JsonResponse($data);
|
38 |
+
}
|
39 |
+
}
|
src/MWP/EventListener/MasterRequest/AttachJsonMessageHandler.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_MasterRequest_AttachJsonMessageHandler implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $logger;
|
15 |
+
|
16 |
+
private $handler;
|
17 |
+
|
18 |
+
function __construct(Monolog_Logger $logger, MWP_Monolog_Handler_JsonMessageHandler $handler)
|
19 |
+
{
|
20 |
+
$this->logger = $logger;
|
21 |
+
$this->handler = $handler;
|
22 |
+
}
|
23 |
+
|
24 |
+
public static function getSubscribedEvents()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', -400),
|
28 |
+
);
|
29 |
+
}
|
30 |
+
|
31 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
32 |
+
{
|
33 |
+
if (!$event->getRequest()->isAuthenticated()) {
|
34 |
+
return;
|
35 |
+
}
|
36 |
+
|
37 |
+
if (strpos($event->getRequest()->getHeader('ACCEPT'), 'application/ldjson') === false) {
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
$this->logger->pushHandler($this->handler);
|
42 |
+
}
|
43 |
+
}
|
src/MWP/EventListener/MasterRequest/AuthenticateLegacyRequest.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Authenticates requests that use hash authentication instead of public/private key.
|
13 |
+
*
|
14 |
+
* @deprecated Rely on the more secure AuthenticateRequest class.
|
15 |
+
*/
|
16 |
+
class MWP_EventListener_MasterRequest_AuthenticateLegacyRequest implements Symfony_EventDispatcher_EventSubscriberInterface
|
17 |
+
{
|
18 |
+
|
19 |
+
private $configuration;
|
20 |
+
|
21 |
+
function __construct(MWP_Worker_Configuration $configuration)
|
22 |
+
{
|
23 |
+
$this->configuration = $configuration;
|
24 |
+
}
|
25 |
+
|
26 |
+
public static function getSubscribedEvents()
|
27 |
+
{
|
28 |
+
return array(
|
29 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', 350),
|
30 |
+
);
|
31 |
+
}
|
32 |
+
|
33 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
34 |
+
{
|
35 |
+
$request = $event->getRequest();
|
36 |
+
$secureKey = $this->configuration->getSecureKey();
|
37 |
+
$params = $event->getParams();
|
38 |
+
$givenPublicKey = isset($params['public_key']) ? base64_decode($params['public_key']) : null;
|
39 |
+
$existingPublicKey = $this->configuration->getPublicKey();
|
40 |
+
|
41 |
+
if ($request->getAction() === 'add_site') {
|
42 |
+
if ($secureKey && (!$existingPublicKey || $givenPublicKey !== $existingPublicKey)) {
|
43 |
+
// Secure key exists, and public key either doesn't exist, or doesn't match.
|
44 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::LEGACY_AUTHENTICATION_KEY_EXISTS, "Sorry, the site appears to be already added to a ManageWP account. Please deactivate, then activate ManageWP Worker plugin on your website and try again or contact our support.");
|
45 |
+
}
|
46 |
+
|
47 |
+
return;
|
48 |
+
}
|
49 |
+
|
50 |
+
if (!$secureKey) {
|
51 |
+
// The site is relying on public key.
|
52 |
+
return;
|
53 |
+
}
|
54 |
+
|
55 |
+
$messageId = $request->getAction().$request->getNonce();
|
56 |
+
$signature = $request->getSignature();
|
57 |
+
|
58 |
+
if (md5($messageId.$secureKey) !== $signature) {
|
59 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::LEGACY_AUTHENTICATION_INVALID_SIGNATURE, "Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.");
|
60 |
+
}
|
61 |
+
|
62 |
+
$request->setAuthenticated(true);
|
63 |
+
|
64 |
+
// Skip verification test because the signature is not an SSL signature.
|
65 |
+
$params = $event->getParams();
|
66 |
+
$params['skipVerificationTest'] = true;
|
67 |
+
$event->setParams($params);
|
68 |
+
}
|
69 |
+
}
|
src/MWP/EventListener/MasterRequest/AuthenticateRequest.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_MasterRequest_AuthenticateRequest implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
private $configuration;
|
14 |
+
|
15 |
+
private $signer;
|
16 |
+
|
17 |
+
function __construct(MWP_Worker_Configuration $configuration, MWP_Signer_Interface $signer)
|
18 |
+
{
|
19 |
+
$this->configuration = $configuration;
|
20 |
+
$this->signer = $signer;
|
21 |
+
}
|
22 |
+
|
23 |
+
public static function getSubscribedEvents()
|
24 |
+
{
|
25 |
+
return array(
|
26 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', 300),
|
27 |
+
);
|
28 |
+
}
|
29 |
+
|
30 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
31 |
+
{
|
32 |
+
$request = $event->getRequest();
|
33 |
+
|
34 |
+
if ($request->isAuthenticated()) {
|
35 |
+
return;
|
36 |
+
}
|
37 |
+
|
38 |
+
if ($request->getAction() === 'add_site') {
|
39 |
+
return;
|
40 |
+
}
|
41 |
+
|
42 |
+
$publicKey = $this->configuration->getPublicKey();
|
43 |
+
|
44 |
+
if (!$publicKey) {
|
45 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::AUTHENTICATION_PUBLIC_KEY_EMPTY, "Authentication failed. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.");
|
46 |
+
}
|
47 |
+
|
48 |
+
$messageId = $request->getAction().$request->getNonce();
|
49 |
+
$signature = $request->getSignature();
|
50 |
+
|
51 |
+
if (!$messageId) {
|
52 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::AUTHENTICATION_MESSAGE_ID_EMPTY, null, array(
|
53 |
+
'messageId' => $messageId,
|
54 |
+
'signature' => base64_encode($signature),
|
55 |
+
));
|
56 |
+
}
|
57 |
+
|
58 |
+
$verify = $this->signer->verify($messageId, $signature, $publicKey);
|
59 |
+
|
60 |
+
if (!$verify) {
|
61 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::AUTHENTICATION_INVALID_SIGNATURE, "Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.");
|
62 |
+
}
|
63 |
+
|
64 |
+
$request->setAuthenticated(true);
|
65 |
+
}
|
66 |
+
}
|
src/MWP/EventListener/MasterRequest/RemoveUsernameParam.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @deprecated Legacy protocol support.
|
13 |
+
*/
|
14 |
+
class MWP_EventListener_MasterRequest_RemoveUsernameParam implements Symfony_EventDispatcher_EventSubscriberInterface
|
15 |
+
{
|
16 |
+
public static function getSubscribedEvents()
|
17 |
+
{
|
18 |
+
return array(
|
19 |
+
MWP_Event_Events::MASTER_REQUEST => 'onMasterRequest',
|
20 |
+
);
|
21 |
+
}
|
22 |
+
|
23 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
24 |
+
{
|
25 |
+
$params = $event->getParams();
|
26 |
+
|
27 |
+
if (!array_key_exists('username', $params)) {
|
28 |
+
return;
|
29 |
+
}
|
30 |
+
|
31 |
+
unset($params['username']);
|
32 |
+
|
33 |
+
$event->setParams($params);
|
34 |
+
}
|
35 |
+
}
|
src/MWP/EventListener/MasterRequest/SetCurrentUser.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_MasterRequest_SetCurrentUser implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
public function __construct(MWP_WordPress_Context $context)
|
17 |
+
{
|
18 |
+
$this->context = $context;
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function getSubscribedEvents()
|
22 |
+
{
|
23 |
+
return array(
|
24 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', -300),
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
29 |
+
{
|
30 |
+
if (!$event->getRequest()->isAuthenticated()) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
|
34 |
+
$usernameUsed = $event->getRequest()->getUsername();
|
35 |
+
$user = null;
|
36 |
+
|
37 |
+
if ($usernameUsed) {
|
38 |
+
$user = $this->context->getUserByUsername($usernameUsed);
|
39 |
+
}
|
40 |
+
|
41 |
+
if ($user === null) {
|
42 |
+
// No user provided, find one instead.
|
43 |
+
$users = $this->context->getUsers(array('role' => 'administrator', 'number' => 1, 'orderby' => 'ID'));
|
44 |
+
if (count($users) === 0) {
|
45 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::AUTHENTICATION_NO_ADMIN_USER, "We could not find an administrator user to use. Please contact support.");
|
46 |
+
}
|
47 |
+
$user = $users[0];
|
48 |
+
}
|
49 |
+
|
50 |
+
$this->context->setCurrentUser($user);
|
51 |
+
|
52 |
+
/*
|
53 |
+
if (isset($user)) {
|
54 |
+
wp_set_current_user($user->ID);
|
55 |
+
// Compatibility with All In One Security
|
56 |
+
update_user_meta($user->ID, 'last_login_time', current_time('mysql'));
|
57 |
+
}
|
58 |
+
|
59 |
+
if (defined('ALTERNATE_WP_CRON') && !defined('DOING_AJAX') && ALTERNATE_WP_CRON === true) {
|
60 |
+
define('DOING_AJAX', true);
|
61 |
+
}
|
62 |
+
*/
|
63 |
+
}
|
64 |
+
}
|
src/MWP/EventListener/MasterRequest/SetErrorHandler.php
ADDED
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Converts any fatal PHP error into a valid worker response.
|
13 |
+
*/
|
14 |
+
class MWP_EventListener_MasterRequest_SetErrorHandler extends Monolog_Handler_AbstractHandler implements Symfony_EventDispatcher_EventSubscriberInterface
|
15 |
+
{
|
16 |
+
|
17 |
+
private $logger;
|
18 |
+
|
19 |
+
private $errorHandler;
|
20 |
+
|
21 |
+
private $requestStack;
|
22 |
+
|
23 |
+
private $responseCallback;
|
24 |
+
|
25 |
+
private $container;
|
26 |
+
|
27 |
+
private $errors = array();
|
28 |
+
|
29 |
+
private $logErrors;
|
30 |
+
|
31 |
+
private $reservedMemorySize;
|
32 |
+
|
33 |
+
public function __construct(Monolog_Logger $logger, Monolog_ErrorHandler $errorHandler, MWP_Worker_RequestStack $requestStack, MWP_Worker_ResponseCallback $responseCallback, MWP_ServiceContainer_Interface $container, $logErrors = false, $reservedMemorySize = 20)
|
34 |
+
{
|
35 |
+
$this->logger = $logger;
|
36 |
+
$this->errorHandler = $errorHandler;
|
37 |
+
$this->requestStack = $requestStack;
|
38 |
+
$this->responseCallback = $responseCallback;
|
39 |
+
$this->logErrors = $logErrors;
|
40 |
+
$this->reservedMemorySize = $reservedMemorySize;
|
41 |
+
// We need the container here, since referencing the event dispatcher component will create a circular reference,
|
42 |
+
// since this is an event listener.
|
43 |
+
$this->container = $container;
|
44 |
+
|
45 |
+
parent::__construct(Monolog_Logger::NOTICE, false);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Error data ($record) looks like this:
|
50 |
+
* array (
|
51 |
+
* 'message' => 'Fatal Error (E_ERROR): Call to undefined function wp_set_current_user()',
|
52 |
+
* // or
|
53 |
+
* 'message' => 'Uncaught exception',
|
54 |
+
* 'context' =>
|
55 |
+
* array (
|
56 |
+
* 'code' => 1,
|
57 |
+
* 'message' => 'Call to undefined function wp_set_current_user()',
|
58 |
+
* 'file' => '/home/vagrant/www/wptest.dev/wp-content/plugins/worker/src/MWP/WordPress/Context.php',
|
59 |
+
* 'line' => 483,
|
60 |
+
* // or
|
61 |
+
* 'exception' => Exception
|
62 |
+
* ),
|
63 |
+
* 'level' => 550,
|
64 |
+
* 'level_name' => 'ALERT',
|
65 |
+
* 'channel' => 'worker',
|
66 |
+
* 'datetime' =>
|
67 |
+
* DateTime::__set_state(array(
|
68 |
+
* 'date' => '2015-01-06 14:50:44.404504',
|
69 |
+
* 'timezone_type' => 3,
|
70 |
+
* 'timezone' => 'UTC',
|
71 |
+
* )),
|
72 |
+
* 'extra' =>
|
73 |
+
* array (
|
74 |
+
* ),
|
75 |
+
* )
|
76 |
+
*
|
77 |
+
* @param array $record
|
78 |
+
*
|
79 |
+
* @return bool
|
80 |
+
*/
|
81 |
+
public function handle(array $record)
|
82 |
+
{
|
83 |
+
$request = $this->requestStack->getMasterRequest();
|
84 |
+
|
85 |
+
// Everything below ERROR is recoverable, so we can log it.
|
86 |
+
if ($record['level'] < Monolog_Logger::ERROR) {
|
87 |
+
if ($this->logErrors) {
|
88 |
+
$this->errors[] = $record;
|
89 |
+
}
|
90 |
+
|
91 |
+
return false;
|
92 |
+
}
|
93 |
+
|
94 |
+
// Everything after this point is a fatal error.
|
95 |
+
if (!$request->isAuthenticated()) {
|
96 |
+
return false;
|
97 |
+
}
|
98 |
+
|
99 |
+
$responseCallback = $this->responseCallback->get();
|
100 |
+
|
101 |
+
if ($responseCallback === null) {
|
102 |
+
return false;
|
103 |
+
}
|
104 |
+
|
105 |
+
if (isset($record['context']['exception'])) {
|
106 |
+
$exception = $record['context']['exception'];
|
107 |
+
} else {
|
108 |
+
$exception = new MWP_Debug_FatalErrorException($record['message'], $record['context']['code']);
|
109 |
+
$exception->setFile($record['context']['file']);
|
110 |
+
$exception->setLine($record['context']['line']);
|
111 |
+
}
|
112 |
+
|
113 |
+
$errorEvent = new MWP_Event_ActionException($request, $exception);
|
114 |
+
$this->container->getEventDispatcher()->dispatch(MWP_Event_Events::ACTION_EXCEPTION, $errorEvent);
|
115 |
+
|
116 |
+
call_user_func($responseCallback, $exception, $errorEvent->getResponse());
|
117 |
+
|
118 |
+
return true;
|
119 |
+
}
|
120 |
+
|
121 |
+
public static function getSubscribedEvents()
|
122 |
+
{
|
123 |
+
return array(
|
124 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', 200),
|
125 |
+
MWP_Event_Events::MASTER_RESPONSE => array('onMasterResponse', -200),
|
126 |
+
);
|
127 |
+
}
|
128 |
+
|
129 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
130 |
+
{
|
131 |
+
if (!$event->getRequest()->isAuthenticated()) {
|
132 |
+
return;
|
133 |
+
}
|
134 |
+
|
135 |
+
$this->logger->pushHandler($this);
|
136 |
+
$this->errorHandler->registerFatalHandler(null, $this->reservedMemorySize);
|
137 |
+
$this->errorHandler->registerExceptionHandler();
|
138 |
+
|
139 |
+
if ($this->logErrors) {
|
140 |
+
error_reporting(E_ALL);
|
141 |
+
ini_set('display_errors', false);
|
142 |
+
$this->errorHandler->registerErrorHandler();
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
public function onMasterResponse(MWP_Event_MasterResponse $event)
|
147 |
+
{
|
148 |
+
if (!$this->logErrors) {
|
149 |
+
return;
|
150 |
+
}
|
151 |
+
|
152 |
+
if (!$this->requestStack->getMasterRequest()->isAuthenticated() || count($this->errors) === 0) {
|
153 |
+
return;
|
154 |
+
}
|
155 |
+
|
156 |
+
$response = $event->getResponse();
|
157 |
+
$content = $response->getContent();
|
158 |
+
|
159 |
+
if (!is_array($content)) {
|
160 |
+
return;
|
161 |
+
}
|
162 |
+
|
163 |
+
$content['errorLog'] = array();
|
164 |
+
|
165 |
+
foreach ($this->errors as $error) {
|
166 |
+
/** @var DateTime $date */
|
167 |
+
$date = $error['datetime'];
|
168 |
+
$log = $error['context'];
|
169 |
+
$log['level'] = $error['level_name'];
|
170 |
+
$log['time'] = $date->format('Y-m-d H:i:s');
|
171 |
+
|
172 |
+
$content['errorLog'][] = $log;
|
173 |
+
}
|
174 |
+
|
175 |
+
$response->setContent($content);
|
176 |
+
}
|
177 |
+
}
|
src/MWP/EventListener/MasterRequest/VerifyConnectionInfo.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Checks if the website connection attempt is providing valid signature for our keychain.
|
13 |
+
* This works in conjunction with "AuthenticateRequest" class, since it handles all other cases.
|
14 |
+
*/
|
15 |
+
class MWP_EventListener_MasterRequest_VerifyConnectionInfo implements Symfony_EventDispatcher_EventSubscriberInterface
|
16 |
+
{
|
17 |
+
|
18 |
+
private $context;
|
19 |
+
|
20 |
+
private $signer;
|
21 |
+
|
22 |
+
public function __construct(MWP_WordPress_Context $context, MWP_Signer_Interface $signer)
|
23 |
+
{
|
24 |
+
$this->context = $context;
|
25 |
+
$this->signer = $signer;
|
26 |
+
}
|
27 |
+
|
28 |
+
public static function getSubscribedEvents()
|
29 |
+
{
|
30 |
+
return array(
|
31 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', 300),
|
32 |
+
);
|
33 |
+
}
|
34 |
+
|
35 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
36 |
+
{
|
37 |
+
$request = $event->getRequest();
|
38 |
+
|
39 |
+
if ($request->getAction() !== 'add_site') {
|
40 |
+
return;
|
41 |
+
}
|
42 |
+
|
43 |
+
$data = $request->getData();
|
44 |
+
|
45 |
+
if (empty($data['add_site_signature']) || empty($data['add_site_signature_id'])) {
|
46 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::CONNECTION_SIGNATURE_EMPTY);
|
47 |
+
}
|
48 |
+
|
49 |
+
$connectionSignature = base64_decode($data['add_site_signature']);
|
50 |
+
$publicKeyId = $data['add_site_signature_id'];
|
51 |
+
|
52 |
+
$publicKeyId = preg_replace('{[^a-z0-9_]}i', '', $publicKeyId);
|
53 |
+
$publicKeyLocation = dirname(__FILE__).'/../../../../publickeys/'.$publicKeyId.'.pub';
|
54 |
+
|
55 |
+
if (!file_exists($publicKeyLocation)) {
|
56 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::CONNECTION_PUBLIC_KEY_NOT_FOUND, null, array(
|
57 |
+
'publicKeyId' => $publicKeyId,
|
58 |
+
));
|
59 |
+
}
|
60 |
+
|
61 |
+
$publicKey = file_get_contents($publicKeyLocation);
|
62 |
+
|
63 |
+
$message = json_encode(array('setting' => $request->getSetting(), 'params' => $request->getParams()));
|
64 |
+
|
65 |
+
$verify = $this->signer->verify($message, $connectionSignature, $publicKey);
|
66 |
+
|
67 |
+
if (!$verify) {
|
68 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::CONNECTION_SIGNATURE_NOT_VALID, "Invalid message signature. Deactivate and activate the ManageWP Worker plugin on this site, then re-add it to your ManageWP account.");
|
69 |
+
}
|
70 |
+
|
71 |
+
$request->setAuthenticated(true);
|
72 |
+
}
|
73 |
+
}
|
src/MWP/EventListener/MasterRequest/VerifyNonce.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_MasterRequest_VerifyNonce implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $nonceManager;
|
15 |
+
|
16 |
+
public function __construct(MWP_Security_NonceManager $nonceManager)
|
17 |
+
{
|
18 |
+
$this->nonceManager = $nonceManager;
|
19 |
+
}
|
20 |
+
|
21 |
+
public static function getSubscribedEvents()
|
22 |
+
{
|
23 |
+
return array(
|
24 |
+
MWP_Event_Events::MASTER_REQUEST => array('onMasterRequest', 400),
|
25 |
+
);
|
26 |
+
}
|
27 |
+
|
28 |
+
public function onMasterRequest(MWP_Event_MasterRequest $event)
|
29 |
+
{
|
30 |
+
$nonce = $event->getRequest()->getNonce();
|
31 |
+
|
32 |
+
try {
|
33 |
+
$this->nonceManager->useNonce($nonce);
|
34 |
+
} catch (MWP_Security_Exception_NonceFormatInvalid $e) {
|
35 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::NONCE_FORMAT_INVALID, "Invalid nonce used. Please contact support.", array(
|
36 |
+
'nonce' => $nonce,
|
37 |
+
));
|
38 |
+
} catch (MWP_Security_Exception_NonceExpired $e) {
|
39 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::NONCE_EXPIRED, "Nonce expired. Please contact support.", array(
|
40 |
+
'nonce' => $nonce,
|
41 |
+
));
|
42 |
+
} catch (MWP_Security_Exception_NonceAlreadyUsed $e) {
|
43 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::NONCE_ALREADY_USED, "Nonce already used. Please contact support.", array(
|
44 |
+
'nonce' => $nonce,
|
45 |
+
));
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
src/MWP/EventListener/PublicRequest/AutomaticLogin.php
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_PublicRequest_AutomaticLogin implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $signer;
|
17 |
+
|
18 |
+
private $nonceManager;
|
19 |
+
|
20 |
+
private $configuration;
|
21 |
+
|
22 |
+
public function __construct(MWP_WordPress_Context $context, MWP_Security_NonceManager $nonceManager, MWP_Signer_Interface $signer, MWP_Worker_Configuration $configuration)
|
23 |
+
{
|
24 |
+
$this->context = $context;
|
25 |
+
$this->nonceManager = $nonceManager;
|
26 |
+
$this->signer = $signer;
|
27 |
+
$this->configuration = $configuration;
|
28 |
+
}
|
29 |
+
|
30 |
+
public static function getSubscribedEvents()
|
31 |
+
{
|
32 |
+
return array(
|
33 |
+
MWP_Event_Events::PUBLIC_REQUEST => array(
|
34 |
+
array('checkLoginToken', 2),
|
35 |
+
array('setXframeHeader', 3),
|
36 |
+
),
|
37 |
+
);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function checkLoginToken(MWP_Event_PublicRequest $event)
|
41 |
+
{
|
42 |
+
$request = $event->getRequest();
|
43 |
+
|
44 |
+
if (empty($request->query['auto_login']) || empty($request->query['signature']) || empty($request->query['message_id']) || !array_key_exists('mwp_goto', $request->query)) {
|
45 |
+
return;
|
46 |
+
}
|
47 |
+
|
48 |
+
if (!$this->configuration->getPublicKey()) {
|
49 |
+
// Site is not connected to a master instance.
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
|
53 |
+
$username = empty($request->query['username']) ? null : $request->query['username'];
|
54 |
+
|
55 |
+
if ($username === null) {
|
56 |
+
$users = $this->context->getUsers(array('role' => 'administrator', 'number' => 1, 'orderby' => 'ID'));
|
57 |
+
if (empty($users[0]->user_login)) {
|
58 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::AUTO_LOGIN_USERNAME_REQUIRED, "We could not find an administrator user to use. Please contact support.");
|
59 |
+
}
|
60 |
+
$username = $users[0]->user_login;
|
61 |
+
}
|
62 |
+
|
63 |
+
$where = isset($request->query['mwp_goto']) ? $request->query['mwp_goto'] : '';
|
64 |
+
|
65 |
+
$signature = base64_decode($request->query['signature']);
|
66 |
+
$messageId = $request->query['message_id'];
|
67 |
+
|
68 |
+
try {
|
69 |
+
$this->nonceManager->useNonce($messageId);
|
70 |
+
} catch (MWP_Security_Exception_NonceFormatInvalid $e) {
|
71 |
+
$this->context->wpDie("The automatic login token is invalid. Please try again, or, if this keeps happening, contact support.");
|
72 |
+
} catch (MWP_Security_Exception_NonceExpired $e) {
|
73 |
+
$this->context->wpDie("The automatic login token has expired. Please try again, or, if this keeps happening, contact support.");
|
74 |
+
} catch (MWP_Security_Exception_NonceAlreadyUsed $e) {
|
75 |
+
$this->context->wpDie("The automatic login token was already used. Please try again, or, if this keeps happening, contact support.");
|
76 |
+
}
|
77 |
+
|
78 |
+
if ($secureKey = $this->configuration->getSecureKey()) {
|
79 |
+
// Legacy support, to be removed.
|
80 |
+
$verify = (md5($where.$messageId.$secureKey) === $signature);
|
81 |
+
} else {
|
82 |
+
$verify = $this->signer->verify($where.$messageId, $signature, $this->configuration->getPublicKey());
|
83 |
+
}
|
84 |
+
|
85 |
+
if (!$verify) {
|
86 |
+
$this->context->wpDie("The automatic login token is invalid. Please check if this website is properly connected with your dashboard, or, if this keeps happening, contact support.");
|
87 |
+
}
|
88 |
+
|
89 |
+
$user = $this->context->getUserByUsername($username);
|
90 |
+
|
91 |
+
if ($user === null) {
|
92 |
+
$this->context->wpDie(sprintf("User <strong>%s</strong> could not be found.", htmlspecialchars($username)));
|
93 |
+
}
|
94 |
+
|
95 |
+
$this->context->setCurrentUser($user);
|
96 |
+
$this->context->setAuthCookie($user);
|
97 |
+
|
98 |
+
$currentUri = empty($request->server['REQUEST_URI']) ? '/' : $request->server['REQUEST_URI'];
|
99 |
+
$redirectUri = $this->omitUriParameters($currentUri, array('signature', 'username', 'auto_login', 'message_id', 'mwp_goto', 'mwpredirect'));
|
100 |
+
|
101 |
+
$this->context->setCookie($this->getCookieName(), '1');
|
102 |
+
|
103 |
+
$event->setResponse(new MWP_Http_RedirectResponse($redirectUri, 302, array(
|
104 |
+
'P3P' => 'CP="CAO PSA OUR"',
|
105 |
+
)));
|
106 |
+
}
|
107 |
+
|
108 |
+
private function getCookieName()
|
109 |
+
{
|
110 |
+
return 'wordpress_'.md5($this->context->getSiteUrl()).'_xframe';
|
111 |
+
}
|
112 |
+
|
113 |
+
public function setXframeHeader(MWP_Event_PublicRequest $event)
|
114 |
+
{
|
115 |
+
if (!isset($_COOKIE[$this->getCookieName()])) {
|
116 |
+
return;
|
117 |
+
}
|
118 |
+
|
119 |
+
$this->context->removeAction('admin_init', 'send_frame_options_header');
|
120 |
+
$this->context->removeAction('login_init', 'send_frame_options_header');
|
121 |
+
|
122 |
+
if (!headers_sent()) {
|
123 |
+
header('P3P: CP="CAO PSA OUR"');
|
124 |
+
}
|
125 |
+
}
|
126 |
+
|
127 |
+
private function omitUriParameters($uri, array $omitParameters)
|
128 |
+
{
|
129 |
+
if (strpos($uri, '?') === false) {
|
130 |
+
return $uri;
|
131 |
+
}
|
132 |
+
|
133 |
+
$rawQuery = parse_url($uri, PHP_URL_QUERY);
|
134 |
+
parse_str($rawQuery, $query);
|
135 |
+
|
136 |
+
foreach ($omitParameters as $key) {
|
137 |
+
if (array_key_exists($key, $query)) {
|
138 |
+
unset($query[$key]);
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
// Replace everything from "?" onwards with "?key=value" or an empty string.
|
143 |
+
return substr($uri, 0, strpos($uri, '?')).(count($query) ? '?'.http_build_query($query) : '');
|
144 |
+
}
|
145 |
+
}
|
src/MWP/EventListener/PublicRequest/BrandContactSupport.php
ADDED
@@ -0,0 +1,222 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_PublicRequest_BrandContactSupport implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $brand;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Required WordPress capability to access the page.
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
private $capability = 'read';
|
24 |
+
|
25 |
+
public function __construct(MWP_WordPress_Context $context, MWP_Worker_Brand $brand)
|
26 |
+
{
|
27 |
+
$this->context = $context;
|
28 |
+
$this->brand = $brand;
|
29 |
+
}
|
30 |
+
|
31 |
+
public static function getSubscribedEvents()
|
32 |
+
{
|
33 |
+
return array(
|
34 |
+
MWP_Event_Events::PUBLIC_REQUEST => 'enableContactSupport',
|
35 |
+
);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function enableContactSupport(MWP_Event_PublicRequest $event)
|
39 |
+
{
|
40 |
+
if (!$this->brand->isActive()) {
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
if ($this->brand->getContactType() === MWP_Worker_Brand::CONTACT_TYPE_NONE) {
|
45 |
+
return;
|
46 |
+
}
|
47 |
+
|
48 |
+
$this->context->addAction('admin_init', array($this, 'enqueueSupportScripts'));
|
49 |
+
$this->context->addAction('admin_init', array($this, 'enqueueSupportStyles'));
|
50 |
+
$this->context->addAction('admin_menu', array($this, 'addSupportLink'));
|
51 |
+
$this->context->addAction('admin_head', array($this, 'printSupportScript'));
|
52 |
+
$this->context->addAction('admin_footer', array($this, 'printSupportDialog'));
|
53 |
+
|
54 |
+
$this->handleSupportForm($event);
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @wp_hook admin_init
|
59 |
+
*/
|
60 |
+
public function enqueueSupportScripts()
|
61 |
+
{
|
62 |
+
$this->context->enqueueScript('jquery');
|
63 |
+
$this->context->enqueueScript('jquery-ui-core');
|
64 |
+
$this->context->enqueueScript('jquery-ui-dialog');
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* @wp_hook admin_init
|
69 |
+
*/
|
70 |
+
public function enqueueSupportStyles()
|
71 |
+
{
|
72 |
+
$this->context->enqueueStyle('wp-jquery-ui');
|
73 |
+
$this->context->enqueueStyle('jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/smoothness/jquery-ui.css');
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* @wp_hook admin_menu
|
78 |
+
*/
|
79 |
+
public function addSupportLink()
|
80 |
+
{
|
81 |
+
$this->context->addMenuPage('Support', 'Support', $this->capability, 'mwp-support');
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* @wp_hook admin_head
|
86 |
+
*/
|
87 |
+
public function printSupportScript()
|
88 |
+
{
|
89 |
+
ob_start()
|
90 |
+
?>
|
91 |
+
<script type="text/javascript">
|
92 |
+
jQuery(document).ready(function ($) {
|
93 |
+
var $dialog = $('#support_dialog');
|
94 |
+
var $form = $('#support_form');
|
95 |
+
var $messageContainer = $('#support_response_id');
|
96 |
+
$form.submit(function (e) {
|
97 |
+
e.preventDefault();
|
98 |
+
var data = $(this).serialize();
|
99 |
+
$.ajax({
|
100 |
+
type: "POST",
|
101 |
+
url: 'index.php',
|
102 |
+
dataType: 'json',
|
103 |
+
data: data,
|
104 |
+
success: function (data, textStatus, jqXHR) {
|
105 |
+
if (data.success) {
|
106 |
+
$form.slideUp();
|
107 |
+
}
|
108 |
+
$messageContainer.html(data.message);
|
109 |
+
},
|
110 |
+
error: function (jqXHR, textStatus, errorThrown) {
|
111 |
+
$messageContainer.html('An error occurred, please try again.');
|
112 |
+
}
|
113 |
+
});
|
114 |
+
});
|
115 |
+
$('.toplevel_page_mwp-support').click(function (e) {
|
116 |
+
e.preventDefault();
|
117 |
+
$form.show();
|
118 |
+
$messageContainer.empty();
|
119 |
+
$dialog.dialog({
|
120 |
+
draggable: false,
|
121 |
+
resizable: false,
|
122 |
+
modal: true,
|
123 |
+
width: '530px',
|
124 |
+
height: 'auto',
|
125 |
+
title: 'Contact Support',
|
126 |
+
dialogClass: 'mwp-support-dialog',
|
127 |
+
close: function () {
|
128 |
+
$('#support_response_id').html('');
|
129 |
+
$(this).dialog("destroy");
|
130 |
+
}
|
131 |
+
});
|
132 |
+
});
|
133 |
+
});
|
134 |
+
</script>
|
135 |
+
<?php
|
136 |
+
|
137 |
+
$content = ob_get_clean();
|
138 |
+
$this->context->output($content);
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* @wp_hook admin_footer
|
143 |
+
*/
|
144 |
+
public function printSupportDialog()
|
145 |
+
{
|
146 |
+
$contactText = $this->brand->getTextForClient();
|
147 |
+
$contactType = $this->brand->getContactType();
|
148 |
+
|
149 |
+
ob_start();
|
150 |
+
?>
|
151 |
+
<div id="support_dialog" style="display: none;">
|
152 |
+
<?php if (!empty($contactText)): ?>
|
153 |
+
<div>
|
154 |
+
<p><?php echo $contactText ?></p>
|
155 |
+
</div>
|
156 |
+
<?php endif ?>
|
157 |
+
<?php if ($contactType == MWP_Worker_Brand::CONTACT_TYPE_TEXT_PLUS_FORM): ?>
|
158 |
+
<div style="margin: 19px 0 0;">
|
159 |
+
<form method="post" id="support_form">
|
160 |
+
<textarea name="support_mwp_message" id="support_message" style="width:500px;height:150px;display:block;margin-left:auto;margin-right:auto;"></textarea>
|
161 |
+
<button type="submit" class="button-primary" style="display:block;margin:20px auto 7px auto;border:1px solid #a1a1a1;padding:0 31px;border-radius: 4px;">Send</button>
|
162 |
+
</form>
|
163 |
+
<div id="support_response_id" style="margin-top: 14px"></div>
|
164 |
+
<style scoped="scoped">
|
165 |
+
.mwp-support-dialog.ui-dialog {
|
166 |
+
z-index: 300002;
|
167 |
+
}
|
168 |
+
</style>
|
169 |
+
</div>
|
170 |
+
<?php endif ?>
|
171 |
+
</div>
|
172 |
+
<?php
|
173 |
+
|
174 |
+
$content = ob_get_clean();
|
175 |
+
$this->context->output($content);
|
176 |
+
}
|
177 |
+
|
178 |
+
private function handleSupportForm(MWP_Event_PublicRequest $event)
|
179 |
+
{
|
180 |
+
$request = $event->getRequest();
|
181 |
+
if (!isset($request->request['support_mwp_message']) || !is_scalar($request->request['support_mwp_message'])) {
|
182 |
+
return;
|
183 |
+
}
|
184 |
+
|
185 |
+
if ($this->context->isGranted($this->capability)) {
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
|
189 |
+
if ($this->brand->getContactType() !== MWP_Worker_Brand::CONTACT_TYPE_TEXT_PLUS_FORM) {
|
190 |
+
return;
|
191 |
+
}
|
192 |
+
|
193 |
+
$message = (string) $request->request['support_mwp_message'];
|
194 |
+
$currentUser = $this->context->getCurrentUser();
|
195 |
+
|
196 |
+
if (empty($message)) {
|
197 |
+
// Message is set, but it's empty.
|
198 |
+
$event->setResponse(new MWP_Http_JsonResponse(array(
|
199 |
+
'success' => false,
|
200 |
+
'message' => "Please enter a message.",
|
201 |
+
)));
|
202 |
+
$event->stopPropagation();
|
203 |
+
|
204 |
+
return;
|
205 |
+
}
|
206 |
+
$subject = 'New ticket for site '.$this->context->getHomeUrl();
|
207 |
+
$message = <<<EOF
|
208 |
+
Hi,
|
209 |
+
User {$currentUser->user_login} has sent a support ticket:
|
210 |
+
|
211 |
+
{$message}
|
212 |
+
EOF;
|
213 |
+
$emailSent = $this->context->sendMail($this->brand->getAdminEmail(), $subject, $message);
|
214 |
+
$status = array(
|
215 |
+
'success' => $emailSent,
|
216 |
+
'message' => $emailSent ? "Message successfully sent." : "Unable to send email. Please try again.",
|
217 |
+
);
|
218 |
+
|
219 |
+
$event->setResponse(new MWP_Http_JsonResponse($status));
|
220 |
+
$event->stopPropagation();
|
221 |
+
}
|
222 |
+
}
|
src/MWP/EventListener/PublicRequest/DisableEditor.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_PublicRequest_DisableEditor implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $brand;
|
17 |
+
|
18 |
+
function __construct(MWP_WordPress_Context $context, MWP_Worker_Brand $brand)
|
19 |
+
{
|
20 |
+
$this->context = $context;
|
21 |
+
$this->brand = $brand;
|
22 |
+
}
|
23 |
+
|
24 |
+
public static function getSubscribedEvents()
|
25 |
+
{
|
26 |
+
return array(
|
27 |
+
MWP_Event_Events::PUBLIC_REQUEST => 'onPublicRequest',
|
28 |
+
);
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Remove editor from plugins and themes.
|
33 |
+
*/
|
34 |
+
public function onPublicRequest()
|
35 |
+
{
|
36 |
+
if (!$this->brand->isActive() || !$this->brand->isDisallowEdit()) {
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
+
$this->context->setConstant('DISALLOW_FILE_EDIT', true, false);
|
41 |
+
$this->context->setConstant('DISALLOW_FILE_MODS', true, false);
|
42 |
+
}
|
43 |
+
}
|
src/MWP/EventListener/PublicRequest/SetHitCounter.php
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_PublicRequest_SetHitCounter implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
const METHOD_BLACKLIST = false;
|
14 |
+
|
15 |
+
const METHOD_WHITELIST = true;
|
16 |
+
|
17 |
+
private $context;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var MWP_Extension_HitCounter
|
21 |
+
*/
|
22 |
+
private $hitCounter;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* If set to METHOD_BLACKLIST, all non-master requests except those that match at least one
|
26 |
+
* rule from the list.
|
27 |
+
* If set to METHOD_WHITELIST, only requests that match at least one rule from the list will
|
28 |
+
* be counted.
|
29 |
+
*
|
30 |
+
* @var bool
|
31 |
+
*/
|
32 |
+
private $userAgentMatchingMethod;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* @var array
|
36 |
+
*/
|
37 |
+
private $blacklistedIps = array();
|
38 |
+
|
39 |
+
private $userAgentList = array();
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param MWP_WordPress_Context $context
|
43 |
+
* @param MWP_Extension_HitCounter $hitCounter
|
44 |
+
* @param string[] $blacklistedIps
|
45 |
+
* @param string[] $userAgentList
|
46 |
+
* @param bool $userAgentMatchingMethod
|
47 |
+
*/
|
48 |
+
public function __construct(MWP_WordPress_Context $context, MWP_Extension_HitCounter $hitCounter, array $blacklistedIps = array(), array $userAgentList = array(), $userAgentMatchingMethod = self::METHOD_BLACKLIST)
|
49 |
+
{
|
50 |
+
$this->context = $context;
|
51 |
+
$this->hitCounter = $hitCounter;
|
52 |
+
$this->blacklistedIps = $blacklistedIps;
|
53 |
+
$this->userAgentList = $userAgentList;
|
54 |
+
$this->userAgentMatchingMethod = $userAgentMatchingMethod;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @return array
|
59 |
+
*/
|
60 |
+
public static function getSubscribedEvents()
|
61 |
+
{
|
62 |
+
return array(
|
63 |
+
MWP_Event_Events::PUBLIC_REQUEST => array('onPublicRequest', -300),
|
64 |
+
);
|
65 |
+
}
|
66 |
+
|
67 |
+
public function onPublicRequest(MWP_Event_PublicRequest $event)
|
68 |
+
{
|
69 |
+
$request = $event->getRequest();
|
70 |
+
|
71 |
+
if ($this->context->isInAdminPanel()) {
|
72 |
+
return;
|
73 |
+
}
|
74 |
+
|
75 |
+
if ($this->isBlacklisted($request)) {
|
76 |
+
return;
|
77 |
+
}
|
78 |
+
|
79 |
+
$this->hitCounter->increment();
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* @param MWP_Worker_Request $request
|
84 |
+
*
|
85 |
+
* @return bool
|
86 |
+
*/
|
87 |
+
protected function isBlacklisted(MWP_Worker_Request $request)
|
88 |
+
{
|
89 |
+
$userAgent = $request->getHeader('USER_AGENT');
|
90 |
+
$ip = $request->getHeader('REMOTE_ADDR');
|
91 |
+
|
92 |
+
foreach ($this->blacklistedIps as $ipRegex) {
|
93 |
+
if (preg_match($ipRegex, $ip)) {
|
94 |
+
return true;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
foreach ($this->userAgentList as $uaRegex) {
|
99 |
+
if (preg_match($uaRegex, $userAgent)) {
|
100 |
+
return !$this->userAgentMatchingMethod;
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
return $this->userAgentMatchingMethod;
|
105 |
+
}
|
106 |
+
}
|
src/MWP/EventListener/PublicRequest/SetPluginInfo.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_EventListener_PublicRequest_SetPluginInfo implements Symfony_EventDispatcher_EventSubscriberInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $brand;
|
17 |
+
|
18 |
+
private $slug = 'worker/init.php';
|
19 |
+
|
20 |
+
private $loaderName = '0-worker.php';
|
21 |
+
|
22 |
+
function __construct(MWP_WordPress_Context $context, MWP_Worker_Brand $brand)
|
23 |
+
{
|
24 |
+
$this->context = $context;
|
25 |
+
$this->brand = $brand;
|
26 |
+
}
|
27 |
+
|
28 |
+
public static function getSubscribedEvents()
|
29 |
+
{
|
30 |
+
return array(
|
31 |
+
MWP_Event_Events::PUBLIC_REQUEST => 'onPublicRequest',
|
32 |
+
);
|
33 |
+
}
|
34 |
+
|
35 |
+
public function onPublicRequest()
|
36 |
+
{
|
37 |
+
$this->context->addFilter('all_plugins', array($this, 'pluginInfoFilter'));
|
38 |
+
$this->context->addFilter('all_plugins', array($this, 'pluginListFilter'));
|
39 |
+
// This is a horrible hack, but it will allow us to hide a MU plugin in rebranded installations.
|
40 |
+
$this->context->addFilter('show_advanced_plugins', array($this, 'muPluginListFilter'), 10, 2);
|
41 |
+
$this->context->addFilter('plugin_row_meta', array($this, 'hidePluginDetails'), 10, 2);
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @wp_filter all_plugins
|
46 |
+
*/
|
47 |
+
public function pluginInfoFilter($plugins)
|
48 |
+
{
|
49 |
+
if (!isset($plugins[$this->slug])) {
|
50 |
+
return $plugins;
|
51 |
+
}
|
52 |
+
|
53 |
+
if (!$this->brand->isActive()) {
|
54 |
+
return $plugins;
|
55 |
+
}
|
56 |
+
|
57 |
+
if (!$this->brand->getName() && !$this->brand->getDescription() && !$this->brand->getAuthor() && !$this->brand->getAuthorUrl()) {
|
58 |
+
return $plugins;
|
59 |
+
}
|
60 |
+
|
61 |
+
$plugins[$this->slug]['Name'] = $this->brand->getName();
|
62 |
+
$plugins[$this->slug]['Title'] = $this->brand->getName();
|
63 |
+
$plugins[$this->slug]['Description'] = $this->brand->getDescription();
|
64 |
+
$plugins[$this->slug]['AuthorURI'] = $this->brand->getAuthorUrl();
|
65 |
+
$plugins[$this->slug]['Author'] = $this->brand->getAuthor();
|
66 |
+
$plugins[$this->slug]['AuthorName'] = $this->brand->getAuthor();
|
67 |
+
$plugins[$this->slug]['PluginURI'] = '';
|
68 |
+
|
69 |
+
return $plugins;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @wp_filter all_plugins
|
74 |
+
*/
|
75 |
+
public function pluginListFilter($plugins)
|
76 |
+
{
|
77 |
+
if (!isset($plugins[$this->slug])) {
|
78 |
+
return $plugins;
|
79 |
+
}
|
80 |
+
|
81 |
+
if (!$this->brand->isActive()) {
|
82 |
+
return $plugins;
|
83 |
+
}
|
84 |
+
|
85 |
+
if ($this->brand->isHide()) {
|
86 |
+
unset($plugins[$this->slug]);
|
87 |
+
}
|
88 |
+
|
89 |
+
return $plugins;
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @wp_filter show_advanced_plugins
|
94 |
+
*/
|
95 |
+
public function muPluginListFilter($previousValue, $type)
|
96 |
+
{
|
97 |
+
if (!$this->brand->isActive() || !$this->brand->isHide()) {
|
98 |
+
return $previousValue;
|
99 |
+
}
|
100 |
+
|
101 |
+
// Drop-in's are filtered after MU plugins.
|
102 |
+
if ($type !== 'dropins') {
|
103 |
+
return $previousValue;
|
104 |
+
}
|
105 |
+
|
106 |
+
if (!$this->context->hasContextValue('plugins')) {
|
107 |
+
return $previousValue;
|
108 |
+
}
|
109 |
+
|
110 |
+
$plugins = &$this->context->getContextValue('plugins');
|
111 |
+
|
112 |
+
if (!isset($plugins['mustuse'][$this->loaderName])) {
|
113 |
+
return $previousValue;
|
114 |
+
}
|
115 |
+
|
116 |
+
unset($plugins['mustuse'][$this->loaderName]);
|
117 |
+
|
118 |
+
return $previousValue;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* @wp_filter
|
123 |
+
*/
|
124 |
+
public function hidePluginDetails($meta, $slug)
|
125 |
+
{
|
126 |
+
if ($slug !== $this->slug) {
|
127 |
+
return $meta;
|
128 |
+
}
|
129 |
+
|
130 |
+
if (!$this->brand->getName() && !$this->brand->getDescription() && !$this->brand->getAuthor() && !$this->brand->getAuthorUrl()) {
|
131 |
+
return $meta;
|
132 |
+
}
|
133 |
+
|
134 |
+
foreach ($meta as $metaKey => $metaValue) {
|
135 |
+
if (strpos($metaValue, sprintf('>%s<', $this->context->translate('View details'))) === false) {
|
136 |
+
continue;
|
137 |
+
}
|
138 |
+
unset($meta[$metaKey]);
|
139 |
+
break;
|
140 |
+
}
|
141 |
+
|
142 |
+
return $meta;
|
143 |
+
}
|
144 |
+
}
|
src/MWP/Extension/HitCounter.php
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Extension_HitCounter
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @var int
|
18 |
+
*/
|
19 |
+
private $numberOfDays;
|
20 |
+
|
21 |
+
const OPTION_NAME = 'user_hit_count';
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @param MWP_WordPress_Context $context
|
25 |
+
* @param int $numberOfDays Number of days to keep the log.
|
26 |
+
*/
|
27 |
+
public function __construct(MWP_WordPress_Context $context, $numberOfDays = 1)
|
28 |
+
{
|
29 |
+
$this->context = $context;
|
30 |
+
$this->numberOfDays = $numberOfDays;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @param int $incrementBy
|
35 |
+
* @param DateTime $dateTime
|
36 |
+
*/
|
37 |
+
public function increment($incrementBy = 1, DateTime $dateTime = null)
|
38 |
+
{
|
39 |
+
if ($dateTime === null) {
|
40 |
+
$dateTime = new DateTime('now', new DateTimeZone('UTC'));
|
41 |
+
}
|
42 |
+
$date = $dateTime->format('Y-m-d');
|
43 |
+
|
44 |
+
$hitCount = $this->getHitCount();
|
45 |
+
|
46 |
+
if (!isset($hitCount[$date])) {
|
47 |
+
$hitCount[$date] = 0;
|
48 |
+
|
49 |
+
ksort($hitCount);
|
50 |
+
|
51 |
+
$logSince = clone $dateTime;
|
52 |
+
$logSince->modify(sprintf('-%d day', $this->numberOfDays));
|
53 |
+
$logSinceDate = $logSince->format('Y-m-d');
|
54 |
+
foreach ($hitCount as $hitDate => $hitTotal) {
|
55 |
+
// The old functionality had a bug where keys were invalid dates, hence the date length check.
|
56 |
+
if ($hitDate <= $logSinceDate || strlen($hitDate) !== 10) {
|
57 |
+
unset($hitCount[$hitDate]);
|
58 |
+
}
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
$hitCount[$date] += $incrementBy;
|
63 |
+
|
64 |
+
$this->context->optionSet(self::OPTION_NAME, $hitCount);
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* @return array
|
69 |
+
*/
|
70 |
+
public function getHitCount()
|
71 |
+
{
|
72 |
+
$hitCount = $this->context->optionGet(self::OPTION_NAME, array());
|
73 |
+
|
74 |
+
return $hitCount;
|
75 |
+
}
|
76 |
+
}
|
src/MWP/Http/JsonResponse.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Http_JsonResponse extends MWP_Http_Response
|
12 |
+
{
|
13 |
+
public function __construct($content, $headers = array())
|
14 |
+
{
|
15 |
+
$headers['content-type'] = 'application/json';
|
16 |
+
parent::__construct($content, $headers);
|
17 |
+
}
|
18 |
+
|
19 |
+
public function getContentAsString()
|
20 |
+
{
|
21 |
+
return "\n".json_encode($this->content);
|
22 |
+
}
|
23 |
+
}
|
src/MWP/Http/LegacyWorkerResponse.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @deprecated
|
13 |
+
*/
|
14 |
+
class MWP_Http_LegacyWorkerResponse extends MWP_Http_Response
|
15 |
+
{
|
16 |
+
public function getContentAsString()
|
17 |
+
{
|
18 |
+
return '<MWPHEADER>'.base64_encode(serialize($this->content)).'<ENDMWPHEADER>';
|
19 |
+
}
|
20 |
+
}
|
src/MWP/Http/RedirectResponse.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Http_RedirectResponse extends MWP_Http_Response
|
12 |
+
{
|
13 |
+
public function __construct($url, $code = 302, array $headers = array())
|
14 |
+
{
|
15 |
+
$headers['location'] = $url;
|
16 |
+
parent::__construct($url, $headers);
|
17 |
+
}
|
18 |
+
|
19 |
+
public function getContentAsString()
|
20 |
+
{
|
21 |
+
return sprintf('<!DOCTYPE html>
|
22 |
+
<html>
|
23 |
+
<head>
|
24 |
+
<meta charset="UTF-8" />
|
25 |
+
<meta http-equiv="refresh" content="1;url=%1$s" />
|
26 |
+
|
27 |
+
<title>Redirecting to %1$s</title>
|
28 |
+
</head>
|
29 |
+
<body>
|
30 |
+
Redirecting to <a href="%1$s">%1$s</a>.
|
31 |
+
</body>
|
32 |
+
</html>', htmlspecialchars($this->content, ENT_QUOTES, 'UTF-8'));
|
33 |
+
}
|
34 |
+
}
|
src/MWP/Http/Response.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Http_Response implements MWP_Http_ResponseInterface
|
12 |
+
{
|
13 |
+
|
14 |
+
protected $content;
|
15 |
+
|
16 |
+
protected $headers = array();
|
17 |
+
|
18 |
+
public function __construct($content, $headers = array())
|
19 |
+
{
|
20 |
+
$this->content = $content;
|
21 |
+
$this->headers = array_change_key_case($headers, CASE_LOWER);
|
22 |
+
}
|
23 |
+
|
24 |
+
public function getContentAsString()
|
25 |
+
{
|
26 |
+
return $this->content;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @param mixed $content
|
31 |
+
*
|
32 |
+
* @return mixed
|
33 |
+
*/
|
34 |
+
public function setContent($content)
|
35 |
+
{
|
36 |
+
$this->content = $content;
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @return mixed
|
41 |
+
*/
|
42 |
+
public function getContent()
|
43 |
+
{
|
44 |
+
return $this->content;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @return void
|
49 |
+
*/
|
50 |
+
public function send()
|
51 |
+
{
|
52 |
+
$this->sendHeaders();
|
53 |
+
print $this->getContentAsString();
|
54 |
+
}
|
55 |
+
|
56 |
+
protected function sendHeaders()
|
57 |
+
{
|
58 |
+
if (headers_sent()) {
|
59 |
+
return;
|
60 |
+
}
|
61 |
+
|
62 |
+
foreach ($this->headers as $headerName => $headerValue) {
|
63 |
+
header(sprintf('%s: %s', $headerName, $headerValue), true);
|
64 |
+
}
|
65 |
+
}
|
66 |
+
}
|
src/MWP/Http/ResponseInterface.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_Http_ResponseInterface
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @param mixed $content
|
15 |
+
*
|
16 |
+
* @return mixed
|
17 |
+
*/
|
18 |
+
public function setContent($content);
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @return mixed
|
22 |
+
*/
|
23 |
+
public function getContent();
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @return string
|
27 |
+
*/
|
28 |
+
public function getContentAsString();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @return void
|
32 |
+
*/
|
33 |
+
public function send();
|
34 |
+
}
|
src/MWP/Monolog/Handler/JsonMessageHandler.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Monolog_Handler_JsonMessageHandler extends Monolog_Handler_AbstractHandler
|
12 |
+
{
|
13 |
+
|
14 |
+
private $implicitFlushEnabled = false;
|
15 |
+
|
16 |
+
const PAD_CHARACTER = ' ';
|
17 |
+
|
18 |
+
private $padLength;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @param int $padLength
|
22 |
+
*/
|
23 |
+
public function setPadLength($padLength)
|
24 |
+
{
|
25 |
+
$this->padLength = $padLength;
|
26 |
+
}
|
27 |
+
|
28 |
+
public function handle(array $record)
|
29 |
+
{
|
30 |
+
if (!$this->implicitFlushEnabled) {
|
31 |
+
ob_implicit_flush(1);
|
32 |
+
$this->implicitFlushEnabled = true;
|
33 |
+
}
|
34 |
+
|
35 |
+
/** @var DateTime $date */
|
36 |
+
$date = $record['datetime'];
|
37 |
+
$message = array(
|
38 |
+
'level' => $record['level_name'],
|
39 |
+
'time' => $date->format('Y-m-d H:i:s'),
|
40 |
+
'message' => $record['message'],
|
41 |
+
'context' => $record['context'],
|
42 |
+
'extra' => $record['extra'],
|
43 |
+
);
|
44 |
+
|
45 |
+
@ob_start();
|
46 |
+
echo "\n", str_pad(json_encode($message), $this->padLength, self::PAD_CHARACTER), "\n";
|
47 |
+
@ob_end_flush();
|
48 |
+
}
|
49 |
+
}
|
src/MWP/Monolog/Processor/ExceptionProcessor.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Monolog_Processor_ExceptionProcessor implements Monolog_Processor_ProcessorInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Monolog_Processor_ExceptionProcessor implements Monolog_Processor_ProcessorInterface
|
12 |
{
|
src/MWP/Monolog/Processor/ProcessProcessor.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Monolog_Processor_ProcessProcessor implements Monolog_Processor_ProcessorInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Monolog_Processor_ProcessProcessor implements Monolog_Processor_ProcessorInterface
|
12 |
{
|
src/MWP/Monolog/Processor/TimeUsageProcessor.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Monolog_Processor_TimeUsageProcessor implements Monolog_Processor_ProcessorInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Monolog_Processor_TimeUsageProcessor implements Monolog_Processor_ProcessorInterface
|
12 |
{
|
src/MWP/Parser/DefinitionTokenizer.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
/**
|
4 |
* A simple parser able to extract 'define' calls with their first constant string, from a PHP source code.
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
/**
|
12 |
* A simple parser able to extract 'define' calls with their first constant string, from a PHP source code.
|
src/MWP/Progress/Abstract.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
abstract class MWP_Progress_Abstract implements MWP_Progress_CurlCallbackInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
abstract class MWP_Progress_Abstract implements MWP_Progress_CurlCallbackInterface
|
12 |
{
|
src/MWP/Progress/CurlCallbackInterface.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
interface MWP_Progress_CurlCallbackInterface
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
interface MWP_Progress_CurlCallbackInterface
|
12 |
{
|
src/MWP/Progress/Download.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Progress_Download extends MWP_Progress_Abstract
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Progress_Download extends MWP_Progress_Abstract
|
12 |
{
|
src/MWP/Progress/Upload.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
class MWP_Progress_Upload extends MWP_Progress_Abstract
|
4 |
{
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
class MWP_Progress_Upload extends MWP_Progress_Abstract
|
12 |
{
|
src/MWP/Security/Exception/NonceAlreadyUsed.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Security_Exception_NonceAlreadyUsed extends Exception
|
12 |
+
{
|
13 |
+
|
14 |
+
}
|
src/MWP/Security/Exception/NonceExpired.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Security_Exception_NonceExpired extends Exception
|
12 |
+
{
|
13 |
+
|
14 |
+
}
|
src/MWP/Security/Exception/NonceFormatInvalid.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Security_Exception_NonceFormatInvalid extends Exception
|
12 |
+
{
|
13 |
+
|
14 |
+
}
|
src/MWP/Security/HashNonce.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
/**
|
4 |
* Created by miljenko.rebernisak@prelovac.com
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
/**
|
12 |
* Created by miljenko.rebernisak@prelovac.com
|
src/MWP/Security/NonceInterface.php
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
/**
|
4 |
* Created by miljenko.rebernisak@prelovac.com
|
1 |
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
|
11 |
/**
|
12 |
* Created by miljenko.rebernisak@prelovac.com
|
src/MWP/Security/NonceManager.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Security_NonceManager
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $nonceValidFor;
|
17 |
+
|
18 |
+
private $nonceBlacklistedFor;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @param MWP_WordPress_Context $context
|
22 |
+
* @param int $nonceValidFor How long (in seconds) is the nonce valid since its issue time.
|
23 |
+
* @param int $nonceBlacklistedFor How long (in seconds) to keep used nonce in storage.
|
24 |
+
*/
|
25 |
+
public function __construct(MWP_WordPress_Context $context, $nonceValidFor = 43200, $nonceBlacklistedFor = 86400)
|
26 |
+
{
|
27 |
+
if ($nonceBlacklistedFor < $nonceValidFor) {
|
28 |
+
throw new LogicException('Nonce blacklist time must be higher than nonce lifetime.');
|
29 |
+
}
|
30 |
+
|
31 |
+
$this->context = $context;
|
32 |
+
$this->nonceValidFor = $nonceValidFor;
|
33 |
+
$this->nonceBlacklistedFor = $nonceBlacklistedFor;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @param string $nonce
|
38 |
+
*
|
39 |
+
* @throws MWP_Security_Exception_NonceFormatInvalid
|
40 |
+
* @throws MWP_Security_Exception_NonceExpired
|
41 |
+
* @throws MWP_Security_Exception_NonceAlreadyUsed
|
42 |
+
*/
|
43 |
+
public function useNonce($nonce)
|
44 |
+
{
|
45 |
+
$parts = explode('_', $nonce);
|
46 |
+
|
47 |
+
if (count($parts) !== 2) {
|
48 |
+
throw new MWP_Security_Exception_NonceFormatInvalid();
|
49 |
+
}
|
50 |
+
|
51 |
+
list($nonceValue, $issuedAt) = $parts;
|
52 |
+
$issuedAt = (int) $issuedAt;
|
53 |
+
|
54 |
+
if (!$nonceValue || !$issuedAt) {
|
55 |
+
throw new MWP_Security_Exception_NonceFormatInvalid();
|
56 |
+
}
|
57 |
+
|
58 |
+
if ($issuedAt + $this->nonceValidFor < time()) {
|
59 |
+
throw new MWP_Security_Exception_NonceExpired();
|
60 |
+
}
|
61 |
+
|
62 |
+
// There was a bug where the generated nonce was 42 characters long.
|
63 |
+
$transientKey = substr('n_'.$nonceValue, 0, 40);
|
64 |
+
$nonceUsed = $this->context->transientGet($transientKey);
|
65 |
+
|
66 |
+
if ($nonceUsed !== false) {
|
67 |
+
throw new MWP_Security_Exception_NonceAlreadyUsed();
|
68 |
+
}
|
69 |
+
|
70 |
+
$this->context->transientSet($transientKey, $issuedAt, $this->nonceBlacklistedFor);
|
71 |
+
}
|
72 |
+
}
|
src/MWP/ServiceContainer/Abstract.php
ADDED
@@ -0,0 +1,490 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
abstract class MWP_ServiceContainer_Abstract implements MWP_ServiceContainer_Interface
|
12 |
+
{
|
13 |
+
|
14 |
+
private $parameters;
|
15 |
+
|
16 |
+
private $wordPressContext;
|
17 |
+
|
18 |
+
private $eventDispatcher;
|
19 |
+
|
20 |
+
private $actionMapper;
|
21 |
+
|
22 |
+
private $requestStack;
|
23 |
+
|
24 |
+
private $userQuery;
|
25 |
+
|
26 |
+
private $postQuery;
|
27 |
+
|
28 |
+
private $commentQuery;
|
29 |
+
|
30 |
+
private $pluginProvider;
|
31 |
+
|
32 |
+
private $themeProvider;
|
33 |
+
|
34 |
+
private $workerBrand;
|
35 |
+
|
36 |
+
private $autoUpdateManager;
|
37 |
+
|
38 |
+
private $updateManager;
|
39 |
+
|
40 |
+
private $signer;
|
41 |
+
|
42 |
+
private $crypter;
|
43 |
+
|
44 |
+
private $nonceManager;
|
45 |
+
|
46 |
+
private $configuration;
|
47 |
+
|
48 |
+
private $logger;
|
49 |
+
|
50 |
+
private $responseCallback;
|
51 |
+
|
52 |
+
private $errorHandler;
|
53 |
+
|
54 |
+
private $executableFinder;
|
55 |
+
|
56 |
+
private $hitCounter;
|
57 |
+
|
58 |
+
private $jsonMessageHandler;
|
59 |
+
|
60 |
+
private $errorLogger;
|
61 |
+
|
62 |
+
public function __construct(array $parameters = array())
|
63 |
+
{
|
64 |
+
$this->parameters = $parameters;
|
65 |
+
|
66 |
+
$this->parameters += array(
|
67 |
+
// This plugin's main file absolute path.
|
68 |
+
'worker_realpath' => null,
|
69 |
+
// This plugin's "basename", ie. 'worker/init.php'.
|
70 |
+
'worker_basename' => null,
|
71 |
+
// Always use PhpSecLib, even if the PHP extension 'openssl' is loaded.
|
72 |
+
'prefer_phpseclib' => false,
|
73 |
+
// Log file to use for all worker logs.
|
74 |
+
'log_file' => null,
|
75 |
+
// GrayLog2 server to use for all worker logs.
|
76 |
+
'gelf_server' => null,
|
77 |
+
'gelf_port' => null,
|
78 |
+
// Capture errors in master response.
|
79 |
+
'log_errors' => false,
|
80 |
+
// Pad length used for progress message flushing.
|
81 |
+
'message_pad_length' => 16384,
|
82 |
+
// Minimum log level for streamed messages.
|
83 |
+
'message_minimum_level' => Monolog_Logger::INFO,
|
84 |
+
// Memory size (in kilobytes) to allocate for fatal error handling when the request is authenticated.
|
85 |
+
'fatal_error_reserved_memory_size' => 1024,
|
86 |
+
'hit_counter_blacklisted_ips' => array(
|
87 |
+
// Uptime monitoring robot.
|
88 |
+
'/^74\.86\.158\.106$/',
|
89 |
+
'/^74\.86\.158\.107$/',
|
90 |
+
'/^74\.86\.158\.109$/',
|
91 |
+
'/^74\.86\.158\.110$/',
|
92 |
+
'/^74\.86\.158\.108$/',
|
93 |
+
'/^46\.137\.190\.132$/',
|
94 |
+
'/^122\.248\.234\.23$/',
|
95 |
+
'/^188\.226\.183\.141$/',
|
96 |
+
'/^178\.62\.52\.237$/',
|
97 |
+
'/^54\.79\.28\.129$/',
|
98 |
+
'/^54\.94\.142\.218$/',
|
99 |
+
),
|
100 |
+
'hit_counter_blacklisted_user_agents' => array(
|
101 |
+
'/bot/',
|
102 |
+
'/crawl/',
|
103 |
+
'/feed/',
|
104 |
+
'/java\//',
|
105 |
+
'/spider/',
|
106 |
+
'/curl/',
|
107 |
+
'/libwww/',
|
108 |
+
'/alexa/',
|
109 |
+
'/altavista/',
|
110 |
+
'/aolserver/',
|
111 |
+
'/appie/',
|
112 |
+
'/Ask Jeeves/',
|
113 |
+
'/baidu/',
|
114 |
+
'/Bing/',
|
115 |
+
'/borg/',
|
116 |
+
'/BrowserMob/',
|
117 |
+
'/ccooter/',
|
118 |
+
'/dataparksearch/',
|
119 |
+
'/Download Demon/',
|
120 |
+
'/echoping/',
|
121 |
+
'/FAST/',
|
122 |
+
'/findlinks/',
|
123 |
+
'/Firefly/',
|
124 |
+
'/froogle/',
|
125 |
+
'/GomezA/',
|
126 |
+
'/Google/',
|
127 |
+
'/grub-client/',
|
128 |
+
'/htdig/',
|
129 |
+
'/http%20client/',
|
130 |
+
'/HttpMonitor/',
|
131 |
+
'/ia_archiver/',
|
132 |
+
'/InfoSeek/',
|
133 |
+
'/inktomi/',
|
134 |
+
'/larbin/',
|
135 |
+
'/looksmart/',
|
136 |
+
'/Microsoft URL Control/',
|
137 |
+
'/Minimo/',
|
138 |
+
'/mogimogi/',
|
139 |
+
'/NationalDirectory/',
|
140 |
+
'/netcraftsurvey/',
|
141 |
+
'/nuhk/',
|
142 |
+
'/oegp/',
|
143 |
+
'/panopta/',
|
144 |
+
'/rabaz/',
|
145 |
+
'/Read%20Later/',
|
146 |
+
'/Scooter/',
|
147 |
+
'/scrubby/',
|
148 |
+
'/SearchExpress/',
|
149 |
+
'/searchsight/',
|
150 |
+
'/semanticdiscovery/',
|
151 |
+
'/Slurp/',
|
152 |
+
'/snappy/',
|
153 |
+
'/Spade/',
|
154 |
+
'/TechnoratiSnoop/',
|
155 |
+
'/TECNOSEEK/',
|
156 |
+
'/teoma/',
|
157 |
+
'/twiceler/',
|
158 |
+
'/URL2PNG/',
|
159 |
+
'/vortex/',
|
160 |
+
'/WebBug/',
|
161 |
+
'/www\.galaxy\.com/',
|
162 |
+
'/yahoo/',
|
163 |
+
'/yandex/',
|
164 |
+
'/zao/',
|
165 |
+
'/zeal/',
|
166 |
+
'/ZooShot/',
|
167 |
+
'/ZyBorg/',
|
168 |
+
),
|
169 |
+
);
|
170 |
+
}
|
171 |
+
|
172 |
+
public function getParameter($name)
|
173 |
+
{
|
174 |
+
if (!array_key_exists($name, $this->parameters)) {
|
175 |
+
throw new InvalidArgumentException(sprintf('The parameter named "%s" does not exist.', $name));
|
176 |
+
}
|
177 |
+
|
178 |
+
return $this->parameters[$name];
|
179 |
+
}
|
180 |
+
|
181 |
+
public function getWordPressContext()
|
182 |
+
{
|
183 |
+
if ($this->wordPressContext === null) {
|
184 |
+
$this->wordPressContext = $this->createWordPressContext();
|
185 |
+
}
|
186 |
+
|
187 |
+
return $this->wordPressContext;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* @return MWP_WordPress_Context
|
192 |
+
*/
|
193 |
+
protected abstract function createWordPressContext();
|
194 |
+
|
195 |
+
public function getEventDispatcher()
|
196 |
+
{
|
197 |
+
if ($this->eventDispatcher === null) {
|
198 |
+
$this->eventDispatcher = $this->createEventDispatcher();
|
199 |
+
}
|
200 |
+
|
201 |
+
return $this->eventDispatcher;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* @return Symfony_EventDispatcher_EventDispatcherInterface
|
206 |
+
*/
|
207 |
+
protected abstract function createEventDispatcher();
|
208 |
+
|
209 |
+
public function getRequestStack()
|
210 |
+
{
|
211 |
+
if ($this->requestStack === null) {
|
212 |
+
$this->requestStack = $this->createRequestStack();
|
213 |
+
}
|
214 |
+
|
215 |
+
return $this->requestStack;
|
216 |
+
}
|
217 |
+
|
218 |
+
protected abstract function createRequestStack();
|
219 |
+
|
220 |
+
public function getActionRegistry()
|
221 |
+
{
|
222 |
+
if ($this->actionMapper === null) {
|
223 |
+
$this->actionMapper = $this->createActionRegistry();
|
224 |
+
}
|
225 |
+
|
226 |
+
return $this->actionMapper;
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* @return MWP_Action_Registry
|
231 |
+
*/
|
232 |
+
protected abstract function createActionRegistry();
|
233 |
+
|
234 |
+
public function getUserQuery()
|
235 |
+
{
|
236 |
+
if ($this->userQuery === null) {
|
237 |
+
$this->userQuery = $this->createUserQuery();
|
238 |
+
}
|
239 |
+
|
240 |
+
return $this->userQuery;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* @return MWP_WordPress_Query_User
|
245 |
+
*/
|
246 |
+
protected abstract function createUserQuery();
|
247 |
+
|
248 |
+
public function getPostQuery()
|
249 |
+
{
|
250 |
+
if ($this->postQuery === null) {
|
251 |
+
$this->postQuery = $this->createPostQuery();
|
252 |
+
}
|
253 |
+
|
254 |
+
return $this->postQuery;
|
255 |
+
}
|
256 |
+
|
257 |
+
protected abstract function createPostQuery();
|
258 |
+
|
259 |
+
public function getCommentQuery()
|
260 |
+
{
|
261 |
+
if ($this->commentQuery === null) {
|
262 |
+
$this->commentQuery = $this->createCommentQuery();
|
263 |
+
}
|
264 |
+
|
265 |
+
return $this->commentQuery;
|
266 |
+
}
|
267 |
+
|
268 |
+
protected abstract function createCommentQuery();
|
269 |
+
|
270 |
+
/**
|
271 |
+
* @return MWP_WordPress_Provider_Plugin
|
272 |
+
*/
|
273 |
+
public function getPluginProvider()
|
274 |
+
{
|
275 |
+
if ($this->pluginProvider === null) {
|
276 |
+
$this->pluginProvider = $this->createPluginProvider();
|
277 |
+
}
|
278 |
+
|
279 |
+
return $this->pluginProvider;
|
280 |
+
}
|
281 |
+
|
282 |
+
protected abstract function createPluginProvider();
|
283 |
+
|
284 |
+
/**
|
285 |
+
* @return MWP_WordPress_Provider_Theme
|
286 |
+
*/
|
287 |
+
public function getThemeProvider()
|
288 |
+
{
|
289 |
+
if ($this->themeProvider === null) {
|
290 |
+
$this->themeProvider = $this->createThemeProvider();
|
291 |
+
}
|
292 |
+
|
293 |
+
return $this->themeProvider;
|
294 |
+
}
|
295 |
+
|
296 |
+
protected abstract function createThemeProvider();
|
297 |
+
|
298 |
+
/**
|
299 |
+
* @return MWP_Worker_Brand
|
300 |
+
*/
|
301 |
+
public function getBrand()
|
302 |
+
{
|
303 |
+
if ($this->workerBrand === null) {
|
304 |
+
$this->workerBrand = $this->createWorkerBrand();
|
305 |
+
}
|
306 |
+
|
307 |
+
return $this->workerBrand;
|
308 |
+
}
|
309 |
+
|
310 |
+
protected abstract function createWorkerBrand();
|
311 |
+
|
312 |
+
public function getAutoUpdateManager()
|
313 |
+
{
|
314 |
+
if ($this->autoUpdateManager === null) {
|
315 |
+
$this->autoUpdateManager = $this->createAutoUpdateManager();
|
316 |
+
}
|
317 |
+
|
318 |
+
return $this->autoUpdateManager;
|
319 |
+
}
|
320 |
+
|
321 |
+
protected abstract function createAutoUpdateManager();
|
322 |
+
|
323 |
+
public function getUpdateManager()
|
324 |
+
{
|
325 |
+
if ($this->updateManager === null) {
|
326 |
+
$this->updateManager = $this->createUpdateManager();
|
327 |
+
}
|
328 |
+
|
329 |
+
return $this->updateManager;
|
330 |
+
}
|
331 |
+
|
332 |
+
/**
|
333 |
+
* @return MWP_Updater_UpdateManager
|
334 |
+
*/
|
335 |
+
protected abstract function createUpdateManager();
|
336 |
+
|
337 |
+
public function getSigner()
|
338 |
+
{
|
339 |
+
if ($this->signer === null) {
|
340 |
+
$this->signer = $this->createSigner();
|
341 |
+
}
|
342 |
+
|
343 |
+
return $this->signer;
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* @return MWP_Signer_Interface
|
348 |
+
*/
|
349 |
+
protected abstract function createSigner();
|
350 |
+
|
351 |
+
public function getCrypter()
|
352 |
+
{
|
353 |
+
if ($this->crypter === null) {
|
354 |
+
$this->crypter = $this->createCrypter();
|
355 |
+
}
|
356 |
+
|
357 |
+
return $this->crypter;
|
358 |
+
}
|
359 |
+
|
360 |
+
/**
|
361 |
+
* @return MWP_Crypter_Interface
|
362 |
+
*/
|
363 |
+
protected abstract function createCrypter();
|
364 |
+
|
365 |
+
public function getNonceManager()
|
366 |
+
{
|
367 |
+
if ($this->nonceManager === null) {
|
368 |
+
$this->nonceManager = $this->createNonceManager();
|
369 |
+
}
|
370 |
+
|
371 |
+
return $this->nonceManager;
|
372 |
+
}
|
373 |
+
|
374 |
+
/**
|
375 |
+
* @return MWP_Security_NonceManager
|
376 |
+
*/
|
377 |
+
protected abstract function createNonceManager();
|
378 |
+
|
379 |
+
public function getConfiguration()
|
380 |
+
{
|
381 |
+
if ($this->configuration === null) {
|
382 |
+
$this->configuration = $this->createConfiguration();
|
383 |
+
}
|
384 |
+
|
385 |
+
return $this->configuration;
|
386 |
+
}
|
387 |
+
|
388 |
+
/**
|
389 |
+
* @return MWP_Worker_Configuration
|
390 |
+
*/
|
391 |
+
protected abstract function createConfiguration();
|
392 |
+
|
393 |
+
public function getLogger()
|
394 |
+
{
|
395 |
+
if ($this->logger === null) {
|
396 |
+
$this->logger = $this->createLogger();
|
397 |
+
}
|
398 |
+
|
399 |
+
return $this->logger;
|
400 |
+
}
|
401 |
+
|
402 |
+
/**
|
403 |
+
* @return Monolog_Logger
|
404 |
+
*/
|
405 |
+
protected abstract function createLogger();
|
406 |
+
|
407 |
+
/**
|
408 |
+
* @return MWP_Worker_ResponseCallback
|
409 |
+
*/
|
410 |
+
public function getResponseCallback()
|
411 |
+
{
|
412 |
+
if ($this->responseCallback === null) {
|
413 |
+
$this->responseCallback = $this->createResponseCallback();
|
414 |
+
}
|
415 |
+
|
416 |
+
return $this->responseCallback;
|
417 |
+
}
|
418 |
+
|
419 |
+
protected abstract function createResponseCallback();
|
420 |
+
|
421 |
+
public function getErrorHandler()
|
422 |
+
{
|
423 |
+
if ($this->errorHandler === null) {
|
424 |
+
$this->errorHandler = $this->createErrorHandler();
|
425 |
+
}
|
426 |
+
|
427 |
+
return $this->errorHandler;
|
428 |
+
}
|
429 |
+
|
430 |
+
/**
|
431 |
+
* @return Monolog_ErrorHandler
|
432 |
+
*/
|
433 |
+
protected abstract function createErrorHandler();
|
434 |
+
|
435 |
+
public function getExecutableFinder()
|
436 |
+
{
|
437 |
+
if ($this->executableFinder === null) {
|
438 |
+
$this->executableFinder = $this->createExecutableFinder();
|
439 |
+
}
|
440 |
+
|
441 |
+
return $this->executableFinder;
|
442 |
+
}
|
443 |
+
|
444 |
+
/**
|
445 |
+
* @return Symfony_Process_ExecutableFinder
|
446 |
+
*/
|
447 |
+
protected abstract function createExecutableFinder();
|
448 |
+
|
449 |
+
public function getHitCounter()
|
450 |
+
{
|
451 |
+
if ($this->hitCounter === null) {
|
452 |
+
$this->hitCounter = $this->createHitCounter();
|
453 |
+
}
|
454 |
+
|
455 |
+
return $this->hitCounter;
|
456 |
+
}
|
457 |
+
|
458 |
+
/**
|
459 |
+
* @return MWP_Extension_HitCounter
|
460 |
+
*/
|
461 |
+
protected abstract function createHitCounter();
|
462 |
+
|
463 |
+
public function getJsonMessageHandler()
|
464 |
+
{
|
465 |
+
if ($this->jsonMessageHandler === null) {
|
466 |
+
$this->jsonMessageHandler = $this->createJsonMessageHandler();
|
467 |
+
}
|
468 |
+
|
469 |
+
return $this->jsonMessageHandler;
|
470 |
+
}
|
471 |
+
|
472 |
+
/**
|
473 |
+
* @return MWP_Monolog_Handler_JsonMessageHandler
|
474 |
+
*/
|
475 |
+
protected abstract function createJsonMessageHandler();
|
476 |
+
|
477 |
+
public function getErrorLogger()
|
478 |
+
{
|
479 |
+
if ($this->errorLogger === null) {
|
480 |
+
$this->errorLogger = $this->createErrorLogger();
|
481 |
+
}
|
482 |
+
|
483 |
+
return $this->errorLogger;
|
484 |
+
}
|
485 |
+
|
486 |
+
/**
|
487 |
+
* @return Monolog_Logger
|
488 |
+
*/
|
489 |
+
protected abstract function createErrorLogger();
|
490 |
+
}
|
src/MWP/ServiceContainer/ContainerAwareInterface.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_ServiceContainer_ContainerAwareInterface
|
12 |
+
{
|
13 |
+
public function setContainer(MWP_ServiceContainer_Interface $container);
|
14 |
+
}
|
src/MWP/ServiceContainer/Interface.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_ServiceContainer_Interface
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @param array $parameters
|
15 |
+
*/
|
16 |
+
public function __construct(array $parameters = array());
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @param string $name
|
20 |
+
*
|
21 |
+
* @return mixed
|
22 |
+
*
|
23 |
+
* @throws InvalidArgumentException If the parameter does not exist.
|
24 |
+
*/
|
25 |
+
public function getParameter($name);
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @return MWP_WordPress_Context
|
29 |
+
*/
|
30 |
+
public function getWordPressContext();
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @return Symfony_EventDispatcher_EventDispatcherInterface
|
34 |
+
*/
|
35 |
+
public function getEventDispatcher();
|
36 |
+
|
37 |
+
/**
|
38 |
+
* @return MWP_Worker_RequestStack
|
39 |
+
*/
|
40 |
+
public function getRequestStack();
|
41 |
+
|
42 |
+
/**
|
43 |
+
* @return MWP_Action_Registry
|
44 |
+
*/
|
45 |
+
public function getActionRegistry();
|
46 |
+
|
47 |
+
/**
|
48 |
+
* @return MWP_WordPress_Query_User
|
49 |
+
*/
|
50 |
+
public function getUserQuery();
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @return MWP_WordPress_Query_Post
|
54 |
+
*/
|
55 |
+
public function getPostQuery();
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @return MWP_WordPress_Query_Comment
|
59 |
+
*/
|
60 |
+
public function getCommentQuery();
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @return MWP_WordPress_Provider_Plugin
|
64 |
+
*/
|
65 |
+
public function getPluginProvider();
|
66 |
+
|
67 |
+
/**
|
68 |
+
* @return MWP_WordPress_Provider_Theme
|
69 |
+
*/
|
70 |
+
public function getThemeProvider();
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @return MWP_Worker_Brand
|
74 |
+
*/
|
75 |
+
public function getBrand();
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @return MWP_Updater_AutoUpdateManager
|
79 |
+
*/
|
80 |
+
public function getAutoUpdateManager();
|
81 |
+
|
82 |
+
/**
|
83 |
+
* @return MWP_Updater_UpdateManager
|
84 |
+
*/
|
85 |
+
public function getUpdateManager();
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @return MWP_Signer_Interface
|
89 |
+
*/
|
90 |
+
public function getSigner();
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @return MWP_Crypter_Interface
|
94 |
+
*/
|
95 |
+
public function getCrypter();
|
96 |
+
|
97 |
+
/**
|
98 |
+
* @return MWP_Security_NonceManager
|
99 |
+
*/
|
100 |
+
public function getNonceManager();
|
101 |
+
|
102 |
+
/**
|
103 |
+
* @return MWP_Worker_Configuration
|
104 |
+
*/
|
105 |
+
public function getConfiguration();
|
106 |
+
|
107 |
+
/**
|
108 |
+
* @return Monolog_Logger
|
109 |
+
*/
|
110 |
+
public function getLogger();
|
111 |
+
|
112 |
+
/**
|
113 |
+
* @return MWP_Worker_ResponseCallback
|
114 |
+
*/
|
115 |
+
public function getResponseCallback();
|
116 |
+
|
117 |
+
/**
|
118 |
+
* @return Monolog_ErrorHandler
|
119 |
+
*/
|
120 |
+
public function getErrorHandler();
|
121 |
+
|
122 |
+
/**
|
123 |
+
* @return Symfony_Process_ExecutableFinder
|
124 |
+
*/
|
125 |
+
public function getExecutableFinder();
|
126 |
+
|
127 |
+
/**
|
128 |
+
* @return MWP_Extension_HitCounter
|
129 |
+
*/
|
130 |
+
public function getHitCounter();
|
131 |
+
|
132 |
+
/**
|
133 |
+
* @return MWP_Monolog_Handler_JsonMessageHandler
|
134 |
+
*/
|
135 |
+
public function getJsonMessageHandler();
|
136 |
+
|
137 |
+
/**
|
138 |
+
* @return Monolog_Logger
|
139 |
+
*/
|
140 |
+
public function getErrorLogger();
|
141 |
+
}
|
src/MWP/ServiceContainer/Production.php
ADDED
@@ -0,0 +1,293 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_ServiceContainer_Production extends MWP_ServiceContainer_Abstract
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @return MWP_WordPress_Context
|
15 |
+
*/
|
16 |
+
protected function createWordPressContext()
|
17 |
+
{
|
18 |
+
return new MWP_WordPress_Context();
|
19 |
+
}
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @return Symfony_EventDispatcher_EventDispatcherInterface
|
23 |
+
*/
|
24 |
+
protected function createEventDispatcher()
|
25 |
+
{
|
26 |
+
$dispatcher = new Symfony_EventDispatcher_EventDispatcher();
|
27 |
+
|
28 |
+
$dispatcher->addSubscriber(new MWP_EventListener_PublicRequest_BrandContactSupport($this->getWordPressContext(), $this->getBrand()));
|
29 |
+
$dispatcher->addSubscriber(new MWP_EventListener_PublicRequest_DisableEditor($this->getWordPressContext(), $this->getBrand()));
|
30 |
+
$dispatcher->addSubscriber(new MWP_EventListener_PublicRequest_SetPluginInfo($this->getWordPressContext(), $this->getBrand()));
|
31 |
+
$dispatcher->addSubscriber(new MWP_EventListener_PublicRequest_SetHitCounter($this->getWordPressContext(), $this->getHitCounter(), $this->getParameter('hit_counter_blacklisted_ips'), $this->getParameter('hit_counter_blacklisted_user_agents')));
|
32 |
+
$dispatcher->addSubscriber(new MWP_EventListener_PublicRequest_AutomaticLogin($this->getWordPressContext(), $this->getNonceManager(), $this->getSigner(), $this->getConfiguration()));
|
33 |
+
|
34 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_VerifyConnectionInfo($this->getWordPressContext(), $this->getSigner()));
|
35 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_VerifyNonce($this->getNonceManager()));
|
36 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_SetCurrentUser($this->getWordPressContext()));
|
37 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_AuthenticateRequest($this->getConfiguration(), $this->getSigner()));
|
38 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_SetErrorHandler($this->getErrorLogger(), $this->getErrorHandler(), $this->getRequestStack(), $this->getResponseCallback(), $this, $this->getParameter('log_errors'), $this->getParameter('fatal_error_reserved_memory_size')));
|
39 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_AttachJsonMessageHandler($this->getLogger(), $this->getJsonMessageHandler()));
|
40 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_RemoveUsernameParam());
|
41 |
+
$dispatcher->addSubscriber(new MWP_EventListener_MasterRequest_AuthenticateLegacyRequest($this->getConfiguration()));
|
42 |
+
|
43 |
+
$dispatcher->addSubscriber(new MWP_EventListener_ActionRequest_SetSettings($this->getWordPressContext()));
|
44 |
+
|
45 |
+
$dispatcher->addSubscriber(new MWP_EventListener_ActionException_SetExceptionData());
|
46 |
+
|
47 |
+
$dispatcher->addSubscriber(new MWP_EventListener_ActionResponse_SetActionData());
|
48 |
+
$dispatcher->addSubscriber(new MWP_EventListener_ActionResponse_SetLegacyWebsiteConnectionData($this->getWordPressContext()));
|
49 |
+
$dispatcher->addSubscriber(new MWP_EventListener_ActionResponse_ChainState($this));
|
50 |
+
$dispatcher->addSubscriber(new MWP_EventListener_ActionResponse_SetLegacyPhpExecutionData());
|
51 |
+
|
52 |
+
$dispatcher->addSubscriber(new MWP_EventListener_EncodeMasterResponse());
|
53 |
+
|
54 |
+
return $dispatcher;
|
55 |
+
}
|
56 |
+
|
57 |
+
protected function createRequestStack()
|
58 |
+
{
|
59 |
+
return new MWP_Worker_RequestStack();
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* @return MWP_Action_Registry
|
64 |
+
*/
|
65 |
+
protected function createActionRegistry()
|
66 |
+
{
|
67 |
+
$mapper = new MWP_Action_Registry();
|
68 |
+
|
69 |
+
$mapper->addDefinition('do_upgrade', new MWP_Action_Definition('mmb_do_upgrade', array('hook_name' => 'setup_theme')));
|
70 |
+
$mapper->addDefinition('get_stats', new MWP_Action_Definition('mmb_stats_get', array('hook_name' => 'setup_theme')));
|
71 |
+
$mapper->addDefinition('remove_site', new MWP_Action_Definition('mmb_remove_site'));
|
72 |
+
$mapper->addDefinition('backup_clone', new MWP_Action_Definition('mmb_backup_now'));
|
73 |
+
$mapper->addDefinition('restore', new MWP_Action_Definition('mmb_restore_now'));
|
74 |
+
$mapper->addDefinition('create_post', new MWP_Action_Definition('mmb_post_create', array('hook_name' => 'setup_theme')));
|
75 |
+
$mapper->addDefinition('update_worker', new MWP_Action_Definition('mmb_update_worker_plugin'));
|
76 |
+
$mapper->addDefinition('change_post_status', new MWP_Action_Definition('mmb_change_post_status', array('hook_name' => 'setup_theme')));
|
77 |
+
$mapper->addDefinition('install_addon', new MWP_Action_Definition('mmb_install_addon', array('hook_name' => 'setup_theme')));
|
78 |
+
$mapper->addDefinition('get_comments', new MWP_Action_Definition('mmb_get_comments', array('hook_name' => 'setup_theme')));
|
79 |
+
$mapper->addDefinition('bulk_action_comments', new MWP_Action_Definition('mmb_bulk_action_comments', array('hook_name' => 'setup_theme')));
|
80 |
+
$mapper->addDefinition('replyto_comment', new MWP_Action_Definition('mmb_reply_comment', array('hook_name' => 'setup_theme')));
|
81 |
+
$mapper->addDefinition('add_user', new MWP_Action_Definition('mmb_add_user', array('hook_name' => 'setup_theme')));
|
82 |
+
$mapper->addDefinition('scheduled_backup', new MWP_Action_Definition('mmb_scheduled_backup'));
|
83 |
+
$mapper->addDefinition('run_task', new MWP_Action_Definition('mmb_run_task_now'));
|
84 |
+
$mapper->addDefinition('execute_php_code', new MWP_Action_Definition('mmb_execute_php_code'));
|
85 |
+
$mapper->addDefinition('delete_backup', new MWP_Action_Definition('mmm_delete_backup'));
|
86 |
+
$mapper->addDefinition('remote_backup_now', new MWP_Action_Definition('mmb_remote_backup_now'));
|
87 |
+
$mapper->addDefinition('get_users', new MWP_Action_Definition('mmb_get_users', array('hook_name' => 'setup_theme')));
|
88 |
+
$mapper->addDefinition('edit_users', new MWP_Action_Definition('mmb_edit_users', array('hook_name' => 'setup_theme')));
|
89 |
+
$mapper->addDefinition('get_posts', new MWP_Action_Definition('mmb_get_posts', array('hook_name' => 'setup_theme')));
|
90 |
+
$mapper->addDefinition('delete_post', new MWP_Action_Definition('mmb_delete_post', array('hook_name' => 'setup_theme')));
|
91 |
+
$mapper->addDefinition('delete_posts', new MWP_Action_Definition('mmb_delete_posts', array('hook_name' => 'setup_theme')));
|
92 |
+
$mapper->addDefinition('get_pages', new MWP_Action_Definition('mmb_get_pages', array('hook_name' => 'setup_theme')));
|
93 |
+
$mapper->addDefinition('delete_page', new MWP_Action_Definition('mmb_delete_page', array('hook_name' => 'setup_theme')));
|
94 |
+
$mapper->addDefinition('get_plugins_themes', new MWP_Action_Definition('mmb_get_plugins_themes', array('hook_name' => 'setup_theme')));
|
95 |
+
$mapper->addDefinition('edit_plugins_themes', new MWP_Action_Definition('mmb_edit_plugins_themes', array('hook_name' => 'setup_theme')));
|
96 |
+
$mapper->addDefinition('worker_brand', new MWP_Action_Definition('mmb_worker_brand'));
|
97 |
+
$mapper->addDefinition('maintenance', new MWP_Action_Definition('mmb_maintenance_mode'));
|
98 |
+
$mapper->addDefinition('get_autoupdate_plugins_themes', new MWP_Action_Definition('mmb_get_autoupdate_plugins_themes'));
|
99 |
+
$mapper->addDefinition('edit_autoupdate_plugins_themes', new MWP_Action_Definition('mmb_edit_autoupdate_plugins_themes'));
|
100 |
+
$mapper->addDefinition('ping_backup', new MWP_Action_Definition('mwp_ping_backup'));
|
101 |
+
$mapper->addDefinition('cleanup_delete', new MWP_Action_Definition('cleanup_delete_worker'));
|
102 |
+
$mapper->addDefinition('backup_req', new MWP_Action_Definition('mmb_get_backup_req'));
|
103 |
+
$mapper->addDefinition('change_comment_status', new MWP_Action_Definition('mmb_change_comment_status', array('hook_name' => null)));
|
104 |
+
$mapper->addDefinition('get_state', new MWP_Action_Definition(array('MWP_Action_GetState', 'execute')));
|
105 |
+
$mapper->addDefinition('add_site', new MWP_Action_Definition(array('MWP_Action_ConnectWebsite', 'execute')));
|
106 |
+
|
107 |
+
return $mapper;
|
108 |
+
}
|
109 |
+
|
110 |
+
protected function createUserQuery()
|
111 |
+
{
|
112 |
+
return new MWP_WordPress_Query_User($this->getWordPressContext());
|
113 |
+
}
|
114 |
+
|
115 |
+
protected function createPostQuery()
|
116 |
+
{
|
117 |
+
return new MWP_WordPress_Query_Post($this->getWordPressContext());
|
118 |
+
}
|
119 |
+
|
120 |
+
protected function createCommentQuery()
|
121 |
+
{
|
122 |
+
return new MWP_WordPress_Query_Comment($this->getWordPressContext());
|
123 |
+
}
|
124 |
+
|
125 |
+
protected function createPluginProvider()
|
126 |
+
{
|
127 |
+
return new MWP_WordPress_Provider_Plugin($this->getWordPressContext());
|
128 |
+
}
|
129 |
+
|
130 |
+
protected function createThemeProvider()
|
131 |
+
{
|
132 |
+
return new MWP_WordPress_Provider_Theme($this->getWordPressContext());
|
133 |
+
}
|
134 |
+
|
135 |
+
protected function createWorkerBrand()
|
136 |
+
{
|
137 |
+
return new MWP_Worker_Brand($this->getWordPressContext());
|
138 |
+
}
|
139 |
+
|
140 |
+
protected function createAutoUpdateManager()
|
141 |
+
{
|
142 |
+
return new MWP_Updater_AutoUpdateManager($this->getWordPressContext());
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* @return MWP_Updater_UpdateManager
|
147 |
+
*/
|
148 |
+
protected function createUpdateManager()
|
149 |
+
{
|
150 |
+
return new MWP_Updater_UpdateManager($this->getWordPressContext());
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* @return MWP_Signer_Interface
|
155 |
+
*/
|
156 |
+
public function createSigner()
|
157 |
+
{
|
158 |
+
if ($this->getParameter('prefer_phpseclib')) {
|
159 |
+
return MWP_Signer_Factory::createPhpSecLibSigner();
|
160 |
+
}
|
161 |
+
|
162 |
+
return MWP_Signer_Factory::createSigner();
|
163 |
+
}
|
164 |
+
|
165 |
+
/**
|
166 |
+
* @return MWP_Crypter_Interface
|
167 |
+
*/
|
168 |
+
public function createCrypter()
|
169 |
+
{
|
170 |
+
if ($this->getParameter('prefer_phpseclib')) {
|
171 |
+
return MWP_Crypter_Factory::createPhpSecLibCrypter();
|
172 |
+
}
|
173 |
+
|
174 |
+
return MWP_Crypter_Factory::createCrypter();
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* @return MWP_Security_NonceManager
|
179 |
+
*/
|
180 |
+
protected function createNonceManager()
|
181 |
+
{
|
182 |
+
return new MWP_Security_NonceManager($this->getWordPressContext());
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* @return MWP_Worker_Configuration
|
187 |
+
*/
|
188 |
+
protected function createConfiguration()
|
189 |
+
{
|
190 |
+
return new MWP_Worker_Configuration($this->getWordPressContext());
|
191 |
+
}
|
192 |
+
|
193 |
+
protected function createLogger()
|
194 |
+
{
|
195 |
+
$handlers = array();
|
196 |
+
|
197 |
+
if ($this->getParameter('log_file')) {
|
198 |
+
$fileHandler = new Monolog_Handler_StreamHandler(fopen(dirname(__FILE__).'/../../../'.$this->getParameter('log_file'), 'a'));
|
199 |
+
$fileHandler->setFormatter(new Monolog_Formatter_HtmlFormatter());
|
200 |
+
$handlers[] = $fileHandler;
|
201 |
+
}
|
202 |
+
|
203 |
+
if ($this->getParameter('gelf_server')) {
|
204 |
+
$publisher = new Gelf_Publisher($this->getParameter('gelf_server'), $this->getParameter('gelf_port') ? $this->getParameter('gelf_port') : Gelf_Publisher::GRAYLOG2_DEFAULT_PORT);
|
205 |
+
$handlers[] = new Monolog_Handler_LegacyGelfHandler($publisher);
|
206 |
+
}
|
207 |
+
|
208 |
+
$processors = array();
|
209 |
+
if (count($handlers) > 0) {
|
210 |
+
// We do have some loggers set up.
|
211 |
+
$processors += array(
|
212 |
+
array(new Monolog_Processor_MemoryUsageProcessor(), 'callback'),
|
213 |
+
array(new Monolog_Processor_MemoryPeakUsageProcessor(), 'callback'),
|
214 |
+
array(new Monolog_Processor_IntrospectionProcessor(), 'callback'),
|
215 |
+
array(new Monolog_Processor_PsrLogMessageProcessor(), 'callback'),
|
216 |
+
array(new Monolog_Processor_UidProcessor(), 'callback'),
|
217 |
+
array(new Monolog_Processor_WebProcessor(), 'callback'),
|
218 |
+
array(new MWP_Monolog_Processor_TimeUsageProcessor(), 'callback'),
|
219 |
+
array(new MWP_Monolog_Processor_ExceptionProcessor(), 'callback'),
|
220 |
+
array(new MWP_Monolog_Processor_ProcessProcessor(), 'callback'),
|
221 |
+
);
|
222 |
+
}
|
223 |
+
|
224 |
+
$logger = new Monolog_Logger('worker', $handlers, $processors);
|
225 |
+
|
226 |
+
return $logger;
|
227 |
+
}
|
228 |
+
|
229 |
+
protected function createResponseCallback()
|
230 |
+
{
|
231 |
+
return new MWP_Worker_ResponseCallback();
|
232 |
+
}
|
233 |
+
|
234 |
+
protected function createErrorHandler()
|
235 |
+
{
|
236 |
+
return new Monolog_ErrorHandler($this->getErrorLogger());
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* @return Symfony_Process_ExecutableFinder
|
241 |
+
*/
|
242 |
+
protected function createExecutableFinder()
|
243 |
+
{
|
244 |
+
$finder = new Symfony_Process_ExecutableFinder();
|
245 |
+
|
246 |
+
$db = $this->getWordPressContext()->getDb();
|
247 |
+
|
248 |
+
if (is_callable(array($db, 'get_var'))) {
|
249 |
+
$basePath = rtrim($db->get_var('select @@basedir'), '/\\');
|
250 |
+
if ($basePath) {
|
251 |
+
$basePath .= '/bin';
|
252 |
+
$finder->addExtraDir($basePath);
|
253 |
+
}
|
254 |
+
}
|
255 |
+
|
256 |
+
return $finder;
|
257 |
+
}
|
258 |
+
|
259 |
+
/**
|
260 |
+
* @return MWP_Extension_HitCounter
|
261 |
+
*/
|
262 |
+
protected function createHitCounter()
|
263 |
+
{
|
264 |
+
$counter = new MWP_Extension_HitCounter($this->getWordPressContext(), 14);
|
265 |
+
|
266 |
+
return $counter;
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* @return MWP_Monolog_Handler_JsonMessageHandler
|
271 |
+
*/
|
272 |
+
protected function createJsonMessageHandler()
|
273 |
+
{
|
274 |
+
$handler = new MWP_Monolog_Handler_JsonMessageHandler($this->getParameter('message_minimum_level'));
|
275 |
+
$handler->setPadLength($this->getParameter('message_pad_length'));
|
276 |
+
|
277 |
+
return $handler;
|
278 |
+
}
|
279 |
+
|
280 |
+
/**
|
281 |
+
* @return Monolog_Logger
|
282 |
+
*/
|
283 |
+
protected function createErrorLogger()
|
284 |
+
{
|
285 |
+
$processors = array(
|
286 |
+
array(new Monolog_Processor_PsrLogMessageProcessor(), 'callback'),
|
287 |
+
);
|
288 |
+
|
289 |
+
$logger = new Monolog_Logger('worker.error', array(), $processors);
|
290 |
+
|
291 |
+
return $logger;
|
292 |
+
}
|
293 |
+
}
|
src/MWP/Signer/Factory.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Signer_Factory
|
12 |
+
{
|
13 |
+
public static function createSigner()
|
14 |
+
{
|
15 |
+
if (extension_loaded('openssl')) {
|
16 |
+
return self::createOpenSslSigner();
|
17 |
+
}
|
18 |
+
|
19 |
+
return self::createPhpSecLibSigner();
|
20 |
+
}
|
21 |
+
|
22 |
+
public static function createOpenSslSigner()
|
23 |
+
{
|
24 |
+
return new MWP_Signer_OpenSslSigner();
|
25 |
+
}
|
26 |
+
|
27 |
+
public static function createPhpSecLibSigner()
|
28 |
+
{
|
29 |
+
return new MWP_Signer_PhpSecLibSigner();
|
30 |
+
}
|
31 |
+
}
|
src/MWP/Signer/Interface.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_Signer_Interface
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @param string $data
|
15 |
+
* @param string $signature
|
16 |
+
* @param string $publicKey
|
17 |
+
*
|
18 |
+
* @return bool
|
19 |
+
*/
|
20 |
+
public function verify($data, $signature, $publicKey);
|
21 |
+
}
|
src/MWP/Signer/OpenSslSigner.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Signer_OpenSslSigner implements MWP_Signer_Interface
|
12 |
+
{
|
13 |
+
public function sign($data, $publicKey)
|
14 |
+
{
|
15 |
+
$success = @openssl_sign($data, $signature, $publicKey);
|
16 |
+
|
17 |
+
if ($success === false) {
|
18 |
+
$error = $errorRow = '';
|
19 |
+
$lastError = error_get_last();
|
20 |
+
|
21 |
+
while (($errorRow = openssl_error_string()) !== false) {
|
22 |
+
$error = $errorRow."\n".$error;
|
23 |
+
}
|
24 |
+
|
25 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::OPENSSL_SIGN_ERROR, "There was an error while trying to use OpenSSL to sign a message.", array(
|
26 |
+
'openSslError' => $error,
|
27 |
+
'error' => isset($lastError['message']) ? $lastError['message'] : null,
|
28 |
+
));
|
29 |
+
}
|
30 |
+
|
31 |
+
return $signature;
|
32 |
+
}
|
33 |
+
|
34 |
+
public function verify($data, $signature, $publicKey)
|
35 |
+
{
|
36 |
+
$verify = @openssl_verify($data, $signature, $publicKey);
|
37 |
+
|
38 |
+
if ($verify === -1) {
|
39 |
+
$error = $errorRow = '';
|
40 |
+
$lastError = error_get_last();
|
41 |
+
|
42 |
+
while (($errorRow = openssl_error_string()) !== false) {
|
43 |
+
$error = $errorRow."\n".$error;
|
44 |
+
}
|
45 |
+
|
46 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::OPENSSL_VERIFY_ERROR, "There was an error while trying to use OpenSSL to verify a message.", array(
|
47 |
+
'openSslError' => $error,
|
48 |
+
'error' => isset($lastError['message']) ? $lastError['message'] : null,
|
49 |
+
));
|
50 |
+
}
|
51 |
+
|
52 |
+
return (bool) $verify;
|
53 |
+
}
|
54 |
+
}
|
src/MWP/Signer/PhpSecLibSigner.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Signer_PhpSecLibSigner implements MWP_Signer_Interface
|
12 |
+
{
|
13 |
+
|
14 |
+
public function verify($data, $signature, $publicKey)
|
15 |
+
{
|
16 |
+
$this->requireLibrary();
|
17 |
+
|
18 |
+
$rsa = new Crypt_RSA();
|
19 |
+
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
|
20 |
+
$rsa->loadKey($publicKey);
|
21 |
+
$errorCatcher = new MWP_Debug_ErrorCatcher();
|
22 |
+
$errorCatcher->register();
|
23 |
+
$verify = $rsa->verify($data, $signature);
|
24 |
+
$errorMessage = $errorCatcher->yieldErrorMessage(true);
|
25 |
+
|
26 |
+
if ($errorMessage !== null && $errorMessage !== 'Signature representative out of range') {
|
27 |
+
throw new MWP_Worker_Exception(MWP_Worker_Exception::PHPSECLIB_VERIFY_ERROR);
|
28 |
+
}
|
29 |
+
|
30 |
+
return $verify;
|
31 |
+
}
|
32 |
+
|
33 |
+
private function requireLibrary()
|
34 |
+
{
|
35 |
+
require_once dirname(__FILE__).'/../../PHPSecLib/Crypt/RSA.php';
|
36 |
+
}
|
37 |
+
}
|
src/MWP/Updater/AutoUpdateManager.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Updater_AutoUpdateManager
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $pluginList;
|
17 |
+
|
18 |
+
private $themeList;
|
19 |
+
|
20 |
+
public function __construct(MWP_WordPress_Context $context)
|
21 |
+
{
|
22 |
+
$this->context = $context;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @param string $pluginSlug Ie. 'worker/init.php';
|
27 |
+
*
|
28 |
+
* @return bool
|
29 |
+
*/
|
30 |
+
public function isEnabledForPlugin($pluginSlug)
|
31 |
+
{
|
32 |
+
return in_array($pluginSlug, $this->getPluginList());
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @param string $themeName Ie. 'Twenty Fourteen'.
|
37 |
+
*
|
38 |
+
* @return bool
|
39 |
+
*/
|
40 |
+
public function isEnabledForTheme($themeName)
|
41 |
+
{
|
42 |
+
return in_array($themeName, $this->getThemeList());
|
43 |
+
}
|
44 |
+
|
45 |
+
private function getPluginList()
|
46 |
+
{
|
47 |
+
if ($this->pluginList === null) {
|
48 |
+
$this->pluginList = $this->context->optionGet('mwp_active_autoupdate_plugins', array(), null, false);
|
49 |
+
}
|
50 |
+
|
51 |
+
return $this->pluginList;
|
52 |
+
}
|
53 |
+
|
54 |
+
private function getThemeList()
|
55 |
+
{
|
56 |
+
if ($this->themeList === null) {
|
57 |
+
$this->themeList = $this->context->optionGet('mwp_active_autoupdate_themes', array(), null, false);
|
58 |
+
}
|
59 |
+
|
60 |
+
return $this->themeList;
|
61 |
+
}
|
62 |
+
}
|
src/MWP/Updater/CoreUpdate.php
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Updater_CoreUpdate
|
12 |
+
{
|
13 |
+
|
14 |
+
public $locale;
|
15 |
+
|
16 |
+
public $version;
|
17 |
+
|
18 |
+
public $type;
|
19 |
+
|
20 |
+
public $phpVersion;
|
21 |
+
|
22 |
+
public $mysqlVersion;
|
23 |
+
|
24 |
+
}
|
src/MWP/Updater/PluginUpdate.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Updater_PluginUpdate
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Numeric value, but let's play it safe.
|
16 |
+
*
|
17 |
+
* @var string
|
18 |
+
*/
|
19 |
+
public $id;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $slug;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
public $basename;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var string
|
33 |
+
*/
|
34 |
+
public $version;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @var string
|
38 |
+
*/
|
39 |
+
public $url;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
public $package;
|
45 |
+
}
|
src/MWP/Updater/ThemeUpdate.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Updater_ThemeUpdate
|
12 |
+
{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var string
|
16 |
+
*/
|
17 |
+
public $slug;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @var string
|
21 |
+
*/
|
22 |
+
public $version;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @var string
|
26 |
+
*/
|
27 |
+
public $url;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
public $package;
|
33 |
+
|
34 |
+
}
|
src/MWP/Updater/UpdateManager.php
ADDED
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Updater_UpdateManager
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
private $coreInfo;
|
17 |
+
|
18 |
+
private $pluginInfo;
|
19 |
+
|
20 |
+
private $themeInfo;
|
21 |
+
|
22 |
+
public function __construct(MWP_WordPress_Context $context)
|
23 |
+
{
|
24 |
+
$this->context = $context;
|
25 |
+
$this->reload();
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @return int|null UNIX timestamp of last update check.
|
30 |
+
*/
|
31 |
+
public function getLastChecked()
|
32 |
+
{
|
33 |
+
if (empty($this->pluginInfo->last_checked)) {
|
34 |
+
return null;
|
35 |
+
}
|
36 |
+
|
37 |
+
return $this->pluginInfo->last_checked;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @param string $pluginBasename Ie. 'worker/init.php'
|
42 |
+
*
|
43 |
+
* @return MWP_Updater_PluginUpdate|null
|
44 |
+
*/
|
45 |
+
public function getPluginUpdate($pluginBasename)
|
46 |
+
{
|
47 |
+
if (empty($this->pluginInfo->response[$pluginBasename])) {
|
48 |
+
return null;
|
49 |
+
}
|
50 |
+
|
51 |
+
$info = $this->pluginInfo->response[$pluginBasename];
|
52 |
+
|
53 |
+
$update = new MWP_Updater_PluginUpdate();
|
54 |
+
$update->id = $info->id;
|
55 |
+
$update->version = $info->new_version;
|
56 |
+
$update->basename = $pluginBasename;
|
57 |
+
$update->url = $info->url;
|
58 |
+
$update->package = $info->package;
|
59 |
+
$update->slug = $info->plugin;
|
60 |
+
|
61 |
+
return $update;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* @param string $themeSlug Ie. 'twentyeleven'.
|
66 |
+
*
|
67 |
+
* @return MWP_Updater_ThemeUpdate|null
|
68 |
+
*/
|
69 |
+
public function getThemeUpdate($themeSlug)
|
70 |
+
{
|
71 |
+
if (empty($this->themeInfo->response[$themeSlug])) {
|
72 |
+
return null;
|
73 |
+
}
|
74 |
+
|
75 |
+
$info = $this->themeInfo->response[$themeSlug];
|
76 |
+
|
77 |
+
$update = new MWP_Updater_ThemeUpdate();
|
78 |
+
$update->slug = $info['theme']; // === $themeSlug
|
79 |
+
$update->version = $info['new_version'];
|
80 |
+
$update->url = $info['url'];
|
81 |
+
$update->package = $info['package'];
|
82 |
+
|
83 |
+
return $update;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* @return MWP_Updater_PluginUpdate[]
|
88 |
+
*/
|
89 |
+
public function getPluginUpdates()
|
90 |
+
{
|
91 |
+
if (empty($this->pluginInfo->response)) {
|
92 |
+
return array();
|
93 |
+
}
|
94 |
+
|
95 |
+
$updates = array();
|
96 |
+
foreach (array_keys($this->pluginInfo->response) as $basename) {
|
97 |
+
$updates[] = $this->getPluginUpdate($basename);
|
98 |
+
}
|
99 |
+
|
100 |
+
return $updates;
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* @return MWP_Updater_ThemeUpdate[]
|
105 |
+
*/
|
106 |
+
public function getThemeUpdates()
|
107 |
+
{
|
108 |
+
if (empty($this->themeInfo->response)) {
|
109 |
+
return array();
|
110 |
+
}
|
111 |
+
|
112 |
+
$updates = array();
|
113 |
+
foreach (array_keys($this->themeInfo->response) as $slug) {
|
114 |
+
$updates[] = $this->getThemeUpdate($slug);
|
115 |
+
}
|
116 |
+
|
117 |
+
return $updates;
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* @return MWP_Updater_CoreUpdate[]
|
122 |
+
*
|
123 |
+
* @see core_upgrade_preamble
|
124 |
+
*/
|
125 |
+
public function getCoreUpdates()
|
126 |
+
{
|
127 |
+
if (empty($this->coreInfo->updates)) {
|
128 |
+
return array();
|
129 |
+
}
|
130 |
+
|
131 |
+
$firstUpdate = $this->coreInfo->updates[0];
|
132 |
+
|
133 |
+
if (!isset($firstUpdate->response) || 'latest' === $firstUpdate->response) {
|
134 |
+
return array();
|
135 |
+
}
|
136 |
+
|
137 |
+
$locale = $this->context->getLocale();
|
138 |
+
$latestUpdate = null;
|
139 |
+
|
140 |
+
foreach ($this->coreInfo->updates as $update) {
|
141 |
+
if ($update->response === 'upgrade' && $update->locale === $locale) {
|
142 |
+
$latestUpdate = $update;
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
$updates = array();
|
147 |
+
|
148 |
+
if ($latestUpdate !== null) {
|
149 |
+
$showUpdate = new MWP_Updater_CoreUpdate();
|
150 |
+
$showUpdate->locale = $latestUpdate->locale;
|
151 |
+
$showUpdate->type = $latestUpdate->response;
|
152 |
+
$showUpdate->version = $latestUpdate->version;
|
153 |
+
$showUpdate->phpVersion = $latestUpdate->php_version;
|
154 |
+
$showUpdate->mysqlVersion = $latestUpdate->mysql_version;
|
155 |
+
|
156 |
+
$updates[] = $showUpdate;
|
157 |
+
}
|
158 |
+
|
159 |
+
return $updates;
|
160 |
+
}
|
161 |
+
|
162 |
+
private function reload()
|
163 |
+
{
|
164 |
+
$this->coreInfo = $this->context->transientGet('update_core');
|
165 |
+
$this->pluginInfo = $this->context->transientGet('update_plugins');
|
166 |
+
$this->themeInfo = $this->context->transientGet('update_themes');
|
167 |
+
}
|
168 |
+
}
|
src/MWP/WordPress/Context.php
ADDED
@@ -0,0 +1,674 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Proxy class for WordPress' function calls. This is the only class that should be able to use WordPress' internal functions.
|
13 |
+
* The rule of thumb is that if a function does not exist since WordPress 3.0.0, it should be defined here.
|
14 |
+
*/
|
15 |
+
class MWP_WordPress_Context
|
16 |
+
{
|
17 |
+
|
18 |
+
private $context;
|
19 |
+
|
20 |
+
private $constants;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @param array $globals The context to work with. Defaults to $GLOBALS, using the same global variables as WordPress.
|
24 |
+
* @param array $constants The list of constants to use. Defaults to global constants.
|
25 |
+
*/
|
26 |
+
public function __construct(array &$globals = null, array $constants = null)
|
27 |
+
{
|
28 |
+
if ($globals !== null) {
|
29 |
+
$this->context = $globals;
|
30 |
+
} else {
|
31 |
+
$this->context = &$GLOBALS;
|
32 |
+
}
|
33 |
+
|
34 |
+
if ($constants !== null) {
|
35 |
+
$this->constants = $constants;
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
public function set($name, $value)
|
40 |
+
{
|
41 |
+
$this->context[$name] = $value;
|
42 |
+
}
|
43 |
+
|
44 |
+
public function get($name)
|
45 |
+
{
|
46 |
+
return isset($this->context[$name]) ? $this->context[$name] : null;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* @return wpdb
|
51 |
+
*/
|
52 |
+
public function getDb()
|
53 |
+
{
|
54 |
+
return $this->context['wpdb'];
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @return string
|
59 |
+
*/
|
60 |
+
public function getVersion()
|
61 |
+
{
|
62 |
+
return $this->context['wp_version'];
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @param string $version
|
67 |
+
*
|
68 |
+
* @return bool
|
69 |
+
*/
|
70 |
+
public function isVersionAtLeast($version)
|
71 |
+
{
|
72 |
+
if (version_compare($version, $this->getVersion(), '<=')) {
|
73 |
+
return true;
|
74 |
+
}
|
75 |
+
|
76 |
+
return false;
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* @param string $tag
|
81 |
+
* @param Callable $functionToAdd
|
82 |
+
* @param int $priority
|
83 |
+
* @param int $acceptedArgs
|
84 |
+
*
|
85 |
+
* @see add_action()
|
86 |
+
* @link http://codex.wordpress.org/Function_Reference/add_action
|
87 |
+
*/
|
88 |
+
public function addAction($tag, $functionToAdd, $priority = 10, $acceptedArgs = 1)
|
89 |
+
{
|
90 |
+
add_action($tag, $functionToAdd, $priority, $acceptedArgs);
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @param string $name
|
95 |
+
* @param array $args
|
96 |
+
*/
|
97 |
+
public function doAction($name, array $args = array())
|
98 |
+
{
|
99 |
+
do_action($name, $args);
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* @param string $optionName The option to delete.
|
104 |
+
* @param bool $global Whether to delete the option from the whole network. Used for network un-installation.
|
105 |
+
*
|
106 |
+
* @see delete_site_option()
|
107 |
+
* @see delete_option()
|
108 |
+
* @link http://codex.wordpress.org/Function_Reference/register_uninstall_hook
|
109 |
+
*/
|
110 |
+
public function optionDelete($optionName, $global = false)
|
111 |
+
{
|
112 |
+
if ($global && is_multisite()) {
|
113 |
+
$db = $this->getDb();
|
114 |
+
$blogIDs = $db->get_col("SELECT blog_id FROM $db->blogs");
|
115 |
+
$originalBlogID = $this->getCurrentBlogId();
|
116 |
+
foreach ($blogIDs as $blogID) {
|
117 |
+
switch_to_blog($blogID);
|
118 |
+
delete_site_option($optionName);
|
119 |
+
}
|
120 |
+
switch_to_blog($originalBlogID);
|
121 |
+
} else {
|
122 |
+
delete_option($optionName);
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* @param string $optionName
|
128 |
+
* @param mixed $optionValue
|
129 |
+
* @param bool $global
|
130 |
+
*
|
131 |
+
* @see update_site_option()
|
132 |
+
* @see update_option()
|
133 |
+
* @link
|
134 |
+
*/
|
135 |
+
public function optionSet($optionName, $optionValue, $global = false)
|
136 |
+
{
|
137 |
+
if ($global && is_multisite()) {
|
138 |
+
$db = $this->getDb();
|
139 |
+
$blogIDs = $db->get_col("SELECT blog_id FROM $db->blogs");
|
140 |
+
$originalBlogID = $this->getCurrentBlogId();
|
141 |
+
foreach ($blogIDs as $blogID) {
|
142 |
+
switch_to_blog($blogID);
|
143 |
+
update_site_option($optionName, $optionValue);
|
144 |
+
}
|
145 |
+
switch_to_blog($originalBlogID);
|
146 |
+
} else {
|
147 |
+
update_option($optionName, $optionValue);
|
148 |
+
}
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @param string $option Name of option to retrieve.
|
153 |
+
* @param mixed $default Optional. Default value to return if the option does not exist.
|
154 |
+
* @param int $siteId Site ID to update. Only used in multisite installations.
|
155 |
+
* @param bool $useCache Whether to use cache. Multisite only.
|
156 |
+
*
|
157 |
+
* @return mixed Value set for the option.
|
158 |
+
*
|
159 |
+
* @see get_option()
|
160 |
+
* @link http://codex.wordpress.org/Function_Reference/get_option
|
161 |
+
*/
|
162 |
+
public function optionGet($option, $default = false, $siteId = null, $useCache = true)
|
163 |
+
{
|
164 |
+
if ($siteId !== null && is_multisite()) {
|
165 |
+
return get_site_option($option, $default, $useCache);
|
166 |
+
}
|
167 |
+
|
168 |
+
return get_option($option, $default);
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* WordPress' function get_current_blog_id() is not available before version 3.1.0.
|
173 |
+
*
|
174 |
+
* @return int
|
175 |
+
*
|
176 |
+
* @see get_current_blog_id()
|
177 |
+
*/
|
178 |
+
public function getCurrentBlogId()
|
179 |
+
{
|
180 |
+
return abs(intval($this->context['blog_id']));
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* @param string $constant
|
185 |
+
*
|
186 |
+
* @return bool
|
187 |
+
*/
|
188 |
+
public function hasConstant($constant)
|
189 |
+
{
|
190 |
+
if (is_array($this->constants)) {
|
191 |
+
return isset($this->constants[$constant]);
|
192 |
+
}
|
193 |
+
|
194 |
+
return defined($constant);
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* @param string $constant
|
199 |
+
*
|
200 |
+
* @return int|string
|
201 |
+
* @throws Exception If the constant does not exist.
|
202 |
+
*/
|
203 |
+
public function getConstant($constant)
|
204 |
+
{
|
205 |
+
if (!$this->hasConstant($constant)) {
|
206 |
+
throw new Exception(sprintf('The constant "%s" is not defined', $constant));
|
207 |
+
}
|
208 |
+
|
209 |
+
if (is_array($this->constants)) {
|
210 |
+
return $this->constants[$constant];
|
211 |
+
}
|
212 |
+
|
213 |
+
return constant($constant);
|
214 |
+
}
|
215 |
+
|
216 |
+
public function setConstant($name, $value, $throw = true)
|
217 |
+
{
|
218 |
+
if ($this->hasConstant($name)) {
|
219 |
+
if ($throw) {
|
220 |
+
throw new Exception(sprintf('The constant "%s" is already defined', $name));
|
221 |
+
}
|
222 |
+
|
223 |
+
return;
|
224 |
+
}
|
225 |
+
|
226 |
+
if (is_array($this->constants)) {
|
227 |
+
$this->constants[$name] = $value;
|
228 |
+
|
229 |
+
return;
|
230 |
+
}
|
231 |
+
|
232 |
+
define($name, $value);
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* @return string
|
237 |
+
*
|
238 |
+
* @see plugin_basename()
|
239 |
+
*/
|
240 |
+
public function getPluginBasename()
|
241 |
+
{
|
242 |
+
$dirName = explode('/', plugin_basename(__FILE__), 2);
|
243 |
+
$dirName = $dirName[0];
|
244 |
+
|
245 |
+
return $dirName.'/init.php';
|
246 |
+
}
|
247 |
+
|
248 |
+
public function getPlugins()
|
249 |
+
{
|
250 |
+
if (!function_exists('get_mu_plugins')) {
|
251 |
+
require_once($this->getConstant('ABSPATH').'wp-admin/includes/plugin.php');
|
252 |
+
}
|
253 |
+
|
254 |
+
return get_plugins();
|
255 |
+
}
|
256 |
+
|
257 |
+
public function getMustUsePlugins()
|
258 |
+
{
|
259 |
+
if (!function_exists('get_mu_plugins')) {
|
260 |
+
require_once($this->getConstant('ABSPATH').'wp-admin/includes/plugin.php');
|
261 |
+
}
|
262 |
+
|
263 |
+
return get_mu_plugins();
|
264 |
+
}
|
265 |
+
|
266 |
+
public function isPluginActive($pluginBasename)
|
267 |
+
{
|
268 |
+
return is_plugin_active($pluginBasename);
|
269 |
+
}
|
270 |
+
|
271 |
+
public function isPluginActiveForNetwork($pluginBasename)
|
272 |
+
{
|
273 |
+
return is_plugin_active_for_network($pluginBasename);
|
274 |
+
}
|
275 |
+
|
276 |
+
public function getThemes()
|
277 |
+
{
|
278 |
+
// When the plugin is MU-loaded, the WordPress theme directories are not set.
|
279 |
+
if ($this->isMustUse() && empty($this->context['wp_theme_directories'])) {
|
280 |
+
// Register the default theme directory root.
|
281 |
+
register_theme_directory(get_theme_root());
|
282 |
+
}
|
283 |
+
|
284 |
+
if ($this->isVersionAtLeast('3.4')) {
|
285 |
+
return wp_get_themes();
|
286 |
+
}
|
287 |
+
|
288 |
+
return get_themes();
|
289 |
+
}
|
290 |
+
|
291 |
+
public function getStylesheetDirectory()
|
292 |
+
{
|
293 |
+
return get_stylesheet_directory();
|
294 |
+
}
|
295 |
+
|
296 |
+
/**
|
297 |
+
* @param string $key
|
298 |
+
* @param mixed $value
|
299 |
+
* @param int $expire Expiration time in seconds from now.
|
300 |
+
*
|
301 |
+
* @return bool
|
302 |
+
*/
|
303 |
+
public function transientSet($key, $value, $expire = 0)
|
304 |
+
{
|
305 |
+
return set_site_transient($key, $value, $expire);
|
306 |
+
}
|
307 |
+
|
308 |
+
/**
|
309 |
+
* @param string $key
|
310 |
+
*
|
311 |
+
* @return mixed
|
312 |
+
*/
|
313 |
+
public function transientGet($key)
|
314 |
+
{
|
315 |
+
return get_site_transient($key);
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* @param string $key
|
320 |
+
*
|
321 |
+
* @return bool
|
322 |
+
*/
|
323 |
+
public function transientDelete($key)
|
324 |
+
{
|
325 |
+
return delete_site_transient($key);
|
326 |
+
}
|
327 |
+
|
328 |
+
private function isMustUse()
|
329 |
+
{
|
330 |
+
if (empty($this->context['mwp_is_mu'])) {
|
331 |
+
return false;
|
332 |
+
}
|
333 |
+
|
334 |
+
return true;
|
335 |
+
}
|
336 |
+
|
337 |
+
/**
|
338 |
+
* @param string $tag
|
339 |
+
* @param Callable $functionToAdd
|
340 |
+
* @param int $priority
|
341 |
+
* @param int $acceptedArgs
|
342 |
+
*/
|
343 |
+
public function addFilter($tag, $functionToAdd, $priority = 10, $acceptedArgs = 1)
|
344 |
+
{
|
345 |
+
add_filter($tag, $functionToAdd, $priority, $acceptedArgs);
|
346 |
+
}
|
347 |
+
|
348 |
+
public function enqueueScript($handle, $src = false, $dependencies = array(), $ver = false, $inFooter = false)
|
349 |
+
{
|
350 |
+
wp_enqueue_script($handle, $src, $dependencies, $ver, $inFooter);
|
351 |
+
}
|
352 |
+
|
353 |
+
public function enqueueStyle($handle, $src = false, $dependencies = array(), $ver = false, $media = 'all')
|
354 |
+
{
|
355 |
+
wp_enqueue_style($handle, $src, $dependencies, $ver, $media);
|
356 |
+
}
|
357 |
+
|
358 |
+
public function addMenuPage($pageTitle, $menuTitle, $capability, $slug, $callback = '', $iconUrl = '', $position = null)
|
359 |
+
{
|
360 |
+
add_menu_page($pageTitle, $menuTitle, $capability, $slug, $callback, $iconUrl, $position);
|
361 |
+
}
|
362 |
+
|
363 |
+
public function translate($text, $domain = 'default')
|
364 |
+
{
|
365 |
+
return translate($text, $domain);
|
366 |
+
}
|
367 |
+
|
368 |
+
public function output($content)
|
369 |
+
{
|
370 |
+
print $content;
|
371 |
+
}
|
372 |
+
|
373 |
+
public function getCurrentUser()
|
374 |
+
{
|
375 |
+
$this->requirePluggable();
|
376 |
+
$this->requireCookieConstants();
|
377 |
+
|
378 |
+
return wp_get_current_user();
|
379 |
+
}
|
380 |
+
|
381 |
+
public function getHomeUrl()
|
382 |
+
{
|
383 |
+
return get_home_url();
|
384 |
+
}
|
385 |
+
|
386 |
+
public function sendMail($to, $subject, $message, $headers = '', $attachments = array())
|
387 |
+
{
|
388 |
+
$this->requirePluggable();
|
389 |
+
|
390 |
+
return wp_mail($to, $subject, $message, $headers, $attachments);
|
391 |
+
}
|
392 |
+
|
393 |
+
public function isInAdminPanel()
|
394 |
+
{
|
395 |
+
return is_admin();
|
396 |
+
}
|
397 |
+
|
398 |
+
public function isGranted($capability)
|
399 |
+
{
|
400 |
+
return current_user_can($capability);
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* @param string $name Value name.
|
405 |
+
*
|
406 |
+
* @return mixed Context (global) value. Null if one doesn't exist.
|
407 |
+
*
|
408 |
+
* @throws Exception If the context value does not exist.
|
409 |
+
*/
|
410 |
+
public function &getContextValue($name)
|
411 |
+
{
|
412 |
+
if (!$this->hasContextValue($name)) {
|
413 |
+
throw new Exception(sprintf('Context value "%s" does not exist', $name));
|
414 |
+
}
|
415 |
+
|
416 |
+
return $this->context[$name];
|
417 |
+
}
|
418 |
+
|
419 |
+
/**
|
420 |
+
* @param string $name Value name.
|
421 |
+
*
|
422 |
+
* @return bool
|
423 |
+
*/
|
424 |
+
public function hasContextValue($name)
|
425 |
+
{
|
426 |
+
return array_key_exists($name, $this->context);
|
427 |
+
}
|
428 |
+
|
429 |
+
public function getDropInPlugins()
|
430 |
+
{
|
431 |
+
if (!function_exists('get_dropins')) {
|
432 |
+
require_once ABSPATH.'wp-admin/includes/plugin.php';
|
433 |
+
}
|
434 |
+
|
435 |
+
return get_dropins();
|
436 |
+
}
|
437 |
+
|
438 |
+
public function requirePluggable()
|
439 |
+
{
|
440 |
+
require_once $this->getConstant('ABSPATH').$this->getConstant('WPINC').'/pluggable.php';
|
441 |
+
}
|
442 |
+
|
443 |
+
public function requireCookieConstants()
|
444 |
+
{
|
445 |
+
wp_cookie_constants();
|
446 |
+
}
|
447 |
+
|
448 |
+
public function requireAdminUserLibrary()
|
449 |
+
{
|
450 |
+
require_once $this->getConstant('ABSPATH').'wp-admin/includes/user.php';
|
451 |
+
}
|
452 |
+
|
453 |
+
public function getUserRoles()
|
454 |
+
{
|
455 |
+
$this->requireAdminUserLibrary();
|
456 |
+
|
457 |
+
return get_editable_roles();
|
458 |
+
}
|
459 |
+
|
460 |
+
/**
|
461 |
+
* @param string $username
|
462 |
+
*
|
463 |
+
* @return WP_User|null
|
464 |
+
*/
|
465 |
+
public function getUserByUsername($username)
|
466 |
+
{
|
467 |
+
$this->requirePluggable();
|
468 |
+
|
469 |
+
$user = get_user_by('login', $username);
|
470 |
+
|
471 |
+
if (!$user) {
|
472 |
+
return null;
|
473 |
+
}
|
474 |
+
|
475 |
+
return $user;
|
476 |
+
}
|
477 |
+
|
478 |
+
/**
|
479 |
+
* @param $criteria
|
480 |
+
*
|
481 |
+
* @return WP_User[]
|
482 |
+
*
|
483 |
+
* @link http://codex.wordpress.org/Function_Reference/get_users
|
484 |
+
*
|
485 |
+
* Defaults:
|
486 |
+
* 'blog_id' => $GLOBALS['blog_id']
|
487 |
+
* 'role' => ''
|
488 |
+
* 'meta_key' => ''
|
489 |
+
* 'meta_value' => ''
|
490 |
+
* 'meta_compare' => ''
|
491 |
+
* 'meta_query' => array()
|
492 |
+
* 'include' => array()
|
493 |
+
* 'exclude' => array()
|
494 |
+
* 'orderby' => 'login'
|
495 |
+
* 'order' => 'ASC'
|
496 |
+
* 'offset' => ''
|
497 |
+
* 'search' => ''
|
498 |
+
* 'number' => ''
|
499 |
+
* 'count_total' => false
|
500 |
+
* 'fields' => 'all'
|
501 |
+
* 'who' => ''
|
502 |
+
*/
|
503 |
+
public function getUsers($criteria)
|
504 |
+
{
|
505 |
+
return get_users($criteria);
|
506 |
+
}
|
507 |
+
|
508 |
+
public function isPluginEnabled($pluginBasename)
|
509 |
+
{
|
510 |
+
$plugins = (array) $this->optionGet('active_plugins', array());
|
511 |
+
|
512 |
+
return in_array($pluginBasename, $plugins);
|
513 |
+
}
|
514 |
+
|
515 |
+
public function setCurrentUser(WP_User $user)
|
516 |
+
{
|
517 |
+
$this->requirePluggable();
|
518 |
+
|
519 |
+
if ($this->isPluginEnabled('all-in-one-wp-security-and-firewall/wp-security.php')) {
|
520 |
+
update_user_meta($user->ID, 'last_login_time', gmdate('Y-m-d H:i:s'));
|
521 |
+
}
|
522 |
+
|
523 |
+
wp_set_current_user($user->ID);
|
524 |
+
}
|
525 |
+
|
526 |
+
public function setAuthCookie(WP_User $user, $remember = false, $secure = '')
|
527 |
+
{
|
528 |
+
$this->requireCookieConstants();
|
529 |
+
|
530 |
+
wp_set_auth_cookie($user->ID, $remember, $secure);
|
531 |
+
}
|
532 |
+
|
533 |
+
public function wpDie($message = '', $title = '', $args = array())
|
534 |
+
{
|
535 |
+
wp_die($message, $title, $args);
|
536 |
+
// This is just a stub, the script will have exit()-ed just before this point.
|
537 |
+
exit();
|
538 |
+
}
|
539 |
+
|
540 |
+
/**
|
541 |
+
* Returns current site's URL.
|
542 |
+
*
|
543 |
+
* @return string|void
|
544 |
+
*/
|
545 |
+
public function getSiteUrl()
|
546 |
+
{
|
547 |
+
return get_bloginfo('wpurl');
|
548 |
+
}
|
549 |
+
|
550 |
+
public function requireWpRewrite()
|
551 |
+
{
|
552 |
+
if (isset($this->context['wp_rewrite']) && $this->context['wp_rewrite'] instanceof WP_Rewrite) {
|
553 |
+
return;
|
554 |
+
}
|
555 |
+
|
556 |
+
$this->context['wp_rewrite'] = new WP_Rewrite();
|
557 |
+
}
|
558 |
+
|
559 |
+
public function requireTaxonomies()
|
560 |
+
{
|
561 |
+
if (!empty($this->context['wp_taxonomies'])) {
|
562 |
+
return;
|
563 |
+
}
|
564 |
+
|
565 |
+
create_initial_taxonomies();
|
566 |
+
}
|
567 |
+
|
568 |
+
public function requirePostTypes()
|
569 |
+
{
|
570 |
+
if (!empty($this->context['wp_post_types'])) {
|
571 |
+
return;
|
572 |
+
}
|
573 |
+
|
574 |
+
create_initial_post_types();
|
575 |
+
}
|
576 |
+
|
577 |
+
public function requireTheme()
|
578 |
+
{
|
579 |
+
if (!empty($this->context['wp_theme_directories'])) {
|
580 |
+
return;
|
581 |
+
}
|
582 |
+
|
583 |
+
register_theme_directory(get_theme_root());
|
584 |
+
}
|
585 |
+
|
586 |
+
public function getLocale()
|
587 |
+
{
|
588 |
+
return get_locale();
|
589 |
+
}
|
590 |
+
|
591 |
+
public function tryDeserialize($content)
|
592 |
+
{
|
593 |
+
return maybe_unserialize($content);
|
594 |
+
}
|
595 |
+
|
596 |
+
public function getSiteTitle()
|
597 |
+
{
|
598 |
+
return get_bloginfo('name');
|
599 |
+
}
|
600 |
+
|
601 |
+
public function getSiteDescription()
|
602 |
+
{
|
603 |
+
return get_bloginfo('description');
|
604 |
+
}
|
605 |
+
|
606 |
+
/**
|
607 |
+
* Always returns main site's url (in multisite installations).
|
608 |
+
*
|
609 |
+
* @see getSiteUrl
|
610 |
+
*
|
611 |
+
* @return string|void
|
612 |
+
*/
|
613 |
+
public function getMasterSiteUrl()
|
614 |
+
{
|
615 |
+
return site_url();
|
616 |
+
}
|
617 |
+
|
618 |
+
public function isMultisite()
|
619 |
+
{
|
620 |
+
return is_multisite();
|
621 |
+
}
|
622 |
+
|
623 |
+
public function getSiteId()
|
624 |
+
{
|
625 |
+
return get_current_blog_id();
|
626 |
+
}
|
627 |
+
|
628 |
+
public function getDbName()
|
629 |
+
{
|
630 |
+
return $this->getConstant('DB_NAME');
|
631 |
+
}
|
632 |
+
|
633 |
+
/**
|
634 |
+
* @param int $attachmentId
|
635 |
+
* @param string $style
|
636 |
+
*
|
637 |
+
* @return null
|
638 |
+
*/
|
639 |
+
public function getImageInfo($attachmentId, $style)
|
640 |
+
{
|
641 |
+
$info = wp_get_attachment_image_src($attachmentId, $style);
|
642 |
+
|
643 |
+
if (!$info) {
|
644 |
+
return null;
|
645 |
+
}
|
646 |
+
|
647 |
+
return array(
|
648 |
+
'url' => $info[0],
|
649 |
+
'width' => $info[1],
|
650 |
+
'height' => $info[2],
|
651 |
+
'original' => !$info[3],
|
652 |
+
);
|
653 |
+
}
|
654 |
+
|
655 |
+
public function addImageStyle($name, $width = 0, $height = 0, $crop = false)
|
656 |
+
{
|
657 |
+
add_image_size($name, $width, $height);
|
658 |
+
}
|
659 |
+
|
660 |
+
public function setCookie($name, $value, $expire = 0)
|
661 |
+
{
|
662 |
+
setcookie($name, $value, $expire, $this->getConstant('SITECOOKIEPATH'), $this->getConstant('COOKIE_DOMAIN'), $this->isSsl(), true);
|
663 |
+
}
|
664 |
+
|
665 |
+
public function isSsl()
|
666 |
+
{
|
667 |
+
return is_ssl();
|
668 |
+
}
|
669 |
+
|
670 |
+
public function removeAction($tag, $function, $priority = 10)
|
671 |
+
{
|
672 |
+
remove_action($tag, $function, $priority);
|
673 |
+
}
|
674 |
+
}
|
src/MWP/WordPress/HookProxy.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* This component makes it possible to delay calling a specific function with custom arguments.
|
13 |
+
* WordPress' add_action will execute the function with its own arguments, and we can't use
|
14 |
+
* PHP 5.3's lambda functions; so this is a workaround for it.
|
15 |
+
*
|
16 |
+
* It's also possible to call a proxy function with the result of the first callback. This is
|
17 |
+
* so we can delay calling a function until WordPress is further bootstrapped, but at the same
|
18 |
+
* time use its result in another context. Neat.
|
19 |
+
*/
|
20 |
+
class MWP_WordPress_HookProxy
|
21 |
+
{
|
22 |
+
|
23 |
+
private $callback;
|
24 |
+
|
25 |
+
private $args;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @param callable $callback Hook callback; function to execute.
|
29 |
+
* @param mixed ...$args Arguments that will be passed to $callback
|
30 |
+
*/
|
31 |
+
public function __construct($callback, $args = null)
|
32 |
+
{
|
33 |
+
$this->callback = $callback;
|
34 |
+
$this->args = func_get_args();
|
35 |
+
array_shift($this->args);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function hook()
|
39 |
+
{
|
40 |
+
call_user_func_array($this->callback, $this->args);
|
41 |
+
}
|
42 |
+
|
43 |
+
public function getCallable()
|
44 |
+
{
|
45 |
+
return array($this, 'hook');
|
46 |
+
}
|
47 |
+
}
|
src/MWP/WordPress/Provider/Interface.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_WordPress_Provider_Interface
|
12 |
+
{
|
13 |
+
public function fetch();
|
14 |
+
}
|
src/MWP/WordPress/Provider/Plugin.php
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_WordPress_Provider_Plugin implements MWP_WordPress_Provider_Interface
|
12 |
+
{
|
13 |
+
|
14 |
+
const STATUS_ACTIVE_NETWORK = 'active-network';
|
15 |
+
|
16 |
+
const STATUS_ACTIVE = 'active';
|
17 |
+
|
18 |
+
const STATUS_MUST_USE = 'must-use';
|
19 |
+
|
20 |
+
const STATUS_INACTIVE = 'inactive';
|
21 |
+
|
22 |
+
const STATUS_DROP_IN = 'drop-in';
|
23 |
+
|
24 |
+
private $context;
|
25 |
+
|
26 |
+
public function __construct(MWP_WordPress_Context $context)
|
27 |
+
{
|
28 |
+
$this->context = $context;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function fetch()
|
32 |
+
{
|
33 |
+
$regularPlugins = $this->context->getPlugins();
|
34 |
+
$mustUsePlugins = $this->context->getMustUsePlugins();
|
35 |
+
$dropInPlugins = $this->context->getDropInPlugins();
|
36 |
+
$plugins = array();
|
37 |
+
|
38 |
+
$pluginInfo = array(
|
39 |
+
'name' => 'Name',
|
40 |
+
'pluginUri' => 'PluginURI',
|
41 |
+
'version' => 'Version',
|
42 |
+
'description' => 'Description',
|
43 |
+
'author' => 'Author',
|
44 |
+
'authorUri' => 'AuthorURI',
|
45 |
+
);
|
46 |
+
|
47 |
+
foreach ($regularPlugins as $basename => $details) {
|
48 |
+
$plugin = array(
|
49 |
+
// This is the plugin identifier; ie. "worker/init.php".
|
50 |
+
'basename' => $basename,
|
51 |
+
// Plugin's own directory name (if it exists), or filename minus ".php" extension Ie. "worker".
|
52 |
+
'slug' => $this->getSlugFromBasename($basename),
|
53 |
+
// 'Network' property can have a valid value or 'false' and is always present.
|
54 |
+
// It signifies whether the plugin can only be activated network wide.
|
55 |
+
'networkOnly' => $details['Network'],
|
56 |
+
);
|
57 |
+
|
58 |
+
foreach ($pluginInfo as $property => $info) {
|
59 |
+
$plugin[$property] = !empty($details[$info]) ? $details[$info] : null;
|
60 |
+
}
|
61 |
+
|
62 |
+
$plugin['status'] = $this->getPluginStatus($basename);
|
63 |
+
|
64 |
+
$plugins[] = $plugin;
|
65 |
+
}
|
66 |
+
|
67 |
+
foreach ($mustUsePlugins as $basename => $details) {
|
68 |
+
$plugin = array(
|
69 |
+
'basename' => $basename,
|
70 |
+
'slug' => $this->getSlugFromBasename($basename),
|
71 |
+
);
|
72 |
+
|
73 |
+
foreach ($pluginInfo as $property => $info) {
|
74 |
+
$plugin[$property] = !empty($details[$info]) ? $details[$info] : null;
|
75 |
+
}
|
76 |
+
|
77 |
+
$plugin['status'] = self::STATUS_MUST_USE;
|
78 |
+
$plugins[] = $plugin;
|
79 |
+
}
|
80 |
+
|
81 |
+
foreach ($dropInPlugins as $basename => $details) {
|
82 |
+
$plugin = array(
|
83 |
+
'basename' => $basename,
|
84 |
+
'type' => self::STATUS_DROP_IN,
|
85 |
+
);
|
86 |
+
|
87 |
+
foreach ($pluginInfo as $property => $info) {
|
88 |
+
$plugin[$property] = !empty($details[$info]) ? $details[$info] : null;
|
89 |
+
}
|
90 |
+
|
91 |
+
$plugins[] = $plugin;
|
92 |
+
}
|
93 |
+
|
94 |
+
return $plugins;
|
95 |
+
}
|
96 |
+
|
97 |
+
private function getSlugFromBasename($file)
|
98 |
+
{
|
99 |
+
if (false === strpos($file, '/')) {
|
100 |
+
$slug = basename($file, '.php');
|
101 |
+
} else {
|
102 |
+
$slug = dirname($file);
|
103 |
+
}
|
104 |
+
|
105 |
+
return $slug;
|
106 |
+
}
|
107 |
+
|
108 |
+
private function getPluginStatus($file)
|
109 |
+
{
|
110 |
+
if ($this->context->isPluginActiveForNetwork($file)) {
|
111 |
+
return self::STATUS_ACTIVE_NETWORK;
|
112 |
+
} elseif ($this->context->isPluginActive($file)) {
|
113 |
+
return self::STATUS_ACTIVE;
|
114 |
+
}
|
115 |
+
|
116 |
+
return self::STATUS_INACTIVE;
|
117 |
+
}
|
118 |
+
}
|
src/MWP/WordPress/Provider/Theme.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_WordPress_Provider_Theme implements MWP_WordPress_Provider_Interface
|
12 |
+
{
|
13 |
+
const STATUS_ACTIVE = 'active';
|
14 |
+
|
15 |
+
const STATUS_INACTIVE = 'inactive';
|
16 |
+
|
17 |
+
const STATUS_INHERITED = 'inherited';
|
18 |
+
|
19 |
+
private $context;
|
20 |
+
|
21 |
+
public function __construct(MWP_WordPress_Context $context)
|
22 |
+
{
|
23 |
+
$this->context = $context;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function fetch()
|
27 |
+
{
|
28 |
+
$rawThemes = $this->context->getThemes();
|
29 |
+
$themeMap = array();
|
30 |
+
$themes = array();
|
31 |
+
|
32 |
+
$themeInfo = array(
|
33 |
+
'name' => 'Name',
|
34 |
+
// Absolute path to theme directory.
|
35 |
+
'root' => 'Theme Root',
|
36 |
+
// Absolute URL to theme directory.
|
37 |
+
'rootUri' => 'Theme Root URI',
|
38 |
+
|
39 |
+
'version' => 'Version',
|
40 |
+
'description' => 'Description',
|
41 |
+
'author' => 'Author',
|
42 |
+
'authorUri' => 'Author URI',
|
43 |
+
'status' => 'Status',
|
44 |
+
'parent' => 'Parent Theme',
|
45 |
+
);
|
46 |
+
|
47 |
+
foreach ($rawThemes as $rawTheme) {
|
48 |
+
$theme = array(
|
49 |
+
// Theme directory, followed by slash and slug, to keep it consistent with plugin info; ie. "twentytwelve/twentytwelve".
|
50 |
+
'basename' => $rawTheme['Template'].'/'.$rawTheme['Stylesheet'],
|
51 |
+
// A.k.a. "stylesheet", for some reason. This is the theme identifier; ie. "twentytwelve".
|
52 |
+
'slug' => $rawTheme['Stylesheet'],
|
53 |
+
);
|
54 |
+
|
55 |
+
foreach ($themeInfo as $property => $info) {
|
56 |
+
$theme[$property] = !empty($rawTheme[$info]) ? $rawTheme[$info] : null;
|
57 |
+
}
|
58 |
+
|
59 |
+
$themes[] = $theme;
|
60 |
+
$themeMap[$theme['name']] = $theme;
|
61 |
+
}
|
62 |
+
|
63 |
+
// Link parents and children.
|
64 |
+
foreach ($themes as $theme) {
|
65 |
+
if ($theme['parent'] !== null) {
|
66 |
+
$theme['parent'] = $themeMap[$theme['parent']];
|
67 |
+
$theme['parent']['children'][] = $theme['basename'];
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
$this->markInheritedThemes($themes);
|
72 |
+
|
73 |
+
return $themes;
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Marks inherited themes as such.
|
78 |
+
*
|
79 |
+
* @param $themes array[]
|
80 |
+
*/
|
81 |
+
private function markInheritedThemes(&$themes)
|
82 |
+
{
|
83 |
+
foreach ($themes as $theme) {
|
84 |
+
if ($theme['status'] !== self::STATUS_ACTIVE) {
|
85 |
+
continue;
|
86 |
+
}
|
87 |
+
while ($parent = $theme['parent']) {
|
88 |
+
$parent->status = self::STATUS_INHERITED;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
92 |
+
}
|
src/MWP/WordPress/Query/Abstract.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
abstract class MWP_WordPress_Query_Abstract implements MWP_WordPress_Query_Interface
|
12 |
+
{
|
13 |
+
|
14 |
+
protected $context;
|
15 |
+
|
16 |
+
public function __construct(MWP_WordPress_Context $context)
|
17 |
+
{
|
18 |
+
$this->context = $context;
|
19 |
+
}
|
20 |
+
|
21 |
+
protected function deserialize(array &$results, array $deserialize = array(), array $tryDeserialize = array())
|
22 |
+
{
|
23 |
+
if (count($results) == 0 || (count($deserialize) === 0 && count($tryDeserialize) === 0)) {
|
24 |
+
return;
|
25 |
+
}
|
26 |
+
|
27 |
+
foreach ($results as &$result) {
|
28 |
+
foreach ($deserialize as $field) {
|
29 |
+
$result[$field] = unserialize($result[$field]);
|
30 |
+
}
|
31 |
+
foreach ($tryDeserialize as $tryField) {
|
32 |
+
$result[$tryField] = $this->context->tryDeserialize($result[$tryField]);
|
33 |
+
}
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
protected function getDb()
|
38 |
+
{
|
39 |
+
return $this->context->getDb();
|
40 |
+
}
|
41 |
+
}
|
src/MWP/WordPress/Query/Comment.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_WordPress_Query_Comment extends MWP_WordPress_Query_Abstract
|
12 |
+
{
|
13 |
+
public function query(array $options = array())
|
14 |
+
{
|
15 |
+
$options += array(
|
16 |
+
'query' => null,
|
17 |
+
'prefixName' => '{{prefix}}',
|
18 |
+
'deserialize' => array(),
|
19 |
+
'tryDeserialize' => array(),
|
20 |
+
);
|
21 |
+
|
22 |
+
$query = str_replace($options['prefixName'], $this->getDb()->prefix, $options['query']);
|
23 |
+
$comments = $this->getDb()->get_results($query, ARRAY_A);
|
24 |
+
$this->deserialize($comments, $options['deserialize'], $options['tryDeserialize']);
|
25 |
+
|
26 |
+
return $comments;
|
27 |
+
}
|
28 |
+
}
|
src/MWP/WordPress/Query/Interface.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
interface MWP_WordPress_Query_Interface
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @param array $options
|
15 |
+
*
|
16 |
+
* @return array Array of results.
|
17 |
+
*/
|
18 |
+
public function query(array $options = array());
|
19 |
+
}
|
src/MWP/WordPress/Query/Post.php
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_WordPress_Query_Post extends MWP_WordPress_Query_Abstract
|
12 |
+
{
|
13 |
+
|
14 |
+
public function query(array $options = array())
|
15 |
+
{
|
16 |
+
$options += array(
|
17 |
+
'query' => null,
|
18 |
+
'prefixName' => '{{prefix}}',
|
19 |
+
'deserialize' => array(),
|
20 |
+
'tryDeserialize' => array(),
|
21 |
+
'featuredImage' => 'thumbnail',
|
22 |
+
'featuredImageHeight' => null,
|
23 |
+
'featuredImageWidth' => null,
|
24 |
+
'featuredImageCrop' => false,
|
25 |
+
);
|
26 |
+
|
27 |
+
$query = str_replace($options['prefixName'], $this->getDb()->prefix, $options['query']);
|
28 |
+
$posts = $this->getDb()->get_results($query, ARRAY_A);
|
29 |
+
$this->deserialize($posts, $options['deserialize'], $options['tryDeserialize']);
|
30 |
+
$this->fillFeaturedImages($posts, $options['featuredImage'], $options['featuredImageHeight'], $options['featuredImageWidth'], $options['featuredImageCrop']);
|
31 |
+
|
32 |
+
return $posts;
|
33 |
+
}
|
34 |
+
|
35 |
+
private function fillFeaturedImages(&$posts, $imageStyle, $imageHeight, $imageWidth, $crop)
|
36 |
+
{
|
37 |
+
if (count($posts) === 0 || !$imageStyle) {
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
if ($imageHeight || $imageWidth) {
|
42 |
+
$this->context->addImageStyle($imageStyle, $imageWidth, $imageHeight, $crop);
|
43 |
+
}
|
44 |
+
|
45 |
+
foreach ($posts as &$post) {
|
46 |
+
if (empty($post['featuredImageId'])) {
|
47 |
+
continue;
|
48 |
+
}
|
49 |
+
$info = $this->context->getImageInfo($post['featuredImageId'], $imageStyle);
|
50 |
+
if ($info === null) {
|
51 |
+
continue;
|
52 |
+
}
|
53 |
+
$post['featuredImage'] = $info['url'];
|
54 |
+
$post['featuredImageHeight'] = $info['height'];
|
55 |
+
$post['featuredImageWidth'] = $info['width'];
|
56 |
+
$post['featuredImageOriginal'] = $info['original'];
|
57 |
+
}
|
58 |
+
}
|
59 |
+
}
|
src/MWP/WordPress/Query/User.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_WordPress_Query_User extends MWP_WordPress_Query_Abstract
|
12 |
+
{
|
13 |
+
public function query(array $options = array())
|
14 |
+
{
|
15 |
+
$options += array(
|
16 |
+
'query' => null,
|
17 |
+
'prefixName' => '{{prefix}}',
|
18 |
+
'deserialize' => array(),
|
19 |
+
'tryDeserialize' => array(),
|
20 |
+
);
|
21 |
+
|
22 |
+
$query = str_replace($options['prefixName'], $this->getDb()->prefix, $options['query']);
|
23 |
+
$users = $this->getDb()->get_results($query, ARRAY_A);
|
24 |
+
$this->deserialize($users, $options['deserialize'], $options['tryDeserialize']);
|
25 |
+
|
26 |
+
return $users;
|
27 |
+
}
|
28 |
+
}
|
src/MWP/Worker/ActionResponse.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* @deprecated This is a hack used for legacy action calls.
|
13 |
+
*/
|
14 |
+
class MWP_Worker_ActionResponse extends Exception
|
15 |
+
{
|
16 |
+
|
17 |
+
private $data;
|
18 |
+
|
19 |
+
public function __construct($data)
|
20 |
+
{
|
21 |
+
$this->data = $data;
|
22 |
+
}
|
23 |
+
|
24 |
+
public function getData()
|
25 |
+
{
|
26 |
+
return $this->data;
|
27 |
+
}
|
28 |
+
}
|
src/MWP/Worker/Brand.php
ADDED
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Worker_Brand
|
12 |
+
{
|
13 |
+
|
14 |
+
const OPTION_NAME = 'mwp_worker_brand';
|
15 |
+
|
16 |
+
private $context;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @var bool
|
20 |
+
*/
|
21 |
+
private $active;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var string|null
|
25 |
+
*/
|
26 |
+
private $name;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @var string|null
|
30 |
+
*/
|
31 |
+
private $description;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* @var string|null
|
35 |
+
*/
|
36 |
+
private $author;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* @var string|null
|
40 |
+
*/
|
41 |
+
private $authorUrl;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Hide the plugin from the plugin list.
|
45 |
+
*
|
46 |
+
* @var bool
|
47 |
+
*/
|
48 |
+
private $hide = false;
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Prevent the user from updating/installing plugins and themes within the site. Also disable the plugin and theme code editor.
|
52 |
+
*
|
53 |
+
* @var bool
|
54 |
+
*/
|
55 |
+
private $disallowEdit = false;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* One of the CONTACT_TYPE_* constants.
|
59 |
+
*
|
60 |
+
* @var int
|
61 |
+
*/
|
62 |
+
private $contactType = 0;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Disable "Contact Support" modal.
|
66 |
+
*/
|
67 |
+
const CONTACT_TYPE_NONE = 0;
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Show both text ('textForClient') and the form that subits to the brand owner email address ('adminEmail').
|
71 |
+
*/
|
72 |
+
const CONTACT_TYPE_TEXT_PLUS_FORM = 1;
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Show only text ('textForClient').
|
76 |
+
*/
|
77 |
+
const CONTACT_TYPE_TEXT = 2;
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Text shown in the "Contact Support" dialog.
|
81 |
+
*
|
82 |
+
* @var string|null
|
83 |
+
*/
|
84 |
+
private $textForClient;
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Email address of the brand owner.
|
88 |
+
*
|
89 |
+
* @var string|null
|
90 |
+
*/
|
91 |
+
private $adminEmail;
|
92 |
+
|
93 |
+
public function __construct(MWP_WordPress_Context $context)
|
94 |
+
{
|
95 |
+
$this->context = $context;
|
96 |
+
$brand = $context->optionGet(self::OPTION_NAME);
|
97 |
+
|
98 |
+
if (!is_array($brand)) {
|
99 |
+
return;
|
100 |
+
}
|
101 |
+
|
102 |
+
$this->name = empty($brand['name']) ? null : $brand['name'];
|
103 |
+
$this->description = empty($brand['desc']) ? null : $brand['desc'];
|
104 |
+
$this->author = empty($brand['author']) ? null : $brand['author'];
|
105 |
+
$this->authorUrl = empty($brand['author_url']) ? null : $brand['author_url'];
|
106 |
+
$this->hide = isset($brand['hide']) ? $brand['hide'] : $this->hide;
|
107 |
+
// "Dissalow" [sic] edit .
|
108 |
+
$this->disallowEdit = isset($brand['dissalow_edit']) ? $brand['dissalow_edit'] : $this->disallowEdit;
|
109 |
+
$this->textForClient = empty($brand['text_for_client']) ? null : $brand['text_for_client'];
|
110 |
+
$this->contactType = isset($brand['email_or_link']) ? (int) $brand['email_or_link'] : self::CONTACT_TYPE_NONE;
|
111 |
+
$this->adminEmail = empty($brand['admin_email']) ? null : $brand['admin_email'];
|
112 |
+
|
113 |
+
$this->active = isset($brand['active']) ? $brand['active'] : (bool) ($this->name || $this->description || $this->author || $this->authorUrl || $this->hide || $this->disallowEdit || $this->contactType);
|
114 |
+
}
|
115 |
+
|
116 |
+
public function isActive()
|
117 |
+
{
|
118 |
+
return $this->active;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* @return null|string
|
123 |
+
*/
|
124 |
+
public function getName()
|
125 |
+
{
|
126 |
+
return $this->name;
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* @return null|string
|
131 |
+
*/
|
132 |
+
public function getDescription()
|
133 |
+
{
|
134 |
+
return $this->description;
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* @return null|string
|
139 |
+
*/
|
140 |
+
public function getAuthor()
|
141 |
+
{
|
142 |
+
return $this->author;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* @return null|string
|
147 |
+
*/
|
148 |
+
public function getAuthorUrl()
|
149 |
+
{
|
150 |
+
return $this->authorUrl;
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* @return boolean
|
155 |
+
*/
|
156 |
+
public function isHide()
|
157 |
+
{
|
158 |
+
return $this->hide;
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* @return boolean
|
163 |
+
*/
|
164 |
+
public function isDisallowEdit()
|
165 |
+
{
|
166 |
+
return $this->disallowEdit;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* @return int
|
171 |
+
*/
|
172 |
+
public function getContactType()
|
173 |
+
{
|
174 |
+
return $this->contactType;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* @return null|string
|
179 |
+
*/
|
180 |
+
public function getTextForClient()
|
181 |
+
{
|
182 |
+
return $this->textForClient;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* @return null|string
|
187 |
+
*/
|
188 |
+
public function getAdminEmail()
|
189 |
+
{
|
190 |
+
return $this->adminEmail;
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Active-record-style delete.
|
195 |
+
*/
|
196 |
+
public function delete()
|
197 |
+
{
|
198 |
+
$this->context->optionDelete(self::OPTION_NAME);
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Active-record-style update.
|
203 |
+
*
|
204 |
+
* @param array $brand
|
205 |
+
*/
|
206 |
+
public function update(array $brand)
|
207 |
+
{
|
208 |
+
$this->context->optionSet(self::OPTION_NAME, $brand);
|
209 |
+
}
|
210 |
+
}
|
src/MWP/Worker/Configuration.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Worker_Configuration
|
12 |
+
{
|
13 |
+
|
14 |
+
private $context;
|
15 |
+
|
16 |
+
public function __construct(MWP_WordPress_Context $context)
|
17 |
+
{
|
18 |
+
$this->context = $context;
|
19 |
+
}
|
20 |
+
|
21 |
+
public function getPublicKey()
|
22 |
+
{
|
23 |
+
return base64_decode($this->context->optionGet('_worker_public_key'));
|
24 |
+
}
|
25 |
+
|
26 |
+
public function setPublicKey($publicKey)
|
27 |
+
{
|
28 |
+
$this->context->optionSet('_worker_public_key', base64_encode($publicKey));
|
29 |
+
}
|
30 |
+
|
31 |
+
public function deletePublicKey()
|
32 |
+
{
|
33 |
+
$this->context->optionDelete('_worker_public_key');
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @return string
|
38 |
+
*
|
39 |
+
* @deprecated Use public key instead.
|
40 |
+
*/
|
41 |
+
public function getSecureKey()
|
42 |
+
{
|
43 |
+
return base64_decode($this->context->optionGet('_worker_nossl_key'));
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* @param $secureKey
|
48 |
+
*
|
49 |
+
* @deprecated Use public key instead.
|
50 |
+
*/
|
51 |
+
public function setSecureKey($secureKey)
|
52 |
+
{
|
53 |
+
$this->context->optionSet('_worker_nossl_key', base64_encode($secureKey));
|
54 |
+
}
|
55 |
+
|
56 |
+
public function deleteSecureKey()
|
57 |
+
{
|
58 |
+
$this->context->optionDelete('_worker_nossl_key');
|
59 |
+
}
|
60 |
+
}
|
src/MWP/Worker/Exception.php
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Worker_Exception extends Exception
|
12 |
+
{
|
13 |
+
const CONNECTION_PUBLIC_KEY_EXISTS = 10001;
|
14 |
+
const CONNECTION_PUBLIC_KEY_NOT_FOUND = 10010;
|
15 |
+
const CONNECTION_SIGNATURE_NOT_VALID = 10011;
|
16 |
+
const CONNECTION_SIGNATURE_EMPTY = 10018;
|
17 |
+
const OPENSSL_ENCRYPT_ERROR = 10002;
|
18 |
+
const OPENSSL_DECRYPT_ERROR = 10003;
|
19 |
+
const OPENSSL_VERIFY_ERROR = 10005;
|
20 |
+
const PHPSECLIB_ENCRYPT_ERROR = 10006;
|
21 |
+
const PHPSECLIB_DECRYPT_ERROR = 10007;
|
22 |
+
const PHPSECLIB_VERIFY_ERROR = 10009;
|
23 |
+
const NONCE_FORMAT_INVALID = 10012;
|
24 |
+
const NONCE_EXPIRED = 10013;
|
25 |
+
const NONCE_ALREADY_USED = 10014;
|
26 |
+
const AUTHENTICATION_NO_ADMIN_USER = 10015;
|
27 |
+
const AUTHENTICATION_MESSAGE_ID_EMPTY = 10016;
|
28 |
+
const AUTHENTICATION_PUBLIC_KEY_EMPTY = 10017;
|
29 |
+
const AUTHENTICATION_INVALID_SIGNATURE = 10019;
|
30 |
+
const ACTION_NOT_REGISTERED = 10020;
|
31 |
+
const CONNECTION_PUBLIC_KEY_NOT_PROVIDED = 10021;
|
32 |
+
const CONNECTION_VERIFICATION_TEST_FAILED = 10022;
|
33 |
+
const PHP_EVAL_ERROR = 10023;
|
34 |
+
const LEGACY_AUTHENTICATION_INVALID_SIGNATURE = 1024;
|
35 |
+
const LEGACY_AUTHENTICATION_KEY_EXISTS = 1025;
|
36 |
+
const AUTO_LOGIN_USERNAME_REQUIRED = 1026;
|
37 |
+
|
38 |
+
const GENERAL_ERROR = 10000;
|
39 |
+
|
40 |
+
static $codes = array();
|
41 |
+
|
42 |
+
protected $errorName;
|
43 |
+
|
44 |
+
protected $context;
|
45 |
+
|
46 |
+
public function __construct($code, $message = null, array $context = array())
|
47 |
+
{
|
48 |
+
$this->errorName = $this->getErrorNameForCode($code);
|
49 |
+
$this->context = $context;
|
50 |
+
|
51 |
+
if ($message === null) {
|
52 |
+
$message = sprintf('Error [%d]: %s', $code, $this->errorName);
|
53 |
+
}
|
54 |
+
|
55 |
+
parent::__construct($message, $code);
|
56 |
+
}
|
57 |
+
|
58 |
+
private function getErrorNameForCode($code)
|
59 |
+
{
|
60 |
+
if (count(self::$codes) === 0) {
|
61 |
+
$reflectionClass = new ReflectionClass(__CLASS__);
|
62 |
+
self::$codes = array_flip($reflectionClass->getConstants());
|
63 |
+
}
|
64 |
+
|
65 |
+
if (array_key_exists($code, self::$codes)) {
|
66 |
+
return self::$codes[$code];
|
67 |
+
}
|
68 |
+
|
69 |
+
return self::GENERAL_ERROR;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @return string
|
74 |
+
*/
|
75 |
+
public function getErrorName()
|
76 |
+
{
|
77 |
+
return $this->errorName;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* @return array
|
82 |
+
*/
|
83 |
+
public function getContext()
|
84 |
+
{
|
85 |
+
return $this->context;
|
86 |
+
}
|
87 |
+
}
|
src/MWP/Worker/Installer.php
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Worker_Installer
|
12 |
+
{
|
13 |
+
private $context;
|
14 |
+
|
15 |
+
private $loaderName;
|
16 |
+
|
17 |
+
private $initPath;
|
18 |
+
|
19 |
+
function __construct(MWP_Context_WordPress $context, $loaderName)
|
20 |
+
{
|
21 |
+
$this->context = $context;
|
22 |
+
$this->loaderName = $loaderName;
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Executed when the plugin is activated.
|
27 |
+
*
|
28 |
+
* @param boolean $networkWide
|
29 |
+
*
|
30 |
+
* @hook
|
31 |
+
* @link http://codex.wordpress.org/Function_Reference/register_activation_hook
|
32 |
+
*/
|
33 |
+
public function activate($networkWide = false)
|
34 |
+
{
|
35 |
+
try {
|
36 |
+
$this->registerMustUse();
|
37 |
+
$this->context->optionSet('mwp_loader', true);
|
38 |
+
} catch (MWP_Worker_Exception $e) {
|
39 |
+
$this->context->optionSet('mwp_loader_error', $e->getMessage());
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Executed when the plugin is deactivated.
|
45 |
+
*
|
46 |
+
* @hook
|
47 |
+
* @link http://codex.wordpress.org/Function_Reference/register_deactivation_hook
|
48 |
+
*/
|
49 |
+
public function deactivate()
|
50 |
+
{
|
51 |
+
$this->context->optionDelete('mwp_signer');
|
52 |
+
$this->context->optionDelete('mwp_algorithm');
|
53 |
+
$this->context->optionDelete('mwp_key');
|
54 |
+
$this->context->optionDelete('mwp_loader');
|
55 |
+
$this->context->optionDelete('mwp_loader_error');
|
56 |
+
$this->unregisterMustUse();
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Executed when the plugin is being uninstalled.
|
61 |
+
*
|
62 |
+
* @hook
|
63 |
+
* @link http://codex.wordpress.org/Function_Reference/register_uninstall_hook
|
64 |
+
*/
|
65 |
+
public function uninstall()
|
66 |
+
{
|
67 |
+
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Try to register as a "must use" plugin.
|
72 |
+
*
|
73 |
+
* @throws MWP_Worker_Exception
|
74 |
+
* @link http://codex.wordpress.org/Must_Use_Plugins
|
75 |
+
*/
|
76 |
+
public function registerMustUse()
|
77 |
+
{
|
78 |
+
$mustUsePluginDir = $this->context->getConstant('WPMU_PLUGIN_DIR');
|
79 |
+
$loaderPath = $mustUsePluginDir.'/'.$this->loaderName;
|
80 |
+
$pluginBasename = $this->context->getPluginBasename();
|
81 |
+
|
82 |
+
$loader = <<<EOF
|
83 |
+
<?php
|
84 |
+
|
85 |
+
/**
|
86 |
+
* This file is automatically generated by the MWP worker plugin and should be automatically deleted
|
87 |
+
* upon disabling or uninstalling it. It should require no modifications.
|
88 |
+
*
|
89 |
+
* Read about WordPress "must-use" plugins here http://codex.wordpress.org/Must_Use_Plugins
|
90 |
+
*/
|
91 |
+
|
92 |
+
if (file_exists(untrailingslashit(WP_PLUGIN_DIR).'/$pluginBasename')) {
|
93 |
+
\$mwp_wpmu = true;
|
94 |
+
include_once untrailingslashit(WP_PLUGIN_DIR).'/$pluginBasename';
|
95 |
+
}
|
96 |
+
|
97 |
+
EOF;
|
98 |
+
|
99 |
+
if (!is_dir($mustUsePluginDir)) {
|
100 |
+
$dirMade = @mkdir($mustUsePluginDir);
|
101 |
+
|
102 |
+
if (!$dirMade) {
|
103 |
+
$error = error_get_last();
|
104 |
+
throw new MWP_Worker_Exception(sprintf('Unable to create MWP loader directory: %s', $error['message']));
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
$loaderWritten = @file_put_contents($loaderPath, $loader);
|
109 |
+
|
110 |
+
if (!$loaderWritten) {
|
111 |
+
$error = error_get_last();
|
112 |
+
throw new MWP_Worker_Exception(sprintf('Unable to write MWP loader: %s', $error['message']));
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
public function unregisterMustUse()
|
117 |
+
{
|
118 |
+
$loaderFile = $this->context->getConstant('WPMU_PLUGIN_DIR').'/'.$this->loaderName;
|
119 |
+
|
120 |
+
if (file_exists($loaderFile)) {
|
121 |
+
unlink($loaderFile);
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* @return mixed
|
127 |
+
*/
|
128 |
+
public function getInitPath()
|
129 |
+
{
|
130 |
+
return $this->initPath;
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* @param mixed $initFile
|
135 |
+
*/
|
136 |
+
public function setInitPath($initFile)
|
137 |
+
{
|
138 |
+
$this->initPath = $initFile;
|
139 |
+
}
|
140 |
+
}
|
src/MWP/Worker/Kernel.php
ADDED
@@ -0,0 +1,203 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Class MWP_Worker_Kernel
|
13 |
+
*/
|
14 |
+
class MWP_Worker_Kernel
|
15 |
+
{
|
16 |
+
|
17 |
+
/**
|
18 |
+
* @var MWP_ServiceContainer_Interface
|
19 |
+
*/
|
20 |
+
private $container;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* @var Symfony_EventDispatcher_EventDispatcherInterface
|
24 |
+
*/
|
25 |
+
private $dispatcher;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @var MWP_Worker_RequestStack|null
|
29 |
+
*/
|
30 |
+
private $requestStack;
|
31 |
+
|
32 |
+
public function __construct(MWP_ServiceContainer_Interface $container)
|
33 |
+
{
|
34 |
+
$this->container = $container;
|
35 |
+
$this->dispatcher = $container->getEventDispatcher();
|
36 |
+
$this->requestStack = $container->getRequestStack();
|
37 |
+
// We will need master response callback for fatal error handling.
|
38 |
+
$this->responseCallback = $container->getResponseCallback();
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* @param MWP_Worker_Request $request
|
43 |
+
* @param callable $deferredCallback
|
44 |
+
* @param bool $catch
|
45 |
+
*
|
46 |
+
* @throws Exception
|
47 |
+
* @throws MWP_Worker_Exception
|
48 |
+
*/
|
49 |
+
public function handleRequest(MWP_Worker_Request $request, $deferredCallback, $catch = true)
|
50 |
+
{
|
51 |
+
$request->initialize();
|
52 |
+
$this->requestStack->push($request);
|
53 |
+
$this->responseCallback->set($deferredCallback);
|
54 |
+
$container = $this->getContainer();
|
55 |
+
$actionName = $request->getAction();
|
56 |
+
$params = $request->getParams();
|
57 |
+
$context = $container->getWordPressContext();
|
58 |
+
|
59 |
+
if (!$request->isMasterRequest()) {
|
60 |
+
// This is a public request. Allow the plugin to hook onto WordPress.
|
61 |
+
$publicRequestEvent = new MWP_Event_PublicRequest($request);
|
62 |
+
$this->dispatcher->dispatch(MWP_Event_Events::PUBLIC_REQUEST, $publicRequestEvent);
|
63 |
+
if ($publicRequestEvent->hasResponse()) {
|
64 |
+
call_user_func($deferredCallback, null, $publicRequestEvent->getResponse());
|
65 |
+
}
|
66 |
+
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
+
try {
|
71 |
+
// This is a master request. Allow early hooks to verify and do everything required with the request.
|
72 |
+
$masterRequestEvent = new MWP_Event_MasterRequest($request, $params);
|
73 |
+
$this->dispatcher->dispatch(MWP_Event_Events::MASTER_REQUEST, $masterRequestEvent);
|
74 |
+
if ($masterRequestEvent->hasResponse()) {
|
75 |
+
call_user_func($deferredCallback, null, $masterRequestEvent->getResponse());
|
76 |
+
|
77 |
+
return;
|
78 |
+
}
|
79 |
+
$params = $masterRequestEvent->getParams();
|
80 |
+
|
81 |
+
// Get action info.
|
82 |
+
$actionRegistry = $container->getActionRegistry();
|
83 |
+
$actionDefinition = $actionRegistry->getDefinition($actionName);
|
84 |
+
|
85 |
+
$callback = $actionDefinition->getCallback();
|
86 |
+
|
87 |
+
// If the callback is an array with two members (['ClassName, 'methodName']) and implements ContainerAware,
|
88 |
+
// inject the container before executing it.
|
89 |
+
if (is_array($callback) && is_string($callback[0])) {
|
90 |
+
$callback[0] = new $callback[0];
|
91 |
+
}
|
92 |
+
if (is_array($callback) && $callback[0] instanceof MWP_ServiceContainer_ContainerAwareInterface) {
|
93 |
+
$callbackObject = $callback[0];
|
94 |
+
/** @var MWP_ServiceContainer_ContainerAwareInterface $callbackObject */
|
95 |
+
$callbackObject->setContainer($container);
|
96 |
+
}
|
97 |
+
|
98 |
+
// Allow listeners to modify action parameters.
|
99 |
+
$actionRequestEvent = new MWP_Event_ActionRequest($request, $params);
|
100 |
+
$this->dispatcher->dispatch(MWP_Event_Events::ACTION_REQUEST, $actionRequestEvent);
|
101 |
+
$params = $actionRequestEvent->getParams();
|
102 |
+
|
103 |
+
// Check if the action call should be deferred.
|
104 |
+
$hookName = $actionDefinition->getOption('hook_name');
|
105 |
+
if ($hookName !== null && $deferredCallback !== null) {
|
106 |
+
$proxy = new MWP_WordPress_HookProxy(array($this, 'hookResponse'), $request, $callback, $params, $deferredCallback);
|
107 |
+
$context->addAction($hookName, $proxy->getCallable(), $actionDefinition->getOption('hook_priority'));
|
108 |
+
|
109 |
+
return;
|
110 |
+
}
|
111 |
+
|
112 |
+
try {
|
113 |
+
$data = call_user_func($callback, $params, $request);
|
114 |
+
} catch (MWP_Worker_ActionResponse $actionResponse) {
|
115 |
+
$data = $actionResponse->getData();
|
116 |
+
}
|
117 |
+
$response = $this->handleResponse($request, $params, $data);
|
118 |
+
call_user_func($deferredCallback, null, $response);
|
119 |
+
} catch (Exception $e) {
|
120 |
+
if (!$catch) {
|
121 |
+
throw $e;
|
122 |
+
}
|
123 |
+
|
124 |
+
$response = $this->handleException($request, $e);
|
125 |
+
call_user_func($deferredCallback, $e, $response);
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* @param MWP_Worker_Request $request
|
131 |
+
* @param array $params
|
132 |
+
* @param mixed $data
|
133 |
+
*
|
134 |
+
* @return MWP_Http_ResponseInterface
|
135 |
+
*
|
136 |
+
* @throws RuntimeException If the action response doesn't get converted to an HTTP response.
|
137 |
+
*/
|
138 |
+
private function handleResponse(MWP_Worker_Request $request, array $params, $data)
|
139 |
+
{
|
140 |
+
$actionResponseEvent = new MWP_Event_ActionResponse($request, $params, $data);
|
141 |
+
$this->dispatcher->dispatch(MWP_Event_Events::ACTION_RESPONSE, $actionResponseEvent);
|
142 |
+
|
143 |
+
if ($actionResponseEvent->getResponse() === null) {
|
144 |
+
throw new RuntimeException('Action response did not get converted to an HTTP response.');
|
145 |
+
}
|
146 |
+
|
147 |
+
return $actionResponseEvent->getResponse();
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* @param MWP_Worker_Request $request
|
152 |
+
* @param Exception $e
|
153 |
+
*
|
154 |
+
* @return MWP_Http_ResponseInterface|null
|
155 |
+
*/
|
156 |
+
private function handleException(MWP_Worker_Request $request, Exception $e)
|
157 |
+
{
|
158 |
+
$errorEvent = new MWP_Event_ActionException($request, $e);
|
159 |
+
$this->dispatcher->dispatch(MWP_Event_Events::ACTION_EXCEPTION, $errorEvent);
|
160 |
+
|
161 |
+
return $errorEvent->getResponse();
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Callback for deferred actions. Used when the action is not executed immediately, but after a WordPress action hook.
|
166 |
+
*
|
167 |
+
* @param MWP_Worker_Request $request
|
168 |
+
* @param callable $callback
|
169 |
+
* @param array $params
|
170 |
+
* @param callable $deferredCallback
|
171 |
+
*/
|
172 |
+
public function hookResponse(MWP_Worker_Request $request, $callback, array $params, $deferredCallback)
|
173 |
+
{
|
174 |
+
try {
|
175 |
+
try {
|
176 |
+
$data = call_user_func($callback, $params, $request);
|
177 |
+
} catch (MWP_Worker_ActionResponse $actionResponse) {
|
178 |
+
$data = $actionResponse->getData();
|
179 |
+
}
|
180 |
+
$response = $this->handleResponse($request, $params, $data);
|
181 |
+
call_user_func($deferredCallback, null, $response);
|
182 |
+
} catch (Exception $e) {
|
183 |
+
$response = $this->handleException($request, $e);
|
184 |
+
call_user_func($deferredCallback, $e, $response);
|
185 |
+
|
186 |
+
return;
|
187 |
+
}
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Returns the service container.
|
192 |
+
*
|
193 |
+
* @return MWP_ServiceContainer_Interface
|
194 |
+
*/
|
195 |
+
public function getContainer()
|
196 |
+
{
|
197 |
+
if ($this->container === null) {
|
198 |
+
throw new RuntimeException('Kernel is not booted');
|
199 |
+
}
|
200 |
+
|
201 |
+
return $this->container;
|
202 |
+
}
|
203 |
+
}
|
src/MWP/Worker/Request.php
ADDED
@@ -0,0 +1,332 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Class MWP_Worker_Request
|
13 |
+
*/
|
14 |
+
class MWP_Worker_Request
|
15 |
+
{
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Header that contains the name of the action to execute.
|
19 |
+
* Must be compliant with {@link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC 2616}
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
protected $actionHeaderName = 'MWP-Action';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Header that contains the ID of the action to execute.
|
27 |
+
* Must be compliant with {@link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC 2616}
|
28 |
+
*
|
29 |
+
* @var string
|
30 |
+
*/
|
31 |
+
protected $messageIdHeaderName = 'MWP-Message-ID';
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Header that contains message signature.
|
35 |
+
* Must be compliant with {@link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC 2616}
|
36 |
+
*
|
37 |
+
* @var string
|
38 |
+
*/
|
39 |
+
protected $signatureHeaderName = 'MWP-Signature';
|
40 |
+
|
41 |
+
protected $protocolVersionHeaderName = 'MWP-Protocol';
|
42 |
+
|
43 |
+
/**
|
44 |
+
* @var bool
|
45 |
+
*/
|
46 |
+
private $initialized = false;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* The GET parameters.
|
50 |
+
*
|
51 |
+
* @var array
|
52 |
+
*/
|
53 |
+
public $query;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* The POST parameters.
|
57 |
+
*
|
58 |
+
* @var array
|
59 |
+
*/
|
60 |
+
public $request;
|
61 |
+
|
62 |
+
/**
|
63 |
+
* The request attributes.
|
64 |
+
*
|
65 |
+
* @var array
|
66 |
+
*/
|
67 |
+
public $attributes;
|
68 |
+
|
69 |
+
/**
|
70 |
+
* The COOKIE parameters.
|
71 |
+
*
|
72 |
+
* @var array
|
73 |
+
*/
|
74 |
+
public $cookies;
|
75 |
+
|
76 |
+
/**
|
77 |
+
* The FILES parameters.
|
78 |
+
*
|
79 |
+
* @var array
|
80 |
+
*/
|
81 |
+
public $files;
|
82 |
+
|
83 |
+
/**
|
84 |
+
* The SERVER parameters.
|
85 |
+
*
|
86 |
+
* @var array
|
87 |
+
*/
|
88 |
+
public $server;
|
89 |
+
|
90 |
+
/**
|
91 |
+
* The raw request body data.
|
92 |
+
*
|
93 |
+
* @var string
|
94 |
+
*/
|
95 |
+
private $content;
|
96 |
+
|
97 |
+
private $method;
|
98 |
+
|
99 |
+
/**
|
100 |
+
* @param array $query The GET parameters.
|
101 |
+
* @param array $request The POST parameters.
|
102 |
+
* @param array $attributes The request attributes.
|
103 |
+
* @param array $cookies The COOKIE parameters.
|
104 |
+
* @param array $files The FILES parameters.
|
105 |
+
* @param array $server The SERVER parameters.
|
106 |
+
* @param null|string $content The raw request body data. If null, it will be lazy-loaded.
|
107 |
+
*/
|
108 |
+
public function __construct($query = array(), $request = array(), $attributes = array(), $cookies = array(), $files = array(), $server = array(), $content = null)
|
109 |
+
{
|
110 |
+
$this->query = $query;
|
111 |
+
$this->request = $request;
|
112 |
+
$this->attributes = $attributes;
|
113 |
+
$this->cookies = $cookies;
|
114 |
+
$this->files = $files;
|
115 |
+
$this->server = $server;
|
116 |
+
$this->content = $content;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Gets the request method.
|
121 |
+
*
|
122 |
+
* The method is always an uppercased string.
|
123 |
+
*
|
124 |
+
* @return string The request method
|
125 |
+
*/
|
126 |
+
public function getMethod()
|
127 |
+
{
|
128 |
+
if (null === $this->method) {
|
129 |
+
$this->method = isset($this->server['REQUEST_METHOD']) ? strtoupper($this->server['REQUEST_METHOD']) : 'GET';
|
130 |
+
}
|
131 |
+
|
132 |
+
return $this->method;
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Sets the request method.
|
137 |
+
*
|
138 |
+
* @param string $method
|
139 |
+
*/
|
140 |
+
public function setMethod($method)
|
141 |
+
{
|
142 |
+
$this->method = null;
|
143 |
+
$this->server['REQUEST_METHOD'] = $method;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* MWP_Worker factory.
|
148 |
+
*
|
149 |
+
* @return MWP_Worker_Request
|
150 |
+
*/
|
151 |
+
public static function createFromGlobals()
|
152 |
+
{
|
153 |
+
$request = new self($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER);
|
154 |
+
|
155 |
+
return $request;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* @throws RuntimeException If the request is already initialized.
|
160 |
+
*/
|
161 |
+
public function initialize()
|
162 |
+
{
|
163 |
+
if ($this->initialized) {
|
164 |
+
throw new RuntimeException('Request is already initialized.');
|
165 |
+
}
|
166 |
+
$this->initialized = true;
|
167 |
+
|
168 |
+
$this->attributes['action'] = $this->getHeader($this->actionHeaderName);
|
169 |
+
$this->attributes['id'] = $this->getHeader($this->messageIdHeaderName);
|
170 |
+
$this->attributes['signature'] = base64_decode($this->getHeader($this->signatureHeaderName));
|
171 |
+
$this->attributes['data'] = null;
|
172 |
+
$this->attributes['params'] = null;
|
173 |
+
$this->attributes['setting'] = null;
|
174 |
+
$this->attributes['user'] = null;
|
175 |
+
$this->attributes['authenticated'] = false;
|
176 |
+
$this->attributes['protocol'] = (int) $this->getHeader($this->protocolVersionHeaderName);
|
177 |
+
|
178 |
+
// Do we have {"params":{...}} inside of body?
|
179 |
+
if ($this->isMasterRequest() && is_array($data = json_decode($this->getContent(), true)) && array_key_exists('params', $data)) {
|
180 |
+
$this->attributes['data'] = $data;
|
181 |
+
$this->attributes['params'] = $data['params'];
|
182 |
+
$this->attributes['setting'] = array_key_exists('setting', $data) ? $data['setting'] : null;
|
183 |
+
$this->attributes['user'] = (array_key_exists('username', $data) && is_scalar($data['username'])) ? $data['username'] : null;
|
184 |
+
}
|
185 |
+
}
|
186 |
+
|
187 |
+
/**
|
188 |
+
* @return bool
|
189 |
+
*/
|
190 |
+
public function isInitialized()
|
191 |
+
{
|
192 |
+
return $this->initialized;
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* @param string $actionHeaderName
|
197 |
+
*/
|
198 |
+
public function setActionHeaderName($actionHeaderName)
|
199 |
+
{
|
200 |
+
$this->actionHeaderName = $actionHeaderName;
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* @param string $signatureHeaderName
|
205 |
+
*/
|
206 |
+
public function setSignatureHeaderName($signatureHeaderName)
|
207 |
+
{
|
208 |
+
$this->signatureHeaderName = $signatureHeaderName;
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* @param bool $asResource If true, a resource will be returned
|
213 |
+
*
|
214 |
+
* @return resource|string The request body content or a resource to read the body stream.
|
215 |
+
* @throws RuntimeException If attempting to call the method again after getting it as a resource previously.
|
216 |
+
*/
|
217 |
+
public function getContent($asResource = false)
|
218 |
+
{
|
219 |
+
if (false === $this->content || (true === $asResource && null !== $this->content)) {
|
220 |
+
throw new RuntimeException('getContent() can only be called once when using the resource return type.');
|
221 |
+
}
|
222 |
+
|
223 |
+
if (true === $asResource) {
|
224 |
+
$this->content = false;
|
225 |
+
|
226 |
+
return fopen('php://input', 'rb');
|
227 |
+
}
|
228 |
+
|
229 |
+
if (null === $this->content) {
|
230 |
+
$this->content = file_get_contents('php://input');
|
231 |
+
}
|
232 |
+
|
233 |
+
return $this->content;
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* @return bool Whether the current request is sent by the master script.
|
238 |
+
*/
|
239 |
+
public function isMasterRequest()
|
240 |
+
{
|
241 |
+
if ($this->getMethod() !== 'POST') {
|
242 |
+
return false;
|
243 |
+
}
|
244 |
+
|
245 |
+
$masterHeader = $this->getHeader($this->actionHeaderName);
|
246 |
+
if ($masterHeader === null) {
|
247 |
+
return false;
|
248 |
+
}
|
249 |
+
|
250 |
+
return true;
|
251 |
+
}
|
252 |
+
|
253 |
+
/**
|
254 |
+
* @return null|string
|
255 |
+
*/
|
256 |
+
public function getAction()
|
257 |
+
{
|
258 |
+
return $this->attributes['action'];
|
259 |
+
}
|
260 |
+
|
261 |
+
/**
|
262 |
+
* @return null|string
|
263 |
+
*/
|
264 |
+
public function getSignature()
|
265 |
+
{
|
266 |
+
return $this->attributes['signature'];
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* @return null|string
|
271 |
+
*/
|
272 |
+
public function getUsername()
|
273 |
+
{
|
274 |
+
return $this->attributes['user'];
|
275 |
+
}
|
276 |
+
|
277 |
+
public function getNonce()
|
278 |
+
{
|
279 |
+
return $this->attributes['id'];
|
280 |
+
}
|
281 |
+
|
282 |
+
public function getParams()
|
283 |
+
{
|
284 |
+
return $this->attributes['params'];
|
285 |
+
}
|
286 |
+
|
287 |
+
public function getData()
|
288 |
+
{
|
289 |
+
return $this->attributes['data'];
|
290 |
+
}
|
291 |
+
|
292 |
+
public function getSetting()
|
293 |
+
{
|
294 |
+
return $this->attributes['setting'];
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* @param string $header Header name.
|
299 |
+
*
|
300 |
+
* @return string|null Header content, or null if it doesn't exist.
|
301 |
+
*/
|
302 |
+
public function getHeader($header)
|
303 |
+
{
|
304 |
+
$header = 'HTTP_'.strtoupper(str_replace('-', '_', $header));
|
305 |
+
if (isset($this->server[$header])) {
|
306 |
+
return $this->server[$header];
|
307 |
+
}
|
308 |
+
|
309 |
+
return null;
|
310 |
+
}
|
311 |
+
|
312 |
+
/**
|
313 |
+
* @return bool
|
314 |
+
*/
|
315 |
+
public function isAuthenticated()
|
316 |
+
{
|
317 |
+
return $this->attributes['authenticated'];
|
318 |
+
}
|
319 |
+
|
320 |
+
public function setAuthenticated($isAuthenticated)
|
321 |
+
{
|
322 |
+
$this->attributes['authenticated'] = $isAuthenticated;
|
323 |
+
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* @return int
|
327 |
+
*/
|
328 |
+
public function getProtocol()
|
329 |
+
{
|
330 |
+
return $this->attributes['protocol'];
|
331 |
+
}
|
332 |
+
}
|
src/MWP/Worker/RequestStack.php
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
class MWP_Worker_RequestStack
|
12 |
+
{
|
13 |
+
/**
|
14 |
+
* @var MWP_Worker_Request[]
|
15 |
+
*/
|
16 |
+
private $requests = array();
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Pushes a Request on the stack.
|
20 |
+
*
|
21 |
+
* This method should generally not be called directly as the stack
|
22 |
+
* management should be taken care of by the application itself.
|
23 |
+
*/
|
24 |
+
public function push(MWP_Worker_Request $request)
|
25 |
+
{
|
26 |
+
$this->requests[] = $request;
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Pops the current request from the stack.
|
31 |
+
*
|
32 |
+
* This operation lets the current request go out of scope.
|
33 |
+
*
|
34 |
+
* This method should generally not be called directly as the stack
|
35 |
+
* management should be taken care of by the application itself.
|
36 |
+
*
|
37 |
+
* @return MWP_Worker_Request|null
|
38 |
+
*/
|
39 |
+
public function pop()
|
40 |
+
{
|
41 |
+
if (!$this->requests) {
|
42 |
+
return null;
|
43 |
+
}
|
44 |
+
|
45 |
+
return array_pop($this->requests);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @return MWP_Worker_Request|null
|
50 |
+
*/
|
51 |
+
public function getCurrentRequest()
|
52 |
+
{
|
53 |
+
$lastRequest = end($this->requests);
|
54 |
+
|
55 |
+
return $lastRequest ? $lastRequest : null;
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Gets the master Request.
|
60 |
+
*
|
61 |
+
* @return MWP_Worker_Request|null
|
62 |
+
*/
|
63 |
+
public function getMasterRequest()
|
64 |
+
{
|
65 |
+
if (!$this->requests) {
|
66 |
+
return null;
|
67 |
+
}
|
68 |
+
|
69 |
+
return $this->requests[0];
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Returns the parent request of the current.
|
74 |
+
*
|
75 |
+
* If current Request is the master request, it returns null.
|
76 |
+
*
|
77 |
+
* @return MWP_Worker_Request|null
|
78 |
+
*/
|
79 |
+
public function getParentRequest()
|
80 |
+
{
|
81 |
+
$pos = count($this->requests) - 2;
|
82 |
+
|
83 |
+
if (!isset($this->requests[$pos])) {
|
84 |
+
return null;
|
85 |
+
}
|
86 |
+
|
87 |
+
return $this->requests[$pos];
|
88 |
+
}
|
89 |
+
}
|
src/MWP/Worker/ResponseCallback.php
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* This file is part of the ManageWP Worker plugin.
|
4 |
+
*
|
5 |
+
* (c) ManageWP LLC <contact@managewp.com>
|
6 |
+
*
|
7 |
+
* For the full copyright and license information, please view the LICENSE
|
8 |
+
* file that was distributed with this source code.
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Wrapper for master response callback. We need it to be able to invoke it from the fatal error handler.
|
13 |
+
*/
|
14 |
+
class MWP_Worker_ResponseCallback
|
15 |
+
{
|
16 |
+
|
17 |
+
private $callback;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* @return callable|null
|
21 |
+
*/
|
22 |
+
public function get()
|
23 |
+
{
|
24 |
+
return $this->callback;
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* @param callable|null $callback
|
29 |
+
*/
|
30 |
+
public function set($callback = null)
|
31 |
+
{
|
32 |
+
$this->callback = $callback;
|
33 |
+
}
|
34 |
+
}
|
src/Monolog/ErrorHandler.php
CHANGED
@@ -169,10 +169,8 @@ class Monolog_ErrorHandler
|
|
169 |
if (!(error_reporting() & $code)) {
|
170 |
return;
|
171 |
}
|
172 |
-
|
173 |
$level = isset($this->errorLevelMap[$code]) ? $this->errorLevelMap[$code] : Monolog_Psr_LogLevel::CRITICAL;
|
174 |
-
$this->logger->log($level, self::codeToString($code).': '.$message, array('file' => $file, 'line' => $line));
|
175 |
-
|
176 |
if ($this->previousErrorHandler === true) {
|
177 |
return false;
|
178 |
} elseif ($this->previousErrorHandler) {
|
@@ -187,12 +185,12 @@ class Monolog_ErrorHandler
|
|
187 |
{
|
188 |
$this->reservedMemory = null;
|
189 |
|
190 |
-
$lastError
|
191 |
if ($lastError && in_array($lastError['type'], self::$fatalErrors)) {
|
192 |
$this->logger->log(
|
193 |
$this->fatalLevel === null ? Monolog_Psr_LogLevel::ALERT : $this->fatalLevel,
|
194 |
'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'],
|
195 |
-
array('file' => $lastError['file'], 'line' => $lastError['line'])
|
196 |
);
|
197 |
}
|
198 |
}
|
169 |
if (!(error_reporting() & $code)) {
|
170 |
return;
|
171 |
}
|
|
|
172 |
$level = isset($this->errorLevelMap[$code]) ? $this->errorLevelMap[$code] : Monolog_Psr_LogLevel::CRITICAL;
|
173 |
+
$this->logger->log($level, self::codeToString($code).': '.$message, array('code' => $code, 'message' => $message, 'file' => $file, 'line' => $line));
|
|
|
174 |
if ($this->previousErrorHandler === true) {
|
175 |
return false;
|
176 |
} elseif ($this->previousErrorHandler) {
|
185 |
{
|
186 |
$this->reservedMemory = null;
|
187 |
|
188 |
+
$lastError = error_get_last();
|
189 |
if ($lastError && in_array($lastError['type'], self::$fatalErrors)) {
|
190 |
$this->logger->log(
|
191 |
$this->fatalLevel === null ? Monolog_Psr_LogLevel::ALERT : $this->fatalLevel,
|
192 |
'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'],
|
193 |
+
array('code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'])
|
194 |
);
|
195 |
}
|
196 |
}
|
src/PHPSecLib/openssl.cnf
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
# minimalist openssl.cnf file for use with phpseclib
|
2 |
-
|
3 |
-
HOME = .
|
4 |
-
RANDFILE = $ENV::HOME/.rnd
|
5 |
-
|
6 |
-
[ v3_ca ]
|
1 |
+
# minimalist openssl.cnf file for use with phpseclib
|
2 |
+
|
3 |
+
HOME = .
|
4 |
+
RANDFILE = $ENV::HOME/.rnd
|
5 |
+
|
6 |
+
[ v3_ca ]
|
src/Symfony/EventDispatcher/Event.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Event is the base class for classes containing event data.
|
14 |
+
*
|
15 |
+
* This class contains no event data. It is used by events that do not pass
|
16 |
+
* state information to an event handler when an event is raised.
|
17 |
+
*
|
18 |
+
* You can call the method stopPropagation() to abort the execution of
|
19 |
+
* further listeners in your event listener.
|
20 |
+
*
|
21 |
+
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
22 |
+
* @author Jonathan Wage <jonwage@gmail.com>
|
23 |
+
* @author Roman Borschel <roman@code-factory.org>
|
24 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
25 |
+
*
|
26 |
+
* @api
|
27 |
+
*/
|
28 |
+
class Symfony_EventDispatcher_Event
|
29 |
+
{
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var bool Whether no further event listeners should be triggered
|
33 |
+
*/
|
34 |
+
private $propagationStopped = false;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Returns whether further event listeners should be triggered.
|
38 |
+
*
|
39 |
+
* @see Symfony_EventDispatcher_Event::stopPropagation
|
40 |
+
* @return bool Whether propagation was already stopped for this event.
|
41 |
+
*
|
42 |
+
* @api
|
43 |
+
*/
|
44 |
+
public function isPropagationStopped()
|
45 |
+
{
|
46 |
+
return $this->propagationStopped;
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Stops the propagation of the event to further event listeners.
|
51 |
+
*
|
52 |
+
* If multiple event listeners are connected to the same event, no
|
53 |
+
* further event listener will be triggered once any trigger calls
|
54 |
+
* stopPropagation().
|
55 |
+
*
|
56 |
+
* @api
|
57 |
+
*/
|
58 |
+
public function stopPropagation()
|
59 |
+
{
|
60 |
+
$this->propagationStopped = true;
|
61 |
+
}
|
62 |
+
}
|
src/Symfony/EventDispatcher/EventDispatcher.php
ADDED
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
/**
|
13 |
+
* The EventDispatcherInterface is the central point of Symfony's event listener system.
|
14 |
+
*
|
15 |
+
* Listeners are registered on the manager and events are dispatched through the
|
16 |
+
* manager.
|
17 |
+
*
|
18 |
+
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
19 |
+
* @author Jonathan Wage <jonwage@gmail.com>
|
20 |
+
* @author Roman Borschel <roman@code-factory.org>
|
21 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
22 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
23 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
24 |
+
* @author Jordan Alliot <jordan.alliot@gmail.com>
|
25 |
+
*
|
26 |
+
* @api
|
27 |
+
*/
|
28 |
+
class Symfony_EventDispatcher_EventDispatcher implements Symfony_EventDispatcher_EventDispatcherInterface
|
29 |
+
{
|
30 |
+
|
31 |
+
private $listeners = array();
|
32 |
+
|
33 |
+
private $sorted = array();
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @see EventDispatcherInterface::dispatch
|
37 |
+
*
|
38 |
+
* @api
|
39 |
+
*/
|
40 |
+
public function dispatch($eventName, Symfony_EventDispatcher_Event $event = null)
|
41 |
+
{
|
42 |
+
if (null === $event) {
|
43 |
+
$event = new Symfony_EventDispatcher_Event();
|
44 |
+
}
|
45 |
+
if (!isset($this->listeners[$eventName])) {
|
46 |
+
return $event;
|
47 |
+
}
|
48 |
+
$this->doDispatch($this->getListeners($eventName), $eventName, $event);
|
49 |
+
|
50 |
+
return $event;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* @see EventDispatcherInterface::getListeners
|
55 |
+
*/
|
56 |
+
public function getListeners($eventName = null)
|
57 |
+
{
|
58 |
+
if (null !== $eventName) {
|
59 |
+
if (!isset($this->sorted[$eventName])) {
|
60 |
+
$this->sortListeners($eventName);
|
61 |
+
}
|
62 |
+
|
63 |
+
return $this->sorted[$eventName];
|
64 |
+
}
|
65 |
+
foreach (array_keys($this->listeners) as $eventName) {
|
66 |
+
if (!isset($this->sorted[$eventName])) {
|
67 |
+
$this->sortListeners($eventName);
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
return array_filter($this->sorted);
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @see EventDispatcherInterface::hasListeners
|
76 |
+
*/
|
77 |
+
public function hasListeners($eventName = null)
|
78 |
+
{
|
79 |
+
return (bool) count($this->getListeners($eventName));
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* @see EventDispatcherInterface::addListener
|
84 |
+
*
|
85 |
+
* @api
|
86 |
+
*/
|
87 |
+
public function addListener($eventName, $listener, $priority = 0)
|
88 |
+
{
|
89 |
+
$this->listeners[$eventName][$priority][] = $listener;
|
90 |
+
unset($this->sorted[$eventName]);
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* @see EventDispatcherInterface::removeListener
|
95 |
+
*/
|
96 |
+
public function removeListener($eventName, $listener)
|
97 |
+
{
|
98 |
+
if (!isset($this->listeners[$eventName])) {
|
99 |
+
return;
|
100 |
+
}
|
101 |
+
foreach ($this->listeners[$eventName] as $priority => $listeners) {
|
102 |
+
if (false !== ($key = array_search($listener, $listeners, true))) {
|
103 |
+
unset($this->listeners[$eventName][$priority][$key], $this->sorted[$eventName]);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* @see Symfony_EventDispatcher_EventSubscriberInterface::addSubscriber
|
110 |
+
*
|
111 |
+
* @api
|
112 |
+
*/
|
113 |
+
public function addSubscriber(Symfony_EventDispatcher_EventSubscriberInterface $subscriber)
|
114 |
+
{
|
115 |
+
foreach ($subscriber->getSubscribedEvents() as $eventName => $params) {
|
116 |
+
if (is_string($params)) {
|
117 |
+
$this->addListener($eventName, array($subscriber, $params));
|
118 |
+
} elseif (is_string($params[0])) {
|
119 |
+
$this->addListener($eventName, array($subscriber, $params[0]), isset($params[1]) ? $params[1] : 0);
|
120 |
+
} else {
|
121 |
+
foreach ($params as $listener) {
|
122 |
+
$this->addListener($eventName, array($subscriber, $listener[0]), isset($listener[1]) ? $listener[1] : 0);
|
123 |
+
}
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* @see Symfony_EventDispatcher_EventSubscriberInterface::removeSubscriber
|
130 |
+
*/
|
131 |
+
public function removeSubscriber(Symfony_EventDispatcher_EventSubscriberInterface $subscriber)
|
132 |
+
{
|
133 |
+
foreach ($subscriber->getSubscribedEvents() as $eventName => $params) {
|
134 |
+
if (is_array($params) && is_array($params[0])) {
|
135 |
+
foreach ($params as $listener) {
|
136 |
+
$this->removeListener($eventName, array($subscriber, $listener[0]));
|
137 |
+
}
|
138 |
+
} else {
|
139 |
+
$this->removeListener($eventName, array($subscriber, is_string($params) ? $params : $params[0]));
|
140 |
+
}
|
141 |
+
}
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Triggers the listeners of an event.
|
146 |
+
*
|
147 |
+
* This method can be overridden to add functionality that is executed
|
148 |
+
* for each listener.
|
149 |
+
*
|
150 |
+
* @param callable[] $listeners The event listeners.
|
151 |
+
* @param string $eventName The name of the event to dispatch.
|
152 |
+
* @param Symfony_EventDispatcher_Event $event The event object to pass to the event handlers/listeners.
|
153 |
+
*/
|
154 |
+
protected function doDispatch($listeners, $eventName, Symfony_EventDispatcher_Event $event)
|
155 |
+
{
|
156 |
+
foreach ($listeners as $listener) {
|
157 |
+
call_user_func($listener, $event, $eventName, $this);
|
158 |
+
if ($event->isPropagationStopped()) {
|
159 |
+
break;
|
160 |
+
}
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Sorts the internal list of listeners for the given event by priority.
|
166 |
+
*
|
167 |
+
* @param string $eventName The name of the event.
|
168 |
+
*/
|
169 |
+
private function sortListeners($eventName)
|
170 |
+
{
|
171 |
+
$this->sorted[$eventName] = array();
|
172 |
+
if (isset($this->listeners[$eventName])) {
|
173 |
+
krsort($this->listeners[$eventName]);
|
174 |
+
$this->sorted[$eventName] = call_user_func_array('array_merge', $this->listeners[$eventName]);
|
175 |
+
}
|
176 |
+
}
|
177 |
+
}
|
src/Symfony/EventDispatcher/EventDispatcherInterface.php
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
/**
|
13 |
+
* The EventDispatcherInterface is the central point of Symfony's event listener system.
|
14 |
+
* Listeners are registered on the manager and events are dispatched through the
|
15 |
+
* manager.
|
16 |
+
*
|
17 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
18 |
+
*
|
19 |
+
* @api
|
20 |
+
*/
|
21 |
+
interface Symfony_EventDispatcher_EventDispatcherInterface
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Dispatches an event to all registered listeners.
|
25 |
+
*
|
26 |
+
* @param string $eventName The name of the event to dispatch. The name of
|
27 |
+
* the event is the name of the method that is
|
28 |
+
* invoked on listeners.
|
29 |
+
* @param Symfony_EventDispatcher_Event $event The event to pass to the event handlers/listeners.
|
30 |
+
* If not supplied, an empty Event instance is created.
|
31 |
+
*
|
32 |
+
* @return Symfony_EventDispatcher_Event
|
33 |
+
*
|
34 |
+
* @api
|
35 |
+
*/
|
36 |
+
public function dispatch($eventName, Symfony_EventDispatcher_Event $event = null);
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Adds an event listener that listens on the specified events.
|
40 |
+
*
|
41 |
+
* @param string $eventName The event to listen on
|
42 |
+
* @param callable $listener The listener
|
43 |
+
* @param int $priority The higher this value, the earlier an event
|
44 |
+
* listener will be triggered in the chain (defaults to 0)
|
45 |
+
*
|
46 |
+
* @api
|
47 |
+
*/
|
48 |
+
public function addListener($eventName, $listener, $priority = 0);
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Adds an event subscriber.
|
52 |
+
*
|
53 |
+
* The subscriber is asked for all the events he is
|
54 |
+
* interested in and added as a listener for these events.
|
55 |
+
*
|
56 |
+
* @param Symfony_EventDispatcher_EventSubscriberInterface $subscriber The subscriber.
|
57 |
+
*
|
58 |
+
* @api
|
59 |
+
*/
|
60 |
+
public function addSubscriber(Symfony_EventDispatcher_EventSubscriberInterface $subscriber);
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Removes an event listener from the specified events.
|
64 |
+
*
|
65 |
+
* @param string $eventName The event to remove a listener from
|
66 |
+
* @param callable $listener The listener to remove
|
67 |
+
*/
|
68 |
+
public function removeListener($eventName, $listener);
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Removes an event subscriber.
|
72 |
+
*
|
73 |
+
* @param Symfony_EventDispatcher_EventSubscriberInterface $subscriber The subscriber
|
74 |
+
*/
|
75 |
+
public function removeSubscriber(Symfony_EventDispatcher_EventSubscriberInterface $subscriber);
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Gets the listeners of a specific event or all listeners.
|
79 |
+
*
|
80 |
+
* @param string $eventName The name of the event
|
81 |
+
*
|
82 |
+
* @return array The event listeners for the specified event, or all event listeners by event name
|
83 |
+
*/
|
84 |
+
public function getListeners($eventName = null);
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Checks whether an event has any registered listeners.
|
88 |
+
*
|
89 |
+
* @param string $eventName The name of the event
|
90 |
+
*
|
91 |
+
* @return bool true if the specified event has any listeners, false otherwise
|
92 |
+
*/
|
93 |
+
public function hasListeners($eventName = null);
|
94 |
+
}
|
src/Symfony/EventDispatcher/EventSubscriberInterface.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
/**
|
13 |
+
* An EventSubscriber knows himself what events he is interested in.
|
14 |
+
* If an EventSubscriber is added to an EventDispatcherInterface, the manager invokes
|
15 |
+
* {@link getSubscribedEvents} and registers the subscriber as a listener for all
|
16 |
+
* returned events.
|
17 |
+
*
|
18 |
+
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
19 |
+
* @author Jonathan Wage <jonwage@gmail.com>
|
20 |
+
* @author Roman Borschel <roman@code-factory.org>
|
21 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
22 |
+
*
|
23 |
+
* @api
|
24 |
+
*/
|
25 |
+
interface Symfony_EventDispatcher_EventSubscriberInterface
|
26 |
+
{
|
27 |
+
/**
|
28 |
+
* Returns an array of event names this subscriber wants to listen to.
|
29 |
+
*
|
30 |
+
* The array keys are event names and the value can be:
|
31 |
+
*
|
32 |
+
* * The method name to call (priority defaults to 0)
|
33 |
+
* * An array composed of the method name to call and the priority
|
34 |
+
* * An array of arrays composed of the method names to call and respective
|
35 |
+
* priorities, or 0 if unset
|
36 |
+
*
|
37 |
+
* For instance:
|
38 |
+
*
|
39 |
+
* * array('eventName' => 'methodName')
|
40 |
+
* * array('eventName' => array('methodName', $priority))
|
41 |
+
* * array('eventName' => array(array('methodName1', $priority), array('methodName2'))
|
42 |
+
*
|
43 |
+
* @return array The event names to listen to
|
44 |
+
*
|
45 |
+
* @api
|
46 |
+
*/
|
47 |
+
public static function getSubscribedEvents();
|
48 |
+
}
|
version
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
|
2 |
-
|
1 |
+
4.0.1
|
2 |
+
2015-01-18 00:00:00
|