Version Description
- Added a new feature that will alert you by email if there were an important security update available for your themes, plugins or WordPress. It is enabled by default and can be found in the "Event Notifications > Security updates > Send me an alert whenever an important security update is available for a plugin, theme or WordPress".
- Fixed an issue with the "Block user accounts creation" policy: when using the WordPress "Lost your password" link, some users were wrongly blocked.
- On old PHP installations (<5.4.8), it is now possible to update the security rules: NinjaFirewall will not verify their digital signature anymore because of the missing OPENSSL_ALGO_SHA256 algo required by the openssl_verify function.
- Fixed "Date Range Processed" wrong timezone in the daily report.
- The contextual help was reformatted and is now easier to read.
- Added a dismissible welcome banner to the "Dashboard" page to explain how to use the contextual help.
- Many small fixes and adjustments.
- WP+ Edition (Premium): Updated IPv4/IPv6/ASN GeoIP databases.
Download this release
Release Info
Developer | nintechnet |
Plugin | NinjaFirewall (WP Edition) |
Version | 4.1 |
Comparing to | |
See all releases |
Code changes from version 4.0.4 to 4.1
- images/ns_integration.png +0 -0
- images/welcome.png +0 -0
- languages/ninjafirewall-fr_FR.mo +0 -0
- languages/ninjafirewall-fr_FR.po +1597 -973
- languages/ninjafirewall.pot +881 -840
- lib/dashboard.php +25 -2
- lib/dashboard_about.php +1 -1
- lib/event_notifications.php +26 -10
- lib/event_updates.php +258 -0
- lib/events.php +247 -0
- lib/firewall.php +0 -87
- lib/firewall_options.php +1 -1
- lib/firewall_policies.php +27 -4
- lib/help.php +171 -178
- lib/init_update.php +16 -0
- lib/install.php +39 -19
- lib/install_default.php +24 -2
- lib/login_protection.php +1 -1
- lib/logs.php +1 -1
- lib/logs_firewall_log.php +1 -1
- lib/logs_live_log.php +1 -1
- lib/monitoring.php +2 -2
- lib/monitoring_file_check.php +7 -3
- lib/security_rules_update.php +27 -7
- lib/thickbox.php +22 -17
- lib/utils.php +72 -124
- lib/wpplus.php +1 -1
- ninjafirewall.php +25 -10
- readme.txt +34 -6
- static/chart.min.js +2 -2
- static/ninjafirewall.css +4 -1
- static/ninjafirewall.js +24 -5
- uninstall.php +18 -11
images/ns_integration.png
CHANGED
Binary file
|
images/welcome.png
ADDED
Binary file
|
languages/ninjafirewall-fr_FR.mo
CHANGED
Binary file
|
languages/ninjafirewall-fr_FR.po
CHANGED
@@ -4,8 +4,8 @@ msgid ""
|
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Stable (latest release)\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ninjafirewall\n"
|
7 |
-
"POT-Creation-Date:
|
8 |
-
"PO-Revision-Date:
|
9 |
"Last-Translator: NinTechNet <contact@nintechnet.com>\n"
|
10 |
"Language-Team: NinTechNet <nintechnet.com>\n"
|
11 |
"Language: fr_FR\n"
|
@@ -16,7 +16,7 @@ msgstr ""
|
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
18 |
|
19 |
-
#: lib/anti_malware.php:24 ninjafirewall.php:
|
20 |
msgid "Anti-Malware"
|
21 |
msgstr "Anti-Malware"
|
22 |
|
@@ -92,7 +92,7 @@ msgstr "Oops! Le mode Full WAF n'est pas encore activé."
|
|
92 |
msgid "NinjaFirewall (WP Edition)"
|
93 |
msgstr "NinjaFirewall (WP Edition)"
|
94 |
|
95 |
-
#: lib/dashboard.php:120 ninjafirewall.php:
|
96 |
msgid "Dashboard"
|
97 |
msgstr "Tableau de Bord"
|
98 |
|
@@ -104,11 +104,34 @@ msgstr "Statistiques"
|
|
104 |
msgid "About..."
|
105 |
msgstr "À Propos..."
|
106 |
|
107 |
-
#: lib/dashboard.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
msgid "Firewall Dashboard"
|
109 |
msgstr "Tableau de Bord du Pare-feu"
|
110 |
|
111 |
-
#: lib/dashboard.php:
|
112 |
msgid ""
|
113 |
"It seems that you may have another instance of NinjaFirewall running in a "
|
114 |
"parent directory. Make sure to follow these instructions:"
|
@@ -116,7 +139,7 @@ msgstr ""
|
|
116 |
"Il semble qu'une autre instance de NinjaFirewall est installée dans un "
|
117 |
"répertoire parent. Assurez-vous de suivre ces instructions:"
|
118 |
|
119 |
-
#: lib/dashboard.php:
|
120 |
msgid ""
|
121 |
"Temporarily disable the firewall in the parent folder by renaming its PHP "
|
122 |
"INI or .htaccess file."
|
@@ -124,11 +147,11 @@ msgstr ""
|
|
124 |
"Désactivez temporairement le pare-feu dans le répertoire parent en renommant "
|
125 |
"son fichier PHP INI ou .htaccess."
|
126 |
|
127 |
-
#: lib/dashboard.php:
|
128 |
msgid "Install NinjaFirewall on this site in Full WAF mode."
|
129 |
msgstr "Installez NinjaFirewall sur ce site, en mode Full WAF."
|
130 |
|
131 |
-
#: lib/dashboard.php:
|
132 |
msgid ""
|
133 |
"Restore the PHP INI or .htaccess in the parent folder to re-enable the "
|
134 |
"firewall."
|
@@ -136,34 +159,34 @@ msgstr ""
|
|
136 |
"Restaurez le fichier PHP INI ou .htaccess dans le dossier parent pour "
|
137 |
"réactiver le pare-feu."
|
138 |
|
139 |
-
#: lib/dashboard.php:
|
140 |
msgid "Unknown error"
|
141 |
msgstr "Erreur inconnue"
|
142 |
|
143 |
-
#: lib/dashboard.php:
|
144 |
msgid "Firewall"
|
145 |
msgstr "Pare-feu"
|
146 |
|
147 |
-
#: lib/dashboard.php:
|
148 |
#: lib/login_protection.php:203 lib/logs_live_log.php:101
|
149 |
-
#: lib/monitoring_file_guard.php:70 lib/security_rules_update.php:
|
150 |
msgid "Enabled"
|
151 |
msgstr "Activé"
|
152 |
|
153 |
-
#: lib/dashboard.php:
|
154 |
msgid "Mode"
|
155 |
msgstr "Mode"
|
156 |
|
157 |
-
#: lib/dashboard.php:
|
158 |
#, php-format
|
159 |
msgid "NinjaFirewall is running in %s mode."
|
160 |
msgstr "NinjaFirewall fonctionne en mode %s."
|
161 |
|
162 |
-
#: lib/dashboard.php:
|
163 |
msgid "WordPress WAF"
|
164 |
msgstr "WordPress WAF"
|
165 |
|
166 |
-
#: lib/dashboard.php:
|
167 |
#, php-format
|
168 |
msgid ""
|
169 |
"For better protection, <a %s>click here</a> to enable its Full WAF mode."
|
@@ -171,55 +194,59 @@ msgstr ""
|
|
171 |
"Pour une meilleure protection, <a %s>cliquez ici</a> pour activer son mode "
|
172 |
"Full WAF."
|
173 |
|
174 |
-
#: lib/dashboard.php:
|
175 |
msgid "Click to install NinjaFirewall in Full WAF mode."
|
176 |
msgstr "Cliquez pour installer NinjaFirewall en mode Full WAF."
|
177 |
|
178 |
-
#: lib/dashboard.php:
|
179 |
msgid "Full WAF"
|
180 |
msgstr "Full WAF"
|
181 |
|
182 |
-
#: lib/dashboard.php:
|
183 |
msgid "Debugging mode"
|
184 |
msgstr "Mode débogage"
|
185 |
|
186 |
-
#: lib/dashboard.php:
|
187 |
msgid "Enabled."
|
188 |
msgstr "Activé."
|
189 |
|
190 |
-
#: lib/dashboard.php:
|
191 |
msgid "Click here to turn Debugging Mode off"
|
192 |
msgstr "Cliquez ici pour désactiver le mode Débogage"
|
193 |
|
194 |
-
#: lib/dashboard.php:
|
195 |
msgid "Edition"
|
196 |
msgstr "Édition"
|
197 |
|
198 |
-
#: lib/dashboard.php:
|
199 |
-
msgid "
|
200 |
-
|
|
|
|
|
|
|
|
|
201 |
|
202 |
-
#: lib/dashboard.php:
|
203 |
msgid "Version"
|
204 |
msgstr "Version"
|
205 |
|
206 |
-
#: lib/dashboard.php:
|
207 |
msgid "Security rules:"
|
208 |
msgstr "Règles de sécurité :"
|
209 |
|
210 |
-
#: lib/dashboard.php:
|
211 |
msgid "PHP SAPI"
|
212 |
msgstr "PHP SAPI"
|
213 |
|
214 |
-
#: lib/dashboard.php:
|
215 |
msgid "Updates"
|
216 |
msgstr "Mises à Jour"
|
217 |
|
218 |
-
#: lib/dashboard.php:
|
219 |
msgid "Security rules updates are disabled."
|
220 |
msgstr "La mise à jour automatique des règles de sécurité est désactivée."
|
221 |
|
222 |
-
#: lib/dashboard.php:
|
223 |
msgid ""
|
224 |
"If you want your blog to be protected against the latest threats, enable "
|
225 |
"automatic security rules updates."
|
@@ -227,11 +254,11 @@ msgstr ""
|
|
227 |
"Pour garder votre WordPress protégé contre les dernières vulnérabilités, "
|
228 |
"pensez à l'activer."
|
229 |
|
230 |
-
#: lib/dashboard.php:
|
231 |
msgid "Admin user"
|
232 |
msgstr "Administrateur"
|
233 |
|
234 |
-
#: lib/dashboard.php:
|
235 |
#, php-format
|
236 |
msgid ""
|
237 |
"You are not whitelisted. Ensure that the \"Do not block WordPress "
|
@@ -244,23 +271,23 @@ msgstr ""
|
|
244 |
"\"%s\">Politiques du Pare-feu</a>, sinon vous pourriez être bloqué par le "
|
245 |
"pare-feu lorsque vous travaillez depuis votre Tableau de bord."
|
246 |
|
247 |
-
#: lib/dashboard.php:
|
248 |
msgid "You are whitelisted by the firewall."
|
249 |
msgstr "Vous êtes dans la liste blanche du pare-feu."
|
250 |
|
251 |
-
#: lib/dashboard.php:
|
252 |
msgid "Restrictions"
|
253 |
msgstr "Restrictions"
|
254 |
|
255 |
-
#: lib/dashboard.php:
|
256 |
msgid "Access to NinjaFirewall is restricted to specific users."
|
257 |
msgstr "L'accès à NinjaFirewall est restreint à certains utilisateurs."
|
258 |
|
259 |
-
#: lib/dashboard.php:
|
260 |
msgid "User session"
|
261 |
msgstr "Session utilisateur"
|
262 |
|
263 |
-
#: lib/dashboard.php:
|
264 |
msgid ""
|
265 |
"It seems that the user session set by NinjaFirewall was not found by the "
|
266 |
"firewall script."
|
@@ -268,7 +295,7 @@ msgstr ""
|
|
268 |
"Il semble que la session d'utilisateur définie par NinjaFirewall n'a pas été "
|
269 |
"trouvé par le script du pare-feu."
|
270 |
|
271 |
-
#: lib/dashboard.php:
|
272 |
#, php-format
|
273 |
msgid ""
|
274 |
"the public key is invalid. Please <a href=\"%s\">check your configuration</"
|
@@ -277,18 +304,18 @@ msgstr ""
|
|
277 |
"la clé publique est invalide. Veuillez vérifier <a href=\"%s\">votre "
|
278 |
"configuration</a>."
|
279 |
|
280 |
-
#: lib/dashboard.php:
|
281 |
msgid "No IP address restriction."
|
282 |
msgstr "Aucune restriction d'accès par adresse IP."
|
283 |
|
284 |
-
#: lib/dashboard.php:
|
285 |
#, php-format
|
286 |
msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
|
287 |
msgstr ""
|
288 |
"L'adresse IP %s est autorisée à accéder au journal du pare-feu de "
|
289 |
"NinjaFirewall."
|
290 |
|
291 |
-
#: lib/dashboard.php:
|
292 |
#, php-format
|
293 |
msgid ""
|
294 |
"the whitelisted IP is not valid. Please <a href=\"%s\">check your "
|
@@ -297,26 +324,26 @@ msgstr ""
|
|
297 |
"l'adresse IP est invalide. Veuillez vérifier <a href=\"%s\">votre "
|
298 |
"configuration</a>."
|
299 |
|
300 |
-
#: lib/dashboard.php:
|
301 |
#: lib/wpplus.php:170
|
302 |
msgid "Centralized Logging"
|
303 |
msgstr "Centralisation des Logs"
|
304 |
|
305 |
-
#: lib/dashboard.php:
|
306 |
#, php-format
|
307 |
msgid "Error: %s"
|
308 |
msgstr "Erreur : %s"
|
309 |
|
310 |
-
#: lib/dashboard.php:
|
311 |
msgid "Source IP"
|
312 |
msgstr "IP source"
|
313 |
|
314 |
-
#: lib/dashboard.php:
|
315 |
#, php-format
|
316 |
msgid "You have a private IP : %s"
|
317 |
msgstr "Vous avez l'adresse IP d'un réseau privé : %s"
|
318 |
|
319 |
-
#: lib/dashboard.php:
|
320 |
#, php-format
|
321 |
msgid ""
|
322 |
"If your site is behind a reverse proxy or a load balancer, ensure that you "
|
@@ -328,11 +355,11 @@ msgstr ""
|
|
328 |
"la bonne adresse IP, sinon utilisez le fichier de configuration %s de "
|
329 |
"NinjaFirewall. "
|
330 |
|
331 |
-
#: lib/dashboard.php:
|
332 |
msgid "CDN detection"
|
333 |
msgstr "Détection CDN"
|
334 |
|
335 |
-
#: lib/dashboard.php:
|
336 |
#, php-format
|
337 |
msgid ""
|
338 |
"%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
|
@@ -343,7 +370,7 @@ msgstr ""
|
|
343 |
"vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
|
344 |
"adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
|
345 |
|
346 |
-
#: lib/dashboard.php:
|
347 |
#, php-format
|
348 |
msgid ""
|
349 |
"%s detected: you seem to be using Incapsula CDN services. Ensure that you "
|
@@ -354,32 +381,32 @@ msgstr ""
|
|
354 |
"vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
|
355 |
"adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
|
356 |
|
357 |
-
#: lib/dashboard.php:
|
358 |
msgid "Log dir"
|
359 |
msgstr "Répertoire du Journal"
|
360 |
|
361 |
-
#: lib/dashboard.php:
|
362 |
#, php-format
|
363 |
msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
|
364 |
msgstr ""
|
365 |
"Le répertoire %s est en lecture seule ! Veuillez changer ses permissions "
|
366 |
"(0777 ou équivalent)."
|
367 |
|
368 |
-
#: lib/dashboard.php:
|
369 |
msgid "Optional configuration file"
|
370 |
msgstr "Fichier de configuration"
|
371 |
|
372 |
-
#: lib/dashboard.php:
|
373 |
msgid "MySQLi link identifier"
|
374 |
msgstr "Identifiant de lien MySQLi"
|
375 |
|
376 |
-
#: lib/dashboard.php:
|
377 |
msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
|
378 |
msgstr ""
|
379 |
"Un identifiant de lien MySQLi a été détecté dans votre fichier <code>."
|
380 |
"htninja</code>."
|
381 |
|
382 |
-
#: lib/dashboard.php:
|
383 |
msgid "Help & configuration"
|
384 |
msgstr "Aide & configuration"
|
385 |
|
@@ -395,7 +422,7 @@ msgstr ""
|
|
395 |
"Soyez informé des dernières vulnérabilités dans les extensions et thèmes de "
|
396 |
"WordPress :"
|
397 |
|
398 |
-
#: lib/dashboard_about.php:31 lib/help.php:
|
399 |
msgid "GDPR Compliance"
|
400 |
msgstr "Conformité RGPD"
|
401 |
|
@@ -465,7 +492,7 @@ msgstr "Moyen"
|
|
465 |
msgid "Select monthly stats to view..."
|
466 |
msgstr "Sélectionnez les statistiques à afficher"
|
467 |
|
468 |
-
#: lib/event_notifications.php:34 lib/help.php:
|
469 |
msgid "Event Notifications"
|
470 |
msgstr "Notifications d'Événement"
|
471 |
|
@@ -481,7 +508,8 @@ msgstr "Les modifications ont été enregistrées."
|
|
481 |
msgid "WordPress admin dashboard"
|
482 |
msgstr "Connexion"
|
483 |
|
484 |
-
#: lib/event_notifications.php:55 lib/event_notifications.php:
|
|
|
485 |
msgid "Send me an alert whenever"
|
486 |
msgstr "Envoyer une alerte quand"
|
487 |
|
@@ -558,11 +586,23 @@ msgstr "WordPress"
|
|
558 |
msgid "Updates WordPress (default)"
|
559 |
msgstr "Met à jour WordPress (défaut)"
|
560 |
|
561 |
-
#: lib/event_notifications.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
562 |
msgid "Administrator account"
|
563 |
msgstr "Compte administrateur"
|
564 |
|
565 |
-
#: lib/event_notifications.php:
|
566 |
msgid ""
|
567 |
"An administrator account is created, modified or deleted in the database "
|
568 |
"(default)"
|
@@ -570,21 +610,15 @@ msgstr ""
|
|
570 |
"Un compte Administrateur est crée, modifié ou supprimé dans la base de "
|
571 |
"données (défaut)"
|
572 |
|
573 |
-
#: lib/event_notifications.php:
|
574 |
-
msgid "A user attempts to gain administrative privileges (default)"
|
575 |
-
msgstr ""
|
576 |
-
"Un utilisateur a essayé d'élever ses privilèges pour devenir administrateur "
|
577 |
-
"du blog (défaut)"
|
578 |
-
|
579 |
-
#: lib/event_notifications.php:134
|
580 |
msgid "Daily report"
|
581 |
msgstr "Rapport quotidien"
|
582 |
|
583 |
-
#: lib/event_notifications.php:
|
584 |
msgid "Send me a daily activity report"
|
585 |
msgstr "Envoyer un rapport d'activité quotidien"
|
586 |
|
587 |
-
#: lib/event_notifications.php:
|
588 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
589 |
#: lib/firewall_policies.php:25 lib/login_protection.php:309
|
590 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
@@ -592,7 +626,7 @@ msgstr "Envoyer un rapport d'activité quotidien"
|
|
592 |
msgid "Yes"
|
593 |
msgstr "Oui"
|
594 |
|
595 |
-
#: lib/event_notifications.php:
|
596 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
597 |
#: lib/firewall_policies.php:26 lib/login_protection.php:309
|
598 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
@@ -600,55 +634,55 @@ msgstr "Oui"
|
|
600 |
msgid "No"
|
601 |
msgstr "Non"
|
602 |
|
603 |
-
#: lib/event_notifications.php:
|
604 |
msgid "Log"
|
605 |
msgstr "Journal"
|
606 |
|
607 |
-
#: lib/event_notifications.php:
|
608 |
msgid "Write all events to the firewall log"
|
609 |
msgstr "Enregistrer les événements dans le journal du pare-feu"
|
610 |
|
611 |
-
#: lib/event_notifications.php:
|
612 |
msgid "PHP backtrace"
|
613 |
msgstr "Pile d'exécution de PHP"
|
614 |
|
615 |
-
#: lib/event_notifications.php:
|
616 |
msgid "Attach a PHP backtrace to important notifications"
|
617 |
msgstr ""
|
618 |
"Ajouter aux notifications importantes la pile d'exécution de PHP en pièce "
|
619 |
"jointe"
|
620 |
|
621 |
-
#: lib/event_notifications.php:
|
622 |
msgid "Disable backtrace"
|
623 |
msgstr "Désactiver la pile d'exécution"
|
624 |
|
625 |
-
#: lib/event_notifications.php:
|
626 |
msgid "Low verbosity"
|
627 |
msgstr "Faible verbosité"
|
628 |
|
629 |
-
#: lib/event_notifications.php:
|
630 |
msgid "Medium verbosity (default)"
|
631 |
msgstr "Verbosité moyenne (par défaut)"
|
632 |
|
633 |
-
#: lib/event_notifications.php:
|
634 |
msgid "High verbosity"
|
635 |
msgstr "Verbosité élevée"
|
636 |
|
637 |
-
#: lib/event_notifications.php:
|
638 |
#, php-format
|
639 |
msgid "<a href=\"%s\">Consult our blog</a> for more info."
|
640 |
msgstr ""
|
641 |
"<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
|
642 |
|
643 |
-
#: lib/event_notifications.php:
|
644 |
msgid "Contact email"
|
645 |
msgstr "Adresse e-mail du contact"
|
646 |
|
647 |
-
#: lib/event_notifications.php:
|
648 |
msgid "Alerts should be sent to"
|
649 |
msgstr "Envoyer les alertes à"
|
650 |
|
651 |
-
#: lib/event_notifications.php:
|
652 |
msgid ""
|
653 |
"Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
|
654 |
"alice@example.org</code>)."
|
@@ -656,60 +690,60 @@ msgstr ""
|
|
656 |
"Plusieurs destinataires doivent être séparés par des virgules (par ex. "
|
657 |
"<code>joe@example.org,alice@example.org</code>)."
|
658 |
|
659 |
-
#: lib/event_notifications.php:
|
660 |
msgid "Only to me, the Super Admin"
|
661 |
msgstr "Moi uniquement, le Super Admin"
|
662 |
|
663 |
-
#: lib/event_notifications.php:
|
664 |
msgid "default"
|
665 |
msgstr "défaut"
|
666 |
|
667 |
-
#: lib/event_notifications.php:
|
668 |
msgid "To the administrator of the site where originated the alert"
|
669 |
msgstr "L'Administrateur du site d’où provient l'alerte"
|
670 |
|
671 |
-
#: lib/event_notifications.php:
|
672 |
msgid "Other(s):"
|
673 |
msgstr "Autre(s) :"
|
674 |
|
675 |
-
#: lib/event_notifications.php:
|
676 |
msgid "Save Event Notifications"
|
677 |
msgstr "Sauvegarder les options"
|
678 |
|
679 |
-
#: lib/event_notifications.php:
|
680 |
msgid "[NinjaFirewall] Daily Activity Report"
|
681 |
msgstr "[NinjaFirewall] Rapport d'activité quotidien"
|
682 |
|
683 |
-
#: lib/event_notifications.php:
|
684 |
#, php-format
|
685 |
msgid "Daily activity report for: %s"
|
686 |
msgstr "Rapport d'activité quotidien pour : %s"
|
687 |
|
688 |
-
#: lib/event_notifications.php:
|
689 |
msgid "Date Range Processed: Yesterday"
|
690 |
msgstr "Plage de date traitée : Hier"
|
691 |
|
692 |
-
#: lib/event_notifications.php:
|
693 |
msgid "Blocked threats:"
|
694 |
msgstr "Menaces bloquées :"
|
695 |
|
696 |
-
#: lib/event_notifications.php:
|
697 |
msgid "critical:"
|
698 |
msgstr "Critique :"
|
699 |
|
700 |
-
#: lib/event_notifications.php:
|
701 |
msgid "high:"
|
702 |
msgstr "Élevé :"
|
703 |
|
704 |
-
#: lib/event_notifications.php:
|
705 |
msgid "medium:"
|
706 |
msgstr "Moyen :"
|
707 |
|
708 |
-
#: lib/event_notifications.php:
|
709 |
msgid "Blocked brute-force attacks:"
|
710 |
msgstr "Attaques par force brute bloquées :"
|
711 |
|
712 |
-
#: lib/event_notifications.php:
|
713 |
msgid ""
|
714 |
"This notification can be turned off from NinjaFirewall \"Event Notifications"
|
715 |
"\" page."
|
@@ -717,16 +751,17 @@ msgstr ""
|
|
717 |
"Cette notification peut être désactivée depuis la page \"Notifications "
|
718 |
"d’Événement\" de NinjaFirewall."
|
719 |
|
720 |
-
#: lib/event_notifications.php:
|
721 |
-
#: lib/
|
722 |
-
#: lib/
|
723 |
msgid "Support forum:"
|
724 |
msgstr "Forum :"
|
725 |
|
726 |
-
#: lib/event_notifications.php:
|
727 |
-
#: lib/
|
728 |
-
#: lib/
|
729 |
-
#: lib/utils.php:
|
|
|
730 |
#, php-format
|
731 |
msgid ""
|
732 |
"Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
|
@@ -735,7 +770,134 @@ msgstr ""
|
|
735 |
"Besoin de plus de sécurité ? Venez découvrir NinjaFirewall (WP+ Edition), "
|
736 |
"une version encore plus musclée de notre pare-feu applicatif : %s "
|
737 |
|
738 |
-
#: lib/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
739 |
msgid "Firewall Options"
|
740 |
msgstr "Options du Pare-feu"
|
741 |
|
@@ -745,7 +907,7 @@ msgstr "Pare-feu"
|
|
745 |
|
746 |
#: lib/firewall_options.php:64 lib/login_protection.php:203
|
747 |
#: lib/logs_live_log.php:101 lib/monitoring_file_guard.php:70
|
748 |
-
#: lib/security_rules_update.php:
|
749 |
msgid "Disabled"
|
750 |
msgstr "Désactivé"
|
751 |
|
@@ -794,7 +956,7 @@ msgstr ""
|
|
794 |
"Ne s'applique pas aux adresses IP privées, ni à la <a href=\"%s\">Page de "
|
795 |
"Connexion</a>."
|
796 |
|
797 |
-
#: lib/firewall_options.php:128
|
798 |
msgid "Blocked user message"
|
799 |
msgstr "Message pour les utilisateurs bloqués"
|
800 |
|
@@ -875,8 +1037,7 @@ msgstr ""
|
|
875 |
msgid "[NinjaFirewall] Alert: Firewall is disabled"
|
876 |
msgstr "[NinjaFirewall] Alerte : Le pare-feu a été désactivé"
|
877 |
|
878 |
-
#: lib/firewall_options.php:501 lib/firewall_options.php:503
|
879 |
-
#: lib/utils.php:736
|
880 |
msgid "-Blog :"
|
881 |
msgstr "- Blog :"
|
882 |
|
@@ -905,15 +1066,15 @@ msgstr ""
|
|
905 |
"Quelqu'un a importé une nouvelle configuration qui a modifié tous les "
|
906 |
"paramètres du pare-feu :"
|
907 |
|
908 |
-
#: lib/firewall_options.php:520
|
909 |
msgid "-User :"
|
910 |
msgstr "- Nom :"
|
911 |
|
912 |
-
#: lib/firewall_options.php:521
|
913 |
msgid "-IP :"
|
914 |
msgstr "- IP :"
|
915 |
|
916 |
-
#: lib/firewall_options.php:522
|
917 |
msgid "-Date :"
|
918 |
msgstr "- Date :"
|
919 |
|
@@ -925,7 +1086,7 @@ msgstr ""
|
|
925 |
"Cette option ne peut être activée que lorsque NinjaFirewall fonctionne en "
|
926 |
"mode %s."
|
927 |
|
928 |
-
#: lib/firewall_policies.php:62
|
929 |
msgid "Firewall Policies"
|
930 |
msgstr "Politiques du Pare-feu"
|
931 |
|
@@ -937,15 +1098,15 @@ msgstr "Les valeurs par défaut ont été restaurées."
|
|
937 |
msgid "No action taken."
|
938 |
msgstr "Aucune mesure prise."
|
939 |
|
940 |
-
#: lib/firewall_policies.php:85 lib/help.php:
|
941 |
msgid "Basic Policies"
|
942 |
msgstr "Politiques de base"
|
943 |
|
944 |
-
#: lib/firewall_policies.php:86 lib/help.php:
|
945 |
msgid "Intermediate Policies"
|
946 |
msgstr "Politiques intermédiaires"
|
947 |
|
948 |
-
#: lib/firewall_policies.php:87 lib/help.php:
|
949 |
msgid "Advanced Policies"
|
950 |
msgstr "Politiques avancées"
|
951 |
|
@@ -965,11 +1126,11 @@ msgstr "Trafic HTTP uniquement"
|
|
965 |
msgid "HTTPS traffic only"
|
966 |
msgstr "Trafic HTTPS uniquement"
|
967 |
|
968 |
-
#: lib/firewall_policies.php:141 lib/help.php:
|
969 |
msgid "Uploads"
|
970 |
msgstr "Téléchargements"
|
971 |
|
972 |
-
#: lib/firewall_policies.php:144
|
973 |
msgid "File Uploads"
|
974 |
msgstr "Autoriser les téléchargements (uploads)"
|
975 |
|
@@ -985,7 +1146,7 @@ msgstr "(défaut)"
|
|
985 |
msgid "Disallow uploads"
|
986 |
msgstr "Interdire"
|
987 |
|
988 |
-
#: lib/firewall_policies.php:152
|
989 |
msgid "Sanitise filenames"
|
990 |
msgstr "Nettoyer le nom des fichiers"
|
991 |
|
@@ -993,12 +1154,12 @@ msgstr "Nettoyer le nom des fichiers"
|
|
993 |
msgid "substitution character:"
|
994 |
msgstr "caractère de substitution :"
|
995 |
|
996 |
-
#: lib/firewall_policies.php:
|
997 |
msgid "Block direct access to any PHP file located in one of these directories"
|
998 |
msgstr ""
|
999 |
"Bloquer l'accès direct à un fichier PHP situé dans l'un de ces répertoires"
|
1000 |
|
1001 |
-
#: lib/firewall_policies.php:
|
1002 |
msgid ""
|
1003 |
"NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
|
1004 |
"this option is enabled."
|
@@ -1006,7 +1167,7 @@ msgstr ""
|
|
1006 |
"NinjaFirewall ne bloquera pas l'accès à l'éditeur WYSIWYG TinyMCE même si "
|
1007 |
"cette option est activée."
|
1008 |
|
1009 |
-
#: lib/firewall_policies.php:
|
1010 |
msgid ""
|
1011 |
"Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
|
1012 |
"by your visitors, we recommend to enable this option."
|
@@ -1015,29 +1176,42 @@ msgstr ""
|
|
1015 |
"pouvant être consultés par vos visiteurs, nous vous recommandons d'activer "
|
1016 |
"cette option."
|
1017 |
|
1018 |
-
#: lib/firewall_policies.php:
|
1019 |
msgid "General"
|
1020 |
msgstr "Général"
|
1021 |
|
1022 |
-
#: lib/firewall_policies.php:
|
1023 |
msgid "Block attempts to modify important WordPress settings"
|
1024 |
msgstr ""
|
1025 |
"Bloquer les tentatives de modification des paramètres importants de WordPress"
|
1026 |
|
1027 |
-
#: lib/firewall_policies.php:
|
1028 |
msgid "Block user accounts creation"
|
1029 |
msgstr "Bloquer la création de comptes utilisateur"
|
1030 |
|
1031 |
-
#: lib/firewall_policies.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1032 |
msgid "WordPress AJAX"
|
1033 |
msgstr "WordPress AJAX"
|
1034 |
|
1035 |
-
#: lib/firewall_policies.php:
|
1036 |
msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
|
1037 |
msgstr ""
|
1038 |
"Proteger <code>admin-ajax.php</code> contre les bots et scanners malveillants"
|
1039 |
|
1040 |
-
#: lib/firewall_policies.php:
|
1041 |
#, php-format
|
1042 |
msgid ""
|
1043 |
"Your server IP (%s), localhost and private IP addresses will not be affected "
|
@@ -1046,43 +1220,43 @@ msgstr ""
|
|
1046 |
"L'adresse IP de votre serveur (%s), localhost et toute adresse IP privée ne "
|
1047 |
"seront pas affectées par cette politique."
|
1048 |
|
1049 |
-
#: lib/firewall_policies.php:
|
1050 |
msgid "Protect against username enumeration"
|
1051 |
msgstr "Protéger contre l'énumération des comptes utilisateurs"
|
1052 |
|
1053 |
-
#: lib/firewall_policies.php:
|
1054 |
msgid "Through the author archives"
|
1055 |
msgstr "Via la page d'archive d'un auteur"
|
1056 |
|
1057 |
-
#: lib/firewall_policies.php:
|
1058 |
msgid "Through the login page"
|
1059 |
msgstr "Via la page de connexion"
|
1060 |
|
1061 |
-
#: lib/firewall_policies.php:
|
1062 |
msgid "Through the WordPress REST API"
|
1063 |
msgstr "Via l'API REST de WordPress"
|
1064 |
|
1065 |
-
#: lib/firewall_policies.php:
|
1066 |
msgid "WordPress REST API"
|
1067 |
msgstr "API REST de WordPress"
|
1068 |
|
1069 |
-
#: lib/firewall_policies.php:
|
1070 |
msgid "Block any access to the API"
|
1071 |
msgstr "Bloquer tout accès à l'API"
|
1072 |
|
1073 |
-
#: lib/firewall_policies.php:
|
1074 |
msgid "WordPress XML-RPC API"
|
1075 |
msgstr "API XML-RPC de WordPress"
|
1076 |
|
1077 |
-
#: lib/firewall_policies.php:
|
1078 |
msgid "Block <code>system.multicall</code> method"
|
1079 |
msgstr "Bloquer la méthode <code>system.multicall</code>"
|
1080 |
|
1081 |
-
#: lib/firewall_policies.php:
|
1082 |
msgid "Block Pingbacks"
|
1083 |
msgstr "Bloquer les Pingbacks"
|
1084 |
|
1085 |
-
#: lib/firewall_policies.php:
|
1086 |
msgid ""
|
1087 |
"Disabling access to the REST or XML-RPC API may break some functionality on "
|
1088 |
"your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact "
|
@@ -1092,43 +1266,43 @@ msgstr ""
|
|
1092 |
"blog, ses thèmes ou ses extensions (ex.: Éditeur Gutenberg, Jetpack, Contact "
|
1093 |
"Form 7 etc)."
|
1094 |
|
1095 |
-
#: lib/firewall_policies.php:
|
1096 |
msgid "Block <code>POST</code> requests in the themes folder"
|
1097 |
msgstr "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes"
|
1098 |
|
1099 |
-
#: lib/firewall_policies.php:
|
1100 |
-
msgid "Force
|
1101 |
msgstr "Forcer la connexion sécurisée au Tableau de bord"
|
1102 |
|
1103 |
-
#: lib/firewall_policies.php:
|
1104 |
msgid "Disable the plugin and theme editor"
|
1105 |
msgstr "Désactiver l’éditeur de thème et d'extension"
|
1106 |
|
1107 |
-
#: lib/firewall_policies.php:
|
1108 |
msgid "Disable plugin and theme update/installation"
|
1109 |
msgstr "Désactiver l'installation et mise à jour des thèmes et extensions"
|
1110 |
|
1111 |
-
#: lib/firewall_policies.php:
|
1112 |
msgid "Disable the fatal error handler"
|
1113 |
msgstr "Désactiver le gestionnaire d'erreurs fatales"
|
1114 |
|
1115 |
-
#: lib/firewall_policies.php:
|
1116 |
msgid "Users Whitelist"
|
1117 |
msgstr "Liste Blanche"
|
1118 |
|
1119 |
-
#: lib/firewall_policies.php:
|
1120 |
msgid "Add the Administrator to the whitelist (default)."
|
1121 |
msgstr "Ajouter l'Administrateur à la liste blanche (défaut)."
|
1122 |
|
1123 |
-
#: lib/firewall_policies.php:
|
1124 |
msgid "Add all logged in users to the whitelist."
|
1125 |
msgstr "Ajouter tous les utilisateurs connectés à la liste blanche."
|
1126 |
|
1127 |
-
#: lib/firewall_policies.php:
|
1128 |
msgid "Disable users whitelist."
|
1129 |
msgstr "Désactiver la liste blanche."
|
1130 |
|
1131 |
-
#: lib/firewall_policies.php:
|
1132 |
msgid ""
|
1133 |
"Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
|
1134 |
"<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
|
@@ -1140,90 +1314,90 @@ msgstr ""
|
|
1140 |
"<code>WP_DISABLE_FATAL_ERROR_HANDLER</code> qui, si elles sont activées, "
|
1141 |
"seront toujours appliquées."
|
1142 |
|
1143 |
-
#: lib/firewall_policies.php:
|
1144 |
msgid "HTTP GET variable"
|
1145 |
msgstr "Variable HTTP GET"
|
1146 |
|
1147 |
-
#: lib/firewall_policies.php:
|
1148 |
msgid "Scan <code>GET</code> variable"
|
1149 |
msgstr "Filtrer la variable <code>GET</code>"
|
1150 |
|
1151 |
-
#: lib/firewall_policies.php:
|
1152 |
msgid "Sanitise <code>GET</code> variable"
|
1153 |
msgstr "Nettoyer la variable <code>GET</code>"
|
1154 |
|
1155 |
-
#: lib/firewall_policies.php:
|
1156 |
msgid "HTTP POST variable"
|
1157 |
msgstr "Variable HTTP POST"
|
1158 |
|
1159 |
-
#: lib/firewall_policies.php:
|
1160 |
msgid "Scan <code>POST</code> variable"
|
1161 |
msgstr "Filtrer la variable <code>POST</code>"
|
1162 |
|
1163 |
-
#: lib/firewall_policies.php:
|
1164 |
msgid "Sanitise <code>POST</code> variable"
|
1165 |
msgstr "Nettoyer la variable <code>POST</code>"
|
1166 |
|
1167 |
-
#: lib/firewall_policies.php:
|
1168 |
msgid "Do not enable this option unless you know what you are doing!"
|
1169 |
msgstr ""
|
1170 |
"N'activez pas cette option si vous n'êtes pas sûr de ce que vous "
|
1171 |
"faites !"
|
1172 |
|
1173 |
-
#: lib/firewall_policies.php:
|
1174 |
msgid "Decode Base64-encoded <code>POST</code> variable"
|
1175 |
msgstr ""
|
1176 |
"Décoder les chaîne encodées en Base64 dans la variable <code>POST</code>"
|
1177 |
|
1178 |
-
#: lib/firewall_policies.php:
|
1179 |
msgid "HTTP REQUEST variable"
|
1180 |
msgstr "Variable HTTP REQUEST"
|
1181 |
|
1182 |
-
#: lib/firewall_policies.php:
|
1183 |
msgid "Sanitise <code>REQUEST</code> variable"
|
1184 |
msgstr "Nettoyer la variable <code>REQUEST</code>"
|
1185 |
|
1186 |
-
#: lib/firewall_policies.php:
|
1187 |
msgid "Cookies"
|
1188 |
msgstr "Cookies"
|
1189 |
|
1190 |
-
#: lib/firewall_policies.php:
|
1191 |
msgid "Scan cookies"
|
1192 |
msgstr "Filtrer les cookies"
|
1193 |
|
1194 |
-
#: lib/firewall_policies.php:
|
1195 |
msgid "Sanitise cookies"
|
1196 |
msgstr "Nettoyer les cookies"
|
1197 |
|
1198 |
-
#: lib/firewall_policies.php:
|
1199 |
msgid "HTTP_USER_AGENT server variable"
|
1200 |
msgstr "Variable HTTP_USER_AGENT"
|
1201 |
|
1202 |
-
#: lib/firewall_policies.php:
|
1203 |
msgid "Scan <code>HTTP_USER_AGENT</code>"
|
1204 |
msgstr "Filtrer <code>HTTP_USER_AGENT</code>"
|
1205 |
|
1206 |
-
#: lib/firewall_policies.php:
|
1207 |
msgid "Sanitise <code>HTTP_USER_AGENT</code>"
|
1208 |
msgstr "Nettoyer <code>HTTP_USER_AGENT</code>"
|
1209 |
|
1210 |
-
#: lib/firewall_policies.php:
|
1211 |
msgid "Block suspicious bots/scanners"
|
1212 |
msgstr "Bloquer les requêtes provenant de bots/scanners malveillants"
|
1213 |
|
1214 |
-
#: lib/firewall_policies.php:
|
1215 |
msgid "HTTP_REFERER server variable"
|
1216 |
msgstr "Variable HTTP_REFERER"
|
1217 |
|
1218 |
-
#: lib/firewall_policies.php:
|
1219 |
msgid "Scan <code>HTTP_REFERER</code>"
|
1220 |
msgstr "Filtrer <code>HTTP_REFERER</code>"
|
1221 |
|
1222 |
-
#: lib/firewall_policies.php:
|
1223 |
msgid "Sanitise <code>HTTP_REFERER</code>"
|
1224 |
msgstr "Nettoyer <code>HTTP_REFERER</code>"
|
1225 |
|
1226 |
-
#: lib/firewall_policies.php:
|
1227 |
msgid ""
|
1228 |
"Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
|
1229 |
"code> header"
|
@@ -1231,7 +1405,7 @@ msgstr ""
|
|
1231 |
"Bloquer les requêtes <code>POST</code> qui n'ont pas d'en-tête "
|
1232 |
"<code>HTTP_REFERER</code>"
|
1233 |
|
1234 |
-
#: lib/firewall_policies.php:
|
1235 |
msgid ""
|
1236 |
"Keep this option disabled if you are using scripts like Paypal IPN, "
|
1237 |
"WordPress WP-Cron etc"
|
@@ -1239,21 +1413,21 @@ msgstr ""
|
|
1239 |
"N'activez pas cette option si vous utilisez des scripts comme Paypal IPN, "
|
1240 |
"WordPress WP-Cron etc"
|
1241 |
|
1242 |
-
#: lib/firewall_policies.php:
|
1243 |
msgid "Block localhost IP in <code>GET/POST</code> request"
|
1244 |
msgstr "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost"
|
1245 |
|
1246 |
-
#: lib/firewall_policies.php:
|
1247 |
msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
|
1248 |
msgstr ""
|
1249 |
"Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
|
1250 |
"IP"
|
1251 |
|
1252 |
-
#: lib/firewall_policies.php:
|
1253 |
msgid "Scan traffic coming from localhost and private IP address spaces"
|
1254 |
msgstr "Filtrer les connexions provenant de localhost et d'adresses IP privées"
|
1255 |
|
1256 |
-
#: lib/firewall_policies.php:
|
1257 |
#, php-format
|
1258 |
msgid ""
|
1259 |
"The \"HTTP response headers\" options below are disabled because the %s PHP "
|
@@ -1262,25 +1436,25 @@ msgstr ""
|
|
1262 |
"Les politiques \"En-têtes de réponse HTTP\" ci-dessous sont désactivées car "
|
1263 |
"la fonction PHP %s n'est pas disponible sur votre serveur."
|
1264 |
|
1265 |
-
#: lib/firewall_policies.php:
|
1266 |
msgid "HTTP response headers"
|
1267 |
msgstr "En-têtes de réponse HTTP"
|
1268 |
|
1269 |
-
#: lib/firewall_policies.php:
|
1270 |
#, php-format
|
1271 |
msgid "Set %s to protect against MIME type confusion attacks"
|
1272 |
msgstr ""
|
1273 |
"Activer %s pour protéger contre les attaques basées sur la confusion du type "
|
1274 |
"MIME"
|
1275 |
|
1276 |
-
#: lib/firewall_policies.php:
|
1277 |
#, php-format
|
1278 |
msgid "Set %s to protect against clickjacking attempts"
|
1279 |
msgstr ""
|
1280 |
"Activer %s pour protéger contre les attaques de détournement de clic "
|
1281 |
"(clickjacking)"
|
1282 |
|
1283 |
-
#: lib/firewall_policies.php:
|
1284 |
msgid ""
|
1285 |
"Setting this option to <code>DENY</code> may break some functionality on "
|
1286 |
"your blog, its themes or plugins."
|
@@ -1288,32 +1462,32 @@ msgstr ""
|
|
1288 |
"Activer cette fonction avec <code>DENY</code> pourrait bloquer certaines "
|
1289 |
"fonctionnalités de votre blog, ses thèmes ou ses extensions."
|
1290 |
|
1291 |
-
#: lib/firewall_policies.php:
|
1292 |
#, php-format
|
1293 |
msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
|
1294 |
msgstr "Activer %s (IE/Edge, Opera, Chrome et Safari)"
|
1295 |
|
1296 |
-
#: lib/firewall_policies.php:
|
1297 |
-
#: lib/firewall_policies.php:
|
1298 |
#, php-format
|
1299 |
msgid "Set to %s"
|
1300 |
msgstr "Régler sur %s"
|
1301 |
|
1302 |
-
#: lib/firewall_policies.php:
|
1303 |
#, php-format
|
1304 |
msgid "Force %s flag on all cookies to mitigate CSRF attacks"
|
1305 |
msgstr ""
|
1306 |
"Activer la propriété %s pour tous les cookies afin d'atténuer les attaques "
|
1307 |
"CSRF"
|
1308 |
|
1309 |
-
#: lib/firewall_policies.php:
|
1310 |
#, php-format
|
1311 |
msgid "Force %s flag on all cookies to mitigate XSS attacks"
|
1312 |
msgstr ""
|
1313 |
"Activer la propriété %s pour tous les cookies afin d'atténuer les menaces "
|
1314 |
"XSS qui génèrent des vols de cookies"
|
1315 |
|
1316 |
-
#: lib/firewall_policies.php:
|
1317 |
msgid ""
|
1318 |
"If your PHP scripts use cookies that need to be accessed from JavaScript, "
|
1319 |
"you should not enable this option."
|
@@ -1321,65 +1495,65 @@ msgstr ""
|
|
1321 |
"Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
|
1322 |
"partir de JavaScript, vous ne devriez pas activer cette option."
|
1323 |
|
1324 |
-
#: lib/firewall_policies.php:
|
1325 |
msgid ""
|
1326 |
"HSTS headers can only be set when you are accessing your site over HTTPS."
|
1327 |
msgstr ""
|
1328 |
"Les en-têtes HSTS ne peuvent être utilisés que lorsque vous vous connectez à "
|
1329 |
"votre site en HTTPS (connexion sécurisée)."
|
1330 |
|
1331 |
-
#: lib/firewall_policies.php:
|
1332 |
#, php-format
|
1333 |
msgid "Set %s (HSTS) to enforce secure connections to the server"
|
1334 |
msgstr ""
|
1335 |
"Activer %s (HSTS) pour forcer les connexions sécurisées vers le serveur"
|
1336 |
|
1337 |
-
#: lib/firewall_policies.php:
|
1338 |
msgid "Set \"max-age\" to 0"
|
1339 |
msgstr "Régler \"max-age\" à 0"
|
1340 |
|
1341 |
-
#: lib/firewall_policies.php:
|
1342 |
msgid "1 month"
|
1343 |
msgstr "1 mois"
|
1344 |
|
1345 |
-
#: lib/firewall_policies.php:
|
1346 |
msgid "6 months"
|
1347 |
msgstr "6 mois"
|
1348 |
|
1349 |
-
#: lib/firewall_policies.php:
|
1350 |
msgid "1 year"
|
1351 |
msgstr "1 année"
|
1352 |
|
1353 |
-
#: lib/firewall_policies.php:
|
1354 |
msgid "Apply to subdomains"
|
1355 |
msgstr "Appliquer aux sous-domaines"
|
1356 |
|
1357 |
-
#: lib/firewall_policies.php:
|
1358 |
#, php-format
|
1359 |
msgid "Set %s for the website frontend"
|
1360 |
msgstr "Activer %s pour le site"
|
1361 |
|
1362 |
-
#: lib/firewall_policies.php:
|
1363 |
msgid "This CSP header will apply to the website frontend only."
|
1364 |
msgstr "Cet en-tête CSP ne s'appliquera qu'au site."
|
1365 |
|
1366 |
-
#: lib/firewall_policies.php:
|
1367 |
#, php-format
|
1368 |
msgid "Set %s for the WordPress admin dashboard"
|
1369 |
msgstr "Activer %s pour la console d'administration de WordPress"
|
1370 |
|
1371 |
-
#: lib/firewall_policies.php:
|
1372 |
msgid "This CSP header will apply to the WordPress admin dashboard only."
|
1373 |
msgstr ""
|
1374 |
"Cet en-tête CSP ne s'appliquera qu'à la console d'administration de "
|
1375 |
"WordPress."
|
1376 |
|
1377 |
-
#: lib/firewall_policies.php:
|
1378 |
#, php-format
|
1379 |
msgid "Set %s (Chrome, Opera and Firefox browsers)"
|
1380 |
msgstr "Activer %s (Chrome, Opera et Firefox)"
|
1381 |
|
1382 |
-
#: lib/firewall_policies.php:
|
1383 |
msgid ""
|
1384 |
"Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
|
1385 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
|
@@ -1388,54 +1562,54 @@ msgstr ""
|
|
1388 |
"<code>GET</code>, <code>POST</code>, <code>HTTP_USER_AGENT</code>, "
|
1389 |
"<code>HTTP_REFERER</code> et les cookies"
|
1390 |
|
1391 |
-
#: lib/firewall_policies.php:
|
1392 |
msgid "Block serialized PHP objects in the following global variables"
|
1393 |
msgstr ""
|
1394 |
"Bloquer les objets PHP sérialisés dans les variables globales suivantes"
|
1395 |
|
1396 |
-
#: lib/firewall_policies.php:
|
1397 |
msgid "Hide PHP notice and error messages"
|
1398 |
msgstr "Masquer les messages d'erreur de PHP"
|
1399 |
|
1400 |
-
#: lib/firewall_policies.php:
|
1401 |
msgid "Sanitise <code>PHP_SELF</code>"
|
1402 |
msgstr "Nettoyer <code>PHP_SELF</code>"
|
1403 |
|
1404 |
-
#: lib/firewall_policies.php:
|
1405 |
msgid "Sanitise <code>PATH_TRANSLATED</code>"
|
1406 |
msgstr "Nettoyer <code>PATH_TRANSLATED</code>"
|
1407 |
|
1408 |
-
#: lib/firewall_policies.php:
|
1409 |
msgid "Sanitise <code>PATH_INFO</code>"
|
1410 |
msgstr "Nettoyer <code>PATH_INFO</code>"
|
1411 |
|
1412 |
-
#: lib/firewall_policies.php:
|
1413 |
msgid "This option is not compatible with your actual configuration."
|
1414 |
msgstr ""
|
1415 |
"Cette option n'est pas compatible avec la configuration de votre serveur."
|
1416 |
|
1417 |
-
#: lib/firewall_policies.php:
|
1418 |
msgid "Various"
|
1419 |
msgstr "Divers"
|
1420 |
|
1421 |
-
#: lib/firewall_policies.php:
|
1422 |
msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
|
1423 |
msgstr ""
|
1424 |
"Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code>"
|
1425 |
|
1426 |
-
#: lib/firewall_policies.php:
|
1427 |
msgid "Block ASCII character 0x00 (NULL byte)"
|
1428 |
msgstr "Bloquer le caractère ASCII 0x00 (NULL byte)"
|
1429 |
|
1430 |
-
#: lib/firewall_policies.php:
|
1431 |
msgid "Block ASCII control characters 1 to 8 and 14 to 31"
|
1432 |
msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31"
|
1433 |
|
1434 |
-
#: lib/firewall_policies.php:
|
1435 |
msgid "Save Firewall Policies"
|
1436 |
msgstr "Sauvegarder les options"
|
1437 |
|
1438 |
-
#: lib/firewall_policies.php:
|
1439 |
msgid "Restore Default Values"
|
1440 |
msgstr "Rétablir les valeurs par défaut"
|
1441 |
|
@@ -1447,7 +1621,7 @@ msgid ""
|
|
1447 |
msgstr ""
|
1448 |
"Le Tableau de Bord affiche toutes les informations relatives au bon "
|
1449 |
"fonctionnement du pare-feu ainsi que les mises à jour; il vous est conseillé "
|
1450 |
-
"de
|
1451 |
"indiqués ici."
|
1452 |
|
1453 |
#: lib/help.php:45
|
@@ -1471,8 +1645,8 @@ msgid ""
|
|
1471 |
"Benchmarks show the time NinjaFirewall took, in seconds, to process each "
|
1472 |
"request it has blocked."
|
1473 |
msgstr ""
|
1474 |
-
"
|
1475 |
-
"bloquer les requêtes dangereuses."
|
1476 |
|
1477 |
#: lib/help.php:56
|
1478 |
msgid "Everything you ever wanted to know about NinjaFirewall."
|
@@ -1551,10 +1725,6 @@ msgstr ""
|
|
1551 |
"En outre, si vous redirigez les événements vers le serveur syslog, les "
|
1552 |
"adresses IP y seront également anonymisées."
|
1553 |
|
1554 |
-
#: lib/help.php:90
|
1555 |
-
msgid "Error code and message to return"
|
1556 |
-
msgstr "Code HTTP et Message à retourner"
|
1557 |
-
|
1558 |
#: lib/help.php:92
|
1559 |
msgid ""
|
1560 |
"Lets you customize the HTTP error code returned by NinjaFirewall when "
|
@@ -1618,7 +1788,7 @@ msgstr ""
|
|
1618 |
"restaurer sa configuration à une date antérieure, sélectionnez le fichier "
|
1619 |
"correspondant dans la liste."
|
1620 |
|
1621 |
-
#: lib/help.php:
|
1622 |
#, php-format
|
1623 |
msgid ""
|
1624 |
"Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
|
@@ -1629,11 +1799,11 @@ msgstr ""
|
|
1629 |
"scripts PHP</b> situés à l'intérieur du répertoire %s ainsi que ses sous-"
|
1630 |
"répertoires, et non pas seulement à la page d'index de WordPress."
|
1631 |
|
1632 |
-
#: lib/help.php:
|
1633 |
msgid "Policies overview"
|
1634 |
msgstr "Politiques du pare-feu"
|
1635 |
|
1636 |
-
#: lib/help.php:
|
1637 |
#, php-format
|
1638 |
msgid ""
|
1639 |
"Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
|
@@ -1652,7 +1822,7 @@ msgstr ""
|
|
1652 |
"adresses IP, avant que celles-ci n'atteignent votre application, que ce soit "
|
1653 |
"en mode HTTP ou HTTPS."
|
1654 |
|
1655 |
-
#: lib/help.php:
|
1656 |
msgid ""
|
1657 |
"Use the options below to enable, disable or to tweak these rules according "
|
1658 |
"to your needs."
|
@@ -1660,11 +1830,11 @@ msgstr ""
|
|
1660 |
"Utilisez les options ci-dessous pour configurer NinjaFirewall suivant vos "
|
1661 |
"besoins."
|
1662 |
|
1663 |
-
#: lib/help.php:
|
1664 |
msgid "Scan and Sanitise"
|
1665 |
msgstr "Filtrer et Nettoyer"
|
1666 |
|
1667 |
-
#: lib/help.php:
|
1668 |
msgid ""
|
1669 |
"You can choose to scan and reject dangerous content but also to sanitise "
|
1670 |
"requests and variables. Those two actions are different and can be combined "
|
@@ -1674,9 +1844,9 @@ msgstr ""
|
|
1674 |
"mais aussi de les nettoyer. Ces deux actions sont différentes et peuvent "
|
1675 |
"être combinées pour plus de sécurité."
|
1676 |
|
1677 |
-
#: lib/help.php:
|
1678 |
msgid ""
|
1679 |
-
"Scan
|
1680 |
"request and return an HTTP error code and message (defined in the \"Firewall "
|
1681 |
"Options\" page). The user request will fail and the connection will be "
|
1682 |
"closed immediately."
|
@@ -1686,10 +1856,10 @@ msgstr ""
|
|
1686 |
"du Pare-feu\"). La requête ne pourra pas aboutir et la connexion sera fermée "
|
1687 |
"immédiatement."
|
1688 |
|
1689 |
-
#: lib/help.php:
|
1690 |
#, php-format
|
1691 |
msgid ""
|
1692 |
-
"Sanitise
|
1693 |
"escaping characters that can be used to exploit vulnerabilities (%s) and "
|
1694 |
"replacing <code><</code> and <code>></code> with their corresponding "
|
1695 |
"HTML entities (<code>&lt;</code>, <code>&gt;</code>). If it is a "
|
@@ -1704,7 +1874,7 @@ msgstr ""
|
|
1704 |
"HTML correspondantes. S'il s'agit d'une variable et de sa valeur (<code>?"
|
1705 |
"variable=valeur</code>), les deux éléments seront nettoyés."
|
1706 |
|
1707 |
-
#: lib/help.php:
|
1708 |
msgid ""
|
1709 |
"This action will be performed when the filtering process is over, right "
|
1710 |
"before NinjaFirewall forwards the request to your PHP script."
|
@@ -1713,7 +1883,7 @@ msgstr ""
|
|
1713 |
"juste avant que NinjaFirewall fasse suivre la requête à votre application "
|
1714 |
"PHP."
|
1715 |
|
1716 |
-
#: lib/help.php:
|
1717 |
msgid ""
|
1718 |
"If you enabled <code>POST</code> requests sanitising, articles and messages "
|
1719 |
"posted by your visitors could be corrupted with excessive backslashes or "
|
@@ -1723,38 +1893,30 @@ msgstr ""
|
|
1723 |
"commentaires et messages de vos visiteurs pourraient être endommagés par "
|
1724 |
"cette option."
|
1725 |
|
1726 |
-
#: lib/help.php:
|
1727 |
msgid "Whether to filter HTTP and/or HTTPS traffic"
|
1728 |
msgstr ""
|
1729 |
"Sélectionnez le type de trafic filtré par le pare-feu (HTTP et/ou HTTPS)."
|
1730 |
|
1731 |
-
#: lib/help.php:
|
1732 |
-
msgid "
|
1733 |
-
msgstr "Autoriser les téléchargements :"
|
1734 |
-
|
1735 |
-
#: lib/help.php:166
|
1736 |
-
msgid "whether to allow/disallow file uploads."
|
1737 |
msgstr ""
|
1738 |
-
"
|
1739 |
"votre site."
|
1740 |
|
1741 |
-
#: lib/help.php:
|
1742 |
-
msgid "Sanitise filenames:"
|
1743 |
-
msgstr "Nettoyer le nom des fichiers :"
|
1744 |
-
|
1745 |
-
#: lib/help.php:167
|
1746 |
msgid ""
|
1747 |
-
"
|
1748 |
"code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
|
1749 |
"<code>_</code> will be removed from the filename and replaced with the "
|
1750 |
"substitution character."
|
1751 |
msgstr ""
|
1752 |
-
"
|
1753 |
-
"
|
1754 |
-
"
|
1755 |
-
"
|
1756 |
|
1757 |
-
#: lib/help.php:
|
1758 |
msgid ""
|
1759 |
"Whether to block direct access to PHP files located in specific WordPress "
|
1760 |
"directories."
|
@@ -1762,51 +1924,55 @@ msgstr ""
|
|
1762 |
"S'il faut bloquer l’accès direct à tout fichier PHP se trouvant dans l'un de "
|
1763 |
"ces répertoires."
|
1764 |
|
1765 |
-
#: lib/help.php:
|
1766 |
msgid ""
|
1767 |
-
"
|
1768 |
"vulnerability, using a backdoor etc) to modify some important WordPress "
|
1769 |
"settings. This policy will also send you an alert by email with all details "
|
1770 |
"regarding the issue. It is enabled by default."
|
1771 |
msgstr ""
|
1772 |
-
"
|
1773 |
"l'exploitation d'une vulnérabilité, l'utilisation d'une porte dérobée, etc) "
|
1774 |
"de modifier certains paramètres WordPress importants. Cette politique vous "
|
1775 |
"enverra également une alerte par e-mail avec tous les détails concernant le "
|
1776 |
"problème. Elle est activée par défaut."
|
1777 |
|
1778 |
-
#: lib/help.php:
|
1779 |
msgid ""
|
1780 |
-
"
|
1781 |
"vulnerability, using a backdoor etc) to create a user account. If you allow "
|
1782 |
"user registration, you should not enable it."
|
1783 |
msgstr ""
|
1784 |
-
"
|
1785 |
"l'exploitation d'une vulnérabilité, l'utilisation d'une porte dérobée, etc) "
|
1786 |
"de création d'un compte d'utilisateur. Si vous autorisez l'inscription des "
|
1787 |
"utilisateurs, vous ne devez pas l'activer."
|
1788 |
|
1789 |
-
#: lib/help.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1790 |
#, php-format
|
1791 |
msgid ""
|
1792 |
-
"
|
1793 |
"This policy will try to detect and immediately block bots and malicious "
|
1794 |
"scanners trying to access it. The server IP address (%s) and private IP "
|
1795 |
"addresses will not be blocked."
|
1796 |
msgstr ""
|
1797 |
-
"
|
1798 |
"via le script admin-ajax.php. Cette politique essaiera de détecter et de "
|
1799 |
"bloquer immédiatement les robots et les scanners malveillants qui tentent "
|
1800 |
"d’y accéder. L'adresse IP du serveur (%s) et les adresses IP privées ne "
|
1801 |
"seront pas bloquées."
|
1802 |
|
1803 |
-
#: lib/help.php:
|
1804 |
-
msgid "Protect against username enumeration:"
|
1805 |
-
msgstr "Protéger contre l'énumération des comptes utilisateurs :"
|
1806 |
-
|
1807 |
-
#: lib/help.php:174
|
1808 |
msgid ""
|
1809 |
-
"
|
1810 |
"archives, the REST API or the login page. Although this is not a "
|
1811 |
"vulnerability but a WordPress feature, some hackers use it to retrieve "
|
1812 |
"usernames in order to launch more accurate brute-force attacks. If it is a "
|
@@ -1815,31 +1981,23 @@ msgid ""
|
|
1815 |
"redirect the user to the blog index page. Regarding the WP REST API, it will "
|
1816 |
"block the request immediately."
|
1817 |
msgstr ""
|
1818 |
-
"
|
1819 |
"REST, la page d'archive d'un auteur ou la page de connexion au Tableau de "
|
1820 |
"bord. Bien que ce ne soit pas une vulnérabilité, mais une caractéristique de "
|
1821 |
"WordPress, certains hackers utilisent ces astuces pour récupérer les noms "
|
1822 |
"d'utilisateur afin de lancer des attaques par force brute plus précises."
|
1823 |
|
1824 |
-
#: lib/help.php:
|
1825 |
-
msgid "WordPress REST API:"
|
1826 |
-
msgstr "API REST de WordPress :"
|
1827 |
-
|
1828 |
-
#: lib/help.php:175
|
1829 |
msgid ""
|
1830 |
-
"
|
1831 |
"HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
|
1832 |
"allows you to block any access to that API if you do not intend to use it."
|
1833 |
msgstr ""
|
1834 |
-
"
|
1835 |
"Depuis WordPress 4.7, cette elle est activée par défaut. NinjaFirewall vous "
|
1836 |
"permet de bloquer tout accès a cette API si vous ne l'utilisez pas."
|
1837 |
|
1838 |
-
#: lib/help.php:
|
1839 |
-
msgid "WordPress XML-RPC API:"
|
1840 |
-
msgstr "API XML-RPC de WordPress :"
|
1841 |
-
|
1842 |
-
#: lib/help.php:176
|
1843 |
msgid ""
|
1844 |
"XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
|
1845 |
"its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
|
@@ -1859,105 +2017,108 @@ msgstr ""
|
|
1859 |
"requêtes qui utilisent la méthode <code>system.multicall</code> ou les "
|
1860 |
"Pingbacks."
|
1861 |
|
1862 |
-
#: lib/help.php:
|
1863 |
msgid ""
|
1864 |
"Block <code>POST</code> requests in the themes folder <code>/wp-content/"
|
1865 |
-
"themes</code
|
1866 |
msgstr ""
|
1867 |
"Bloquer les requêtes <code>POST</code> dans le dossier des thèmes <code>/wp-"
|
1868 |
-
"content/themes</code
|
1869 |
|
1870 |
-
#: lib/help.php:
|
1871 |
msgid ""
|
1872 |
-
"
|
1873 |
"PHP theme files. However, because some custom themes may include an HTML "
|
1874 |
"form (contact, search form etc), this option is not enabled by default."
|
1875 |
msgstr ""
|
1876 |
-
"
|
1877 |
"vulnérabilités dans les fichiers PHP de vos thèmes. Toutefois, parce que "
|
1878 |
"certains thèmes personnalisés peuvent inclure un formulaire HTML (formulaire "
|
1879 |
"de recherche ou de contact etc) nécessitant des requêtes <code>POST</code> , "
|
1880 |
"cette option n'est pas activée par défaut."
|
1881 |
|
1882 |
-
#: lib/help.php:
|
1883 |
-
msgid "Force
|
1884 |
msgstr ""
|
1885 |
-
"Forcer la connexion sécurisée au Tableau de bord <code>FORCE_SSL_ADMIN</"
|
1886 |
-
"code> :"
|
1887 |
|
1888 |
-
#: lib/help.php:
|
1889 |
msgid ""
|
1890 |
-
"
|
1891 |
"both passwords and cookies are never sent in the clear. Ensure that you can "
|
1892 |
"access your admin console from HTTPS before enabling this option, otherwise "
|
1893 |
"you will lock yourself out of your site!"
|
1894 |
msgstr ""
|
1895 |
-
"
|
1896 |
"Tableau de bord. Assurez-vous que vous pouvez accéder à votre page de "
|
1897 |
"connexion via HTTPS avant d'activer cette option, sinon vous risquez de "
|
1898 |
-
"bloquer l’accès à votre site
|
1899 |
|
1900 |
-
#: lib/help.php:
|
1901 |
-
msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code
|
1902 |
msgstr ""
|
1903 |
-
"Désactiver l’éditeur de thème et d'extension <code>DISALLOW_FILE_EDIT</"
|
1904 |
-
"code> :"
|
1905 |
|
1906 |
-
#: lib/help.php:
|
1907 |
msgid ""
|
1908 |
-
"
|
1909 |
"security if a hacker gains access to a well-privileged user account."
|
1910 |
msgstr ""
|
1911 |
-
"
|
1912 |
"supplémentaire. Si un pirate accédait a votre compte administrateur, il ne "
|
1913 |
"pourrait pas l'utiliser pour insérer une porte dérobée dans l'un de vos "
|
1914 |
"scripts PHP."
|
1915 |
|
1916 |
-
#: lib/help.php:
|
1917 |
msgid ""
|
1918 |
-
"Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code
|
1919 |
msgstr ""
|
1920 |
"Désactiver l'installation et mise à jour des thèmes et extensions "
|
1921 |
-
"<code>DISALLOW_FILE_MODS</code
|
1922 |
|
1923 |
-
#: lib/help.php:
|
1924 |
msgid ""
|
1925 |
-
"
|
1926 |
"installation/update functionality from the WordPress admin area. Setting "
|
1927 |
"this constant also disables the Plugin and Theme editor."
|
1928 |
msgstr ""
|
1929 |
-
"
|
1930 |
"installation ou mise à jour d'une extension ou d'un thème. Elle désactive "
|
1931 |
"aussi l’éditeur de thème et d'extension."
|
1932 |
|
1933 |
-
#: lib/help.php:
|
1934 |
msgid ""
|
1935 |
-
"Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code
|
1936 |
msgstr ""
|
1937 |
"Désactiver le gestionnaire d'erreurs fatales "
|
1938 |
-
"<code>WP_DISABLE_FATAL_ERROR_HANDLER</code>
|
|
|
|
|
|
|
|
|
|
|
|
|
1939 |
|
1940 |
-
#: lib/help.php:
|
1941 |
msgid ""
|
1942 |
-
"
|
|
|
|
|
1943 |
msgstr ""
|
1944 |
-
"
|
|
|
|
|
|
|
1945 |
|
1946 |
-
#: lib/help.php:
|
1947 |
msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
|
1948 |
msgstr "S'il faut filtrer / nettoyer la variable <code>GET</code>."
|
1949 |
|
1950 |
-
#: lib/help.php:
|
1951 |
msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
|
1952 |
msgstr "S'il faut filtrer / nettoyer la variable <code>POST</code>."
|
1953 |
|
1954 |
-
#: lib/help.php:
|
1955 |
-
msgid "Decode Base64-encoded <code>POST</code> variable:"
|
1956 |
-
msgstr ""
|
1957 |
-
"Décoder les chaîne encodées en Base64 dans la variable <code>POST</"
|
1958 |
-
"code> :"
|
1959 |
-
|
1960 |
-
#: lib/help.php:193
|
1961 |
msgid ""
|
1962 |
"NinjaFirewall will decode and scan base64 encoded values in order to detect "
|
1963 |
"obfuscated malicious code. This option is only available for the <code>POST</"
|
@@ -1966,43 +2127,38 @@ msgstr ""
|
|
1966 |
"NinjaFirewall peut décoder et filtrer les chaînes de caractères encodées en "
|
1967 |
"Base64 afin d'y détecter du code malveillant caché."
|
1968 |
|
1969 |
-
#: lib/help.php:
|
1970 |
msgid "Whether to sanitise the <code>REQUEST</code> variable."
|
1971 |
msgstr "S'il faut filtrer / nettoyer la variable <code>REQUEST</code>."
|
1972 |
|
1973 |
-
#: lib/help.php:
|
1974 |
msgid "Whether to scan and/or sanitise cookies."
|
1975 |
msgstr "S'il faut filtrer / nettoyer les cookies."
|
1976 |
|
1977 |
-
#: lib/help.php:
|
1978 |
msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
|
1979 |
msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_USER_AGENT</code>."
|
1980 |
|
1981 |
-
#: lib/help.php:
|
1982 |
-
msgid "Block suspicious bots/scanners:"
|
1983 |
-
msgstr "Bloquer les requêtes provenant de bots/scanners malveillants :"
|
1984 |
-
|
1985 |
-
#: lib/help.php:203
|
1986 |
msgid ""
|
1987 |
-
"
|
1988 |
"to access your blog."
|
1989 |
msgstr ""
|
1990 |
-
"
|
1991 |
|
1992 |
-
#: lib/help.php:
|
1993 |
msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
|
1994 |
msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_REFERER</code>."
|
1995 |
|
1996 |
-
#: lib/help.php:
|
1997 |
msgid ""
|
1998 |
-
"Block POST requests that do not have an <code>HTTP_REFERER</code> header
|
1999 |
msgstr ""
|
2000 |
-
"Bloquer les requêtes POST qui n'ont pas d'en-tête <code>HTTP_REFERER</"
|
2001 |
-
"code> :"
|
2002 |
|
2003 |
-
#: lib/help.php:
|
2004 |
msgid ""
|
2005 |
-
"
|
2006 |
"Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
|
2007 |
"applications to post to your scripts (e.g. Paypal IPN, WordPress WP-"
|
2008 |
"Cron...), you are advised to keep this option disabled otherwise they will "
|
@@ -2010,19 +2166,18 @@ msgid ""
|
|
2010 |
"have a Referrer header and, for that reason, this option is disabled by "
|
2011 |
"default."
|
2012 |
msgstr ""
|
2013 |
-
"
|
2014 |
"<code>HTTP_REFERER</code> (adresse de la page -si elle existe- qui a conduit "
|
2015 |
"le client à la page courante). Puisque les requêtes POST ne sont pas "
|
2016 |
"obligées d'avoir un Referrer, cette option n'est pas activée par défaut. Si "
|
2017 |
"vous utilisez des scripts comme Paypal IPN, WordPress WP-Cron etc, "
|
2018 |
"désactivez cette fonction."
|
2019 |
|
2020 |
-
#: lib/help.php:
|
2021 |
-
msgid "Block localhost IP in <code>GET/POST</code> requests
|
2022 |
-
msgstr ""
|
2023 |
-
"Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost :"
|
2024 |
|
2025 |
-
#: lib/help.php:
|
2026 |
msgid ""
|
2027 |
"this option will block any <code>GET</code> or <code>POST</code> request "
|
2028 |
"containing the localhost IP (127.0.0.1). It can be useful to block SQL "
|
@@ -2033,34 +2188,23 @@ msgstr ""
|
|
2033 |
"les programmes malveillants. Attention toutefois à ne pas bloquer certains "
|
2034 |
"scripts d'installation ou de configuration si vous l'activez. "
|
2035 |
|
2036 |
-
#: lib/help.php:
|
2037 |
-
msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
|
2038 |
-
msgstr ""
|
2039 |
-
"Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
|
2040 |
-
"IP :"
|
2041 |
-
|
2042 |
-
#: lib/help.php:211
|
2043 |
#, php-format
|
2044 |
msgid ""
|
2045 |
-
"
|
2046 |
"the <code>Host</code> header of the HTTP request. Unless you need to connect "
|
2047 |
"to your site using its IP address, (e.g. %s), enabling this option will "
|
2048 |
"block a lot of hackers scanners because such applications scan IPs rather "
|
2049 |
"than domain names."
|
2050 |
msgstr ""
|
2051 |
-
"
|
2052 |
"d'un nom de domaine dans son en-tête <code>Host</code>. Sauf si vous avez "
|
2053 |
"besoin de vous connecter à votre site en utilisant son adresse IP (ex: %s), "
|
2054 |
"activer cette option bloquera de nombreux scanners de vulnérabilité car ces "
|
2055 |
"application trouvent les sites en scannant les plages d'adresses IP plutôt "
|
2056 |
-
"que les noms de domaine.
|
2057 |
-
|
2058 |
-
#: lib/help.php:212
|
2059 |
-
msgid "Scan traffic coming from localhost and private IP address spaces:"
|
2060 |
-
msgstr ""
|
2061 |
-
"Filtrer les connexions provenant de localhost et d'adresses IP privées :"
|
2062 |
|
2063 |
-
#: lib/help.php:
|
2064 |
msgid ""
|
2065 |
"this option will allow the firewall to scan traffic from all non-routable "
|
2066 |
"private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
|
@@ -2071,7 +2215,7 @@ msgstr ""
|
|
2071 |
"Nous vous recommandons de le garder activé si vous avez 2 ou plusieurs "
|
2072 |
"serveurs reliés entre eux."
|
2073 |
|
2074 |
-
#: lib/help.php:
|
2075 |
msgid ""
|
2076 |
"In addition to filtering incoming requests, NinjaFirewall can also hook the "
|
2077 |
"HTTP response in order to alter its headers. Those modifications can help to "
|
@@ -2082,73 +2226,73 @@ msgstr ""
|
|
2082 |
"peuvent aider à atténuer les menaces telles que les attaques XSS, phishing "
|
2083 |
"et clickjacking."
|
2084 |
|
2085 |
-
#: lib/help.php:
|
2086 |
msgid ""
|
2087 |
"Set <code>X-Content-Type-Options</code> to protect against MIME type "
|
2088 |
-
"confusion attacks
|
2089 |
msgstr ""
|
2090 |
-
"Activer
|
2091 |
-
"attaques basées sur la confusion du type MIME
|
2092 |
|
2093 |
-
#: lib/help.php:
|
2094 |
msgid ""
|
2095 |
-
"
|
2096 |
"content or MIME sniffing and to use the content-type returned by the server. "
|
2097 |
"Some browsers try to guess (sniff) and override the content-type by looking "
|
2098 |
"at the content itself which, in some cases, could lead to security issues "
|
2099 |
"such as MIME Confusion Attacks."
|
2100 |
msgstr ""
|
2101 |
-
"
|
2102 |
"désactiver le reniflage de contenu ou type MIME et d'utiliser le type "
|
2103 |
"retourné par le serveur. Certains navigateurs tentent de deviner (sniff) et "
|
2104 |
"de contourner le type de contenu en regardant le contenu lui-même ce qui, "
|
2105 |
"dans certains cas, peut entraîner des problèmes de sécurité tels que les "
|
2106 |
"attaques basées sur la confusion du type MIME."
|
2107 |
|
2108 |
-
#: lib/help.php:
|
2109 |
msgid ""
|
2110 |
-
"Set <code>X-Frame-Options</code> to protect against clickjacking attempts
|
2111 |
msgstr ""
|
2112 |
"Activer <code>X-Frame-Options</code> pour protéger contre les attaques de "
|
2113 |
-
"détournement de clic (clickjacking)
|
2114 |
|
2115 |
-
#: lib/help.php:
|
2116 |
msgid ""
|
2117 |
-
"
|
2118 |
"page in a <frame> or <iframe>. Hosts can declare this policy in "
|
2119 |
"the header of their HTTP responses to prevent clickjacking attacks, by "
|
2120 |
"ensuring that their content is not embedded into other pages or frames. "
|
2121 |
"NinjaFirewall accepts two different values:"
|
2122 |
msgstr ""
|
2123 |
-
"
|
2124 |
"d'une page dans une <frame> ou <iframe>. Cela permet d'empêcher "
|
2125 |
"les attaques de clickjacking, en veillant à ce que le contenu d'une page ne "
|
2126 |
"sont pas intégré dans d'autres pages ou cadres, notamment d'un autre site. "
|
2127 |
-
"NinjaFirewall accepte deux valeurs différentes
|
2128 |
|
2129 |
-
#: lib/help.php:
|
2130 |
msgid ""
|
2131 |
-
"
|
2132 |
"in any frame from a page of different origin than the content itself."
|
2133 |
msgstr ""
|
2134 |
-
"
|
2135 |
"iframe> d'une page d'origine différente que le contenu lui-même."
|
2136 |
|
2137 |
-
#: lib/help.php:
|
2138 |
msgid ""
|
2139 |
-
"
|
2140 |
"in any frame."
|
2141 |
msgstr ""
|
2142 |
-
"
|
2143 |
"<iframe>"
|
2144 |
|
2145 |
-
#: lib/help.php:
|
2146 |
msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
|
2147 |
msgstr ""
|
2148 |
"La valeur <code>ALLOW-FROM</code> n'est pas prise en charge par "
|
2149 |
"NinjaFirewall."
|
2150 |
|
2151 |
-
#: lib/help.php:
|
2152 |
msgid ""
|
2153 |
"Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
|
2154 |
"administrator and the login page only."
|
@@ -2156,24 +2300,24 @@ msgstr ""
|
|
2156 |
"Depuis la version 3.1.3, WordPress active <code>SAMEORIGIN</code> pour "
|
2157 |
"l'administrateur et la page de connexion uniquement."
|
2158 |
|
2159 |
-
#: lib/help.php:
|
2160 |
msgid ""
|
2161 |
"Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
|
2162 |
-
"browsers)
|
2163 |
msgstr ""
|
2164 |
"Activer <code>X-XSS-Protection</code> (IE/Edge, Opera, Chrome et Safari)"
|
2165 |
|
2166 |
-
#: lib/help.php:
|
2167 |
msgid ""
|
2168 |
-
"
|
2169 |
"malicious scripts from executing. It is enabled by default on all compatible "
|
2170 |
"browsers."
|
2171 |
msgstr ""
|
2172 |
-
"
|
2173 |
"attaques XSS en empêchant un script malveillant de s'exécuter. Notez que "
|
2174 |
"cette option est activée par défaut sur ces navigateurs."
|
2175 |
|
2176 |
-
#: lib/help.php:
|
2177 |
msgid ""
|
2178 |
"If a visitor disabled their browser's XSS filter, you cannot re-enable it "
|
2179 |
"with that option."
|
@@ -2181,33 +2325,32 @@ msgstr ""
|
|
2181 |
"Si un visiteur désactive le filtre XSS de son navigateur, vous ne pouvez pas "
|
2182 |
"le réactiver avec cette option."
|
2183 |
|
2184 |
-
#: lib/help.php:
|
2185 |
msgid ""
|
2186 |
-
"Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks
|
2187 |
msgstr ""
|
2188 |
"Activer la propriété <code>SameSite</code> pour tous les cookies afin "
|
2189 |
-
"d'atténuer les attaques CSRF
|
2190 |
|
2191 |
-
#: lib/help.php:
|
2192 |
msgid ""
|
2193 |
-
"
|
2194 |
"request forgery) attacks because cookies can only be sent in requests "
|
2195 |
"originating from the same origin as the target domain."
|
2196 |
msgstr ""
|
2197 |
-
"
|
2198 |
"de requête illégitime par rebond), car les cookies ne peuvent être envoyés "
|
2199 |
"que dans des requêtes provenant de la même origine que le domaine cible."
|
2200 |
|
2201 |
-
#: lib/help.php:
|
2202 |
-
msgid ""
|
2203 |
-
"Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
|
2204 |
msgstr ""
|
2205 |
"Activer la propriété <code>HttpOnly</code> pour tous les cookies afin "
|
2206 |
-
"d'atténuer les menaces XSS qui génèrent des vols de cookies
|
2207 |
|
2208 |
-
#: lib/help.php:
|
2209 |
msgid ""
|
2210 |
-
"
|
2211 |
"scripting by preventing them from being accessed through client-side "
|
2212 |
"scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins "
|
2213 |
"or any other PHP script, add the <code>HttpOnly</code> flag if it is "
|
@@ -2215,14 +2358,14 @@ msgid ""
|
|
2215 |
"headers right before they are sent to your visitors. Note that WordPress "
|
2216 |
"sets that flag on the logged in user cookies only."
|
2217 |
msgstr ""
|
2218 |
-
"
|
2219 |
"JavaScript d'accéder aux cookies de l'utilisateur. NinjaFirewall peut "
|
2220 |
"intercepter les cookies envoyés par vos scripts PHP, activer la propriété "
|
2221 |
"<code>HttpOnly</code> si elle est manquante, puis réinjecter les cookies "
|
2222 |
"dans la réponse HTTP juste avant que celle-ci ne soit envoyée à vos "
|
2223 |
"visiteurs."
|
2224 |
|
2225 |
-
#: lib/help.php:
|
2226 |
msgid ""
|
2227 |
"If your PHP scripts send cookies that need to be accessed from JavaScript, "
|
2228 |
"you should keep that option disabled."
|
@@ -2230,42 +2373,42 @@ msgstr ""
|
|
2230 |
"Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
|
2231 |
"partir de JavaScript, vous devez garder cette option désactivée."
|
2232 |
|
2233 |
-
#: lib/help.php:
|
2234 |
msgid ""
|
2235 |
"Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
|
2236 |
-
"connections to the server
|
2237 |
msgstr ""
|
2238 |
"Activer <code>Strict-Transport-Security</code> (HSTS) pour forcer les "
|
2239 |
-
"connexions sécurisées vers le serveur
|
2240 |
|
2241 |
-
#: lib/help.php:
|
2242 |
msgid ""
|
2243 |
-
"
|
2244 |
"will not allow the user to access the web application over insecure HTTP "
|
2245 |
"protocol. It helps to defend against cookie hijacking and Man-in-the-middle "
|
2246 |
"attacks. Most recent browsers support HSTS headers."
|
2247 |
msgstr ""
|
2248 |
-
"
|
2249 |
"navigateurs n'accepteront pas de se connecter au site si la connexion n'est "
|
2250 |
"pas sécurisée (HTTPS). Cela permet de se défendre contre les détournements "
|
2251 |
"de cookies ou les attaques du type \"Man-in-the-middle\". La plupart des "
|
2252 |
"navigateurs récents sont compatibles avec cette politique."
|
2253 |
|
2254 |
-
#: lib/help.php:
|
2255 |
-
msgid "Set <code>Content-Security-Policy</code
|
2256 |
-
msgstr "Activer <code>Content-Security-Policy</code>
|
2257 |
|
2258 |
-
#: lib/help.php:
|
2259 |
msgid ""
|
2260 |
-
"
|
2261 |
"attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
|
2262 |
"objects (Java, ActiveX, audio and video files), and other HTML5 features."
|
2263 |
msgstr ""
|
2264 |
-
"
|
2265 |
"code JavaScript, les styles CSS, frames/iframes HTML, polices, images, "
|
2266 |
"objets (Java, ActiveX, fichiers audio et video), mais aussi les WebSocket."
|
2267 |
|
2268 |
-
#: lib/help.php:
|
2269 |
msgid ""
|
2270 |
"NinjaFirewall lets you configure the CSP policy separately for the frontend "
|
2271 |
"(blog, website) and the backend (WordPress admin dashboard)."
|
@@ -2273,23 +2416,23 @@ msgstr ""
|
|
2273 |
"NinjaFirewall vous permet de configurer CSP séparément pour le site et "
|
2274 |
"l'interface d'administration de WordPress."
|
2275 |
|
2276 |
-
#: lib/help.php:
|
2277 |
-
msgid "Set <code>Referrer-Policy</code
|
2278 |
-
msgstr "Activer <code>Referrer-Policy</code>
|
2279 |
|
2280 |
-
#: lib/help.php:
|
2281 |
msgid ""
|
2282 |
-
"
|
2283 |
"header, should be included with requests made."
|
2284 |
msgstr ""
|
2285 |
-
"
|
2286 |
"incluses dans l'en-tête Referer."
|
2287 |
|
2288 |
-
#: lib/help.php:
|
2289 |
-
msgid "Block PHP built-in wrappers
|
2290 |
-
msgstr "Bloquer les gestionnaires (wrappers) PHP dangereux
|
2291 |
|
2292 |
-
#: lib/help.php:
|
2293 |
msgid ""
|
2294 |
"PHP has several wrappers for use with the filesystem functions. It is "
|
2295 |
"possible for an attacker to use them to bypass firewalls and various IDS to "
|
@@ -2309,11 +2452,11 @@ msgstr ""
|
|
2309 |
"requête <code>GET</code> ou <code>POST</code>, des cookies, ou dans les "
|
2310 |
"variables <code>HTTP_REFERER</code> et <code>HTTP_USER_AGENT</code>."
|
2311 |
|
2312 |
-
#: lib/help.php:
|
2313 |
-
msgid "Block serialized PHP objects
|
2314 |
-
msgstr "Bloquer les objets PHP sérialisés
|
2315 |
|
2316 |
-
#: lib/help.php:
|
2317 |
#, php-format
|
2318 |
msgid ""
|
2319 |
"Object Serialization is a PHP feature used by many applications to generate "
|
@@ -2332,209 +2475,112 @@ msgstr ""
|
|
2332 |
"<code>POST</code>, les cookies, ou dans les variables <code>HTTP_REFERER</"
|
2333 |
"code> et <code>HTTP_USER_AGENT</code>."
|
2334 |
|
2335 |
-
#: lib/help.php:
|
2336 |
-
msgid "Hide PHP notice and error messages:"
|
2337 |
-
msgstr "Masquer les messages d'erreur de PHP :"
|
2338 |
-
|
2339 |
-
#: lib/help.php:247
|
2340 |
msgid ""
|
2341 |
-
"
|
2342 |
"leak sensitive informations which can be exploited by hackers."
|
2343 |
msgstr ""
|
2344 |
-
"
|
2345 |
"afficher des informations sensibles qui peuvent être exploitées "
|
2346 |
"ultérieurement par des pirates."
|
2347 |
|
2348 |
-
#: lib/help.php:
|
2349 |
msgid ""
|
2350 |
"Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
2351 |
-
"<code>PATH_INFO</code
|
2352 |
msgstr ""
|
2353 |
"Nettoyer <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
2354 |
-
"<code>PATH_INFO</code
|
2355 |
|
2356 |
-
#: lib/help.php:
|
2357 |
msgid ""
|
2358 |
-
"
|
2359 |
"variables to prevent various XSS and database injection attempts."
|
2360 |
msgstr ""
|
2361 |
-
"
|
2362 |
"variables."
|
2363 |
|
2364 |
-
#: lib/help.php:
|
2365 |
#, php-format
|
2366 |
msgid ""
|
2367 |
-
"Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests
|
2368 |
msgstr ""
|
2369 |
"Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code> "
|
2370 |
-
"(%s)
|
2371 |
|
2372 |
-
#: lib/help.php:
|
2373 |
msgid ""
|
2374 |
-
"
|
2375 |
"code> server variable in a <code>GET</code> or <code>POST</code> request. "
|
2376 |
"Hackers use shell scripts that often need to pass this value, but most "
|
2377 |
"legitimate programs do not."
|
2378 |
msgstr ""
|
2379 |
-
"
|
2380 |
"<code>DOCUMENT_ROOT</code> dans une requête <code>GET</code> ou <code>POST</"
|
2381 |
"code>. Les pirates utilisent souvent des scripts qui nécessitent d'utiliser "
|
2382 |
"cette variable, mais pas la plupart des applications légitimes (hormis "
|
2383 |
"certains scripts d'installation ou de configuration)."
|
2384 |
|
2385 |
-
#: lib/help.php:
|
2386 |
-
msgid "Block ASCII character 0x00 (NULL byte):"
|
2387 |
-
msgstr "Bloquer le caractère ASCII 0x00 (NULL byte) :"
|
2388 |
-
|
2389 |
-
#: lib/help.php:252
|
2390 |
msgid ""
|
2391 |
-
"
|
2392 |
"<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
|
2393 |
"code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> variables "
|
2394 |
"containing the ASCII character 0x00 (NULL byte). Such a character is "
|
2395 |
"dangerous and should always be rejected."
|
2396 |
msgstr ""
|
2397 |
-
"
|
2398 |
-
"variable
|
2399 |
-
"<code>
|
2400 |
"contenant le caractère ASCI 0x00 (NULL byte) sera bloquée immédiatement. Ce "
|
2401 |
"caractère est dangereux et devrait toujours être rejeté."
|
2402 |
|
2403 |
-
#: lib/help.php:
|
2404 |
-
msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
|
2405 |
-
msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31 :"
|
2406 |
-
|
2407 |
-
#: lib/help.php:253
|
2408 |
msgid ""
|
2409 |
-
"
|
2410 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
|
2411 |
"ASCII characters from 1 to 8 and 14 to 31."
|
2412 |
msgstr ""
|
2413 |
-
"
|
2414 |
"variable <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> contenant "
|
2415 |
"des caractères ASCII 1 à 8 et 14 à 31 sera bloquée."
|
2416 |
|
2417 |
-
#: lib/help.php:
|
2418 |
-
|
|
|
|
|
|
|
2419 |
msgid ""
|
2420 |
-
"
|
2421 |
-
"
|
2422 |
-
"sure you trust them all before doing so).<br />This feature applies to all "
|
2423 |
-
"Firewall Policies listed below, except <code>FORCE_SSL_ADMIN</code>, "
|
2424 |
-
"<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> options and "
|
2425 |
-
"the <a href=\"%s\">Login Protection</a> which, if enabled, are always "
|
2426 |
-
"enforced."
|
2427 |
msgstr ""
|
2428 |
-
"
|
2429 |
-
"
|
2430 |
-
"utilisateurs connectés (avant de le faire, assurez-vous que ce sont tous des "
|
2431 |
-
"utilisateurs de confiance).<br />Cela vaut pour toutes les politiques de "
|
2432 |
-
"pare-feu énumérées ci-dessous, à l'exception de <code>FORCE_SSL_ADMIN</"
|
2433 |
-
"code>, <code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> et "
|
2434 |
-
"les options de la <a href=\"%s\">Page de Connexion</a> qui, si elle sont "
|
2435 |
-
"activées, seront toujours appliquées."
|
2436 |
-
|
2437 |
-
#: lib/help.php:273 lib/monitoring.php:46
|
2438 |
-
msgid "File Guard"
|
2439 |
-
msgstr "File Guard"
|
2440 |
|
2441 |
-
#: lib/help.php:
|
2442 |
msgid ""
|
2443 |
-
"
|
2444 |
-
"
|
|
|
|
|
2445 |
msgstr ""
|
2446 |
-
"
|
2447 |
-
"
|
|
|
|
|
|
|
2448 |
|
2449 |
-
#: lib/help.php:
|
|
|
2450 |
msgid ""
|
2451 |
-
"
|
2452 |
-
"
|
2453 |
-
"his browser or a script, NinjaFirewall would hook the HTTP request and "
|
2454 |
-
"immediately detect that the file was recently modified/created. It would "
|
2455 |
-
"send you a detailed alert (script name, IP, request, date and time). Alerts "
|
2456 |
-
"will be sent to the contact email address defined in the \"Event "
|
2457 |
-
"Notifications\" menu."
|
2458 |
msgstr ""
|
2459 |
-
"
|
2460 |
-
"
|
2461 |
-
"
|
2462 |
-
"intercepterait la requête HTTP et détecterait immédiatement que le fichier a "
|
2463 |
-
"été récemment modifié ou créé. Il vous enverrait une alerte détaillée (nom "
|
2464 |
-
"du script, adresse IP, requête HTTP, la date et l'heure). Les alertes seront "
|
2465 |
-
"envoyées à l'adresse e-mail de contact définie dans le menu \"Notifications "
|
2466 |
-
"d’Événement\"."
|
2467 |
|
2468 |
-
#: lib/help.php:
|
2469 |
-
msgid ""
|
2470 |
-
"If you do not want to monitor a folder, you can exclude its full path or a "
|
2471 |
-
"part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
|
2472 |
-
"code> etc). NinjaFirewall will compare this value to the <code>"
|
2473 |
-
"$_SERVER[\"SCRIPT_FILENAME\"]</code> server variable and, if it matches, "
|
2474 |
-
"will ignore it."
|
2475 |
-
msgstr ""
|
2476 |
-
"Pour exclure un répertoire, vous pouvez entrer son chemin complet ou une "
|
2477 |
-
"partie de celui-ci (par ex. <code>/var/www/public_html/cache/</code> ou "
|
2478 |
-
"simplement <code>/cache/</code>). NinjaFirewall comparera cette valeur à la "
|
2479 |
-
"variable <code>$_SERVER[\"SCRIPT_FILENAME\"]</code> et, si elle correspond, "
|
2480 |
-
"l'ignorera."
|
2481 |
-
|
2482 |
-
#: lib/help.php:279
|
2483 |
-
msgid ""
|
2484 |
-
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
|
2485 |
-
"code>)."
|
2486 |
-
msgstr ""
|
2487 |
-
"Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
|
2488 |
-
"bar/,/cache/</code>)."
|
2489 |
-
|
2490 |
-
#: lib/help.php:280
|
2491 |
-
msgid ""
|
2492 |
-
"File Guard real-time detection is a totally unique feature, because "
|
2493 |
-
"NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
|
2494 |
-
"sent to any PHP script, even if that script is not part of the WordPress "
|
2495 |
-
"package (third-party software, shell script, backdoor etc)."
|
2496 |
-
msgstr ""
|
2497 |
-
"La détection en temps réel de File Guard est une caractéristique tout à fait "
|
2498 |
-
"unique, parce NinjaFirewall est la seule extension pour WordPress pouvant "
|
2499 |
-
"intercepter les requêtes HTTP envoyées à tout script PHP, même si ce dernier "
|
2500 |
-
"ne fait pas partie de WordPress (logiciel tiers, backdoor, etc)."
|
2501 |
-
|
2502 |
-
#: lib/help.php:286 lib/monitoring.php:47
|
2503 |
-
msgid "File Check"
|
2504 |
-
msgstr "File Check"
|
2505 |
-
|
2506 |
-
#: lib/help.php:287
|
2507 |
-
msgid ""
|
2508 |
-
"File Check lets you perform file integrity monitoring upon request or on a "
|
2509 |
-
"specific interval."
|
2510 |
-
msgstr ""
|
2511 |
-
"File Check vous permet d'effectuer une analyse de l'intégrité de vos "
|
2512 |
-
"fichiers sur demande ou à un intervalle spécifique défini."
|
2513 |
-
|
2514 |
-
#: lib/help.php:289
|
2515 |
-
msgid ""
|
2516 |
-
"You need to create a snapshot of all your files and then, at a later time, "
|
2517 |
-
"you can scan your system to compare it with the previous snapshot. Any "
|
2518 |
-
"modification will be immediately detected: file content, file permissions, "
|
2519 |
-
"file ownership, timestamp as well as file creation and deletion."
|
2520 |
-
msgstr ""
|
2521 |
-
"Vous devez créer un instantané de tous vos fichiers, puis, ultérieurement, "
|
2522 |
-
"vous pouvez scanner votre système pour le comparer avec l'instantané "
|
2523 |
-
"précédent. Toute modification sera immédiatement détectée : contenu, "
|
2524 |
-
"permissions et propriétés des fichiers, leur création et suppression ainsi "
|
2525 |
-
"que l'horodatage."
|
2526 |
-
|
2527 |
-
#: lib/help.php:291
|
2528 |
-
#, php-format
|
2529 |
-
msgid ""
|
2530 |
-
"Create a snapshot of all files stored in that directory: by default, the "
|
2531 |
-
"directory is set to WordPress <code>ABSPATH</code> (%s)"
|
2532 |
-
msgstr ""
|
2533 |
-
"Créer un instantané de tous les fichiers se trouvant dans ce "
|
2534 |
-
"répertoire : par défaut, le repertoire est l'<code>ABSPATH</code> de "
|
2535 |
-
"WordPress (%s)"
|
2536 |
-
|
2537 |
-
#: lib/help.php:292
|
2538 |
msgid ""
|
2539 |
"Exclude the following files/folders: you can enter a directory or a file "
|
2540 |
"name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
|
@@ -2545,7 +2591,7 @@ msgstr ""
|
|
2545 |
"partie de celui-ci (par ex. <code>foo</code>), ou même exclure une extension "
|
2546 |
"de fichier (par ex. <code>.css</code>)."
|
2547 |
|
2548 |
-
#: lib/help.php:
|
2549 |
msgid ""
|
2550 |
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
|
2551 |
"code>)."
|
@@ -2553,7 +2599,7 @@ msgstr ""
|
|
2553 |
"Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
|
2554 |
"bar/,.css,.png</code>)."
|
2555 |
|
2556 |
-
#: lib/help.php:
|
2557 |
msgid ""
|
2558 |
"Do not follow symbolic links: by default, NinjaFirewall will not follow "
|
2559 |
"symbolic links."
|
@@ -2561,11 +2607,11 @@ msgstr ""
|
|
2561 |
"Ne pas suivre les liens symboliques : par défaut, NinjaFirewall ignore "
|
2562 |
"les liens symboliques lors de son analyse des fichiers."
|
2563 |
|
2564 |
-
#: lib/help.php:
|
2565 |
msgid "Scheduled scans"
|
2566 |
msgstr "Analyses planifiées"
|
2567 |
|
2568 |
-
#: lib/help.php:
|
2569 |
msgid ""
|
2570 |
"NinjaFirewall can scan your system on a specific interval (hourly, "
|
2571 |
"twicedaily or daily)."
|
@@ -2573,7 +2619,7 @@ msgstr ""
|
|
2573 |
"NinjaFirewall peut scanner votre système à intervalle régulier (une fois par "
|
2574 |
"heure, deux fois par jour ou tous les jours)."
|
2575 |
|
2576 |
-
#: lib/help.php:
|
2577 |
msgid ""
|
2578 |
"It can either send you a scan report only if changes are detected, or always "
|
2579 |
"send you one after each scan."
|
@@ -2582,7 +2628,7 @@ msgstr ""
|
|
2582 |
"été détectés, ou bien vous en envoyer un systématiquement après chaque "
|
2583 |
"analyse."
|
2584 |
|
2585 |
-
#: lib/help.php:
|
2586 |
msgid ""
|
2587 |
"Reports will be sent to the contact email address defined in the \"Event "
|
2588 |
"Notifications\" menu."
|
@@ -2590,7 +2636,7 @@ msgstr ""
|
|
2590 |
"Les rapports seront envoyés à l'adresse e-mail définie dans la page "
|
2591 |
"\"Notifications d'Événement\"."
|
2592 |
|
2593 |
-
#: lib/help.php:
|
2594 |
#, php-format
|
2595 |
msgid ""
|
2596 |
"Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
|
@@ -2599,11 +2645,76 @@ msgstr ""
|
|
2599 |
"Les analyses planifiées utilisent le <a href=\"%s\">pseudo cron de "
|
2600 |
"WordPress</a> qui ne fonctionne que si votre site reçoit un trafic suffisant."
|
2601 |
|
2602 |
-
#: lib/help.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2603 |
msgid "Network"
|
2604 |
msgstr "Réseau"
|
2605 |
|
2606 |
-
#: lib/help.php:
|
2607 |
msgid ""
|
2608 |
"Even if NinjaFirewall administration menu is only available to the Super "
|
2609 |
"Admin (from the main site), you can still display its status to all sites in "
|
@@ -2615,7 +2726,7 @@ msgstr ""
|
|
2615 |
"du réseau en ajoutant une petite icône à leur barre d'administration. Elle "
|
2616 |
"ne sera visible que par les administrateurs de ces sites."
|
2617 |
|
2618 |
-
#: lib/help.php:
|
2619 |
msgid ""
|
2620 |
"It is recommended to enable this feature as it is the only way to know "
|
2621 |
"whether the sites in your network are protected and if NinjaFirewall "
|
@@ -2625,7 +2736,7 @@ msgstr ""
|
|
2625 |
"si les sites de votre réseau sont protégés et si l'installation de "
|
2626 |
"NinjaFirewall a réussi."
|
2627 |
|
2628 |
-
#: lib/help.php:
|
2629 |
msgid ""
|
2630 |
"Note that when it is disabled, the icon still remains visible to you, the "
|
2631 |
"Super Admin."
|
@@ -2633,7 +2744,7 @@ msgstr ""
|
|
2633 |
"Notez que même lorsqu'il est désactivé, l'icône reste visible pour vous, le "
|
2634 |
"Super Administrateur."
|
2635 |
|
2636 |
-
#: lib/help.php:
|
2637 |
msgid ""
|
2638 |
"NinjaFirewall can alert you by email on specific events triggered within "
|
2639 |
"your blog. They include installations, updates, activations etc, as well as "
|
@@ -2652,11 +2763,11 @@ msgstr ""
|
|
2652 |
"après avoir pénétré dans votre Tableau de bord de WordPress, d'y installer "
|
2653 |
"une porte dérobée (backdoor) afin de prendre le contrôle de votre blog."
|
2654 |
|
2655 |
-
#: lib/help.php:
|
2656 |
msgid "Login Protection"
|
2657 |
msgstr "Page de Connexion"
|
2658 |
|
2659 |
-
#: lib/help.php:
|
2660 |
msgid ""
|
2661 |
"By processing incoming HTTP requests before your blog and any of its "
|
2662 |
"plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
|
@@ -2669,7 +2780,7 @@ msgstr ""
|
|
2669 |
"compris les attaques distribuées provenant de plusieurs milliers d'adresses "
|
2670 |
"IP différentes."
|
2671 |
|
2672 |
-
#: lib/help.php:
|
2673 |
msgid ""
|
2674 |
"You can choose two different types of protection: a password or a captcha. "
|
2675 |
"You can enable the protection only if an attack is detected or to keep it "
|
@@ -2679,11 +2790,11 @@ msgstr ""
|
|
2679 |
"captcha. Vous pouvez choisir d'activer la protection uniquement lorsqu'une "
|
2680 |
"attaque est détectée ou bien l'activer en permanence."
|
2681 |
|
2682 |
-
#: lib/help.php:
|
2683 |
msgid "Yes, if under attack:"
|
2684 |
msgstr "Oui, si attaque en cours :"
|
2685 |
|
2686 |
-
#: lib/help.php:
|
2687 |
msgid ""
|
2688 |
"The protection will be triggered when too many login attempts are detected, "
|
2689 |
"regardless of the offending IP. It blocks the attack instantly and prevents "
|
@@ -2698,11 +2809,11 @@ msgstr ""
|
|
2698 |
"utilisant soit une combinaison nom d'utilisateur / mot de passe prédéfinie, "
|
2699 |
"soit un code captcha."
|
2700 |
|
2701 |
-
#: lib/help.php:
|
2702 |
msgid "Always ON:"
|
2703 |
msgstr "Toujours activée :"
|
2704 |
|
2705 |
-
#: lib/help.php:
|
2706 |
msgid ""
|
2707 |
"NinjaFirewall will always enforce the HTTP authentication or captcha "
|
2708 |
"implementation each time you access the login page."
|
@@ -2710,11 +2821,11 @@ msgstr ""
|
|
2710 |
"Vous serez toujours invité à saisir votre nom d'utilisateur / mot de passe, "
|
2711 |
"ou le code du captcha, chaque fois que vous accéderez à la page de connexion."
|
2712 |
|
2713 |
-
#: lib/help.php:
|
2714 |
msgid "Type of protection:"
|
2715 |
msgstr "Type de protection :"
|
2716 |
|
2717 |
-
#: lib/help.php:
|
2718 |
msgid ""
|
2719 |
"<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
|
2720 |
"own very fast authentication scheme and it is compatible with any HTTP "
|
@@ -2724,15 +2835,15 @@ msgstr ""
|
|
2724 |
"utilise son propre système d'authentification, rapide et compatible avec "
|
2725 |
"n'importe quel serveur HTTP (Apache, Nginx, Lighttpd etc)."
|
2726 |
|
2727 |
-
#: lib/help.php:
|
2728 |
msgid "<b>Captcha:</b> It will display a 5-character captcha code."
|
2729 |
msgstr "<b>Captcha :</b> Affichera un code captcha à 5 caractères."
|
2730 |
|
2731 |
-
#: lib/help.php:
|
2732 |
msgid "Bot protection:"
|
2733 |
msgstr "Protection contre les bots :"
|
2734 |
|
2735 |
-
#: lib/help.php:
|
2736 |
msgid ""
|
2737 |
"NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
|
2738 |
"before they start a brute-force attack."
|
@@ -2740,11 +2851,11 @@ msgstr ""
|
|
2740 |
"NinjaFirewall tentera de bloquer les bots et les scripts immédiatement, "
|
2741 |
"c'est-à-dire avant même qu'ils ne commencent une attaque par force brute."
|
2742 |
|
2743 |
-
#: lib/help.php:
|
2744 |
msgid "AUTH log"
|
2745 |
msgstr "Journal d'authentification"
|
2746 |
|
2747 |
-
#: lib/help.php:
|
2748 |
msgid ""
|
2749 |
"NinjaFirewall can write to the server Authentication log when the brute-"
|
2750 |
"force protection is triggered. This can be useful to the system "
|
@@ -2756,7 +2867,7 @@ msgstr ""
|
|
2756 |
"surveillance ou pour bloquer l'IP incriminée au niveau du pare-feu du "
|
2757 |
"serveur."
|
2758 |
|
2759 |
-
#: lib/help.php:
|
2760 |
msgid ""
|
2761 |
"If you have a shared hosting account, keep this option disabled as you do "
|
2762 |
"not have any access to the server's logs."
|
@@ -2764,7 +2875,7 @@ msgstr ""
|
|
2764 |
"Si vous avez un hébergement mutualisé, laissez cette option désactivée car "
|
2765 |
"vous n'avez pas accès aux journaux du serveur."
|
2766 |
|
2767 |
-
#: lib/help.php:
|
2768 |
msgid ""
|
2769 |
"On Debian-based systems, the log is located in <code>/var/log/auth.log</"
|
2770 |
"code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
|
@@ -2774,19 +2885,19 @@ msgstr ""
|
|
2774 |
"sous Red Hat, dans <code>/var/log/secure</code>. Le format utilisé est le "
|
2775 |
"suivant :"
|
2776 |
|
2777 |
-
#: lib/help.php:
|
2778 |
msgid "AA: the process ID (PID)."
|
2779 |
msgstr "AA : l'identifiant de processus (PID)."
|
2780 |
|
2781 |
-
#: lib/help.php:
|
2782 |
msgid "BB: the user IPv4 or IPv6 address."
|
2783 |
msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
|
2784 |
|
2785 |
-
#: lib/help.php:
|
2786 |
msgid "CC: the blog (sub-)domain name."
|
2787 |
msgstr "CC : le nom de (sous-)domaine du blog."
|
2788 |
|
2789 |
-
#: lib/help.php:
|
2790 |
msgid ""
|
2791 |
"DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
|
2792 |
"API</code>."
|
@@ -2794,16 +2905,16 @@ msgstr ""
|
|
2794 |
"DD : la cible; il peut s'agir soit de <code>wp-login.php</code>, soit de "
|
2795 |
"<code>XML-RPC API</code>."
|
2796 |
|
2797 |
-
#: lib/help.php:
|
2798 |
msgid "EE: the time, in minutes, the protection will remain active."
|
2799 |
msgstr ""
|
2800 |
"EE : le temps, en minutes, pendant lequel la protection restera active."
|
2801 |
|
2802 |
-
#: lib/help.php:
|
2803 |
msgid "Sample loglines:"
|
2804 |
msgstr "Exemple :"
|
2805 |
|
2806 |
-
#: lib/help.php:
|
2807 |
#, php-format
|
2808 |
msgid ""
|
2809 |
"Be careful if you are behind a load balancer, reverse-proxy or CDN because "
|
@@ -2823,11 +2934,11 @@ msgstr ""
|
|
2823 |
"Alternativement, vous pouvez utiliser le fichier <code><a href=\"%s\">."
|
2824 |
"htninja</a></code>."
|
2825 |
|
2826 |
-
#: lib/help.php:
|
2827 |
msgid "Firewall Log"
|
2828 |
msgstr "Journal du Pare-feu"
|
2829 |
|
2830 |
-
#: lib/help.php:
|
2831 |
msgid ""
|
2832 |
"The firewall log displays blocked and sanitised requests as well as some "
|
2833 |
"useful information. It has 6 columns:"
|
@@ -2835,18 +2946,18 @@ msgstr ""
|
|
2835 |
"Le journal du pare-feu affiche les requêtes HTTP qui ont été bloquées ou "
|
2836 |
"nettoyées ainsi que d'autres informations utiles. Il a six colonnes :"
|
2837 |
|
2838 |
-
#: lib/help.php:
|
2839 |
msgid "DATE : date and time of the incident."
|
2840 |
msgstr "DATE : date et heure de l'incident."
|
2841 |
|
2842 |
-
#: lib/help.php:
|
2843 |
msgid ""
|
2844 |
"INCIDENT : unique incident number/ID as it was displayed to the blocked user."
|
2845 |
msgstr ""
|
2846 |
"INCIDENT : le numéro d'incident (ID) unique. Par défaut, il sera aussi "
|
2847 |
"affiché à l'utilisateur dont la requête aura été bloquée par le pare-feu."
|
2848 |
|
2849 |
-
#: lib/help.php:
|
2850 |
msgid ""
|
2851 |
"LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
|
2852 |
"<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
|
@@ -2856,7 +2967,7 @@ msgstr ""
|
|
2856 |
"<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
|
2857 |
"et mode débogage (<code>DEBUG_ON</code>)."
|
2858 |
|
2859 |
-
#: lib/help.php:
|
2860 |
msgid ""
|
2861 |
"RULE : reference of the NinjaFirewall built-in security rule that triggered "
|
2862 |
"the action. A hyphen (<code>-</code>) instead of a number means it was a "
|
@@ -2867,11 +2978,11 @@ msgstr ""
|
|
2867 |
"d'un numéro signifie que la règle provient de votre configuration "
|
2868 |
"personnelle de la page \"Politiques du Pare-feu\"."
|
2869 |
|
2870 |
-
#: lib/help.php:
|
2871 |
msgid "IP : the user IPv4 or IPv6 address."
|
2872 |
msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
|
2873 |
|
2874 |
-
#: lib/help.php:
|
2875 |
msgid ""
|
2876 |
"REQUEST : the HTTP request including offending variables and values as well "
|
2877 |
"as the reason the action was logged."
|
@@ -2879,11 +2990,11 @@ msgstr ""
|
|
2879 |
"REQUEST : la requête HTTP avec ses variables et valeurs, ainsi que la raison "
|
2880 |
"qui a déclenché l'incident."
|
2881 |
|
2882 |
-
#: lib/help.php:
|
2883 |
msgid "Auto-delete log"
|
2884 |
msgstr "Suppression automatique des journaux"
|
2885 |
|
2886 |
-
#: lib/help.php:
|
2887 |
msgid ""
|
2888 |
"This options lets you configure NinjaFirewall to delete its old logs "
|
2889 |
"automatically. By default, logs are never deleted, <b>even when uninstall "
|
@@ -2896,7 +3007,7 @@ msgstr ""
|
|
2896 |
"cette valeur à <code>0</code> si vous ne voulez pas supprimer les anciens "
|
2897 |
"journaux."
|
2898 |
|
2899 |
-
#: lib/help.php:
|
2900 |
msgid ""
|
2901 |
"Centralized Logging lets you remotely access the firewall log of all your "
|
2902 |
"NinjaFirewall protected websites from one single installation. You do not "
|
@@ -2907,13 +3018,13 @@ msgstr ""
|
|
2907 |
"NinjaFirewall. Vous n'avez plus besoin de vous connecter à chaque site pour "
|
2908 |
"analyser vos journaux."
|
2909 |
|
2910 |
-
#: lib/help.php:
|
2911 |
#, php-format
|
2912 |
msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
|
2913 |
msgstr ""
|
2914 |
"<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
|
2915 |
|
2916 |
-
#: lib/help.php:
|
2917 |
msgid ""
|
2918 |
"Enter your public key (optional): This is the public key that was created "
|
2919 |
"from your main server."
|
@@ -2921,7 +3032,7 @@ msgstr ""
|
|
2921 |
"Entrez votre clé publique (optionnel) : Il s'agit de la clé qui a été créée "
|
2922 |
"depuis le serveur principal."
|
2923 |
|
2924 |
-
#: lib/help.php:
|
2925 |
msgid ""
|
2926 |
"Centralized Logging will keep working even if NinjaFirewall is disabled. "
|
2927 |
"Delete your public key below if you want to disable it."
|
@@ -2930,11 +3041,11 @@ msgstr ""
|
|
2930 |
"NinjaFirewall. Si vous souhaitez complètement désactiver cette option, "
|
2931 |
"supprimez votre clé publique ci-dessous. "
|
2932 |
|
2933 |
-
#: lib/help.php:
|
2934 |
msgid "Live Log"
|
2935 |
msgstr "Live Log"
|
2936 |
|
2937 |
-
#: lib/help.php:
|
2938 |
msgid ""
|
2939 |
"Live Log lets you watch your blog traffic in real time, just like the Unix "
|
2940 |
"<code>tail -f</code> command. Note that requests sent to static elements "
|
@@ -2946,7 +3057,7 @@ msgstr ""
|
|
2946 |
"statiques comme les fichiers JS/CSS ou les images ne sont pas traitées par "
|
2947 |
"NinjaFirewall."
|
2948 |
|
2949 |
-
#: lib/help.php:
|
2950 |
msgid ""
|
2951 |
"You can enable/disable the monitoring process, change the refresh rate, "
|
2952 |
"clear the screen, enable automatic vertical scrolling, change the log "
|
@@ -2957,7 +3068,7 @@ msgstr ""
|
|
2957 |
"effacer l'écran, changer le format d'affichage, le fuseau horaire et choisir "
|
2958 |
"le type de trafic à visualiser (HTTP/HTTPS)."
|
2959 |
|
2960 |
-
#: lib/help.php:
|
2961 |
msgid ""
|
2962 |
"You can also apply filters to include or exclude files and folders "
|
2963 |
"(REQUEST_URI)."
|
@@ -2965,7 +3076,7 @@ msgstr ""
|
|
2965 |
"Vous pouvez également appliquer des filtres pour inclure ou exclure des "
|
2966 |
"fichiers et des dossiers (REQUEST_URI)."
|
2967 |
|
2968 |
-
#: lib/help.php:
|
2969 |
msgid ""
|
2970 |
"Live Log does not make use of any WordPress core file (e.g., <code>admin-"
|
2971 |
"ajax.php</code>). It communicates directly with the firewall without loading "
|
@@ -2979,7 +3090,7 @@ msgstr ""
|
|
2979 |
"serveur, même si vous ajustez son intervalle de rafraîchissement de la page "
|
2980 |
"sur la fréquence la plus rapide (5 secondes)."
|
2981 |
|
2982 |
-
#: lib/help.php:
|
2983 |
msgid ""
|
2984 |
"If you are using the optional <code>.htninja</code> configuration file to "
|
2985 |
"whitelist your IP, the Live Log feature will not work."
|
@@ -2988,27 +3099,27 @@ msgstr ""
|
|
2988 |
"pour toujours accepter les requêtes provenant de votre adresse IP, Live Log "
|
2989 |
"ne fonctionnera pas."
|
2990 |
|
2991 |
-
#: lib/help.php:
|
2992 |
msgid "Log Format"
|
2993 |
msgstr "Format d'affichage"
|
2994 |
|
2995 |
-
#: lib/help.php:
|
2996 |
msgid "You can easily customize the log format. Possible values are:"
|
2997 |
msgstr ""
|
2998 |
"Vous pouvez facilement changer le format d'affichage en combinant une ou "
|
2999 |
"plusieurs des valeurs suivantes :"
|
3000 |
|
3001 |
-
#: lib/help.php:
|
3002 |
msgid "<code>%time</code>: the server date, time and timezone."
|
3003 |
msgstr "<code>%time</code> : la date, heure et fuseau horaire du serveur."
|
3004 |
|
3005 |
-
#: lib/help.php:
|
3006 |
msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
|
3007 |
msgstr ""
|
3008 |
"<code>%name</code> : le nom de l'utilisateur (Authentification HTTP), s'il "
|
3009 |
"existe."
|
3010 |
|
3011 |
-
#: lib/help.php:
|
3012 |
#, php-format
|
3013 |
msgid ""
|
3014 |
"<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
|
@@ -3018,28 +3129,28 @@ msgstr ""
|
|
3018 |
"serveur est derrière un CDN ou un proxy, cette variable retournera l'adresse "
|
3019 |
"IP de celui-ci."
|
3020 |
|
3021 |
-
#: lib/help.php:
|
3022 |
msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
|
3023 |
msgstr "<code>%method</code> : la méthode HTTP (ex. GET, POST)."
|
3024 |
|
3025 |
-
#: lib/help.php:
|
3026 |
#, php-format
|
3027 |
msgid ""
|
3028 |
"<code>%uri</code>: the URI which was given in order to access the page "
|
3029 |
"(REQUEST_URI)."
|
3030 |
msgstr "<code>%uri</code> : l'URI donnée pour accéder à la page (REQUEST_URI)."
|
3031 |
|
3032 |
-
#: lib/help.php:
|
3033 |
msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
|
3034 |
msgstr "<code>%referrer</code> : le referrer (HTTP_REFERER), s'il existe."
|
3035 |
|
3036 |
-
#: lib/help.php:
|
3037 |
#, php-format
|
3038 |
msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
|
3039 |
msgstr ""
|
3040 |
"<code>%ua</code> : l'en-tête User-Agent (HTTP_USER_AGENT), s'il existe."
|
3041 |
|
3042 |
-
#: lib/help.php:
|
3043 |
#, php-format
|
3044 |
msgid ""
|
3045 |
"<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
|
@@ -3049,13 +3160,13 @@ msgstr ""
|
|
3049 |
"votre serveur est derrière un CDN ou un proxy, cette variable retournera "
|
3050 |
"l'adresse réelle du client."
|
3051 |
|
3052 |
-
#: lib/help.php:
|
3053 |
msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
|
3054 |
msgstr ""
|
3055 |
"<code>%host</code> : l'en-tête Host de la requête courante (HTTP_HOST), si "
|
3056 |
"elle existe."
|
3057 |
|
3058 |
-
#: lib/help.php:
|
3059 |
msgid ""
|
3060 |
"Additionally, you can include any of the following characters: <code>\"</"
|
3061 |
"code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
|
@@ -3065,7 +3176,7 @@ msgstr ""
|
|
3065 |
"%</code>, <code>[</code>, <code>]</code>, <code>espace</code> et toute "
|
3066 |
"lettre minuscule <code>a-z</code>."
|
3067 |
|
3068 |
-
#: lib/help.php:
|
3069 |
msgid ""
|
3070 |
"Your website can run NinjaFirewall and be compliant with the General Data "
|
3071 |
"Protection Regulation (GDPR). For more info, please visit our blog:"
|
@@ -3073,11 +3184,11 @@ msgstr ""
|
|
3073 |
"NinjaFirewall est conforme à la réglementation générale sur la protection "
|
3074 |
"des données (RGPD). Pour plus d'informations, veuillez visiter notre blog :"
|
3075 |
|
3076 |
-
#: lib/help.php:
|
3077 |
msgid "Rules Updates"
|
3078 |
msgstr "Mise à Jour des Règles"
|
3079 |
|
3080 |
-
#: lib/help.php:
|
3081 |
msgid ""
|
3082 |
"To get the most efficient protection, you can ask NinjaFirewall to "
|
3083 |
"automatically update its security rules."
|
@@ -3085,7 +3196,7 @@ msgstr ""
|
|
3085 |
"Pour bénéficier de la protection la plus efficace, vous pouvez demander à "
|
3086 |
"NinjaFirewall de mettre à jour ses règles de sécurité automatiquement."
|
3087 |
|
3088 |
-
#: lib/help.php:
|
3089 |
msgid ""
|
3090 |
"Each time a new vulnerability is found in WordPress or one of its plugins/"
|
3091 |
"themes, a new set of security rules will be made available to protect "
|
@@ -3095,7 +3206,7 @@ msgstr ""
|
|
3095 |
"extensions ou ses thèmes, un nouvel ensemble de règles de sécurité est "
|
3096 |
"disponible pour protéger contre cette vulnérabilité si nécessaire."
|
3097 |
|
3098 |
-
#: lib/help.php:
|
3099 |
msgid ""
|
3100 |
"Only security rules will be downloaded. If a new version of NinjaFirewall "
|
3101 |
"(including new files, options and features) was available, it would have to "
|
@@ -3106,7 +3217,7 @@ msgstr ""
|
|
3106 |
"jour depuis la page des \"Extensions\" de votre tableau de bord, comme "
|
3107 |
"d'habitude."
|
3108 |
|
3109 |
-
#: lib/help.php:
|
3110 |
msgid ""
|
3111 |
"We recommend to enable this feature, as it is the <strong>best way to keep "
|
3112 |
"your WordPress secure</strong> against new vulnerabilities."
|
@@ -3115,11 +3226,11 @@ msgstr ""
|
|
3115 |
"<strong>meilleure façon de garder votre WordPress protégé</strong> contre "
|
3116 |
"les dernières vulnérabilités."
|
3117 |
|
3118 |
-
#: lib/help.php:
|
3119 |
msgid "Rules Editor"
|
3120 |
msgstr "Éditeur de Règles"
|
3121 |
|
3122 |
-
#: lib/help.php:
|
3123 |
msgid ""
|
3124 |
"Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
|
3125 |
"of built-in rules used to protect your blog against the most common "
|
@@ -3136,7 +3247,7 @@ msgstr ""
|
|
3136 |
"règles, vous pouvez utiliser l’Éditeur de règles ci-dessous pour les "
|
3137 |
"désactiver individuellement :"
|
3138 |
|
3139 |
-
#: lib/help.php:
|
3140 |
msgid ""
|
3141 |
"Check your firewall log and find the rule ID you want to disable (it is "
|
3142 |
"displayed in the <code>RULE</code> column)."
|
@@ -3144,7 +3255,7 @@ msgstr ""
|
|
3144 |
"Consultez le journal du pare-feu afin d'y trouver l'ID de la règle que vous "
|
3145 |
"souhaitez désactiver (il est affiché dans la colonne <code>RULE</code>)."
|
3146 |
|
3147 |
-
#: lib/help.php:
|
3148 |
msgid ""
|
3149 |
"Select its ID from the enabled rules list below and click the \"Disable it\" "
|
3150 |
"button."
|
@@ -3152,7 +3263,7 @@ msgstr ""
|
|
3152 |
"Sélectionnez son ID dans la liste des règles ci-dessous et cliquez sur le "
|
3153 |
"bouton \"Désactiver\"."
|
3154 |
|
3155 |
-
#: lib/help.php:
|
3156 |
msgid ""
|
3157 |
"Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
|
3158 |
"code> instead of a number, that means that the rule can be changed in the "
|
@@ -3162,20 +3273,7 @@ msgstr ""
|
|
3162 |
"d'union <code>-</code> à la place d'un nombre, cela signifie que la règle ne "
|
3163 |
"peut être modifiée quand dans la page \"Politiques du Pare-feu\"."
|
3164 |
|
3165 |
-
#: lib/
|
3166 |
-
msgid "Credits"
|
3167 |
-
msgstr "Crédits"
|
3168 |
-
|
3169 |
-
#: lib/help.php:513
|
3170 |
-
msgid ""
|
3171 |
-
"NinjaFirewall security rules protect against many vulnerabilities. Some of "
|
3172 |
-
"them were reported by the following companies, individuals or mailing lists:"
|
3173 |
-
msgstr ""
|
3174 |
-
"Les règles de sécurité de NinjaFirewall protègent contre de nombreuses "
|
3175 |
-
"vulnérabilités. Certaines d'entre elles ont été découvertes par les "
|
3176 |
-
"entreprises, particuliers ou listes de diffusion suivantes:"
|
3177 |
-
|
3178 |
-
#: lib/install.php:60
|
3179 |
#, php-format
|
3180 |
msgid ""
|
3181 |
"Error: Your .htaccess file is not writable, please change its permissions: %s"
|
@@ -3183,12 +3281,12 @@ msgstr ""
|
|
3183 |
"Erreur : Votre fichier .htaccess n'est pas accessible en écriture. Veuillez "
|
3184 |
"modifier ses autorisations : %s"
|
3185 |
|
3186 |
-
#: lib/install.php:
|
3187 |
#, php-format
|
3188 |
msgid "Error: wrong parameter value (%s)."
|
3189 |
msgstr "Erreur : Mauvais paramètre (%s)."
|
3190 |
|
3191 |
-
#: lib/install.php:
|
3192 |
#, php-format
|
3193 |
msgid ""
|
3194 |
"Error: The following file is not writable, please change its permissions: %s"
|
@@ -3196,7 +3294,7 @@ msgstr ""
|
|
3196 |
"Erreur : Le fichier suivant n'est pas accessible en écriture. Veuillez "
|
3197 |
"modifier ses autorisations : %s"
|
3198 |
|
3199 |
-
#: lib/install.php:
|
3200 |
#, php-format
|
3201 |
msgid ""
|
3202 |
"NinjaFirewall detected that the requested changes seemed to crash your blog. "
|
@@ -3205,7 +3303,7 @@ msgstr ""
|
|
3205 |
"NinjaFirewall a détecté que les modifications demandées semblaient planter "
|
3206 |
"votre blog. %s"
|
3207 |
|
3208 |
-
#: lib/install.php:
|
3209 |
msgid ""
|
3210 |
"Changes have been undone. You may need to modify your selection and try "
|
3211 |
"again."
|
@@ -3213,22 +3311,22 @@ msgstr ""
|
|
3213 |
"Les modifications ont été annulées. Vous devriez peut-être modifier votre "
|
3214 |
"sélection et réessayer."
|
3215 |
|
3216 |
-
#: lib/install.php:
|
3217 |
#, php-format
|
3218 |
msgid "The website front-end returned: HTTP %s %s."
|
3219 |
msgstr "La page d'accueil du site a retourné : HTTP %s %s."
|
3220 |
|
3221 |
-
#: lib/install.php:
|
3222 |
#, php-format
|
3223 |
msgid "The website front-end returned a fatal error: %s."
|
3224 |
msgstr "La page d'accueil du site a retourné une erreur fatale : %s."
|
3225 |
|
3226 |
-
#: lib/install.php:
|
3227 |
-
#: lib/install.php:
|
3228 |
msgid "File is not writable"
|
3229 |
msgstr "Le fichier n'est pas accessible en écriture"
|
3230 |
|
3231 |
-
#: lib/install_default.php:
|
3232 |
msgid ""
|
3233 |
"Error: The installer cannot download the security rules from wordpress.org "
|
3234 |
"website."
|
@@ -3236,7 +3334,7 @@ msgstr ""
|
|
3236 |
"Erreur : Impossible de télécharger les règles de sécurité depuis le site de "
|
3237 |
"wordpress.org."
|
3238 |
|
3239 |
-
#: lib/install_default.php:
|
3240 |
msgid ""
|
3241 |
"The server may be temporarily down or you may have network connectivity "
|
3242 |
"problems? Please try again in a few minutes."
|
@@ -3245,7 +3343,7 @@ msgstr ""
|
|
3245 |
"problèmes de connectivité réseau ? Veuillez ré-essayer d'ici quelques "
|
3246 |
"minutes."
|
3247 |
|
3248 |
-
#: lib/install_default.php:
|
3249 |
msgid ""
|
3250 |
"NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
|
3251 |
"your server does not support SSL? You can force NinjaFirewall to use a non-"
|
@@ -3258,7 +3356,7 @@ msgstr ""
|
|
3258 |
"connexion non-sécurisée (HTTP) en ajoutant la ligne suivante dans votre "
|
3259 |
"fichier <strong>wp-config.php</strong> :"
|
3260 |
|
3261 |
-
#: lib/install_default.php:
|
3262 |
#, php-format
|
3263 |
msgid ""
|
3264 |
"NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
|
@@ -3457,7 +3555,7 @@ msgstr "Erreur : le mot de passe doit comporter de 6 à 32 caractères."
|
|
3457 |
msgid "Error: unable to write to the %s configuration file"
|
3458 |
msgstr "Erreur : impossible d’écrire dans le fichier de configuration %s"
|
3459 |
|
3460 |
-
#: lib/logs.php:36 ninjafirewall.php:
|
3461 |
msgid "Logs"
|
3462 |
msgstr "Journaux"
|
3463 |
|
@@ -3581,6 +3679,14 @@ msgstr ""
|
|
3581 |
"et assurez vous que l'option \"Ajouter l'Administrateur à la liste blanche\" "
|
3582 |
"est activée."
|
3583 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3584 |
#: lib/logs_live_log.php:104
|
3585 |
msgid "Refresh rate:"
|
3586 |
msgstr "Intervalle :"
|
@@ -3623,7 +3729,7 @@ msgstr "Options de Live Log"
|
|
3623 |
msgid "Inclusion and exclusion filters (REQUEST_URI)"
|
3624 |
msgstr "Filtres d'inclusion et d'exclusion (REQUEST_URI)"
|
3625 |
|
3626 |
-
#: lib/logs_live_log.php:160 lib/monitoring_file_check.php:
|
3627 |
msgid "None"
|
3628 |
msgstr "Aucune"
|
3629 |
|
@@ -3635,7 +3741,7 @@ msgstr "Doit inclure"
|
|
3635 |
msgid "Must not include"
|
3636 |
msgstr "Ne doit pas inclure"
|
3637 |
|
3638 |
-
#: lib/logs_live_log.php:164 lib/monitoring_file_check.php:
|
3639 |
#: lib/monitoring_file_guard.php:89
|
3640 |
msgid "e.g.,"
|
3641 |
msgstr "par ex."
|
@@ -3682,7 +3788,7 @@ msgstr "Sauvegarder les options"
|
|
3682 |
msgid "Error: please enter the custom log format."
|
3683 |
msgstr "Erreur : veuillez entrer le format d'affichage."
|
3684 |
|
3685 |
-
#: lib/monitoring.php:43 ninjafirewall.php:
|
3686 |
msgid "Monitoring"
|
3687 |
msgstr "Monitoring"
|
3688 |
|
@@ -3698,7 +3804,7 @@ msgstr "L'instantané a bien été supprimé."
|
|
3698 |
msgid "You must create a snapshot first."
|
3699 |
msgstr "Vous devez d'abord créer un instantané."
|
3700 |
|
3701 |
-
#: lib/monitoring_file_check.php:96 lib/monitoring_file_check.php:
|
3702 |
msgid "NinjaFirewall detected that changes were made to your files."
|
3703 |
msgstr "NinjaFirewall a détecté des changements dans vos fichiers."
|
3704 |
|
@@ -3706,21 +3812,30 @@ msgstr "NinjaFirewall a détecté des changements dans vos fichiers."
|
|
3706 |
msgid "No changes detected."
|
3707 |
msgstr "Aucun changement n'a été détecté."
|
3708 |
|
3709 |
-
#: lib/monitoring_file_check.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3710 |
msgid "Create a snapshot of all files stored in that directory"
|
3711 |
msgstr ""
|
3712 |
"Créer un instantané de tous les fichiers se trouvant dans ce répertoire"
|
3713 |
|
3714 |
-
#: lib/monitoring_file_check.php:
|
3715 |
#, php-format
|
3716 |
msgid "Default: %s"
|
3717 |
msgstr "Défaut : %s"
|
3718 |
|
3719 |
-
#: lib/monitoring_file_check.php:
|
3720 |
msgid "Exclude the following files/folders (optional)"
|
3721 |
msgstr "Exclure les fichiers / dossiers suivants (optionnel)"
|
3722 |
|
3723 |
-
#: lib/monitoring_file_check.php:
|
3724 |
msgid ""
|
3725 |
"Full or partial case-sensitive string(s). Multiple values must be comma-"
|
3726 |
"separated"
|
@@ -3728,141 +3843,141 @@ msgstr ""
|
|
3728 |
"Chaîne de caractères complète ou partielle, sensible à la casse. Plusieurs "
|
3729 |
"valeurs doivent être séparées par des virgules"
|
3730 |
|
3731 |
-
#: lib/monitoring_file_check.php:
|
3732 |
msgid "Do not follow symbolic links (default)"
|
3733 |
msgstr "Ne pas suivre les liens symboliques (défaut)"
|
3734 |
|
3735 |
-
#: lib/monitoring_file_check.php:
|
3736 |
msgid "Create Snapshot"
|
3737 |
msgstr "Créer un Instantané"
|
3738 |
|
3739 |
-
#: lib/monitoring_file_check.php:
|
3740 |
msgid "Last snapshot"
|
3741 |
msgstr "Dernier instantané"
|
3742 |
|
3743 |
-
#: lib/monitoring_file_check.php:
|
3744 |
#, php-format
|
3745 |
msgid "Created on: %s"
|
3746 |
msgstr "Créé le : %s"
|
3747 |
|
3748 |
-
#: lib/monitoring_file_check.php:
|
3749 |
#, php-format
|
3750 |
msgid "Total files: %s "
|
3751 |
msgstr "Nombre de fichiers : %s "
|
3752 |
|
3753 |
-
#: lib/monitoring_file_check.php:
|
3754 |
msgid "Directory:"
|
3755 |
msgstr "Répertoire :"
|
3756 |
|
3757 |
-
#: lib/monitoring_file_check.php:
|
3758 |
msgid "Exclusion:"
|
3759 |
msgstr "Exclusion :"
|
3760 |
|
3761 |
-
#: lib/monitoring_file_check.php:
|
3762 |
msgid "Symlinks:"
|
3763 |
msgstr "Lien symboliques :"
|
3764 |
|
3765 |
-
#: lib/monitoring_file_check.php:
|
3766 |
msgid "follow"
|
3767 |
msgstr "suivre"
|
3768 |
|
3769 |
-
#: lib/monitoring_file_check.php:
|
3770 |
msgid "do not follow"
|
3771 |
msgstr "ne pas suivre"
|
3772 |
|
3773 |
-
#: lib/monitoring_file_check.php:
|
3774 |
#, php-format
|
3775 |
msgid "Processing time: %s seconds"
|
3776 |
msgstr "Temps de traitement : %s secondes"
|
3777 |
|
3778 |
-
#: lib/monitoring_file_check.php:
|
3779 |
msgid "Download Snapshot"
|
3780 |
msgstr "Télécharger l'instantané"
|
3781 |
|
3782 |
-
#: lib/monitoring_file_check.php:
|
3783 |
msgid "Delete Snapshot"
|
3784 |
msgstr "Supprimer l'instantané"
|
3785 |
|
3786 |
-
#: lib/monitoring_file_check.php:
|
3787 |
msgid "Last changes"
|
3788 |
msgstr "Dernières modifications"
|
3789 |
|
3790 |
-
#: lib/monitoring_file_check.php:
|
3791 |
#, php-format
|
3792 |
msgid "New files: %s"
|
3793 |
msgstr "Nouveaux fichiers : %s"
|
3794 |
|
3795 |
-
#: lib/monitoring_file_check.php:
|
3796 |
#, php-format
|
3797 |
msgid "Deleted files: %s"
|
3798 |
msgstr "Fichiers supprimés : %s"
|
3799 |
|
3800 |
-
#: lib/monitoring_file_check.php:
|
3801 |
#, php-format
|
3802 |
msgid "Modified files: %s"
|
3803 |
msgstr "Fichiers modifiés : %s"
|
3804 |
|
3805 |
-
#: lib/monitoring_file_check.php:
|
3806 |
msgid "View Changes"
|
3807 |
msgstr "Voir les Modifications"
|
3808 |
|
3809 |
-
#: lib/monitoring_file_check.php:
|
3810 |
msgid "Download Changes"
|
3811 |
msgstr "Télécharger les Modifications"
|
3812 |
|
3813 |
-
#: lib/monitoring_file_check.php:
|
3814 |
msgid "Click a file to get more info about it."
|
3815 |
msgstr "Cliquez sur un fichier pour obtenir plus d'informations à son sujet."
|
3816 |
|
3817 |
-
#: lib/monitoring_file_check.php:
|
3818 |
msgid "New files:"
|
3819 |
msgstr "Nouveaux fichiers :"
|
3820 |
|
3821 |
-
#: lib/monitoring_file_check.php:
|
3822 |
msgid "Size"
|
3823 |
msgstr "Taille"
|
3824 |
|
3825 |
-
#: lib/monitoring_file_check.php:
|
3826 |
msgid "Access"
|
3827 |
msgstr "Accès"
|
3828 |
|
3829 |
-
#: lib/monitoring_file_check.php:
|
3830 |
msgid "Uid / Gid"
|
3831 |
msgstr "Uid / Gid"
|
3832 |
|
3833 |
-
#: lib/monitoring_file_check.php:
|
3834 |
msgid "Modify"
|
3835 |
msgstr "Modification"
|
3836 |
|
3837 |
-
#: lib/monitoring_file_check.php:
|
3838 |
msgid "Change"
|
3839 |
msgstr "Changement"
|
3840 |
|
3841 |
-
#: lib/monitoring_file_check.php:
|
3842 |
msgid "Deleted files:"
|
3843 |
msgstr "Fichiers supprimés :"
|
3844 |
|
3845 |
-
#: lib/monitoring_file_check.php:
|
3846 |
msgid "Modified files:"
|
3847 |
msgstr "Fichiers modifiés :"
|
3848 |
|
3849 |
-
#: lib/monitoring_file_check.php:
|
3850 |
msgid "Old"
|
3851 |
msgstr "Ancien"
|
3852 |
|
3853 |
-
#: lib/monitoring_file_check.php:
|
3854 |
msgid "New"
|
3855 |
msgstr "Nouveau"
|
3856 |
|
3857 |
-
#: lib/monitoring_file_check.php:
|
3858 |
msgid "Scan System For File Changes"
|
3859 |
msgstr "Lancer l'analyse des fichiers"
|
3860 |
|
3861 |
-
#: lib/monitoring_file_check.php:
|
3862 |
msgid "Options"
|
3863 |
msgstr "Options"
|
3864 |
|
3865 |
-
#: lib/monitoring_file_check.php:
|
3866 |
#, php-format
|
3867 |
msgid ""
|
3868 |
"It seems that %s is set. Ensure you have another way to run WP-Cron, "
|
@@ -3871,27 +3986,27 @@ msgstr ""
|
|
3871 |
"Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
|
3872 |
"File Check ne pourra pas se lancer automatiquement."
|
3873 |
|
3874 |
-
#: lib/monitoring_file_check.php:
|
3875 |
msgid "Enable scheduled scans"
|
3876 |
msgstr "Lancer File Check automatiquement"
|
3877 |
|
3878 |
-
#: lib/monitoring_file_check.php:
|
3879 |
msgid "No (default)"
|
3880 |
msgstr "Non (défaut)"
|
3881 |
|
3882 |
-
#: lib/monitoring_file_check.php:
|
3883 |
msgid "Hourly"
|
3884 |
msgstr "Une fois par heure"
|
3885 |
|
3886 |
-
#: lib/monitoring_file_check.php:
|
3887 |
msgid "Twicedaily"
|
3888 |
msgstr "Deux fois par jour"
|
3889 |
|
3890 |
-
#: lib/monitoring_file_check.php:
|
3891 |
msgid "Daily"
|
3892 |
msgstr "Tous les jours"
|
3893 |
|
3894 |
-
#: lib/monitoring_file_check.php:
|
3895 |
#, php-format
|
3896 |
msgid ""
|
3897 |
"Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
|
@@ -3900,7 +4015,7 @@ msgstr ""
|
|
3900 |
"La prochaine analyse commencera dans %s jour(s), %s heure(s), %s minute(s) "
|
3901 |
"et %s seconde(s)."
|
3902 |
|
3903 |
-
#: lib/monitoring_file_check.php:
|
3904 |
msgid ""
|
3905 |
"The next scheduled scan date is in the past! WordPress wp-cron may not be "
|
3906 |
"working or may have been disabled."
|
@@ -3908,109 +4023,109 @@ msgstr ""
|
|
3908 |
"La date de la prochaine analyse est dans le passé ! Essayez de "
|
3909 |
"recharger cette page, sinon vérifiez que WP-Cron n'a pas été désactivé."
|
3910 |
|
3911 |
-
#: lib/monitoring_file_check.php:
|
3912 |
msgid "Scheduled scan report"
|
3913 |
msgstr "Rapport d'analyse"
|
3914 |
|
3915 |
-
#: lib/monitoring_file_check.php:
|
3916 |
msgid "Send me a report by email only if changes are detected (default)"
|
3917 |
msgstr ""
|
3918 |
"Envoyez-moi un rapport uniquement si des changements ont été détectés "
|
3919 |
"(défaut)"
|
3920 |
|
3921 |
-
#: lib/monitoring_file_check.php:
|
3922 |
msgid "Always send me a report by email after a scheduled scan"
|
3923 |
msgstr "Envoyez-moi toujours un rapport après une analyse automatique"
|
3924 |
|
3925 |
-
#: lib/monitoring_file_check.php:
|
3926 |
msgid "Save Scan Options"
|
3927 |
msgstr "Sauvegarder les options"
|
3928 |
|
3929 |
-
#: lib/monitoring_file_check.php:
|
3930 |
msgid "Enter the full path to the directory to be scanned."
|
3931 |
msgstr "Entrez le chemin complet vers le répertoire à scanner."
|
3932 |
|
3933 |
-
#: lib/monitoring_file_check.php:
|
3934 |
#, php-format
|
3935 |
msgid "The directory %s does not exist."
|
3936 |
msgstr "Le répertoire %s n'existe pas."
|
3937 |
|
3938 |
-
#: lib/monitoring_file_check.php:
|
3939 |
#, php-format
|
3940 |
msgid "The directory %s is not readable."
|
3941 |
msgstr "Le répertoire %s n'est pas lisible."
|
3942 |
|
3943 |
-
#: lib/monitoring_file_check.php:
|
3944 |
#, php-format
|
3945 |
msgid "Cannot write to %s."
|
3946 |
msgstr "Impossible d'écrire dans %s."
|
3947 |
|
3948 |
-
#: lib/monitoring_file_check.php:
|
3949 |
#, php-format
|
3950 |
msgid "Error : cannot open %s directory."
|
3951 |
msgstr "Erreur : impossible d'ouvrir le répertoire %s."
|
3952 |
|
3953 |
-
#: lib/monitoring_file_check.php:
|
3954 |
#, php-format
|
3955 |
msgid "Error : %s directory is not readable."
|
3956 |
msgstr "Erreur : le répertoire %s n'est pas lisible."
|
3957 |
|
3958 |
-
#: lib/monitoring_file_check.php:
|
3959 |
#, php-format
|
3960 |
msgid "Missing options line %s, please try again."
|
3961 |
msgstr "Option manquante (ligne %s). Veuillez essayer à nouveau."
|
3962 |
|
3963 |
-
#: lib/monitoring_file_check.php:
|
3964 |
#, php-format
|
3965 |
msgid "Cannot create %s."
|
3966 |
msgstr "Impossible de créer %s."
|
3967 |
|
3968 |
-
#: lib/monitoring_file_check.php:
|
3969 |
msgid "Error reading old snapshot file."
|
3970 |
msgstr "Erreur lors de la lecture du fichier de l'ancien instantané."
|
3971 |
|
3972 |
-
#: lib/monitoring_file_check.php:
|
3973 |
msgid "Error reading new snapshot file."
|
3974 |
msgstr "Erreur lors de la lecture du fichier du nouvel instantané."
|
3975 |
|
3976 |
-
#: lib/monitoring_file_check.php:
|
3977 |
msgid "New file"
|
3978 |
msgstr "Nouveau fichier"
|
3979 |
|
3980 |
-
#: lib/monitoring_file_check.php:
|
3981 |
msgid "Modified file"
|
3982 |
msgstr "Fichier modifié"
|
3983 |
|
3984 |
-
#: lib/monitoring_file_check.php:
|
3985 |
msgid "Deleted file"
|
3986 |
msgstr "Fichier supprimé"
|
3987 |
|
3988 |
-
#: lib/monitoring_file_check.php:
|
3989 |
msgid "[NinjaFirewall] Alert: File Check detection"
|
3990 |
msgstr "[NinjaFirewall] Alerte: Détection File Check"
|
3991 |
|
3992 |
-
#: lib/monitoring_file_check.php:
|
3993 |
-
#: lib/monitoring_file_check.php:
|
3994 |
-
#: lib/security_rules_update.php:
|
3995 |
-
#: lib/utils.php:214 lib/utils.php:
|
3996 |
msgid "Blog:"
|
3997 |
msgstr "Blog :"
|
3998 |
|
3999 |
-
#: lib/monitoring_file_check.php:
|
4000 |
-
#: lib/security_rules_update.php:
|
4001 |
#, php-format
|
4002 |
msgid "Date: %s"
|
4003 |
msgstr "Date : %s"
|
4004 |
|
4005 |
-
#: lib/monitoring_file_check.php:
|
4006 |
msgid "See attached file for details."
|
4007 |
msgstr "Voir le fichier joint pour plus de détails."
|
4008 |
|
4009 |
-
#: lib/monitoring_file_check.php:
|
4010 |
msgid "[NinjaFirewall] File Check report"
|
4011 |
msgstr "[NinjaFirewall] Rapport de File Check"
|
4012 |
|
4013 |
-
#: lib/monitoring_file_check.php:
|
4014 |
msgid "NinjaFirewall did not detect changes in your files."
|
4015 |
msgstr "NinjaFirewall n'a pas détecté de changements dans vos fichiers."
|
4016 |
|
@@ -4066,7 +4181,7 @@ msgstr ""
|
|
4066 |
msgid "Save File Guard options"
|
4067 |
msgstr "Sauvegarder les options"
|
4068 |
|
4069 |
-
#: lib/network.php:24 ninjafirewall.php:
|
4070 |
#, php-format
|
4071 |
msgid "You are not allowed to perform this task (%s)."
|
4072 |
msgstr "Vous n'êtes pas autorisé à effectuer cette tâche (%s)."
|
@@ -4091,7 +4206,8 @@ msgstr ""
|
|
4091 |
msgid "Save Network options"
|
4092 |
msgstr "Sauvegarder les options"
|
4093 |
|
4094 |
-
#: lib/security_rules.php:44
|
|
|
4095 |
msgid "Security Rules"
|
4096 |
msgstr "Règles de Sécurité"
|
4097 |
|
@@ -4202,7 +4318,7 @@ msgstr ""
|
|
4202 |
msgid "Security rules have been updated."
|
4203 |
msgstr "Les règles de sécurité ont été mises à jour."
|
4204 |
|
4205 |
-
#: lib/security_rules_update.php:91 lib/security_rules_update.php:
|
4206 |
msgid "No security rules update available."
|
4207 |
msgstr "Aucune mise à jour des règles de sécurité disponible."
|
4208 |
|
@@ -4215,23 +4331,23 @@ msgstr ""
|
|
4215 |
"Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
|
4216 |
"les mises à jour automatiques ne pourront pas être effectuées."
|
4217 |
|
4218 |
-
#: lib/security_rules_update.php:
|
4219 |
msgid "Automatically update NinjaFirewall security rules"
|
4220 |
msgstr "Activer la mise à jour automatique des règles de sécurité"
|
4221 |
|
4222 |
-
#: lib/security_rules_update.php:
|
4223 |
msgid "Check for updates"
|
4224 |
msgstr "Vérifier les mises à jour"
|
4225 |
|
4226 |
-
#: lib/security_rules_update.php:
|
4227 |
msgid "Every 15 minutes"
|
4228 |
msgstr "Toutes les 15 minutes"
|
4229 |
|
4230 |
-
#: lib/security_rules_update.php:
|
4231 |
msgid "Every 30 minutes"
|
4232 |
msgstr "Toutes les 30 minutes"
|
4233 |
|
4234 |
-
#: lib/security_rules_update.php:
|
4235 |
msgid ""
|
4236 |
"The next scheduled date is in the past! WordPress wp-cron may not be working "
|
4237 |
"or may have been disabled."
|
@@ -4240,7 +4356,7 @@ msgstr ""
|
|
4240 |
"passé ! Essayez de recharger cette page, sinon vérifiez que WP-Cron n'a "
|
4241 |
"pas été désactivé."
|
4242 |
|
4243 |
-
#: lib/security_rules_update.php:
|
4244 |
#, php-format
|
4245 |
msgid ""
|
4246 |
"Next scheduled update will start in approximately %s day, %s hour(s), %s "
|
@@ -4249,17 +4365,17 @@ msgstr ""
|
|
4249 |
"La prochaine vérification des mises à jour aura lieu dans %s jour, %s "
|
4250 |
"heure(s), %s minute(s) et %s secondes."
|
4251 |
|
4252 |
-
#: lib/security_rules_update.php:
|
4253 |
msgid "Notification"
|
4254 |
msgstr "Notification"
|
4255 |
|
4256 |
-
#: lib/security_rules_update.php:
|
4257 |
msgid "Send me a report by email when security rules have been updated."
|
4258 |
msgstr ""
|
4259 |
"Envoyez-moi un rapport par e-mail lorsque les règles de sécurité ont été "
|
4260 |
"mises à jour."
|
4261 |
|
4262 |
-
#: lib/security_rules_update.php:
|
4263 |
msgid ""
|
4264 |
"Reports will be sent to the contact email address defined in the Event "
|
4265 |
"Notifications menu."
|
@@ -4267,79 +4383,71 @@ msgstr ""
|
|
4267 |
"Les rapports seront envoyés à l'adresse e-mail définie dans la page "
|
4268 |
"\"Notifications d'Événement\"."
|
4269 |
|
4270 |
-
#: lib/security_rules_update.php:
|
4271 |
msgid "The updates log is currently empty."
|
4272 |
msgstr "Le journal des mises à jour est vide."
|
4273 |
|
4274 |
-
#: lib/security_rules_update.php:
|
4275 |
msgid "Updates Log"
|
4276 |
msgstr "Journal des mises à jour"
|
4277 |
|
4278 |
-
#: lib/security_rules_update.php:
|
4279 |
msgid "Log is flushed automatically."
|
4280 |
msgstr "Le journal est purgé automatiquement."
|
4281 |
|
4282 |
-
#: lib/security_rules_update.php:
|
4283 |
msgid "Save Updates Options"
|
4284 |
msgstr "Sauvegarder les options"
|
4285 |
|
4286 |
-
#: lib/security_rules_update.php:
|
4287 |
msgid "Check For Updates Now!"
|
4288 |
msgstr "Vérifier les mises à jour maintenant ! "
|
4289 |
|
4290 |
-
#: lib/security_rules_update.php:
|
4291 |
msgid "Delete Log"
|
4292 |
msgstr "Supprimer le journal"
|
4293 |
|
4294 |
-
#: lib/security_rules_update.php:
|
4295 |
msgid "Error: Wrong rules format."
|
4296 |
msgstr "Erreur : Le format des règles téléchargées ne correspond pas."
|
4297 |
|
4298 |
-
#: lib/security_rules_update.php:
|
4299 |
msgid "Error: Unable to unserialize the new rules."
|
4300 |
msgstr ""
|
4301 |
"Erreur : Impossible d'extraire les règles du fichier téléchargé (unable to "
|
4302 |
"unserialize the new rules)."
|
4303 |
|
4304 |
-
#: lib/security_rules_update.php:
|
4305 |
msgid "Error: Unserialized rules seem corrupted."
|
4306 |
msgstr ""
|
4307 |
"Erreur : Le fichier des règles téléchargé semblent corrompu (unserialized "
|
4308 |
"rules seem corrupted)."
|
4309 |
|
4310 |
-
#: lib/security_rules_update.php:
|
4311 |
#, php-format
|
4312 |
msgid "Security rules updated to version %s."
|
4313 |
msgstr "Les règles de sécurité ont été mises à jour vers la version %s."
|
4314 |
|
4315 |
-
#: lib/security_rules_update.php:
|
4316 |
-
msgid ""
|
4317 |
-
"Error: Your version of NinjaFirewall is too old and is not compatible with "
|
4318 |
-
"those rules. Please upgrade it."
|
4319 |
-
msgstr ""
|
4320 |
-
"Erreur : Votre version de NinjaFirewall est trop ancienne et n'est pas "
|
4321 |
-
"compatible avec ces règles de sécurité. Mettez à jour NinjaFirewall."
|
4322 |
-
|
4323 |
-
#: lib/security_rules_update.php:419
|
4324 |
msgid "Error: Unable to retrieve the new rules version."
|
4325 |
msgstr "Erreur : Impossible de récupérer la nouvelle version des règles."
|
4326 |
|
4327 |
-
#: lib/security_rules_update.php:
|
4328 |
#, php-format
|
4329 |
msgid "Error: Server returned a %s HTTP error code (#1)."
|
4330 |
msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#1)."
|
4331 |
|
4332 |
-
#: lib/security_rules_update.php:
|
4333 |
msgid "Error: Unable to connect to the remote server"
|
4334 |
msgstr "Erreur : Impossible de se connecter au serveur distant"
|
4335 |
|
4336 |
-
#: lib/security_rules_update.php:
|
4337 |
#, php-format
|
4338 |
msgid "Error: The new rules versions do not match (%s != %s)."
|
4339 |
msgstr ""
|
4340 |
"Erreur : La versions des nouvelles règles ne correspond pas (%s != %s)."
|
4341 |
|
4342 |
-
#: lib/security_rules_update.php:
|
4343 |
#, php-format
|
4344 |
msgid ""
|
4345 |
"Error: The new rules %s digital signature is not correct. Aborting update, "
|
@@ -4348,35 +4456,35 @@ msgstr ""
|
|
4348 |
"Erreur : La signature numérique des nouvelles règles %s n'est pas correcte. "
|
4349 |
"Annulation de la mise à jour, les règles ont peut-être été altérées."
|
4350 |
|
4351 |
-
#: lib/security_rules_update.php:
|
4352 |
#, php-format
|
4353 |
msgid "Error: Server returned a %s HTTP error code (#2)."
|
4354 |
msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#2)."
|
4355 |
|
4356 |
-
#: lib/security_rules_update.php:
|
4357 |
msgid "[NinjaFirewall] Security rules update"
|
4358 |
msgstr "[NinjaFirewall] Mise à jour des règles de sécurité"
|
4359 |
|
4360 |
-
#: lib/security_rules_update.php:
|
4361 |
msgid "NinjaFirewall security rules have been updated:"
|
4362 |
msgstr "Les règles de sécurité de NinjaFirewall ont été mises à jour :"
|
4363 |
|
4364 |
-
#: lib/security_rules_update.php:
|
4365 |
msgid "Rules version:"
|
4366 |
msgstr "Version des règles :"
|
4367 |
|
4368 |
-
#: lib/security_rules_update.php:
|
4369 |
-
|
4370 |
-
"This notification can be turned off from NinjaFirewall \"
|
4371 |
msgstr ""
|
4372 |
-
"Cette notification peut être désactivée depuis la page \"
|
4373 |
-
"
|
4374 |
|
4375 |
-
#: lib/thickbox.php:
|
4376 |
msgid "Upgrade to Full WAF mode"
|
4377 |
msgstr "Passer en mode Full WAF"
|
4378 |
|
4379 |
-
#: lib/thickbox.php:
|
4380 |
msgid ""
|
4381 |
"In <strong>Full WAF</strong> mode, all scripts located inside the blog "
|
4382 |
"installation directories and sub-directories are protected by NinjaFirewall, "
|
@@ -4388,7 +4496,7 @@ msgstr ""
|
|
4388 |
"compris ceux qui ne font pas partie de WordPress. Cela vous offre le niveau "
|
4389 |
"de protection le plus élevé possible : La sécurité sans aucun compromis."
|
4390 |
|
4391 |
-
#: lib/thickbox.php:
|
4392 |
#, php-format
|
4393 |
msgid ""
|
4394 |
"It works on most websites right out of the box, or may require <a href=\"%s"
|
@@ -4402,7 +4510,7 @@ msgstr ""
|
|
4402 |
"d'hébergement partagé, il se peut que l'installation ne puisse pas "
|
4403 |
"fonctionner du tout."
|
4404 |
|
4405 |
-
#: lib/thickbox.php:
|
4406 |
msgid ""
|
4407 |
"If this happened to you, don't worry: you could still run it in "
|
4408 |
"<strong>WordPress WAF</strong> mode. Despite being less powerful than the "
|
@@ -4415,37 +4523,37 @@ msgstr ""
|
|
4415 |
"niveau de protection très supérieur aux autres extensions de sécurité pour "
|
4416 |
"WordPress disponibles sur le marché."
|
4417 |
|
4418 |
-
#: lib/thickbox.php:
|
4419 |
msgid "(recommended)"
|
4420 |
msgstr "(recommandé)"
|
4421 |
|
4422 |
-
#: lib/thickbox.php:
|
4423 |
msgid "Select your HTTP server and your PHP server API"
|
4424 |
msgstr "Sélectionnez votre serveur HTTP et PHP SAPI"
|
4425 |
|
4426 |
-
#: lib/thickbox.php:
|
4427 |
msgid "Other webserver + CGI/FastCGI or PHP-FPM"
|
4428 |
msgstr "Autre serveur + CGI/FastCGI ou PHP-FPM"
|
4429 |
|
4430 |
-
#: lib/thickbox.php:
|
4431 |
msgid "View PHPINFO"
|
4432 |
msgstr "Voir PHPINFO"
|
4433 |
|
4434 |
-
#: lib/thickbox.php:
|
4435 |
msgid "Select the PHP initialization file supported by your server"
|
4436 |
msgstr ""
|
4437 |
"Sélectionnez le type de fichier de configuration PHP utilisé par votre "
|
4438 |
"serveur"
|
4439 |
|
4440 |
-
#: lib/thickbox.php:
|
4441 |
msgid "Let NinjaFirewall make the necessary changes (recommended)."
|
4442 |
msgstr "Laissez NinjaFirewall faire les changements (recommandé)."
|
4443 |
|
4444 |
-
#: lib/thickbox.php:
|
4445 |
msgid "I want to make the changes myself."
|
4446 |
msgstr "Je veux faire les changements moi-même."
|
4447 |
|
4448 |
-
#: lib/thickbox.php:
|
4449 |
msgid ""
|
4450 |
"Ensure that you have FTP access to your website so that, if there were a "
|
4451 |
"problem during the installation of the firewall, you could easily undo the "
|
@@ -4455,13 +4563,13 @@ msgstr ""
|
|
4455 |
"problème pendant l'installation du pare-feu, vous pourriez annuler les "
|
4456 |
"modifications."
|
4457 |
|
4458 |
-
#: lib/thickbox.php:
|
4459 |
msgid "Please make the changes below, then click on the \"Finish\" button."
|
4460 |
msgstr ""
|
4461 |
"Veuillez faire les modifications ci-dessous, puis cliquer sur le bouton "
|
4462 |
"\"Finaliser\"."
|
4463 |
|
4464 |
-
#: lib/thickbox.php:
|
4465 |
#, php-format
|
4466 |
msgid ""
|
4467 |
"The %s file must be created, and the following lines of code added to it:"
|
@@ -4469,12 +4577,12 @@ msgstr ""
|
|
4469 |
"Le fichier %s doit être créé, et les lignes suivantes doivent y être "
|
4470 |
"ajoutées :"
|
4471 |
|
4472 |
-
#: lib/thickbox.php:
|
4473 |
#, php-format
|
4474 |
msgid "The following lines of code must be added to your existing %s file:"
|
4475 |
msgstr "Les lignes suivantes doivent être ajoutées à votre fichier %s :"
|
4476 |
|
4477 |
-
#: lib/thickbox.php:
|
4478 |
msgid ""
|
4479 |
"Log in to your Openlitespeed admin dashboard, click on \"Virtual Host\", "
|
4480 |
"select your domain, add the following instructions to the \"php.ini Override"
|
@@ -4485,7 +4593,7 @@ msgstr ""
|
|
4485 |
"section \"php.ini Override\" de l'onglet \"Général\", puis redémarrez "
|
4486 |
"Openlitespeed:"
|
4487 |
|
4488 |
-
#: lib/thickbox.php:
|
4489 |
msgid ""
|
4490 |
"Important: if one day you wanted to uninstall NinjaFirewall, do not forget "
|
4491 |
"to remove these instructions from your Openlitespeed admin dashboard "
|
@@ -4497,7 +4605,7 @@ msgstr ""
|
|
4497 |
"<strong>avant</strong> de désinstaller NinjaFirewall, car cet installateur "
|
4498 |
"ne pourra pas le faire à votre place."
|
4499 |
|
4500 |
-
#: lib/thickbox.php:
|
4501 |
msgid "Finish"
|
4502 |
msgstr "Finaliser"
|
4503 |
|
@@ -4510,32 +4618,28 @@ msgid "NinjaFirewall has blocked an attempt to create a user account:"
|
|
4510 |
msgstr ""
|
4511 |
"NinjaFirewall a bloqué une tentative de création d'un compte d'utilisateur :"
|
4512 |
|
4513 |
-
#: lib/utils.php:215 lib/utils.php:
|
4514 |
msgid "Username:"
|
4515 |
msgstr "Utilisateur :"
|
4516 |
|
4517 |
-
#: lib/utils.php:216 lib/utils.php:
|
4518 |
msgid "User IP:"
|
4519 |
msgstr "IP utilisateur :"
|
4520 |
|
4521 |
-
#: lib/utils.php:
|
4522 |
-
msgid "Date:"
|
4523 |
-
msgstr "Date :"
|
4524 |
-
|
4525 |
-
#: lib/utils.php:228 lib/utils.php:1026 lib/utils.php:1332
|
4526 |
msgid "A PHP backtrace has been attached to this message for your convenience."
|
4527 |
msgstr ""
|
4528 |
"La pile d'exécution de PHP est jointe à ce message pour votre commodité."
|
4529 |
|
4530 |
-
#: lib/utils.php:251 lib/utils.php:252 lib/utils.php:
|
4531 |
msgid "You are not allowed to perform this task."
|
4532 |
msgstr "Vous n'êtes pas autorisé à effectuer cette tâche."
|
4533 |
|
4534 |
-
#: lib/utils.php:
|
4535 |
msgid "NinjaFirewall error"
|
4536 |
msgstr "NinjaFirewall Erreur"
|
4537 |
|
4538 |
-
#: lib/utils.php:
|
4539 |
#, php-format
|
4540 |
msgid ""
|
4541 |
"%s directory cannot be created. Please review your installation and ensure "
|
@@ -4544,7 +4648,7 @@ msgstr ""
|
|
4544 |
"Le répertoire %s ne peut pas être créé. Vérifiez votre installation et "
|
4545 |
"assurez vous que %s n'est pas en lecture seule."
|
4546 |
|
4547 |
-
#: lib/utils.php:
|
4548 |
#, php-format
|
4549 |
msgid ""
|
4550 |
"%s directory is read-only. Please review your installation and ensure that "
|
@@ -4553,51 +4657,35 @@ msgstr ""
|
|
4553 |
"Le répertoire %s est en lecture seule. Vérifiez votre installation et les "
|
4554 |
"permissions de %s."
|
4555 |
|
4556 |
-
#: lib/utils.php:
|
4557 |
msgid "unknown error"
|
4558 |
msgstr "erreur inconnue"
|
4559 |
|
4560 |
-
#: lib/utils.php:
|
4561 |
msgid "NinjaFirewall fatal error:"
|
4562 |
msgstr "NinjaFirewall erreur fatale :"
|
4563 |
|
4564 |
-
#: lib/utils.php:
|
4565 |
msgid "Review your installation, your site is not protected."
|
4566 |
msgstr "Vérifiez votre installation, votre site n'est pas protégé."
|
4567 |
|
4568 |
-
#: lib/utils.php:
|
4569 |
msgid "Alert: WordPress console login"
|
4570 |
msgstr "Alerte : Connexion à WordPress"
|
4571 |
|
4572 |
-
#: lib/utils.php:
|
4573 |
-
msgid "-Blog:"
|
4574 |
-
msgstr "- Blog :"
|
4575 |
-
|
4576 |
-
#: lib/utils.php:569
|
4577 |
msgid "Someone just logged in to your WordPress admin console:"
|
4578 |
msgstr "Quelqu'un vient de se connecter à votre Tableau de bord de WordPress:"
|
4579 |
|
4580 |
-
#: lib/utils.php:
|
4581 |
-
msgid "-User:"
|
4582 |
-
msgstr "- Nom :"
|
4583 |
-
|
4584 |
-
#: lib/utils.php:571
|
4585 |
-
msgid "-IP:"
|
4586 |
-
msgstr "- IP :"
|
4587 |
-
|
4588 |
-
#: lib/utils.php:572
|
4589 |
-
msgid "-Date:"
|
4590 |
-
msgstr "- Date :"
|
4591 |
-
|
4592 |
-
#: lib/utils.php:575
|
4593 |
msgid "Support forum"
|
4594 |
msgstr "Forum "
|
4595 |
|
4596 |
-
#: lib/utils.php:
|
4597 |
msgid "Forbidden access"
|
4598 |
msgstr "Accès interdit"
|
4599 |
|
4600 |
-
#: lib/utils.php:
|
4601 |
#, php-format
|
4602 |
msgid ""
|
4603 |
"<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
|
@@ -4606,59 +4694,11 @@ msgstr ""
|
|
4606 |
"<strong>ERREUR</strong>: Identifiant ou mot de passe invalide.<br /><a href="
|
4607 |
"\"%s\">Mot de passe perdu</a> ?"
|
4608 |
|
4609 |
-
#: lib/utils.php:
|
4610 |
-
msgid "Plugin"
|
4611 |
-
msgstr "Extension"
|
4612 |
-
|
4613 |
-
#: lib/utils.php:716 lib/utils.php:720
|
4614 |
-
msgid "uploaded"
|
4615 |
-
msgstr "téléchargé(e)"
|
4616 |
-
|
4617 |
-
#: lib/utils.php:716 lib/utils.php:720
|
4618 |
-
msgid "installed"
|
4619 |
-
msgstr "installé(e)"
|
4620 |
-
|
4621 |
-
#: lib/utils.php:716 lib/utils.php:720
|
4622 |
-
msgid "activated"
|
4623 |
-
msgstr "activé(e)"
|
4624 |
-
|
4625 |
-
#: lib/utils.php:717
|
4626 |
-
msgid "updated"
|
4627 |
-
msgstr "mis(e) à jour"
|
4628 |
-
|
4629 |
-
#: lib/utils.php:717
|
4630 |
-
msgid "deactivated"
|
4631 |
-
msgstr "désactivé(e)"
|
4632 |
-
|
4633 |
-
#: lib/utils.php:717 lib/utils.php:721
|
4634 |
-
msgid "deleted"
|
4635 |
-
msgstr "supprimé(e)"
|
4636 |
-
|
4637 |
-
#: lib/utils.php:717 lib/utils.php:721
|
4638 |
-
msgid "Name"
|
4639 |
-
msgstr "Nom"
|
4640 |
-
|
4641 |
-
#: lib/utils.php:720
|
4642 |
-
msgid "Theme"
|
4643 |
-
msgstr "Thème"
|
4644 |
-
|
4645 |
-
#: lib/utils.php:724
|
4646 |
-
msgid "upgraded"
|
4647 |
-
msgstr "mis(e) à jour"
|
4648 |
-
|
4649 |
-
#: lib/utils.php:732
|
4650 |
-
msgid "[NinjaFirewall] Alert:"
|
4651 |
-
msgstr "[NinjaFirewall] Alerte :"
|
4652 |
-
|
4653 |
-
#: lib/utils.php:738
|
4654 |
-
msgid "NinjaFirewall has detected the following activity on your account:"
|
4655 |
-
msgstr "NinjaFirewall a détecté l'activité suivante sur votre compte :"
|
4656 |
-
|
4657 |
-
#: lib/utils.php:835
|
4658 |
msgid "[NinjaFirewall] Alert: Database changes detected"
|
4659 |
msgstr "[NinjaFirewall] Alerte: Modification dans la base de données"
|
4660 |
|
4661 |
-
#: lib/utils.php:
|
4662 |
msgid ""
|
4663 |
"NinjaFirewall has detected that one or more administrator accounts were "
|
4664 |
"modified in the database:"
|
@@ -4666,12 +4706,12 @@ msgstr ""
|
|
4666 |
"NinjaFirewall a détecté que un ou plusieurs comptes d'administrateur ont été "
|
4667 |
"modifiés dans la base de données:"
|
4668 |
|
4669 |
-
#: lib/utils.php:
|
4670 |
#, php-format
|
4671 |
msgid "Total administrators : %s"
|
4672 |
msgstr "Nombre d'administrateurs : %s"
|
4673 |
|
4674 |
-
#: lib/utils.php:
|
4675 |
msgid ""
|
4676 |
"If you cannot see any modifications in the above fields, it is possible that "
|
4677 |
"the administrator password was changed."
|
@@ -4679,11 +4719,11 @@ msgstr ""
|
|
4679 |
"Si vous ne voyez pas de modifications dans les données ci-dessus, il est "
|
4680 |
"possible que le mot de passe administrateur ait été changé."
|
4681 |
|
4682 |
-
#: lib/utils.php:
|
4683 |
msgid "Blocked privilege escalation attempt"
|
4684 |
msgstr "Tentatives d'élévation des privilèges"
|
4685 |
|
4686 |
-
#: lib/utils.php:
|
4687 |
msgid ""
|
4688 |
"NinjaFirewall has blocked an attempt to modify a user capability by someone "
|
4689 |
"who does not have administrative privileges:"
|
@@ -4691,7 +4731,15 @@ msgstr ""
|
|
4691 |
"NinjaFirewall a bloqué une tentative de modification de certaines Capacités "
|
4692 |
"par un utilisateur ne disposant pas de privilèges administratifs :"
|
4693 |
|
4694 |
-
#: lib/utils.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4695 |
msgid ""
|
4696 |
"NinjaFirewall brute-force protection is enabled and you are temporarily "
|
4697 |
"whitelisted."
|
@@ -4699,7 +4747,7 @@ msgstr ""
|
|
4699 |
"La protection de NinjaFirewall contre les attaques par force brute est "
|
4700 |
"activée. Vous êtes temporairement dans la liste blanche."
|
4701 |
|
4702 |
-
#: lib/utils.php:
|
4703 |
#, php-format
|
4704 |
msgid ""
|
4705 |
"Hey, it seems that you've been using NinjaFirewall for some time. If you "
|
@@ -4712,17 +4760,17 @@ msgstr ""
|
|
4712 |
"a>. Il a fallu des milliers d'heures pour le développer, mais il suffit "
|
4713 |
"seulement de quelques minutes pour le noter. Merci !"
|
4714 |
|
4715 |
-
#: lib/utils.php:
|
4716 |
msgid ""
|
4717 |
"The attempt was blocked and the option was reversed to its original value."
|
4718 |
msgstr ""
|
4719 |
"La tentative a été bloquée et l'option a été remise à sa valeur d'origine."
|
4720 |
|
4721 |
-
#: lib/utils.php:
|
4722 |
msgid "Attempt to modify WordPress settings"
|
4723 |
msgstr "Tentative de modification des paramètres de WordPress"
|
4724 |
|
4725 |
-
#: lib/utils.php:
|
4726 |
msgid ""
|
4727 |
"NinjaFirewall has blocked an attempt to modify some important WordPress "
|
4728 |
"settings by a user that does not have administrative privileges:"
|
@@ -4731,31 +4779,31 @@ msgstr ""
|
|
4731 |
"importants de WordPress par un utilisateur ne disposant pas de privilèges "
|
4732 |
"administratifs :"
|
4733 |
|
4734 |
-
#: lib/utils.php:
|
4735 |
#, php-format
|
4736 |
msgid "Option: %s"
|
4737 |
msgstr "Option: %s"
|
4738 |
|
4739 |
-
#: lib/utils.php:
|
4740 |
#, php-format
|
4741 |
msgid "Original value: %s"
|
4742 |
msgstr "Valeur originale : %s"
|
4743 |
|
4744 |
-
#: lib/utils.php:
|
4745 |
#, php-format
|
4746 |
msgid "Modified value: %s"
|
4747 |
msgstr "Valeur modifiée : %s"
|
4748 |
|
4749 |
-
#: lib/utils.php:
|
4750 |
#, php-format
|
4751 |
msgid "Action taken: %s"
|
4752 |
msgstr "Action prise : %s"
|
4753 |
|
4754 |
-
#: lib/utils.php:
|
4755 |
msgid "Code injection attempt in WordPress options table"
|
4756 |
msgstr "Tentative d'injection de code dans la table des options de WordPress"
|
4757 |
|
4758 |
-
#: lib/utils.php:
|
4759 |
msgid ""
|
4760 |
"NinjaFirewall has blocked an attempt to inject code in the WordPress options "
|
4761 |
"table by a user that does not have administrative privileges:"
|
@@ -4764,34 +4812,26 @@ msgstr ""
|
|
4764 |
"options de WordPress par un utilisateur ne disposant pas de privilèges "
|
4765 |
"administratifs :"
|
4766 |
|
4767 |
-
#: lib/utils.php:
|
4768 |
#, php-format
|
4769 |
msgid "Code: %s"
|
4770 |
msgstr "Code : %s"
|
4771 |
|
4772 |
-
#: lib/utils.php:
|
4773 |
-
msgid ""
|
4774 |
-
"This protection (and notification) can be turned off from NinjaFirewall "
|
4775 |
-
"\"Firewall Policies\" page."
|
4776 |
-
msgstr ""
|
4777 |
-
"Cette protection (et notification) peut être désactivée à partir de la page "
|
4778 |
-
"\"Politiques du Pare-feu\" de NinjaFirewall."
|
4779 |
-
|
4780 |
-
#: lib/utils.php:1377
|
4781 |
#, php-format
|
4782 |
msgid "Error, cannot create the %s folder."
|
4783 |
msgstr "Erreur, impossible de créer le répertoire %s."
|
4784 |
|
4785 |
-
#: lib/utils.php:
|
4786 |
msgid "Check your server permissions and try again."
|
4787 |
msgstr "Vérifiez les autorisations de votre serveur et réessayez."
|
4788 |
|
4789 |
-
#: lib/utils.php:
|
4790 |
#, php-format
|
4791 |
msgid "Error, the %s folder is not writable."
|
4792 |
msgstr "Erreur, le répertoire %s est en lecture seule."
|
4793 |
|
4794 |
-
#: lib/utils.php:
|
4795 |
#, php-format
|
4796 |
msgid "Error, cannot write %s."
|
4797 |
msgstr "Erreur, impossible d'écrire dans %s."
|
@@ -5290,7 +5330,7 @@ msgstr ""
|
|
5290 |
"Impossible de récupérer les règles de l'utilisateur dans la base de données "
|
5291 |
"(#4)"
|
5292 |
|
5293 |
-
#: ninjafirewall.php:
|
5294 |
msgid ""
|
5295 |
"You do not have \"unfiltered_html\" capability. Please enable it in order to "
|
5296 |
"run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
|
@@ -5301,7 +5341,7 @@ msgstr ""
|
|
5301 |
"la directive \"DISALLOW_UNFILTERED_HTML\" activée dans votre fichier wp-"
|
5302 |
"config.php)."
|
5303 |
|
5304 |
-
#: ninjafirewall.php:
|
5305 |
#, php-format
|
5306 |
msgid ""
|
5307 |
"NinjaFirewall requires WordPress 3.3 or greater but your current version is "
|
@@ -5310,19 +5350,19 @@ msgstr ""
|
|
5310 |
"NinjaFirewall nécessite au moins WordPress 3.3 mais votre version de "
|
5311 |
"WordPress est %s."
|
5312 |
|
5313 |
-
#: ninjafirewall.php:
|
5314 |
#, php-format
|
5315 |
msgid ""
|
5316 |
"NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
|
5317 |
msgstr ""
|
5318 |
"NinjaFirewall nécessite au moins PHP 5.3 mais votre version de PHP est %s."
|
5319 |
|
5320 |
-
#: ninjafirewall.php:
|
5321 |
#, php-format
|
5322 |
msgid "NinjaFirewall requires the PHP %s extension."
|
5323 |
msgstr "NinjaFirewall nécessite l'extension PHP %s."
|
5324 |
|
5325 |
-
#: ninjafirewall.php:
|
5326 |
msgid ""
|
5327 |
"You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
|
5328 |
"5.3.0 (see http://php.net/safe-mode)."
|
@@ -5331,15 +5371,15 @@ msgstr ""
|
|
5331 |
"devenue obsolète depuis PHP 5.3 et a été supprimée depuis PHP 5.4 (cf. "
|
5332 |
"http://php.net/safe-mode)."
|
5333 |
|
5334 |
-
#: ninjafirewall.php:
|
5335 |
msgid "You are not allowed to activate NinjaFirewall."
|
5336 |
msgstr "Vous n’êtes pas autorisé à activer NinjaFirewall."
|
5337 |
|
5338 |
-
#: ninjafirewall.php:
|
5339 |
msgid "NinjaFirewall is not compatible with Microsoft Windows."
|
5340 |
msgstr "NinjaFirewall n'est pas compatible avec Microsoft Windows."
|
5341 |
|
5342 |
-
#: ninjafirewall.php:
|
5343 |
msgid ""
|
5344 |
"All fields will be restored to their default values and any changes you made "
|
5345 |
"will be lost. Continue?"
|
@@ -5347,15 +5387,15 @@ msgstr ""
|
|
5347 |
"Tous les champs vont être re-initialisés et vos changements seront perdus. "
|
5348 |
"Continuer ?"
|
5349 |
|
5350 |
-
#: ninjafirewall.php:
|
5351 |
msgid "Missing security nonce, try to reload the page."
|
5352 |
msgstr "La nonce de sécurité est manquante, essayer de recharger cette page."
|
5353 |
|
5354 |
-
#: ninjafirewall.php:
|
5355 |
msgid "Please select the HTTP server in the list."
|
5356 |
msgstr "Sélectionnez votre serveur HTTP dans la list."
|
5357 |
|
5358 |
-
#: ninjafirewall.php:
|
5359 |
msgid ""
|
5360 |
"This action will restore the selected configuration file and will override "
|
5361 |
"all your current firewall options, policies and rules. Continue?"
|
@@ -5364,7 +5404,7 @@ msgstr ""
|
|
5364 |
"remplacera toutes les options, politiques et règles de pare-feu actuelles. "
|
5365 |
"Continuer ?"
|
5366 |
|
5367 |
-
#: ninjafirewall.php:
|
5368 |
msgid ""
|
5369 |
"Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
|
5370 |
"hyphen [-] or an underscore [_] will be removed from the filename and "
|
@@ -5374,7 +5414,7 @@ msgstr ""
|
|
5374 |
"[.], un trait d'union[-] ou un caractère de soulignement[_], sera supprimé "
|
5375 |
"du nom du fichier et remplacé par le caractère de substitution."
|
5376 |
|
5377 |
-
#: ninjafirewall.php:
|
5378 |
msgid ""
|
5379 |
"Ensure that you can access your admin console over HTTPS before enabling "
|
5380 |
"this option, otherwise you will lock yourself out of your site. Continue?"
|
@@ -5383,65 +5423,65 @@ msgstr ""
|
|
5383 |
"option, sinon vous risqueriez de ne plus pouvoir accéder à l'interface "
|
5384 |
"d'administration. Continuer ?"
|
5385 |
|
5386 |
-
#: ninjafirewall.php:
|
5387 |
msgid "Delete the current snapshot ?"
|
5388 |
msgstr "Supprimer l'instantané actuel ?"
|
5389 |
|
5390 |
-
#: ninjafirewall.php:
|
5391 |
msgid "Invalid character."
|
5392 |
msgstr "Caractère invalide."
|
5393 |
|
5394 |
-
#: ninjafirewall.php:
|
5395 |
msgid "\"admin\" is not acceptable, please choose another user name."
|
5396 |
msgstr ""
|
5397 |
"\"admin\" n\\'est pas acceptable, merci de bien vouloir choisir un autre "
|
5398 |
"identifiant."
|
5399 |
|
5400 |
-
#: ninjafirewall.php:
|
5401 |
msgid "Please enter max 1024 character only."
|
5402 |
msgstr "Veuillez ne pas entrer plus de 1 024 caractères."
|
5403 |
|
5404 |
-
#: ninjafirewall.php:
|
5405 |
msgid "Select when to enable the login protection."
|
5406 |
msgstr "Veuillez sélectionner quand activer la protection."
|
5407 |
|
5408 |
-
#: ninjafirewall.php:
|
5409 |
msgid "Enter a name and a password for the HTTP authentication."
|
5410 |
msgstr ""
|
5411 |
"Veuillez entrer un nom d'utilisateur et mot de passe pour l'authentification "
|
5412 |
"HTTP."
|
5413 |
|
5414 |
-
#: ninjafirewall.php:
|
5415 |
msgid "Your public key is not valid."
|
5416 |
msgstr "Votre clé publique n\\'est pas valide."
|
5417 |
|
5418 |
-
#: ninjafirewall.php:
|
5419 |
msgid "No traffic yet, please wait"
|
5420 |
msgstr "Aucun visiteur actuellement, veuillez patienter"
|
5421 |
|
5422 |
-
#: ninjafirewall.php:
|
5423 |
msgid "seconds..."
|
5424 |
msgstr "secondes..."
|
5425 |
|
5426 |
-
#: ninjafirewall.php:
|
5427 |
msgid "Error: Live Log did not receive the expected response from your server:"
|
5428 |
msgstr "Erreur : le serveur distant n\\'a pas retourné la réponse attendue :"
|
5429 |
|
5430 |
-
#: ninjafirewall.php:
|
5431 |
msgid "Error: URL does not seem to exist (404 Not Found):"
|
5432 |
msgstr "Erreur : l'URL ne semble pas exister (404 Not Found) :"
|
5433 |
|
5434 |
-
#: ninjafirewall.php:
|
5435 |
msgid "Error: Cannot find your log file. Try to reload this page."
|
5436 |
msgstr ""
|
5437 |
"Erreur : Impossible de trouver le fichier log. Essayez de recharger cette "
|
5438 |
"page."
|
5439 |
|
5440 |
-
#: ninjafirewall.php:
|
5441 |
msgid "Error: The HTTP server returned the following error code:"
|
5442 |
msgstr "Erreur : Le serveur HTTP a retourné le code d'erreur suivant :"
|
5443 |
|
5444 |
-
#: ninjafirewall.php:579
|
5445 |
msgid "Error: Security nonces do not match. Reload the page and try again."
|
5446 |
msgstr ""
|
5447 |
"Erreur : Les nonces de sécurité ne correspondent pas. Veuillez recharger "
|
@@ -5456,70 +5496,654 @@ msgstr "Erreur : NinjaFirewall est désactivé"
|
|
5456 |
msgid "Error: missing parameter (%s)."
|
5457 |
msgstr "Erreur : Paramètre manquant (%s)."
|
5458 |
|
5459 |
-
#: ninjafirewall.php:
|
5460 |
msgid "NinjaFirewall: Dashboard"
|
5461 |
msgstr "NinjaFirewall : Tableau de Bord"
|
5462 |
|
5463 |
-
#: ninjafirewall.php:
|
5464 |
msgid "NinjaFirewall: Firewall Options"
|
5465 |
msgstr "NinjaFirewall : Options du Pare-feu"
|
5466 |
|
5467 |
-
#: ninjafirewall.php:
|
5468 |
msgid "NinjaFirewall: Firewall Policies"
|
5469 |
msgstr "NinjaFirewall : Politiques du Pare-feu"
|
5470 |
|
5471 |
-
#: ninjafirewall.php:
|
5472 |
msgid "NinjaFirewall: Monitoring"
|
5473 |
msgstr "NinjaFirewall : Monitoring"
|
5474 |
|
5475 |
-
#: ninjafirewall.php:
|
5476 |
msgid "NinjaFirewall: Anti-Malware"
|
5477 |
msgstr "NinjaFirewall : Anti-Malware"
|
5478 |
|
5479 |
-
#: ninjafirewall.php:
|
5480 |
msgid "NinjaFirewall: Network"
|
5481 |
msgstr "NinjaFirewall : Réseau"
|
5482 |
|
5483 |
-
#: ninjafirewall.php:
|
5484 |
msgid "NinjaFirewall: Event Notifications"
|
5485 |
msgstr "NinjaFirewall : Notifications d’Événement"
|
5486 |
|
5487 |
-
#: ninjafirewall.php:
|
5488 |
msgid "NinjaFirewall: Log-in Protection"
|
5489 |
msgstr "NinjaFirewall : Page de Connexion"
|
5490 |
|
5491 |
-
#: ninjafirewall.php:
|
5492 |
msgid "NinjaFirewall: Logs"
|
5493 |
msgstr "NinjaFirewall : Journaux"
|
5494 |
|
5495 |
-
#: ninjafirewall.php:
|
5496 |
msgid "NinjaFirewall: Security Rules"
|
5497 |
msgstr "NinjaFirewall : Règles de Sécurité"
|
5498 |
|
5499 |
-
#: ninjafirewall.php:
|
5500 |
msgid "NinjaFirewall Settings"
|
5501 |
msgstr "Réglages de NinjaFirewall"
|
5502 |
|
5503 |
-
#: ninjafirewall.php:
|
5504 |
msgid "NinjaFirewall is enabled"
|
5505 |
msgstr "NinjaFirewall est activé"
|
5506 |
|
5507 |
-
#: ninjafirewall.php:
|
5508 |
msgid "Access Restricted"
|
5509 |
msgstr "Accès limité"
|
5510 |
|
5511 |
-
#: ninjafirewall.php:
|
5512 |
msgid "Settings"
|
5513 |
msgstr "Réglages"
|
5514 |
|
5515 |
-
#: ninjafirewall.php:
|
5516 |
msgid "Upgrade to Premium"
|
5517 |
msgstr "Passez Premium !"
|
5518 |
|
5519 |
-
#: ninjafirewall.php:
|
5520 |
msgid "Rate it!"
|
5521 |
msgstr "Notez-le !"
|
5522 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5523 |
#~ msgid "About"
|
5524 |
#~ msgstr "À Propos"
|
5525 |
|
4 |
msgstr ""
|
5 |
"Project-Id-Version: Stable (latest release)\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/ninjafirewall\n"
|
7 |
+
"POT-Creation-Date: 2020-01-17 21:32+0700\n"
|
8 |
+
"PO-Revision-Date: 2020-01-17 21:33+0700\n"
|
9 |
"Last-Translator: NinTechNet <contact@nintechnet.com>\n"
|
10 |
"Language-Team: NinTechNet <nintechnet.com>\n"
|
11 |
"Language: fr_FR\n"
|
16 |
"X-Poedit-SourceCharset: UTF-8\n"
|
17 |
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
18 |
|
19 |
+
#: lib/anti_malware.php:24 ninjafirewall.php:774
|
20 |
msgid "Anti-Malware"
|
21 |
msgstr "Anti-Malware"
|
22 |
|
92 |
msgid "NinjaFirewall (WP Edition)"
|
93 |
msgstr "NinjaFirewall (WP Edition)"
|
94 |
|
95 |
+
#: lib/dashboard.php:120 ninjafirewall.php:752
|
96 |
msgid "Dashboard"
|
97 |
msgstr "Tableau de Bord"
|
98 |
|
104 |
msgid "About..."
|
105 |
msgstr "À Propos..."
|
106 |
|
107 |
+
#: lib/dashboard.php:134
|
108 |
+
msgid "Thank you for using NinjaFirewall."
|
109 |
+
msgstr "Merci d'utiliser NinjaFirewall."
|
110 |
+
|
111 |
+
#: lib/dashboard.php:135
|
112 |
+
#, php-format
|
113 |
+
msgid ""
|
114 |
+
"Every page of NinjaFirewall has a contextual help: whenever you need help "
|
115 |
+
"about an option or feature, click on the %s tab located in the upper right "
|
116 |
+
"corner of the corresponding page."
|
117 |
+
msgstr ""
|
118 |
+
"Chaque page de NinjaFirewall a une aide contextuelle : lorsque vous avez "
|
119 |
+
"besoin d'aide au sujet d'une option ou d'un menu, cliquez sur l'onglet %s "
|
120 |
+
"situé en haut à droite de la page correspondante."
|
121 |
+
|
122 |
+
#: lib/dashboard.php:135
|
123 |
+
msgid "Help"
|
124 |
+
msgstr "Aide"
|
125 |
+
|
126 |
+
#: lib/dashboard.php:137
|
127 |
+
msgid "Got it!"
|
128 |
+
msgstr "J'ai compris !"
|
129 |
+
|
130 |
+
#: lib/dashboard.php:153 lib/help.php:36
|
131 |
msgid "Firewall Dashboard"
|
132 |
msgstr "Tableau de Bord du Pare-feu"
|
133 |
|
134 |
+
#: lib/dashboard.php:162
|
135 |
msgid ""
|
136 |
"It seems that you may have another instance of NinjaFirewall running in a "
|
137 |
"parent directory. Make sure to follow these instructions:"
|
139 |
"Il semble qu'une autre instance de NinjaFirewall est installée dans un "
|
140 |
"répertoire parent. Assurez-vous de suivre ces instructions:"
|
141 |
|
142 |
+
#: lib/dashboard.php:164
|
143 |
msgid ""
|
144 |
"Temporarily disable the firewall in the parent folder by renaming its PHP "
|
145 |
"INI or .htaccess file."
|
147 |
"Désactivez temporairement le pare-feu dans le répertoire parent en renommant "
|
148 |
"son fichier PHP INI ou .htaccess."
|
149 |
|
150 |
+
#: lib/dashboard.php:166
|
151 |
msgid "Install NinjaFirewall on this site in Full WAF mode."
|
152 |
msgstr "Installez NinjaFirewall sur ce site, en mode Full WAF."
|
153 |
|
154 |
+
#: lib/dashboard.php:168
|
155 |
msgid ""
|
156 |
"Restore the PHP INI or .htaccess in the parent folder to re-enable the "
|
157 |
"firewall."
|
159 |
"Restaurez le fichier PHP INI ou .htaccess dans le dossier parent pour "
|
160 |
"réactiver le pare-feu."
|
161 |
|
162 |
+
#: lib/dashboard.php:174
|
163 |
msgid "Unknown error"
|
164 |
msgstr "Erreur inconnue"
|
165 |
|
166 |
+
#: lib/dashboard.php:178 lib/dashboard.php:186
|
167 |
msgid "Firewall"
|
168 |
msgstr "Pare-feu"
|
169 |
|
170 |
+
#: lib/dashboard.php:187 lib/dashboard.php:323 lib/firewall_options.php:64
|
171 |
#: lib/login_protection.php:203 lib/logs_live_log.php:101
|
172 |
+
#: lib/monitoring_file_guard.php:70 lib/security_rules_update.php:138
|
173 |
msgid "Enabled"
|
174 |
msgstr "Activé"
|
175 |
|
176 |
+
#: lib/dashboard.php:194
|
177 |
msgid "Mode"
|
178 |
msgstr "Mode"
|
179 |
|
180 |
+
#: lib/dashboard.php:199 lib/dashboard.php:205
|
181 |
#, php-format
|
182 |
msgid "NinjaFirewall is running in %s mode."
|
183 |
msgstr "NinjaFirewall fonctionne en mode %s."
|
184 |
|
185 |
+
#: lib/dashboard.php:199
|
186 |
msgid "WordPress WAF"
|
187 |
msgstr "WordPress WAF"
|
188 |
|
189 |
+
#: lib/dashboard.php:201
|
190 |
#, php-format
|
191 |
msgid ""
|
192 |
"For better protection, <a %s>click here</a> to enable its Full WAF mode."
|
194 |
"Pour une meilleure protection, <a %s>cliquez ici</a> pour activer son mode "
|
195 |
"Full WAF."
|
196 |
|
197 |
+
#: lib/dashboard.php:201
|
198 |
msgid "Click to install NinjaFirewall in Full WAF mode."
|
199 |
msgstr "Cliquez pour installer NinjaFirewall en mode Full WAF."
|
200 |
|
201 |
+
#: lib/dashboard.php:205
|
202 |
msgid "Full WAF"
|
203 |
msgstr "Full WAF"
|
204 |
|
205 |
+
#: lib/dashboard.php:218 lib/firewall_options.php:76 lib/help.php:77
|
206 |
msgid "Debugging mode"
|
207 |
msgstr "Mode débogage"
|
208 |
|
209 |
+
#: lib/dashboard.php:219
|
210 |
msgid "Enabled."
|
211 |
msgstr "Activé."
|
212 |
|
213 |
+
#: lib/dashboard.php:219
|
214 |
msgid "Click here to turn Debugging Mode off"
|
215 |
msgstr "Cliquez ici pour désactiver le mode Débogage"
|
216 |
|
217 |
+
#: lib/dashboard.php:225
|
218 |
msgid "Edition"
|
219 |
msgstr "Édition"
|
220 |
|
221 |
+
#: lib/dashboard.php:226
|
222 |
+
msgid ""
|
223 |
+
"Need more security? Explore our supercharged premium version: NinjaFirewall "
|
224 |
+
"(WP+ Edition)"
|
225 |
+
msgstr ""
|
226 |
+
"Besoin de plus de sécurité ? Prenez le temps d'explorer notre version "
|
227 |
+
"premium musclée : NinjaFirewall (WP+ Edition)"
|
228 |
|
229 |
+
#: lib/dashboard.php:229
|
230 |
msgid "Version"
|
231 |
msgstr "Version"
|
232 |
|
233 |
+
#: lib/dashboard.php:230
|
234 |
msgid "Security rules:"
|
235 |
msgstr "Règles de sécurité :"
|
236 |
|
237 |
+
#: lib/dashboard.php:234
|
238 |
msgid "PHP SAPI"
|
239 |
msgstr "PHP SAPI"
|
240 |
|
241 |
+
#: lib/dashboard.php:252
|
242 |
msgid "Updates"
|
243 |
msgstr "Mises à Jour"
|
244 |
|
245 |
+
#: lib/dashboard.php:253
|
246 |
msgid "Security rules updates are disabled."
|
247 |
msgstr "La mise à jour automatique des règles de sécurité est désactivée."
|
248 |
|
249 |
+
#: lib/dashboard.php:253
|
250 |
msgid ""
|
251 |
"If you want your blog to be protected against the latest threats, enable "
|
252 |
"automatic security rules updates."
|
254 |
"Pour garder votre WordPress protégé contre les dernières vulnérabilités, "
|
255 |
"pensez à l'activer."
|
256 |
|
257 |
+
#: lib/dashboard.php:261 lib/dashboard.php:269
|
258 |
msgid "Admin user"
|
259 |
msgstr "Administrateur"
|
260 |
|
261 |
+
#: lib/dashboard.php:262
|
262 |
#, php-format
|
263 |
msgid ""
|
264 |
"You are not whitelisted. Ensure that the \"Do not block WordPress "
|
271 |
"\"%s\">Politiques du Pare-feu</a>, sinon vous pourriez être bloqué par le "
|
272 |
"pare-feu lorsque vous travaillez depuis votre Tableau de bord."
|
273 |
|
274 |
+
#: lib/dashboard.php:270
|
275 |
msgid "You are whitelisted by the firewall."
|
276 |
msgstr "Vous êtes dans la liste blanche du pare-feu."
|
277 |
|
278 |
+
#: lib/dashboard.php:277
|
279 |
msgid "Restrictions"
|
280 |
msgstr "Restrictions"
|
281 |
|
282 |
+
#: lib/dashboard.php:278
|
283 |
msgid "Access to NinjaFirewall is restricted to specific users."
|
284 |
msgstr "L'accès à NinjaFirewall est restreint à certains utilisateurs."
|
285 |
|
286 |
+
#: lib/dashboard.php:289
|
287 |
msgid "User session"
|
288 |
msgstr "Session utilisateur"
|
289 |
|
290 |
+
#: lib/dashboard.php:290
|
291 |
msgid ""
|
292 |
"It seems that the user session set by NinjaFirewall was not found by the "
|
293 |
"firewall script."
|
295 |
"Il semble que la session d'utilisateur définie par NinjaFirewall n'a pas été "
|
296 |
"trouvé par le script du pare-feu."
|
297 |
|
298 |
+
#: lib/dashboard.php:298
|
299 |
#, php-format
|
300 |
msgid ""
|
301 |
"the public key is invalid. Please <a href=\"%s\">check your configuration</"
|
304 |
"la clé publique est invalide. Veuillez vérifier <a href=\"%s\">votre "
|
305 |
"configuration</a>."
|
306 |
|
307 |
+
#: lib/dashboard.php:302
|
308 |
msgid "No IP address restriction."
|
309 |
msgstr "Aucune restriction d'accès par adresse IP."
|
310 |
|
311 |
+
#: lib/dashboard.php:305
|
312 |
#, php-format
|
313 |
msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
|
314 |
msgstr ""
|
315 |
"L'adresse IP %s est autorisée à accéder au journal du pare-feu de "
|
316 |
"NinjaFirewall."
|
317 |
|
318 |
+
#: lib/dashboard.php:308
|
319 |
#, php-format
|
320 |
msgid ""
|
321 |
"the whitelisted IP is not valid. Please <a href=\"%s\">check your "
|
324 |
"l'adresse IP est invalide. Veuillez vérifier <a href=\"%s\">votre "
|
325 |
"configuration</a>."
|
326 |
|
327 |
+
#: lib/dashboard.php:313 lib/help.php:460 lib/logs_firewall_log.php:194
|
328 |
#: lib/wpplus.php:170
|
329 |
msgid "Centralized Logging"
|
330 |
msgstr "Centralisation des Logs"
|
331 |
|
332 |
+
#: lib/dashboard.php:317 lib/security_rules_update.php:415
|
333 |
#, php-format
|
334 |
msgid "Error: %s"
|
335 |
msgstr "Erreur : %s"
|
336 |
|
337 |
+
#: lib/dashboard.php:332
|
338 |
msgid "Source IP"
|
339 |
msgstr "IP source"
|
340 |
|
341 |
+
#: lib/dashboard.php:333
|
342 |
#, php-format
|
343 |
msgid "You have a private IP : %s"
|
344 |
msgstr "Vous avez l'adresse IP d'un réseau privé : %s"
|
345 |
|
346 |
+
#: lib/dashboard.php:333
|
347 |
#, php-format
|
348 |
msgid ""
|
349 |
"If your site is behind a reverse proxy or a load balancer, ensure that you "
|
355 |
"la bonne adresse IP, sinon utilisez le fichier de configuration %s de "
|
356 |
"NinjaFirewall. "
|
357 |
|
358 |
+
#: lib/dashboard.php:341 lib/dashboard.php:351
|
359 |
msgid "CDN detection"
|
360 |
msgstr "Détection CDN"
|
361 |
|
362 |
+
#: lib/dashboard.php:342
|
363 |
#, php-format
|
364 |
msgid ""
|
365 |
"%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
|
370 |
"vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
|
371 |
"adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
|
372 |
|
373 |
+
#: lib/dashboard.php:352
|
374 |
#, php-format
|
375 |
msgid ""
|
376 |
"%s detected: you seem to be using Incapsula CDN services. Ensure that you "
|
381 |
"vous d'avoir configuré votre serveur HTTP afin qu'il fasse suivre la bonne "
|
382 |
"adresse IP, sinon utilisez le fichier de configuration %s de NinjaFirewall."
|
383 |
|
384 |
+
#: lib/dashboard.php:361 lib/dashboard.php:370
|
385 |
msgid "Log dir"
|
386 |
msgstr "Répertoire du Journal"
|
387 |
|
388 |
+
#: lib/dashboard.php:362 lib/dashboard.php:371
|
389 |
#, php-format
|
390 |
msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
|
391 |
msgstr ""
|
392 |
"Le répertoire %s est en lecture seule ! Veuillez changer ses permissions "
|
393 |
"(0777 ou équivalent)."
|
394 |
|
395 |
+
#: lib/dashboard.php:379
|
396 |
msgid "Optional configuration file"
|
397 |
msgstr "Fichier de configuration"
|
398 |
|
399 |
+
#: lib/dashboard.php:386
|
400 |
msgid "MySQLi link identifier"
|
401 |
msgstr "Identifiant de lien MySQLi"
|
402 |
|
403 |
+
#: lib/dashboard.php:387
|
404 |
msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
|
405 |
msgstr ""
|
406 |
"Un identifiant de lien MySQLi a été détecté dans votre fichier <code>."
|
407 |
"htninja</code>."
|
408 |
|
409 |
+
#: lib/dashboard.php:393
|
410 |
msgid "Help & configuration"
|
411 |
msgstr "Aide & configuration"
|
412 |
|
422 |
"Soyez informé des dernières vulnérabilités dans les extensions et thèmes de "
|
423 |
"WordPress :"
|
424 |
|
425 |
+
#: lib/dashboard_about.php:31 lib/help.php:508
|
426 |
msgid "GDPR Compliance"
|
427 |
msgstr "Conformité RGPD"
|
428 |
|
492 |
msgid "Select monthly stats to view..."
|
493 |
msgstr "Sélectionnez les statistiques à afficher"
|
494 |
|
495 |
+
#: lib/event_notifications.php:34 lib/help.php:370 ninjafirewall.php:782
|
496 |
msgid "Event Notifications"
|
497 |
msgstr "Notifications d'Événement"
|
498 |
|
508 |
msgid "WordPress admin dashboard"
|
509 |
msgstr "Connexion"
|
510 |
|
511 |
+
#: lib/event_notifications.php:55 lib/event_notifications.php:118
|
512 |
+
#: lib/event_notifications.php:138
|
513 |
msgid "Send me an alert whenever"
|
514 |
msgstr "Envoyer une alerte quand"
|
515 |
|
586 |
msgid "Updates WordPress (default)"
|
587 |
msgstr "Met à jour WordPress (défaut)"
|
588 |
|
589 |
+
#: lib/event_notifications.php:115
|
590 |
+
msgid "Security updates"
|
591 |
+
msgstr "Mises à jour de sécurité"
|
592 |
+
|
593 |
+
#: lib/event_notifications.php:120
|
594 |
+
msgid ""
|
595 |
+
"An important security update is available for a plugin, theme or WordPress "
|
596 |
+
"(default)"
|
597 |
+
msgstr ""
|
598 |
+
"Une importante mise à jour de sécurité est disponible pour une extension, un "
|
599 |
+
"thème ou WordPress (défaut)"
|
600 |
+
|
601 |
+
#: lib/event_notifications.php:135
|
602 |
msgid "Administrator account"
|
603 |
msgstr "Compte administrateur"
|
604 |
|
605 |
+
#: lib/event_notifications.php:140
|
606 |
msgid ""
|
607 |
"An administrator account is created, modified or deleted in the database "
|
608 |
"(default)"
|
610 |
"Un compte Administrateur est crée, modifié ou supprimé dans la base de "
|
611 |
"données (défaut)"
|
612 |
|
613 |
+
#: lib/event_notifications.php:147
|
|
|
|
|
|
|
|
|
|
|
|
|
614 |
msgid "Daily report"
|
615 |
msgstr "Rapport quotidien"
|
616 |
|
617 |
+
#: lib/event_notifications.php:150
|
618 |
msgid "Send me a daily activity report"
|
619 |
msgstr "Envoyer un rapport d'activité quotidien"
|
620 |
|
621 |
+
#: lib/event_notifications.php:152 lib/event_notifications.php:164
|
622 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
623 |
#: lib/firewall_policies.php:25 lib/login_protection.php:309
|
624 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
626 |
msgid "Yes"
|
627 |
msgstr "Oui"
|
628 |
|
629 |
+
#: lib/event_notifications.php:152 lib/event_notifications.php:164
|
630 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
631 |
#: lib/firewall_policies.php:26 lib/login_protection.php:309
|
632 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
634 |
msgid "No"
|
635 |
msgstr "Non"
|
636 |
|
637 |
+
#: lib/event_notifications.php:159
|
638 |
msgid "Log"
|
639 |
msgstr "Journal"
|
640 |
|
641 |
+
#: lib/event_notifications.php:162
|
642 |
msgid "Write all events to the firewall log"
|
643 |
msgstr "Enregistrer les événements dans le journal du pare-feu"
|
644 |
|
645 |
+
#: lib/event_notifications.php:176
|
646 |
msgid "PHP backtrace"
|
647 |
msgstr "Pile d'exécution de PHP"
|
648 |
|
649 |
+
#: lib/event_notifications.php:179
|
650 |
msgid "Attach a PHP backtrace to important notifications"
|
651 |
msgstr ""
|
652 |
"Ajouter aux notifications importantes la pile d'exécution de PHP en pièce "
|
653 |
"jointe"
|
654 |
|
655 |
+
#: lib/event_notifications.php:182
|
656 |
msgid "Disable backtrace"
|
657 |
msgstr "Désactiver la pile d'exécution"
|
658 |
|
659 |
+
#: lib/event_notifications.php:183
|
660 |
msgid "Low verbosity"
|
661 |
msgstr "Faible verbosité"
|
662 |
|
663 |
+
#: lib/event_notifications.php:184
|
664 |
msgid "Medium verbosity (default)"
|
665 |
msgstr "Verbosité moyenne (par défaut)"
|
666 |
|
667 |
+
#: lib/event_notifications.php:185
|
668 |
msgid "High verbosity"
|
669 |
msgstr "Verbosité élevée"
|
670 |
|
671 |
+
#: lib/event_notifications.php:187
|
672 |
#, php-format
|
673 |
msgid "<a href=\"%s\">Consult our blog</a> for more info."
|
674 |
msgstr ""
|
675 |
"<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
|
676 |
|
677 |
+
#: lib/event_notifications.php:197 lib/event_notifications.php:227
|
678 |
msgid "Contact email"
|
679 |
msgstr "Adresse e-mail du contact"
|
680 |
|
681 |
+
#: lib/event_notifications.php:200 lib/event_notifications.php:230
|
682 |
msgid "Alerts should be sent to"
|
683 |
msgstr "Envoyer les alertes à"
|
684 |
|
685 |
+
#: lib/event_notifications.php:209 lib/event_notifications.php:235
|
686 |
msgid ""
|
687 |
"Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
|
688 |
"alice@example.org</code>)."
|
690 |
"Plusieurs destinataires doivent être séparés par des virgules (par ex. "
|
691 |
"<code>joe@example.org,alice@example.org</code>)."
|
692 |
|
693 |
+
#: lib/event_notifications.php:232
|
694 |
msgid "Only to me, the Super Admin"
|
695 |
msgstr "Moi uniquement, le Super Admin"
|
696 |
|
697 |
+
#: lib/event_notifications.php:232
|
698 |
msgid "default"
|
699 |
msgstr "défaut"
|
700 |
|
701 |
+
#: lib/event_notifications.php:233
|
702 |
msgid "To the administrator of the site where originated the alert"
|
703 |
msgstr "L'Administrateur du site d’où provient l'alerte"
|
704 |
|
705 |
+
#: lib/event_notifications.php:234
|
706 |
msgid "Other(s):"
|
707 |
msgstr "Autre(s) :"
|
708 |
|
709 |
+
#: lib/event_notifications.php:246
|
710 |
msgid "Save Event Notifications"
|
711 |
msgstr "Sauvegarder les options"
|
712 |
|
713 |
+
#: lib/event_notifications.php:477
|
714 |
msgid "[NinjaFirewall] Daily Activity Report"
|
715 |
msgstr "[NinjaFirewall] Rapport d'activité quotidien"
|
716 |
|
717 |
+
#: lib/event_notifications.php:487
|
718 |
#, php-format
|
719 |
msgid "Daily activity report for: %s"
|
720 |
msgstr "Rapport d'activité quotidien pour : %s"
|
721 |
|
722 |
+
#: lib/event_notifications.php:488
|
723 |
msgid "Date Range Processed: Yesterday"
|
724 |
msgstr "Plage de date traitée : Hier"
|
725 |
|
726 |
+
#: lib/event_notifications.php:490
|
727 |
msgid "Blocked threats:"
|
728 |
msgstr "Menaces bloquées :"
|
729 |
|
730 |
+
#: lib/event_notifications.php:492
|
731 |
msgid "critical:"
|
732 |
msgstr "Critique :"
|
733 |
|
734 |
+
#: lib/event_notifications.php:493
|
735 |
msgid "high:"
|
736 |
msgstr "Élevé :"
|
737 |
|
738 |
+
#: lib/event_notifications.php:494
|
739 |
msgid "medium:"
|
740 |
msgstr "Moyen :"
|
741 |
|
742 |
+
#: lib/event_notifications.php:496
|
743 |
msgid "Blocked brute-force attacks:"
|
744 |
msgstr "Attaques par force brute bloquées :"
|
745 |
|
746 |
+
#: lib/event_notifications.php:497 lib/utils.php:788
|
747 |
msgid ""
|
748 |
"This notification can be turned off from NinjaFirewall \"Event Notifications"
|
749 |
"\" page."
|
751 |
"Cette notification peut être désactivée depuis la page \"Notifications "
|
752 |
"d’Événement\" de NinjaFirewall."
|
753 |
|
754 |
+
#: lib/event_notifications.php:501 lib/event_updates.php:218 lib/events.php:225
|
755 |
+
#: lib/firewall_options.php:525 lib/monitoring_file_check.php:777
|
756 |
+
#: lib/monitoring_file_check.php:798 lib/security_rules_update.php:561
|
757 |
msgid "Support forum:"
|
758 |
msgstr "Forum :"
|
759 |
|
760 |
+
#: lib/event_notifications.php:504 lib/event_updates.php:221 lib/events.php:228
|
761 |
+
#: lib/firewall_options.php:528 lib/monitoring_file_check.php:780
|
762 |
+
#: lib/monitoring_file_check.php:801 lib/security_rules_update.php:564
|
763 |
+
#: lib/utils.php:235 lib/utils.php:584 lib/utils.php:793 lib/utils.php:971
|
764 |
+
#: lib/utils.php:1284
|
765 |
#, php-format
|
766 |
msgid ""
|
767 |
"Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
|
770 |
"Besoin de plus de sécurité ? Venez découvrir NinjaFirewall (WP+ Edition), "
|
771 |
"une version encore plus musclée de notre pare-feu applicatif : %s "
|
772 |
|
773 |
+
#: lib/event_updates.php:157
|
774 |
+
msgid "[NinjaFirewall] Security update available"
|
775 |
+
msgstr "[NinjaFirewall] Mise à jour de sécurité en attente"
|
776 |
+
|
777 |
+
#: lib/event_updates.php:159
|
778 |
+
msgid ""
|
779 |
+
"NinjaFirewall has detected that there are security updates available for "
|
780 |
+
"your website:"
|
781 |
+
msgstr ""
|
782 |
+
"NinjaFirewall a détecté que des mises à jour de sécurité sont disponibles "
|
783 |
+
"pour votre site Web :"
|
784 |
+
|
785 |
+
#: lib/event_updates.php:160 lib/utils.php:219 lib/utils.php:777
|
786 |
+
#: lib/utils.php:954 lib/utils.php:1277
|
787 |
+
msgid "Date:"
|
788 |
+
msgstr "Date :"
|
789 |
+
|
790 |
+
#: lib/event_updates.php:163 lib/event_updates.php:165
|
791 |
+
#, php-format
|
792 |
+
msgid "Blog: %s"
|
793 |
+
msgstr "Blog : %s"
|
794 |
+
|
795 |
+
#: lib/event_updates.php:171 lib/event_updates.php:185
|
796 |
+
#: lib/event_updates.php:202
|
797 |
+
#, php-format
|
798 |
+
msgid "Your version: %s"
|
799 |
+
msgstr "Votre version : %s"
|
800 |
+
|
801 |
+
#: lib/event_updates.php:172 lib/event_updates.php:186
|
802 |
+
#: lib/event_updates.php:203
|
803 |
+
#, php-format
|
804 |
+
msgid "New version: %s"
|
805 |
+
msgstr "Nouvelle version : %s"
|
806 |
+
|
807 |
+
#: lib/event_updates.php:174 lib/event_updates.php:189
|
808 |
+
#: lib/event_updates.php:206
|
809 |
+
msgid "Severity: This is an important security update"
|
810 |
+
msgstr "Sévérité : Ceci est une mise à jour de sécurité importante"
|
811 |
+
|
812 |
+
#: lib/event_updates.php:176 lib/event_updates.php:191
|
813 |
+
#: lib/event_updates.php:208
|
814 |
+
msgid "Severity: **This is a critical security update**"
|
815 |
+
msgstr "Sévérité : **Ceci est une mise à jour de sécurité critique**"
|
816 |
+
|
817 |
+
#: lib/event_updates.php:184
|
818 |
+
#, php-format
|
819 |
+
msgid "Plugin: %s"
|
820 |
+
msgstr "Extension : %s"
|
821 |
+
|
822 |
+
#: lib/event_updates.php:201
|
823 |
+
#, php-format
|
824 |
+
msgid "Theme: %s"
|
825 |
+
msgstr "Theme : %s"
|
826 |
+
|
827 |
+
#: lib/event_updates.php:214
|
828 |
+
msgid "Don't leave your blog at risk, make sure to update as soon as possible."
|
829 |
+
msgstr ""
|
830 |
+
"Ne laissez pas votre blog en danger, lancez cette mise à jour dès que "
|
831 |
+
"possible."
|
832 |
+
|
833 |
+
#: lib/events.php:27
|
834 |
+
msgid "Name:"
|
835 |
+
msgstr "Nom :"
|
836 |
+
|
837 |
+
#: lib/events.php:28
|
838 |
+
msgid "Plugin"
|
839 |
+
msgstr "Extension"
|
840 |
+
|
841 |
+
#: lib/events.php:29
|
842 |
+
msgid "Theme"
|
843 |
+
msgstr "Thème"
|
844 |
+
|
845 |
+
#: lib/events.php:30
|
846 |
+
msgid "Version:"
|
847 |
+
msgstr "Version :"
|
848 |
+
|
849 |
+
#: lib/events.php:40 lib/events.php:73 lib/events.php:77 lib/events.php:136
|
850 |
+
msgid "activated"
|
851 |
+
msgstr "activé(e)"
|
852 |
+
|
853 |
+
#: lib/events.php:45 lib/events.php:93 lib/events.php:183 lib/events.php:195
|
854 |
+
msgid "deleted"
|
855 |
+
msgstr "supprimé(e)"
|
856 |
+
|
857 |
+
#: lib/events.php:81 lib/events.php:104 lib/events.php:109 lib/events.php:113
|
858 |
+
#: lib/events.php:128 lib/events.php:132 lib/events.php:148 lib/events.php:157
|
859 |
+
#: lib/events.php:179 lib/events.php:191
|
860 |
+
msgid "updated"
|
861 |
+
msgstr "mis(e) à jour"
|
862 |
+
|
863 |
+
#: lib/events.php:85 lib/events.php:89
|
864 |
+
msgid "deactivated"
|
865 |
+
msgstr "désactivé(e)"
|
866 |
+
|
867 |
+
#: lib/events.php:140 lib/events.php:161 lib/events.php:175 lib/events.php:187
|
868 |
+
msgid "installed"
|
869 |
+
msgstr "installé(e)"
|
870 |
+
|
871 |
+
#: lib/events.php:144 lib/events.php:165
|
872 |
+
msgid "uploaded"
|
873 |
+
msgstr "téléchargé(e)"
|
874 |
+
|
875 |
+
#: lib/events.php:211
|
876 |
+
#, php-format
|
877 |
+
msgid "[NinjaFirewall] Alert: %s"
|
878 |
+
msgstr "[NinjaFirewall] Alerte : %s"
|
879 |
+
|
880 |
+
#: lib/events.php:213 lib/events.php:215 lib/utils.php:571
|
881 |
+
msgid "-Blog:"
|
882 |
+
msgstr "- Blog :"
|
883 |
+
|
884 |
+
#: lib/events.php:218
|
885 |
+
msgid "NinjaFirewall has detected the following activity on your account:"
|
886 |
+
msgstr "NinjaFirewall a détecté l'activité suivante sur votre compte :"
|
887 |
+
|
888 |
+
#: lib/events.php:220 lib/utils.php:576
|
889 |
+
msgid "-User:"
|
890 |
+
msgstr "- Nom :"
|
891 |
+
|
892 |
+
#: lib/events.php:221 lib/utils.php:577
|
893 |
+
msgid "-IP:"
|
894 |
+
msgstr "- IP :"
|
895 |
+
|
896 |
+
#: lib/events.php:222 lib/utils.php:578
|
897 |
+
msgid "-Date:"
|
898 |
+
msgstr "-Date :"
|
899 |
+
|
900 |
+
#: lib/firewall_options.php:29 ninjafirewall.php:756
|
901 |
msgid "Firewall Options"
|
902 |
msgstr "Options du Pare-feu"
|
903 |
|
907 |
|
908 |
#: lib/firewall_options.php:64 lib/login_protection.php:203
|
909 |
#: lib/logs_live_log.php:101 lib/monitoring_file_guard.php:70
|
910 |
+
#: lib/security_rules_update.php:138
|
911 |
msgid "Disabled"
|
912 |
msgstr "Désactivé"
|
913 |
|
956 |
"Ne s'applique pas aux adresses IP privées, ni à la <a href=\"%s\">Page de "
|
957 |
"Connexion</a>."
|
958 |
|
959 |
+
#: lib/firewall_options.php:128 lib/help.php:90
|
960 |
msgid "Blocked user message"
|
961 |
msgstr "Message pour les utilisateurs bloqués"
|
962 |
|
1037 |
msgid "[NinjaFirewall] Alert: Firewall is disabled"
|
1038 |
msgstr "[NinjaFirewall] Alerte : Le pare-feu a été désactivé"
|
1039 |
|
1040 |
+
#: lib/firewall_options.php:501 lib/firewall_options.php:503
|
|
|
1041 |
msgid "-Blog :"
|
1042 |
msgstr "- Blog :"
|
1043 |
|
1066 |
"Quelqu'un a importé une nouvelle configuration qui a modifié tous les "
|
1067 |
"paramètres du pare-feu :"
|
1068 |
|
1069 |
+
#: lib/firewall_options.php:520
|
1070 |
msgid "-User :"
|
1071 |
msgstr "- Nom :"
|
1072 |
|
1073 |
+
#: lib/firewall_options.php:521
|
1074 |
msgid "-IP :"
|
1075 |
msgstr "- IP :"
|
1076 |
|
1077 |
+
#: lib/firewall_options.php:522
|
1078 |
msgid "-Date :"
|
1079 |
msgstr "- Date :"
|
1080 |
|
1086 |
"Cette option ne peut être activée que lorsque NinjaFirewall fonctionne en "
|
1087 |
"mode %s."
|
1088 |
|
1089 |
+
#: lib/firewall_policies.php:62 ninjafirewall.php:760
|
1090 |
msgid "Firewall Policies"
|
1091 |
msgstr "Politiques du Pare-feu"
|
1092 |
|
1098 |
msgid "No action taken."
|
1099 |
msgstr "Aucune mesure prise."
|
1100 |
|
1101 |
+
#: lib/firewall_policies.php:85 lib/help.php:161
|
1102 |
msgid "Basic Policies"
|
1103 |
msgstr "Politiques de base"
|
1104 |
|
1105 |
+
#: lib/firewall_policies.php:86 lib/help.php:214
|
1106 |
msgid "Intermediate Policies"
|
1107 |
msgstr "Politiques intermédiaires"
|
1108 |
|
1109 |
+
#: lib/firewall_policies.php:87 lib/help.php:253
|
1110 |
msgid "Advanced Policies"
|
1111 |
msgstr "Politiques avancées"
|
1112 |
|
1126 |
msgid "HTTPS traffic only"
|
1127 |
msgstr "Trafic HTTPS uniquement"
|
1128 |
|
1129 |
+
#: lib/firewall_policies.php:141 lib/help.php:169
|
1130 |
msgid "Uploads"
|
1131 |
msgstr "Téléchargements"
|
1132 |
|
1133 |
+
#: lib/firewall_policies.php:144 lib/help.php:171
|
1134 |
msgid "File Uploads"
|
1135 |
msgstr "Autoriser les téléchargements (uploads)"
|
1136 |
|
1146 |
msgid "Disallow uploads"
|
1147 |
msgstr "Interdire"
|
1148 |
|
1149 |
+
#: lib/firewall_policies.php:152 lib/help.php:173
|
1150 |
msgid "Sanitise filenames"
|
1151 |
msgstr "Nettoyer le nom des fichiers"
|
1152 |
|
1154 |
msgid "substitution character:"
|
1155 |
msgstr "caractère de substitution :"
|
1156 |
|
1157 |
+
#: lib/firewall_policies.php:281 lib/help.php:178
|
1158 |
msgid "Block direct access to any PHP file located in one of these directories"
|
1159 |
msgstr ""
|
1160 |
"Bloquer l'accès direct à un fichier PHP situé dans l'un de ces répertoires"
|
1161 |
|
1162 |
+
#: lib/firewall_policies.php:311
|
1163 |
msgid ""
|
1164 |
"NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
|
1165 |
"this option is enabled."
|
1167 |
"NinjaFirewall ne bloquera pas l'accès à l'éditeur WYSIWYG TinyMCE même si "
|
1168 |
"cette option est activée."
|
1169 |
|
1170 |
+
#: lib/firewall_policies.php:326
|
1171 |
msgid ""
|
1172 |
"Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
|
1173 |
"by your visitors, we recommend to enable this option."
|
1176 |
"pouvant être consultés par vos visiteurs, nous vous recommandons d'activer "
|
1177 |
"cette option."
|
1178 |
|
1179 |
+
#: lib/firewall_policies.php:335
|
1180 |
msgid "General"
|
1181 |
msgstr "Général"
|
1182 |
|
1183 |
+
#: lib/firewall_policies.php:337 lib/help.php:180
|
1184 |
msgid "Block attempts to modify important WordPress settings"
|
1185 |
msgstr ""
|
1186 |
"Bloquer les tentatives de modification des paramètres importants de WordPress"
|
1187 |
|
1188 |
+
#: lib/firewall_policies.php:338 lib/help.php:182
|
1189 |
msgid "Block user accounts creation"
|
1190 |
msgstr "Bloquer la création de comptes utilisateur"
|
1191 |
|
1192 |
+
#: lib/firewall_policies.php:341
|
1193 |
+
#, php-format
|
1194 |
+
msgid ""
|
1195 |
+
"To enable this option, please remove the %s constant from your wp-config.php "
|
1196 |
+
"or .htninja script."
|
1197 |
+
msgstr ""
|
1198 |
+
"Pour activer cette option, veuillez enlever la constante %s de votre fichier "
|
1199 |
+
"wp-config.php ou .htninja."
|
1200 |
+
|
1201 |
+
#: lib/firewall_policies.php:349 lib/help.php:184
|
1202 |
+
msgid "Block attempts to gain administrative privileges"
|
1203 |
+
msgstr "Bloquer les tentatives d'élévation des privilèges"
|
1204 |
+
|
1205 |
+
#: lib/firewall_policies.php:362 lib/help.php:186
|
1206 |
msgid "WordPress AJAX"
|
1207 |
msgstr "WordPress AJAX"
|
1208 |
|
1209 |
+
#: lib/firewall_policies.php:364
|
1210 |
msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
|
1211 |
msgstr ""
|
1212 |
"Proteger <code>admin-ajax.php</code> contre les bots et scanners malveillants"
|
1213 |
|
1214 |
+
#: lib/firewall_policies.php:365
|
1215 |
#, php-format
|
1216 |
msgid ""
|
1217 |
"Your server IP (%s), localhost and private IP addresses will not be affected "
|
1220 |
"L'adresse IP de votre serveur (%s), localhost et toute adresse IP privée ne "
|
1221 |
"seront pas affectées par cette politique."
|
1222 |
|
1223 |
+
#: lib/firewall_policies.php:370 lib/help.php:188
|
1224 |
msgid "Protect against username enumeration"
|
1225 |
msgstr "Protéger contre l'énumération des comptes utilisateurs"
|
1226 |
|
1227 |
+
#: lib/firewall_policies.php:372
|
1228 |
msgid "Through the author archives"
|
1229 |
msgstr "Via la page d'archive d'un auteur"
|
1230 |
|
1231 |
+
#: lib/firewall_policies.php:373
|
1232 |
msgid "Through the login page"
|
1233 |
msgstr "Via la page de connexion"
|
1234 |
|
1235 |
+
#: lib/firewall_policies.php:374
|
1236 |
msgid "Through the WordPress REST API"
|
1237 |
msgstr "Via l'API REST de WordPress"
|
1238 |
|
1239 |
+
#: lib/firewall_policies.php:379 lib/help.php:190
|
1240 |
msgid "WordPress REST API"
|
1241 |
msgstr "API REST de WordPress"
|
1242 |
|
1243 |
+
#: lib/firewall_policies.php:381 lib/firewall_policies.php:387
|
1244 |
msgid "Block any access to the API"
|
1245 |
msgstr "Bloquer tout accès à l'API"
|
1246 |
|
1247 |
+
#: lib/firewall_policies.php:385 lib/help.php:192
|
1248 |
msgid "WordPress XML-RPC API"
|
1249 |
msgstr "API XML-RPC de WordPress"
|
1250 |
|
1251 |
+
#: lib/firewall_policies.php:388
|
1252 |
msgid "Block <code>system.multicall</code> method"
|
1253 |
msgstr "Bloquer la méthode <code>system.multicall</code>"
|
1254 |
|
1255 |
+
#: lib/firewall_policies.php:389
|
1256 |
msgid "Block Pingbacks"
|
1257 |
msgstr "Bloquer les Pingbacks"
|
1258 |
|
1259 |
+
#: lib/firewall_policies.php:391
|
1260 |
msgid ""
|
1261 |
"Disabling access to the REST or XML-RPC API may break some functionality on "
|
1262 |
"your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact "
|
1266 |
"blog, ses thèmes ou ses extensions (ex.: Éditeur Gutenberg, Jetpack, Contact "
|
1267 |
"Form 7 etc)."
|
1268 |
|
1269 |
+
#: lib/firewall_policies.php:396
|
1270 |
msgid "Block <code>POST</code> requests in the themes folder"
|
1271 |
msgstr "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes"
|
1272 |
|
1273 |
+
#: lib/firewall_policies.php:406
|
1274 |
+
msgid "Force HTTPS for admin and logins"
|
1275 |
msgstr "Forcer la connexion sécurisée au Tableau de bord"
|
1276 |
|
1277 |
+
#: lib/firewall_policies.php:412
|
1278 |
msgid "Disable the plugin and theme editor"
|
1279 |
msgstr "Désactiver l’éditeur de thème et d'extension"
|
1280 |
|
1281 |
+
#: lib/firewall_policies.php:418
|
1282 |
msgid "Disable plugin and theme update/installation"
|
1283 |
msgstr "Désactiver l'installation et mise à jour des thèmes et extensions"
|
1284 |
|
1285 |
+
#: lib/firewall_policies.php:424
|
1286 |
msgid "Disable the fatal error handler"
|
1287 |
msgstr "Désactiver le gestionnaire d'erreurs fatales"
|
1288 |
|
1289 |
+
#: lib/firewall_policies.php:446 lib/help.php:204
|
1290 |
msgid "Users Whitelist"
|
1291 |
msgstr "Liste Blanche"
|
1292 |
|
1293 |
+
#: lib/firewall_policies.php:448
|
1294 |
msgid "Add the Administrator to the whitelist (default)."
|
1295 |
msgstr "Ajouter l'Administrateur à la liste blanche (défaut)."
|
1296 |
|
1297 |
+
#: lib/firewall_policies.php:449
|
1298 |
msgid "Add all logged in users to the whitelist."
|
1299 |
msgstr "Ajouter tous les utilisateurs connectés à la liste blanche."
|
1300 |
|
1301 |
+
#: lib/firewall_policies.php:450
|
1302 |
msgid "Disable users whitelist."
|
1303 |
msgstr "Désactiver la liste blanche."
|
1304 |
|
1305 |
+
#: lib/firewall_policies.php:451
|
1306 |
msgid ""
|
1307 |
"Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
|
1308 |
"<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
|
1314 |
"<code>WP_DISABLE_FATAL_ERROR_HANDLER</code> qui, si elles sont activées, "
|
1315 |
"seront toujours appliquées."
|
1316 |
|
1317 |
+
#: lib/firewall_policies.php:476 lib/help.php:218
|
1318 |
msgid "HTTP GET variable"
|
1319 |
msgstr "Variable HTTP GET"
|
1320 |
|
1321 |
+
#: lib/firewall_policies.php:479
|
1322 |
msgid "Scan <code>GET</code> variable"
|
1323 |
msgstr "Filtrer la variable <code>GET</code>"
|
1324 |
|
1325 |
+
#: lib/firewall_policies.php:485
|
1326 |
msgid "Sanitise <code>GET</code> variable"
|
1327 |
msgstr "Nettoyer la variable <code>GET</code>"
|
1328 |
|
1329 |
+
#: lib/firewall_policies.php:511 lib/help.php:221
|
1330 |
msgid "HTTP POST variable"
|
1331 |
msgstr "Variable HTTP POST"
|
1332 |
|
1333 |
+
#: lib/firewall_policies.php:514
|
1334 |
msgid "Scan <code>POST</code> variable"
|
1335 |
msgstr "Filtrer la variable <code>POST</code>"
|
1336 |
|
1337 |
+
#: lib/firewall_policies.php:520
|
1338 |
msgid "Sanitise <code>POST</code> variable"
|
1339 |
msgstr "Nettoyer la variable <code>POST</code>"
|
1340 |
|
1341 |
+
#: lib/firewall_policies.php:523 lib/firewall_policies.php:548
|
1342 |
msgid "Do not enable this option unless you know what you are doing!"
|
1343 |
msgstr ""
|
1344 |
"N'activez pas cette option si vous n'êtes pas sûr de ce que vous "
|
1345 |
"faites !"
|
1346 |
|
1347 |
+
#: lib/firewall_policies.php:527 lib/help.php:223
|
1348 |
msgid "Decode Base64-encoded <code>POST</code> variable"
|
1349 |
msgstr ""
|
1350 |
"Décoder les chaîne encodées en Base64 dans la variable <code>POST</code>"
|
1351 |
|
1352 |
+
#: lib/firewall_policies.php:542 lib/help.php:225
|
1353 |
msgid "HTTP REQUEST variable"
|
1354 |
msgstr "Variable HTTP REQUEST"
|
1355 |
|
1356 |
+
#: lib/firewall_policies.php:545
|
1357 |
msgid "Sanitise <code>REQUEST</code> variable"
|
1358 |
msgstr "Nettoyer la variable <code>REQUEST</code>"
|
1359 |
|
1360 |
+
#: lib/firewall_policies.php:567 lib/help.php:228
|
1361 |
msgid "Cookies"
|
1362 |
msgstr "Cookies"
|
1363 |
|
1364 |
+
#: lib/firewall_policies.php:570
|
1365 |
msgid "Scan cookies"
|
1366 |
msgstr "Filtrer les cookies"
|
1367 |
|
1368 |
+
#: lib/firewall_policies.php:576
|
1369 |
msgid "Sanitise cookies"
|
1370 |
msgstr "Nettoyer les cookies"
|
1371 |
|
1372 |
+
#: lib/firewall_policies.php:602 lib/help.php:231
|
1373 |
msgid "HTTP_USER_AGENT server variable"
|
1374 |
msgstr "Variable HTTP_USER_AGENT"
|
1375 |
|
1376 |
+
#: lib/firewall_policies.php:605
|
1377 |
msgid "Scan <code>HTTP_USER_AGENT</code>"
|
1378 |
msgstr "Filtrer <code>HTTP_USER_AGENT</code>"
|
1379 |
|
1380 |
+
#: lib/firewall_policies.php:611
|
1381 |
msgid "Sanitise <code>HTTP_USER_AGENT</code>"
|
1382 |
msgstr "Nettoyer <code>HTTP_USER_AGENT</code>"
|
1383 |
|
1384 |
+
#: lib/firewall_policies.php:617 lib/help.php:233
|
1385 |
msgid "Block suspicious bots/scanners"
|
1386 |
msgstr "Bloquer les requêtes provenant de bots/scanners malveillants"
|
1387 |
|
1388 |
+
#: lib/firewall_policies.php:643 lib/help.php:235
|
1389 |
msgid "HTTP_REFERER server variable"
|
1390 |
msgstr "Variable HTTP_REFERER"
|
1391 |
|
1392 |
+
#: lib/firewall_policies.php:646
|
1393 |
msgid "Scan <code>HTTP_REFERER</code>"
|
1394 |
msgstr "Filtrer <code>HTTP_REFERER</code>"
|
1395 |
|
1396 |
+
#: lib/firewall_policies.php:652
|
1397 |
msgid "Sanitise <code>HTTP_REFERER</code>"
|
1398 |
msgstr "Nettoyer <code>HTTP_REFERER</code>"
|
1399 |
|
1400 |
+
#: lib/firewall_policies.php:658
|
1401 |
msgid ""
|
1402 |
"Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
|
1403 |
"code> header"
|
1405 |
"Bloquer les requêtes <code>POST</code> qui n'ont pas d'en-tête "
|
1406 |
"<code>HTTP_REFERER</code>"
|
1407 |
|
1408 |
+
#: lib/firewall_policies.php:661
|
1409 |
msgid ""
|
1410 |
"Keep this option disabled if you are using scripts like Paypal IPN, "
|
1411 |
"WordPress WP-Cron etc"
|
1413 |
"N'activez pas cette option si vous utilisez des scripts comme Paypal IPN, "
|
1414 |
"WordPress WP-Cron etc"
|
1415 |
|
1416 |
+
#: lib/firewall_policies.php:688
|
1417 |
msgid "Block localhost IP in <code>GET/POST</code> request"
|
1418 |
msgstr "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost"
|
1419 |
|
1420 |
+
#: lib/firewall_policies.php:694 lib/help.php:243
|
1421 |
msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
|
1422 |
msgstr ""
|
1423 |
"Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient une "
|
1424 |
"IP"
|
1425 |
|
1426 |
+
#: lib/firewall_policies.php:700 lib/help.php:245
|
1427 |
msgid "Scan traffic coming from localhost and private IP address spaces"
|
1428 |
msgstr "Filtrer les connexions provenant de localhost et d'adresses IP privées"
|
1429 |
|
1430 |
+
#: lib/firewall_policies.php:730
|
1431 |
#, php-format
|
1432 |
msgid ""
|
1433 |
"The \"HTTP response headers\" options below are disabled because the %s PHP "
|
1436 |
"Les politiques \"En-têtes de réponse HTTP\" ci-dessous sont désactivées car "
|
1437 |
"la fonction PHP %s n'est pas disponible sur votre serveur."
|
1438 |
|
1439 |
+
#: lib/firewall_policies.php:750 lib/help.php:257
|
1440 |
msgid "HTTP response headers"
|
1441 |
msgstr "En-têtes de réponse HTTP"
|
1442 |
|
1443 |
+
#: lib/firewall_policies.php:758
|
1444 |
#, php-format
|
1445 |
msgid "Set %s to protect against MIME type confusion attacks"
|
1446 |
msgstr ""
|
1447 |
"Activer %s pour protéger contre les attaques basées sur la confusion du type "
|
1448 |
"MIME"
|
1449 |
|
1450 |
+
#: lib/firewall_policies.php:764
|
1451 |
#, php-format
|
1452 |
msgid "Set %s to protect against clickjacking attempts"
|
1453 |
msgstr ""
|
1454 |
"Activer %s pour protéger contre les attaques de détournement de clic "
|
1455 |
"(clickjacking)"
|
1456 |
|
1457 |
+
#: lib/firewall_policies.php:771
|
1458 |
msgid ""
|
1459 |
"Setting this option to <code>DENY</code> may break some functionality on "
|
1460 |
"your blog, its themes or plugins."
|
1462 |
"Activer cette fonction avec <code>DENY</code> pourrait bloquer certaines "
|
1463 |
"fonctionnalités de votre blog, ses thèmes ou ses extensions."
|
1464 |
|
1465 |
+
#: lib/firewall_policies.php:776
|
1466 |
#, php-format
|
1467 |
msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
|
1468 |
msgstr "Activer %s (IE/Edge, Opera, Chrome et Safari)"
|
1469 |
|
1470 |
+
#: lib/firewall_policies.php:780 lib/firewall_policies.php:781
|
1471 |
+
#: lib/firewall_policies.php:782
|
1472 |
#, php-format
|
1473 |
msgid "Set to %s"
|
1474 |
msgstr "Régler sur %s"
|
1475 |
|
1476 |
+
#: lib/firewall_policies.php:787
|
1477 |
#, php-format
|
1478 |
msgid "Force %s flag on all cookies to mitigate CSRF attacks"
|
1479 |
msgstr ""
|
1480 |
"Activer la propriété %s pour tous les cookies afin d'atténuer les attaques "
|
1481 |
"CSRF"
|
1482 |
|
1483 |
+
#: lib/firewall_policies.php:797
|
1484 |
#, php-format
|
1485 |
msgid "Force %s flag on all cookies to mitigate XSS attacks"
|
1486 |
msgstr ""
|
1487 |
"Activer la propriété %s pour tous les cookies afin d'atténuer les menaces "
|
1488 |
"XSS qui génèrent des vols de cookies"
|
1489 |
|
1490 |
+
#: lib/firewall_policies.php:800
|
1491 |
msgid ""
|
1492 |
"If your PHP scripts use cookies that need to be accessed from JavaScript, "
|
1493 |
"you should not enable this option."
|
1495 |
"Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
|
1496 |
"partir de JavaScript, vous ne devriez pas activer cette option."
|
1497 |
|
1498 |
+
#: lib/firewall_policies.php:809
|
1499 |
msgid ""
|
1500 |
"HSTS headers can only be set when you are accessing your site over HTTPS."
|
1501 |
msgstr ""
|
1502 |
"Les en-têtes HSTS ne peuvent être utilisés que lorsque vous vous connectez à "
|
1503 |
"votre site en HTTPS (connexion sécurisée)."
|
1504 |
|
1505 |
+
#: lib/firewall_policies.php:817
|
1506 |
#, php-format
|
1507 |
msgid "Set %s (HSTS) to enforce secure connections to the server"
|
1508 |
msgstr ""
|
1509 |
"Activer %s (HSTS) pour forcer les connexions sécurisées vers le serveur"
|
1510 |
|
1511 |
+
#: lib/firewall_policies.php:821
|
1512 |
msgid "Set \"max-age\" to 0"
|
1513 |
msgstr "Régler \"max-age\" à 0"
|
1514 |
|
1515 |
+
#: lib/firewall_policies.php:822
|
1516 |
msgid "1 month"
|
1517 |
msgstr "1 mois"
|
1518 |
|
1519 |
+
#: lib/firewall_policies.php:823
|
1520 |
msgid "6 months"
|
1521 |
msgstr "6 mois"
|
1522 |
|
1523 |
+
#: lib/firewall_policies.php:824
|
1524 |
msgid "1 year"
|
1525 |
msgstr "1 année"
|
1526 |
|
1527 |
+
#: lib/firewall_policies.php:826
|
1528 |
msgid "Apply to subdomains"
|
1529 |
msgstr "Appliquer aux sous-domaines"
|
1530 |
|
1531 |
+
#: lib/firewall_policies.php:850
|
1532 |
#, php-format
|
1533 |
msgid "Set %s for the website frontend"
|
1534 |
msgstr "Activer %s pour le site"
|
1535 |
|
1536 |
+
#: lib/firewall_policies.php:855
|
1537 |
msgid "This CSP header will apply to the website frontend only."
|
1538 |
msgstr "Cet en-tête CSP ne s'appliquera qu'au site."
|
1539 |
|
1540 |
+
#: lib/firewall_policies.php:859
|
1541 |
#, php-format
|
1542 |
msgid "Set %s for the WordPress admin dashboard"
|
1543 |
msgstr "Activer %s pour la console d'administration de WordPress"
|
1544 |
|
1545 |
+
#: lib/firewall_policies.php:864
|
1546 |
msgid "This CSP header will apply to the WordPress admin dashboard only."
|
1547 |
msgstr ""
|
1548 |
"Cet en-tête CSP ne s'appliquera qu'à la console d'administration de "
|
1549 |
"WordPress."
|
1550 |
|
1551 |
+
#: lib/firewall_policies.php:880
|
1552 |
#, php-format
|
1553 |
msgid "Set %s (Chrome, Opera and Firefox browsers)"
|
1554 |
msgstr "Activer %s (Chrome, Opera et Firefox)"
|
1555 |
|
1556 |
+
#: lib/firewall_policies.php:930
|
1557 |
msgid ""
|
1558 |
"Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
|
1559 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
|
1562 |
"<code>GET</code>, <code>POST</code>, <code>HTTP_USER_AGENT</code>, "
|
1563 |
"<code>HTTP_REFERER</code> et les cookies"
|
1564 |
|
1565 |
+
#: lib/firewall_policies.php:969
|
1566 |
msgid "Block serialized PHP objects in the following global variables"
|
1567 |
msgstr ""
|
1568 |
"Bloquer les objets PHP sérialisés dans les variables globales suivantes"
|
1569 |
|
1570 |
+
#: lib/firewall_policies.php:979 lib/help.php:290
|
1571 |
msgid "Hide PHP notice and error messages"
|
1572 |
msgstr "Masquer les messages d'erreur de PHP"
|
1573 |
|
1574 |
+
#: lib/firewall_policies.php:985
|
1575 |
msgid "Sanitise <code>PHP_SELF</code>"
|
1576 |
msgstr "Nettoyer <code>PHP_SELF</code>"
|
1577 |
|
1578 |
+
#: lib/firewall_policies.php:991
|
1579 |
msgid "Sanitise <code>PATH_TRANSLATED</code>"
|
1580 |
msgstr "Nettoyer <code>PATH_TRANSLATED</code>"
|
1581 |
|
1582 |
+
#: lib/firewall_policies.php:997
|
1583 |
msgid "Sanitise <code>PATH_INFO</code>"
|
1584 |
msgstr "Nettoyer <code>PATH_INFO</code>"
|
1585 |
|
1586 |
+
#: lib/firewall_policies.php:1011
|
1587 |
msgid "This option is not compatible with your actual configuration."
|
1588 |
msgstr ""
|
1589 |
"Cette option n'est pas compatible avec la configuration de votre serveur."
|
1590 |
|
1591 |
+
#: lib/firewall_policies.php:1033 lib/help.php:294
|
1592 |
msgid "Various"
|
1593 |
msgstr "Divers"
|
1594 |
|
1595 |
+
#: lib/firewall_policies.php:1036
|
1596 |
msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
|
1597 |
msgstr ""
|
1598 |
"Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code>"
|
1599 |
|
1600 |
+
#: lib/firewall_policies.php:1043 lib/help.php:297
|
1601 |
msgid "Block ASCII character 0x00 (NULL byte)"
|
1602 |
msgstr "Bloquer le caractère ASCII 0x00 (NULL byte)"
|
1603 |
|
1604 |
+
#: lib/firewall_policies.php:1049 lib/help.php:299
|
1605 |
msgid "Block ASCII control characters 1 to 8 and 14 to 31"
|
1606 |
msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31"
|
1607 |
|
1608 |
+
#: lib/firewall_policies.php:1062
|
1609 |
msgid "Save Firewall Policies"
|
1610 |
msgstr "Sauvegarder les options"
|
1611 |
|
1612 |
+
#: lib/firewall_policies.php:1064
|
1613 |
msgid "Restore Default Values"
|
1614 |
msgstr "Rétablir les valeurs par défaut"
|
1615 |
|
1621 |
msgstr ""
|
1622 |
"Le Tableau de Bord affiche toutes les informations relatives au bon "
|
1623 |
"fonctionnement du pare-feu ainsi que les mises à jour; il vous est conseillé "
|
1624 |
+
"de le consulter fréquemment car, en cas de problèmes, ceux-ci seront "
|
1625 |
"indiqués ici."
|
1626 |
|
1627 |
#: lib/help.php:45
|
1645 |
"Benchmarks show the time NinjaFirewall took, in seconds, to process each "
|
1646 |
"request it has blocked."
|
1647 |
msgstr ""
|
1648 |
+
"La section \"Performances\" indique le temps qu'il a fallu à NinjaFirewall "
|
1649 |
+
"pour intercepter, analyser et bloquer les requêtes dangereuses."
|
1650 |
|
1651 |
#: lib/help.php:56
|
1652 |
msgid "Everything you ever wanted to know about NinjaFirewall."
|
1725 |
"En outre, si vous redirigez les événements vers le serveur syslog, les "
|
1726 |
"adresses IP y seront également anonymisées."
|
1727 |
|
|
|
|
|
|
|
|
|
1728 |
#: lib/help.php:92
|
1729 |
msgid ""
|
1730 |
"Lets you customize the HTTP error code returned by NinjaFirewall when "
|
1788 |
"restaurer sa configuration à une date antérieure, sélectionnez le fichier "
|
1789 |
"correspondant dans la liste."
|
1790 |
|
1791 |
+
#: lib/help.php:131
|
1792 |
#, php-format
|
1793 |
msgid ""
|
1794 |
"Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
|
1799 |
"scripts PHP</b> situés à l'intérieur du répertoire %s ainsi que ses sous-"
|
1800 |
"répertoires, et non pas seulement à la page d'index de WordPress."
|
1801 |
|
1802 |
+
#: lib/help.php:136
|
1803 |
msgid "Policies overview"
|
1804 |
msgstr "Politiques du pare-feu"
|
1805 |
|
1806 |
+
#: lib/help.php:138
|
1807 |
#, php-format
|
1808 |
msgid ""
|
1809 |
"Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
|
1822 |
"adresses IP, avant que celles-ci n'atteignent votre application, que ce soit "
|
1823 |
"en mode HTTP ou HTTPS."
|
1824 |
|
1825 |
+
#: lib/help.php:140
|
1826 |
msgid ""
|
1827 |
"Use the options below to enable, disable or to tweak these rules according "
|
1828 |
"to your needs."
|
1830 |
"Utilisez les options ci-dessous pour configurer NinjaFirewall suivant vos "
|
1831 |
"besoins."
|
1832 |
|
1833 |
+
#: lib/help.php:147
|
1834 |
msgid "Scan and Sanitise"
|
1835 |
msgstr "Filtrer et Nettoyer"
|
1836 |
|
1837 |
+
#: lib/help.php:149
|
1838 |
msgid ""
|
1839 |
"You can choose to scan and reject dangerous content but also to sanitise "
|
1840 |
"requests and variables. Those two actions are different and can be combined "
|
1844 |
"mais aussi de les nettoyer. Ces deux actions sont différentes et peuvent "
|
1845 |
"être combinées pour plus de sécurité."
|
1846 |
|
1847 |
+
#: lib/help.php:150
|
1848 |
msgid ""
|
1849 |
+
"Scan: If anything suspicious is detected, NinjaFirewall will block the "
|
1850 |
"request and return an HTTP error code and message (defined in the \"Firewall "
|
1851 |
"Options\" page). The user request will fail and the connection will be "
|
1852 |
"closed immediately."
|
1856 |
"du Pare-feu\"). La requête ne pourra pas aboutir et la connexion sera fermée "
|
1857 |
"immédiatement."
|
1858 |
|
1859 |
+
#: lib/help.php:151
|
1860 |
#, php-format
|
1861 |
msgid ""
|
1862 |
+
"Sanitise: This option will not block but sanitise the user request by "
|
1863 |
"escaping characters that can be used to exploit vulnerabilities (%s) and "
|
1864 |
"replacing <code><</code> and <code>></code> with their corresponding "
|
1865 |
"HTML entities (<code>&lt;</code>, <code>&gt;</code>). If it is a "
|
1874 |
"HTML correspondantes. S'il s'agit d'une variable et de sa valeur (<code>?"
|
1875 |
"variable=valeur</code>), les deux éléments seront nettoyés."
|
1876 |
|
1877 |
+
#: lib/help.php:153
|
1878 |
msgid ""
|
1879 |
"This action will be performed when the filtering process is over, right "
|
1880 |
"before NinjaFirewall forwards the request to your PHP script."
|
1883 |
"juste avant que NinjaFirewall fasse suivre la requête à votre application "
|
1884 |
"PHP."
|
1885 |
|
1886 |
+
#: lib/help.php:156
|
1887 |
msgid ""
|
1888 |
"If you enabled <code>POST</code> requests sanitising, articles and messages "
|
1889 |
"posted by your visitors could be corrupted with excessive backslashes or "
|
1893 |
"commentaires et messages de vos visiteurs pourraient être endommagés par "
|
1894 |
"cette option."
|
1895 |
|
1896 |
+
#: lib/help.php:167
|
1897 |
msgid "Whether to filter HTTP and/or HTTPS traffic"
|
1898 |
msgstr ""
|
1899 |
"Sélectionnez le type de trafic filtré par le pare-feu (HTTP et/ou HTTPS)."
|
1900 |
|
1901 |
+
#: lib/help.php:171
|
1902 |
+
msgid "Whether to allow/disallow file uploads."
|
|
|
|
|
|
|
|
|
1903 |
msgstr ""
|
1904 |
+
"Vous pouvez autoriser ou interdire tout téléchargement de fichiers vers "
|
1905 |
"votre site."
|
1906 |
|
1907 |
+
#: lib/help.php:173
|
|
|
|
|
|
|
|
|
1908 |
msgid ""
|
1909 |
+
"Any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</"
|
1910 |
"code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
|
1911 |
"<code>_</code> will be removed from the filename and replaced with the "
|
1912 |
"substitution character."
|
1913 |
msgstr ""
|
1914 |
+
"Tout caractère qui n'est pas une lettre <code>a-zA-Z</code>, un chiffre "
|
1915 |
+
"<code>0-9</code>, un point <code>.</code>, un trait d'union <code>-</code> "
|
1916 |
+
"ou un caractère de soulignement <code>_</code>, sera remplacé par le "
|
1917 |
+
"caractère de substitution."
|
1918 |
|
1919 |
+
#: lib/help.php:178
|
1920 |
msgid ""
|
1921 |
"Whether to block direct access to PHP files located in specific WordPress "
|
1922 |
"directories."
|
1924 |
"S'il faut bloquer l’accès direct à tout fichier PHP se trouvant dans l'un de "
|
1925 |
"ces répertoires."
|
1926 |
|
1927 |
+
#: lib/help.php:180
|
1928 |
msgid ""
|
1929 |
+
"Enabling this policy will block any attempt (e.g., exploiting a "
|
1930 |
"vulnerability, using a backdoor etc) to modify some important WordPress "
|
1931 |
"settings. This policy will also send you an alert by email with all details "
|
1932 |
"regarding the issue. It is enabled by default."
|
1933 |
msgstr ""
|
1934 |
+
"L'activation de cette politique bloquera toute tentative (par exemple, "
|
1935 |
"l'exploitation d'une vulnérabilité, l'utilisation d'une porte dérobée, etc) "
|
1936 |
"de modifier certains paramètres WordPress importants. Cette politique vous "
|
1937 |
"enverra également une alerte par e-mail avec tous les détails concernant le "
|
1938 |
"problème. Elle est activée par défaut."
|
1939 |
|
1940 |
+
#: lib/help.php:182
|
1941 |
msgid ""
|
1942 |
+
"Enabling this policy will block any attempt (e.g., exploiting a "
|
1943 |
"vulnerability, using a backdoor etc) to create a user account. If you allow "
|
1944 |
"user registration, you should not enable it."
|
1945 |
msgstr ""
|
1946 |
+
"L'activation de cette politique bloquera toute tentative (par exemple, "
|
1947 |
"l'exploitation d'une vulnérabilité, l'utilisation d'une porte dérobée, etc) "
|
1948 |
"de création d'un compte d'utilisateur. Si vous autorisez l'inscription des "
|
1949 |
"utilisateurs, vous ne devez pas l'activer."
|
1950 |
|
1951 |
+
#: lib/help.php:184
|
1952 |
+
msgid ""
|
1953 |
+
"This policy will block vulnerabilities that could be leveraged by attackers "
|
1954 |
+
"to gain administrative privileges."
|
1955 |
+
msgstr ""
|
1956 |
+
"Cette politique bloquera les vulnérabilités qui pourraient être exploitées "
|
1957 |
+
"pour obtenir des privilèges administratifs."
|
1958 |
+
|
1959 |
+
#: lib/help.php:186
|
1960 |
#, php-format
|
1961 |
msgid ""
|
1962 |
+
"Many vulnerabilities in plugins are exploited via the admin-ajax.php script. "
|
1963 |
"This policy will try to detect and immediately block bots and malicious "
|
1964 |
"scanners trying to access it. The server IP address (%s) and private IP "
|
1965 |
"addresses will not be blocked."
|
1966 |
msgstr ""
|
1967 |
+
"De nombreuses vulnérabilités dans les extensions WordPress sont exploitées "
|
1968 |
"via le script admin-ajax.php. Cette politique essaiera de détecter et de "
|
1969 |
"bloquer immédiatement les robots et les scanners malveillants qui tentent "
|
1970 |
"d’y accéder. L'adresse IP du serveur (%s) et les adresses IP privées ne "
|
1971 |
"seront pas bloquées."
|
1972 |
|
1973 |
+
#: lib/help.php:188
|
|
|
|
|
|
|
|
|
1974 |
msgid ""
|
1975 |
+
"It is possible to enumerate usernames either through the WordPress author "
|
1976 |
"archives, the REST API or the login page. Although this is not a "
|
1977 |
"vulnerability but a WordPress feature, some hackers use it to retrieve "
|
1978 |
"usernames in order to launch more accurate brute-force attacks. If it is a "
|
1981 |
"redirect the user to the blog index page. Regarding the WP REST API, it will "
|
1982 |
"block the request immediately."
|
1983 |
msgstr ""
|
1984 |
+
"Il est possible d'énumérer les noms des utilisateurs de votre blog via l'API "
|
1985 |
"REST, la page d'archive d'un auteur ou la page de connexion au Tableau de "
|
1986 |
"bord. Bien que ce ne soit pas une vulnérabilité, mais une caractéristique de "
|
1987 |
"WordPress, certains hackers utilisent ces astuces pour récupérer les noms "
|
1988 |
"d'utilisateur afin de lancer des attaques par force brute plus précises."
|
1989 |
|
1990 |
+
#: lib/help.php:190
|
|
|
|
|
|
|
|
|
1991 |
msgid ""
|
1992 |
+
"It allows you to access your WordPress site's data through an easy-to-use "
|
1993 |
"HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
|
1994 |
"allows you to block any access to that API if you do not intend to use it."
|
1995 |
msgstr ""
|
1996 |
+
"Elle vous permet d'accéder aux données de votre blog via l'API HTTP REST. "
|
1997 |
"Depuis WordPress 4.7, cette elle est activée par défaut. NinjaFirewall vous "
|
1998 |
"permet de bloquer tout accès a cette API si vous ne l'utilisez pas."
|
1999 |
|
2000 |
+
#: lib/help.php:192
|
|
|
|
|
|
|
|
|
2001 |
msgid ""
|
2002 |
"XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
|
2003 |
"its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
|
2017 |
"requêtes qui utilisent la méthode <code>system.multicall</code> ou les "
|
2018 |
"Pingbacks."
|
2019 |
|
2020 |
+
#: lib/help.php:194
|
2021 |
msgid ""
|
2022 |
"Block <code>POST</code> requests in the themes folder <code>/wp-content/"
|
2023 |
+
"themes</code>"
|
2024 |
msgstr ""
|
2025 |
"Bloquer les requêtes <code>POST</code> dans le dossier des thèmes <code>/wp-"
|
2026 |
+
"content/themes</code>"
|
2027 |
|
2028 |
+
#: lib/help.php:194
|
2029 |
msgid ""
|
2030 |
+
"This option can be useful to block hackers from installing backdoor in the "
|
2031 |
"PHP theme files. However, because some custom themes may include an HTML "
|
2032 |
"form (contact, search form etc), this option is not enabled by default."
|
2033 |
msgstr ""
|
2034 |
+
"Cette option peut être utile afin de bloquer l'exploitation de "
|
2035 |
"vulnérabilités dans les fichiers PHP de vos thèmes. Toutefois, parce que "
|
2036 |
"certains thèmes personnalisés peuvent inclure un formulaire HTML (formulaire "
|
2037 |
"de recherche ou de contact etc) nécessitant des requêtes <code>POST</code> , "
|
2038 |
"cette option n'est pas activée par défaut."
|
2039 |
|
2040 |
+
#: lib/help.php:196
|
2041 |
+
msgid "Force HTTPS for admin and logins <code>FORCE_SSL_ADMIN</code>"
|
2042 |
msgstr ""
|
2043 |
+
"Forcer la connexion sécurisée au Tableau de bord <code>FORCE_SSL_ADMIN</code>"
|
|
|
2044 |
|
2045 |
+
#: lib/help.php:196
|
2046 |
msgid ""
|
2047 |
+
"Enable this option when you want to secure logins and the admin area so that "
|
2048 |
"both passwords and cookies are never sent in the clear. Ensure that you can "
|
2049 |
"access your admin console from HTTPS before enabling this option, otherwise "
|
2050 |
"you will lock yourself out of your site!"
|
2051 |
msgstr ""
|
2052 |
+
"Activez cette option lorsque vous souhaitez sécuriser les connexions à votre "
|
2053 |
"Tableau de bord. Assurez-vous que vous pouvez accéder à votre page de "
|
2054 |
"connexion via HTTPS avant d'activer cette option, sinon vous risquez de "
|
2055 |
+
"bloquer l’accès à votre site !"
|
2056 |
|
2057 |
+
#: lib/help.php:198
|
2058 |
+
msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>"
|
2059 |
msgstr ""
|
2060 |
+
"Désactiver l’éditeur de thème et d'extension <code>DISALLOW_FILE_EDIT</code>"
|
|
|
2061 |
|
2062 |
+
#: lib/help.php:198
|
2063 |
msgid ""
|
2064 |
+
"Disabling the plugin and theme editor provides an additional layer of "
|
2065 |
"security if a hacker gains access to a well-privileged user account."
|
2066 |
msgstr ""
|
2067 |
+
"Désactiver l’éditeur de thème et d'extension fournit une couche de sécurité "
|
2068 |
"supplémentaire. Si un pirate accédait a votre compte administrateur, il ne "
|
2069 |
"pourrait pas l'utiliser pour insérer une porte dérobée dans l'un de vos "
|
2070 |
"scripts PHP."
|
2071 |
|
2072 |
+
#: lib/help.php:200
|
2073 |
msgid ""
|
2074 |
+
"Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>"
|
2075 |
msgstr ""
|
2076 |
"Désactiver l'installation et mise à jour des thèmes et extensions "
|
2077 |
+
"<code>DISALLOW_FILE_MODS</code>"
|
2078 |
|
2079 |
+
#: lib/help.php:200
|
2080 |
msgid ""
|
2081 |
+
"This option will block users being able to use the plugin and theme "
|
2082 |
"installation/update functionality from the WordPress admin area. Setting "
|
2083 |
"this constant also disables the Plugin and Theme editor."
|
2084 |
msgstr ""
|
2085 |
+
"Cette option permet de bloquer les utilisateurs voulant lancer une "
|
2086 |
"installation ou mise à jour d'une extension ou d'un thème. Elle désactive "
|
2087 |
"aussi l’éditeur de thème et d'extension."
|
2088 |
|
2089 |
+
#: lib/help.php:202
|
2090 |
msgid ""
|
2091 |
+
"Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>"
|
2092 |
msgstr ""
|
2093 |
"Désactiver le gestionnaire d'erreurs fatales "
|
2094 |
+
"<code>WP_DISABLE_FATAL_ERROR_HANDLER</code>"
|
2095 |
+
|
2096 |
+
#: lib/help.php:202
|
2097 |
+
msgid ""
|
2098 |
+
"This option will disable the WSOD protection introduced in WordPress 5.1."
|
2099 |
+
msgstr ""
|
2100 |
+
"Cette option désactivera la protection WSOD introduite dans WordPress 5.1."
|
2101 |
|
2102 |
+
#: lib/help.php:206
|
2103 |
msgid ""
|
2104 |
+
"By default, any logged in WordPress administrator will not be blocked by "
|
2105 |
+
"NinjaFirewall. You can also add any logged in users to the whitelist (make "
|
2106 |
+
"sure you trust them all before doing so)."
|
2107 |
msgstr ""
|
2108 |
+
"Par défaut, tout administrateur connecté à WordPress ne sera pas bloqué par "
|
2109 |
+
"NinjaFirewall. Vous pouvez aussi ajouter à la liste blanche tous les autres "
|
2110 |
+
"utilisateurs connectés (avant de le faire, assurez-vous que ce sont tous des "
|
2111 |
+
"utilisateurs de confiance)."
|
2112 |
|
2113 |
+
#: lib/help.php:219
|
2114 |
msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
|
2115 |
msgstr "S'il faut filtrer / nettoyer la variable <code>GET</code>."
|
2116 |
|
2117 |
+
#: lib/help.php:222
|
2118 |
msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
|
2119 |
msgstr "S'il faut filtrer / nettoyer la variable <code>POST</code>."
|
2120 |
|
2121 |
+
#: lib/help.php:223
|
|
|
|
|
|
|
|
|
|
|
|
|
2122 |
msgid ""
|
2123 |
"NinjaFirewall will decode and scan base64 encoded values in order to detect "
|
2124 |
"obfuscated malicious code. This option is only available for the <code>POST</"
|
2127 |
"NinjaFirewall peut décoder et filtrer les chaînes de caractères encodées en "
|
2128 |
"Base64 afin d'y détecter du code malveillant caché."
|
2129 |
|
2130 |
+
#: lib/help.php:226
|
2131 |
msgid "Whether to sanitise the <code>REQUEST</code> variable."
|
2132 |
msgstr "S'il faut filtrer / nettoyer la variable <code>REQUEST</code>."
|
2133 |
|
2134 |
+
#: lib/help.php:229
|
2135 |
msgid "Whether to scan and/or sanitise cookies."
|
2136 |
msgstr "S'il faut filtrer / nettoyer les cookies."
|
2137 |
|
2138 |
+
#: lib/help.php:232
|
2139 |
msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
|
2140 |
msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_USER_AGENT</code>."
|
2141 |
|
2142 |
+
#: lib/help.php:233
|
|
|
|
|
|
|
|
|
2143 |
msgid ""
|
2144 |
+
"Rejects some known bots, scanners and various malicious scripts attempting "
|
2145 |
"to access your blog."
|
2146 |
msgstr ""
|
2147 |
+
"Cette option peut bloquer de nombreux crawlers, spambots et autres scrappers."
|
2148 |
|
2149 |
+
#: lib/help.php:236
|
2150 |
msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
|
2151 |
msgstr "S'il faut filtrer / nettoyer la variable <code>HTTP_REFERER</code>."
|
2152 |
|
2153 |
+
#: lib/help.php:237
|
2154 |
msgid ""
|
2155 |
+
"Block POST requests that do not have an <code>HTTP_REFERER</code> header"
|
2156 |
msgstr ""
|
2157 |
+
"Bloquer les requêtes POST qui n'ont pas d'en-tête <code>HTTP_REFERER</code>"
|
|
|
2158 |
|
2159 |
+
#: lib/help.php:237
|
2160 |
msgid ""
|
2161 |
+
"This option will block any <code>POST</code> request that does not have a "
|
2162 |
"Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
|
2163 |
"applications to post to your scripts (e.g. Paypal IPN, WordPress WP-"
|
2164 |
"Cron...), you are advised to keep this option disabled otherwise they will "
|
2166 |
"have a Referrer header and, for that reason, this option is disabled by "
|
2167 |
"default."
|
2168 |
msgstr ""
|
2169 |
+
"Cette option bloque toutes les requêtes POST qui n'incluent pas le Referrer "
|
2170 |
"<code>HTTP_REFERER</code> (adresse de la page -si elle existe- qui a conduit "
|
2171 |
"le client à la page courante). Puisque les requêtes POST ne sont pas "
|
2172 |
"obligées d'avoir un Referrer, cette option n'est pas activée par défaut. Si "
|
2173 |
"vous utilisez des scripts comme Paypal IPN, WordPress WP-Cron etc, "
|
2174 |
"désactivez cette fonction."
|
2175 |
|
2176 |
+
#: lib/help.php:241
|
2177 |
+
msgid "Block localhost IP in <code>GET/POST</code> requests"
|
2178 |
+
msgstr "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost"
|
|
|
2179 |
|
2180 |
+
#: lib/help.php:241
|
2181 |
msgid ""
|
2182 |
"this option will block any <code>GET</code> or <code>POST</code> request "
|
2183 |
"containing the localhost IP (127.0.0.1). It can be useful to block SQL "
|
2188 |
"les programmes malveillants. Attention toutefois à ne pas bloquer certains "
|
2189 |
"scripts d'installation ou de configuration si vous l'activez. "
|
2190 |
|
2191 |
+
#: lib/help.php:243
|
|
|
|
|
|
|
|
|
|
|
|
|
2192 |
#, php-format
|
2193 |
msgid ""
|
2194 |
+
"This option will reject any request using an IP instead of a domain name in "
|
2195 |
"the <code>Host</code> header of the HTTP request. Unless you need to connect "
|
2196 |
"to your site using its IP address, (e.g. %s), enabling this option will "
|
2197 |
"block a lot of hackers scanners because such applications scan IPs rather "
|
2198 |
"than domain names."
|
2199 |
msgstr ""
|
2200 |
+
"Cette option rejette toute requête HTTP contenant une adresse IP au lieu "
|
2201 |
"d'un nom de domaine dans son en-tête <code>Host</code>. Sauf si vous avez "
|
2202 |
"besoin de vous connecter à votre site en utilisant son adresse IP (ex: %s), "
|
2203 |
"activer cette option bloquera de nombreux scanners de vulnérabilité car ces "
|
2204 |
"application trouvent les sites en scannant les plages d'adresses IP plutôt "
|
2205 |
+
"que les noms de domaine."
|
|
|
|
|
|
|
|
|
|
|
2206 |
|
2207 |
+
#: lib/help.php:245
|
2208 |
msgid ""
|
2209 |
"this option will allow the firewall to scan traffic from all non-routable "
|
2210 |
"private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
|
2215 |
"Nous vous recommandons de le garder activé si vous avez 2 ou plusieurs "
|
2216 |
"serveurs reliés entre eux."
|
2217 |
|
2218 |
+
#: lib/help.php:258
|
2219 |
msgid ""
|
2220 |
"In addition to filtering incoming requests, NinjaFirewall can also hook the "
|
2221 |
"HTTP response in order to alter its headers. Those modifications can help to "
|
2226 |
"peuvent aider à atténuer les menaces telles que les attaques XSS, phishing "
|
2227 |
"et clickjacking."
|
2228 |
|
2229 |
+
#: lib/help.php:260
|
2230 |
msgid ""
|
2231 |
"Set <code>X-Content-Type-Options</code> to protect against MIME type "
|
2232 |
+
"confusion attacks"
|
2233 |
msgstr ""
|
2234 |
+
"Activer <code>X-Content-Type-Options</code> pour protéger contre les "
|
2235 |
+
"attaques basées sur la confusion du type MIME"
|
2236 |
|
2237 |
+
#: lib/help.php:260
|
2238 |
msgid ""
|
2239 |
+
"This header will send the nosniff value to instruct the browser to disable "
|
2240 |
"content or MIME sniffing and to use the content-type returned by the server. "
|
2241 |
"Some browsers try to guess (sniff) and override the content-type by looking "
|
2242 |
"at the content itself which, in some cases, could lead to security issues "
|
2243 |
"such as MIME Confusion Attacks."
|
2244 |
msgstr ""
|
2245 |
+
"Cet en-tête enverra la valeur \"nosniff\" pour indiquer au navigateur de "
|
2246 |
"désactiver le reniflage de contenu ou type MIME et d'utiliser le type "
|
2247 |
"retourné par le serveur. Certains navigateurs tentent de deviner (sniff) et "
|
2248 |
"de contourner le type de contenu en regardant le contenu lui-même ce qui, "
|
2249 |
"dans certains cas, peut entraîner des problèmes de sécurité tels que les "
|
2250 |
"attaques basées sur la confusion du type MIME."
|
2251 |
|
2252 |
+
#: lib/help.php:262
|
2253 |
msgid ""
|
2254 |
+
"Set <code>X-Frame-Options</code> to protect against clickjacking attempts"
|
2255 |
msgstr ""
|
2256 |
"Activer <code>X-Frame-Options</code> pour protéger contre les attaques de "
|
2257 |
+
"détournement de clic (clickjacking)"
|
2258 |
|
2259 |
+
#: lib/help.php:262
|
2260 |
msgid ""
|
2261 |
+
"This header indicates a policy whether a browser must not allow to render a "
|
2262 |
"page in a <frame> or <iframe>. Hosts can declare this policy in "
|
2263 |
"the header of their HTTP responses to prevent clickjacking attacks, by "
|
2264 |
"ensuring that their content is not embedded into other pages or frames. "
|
2265 |
"NinjaFirewall accepts two different values:"
|
2266 |
msgstr ""
|
2267 |
+
"Cet en-tête informe le navigateur s'il doit autoriser ou non l'affichage "
|
2268 |
"d'une page dans une <frame> ou <iframe>. Cela permet d'empêcher "
|
2269 |
"les attaques de clickjacking, en veillant à ce que le contenu d'une page ne "
|
2270 |
"sont pas intégré dans d'autres pages ou cadres, notamment d'un autre site. "
|
2271 |
+
"NinjaFirewall accepte deux valeurs différentes :"
|
2272 |
|
2273 |
+
#: lib/help.php:264
|
2274 |
msgid ""
|
2275 |
+
"A browser receiving content with this header must not display this content "
|
2276 |
"in any frame from a page of different origin than the content itself."
|
2277 |
msgstr ""
|
2278 |
+
"Un navigateur ne doit pas afficher le contenu dans une <frame> ou <"
|
2279 |
"iframe> d'une page d'origine différente que le contenu lui-même."
|
2280 |
|
2281 |
+
#: lib/help.php:265
|
2282 |
msgid ""
|
2283 |
+
"A browser receiving content with this header must not display this content "
|
2284 |
"in any frame."
|
2285 |
msgstr ""
|
2286 |
+
"Un navigateur ne doit jamais afficher le contenu dans une <frame> ou "
|
2287 |
"<iframe>"
|
2288 |
|
2289 |
+
#: lib/help.php:267
|
2290 |
msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
|
2291 |
msgstr ""
|
2292 |
"La valeur <code>ALLOW-FROM</code> n'est pas prise en charge par "
|
2293 |
"NinjaFirewall."
|
2294 |
|
2295 |
+
#: lib/help.php:268
|
2296 |
msgid ""
|
2297 |
"Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
|
2298 |
"administrator and the login page only."
|
2300 |
"Depuis la version 3.1.3, WordPress active <code>SAMEORIGIN</code> pour "
|
2301 |
"l'administrateur et la page de connexion uniquement."
|
2302 |
|
2303 |
+
#: lib/help.php:270
|
2304 |
msgid ""
|
2305 |
"Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
|
2306 |
+
"browsers)"
|
2307 |
msgstr ""
|
2308 |
"Activer <code>X-XSS-Protection</code> (IE/Edge, Opera, Chrome et Safari)"
|
2309 |
|
2310 |
+
#: lib/help.php:270
|
2311 |
msgid ""
|
2312 |
+
"This header allows browsers to identify and block XSS attacks by preventing "
|
2313 |
"malicious scripts from executing. It is enabled by default on all compatible "
|
2314 |
"browsers."
|
2315 |
msgstr ""
|
2316 |
+
"Cet en-tête permet aux navigateurs compatibles d'identifier et bloquer les "
|
2317 |
"attaques XSS en empêchant un script malveillant de s'exécuter. Notez que "
|
2318 |
"cette option est activée par défaut sur ces navigateurs."
|
2319 |
|
2320 |
+
#: lib/help.php:271
|
2321 |
msgid ""
|
2322 |
"If a visitor disabled their browser's XSS filter, you cannot re-enable it "
|
2323 |
"with that option."
|
2325 |
"Si un visiteur désactive le filtre XSS de son navigateur, vous ne pouvez pas "
|
2326 |
"le réactiver avec cette option."
|
2327 |
|
2328 |
+
#: lib/help.php:273
|
2329 |
msgid ""
|
2330 |
+
"Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks"
|
2331 |
msgstr ""
|
2332 |
"Activer la propriété <code>SameSite</code> pour tous les cookies afin "
|
2333 |
+
"d'atténuer les attaques CSRF"
|
2334 |
|
2335 |
+
#: lib/help.php:273
|
2336 |
msgid ""
|
2337 |
+
"Adding this flag to cookies helps to mitigate the risk of CSRF (cross-site "
|
2338 |
"request forgery) attacks because cookies can only be sent in requests "
|
2339 |
"originating from the same origin as the target domain."
|
2340 |
msgstr ""
|
2341 |
+
"Cette protection permet de diminuer les risques d'attaques CSRF (injection "
|
2342 |
"de requête illégitime par rebond), car les cookies ne peuvent être envoyés "
|
2343 |
"que dans des requêtes provenant de la même origine que le domaine cible."
|
2344 |
|
2345 |
+
#: lib/help.php:275
|
2346 |
+
msgid "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks"
|
|
|
2347 |
msgstr ""
|
2348 |
"Activer la propriété <code>HttpOnly</code> pour tous les cookies afin "
|
2349 |
+
"d'atténuer les menaces XSS qui génèrent des vols de cookies"
|
2350 |
|
2351 |
+
#: lib/help.php:275
|
2352 |
msgid ""
|
2353 |
+
"Adding this flag to cookies helps to mitigate the risk of cross-site "
|
2354 |
"scripting by preventing them from being accessed through client-side "
|
2355 |
"scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins "
|
2356 |
"or any other PHP script, add the <code>HttpOnly</code> flag if it is "
|
2358 |
"headers right before they are sent to your visitors. Note that WordPress "
|
2359 |
"sets that flag on the logged in user cookies only."
|
2360 |
msgstr ""
|
2361 |
+
"Cette protection permet de diminuer les risques d'attaques XSS en empêchant "
|
2362 |
"JavaScript d'accéder aux cookies de l'utilisateur. NinjaFirewall peut "
|
2363 |
"intercepter les cookies envoyés par vos scripts PHP, activer la propriété "
|
2364 |
"<code>HttpOnly</code> si elle est manquante, puis réinjecter les cookies "
|
2365 |
"dans la réponse HTTP juste avant que celle-ci ne soit envoyée à vos "
|
2366 |
"visiteurs."
|
2367 |
|
2368 |
+
#: lib/help.php:276
|
2369 |
msgid ""
|
2370 |
"If your PHP scripts send cookies that need to be accessed from JavaScript, "
|
2371 |
"you should keep that option disabled."
|
2373 |
"Si vos scripts PHP envoient des cookies qui doivent être accessibles à "
|
2374 |
"partir de JavaScript, vous devez garder cette option désactivée."
|
2375 |
|
2376 |
+
#: lib/help.php:278
|
2377 |
msgid ""
|
2378 |
"Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
|
2379 |
+
"connections to the server"
|
2380 |
msgstr ""
|
2381 |
"Activer <code>Strict-Transport-Security</code> (HSTS) pour forcer les "
|
2382 |
+
"connexions sécurisées vers le serveur"
|
2383 |
|
2384 |
+
#: lib/help.php:278
|
2385 |
msgid ""
|
2386 |
+
"This policy enforces secure HTTPS connections to the server. Web browsers "
|
2387 |
"will not allow the user to access the web application over insecure HTTP "
|
2388 |
"protocol. It helps to defend against cookie hijacking and Man-in-the-middle "
|
2389 |
"attacks. Most recent browsers support HSTS headers."
|
2390 |
msgstr ""
|
2391 |
+
"Cette politique force les connexions HTTPS sécurisées vers le serveur. Les "
|
2392 |
"navigateurs n'accepteront pas de se connecter au site si la connexion n'est "
|
2393 |
"pas sécurisée (HTTPS). Cela permet de se défendre contre les détournements "
|
2394 |
"de cookies ou les attaques du type \"Man-in-the-middle\". La plupart des "
|
2395 |
"navigateurs récents sont compatibles avec cette politique."
|
2396 |
|
2397 |
+
#: lib/help.php:280
|
2398 |
+
msgid "Set <code>Content-Security-Policy</code>"
|
2399 |
+
msgstr "Activer <code>Content-Security-Policy</code>"
|
2400 |
|
2401 |
+
#: lib/help.php:280
|
2402 |
msgid ""
|
2403 |
+
"This policy helps to mitigate threats such as XSS, phishing and clickjacking "
|
2404 |
"attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
|
2405 |
"objects (Java, ActiveX, audio and video files), and other HTML5 features."
|
2406 |
msgstr ""
|
2407 |
+
"Cette politique aide pour bloquer les attaques XSS notamment. Elle couvre le "
|
2408 |
"code JavaScript, les styles CSS, frames/iframes HTML, polices, images, "
|
2409 |
"objets (Java, ActiveX, fichiers audio et video), mais aussi les WebSocket."
|
2410 |
|
2411 |
+
#: lib/help.php:280
|
2412 |
msgid ""
|
2413 |
"NinjaFirewall lets you configure the CSP policy separately for the frontend "
|
2414 |
"(blog, website) and the backend (WordPress admin dashboard)."
|
2416 |
"NinjaFirewall vous permet de configurer CSP séparément pour le site et "
|
2417 |
"l'interface d'administration de WordPress."
|
2418 |
|
2419 |
+
#: lib/help.php:282
|
2420 |
+
msgid "Set <code>Referrer-Policy</code>"
|
2421 |
+
msgstr "Activer <code>Referrer-Policy</code>"
|
2422 |
|
2423 |
+
#: lib/help.php:282
|
2424 |
msgid ""
|
2425 |
+
"This HTTP header governs which referrer information, sent in the Referer "
|
2426 |
"header, should be included with requests made."
|
2427 |
msgstr ""
|
2428 |
+
"Cet en-tête HTTP détermine quelles informations de provenance doivent être "
|
2429 |
"incluses dans l'en-tête Referer."
|
2430 |
|
2431 |
+
#: lib/help.php:286
|
2432 |
+
msgid "Block PHP built-in wrappers"
|
2433 |
+
msgstr "Bloquer les gestionnaires (wrappers) PHP dangereux"
|
2434 |
|
2435 |
+
#: lib/help.php:286
|
2436 |
msgid ""
|
2437 |
"PHP has several wrappers for use with the filesystem functions. It is "
|
2438 |
"possible for an attacker to use them to bypass firewalls and various IDS to "
|
2452 |
"requête <code>GET</code> ou <code>POST</code>, des cookies, ou dans les "
|
2453 |
"variables <code>HTTP_REFERER</code> et <code>HTTP_USER_AGENT</code>."
|
2454 |
|
2455 |
+
#: lib/help.php:288
|
2456 |
+
msgid "Block serialized PHP objects"
|
2457 |
+
msgstr "Bloquer les objets PHP sérialisés"
|
2458 |
|
2459 |
+
#: lib/help.php:288
|
2460 |
#, php-format
|
2461 |
msgid ""
|
2462 |
"Object Serialization is a PHP feature used by many applications to generate "
|
2475 |
"<code>POST</code>, les cookies, ou dans les variables <code>HTTP_REFERER</"
|
2476 |
"code> et <code>HTTP_USER_AGENT</code>."
|
2477 |
|
2478 |
+
#: lib/help.php:290
|
|
|
|
|
|
|
|
|
2479 |
msgid ""
|
2480 |
+
"This option lets you hide errors returned by your scripts. Such errors can "
|
2481 |
"leak sensitive informations which can be exploited by hackers."
|
2482 |
msgstr ""
|
2483 |
+
"Vous permet de masquer les erreurs retournées par PHP. Ces erreurs peuvent "
|
2484 |
"afficher des informations sensibles qui peuvent être exploitées "
|
2485 |
"ultérieurement par des pirates."
|
2486 |
|
2487 |
+
#: lib/help.php:292
|
2488 |
msgid ""
|
2489 |
"Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
2490 |
+
"<code>PATH_INFO</code>"
|
2491 |
msgstr ""
|
2492 |
"Nettoyer <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
2493 |
+
"<code>PATH_INFO</code>"
|
2494 |
|
2495 |
+
#: lib/help.php:292
|
2496 |
msgid ""
|
2497 |
+
"This option can sanitise any dangerous characters found in those 3 server "
|
2498 |
"variables to prevent various XSS and database injection attempts."
|
2499 |
msgstr ""
|
2500 |
+
"Activez ces options si vous souhaitez que le pare-feu nettoie ces trois "
|
2501 |
"variables."
|
2502 |
|
2503 |
+
#: lib/help.php:295
|
2504 |
#, php-format
|
2505 |
msgid ""
|
2506 |
+
"Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests"
|
2507 |
msgstr ""
|
2508 |
"Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</code> "
|
2509 |
+
"(%s)"
|
2510 |
|
2511 |
+
#: lib/help.php:295
|
2512 |
msgid ""
|
2513 |
+
"This option will block scripts attempting to pass the <code>DOCUMENT_ROOT</"
|
2514 |
"code> server variable in a <code>GET</code> or <code>POST</code> request. "
|
2515 |
"Hackers use shell scripts that often need to pass this value, but most "
|
2516 |
"legitimate programs do not."
|
2517 |
msgstr ""
|
2518 |
+
"Cette option bloque toute tentative de passer la variable "
|
2519 |
"<code>DOCUMENT_ROOT</code> dans une requête <code>GET</code> ou <code>POST</"
|
2520 |
"code>. Les pirates utilisent souvent des scripts qui nécessitent d'utiliser "
|
2521 |
"cette variable, mais pas la plupart des applications légitimes (hormis "
|
2522 |
"certains scripts d'installation ou de configuration)."
|
2523 |
|
2524 |
+
#: lib/help.php:297
|
|
|
|
|
|
|
|
|
2525 |
msgid ""
|
2526 |
+
"This option will reject any <code>GET</code> or <code>POST</code> request, "
|
2527 |
"<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
|
2528 |
"code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> variables "
|
2529 |
"containing the ASCII character 0x00 (NULL byte). Such a character is "
|
2530 |
"dangerous and should always be rejected."
|
2531 |
msgstr ""
|
2532 |
+
"Toute requête <code>GET</code> ou <code>POST</code>, ainsi que toute "
|
2533 |
+
"variable <code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, "
|
2534 |
+
"<code>PHP_SELF</code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> "
|
2535 |
"contenant le caractère ASCI 0x00 (NULL byte) sera bloquée immédiatement. Ce "
|
2536 |
"caractère est dangereux et devrait toujours être rejeté."
|
2537 |
|
2538 |
+
#: lib/help.php:299
|
|
|
|
|
|
|
|
|
2539 |
msgid ""
|
2540 |
+
"This option will reject any <code>GET</code> or <code>POST</code> request, "
|
2541 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
|
2542 |
"ASCII characters from 1 to 8 and 14 to 31."
|
2543 |
msgstr ""
|
2544 |
+
"Toute requête <code>GET</code> ou <code>POST</code>, ainsi que toute "
|
2545 |
"variable <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> contenant "
|
2546 |
"des caractères ASCII 1 à 8 et 14 à 31 sera bloquée."
|
2547 |
|
2548 |
+
#: lib/help.php:312 lib/monitoring.php:46
|
2549 |
+
msgid "File Check"
|
2550 |
+
msgstr "File Check"
|
2551 |
+
|
2552 |
+
#: lib/help.php:313
|
2553 |
msgid ""
|
2554 |
+
"File Check lets you perform file integrity monitoring upon request or on a "
|
2555 |
+
"specific interval."
|
|
|
|
|
|
|
|
|
|
|
2556 |
msgstr ""
|
2557 |
+
"File Check vous permet d'effectuer une analyse de l'intégrité de vos "
|
2558 |
+
"fichiers sur demande ou à un intervalle spécifique défini."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2559 |
|
2560 |
+
#: lib/help.php:315
|
2561 |
msgid ""
|
2562 |
+
"You need to create a snapshot of all your files and then, at a later time, "
|
2563 |
+
"you can scan your system to compare it with the previous snapshot. Any "
|
2564 |
+
"modification will be immediately detected: file content, file permissions, "
|
2565 |
+
"file ownership, timestamp as well as file creation and deletion."
|
2566 |
msgstr ""
|
2567 |
+
"Vous devez créer un instantané de tous vos fichiers, puis, ultérieurement, "
|
2568 |
+
"vous pouvez scanner votre système pour le comparer avec l'instantané "
|
2569 |
+
"précédent. Toute modification sera immédiatement détectée : contenu, "
|
2570 |
+
"permissions et propriétés des fichiers, leur création et suppression ainsi "
|
2571 |
+
"que l'horodatage."
|
2572 |
|
2573 |
+
#: lib/help.php:317
|
2574 |
+
#, php-format
|
2575 |
msgid ""
|
2576 |
+
"Create a snapshot of all files stored in that directory: by default, the "
|
2577 |
+
"directory is set to WordPress <code>ABSPATH</code> (%s)"
|
|
|
|
|
|
|
|
|
|
|
2578 |
msgstr ""
|
2579 |
+
"Créer un instantané de tous les fichiers se trouvant dans ce "
|
2580 |
+
"répertoire : par défaut, le repertoire est l'<code>ABSPATH</code> de "
|
2581 |
+
"WordPress (%s)"
|
|
|
|
|
|
|
|
|
|
|
2582 |
|
2583 |
+
#: lib/help.php:318
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2584 |
msgid ""
|
2585 |
"Exclude the following files/folders: you can enter a directory or a file "
|
2586 |
"name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
|
2591 |
"partie de celui-ci (par ex. <code>foo</code>), ou même exclure une extension "
|
2592 |
"de fichier (par ex. <code>.css</code>)."
|
2593 |
|
2594 |
+
#: lib/help.php:320
|
2595 |
msgid ""
|
2596 |
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
|
2597 |
"code>)."
|
2599 |
"Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
|
2600 |
"bar/,.css,.png</code>)."
|
2601 |
|
2602 |
+
#: lib/help.php:321
|
2603 |
msgid ""
|
2604 |
"Do not follow symbolic links: by default, NinjaFirewall will not follow "
|
2605 |
"symbolic links."
|
2607 |
"Ne pas suivre les liens symboliques : par défaut, NinjaFirewall ignore "
|
2608 |
"les liens symboliques lors de son analyse des fichiers."
|
2609 |
|
2610 |
+
#: lib/help.php:324
|
2611 |
msgid "Scheduled scans"
|
2612 |
msgstr "Analyses planifiées"
|
2613 |
|
2614 |
+
#: lib/help.php:325
|
2615 |
msgid ""
|
2616 |
"NinjaFirewall can scan your system on a specific interval (hourly, "
|
2617 |
"twicedaily or daily)."
|
2619 |
"NinjaFirewall peut scanner votre système à intervalle régulier (une fois par "
|
2620 |
"heure, deux fois par jour ou tous les jours)."
|
2621 |
|
2622 |
+
#: lib/help.php:327
|
2623 |
msgid ""
|
2624 |
"It can either send you a scan report only if changes are detected, or always "
|
2625 |
"send you one after each scan."
|
2628 |
"été détectés, ou bien vous en envoyer un systématiquement après chaque "
|
2629 |
"analyse."
|
2630 |
|
2631 |
+
#: lib/help.php:329
|
2632 |
msgid ""
|
2633 |
"Reports will be sent to the contact email address defined in the \"Event "
|
2634 |
"Notifications\" menu."
|
2636 |
"Les rapports seront envoyés à l'adresse e-mail définie dans la page "
|
2637 |
"\"Notifications d'Événement\"."
|
2638 |
|
2639 |
+
#: lib/help.php:331
|
2640 |
#, php-format
|
2641 |
msgid ""
|
2642 |
"Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
|
2645 |
"Les analyses planifiées utilisent le <a href=\"%s\">pseudo cron de "
|
2646 |
"WordPress</a> qui ne fonctionne que si votre site reçoit un trafic suffisant."
|
2647 |
|
2648 |
+
#: lib/help.php:337 lib/monitoring.php:47
|
2649 |
+
msgid "File Guard"
|
2650 |
+
msgstr "File Guard"
|
2651 |
+
|
2652 |
+
#: lib/help.php:339
|
2653 |
+
msgid ""
|
2654 |
+
"File Guard can detect, in real-time, any access to a PHP file that was "
|
2655 |
+
"recently modified or created, and alert you about this."
|
2656 |
+
msgstr ""
|
2657 |
+
"File Guard peut détecter, en temps réel, tout accès à un fichier PHP qui a "
|
2658 |
+
"été récemment modifié ou créé, et vous alerter à ce sujet."
|
2659 |
+
|
2660 |
+
#: lib/help.php:341
|
2661 |
+
msgid ""
|
2662 |
+
"If a hacker uploaded a shell script to your site (or injected a backdoor "
|
2663 |
+
"into an already existing file) and tried to directly access that file using "
|
2664 |
+
"his browser or a script, NinjaFirewall would hook the HTTP request and "
|
2665 |
+
"immediately detect that the file was recently modified/created. It would "
|
2666 |
+
"send you a detailed alert (script name, IP, request, date and time). Alerts "
|
2667 |
+
"will be sent to the contact email address defined in the \"Event "
|
2668 |
+
"Notifications\" menu."
|
2669 |
+
msgstr ""
|
2670 |
+
"Si un pirate téléchargeait un script PHP sur votre site (ou injectait une "
|
2671 |
+
"porte dérobée dans un fichier existant) et essayait d'accéder directement à "
|
2672 |
+
"ce fichier en utilisant son navigateur ou un autre script, NinjaFirewall "
|
2673 |
+
"intercepterait la requête HTTP et détecterait immédiatement que le fichier a "
|
2674 |
+
"été récemment modifié ou créé. Il vous enverrait une alerte détaillée (nom "
|
2675 |
+
"du script, adresse IP, requête HTTP, la date et l'heure). Les alertes seront "
|
2676 |
+
"envoyées à l'adresse e-mail de contact définie dans le menu \"Notifications "
|
2677 |
+
"d’Événement\"."
|
2678 |
+
|
2679 |
+
#: lib/help.php:342
|
2680 |
+
msgid ""
|
2681 |
+
"If you do not want to monitor a folder, you can exclude its full path or a "
|
2682 |
+
"part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
|
2683 |
+
"code> etc). NinjaFirewall will compare this value to the <code>"
|
2684 |
+
"$_SERVER[\"SCRIPT_FILENAME\"]</code> server variable and, if it matches, "
|
2685 |
+
"will ignore it."
|
2686 |
+
msgstr ""
|
2687 |
+
"Pour exclure un répertoire, vous pouvez entrer son chemin complet ou une "
|
2688 |
+
"partie de celui-ci (par ex. <code>/var/www/public_html/cache/</code> ou "
|
2689 |
+
"simplement <code>/cache/</code>). NinjaFirewall comparera cette valeur à la "
|
2690 |
+
"variable <code>$_SERVER[\"SCRIPT_FILENAME\"]</code> et, si elle correspond, "
|
2691 |
+
"l'ignorera."
|
2692 |
+
|
2693 |
+
#: lib/help.php:343
|
2694 |
+
msgid ""
|
2695 |
+
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
|
2696 |
+
"code>)."
|
2697 |
+
msgstr ""
|
2698 |
+
"Plusieurs valeurs doivent être séparées par des virgules (par ex. <code>/foo/"
|
2699 |
+
"bar/,/cache/</code>)."
|
2700 |
+
|
2701 |
+
#: lib/help.php:344
|
2702 |
+
msgid ""
|
2703 |
+
"File Guard real-time detection is a totally unique feature, because "
|
2704 |
+
"NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
|
2705 |
+
"sent to any PHP script, even if that script is not part of the WordPress "
|
2706 |
+
"package (third-party software, shell script, backdoor etc)."
|
2707 |
+
msgstr ""
|
2708 |
+
"La détection en temps réel de File Guard est une caractéristique tout à fait "
|
2709 |
+
"unique, parce NinjaFirewall est la seule extension pour WordPress pouvant "
|
2710 |
+
"intercepter les requêtes HTTP envoyées à tout script PHP, même si ce dernier "
|
2711 |
+
"ne fait pas partie de WordPress (logiciel tiers, backdoor, etc)."
|
2712 |
+
|
2713 |
+
#: lib/help.php:353 lib/network.php:32 ninjafirewall.php:778
|
2714 |
msgid "Network"
|
2715 |
msgstr "Réseau"
|
2716 |
|
2717 |
+
#: lib/help.php:355
|
2718 |
msgid ""
|
2719 |
"Even if NinjaFirewall administration menu is only available to the Super "
|
2720 |
"Admin (from the main site), you can still display its status to all sites in "
|
2726 |
"du réseau en ajoutant une petite icône à leur barre d'administration. Elle "
|
2727 |
"ne sera visible que par les administrateurs de ces sites."
|
2728 |
|
2729 |
+
#: lib/help.php:357
|
2730 |
msgid ""
|
2731 |
"It is recommended to enable this feature as it is the only way to know "
|
2732 |
"whether the sites in your network are protected and if NinjaFirewall "
|
2736 |
"si les sites de votre réseau sont protégés et si l'installation de "
|
2737 |
"NinjaFirewall a réussi."
|
2738 |
|
2739 |
+
#: lib/help.php:359
|
2740 |
msgid ""
|
2741 |
"Note that when it is disabled, the icon still remains visible to you, the "
|
2742 |
"Super Admin."
|
2744 |
"Notez que même lorsqu'il est désactivé, l'icône reste visible pour vous, le "
|
2745 |
"Super Administrateur."
|
2746 |
|
2747 |
+
#: lib/help.php:371
|
2748 |
msgid ""
|
2749 |
"NinjaFirewall can alert you by email on specific events triggered within "
|
2750 |
"your blog. They include installations, updates, activations etc, as well as "
|
2763 |
"après avoir pénétré dans votre Tableau de bord de WordPress, d'y installer "
|
2764 |
"une porte dérobée (backdoor) afin de prendre le contrôle de votre blog."
|
2765 |
|
2766 |
+
#: lib/help.php:382 lib/login_protection.php:21 ninjafirewall.php:786
|
2767 |
msgid "Login Protection"
|
2768 |
msgstr "Page de Connexion"
|
2769 |
|
2770 |
+
#: lib/help.php:386
|
2771 |
msgid ""
|
2772 |
"By processing incoming HTTP requests before your blog and any of its "
|
2773 |
"plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
|
2780 |
"compris les attaques distribuées provenant de plusieurs milliers d'adresses "
|
2781 |
"IP différentes."
|
2782 |
|
2783 |
+
#: lib/help.php:388
|
2784 |
msgid ""
|
2785 |
"You can choose two different types of protection: a password or a captcha. "
|
2786 |
"You can enable the protection only if an attack is detected or to keep it "
|
2790 |
"captcha. Vous pouvez choisir d'activer la protection uniquement lorsqu'une "
|
2791 |
"attaque est détectée ou bien l'activer en permanence."
|
2792 |
|
2793 |
+
#: lib/help.php:390
|
2794 |
msgid "Yes, if under attack:"
|
2795 |
msgstr "Oui, si attaque en cours :"
|
2796 |
|
2797 |
+
#: lib/help.php:392
|
2798 |
msgid ""
|
2799 |
"The protection will be triggered when too many login attempts are detected, "
|
2800 |
"regardless of the offending IP. It blocks the attack instantly and prevents "
|
2809 |
"utilisant soit une combinaison nom d'utilisateur / mot de passe prédéfinie, "
|
2810 |
"soit un code captcha."
|
2811 |
|
2812 |
+
#: lib/help.php:394
|
2813 |
msgid "Always ON:"
|
2814 |
msgstr "Toujours activée :"
|
2815 |
|
2816 |
+
#: lib/help.php:396
|
2817 |
msgid ""
|
2818 |
"NinjaFirewall will always enforce the HTTP authentication or captcha "
|
2819 |
"implementation each time you access the login page."
|
2821 |
"Vous serez toujours invité à saisir votre nom d'utilisateur / mot de passe, "
|
2822 |
"ou le code du captcha, chaque fois que vous accéderez à la page de connexion."
|
2823 |
|
2824 |
+
#: lib/help.php:399
|
2825 |
msgid "Type of protection:"
|
2826 |
msgstr "Type de protection :"
|
2827 |
|
2828 |
+
#: lib/help.php:400
|
2829 |
msgid ""
|
2830 |
"<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
|
2831 |
"own very fast authentication scheme and it is compatible with any HTTP "
|
2835 |
"utilise son propre système d'authentification, rapide et compatible avec "
|
2836 |
"n'importe quel serveur HTTP (Apache, Nginx, Lighttpd etc)."
|
2837 |
|
2838 |
+
#: lib/help.php:401
|
2839 |
msgid "<b>Captcha:</b> It will display a 5-character captcha code."
|
2840 |
msgstr "<b>Captcha :</b> Affichera un code captcha à 5 caractères."
|
2841 |
|
2842 |
+
#: lib/help.php:402
|
2843 |
msgid "Bot protection:"
|
2844 |
msgstr "Protection contre les bots :"
|
2845 |
|
2846 |
+
#: lib/help.php:403
|
2847 |
msgid ""
|
2848 |
"NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
|
2849 |
"before they start a brute-force attack."
|
2851 |
"NinjaFirewall tentera de bloquer les bots et les scripts immédiatement, "
|
2852 |
"c'est-à-dire avant même qu'ils ne commencent une attaque par force brute."
|
2853 |
|
2854 |
+
#: lib/help.php:411
|
2855 |
msgid "AUTH log"
|
2856 |
msgstr "Journal d'authentification"
|
2857 |
|
2858 |
+
#: lib/help.php:414
|
2859 |
msgid ""
|
2860 |
"NinjaFirewall can write to the server Authentication log when the brute-"
|
2861 |
"force protection is triggered. This can be useful to the system "
|
2867 |
"surveillance ou pour bloquer l'IP incriminée au niveau du pare-feu du "
|
2868 |
"serveur."
|
2869 |
|
2870 |
+
#: lib/help.php:416
|
2871 |
msgid ""
|
2872 |
"If you have a shared hosting account, keep this option disabled as you do "
|
2873 |
"not have any access to the server's logs."
|
2875 |
"Si vous avez un hébergement mutualisé, laissez cette option désactivée car "
|
2876 |
"vous n'avez pas accès aux journaux du serveur."
|
2877 |
|
2878 |
+
#: lib/help.php:418
|
2879 |
msgid ""
|
2880 |
"On Debian-based systems, the log is located in <code>/var/log/auth.log</"
|
2881 |
"code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
|
2885 |
"sous Red Hat, dans <code>/var/log/secure</code>. Le format utilisé est le "
|
2886 |
"suivant :"
|
2887 |
|
2888 |
+
#: lib/help.php:421
|
2889 |
msgid "AA: the process ID (PID)."
|
2890 |
msgstr "AA : l'identifiant de processus (PID)."
|
2891 |
|
2892 |
+
#: lib/help.php:422
|
2893 |
msgid "BB: the user IPv4 or IPv6 address."
|
2894 |
msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
|
2895 |
|
2896 |
+
#: lib/help.php:423
|
2897 |
msgid "CC: the blog (sub-)domain name."
|
2898 |
msgstr "CC : le nom de (sous-)domaine du blog."
|
2899 |
|
2900 |
+
#: lib/help.php:424
|
2901 |
msgid ""
|
2902 |
"DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
|
2903 |
"API</code>."
|
2905 |
"DD : la cible; il peut s'agir soit de <code>wp-login.php</code>, soit de "
|
2906 |
"<code>XML-RPC API</code>."
|
2907 |
|
2908 |
+
#: lib/help.php:425
|
2909 |
msgid "EE: the time, in minutes, the protection will remain active."
|
2910 |
msgstr ""
|
2911 |
"EE : le temps, en minutes, pendant lequel la protection restera active."
|
2912 |
|
2913 |
+
#: lib/help.php:427
|
2914 |
msgid "Sample loglines:"
|
2915 |
msgstr "Exemple :"
|
2916 |
|
2917 |
+
#: lib/help.php:430
|
2918 |
#, php-format
|
2919 |
msgid ""
|
2920 |
"Be careful if you are behind a load balancer, reverse-proxy or CDN because "
|
2934 |
"Alternativement, vous pouvez utiliser le fichier <code><a href=\"%s\">."
|
2935 |
"htninja</a></code>."
|
2936 |
|
2937 |
+
#: lib/help.php:444 lib/logs.php:39 lib/wpplus.php:206
|
2938 |
msgid "Firewall Log"
|
2939 |
msgstr "Journal du Pare-feu"
|
2940 |
|
2941 |
+
#: lib/help.php:447
|
2942 |
msgid ""
|
2943 |
"The firewall log displays blocked and sanitised requests as well as some "
|
2944 |
"useful information. It has 6 columns:"
|
2946 |
"Le journal du pare-feu affiche les requêtes HTTP qui ont été bloquées ou "
|
2947 |
"nettoyées ainsi que d'autres informations utiles. Il a six colonnes :"
|
2948 |
|
2949 |
+
#: lib/help.php:448
|
2950 |
msgid "DATE : date and time of the incident."
|
2951 |
msgstr "DATE : date et heure de l'incident."
|
2952 |
|
2953 |
+
#: lib/help.php:449
|
2954 |
msgid ""
|
2955 |
"INCIDENT : unique incident number/ID as it was displayed to the blocked user."
|
2956 |
msgstr ""
|
2957 |
"INCIDENT : le numéro d'incident (ID) unique. Par défaut, il sera aussi "
|
2958 |
"affiché à l'utilisateur dont la requête aura été bloquée par le pare-feu."
|
2959 |
|
2960 |
+
#: lib/help.php:450
|
2961 |
msgid ""
|
2962 |
"LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
|
2963 |
"<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
|
2967 |
"<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
|
2968 |
"et mode débogage (<code>DEBUG_ON</code>)."
|
2969 |
|
2970 |
+
#: lib/help.php:451
|
2971 |
msgid ""
|
2972 |
"RULE : reference of the NinjaFirewall built-in security rule that triggered "
|
2973 |
"the action. A hyphen (<code>-</code>) instead of a number means it was a "
|
2978 |
"d'un numéro signifie que la règle provient de votre configuration "
|
2979 |
"personnelle de la page \"Politiques du Pare-feu\"."
|
2980 |
|
2981 |
+
#: lib/help.php:452
|
2982 |
msgid "IP : the user IPv4 or IPv6 address."
|
2983 |
msgstr "BB : L'adresse IPv4 ou IPv6 de l'utilisateur."
|
2984 |
|
2985 |
+
#: lib/help.php:453
|
2986 |
msgid ""
|
2987 |
"REQUEST : the HTTP request including offending variables and values as well "
|
2988 |
"as the reason the action was logged."
|
2990 |
"REQUEST : la requête HTTP avec ses variables et valeurs, ainsi que la raison "
|
2991 |
"qui a déclenché l'incident."
|
2992 |
|
2993 |
+
#: lib/help.php:456 lib/logs_firewall_log.php:165
|
2994 |
msgid "Auto-delete log"
|
2995 |
msgstr "Suppression automatique des journaux"
|
2996 |
|
2997 |
+
#: lib/help.php:457
|
2998 |
msgid ""
|
2999 |
"This options lets you configure NinjaFirewall to delete its old logs "
|
3000 |
"automatically. By default, logs are never deleted, <b>even when uninstall "
|
3007 |
"cette valeur à <code>0</code> si vous ne voulez pas supprimer les anciens "
|
3008 |
"journaux."
|
3009 |
|
3010 |
+
#: lib/help.php:461
|
3011 |
msgid ""
|
3012 |
"Centralized Logging lets you remotely access the firewall log of all your "
|
3013 |
"NinjaFirewall protected websites from one single installation. You do not "
|
3018 |
"NinjaFirewall. Vous n'avez plus besoin de vous connecter à chaque site pour "
|
3019 |
"analyser vos journaux."
|
3020 |
|
3021 |
+
#: lib/help.php:461
|
3022 |
#, php-format
|
3023 |
msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
|
3024 |
msgstr ""
|
3025 |
"<a href=\"%s\">Consultez notre blog pour plus d'informations à ce sujet</a>."
|
3026 |
|
3027 |
+
#: lib/help.php:462
|
3028 |
msgid ""
|
3029 |
"Enter your public key (optional): This is the public key that was created "
|
3030 |
"from your main server."
|
3032 |
"Entrez votre clé publique (optionnel) : Il s'agit de la clé qui a été créée "
|
3033 |
"depuis le serveur principal."
|
3034 |
|
3035 |
+
#: lib/help.php:466
|
3036 |
msgid ""
|
3037 |
"Centralized Logging will keep working even if NinjaFirewall is disabled. "
|
3038 |
"Delete your public key below if you want to disable it."
|
3041 |
"NinjaFirewall. Si vous souhaitez complètement désactiver cette option, "
|
3042 |
"supprimez votre clé publique ci-dessous. "
|
3043 |
|
3044 |
+
#: lib/help.php:473 lib/logs.php:40 lib/logs_live_log.php:37
|
3045 |
msgid "Live Log"
|
3046 |
msgstr "Live Log"
|
3047 |
|
3048 |
+
#: lib/help.php:476
|
3049 |
msgid ""
|
3050 |
"Live Log lets you watch your blog traffic in real time, just like the Unix "
|
3051 |
"<code>tail -f</code> command. Note that requests sent to static elements "
|
3057 |
"statiques comme les fichiers JS/CSS ou les images ne sont pas traitées par "
|
3058 |
"NinjaFirewall."
|
3059 |
|
3060 |
+
#: lib/help.php:478
|
3061 |
msgid ""
|
3062 |
"You can enable/disable the monitoring process, change the refresh rate, "
|
3063 |
"clear the screen, enable automatic vertical scrolling, change the log "
|
3068 |
"effacer l'écran, changer le format d'affichage, le fuseau horaire et choisir "
|
3069 |
"le type de trafic à visualiser (HTTP/HTTPS)."
|
3070 |
|
3071 |
+
#: lib/help.php:478
|
3072 |
msgid ""
|
3073 |
"You can also apply filters to include or exclude files and folders "
|
3074 |
"(REQUEST_URI)."
|
3076 |
"Vous pouvez également appliquer des filtres pour inclure ou exclure des "
|
3077 |
"fichiers et des dossiers (REQUEST_URI)."
|
3078 |
|
3079 |
+
#: lib/help.php:481
|
3080 |
msgid ""
|
3081 |
"Live Log does not make use of any WordPress core file (e.g., <code>admin-"
|
3082 |
"ajax.php</code>). It communicates directly with the firewall without loading "
|
3090 |
"serveur, même si vous ajustez son intervalle de rafraîchissement de la page "
|
3091 |
"sur la fréquence la plus rapide (5 secondes)."
|
3092 |
|
3093 |
+
#: lib/help.php:483
|
3094 |
msgid ""
|
3095 |
"If you are using the optional <code>.htninja</code> configuration file to "
|
3096 |
"whitelist your IP, the Live Log feature will not work."
|
3099 |
"pour toujours accepter les requêtes provenant de votre adresse IP, Live Log "
|
3100 |
"ne fonctionnera pas."
|
3101 |
|
3102 |
+
#: lib/help.php:487
|
3103 |
msgid "Log Format"
|
3104 |
msgstr "Format d'affichage"
|
3105 |
|
3106 |
+
#: lib/help.php:488
|
3107 |
msgid "You can easily customize the log format. Possible values are:"
|
3108 |
msgstr ""
|
3109 |
"Vous pouvez facilement changer le format d'affichage en combinant une ou "
|
3110 |
"plusieurs des valeurs suivantes :"
|
3111 |
|
3112 |
+
#: lib/help.php:489
|
3113 |
msgid "<code>%time</code>: the server date, time and timezone."
|
3114 |
msgstr "<code>%time</code> : la date, heure et fuseau horaire du serveur."
|
3115 |
|
3116 |
+
#: lib/help.php:490
|
3117 |
msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
|
3118 |
msgstr ""
|
3119 |
"<code>%name</code> : le nom de l'utilisateur (Authentification HTTP), s'il "
|
3120 |
"existe."
|
3121 |
|
3122 |
+
#: lib/help.php:491
|
3123 |
#, php-format
|
3124 |
msgid ""
|
3125 |
"<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
|
3129 |
"serveur est derrière un CDN ou un proxy, cette variable retournera l'adresse "
|
3130 |
"IP de celui-ci."
|
3131 |
|
3132 |
+
#: lib/help.php:492
|
3133 |
msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
|
3134 |
msgstr "<code>%method</code> : la méthode HTTP (ex. GET, POST)."
|
3135 |
|
3136 |
+
#: lib/help.php:493
|
3137 |
#, php-format
|
3138 |
msgid ""
|
3139 |
"<code>%uri</code>: the URI which was given in order to access the page "
|
3140 |
"(REQUEST_URI)."
|
3141 |
msgstr "<code>%uri</code> : l'URI donnée pour accéder à la page (REQUEST_URI)."
|
3142 |
|
3143 |
+
#: lib/help.php:494
|
3144 |
msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
|
3145 |
msgstr "<code>%referrer</code> : le referrer (HTTP_REFERER), s'il existe."
|
3146 |
|
3147 |
+
#: lib/help.php:495
|
3148 |
#, php-format
|
3149 |
msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
|
3150 |
msgstr ""
|
3151 |
"<code>%ua</code> : l'en-tête User-Agent (HTTP_USER_AGENT), s'il existe."
|
3152 |
|
3153 |
+
#: lib/help.php:496
|
3154 |
#, php-format
|
3155 |
msgid ""
|
3156 |
"<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
|
3160 |
"votre serveur est derrière un CDN ou un proxy, cette variable retournera "
|
3161 |
"l'adresse réelle du client."
|
3162 |
|
3163 |
+
#: lib/help.php:497
|
3164 |
msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
|
3165 |
msgstr ""
|
3166 |
"<code>%host</code> : l'en-tête Host de la requête courante (HTTP_HOST), si "
|
3167 |
"elle existe."
|
3168 |
|
3169 |
+
#: lib/help.php:499
|
3170 |
msgid ""
|
3171 |
"Additionally, you can include any of the following characters: <code>\"</"
|
3172 |
"code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
|
3176 |
"%</code>, <code>[</code>, <code>]</code>, <code>espace</code> et toute "
|
3177 |
"lettre minuscule <code>a-z</code>."
|
3178 |
|
3179 |
+
#: lib/help.php:510
|
3180 |
msgid ""
|
3181 |
"Your website can run NinjaFirewall and be compliant with the General Data "
|
3182 |
"Protection Regulation (GDPR). For more info, please visit our blog:"
|
3184 |
"NinjaFirewall est conforme à la réglementation générale sur la protection "
|
3185 |
"des données (RGPD). Pour plus d'informations, veuillez visiter notre blog :"
|
3186 |
|
3187 |
+
#: lib/help.php:524 lib/security_rules.php:47
|
3188 |
msgid "Rules Updates"
|
3189 |
msgstr "Mise à Jour des Règles"
|
3190 |
|
3191 |
+
#: lib/help.php:526
|
3192 |
msgid ""
|
3193 |
"To get the most efficient protection, you can ask NinjaFirewall to "
|
3194 |
"automatically update its security rules."
|
3196 |
"Pour bénéficier de la protection la plus efficace, vous pouvez demander à "
|
3197 |
"NinjaFirewall de mettre à jour ses règles de sécurité automatiquement."
|
3198 |
|
3199 |
+
#: lib/help.php:528
|
3200 |
msgid ""
|
3201 |
"Each time a new vulnerability is found in WordPress or one of its plugins/"
|
3202 |
"themes, a new set of security rules will be made available to protect "
|
3206 |
"extensions ou ses thèmes, un nouvel ensemble de règles de sécurité est "
|
3207 |
"disponible pour protéger contre cette vulnérabilité si nécessaire."
|
3208 |
|
3209 |
+
#: lib/help.php:530
|
3210 |
msgid ""
|
3211 |
"Only security rules will be downloaded. If a new version of NinjaFirewall "
|
3212 |
"(including new files, options and features) was available, it would have to "
|
3217 |
"jour depuis la page des \"Extensions\" de votre tableau de bord, comme "
|
3218 |
"d'habitude."
|
3219 |
|
3220 |
+
#: lib/help.php:532
|
3221 |
msgid ""
|
3222 |
"We recommend to enable this feature, as it is the <strong>best way to keep "
|
3223 |
"your WordPress secure</strong> against new vulnerabilities."
|
3226 |
"<strong>meilleure façon de garder votre WordPress protégé</strong> contre "
|
3227 |
"les dernières vulnérabilités."
|
3228 |
|
3229 |
+
#: lib/help.php:537 lib/security_rules.php:48
|
3230 |
msgid "Rules Editor"
|
3231 |
msgstr "Éditeur de Règles"
|
3232 |
|
3233 |
+
#: lib/help.php:539
|
3234 |
msgid ""
|
3235 |
"Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
|
3236 |
"of built-in rules used to protect your blog against the most common "
|
3247 |
"règles, vous pouvez utiliser l’Éditeur de règles ci-dessous pour les "
|
3248 |
"désactiver individuellement :"
|
3249 |
|
3250 |
+
#: lib/help.php:541
|
3251 |
msgid ""
|
3252 |
"Check your firewall log and find the rule ID you want to disable (it is "
|
3253 |
"displayed in the <code>RULE</code> column)."
|
3255 |
"Consultez le journal du pare-feu afin d'y trouver l'ID de la règle que vous "
|
3256 |
"souhaitez désactiver (il est affiché dans la colonne <code>RULE</code>)."
|
3257 |
|
3258 |
+
#: lib/help.php:542
|
3259 |
msgid ""
|
3260 |
"Select its ID from the enabled rules list below and click the \"Disable it\" "
|
3261 |
"button."
|
3263 |
"Sélectionnez son ID dans la liste des règles ci-dessous et cliquez sur le "
|
3264 |
"bouton \"Désactiver\"."
|
3265 |
|
3266 |
+
#: lib/help.php:544
|
3267 |
msgid ""
|
3268 |
"Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
|
3269 |
"code> instead of a number, that means that the rule can be changed in the "
|
3273 |
"d'union <code>-</code> à la place d'un nombre, cela signifie que la règle ne "
|
3274 |
"peut être modifiée quand dans la page \"Politiques du Pare-feu\"."
|
3275 |
|
3276 |
+
#: lib/install.php:70
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3277 |
#, php-format
|
3278 |
msgid ""
|
3279 |
"Error: Your .htaccess file is not writable, please change its permissions: %s"
|
3281 |
"Erreur : Votre fichier .htaccess n'est pas accessible en écriture. Veuillez "
|
3282 |
"modifier ses autorisations : %s"
|
3283 |
|
3284 |
+
#: lib/install.php:95 ninjafirewall.php:594 ninjafirewall.php:598
|
3285 |
#, php-format
|
3286 |
msgid "Error: wrong parameter value (%s)."
|
3287 |
msgstr "Erreur : Mauvais paramètre (%s)."
|
3288 |
|
3289 |
+
#: lib/install.php:102 lib/install.php:183 lib/install.php:204
|
3290 |
#, php-format
|
3291 |
msgid ""
|
3292 |
"Error: The following file is not writable, please change its permissions: %s"
|
3294 |
"Erreur : Le fichier suivant n'est pas accessible en écriture. Veuillez "
|
3295 |
"modifier ses autorisations : %s"
|
3296 |
|
3297 |
+
#: lib/install.php:125
|
3298 |
#, php-format
|
3299 |
msgid ""
|
3300 |
"NinjaFirewall detected that the requested changes seemed to crash your blog. "
|
3303 |
"NinjaFirewall a détecté que les modifications demandées semblaient planter "
|
3304 |
"votre blog. %s"
|
3305 |
|
3306 |
+
#: lib/install.php:126
|
3307 |
msgid ""
|
3308 |
"Changes have been undone. You may need to modify your selection and try "
|
3309 |
"again."
|
3311 |
"Les modifications ont été annulées. Vous devriez peut-être modifier votre "
|
3312 |
"sélection et réessayer."
|
3313 |
|
3314 |
+
#: lib/install.php:136
|
3315 |
#, php-format
|
3316 |
msgid "The website front-end returned: HTTP %s %s."
|
3317 |
msgstr "La page d'accueil du site a retourné : HTTP %s %s."
|
3318 |
|
3319 |
+
#: lib/install.php:148
|
3320 |
#, php-format
|
3321 |
msgid "The website front-end returned a fatal error: %s."
|
3322 |
msgstr "La page d'accueil du site a retourné une erreur fatale : %s."
|
3323 |
|
3324 |
+
#: lib/install.php:238 lib/install.php:263 lib/install.php:288
|
3325 |
+
#: lib/install.php:309
|
3326 |
msgid "File is not writable"
|
3327 |
msgstr "Le fichier n'est pas accessible en écriture"
|
3328 |
|
3329 |
+
#: lib/install_default.php:167
|
3330 |
msgid ""
|
3331 |
"Error: The installer cannot download the security rules from wordpress.org "
|
3332 |
"website."
|
3334 |
"Erreur : Impossible de télécharger les règles de sécurité depuis le site de "
|
3335 |
"wordpress.org."
|
3336 |
|
3337 |
+
#: lib/install_default.php:168
|
3338 |
msgid ""
|
3339 |
"The server may be temporarily down or you may have network connectivity "
|
3340 |
"problems? Please try again in a few minutes."
|
3343 |
"problèmes de connectivité réseau ? Veuillez ré-essayer d'ici quelques "
|
3344 |
"minutes."
|
3345 |
|
3346 |
+
#: lib/install_default.php:169
|
3347 |
msgid ""
|
3348 |
"NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
|
3349 |
"your server does not support SSL? You can force NinjaFirewall to use a non-"
|
3356 |
"connexion non-sécurisée (HTTP) en ajoutant la ligne suivante dans votre "
|
3357 |
"fichier <strong>wp-config.php</strong> :"
|
3358 |
|
3359 |
+
#: lib/install_default.php:232
|
3360 |
#, php-format
|
3361 |
msgid ""
|
3362 |
"NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
|
3555 |
msgid "Error: unable to write to the %s configuration file"
|
3556 |
msgstr "Erreur : impossible d’écrire dans le fichier de configuration %s"
|
3557 |
|
3558 |
+
#: lib/logs.php:36 ninjafirewall.php:790
|
3559 |
msgid "Logs"
|
3560 |
msgstr "Journaux"
|
3561 |
|
3679 |
"et assurez vous que l'option \"Ajouter l'Administrateur à la liste blanche\" "
|
3680 |
"est activée."
|
3681 |
|
3682 |
+
#: lib/logs_live_log.php:98 ninjafirewall.php:329
|
3683 |
+
msgid ""
|
3684 |
+
"Live Log lets you watch your blog traffic in real time. To enable it, click "
|
3685 |
+
"on the button below."
|
3686 |
+
msgstr ""
|
3687 |
+
"Live Log vous permet de surveiller le trafic de votre blog en temps réel. "
|
3688 |
+
"Pour l'activer, cliquez sur le bouton ci-dessous."
|
3689 |
+
|
3690 |
#: lib/logs_live_log.php:104
|
3691 |
msgid "Refresh rate:"
|
3692 |
msgstr "Intervalle :"
|
3729 |
msgid "Inclusion and exclusion filters (REQUEST_URI)"
|
3730 |
msgstr "Filtres d'inclusion et d'exclusion (REQUEST_URI)"
|
3731 |
|
3732 |
+
#: lib/logs_live_log.php:160 lib/monitoring_file_check.php:395
|
3733 |
msgid "None"
|
3734 |
msgstr "Aucune"
|
3735 |
|
3741 |
msgid "Must not include"
|
3742 |
msgstr "Ne doit pas inclure"
|
3743 |
|
3744 |
+
#: lib/logs_live_log.php:164 lib/monitoring_file_check.php:153
|
3745 |
#: lib/monitoring_file_guard.php:89
|
3746 |
msgid "e.g.,"
|
3747 |
msgstr "par ex."
|
3788 |
msgid "Error: please enter the custom log format."
|
3789 |
msgstr "Erreur : veuillez entrer le format d'affichage."
|
3790 |
|
3791 |
+
#: lib/monitoring.php:43 ninjafirewall.php:764
|
3792 |
msgid "Monitoring"
|
3793 |
msgstr "Monitoring"
|
3794 |
|
3804 |
msgid "You must create a snapshot first."
|
3805 |
msgstr "Vous devez d'abord créer un instantané."
|
3806 |
|
3807 |
+
#: lib/monitoring_file_check.php:96 lib/monitoring_file_check.php:763
|
3808 |
msgid "NinjaFirewall detected that changes were made to your files."
|
3809 |
msgstr "NinjaFirewall a détecté des changements dans vos fichiers."
|
3810 |
|
3812 |
msgid "No changes detected."
|
3813 |
msgstr "Aucun changement n'a été détecté."
|
3814 |
|
3815 |
+
#: lib/monitoring_file_check.php:132
|
3816 |
+
msgid ""
|
3817 |
+
"File Check lets you perform file integrity monitoring upon request or on a "
|
3818 |
+
"specific interval. To start, create a snapshot of your files by clicking the "
|
3819 |
+
"button below."
|
3820 |
+
msgstr ""
|
3821 |
+
"File Check vous permet d'effectuer une analyse de l'intégrité de vos "
|
3822 |
+
"fichiers sur demande ou à un intervalle spécifique défini."
|
3823 |
+
|
3824 |
+
#: lib/monitoring_file_check.php:139
|
3825 |
msgid "Create a snapshot of all files stored in that directory"
|
3826 |
msgstr ""
|
3827 |
"Créer un instantané de tous les fichiers se trouvant dans ce répertoire"
|
3828 |
|
3829 |
+
#: lib/monitoring_file_check.php:147
|
3830 |
#, php-format
|
3831 |
msgid "Default: %s"
|
3832 |
msgstr "Défaut : %s"
|
3833 |
|
3834 |
+
#: lib/monitoring_file_check.php:152 lib/monitoring_file_guard.php:88
|
3835 |
msgid "Exclude the following files/folders (optional)"
|
3836 |
msgstr "Exclure les fichiers / dossiers suivants (optionnel)"
|
3837 |
|
3838 |
+
#: lib/monitoring_file_check.php:153
|
3839 |
msgid ""
|
3840 |
"Full or partial case-sensitive string(s). Multiple values must be comma-"
|
3841 |
"separated"
|
3843 |
"Chaîne de caractères complète ou partielle, sensible à la casse. Plusieurs "
|
3844 |
"valeurs doivent être séparées par des virgules"
|
3845 |
|
3846 |
+
#: lib/monitoring_file_check.php:159
|
3847 |
msgid "Do not follow symbolic links (default)"
|
3848 |
msgstr "Ne pas suivre les liens symboliques (défaut)"
|
3849 |
|
3850 |
+
#: lib/monitoring_file_check.php:165
|
3851 |
msgid "Create Snapshot"
|
3852 |
msgstr "Créer un Instantané"
|
3853 |
|
3854 |
+
#: lib/monitoring_file_check.php:231
|
3855 |
msgid "Last snapshot"
|
3856 |
msgstr "Dernier instantané"
|
3857 |
|
3858 |
+
#: lib/monitoring_file_check.php:233
|
3859 |
#, php-format
|
3860 |
msgid "Created on: %s"
|
3861 |
msgstr "Créé le : %s"
|
3862 |
|
3863 |
+
#: lib/monitoring_file_check.php:234
|
3864 |
#, php-format
|
3865 |
msgid "Total files: %s "
|
3866 |
msgstr "Nombre de fichiers : %s "
|
3867 |
|
3868 |
+
#: lib/monitoring_file_check.php:236
|
3869 |
msgid "Directory:"
|
3870 |
msgstr "Répertoire :"
|
3871 |
|
3872 |
+
#: lib/monitoring_file_check.php:240
|
3873 |
msgid "Exclusion:"
|
3874 |
msgstr "Exclusion :"
|
3875 |
|
3876 |
+
#: lib/monitoring_file_check.php:246
|
3877 |
msgid "Symlinks:"
|
3878 |
msgstr "Lien symboliques :"
|
3879 |
|
3880 |
+
#: lib/monitoring_file_check.php:248
|
3881 |
msgid "follow"
|
3882 |
msgstr "suivre"
|
3883 |
|
3884 |
+
#: lib/monitoring_file_check.php:250
|
3885 |
msgid "do not follow"
|
3886 |
msgstr "ne pas suivre"
|
3887 |
|
3888 |
+
#: lib/monitoring_file_check.php:254
|
3889 |
#, php-format
|
3890 |
msgid "Processing time: %s seconds"
|
3891 |
msgstr "Temps de traitement : %s secondes"
|
3892 |
|
3893 |
+
#: lib/monitoring_file_check.php:259
|
3894 |
msgid "Download Snapshot"
|
3895 |
msgstr "Télécharger l'instantané"
|
3896 |
|
3897 |
+
#: lib/monitoring_file_check.php:259
|
3898 |
msgid "Delete Snapshot"
|
3899 |
msgstr "Supprimer l'instantané"
|
3900 |
|
3901 |
+
#: lib/monitoring_file_check.php:265
|
3902 |
msgid "Last changes"
|
3903 |
msgstr "Dernières modifications"
|
3904 |
|
3905 |
+
#: lib/monitoring_file_check.php:272 lib/monitoring_file_check.php:771
|
3906 |
#, php-format
|
3907 |
msgid "New files: %s"
|
3908 |
msgstr "Nouveaux fichiers : %s"
|
3909 |
|
3910 |
+
#: lib/monitoring_file_check.php:273 lib/monitoring_file_check.php:773
|
3911 |
#, php-format
|
3912 |
msgid "Deleted files: %s"
|
3913 |
msgstr "Fichiers supprimés : %s"
|
3914 |
|
3915 |
+
#: lib/monitoring_file_check.php:274 lib/monitoring_file_check.php:772
|
3916 |
#, php-format
|
3917 |
msgid "Modified files: %s"
|
3918 |
msgstr "Fichiers modifiés : %s"
|
3919 |
|
3920 |
+
#: lib/monitoring_file_check.php:278
|
3921 |
msgid "View Changes"
|
3922 |
msgstr "Voir les Modifications"
|
3923 |
|
3924 |
+
#: lib/monitoring_file_check.php:282
|
3925 |
msgid "Download Changes"
|
3926 |
msgstr "Télécharger les Modifications"
|
3927 |
|
3928 |
+
#: lib/monitoring_file_check.php:294
|
3929 |
msgid "Click a file to get more info about it."
|
3930 |
msgstr "Cliquez sur un fichier pour obtenir plus d'informations à son sujet."
|
3931 |
|
3932 |
+
#: lib/monitoring_file_check.php:297
|
3933 |
msgid "New files:"
|
3934 |
msgstr "Nouveaux fichiers :"
|
3935 |
|
3936 |
+
#: lib/monitoring_file_check.php:306 lib/monitoring_file_check.php:359
|
3937 |
msgid "Size"
|
3938 |
msgstr "Taille"
|
3939 |
|
3940 |
+
#: lib/monitoring_file_check.php:310 lib/monitoring_file_check.php:364
|
3941 |
msgid "Access"
|
3942 |
msgstr "Accès"
|
3943 |
|
3944 |
+
#: lib/monitoring_file_check.php:314 lib/monitoring_file_check.php:369
|
3945 |
msgid "Uid / Gid"
|
3946 |
msgstr "Uid / Gid"
|
3947 |
|
3948 |
+
#: lib/monitoring_file_check.php:318 lib/monitoring_file_check.php:374
|
3949 |
msgid "Modify"
|
3950 |
msgstr "Modification"
|
3951 |
|
3952 |
+
#: lib/monitoring_file_check.php:322 lib/monitoring_file_check.php:379
|
3953 |
msgid "Change"
|
3954 |
msgstr "Changement"
|
3955 |
|
3956 |
+
#: lib/monitoring_file_check.php:332
|
3957 |
msgid "Deleted files:"
|
3958 |
msgstr "Fichiers supprimés :"
|
3959 |
|
3960 |
+
#: lib/monitoring_file_check.php:345
|
3961 |
msgid "Modified files:"
|
3962 |
msgstr "Fichiers modifiés :"
|
3963 |
|
3964 |
+
#: lib/monitoring_file_check.php:355
|
3965 |
msgid "Old"
|
3966 |
msgstr "Ancien"
|
3967 |
|
3968 |
+
#: lib/monitoring_file_check.php:356
|
3969 |
msgid "New"
|
3970 |
msgstr "Nouveau"
|
3971 |
|
3972 |
+
#: lib/monitoring_file_check.php:405
|
3973 |
msgid "Scan System For File Changes"
|
3974 |
msgstr "Lancer l'analyse des fichiers"
|
3975 |
|
3976 |
+
#: lib/monitoring_file_check.php:423
|
3977 |
msgid "Options"
|
3978 |
msgstr "Options"
|
3979 |
|
3980 |
+
#: lib/monitoring_file_check.php:430
|
3981 |
#, php-format
|
3982 |
msgid ""
|
3983 |
"It seems that %s is set. Ensure you have another way to run WP-Cron, "
|
3986 |
"Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
|
3987 |
"File Check ne pourra pas se lancer automatiquement."
|
3988 |
|
3989 |
+
#: lib/monitoring_file_check.php:436
|
3990 |
msgid "Enable scheduled scans"
|
3991 |
msgstr "Lancer File Check automatiquement"
|
3992 |
|
3993 |
+
#: lib/monitoring_file_check.php:438
|
3994 |
msgid "No (default)"
|
3995 |
msgstr "Non (défaut)"
|
3996 |
|
3997 |
+
#: lib/monitoring_file_check.php:439 lib/security_rules_update.php:153
|
3998 |
msgid "Hourly"
|
3999 |
msgstr "Une fois par heure"
|
4000 |
|
4001 |
+
#: lib/monitoring_file_check.php:440 lib/security_rules_update.php:154
|
4002 |
msgid "Twicedaily"
|
4003 |
msgstr "Deux fois par jour"
|
4004 |
|
4005 |
+
#: lib/monitoring_file_check.php:441 lib/security_rules_update.php:155
|
4006 |
msgid "Daily"
|
4007 |
msgstr "Tous les jours"
|
4008 |
|
4009 |
+
#: lib/monitoring_file_check.php:448
|
4010 |
#, php-format
|
4011 |
msgid ""
|
4012 |
"Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
|
4015 |
"La prochaine analyse commencera dans %s jour(s), %s heure(s), %s minute(s) "
|
4016 |
"et %s seconde(s)."
|
4017 |
|
4018 |
+
#: lib/monitoring_file_check.php:455
|
4019 |
msgid ""
|
4020 |
"The next scheduled scan date is in the past! WordPress wp-cron may not be "
|
4021 |
"working or may have been disabled."
|
4023 |
"La date de la prochaine analyse est dans le passé ! Essayez de "
|
4024 |
"recharger cette page, sinon vérifiez que WP-Cron n'a pas été désactivé."
|
4025 |
|
4026 |
+
#: lib/monitoring_file_check.php:463
|
4027 |
msgid "Scheduled scan report"
|
4028 |
msgstr "Rapport d'analyse"
|
4029 |
|
4030 |
+
#: lib/monitoring_file_check.php:465
|
4031 |
msgid "Send me a report by email only if changes are detected (default)"
|
4032 |
msgstr ""
|
4033 |
"Envoyez-moi un rapport uniquement si des changements ont été détectés "
|
4034 |
"(défaut)"
|
4035 |
|
4036 |
+
#: lib/monitoring_file_check.php:466
|
4037 |
msgid "Always send me a report by email after a scheduled scan"
|
4038 |
msgstr "Envoyez-moi toujours un rapport après une analyse automatique"
|
4039 |
|
4040 |
+
#: lib/monitoring_file_check.php:471
|
4041 |
msgid "Save Scan Options"
|
4042 |
msgstr "Sauvegarder les options"
|
4043 |
|
4044 |
+
#: lib/monitoring_file_check.php:483
|
4045 |
msgid "Enter the full path to the directory to be scanned."
|
4046 |
msgstr "Entrez le chemin complet vers le répertoire à scanner."
|
4047 |
|
4048 |
+
#: lib/monitoring_file_check.php:490
|
4049 |
#, php-format
|
4050 |
msgid "The directory %s does not exist."
|
4051 |
msgstr "Le répertoire %s n'existe pas."
|
4052 |
|
4053 |
+
#: lib/monitoring_file_check.php:493
|
4054 |
#, php-format
|
4055 |
msgid "The directory %s is not readable."
|
4056 |
msgstr "Le répertoire %s n'est pas lisible."
|
4057 |
|
4058 |
+
#: lib/monitoring_file_check.php:534
|
4059 |
#, php-format
|
4060 |
msgid "Cannot write to %s."
|
4061 |
msgstr "Impossible d'écrire dans %s."
|
4062 |
|
4063 |
+
#: lib/monitoring_file_check.php:564
|
4064 |
#, php-format
|
4065 |
msgid "Error : cannot open %s directory."
|
4066 |
msgstr "Erreur : impossible d'ouvrir le répertoire %s."
|
4067 |
|
4068 |
+
#: lib/monitoring_file_check.php:567
|
4069 |
#, php-format
|
4070 |
msgid "Error : %s directory is not readable."
|
4071 |
msgstr "Erreur : le répertoire %s n'est pas lisible."
|
4072 |
|
4073 |
+
#: lib/monitoring_file_check.php:582
|
4074 |
#, php-format
|
4075 |
msgid "Missing options line %s, please try again."
|
4076 |
msgstr "Option manquante (ligne %s). Veuillez essayer à nouveau."
|
4077 |
|
4078 |
+
#: lib/monitoring_file_check.php:592
|
4079 |
#, php-format
|
4080 |
msgid "Cannot create %s."
|
4081 |
msgstr "Impossible de créer %s."
|
4082 |
|
4083 |
+
#: lib/monitoring_file_check.php:609
|
4084 |
msgid "Error reading old snapshot file."
|
4085 |
msgstr "Erreur lors de la lecture du fichier de l'ancien instantané."
|
4086 |
|
4087 |
+
#: lib/monitoring_file_check.php:620
|
4088 |
msgid "Error reading new snapshot file."
|
4089 |
msgstr "Erreur lors de la lecture du fichier du nouvel instantané."
|
4090 |
|
4091 |
+
#: lib/monitoring_file_check.php:736 ninjafirewall.php:421
|
4092 |
msgid "New file"
|
4093 |
msgstr "Nouveau fichier"
|
4094 |
|
4095 |
+
#: lib/monitoring_file_check.php:737 ninjafirewall.php:422
|
4096 |
msgid "Modified file"
|
4097 |
msgstr "Fichier modifié"
|
4098 |
|
4099 |
+
#: lib/monitoring_file_check.php:738 ninjafirewall.php:423
|
4100 |
msgid "Deleted file"
|
4101 |
msgstr "Fichier supprimé"
|
4102 |
|
4103 |
+
#: lib/monitoring_file_check.php:762
|
4104 |
msgid "[NinjaFirewall] Alert: File Check detection"
|
4105 |
msgstr "[NinjaFirewall] Alerte: Détection File Check"
|
4106 |
|
4107 |
+
#: lib/monitoring_file_check.php:765 lib/monitoring_file_check.php:767
|
4108 |
+
#: lib/monitoring_file_check.php:792 lib/monitoring_file_check.php:794
|
4109 |
+
#: lib/security_rules_update.php:553 lib/security_rules_update.php:555
|
4110 |
+
#: lib/utils.php:214 lib/utils.php:776 lib/utils.php:941 lib/utils.php:1273
|
4111 |
msgid "Blog:"
|
4112 |
msgstr "Blog :"
|
4113 |
|
4114 |
+
#: lib/monitoring_file_check.php:769 lib/monitoring_file_check.php:796
|
4115 |
+
#: lib/security_rules_update.php:558
|
4116 |
#, php-format
|
4117 |
msgid "Date: %s"
|
4118 |
msgstr "Date : %s"
|
4119 |
|
4120 |
+
#: lib/monitoring_file_check.php:775
|
4121 |
msgid "See attached file for details."
|
4122 |
msgstr "Voir le fichier joint pour plus de détails."
|
4123 |
|
4124 |
+
#: lib/monitoring_file_check.php:789
|
4125 |
msgid "[NinjaFirewall] File Check report"
|
4126 |
msgstr "[NinjaFirewall] Rapport de File Check"
|
4127 |
|
4128 |
+
#: lib/monitoring_file_check.php:790
|
4129 |
msgid "NinjaFirewall did not detect changes in your files."
|
4130 |
msgstr "NinjaFirewall n'a pas détecté de changements dans vos fichiers."
|
4131 |
|
4181 |
msgid "Save File Guard options"
|
4182 |
msgstr "Sauvegarder les options"
|
4183 |
|
4184 |
+
#: lib/network.php:24 ninjafirewall.php:1051 ninjafirewall.php:1055
|
4185 |
#, php-format
|
4186 |
msgid "You are not allowed to perform this task (%s)."
|
4187 |
msgstr "Vous n'êtes pas autorisé à effectuer cette tâche (%s)."
|
4206 |
msgid "Save Network options"
|
4207 |
msgstr "Sauvegarder les options"
|
4208 |
|
4209 |
+
#: lib/security_rules.php:44 lib/security_rules_update.php:559
|
4210 |
+
#: ninjafirewall.php:794
|
4211 |
msgid "Security Rules"
|
4212 |
msgstr "Règles de Sécurité"
|
4213 |
|
4318 |
msgid "Security rules have been updated."
|
4319 |
msgstr "Les règles de sécurité ont été mises à jour."
|
4320 |
|
4321 |
+
#: lib/security_rules_update.php:91 lib/security_rules_update.php:435
|
4322 |
msgid "No security rules update available."
|
4323 |
msgstr "Aucune mise à jour des règles de sécurité disponible."
|
4324 |
|
4331 |
"Il semble que %s est activé. Assurez vous de pouvoir exécuter WP-Cron, sinon "
|
4332 |
"les mises à jour automatiques ne pourront pas être effectuées."
|
4333 |
|
4334 |
+
#: lib/security_rules_update.php:136
|
4335 |
msgid "Automatically update NinjaFirewall security rules"
|
4336 |
msgstr "Activer la mise à jour automatique des règles de sécurité"
|
4337 |
|
4338 |
+
#: lib/security_rules_update.php:148
|
4339 |
msgid "Check for updates"
|
4340 |
msgstr "Vérifier les mises à jour"
|
4341 |
|
4342 |
+
#: lib/security_rules_update.php:151
|
4343 |
msgid "Every 15 minutes"
|
4344 |
msgstr "Toutes les 15 minutes"
|
4345 |
|
4346 |
+
#: lib/security_rules_update.php:152
|
4347 |
msgid "Every 30 minutes"
|
4348 |
msgstr "Toutes les 30 minutes"
|
4349 |
|
4350 |
+
#: lib/security_rules_update.php:169
|
4351 |
msgid ""
|
4352 |
"The next scheduled date is in the past! WordPress wp-cron may not be working "
|
4353 |
"or may have been disabled."
|
4356 |
"passé ! Essayez de recharger cette page, sinon vérifiez que WP-Cron n'a "
|
4357 |
"pas été désactivé."
|
4358 |
|
4359 |
+
#: lib/security_rules_update.php:174
|
4360 |
#, php-format
|
4361 |
msgid ""
|
4362 |
"Next scheduled update will start in approximately %s day, %s hour(s), %s "
|
4365 |
"La prochaine vérification des mises à jour aura lieu dans %s jour, %s "
|
4366 |
"heure(s), %s minute(s) et %s secondes."
|
4367 |
|
4368 |
+
#: lib/security_rules_update.php:182
|
4369 |
msgid "Notification"
|
4370 |
msgstr "Notification"
|
4371 |
|
4372 |
+
#: lib/security_rules_update.php:184
|
4373 |
msgid "Send me a report by email when security rules have been updated."
|
4374 |
msgstr ""
|
4375 |
"Envoyez-moi un rapport par e-mail lorsque les règles de sécurité ont été "
|
4376 |
"mises à jour."
|
4377 |
|
4378 |
+
#: lib/security_rules_update.php:185
|
4379 |
msgid ""
|
4380 |
"Reports will be sent to the contact email address defined in the Event "
|
4381 |
"Notifications menu."
|
4383 |
"Les rapports seront envoyés à l'adresse e-mail définie dans la page "
|
4384 |
"\"Notifications d'Événement\"."
|
4385 |
|
4386 |
+
#: lib/security_rules_update.php:195 lib/security_rules_update.php:210
|
4387 |
msgid "The updates log is currently empty."
|
4388 |
msgstr "Le journal des mises à jour est vide."
|
4389 |
|
4390 |
+
#: lib/security_rules_update.php:199
|
4391 |
msgid "Updates Log"
|
4392 |
msgstr "Journal des mises à jour"
|
4393 |
|
4394 |
+
#: lib/security_rules_update.php:213
|
4395 |
msgid "Log is flushed automatically."
|
4396 |
msgstr "Le journal est purgé automatiquement."
|
4397 |
|
4398 |
+
#: lib/security_rules_update.php:224
|
4399 |
msgid "Save Updates Options"
|
4400 |
msgstr "Sauvegarder les options"
|
4401 |
|
4402 |
+
#: lib/security_rules_update.php:225
|
4403 |
msgid "Check For Updates Now!"
|
4404 |
msgstr "Vérifier les mises à jour maintenant ! "
|
4405 |
|
4406 |
+
#: lib/security_rules_update.php:233
|
4407 |
msgid "Delete Log"
|
4408 |
msgstr "Supprimer le journal"
|
4409 |
|
4410 |
+
#: lib/security_rules_update.php:321
|
4411 |
msgid "Error: Wrong rules format."
|
4412 |
msgstr "Erreur : Le format des règles téléchargées ne correspond pas."
|
4413 |
|
4414 |
+
#: lib/security_rules_update.php:330
|
4415 |
msgid "Error: Unable to unserialize the new rules."
|
4416 |
msgstr ""
|
4417 |
"Erreur : Impossible d'extraire les règles du fichier téléchargé (unable to "
|
4418 |
"unserialize the new rules)."
|
4419 |
|
4420 |
+
#: lib/security_rules_update.php:338
|
4421 |
msgid "Error: Unserialized rules seem corrupted."
|
4422 |
msgstr ""
|
4423 |
"Erreur : Le fichier des règles téléchargé semblent corrompu (unserialized "
|
4424 |
"rules seem corrupted)."
|
4425 |
|
4426 |
+
#: lib/security_rules_update.php:378
|
4427 |
#, php-format
|
4428 |
msgid "Security rules updated to version %s."
|
4429 |
msgstr "Les règles de sécurité ont été mises à jour vers la version %s."
|
4430 |
|
4431 |
+
#: lib/security_rules_update.php:424
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4432 |
msgid "Error: Unable to retrieve the new rules version."
|
4433 |
msgstr "Erreur : Impossible de récupérer la nouvelle version des règles."
|
4434 |
|
4435 |
+
#: lib/security_rules_update.php:442
|
4436 |
#, php-format
|
4437 |
msgid "Error: Server returned a %s HTTP error code (#1)."
|
4438 |
msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#1)."
|
4439 |
|
4440 |
+
#: lib/security_rules_update.php:449 lib/security_rules_update.php:515
|
4441 |
msgid "Error: Unable to connect to the remote server"
|
4442 |
msgstr "Erreur : Impossible de se connecter au serveur distant"
|
4443 |
|
4444 |
+
#: lib/security_rules_update.php:479
|
4445 |
#, php-format
|
4446 |
msgid "Error: The new rules versions do not match (%s != %s)."
|
4447 |
msgstr ""
|
4448 |
"Erreur : La versions des nouvelles règles ne correspond pas (%s != %s)."
|
4449 |
|
4450 |
+
#: lib/security_rules_update.php:493
|
4451 |
#, php-format
|
4452 |
msgid ""
|
4453 |
"Error: The new rules %s digital signature is not correct. Aborting update, "
|
4456 |
"Erreur : La signature numérique des nouvelles règles %s n'est pas correcte. "
|
4457 |
"Annulation de la mise à jour, les règles ont peut-être été altérées."
|
4458 |
|
4459 |
+
#: lib/security_rules_update.php:508
|
4460 |
#, php-format
|
4461 |
msgid "Error: Server returned a %s HTTP error code (#2)."
|
4462 |
msgstr "Erreur : Le serveur a retourné un code d'erreur HTTP %s (#2)."
|
4463 |
|
4464 |
+
#: lib/security_rules_update.php:550
|
4465 |
msgid "[NinjaFirewall] Security rules update"
|
4466 |
msgstr "[NinjaFirewall] Mise à jour des règles de sécurité"
|
4467 |
|
4468 |
+
#: lib/security_rules_update.php:551
|
4469 |
msgid "NinjaFirewall security rules have been updated:"
|
4470 |
msgstr "Les règles de sécurité de NinjaFirewall ont été mises à jour :"
|
4471 |
|
4472 |
+
#: lib/security_rules_update.php:557
|
4473 |
msgid "Rules version:"
|
4474 |
msgstr "Version des règles :"
|
4475 |
|
4476 |
+
#: lib/security_rules_update.php:559
|
4477 |
+
#, php-format
|
4478 |
+
msgid "This notification can be turned off from NinjaFirewall \"%s\" page."
|
4479 |
msgstr ""
|
4480 |
+
"Cette notification peut être désactivée depuis la page \"%s\" de "
|
4481 |
+
"NinjaFirewall."
|
4482 |
|
4483 |
+
#: lib/thickbox.php:42
|
4484 |
msgid "Upgrade to Full WAF mode"
|
4485 |
msgstr "Passer en mode Full WAF"
|
4486 |
|
4487 |
+
#: lib/thickbox.php:47
|
4488 |
msgid ""
|
4489 |
"In <strong>Full WAF</strong> mode, all scripts located inside the blog "
|
4490 |
"installation directories and sub-directories are protected by NinjaFirewall, "
|
4496 |
"compris ceux qui ne font pas partie de WordPress. Cela vous offre le niveau "
|
4497 |
"de protection le plus élevé possible : La sécurité sans aucun compromis."
|
4498 |
|
4499 |
+
#: lib/thickbox.php:49
|
4500 |
#, php-format
|
4501 |
msgid ""
|
4502 |
"It works on most websites right out of the box, or may require <a href=\"%s"
|
4510 |
"d'hébergement partagé, il se peut que l'installation ne puisse pas "
|
4511 |
"fonctionner du tout."
|
4512 |
|
4513 |
+
#: lib/thickbox.php:51
|
4514 |
msgid ""
|
4515 |
"If this happened to you, don't worry: you could still run it in "
|
4516 |
"<strong>WordPress WAF</strong> mode. Despite being less powerful than the "
|
4523 |
"niveau de protection très supérieur aux autres extensions de sécurité pour "
|
4524 |
"WordPress disponibles sur le marché."
|
4525 |
|
4526 |
+
#: lib/thickbox.php:57
|
4527 |
msgid "(recommended)"
|
4528 |
msgstr "(recommandé)"
|
4529 |
|
4530 |
+
#: lib/thickbox.php:117
|
4531 |
msgid "Select your HTTP server and your PHP server API"
|
4532 |
msgstr "Sélectionnez votre serveur HTTP et PHP SAPI"
|
4533 |
|
4534 |
+
#: lib/thickbox.php:127
|
4535 |
msgid "Other webserver + CGI/FastCGI or PHP-FPM"
|
4536 |
msgstr "Autre serveur + CGI/FastCGI ou PHP-FPM"
|
4537 |
|
4538 |
+
#: lib/thickbox.php:129
|
4539 |
msgid "View PHPINFO"
|
4540 |
msgstr "Voir PHPINFO"
|
4541 |
|
4542 |
+
#: lib/thickbox.php:161
|
4543 |
msgid "Select the PHP initialization file supported by your server"
|
4544 |
msgstr ""
|
4545 |
"Sélectionnez le type de fichier de configuration PHP utilisé par votre "
|
4546 |
"serveur"
|
4547 |
|
4548 |
+
#: lib/thickbox.php:173
|
4549 |
msgid "Let NinjaFirewall make the necessary changes (recommended)."
|
4550 |
msgstr "Laissez NinjaFirewall faire les changements (recommandé)."
|
4551 |
|
4552 |
+
#: lib/thickbox.php:174
|
4553 |
msgid "I want to make the changes myself."
|
4554 |
msgstr "Je veux faire les changements moi-même."
|
4555 |
|
4556 |
+
#: lib/thickbox.php:176
|
4557 |
msgid ""
|
4558 |
"Ensure that you have FTP access to your website so that, if there were a "
|
4559 |
"problem during the installation of the firewall, you could easily undo the "
|
4563 |
"problème pendant l'installation du pare-feu, vous pourriez annuler les "
|
4564 |
"modifications."
|
4565 |
|
4566 |
+
#: lib/thickbox.php:179
|
4567 |
msgid "Please make the changes below, then click on the \"Finish\" button."
|
4568 |
msgstr ""
|
4569 |
"Veuillez faire les modifications ci-dessous, puis cliquer sur le bouton "
|
4570 |
"\"Finaliser\"."
|
4571 |
|
4572 |
+
#: lib/thickbox.php:186
|
4573 |
#, php-format
|
4574 |
msgid ""
|
4575 |
"The %s file must be created, and the following lines of code added to it:"
|
4577 |
"Le fichier %s doit être créé, et les lignes suivantes doivent y être "
|
4578 |
"ajoutées :"
|
4579 |
|
4580 |
+
#: lib/thickbox.php:187
|
4581 |
#, php-format
|
4582 |
msgid "The following lines of code must be added to your existing %s file:"
|
4583 |
msgstr "Les lignes suivantes doivent être ajoutées à votre fichier %s :"
|
4584 |
|
4585 |
+
#: lib/thickbox.php:247
|
4586 |
msgid ""
|
4587 |
"Log in to your Openlitespeed admin dashboard, click on \"Virtual Host\", "
|
4588 |
"select your domain, add the following instructions to the \"php.ini Override"
|
4593 |
"section \"php.ini Override\" de l'onglet \"Général\", puis redémarrez "
|
4594 |
"Openlitespeed:"
|
4595 |
|
4596 |
+
#: lib/thickbox.php:254
|
4597 |
msgid ""
|
4598 |
"Important: if one day you wanted to uninstall NinjaFirewall, do not forget "
|
4599 |
"to remove these instructions from your Openlitespeed admin dashboard "
|
4605 |
"<strong>avant</strong> de désinstaller NinjaFirewall, car cet installateur "
|
4606 |
"ne pourra pas le faire à votre place."
|
4607 |
|
4608 |
+
#: lib/thickbox.php:272
|
4609 |
msgid "Finish"
|
4610 |
msgstr "Finaliser"
|
4611 |
|
4618 |
msgstr ""
|
4619 |
"NinjaFirewall a bloqué une tentative de création d'un compte d'utilisateur :"
|
4620 |
|
4621 |
+
#: lib/utils.php:215 lib/utils.php:946
|
4622 |
msgid "Username:"
|
4623 |
msgstr "Utilisateur :"
|
4624 |
|
4625 |
+
#: lib/utils.php:216 lib/utils.php:951 lib/utils.php:1274
|
4626 |
msgid "User IP:"
|
4627 |
msgstr "IP utilisateur :"
|
4628 |
|
4629 |
+
#: lib/utils.php:228 lib/utils.php:963 lib/utils.php:1269
|
|
|
|
|
|
|
|
|
4630 |
msgid "A PHP backtrace has been attached to this message for your convenience."
|
4631 |
msgstr ""
|
4632 |
"La pile d'exécution de PHP est jointe à ce message pour votre commodité."
|
4633 |
|
4634 |
+
#: lib/utils.php:251 lib/utils.php:252 lib/utils.php:987 lib/utils.php:988
|
4635 |
msgid "You are not allowed to perform this task."
|
4636 |
msgstr "Vous n'êtes pas autorisé à effectuer cette tâche."
|
4637 |
|
4638 |
+
#: lib/utils.php:525 lib/utils.php:529
|
4639 |
msgid "NinjaFirewall error"
|
4640 |
msgstr "NinjaFirewall Erreur"
|
4641 |
|
4642 |
+
#: lib/utils.php:526
|
4643 |
#, php-format
|
4644 |
msgid ""
|
4645 |
"%s directory cannot be created. Please review your installation and ensure "
|
4648 |
"Le répertoire %s ne peut pas être créé. Vérifiez votre installation et "
|
4649 |
"assurez vous que %s n'est pas en lecture seule."
|
4650 |
|
4651 |
+
#: lib/utils.php:530
|
4652 |
#, php-format
|
4653 |
msgid ""
|
4654 |
"%s directory is read-only. Please review your installation and ensure that "
|
4657 |
"Le répertoire %s est en lecture seule. Vérifiez votre installation et les "
|
4658 |
"permissions de %s."
|
4659 |
|
4660 |
+
#: lib/utils.php:549
|
4661 |
msgid "unknown error"
|
4662 |
msgstr "erreur inconnue"
|
4663 |
|
4664 |
+
#: lib/utils.php:551
|
4665 |
msgid "NinjaFirewall fatal error:"
|
4666 |
msgstr "NinjaFirewall erreur fatale :"
|
4667 |
|
4668 |
+
#: lib/utils.php:552
|
4669 |
msgid "Review your installation, your site is not protected."
|
4670 |
msgstr "Vérifiez votre installation, votre site n'est pas protégé."
|
4671 |
|
4672 |
+
#: lib/utils.php:569
|
4673 |
msgid "Alert: WordPress console login"
|
4674 |
msgstr "Alerte : Connexion à WordPress"
|
4675 |
|
4676 |
+
#: lib/utils.php:575
|
|
|
|
|
|
|
|
|
4677 |
msgid "Someone just logged in to your WordPress admin console:"
|
4678 |
msgstr "Quelqu'un vient de se connecter à votre Tableau de bord de WordPress:"
|
4679 |
|
4680 |
+
#: lib/utils.php:581
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4681 |
msgid "Support forum"
|
4682 |
msgstr "Forum "
|
4683 |
|
4684 |
+
#: lib/utils.php:642 lib/utils.php:669
|
4685 |
msgid "Forbidden access"
|
4686 |
msgstr "Accès interdit"
|
4687 |
|
4688 |
+
#: lib/utils.php:688
|
4689 |
#, php-format
|
4690 |
msgid ""
|
4691 |
"<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
|
4694 |
"<strong>ERREUR</strong>: Identifiant ou mot de passe invalide.<br /><a href="
|
4695 |
"\"%s\">Mot de passe perdu</a> ?"
|
4696 |
|
4697 |
+
#: lib/utils.php:772
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4698 |
msgid "[NinjaFirewall] Alert: Database changes detected"
|
4699 |
msgstr "[NinjaFirewall] Alerte: Modification dans la base de données"
|
4700 |
|
4701 |
+
#: lib/utils.php:773
|
4702 |
msgid ""
|
4703 |
"NinjaFirewall has detected that one or more administrator accounts were "
|
4704 |
"modified in the database:"
|
4706 |
"NinjaFirewall a détecté que un ou plusieurs comptes d'administrateur ont été "
|
4707 |
"modifiés dans la base de données:"
|
4708 |
|
4709 |
+
#: lib/utils.php:778
|
4710 |
#, php-format
|
4711 |
msgid "Total administrators : %s"
|
4712 |
msgstr "Nombre d'administrateurs : %s"
|
4713 |
|
4714 |
+
#: lib/utils.php:787
|
4715 |
msgid ""
|
4716 |
"If you cannot see any modifications in the above fields, it is possible that "
|
4717 |
"the administrator password was changed."
|
4719 |
"Si vous ne voyez pas de modifications dans les données ci-dessus, il est "
|
4720 |
"possible que le mot de passe administrateur ait été changé."
|
4721 |
|
4722 |
+
#: lib/utils.php:926
|
4723 |
msgid "Blocked privilege escalation attempt"
|
4724 |
msgstr "Tentatives d'élévation des privilèges"
|
4725 |
|
4726 |
+
#: lib/utils.php:939
|
4727 |
msgid ""
|
4728 |
"NinjaFirewall has blocked an attempt to modify a user capability by someone "
|
4729 |
"who does not have administrative privileges:"
|
4731 |
"NinjaFirewall a bloqué une tentative de modification de certaines Capacités "
|
4732 |
"par un utilisateur ne disposant pas de privilèges administratifs :"
|
4733 |
|
4734 |
+
#: lib/utils.php:966 lib/utils.php:1279
|
4735 |
+
msgid ""
|
4736 |
+
"This protection (and notification) can be turned off from NinjaFirewall "
|
4737 |
+
"\"Firewall Policies\" page."
|
4738 |
+
msgstr ""
|
4739 |
+
"Cette protection (et notification) peut être désactivée à partir de la page "
|
4740 |
+
"\"Politiques du Pare-feu\" de NinjaFirewall."
|
4741 |
+
|
4742 |
+
#: lib/utils.php:999
|
4743 |
msgid ""
|
4744 |
"NinjaFirewall brute-force protection is enabled and you are temporarily "
|
4745 |
"whitelisted."
|
4747 |
"La protection de NinjaFirewall contre les attaques par force brute est "
|
4748 |
"activée. Vous êtes temporairement dans la liste blanche."
|
4749 |
|
4750 |
+
#: lib/utils.php:1014
|
4751 |
#, php-format
|
4752 |
msgid ""
|
4753 |
"Hey, it seems that you've been using NinjaFirewall for some time. If you "
|
4760 |
"a>. Il a fallu des milliers d'heures pour le développer, mais il suffit "
|
4761 |
"seulement de quelques minutes pour le noter. Merci !"
|
4762 |
|
4763 |
+
#: lib/utils.php:1241
|
4764 |
msgid ""
|
4765 |
"The attempt was blocked and the option was reversed to its original value."
|
4766 |
msgstr ""
|
4767 |
"La tentative a été bloquée et l'option a été remise à sa valeur d'origine."
|
4768 |
|
4769 |
+
#: lib/utils.php:1246
|
4770 |
msgid "Attempt to modify WordPress settings"
|
4771 |
msgstr "Tentative de modification des paramètres de WordPress"
|
4772 |
|
4773 |
+
#: lib/utils.php:1247
|
4774 |
msgid ""
|
4775 |
"NinjaFirewall has blocked an attempt to modify some important WordPress "
|
4776 |
"settings by a user that does not have administrative privileges:"
|
4779 |
"importants de WordPress par un utilisateur ne disposant pas de privilèges "
|
4780 |
"administratifs :"
|
4781 |
|
4782 |
+
#: lib/utils.php:1248 lib/utils.php:1257
|
4783 |
#, php-format
|
4784 |
msgid "Option: %s"
|
4785 |
msgstr "Option: %s"
|
4786 |
|
4787 |
+
#: lib/utils.php:1249
|
4788 |
#, php-format
|
4789 |
msgid "Original value: %s"
|
4790 |
msgstr "Valeur originale : %s"
|
4791 |
|
4792 |
+
#: lib/utils.php:1250
|
4793 |
#, php-format
|
4794 |
msgid "Modified value: %s"
|
4795 |
msgstr "Valeur modifiée : %s"
|
4796 |
|
4797 |
+
#: lib/utils.php:1251 lib/utils.php:1259
|
4798 |
#, php-format
|
4799 |
msgid "Action taken: %s"
|
4800 |
msgstr "Action prise : %s"
|
4801 |
|
4802 |
+
#: lib/utils.php:1255
|
4803 |
msgid "Code injection attempt in WordPress options table"
|
4804 |
msgstr "Tentative d'injection de code dans la table des options de WordPress"
|
4805 |
|
4806 |
+
#: lib/utils.php:1256
|
4807 |
msgid ""
|
4808 |
"NinjaFirewall has blocked an attempt to inject code in the WordPress options "
|
4809 |
"table by a user that does not have administrative privileges:"
|
4812 |
"options de WordPress par un utilisateur ne disposant pas de privilèges "
|
4813 |
"administratifs :"
|
4814 |
|
4815 |
+
#: lib/utils.php:1258
|
4816 |
#, php-format
|
4817 |
msgid "Code: %s"
|
4818 |
msgstr "Code : %s"
|
4819 |
|
4820 |
+
#: lib/utils.php:1314
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4821 |
#, php-format
|
4822 |
msgid "Error, cannot create the %s folder."
|
4823 |
msgstr "Erreur, impossible de créer le répertoire %s."
|
4824 |
|
4825 |
+
#: lib/utils.php:1314 lib/utils.php:1322 lib/utils.php:1330
|
4826 |
msgid "Check your server permissions and try again."
|
4827 |
msgstr "Vérifiez les autorisations de votre serveur et réessayez."
|
4828 |
|
4829 |
+
#: lib/utils.php:1322
|
4830 |
#, php-format
|
4831 |
msgid "Error, the %s folder is not writable."
|
4832 |
msgstr "Erreur, le répertoire %s est en lecture seule."
|
4833 |
|
4834 |
+
#: lib/utils.php:1330
|
4835 |
#, php-format
|
4836 |
msgid "Error, cannot write %s."
|
4837 |
msgstr "Erreur, impossible d'écrire dans %s."
|
5330 |
"Impossible de récupérer les règles de l'utilisateur dans la base de données "
|
5331 |
"(#4)"
|
5332 |
|
5333 |
+
#: ninjafirewall.php:110
|
5334 |
msgid ""
|
5335 |
"You do not have \"unfiltered_html\" capability. Please enable it in order to "
|
5336 |
"run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
|
5341 |
"la directive \"DISALLOW_UNFILTERED_HTML\" activée dans votre fichier wp-"
|
5342 |
"config.php)."
|
5343 |
|
5344 |
+
#: ninjafirewall.php:117
|
5345 |
#, php-format
|
5346 |
msgid ""
|
5347 |
"NinjaFirewall requires WordPress 3.3 or greater but your current version is "
|
5350 |
"NinjaFirewall nécessite au moins WordPress 3.3 mais votre version de "
|
5351 |
"WordPress est %s."
|
5352 |
|
5353 |
+
#: ninjafirewall.php:121
|
5354 |
#, php-format
|
5355 |
msgid ""
|
5356 |
"NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
|
5357 |
msgstr ""
|
5358 |
"NinjaFirewall nécessite au moins PHP 5.3 mais votre version de PHP est %s."
|
5359 |
|
5360 |
+
#: ninjafirewall.php:125
|
5361 |
#, php-format
|
5362 |
msgid "NinjaFirewall requires the PHP %s extension."
|
5363 |
msgstr "NinjaFirewall nécessite l'extension PHP %s."
|
5364 |
|
5365 |
+
#: ninjafirewall.php:129
|
5366 |
msgid ""
|
5367 |
"You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
|
5368 |
"5.3.0 (see http://php.net/safe-mode)."
|
5371 |
"devenue obsolète depuis PHP 5.3 et a été supprimée depuis PHP 5.4 (cf. "
|
5372 |
"http://php.net/safe-mode)."
|
5373 |
|
5374 |
+
#: ninjafirewall.php:133
|
5375 |
msgid "You are not allowed to activate NinjaFirewall."
|
5376 |
msgstr "Vous n’êtes pas autorisé à activer NinjaFirewall."
|
5377 |
|
5378 |
+
#: ninjafirewall.php:137
|
5379 |
msgid "NinjaFirewall is not compatible with Microsoft Windows."
|
5380 |
msgstr "NinjaFirewall n'est pas compatible avec Microsoft Windows."
|
5381 |
|
5382 |
+
#: ninjafirewall.php:289
|
5383 |
msgid ""
|
5384 |
"All fields will be restored to their default values and any changes you made "
|
5385 |
"will be lost. Continue?"
|
5387 |
"Tous les champs vont être re-initialisés et vos changements seront perdus. "
|
5388 |
"Continuer ?"
|
5389 |
|
5390 |
+
#: ninjafirewall.php:293
|
5391 |
msgid "Missing security nonce, try to reload the page."
|
5392 |
msgstr "La nonce de sécurité est manquante, essayer de recharger cette page."
|
5393 |
|
5394 |
+
#: ninjafirewall.php:295
|
5395 |
msgid "Please select the HTTP server in the list."
|
5396 |
msgstr "Sélectionnez votre serveur HTTP dans la list."
|
5397 |
|
5398 |
+
#: ninjafirewall.php:299
|
5399 |
msgid ""
|
5400 |
"This action will restore the selected configuration file and will override "
|
5401 |
"all your current firewall options, policies and rules. Continue?"
|
5404 |
"remplacera toutes les options, politiques et règles de pare-feu actuelles. "
|
5405 |
"Continuer ?"
|
5406 |
|
5407 |
+
#: ninjafirewall.php:303
|
5408 |
msgid ""
|
5409 |
"Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
|
5410 |
"hyphen [-] or an underscore [_] will be removed from the filename and "
|
5414 |
"[.], un trait d'union[-] ou un caractère de soulignement[_], sera supprimé "
|
5415 |
"du nom du fichier et remplacé par le caractère de substitution."
|
5416 |
|
5417 |
+
#: ninjafirewall.php:305
|
5418 |
msgid ""
|
5419 |
"Ensure that you can access your admin console over HTTPS before enabling "
|
5420 |
"this option, otherwise you will lock yourself out of your site. Continue?"
|
5423 |
"option, sinon vous risqueriez de ne plus pouvoir accéder à l'interface "
|
5424 |
"d'administration. Continuer ?"
|
5425 |
|
5426 |
+
#: ninjafirewall.php:309
|
5427 |
msgid "Delete the current snapshot ?"
|
5428 |
msgstr "Supprimer l'instantané actuel ?"
|
5429 |
|
5430 |
+
#: ninjafirewall.php:313
|
5431 |
msgid "Invalid character."
|
5432 |
msgstr "Caractère invalide."
|
5433 |
|
5434 |
+
#: ninjafirewall.php:315
|
5435 |
msgid "\"admin\" is not acceptable, please choose another user name."
|
5436 |
msgstr ""
|
5437 |
"\"admin\" n\\'est pas acceptable, merci de bien vouloir choisir un autre "
|
5438 |
"identifiant."
|
5439 |
|
5440 |
+
#: ninjafirewall.php:317
|
5441 |
msgid "Please enter max 1024 character only."
|
5442 |
msgstr "Veuillez ne pas entrer plus de 1 024 caractères."
|
5443 |
|
5444 |
+
#: ninjafirewall.php:319
|
5445 |
msgid "Select when to enable the login protection."
|
5446 |
msgstr "Veuillez sélectionner quand activer la protection."
|
5447 |
|
5448 |
+
#: ninjafirewall.php:321
|
5449 |
msgid "Enter a name and a password for the HTTP authentication."
|
5450 |
msgstr ""
|
5451 |
"Veuillez entrer un nom d'utilisateur et mot de passe pour l'authentification "
|
5452 |
"HTTP."
|
5453 |
|
5454 |
+
#: ninjafirewall.php:325
|
5455 |
msgid "Your public key is not valid."
|
5456 |
msgstr "Votre clé publique n\\'est pas valide."
|
5457 |
|
5458 |
+
#: ninjafirewall.php:331
|
5459 |
msgid "No traffic yet, please wait"
|
5460 |
msgstr "Aucun visiteur actuellement, veuillez patienter"
|
5461 |
|
5462 |
+
#: ninjafirewall.php:333
|
5463 |
msgid "seconds..."
|
5464 |
msgstr "secondes..."
|
5465 |
|
5466 |
+
#: ninjafirewall.php:335
|
5467 |
msgid "Error: Live Log did not receive the expected response from your server:"
|
5468 |
msgstr "Erreur : le serveur distant n\\'a pas retourné la réponse attendue :"
|
5469 |
|
5470 |
+
#: ninjafirewall.php:337
|
5471 |
msgid "Error: URL does not seem to exist (404 Not Found):"
|
5472 |
msgstr "Erreur : l'URL ne semble pas exister (404 Not Found) :"
|
5473 |
|
5474 |
+
#: ninjafirewall.php:339
|
5475 |
msgid "Error: Cannot find your log file. Try to reload this page."
|
5476 |
msgstr ""
|
5477 |
"Erreur : Impossible de trouver le fichier log. Essayez de recharger cette "
|
5478 |
"page."
|
5479 |
|
5480 |
+
#: ninjafirewall.php:341
|
5481 |
msgid "Error: The HTTP server returned the following error code:"
|
5482 |
msgstr "Erreur : Le serveur HTTP a retourné le code d'erreur suivant :"
|
5483 |
|
5484 |
+
#: ninjafirewall.php:579 ninjafirewall.php:690
|
5485 |
msgid "Error: Security nonces do not match. Reload the page and try again."
|
5486 |
msgstr ""
|
5487 |
"Erreur : Les nonces de sécurité ne correspondent pas. Veuillez recharger "
|
5496 |
msgid "Error: missing parameter (%s)."
|
5497 |
msgstr "Erreur : Paramètre manquant (%s)."
|
5498 |
|
5499 |
+
#: ninjafirewall.php:752
|
5500 |
msgid "NinjaFirewall: Dashboard"
|
5501 |
msgstr "NinjaFirewall : Tableau de Bord"
|
5502 |
|
5503 |
+
#: ninjafirewall.php:756
|
5504 |
msgid "NinjaFirewall: Firewall Options"
|
5505 |
msgstr "NinjaFirewall : Options du Pare-feu"
|
5506 |
|
5507 |
+
#: ninjafirewall.php:760
|
5508 |
msgid "NinjaFirewall: Firewall Policies"
|
5509 |
msgstr "NinjaFirewall : Politiques du Pare-feu"
|
5510 |
|
5511 |
+
#: ninjafirewall.php:764
|
5512 |
msgid "NinjaFirewall: Monitoring"
|
5513 |
msgstr "NinjaFirewall : Monitoring"
|
5514 |
|
5515 |
+
#: ninjafirewall.php:774
|
5516 |
msgid "NinjaFirewall: Anti-Malware"
|
5517 |
msgstr "NinjaFirewall : Anti-Malware"
|
5518 |
|
5519 |
+
#: ninjafirewall.php:778
|
5520 |
msgid "NinjaFirewall: Network"
|
5521 |
msgstr "NinjaFirewall : Réseau"
|
5522 |
|
5523 |
+
#: ninjafirewall.php:782
|
5524 |
msgid "NinjaFirewall: Event Notifications"
|
5525 |
msgstr "NinjaFirewall : Notifications d’Événement"
|
5526 |
|
5527 |
+
#: ninjafirewall.php:786
|
5528 |
msgid "NinjaFirewall: Log-in Protection"
|
5529 |
msgstr "NinjaFirewall : Page de Connexion"
|
5530 |
|
5531 |
+
#: ninjafirewall.php:790
|
5532 |
msgid "NinjaFirewall: Logs"
|
5533 |
msgstr "NinjaFirewall : Journaux"
|
5534 |
|
5535 |
+
#: ninjafirewall.php:794
|
5536 |
msgid "NinjaFirewall: Security Rules"
|
5537 |
msgstr "NinjaFirewall : Règles de Sécurité"
|
5538 |
|
5539 |
+
#: ninjafirewall.php:838
|
5540 |
msgid "NinjaFirewall Settings"
|
5541 |
msgstr "Réglages de NinjaFirewall"
|
5542 |
|
5543 |
+
#: ninjafirewall.php:846
|
5544 |
msgid "NinjaFirewall is enabled"
|
5545 |
msgstr "NinjaFirewall est activé"
|
5546 |
|
5547 |
+
#: ninjafirewall.php:986
|
5548 |
msgid "Access Restricted"
|
5549 |
msgstr "Accès limité"
|
5550 |
|
5551 |
+
#: ninjafirewall.php:992
|
5552 |
msgid "Settings"
|
5553 |
msgstr "Réglages"
|
5554 |
|
5555 |
+
#: ninjafirewall.php:993
|
5556 |
msgid "Upgrade to Premium"
|
5557 |
msgstr "Passez Premium !"
|
5558 |
|
5559 |
+
#: ninjafirewall.php:994
|
5560 |
msgid "Rate it!"
|
5561 |
msgstr "Notez-le !"
|
5562 |
|
5563 |
+
#~ msgid ""
|
5564 |
+
#~ "Don't leave your blog at risk and make sure to update as soon as possible."
|
5565 |
+
#~ msgstr ""
|
5566 |
+
#~ "Ne laissez pas votre blog en danger, lancez cette mise à jour dès que "
|
5567 |
+
#~ "possible."
|
5568 |
+
|
5569 |
+
#~ msgid "-Blog: %s"
|
5570 |
+
#~ msgstr "-Blog : %s"
|
5571 |
+
|
5572 |
+
#~ msgid "-Plugin: %s"
|
5573 |
+
#~ msgstr "-Extension : %s"
|
5574 |
+
|
5575 |
+
#~ msgid "-Theme: %s"
|
5576 |
+
#~ msgstr "-Theme : %s"
|
5577 |
+
|
5578 |
+
#~ msgid "Force SSL for admin and logins"
|
5579 |
+
#~ msgstr "Forcer la connexion sécurisée au Tableau de bord"
|
5580 |
+
|
5581 |
+
#~ msgid "Error code and message to return"
|
5582 |
+
#~ msgstr "Code HTTP et Message à retourner"
|
5583 |
+
|
5584 |
+
#~ msgid "Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>"
|
5585 |
+
#~ msgstr ""
|
5586 |
+
#~ "Forcer la connexion sécurisée au Tableau de bord <code>FORCE_SSL_ADMIN</"
|
5587 |
+
#~ "code>"
|
5588 |
+
|
5589 |
+
#~ msgid "Need more security? Get Premium!"
|
5590 |
+
#~ msgstr "Besoin de plus de sécurité ? Découvrez NinjaFirewall WP+ Edition !"
|
5591 |
+
|
5592 |
+
#~ msgid ""
|
5593 |
+
#~ "Scan : if anything suspicious is detected, NinjaFirewall will block the "
|
5594 |
+
#~ "request and return an HTTP error code and message (defined in the "
|
5595 |
+
#~ "\"Firewall Options\" page). The user request will fail and the connection "
|
5596 |
+
#~ "will be closed immediately."
|
5597 |
+
#~ msgstr ""
|
5598 |
+
#~ "Filtrer : lorsqu'il détecte une requête dangereuse, NinjaFirewall la "
|
5599 |
+
#~ "bloque et retourne un message et code d'erreur HTTP (définis dans la page "
|
5600 |
+
#~ "\"Options du Pare-feu\"). La requête ne pourra pas aboutir et la "
|
5601 |
+
#~ "connexion sera fermée immédiatement."
|
5602 |
+
|
5603 |
+
#~ msgid ""
|
5604 |
+
#~ "Sanitise : this option will not block but sanitise the user request by "
|
5605 |
+
#~ "escaping characters that can be used to exploit vulnerabilities (%s) and "
|
5606 |
+
#~ "replacing <code><</code> and <code>></code> with their "
|
5607 |
+
#~ "corresponding HTML entities (<code>&lt;</code>, <code>&gt;</"
|
5608 |
+
#~ "code>). If it is a variable, i.e. <code>?name=value</code>, both its name "
|
5609 |
+
#~ "and value will be sanitised."
|
5610 |
+
#~ msgstr ""
|
5611 |
+
#~ "Nettoyer : cette action ne bloque pas la requête mais l'analyse afin d'y "
|
5612 |
+
#~ "trouver des caractères pouvant être dangereux, par exemple pour injecter "
|
5613 |
+
#~ "du code dans la base de données (%s) et, le cas échéant, nettoie cette "
|
5614 |
+
#~ "requête en y insérant des caractères d'échappement ou, dans le cas des "
|
5615 |
+
#~ "caractères <code><</code> et <code>></code>, en les remplaçant par "
|
5616 |
+
#~ "leurs entités HTML correspondantes. S'il s'agit d'une variable et de sa "
|
5617 |
+
#~ "valeur (<code>?variable=valeur</code>), les deux éléments seront nettoyés."
|
5618 |
+
|
5619 |
+
#~ msgid "File Uploads:"
|
5620 |
+
#~ msgstr "Autoriser les téléchargements :"
|
5621 |
+
|
5622 |
+
#~ msgid "whether to allow/disallow file uploads."
|
5623 |
+
#~ msgstr ""
|
5624 |
+
#~ "vous pouvez autoriser ou interdire tout téléchargement de fichiers vers "
|
5625 |
+
#~ "votre site."
|
5626 |
+
|
5627 |
+
#~ msgid "Sanitise filenames:"
|
5628 |
+
#~ msgstr "Nettoyer le nom des fichiers :"
|
5629 |
+
|
5630 |
+
#~ msgid ""
|
5631 |
+
#~ "any character that is not a letter <code>a-zA-Z</code>, a digit "
|
5632 |
+
#~ "<code>0-9</code>, a dot <code>.</code>, a hyphen <code>-</code> or an "
|
5633 |
+
#~ "underscore <code>_</code> will be removed from the filename and replaced "
|
5634 |
+
#~ "with the substitution character."
|
5635 |
+
#~ msgstr ""
|
5636 |
+
#~ "si le nom du fichier contient un caractère qui n'est pas une lettre "
|
5637 |
+
#~ "<code>a-zA-Z</code>, un chiffre <code>0-9</code>, un point <code>.</"
|
5638 |
+
#~ "code>, un trait d'union <code>-</code> ou un caractère de soulignement "
|
5639 |
+
#~ "<code>_</code>, celui-si sera remplacé par le caractère de substitution."
|
5640 |
+
|
5641 |
+
#~ msgid ""
|
5642 |
+
#~ "enabling this policy will block any attempt (e.g., exploiting a "
|
5643 |
+
#~ "vulnerability, using a backdoor etc) to modify some important WordPress "
|
5644 |
+
#~ "settings. This policy will also send you an alert by email with all "
|
5645 |
+
#~ "details regarding the issue. It is enabled by default."
|
5646 |
+
#~ msgstr ""
|
5647 |
+
#~ "l'activation de cette politique bloquera toute tentative (par exemple, "
|
5648 |
+
#~ "l'exploitation d'une vulnérabilité, l'utilisation d'une porte dérobée, "
|
5649 |
+
#~ "etc) de modifier certains paramètres WordPress importants. Cette "
|
5650 |
+
#~ "politique vous enverra également une alerte par e-mail avec tous les "
|
5651 |
+
#~ "détails concernant le problème. Elle est activée par défaut."
|
5652 |
+
|
5653 |
+
#~ msgid ""
|
5654 |
+
#~ "enabling this policy will block any attempt (e.g., exploiting a "
|
5655 |
+
#~ "vulnerability, using a backdoor etc) to create a user account. If you "
|
5656 |
+
#~ "allow user registration, you should not enable it."
|
5657 |
+
#~ msgstr ""
|
5658 |
+
#~ "l'activation de cette politique bloquera toute tentative (par exemple, "
|
5659 |
+
#~ "l'exploitation d'une vulnérabilité, l'utilisation d'une porte dérobée, "
|
5660 |
+
#~ "etc) de création d'un compte d'utilisateur. Si vous autorisez "
|
5661 |
+
#~ "l'inscription des utilisateurs, vous ne devez pas l'activer."
|
5662 |
+
|
5663 |
+
#~ msgid ""
|
5664 |
+
#~ "this policy will block vulnerabilities that could be leveraged by "
|
5665 |
+
#~ "attackers to gain administrative privileges."
|
5666 |
+
#~ msgstr ""
|
5667 |
+
#~ "cette politique bloquera les vulnérabilités qui pourraient être "
|
5668 |
+
#~ "exploitées pour obtenir des privilèges administratifs."
|
5669 |
+
|
5670 |
+
#~ msgid ""
|
5671 |
+
#~ "many vulnerabilities in plugins are exploited via the admin-ajax.php "
|
5672 |
+
#~ "script. This policy will try to detect and immediately block bots and "
|
5673 |
+
#~ "malicious scanners trying to access it. The server IP address (%s) and "
|
5674 |
+
#~ "private IP addresses will not be blocked."
|
5675 |
+
#~ msgstr ""
|
5676 |
+
#~ "de nombreuses vulnérabilités dans les extensions WordPress sont "
|
5677 |
+
#~ "exploitées via le script admin-ajax.php. Cette politique essaiera de "
|
5678 |
+
#~ "détecter et de bloquer immédiatement les robots et les scanners "
|
5679 |
+
#~ "malveillants qui tentent d’y accéder. L'adresse IP du serveur (%s) et les "
|
5680 |
+
#~ "adresses IP privées ne seront pas bloquées."
|
5681 |
+
|
5682 |
+
#~ msgid "Protect against username enumeration:"
|
5683 |
+
#~ msgstr "Protéger contre l'énumération des comptes utilisateurs :"
|
5684 |
+
|
5685 |
+
#~ msgid ""
|
5686 |
+
#~ "it is possible to enumerate usernames either through the WordPress author "
|
5687 |
+
#~ "archives, the REST API or the login page. Although this is not a "
|
5688 |
+
#~ "vulnerability but a WordPress feature, some hackers use it to retrieve "
|
5689 |
+
#~ "usernames in order to launch more accurate brute-force attacks. If it is "
|
5690 |
+
#~ "a failed login attempt, NinjaFirewall will sanitise the error message "
|
5691 |
+
#~ "returned by WordPress. If it is an author archives scan, it will "
|
5692 |
+
#~ "invalidate it and redirect the user to the blog index page. Regarding the "
|
5693 |
+
#~ "WP REST API, it will block the request immediately."
|
5694 |
+
#~ msgstr ""
|
5695 |
+
#~ "il est possible d'énumérer les noms des utilisateurs de votre blog via "
|
5696 |
+
#~ "l'API REST, la page d'archive d'un auteur ou la page de connexion au "
|
5697 |
+
#~ "Tableau de bord. Bien que ce ne soit pas une vulnérabilité, mais une "
|
5698 |
+
#~ "caractéristique de WordPress, certains hackers utilisent ces astuces pour "
|
5699 |
+
#~ "récupérer les noms d'utilisateur afin de lancer des attaques par force "
|
5700 |
+
#~ "brute plus précises."
|
5701 |
+
|
5702 |
+
#~ msgid "WordPress REST API:"
|
5703 |
+
#~ msgstr "API REST de WordPress :"
|
5704 |
+
|
5705 |
+
#~ msgid ""
|
5706 |
+
#~ "it allows you to access your WordPress site's data through an easy-to-use "
|
5707 |
+
#~ "HTTP REST API. Since WordPress 4.7, it is enabled by default. "
|
5708 |
+
#~ "NinjaFirewall allows you to block any access to that API if you do not "
|
5709 |
+
#~ "intend to use it."
|
5710 |
+
#~ msgstr ""
|
5711 |
+
#~ "elle vous permet d'accéder aux données de votre blog via l'API HTTP REST. "
|
5712 |
+
#~ "Depuis WordPress 4.7, cette elle est activée par défaut. NinjaFirewall "
|
5713 |
+
#~ "vous permet de bloquer tout accès a cette API si vous ne l'utilisez pas."
|
5714 |
+
|
5715 |
+
#~ msgid "WordPress XML-RPC API:"
|
5716 |
+
#~ msgstr "API XML-RPC de WordPress :"
|
5717 |
+
|
5718 |
+
#~ msgid ""
|
5719 |
+
#~ "Block <code>POST</code> requests in the themes folder <code>/wp-content/"
|
5720 |
+
#~ "themes</code>:"
|
5721 |
+
#~ msgstr ""
|
5722 |
+
#~ "Bloquer les requêtes <code>POST</code> dans le dossier des thèmes <code>/"
|
5723 |
+
#~ "wp-content/themes</code> :"
|
5724 |
+
|
5725 |
+
#~ msgid ""
|
5726 |
+
#~ "this option can be useful to block hackers from installing backdoor in "
|
5727 |
+
#~ "the PHP theme files. However, because some custom themes may include an "
|
5728 |
+
#~ "HTML form (contact, search form etc), this option is not enabled by "
|
5729 |
+
#~ "default."
|
5730 |
+
#~ msgstr ""
|
5731 |
+
#~ "cette option peut être utile afin de bloquer l'exploitation de "
|
5732 |
+
#~ "vulnérabilités dans les fichiers PHP de vos thèmes. Toutefois, parce que "
|
5733 |
+
#~ "certains thèmes personnalisés peuvent inclure un formulaire HTML "
|
5734 |
+
#~ "(formulaire de recherche ou de contact etc) nécessitant des requêtes "
|
5735 |
+
#~ "<code>POST</code> , cette option n'est pas activée par défaut."
|
5736 |
+
|
5737 |
+
#~ msgid "Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:"
|
5738 |
+
#~ msgstr ""
|
5739 |
+
#~ "Forcer la connexion sécurisée au Tableau de bord <code>FORCE_SSL_ADMIN</"
|
5740 |
+
#~ "code> :"
|
5741 |
+
|
5742 |
+
#~ msgid ""
|
5743 |
+
#~ "enable this option when you want to secure logins and the admin area so "
|
5744 |
+
#~ "that both passwords and cookies are never sent in the clear. Ensure that "
|
5745 |
+
#~ "you can access your admin console from HTTPS before enabling this option, "
|
5746 |
+
#~ "otherwise you will lock yourself out of your site!"
|
5747 |
+
#~ msgstr ""
|
5748 |
+
#~ "activez cette option lorsque vous souhaitez sécuriser les connexions à "
|
5749 |
+
#~ "votre Tableau de bord. Assurez-vous que vous pouvez accéder à votre page "
|
5750 |
+
#~ "de connexion via HTTPS avant d'activer cette option, sinon vous risquez "
|
5751 |
+
#~ "de bloquer l’accès à votre site !"
|
5752 |
+
|
5753 |
+
#~ msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:"
|
5754 |
+
#~ msgstr ""
|
5755 |
+
#~ "Désactiver l’éditeur de thème et d'extension <code>DISALLOW_FILE_EDIT</"
|
5756 |
+
#~ "code> :"
|
5757 |
+
|
5758 |
+
#~ msgid ""
|
5759 |
+
#~ "disabling the plugin and theme editor provides an additional layer of "
|
5760 |
+
#~ "security if a hacker gains access to a well-privileged user account."
|
5761 |
+
#~ msgstr ""
|
5762 |
+
#~ "désactiver l’éditeur de thème et d'extension fournit une couche de "
|
5763 |
+
#~ "sécurité supplémentaire. Si un pirate accédait a votre compte "
|
5764 |
+
#~ "administrateur, il ne pourrait pas l'utiliser pour insérer une porte "
|
5765 |
+
#~ "dérobée dans l'un de vos scripts PHP."
|
5766 |
+
|
5767 |
+
#~ msgid ""
|
5768 |
+
#~ "Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</"
|
5769 |
+
#~ "code>:"
|
5770 |
+
#~ msgstr ""
|
5771 |
+
#~ "Désactiver l'installation et mise à jour des thèmes et extensions "
|
5772 |
+
#~ "<code>DISALLOW_FILE_MODS</code> :"
|
5773 |
+
|
5774 |
+
#~ msgid ""
|
5775 |
+
#~ "this option will block users being able to use the plugin and theme "
|
5776 |
+
#~ "installation/update functionality from the WordPress admin area. Setting "
|
5777 |
+
#~ "this constant also disables the Plugin and Theme editor."
|
5778 |
+
#~ msgstr ""
|
5779 |
+
#~ "cette option permet de bloquer les utilisateurs voulant lancer une "
|
5780 |
+
#~ "installation ou mise à jour d'une extension ou d'un thème. Elle désactive "
|
5781 |
+
#~ "aussi l’éditeur de thème et d'extension."
|
5782 |
+
|
5783 |
+
#~ msgid ""
|
5784 |
+
#~ "Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</"
|
5785 |
+
#~ "code>:"
|
5786 |
+
#~ msgstr ""
|
5787 |
+
#~ "Désactiver le gestionnaire d'erreurs fatales "
|
5788 |
+
#~ "<code>WP_DISABLE_FATAL_ERROR_HANDLER</code> :"
|
5789 |
+
|
5790 |
+
#~ msgid ""
|
5791 |
+
#~ "this option will disable the WSOD protection introduced in WordPress 5.1."
|
5792 |
+
#~ msgstr ""
|
5793 |
+
#~ "cette option désactivera la protection WSOD introduite dans WordPress 5.1."
|
5794 |
+
|
5795 |
+
#~ msgid "Decode Base64-encoded <code>POST</code> variable:"
|
5796 |
+
#~ msgstr ""
|
5797 |
+
#~ "Décoder les chaîne encodées en Base64 dans la variable <code>POST</"
|
5798 |
+
#~ "code> :"
|
5799 |
+
|
5800 |
+
#~ msgid "Block suspicious bots/scanners:"
|
5801 |
+
#~ msgstr "Bloquer les requêtes provenant de bots/scanners malveillants :"
|
5802 |
+
|
5803 |
+
#~ msgid ""
|
5804 |
+
#~ "rejects some known bots, scanners and various malicious scripts "
|
5805 |
+
#~ "attempting to access your blog."
|
5806 |
+
#~ msgstr ""
|
5807 |
+
#~ "cette option peut bloquer de nombreux crawlers, spambots et autres "
|
5808 |
+
#~ "scrappers."
|
5809 |
+
|
5810 |
+
#~ msgid ""
|
5811 |
+
#~ "Block POST requests that do not have an <code>HTTP_REFERER</code> header:"
|
5812 |
+
#~ msgstr ""
|
5813 |
+
#~ "Bloquer les requêtes POST qui n'ont pas d'en-tête <code>HTTP_REFERER</"
|
5814 |
+
#~ "code> :"
|
5815 |
+
|
5816 |
+
#~ msgid ""
|
5817 |
+
#~ "this option will block any <code>POST</code> request that does not have a "
|
5818 |
+
#~ "Referrer header (<code>HTTP_REFERER</code> variable). If you need "
|
5819 |
+
#~ "external applications to post to your scripts (e.g. Paypal IPN, WordPress "
|
5820 |
+
#~ "WP-Cron...), you are advised to keep this option disabled otherwise they "
|
5821 |
+
#~ "will likely be blocked. Note that <code>POST</code> requests are not "
|
5822 |
+
#~ "required to have a Referrer header and, for that reason, this option is "
|
5823 |
+
#~ "disabled by default."
|
5824 |
+
#~ msgstr ""
|
5825 |
+
#~ "cette option bloque toutes les requêtes POST qui n'incluent pas le "
|
5826 |
+
#~ "Referrer <code>HTTP_REFERER</code> (adresse de la page -si elle existe- "
|
5827 |
+
#~ "qui a conduit le client à la page courante). Puisque les requêtes POST ne "
|
5828 |
+
#~ "sont pas obligées d'avoir un Referrer, cette option n'est pas activée par "
|
5829 |
+
#~ "défaut. Si vous utilisez des scripts comme Paypal IPN, WordPress WP-Cron "
|
5830 |
+
#~ "etc, désactivez cette fonction."
|
5831 |
+
|
5832 |
+
#~ msgid "Block localhost IP in <code>GET/POST</code> requests:"
|
5833 |
+
#~ msgstr ""
|
5834 |
+
#~ "Bloquer les requêtes <code>GET/POST</code> contenant l'IP localhost :"
|
5835 |
+
|
5836 |
+
#~ msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
|
5837 |
+
#~ msgstr ""
|
5838 |
+
#~ "Bloquer les requêtes HTTP dont l'en-tête <code>HTTP_HOST</code> contient "
|
5839 |
+
#~ "une IP :"
|
5840 |
+
|
5841 |
+
#~ msgid ""
|
5842 |
+
#~ "this option will reject any request using an IP instead of a domain name "
|
5843 |
+
#~ "in the <code>Host</code> header of the HTTP request. Unless you need to "
|
5844 |
+
#~ "connect to your site using its IP address, (e.g. %s), enabling this "
|
5845 |
+
#~ "option will block a lot of hackers scanners because such applications "
|
5846 |
+
#~ "scan IPs rather than domain names."
|
5847 |
+
#~ msgstr ""
|
5848 |
+
#~ "cette option rejette toute requête HTTP contenant une adresse IP au lieu "
|
5849 |
+
#~ "d'un nom de domaine dans son en-tête <code>Host</code>. Sauf si vous avez "
|
5850 |
+
#~ "besoin de vous connecter à votre site en utilisant son adresse IP (ex: "
|
5851 |
+
#~ "%s), activer cette option bloquera de nombreux scanners de vulnérabilité "
|
5852 |
+
#~ "car ces application trouvent les sites en scannant les plages d'adresses "
|
5853 |
+
#~ "IP plutôt que les noms de domaine. "
|
5854 |
+
|
5855 |
+
#~ msgid "Scan traffic coming from localhost and private IP address spaces:"
|
5856 |
+
#~ msgstr ""
|
5857 |
+
#~ "Filtrer les connexions provenant de localhost et d'adresses IP "
|
5858 |
+
#~ "privées :"
|
5859 |
+
|
5860 |
+
#~ msgid ""
|
5861 |
+
#~ "Set <code>X-Content-Type-Options</code> to protect against MIME type "
|
5862 |
+
#~ "confusion attacks:"
|
5863 |
+
#~ msgstr ""
|
5864 |
+
#~ "Activer <code>X-Content-Type-Options</code> pour protéger contre les "
|
5865 |
+
#~ "attaques basées sur la confusion du type MIME :"
|
5866 |
+
|
5867 |
+
#~ msgid ""
|
5868 |
+
#~ "this header will send the nosniff value to instruct the browser to "
|
5869 |
+
#~ "disable content or MIME sniffing and to use the content-type returned by "
|
5870 |
+
#~ "the server. Some browsers try to guess (sniff) and override the content-"
|
5871 |
+
#~ "type by looking at the content itself which, in some cases, could lead to "
|
5872 |
+
#~ "security issues such as MIME Confusion Attacks."
|
5873 |
+
#~ msgstr ""
|
5874 |
+
#~ "cet en-tête enverra la valeur \"nosniff\" pour indiquer au navigateur de "
|
5875 |
+
#~ "désactiver le reniflage de contenu ou type MIME et d'utiliser le type "
|
5876 |
+
#~ "retourné par le serveur. Certains navigateurs tentent de deviner (sniff) "
|
5877 |
+
#~ "et de contourner le type de contenu en regardant le contenu lui-même ce "
|
5878 |
+
#~ "qui, dans certains cas, peut entraîner des problèmes de sécurité tels que "
|
5879 |
+
#~ "les attaques basées sur la confusion du type MIME."
|
5880 |
+
|
5881 |
+
#~ msgid ""
|
5882 |
+
#~ "Set <code>X-Frame-Options</code> to protect against clickjacking attempts:"
|
5883 |
+
#~ msgstr ""
|
5884 |
+
#~ "Activer <code>X-Frame-Options</code> pour protéger contre les attaques de "
|
5885 |
+
#~ "détournement de clic (clickjacking) :"
|
5886 |
+
|
5887 |
+
#~ msgid ""
|
5888 |
+
#~ "this header indicates a policy whether a browser must not allow to render "
|
5889 |
+
#~ "a page in a <frame> or <iframe>. Hosts can declare this "
|
5890 |
+
#~ "policy in the header of their HTTP responses to prevent clickjacking "
|
5891 |
+
#~ "attacks, by ensuring that their content is not embedded into other pages "
|
5892 |
+
#~ "or frames. NinjaFirewall accepts two different values:"
|
5893 |
+
#~ msgstr ""
|
5894 |
+
#~ "cet en-tête informe le navigateur s'il doit autoriser ou non l'affichage "
|
5895 |
+
#~ "d'une page dans une <frame> ou <iframe>. Cela permet "
|
5896 |
+
#~ "d'empêcher les attaques de clickjacking, en veillant à ce que le contenu "
|
5897 |
+
#~ "d'une page ne sont pas intégré dans d'autres pages ou cadres, notamment "
|
5898 |
+
#~ "d'un autre site. NinjaFirewall accepte deux valeurs différentes :"
|
5899 |
+
|
5900 |
+
#~ msgid ""
|
5901 |
+
#~ "a browser receiving content with this header must not display this "
|
5902 |
+
#~ "content in any frame from a page of different origin than the content "
|
5903 |
+
#~ "itself."
|
5904 |
+
#~ msgstr ""
|
5905 |
+
#~ "un navigateur ne doit pas afficher le contenu dans une <frame> ou "
|
5906 |
+
#~ "<iframe> d'une page d'origine différente que le contenu lui-même."
|
5907 |
+
|
5908 |
+
#~ msgid ""
|
5909 |
+
#~ "a browser receiving content with this header must not display this "
|
5910 |
+
#~ "content in any frame."
|
5911 |
+
#~ msgstr ""
|
5912 |
+
#~ "un navigateur ne doit jamais afficher le contenu dans une <frame> "
|
5913 |
+
#~ "ou <iframe>"
|
5914 |
+
|
5915 |
+
#~ msgid ""
|
5916 |
+
#~ "Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
|
5917 |
+
#~ "browsers):"
|
5918 |
+
#~ msgstr ""
|
5919 |
+
#~ "Activer <code>X-XSS-Protection</code> (IE/Edge, Opera, Chrome et Safari)"
|
5920 |
+
|
5921 |
+
#~ msgid ""
|
5922 |
+
#~ "this header allows browsers to identify and block XSS attacks by "
|
5923 |
+
#~ "preventing malicious scripts from executing. It is enabled by default on "
|
5924 |
+
#~ "all compatible browsers."
|
5925 |
+
#~ msgstr ""
|
5926 |
+
#~ "cet en-tête permet aux navigateurs compatibles d'identifier et bloquer "
|
5927 |
+
#~ "les attaques XSS en empêchant un script malveillant de s'exécuter. Notez "
|
5928 |
+
#~ "que cette option est activée par défaut sur ces navigateurs."
|
5929 |
+
|
5930 |
+
#~ msgid ""
|
5931 |
+
#~ "Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks:"
|
5932 |
+
#~ msgstr ""
|
5933 |
+
#~ "Activer la propriété <code>SameSite</code> pour tous les cookies afin "
|
5934 |
+
#~ "d'atténuer les attaques CSRF :"
|
5935 |
+
|
5936 |
+
#~ msgid ""
|
5937 |
+
#~ "adding this flag to cookies helps to mitigate the risk of CSRF (cross-"
|
5938 |
+
#~ "site request forgery) attacks because cookies can only be sent in "
|
5939 |
+
#~ "requests originating from the same origin as the target domain."
|
5940 |
+
#~ msgstr ""
|
5941 |
+
#~ "cette protection permet de diminuer les risques d'attaques CSRF "
|
5942 |
+
#~ "(injection de requête illégitime par rebond), car les cookies ne peuvent "
|
5943 |
+
#~ "être envoyés que dans des requêtes provenant de la même origine que le "
|
5944 |
+
#~ "domaine cible."
|
5945 |
+
|
5946 |
+
#~ msgid ""
|
5947 |
+
#~ "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
|
5948 |
+
#~ msgstr ""
|
5949 |
+
#~ "Activer la propriété <code>HttpOnly</code> pour tous les cookies afin "
|
5950 |
+
#~ "d'atténuer les menaces XSS qui génèrent des vols de cookies :"
|
5951 |
+
|
5952 |
+
#~ msgid ""
|
5953 |
+
#~ "adding this flag to cookies helps to mitigate the risk of cross-site "
|
5954 |
+
#~ "scripting by preventing them from being accessed through client-side "
|
5955 |
+
#~ "scripts. NinjaFirewall can hook all cookies sent by your blog, its "
|
5956 |
+
#~ "plugins or any other PHP script, add the <code>HttpOnly</code> flag if it "
|
5957 |
+
#~ "is missing, and re-inject those cookies back into your server HTTP "
|
5958 |
+
#~ "response headers right before they are sent to your visitors. Note that "
|
5959 |
+
#~ "WordPress sets that flag on the logged in user cookies only."
|
5960 |
+
#~ msgstr ""
|
5961 |
+
#~ "cette protection permet de diminuer les risques d'attaques XSS en "
|
5962 |
+
#~ "empêchant JavaScript d'accéder aux cookies de l'utilisateur. "
|
5963 |
+
#~ "NinjaFirewall peut intercepter les cookies envoyés par vos scripts PHP, "
|
5964 |
+
#~ "activer la propriété <code>HttpOnly</code> si elle est manquante, puis "
|
5965 |
+
#~ "réinjecter les cookies dans la réponse HTTP juste avant que celle-ci ne "
|
5966 |
+
#~ "soit envoyée à vos visiteurs."
|
5967 |
+
|
5968 |
+
#~ msgid ""
|
5969 |
+
#~ "Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
|
5970 |
+
#~ "connections to the server:"
|
5971 |
+
#~ msgstr ""
|
5972 |
+
#~ "Activer <code>Strict-Transport-Security</code> (HSTS) pour forcer les "
|
5973 |
+
#~ "connexions sécurisées vers le serveur "
|
5974 |
+
|
5975 |
+
#~ msgid ""
|
5976 |
+
#~ "this policy enforces secure HTTPS connections to the server. Web browsers "
|
5977 |
+
#~ "will not allow the user to access the web application over insecure HTTP "
|
5978 |
+
#~ "protocol. It helps to defend against cookie hijacking and Man-in-the-"
|
5979 |
+
#~ "middle attacks. Most recent browsers support HSTS headers."
|
5980 |
+
#~ msgstr ""
|
5981 |
+
#~ "cette politique force les connexions HTTPS sécurisées vers le serveur. "
|
5982 |
+
#~ "Les navigateurs n'accepteront pas de se connecter au site si la connexion "
|
5983 |
+
#~ "n'est pas sécurisée (HTTPS). Cela permet de se défendre contre les "
|
5984 |
+
#~ "détournements de cookies ou les attaques du type \"Man-in-the-middle\". "
|
5985 |
+
#~ "La plupart des navigateurs récents sont compatibles avec cette politique."
|
5986 |
+
|
5987 |
+
#~ msgid "Set <code>Content-Security-Policy</code>:"
|
5988 |
+
#~ msgstr "Activer <code>Content-Security-Policy</code> :"
|
5989 |
+
|
5990 |
+
#~ msgid ""
|
5991 |
+
#~ "this policy helps to mitigate threats such as XSS, phishing and "
|
5992 |
+
#~ "clickjacking attacks. It covers JavaScript, CSS, HTML frames, web "
|
5993 |
+
#~ "workers, fonts, images, objects (Java, ActiveX, audio and video files), "
|
5994 |
+
#~ "and other HTML5 features."
|
5995 |
+
#~ msgstr ""
|
5996 |
+
#~ "cette politique aide pour bloquer les attaques XSS notamment. Elle couvre "
|
5997 |
+
#~ "le code JavaScript, les styles CSS, frames/iframes HTML, polices, images, "
|
5998 |
+
#~ "objets (Java, ActiveX, fichiers audio et video), mais aussi les WebSocket."
|
5999 |
+
|
6000 |
+
#~ msgid "Set <code>Referrer-Policy</code>:"
|
6001 |
+
#~ msgstr "Activer <code>Referrer-Policy</code> :"
|
6002 |
+
|
6003 |
+
#~ msgid ""
|
6004 |
+
#~ "this HTTP header governs which referrer information, sent in the Referer "
|
6005 |
+
#~ "header, should be included with requests made."
|
6006 |
+
#~ msgstr ""
|
6007 |
+
#~ "cet en-tête HTTP détermine quelles informations de provenance doivent "
|
6008 |
+
#~ "être incluses dans l'en-tête Referer."
|
6009 |
+
|
6010 |
+
#~ msgid "Block PHP built-in wrappers:"
|
6011 |
+
#~ msgstr "Bloquer les gestionnaires (wrappers) PHP dangereux :"
|
6012 |
+
|
6013 |
+
#~ msgid "Block serialized PHP objects:"
|
6014 |
+
#~ msgstr "Bloquer les objets PHP sérialisés :"
|
6015 |
+
|
6016 |
+
#~ msgid "Hide PHP notice and error messages:"
|
6017 |
+
#~ msgstr "Masquer les messages d'erreur de PHP :"
|
6018 |
+
|
6019 |
+
#~ msgid ""
|
6020 |
+
#~ "this option lets you hide errors returned by your scripts. Such errors "
|
6021 |
+
#~ "can leak sensitive informations which can be exploited by hackers."
|
6022 |
+
#~ msgstr ""
|
6023 |
+
#~ "vous permet de masquer les erreurs retournées par PHP. Ces erreurs "
|
6024 |
+
#~ "peuvent afficher des informations sensibles qui peuvent être exploitées "
|
6025 |
+
#~ "ultérieurement par des pirates."
|
6026 |
+
|
6027 |
+
#~ msgid ""
|
6028 |
+
#~ "Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
6029 |
+
#~ "<code>PATH_INFO</code>:"
|
6030 |
+
#~ msgstr ""
|
6031 |
+
#~ "Nettoyer <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
6032 |
+
#~ "<code>PATH_INFO</code> :"
|
6033 |
+
|
6034 |
+
#~ msgid ""
|
6035 |
+
#~ "this option can sanitise any dangerous characters found in those 3 server "
|
6036 |
+
#~ "variables to prevent various XSS and database injection attempts."
|
6037 |
+
#~ msgstr ""
|
6038 |
+
#~ "activez ces options si vous souhaitez que le pare-feu nettoie ces trois "
|
6039 |
+
#~ "variables."
|
6040 |
+
|
6041 |
+
#~ msgid ""
|
6042 |
+
#~ "Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP "
|
6043 |
+
#~ "requests:"
|
6044 |
+
#~ msgstr ""
|
6045 |
+
#~ "Bloquer les requêtes HTTP contenant la variable <code>DOCUMENT_ROOT</"
|
6046 |
+
#~ "code> (%s) :"
|
6047 |
+
|
6048 |
+
#~ msgid ""
|
6049 |
+
#~ "this option will block scripts attempting to pass the "
|
6050 |
+
#~ "<code>DOCUMENT_ROOT</code> server variable in a <code>GET</code> or "
|
6051 |
+
#~ "<code>POST</code> request. Hackers use shell scripts that often need to "
|
6052 |
+
#~ "pass this value, but most legitimate programs do not."
|
6053 |
+
#~ msgstr ""
|
6054 |
+
#~ "cette option bloque toute tentative de passer la variable "
|
6055 |
+
#~ "<code>DOCUMENT_ROOT</code> dans une requête <code>GET</code> ou "
|
6056 |
+
#~ "<code>POST</code>. Les pirates utilisent souvent des scripts qui "
|
6057 |
+
#~ "nécessitent d'utiliser cette variable, mais pas la plupart des "
|
6058 |
+
#~ "applications légitimes (hormis certains scripts d'installation ou de "
|
6059 |
+
#~ "configuration)."
|
6060 |
+
|
6061 |
+
#~ msgid "Block ASCII character 0x00 (NULL byte):"
|
6062 |
+
#~ msgstr "Bloquer le caractère ASCII 0x00 (NULL byte) :"
|
6063 |
+
|
6064 |
+
#~ msgid ""
|
6065 |
+
#~ "this option will reject any <code>GET</code> or <code>POST</code> "
|
6066 |
+
#~ "request, <code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, "
|
6067 |
+
#~ "<code>PHP_SELF</code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> "
|
6068 |
+
#~ "variables containing the ASCII character 0x00 (NULL byte). Such a "
|
6069 |
+
#~ "character is dangerous and should always be rejected."
|
6070 |
+
#~ msgstr ""
|
6071 |
+
#~ "toute requête <code>GET</code> ou <code>POST</code>, ainsi que toute "
|
6072 |
+
#~ "variable <code>HTTP_REFERER</code>, <code>HTTP_USER_AGENT</code>, "
|
6073 |
+
#~ "<code>REQUEST_URI</code>, <code>PHP_SELF</code>, <code>PATH_INFO</code> "
|
6074 |
+
#~ "contenant le caractère ASCI 0x00 (NULL byte) sera bloquée immédiatement. "
|
6075 |
+
#~ "Ce caractère est dangereux et devrait toujours être rejeté."
|
6076 |
+
|
6077 |
+
#~ msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
|
6078 |
+
#~ msgstr "Bloquer les caractères de contrôle ASCII 1 à 8 et 14 à 31 :"
|
6079 |
+
|
6080 |
+
#~ msgid ""
|
6081 |
+
#~ "this option will reject any <code>GET</code> or <code>POST</code> "
|
6082 |
+
#~ "request, <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> "
|
6083 |
+
#~ "variables containing ASCII characters from 1 to 8 and 14 to 31."
|
6084 |
+
#~ msgstr ""
|
6085 |
+
#~ "toute requête <code>GET</code> ou <code>POST</code>, ainsi que toute "
|
6086 |
+
#~ "variable <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> "
|
6087 |
+
#~ "contenant des caractères ASCII 1 à 8 et 14 à 31 sera bloquée."
|
6088 |
+
|
6089 |
+
#~ msgid ""
|
6090 |
+
#~ "By default, any logged in WordPress administrator will not be blocked by "
|
6091 |
+
#~ "NinjaFirewall. You can also add any logged in users to the whitelist "
|
6092 |
+
#~ "(make sure you trust them all before doing so).<br />This feature applies "
|
6093 |
+
#~ "to all Firewall Policies listed below, except <code>FORCE_SSL_ADMIN</"
|
6094 |
+
#~ "code>, <code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> "
|
6095 |
+
#~ "options and the <a href=\"%s\">Login Protection</a> which, if enabled, "
|
6096 |
+
#~ "are always enforced."
|
6097 |
+
#~ msgstr ""
|
6098 |
+
#~ "Par défaut, tout administrateur connecté à WordPress ne sera pas bloqué "
|
6099 |
+
#~ "par NinjaFirewall. Vous pouvez aussi ajouter à la liste blanche tous les "
|
6100 |
+
#~ "autres utilisateurs connectés (avant de le faire, assurez-vous que ce "
|
6101 |
+
#~ "sont tous des utilisateurs de confiance).<br />Cela vaut pour toutes les "
|
6102 |
+
#~ "politiques de pare-feu énumérées ci-dessous, à l'exception de "
|
6103 |
+
#~ "<code>FORCE_SSL_ADMIN</code>, <code>DISALLOW_FILE_EDIT</code>, "
|
6104 |
+
#~ "<code>DISALLOW_FILE_MODS</code> et les options de la <a href=\"%s\">Page "
|
6105 |
+
#~ "de Connexion</a> qui, si elle sont activées, seront toujours appliquées."
|
6106 |
+
|
6107 |
+
#~ msgid "Credits"
|
6108 |
+
#~ msgstr "Crédits"
|
6109 |
+
|
6110 |
+
#~ msgid ""
|
6111 |
+
#~ "NinjaFirewall security rules protect against many vulnerabilities. Some "
|
6112 |
+
#~ "of them were reported by the following companies, individuals or mailing "
|
6113 |
+
#~ "lists:"
|
6114 |
+
#~ msgstr ""
|
6115 |
+
#~ "Les règles de sécurité de NinjaFirewall protègent contre de nombreuses "
|
6116 |
+
#~ "vulnérabilités. Certaines d'entre elles ont été découvertes par les "
|
6117 |
+
#~ "entreprises, particuliers ou listes de diffusion suivantes:"
|
6118 |
+
|
6119 |
+
#~ msgid "A user attempts to gain administrative privileges (default)"
|
6120 |
+
#~ msgstr ""
|
6121 |
+
#~ "Un utilisateur a essayé d'élever ses privilèges pour devenir "
|
6122 |
+
#~ "administrateur du blog (défaut)"
|
6123 |
+
|
6124 |
+
#~ msgid ""
|
6125 |
+
#~ "Error: Your version of NinjaFirewall is too old and is not compatible "
|
6126 |
+
#~ "with those rules. Please upgrade it."
|
6127 |
+
#~ msgstr ""
|
6128 |
+
#~ "Erreur : Votre version de NinjaFirewall est trop ancienne et n'est pas "
|
6129 |
+
#~ "compatible avec ces règles de sécurité. Mettez à jour NinjaFirewall."
|
6130 |
+
|
6131 |
+
#~ msgid ""
|
6132 |
+
#~ "This notification can be turned off from NinjaFirewall \"Rules Update\" "
|
6133 |
+
#~ "page."
|
6134 |
+
#~ msgstr ""
|
6135 |
+
#~ "Cette notification peut être désactivée depuis la page \"Mise à Jour des "
|
6136 |
+
#~ "Règles\" de NinjaFirewall."
|
6137 |
+
|
6138 |
+
#~ msgid "Name"
|
6139 |
+
#~ msgstr "Nom"
|
6140 |
+
|
6141 |
+
#~ msgid "upgraded"
|
6142 |
+
#~ msgstr "mis(e) à jour"
|
6143 |
+
|
6144 |
+
#~ msgid "[NinjaFirewall] Alert:"
|
6145 |
+
#~ msgstr "[NinjaFirewall] Alerte :"
|
6146 |
+
|
6147 |
#~ msgid "About"
|
6148 |
#~ msgstr "À Propos"
|
6149 |
|
languages/ninjafirewall.pot
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
"Project-Id-Version: Stable (latest release)\n"
|
5 |
-
"POT-Creation-Date:
|
6 |
"PO-Revision-Date: 2018-04-05 22:52+0700\n"
|
7 |
"Last-Translator: NinTechNet <contact@nintechnet.com>\n"
|
8 |
"Language-Team: \n"
|
@@ -18,7 +18,7 @@ msgstr ""
|
|
18 |
"X-Poedit-SearchPath-0: .\n"
|
19 |
"X-Poedit-SearchPathExcluded-0: /languages\n"
|
20 |
|
21 |
-
#: lib/anti_malware.php:24 ninjafirewall.php:
|
22 |
msgid "Anti-Malware"
|
23 |
msgstr ""
|
24 |
|
@@ -76,7 +76,7 @@ msgstr ""
|
|
76 |
msgid "NinjaFirewall (WP Edition)"
|
77 |
msgstr ""
|
78 |
|
79 |
-
#: lib/dashboard.php:120 ninjafirewall.php:
|
80 |
msgid "Dashboard"
|
81 |
msgstr ""
|
82 |
|
@@ -88,124 +88,146 @@ msgstr ""
|
|
88 |
msgid "About..."
|
89 |
msgstr ""
|
90 |
|
91 |
-
#: lib/dashboard.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
msgid "Firewall Dashboard"
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: lib/dashboard.php:
|
96 |
msgid ""
|
97 |
"It seems that you may have another instance of NinjaFirewall running in a "
|
98 |
"parent directory. Make sure to follow these instructions:"
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: lib/dashboard.php:
|
102 |
msgid ""
|
103 |
"Temporarily disable the firewall in the parent folder by renaming its PHP "
|
104 |
"INI or .htaccess file."
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: lib/dashboard.php:
|
108 |
msgid "Install NinjaFirewall on this site in Full WAF mode."
|
109 |
msgstr ""
|
110 |
|
111 |
-
#: lib/dashboard.php:
|
112 |
msgid ""
|
113 |
"Restore the PHP INI or .htaccess in the parent folder to re-enable the "
|
114 |
"firewall."
|
115 |
msgstr ""
|
116 |
|
117 |
-
#: lib/dashboard.php:
|
118 |
msgid "Unknown error"
|
119 |
msgstr ""
|
120 |
|
121 |
-
#: lib/dashboard.php:
|
122 |
msgid "Firewall"
|
123 |
msgstr ""
|
124 |
|
125 |
-
#: lib/dashboard.php:
|
126 |
#: lib/login_protection.php:203 lib/logs_live_log.php:101
|
127 |
-
#: lib/monitoring_file_guard.php:70 lib/security_rules_update.php:
|
128 |
msgid "Enabled"
|
129 |
msgstr ""
|
130 |
|
131 |
-
#: lib/dashboard.php:
|
132 |
msgid "Mode"
|
133 |
msgstr ""
|
134 |
|
135 |
-
#: lib/dashboard.php:
|
136 |
#, php-format
|
137 |
msgid "NinjaFirewall is running in %s mode."
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: lib/dashboard.php:
|
141 |
msgid "WordPress WAF"
|
142 |
msgstr ""
|
143 |
|
144 |
-
#: lib/dashboard.php:
|
145 |
#, php-format
|
146 |
msgid ""
|
147 |
"For better protection, <a %s>click here</a> to enable its Full WAF mode."
|
148 |
msgstr ""
|
149 |
|
150 |
-
#: lib/dashboard.php:
|
151 |
msgid "Click to install NinjaFirewall in Full WAF mode."
|
152 |
msgstr ""
|
153 |
|
154 |
-
#: lib/dashboard.php:
|
155 |
msgid "Full WAF"
|
156 |
msgstr ""
|
157 |
|
158 |
-
#: lib/dashboard.php:
|
159 |
msgid "Debugging mode"
|
160 |
msgstr ""
|
161 |
|
162 |
-
#: lib/dashboard.php:
|
163 |
msgid "Enabled."
|
164 |
msgstr ""
|
165 |
|
166 |
-
#: lib/dashboard.php:
|
167 |
msgid "Click here to turn Debugging Mode off"
|
168 |
msgstr ""
|
169 |
|
170 |
-
#: lib/dashboard.php:
|
171 |
msgid "Edition"
|
172 |
msgstr ""
|
173 |
|
174 |
-
#: lib/dashboard.php:
|
175 |
-
msgid "
|
|
|
|
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: lib/dashboard.php:
|
179 |
msgid "Version"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#: lib/dashboard.php:
|
183 |
msgid "Security rules:"
|
184 |
msgstr ""
|
185 |
|
186 |
-
#: lib/dashboard.php:
|
187 |
msgid "PHP SAPI"
|
188 |
msgstr ""
|
189 |
|
190 |
-
#: lib/dashboard.php:
|
191 |
msgid "Updates"
|
192 |
msgstr ""
|
193 |
|
194 |
-
#: lib/dashboard.php:
|
195 |
msgid "Security rules updates are disabled."
|
196 |
msgstr ""
|
197 |
|
198 |
-
#: lib/dashboard.php:
|
199 |
msgid ""
|
200 |
"If you want your blog to be protected against the latest threats, enable "
|
201 |
"automatic security rules updates."
|
202 |
msgstr ""
|
203 |
|
204 |
-
#: lib/dashboard.php:
|
205 |
msgid "Admin user"
|
206 |
msgstr ""
|
207 |
|
208 |
-
#: lib/dashboard.php:
|
209 |
#, php-format
|
210 |
msgid ""
|
211 |
"You are not whitelisted. Ensure that the \"Do not block WordPress "
|
@@ -214,71 +236,71 @@ msgid ""
|
|
214 |
"your administration dashboard."
|
215 |
msgstr ""
|
216 |
|
217 |
-
#: lib/dashboard.php:
|
218 |
msgid "You are whitelisted by the firewall."
|
219 |
msgstr ""
|
220 |
|
221 |
-
#: lib/dashboard.php:
|
222 |
msgid "Restrictions"
|
223 |
msgstr ""
|
224 |
|
225 |
-
#: lib/dashboard.php:
|
226 |
msgid "Access to NinjaFirewall is restricted to specific users."
|
227 |
msgstr ""
|
228 |
|
229 |
-
#: lib/dashboard.php:
|
230 |
msgid "User session"
|
231 |
msgstr ""
|
232 |
|
233 |
-
#: lib/dashboard.php:
|
234 |
msgid ""
|
235 |
"It seems that the user session set by NinjaFirewall was not found by the "
|
236 |
"firewall script."
|
237 |
msgstr ""
|
238 |
|
239 |
-
#: lib/dashboard.php:
|
240 |
#, php-format
|
241 |
msgid ""
|
242 |
"the public key is invalid. Please <a href=\"%s\">check your configuration</"
|
243 |
"a>."
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: lib/dashboard.php:
|
247 |
msgid "No IP address restriction."
|
248 |
msgstr ""
|
249 |
|
250 |
-
#: lib/dashboard.php:
|
251 |
#, php-format
|
252 |
msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
|
253 |
msgstr ""
|
254 |
|
255 |
-
#: lib/dashboard.php:
|
256 |
#, php-format
|
257 |
msgid ""
|
258 |
"the whitelisted IP is not valid. Please <a href=\"%s\">check your "
|
259 |
"configuration</a>."
|
260 |
msgstr ""
|
261 |
|
262 |
-
#: lib/dashboard.php:
|
263 |
#: lib/wpplus.php:170
|
264 |
msgid "Centralized Logging"
|
265 |
msgstr ""
|
266 |
|
267 |
-
#: lib/dashboard.php:
|
268 |
#, php-format
|
269 |
msgid "Error: %s"
|
270 |
msgstr ""
|
271 |
|
272 |
-
#: lib/dashboard.php:
|
273 |
msgid "Source IP"
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: lib/dashboard.php:
|
277 |
#, php-format
|
278 |
msgid "You have a private IP : %s"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: lib/dashboard.php:
|
282 |
#, php-format
|
283 |
msgid ""
|
284 |
"If your site is behind a reverse proxy or a load balancer, ensure that you "
|
@@ -286,11 +308,11 @@ msgid ""
|
|
286 |
"otherwise use the NinjaFirewall %s configuration file."
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: lib/dashboard.php:
|
290 |
msgid "CDN detection"
|
291 |
msgstr ""
|
292 |
|
293 |
-
#: lib/dashboard.php:
|
294 |
#, php-format
|
295 |
msgid ""
|
296 |
"%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
|
@@ -298,7 +320,7 @@ msgid ""
|
|
298 |
"otherwise use the NinjaFirewall %s configuration file."
|
299 |
msgstr ""
|
300 |
|
301 |
-
#: lib/dashboard.php:
|
302 |
#, php-format
|
303 |
msgid ""
|
304 |
"%s detected: you seem to be using Incapsula CDN services. Ensure that you "
|
@@ -306,28 +328,28 @@ msgid ""
|
|
306 |
"otherwise use the NinjaFirewall %s configuration file."
|
307 |
msgstr ""
|
308 |
|
309 |
-
#: lib/dashboard.php:
|
310 |
msgid "Log dir"
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: lib/dashboard.php:
|
314 |
#, php-format
|
315 |
msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: lib/dashboard.php:
|
319 |
msgid "Optional configuration file"
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: lib/dashboard.php:
|
323 |
msgid "MySQLi link identifier"
|
324 |
msgstr ""
|
325 |
|
326 |
-
#: lib/dashboard.php:
|
327 |
msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
|
328 |
msgstr ""
|
329 |
|
330 |
-
#: lib/dashboard.php:
|
331 |
msgid "Help & configuration"
|
332 |
msgstr ""
|
333 |
|
@@ -341,7 +363,7 @@ msgid ""
|
|
341 |
"themes:"
|
342 |
msgstr ""
|
343 |
|
344 |
-
#: lib/dashboard_about.php:31 lib/help.php:
|
345 |
msgid "GDPR Compliance"
|
346 |
msgstr ""
|
347 |
|
@@ -411,7 +433,7 @@ msgstr ""
|
|
411 |
msgid "Select monthly stats to view..."
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: lib/event_notifications.php:34 lib/help.php:
|
415 |
msgid "Event Notifications"
|
416 |
msgstr ""
|
417 |
|
@@ -427,7 +449,8 @@ msgstr ""
|
|
427 |
msgid "WordPress admin dashboard"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: lib/event_notifications.php:55 lib/event_notifications.php:
|
|
|
431 |
msgid "Send me an alert whenever"
|
432 |
msgstr ""
|
433 |
|
@@ -504,29 +527,35 @@ msgstr ""
|
|
504 |
msgid "Updates WordPress (default)"
|
505 |
msgstr ""
|
506 |
|
507 |
-
#: lib/event_notifications.php:
|
508 |
-
msgid "
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: lib/event_notifications.php:
|
512 |
msgid ""
|
513 |
-
"An
|
514 |
"(default)"
|
515 |
msgstr ""
|
516 |
|
517 |
-
#: lib/event_notifications.php:
|
518 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
519 |
msgstr ""
|
520 |
|
521 |
-
#: lib/event_notifications.php:
|
522 |
msgid "Daily report"
|
523 |
msgstr ""
|
524 |
|
525 |
-
#: lib/event_notifications.php:
|
526 |
msgid "Send me a daily activity report"
|
527 |
msgstr ""
|
528 |
|
529 |
-
#: lib/event_notifications.php:
|
530 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
531 |
#: lib/firewall_policies.php:25 lib/login_protection.php:309
|
532 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
@@ -534,7 +563,7 @@ msgstr ""
|
|
534 |
msgid "Yes"
|
535 |
msgstr ""
|
536 |
|
537 |
-
#: lib/event_notifications.php:
|
538 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
539 |
#: lib/firewall_policies.php:26 lib/login_protection.php:309
|
540 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
@@ -542,133 +571,257 @@ msgstr ""
|
|
542 |
msgid "No"
|
543 |
msgstr ""
|
544 |
|
545 |
-
#: lib/event_notifications.php:
|
546 |
msgid "Log"
|
547 |
msgstr ""
|
548 |
|
549 |
-
#: lib/event_notifications.php:
|
550 |
msgid "Write all events to the firewall log"
|
551 |
msgstr ""
|
552 |
|
553 |
-
#: lib/event_notifications.php:
|
554 |
msgid "PHP backtrace"
|
555 |
msgstr ""
|
556 |
|
557 |
-
#: lib/event_notifications.php:
|
558 |
msgid "Attach a PHP backtrace to important notifications"
|
559 |
msgstr ""
|
560 |
|
561 |
-
#: lib/event_notifications.php:
|
562 |
msgid "Disable backtrace"
|
563 |
msgstr ""
|
564 |
|
565 |
-
#: lib/event_notifications.php:
|
566 |
msgid "Low verbosity"
|
567 |
msgstr ""
|
568 |
|
569 |
-
#: lib/event_notifications.php:
|
570 |
msgid "Medium verbosity (default)"
|
571 |
msgstr ""
|
572 |
|
573 |
-
#: lib/event_notifications.php:
|
574 |
msgid "High verbosity"
|
575 |
msgstr ""
|
576 |
|
577 |
-
#: lib/event_notifications.php:
|
578 |
#, php-format
|
579 |
msgid "<a href=\"%s\">Consult our blog</a> for more info."
|
580 |
msgstr ""
|
581 |
|
582 |
-
#: lib/event_notifications.php:
|
583 |
msgid "Contact email"
|
584 |
msgstr ""
|
585 |
|
586 |
-
#: lib/event_notifications.php:
|
587 |
msgid "Alerts should be sent to"
|
588 |
msgstr ""
|
589 |
|
590 |
-
#: lib/event_notifications.php:
|
591 |
msgid ""
|
592 |
"Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
|
593 |
"alice@example.org</code>)."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: lib/event_notifications.php:
|
597 |
msgid "Only to me, the Super Admin"
|
598 |
msgstr ""
|
599 |
|
600 |
-
#: lib/event_notifications.php:
|
601 |
msgid "default"
|
602 |
msgstr ""
|
603 |
|
604 |
-
#: lib/event_notifications.php:
|
605 |
msgid "To the administrator of the site where originated the alert"
|
606 |
msgstr ""
|
607 |
|
608 |
-
#: lib/event_notifications.php:
|
609 |
msgid "Other(s):"
|
610 |
msgstr ""
|
611 |
|
612 |
-
#: lib/event_notifications.php:
|
613 |
msgid "Save Event Notifications"
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: lib/event_notifications.php:
|
617 |
msgid "[NinjaFirewall] Daily Activity Report"
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: lib/event_notifications.php:
|
621 |
#, php-format
|
622 |
msgid "Daily activity report for: %s"
|
623 |
msgstr ""
|
624 |
|
625 |
-
#: lib/event_notifications.php:
|
626 |
msgid "Date Range Processed: Yesterday"
|
627 |
msgstr ""
|
628 |
|
629 |
-
#: lib/event_notifications.php:
|
630 |
msgid "Blocked threats:"
|
631 |
msgstr ""
|
632 |
|
633 |
-
#: lib/event_notifications.php:
|
634 |
msgid "critical:"
|
635 |
msgstr ""
|
636 |
|
637 |
-
#: lib/event_notifications.php:
|
638 |
msgid "high:"
|
639 |
msgstr ""
|
640 |
|
641 |
-
#: lib/event_notifications.php:
|
642 |
msgid "medium:"
|
643 |
msgstr ""
|
644 |
|
645 |
-
#: lib/event_notifications.php:
|
646 |
msgid "Blocked brute-force attacks:"
|
647 |
msgstr ""
|
648 |
|
649 |
-
#: lib/event_notifications.php:
|
650 |
msgid ""
|
651 |
"This notification can be turned off from NinjaFirewall \"Event Notifications"
|
652 |
"\" page."
|
653 |
msgstr ""
|
654 |
|
655 |
-
#: lib/event_notifications.php:
|
656 |
-
#: lib/
|
657 |
-
#: lib/
|
658 |
msgid "Support forum:"
|
659 |
msgstr ""
|
660 |
|
661 |
-
#: lib/event_notifications.php:
|
662 |
-
#: lib/
|
663 |
-
#: lib/
|
664 |
-
#: lib/utils.php:
|
|
|
665 |
#, php-format
|
666 |
msgid ""
|
667 |
"Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
|
668 |
"%s"
|
669 |
msgstr ""
|
670 |
|
671 |
-
#: lib/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
672 |
msgid "Firewall Options"
|
673 |
msgstr ""
|
674 |
|
@@ -678,7 +831,7 @@ msgstr ""
|
|
678 |
|
679 |
#: lib/firewall_options.php:64 lib/login_protection.php:203
|
680 |
#: lib/logs_live_log.php:101 lib/monitoring_file_guard.php:70
|
681 |
-
#: lib/security_rules_update.php:
|
682 |
msgid "Disabled"
|
683 |
msgstr ""
|
684 |
|
@@ -725,7 +878,7 @@ msgid ""
|
|
725 |
"Protection</a>."
|
726 |
msgstr ""
|
727 |
|
728 |
-
#: lib/firewall_options.php:128
|
729 |
msgid "Blocked user message"
|
730 |
msgstr ""
|
731 |
|
@@ -802,8 +955,7 @@ msgstr ""
|
|
802 |
msgid "[NinjaFirewall] Alert: Firewall is disabled"
|
803 |
msgstr ""
|
804 |
|
805 |
-
#: lib/firewall_options.php:501 lib/firewall_options.php:503
|
806 |
-
#: lib/utils.php:736
|
807 |
msgid "-Blog :"
|
808 |
msgstr ""
|
809 |
|
@@ -826,15 +978,15 @@ msgid ""
|
|
826 |
"Someone imported a new configuration which overrode the firewall settings:"
|
827 |
msgstr ""
|
828 |
|
829 |
-
#: lib/firewall_options.php:520
|
830 |
msgid "-User :"
|
831 |
msgstr ""
|
832 |
|
833 |
-
#: lib/firewall_options.php:521
|
834 |
msgid "-IP :"
|
835 |
msgstr ""
|
836 |
|
837 |
-
#: lib/firewall_options.php:522
|
838 |
msgid "-Date :"
|
839 |
msgstr ""
|
840 |
|
@@ -844,7 +996,7 @@ msgid ""
|
|
844 |
"This feature is only available when NinjaFirewall is running in %s mode."
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: lib/firewall_policies.php:62
|
848 |
msgid "Firewall Policies"
|
849 |
msgstr ""
|
850 |
|
@@ -856,15 +1008,15 @@ msgstr ""
|
|
856 |
msgid "No action taken."
|
857 |
msgstr ""
|
858 |
|
859 |
-
#: lib/firewall_policies.php:85 lib/help.php:
|
860 |
msgid "Basic Policies"
|
861 |
msgstr ""
|
862 |
|
863 |
-
#: lib/firewall_policies.php:86 lib/help.php:
|
864 |
msgid "Intermediate Policies"
|
865 |
msgstr ""
|
866 |
|
867 |
-
#: lib/firewall_policies.php:87 lib/help.php:
|
868 |
msgid "Advanced Policies"
|
869 |
msgstr ""
|
870 |
|
@@ -884,11 +1036,11 @@ msgstr ""
|
|
884 |
msgid "HTTPS traffic only"
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: lib/firewall_policies.php:141 lib/help.php:
|
888 |
msgid "Uploads"
|
889 |
msgstr ""
|
890 |
|
891 |
-
#: lib/firewall_policies.php:144
|
892 |
msgid "File Uploads"
|
893 |
msgstr ""
|
894 |
|
@@ -904,7 +1056,7 @@ msgstr ""
|
|
904 |
msgid "Disallow uploads"
|
905 |
msgstr ""
|
906 |
|
907 |
-
#: lib/firewall_policies.php:152
|
908 |
msgid "Sanitise filenames"
|
909 |
msgstr ""
|
910 |
|
@@ -912,129 +1064,140 @@ msgstr ""
|
|
912 |
msgid "substitution character:"
|
913 |
msgstr ""
|
914 |
|
915 |
-
#: lib/firewall_policies.php:
|
916 |
msgid "Block direct access to any PHP file located in one of these directories"
|
917 |
msgstr ""
|
918 |
|
919 |
-
#: lib/firewall_policies.php:
|
920 |
msgid ""
|
921 |
"NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
|
922 |
"this option is enabled."
|
923 |
msgstr ""
|
924 |
|
925 |
-
#: lib/firewall_policies.php:
|
926 |
msgid ""
|
927 |
"Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
|
928 |
"by your visitors, we recommend to enable this option."
|
929 |
msgstr ""
|
930 |
|
931 |
-
#: lib/firewall_policies.php:
|
932 |
msgid "General"
|
933 |
msgstr ""
|
934 |
|
935 |
-
#: lib/firewall_policies.php:
|
936 |
msgid "Block attempts to modify important WordPress settings"
|
937 |
msgstr ""
|
938 |
|
939 |
-
#: lib/firewall_policies.php:
|
940 |
msgid "Block user accounts creation"
|
941 |
msgstr ""
|
942 |
|
943 |
-
#: lib/firewall_policies.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
944 |
msgid "WordPress AJAX"
|
945 |
msgstr ""
|
946 |
|
947 |
-
#: lib/firewall_policies.php:
|
948 |
msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
|
949 |
msgstr ""
|
950 |
|
951 |
-
#: lib/firewall_policies.php:
|
952 |
#, php-format
|
953 |
msgid ""
|
954 |
"Your server IP (%s), localhost and private IP addresses will not be affected "
|
955 |
"by this policy."
|
956 |
msgstr ""
|
957 |
|
958 |
-
#: lib/firewall_policies.php:
|
959 |
msgid "Protect against username enumeration"
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: lib/firewall_policies.php:
|
963 |
msgid "Through the author archives"
|
964 |
msgstr ""
|
965 |
|
966 |
-
#: lib/firewall_policies.php:
|
967 |
msgid "Through the login page"
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: lib/firewall_policies.php:
|
971 |
msgid "Through the WordPress REST API"
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: lib/firewall_policies.php:
|
975 |
msgid "WordPress REST API"
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: lib/firewall_policies.php:
|
979 |
msgid "Block any access to the API"
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: lib/firewall_policies.php:
|
983 |
msgid "WordPress XML-RPC API"
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: lib/firewall_policies.php:
|
987 |
msgid "Block <code>system.multicall</code> method"
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: lib/firewall_policies.php:
|
991 |
msgid "Block Pingbacks"
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: lib/firewall_policies.php:
|
995 |
msgid ""
|
996 |
"Disabling access to the REST or XML-RPC API may break some functionality on "
|
997 |
"your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact "
|
998 |
"Form 7 etc)."
|
999 |
msgstr ""
|
1000 |
|
1001 |
-
#: lib/firewall_policies.php:
|
1002 |
msgid "Block <code>POST</code> requests in the themes folder"
|
1003 |
msgstr ""
|
1004 |
|
1005 |
-
#: lib/firewall_policies.php:
|
1006 |
-
msgid "Force
|
1007 |
msgstr ""
|
1008 |
|
1009 |
-
#: lib/firewall_policies.php:
|
1010 |
msgid "Disable the plugin and theme editor"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
-
#: lib/firewall_policies.php:
|
1014 |
msgid "Disable plugin and theme update/installation"
|
1015 |
msgstr ""
|
1016 |
|
1017 |
-
#: lib/firewall_policies.php:
|
1018 |
msgid "Disable the fatal error handler"
|
1019 |
msgstr ""
|
1020 |
|
1021 |
-
#: lib/firewall_policies.php:
|
1022 |
msgid "Users Whitelist"
|
1023 |
msgstr ""
|
1024 |
|
1025 |
-
#: lib/firewall_policies.php:
|
1026 |
msgid "Add the Administrator to the whitelist (default)."
|
1027 |
msgstr ""
|
1028 |
|
1029 |
-
#: lib/firewall_policies.php:
|
1030 |
msgid "Add all logged in users to the whitelist."
|
1031 |
msgstr ""
|
1032 |
|
1033 |
-
#: lib/firewall_policies.php:
|
1034 |
msgid "Disable users whitelist."
|
1035 |
msgstr ""
|
1036 |
|
1037 |
-
#: lib/firewall_policies.php:
|
1038 |
msgid ""
|
1039 |
"Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
|
1040 |
"<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
|
@@ -1042,268 +1205,268 @@ msgid ""
|
|
1042 |
"always enforced."
|
1043 |
msgstr ""
|
1044 |
|
1045 |
-
#: lib/firewall_policies.php:
|
1046 |
msgid "HTTP GET variable"
|
1047 |
msgstr ""
|
1048 |
|
1049 |
-
#: lib/firewall_policies.php:
|
1050 |
msgid "Scan <code>GET</code> variable"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
-
#: lib/firewall_policies.php:
|
1054 |
msgid "Sanitise <code>GET</code> variable"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
-
#: lib/firewall_policies.php:
|
1058 |
msgid "HTTP POST variable"
|
1059 |
msgstr ""
|
1060 |
|
1061 |
-
#: lib/firewall_policies.php:
|
1062 |
msgid "Scan <code>POST</code> variable"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
-
#: lib/firewall_policies.php:
|
1066 |
msgid "Sanitise <code>POST</code> variable"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
-
#: lib/firewall_policies.php:
|
1070 |
msgid "Do not enable this option unless you know what you are doing!"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
-
#: lib/firewall_policies.php:
|
1074 |
msgid "Decode Base64-encoded <code>POST</code> variable"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
-
#: lib/firewall_policies.php:
|
1078 |
msgid "HTTP REQUEST variable"
|
1079 |
msgstr ""
|
1080 |
|
1081 |
-
#: lib/firewall_policies.php:
|
1082 |
msgid "Sanitise <code>REQUEST</code> variable"
|
1083 |
msgstr ""
|
1084 |
|
1085 |
-
#: lib/firewall_policies.php:
|
1086 |
msgid "Cookies"
|
1087 |
msgstr ""
|
1088 |
|
1089 |
-
#: lib/firewall_policies.php:
|
1090 |
msgid "Scan cookies"
|
1091 |
msgstr ""
|
1092 |
|
1093 |
-
#: lib/firewall_policies.php:
|
1094 |
msgid "Sanitise cookies"
|
1095 |
msgstr ""
|
1096 |
|
1097 |
-
#: lib/firewall_policies.php:
|
1098 |
msgid "HTTP_USER_AGENT server variable"
|
1099 |
msgstr ""
|
1100 |
|
1101 |
-
#: lib/firewall_policies.php:
|
1102 |
msgid "Scan <code>HTTP_USER_AGENT</code>"
|
1103 |
msgstr ""
|
1104 |
|
1105 |
-
#: lib/firewall_policies.php:
|
1106 |
msgid "Sanitise <code>HTTP_USER_AGENT</code>"
|
1107 |
msgstr ""
|
1108 |
|
1109 |
-
#: lib/firewall_policies.php:
|
1110 |
msgid "Block suspicious bots/scanners"
|
1111 |
msgstr ""
|
1112 |
|
1113 |
-
#: lib/firewall_policies.php:
|
1114 |
msgid "HTTP_REFERER server variable"
|
1115 |
msgstr ""
|
1116 |
|
1117 |
-
#: lib/firewall_policies.php:
|
1118 |
msgid "Scan <code>HTTP_REFERER</code>"
|
1119 |
msgstr ""
|
1120 |
|
1121 |
-
#: lib/firewall_policies.php:
|
1122 |
msgid "Sanitise <code>HTTP_REFERER</code>"
|
1123 |
msgstr ""
|
1124 |
|
1125 |
-
#: lib/firewall_policies.php:
|
1126 |
msgid ""
|
1127 |
"Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
|
1128 |
"code> header"
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: lib/firewall_policies.php:
|
1132 |
msgid ""
|
1133 |
"Keep this option disabled if you are using scripts like Paypal IPN, "
|
1134 |
"WordPress WP-Cron etc"
|
1135 |
msgstr ""
|
1136 |
|
1137 |
-
#: lib/firewall_policies.php:
|
1138 |
msgid "Block localhost IP in <code>GET/POST</code> request"
|
1139 |
msgstr ""
|
1140 |
|
1141 |
-
#: lib/firewall_policies.php:
|
1142 |
msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
-
#: lib/firewall_policies.php:
|
1146 |
msgid "Scan traffic coming from localhost and private IP address spaces"
|
1147 |
msgstr ""
|
1148 |
|
1149 |
-
#: lib/firewall_policies.php:
|
1150 |
#, php-format
|
1151 |
msgid ""
|
1152 |
"The \"HTTP response headers\" options below are disabled because the %s PHP "
|
1153 |
"function is not available on your server."
|
1154 |
msgstr ""
|
1155 |
|
1156 |
-
#: lib/firewall_policies.php:
|
1157 |
msgid "HTTP response headers"
|
1158 |
msgstr ""
|
1159 |
|
1160 |
-
#: lib/firewall_policies.php:
|
1161 |
#, php-format
|
1162 |
msgid "Set %s to protect against MIME type confusion attacks"
|
1163 |
msgstr ""
|
1164 |
|
1165 |
-
#: lib/firewall_policies.php:
|
1166 |
#, php-format
|
1167 |
msgid "Set %s to protect against clickjacking attempts"
|
1168 |
msgstr ""
|
1169 |
|
1170 |
-
#: lib/firewall_policies.php:
|
1171 |
msgid ""
|
1172 |
"Setting this option to <code>DENY</code> may break some functionality on "
|
1173 |
"your blog, its themes or plugins."
|
1174 |
msgstr ""
|
1175 |
|
1176 |
-
#: lib/firewall_policies.php:
|
1177 |
#, php-format
|
1178 |
msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
|
1179 |
msgstr ""
|
1180 |
|
1181 |
-
#: lib/firewall_policies.php:
|
1182 |
-
#: lib/firewall_policies.php:
|
1183 |
#, php-format
|
1184 |
msgid "Set to %s"
|
1185 |
msgstr ""
|
1186 |
|
1187 |
-
#: lib/firewall_policies.php:
|
1188 |
#, php-format
|
1189 |
msgid "Force %s flag on all cookies to mitigate CSRF attacks"
|
1190 |
msgstr ""
|
1191 |
|
1192 |
-
#: lib/firewall_policies.php:
|
1193 |
#, php-format
|
1194 |
msgid "Force %s flag on all cookies to mitigate XSS attacks"
|
1195 |
msgstr ""
|
1196 |
|
1197 |
-
#: lib/firewall_policies.php:
|
1198 |
msgid ""
|
1199 |
"If your PHP scripts use cookies that need to be accessed from JavaScript, "
|
1200 |
"you should not enable this option."
|
1201 |
msgstr ""
|
1202 |
|
1203 |
-
#: lib/firewall_policies.php:
|
1204 |
msgid ""
|
1205 |
"HSTS headers can only be set when you are accessing your site over HTTPS."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
-
#: lib/firewall_policies.php:
|
1209 |
#, php-format
|
1210 |
msgid "Set %s (HSTS) to enforce secure connections to the server"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
-
#: lib/firewall_policies.php:
|
1214 |
msgid "Set \"max-age\" to 0"
|
1215 |
msgstr ""
|
1216 |
|
1217 |
-
#: lib/firewall_policies.php:
|
1218 |
msgid "1 month"
|
1219 |
msgstr ""
|
1220 |
|
1221 |
-
#: lib/firewall_policies.php:
|
1222 |
msgid "6 months"
|
1223 |
msgstr ""
|
1224 |
|
1225 |
-
#: lib/firewall_policies.php:
|
1226 |
msgid "1 year"
|
1227 |
msgstr ""
|
1228 |
|
1229 |
-
#: lib/firewall_policies.php:
|
1230 |
msgid "Apply to subdomains"
|
1231 |
msgstr ""
|
1232 |
|
1233 |
-
#: lib/firewall_policies.php:
|
1234 |
#, php-format
|
1235 |
msgid "Set %s for the website frontend"
|
1236 |
msgstr ""
|
1237 |
|
1238 |
-
#: lib/firewall_policies.php:
|
1239 |
msgid "This CSP header will apply to the website frontend only."
|
1240 |
msgstr ""
|
1241 |
|
1242 |
-
#: lib/firewall_policies.php:
|
1243 |
#, php-format
|
1244 |
msgid "Set %s for the WordPress admin dashboard"
|
1245 |
msgstr ""
|
1246 |
|
1247 |
-
#: lib/firewall_policies.php:
|
1248 |
msgid "This CSP header will apply to the WordPress admin dashboard only."
|
1249 |
msgstr ""
|
1250 |
|
1251 |
-
#: lib/firewall_policies.php:
|
1252 |
#, php-format
|
1253 |
msgid "Set %s (Chrome, Opera and Firefox browsers)"
|
1254 |
msgstr ""
|
1255 |
|
1256 |
-
#: lib/firewall_policies.php:
|
1257 |
msgid ""
|
1258 |
"Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
|
1259 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
|
1260 |
msgstr ""
|
1261 |
|
1262 |
-
#: lib/firewall_policies.php:
|
1263 |
msgid "Block serialized PHP objects in the following global variables"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
-
#: lib/firewall_policies.php:
|
1267 |
msgid "Hide PHP notice and error messages"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
-
#: lib/firewall_policies.php:
|
1271 |
msgid "Sanitise <code>PHP_SELF</code>"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
-
#: lib/firewall_policies.php:
|
1275 |
msgid "Sanitise <code>PATH_TRANSLATED</code>"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
-
#: lib/firewall_policies.php:
|
1279 |
msgid "Sanitise <code>PATH_INFO</code>"
|
1280 |
msgstr ""
|
1281 |
|
1282 |
-
#: lib/firewall_policies.php:
|
1283 |
msgid "This option is not compatible with your actual configuration."
|
1284 |
msgstr ""
|
1285 |
|
1286 |
-
#: lib/firewall_policies.php:
|
1287 |
msgid "Various"
|
1288 |
msgstr ""
|
1289 |
|
1290 |
-
#: lib/firewall_policies.php:
|
1291 |
msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
|
1292 |
msgstr ""
|
1293 |
|
1294 |
-
#: lib/firewall_policies.php:
|
1295 |
msgid "Block ASCII character 0x00 (NULL byte)"
|
1296 |
msgstr ""
|
1297 |
|
1298 |
-
#: lib/firewall_policies.php:
|
1299 |
msgid "Block ASCII control characters 1 to 8 and 14 to 31"
|
1300 |
msgstr ""
|
1301 |
|
1302 |
-
#: lib/firewall_policies.php:
|
1303 |
msgid "Save Firewall Policies"
|
1304 |
msgstr ""
|
1305 |
|
1306 |
-
#: lib/firewall_policies.php:
|
1307 |
msgid "Restore Default Values"
|
1308 |
msgstr ""
|
1309 |
|
@@ -1388,10 +1551,6 @@ msgid ""
|
|
1388 |
"too."
|
1389 |
msgstr ""
|
1390 |
|
1391 |
-
#: lib/help.php:90
|
1392 |
-
msgid "Error code and message to return"
|
1393 |
-
msgstr ""
|
1394 |
-
|
1395 |
#: lib/help.php:92
|
1396 |
msgid ""
|
1397 |
"Lets you customize the HTTP error code returned by NinjaFirewall when "
|
@@ -1440,7 +1599,7 @@ msgid ""
|
|
1440 |
"configuration to an earlier date, select the corresponding file in the list."
|
1441 |
msgstr ""
|
1442 |
|
1443 |
-
#: lib/help.php:
|
1444 |
#, php-format
|
1445 |
msgid ""
|
1446 |
"Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
|
@@ -1448,11 +1607,11 @@ msgid ""
|
|
1448 |
"your WordPress index page."
|
1449 |
msgstr ""
|
1450 |
|
1451 |
-
#: lib/help.php:
|
1452 |
msgid "Policies overview"
|
1453 |
msgstr ""
|
1454 |
|
1455 |
-
#: lib/help.php:
|
1456 |
#, php-format
|
1457 |
msgid ""
|
1458 |
"Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
|
@@ -1463,35 +1622,35 @@ msgid ""
|
|
1463 |
"<code><a href=\"%s\">$_SERVER</a></code> in HTTP and/or HTTPS mode."
|
1464 |
msgstr ""
|
1465 |
|
1466 |
-
#: lib/help.php:
|
1467 |
msgid ""
|
1468 |
"Use the options below to enable, disable or to tweak these rules according "
|
1469 |
"to your needs."
|
1470 |
msgstr ""
|
1471 |
|
1472 |
-
#: lib/help.php:
|
1473 |
msgid "Scan and Sanitise"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
-
#: lib/help.php:
|
1477 |
msgid ""
|
1478 |
"You can choose to scan and reject dangerous content but also to sanitise "
|
1479 |
"requests and variables. Those two actions are different and can be combined "
|
1480 |
"together for better security."
|
1481 |
msgstr ""
|
1482 |
|
1483 |
-
#: lib/help.php:
|
1484 |
msgid ""
|
1485 |
-
"Scan
|
1486 |
"request and return an HTTP error code and message (defined in the \"Firewall "
|
1487 |
"Options\" page). The user request will fail and the connection will be "
|
1488 |
"closed immediately."
|
1489 |
msgstr ""
|
1490 |
|
1491 |
-
#: lib/help.php:
|
1492 |
#, php-format
|
1493 |
msgid ""
|
1494 |
-
"Sanitise
|
1495 |
"escaping characters that can be used to exploit vulnerabilities (%s) and "
|
1496 |
"replacing <code><</code> and <code>></code> with their corresponding "
|
1497 |
"HTML entities (<code>&lt;</code>, <code>&gt;</code>). If it is a "
|
@@ -1499,80 +1658,74 @@ msgid ""
|
|
1499 |
"sanitised."
|
1500 |
msgstr ""
|
1501 |
|
1502 |
-
#: lib/help.php:
|
1503 |
msgid ""
|
1504 |
"This action will be performed when the filtering process is over, right "
|
1505 |
"before NinjaFirewall forwards the request to your PHP script."
|
1506 |
msgstr ""
|
1507 |
|
1508 |
-
#: lib/help.php:
|
1509 |
msgid ""
|
1510 |
"If you enabled <code>POST</code> requests sanitising, articles and messages "
|
1511 |
"posted by your visitors could be corrupted with excessive backslashes or "
|
1512 |
"substitution characters."
|
1513 |
msgstr ""
|
1514 |
|
1515 |
-
#: lib/help.php:
|
1516 |
msgid "Whether to filter HTTP and/or HTTPS traffic"
|
1517 |
msgstr ""
|
1518 |
|
1519 |
-
#: lib/help.php:
|
1520 |
-
msgid "
|
1521 |
-
msgstr ""
|
1522 |
-
|
1523 |
-
#: lib/help.php:166
|
1524 |
-
msgid "whether to allow/disallow file uploads."
|
1525 |
-
msgstr ""
|
1526 |
-
|
1527 |
-
#: lib/help.php:167
|
1528 |
-
msgid "Sanitise filenames:"
|
1529 |
msgstr ""
|
1530 |
|
1531 |
-
#: lib/help.php:
|
1532 |
msgid ""
|
1533 |
-
"
|
1534 |
"code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
|
1535 |
"<code>_</code> will be removed from the filename and replaced with the "
|
1536 |
"substitution character."
|
1537 |
msgstr ""
|
1538 |
|
1539 |
-
#: lib/help.php:
|
1540 |
msgid ""
|
1541 |
"Whether to block direct access to PHP files located in specific WordPress "
|
1542 |
"directories."
|
1543 |
msgstr ""
|
1544 |
|
1545 |
-
#: lib/help.php:
|
1546 |
msgid ""
|
1547 |
-
"
|
1548 |
"vulnerability, using a backdoor etc) to modify some important WordPress "
|
1549 |
"settings. This policy will also send you an alert by email with all details "
|
1550 |
"regarding the issue. It is enabled by default."
|
1551 |
msgstr ""
|
1552 |
|
1553 |
-
#: lib/help.php:
|
1554 |
msgid ""
|
1555 |
-
"
|
1556 |
"vulnerability, using a backdoor etc) to create a user account. If you allow "
|
1557 |
"user registration, you should not enable it."
|
1558 |
msgstr ""
|
1559 |
|
1560 |
-
#: lib/help.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
1561 |
#, php-format
|
1562 |
msgid ""
|
1563 |
-
"
|
1564 |
"This policy will try to detect and immediately block bots and malicious "
|
1565 |
"scanners trying to access it. The server IP address (%s) and private IP "
|
1566 |
"addresses will not be blocked."
|
1567 |
msgstr ""
|
1568 |
|
1569 |
-
#: lib/help.php:
|
1570 |
-
msgid "Protect against username enumeration:"
|
1571 |
-
msgstr ""
|
1572 |
-
|
1573 |
-
#: lib/help.php:174
|
1574 |
msgid ""
|
1575 |
-
"
|
1576 |
"archives, the REST API or the login page. Although this is not a "
|
1577 |
"vulnerability but a WordPress feature, some hackers use it to retrieve "
|
1578 |
"usernames in order to launch more accurate brute-force attacks. If it is a "
|
@@ -1582,22 +1735,14 @@ msgid ""
|
|
1582 |
"block the request immediately."
|
1583 |
msgstr ""
|
1584 |
|
1585 |
-
#: lib/help.php:
|
1586 |
-
msgid "WordPress REST API:"
|
1587 |
-
msgstr ""
|
1588 |
-
|
1589 |
-
#: lib/help.php:175
|
1590 |
msgid ""
|
1591 |
-
"
|
1592 |
"HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
|
1593 |
"allows you to block any access to that API if you do not intend to use it."
|
1594 |
msgstr ""
|
1595 |
|
1596 |
-
#: lib/help.php:
|
1597 |
-
msgid "WordPress XML-RPC API:"
|
1598 |
-
msgstr ""
|
1599 |
-
|
1600 |
-
#: lib/help.php:176
|
1601 |
msgid ""
|
1602 |
"XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
|
1603 |
"its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
|
@@ -1608,116 +1753,115 @@ msgid ""
|
|
1608 |
"used in brute-force amplification attacks or to block Pingbacks."
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: lib/help.php:
|
1612 |
msgid ""
|
1613 |
"Block <code>POST</code> requests in the themes folder <code>/wp-content/"
|
1614 |
-
"themes</code
|
1615 |
msgstr ""
|
1616 |
|
1617 |
-
#: lib/help.php:
|
1618 |
msgid ""
|
1619 |
-
"
|
1620 |
"PHP theme files. However, because some custom themes may include an HTML "
|
1621 |
"form (contact, search form etc), this option is not enabled by default."
|
1622 |
msgstr ""
|
1623 |
|
1624 |
-
#: lib/help.php:
|
1625 |
-
msgid "Force
|
1626 |
msgstr ""
|
1627 |
|
1628 |
-
#: lib/help.php:
|
1629 |
msgid ""
|
1630 |
-
"
|
1631 |
"both passwords and cookies are never sent in the clear. Ensure that you can "
|
1632 |
"access your admin console from HTTPS before enabling this option, otherwise "
|
1633 |
"you will lock yourself out of your site!"
|
1634 |
msgstr ""
|
1635 |
|
1636 |
-
#: lib/help.php:
|
1637 |
-
msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code
|
1638 |
msgstr ""
|
1639 |
|
1640 |
-
#: lib/help.php:
|
1641 |
msgid ""
|
1642 |
-
"
|
1643 |
"security if a hacker gains access to a well-privileged user account."
|
1644 |
msgstr ""
|
1645 |
|
1646 |
-
#: lib/help.php:
|
1647 |
msgid ""
|
1648 |
-
"Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: lib/help.php:
|
1652 |
msgid ""
|
1653 |
-
"
|
1654 |
"installation/update functionality from the WordPress admin area. Setting "
|
1655 |
"this constant also disables the Plugin and Theme editor."
|
1656 |
msgstr ""
|
1657 |
|
1658 |
-
#: lib/help.php:
|
1659 |
msgid ""
|
1660 |
-
"Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: lib/help.php:
|
1664 |
msgid ""
|
1665 |
-
"
|
1666 |
msgstr ""
|
1667 |
|
1668 |
-
#: lib/help.php:
|
1669 |
-
msgid "
|
|
|
|
|
|
|
1670 |
msgstr ""
|
1671 |
|
1672 |
-
#: lib/help.php:
|
1673 |
-
msgid "Whether to scan and/or sanitise the <code>
|
1674 |
msgstr ""
|
1675 |
|
1676 |
-
#: lib/help.php:
|
1677 |
-
msgid "
|
1678 |
msgstr ""
|
1679 |
|
1680 |
-
#: lib/help.php:
|
1681 |
msgid ""
|
1682 |
"NinjaFirewall will decode and scan base64 encoded values in order to detect "
|
1683 |
"obfuscated malicious code. This option is only available for the <code>POST</"
|
1684 |
"code> variable."
|
1685 |
msgstr ""
|
1686 |
|
1687 |
-
#: lib/help.php:
|
1688 |
msgid "Whether to sanitise the <code>REQUEST</code> variable."
|
1689 |
msgstr ""
|
1690 |
|
1691 |
-
#: lib/help.php:
|
1692 |
msgid "Whether to scan and/or sanitise cookies."
|
1693 |
msgstr ""
|
1694 |
|
1695 |
-
#: lib/help.php:
|
1696 |
msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
|
1697 |
msgstr ""
|
1698 |
|
1699 |
-
#: lib/help.php:
|
1700 |
-
msgid "Block suspicious bots/scanners:"
|
1701 |
-
msgstr ""
|
1702 |
-
|
1703 |
-
#: lib/help.php:203
|
1704 |
msgid ""
|
1705 |
-
"
|
1706 |
"to access your blog."
|
1707 |
msgstr ""
|
1708 |
|
1709 |
-
#: lib/help.php:
|
1710 |
msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
|
1711 |
msgstr ""
|
1712 |
|
1713 |
-
#: lib/help.php:
|
1714 |
msgid ""
|
1715 |
-
"Block POST requests that do not have an <code>HTTP_REFERER</code> header
|
1716 |
msgstr ""
|
1717 |
|
1718 |
-
#: lib/help.php:
|
1719 |
msgid ""
|
1720 |
-
"
|
1721 |
"Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
|
1722 |
"applications to post to your scripts (e.g. Paypal IPN, WordPress WP-"
|
1723 |
"Cron...), you are advised to keep this option disabled otherwise they will "
|
@@ -1726,36 +1870,28 @@ msgid ""
|
|
1726 |
"default."
|
1727 |
msgstr ""
|
1728 |
|
1729 |
-
#: lib/help.php:
|
1730 |
-
msgid "Block localhost IP in <code>GET/POST</code> requests
|
1731 |
msgstr ""
|
1732 |
|
1733 |
-
#: lib/help.php:
|
1734 |
msgid ""
|
1735 |
"this option will block any <code>GET</code> or <code>POST</code> request "
|
1736 |
"containing the localhost IP (127.0.0.1). It can be useful to block SQL "
|
1737 |
"dumpers and various hacker's shell scripts."
|
1738 |
msgstr ""
|
1739 |
|
1740 |
-
#: lib/help.php:
|
1741 |
-
msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:"
|
1742 |
-
msgstr ""
|
1743 |
-
|
1744 |
-
#: lib/help.php:211
|
1745 |
#, php-format
|
1746 |
msgid ""
|
1747 |
-
"
|
1748 |
"the <code>Host</code> header of the HTTP request. Unless you need to connect "
|
1749 |
"to your site using its IP address, (e.g. %s), enabling this option will "
|
1750 |
"block a lot of hackers scanners because such applications scan IPs rather "
|
1751 |
"than domain names."
|
1752 |
msgstr ""
|
1753 |
|
1754 |
-
#: lib/help.php:
|
1755 |
-
msgid "Scan traffic coming from localhost and private IP address spaces:"
|
1756 |
-
msgstr ""
|
1757 |
-
|
1758 |
-
#: lib/help.php:212
|
1759 |
msgid ""
|
1760 |
"this option will allow the firewall to scan traffic from all non-routable "
|
1761 |
"private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
|
@@ -1763,103 +1899,102 @@ msgid ""
|
|
1763 |
"interconnected)."
|
1764 |
msgstr ""
|
1765 |
|
1766 |
-
#: lib/help.php:
|
1767 |
msgid ""
|
1768 |
"In addition to filtering incoming requests, NinjaFirewall can also hook the "
|
1769 |
"HTTP response in order to alter its headers. Those modifications can help to "
|
1770 |
"mitigate threats such as XSS, phishing and clickjacking attacks."
|
1771 |
msgstr ""
|
1772 |
|
1773 |
-
#: lib/help.php:
|
1774 |
msgid ""
|
1775 |
"Set <code>X-Content-Type-Options</code> to protect against MIME type "
|
1776 |
-
"confusion attacks
|
1777 |
msgstr ""
|
1778 |
|
1779 |
-
#: lib/help.php:
|
1780 |
msgid ""
|
1781 |
-
"
|
1782 |
"content or MIME sniffing and to use the content-type returned by the server. "
|
1783 |
"Some browsers try to guess (sniff) and override the content-type by looking "
|
1784 |
"at the content itself which, in some cases, could lead to security issues "
|
1785 |
"such as MIME Confusion Attacks."
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: lib/help.php:
|
1789 |
msgid ""
|
1790 |
-
"Set <code>X-Frame-Options</code> to protect against clickjacking attempts
|
1791 |
msgstr ""
|
1792 |
|
1793 |
-
#: lib/help.php:
|
1794 |
msgid ""
|
1795 |
-
"
|
1796 |
"page in a <frame> or <iframe>. Hosts can declare this policy in "
|
1797 |
"the header of their HTTP responses to prevent clickjacking attacks, by "
|
1798 |
"ensuring that their content is not embedded into other pages or frames. "
|
1799 |
"NinjaFirewall accepts two different values:"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
-
#: lib/help.php:
|
1803 |
msgid ""
|
1804 |
-
"
|
1805 |
"in any frame from a page of different origin than the content itself."
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: lib/help.php:
|
1809 |
msgid ""
|
1810 |
-
"
|
1811 |
"in any frame."
|
1812 |
msgstr ""
|
1813 |
|
1814 |
-
#: lib/help.php:
|
1815 |
msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
|
1816 |
msgstr ""
|
1817 |
|
1818 |
-
#: lib/help.php:
|
1819 |
msgid ""
|
1820 |
"Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
|
1821 |
"administrator and the login page only."
|
1822 |
msgstr ""
|
1823 |
|
1824 |
-
#: lib/help.php:
|
1825 |
msgid ""
|
1826 |
"Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
|
1827 |
-
"browsers)
|
1828 |
msgstr ""
|
1829 |
|
1830 |
-
#: lib/help.php:
|
1831 |
msgid ""
|
1832 |
-
"
|
1833 |
"malicious scripts from executing. It is enabled by default on all compatible "
|
1834 |
"browsers."
|
1835 |
msgstr ""
|
1836 |
|
1837 |
-
#: lib/help.php:
|
1838 |
msgid ""
|
1839 |
"If a visitor disabled their browser's XSS filter, you cannot re-enable it "
|
1840 |
"with that option."
|
1841 |
msgstr ""
|
1842 |
|
1843 |
-
#: lib/help.php:
|
1844 |
msgid ""
|
1845 |
-
"Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#: lib/help.php:
|
1849 |
msgid ""
|
1850 |
-
"
|
1851 |
"request forgery) attacks because cookies can only be sent in requests "
|
1852 |
"originating from the same origin as the target domain."
|
1853 |
msgstr ""
|
1854 |
|
1855 |
-
#: lib/help.php:
|
1856 |
-
msgid ""
|
1857 |
-
"Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:"
|
1858 |
msgstr ""
|
1859 |
|
1860 |
-
#: lib/help.php:
|
1861 |
msgid ""
|
1862 |
-
"
|
1863 |
"scripting by preventing them from being accessed through client-side "
|
1864 |
"scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins "
|
1865 |
"or any other PHP script, add the <code>HttpOnly</code> flag if it is "
|
@@ -1868,58 +2003,58 @@ msgid ""
|
|
1868 |
"sets that flag on the logged in user cookies only."
|
1869 |
msgstr ""
|
1870 |
|
1871 |
-
#: lib/help.php:
|
1872 |
msgid ""
|
1873 |
"If your PHP scripts send cookies that need to be accessed from JavaScript, "
|
1874 |
"you should keep that option disabled."
|
1875 |
msgstr ""
|
1876 |
|
1877 |
-
#: lib/help.php:
|
1878 |
msgid ""
|
1879 |
"Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
|
1880 |
-
"connections to the server
|
1881 |
msgstr ""
|
1882 |
|
1883 |
-
#: lib/help.php:
|
1884 |
msgid ""
|
1885 |
-
"
|
1886 |
"will not allow the user to access the web application over insecure HTTP "
|
1887 |
"protocol. It helps to defend against cookie hijacking and Man-in-the-middle "
|
1888 |
"attacks. Most recent browsers support HSTS headers."
|
1889 |
msgstr ""
|
1890 |
|
1891 |
-
#: lib/help.php:
|
1892 |
-
msgid "Set <code>Content-Security-Policy</code
|
1893 |
msgstr ""
|
1894 |
|
1895 |
-
#: lib/help.php:
|
1896 |
msgid ""
|
1897 |
-
"
|
1898 |
"attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
|
1899 |
"objects (Java, ActiveX, audio and video files), and other HTML5 features."
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#: lib/help.php:
|
1903 |
msgid ""
|
1904 |
"NinjaFirewall lets you configure the CSP policy separately for the frontend "
|
1905 |
"(blog, website) and the backend (WordPress admin dashboard)."
|
1906 |
msgstr ""
|
1907 |
|
1908 |
-
#: lib/help.php:
|
1909 |
-
msgid "Set <code>Referrer-Policy</code
|
1910 |
msgstr ""
|
1911 |
|
1912 |
-
#: lib/help.php:
|
1913 |
msgid ""
|
1914 |
-
"
|
1915 |
"header, should be included with requests made."
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#: lib/help.php:
|
1919 |
-
msgid "Block PHP built-in wrappers
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#: lib/help.php:
|
1923 |
msgid ""
|
1924 |
"PHP has several wrappers for use with the filesystem functions. It is "
|
1925 |
"possible for an attacker to use them to bypass firewalls and various IDS to "
|
@@ -1930,11 +2065,11 @@ msgid ""
|
|
1930 |
"request, cookies, user agent and referrer variables."
|
1931 |
msgstr ""
|
1932 |
|
1933 |
-
#: lib/help.php:
|
1934 |
-
msgid "Block serialized PHP objects
|
1935 |
msgstr ""
|
1936 |
|
1937 |
-
#: lib/help.php:
|
1938 |
#, php-format
|
1939 |
msgid ""
|
1940 |
"Object Serialization is a PHP feature used by many applications to generate "
|
@@ -1945,133 +2080,65 @@ msgid ""
|
|
1945 |
"code> request, cookies, user agent and referrer variables."
|
1946 |
msgstr ""
|
1947 |
|
1948 |
-
#: lib/help.php:
|
1949 |
-
msgid "Hide PHP notice and error messages:"
|
1950 |
-
msgstr ""
|
1951 |
-
|
1952 |
-
#: lib/help.php:247
|
1953 |
msgid ""
|
1954 |
-
"
|
1955 |
"leak sensitive informations which can be exploited by hackers."
|
1956 |
msgstr ""
|
1957 |
|
1958 |
-
#: lib/help.php:
|
1959 |
msgid ""
|
1960 |
"Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
1961 |
-
"<code>PATH_INFO</code
|
1962 |
msgstr ""
|
1963 |
|
1964 |
-
#: lib/help.php:
|
1965 |
msgid ""
|
1966 |
-
"
|
1967 |
"variables to prevent various XSS and database injection attempts."
|
1968 |
msgstr ""
|
1969 |
|
1970 |
-
#: lib/help.php:
|
1971 |
#, php-format
|
1972 |
msgid ""
|
1973 |
-
"Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests
|
1974 |
msgstr ""
|
1975 |
|
1976 |
-
#: lib/help.php:
|
1977 |
msgid ""
|
1978 |
-
"
|
1979 |
"code> server variable in a <code>GET</code> or <code>POST</code> request. "
|
1980 |
"Hackers use shell scripts that often need to pass this value, but most "
|
1981 |
"legitimate programs do not."
|
1982 |
msgstr ""
|
1983 |
|
1984 |
-
#: lib/help.php:
|
1985 |
-
msgid "Block ASCII character 0x00 (NULL byte):"
|
1986 |
-
msgstr ""
|
1987 |
-
|
1988 |
-
#: lib/help.php:252
|
1989 |
msgid ""
|
1990 |
-
"
|
1991 |
"<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
|
1992 |
"code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> variables "
|
1993 |
"containing the ASCII character 0x00 (NULL byte). Such a character is "
|
1994 |
"dangerous and should always be rejected."
|
1995 |
msgstr ""
|
1996 |
|
1997 |
-
#: lib/help.php:
|
1998 |
-
msgid "Block ASCII control characters 1 to 8 and 14 to 31:"
|
1999 |
-
msgstr ""
|
2000 |
-
|
2001 |
-
#: lib/help.php:253
|
2002 |
msgid ""
|
2003 |
-
"
|
2004 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
|
2005 |
"ASCII characters from 1 to 8 and 14 to 31."
|
2006 |
msgstr ""
|
2007 |
|
2008 |
-
#: lib/help.php:
|
2009 |
-
#, php-format
|
2010 |
-
msgid ""
|
2011 |
-
"By default, any logged in WordPress administrator will not be blocked by "
|
2012 |
-
"NinjaFirewall. You can also add any logged in users to the whitelist (make "
|
2013 |
-
"sure you trust them all before doing so).<br />This feature applies to all "
|
2014 |
-
"Firewall Policies listed below, except <code>FORCE_SSL_ADMIN</code>, "
|
2015 |
-
"<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> options and "
|
2016 |
-
"the <a href=\"%s\">Login Protection</a> which, if enabled, are always "
|
2017 |
-
"enforced."
|
2018 |
-
msgstr ""
|
2019 |
-
|
2020 |
-
#: lib/help.php:273 lib/monitoring.php:46
|
2021 |
-
msgid "File Guard"
|
2022 |
-
msgstr ""
|
2023 |
-
|
2024 |
-
#: lib/help.php:275
|
2025 |
-
msgid ""
|
2026 |
-
"File Guard can detect, in real-time, any access to a PHP file that was "
|
2027 |
-
"recently modified or created, and alert you about this."
|
2028 |
-
msgstr ""
|
2029 |
-
|
2030 |
-
#: lib/help.php:277
|
2031 |
-
msgid ""
|
2032 |
-
"If a hacker uploaded a shell script to your site (or injected a backdoor "
|
2033 |
-
"into an already existing file) and tried to directly access that file using "
|
2034 |
-
"his browser or a script, NinjaFirewall would hook the HTTP request and "
|
2035 |
-
"immediately detect that the file was recently modified/created. It would "
|
2036 |
-
"send you a detailed alert (script name, IP, request, date and time). Alerts "
|
2037 |
-
"will be sent to the contact email address defined in the \"Event "
|
2038 |
-
"Notifications\" menu."
|
2039 |
-
msgstr ""
|
2040 |
-
|
2041 |
-
#: lib/help.php:278
|
2042 |
-
msgid ""
|
2043 |
-
"If you do not want to monitor a folder, you can exclude its full path or a "
|
2044 |
-
"part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
|
2045 |
-
"code> etc). NinjaFirewall will compare this value to the <code>"
|
2046 |
-
"$_SERVER[\"SCRIPT_FILENAME\"]</code> server variable and, if it matches, "
|
2047 |
-
"will ignore it."
|
2048 |
-
msgstr ""
|
2049 |
-
|
2050 |
-
#: lib/help.php:279
|
2051 |
-
msgid ""
|
2052 |
-
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
|
2053 |
-
"code>)."
|
2054 |
-
msgstr ""
|
2055 |
-
|
2056 |
-
#: lib/help.php:280
|
2057 |
-
msgid ""
|
2058 |
-
"File Guard real-time detection is a totally unique feature, because "
|
2059 |
-
"NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
|
2060 |
-
"sent to any PHP script, even if that script is not part of the WordPress "
|
2061 |
-
"package (third-party software, shell script, backdoor etc)."
|
2062 |
-
msgstr ""
|
2063 |
-
|
2064 |
-
#: lib/help.php:286 lib/monitoring.php:47
|
2065 |
msgid "File Check"
|
2066 |
msgstr ""
|
2067 |
|
2068 |
-
#: lib/help.php:
|
2069 |
msgid ""
|
2070 |
"File Check lets you perform file integrity monitoring upon request or on a "
|
2071 |
"specific interval."
|
2072 |
msgstr ""
|
2073 |
|
2074 |
-
#: lib/help.php:
|
2075 |
msgid ""
|
2076 |
"You need to create a snapshot of all your files and then, at a later time, "
|
2077 |
"you can scan your system to compare it with the previous snapshot. Any "
|
@@ -2079,66 +2146,110 @@ msgid ""
|
|
2079 |
"file ownership, timestamp as well as file creation and deletion."
|
2080 |
msgstr ""
|
2081 |
|
2082 |
-
#: lib/help.php:
|
2083 |
#, php-format
|
2084 |
msgid ""
|
2085 |
"Create a snapshot of all files stored in that directory: by default, the "
|
2086 |
"directory is set to WordPress <code>ABSPATH</code> (%s)"
|
2087 |
msgstr ""
|
2088 |
|
2089 |
-
#: lib/help.php:
|
2090 |
msgid ""
|
2091 |
"Exclude the following files/folders: you can enter a directory or a file "
|
2092 |
"name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
|
2093 |
"code>). Or you can exclude a file extension (e.g., <code>.css</code>)."
|
2094 |
msgstr ""
|
2095 |
|
2096 |
-
#: lib/help.php:
|
2097 |
msgid ""
|
2098 |
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
|
2099 |
"code>)."
|
2100 |
msgstr ""
|
2101 |
|
2102 |
-
#: lib/help.php:
|
2103 |
msgid ""
|
2104 |
"Do not follow symbolic links: by default, NinjaFirewall will not follow "
|
2105 |
"symbolic links."
|
2106 |
msgstr ""
|
2107 |
|
2108 |
-
#: lib/help.php:
|
2109 |
msgid "Scheduled scans"
|
2110 |
msgstr ""
|
2111 |
|
2112 |
-
#: lib/help.php:
|
2113 |
msgid ""
|
2114 |
"NinjaFirewall can scan your system on a specific interval (hourly, "
|
2115 |
"twicedaily or daily)."
|
2116 |
msgstr ""
|
2117 |
|
2118 |
-
#: lib/help.php:
|
2119 |
msgid ""
|
2120 |
"It can either send you a scan report only if changes are detected, or always "
|
2121 |
"send you one after each scan."
|
2122 |
msgstr ""
|
2123 |
|
2124 |
-
#: lib/help.php:
|
2125 |
msgid ""
|
2126 |
"Reports will be sent to the contact email address defined in the \"Event "
|
2127 |
"Notifications\" menu."
|
2128 |
msgstr ""
|
2129 |
|
2130 |
-
#: lib/help.php:
|
2131 |
#, php-format
|
2132 |
msgid ""
|
2133 |
"Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
|
2134 |
"only if your site gets sufficient traffic."
|
2135 |
msgstr ""
|
2136 |
|
2137 |
-
#: lib/help.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2138 |
msgid "Network"
|
2139 |
msgstr ""
|
2140 |
|
2141 |
-
#: lib/help.php:
|
2142 |
msgid ""
|
2143 |
"Even if NinjaFirewall administration menu is only available to the Super "
|
2144 |
"Admin (from the main site), you can still display its status to all sites in "
|
@@ -2146,20 +2257,20 @@ msgid ""
|
|
2146 |
"be visible only to the administrators of those sites."
|
2147 |
msgstr ""
|
2148 |
|
2149 |
-
#: lib/help.php:
|
2150 |
msgid ""
|
2151 |
"It is recommended to enable this feature as it is the only way to know "
|
2152 |
"whether the sites in your network are protected and if NinjaFirewall "
|
2153 |
"installation was successful."
|
2154 |
msgstr ""
|
2155 |
|
2156 |
-
#: lib/help.php:
|
2157 |
msgid ""
|
2158 |
"Note that when it is disabled, the icon still remains visible to you, the "
|
2159 |
"Super Admin."
|
2160 |
msgstr ""
|
2161 |
|
2162 |
-
#: lib/help.php:
|
2163 |
msgid ""
|
2164 |
"NinjaFirewall can alert you by email on specific events triggered within "
|
2165 |
"your blog. They include installations, updates, activations etc, as well as "
|
@@ -2170,11 +2281,11 @@ msgid ""
|
|
2170 |
"theme in order to take full control of your website."
|
2171 |
msgstr ""
|
2172 |
|
2173 |
-
#: lib/help.php:
|
2174 |
msgid "Login Protection"
|
2175 |
msgstr ""
|
2176 |
|
2177 |
-
#: lib/help.php:
|
2178 |
msgid ""
|
2179 |
"By processing incoming HTTP requests before your blog and any of its "
|
2180 |
"plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
|
@@ -2182,18 +2293,18 @@ msgid ""
|
|
2182 |
"from several thousands of different IPs."
|
2183 |
msgstr ""
|
2184 |
|
2185 |
-
#: lib/help.php:
|
2186 |
msgid ""
|
2187 |
"You can choose two different types of protection: a password or a captcha. "
|
2188 |
"You can enable the protection only if an attack is detected or to keep it "
|
2189 |
"always activated."
|
2190 |
msgstr ""
|
2191 |
|
2192 |
-
#: lib/help.php:
|
2193 |
msgid "Yes, if under attack:"
|
2194 |
msgstr ""
|
2195 |
|
2196 |
-
#: lib/help.php:
|
2197 |
msgid ""
|
2198 |
"The protection will be triggered when too many login attempts are detected, "
|
2199 |
"regardless of the offending IP. It blocks the attack instantly and prevents "
|
@@ -2202,92 +2313,92 @@ msgid ""
|
|
2202 |
"combination or the captcha code. "
|
2203 |
msgstr ""
|
2204 |
|
2205 |
-
#: lib/help.php:
|
2206 |
msgid "Always ON:"
|
2207 |
msgstr ""
|
2208 |
|
2209 |
-
#: lib/help.php:
|
2210 |
msgid ""
|
2211 |
"NinjaFirewall will always enforce the HTTP authentication or captcha "
|
2212 |
"implementation each time you access the login page."
|
2213 |
msgstr ""
|
2214 |
|
2215 |
-
#: lib/help.php:
|
2216 |
msgid "Type of protection:"
|
2217 |
msgstr ""
|
2218 |
|
2219 |
-
#: lib/help.php:
|
2220 |
msgid ""
|
2221 |
"<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
|
2222 |
"own very fast authentication scheme and it is compatible with any HTTP "
|
2223 |
"server (Apache, Nginx, Lighttpd etc)."
|
2224 |
msgstr ""
|
2225 |
|
2226 |
-
#: lib/help.php:
|
2227 |
msgid "<b>Captcha:</b> It will display a 5-character captcha code."
|
2228 |
msgstr ""
|
2229 |
|
2230 |
-
#: lib/help.php:
|
2231 |
msgid "Bot protection:"
|
2232 |
msgstr ""
|
2233 |
|
2234 |
-
#: lib/help.php:
|
2235 |
msgid ""
|
2236 |
"NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
|
2237 |
"before they start a brute-force attack."
|
2238 |
msgstr ""
|
2239 |
|
2240 |
-
#: lib/help.php:
|
2241 |
msgid "AUTH log"
|
2242 |
msgstr ""
|
2243 |
|
2244 |
-
#: lib/help.php:
|
2245 |
msgid ""
|
2246 |
"NinjaFirewall can write to the server Authentication log when the brute-"
|
2247 |
"force protection is triggered. This can be useful to the system "
|
2248 |
"administrator for monitoring purposes or banning IPs at the server level."
|
2249 |
msgstr ""
|
2250 |
|
2251 |
-
#: lib/help.php:
|
2252 |
msgid ""
|
2253 |
"If you have a shared hosting account, keep this option disabled as you do "
|
2254 |
"not have any access to the server's logs."
|
2255 |
msgstr ""
|
2256 |
|
2257 |
-
#: lib/help.php:
|
2258 |
msgid ""
|
2259 |
"On Debian-based systems, the log is located in <code>/var/log/auth.log</"
|
2260 |
"code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
|
2261 |
"logline uses the following format:"
|
2262 |
msgstr ""
|
2263 |
|
2264 |
-
#: lib/help.php:
|
2265 |
msgid "AA: the process ID (PID)."
|
2266 |
msgstr ""
|
2267 |
|
2268 |
-
#: lib/help.php:
|
2269 |
msgid "BB: the user IPv4 or IPv6 address."
|
2270 |
msgstr ""
|
2271 |
|
2272 |
-
#: lib/help.php:
|
2273 |
msgid "CC: the blog (sub-)domain name."
|
2274 |
msgstr ""
|
2275 |
|
2276 |
-
#: lib/help.php:
|
2277 |
msgid ""
|
2278 |
"DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
|
2279 |
"API</code>."
|
2280 |
msgstr ""
|
2281 |
|
2282 |
-
#: lib/help.php:
|
2283 |
msgid "EE: the time, in minutes, the protection will remain active."
|
2284 |
msgstr ""
|
2285 |
|
2286 |
-
#: lib/help.php:
|
2287 |
msgid "Sample loglines:"
|
2288 |
msgstr ""
|
2289 |
|
2290 |
-
#: lib/help.php:
|
2291 |
#, php-format
|
2292 |
msgid ""
|
2293 |
"Be careful if you are behind a load balancer, reverse-proxy or CDN because "
|
@@ -2298,54 +2409,54 @@ msgid ""
|
|
2298 |
"otherwise you will likely block legitimate users."
|
2299 |
msgstr ""
|
2300 |
|
2301 |
-
#: lib/help.php:
|
2302 |
msgid "Firewall Log"
|
2303 |
msgstr ""
|
2304 |
|
2305 |
-
#: lib/help.php:
|
2306 |
msgid ""
|
2307 |
"The firewall log displays blocked and sanitised requests as well as some "
|
2308 |
"useful information. It has 6 columns:"
|
2309 |
msgstr ""
|
2310 |
|
2311 |
-
#: lib/help.php:
|
2312 |
msgid "DATE : date and time of the incident."
|
2313 |
msgstr ""
|
2314 |
|
2315 |
-
#: lib/help.php:
|
2316 |
msgid ""
|
2317 |
"INCIDENT : unique incident number/ID as it was displayed to the blocked user."
|
2318 |
msgstr ""
|
2319 |
|
2320 |
-
#: lib/help.php:
|
2321 |
msgid ""
|
2322 |
"LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
|
2323 |
"<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
|
2324 |
"and debugging mode (<code>DEBUG_ON</code>)."
|
2325 |
msgstr ""
|
2326 |
|
2327 |
-
#: lib/help.php:
|
2328 |
msgid ""
|
2329 |
"RULE : reference of the NinjaFirewall built-in security rule that triggered "
|
2330 |
"the action. A hyphen (<code>-</code>) instead of a number means it was a "
|
2331 |
"rule from the \"Firewall Policies\" page."
|
2332 |
msgstr ""
|
2333 |
|
2334 |
-
#: lib/help.php:
|
2335 |
msgid "IP : the user IPv4 or IPv6 address."
|
2336 |
msgstr ""
|
2337 |
|
2338 |
-
#: lib/help.php:
|
2339 |
msgid ""
|
2340 |
"REQUEST : the HTTP request including offending variables and values as well "
|
2341 |
"as the reason the action was logged."
|
2342 |
msgstr ""
|
2343 |
|
2344 |
-
#: lib/help.php:
|
2345 |
msgid "Auto-delete log"
|
2346 |
msgstr ""
|
2347 |
|
2348 |
-
#: lib/help.php:
|
2349 |
msgid ""
|
2350 |
"This options lets you configure NinjaFirewall to delete its old logs "
|
2351 |
"automatically. By default, logs are never deleted, <b>even when uninstall "
|
@@ -2353,55 +2464,55 @@ msgid ""
|
|
2353 |
"delete old logs."
|
2354 |
msgstr ""
|
2355 |
|
2356 |
-
#: lib/help.php:
|
2357 |
msgid ""
|
2358 |
"Centralized Logging lets you remotely access the firewall log of all your "
|
2359 |
"NinjaFirewall protected websites from one single installation. You do not "
|
2360 |
"need any longer to log in to individual servers to analyse your log data."
|
2361 |
msgstr ""
|
2362 |
|
2363 |
-
#: lib/help.php:
|
2364 |
#, php-format
|
2365 |
msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
|
2366 |
msgstr ""
|
2367 |
|
2368 |
-
#: lib/help.php:
|
2369 |
msgid ""
|
2370 |
"Enter your public key (optional): This is the public key that was created "
|
2371 |
"from your main server."
|
2372 |
msgstr ""
|
2373 |
|
2374 |
-
#: lib/help.php:
|
2375 |
msgid ""
|
2376 |
"Centralized Logging will keep working even if NinjaFirewall is disabled. "
|
2377 |
"Delete your public key below if you want to disable it."
|
2378 |
msgstr ""
|
2379 |
|
2380 |
-
#: lib/help.php:
|
2381 |
msgid "Live Log"
|
2382 |
msgstr ""
|
2383 |
|
2384 |
-
#: lib/help.php:
|
2385 |
msgid ""
|
2386 |
"Live Log lets you watch your blog traffic in real time, just like the Unix "
|
2387 |
"<code>tail -f</code> command. Note that requests sent to static elements "
|
2388 |
"like JS/CSS files and images are not managed by NinjaFirewall."
|
2389 |
msgstr ""
|
2390 |
|
2391 |
-
#: lib/help.php:
|
2392 |
msgid ""
|
2393 |
"You can enable/disable the monitoring process, change the refresh rate, "
|
2394 |
"clear the screen, enable automatic vertical scrolling, change the log "
|
2395 |
"format, select which traffic you want to view (HTTP/HTTPS) and the timezone."
|
2396 |
msgstr ""
|
2397 |
|
2398 |
-
#: lib/help.php:
|
2399 |
msgid ""
|
2400 |
"You can also apply filters to include or exclude files and folders "
|
2401 |
"(REQUEST_URI)."
|
2402 |
msgstr ""
|
2403 |
|
2404 |
-
#: lib/help.php:
|
2405 |
msgid ""
|
2406 |
"Live Log does not make use of any WordPress core file (e.g., <code>admin-"
|
2407 |
"ajax.php</code>). It communicates directly with the firewall without loading "
|
@@ -2410,114 +2521,114 @@ msgid ""
|
|
2410 |
"value."
|
2411 |
msgstr ""
|
2412 |
|
2413 |
-
#: lib/help.php:
|
2414 |
msgid ""
|
2415 |
"If you are using the optional <code>.htninja</code> configuration file to "
|
2416 |
"whitelist your IP, the Live Log feature will not work."
|
2417 |
msgstr ""
|
2418 |
|
2419 |
-
#: lib/help.php:
|
2420 |
msgid "Log Format"
|
2421 |
msgstr ""
|
2422 |
|
2423 |
-
#: lib/help.php:
|
2424 |
msgid "You can easily customize the log format. Possible values are:"
|
2425 |
msgstr ""
|
2426 |
|
2427 |
-
#: lib/help.php:
|
2428 |
msgid "<code>%time</code>: the server date, time and timezone."
|
2429 |
msgstr ""
|
2430 |
|
2431 |
-
#: lib/help.php:
|
2432 |
msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
|
2433 |
msgstr ""
|
2434 |
|
2435 |
-
#: lib/help.php:
|
2436 |
#, php-format
|
2437 |
msgid ""
|
2438 |
"<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
|
2439 |
"balancer or CDN, this will be its IP."
|
2440 |
msgstr ""
|
2441 |
|
2442 |
-
#: lib/help.php:
|
2443 |
msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
|
2444 |
msgstr ""
|
2445 |
|
2446 |
-
#: lib/help.php:
|
2447 |
#, php-format
|
2448 |
msgid ""
|
2449 |
"<code>%uri</code>: the URI which was given in order to access the page "
|
2450 |
"(REQUEST_URI)."
|
2451 |
msgstr ""
|
2452 |
|
2453 |
-
#: lib/help.php:
|
2454 |
msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
|
2455 |
msgstr ""
|
2456 |
|
2457 |
-
#: lib/help.php:
|
2458 |
#, php-format
|
2459 |
msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
|
2460 |
msgstr ""
|
2461 |
|
2462 |
-
#: lib/help.php:
|
2463 |
#, php-format
|
2464 |
msgid ""
|
2465 |
"<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
|
2466 |
"load balancer or CDN, this will likely be the visitor true IP."
|
2467 |
msgstr ""
|
2468 |
|
2469 |
-
#: lib/help.php:
|
2470 |
msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
|
2471 |
msgstr ""
|
2472 |
|
2473 |
-
#: lib/help.php:
|
2474 |
msgid ""
|
2475 |
"Additionally, you can include any of the following characters: <code>\"</"
|
2476 |
"code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
|
2477 |
"and lowercase letters <code>a-z</code>."
|
2478 |
msgstr ""
|
2479 |
|
2480 |
-
#: lib/help.php:
|
2481 |
msgid ""
|
2482 |
"Your website can run NinjaFirewall and be compliant with the General Data "
|
2483 |
"Protection Regulation (GDPR). For more info, please visit our blog:"
|
2484 |
msgstr ""
|
2485 |
|
2486 |
-
#: lib/help.php:
|
2487 |
msgid "Rules Updates"
|
2488 |
msgstr ""
|
2489 |
|
2490 |
-
#: lib/help.php:
|
2491 |
msgid ""
|
2492 |
"To get the most efficient protection, you can ask NinjaFirewall to "
|
2493 |
"automatically update its security rules."
|
2494 |
msgstr ""
|
2495 |
|
2496 |
-
#: lib/help.php:
|
2497 |
msgid ""
|
2498 |
"Each time a new vulnerability is found in WordPress or one of its plugins/"
|
2499 |
"themes, a new set of security rules will be made available to protect "
|
2500 |
"against such vulnerability if needed."
|
2501 |
msgstr ""
|
2502 |
|
2503 |
-
#: lib/help.php:
|
2504 |
msgid ""
|
2505 |
"Only security rules will be downloaded. If a new version of NinjaFirewall "
|
2506 |
"(including new files, options and features) was available, it would have to "
|
2507 |
"be updated from the dashboard plugins menu as usual."
|
2508 |
msgstr ""
|
2509 |
|
2510 |
-
#: lib/help.php:
|
2511 |
msgid ""
|
2512 |
"We recommend to enable this feature, as it is the <strong>best way to keep "
|
2513 |
"your WordPress secure</strong> against new vulnerabilities."
|
2514 |
msgstr ""
|
2515 |
|
2516 |
-
#: lib/help.php:
|
2517 |
msgid "Rules Editor"
|
2518 |
msgstr ""
|
2519 |
|
2520 |
-
#: lib/help.php:
|
2521 |
msgid ""
|
2522 |
"Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
|
2523 |
"of built-in rules used to protect your blog against the most common "
|
@@ -2527,93 +2638,83 @@ msgid ""
|
|
2527 |
"individually:"
|
2528 |
msgstr ""
|
2529 |
|
2530 |
-
#: lib/help.php:
|
2531 |
msgid ""
|
2532 |
"Check your firewall log and find the rule ID you want to disable (it is "
|
2533 |
"displayed in the <code>RULE</code> column)."
|
2534 |
msgstr ""
|
2535 |
|
2536 |
-
#: lib/help.php:
|
2537 |
msgid ""
|
2538 |
"Select its ID from the enabled rules list below and click the \"Disable it\" "
|
2539 |
"button."
|
2540 |
msgstr ""
|
2541 |
|
2542 |
-
#: lib/help.php:
|
2543 |
msgid ""
|
2544 |
"Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
|
2545 |
"code> instead of a number, that means that the rule can be changed in the "
|
2546 |
"\"Firewall Policies\" page."
|
2547 |
msgstr ""
|
2548 |
|
2549 |
-
#: lib/
|
2550 |
-
msgid "Credits"
|
2551 |
-
msgstr ""
|
2552 |
-
|
2553 |
-
#: lib/help.php:513
|
2554 |
-
msgid ""
|
2555 |
-
"NinjaFirewall security rules protect against many vulnerabilities. Some of "
|
2556 |
-
"them were reported by the following companies, individuals or mailing lists:"
|
2557 |
-
msgstr ""
|
2558 |
-
|
2559 |
-
#: lib/install.php:60
|
2560 |
#, php-format
|
2561 |
msgid ""
|
2562 |
"Error: Your .htaccess file is not writable, please change its permissions: %s"
|
2563 |
msgstr ""
|
2564 |
|
2565 |
-
#: lib/install.php:
|
2566 |
#, php-format
|
2567 |
msgid "Error: wrong parameter value (%s)."
|
2568 |
msgstr ""
|
2569 |
|
2570 |
-
#: lib/install.php:
|
2571 |
#, php-format
|
2572 |
msgid ""
|
2573 |
"Error: The following file is not writable, please change its permissions: %s"
|
2574 |
msgstr ""
|
2575 |
|
2576 |
-
#: lib/install.php:
|
2577 |
#, php-format
|
2578 |
msgid ""
|
2579 |
"NinjaFirewall detected that the requested changes seemed to crash your blog. "
|
2580 |
"%s"
|
2581 |
msgstr ""
|
2582 |
|
2583 |
-
#: lib/install.php:
|
2584 |
msgid ""
|
2585 |
"Changes have been undone. You may need to modify your selection and try "
|
2586 |
"again."
|
2587 |
msgstr ""
|
2588 |
|
2589 |
-
#: lib/install.php:
|
2590 |
#, php-format
|
2591 |
msgid "The website front-end returned: HTTP %s %s."
|
2592 |
msgstr ""
|
2593 |
|
2594 |
-
#: lib/install.php:
|
2595 |
#, php-format
|
2596 |
msgid "The website front-end returned a fatal error: %s."
|
2597 |
msgstr ""
|
2598 |
|
2599 |
-
#: lib/install.php:
|
2600 |
-
#: lib/install.php:
|
2601 |
msgid "File is not writable"
|
2602 |
msgstr ""
|
2603 |
|
2604 |
-
#: lib/install_default.php:
|
2605 |
msgid ""
|
2606 |
"Error: The installer cannot download the security rules from wordpress.org "
|
2607 |
"website."
|
2608 |
msgstr ""
|
2609 |
|
2610 |
-
#: lib/install_default.php:
|
2611 |
msgid ""
|
2612 |
"The server may be temporarily down or you may have network connectivity "
|
2613 |
"problems? Please try again in a few minutes."
|
2614 |
msgstr ""
|
2615 |
|
2616 |
-
#: lib/install_default.php:
|
2617 |
msgid ""
|
2618 |
"NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
|
2619 |
"your server does not support SSL? You can force NinjaFirewall to use a non-"
|
@@ -2621,7 +2722,7 @@ msgid ""
|
|
2621 |
"config.php</strong> file:"
|
2622 |
msgstr ""
|
2623 |
|
2624 |
-
#: lib/install_default.php:
|
2625 |
#, php-format
|
2626 |
msgid ""
|
2627 |
"NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
|
@@ -2800,7 +2901,7 @@ msgstr ""
|
|
2800 |
msgid "Error: unable to write to the %s configuration file"
|
2801 |
msgstr ""
|
2802 |
|
2803 |
-
#: lib/logs.php:36 ninjafirewall.php:
|
2804 |
msgid "Logs"
|
2805 |
msgstr ""
|
2806 |
|
@@ -2909,6 +3010,12 @@ msgid ""
|
|
2909 |
"Administrator to the whitelist\" option is enabled."
|
2910 |
msgstr ""
|
2911 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2912 |
#: lib/logs_live_log.php:104
|
2913 |
msgid "Refresh rate:"
|
2914 |
msgstr ""
|
@@ -2949,7 +3056,7 @@ msgstr ""
|
|
2949 |
msgid "Inclusion and exclusion filters (REQUEST_URI)"
|
2950 |
msgstr ""
|
2951 |
|
2952 |
-
#: lib/logs_live_log.php:160 lib/monitoring_file_check.php:
|
2953 |
msgid "None"
|
2954 |
msgstr ""
|
2955 |
|
@@ -2961,7 +3068,7 @@ msgstr ""
|
|
2961 |
msgid "Must not include"
|
2962 |
msgstr ""
|
2963 |
|
2964 |
-
#: lib/logs_live_log.php:164 lib/monitoring_file_check.php:
|
2965 |
#: lib/monitoring_file_guard.php:89
|
2966 |
msgid "e.g.,"
|
2967 |
msgstr ""
|
@@ -3004,7 +3111,7 @@ msgstr ""
|
|
3004 |
msgid "Error: please enter the custom log format."
|
3005 |
msgstr ""
|
3006 |
|
3007 |
-
#: lib/monitoring.php:43 ninjafirewall.php:
|
3008 |
msgid "Monitoring"
|
3009 |
msgstr ""
|
3010 |
|
@@ -3020,7 +3127,7 @@ msgstr ""
|
|
3020 |
msgid "You must create a snapshot first."
|
3021 |
msgstr ""
|
3022 |
|
3023 |
-
#: lib/monitoring_file_check.php:96 lib/monitoring_file_check.php:
|
3024 |
msgid "NinjaFirewall detected that changes were made to your files."
|
3025 |
msgstr ""
|
3026 |
|
@@ -3028,300 +3135,307 @@ msgstr ""
|
|
3028 |
msgid "No changes detected."
|
3029 |
msgstr ""
|
3030 |
|
3031 |
-
#: lib/monitoring_file_check.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3032 |
msgid "Create a snapshot of all files stored in that directory"
|
3033 |
msgstr ""
|
3034 |
|
3035 |
-
#: lib/monitoring_file_check.php:
|
3036 |
#, php-format
|
3037 |
msgid "Default: %s"
|
3038 |
msgstr ""
|
3039 |
|
3040 |
-
#: lib/monitoring_file_check.php:
|
3041 |
msgid "Exclude the following files/folders (optional)"
|
3042 |
msgstr ""
|
3043 |
|
3044 |
-
#: lib/monitoring_file_check.php:
|
3045 |
msgid ""
|
3046 |
"Full or partial case-sensitive string(s). Multiple values must be comma-"
|
3047 |
"separated"
|
3048 |
msgstr ""
|
3049 |
|
3050 |
-
#: lib/monitoring_file_check.php:
|
3051 |
msgid "Do not follow symbolic links (default)"
|
3052 |
msgstr ""
|
3053 |
|
3054 |
-
#: lib/monitoring_file_check.php:
|
3055 |
msgid "Create Snapshot"
|
3056 |
msgstr ""
|
3057 |
|
3058 |
-
#: lib/monitoring_file_check.php:
|
3059 |
msgid "Last snapshot"
|
3060 |
msgstr ""
|
3061 |
|
3062 |
-
#: lib/monitoring_file_check.php:
|
3063 |
#, php-format
|
3064 |
msgid "Created on: %s"
|
3065 |
msgstr ""
|
3066 |
|
3067 |
-
#: lib/monitoring_file_check.php:
|
3068 |
#, php-format
|
3069 |
msgid "Total files: %s "
|
3070 |
msgstr ""
|
3071 |
|
3072 |
-
#: lib/monitoring_file_check.php:
|
3073 |
msgid "Directory:"
|
3074 |
msgstr ""
|
3075 |
|
3076 |
-
#: lib/monitoring_file_check.php:
|
3077 |
msgid "Exclusion:"
|
3078 |
msgstr ""
|
3079 |
|
3080 |
-
#: lib/monitoring_file_check.php:
|
3081 |
msgid "Symlinks:"
|
3082 |
msgstr ""
|
3083 |
|
3084 |
-
#: lib/monitoring_file_check.php:
|
3085 |
msgid "follow"
|
3086 |
msgstr ""
|
3087 |
|
3088 |
-
#: lib/monitoring_file_check.php:
|
3089 |
msgid "do not follow"
|
3090 |
msgstr ""
|
3091 |
|
3092 |
-
#: lib/monitoring_file_check.php:
|
3093 |
#, php-format
|
3094 |
msgid "Processing time: %s seconds"
|
3095 |
msgstr ""
|
3096 |
|
3097 |
-
#: lib/monitoring_file_check.php:
|
3098 |
msgid "Download Snapshot"
|
3099 |
msgstr ""
|
3100 |
|
3101 |
-
#: lib/monitoring_file_check.php:
|
3102 |
msgid "Delete Snapshot"
|
3103 |
msgstr ""
|
3104 |
|
3105 |
-
#: lib/monitoring_file_check.php:
|
3106 |
msgid "Last changes"
|
3107 |
msgstr ""
|
3108 |
|
3109 |
-
#: lib/monitoring_file_check.php:
|
3110 |
#, php-format
|
3111 |
msgid "New files: %s"
|
3112 |
msgstr ""
|
3113 |
|
3114 |
-
#: lib/monitoring_file_check.php:
|
3115 |
#, php-format
|
3116 |
msgid "Deleted files: %s"
|
3117 |
msgstr ""
|
3118 |
|
3119 |
-
#: lib/monitoring_file_check.php:
|
3120 |
#, php-format
|
3121 |
msgid "Modified files: %s"
|
3122 |
msgstr ""
|
3123 |
|
3124 |
-
#: lib/monitoring_file_check.php:
|
3125 |
msgid "View Changes"
|
3126 |
msgstr ""
|
3127 |
|
3128 |
-
#: lib/monitoring_file_check.php:
|
3129 |
msgid "Download Changes"
|
3130 |
msgstr ""
|
3131 |
|
3132 |
-
#: lib/monitoring_file_check.php:
|
3133 |
msgid "Click a file to get more info about it."
|
3134 |
msgstr ""
|
3135 |
|
3136 |
-
#: lib/monitoring_file_check.php:
|
3137 |
msgid "New files:"
|
3138 |
msgstr ""
|
3139 |
|
3140 |
-
#: lib/monitoring_file_check.php:
|
3141 |
msgid "Size"
|
3142 |
msgstr ""
|
3143 |
|
3144 |
-
#: lib/monitoring_file_check.php:
|
3145 |
msgid "Access"
|
3146 |
msgstr ""
|
3147 |
|
3148 |
-
#: lib/monitoring_file_check.php:
|
3149 |
msgid "Uid / Gid"
|
3150 |
msgstr ""
|
3151 |
|
3152 |
-
#: lib/monitoring_file_check.php:
|
3153 |
msgid "Modify"
|
3154 |
msgstr ""
|
3155 |
|
3156 |
-
#: lib/monitoring_file_check.php:
|
3157 |
msgid "Change"
|
3158 |
msgstr ""
|
3159 |
|
3160 |
-
#: lib/monitoring_file_check.php:
|
3161 |
msgid "Deleted files:"
|
3162 |
msgstr ""
|
3163 |
|
3164 |
-
#: lib/monitoring_file_check.php:
|
3165 |
msgid "Modified files:"
|
3166 |
msgstr ""
|
3167 |
|
3168 |
-
#: lib/monitoring_file_check.php:
|
3169 |
msgid "Old"
|
3170 |
msgstr ""
|
3171 |
|
3172 |
-
#: lib/monitoring_file_check.php:
|
3173 |
msgid "New"
|
3174 |
msgstr ""
|
3175 |
|
3176 |
-
#: lib/monitoring_file_check.php:
|
3177 |
msgid "Scan System For File Changes"
|
3178 |
msgstr ""
|
3179 |
|
3180 |
-
#: lib/monitoring_file_check.php:
|
3181 |
msgid "Options"
|
3182 |
msgstr ""
|
3183 |
|
3184 |
-
#: lib/monitoring_file_check.php:
|
3185 |
#, php-format
|
3186 |
msgid ""
|
3187 |
"It seems that %s is set. Ensure you have another way to run WP-Cron, "
|
3188 |
"otherwise NinjaFirewall scheduled scans will not work."
|
3189 |
msgstr ""
|
3190 |
|
3191 |
-
#: lib/monitoring_file_check.php:
|
3192 |
msgid "Enable scheduled scans"
|
3193 |
msgstr ""
|
3194 |
|
3195 |
-
#: lib/monitoring_file_check.php:
|
3196 |
msgid "No (default)"
|
3197 |
msgstr ""
|
3198 |
|
3199 |
-
#: lib/monitoring_file_check.php:
|
3200 |
msgid "Hourly"
|
3201 |
msgstr ""
|
3202 |
|
3203 |
-
#: lib/monitoring_file_check.php:
|
3204 |
msgid "Twicedaily"
|
3205 |
msgstr ""
|
3206 |
|
3207 |
-
#: lib/monitoring_file_check.php:
|
3208 |
msgid "Daily"
|
3209 |
msgstr ""
|
3210 |
|
3211 |
-
#: lib/monitoring_file_check.php:
|
3212 |
#, php-format
|
3213 |
msgid ""
|
3214 |
"Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
|
3215 |
"and %s second(s)."
|
3216 |
msgstr ""
|
3217 |
|
3218 |
-
#: lib/monitoring_file_check.php:
|
3219 |
msgid ""
|
3220 |
"The next scheduled scan date is in the past! WordPress wp-cron may not be "
|
3221 |
"working or may have been disabled."
|
3222 |
msgstr ""
|
3223 |
|
3224 |
-
#: lib/monitoring_file_check.php:
|
3225 |
msgid "Scheduled scan report"
|
3226 |
msgstr ""
|
3227 |
|
3228 |
-
#: lib/monitoring_file_check.php:
|
3229 |
msgid "Send me a report by email only if changes are detected (default)"
|
3230 |
msgstr ""
|
3231 |
|
3232 |
-
#: lib/monitoring_file_check.php:
|
3233 |
msgid "Always send me a report by email after a scheduled scan"
|
3234 |
msgstr ""
|
3235 |
|
3236 |
-
#: lib/monitoring_file_check.php:
|
3237 |
msgid "Save Scan Options"
|
3238 |
msgstr ""
|
3239 |
|
3240 |
-
#: lib/monitoring_file_check.php:
|
3241 |
msgid "Enter the full path to the directory to be scanned."
|
3242 |
msgstr ""
|
3243 |
|
3244 |
-
#: lib/monitoring_file_check.php:
|
3245 |
#, php-format
|
3246 |
msgid "The directory %s does not exist."
|
3247 |
msgstr ""
|
3248 |
|
3249 |
-
#: lib/monitoring_file_check.php:
|
3250 |
#, php-format
|
3251 |
msgid "The directory %s is not readable."
|
3252 |
msgstr ""
|
3253 |
|
3254 |
-
#: lib/monitoring_file_check.php:
|
3255 |
#, php-format
|
3256 |
msgid "Cannot write to %s."
|
3257 |
msgstr ""
|
3258 |
|
3259 |
-
#: lib/monitoring_file_check.php:
|
3260 |
#, php-format
|
3261 |
msgid "Error : cannot open %s directory."
|
3262 |
msgstr ""
|
3263 |
|
3264 |
-
#: lib/monitoring_file_check.php:
|
3265 |
#, php-format
|
3266 |
msgid "Error : %s directory is not readable."
|
3267 |
msgstr ""
|
3268 |
|
3269 |
-
#: lib/monitoring_file_check.php:
|
3270 |
#, php-format
|
3271 |
msgid "Missing options line %s, please try again."
|
3272 |
msgstr ""
|
3273 |
|
3274 |
-
#: lib/monitoring_file_check.php:
|
3275 |
#, php-format
|
3276 |
msgid "Cannot create %s."
|
3277 |
msgstr ""
|
3278 |
|
3279 |
-
#: lib/monitoring_file_check.php:
|
3280 |
msgid "Error reading old snapshot file."
|
3281 |
msgstr ""
|
3282 |
|
3283 |
-
#: lib/monitoring_file_check.php:
|
3284 |
msgid "Error reading new snapshot file."
|
3285 |
msgstr ""
|
3286 |
|
3287 |
-
#: lib/monitoring_file_check.php:
|
3288 |
msgid "New file"
|
3289 |
msgstr ""
|
3290 |
|
3291 |
-
#: lib/monitoring_file_check.php:
|
3292 |
msgid "Modified file"
|
3293 |
msgstr ""
|
3294 |
|
3295 |
-
#: lib/monitoring_file_check.php:
|
3296 |
msgid "Deleted file"
|
3297 |
msgstr ""
|
3298 |
|
3299 |
-
#: lib/monitoring_file_check.php:
|
3300 |
msgid "[NinjaFirewall] Alert: File Check detection"
|
3301 |
msgstr ""
|
3302 |
|
3303 |
-
#: lib/monitoring_file_check.php:
|
3304 |
-
#: lib/monitoring_file_check.php:
|
3305 |
-
#: lib/security_rules_update.php:
|
3306 |
-
#: lib/utils.php:214 lib/utils.php:
|
3307 |
msgid "Blog:"
|
3308 |
msgstr ""
|
3309 |
|
3310 |
-
#: lib/monitoring_file_check.php:
|
3311 |
-
#: lib/security_rules_update.php:
|
3312 |
#, php-format
|
3313 |
msgid "Date: %s"
|
3314 |
msgstr ""
|
3315 |
|
3316 |
-
#: lib/monitoring_file_check.php:
|
3317 |
msgid "See attached file for details."
|
3318 |
msgstr ""
|
3319 |
|
3320 |
-
#: lib/monitoring_file_check.php:
|
3321 |
msgid "[NinjaFirewall] File Check report"
|
3322 |
msgstr ""
|
3323 |
|
3324 |
-
#: lib/monitoring_file_check.php:
|
3325 |
msgid "NinjaFirewall did not detect changes in your files."
|
3326 |
msgstr ""
|
3327 |
|
@@ -3366,7 +3480,7 @@ msgstr ""
|
|
3366 |
msgid "Save File Guard options"
|
3367 |
msgstr ""
|
3368 |
|
3369 |
-
#: lib/network.php:24 ninjafirewall.php:
|
3370 |
#, php-format
|
3371 |
msgid "You are not allowed to perform this task (%s)."
|
3372 |
msgstr ""
|
@@ -3389,7 +3503,8 @@ msgstr ""
|
|
3389 |
msgid "Save Network options"
|
3390 |
msgstr ""
|
3391 |
|
3392 |
-
#: lib/security_rules.php:44
|
|
|
3393 |
msgid "Security Rules"
|
3394 |
msgstr ""
|
3395 |
|
@@ -3491,7 +3606,7 @@ msgstr ""
|
|
3491 |
msgid "Security rules have been updated."
|
3492 |
msgstr ""
|
3493 |
|
3494 |
-
#: lib/security_rules_update.php:91 lib/security_rules_update.php:
|
3495 |
msgid "No security rules update available."
|
3496 |
msgstr ""
|
3497 |
|
@@ -3502,148 +3617,142 @@ msgid ""
|
|
3502 |
"otherwise NinjaFirewall automatic updates will not work."
|
3503 |
msgstr ""
|
3504 |
|
3505 |
-
#: lib/security_rules_update.php:
|
3506 |
msgid "Automatically update NinjaFirewall security rules"
|
3507 |
msgstr ""
|
3508 |
|
3509 |
-
#: lib/security_rules_update.php:
|
3510 |
msgid "Check for updates"
|
3511 |
msgstr ""
|
3512 |
|
3513 |
-
#: lib/security_rules_update.php:
|
3514 |
msgid "Every 15 minutes"
|
3515 |
msgstr ""
|
3516 |
|
3517 |
-
#: lib/security_rules_update.php:
|
3518 |
msgid "Every 30 minutes"
|
3519 |
msgstr ""
|
3520 |
|
3521 |
-
#: lib/security_rules_update.php:
|
3522 |
msgid ""
|
3523 |
"The next scheduled date is in the past! WordPress wp-cron may not be working "
|
3524 |
"or may have been disabled."
|
3525 |
msgstr ""
|
3526 |
|
3527 |
-
#: lib/security_rules_update.php:
|
3528 |
#, php-format
|
3529 |
msgid ""
|
3530 |
"Next scheduled update will start in approximately %s day, %s hour(s), %s "
|
3531 |
"minute(s) and %s seconds."
|
3532 |
msgstr ""
|
3533 |
|
3534 |
-
#: lib/security_rules_update.php:
|
3535 |
msgid "Notification"
|
3536 |
msgstr ""
|
3537 |
|
3538 |
-
#: lib/security_rules_update.php:
|
3539 |
msgid "Send me a report by email when security rules have been updated."
|
3540 |
msgstr ""
|
3541 |
|
3542 |
-
#: lib/security_rules_update.php:
|
3543 |
msgid ""
|
3544 |
"Reports will be sent to the contact email address defined in the Event "
|
3545 |
"Notifications menu."
|
3546 |
msgstr ""
|
3547 |
|
3548 |
-
#: lib/security_rules_update.php:
|
3549 |
msgid "The updates log is currently empty."
|
3550 |
msgstr ""
|
3551 |
|
3552 |
-
#: lib/security_rules_update.php:
|
3553 |
msgid "Updates Log"
|
3554 |
msgstr ""
|
3555 |
|
3556 |
-
#: lib/security_rules_update.php:
|
3557 |
msgid "Log is flushed automatically."
|
3558 |
msgstr ""
|
3559 |
|
3560 |
-
#: lib/security_rules_update.php:
|
3561 |
msgid "Save Updates Options"
|
3562 |
msgstr ""
|
3563 |
|
3564 |
-
#: lib/security_rules_update.php:
|
3565 |
msgid "Check For Updates Now!"
|
3566 |
msgstr ""
|
3567 |
|
3568 |
-
#: lib/security_rules_update.php:
|
3569 |
msgid "Delete Log"
|
3570 |
msgstr ""
|
3571 |
|
3572 |
-
#: lib/security_rules_update.php:
|
3573 |
msgid "Error: Wrong rules format."
|
3574 |
msgstr ""
|
3575 |
|
3576 |
-
#: lib/security_rules_update.php:
|
3577 |
msgid "Error: Unable to unserialize the new rules."
|
3578 |
msgstr ""
|
3579 |
|
3580 |
-
#: lib/security_rules_update.php:
|
3581 |
msgid "Error: Unserialized rules seem corrupted."
|
3582 |
msgstr ""
|
3583 |
|
3584 |
-
#: lib/security_rules_update.php:
|
3585 |
#, php-format
|
3586 |
msgid "Security rules updated to version %s."
|
3587 |
msgstr ""
|
3588 |
|
3589 |
-
#: lib/security_rules_update.php:
|
3590 |
-
msgid ""
|
3591 |
-
"Error: Your version of NinjaFirewall is too old and is not compatible with "
|
3592 |
-
"those rules. Please upgrade it."
|
3593 |
-
msgstr ""
|
3594 |
-
|
3595 |
-
#: lib/security_rules_update.php:419
|
3596 |
msgid "Error: Unable to retrieve the new rules version."
|
3597 |
msgstr ""
|
3598 |
|
3599 |
-
#: lib/security_rules_update.php:
|
3600 |
#, php-format
|
3601 |
msgid "Error: Server returned a %s HTTP error code (#1)."
|
3602 |
msgstr ""
|
3603 |
|
3604 |
-
#: lib/security_rules_update.php:
|
3605 |
msgid "Error: Unable to connect to the remote server"
|
3606 |
msgstr ""
|
3607 |
|
3608 |
-
#: lib/security_rules_update.php:
|
3609 |
#, php-format
|
3610 |
msgid "Error: The new rules versions do not match (%s != %s)."
|
3611 |
msgstr ""
|
3612 |
|
3613 |
-
#: lib/security_rules_update.php:
|
3614 |
#, php-format
|
3615 |
msgid ""
|
3616 |
"Error: The new rules %s digital signature is not correct. Aborting update, "
|
3617 |
"rules may have been tampered with."
|
3618 |
msgstr ""
|
3619 |
|
3620 |
-
#: lib/security_rules_update.php:
|
3621 |
#, php-format
|
3622 |
msgid "Error: Server returned a %s HTTP error code (#2)."
|
3623 |
msgstr ""
|
3624 |
|
3625 |
-
#: lib/security_rules_update.php:
|
3626 |
msgid "[NinjaFirewall] Security rules update"
|
3627 |
msgstr ""
|
3628 |
|
3629 |
-
#: lib/security_rules_update.php:
|
3630 |
msgid "NinjaFirewall security rules have been updated:"
|
3631 |
msgstr ""
|
3632 |
|
3633 |
-
#: lib/security_rules_update.php:
|
3634 |
msgid "Rules version:"
|
3635 |
msgstr ""
|
3636 |
|
3637 |
-
#: lib/security_rules_update.php:
|
3638 |
-
|
3639 |
-
"This notification can be turned off from NinjaFirewall \"
|
3640 |
msgstr ""
|
3641 |
|
3642 |
-
#: lib/thickbox.php:
|
3643 |
msgid "Upgrade to Full WAF mode"
|
3644 |
msgstr ""
|
3645 |
|
3646 |
-
#: lib/thickbox.php:
|
3647 |
msgid ""
|
3648 |
"In <strong>Full WAF</strong> mode, all scripts located inside the blog "
|
3649 |
"installation directories and sub-directories are protected by NinjaFirewall, "
|
@@ -3651,7 +3760,7 @@ msgid ""
|
|
3651 |
"highest possible level of protection: security without compromise."
|
3652 |
msgstr ""
|
3653 |
|
3654 |
-
#: lib/thickbox.php:
|
3655 |
#, php-format
|
3656 |
msgid ""
|
3657 |
"It works on most websites right out of the box, or may require <a href=\"%s"
|
@@ -3660,7 +3769,7 @@ msgid ""
|
|
3660 |
"all."
|
3661 |
msgstr ""
|
3662 |
|
3663 |
-
#: lib/thickbox.php:
|
3664 |
msgid ""
|
3665 |
"If this happened to you, don't worry: you could still run it in "
|
3666 |
"<strong>WordPress WAF</strong> mode. Despite being less powerful than the "
|
@@ -3668,64 +3777,64 @@ msgid ""
|
|
3668 |
"higher than other security plugins."
|
3669 |
msgstr ""
|
3670 |
|
3671 |
-
#: lib/thickbox.php:
|
3672 |
msgid "(recommended)"
|
3673 |
msgstr ""
|
3674 |
|
3675 |
-
#: lib/thickbox.php:
|
3676 |
msgid "Select your HTTP server and your PHP server API"
|
3677 |
msgstr ""
|
3678 |
|
3679 |
-
#: lib/thickbox.php:
|
3680 |
msgid "Other webserver + CGI/FastCGI or PHP-FPM"
|
3681 |
msgstr ""
|
3682 |
|
3683 |
-
#: lib/thickbox.php:
|
3684 |
msgid "View PHPINFO"
|
3685 |
msgstr ""
|
3686 |
|
3687 |
-
#: lib/thickbox.php:
|
3688 |
msgid "Select the PHP initialization file supported by your server"
|
3689 |
msgstr ""
|
3690 |
|
3691 |
-
#: lib/thickbox.php:
|
3692 |
msgid "Let NinjaFirewall make the necessary changes (recommended)."
|
3693 |
msgstr ""
|
3694 |
|
3695 |
-
#: lib/thickbox.php:
|
3696 |
msgid "I want to make the changes myself."
|
3697 |
msgstr ""
|
3698 |
|
3699 |
-
#: lib/thickbox.php:
|
3700 |
msgid ""
|
3701 |
"Ensure that you have FTP access to your website so that, if there were a "
|
3702 |
"problem during the installation of the firewall, you could easily undo the "
|
3703 |
"changes."
|
3704 |
msgstr ""
|
3705 |
|
3706 |
-
#: lib/thickbox.php:
|
3707 |
msgid "Please make the changes below, then click on the \"Finish\" button."
|
3708 |
msgstr ""
|
3709 |
|
3710 |
-
#: lib/thickbox.php:
|
3711 |
#, php-format
|
3712 |
msgid ""
|
3713 |
"The %s file must be created, and the following lines of code added to it:"
|
3714 |
msgstr ""
|
3715 |
|
3716 |
-
#: lib/thickbox.php:
|
3717 |
#, php-format
|
3718 |
msgid "The following lines of code must be added to your existing %s file:"
|
3719 |
msgstr ""
|
3720 |
|
3721 |
-
#: lib/thickbox.php:
|
3722 |
msgid ""
|
3723 |
"Log in to your Openlitespeed admin dashboard, click on \"Virtual Host\", "
|
3724 |
"select your domain, add the following instructions to the \"php.ini Override"
|
3725 |
"\" section in the \"General\" tab, and restart Openlitespeed:"
|
3726 |
msgstr ""
|
3727 |
|
3728 |
-
#: lib/thickbox.php:
|
3729 |
msgid ""
|
3730 |
"Important: if one day you wanted to uninstall NinjaFirewall, do not forget "
|
3731 |
"to remove these instructions from your Openlitespeed admin dashboard "
|
@@ -3733,7 +3842,7 @@ msgid ""
|
|
3733 |
"could not do it for you."
|
3734 |
msgstr ""
|
3735 |
|
3736 |
-
#: lib/thickbox.php:
|
3737 |
msgid "Finish"
|
3738 |
msgstr ""
|
3739 |
|
@@ -3745,181 +3854,119 @@ msgstr ""
|
|
3745 |
msgid "NinjaFirewall has blocked an attempt to create a user account:"
|
3746 |
msgstr ""
|
3747 |
|
3748 |
-
#: lib/utils.php:215 lib/utils.php:
|
3749 |
msgid "Username:"
|
3750 |
msgstr ""
|
3751 |
|
3752 |
-
#: lib/utils.php:216 lib/utils.php:
|
3753 |
msgid "User IP:"
|
3754 |
msgstr ""
|
3755 |
|
3756 |
-
#: lib/utils.php:
|
3757 |
-
msgid "Date:"
|
3758 |
-
msgstr ""
|
3759 |
-
|
3760 |
-
#: lib/utils.php:228 lib/utils.php:1026 lib/utils.php:1332
|
3761 |
msgid "A PHP backtrace has been attached to this message for your convenience."
|
3762 |
msgstr ""
|
3763 |
|
3764 |
-
#: lib/utils.php:251 lib/utils.php:252 lib/utils.php:
|
3765 |
msgid "You are not allowed to perform this task."
|
3766 |
msgstr ""
|
3767 |
|
3768 |
-
#: lib/utils.php:
|
3769 |
msgid "NinjaFirewall error"
|
3770 |
msgstr ""
|
3771 |
|
3772 |
-
#: lib/utils.php:
|
3773 |
#, php-format
|
3774 |
msgid ""
|
3775 |
"%s directory cannot be created. Please review your installation and ensure "
|
3776 |
"that %s is writable."
|
3777 |
msgstr ""
|
3778 |
|
3779 |
-
#: lib/utils.php:
|
3780 |
#, php-format
|
3781 |
msgid ""
|
3782 |
"%s directory is read-only. Please review your installation and ensure that "
|
3783 |
"%s is writable."
|
3784 |
msgstr ""
|
3785 |
|
3786 |
-
#: lib/utils.php:
|
3787 |
msgid "unknown error"
|
3788 |
msgstr ""
|
3789 |
|
3790 |
-
#: lib/utils.php:
|
3791 |
msgid "NinjaFirewall fatal error:"
|
3792 |
msgstr ""
|
3793 |
|
3794 |
-
#: lib/utils.php:
|
3795 |
msgid "Review your installation, your site is not protected."
|
3796 |
msgstr ""
|
3797 |
|
3798 |
-
#: lib/utils.php:
|
3799 |
msgid "Alert: WordPress console login"
|
3800 |
msgstr ""
|
3801 |
|
3802 |
-
#: lib/utils.php:
|
3803 |
-
msgid "-Blog:"
|
3804 |
-
msgstr ""
|
3805 |
-
|
3806 |
-
#: lib/utils.php:569
|
3807 |
msgid "Someone just logged in to your WordPress admin console:"
|
3808 |
msgstr ""
|
3809 |
|
3810 |
-
#: lib/utils.php:
|
3811 |
-
msgid "-User:"
|
3812 |
-
msgstr ""
|
3813 |
-
|
3814 |
-
#: lib/utils.php:571
|
3815 |
-
msgid "-IP:"
|
3816 |
-
msgstr ""
|
3817 |
-
|
3818 |
-
#: lib/utils.php:572
|
3819 |
-
msgid "-Date:"
|
3820 |
-
msgstr ""
|
3821 |
-
|
3822 |
-
#: lib/utils.php:575
|
3823 |
msgid "Support forum"
|
3824 |
msgstr ""
|
3825 |
|
3826 |
-
#: lib/utils.php:
|
3827 |
msgid "Forbidden access"
|
3828 |
msgstr ""
|
3829 |
|
3830 |
-
#: lib/utils.php:
|
3831 |
#, php-format
|
3832 |
msgid ""
|
3833 |
"<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
|
3834 |
"\">Lost your password</a>?"
|
3835 |
msgstr ""
|
3836 |
|
3837 |
-
#: lib/utils.php:
|
3838 |
-
msgid "Plugin"
|
3839 |
-
msgstr ""
|
3840 |
-
|
3841 |
-
#: lib/utils.php:716 lib/utils.php:720
|
3842 |
-
msgid "uploaded"
|
3843 |
-
msgstr ""
|
3844 |
-
|
3845 |
-
#: lib/utils.php:716 lib/utils.php:720
|
3846 |
-
msgid "installed"
|
3847 |
-
msgstr ""
|
3848 |
-
|
3849 |
-
#: lib/utils.php:716 lib/utils.php:720
|
3850 |
-
msgid "activated"
|
3851 |
-
msgstr ""
|
3852 |
-
|
3853 |
-
#: lib/utils.php:717
|
3854 |
-
msgid "updated"
|
3855 |
-
msgstr ""
|
3856 |
-
|
3857 |
-
#: lib/utils.php:717
|
3858 |
-
msgid "deactivated"
|
3859 |
-
msgstr ""
|
3860 |
-
|
3861 |
-
#: lib/utils.php:717 lib/utils.php:721
|
3862 |
-
msgid "deleted"
|
3863 |
-
msgstr ""
|
3864 |
-
|
3865 |
-
#: lib/utils.php:717 lib/utils.php:721
|
3866 |
-
msgid "Name"
|
3867 |
-
msgstr ""
|
3868 |
-
|
3869 |
-
#: lib/utils.php:720
|
3870 |
-
msgid "Theme"
|
3871 |
-
msgstr ""
|
3872 |
-
|
3873 |
-
#: lib/utils.php:724
|
3874 |
-
msgid "upgraded"
|
3875 |
-
msgstr ""
|
3876 |
-
|
3877 |
-
#: lib/utils.php:732
|
3878 |
-
msgid "[NinjaFirewall] Alert:"
|
3879 |
-
msgstr ""
|
3880 |
-
|
3881 |
-
#: lib/utils.php:738
|
3882 |
-
msgid "NinjaFirewall has detected the following activity on your account:"
|
3883 |
-
msgstr ""
|
3884 |
-
|
3885 |
-
#: lib/utils.php:835
|
3886 |
msgid "[NinjaFirewall] Alert: Database changes detected"
|
3887 |
msgstr ""
|
3888 |
|
3889 |
-
#: lib/utils.php:
|
3890 |
msgid ""
|
3891 |
"NinjaFirewall has detected that one or more administrator accounts were "
|
3892 |
"modified in the database:"
|
3893 |
msgstr ""
|
3894 |
|
3895 |
-
#: lib/utils.php:
|
3896 |
#, php-format
|
3897 |
msgid "Total administrators : %s"
|
3898 |
msgstr ""
|
3899 |
|
3900 |
-
#: lib/utils.php:
|
3901 |
msgid ""
|
3902 |
"If you cannot see any modifications in the above fields, it is possible that "
|
3903 |
"the administrator password was changed."
|
3904 |
msgstr ""
|
3905 |
|
3906 |
-
#: lib/utils.php:
|
3907 |
msgid "Blocked privilege escalation attempt"
|
3908 |
msgstr ""
|
3909 |
|
3910 |
-
#: lib/utils.php:
|
3911 |
msgid ""
|
3912 |
"NinjaFirewall has blocked an attempt to modify a user capability by someone "
|
3913 |
"who does not have administrative privileges:"
|
3914 |
msgstr ""
|
3915 |
|
3916 |
-
#: lib/utils.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
3917 |
msgid ""
|
3918 |
"NinjaFirewall brute-force protection is enabled and you are temporarily "
|
3919 |
"whitelisted."
|
3920 |
msgstr ""
|
3921 |
|
3922 |
-
#: lib/utils.php:
|
3923 |
#, php-format
|
3924 |
msgid ""
|
3925 |
"Hey, it seems that you've been using NinjaFirewall for some time. If you "
|
@@ -3928,77 +3975,71 @@ msgid ""
|
|
3928 |
"rate it. Thank you!"
|
3929 |
msgstr ""
|
3930 |
|
3931 |
-
#: lib/utils.php:
|
3932 |
msgid ""
|
3933 |
"The attempt was blocked and the option was reversed to its original value."
|
3934 |
msgstr ""
|
3935 |
|
3936 |
-
#: lib/utils.php:
|
3937 |
msgid "Attempt to modify WordPress settings"
|
3938 |
msgstr ""
|
3939 |
|
3940 |
-
#: lib/utils.php:
|
3941 |
msgid ""
|
3942 |
"NinjaFirewall has blocked an attempt to modify some important WordPress "
|
3943 |
"settings by a user that does not have administrative privileges:"
|
3944 |
msgstr ""
|
3945 |
|
3946 |
-
#: lib/utils.php:
|
3947 |
#, php-format
|
3948 |
msgid "Option: %s"
|
3949 |
msgstr ""
|
3950 |
|
3951 |
-
#: lib/utils.php:
|
3952 |
#, php-format
|
3953 |
msgid "Original value: %s"
|
3954 |
msgstr ""
|
3955 |
|
3956 |
-
#: lib/utils.php:
|
3957 |
#, php-format
|
3958 |
msgid "Modified value: %s"
|
3959 |
msgstr ""
|
3960 |
|
3961 |
-
#: lib/utils.php:
|
3962 |
#, php-format
|
3963 |
msgid "Action taken: %s"
|
3964 |
msgstr ""
|
3965 |
|
3966 |
-
#: lib/utils.php:
|
3967 |
msgid "Code injection attempt in WordPress options table"
|
3968 |
msgstr ""
|
3969 |
|
3970 |
-
#: lib/utils.php:
|
3971 |
msgid ""
|
3972 |
"NinjaFirewall has blocked an attempt to inject code in the WordPress options "
|
3973 |
"table by a user that does not have administrative privileges:"
|
3974 |
msgstr ""
|
3975 |
|
3976 |
-
#: lib/utils.php:
|
3977 |
#, php-format
|
3978 |
msgid "Code: %s"
|
3979 |
msgstr ""
|
3980 |
|
3981 |
-
#: lib/utils.php:
|
3982 |
-
msgid ""
|
3983 |
-
"This protection (and notification) can be turned off from NinjaFirewall "
|
3984 |
-
"\"Firewall Policies\" page."
|
3985 |
-
msgstr ""
|
3986 |
-
|
3987 |
-
#: lib/utils.php:1377
|
3988 |
#, php-format
|
3989 |
msgid "Error, cannot create the %s folder."
|
3990 |
msgstr ""
|
3991 |
|
3992 |
-
#: lib/utils.php:
|
3993 |
msgid "Check your server permissions and try again."
|
3994 |
msgstr ""
|
3995 |
|
3996 |
-
#: lib/utils.php:
|
3997 |
#, php-format
|
3998 |
msgid "Error, the %s folder is not writable."
|
3999 |
msgstr ""
|
4000 |
|
4001 |
-
#: lib/utils.php:
|
4002 |
#, php-format
|
4003 |
msgid "Error, cannot write %s."
|
4004 |
msgstr ""
|
@@ -4372,131 +4413,131 @@ msgstr ""
|
|
4372 |
msgid "Cannot retrieve user rules from database (#4)"
|
4373 |
msgstr ""
|
4374 |
|
4375 |
-
#: ninjafirewall.php:
|
4376 |
msgid ""
|
4377 |
"You do not have \"unfiltered_html\" capability. Please enable it in order to "
|
4378 |
"run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
|
4379 |
"in your wp-config.php script)."
|
4380 |
msgstr ""
|
4381 |
|
4382 |
-
#: ninjafirewall.php:
|
4383 |
#, php-format
|
4384 |
msgid ""
|
4385 |
"NinjaFirewall requires WordPress 3.3 or greater but your current version is "
|
4386 |
"%s."
|
4387 |
msgstr ""
|
4388 |
|
4389 |
-
#: ninjafirewall.php:
|
4390 |
#, php-format
|
4391 |
msgid ""
|
4392 |
"NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
|
4393 |
msgstr ""
|
4394 |
|
4395 |
-
#: ninjafirewall.php:
|
4396 |
#, php-format
|
4397 |
msgid "NinjaFirewall requires the PHP %s extension."
|
4398 |
msgstr ""
|
4399 |
|
4400 |
-
#: ninjafirewall.php:
|
4401 |
msgid ""
|
4402 |
"You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
|
4403 |
"5.3.0 (see http://php.net/safe-mode)."
|
4404 |
msgstr ""
|
4405 |
|
4406 |
-
#: ninjafirewall.php:
|
4407 |
msgid "You are not allowed to activate NinjaFirewall."
|
4408 |
msgstr ""
|
4409 |
|
4410 |
-
#: ninjafirewall.php:
|
4411 |
msgid "NinjaFirewall is not compatible with Microsoft Windows."
|
4412 |
msgstr ""
|
4413 |
|
4414 |
-
#: ninjafirewall.php:
|
4415 |
msgid ""
|
4416 |
"All fields will be restored to their default values and any changes you made "
|
4417 |
"will be lost. Continue?"
|
4418 |
msgstr ""
|
4419 |
|
4420 |
-
#: ninjafirewall.php:
|
4421 |
msgid "Missing security nonce, try to reload the page."
|
4422 |
msgstr ""
|
4423 |
|
4424 |
-
#: ninjafirewall.php:
|
4425 |
msgid "Please select the HTTP server in the list."
|
4426 |
msgstr ""
|
4427 |
|
4428 |
-
#: ninjafirewall.php:
|
4429 |
msgid ""
|
4430 |
"This action will restore the selected configuration file and will override "
|
4431 |
"all your current firewall options, policies and rules. Continue?"
|
4432 |
msgstr ""
|
4433 |
|
4434 |
-
#: ninjafirewall.php:
|
4435 |
msgid ""
|
4436 |
"Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
|
4437 |
"hyphen [-] or an underscore [_] will be removed from the filename and "
|
4438 |
"replaced with the substitution character. Continue?"
|
4439 |
msgstr ""
|
4440 |
|
4441 |
-
#: ninjafirewall.php:
|
4442 |
msgid ""
|
4443 |
"Ensure that you can access your admin console over HTTPS before enabling "
|
4444 |
"this option, otherwise you will lock yourself out of your site. Continue?"
|
4445 |
msgstr ""
|
4446 |
|
4447 |
-
#: ninjafirewall.php:
|
4448 |
msgid "Delete the current snapshot ?"
|
4449 |
msgstr ""
|
4450 |
|
4451 |
-
#: ninjafirewall.php:
|
4452 |
msgid "Invalid character."
|
4453 |
msgstr ""
|
4454 |
|
4455 |
-
#: ninjafirewall.php:
|
4456 |
msgid "\"admin\" is not acceptable, please choose another user name."
|
4457 |
msgstr ""
|
4458 |
|
4459 |
-
#: ninjafirewall.php:
|
4460 |
msgid "Please enter max 1024 character only."
|
4461 |
msgstr ""
|
4462 |
|
4463 |
-
#: ninjafirewall.php:
|
4464 |
msgid "Select when to enable the login protection."
|
4465 |
msgstr ""
|
4466 |
|
4467 |
-
#: ninjafirewall.php:
|
4468 |
msgid "Enter a name and a password for the HTTP authentication."
|
4469 |
msgstr ""
|
4470 |
|
4471 |
-
#: ninjafirewall.php:
|
4472 |
msgid "Your public key is not valid."
|
4473 |
msgstr ""
|
4474 |
|
4475 |
-
#: ninjafirewall.php:
|
4476 |
msgid "No traffic yet, please wait"
|
4477 |
msgstr ""
|
4478 |
|
4479 |
-
#: ninjafirewall.php:
|
4480 |
msgid "seconds..."
|
4481 |
msgstr ""
|
4482 |
|
4483 |
-
#: ninjafirewall.php:
|
4484 |
msgid "Error: Live Log did not receive the expected response from your server:"
|
4485 |
msgstr ""
|
4486 |
|
4487 |
-
#: ninjafirewall.php:
|
4488 |
msgid "Error: URL does not seem to exist (404 Not Found):"
|
4489 |
msgstr ""
|
4490 |
|
4491 |
-
#: ninjafirewall.php:
|
4492 |
msgid "Error: Cannot find your log file. Try to reload this page."
|
4493 |
msgstr ""
|
4494 |
|
4495 |
-
#: ninjafirewall.php:
|
4496 |
msgid "Error: The HTTP server returned the following error code:"
|
4497 |
msgstr ""
|
4498 |
|
4499 |
-
#: ninjafirewall.php:579
|
4500 |
msgid "Error: Security nonces do not match. Reload the page and try again."
|
4501 |
msgstr ""
|
4502 |
|
@@ -4509,66 +4550,66 @@ msgstr ""
|
|
4509 |
msgid "Error: missing parameter (%s)."
|
4510 |
msgstr ""
|
4511 |
|
4512 |
-
#: ninjafirewall.php:
|
4513 |
msgid "NinjaFirewall: Dashboard"
|
4514 |
msgstr ""
|
4515 |
|
4516 |
-
#: ninjafirewall.php:
|
4517 |
msgid "NinjaFirewall: Firewall Options"
|
4518 |
msgstr ""
|
4519 |
|
4520 |
-
#: ninjafirewall.php:
|
4521 |
msgid "NinjaFirewall: Firewall Policies"
|
4522 |
msgstr ""
|
4523 |
|
4524 |
-
#: ninjafirewall.php:
|
4525 |
msgid "NinjaFirewall: Monitoring"
|
4526 |
msgstr ""
|
4527 |
|
4528 |
-
#: ninjafirewall.php:
|
4529 |
msgid "NinjaFirewall: Anti-Malware"
|
4530 |
msgstr ""
|
4531 |
|
4532 |
-
#: ninjafirewall.php:
|
4533 |
msgid "NinjaFirewall: Network"
|
4534 |
msgstr ""
|
4535 |
|
4536 |
-
#: ninjafirewall.php:
|
4537 |
msgid "NinjaFirewall: Event Notifications"
|
4538 |
msgstr ""
|
4539 |
|
4540 |
-
#: ninjafirewall.php:
|
4541 |
msgid "NinjaFirewall: Log-in Protection"
|
4542 |
msgstr ""
|
4543 |
|
4544 |
-
#: ninjafirewall.php:
|
4545 |
msgid "NinjaFirewall: Logs"
|
4546 |
msgstr ""
|
4547 |
|
4548 |
-
#: ninjafirewall.php:
|
4549 |
msgid "NinjaFirewall: Security Rules"
|
4550 |
msgstr ""
|
4551 |
|
4552 |
-
#: ninjafirewall.php:
|
4553 |
msgid "NinjaFirewall Settings"
|
4554 |
msgstr ""
|
4555 |
|
4556 |
-
#: ninjafirewall.php:
|
4557 |
msgid "NinjaFirewall is enabled"
|
4558 |
msgstr ""
|
4559 |
|
4560 |
-
#: ninjafirewall.php:
|
4561 |
msgid "Access Restricted"
|
4562 |
msgstr ""
|
4563 |
|
4564 |
-
#: ninjafirewall.php:
|
4565 |
msgid "Settings"
|
4566 |
msgstr ""
|
4567 |
|
4568 |
-
#: ninjafirewall.php:
|
4569 |
msgid "Upgrade to Premium"
|
4570 |
msgstr ""
|
4571 |
|
4572 |
-
#: ninjafirewall.php:
|
4573 |
msgid "Rate it!"
|
4574 |
msgstr ""
|
2 |
msgid ""
|
3 |
msgstr ""
|
4 |
"Project-Id-Version: Stable (latest release)\n"
|
5 |
+
"POT-Creation-Date: 2020-01-18 16:33+0700\n"
|
6 |
"PO-Revision-Date: 2018-04-05 22:52+0700\n"
|
7 |
"Last-Translator: NinTechNet <contact@nintechnet.com>\n"
|
8 |
"Language-Team: \n"
|
18 |
"X-Poedit-SearchPath-0: .\n"
|
19 |
"X-Poedit-SearchPathExcluded-0: /languages\n"
|
20 |
|
21 |
+
#: lib/anti_malware.php:24 ninjafirewall.php:774
|
22 |
msgid "Anti-Malware"
|
23 |
msgstr ""
|
24 |
|
76 |
msgid "NinjaFirewall (WP Edition)"
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: lib/dashboard.php:120 ninjafirewall.php:752
|
80 |
msgid "Dashboard"
|
81 |
msgstr ""
|
82 |
|
88 |
msgid "About..."
|
89 |
msgstr ""
|
90 |
|
91 |
+
#: lib/dashboard.php:134
|
92 |
+
msgid "Thank you for using NinjaFirewall."
|
93 |
+
msgstr ""
|
94 |
+
|
95 |
+
#: lib/dashboard.php:135
|
96 |
+
#, php-format
|
97 |
+
msgid ""
|
98 |
+
"Every page of NinjaFirewall has a contextual help: whenever you need help "
|
99 |
+
"about an option or feature, click on the %s tab located in the upper right "
|
100 |
+
"corner of the corresponding page."
|
101 |
+
msgstr ""
|
102 |
+
|
103 |
+
#: lib/dashboard.php:135
|
104 |
+
msgid "Help"
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: lib/dashboard.php:137
|
108 |
+
msgid "Got it!"
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: lib/dashboard.php:153 lib/help.php:36
|
112 |
msgid "Firewall Dashboard"
|
113 |
msgstr ""
|
114 |
|
115 |
+
#: lib/dashboard.php:162
|
116 |
msgid ""
|
117 |
"It seems that you may have another instance of NinjaFirewall running in a "
|
118 |
"parent directory. Make sure to follow these instructions:"
|
119 |
msgstr ""
|
120 |
|
121 |
+
#: lib/dashboard.php:164
|
122 |
msgid ""
|
123 |
"Temporarily disable the firewall in the parent folder by renaming its PHP "
|
124 |
"INI or .htaccess file."
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: lib/dashboard.php:166
|
128 |
msgid "Install NinjaFirewall on this site in Full WAF mode."
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: lib/dashboard.php:168
|
132 |
msgid ""
|
133 |
"Restore the PHP INI or .htaccess in the parent folder to re-enable the "
|
134 |
"firewall."
|
135 |
msgstr ""
|
136 |
|
137 |
+
#: lib/dashboard.php:174
|
138 |
msgid "Unknown error"
|
139 |
msgstr ""
|
140 |
|
141 |
+
#: lib/dashboard.php:178 lib/dashboard.php:186
|
142 |
msgid "Firewall"
|
143 |
msgstr ""
|
144 |
|
145 |
+
#: lib/dashboard.php:187 lib/dashboard.php:323 lib/firewall_options.php:64
|
146 |
#: lib/login_protection.php:203 lib/logs_live_log.php:101
|
147 |
+
#: lib/monitoring_file_guard.php:70 lib/security_rules_update.php:138
|
148 |
msgid "Enabled"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: lib/dashboard.php:194
|
152 |
msgid "Mode"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: lib/dashboard.php:199 lib/dashboard.php:205
|
156 |
#, php-format
|
157 |
msgid "NinjaFirewall is running in %s mode."
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: lib/dashboard.php:199
|
161 |
msgid "WordPress WAF"
|
162 |
msgstr ""
|
163 |
|
164 |
+
#: lib/dashboard.php:201
|
165 |
#, php-format
|
166 |
msgid ""
|
167 |
"For better protection, <a %s>click here</a> to enable its Full WAF mode."
|
168 |
msgstr ""
|
169 |
|
170 |
+
#: lib/dashboard.php:201
|
171 |
msgid "Click to install NinjaFirewall in Full WAF mode."
|
172 |
msgstr ""
|
173 |
|
174 |
+
#: lib/dashboard.php:205
|
175 |
msgid "Full WAF"
|
176 |
msgstr ""
|
177 |
|
178 |
+
#: lib/dashboard.php:218 lib/firewall_options.php:76 lib/help.php:77
|
179 |
msgid "Debugging mode"
|
180 |
msgstr ""
|
181 |
|
182 |
+
#: lib/dashboard.php:219
|
183 |
msgid "Enabled."
|
184 |
msgstr ""
|
185 |
|
186 |
+
#: lib/dashboard.php:219
|
187 |
msgid "Click here to turn Debugging Mode off"
|
188 |
msgstr ""
|
189 |
|
190 |
+
#: lib/dashboard.php:225
|
191 |
msgid "Edition"
|
192 |
msgstr ""
|
193 |
|
194 |
+
#: lib/dashboard.php:226
|
195 |
+
msgid ""
|
196 |
+
"Need more security? Explore our supercharged premium version: NinjaFirewall "
|
197 |
+
"(WP+ Edition)"
|
198 |
msgstr ""
|
199 |
|
200 |
+
#: lib/dashboard.php:229
|
201 |
msgid "Version"
|
202 |
msgstr ""
|
203 |
|
204 |
+
#: lib/dashboard.php:230
|
205 |
msgid "Security rules:"
|
206 |
msgstr ""
|
207 |
|
208 |
+
#: lib/dashboard.php:234
|
209 |
msgid "PHP SAPI"
|
210 |
msgstr ""
|
211 |
|
212 |
+
#: lib/dashboard.php:252
|
213 |
msgid "Updates"
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: lib/dashboard.php:253
|
217 |
msgid "Security rules updates are disabled."
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: lib/dashboard.php:253
|
221 |
msgid ""
|
222 |
"If you want your blog to be protected against the latest threats, enable "
|
223 |
"automatic security rules updates."
|
224 |
msgstr ""
|
225 |
|
226 |
+
#: lib/dashboard.php:261 lib/dashboard.php:269
|
227 |
msgid "Admin user"
|
228 |
msgstr ""
|
229 |
|
230 |
+
#: lib/dashboard.php:262
|
231 |
#, php-format
|
232 |
msgid ""
|
233 |
"You are not whitelisted. Ensure that the \"Do not block WordPress "
|
236 |
"your administration dashboard."
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: lib/dashboard.php:270
|
240 |
msgid "You are whitelisted by the firewall."
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: lib/dashboard.php:277
|
244 |
msgid "Restrictions"
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: lib/dashboard.php:278
|
248 |
msgid "Access to NinjaFirewall is restricted to specific users."
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: lib/dashboard.php:289
|
252 |
msgid "User session"
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: lib/dashboard.php:290
|
256 |
msgid ""
|
257 |
"It seems that the user session set by NinjaFirewall was not found by the "
|
258 |
"firewall script."
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: lib/dashboard.php:298
|
262 |
#, php-format
|
263 |
msgid ""
|
264 |
"the public key is invalid. Please <a href=\"%s\">check your configuration</"
|
265 |
"a>."
|
266 |
msgstr ""
|
267 |
|
268 |
+
#: lib/dashboard.php:302
|
269 |
msgid "No IP address restriction."
|
270 |
msgstr ""
|
271 |
|
272 |
+
#: lib/dashboard.php:305
|
273 |
#, php-format
|
274 |
msgid "IP address %s is allowed to access NinjaFirewall's log on this server."
|
275 |
msgstr ""
|
276 |
|
277 |
+
#: lib/dashboard.php:308
|
278 |
#, php-format
|
279 |
msgid ""
|
280 |
"the whitelisted IP is not valid. Please <a href=\"%s\">check your "
|
281 |
"configuration</a>."
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: lib/dashboard.php:313 lib/help.php:460 lib/logs_firewall_log.php:194
|
285 |
#: lib/wpplus.php:170
|
286 |
msgid "Centralized Logging"
|
287 |
msgstr ""
|
288 |
|
289 |
+
#: lib/dashboard.php:317 lib/security_rules_update.php:415
|
290 |
#, php-format
|
291 |
msgid "Error: %s"
|
292 |
msgstr ""
|
293 |
|
294 |
+
#: lib/dashboard.php:332
|
295 |
msgid "Source IP"
|
296 |
msgstr ""
|
297 |
|
298 |
+
#: lib/dashboard.php:333
|
299 |
#, php-format
|
300 |
msgid "You have a private IP : %s"
|
301 |
msgstr ""
|
302 |
|
303 |
+
#: lib/dashboard.php:333
|
304 |
#, php-format
|
305 |
msgid ""
|
306 |
"If your site is behind a reverse proxy or a load balancer, ensure that you "
|
308 |
"otherwise use the NinjaFirewall %s configuration file."
|
309 |
msgstr ""
|
310 |
|
311 |
+
#: lib/dashboard.php:341 lib/dashboard.php:351
|
312 |
msgid "CDN detection"
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: lib/dashboard.php:342
|
316 |
#, php-format
|
317 |
msgid ""
|
318 |
"%s detected: you seem to be using Cloudflare CDN services. Ensure that you "
|
320 |
"otherwise use the NinjaFirewall %s configuration file."
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: lib/dashboard.php:352
|
324 |
#, php-format
|
325 |
msgid ""
|
326 |
"%s detected: you seem to be using Incapsula CDN services. Ensure that you "
|
328 |
"otherwise use the NinjaFirewall %s configuration file."
|
329 |
msgstr ""
|
330 |
|
331 |
+
#: lib/dashboard.php:361 lib/dashboard.php:370
|
332 |
msgid "Log dir"
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: lib/dashboard.php:362 lib/dashboard.php:371
|
336 |
#, php-format
|
337 |
msgid "%s directory is not writable! Please chmod it to 0777 or equivalent."
|
338 |
msgstr ""
|
339 |
|
340 |
+
#: lib/dashboard.php:379
|
341 |
msgid "Optional configuration file"
|
342 |
msgstr ""
|
343 |
|
344 |
+
#: lib/dashboard.php:386
|
345 |
msgid "MySQLi link identifier"
|
346 |
msgstr ""
|
347 |
|
348 |
+
#: lib/dashboard.php:387
|
349 |
msgid "A MySQLi link identifier was detected in your <code>.htninja</code>."
|
350 |
msgstr ""
|
351 |
|
352 |
+
#: lib/dashboard.php:393
|
353 |
msgid "Help & configuration"
|
354 |
msgstr ""
|
355 |
|
363 |
"themes:"
|
364 |
msgstr ""
|
365 |
|
366 |
+
#: lib/dashboard_about.php:31 lib/help.php:508
|
367 |
msgid "GDPR Compliance"
|
368 |
msgstr ""
|
369 |
|
433 |
msgid "Select monthly stats to view..."
|
434 |
msgstr ""
|
435 |
|
436 |
+
#: lib/event_notifications.php:34 lib/help.php:370 ninjafirewall.php:782
|
437 |
msgid "Event Notifications"
|
438 |
msgstr ""
|
439 |
|
449 |
msgid "WordPress admin dashboard"
|
450 |
msgstr ""
|
451 |
|
452 |
+
#: lib/event_notifications.php:55 lib/event_notifications.php:118
|
453 |
+
#: lib/event_notifications.php:138
|
454 |
msgid "Send me an alert whenever"
|
455 |
msgstr ""
|
456 |
|
527 |
msgid "Updates WordPress (default)"
|
528 |
msgstr ""
|
529 |
|
530 |
+
#: lib/event_notifications.php:115
|
531 |
+
msgid "Security updates"
|
532 |
msgstr ""
|
533 |
|
534 |
+
#: lib/event_notifications.php:120
|
535 |
msgid ""
|
536 |
+
"An important security update is available for a plugin, theme or WordPress "
|
537 |
"(default)"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: lib/event_notifications.php:135
|
541 |
+
msgid "Administrator account"
|
542 |
+
msgstr ""
|
543 |
+
|
544 |
+
#: lib/event_notifications.php:140
|
545 |
+
msgid ""
|
546 |
+
"An administrator account is created, modified or deleted in the database "
|
547 |
+
"(default)"
|
548 |
msgstr ""
|
549 |
|
550 |
+
#: lib/event_notifications.php:147
|
551 |
msgid "Daily report"
|
552 |
msgstr ""
|
553 |
|
554 |
+
#: lib/event_notifications.php:150
|
555 |
msgid "Send me a daily activity report"
|
556 |
msgstr ""
|
557 |
|
558 |
+
#: lib/event_notifications.php:152 lib/event_notifications.php:164
|
559 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
560 |
#: lib/firewall_policies.php:25 lib/login_protection.php:309
|
561 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
563 |
msgid "Yes"
|
564 |
msgstr ""
|
565 |
|
566 |
+
#: lib/event_notifications.php:152 lib/event_notifications.php:164
|
567 |
#: lib/firewall_options.php:78 lib/firewall_options.php:113
|
568 |
#: lib/firewall_policies.php:26 lib/login_protection.php:309
|
569 |
#: lib/login_protection.php:324 lib/login_protection.php:345
|
571 |
msgid "No"
|
572 |
msgstr ""
|
573 |
|
574 |
+
#: lib/event_notifications.php:159
|
575 |
msgid "Log"
|
576 |
msgstr ""
|
577 |
|
578 |
+
#: lib/event_notifications.php:162
|
579 |
msgid "Write all events to the firewall log"
|
580 |
msgstr ""
|
581 |
|
582 |
+
#: lib/event_notifications.php:176
|
583 |
msgid "PHP backtrace"
|
584 |
msgstr ""
|
585 |
|
586 |
+
#: lib/event_notifications.php:179
|
587 |
msgid "Attach a PHP backtrace to important notifications"
|
588 |
msgstr ""
|
589 |
|
590 |
+
#: lib/event_notifications.php:182
|
591 |
msgid "Disable backtrace"
|
592 |
msgstr ""
|
593 |
|
594 |
+
#: lib/event_notifications.php:183
|
595 |
msgid "Low verbosity"
|
596 |
msgstr ""
|
597 |
|
598 |
+
#: lib/event_notifications.php:184
|
599 |
msgid "Medium verbosity (default)"
|
600 |
msgstr ""
|
601 |
|
602 |
+
#: lib/event_notifications.php:185
|
603 |
msgid "High verbosity"
|
604 |
msgstr ""
|
605 |
|
606 |
+
#: lib/event_notifications.php:187
|
607 |
#, php-format
|
608 |
msgid "<a href=\"%s\">Consult our blog</a> for more info."
|
609 |
msgstr ""
|
610 |
|
611 |
+
#: lib/event_notifications.php:197 lib/event_notifications.php:227
|
612 |
msgid "Contact email"
|
613 |
msgstr ""
|
614 |
|
615 |
+
#: lib/event_notifications.php:200 lib/event_notifications.php:230
|
616 |
msgid "Alerts should be sent to"
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: lib/event_notifications.php:209 lib/event_notifications.php:235
|
620 |
msgid ""
|
621 |
"Multiple recipients must be comma-separated (e.g., <code>joe@example.org,"
|
622 |
"alice@example.org</code>)."
|
623 |
msgstr ""
|
624 |
|
625 |
+
#: lib/event_notifications.php:232
|
626 |
msgid "Only to me, the Super Admin"
|
627 |
msgstr ""
|
628 |
|
629 |
+
#: lib/event_notifications.php:232
|
630 |
msgid "default"
|
631 |
msgstr ""
|
632 |
|
633 |
+
#: lib/event_notifications.php:233
|
634 |
msgid "To the administrator of the site where originated the alert"
|
635 |
msgstr ""
|
636 |
|
637 |
+
#: lib/event_notifications.php:234
|
638 |
msgid "Other(s):"
|
639 |
msgstr ""
|
640 |
|
641 |
+
#: lib/event_notifications.php:246
|
642 |
msgid "Save Event Notifications"
|
643 |
msgstr ""
|
644 |
|
645 |
+
#: lib/event_notifications.php:477
|
646 |
msgid "[NinjaFirewall] Daily Activity Report"
|
647 |
msgstr ""
|
648 |
|
649 |
+
#: lib/event_notifications.php:487
|
650 |
#, php-format
|
651 |
msgid "Daily activity report for: %s"
|
652 |
msgstr ""
|
653 |
|
654 |
+
#: lib/event_notifications.php:488
|
655 |
msgid "Date Range Processed: Yesterday"
|
656 |
msgstr ""
|
657 |
|
658 |
+
#: lib/event_notifications.php:490
|
659 |
msgid "Blocked threats:"
|
660 |
msgstr ""
|
661 |
|
662 |
+
#: lib/event_notifications.php:492
|
663 |
msgid "critical:"
|
664 |
msgstr ""
|
665 |
|
666 |
+
#: lib/event_notifications.php:493
|
667 |
msgid "high:"
|
668 |
msgstr ""
|
669 |
|
670 |
+
#: lib/event_notifications.php:494
|
671 |
msgid "medium:"
|
672 |
msgstr ""
|
673 |
|
674 |
+
#: lib/event_notifications.php:496
|
675 |
msgid "Blocked brute-force attacks:"
|
676 |
msgstr ""
|
677 |
|
678 |
+
#: lib/event_notifications.php:497 lib/event_updates.php:216 lib/utils.php:788
|
679 |
msgid ""
|
680 |
"This notification can be turned off from NinjaFirewall \"Event Notifications"
|
681 |
"\" page."
|
682 |
msgstr ""
|
683 |
|
684 |
+
#: lib/event_notifications.php:501 lib/event_updates.php:218 lib/events.php:225
|
685 |
+
#: lib/firewall_options.php:525 lib/monitoring_file_check.php:777
|
686 |
+
#: lib/monitoring_file_check.php:798 lib/security_rules_update.php:561
|
687 |
msgid "Support forum:"
|
688 |
msgstr ""
|
689 |
|
690 |
+
#: lib/event_notifications.php:504 lib/event_updates.php:221 lib/events.php:228
|
691 |
+
#: lib/firewall_options.php:528 lib/monitoring_file_check.php:780
|
692 |
+
#: lib/monitoring_file_check.php:801 lib/security_rules_update.php:564
|
693 |
+
#: lib/utils.php:235 lib/utils.php:584 lib/utils.php:793 lib/utils.php:971
|
694 |
+
#: lib/utils.php:1284
|
695 |
#, php-format
|
696 |
msgid ""
|
697 |
"Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): "
|
698 |
"%s"
|
699 |
msgstr ""
|
700 |
|
701 |
+
#: lib/event_updates.php:157
|
702 |
+
msgid "[NinjaFirewall] Security update available"
|
703 |
+
msgstr ""
|
704 |
+
|
705 |
+
#: lib/event_updates.php:159
|
706 |
+
msgid ""
|
707 |
+
"NinjaFirewall has detected that there are security updates available for "
|
708 |
+
"your website:"
|
709 |
+
msgstr ""
|
710 |
+
|
711 |
+
#: lib/event_updates.php:160 lib/utils.php:219 lib/utils.php:777
|
712 |
+
#: lib/utils.php:954 lib/utils.php:1277
|
713 |
+
msgid "Date:"
|
714 |
+
msgstr ""
|
715 |
+
|
716 |
+
#: lib/event_updates.php:163 lib/event_updates.php:165
|
717 |
+
#, php-format
|
718 |
+
msgid "Blog: %s"
|
719 |
+
msgstr ""
|
720 |
+
|
721 |
+
#: lib/event_updates.php:171 lib/event_updates.php:185
|
722 |
+
#: lib/event_updates.php:202
|
723 |
+
#, php-format
|
724 |
+
msgid "Your version: %s"
|
725 |
+
msgstr ""
|
726 |
+
|
727 |
+
#: lib/event_updates.php:172 lib/event_updates.php:186
|
728 |
+
#: lib/event_updates.php:203
|
729 |
+
#, php-format
|
730 |
+
msgid "New version: %s"
|
731 |
+
msgstr ""
|
732 |
+
|
733 |
+
#: lib/event_updates.php:174 lib/event_updates.php:189
|
734 |
+
#: lib/event_updates.php:206
|
735 |
+
msgid "Severity: This is an important security update"
|
736 |
+
msgstr ""
|
737 |
+
|
738 |
+
#: lib/event_updates.php:176 lib/event_updates.php:191
|
739 |
+
#: lib/event_updates.php:208
|
740 |
+
msgid "Severity: **This is a critical security update**"
|
741 |
+
msgstr ""
|
742 |
+
|
743 |
+
#: lib/event_updates.php:184
|
744 |
+
#, php-format
|
745 |
+
msgid "Plugin: %s"
|
746 |
+
msgstr ""
|
747 |
+
|
748 |
+
#: lib/event_updates.php:201
|
749 |
+
#, php-format
|
750 |
+
msgid "Theme: %s"
|
751 |
+
msgstr ""
|
752 |
+
|
753 |
+
#: lib/event_updates.php:214
|
754 |
+
msgid "Don't leave your blog at risk, make sure to update as soon as possible."
|
755 |
+
msgstr ""
|
756 |
+
|
757 |
+
#: lib/events.php:27
|
758 |
+
msgid "Name:"
|
759 |
+
msgstr ""
|
760 |
+
|
761 |
+
#: lib/events.php:28
|
762 |
+
msgid "Plugin"
|
763 |
+
msgstr ""
|
764 |
+
|
765 |
+
#: lib/events.php:29
|
766 |
+
msgid "Theme"
|
767 |
+
msgstr ""
|
768 |
+
|
769 |
+
#: lib/events.php:30
|
770 |
+
msgid "Version:"
|
771 |
+
msgstr ""
|
772 |
+
|
773 |
+
#: lib/events.php:40 lib/events.php:73 lib/events.php:77 lib/events.php:136
|
774 |
+
msgid "activated"
|
775 |
+
msgstr ""
|
776 |
+
|
777 |
+
#: lib/events.php:45 lib/events.php:93 lib/events.php:183 lib/events.php:195
|
778 |
+
msgid "deleted"
|
779 |
+
msgstr ""
|
780 |
+
|
781 |
+
#: lib/events.php:81 lib/events.php:104 lib/events.php:109 lib/events.php:113
|
782 |
+
#: lib/events.php:128 lib/events.php:132 lib/events.php:148 lib/events.php:157
|
783 |
+
#: lib/events.php:179 lib/events.php:191
|
784 |
+
msgid "updated"
|
785 |
+
msgstr ""
|
786 |
+
|
787 |
+
#: lib/events.php:85 lib/events.php:89
|
788 |
+
msgid "deactivated"
|
789 |
+
msgstr ""
|
790 |
+
|
791 |
+
#: lib/events.php:140 lib/events.php:161 lib/events.php:175 lib/events.php:187
|
792 |
+
msgid "installed"
|
793 |
+
msgstr ""
|
794 |
+
|
795 |
+
#: lib/events.php:144 lib/events.php:165
|
796 |
+
msgid "uploaded"
|
797 |
+
msgstr ""
|
798 |
+
|
799 |
+
#: lib/events.php:211
|
800 |
+
#, php-format
|
801 |
+
msgid "[NinjaFirewall] Alert: %s"
|
802 |
+
msgstr ""
|
803 |
+
|
804 |
+
#: lib/events.php:213 lib/events.php:215 lib/utils.php:571
|
805 |
+
msgid "-Blog:"
|
806 |
+
msgstr ""
|
807 |
+
|
808 |
+
#: lib/events.php:218
|
809 |
+
msgid "NinjaFirewall has detected the following activity on your account:"
|
810 |
+
msgstr ""
|
811 |
+
|
812 |
+
#: lib/events.php:220 lib/utils.php:576
|
813 |
+
msgid "-User:"
|
814 |
+
msgstr ""
|
815 |
+
|
816 |
+
#: lib/events.php:221 lib/utils.php:577
|
817 |
+
msgid "-IP:"
|
818 |
+
msgstr ""
|
819 |
+
|
820 |
+
#: lib/events.php:222 lib/utils.php:578
|
821 |
+
msgid "-Date:"
|
822 |
+
msgstr ""
|
823 |
+
|
824 |
+
#: lib/firewall_options.php:29 ninjafirewall.php:756
|
825 |
msgid "Firewall Options"
|
826 |
msgstr ""
|
827 |
|
831 |
|
832 |
#: lib/firewall_options.php:64 lib/login_protection.php:203
|
833 |
#: lib/logs_live_log.php:101 lib/monitoring_file_guard.php:70
|
834 |
+
#: lib/security_rules_update.php:138
|
835 |
msgid "Disabled"
|
836 |
msgstr ""
|
837 |
|
878 |
"Protection</a>."
|
879 |
msgstr ""
|
880 |
|
881 |
+
#: lib/firewall_options.php:128 lib/help.php:90
|
882 |
msgid "Blocked user message"
|
883 |
msgstr ""
|
884 |
|
955 |
msgid "[NinjaFirewall] Alert: Firewall is disabled"
|
956 |
msgstr ""
|
957 |
|
958 |
+
#: lib/firewall_options.php:501 lib/firewall_options.php:503
|
|
|
959 |
msgid "-Blog :"
|
960 |
msgstr ""
|
961 |
|
978 |
"Someone imported a new configuration which overrode the firewall settings:"
|
979 |
msgstr ""
|
980 |
|
981 |
+
#: lib/firewall_options.php:520
|
982 |
msgid "-User :"
|
983 |
msgstr ""
|
984 |
|
985 |
+
#: lib/firewall_options.php:521
|
986 |
msgid "-IP :"
|
987 |
msgstr ""
|
988 |
|
989 |
+
#: lib/firewall_options.php:522
|
990 |
msgid "-Date :"
|
991 |
msgstr ""
|
992 |
|
996 |
"This feature is only available when NinjaFirewall is running in %s mode."
|
997 |
msgstr ""
|
998 |
|
999 |
+
#: lib/firewall_policies.php:62 ninjafirewall.php:760
|
1000 |
msgid "Firewall Policies"
|
1001 |
msgstr ""
|
1002 |
|
1008 |
msgid "No action taken."
|
1009 |
msgstr ""
|
1010 |
|
1011 |
+
#: lib/firewall_policies.php:85 lib/help.php:161
|
1012 |
msgid "Basic Policies"
|
1013 |
msgstr ""
|
1014 |
|
1015 |
+
#: lib/firewall_policies.php:86 lib/help.php:214
|
1016 |
msgid "Intermediate Policies"
|
1017 |
msgstr ""
|
1018 |
|
1019 |
+
#: lib/firewall_policies.php:87 lib/help.php:253
|
1020 |
msgid "Advanced Policies"
|
1021 |
msgstr ""
|
1022 |
|
1036 |
msgid "HTTPS traffic only"
|
1037 |
msgstr ""
|
1038 |
|
1039 |
+
#: lib/firewall_policies.php:141 lib/help.php:169
|
1040 |
msgid "Uploads"
|
1041 |
msgstr ""
|
1042 |
|
1043 |
+
#: lib/firewall_policies.php:144 lib/help.php:171
|
1044 |
msgid "File Uploads"
|
1045 |
msgstr ""
|
1046 |
|
1056 |
msgid "Disallow uploads"
|
1057 |
msgstr ""
|
1058 |
|
1059 |
+
#: lib/firewall_policies.php:152 lib/help.php:173
|
1060 |
msgid "Sanitise filenames"
|
1061 |
msgstr ""
|
1062 |
|
1064 |
msgid "substitution character:"
|
1065 |
msgstr ""
|
1066 |
|
1067 |
+
#: lib/firewall_policies.php:281 lib/help.php:178
|
1068 |
msgid "Block direct access to any PHP file located in one of these directories"
|
1069 |
msgstr ""
|
1070 |
|
1071 |
+
#: lib/firewall_policies.php:311
|
1072 |
msgid ""
|
1073 |
"NinjaFirewall will not block access to the TinyMCE WYSIWYG editor even if "
|
1074 |
"this option is enabled."
|
1075 |
msgstr ""
|
1076 |
|
1077 |
+
#: lib/firewall_policies.php:326
|
1078 |
msgid ""
|
1079 |
"Unless you have PHP scripts in a \"/cache/\" folder that need to be accessed "
|
1080 |
"by your visitors, we recommend to enable this option."
|
1081 |
msgstr ""
|
1082 |
|
1083 |
+
#: lib/firewall_policies.php:335
|
1084 |
msgid "General"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
+
#: lib/firewall_policies.php:337 lib/help.php:180
|
1088 |
msgid "Block attempts to modify important WordPress settings"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
+
#: lib/firewall_policies.php:338 lib/help.php:182
|
1092 |
msgid "Block user accounts creation"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
+
#: lib/firewall_policies.php:341
|
1096 |
+
#, php-format
|
1097 |
+
msgid ""
|
1098 |
+
"To enable this option, please remove the %s constant from your wp-config.php "
|
1099 |
+
"or .htninja script."
|
1100 |
+
msgstr ""
|
1101 |
+
|
1102 |
+
#: lib/firewall_policies.php:349 lib/help.php:184
|
1103 |
+
msgid "Block attempts to gain administrative privileges"
|
1104 |
+
msgstr ""
|
1105 |
+
|
1106 |
+
#: lib/firewall_policies.php:362 lib/help.php:186
|
1107 |
msgid "WordPress AJAX"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: lib/firewall_policies.php:364
|
1111 |
msgid "Protect <code>admin-ajax.php</code> against suspicious bots"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
+
#: lib/firewall_policies.php:365
|
1115 |
#, php-format
|
1116 |
msgid ""
|
1117 |
"Your server IP (%s), localhost and private IP addresses will not be affected "
|
1118 |
"by this policy."
|
1119 |
msgstr ""
|
1120 |
|
1121 |
+
#: lib/firewall_policies.php:370 lib/help.php:188
|
1122 |
msgid "Protect against username enumeration"
|
1123 |
msgstr ""
|
1124 |
|
1125 |
+
#: lib/firewall_policies.php:372
|
1126 |
msgid "Through the author archives"
|
1127 |
msgstr ""
|
1128 |
|
1129 |
+
#: lib/firewall_policies.php:373
|
1130 |
msgid "Through the login page"
|
1131 |
msgstr ""
|
1132 |
|
1133 |
+
#: lib/firewall_policies.php:374
|
1134 |
msgid "Through the WordPress REST API"
|
1135 |
msgstr ""
|
1136 |
|
1137 |
+
#: lib/firewall_policies.php:379 lib/help.php:190
|
1138 |
msgid "WordPress REST API"
|
1139 |
msgstr ""
|
1140 |
|
1141 |
+
#: lib/firewall_policies.php:381 lib/firewall_policies.php:387
|
1142 |
msgid "Block any access to the API"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
+
#: lib/firewall_policies.php:385 lib/help.php:192
|
1146 |
msgid "WordPress XML-RPC API"
|
1147 |
msgstr ""
|
1148 |
|
1149 |
+
#: lib/firewall_policies.php:388
|
1150 |
msgid "Block <code>system.multicall</code> method"
|
1151 |
msgstr ""
|
1152 |
|
1153 |
+
#: lib/firewall_policies.php:389
|
1154 |
msgid "Block Pingbacks"
|
1155 |
msgstr ""
|
1156 |
|
1157 |
+
#: lib/firewall_policies.php:391
|
1158 |
msgid ""
|
1159 |
"Disabling access to the REST or XML-RPC API may break some functionality on "
|
1160 |
"your blog, its themes or plugins (e.g., Gutenberg editor, Jetpack, Contact "
|
1161 |
"Form 7 etc)."
|
1162 |
msgstr ""
|
1163 |
|
1164 |
+
#: lib/firewall_policies.php:396
|
1165 |
msgid "Block <code>POST</code> requests in the themes folder"
|
1166 |
msgstr ""
|
1167 |
|
1168 |
+
#: lib/firewall_policies.php:406
|
1169 |
+
msgid "Force HTTPS for admin and logins"
|
1170 |
msgstr ""
|
1171 |
|
1172 |
+
#: lib/firewall_policies.php:412
|
1173 |
msgid "Disable the plugin and theme editor"
|
1174 |
msgstr ""
|
1175 |
|
1176 |
+
#: lib/firewall_policies.php:418
|
1177 |
msgid "Disable plugin and theme update/installation"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
+
#: lib/firewall_policies.php:424
|
1181 |
msgid "Disable the fatal error handler"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
+
#: lib/firewall_policies.php:446 lib/help.php:204
|
1185 |
msgid "Users Whitelist"
|
1186 |
msgstr ""
|
1187 |
|
1188 |
+
#: lib/firewall_policies.php:448
|
1189 |
msgid "Add the Administrator to the whitelist (default)."
|
1190 |
msgstr ""
|
1191 |
|
1192 |
+
#: lib/firewall_policies.php:449
|
1193 |
msgid "Add all logged in users to the whitelist."
|
1194 |
msgstr ""
|
1195 |
|
1196 |
+
#: lib/firewall_policies.php:450
|
1197 |
msgid "Disable users whitelist."
|
1198 |
msgstr ""
|
1199 |
|
1200 |
+
#: lib/firewall_policies.php:451
|
1201 |
msgid ""
|
1202 |
"Note: This feature does not apply to <code>FORCE_SSL_ADMIN</code>, "
|
1203 |
"<code>DISALLOW_FILE_EDIT</code>, <code>DISALLOW_FILE_MODS</code> and "
|
1205 |
"always enforced."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
+
#: lib/firewall_policies.php:476 lib/help.php:218
|
1209 |
msgid "HTTP GET variable"
|
1210 |
msgstr ""
|
1211 |
|
1212 |
+
#: lib/firewall_policies.php:479
|
1213 |
msgid "Scan <code>GET</code> variable"
|
1214 |
msgstr ""
|
1215 |
|
1216 |
+
#: lib/firewall_policies.php:485
|
1217 |
msgid "Sanitise <code>GET</code> variable"
|
1218 |
msgstr ""
|
1219 |
|
1220 |
+
#: lib/firewall_policies.php:511 lib/help.php:221
|
1221 |
msgid "HTTP POST variable"
|
1222 |
msgstr ""
|
1223 |
|
1224 |
+
#: lib/firewall_policies.php:514
|
1225 |
msgid "Scan <code>POST</code> variable"
|
1226 |
msgstr ""
|
1227 |
|
1228 |
+
#: lib/firewall_policies.php:520
|
1229 |
msgid "Sanitise <code>POST</code> variable"
|
1230 |
msgstr ""
|
1231 |
|
1232 |
+
#: lib/firewall_policies.php:523 lib/firewall_policies.php:548
|
1233 |
msgid "Do not enable this option unless you know what you are doing!"
|
1234 |
msgstr ""
|
1235 |
|
1236 |
+
#: lib/firewall_policies.php:527 lib/help.php:223
|
1237 |
msgid "Decode Base64-encoded <code>POST</code> variable"
|
1238 |
msgstr ""
|
1239 |
|
1240 |
+
#: lib/firewall_policies.php:542 lib/help.php:225
|
1241 |
msgid "HTTP REQUEST variable"
|
1242 |
msgstr ""
|
1243 |
|
1244 |
+
#: lib/firewall_policies.php:545
|
1245 |
msgid "Sanitise <code>REQUEST</code> variable"
|
1246 |
msgstr ""
|
1247 |
|
1248 |
+
#: lib/firewall_policies.php:567 lib/help.php:228
|
1249 |
msgid "Cookies"
|
1250 |
msgstr ""
|
1251 |
|
1252 |
+
#: lib/firewall_policies.php:570
|
1253 |
msgid "Scan cookies"
|
1254 |
msgstr ""
|
1255 |
|
1256 |
+
#: lib/firewall_policies.php:576
|
1257 |
msgid "Sanitise cookies"
|
1258 |
msgstr ""
|
1259 |
|
1260 |
+
#: lib/firewall_policies.php:602 lib/help.php:231
|
1261 |
msgid "HTTP_USER_AGENT server variable"
|
1262 |
msgstr ""
|
1263 |
|
1264 |
+
#: lib/firewall_policies.php:605
|
1265 |
msgid "Scan <code>HTTP_USER_AGENT</code>"
|
1266 |
msgstr ""
|
1267 |
|
1268 |
+
#: lib/firewall_policies.php:611
|
1269 |
msgid "Sanitise <code>HTTP_USER_AGENT</code>"
|
1270 |
msgstr ""
|
1271 |
|
1272 |
+
#: lib/firewall_policies.php:617 lib/help.php:233
|
1273 |
msgid "Block suspicious bots/scanners"
|
1274 |
msgstr ""
|
1275 |
|
1276 |
+
#: lib/firewall_policies.php:643 lib/help.php:235
|
1277 |
msgid "HTTP_REFERER server variable"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
+
#: lib/firewall_policies.php:646
|
1281 |
msgid "Scan <code>HTTP_REFERER</code>"
|
1282 |
msgstr ""
|
1283 |
|
1284 |
+
#: lib/firewall_policies.php:652
|
1285 |
msgid "Sanitise <code>HTTP_REFERER</code>"
|
1286 |
msgstr ""
|
1287 |
|
1288 |
+
#: lib/firewall_policies.php:658
|
1289 |
msgid ""
|
1290 |
"Block <code>POST</code> requests that do not have an <code>HTTP_REFERER</"
|
1291 |
"code> header"
|
1292 |
msgstr ""
|
1293 |
|
1294 |
+
#: lib/firewall_policies.php:661
|
1295 |
msgid ""
|
1296 |
"Keep this option disabled if you are using scripts like Paypal IPN, "
|
1297 |
"WordPress WP-Cron etc"
|
1298 |
msgstr ""
|
1299 |
|
1300 |
+
#: lib/firewall_policies.php:688
|
1301 |
msgid "Block localhost IP in <code>GET/POST</code> request"
|
1302 |
msgstr ""
|
1303 |
|
1304 |
+
#: lib/firewall_policies.php:694 lib/help.php:243
|
1305 |
msgid "Block HTTP requests with an IP in the <code>HTTP_HOST</code> header"
|
1306 |
msgstr ""
|
1307 |
|
1308 |
+
#: lib/firewall_policies.php:700 lib/help.php:245
|
1309 |
msgid "Scan traffic coming from localhost and private IP address spaces"
|
1310 |
msgstr ""
|
1311 |
|
1312 |
+
#: lib/firewall_policies.php:730
|
1313 |
#, php-format
|
1314 |
msgid ""
|
1315 |
"The \"HTTP response headers\" options below are disabled because the %s PHP "
|
1316 |
"function is not available on your server."
|
1317 |
msgstr ""
|
1318 |
|
1319 |
+
#: lib/firewall_policies.php:750 lib/help.php:257
|
1320 |
msgid "HTTP response headers"
|
1321 |
msgstr ""
|
1322 |
|
1323 |
+
#: lib/firewall_policies.php:758
|
1324 |
#, php-format
|
1325 |
msgid "Set %s to protect against MIME type confusion attacks"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
+
#: lib/firewall_policies.php:764
|
1329 |
#, php-format
|
1330 |
msgid "Set %s to protect against clickjacking attempts"
|
1331 |
msgstr ""
|
1332 |
|
1333 |
+
#: lib/firewall_policies.php:771
|
1334 |
msgid ""
|
1335 |
"Setting this option to <code>DENY</code> may break some functionality on "
|
1336 |
"your blog, its themes or plugins."
|
1337 |
msgstr ""
|
1338 |
|
1339 |
+
#: lib/firewall_policies.php:776
|
1340 |
#, php-format
|
1341 |
msgid "Set %s (IE/Edge, Chrome, Opera and Safari browsers)"
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: lib/firewall_policies.php:780 lib/firewall_policies.php:781
|
1345 |
+
#: lib/firewall_policies.php:782
|
1346 |
#, php-format
|
1347 |
msgid "Set to %s"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
+
#: lib/firewall_policies.php:787
|
1351 |
#, php-format
|
1352 |
msgid "Force %s flag on all cookies to mitigate CSRF attacks"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
+
#: lib/firewall_policies.php:797
|
1356 |
#, php-format
|
1357 |
msgid "Force %s flag on all cookies to mitigate XSS attacks"
|
1358 |
msgstr ""
|
1359 |
|
1360 |
+
#: lib/firewall_policies.php:800
|
1361 |
msgid ""
|
1362 |
"If your PHP scripts use cookies that need to be accessed from JavaScript, "
|
1363 |
"you should not enable this option."
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: lib/firewall_policies.php:809
|
1367 |
msgid ""
|
1368 |
"HSTS headers can only be set when you are accessing your site over HTTPS."
|
1369 |
msgstr ""
|
1370 |
|
1371 |
+
#: lib/firewall_policies.php:817
|
1372 |
#, php-format
|
1373 |
msgid "Set %s (HSTS) to enforce secure connections to the server"
|
1374 |
msgstr ""
|
1375 |
|
1376 |
+
#: lib/firewall_policies.php:821
|
1377 |
msgid "Set \"max-age\" to 0"
|
1378 |
msgstr ""
|
1379 |
|
1380 |
+
#: lib/firewall_policies.php:822
|
1381 |
msgid "1 month"
|
1382 |
msgstr ""
|
1383 |
|
1384 |
+
#: lib/firewall_policies.php:823
|
1385 |
msgid "6 months"
|
1386 |
msgstr ""
|
1387 |
|
1388 |
+
#: lib/firewall_policies.php:824
|
1389 |
msgid "1 year"
|
1390 |
msgstr ""
|
1391 |
|
1392 |
+
#: lib/firewall_policies.php:826
|
1393 |
msgid "Apply to subdomains"
|
1394 |
msgstr ""
|
1395 |
|
1396 |
+
#: lib/firewall_policies.php:850
|
1397 |
#, php-format
|
1398 |
msgid "Set %s for the website frontend"
|
1399 |
msgstr ""
|
1400 |
|
1401 |
+
#: lib/firewall_policies.php:855
|
1402 |
msgid "This CSP header will apply to the website frontend only."
|
1403 |
msgstr ""
|
1404 |
|
1405 |
+
#: lib/firewall_policies.php:859
|
1406 |
#, php-format
|
1407 |
msgid "Set %s for the WordPress admin dashboard"
|
1408 |
msgstr ""
|
1409 |
|
1410 |
+
#: lib/firewall_policies.php:864
|
1411 |
msgid "This CSP header will apply to the WordPress admin dashboard only."
|
1412 |
msgstr ""
|
1413 |
|
1414 |
+
#: lib/firewall_policies.php:880
|
1415 |
#, php-format
|
1416 |
msgid "Set %s (Chrome, Opera and Firefox browsers)"
|
1417 |
msgstr ""
|
1418 |
|
1419 |
+
#: lib/firewall_policies.php:930
|
1420 |
msgid ""
|
1421 |
"Block PHP built-in wrappers in <code>GET</code>, <code>POST</code>, "
|
1422 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> and cookies"
|
1423 |
msgstr ""
|
1424 |
|
1425 |
+
#: lib/firewall_policies.php:969
|
1426 |
msgid "Block serialized PHP objects in the following global variables"
|
1427 |
msgstr ""
|
1428 |
|
1429 |
+
#: lib/firewall_policies.php:979 lib/help.php:290
|
1430 |
msgid "Hide PHP notice and error messages"
|
1431 |
msgstr ""
|
1432 |
|
1433 |
+
#: lib/firewall_policies.php:985
|
1434 |
msgid "Sanitise <code>PHP_SELF</code>"
|
1435 |
msgstr ""
|
1436 |
|
1437 |
+
#: lib/firewall_policies.php:991
|
1438 |
msgid "Sanitise <code>PATH_TRANSLATED</code>"
|
1439 |
msgstr ""
|
1440 |
|
1441 |
+
#: lib/firewall_policies.php:997
|
1442 |
msgid "Sanitise <code>PATH_INFO</code>"
|
1443 |
msgstr ""
|
1444 |
|
1445 |
+
#: lib/firewall_policies.php:1011
|
1446 |
msgid "This option is not compatible with your actual configuration."
|
1447 |
msgstr ""
|
1448 |
|
1449 |
+
#: lib/firewall_policies.php:1033 lib/help.php:294
|
1450 |
msgid "Various"
|
1451 |
msgstr ""
|
1452 |
|
1453 |
+
#: lib/firewall_policies.php:1036
|
1454 |
msgid "Block the <code>DOCUMENT_ROOT</code> server variable in HTTP request"
|
1455 |
msgstr ""
|
1456 |
|
1457 |
+
#: lib/firewall_policies.php:1043 lib/help.php:297
|
1458 |
msgid "Block ASCII character 0x00 (NULL byte)"
|
1459 |
msgstr ""
|
1460 |
|
1461 |
+
#: lib/firewall_policies.php:1049 lib/help.php:299
|
1462 |
msgid "Block ASCII control characters 1 to 8 and 14 to 31"
|
1463 |
msgstr ""
|
1464 |
|
1465 |
+
#: lib/firewall_policies.php:1062
|
1466 |
msgid "Save Firewall Policies"
|
1467 |
msgstr ""
|
1468 |
|
1469 |
+
#: lib/firewall_policies.php:1064
|
1470 |
msgid "Restore Default Values"
|
1471 |
msgstr ""
|
1472 |
|
1551 |
"too."
|
1552 |
msgstr ""
|
1553 |
|
|
|
|
|
|
|
|
|
1554 |
#: lib/help.php:92
|
1555 |
msgid ""
|
1556 |
"Lets you customize the HTTP error code returned by NinjaFirewall when "
|
1599 |
"configuration to an earlier date, select the corresponding file in the list."
|
1600 |
msgstr ""
|
1601 |
|
1602 |
+
#: lib/help.php:131
|
1603 |
#, php-format
|
1604 |
msgid ""
|
1605 |
"Keep in mind, however, that the Firewall Policies apply to any PHP scripts "
|
1607 |
"your WordPress index page."
|
1608 |
msgstr ""
|
1609 |
|
1610 |
+
#: lib/help.php:136
|
1611 |
msgid "Policies overview"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
+
#: lib/help.php:138
|
1615 |
#, php-format
|
1616 |
msgid ""
|
1617 |
"Because NinjaFirewall sits in front of WordPress, it can hook, scan and "
|
1622 |
"<code><a href=\"%s\">$_SERVER</a></code> in HTTP and/or HTTPS mode."
|
1623 |
msgstr ""
|
1624 |
|
1625 |
+
#: lib/help.php:140
|
1626 |
msgid ""
|
1627 |
"Use the options below to enable, disable or to tweak these rules according "
|
1628 |
"to your needs."
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: lib/help.php:147
|
1632 |
msgid "Scan and Sanitise"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: lib/help.php:149
|
1636 |
msgid ""
|
1637 |
"You can choose to scan and reject dangerous content but also to sanitise "
|
1638 |
"requests and variables. Those two actions are different and can be combined "
|
1639 |
"together for better security."
|
1640 |
msgstr ""
|
1641 |
|
1642 |
+
#: lib/help.php:150
|
1643 |
msgid ""
|
1644 |
+
"Scan: If anything suspicious is detected, NinjaFirewall will block the "
|
1645 |
"request and return an HTTP error code and message (defined in the \"Firewall "
|
1646 |
"Options\" page). The user request will fail and the connection will be "
|
1647 |
"closed immediately."
|
1648 |
msgstr ""
|
1649 |
|
1650 |
+
#: lib/help.php:151
|
1651 |
#, php-format
|
1652 |
msgid ""
|
1653 |
+
"Sanitise: This option will not block but sanitise the user request by "
|
1654 |
"escaping characters that can be used to exploit vulnerabilities (%s) and "
|
1655 |
"replacing <code><</code> and <code>></code> with their corresponding "
|
1656 |
"HTML entities (<code>&lt;</code>, <code>&gt;</code>). If it is a "
|
1658 |
"sanitised."
|
1659 |
msgstr ""
|
1660 |
|
1661 |
+
#: lib/help.php:153
|
1662 |
msgid ""
|
1663 |
"This action will be performed when the filtering process is over, right "
|
1664 |
"before NinjaFirewall forwards the request to your PHP script."
|
1665 |
msgstr ""
|
1666 |
|
1667 |
+
#: lib/help.php:156
|
1668 |
msgid ""
|
1669 |
"If you enabled <code>POST</code> requests sanitising, articles and messages "
|
1670 |
"posted by your visitors could be corrupted with excessive backslashes or "
|
1671 |
"substitution characters."
|
1672 |
msgstr ""
|
1673 |
|
1674 |
+
#: lib/help.php:167
|
1675 |
msgid "Whether to filter HTTP and/or HTTPS traffic"
|
1676 |
msgstr ""
|
1677 |
|
1678 |
+
#: lib/help.php:171
|
1679 |
+
msgid "Whether to allow/disallow file uploads."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1680 |
msgstr ""
|
1681 |
|
1682 |
+
#: lib/help.php:173
|
1683 |
msgid ""
|
1684 |
+
"Any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</"
|
1685 |
"code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore "
|
1686 |
"<code>_</code> will be removed from the filename and replaced with the "
|
1687 |
"substitution character."
|
1688 |
msgstr ""
|
1689 |
|
1690 |
+
#: lib/help.php:178
|
1691 |
msgid ""
|
1692 |
"Whether to block direct access to PHP files located in specific WordPress "
|
1693 |
"directories."
|
1694 |
msgstr ""
|
1695 |
|
1696 |
+
#: lib/help.php:180
|
1697 |
msgid ""
|
1698 |
+
"Enabling this policy will block any attempt (e.g., exploiting a "
|
1699 |
"vulnerability, using a backdoor etc) to modify some important WordPress "
|
1700 |
"settings. This policy will also send you an alert by email with all details "
|
1701 |
"regarding the issue. It is enabled by default."
|
1702 |
msgstr ""
|
1703 |
|
1704 |
+
#: lib/help.php:182
|
1705 |
msgid ""
|
1706 |
+
"Enabling this policy will block any attempt (e.g., exploiting a "
|
1707 |
"vulnerability, using a backdoor etc) to create a user account. If you allow "
|
1708 |
"user registration, you should not enable it."
|
1709 |
msgstr ""
|
1710 |
|
1711 |
+
#: lib/help.php:184
|
1712 |
+
msgid ""
|
1713 |
+
"This policy will block vulnerabilities that could be leveraged by attackers "
|
1714 |
+
"to gain administrative privileges."
|
1715 |
+
msgstr ""
|
1716 |
+
|
1717 |
+
#: lib/help.php:186
|
1718 |
#, php-format
|
1719 |
msgid ""
|
1720 |
+
"Many vulnerabilities in plugins are exploited via the admin-ajax.php script. "
|
1721 |
"This policy will try to detect and immediately block bots and malicious "
|
1722 |
"scanners trying to access it. The server IP address (%s) and private IP "
|
1723 |
"addresses will not be blocked."
|
1724 |
msgstr ""
|
1725 |
|
1726 |
+
#: lib/help.php:188
|
|
|
|
|
|
|
|
|
1727 |
msgid ""
|
1728 |
+
"It is possible to enumerate usernames either through the WordPress author "
|
1729 |
"archives, the REST API or the login page. Although this is not a "
|
1730 |
"vulnerability but a WordPress feature, some hackers use it to retrieve "
|
1731 |
"usernames in order to launch more accurate brute-force attacks. If it is a "
|
1735 |
"block the request immediately."
|
1736 |
msgstr ""
|
1737 |
|
1738 |
+
#: lib/help.php:190
|
|
|
|
|
|
|
|
|
1739 |
msgid ""
|
1740 |
+
"It allows you to access your WordPress site's data through an easy-to-use "
|
1741 |
"HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall "
|
1742 |
"allows you to block any access to that API if you do not intend to use it."
|
1743 |
msgstr ""
|
1744 |
|
1745 |
+
#: lib/help.php:192
|
|
|
|
|
|
|
|
|
1746 |
msgid ""
|
1747 |
"XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode "
|
1748 |
"its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API "
|
1753 |
"used in brute-force amplification attacks or to block Pingbacks."
|
1754 |
msgstr ""
|
1755 |
|
1756 |
+
#: lib/help.php:194
|
1757 |
msgid ""
|
1758 |
"Block <code>POST</code> requests in the themes folder <code>/wp-content/"
|
1759 |
+
"themes</code>"
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: lib/help.php:194
|
1763 |
msgid ""
|
1764 |
+
"This option can be useful to block hackers from installing backdoor in the "
|
1765 |
"PHP theme files. However, because some custom themes may include an HTML "
|
1766 |
"form (contact, search form etc), this option is not enabled by default."
|
1767 |
msgstr ""
|
1768 |
|
1769 |
+
#: lib/help.php:196
|
1770 |
+
msgid "Force HTTPS for admin and logins <code>FORCE_SSL_ADMIN</code>"
|
1771 |
msgstr ""
|
1772 |
|
1773 |
+
#: lib/help.php:196
|
1774 |
msgid ""
|
1775 |
+
"Enable this option when you want to secure logins and the admin area so that "
|
1776 |
"both passwords and cookies are never sent in the clear. Ensure that you can "
|
1777 |
"access your admin console from HTTPS before enabling this option, otherwise "
|
1778 |
"you will lock yourself out of your site!"
|
1779 |
msgstr ""
|
1780 |
|
1781 |
+
#: lib/help.php:198
|
1782 |
+
msgid "Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>"
|
1783 |
msgstr ""
|
1784 |
|
1785 |
+
#: lib/help.php:198
|
1786 |
msgid ""
|
1787 |
+
"Disabling the plugin and theme editor provides an additional layer of "
|
1788 |
"security if a hacker gains access to a well-privileged user account."
|
1789 |
msgstr ""
|
1790 |
|
1791 |
+
#: lib/help.php:200
|
1792 |
msgid ""
|
1793 |
+
"Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>"
|
1794 |
msgstr ""
|
1795 |
|
1796 |
+
#: lib/help.php:200
|
1797 |
msgid ""
|
1798 |
+
"This option will block users being able to use the plugin and theme "
|
1799 |
"installation/update functionality from the WordPress admin area. Setting "
|
1800 |
"this constant also disables the Plugin and Theme editor."
|
1801 |
msgstr ""
|
1802 |
|
1803 |
+
#: lib/help.php:202
|
1804 |
msgid ""
|
1805 |
+
"Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>"
|
1806 |
msgstr ""
|
1807 |
|
1808 |
+
#: lib/help.php:202
|
1809 |
msgid ""
|
1810 |
+
"This option will disable the WSOD protection introduced in WordPress 5.1."
|
1811 |
msgstr ""
|
1812 |
|
1813 |
+
#: lib/help.php:206
|
1814 |
+
msgid ""
|
1815 |
+
"By default, any logged in WordPress administrator will not be blocked by "
|
1816 |
+
"NinjaFirewall. You can also add any logged in users to the whitelist (make "
|
1817 |
+
"sure you trust them all before doing so)."
|
1818 |
msgstr ""
|
1819 |
|
1820 |
+
#: lib/help.php:219
|
1821 |
+
msgid "Whether to scan and/or sanitise the <code>GET</code> variable."
|
1822 |
msgstr ""
|
1823 |
|
1824 |
+
#: lib/help.php:222
|
1825 |
+
msgid "Whether to scan and/or sanitise the <code>POST</code> variable."
|
1826 |
msgstr ""
|
1827 |
|
1828 |
+
#: lib/help.php:223
|
1829 |
msgid ""
|
1830 |
"NinjaFirewall will decode and scan base64 encoded values in order to detect "
|
1831 |
"obfuscated malicious code. This option is only available for the <code>POST</"
|
1832 |
"code> variable."
|
1833 |
msgstr ""
|
1834 |
|
1835 |
+
#: lib/help.php:226
|
1836 |
msgid "Whether to sanitise the <code>REQUEST</code> variable."
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: lib/help.php:229
|
1840 |
msgid "Whether to scan and/or sanitise cookies."
|
1841 |
msgstr ""
|
1842 |
|
1843 |
+
#: lib/help.php:232
|
1844 |
msgid "Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests."
|
1845 |
msgstr ""
|
1846 |
|
1847 |
+
#: lib/help.php:233
|
|
|
|
|
|
|
|
|
1848 |
msgid ""
|
1849 |
+
"Rejects some known bots, scanners and various malicious scripts attempting "
|
1850 |
"to access your blog."
|
1851 |
msgstr ""
|
1852 |
|
1853 |
+
#: lib/help.php:236
|
1854 |
msgid "Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests."
|
1855 |
msgstr ""
|
1856 |
|
1857 |
+
#: lib/help.php:237
|
1858 |
msgid ""
|
1859 |
+
"Block POST requests that do not have an <code>HTTP_REFERER</code> header"
|
1860 |
msgstr ""
|
1861 |
|
1862 |
+
#: lib/help.php:237
|
1863 |
msgid ""
|
1864 |
+
"This option will block any <code>POST</code> request that does not have a "
|
1865 |
"Referrer header (<code>HTTP_REFERER</code> variable). If you need external "
|
1866 |
"applications to post to your scripts (e.g. Paypal IPN, WordPress WP-"
|
1867 |
"Cron...), you are advised to keep this option disabled otherwise they will "
|
1870 |
"default."
|
1871 |
msgstr ""
|
1872 |
|
1873 |
+
#: lib/help.php:241
|
1874 |
+
msgid "Block localhost IP in <code>GET/POST</code> requests"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
+
#: lib/help.php:241
|
1878 |
msgid ""
|
1879 |
"this option will block any <code>GET</code> or <code>POST</code> request "
|
1880 |
"containing the localhost IP (127.0.0.1). It can be useful to block SQL "
|
1881 |
"dumpers and various hacker's shell scripts."
|
1882 |
msgstr ""
|
1883 |
|
1884 |
+
#: lib/help.php:243
|
|
|
|
|
|
|
|
|
1885 |
#, php-format
|
1886 |
msgid ""
|
1887 |
+
"This option will reject any request using an IP instead of a domain name in "
|
1888 |
"the <code>Host</code> header of the HTTP request. Unless you need to connect "
|
1889 |
"to your site using its IP address, (e.g. %s), enabling this option will "
|
1890 |
"block a lot of hackers scanners because such applications scan IPs rather "
|
1891 |
"than domain names."
|
1892 |
msgstr ""
|
1893 |
|
1894 |
+
#: lib/help.php:245
|
|
|
|
|
|
|
|
|
1895 |
msgid ""
|
1896 |
"this option will allow the firewall to scan traffic from all non-routable "
|
1897 |
"private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to "
|
1899 |
"interconnected)."
|
1900 |
msgstr ""
|
1901 |
|
1902 |
+
#: lib/help.php:258
|
1903 |
msgid ""
|
1904 |
"In addition to filtering incoming requests, NinjaFirewall can also hook the "
|
1905 |
"HTTP response in order to alter its headers. Those modifications can help to "
|
1906 |
"mitigate threats such as XSS, phishing and clickjacking attacks."
|
1907 |
msgstr ""
|
1908 |
|
1909 |
+
#: lib/help.php:260
|
1910 |
msgid ""
|
1911 |
"Set <code>X-Content-Type-Options</code> to protect against MIME type "
|
1912 |
+
"confusion attacks"
|
1913 |
msgstr ""
|
1914 |
|
1915 |
+
#: lib/help.php:260
|
1916 |
msgid ""
|
1917 |
+
"This header will send the nosniff value to instruct the browser to disable "
|
1918 |
"content or MIME sniffing and to use the content-type returned by the server. "
|
1919 |
"Some browsers try to guess (sniff) and override the content-type by looking "
|
1920 |
"at the content itself which, in some cases, could lead to security issues "
|
1921 |
"such as MIME Confusion Attacks."
|
1922 |
msgstr ""
|
1923 |
|
1924 |
+
#: lib/help.php:262
|
1925 |
msgid ""
|
1926 |
+
"Set <code>X-Frame-Options</code> to protect against clickjacking attempts"
|
1927 |
msgstr ""
|
1928 |
|
1929 |
+
#: lib/help.php:262
|
1930 |
msgid ""
|
1931 |
+
"This header indicates a policy whether a browser must not allow to render a "
|
1932 |
"page in a <frame> or <iframe>. Hosts can declare this policy in "
|
1933 |
"the header of their HTTP responses to prevent clickjacking attacks, by "
|
1934 |
"ensuring that their content is not embedded into other pages or frames. "
|
1935 |
"NinjaFirewall accepts two different values:"
|
1936 |
msgstr ""
|
1937 |
|
1938 |
+
#: lib/help.php:264
|
1939 |
msgid ""
|
1940 |
+
"A browser receiving content with this header must not display this content "
|
1941 |
"in any frame from a page of different origin than the content itself."
|
1942 |
msgstr ""
|
1943 |
|
1944 |
+
#: lib/help.php:265
|
1945 |
msgid ""
|
1946 |
+
"A browser receiving content with this header must not display this content "
|
1947 |
"in any frame."
|
1948 |
msgstr ""
|
1949 |
|
1950 |
+
#: lib/help.php:267
|
1951 |
msgid "NinjaFirewall does not support the <code>ALLOW-FROM</code> value."
|
1952 |
msgstr ""
|
1953 |
|
1954 |
+
#: lib/help.php:268
|
1955 |
msgid ""
|
1956 |
"Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the "
|
1957 |
"administrator and the login page only."
|
1958 |
msgstr ""
|
1959 |
|
1960 |
+
#: lib/help.php:270
|
1961 |
msgid ""
|
1962 |
"Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari "
|
1963 |
+
"browsers)"
|
1964 |
msgstr ""
|
1965 |
|
1966 |
+
#: lib/help.php:270
|
1967 |
msgid ""
|
1968 |
+
"This header allows browsers to identify and block XSS attacks by preventing "
|
1969 |
"malicious scripts from executing. It is enabled by default on all compatible "
|
1970 |
"browsers."
|
1971 |
msgstr ""
|
1972 |
|
1973 |
+
#: lib/help.php:271
|
1974 |
msgid ""
|
1975 |
"If a visitor disabled their browser's XSS filter, you cannot re-enable it "
|
1976 |
"with that option."
|
1977 |
msgstr ""
|
1978 |
|
1979 |
+
#: lib/help.php:273
|
1980 |
msgid ""
|
1981 |
+
"Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks"
|
1982 |
msgstr ""
|
1983 |
|
1984 |
+
#: lib/help.php:273
|
1985 |
msgid ""
|
1986 |
+
"Adding this flag to cookies helps to mitigate the risk of CSRF (cross-site "
|
1987 |
"request forgery) attacks because cookies can only be sent in requests "
|
1988 |
"originating from the same origin as the target domain."
|
1989 |
msgstr ""
|
1990 |
|
1991 |
+
#: lib/help.php:275
|
1992 |
+
msgid "Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks"
|
|
|
1993 |
msgstr ""
|
1994 |
|
1995 |
+
#: lib/help.php:275
|
1996 |
msgid ""
|
1997 |
+
"Adding this flag to cookies helps to mitigate the risk of cross-site "
|
1998 |
"scripting by preventing them from being accessed through client-side "
|
1999 |
"scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins "
|
2000 |
"or any other PHP script, add the <code>HttpOnly</code> flag if it is "
|
2003 |
"sets that flag on the logged in user cookies only."
|
2004 |
msgstr ""
|
2005 |
|
2006 |
+
#: lib/help.php:276
|
2007 |
msgid ""
|
2008 |
"If your PHP scripts send cookies that need to be accessed from JavaScript, "
|
2009 |
"you should keep that option disabled."
|
2010 |
msgstr ""
|
2011 |
|
2012 |
+
#: lib/help.php:278
|
2013 |
msgid ""
|
2014 |
"Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure "
|
2015 |
+
"connections to the server"
|
2016 |
msgstr ""
|
2017 |
|
2018 |
+
#: lib/help.php:278
|
2019 |
msgid ""
|
2020 |
+
"This policy enforces secure HTTPS connections to the server. Web browsers "
|
2021 |
"will not allow the user to access the web application over insecure HTTP "
|
2022 |
"protocol. It helps to defend against cookie hijacking and Man-in-the-middle "
|
2023 |
"attacks. Most recent browsers support HSTS headers."
|
2024 |
msgstr ""
|
2025 |
|
2026 |
+
#: lib/help.php:280
|
2027 |
+
msgid "Set <code>Content-Security-Policy</code>"
|
2028 |
msgstr ""
|
2029 |
|
2030 |
+
#: lib/help.php:280
|
2031 |
msgid ""
|
2032 |
+
"This policy helps to mitigate threats such as XSS, phishing and clickjacking "
|
2033 |
"attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, "
|
2034 |
"objects (Java, ActiveX, audio and video files), and other HTML5 features."
|
2035 |
msgstr ""
|
2036 |
|
2037 |
+
#: lib/help.php:280
|
2038 |
msgid ""
|
2039 |
"NinjaFirewall lets you configure the CSP policy separately for the frontend "
|
2040 |
"(blog, website) and the backend (WordPress admin dashboard)."
|
2041 |
msgstr ""
|
2042 |
|
2043 |
+
#: lib/help.php:282
|
2044 |
+
msgid "Set <code>Referrer-Policy</code>"
|
2045 |
msgstr ""
|
2046 |
|
2047 |
+
#: lib/help.php:282
|
2048 |
msgid ""
|
2049 |
+
"This HTTP header governs which referrer information, sent in the Referer "
|
2050 |
"header, should be included with requests made."
|
2051 |
msgstr ""
|
2052 |
|
2053 |
+
#: lib/help.php:286
|
2054 |
+
msgid "Block PHP built-in wrappers"
|
2055 |
msgstr ""
|
2056 |
|
2057 |
+
#: lib/help.php:286
|
2058 |
msgid ""
|
2059 |
"PHP has several wrappers for use with the filesystem functions. It is "
|
2060 |
"possible for an attacker to use them to bypass firewalls and various IDS to "
|
2065 |
"request, cookies, user agent and referrer variables."
|
2066 |
msgstr ""
|
2067 |
|
2068 |
+
#: lib/help.php:288
|
2069 |
+
msgid "Block serialized PHP objects"
|
2070 |
msgstr ""
|
2071 |
|
2072 |
+
#: lib/help.php:288
|
2073 |
#, php-format
|
2074 |
msgid ""
|
2075 |
"Object Serialization is a PHP feature used by many applications to generate "
|
2080 |
"code> request, cookies, user agent and referrer variables."
|
2081 |
msgstr ""
|
2082 |
|
2083 |
+
#: lib/help.php:290
|
|
|
|
|
|
|
|
|
2084 |
msgid ""
|
2085 |
+
"This option lets you hide errors returned by your scripts. Such errors can "
|
2086 |
"leak sensitive informations which can be exploited by hackers."
|
2087 |
msgstr ""
|
2088 |
|
2089 |
+
#: lib/help.php:292
|
2090 |
msgid ""
|
2091 |
"Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, "
|
2092 |
+
"<code>PATH_INFO</code>"
|
2093 |
msgstr ""
|
2094 |
|
2095 |
+
#: lib/help.php:292
|
2096 |
msgid ""
|
2097 |
+
"This option can sanitise any dangerous characters found in those 3 server "
|
2098 |
"variables to prevent various XSS and database injection attempts."
|
2099 |
msgstr ""
|
2100 |
|
2101 |
+
#: lib/help.php:295
|
2102 |
#, php-format
|
2103 |
msgid ""
|
2104 |
+
"Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests"
|
2105 |
msgstr ""
|
2106 |
|
2107 |
+
#: lib/help.php:295
|
2108 |
msgid ""
|
2109 |
+
"This option will block scripts attempting to pass the <code>DOCUMENT_ROOT</"
|
2110 |
"code> server variable in a <code>GET</code> or <code>POST</code> request. "
|
2111 |
"Hackers use shell scripts that often need to pass this value, but most "
|
2112 |
"legitimate programs do not."
|
2113 |
msgstr ""
|
2114 |
|
2115 |
+
#: lib/help.php:297
|
|
|
|
|
|
|
|
|
2116 |
msgid ""
|
2117 |
+
"This option will reject any <code>GET</code> or <code>POST</code> request, "
|
2118 |
"<code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</"
|
2119 |
"code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> variables "
|
2120 |
"containing the ASCII character 0x00 (NULL byte). Such a character is "
|
2121 |
"dangerous and should always be rejected."
|
2122 |
msgstr ""
|
2123 |
|
2124 |
+
#: lib/help.php:299
|
|
|
|
|
|
|
|
|
2125 |
msgid ""
|
2126 |
+
"This option will reject any <code>GET</code> or <code>POST</code> request, "
|
2127 |
"<code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing "
|
2128 |
"ASCII characters from 1 to 8 and 14 to 31."
|
2129 |
msgstr ""
|
2130 |
|
2131 |
+
#: lib/help.php:312 lib/monitoring.php:46
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2132 |
msgid "File Check"
|
2133 |
msgstr ""
|
2134 |
|
2135 |
+
#: lib/help.php:313
|
2136 |
msgid ""
|
2137 |
"File Check lets you perform file integrity monitoring upon request or on a "
|
2138 |
"specific interval."
|
2139 |
msgstr ""
|
2140 |
|
2141 |
+
#: lib/help.php:315
|
2142 |
msgid ""
|
2143 |
"You need to create a snapshot of all your files and then, at a later time, "
|
2144 |
"you can scan your system to compare it with the previous snapshot. Any "
|
2146 |
"file ownership, timestamp as well as file creation and deletion."
|
2147 |
msgstr ""
|
2148 |
|
2149 |
+
#: lib/help.php:317
|
2150 |
#, php-format
|
2151 |
msgid ""
|
2152 |
"Create a snapshot of all files stored in that directory: by default, the "
|
2153 |
"directory is set to WordPress <code>ABSPATH</code> (%s)"
|
2154 |
msgstr ""
|
2155 |
|
2156 |
+
#: lib/help.php:318
|
2157 |
msgid ""
|
2158 |
"Exclude the following files/folders: you can enter a directory or a file "
|
2159 |
"name (e.g., <code>/foo/bar/</code>), or a part of it (e.g., <code>foo</"
|
2160 |
"code>). Or you can exclude a file extension (e.g., <code>.css</code>)."
|
2161 |
msgstr ""
|
2162 |
|
2163 |
+
#: lib/help.php:320
|
2164 |
msgid ""
|
2165 |
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,.css,.png</"
|
2166 |
"code>)."
|
2167 |
msgstr ""
|
2168 |
|
2169 |
+
#: lib/help.php:321
|
2170 |
msgid ""
|
2171 |
"Do not follow symbolic links: by default, NinjaFirewall will not follow "
|
2172 |
"symbolic links."
|
2173 |
msgstr ""
|
2174 |
|
2175 |
+
#: lib/help.php:324
|
2176 |
msgid "Scheduled scans"
|
2177 |
msgstr ""
|
2178 |
|
2179 |
+
#: lib/help.php:325
|
2180 |
msgid ""
|
2181 |
"NinjaFirewall can scan your system on a specific interval (hourly, "
|
2182 |
"twicedaily or daily)."
|
2183 |
msgstr ""
|
2184 |
|
2185 |
+
#: lib/help.php:327
|
2186 |
msgid ""
|
2187 |
"It can either send you a scan report only if changes are detected, or always "
|
2188 |
"send you one after each scan."
|
2189 |
msgstr ""
|
2190 |
|
2191 |
+
#: lib/help.php:329
|
2192 |
msgid ""
|
2193 |
"Reports will be sent to the contact email address defined in the \"Event "
|
2194 |
"Notifications\" menu."
|
2195 |
msgstr ""
|
2196 |
|
2197 |
+
#: lib/help.php:331
|
2198 |
#, php-format
|
2199 |
msgid ""
|
2200 |
"Scheduled scans rely on <a href=\"%s\">WordPress pseudo cron</a> which works "
|
2201 |
"only if your site gets sufficient traffic."
|
2202 |
msgstr ""
|
2203 |
|
2204 |
+
#: lib/help.php:337 lib/monitoring.php:47
|
2205 |
+
msgid "File Guard"
|
2206 |
+
msgstr ""
|
2207 |
+
|
2208 |
+
#: lib/help.php:339
|
2209 |
+
msgid ""
|
2210 |
+
"File Guard can detect, in real-time, any access to a PHP file that was "
|
2211 |
+
"recently modified or created, and alert you about this."
|
2212 |
+
msgstr ""
|
2213 |
+
|
2214 |
+
#: lib/help.php:341
|
2215 |
+
msgid ""
|
2216 |
+
"If a hacker uploaded a shell script to your site (or injected a backdoor "
|
2217 |
+
"into an already existing file) and tried to directly access that file using "
|
2218 |
+
"his browser or a script, NinjaFirewall would hook the HTTP request and "
|
2219 |
+
"immediately detect that the file was recently modified/created. It would "
|
2220 |
+
"send you a detailed alert (script name, IP, request, date and time). Alerts "
|
2221 |
+
"will be sent to the contact email address defined in the \"Event "
|
2222 |
+
"Notifications\" menu."
|
2223 |
+
msgstr ""
|
2224 |
+
|
2225 |
+
#: lib/help.php:342
|
2226 |
+
msgid ""
|
2227 |
+
"If you do not want to monitor a folder, you can exclude its full path or a "
|
2228 |
+
"part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</"
|
2229 |
+
"code> etc). NinjaFirewall will compare this value to the <code>"
|
2230 |
+
"$_SERVER[\"SCRIPT_FILENAME\"]</code> server variable and, if it matches, "
|
2231 |
+
"will ignore it."
|
2232 |
+
msgstr ""
|
2233 |
+
|
2234 |
+
#: lib/help.php:343
|
2235 |
+
msgid ""
|
2236 |
+
"Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</"
|
2237 |
+
"code>)."
|
2238 |
+
msgstr ""
|
2239 |
+
|
2240 |
+
#: lib/help.php:344
|
2241 |
+
msgid ""
|
2242 |
+
"File Guard real-time detection is a totally unique feature, because "
|
2243 |
+
"NinjaFirewall is the only plugin for WordPress that can hook HTTP requests "
|
2244 |
+
"sent to any PHP script, even if that script is not part of the WordPress "
|
2245 |
+
"package (third-party software, shell script, backdoor etc)."
|
2246 |
+
msgstr ""
|
2247 |
+
|
2248 |
+
#: lib/help.php:353 lib/network.php:32 ninjafirewall.php:778
|
2249 |
msgid "Network"
|
2250 |
msgstr ""
|
2251 |
|
2252 |
+
#: lib/help.php:355
|
2253 |
msgid ""
|
2254 |
"Even if NinjaFirewall administration menu is only available to the Super "
|
2255 |
"Admin (from the main site), you can still display its status to all sites in "
|
2257 |
"be visible only to the administrators of those sites."
|
2258 |
msgstr ""
|
2259 |
|
2260 |
+
#: lib/help.php:357
|
2261 |
msgid ""
|
2262 |
"It is recommended to enable this feature as it is the only way to know "
|
2263 |
"whether the sites in your network are protected and if NinjaFirewall "
|
2264 |
"installation was successful."
|
2265 |
msgstr ""
|
2266 |
|
2267 |
+
#: lib/help.php:359
|
2268 |
msgid ""
|
2269 |
"Note that when it is disabled, the icon still remains visible to you, the "
|
2270 |
"Super Admin."
|
2271 |
msgstr ""
|
2272 |
|
2273 |
+
#: lib/help.php:371
|
2274 |
msgid ""
|
2275 |
"NinjaFirewall can alert you by email on specific events triggered within "
|
2276 |
"your blog. They include installations, updates, activations etc, as well as "
|
2281 |
"theme in order to take full control of your website."
|
2282 |
msgstr ""
|
2283 |
|
2284 |
+
#: lib/help.php:382 lib/login_protection.php:21 ninjafirewall.php:786
|
2285 |
msgid "Login Protection"
|
2286 |
msgstr ""
|
2287 |
|
2288 |
+
#: lib/help.php:386
|
2289 |
msgid ""
|
2290 |
"By processing incoming HTTP requests before your blog and any of its "
|
2291 |
"plugins, NinjaFirewall is the only plugin for WordPress able to protect it "
|
2293 |
"from several thousands of different IPs."
|
2294 |
msgstr ""
|
2295 |
|
2296 |
+
#: lib/help.php:388
|
2297 |
msgid ""
|
2298 |
"You can choose two different types of protection: a password or a captcha. "
|
2299 |
"You can enable the protection only if an attack is detected or to keep it "
|
2300 |
"always activated."
|
2301 |
msgstr ""
|
2302 |
|
2303 |
+
#: lib/help.php:390
|
2304 |
msgid "Yes, if under attack:"
|
2305 |
msgstr ""
|
2306 |
|
2307 |
+
#: lib/help.php:392
|
2308 |
msgid ""
|
2309 |
"The protection will be triggered when too many login attempts are detected, "
|
2310 |
"regardless of the offending IP. It blocks the attack instantly and prevents "
|
2313 |
"combination or the captcha code. "
|
2314 |
msgstr ""
|
2315 |
|
2316 |
+
#: lib/help.php:394
|
2317 |
msgid "Always ON:"
|
2318 |
msgstr ""
|
2319 |
|
2320 |
+
#: lib/help.php:396
|
2321 |
msgid ""
|
2322 |
"NinjaFirewall will always enforce the HTTP authentication or captcha "
|
2323 |
"implementation each time you access the login page."
|
2324 |
msgstr ""
|
2325 |
|
2326 |
+
#: lib/help.php:399
|
2327 |
msgid "Type of protection:"
|
2328 |
msgstr ""
|
2329 |
|
2330 |
+
#: lib/help.php:400
|
2331 |
msgid ""
|
2332 |
"<b>Password:</b> It password-protects the login page. NinjaFirewall uses its "
|
2333 |
"own very fast authentication scheme and it is compatible with any HTTP "
|
2334 |
"server (Apache, Nginx, Lighttpd etc)."
|
2335 |
msgstr ""
|
2336 |
|
2337 |
+
#: lib/help.php:401
|
2338 |
msgid "<b>Captcha:</b> It will display a 5-character captcha code."
|
2339 |
msgstr ""
|
2340 |
|
2341 |
+
#: lib/help.php:402
|
2342 |
msgid "Bot protection:"
|
2343 |
msgstr ""
|
2344 |
|
2345 |
+
#: lib/help.php:403
|
2346 |
msgid ""
|
2347 |
"NinjaFirewall will attempt to block bots and scripts immediately, i.e., even "
|
2348 |
"before they start a brute-force attack."
|
2349 |
msgstr ""
|
2350 |
|
2351 |
+
#: lib/help.php:411
|
2352 |
msgid "AUTH log"
|
2353 |
msgstr ""
|
2354 |
|
2355 |
+
#: lib/help.php:414
|
2356 |
msgid ""
|
2357 |
"NinjaFirewall can write to the server Authentication log when the brute-"
|
2358 |
"force protection is triggered. This can be useful to the system "
|
2359 |
"administrator for monitoring purposes or banning IPs at the server level."
|
2360 |
msgstr ""
|
2361 |
|
2362 |
+
#: lib/help.php:416
|
2363 |
msgid ""
|
2364 |
"If you have a shared hosting account, keep this option disabled as you do "
|
2365 |
"not have any access to the server's logs."
|
2366 |
msgstr ""
|
2367 |
|
2368 |
+
#: lib/help.php:418
|
2369 |
msgid ""
|
2370 |
"On Debian-based systems, the log is located in <code>/var/log/auth.log</"
|
2371 |
"code>, and on Red Hat-based systems in <code>/var/log/secure</code>. The "
|
2372 |
"logline uses the following format:"
|
2373 |
msgstr ""
|
2374 |
|
2375 |
+
#: lib/help.php:421
|
2376 |
msgid "AA: the process ID (PID)."
|
2377 |
msgstr ""
|
2378 |
|
2379 |
+
#: lib/help.php:422
|
2380 |
msgid "BB: the user IPv4 or IPv6 address."
|
2381 |
msgstr ""
|
2382 |
|
2383 |
+
#: lib/help.php:423
|
2384 |
msgid "CC: the blog (sub-)domain name."
|
2385 |
msgstr ""
|
2386 |
|
2387 |
+
#: lib/help.php:424
|
2388 |
msgid ""
|
2389 |
"DD: the target: it can be either <code>wp-login.php</code> or <code>XML-RPC "
|
2390 |
"API</code>."
|
2391 |
msgstr ""
|
2392 |
|
2393 |
+
#: lib/help.php:425
|
2394 |
msgid "EE: the time, in minutes, the protection will remain active."
|
2395 |
msgstr ""
|
2396 |
|
2397 |
+
#: lib/help.php:427
|
2398 |
msgid "Sample loglines:"
|
2399 |
msgstr ""
|
2400 |
|
2401 |
+
#: lib/help.php:430
|
2402 |
#, php-format
|
2403 |
msgid ""
|
2404 |
"Be careful if you are behind a load balancer, reverse-proxy or CDN because "
|
2409 |
"otherwise you will likely block legitimate users."
|
2410 |
msgstr ""
|
2411 |
|
2412 |
+
#: lib/help.php:444 lib/logs.php:39 lib/wpplus.php:206
|
2413 |
msgid "Firewall Log"
|
2414 |
msgstr ""
|
2415 |
|
2416 |
+
#: lib/help.php:447
|
2417 |
msgid ""
|
2418 |
"The firewall log displays blocked and sanitised requests as well as some "
|
2419 |
"useful information. It has 6 columns:"
|
2420 |
msgstr ""
|
2421 |
|
2422 |
+
#: lib/help.php:448
|
2423 |
msgid "DATE : date and time of the incident."
|
2424 |
msgstr ""
|
2425 |
|
2426 |
+
#: lib/help.php:449
|
2427 |
msgid ""
|
2428 |
"INCIDENT : unique incident number/ID as it was displayed to the blocked user."
|
2429 |
msgstr ""
|
2430 |
|
2431 |
+
#: lib/help.php:450
|
2432 |
msgid ""
|
2433 |
"LEVEL : level of severity (<code>CRITICAL</code>, <code>HIGH</code> or "
|
2434 |
"<code>MEDIUM</code>), information (<code>INFO</code>, <code>UPLOAD</code>) "
|
2435 |
"and debugging mode (<code>DEBUG_ON</code>)."
|
2436 |
msgstr ""
|
2437 |
|
2438 |
+
#: lib/help.php:451
|
2439 |
msgid ""
|
2440 |
"RULE : reference of the NinjaFirewall built-in security rule that triggered "
|
2441 |
"the action. A hyphen (<code>-</code>) instead of a number means it was a "
|
2442 |
"rule from the \"Firewall Policies\" page."
|
2443 |
msgstr ""
|
2444 |
|
2445 |
+
#: lib/help.php:452
|
2446 |
msgid "IP : the user IPv4 or IPv6 address."
|
2447 |
msgstr ""
|
2448 |
|
2449 |
+
#: lib/help.php:453
|
2450 |
msgid ""
|
2451 |
"REQUEST : the HTTP request including offending variables and values as well "
|
2452 |
"as the reason the action was logged."
|
2453 |
msgstr ""
|
2454 |
|
2455 |
+
#: lib/help.php:456 lib/logs_firewall_log.php:165
|
2456 |
msgid "Auto-delete log"
|
2457 |
msgstr ""
|
2458 |
|
2459 |
+
#: lib/help.php:457
|
2460 |
msgid ""
|
2461 |
"This options lets you configure NinjaFirewall to delete its old logs "
|
2462 |
"automatically. By default, logs are never deleted, <b>even when uninstall "
|
2464 |
"delete old logs."
|
2465 |
msgstr ""
|
2466 |
|
2467 |
+
#: lib/help.php:461
|
2468 |
msgid ""
|
2469 |
"Centralized Logging lets you remotely access the firewall log of all your "
|
2470 |
"NinjaFirewall protected websites from one single installation. You do not "
|
2471 |
"need any longer to log in to individual servers to analyse your log data."
|
2472 |
msgstr ""
|
2473 |
|
2474 |
+
#: lib/help.php:461
|
2475 |
#, php-format
|
2476 |
msgid "<a href=\"%s\">Consult our blog</a> for more info about it."
|
2477 |
msgstr ""
|
2478 |
|
2479 |
+
#: lib/help.php:462
|
2480 |
msgid ""
|
2481 |
"Enter your public key (optional): This is the public key that was created "
|
2482 |
"from your main server."
|
2483 |
msgstr ""
|
2484 |
|
2485 |
+
#: lib/help.php:466
|
2486 |
msgid ""
|
2487 |
"Centralized Logging will keep working even if NinjaFirewall is disabled. "
|
2488 |
"Delete your public key below if you want to disable it."
|
2489 |
msgstr ""
|
2490 |
|
2491 |
+
#: lib/help.php:473 lib/logs.php:40 lib/logs_live_log.php:37
|
2492 |
msgid "Live Log"
|
2493 |
msgstr ""
|
2494 |
|
2495 |
+
#: lib/help.php:476
|
2496 |
msgid ""
|
2497 |
"Live Log lets you watch your blog traffic in real time, just like the Unix "
|
2498 |
"<code>tail -f</code> command. Note that requests sent to static elements "
|
2499 |
"like JS/CSS files and images are not managed by NinjaFirewall."
|
2500 |
msgstr ""
|
2501 |
|
2502 |
+
#: lib/help.php:478
|
2503 |
msgid ""
|
2504 |
"You can enable/disable the monitoring process, change the refresh rate, "
|
2505 |
"clear the screen, enable automatic vertical scrolling, change the log "
|
2506 |
"format, select which traffic you want to view (HTTP/HTTPS) and the timezone."
|
2507 |
msgstr ""
|
2508 |
|
2509 |
+
#: lib/help.php:478
|
2510 |
msgid ""
|
2511 |
"You can also apply filters to include or exclude files and folders "
|
2512 |
"(REQUEST_URI)."
|
2513 |
msgstr ""
|
2514 |
|
2515 |
+
#: lib/help.php:481
|
2516 |
msgid ""
|
2517 |
"Live Log does not make use of any WordPress core file (e.g., <code>admin-"
|
2518 |
"ajax.php</code>). It communicates directly with the firewall without loading "
|
2521 |
"value."
|
2522 |
msgstr ""
|
2523 |
|
2524 |
+
#: lib/help.php:483
|
2525 |
msgid ""
|
2526 |
"If you are using the optional <code>.htninja</code> configuration file to "
|
2527 |
"whitelist your IP, the Live Log feature will not work."
|
2528 |
msgstr ""
|
2529 |
|
2530 |
+
#: lib/help.php:487
|
2531 |
msgid "Log Format"
|
2532 |
msgstr ""
|
2533 |
|
2534 |
+
#: lib/help.php:488
|
2535 |
msgid "You can easily customize the log format. Possible values are:"
|
2536 |
msgstr ""
|
2537 |
|
2538 |
+
#: lib/help.php:489
|
2539 |
msgid "<code>%time</code>: the server date, time and timezone."
|
2540 |
msgstr ""
|
2541 |
|
2542 |
+
#: lib/help.php:490
|
2543 |
msgid "<code>%name</code>: authenticated user (HTTP basic auth), if any."
|
2544 |
msgstr ""
|
2545 |
|
2546 |
+
#: lib/help.php:491
|
2547 |
#, php-format
|
2548 |
msgid ""
|
2549 |
"<code>%client</code>: the client REMOTE_ADDR. If you are behind a load "
|
2550 |
"balancer or CDN, this will be its IP."
|
2551 |
msgstr ""
|
2552 |
|
2553 |
+
#: lib/help.php:492
|
2554 |
msgid "<code>%method</code>: HTTP method (e.g., GET, POST)."
|
2555 |
msgstr ""
|
2556 |
|
2557 |
+
#: lib/help.php:493
|
2558 |
#, php-format
|
2559 |
msgid ""
|
2560 |
"<code>%uri</code>: the URI which was given in order to access the page "
|
2561 |
"(REQUEST_URI)."
|
2562 |
msgstr ""
|
2563 |
|
2564 |
+
#: lib/help.php:494
|
2565 |
msgid "<code>%referrer</code>: the referrer (HTTP_REFERER), if any."
|
2566 |
msgstr ""
|
2567 |
|
2568 |
+
#: lib/help.php:495
|
2569 |
#, php-format
|
2570 |
msgid "<code>%ua</code>: the user-agent (HTTP_USER_AGENT), if any."
|
2571 |
msgstr ""
|
2572 |
|
2573 |
+
#: lib/help.php:496
|
2574 |
#, php-format
|
2575 |
msgid ""
|
2576 |
"<code>%forward</code>: HTTP_X_FORWARDED_FOR, if any. If you are behind a "
|
2577 |
"load balancer or CDN, this will likely be the visitor true IP."
|
2578 |
msgstr ""
|
2579 |
|
2580 |
+
#: lib/help.php:497
|
2581 |
msgid "<code>%host</code>: the requested host (HTTP_HOST), if any."
|
2582 |
msgstr ""
|
2583 |
|
2584 |
+
#: lib/help.php:499
|
2585 |
msgid ""
|
2586 |
"Additionally, you can include any of the following characters: <code>\"</"
|
2587 |
"code>, <code>%</code>, <code>[</code>, <code>]</code>, <code>space</code> "
|
2588 |
"and lowercase letters <code>a-z</code>."
|
2589 |
msgstr ""
|
2590 |
|
2591 |
+
#: lib/help.php:510
|
2592 |
msgid ""
|
2593 |
"Your website can run NinjaFirewall and be compliant with the General Data "
|
2594 |
"Protection Regulation (GDPR). For more info, please visit our blog:"
|
2595 |
msgstr ""
|
2596 |
|
2597 |
+
#: lib/help.php:524 lib/security_rules.php:47
|
2598 |
msgid "Rules Updates"
|
2599 |
msgstr ""
|
2600 |
|
2601 |
+
#: lib/help.php:526
|
2602 |
msgid ""
|
2603 |
"To get the most efficient protection, you can ask NinjaFirewall to "
|
2604 |
"automatically update its security rules."
|
2605 |
msgstr ""
|
2606 |
|
2607 |
+
#: lib/help.php:528
|
2608 |
msgid ""
|
2609 |
"Each time a new vulnerability is found in WordPress or one of its plugins/"
|
2610 |
"themes, a new set of security rules will be made available to protect "
|
2611 |
"against such vulnerability if needed."
|
2612 |
msgstr ""
|
2613 |
|
2614 |
+
#: lib/help.php:530
|
2615 |
msgid ""
|
2616 |
"Only security rules will be downloaded. If a new version of NinjaFirewall "
|
2617 |
"(including new files, options and features) was available, it would have to "
|
2618 |
"be updated from the dashboard plugins menu as usual."
|
2619 |
msgstr ""
|
2620 |
|
2621 |
+
#: lib/help.php:532
|
2622 |
msgid ""
|
2623 |
"We recommend to enable this feature, as it is the <strong>best way to keep "
|
2624 |
"your WordPress secure</strong> against new vulnerabilities."
|
2625 |
msgstr ""
|
2626 |
|
2627 |
+
#: lib/help.php:537 lib/security_rules.php:48
|
2628 |
msgid "Rules Editor"
|
2629 |
msgstr ""
|
2630 |
|
2631 |
+
#: lib/help.php:539
|
2632 |
msgid ""
|
2633 |
"Besides the \"Firewall Policies\", NinjaFirewall includes also a large set "
|
2634 |
"of built-in rules used to protect your blog against the most common "
|
2638 |
"individually:"
|
2639 |
msgstr ""
|
2640 |
|
2641 |
+
#: lib/help.php:541
|
2642 |
msgid ""
|
2643 |
"Check your firewall log and find the rule ID you want to disable (it is "
|
2644 |
"displayed in the <code>RULE</code> column)."
|
2645 |
msgstr ""
|
2646 |
|
2647 |
+
#: lib/help.php:542
|
2648 |
msgid ""
|
2649 |
"Select its ID from the enabled rules list below and click the \"Disable it\" "
|
2650 |
"button."
|
2651 |
msgstr ""
|
2652 |
|
2653 |
+
#: lib/help.php:544
|
2654 |
msgid ""
|
2655 |
"Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</"
|
2656 |
"code> instead of a number, that means that the rule can be changed in the "
|
2657 |
"\"Firewall Policies\" page."
|
2658 |
msgstr ""
|
2659 |
|
2660 |
+
#: lib/install.php:70
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2661 |
#, php-format
|
2662 |
msgid ""
|
2663 |
"Error: Your .htaccess file is not writable, please change its permissions: %s"
|
2664 |
msgstr ""
|
2665 |
|
2666 |
+
#: lib/install.php:95 ninjafirewall.php:594 ninjafirewall.php:598
|
2667 |
#, php-format
|
2668 |
msgid "Error: wrong parameter value (%s)."
|
2669 |
msgstr ""
|
2670 |
|
2671 |
+
#: lib/install.php:102 lib/install.php:183 lib/install.php:204
|
2672 |
#, php-format
|
2673 |
msgid ""
|
2674 |
"Error: The following file is not writable, please change its permissions: %s"
|
2675 |
msgstr ""
|
2676 |
|
2677 |
+
#: lib/install.php:125
|
2678 |
#, php-format
|
2679 |
msgid ""
|
2680 |
"NinjaFirewall detected that the requested changes seemed to crash your blog. "
|
2681 |
"%s"
|
2682 |
msgstr ""
|
2683 |
|
2684 |
+
#: lib/install.php:126
|
2685 |
msgid ""
|
2686 |
"Changes have been undone. You may need to modify your selection and try "
|
2687 |
"again."
|
2688 |
msgstr ""
|
2689 |
|
2690 |
+
#: lib/install.php:136
|
2691 |
#, php-format
|
2692 |
msgid "The website front-end returned: HTTP %s %s."
|
2693 |
msgstr ""
|
2694 |
|
2695 |
+
#: lib/install.php:148
|
2696 |
#, php-format
|
2697 |
msgid "The website front-end returned a fatal error: %s."
|
2698 |
msgstr ""
|
2699 |
|
2700 |
+
#: lib/install.php:238 lib/install.php:263 lib/install.php:288
|
2701 |
+
#: lib/install.php:309
|
2702 |
msgid "File is not writable"
|
2703 |
msgstr ""
|
2704 |
|
2705 |
+
#: lib/install_default.php:167
|
2706 |
msgid ""
|
2707 |
"Error: The installer cannot download the security rules from wordpress.org "
|
2708 |
"website."
|
2709 |
msgstr ""
|
2710 |
|
2711 |
+
#: lib/install_default.php:168
|
2712 |
msgid ""
|
2713 |
"The server may be temporarily down or you may have network connectivity "
|
2714 |
"problems? Please try again in a few minutes."
|
2715 |
msgstr ""
|
2716 |
|
2717 |
+
#: lib/install_default.php:169
|
2718 |
msgid ""
|
2719 |
"NinjaFirewall downloads its rules over an HTTPS secure connection. Maybe "
|
2720 |
"your server does not support SSL? You can force NinjaFirewall to use a non-"
|
2722 |
"config.php</strong> file:"
|
2723 |
msgstr ""
|
2724 |
|
2725 |
+
#: lib/install_default.php:232
|
2726 |
#, php-format
|
2727 |
msgid ""
|
2728 |
"NinjaFirewall cannot create its <code>nfwlog/</code>log and cache folder; "
|
2901 |
msgid "Error: unable to write to the %s configuration file"
|
2902 |
msgstr ""
|
2903 |
|
2904 |
+
#: lib/logs.php:36 ninjafirewall.php:790
|
2905 |
msgid "Logs"
|
2906 |
msgstr ""
|
2907 |
|
3010 |
"Administrator to the whitelist\" option is enabled."
|
3011 |
msgstr ""
|
3012 |
|
3013 |
+
#: lib/logs_live_log.php:98 ninjafirewall.php:329
|
3014 |
+
msgid ""
|
3015 |
+
"Live Log lets you watch your blog traffic in real time. To enable it, click "
|
3016 |
+
"on the button below."
|
3017 |
+
msgstr ""
|
3018 |
+
|
3019 |
#: lib/logs_live_log.php:104
|
3020 |
msgid "Refresh rate:"
|
3021 |
msgstr ""
|
3056 |
msgid "Inclusion and exclusion filters (REQUEST_URI)"
|
3057 |
msgstr ""
|
3058 |
|
3059 |
+
#: lib/logs_live_log.php:160 lib/monitoring_file_check.php:395
|
3060 |
msgid "None"
|
3061 |
msgstr ""
|
3062 |
|
3068 |
msgid "Must not include"
|
3069 |
msgstr ""
|
3070 |
|
3071 |
+
#: lib/logs_live_log.php:164 lib/monitoring_file_check.php:153
|
3072 |
#: lib/monitoring_file_guard.php:89
|
3073 |
msgid "e.g.,"
|
3074 |
msgstr ""
|
3111 |
msgid "Error: please enter the custom log format."
|
3112 |
msgstr ""
|
3113 |
|
3114 |
+
#: lib/monitoring.php:43 ninjafirewall.php:764
|
3115 |
msgid "Monitoring"
|
3116 |
msgstr ""
|
3117 |
|
3127 |
msgid "You must create a snapshot first."
|
3128 |
msgstr ""
|
3129 |
|
3130 |
+
#: lib/monitoring_file_check.php:96 lib/monitoring_file_check.php:763
|
3131 |
msgid "NinjaFirewall detected that changes were made to your files."
|
3132 |
msgstr ""
|
3133 |
|
3135 |
msgid "No changes detected."
|
3136 |
msgstr ""
|
3137 |
|
3138 |
+
#: lib/monitoring_file_check.php:132
|
3139 |
+
msgid ""
|
3140 |
+
"File Check lets you perform file integrity monitoring upon request or on a "
|
3141 |
+
"specific interval. To start, create a snapshot of your files by clicking the "
|
3142 |
+
"button below."
|
3143 |
+
msgstr ""
|
3144 |
+
|
3145 |
+
#: lib/monitoring_file_check.php:139
|
3146 |
msgid "Create a snapshot of all files stored in that directory"
|
3147 |
msgstr ""
|
3148 |
|
3149 |
+
#: lib/monitoring_file_check.php:147
|
3150 |
#, php-format
|
3151 |
msgid "Default: %s"
|
3152 |
msgstr ""
|
3153 |
|
3154 |
+
#: lib/monitoring_file_check.php:152 lib/monitoring_file_guard.php:88
|
3155 |
msgid "Exclude the following files/folders (optional)"
|
3156 |
msgstr ""
|
3157 |
|
3158 |
+
#: lib/monitoring_file_check.php:153
|
3159 |
msgid ""
|
3160 |
"Full or partial case-sensitive string(s). Multiple values must be comma-"
|
3161 |
"separated"
|
3162 |
msgstr ""
|
3163 |
|
3164 |
+
#: lib/monitoring_file_check.php:159
|
3165 |
msgid "Do not follow symbolic links (default)"
|
3166 |
msgstr ""
|
3167 |
|
3168 |
+
#: lib/monitoring_file_check.php:165
|
3169 |
msgid "Create Snapshot"
|
3170 |
msgstr ""
|
3171 |
|
3172 |
+
#: lib/monitoring_file_check.php:231
|
3173 |
msgid "Last snapshot"
|
3174 |
msgstr ""
|
3175 |
|
3176 |
+
#: lib/monitoring_file_check.php:233
|
3177 |
#, php-format
|
3178 |
msgid "Created on: %s"
|
3179 |
msgstr ""
|
3180 |
|
3181 |
+
#: lib/monitoring_file_check.php:234
|
3182 |
#, php-format
|
3183 |
msgid "Total files: %s "
|
3184 |
msgstr ""
|
3185 |
|
3186 |
+
#: lib/monitoring_file_check.php:236
|
3187 |
msgid "Directory:"
|
3188 |
msgstr ""
|
3189 |
|
3190 |
+
#: lib/monitoring_file_check.php:240
|
3191 |
msgid "Exclusion:"
|
3192 |
msgstr ""
|
3193 |
|
3194 |
+
#: lib/monitoring_file_check.php:246
|
3195 |
msgid "Symlinks:"
|
3196 |
msgstr ""
|
3197 |
|
3198 |
+
#: lib/monitoring_file_check.php:248
|
3199 |
msgid "follow"
|
3200 |
msgstr ""
|
3201 |
|
3202 |
+
#: lib/monitoring_file_check.php:250
|
3203 |
msgid "do not follow"
|
3204 |
msgstr ""
|
3205 |
|
3206 |
+
#: lib/monitoring_file_check.php:254
|
3207 |
#, php-format
|
3208 |
msgid "Processing time: %s seconds"
|
3209 |
msgstr ""
|
3210 |
|
3211 |
+
#: lib/monitoring_file_check.php:259
|
3212 |
msgid "Download Snapshot"
|
3213 |
msgstr ""
|
3214 |
|
3215 |
+
#: lib/monitoring_file_check.php:259
|
3216 |
msgid "Delete Snapshot"
|
3217 |
msgstr ""
|
3218 |
|
3219 |
+
#: lib/monitoring_file_check.php:265
|
3220 |
msgid "Last changes"
|
3221 |
msgstr ""
|
3222 |
|
3223 |
+
#: lib/monitoring_file_check.php:272 lib/monitoring_file_check.php:771
|
3224 |
#, php-format
|
3225 |
msgid "New files: %s"
|
3226 |
msgstr ""
|
3227 |
|
3228 |
+
#: lib/monitoring_file_check.php:273 lib/monitoring_file_check.php:773
|
3229 |
#, php-format
|
3230 |
msgid "Deleted files: %s"
|
3231 |
msgstr ""
|
3232 |
|
3233 |
+
#: lib/monitoring_file_check.php:274 lib/monitoring_file_check.php:772
|
3234 |
#, php-format
|
3235 |
msgid "Modified files: %s"
|
3236 |
msgstr ""
|
3237 |
|
3238 |
+
#: lib/monitoring_file_check.php:278
|
3239 |
msgid "View Changes"
|
3240 |
msgstr ""
|
3241 |
|
3242 |
+
#: lib/monitoring_file_check.php:282
|
3243 |
msgid "Download Changes"
|
3244 |
msgstr ""
|
3245 |
|
3246 |
+
#: lib/monitoring_file_check.php:294
|
3247 |
msgid "Click a file to get more info about it."
|
3248 |
msgstr ""
|
3249 |
|
3250 |
+
#: lib/monitoring_file_check.php:297
|
3251 |
msgid "New files:"
|
3252 |
msgstr ""
|
3253 |
|
3254 |
+
#: lib/monitoring_file_check.php:306 lib/monitoring_file_check.php:359
|
3255 |
msgid "Size"
|
3256 |
msgstr ""
|
3257 |
|
3258 |
+
#: lib/monitoring_file_check.php:310 lib/monitoring_file_check.php:364
|
3259 |
msgid "Access"
|
3260 |
msgstr ""
|
3261 |
|
3262 |
+
#: lib/monitoring_file_check.php:314 lib/monitoring_file_check.php:369
|
3263 |
msgid "Uid / Gid"
|
3264 |
msgstr ""
|
3265 |
|
3266 |
+
#: lib/monitoring_file_check.php:318 lib/monitoring_file_check.php:374
|
3267 |
msgid "Modify"
|
3268 |
msgstr ""
|
3269 |
|
3270 |
+
#: lib/monitoring_file_check.php:322 lib/monitoring_file_check.php:379
|
3271 |
msgid "Change"
|
3272 |
msgstr ""
|
3273 |
|
3274 |
+
#: lib/monitoring_file_check.php:332
|
3275 |
msgid "Deleted files:"
|
3276 |
msgstr ""
|
3277 |
|
3278 |
+
#: lib/monitoring_file_check.php:345
|
3279 |
msgid "Modified files:"
|
3280 |
msgstr ""
|
3281 |
|
3282 |
+
#: lib/monitoring_file_check.php:355
|
3283 |
msgid "Old"
|
3284 |
msgstr ""
|
3285 |
|
3286 |
+
#: lib/monitoring_file_check.php:356
|
3287 |
msgid "New"
|
3288 |
msgstr ""
|
3289 |
|
3290 |
+
#: lib/monitoring_file_check.php:405
|
3291 |
msgid "Scan System For File Changes"
|
3292 |
msgstr ""
|
3293 |
|
3294 |
+
#: lib/monitoring_file_check.php:423
|
3295 |
msgid "Options"
|
3296 |
msgstr ""
|
3297 |
|
3298 |
+
#: lib/monitoring_file_check.php:430
|
3299 |
#, php-format
|
3300 |
msgid ""
|
3301 |
"It seems that %s is set. Ensure you have another way to run WP-Cron, "
|
3302 |
"otherwise NinjaFirewall scheduled scans will not work."
|
3303 |
msgstr ""
|
3304 |
|
3305 |
+
#: lib/monitoring_file_check.php:436
|
3306 |
msgid "Enable scheduled scans"
|
3307 |
msgstr ""
|
3308 |
|
3309 |
+
#: lib/monitoring_file_check.php:438
|
3310 |
msgid "No (default)"
|
3311 |
msgstr ""
|
3312 |
|
3313 |
+
#: lib/monitoring_file_check.php:439 lib/security_rules_update.php:153
|
3314 |
msgid "Hourly"
|
3315 |
msgstr ""
|
3316 |
|
3317 |
+
#: lib/monitoring_file_check.php:440 lib/security_rules_update.php:154
|
3318 |
msgid "Twicedaily"
|
3319 |
msgstr ""
|
3320 |
|
3321 |
+
#: lib/monitoring_file_check.php:441 lib/security_rules_update.php:155
|
3322 |
msgid "Daily"
|
3323 |
msgstr ""
|
3324 |
|
3325 |
+
#: lib/monitoring_file_check.php:448
|
3326 |
#, php-format
|
3327 |
msgid ""
|
3328 |
"Next scan will start in approximately %s day(s), %s hour(s), %s minute(s) "
|
3329 |
"and %s second(s)."
|
3330 |
msgstr ""
|
3331 |
|
3332 |
+
#: lib/monitoring_file_check.php:455
|
3333 |
msgid ""
|
3334 |
"The next scheduled scan date is in the past! WordPress wp-cron may not be "
|
3335 |
"working or may have been disabled."
|
3336 |
msgstr ""
|
3337 |
|
3338 |
+
#: lib/monitoring_file_check.php:463
|
3339 |
msgid "Scheduled scan report"
|
3340 |
msgstr ""
|
3341 |
|
3342 |
+
#: lib/monitoring_file_check.php:465
|
3343 |
msgid "Send me a report by email only if changes are detected (default)"
|
3344 |
msgstr ""
|
3345 |
|
3346 |
+
#: lib/monitoring_file_check.php:466
|
3347 |
msgid "Always send me a report by email after a scheduled scan"
|
3348 |
msgstr ""
|
3349 |
|
3350 |
+
#: lib/monitoring_file_check.php:471
|
3351 |
msgid "Save Scan Options"
|
3352 |
msgstr ""
|
3353 |
|
3354 |
+
#: lib/monitoring_file_check.php:483
|
3355 |
msgid "Enter the full path to the directory to be scanned."
|
3356 |
msgstr ""
|
3357 |
|
3358 |
+
#: lib/monitoring_file_check.php:490
|
3359 |
#, php-format
|
3360 |
msgid "The directory %s does not exist."
|
3361 |
msgstr ""
|
3362 |
|
3363 |
+
#: lib/monitoring_file_check.php:493
|
3364 |
#, php-format
|
3365 |
msgid "The directory %s is not readable."
|
3366 |
msgstr ""
|
3367 |
|
3368 |
+
#: lib/monitoring_file_check.php:534
|
3369 |
#, php-format
|
3370 |
msgid "Cannot write to %s."
|
3371 |
msgstr ""
|
3372 |
|
3373 |
+
#: lib/monitoring_file_check.php:564
|
3374 |
#, php-format
|
3375 |
msgid "Error : cannot open %s directory."
|
3376 |
msgstr ""
|
3377 |
|
3378 |
+
#: lib/monitoring_file_check.php:567
|
3379 |
#, php-format
|
3380 |
msgid "Error : %s directory is not readable."
|
3381 |
msgstr ""
|
3382 |
|
3383 |
+
#: lib/monitoring_file_check.php:582
|
3384 |
#, php-format
|
3385 |
msgid "Missing options line %s, please try again."
|
3386 |
msgstr ""
|
3387 |
|
3388 |
+
#: lib/monitoring_file_check.php:592
|
3389 |
#, php-format
|
3390 |
msgid "Cannot create %s."
|
3391 |
msgstr ""
|
3392 |
|
3393 |
+
#: lib/monitoring_file_check.php:609
|
3394 |
msgid "Error reading old snapshot file."
|
3395 |
msgstr ""
|
3396 |
|
3397 |
+
#: lib/monitoring_file_check.php:620
|
3398 |
msgid "Error reading new snapshot file."
|
3399 |
msgstr ""
|
3400 |
|
3401 |
+
#: lib/monitoring_file_check.php:736 ninjafirewall.php:421
|
3402 |
msgid "New file"
|
3403 |
msgstr ""
|
3404 |
|
3405 |
+
#: lib/monitoring_file_check.php:737 ninjafirewall.php:422
|
3406 |
msgid "Modified file"
|
3407 |
msgstr ""
|
3408 |
|
3409 |
+
#: lib/monitoring_file_check.php:738 ninjafirewall.php:423
|
3410 |
msgid "Deleted file"
|
3411 |
msgstr ""
|
3412 |
|
3413 |
+
#: lib/monitoring_file_check.php:762
|
3414 |
msgid "[NinjaFirewall] Alert: File Check detection"
|
3415 |
msgstr ""
|
3416 |
|
3417 |
+
#: lib/monitoring_file_check.php:765 lib/monitoring_file_check.php:767
|
3418 |
+
#: lib/monitoring_file_check.php:792 lib/monitoring_file_check.php:794
|
3419 |
+
#: lib/security_rules_update.php:553 lib/security_rules_update.php:555
|
3420 |
+
#: lib/utils.php:214 lib/utils.php:776 lib/utils.php:941 lib/utils.php:1273
|
3421 |
msgid "Blog:"
|
3422 |
msgstr ""
|
3423 |
|
3424 |
+
#: lib/monitoring_file_check.php:769 lib/monitoring_file_check.php:796
|
3425 |
+
#: lib/security_rules_update.php:558
|
3426 |
#, php-format
|
3427 |
msgid "Date: %s"
|
3428 |
msgstr ""
|
3429 |
|
3430 |
+
#: lib/monitoring_file_check.php:775
|
3431 |
msgid "See attached file for details."
|
3432 |
msgstr ""
|
3433 |
|
3434 |
+
#: lib/monitoring_file_check.php:789
|
3435 |
msgid "[NinjaFirewall] File Check report"
|
3436 |
msgstr ""
|
3437 |
|
3438 |
+
#: lib/monitoring_file_check.php:790
|
3439 |
msgid "NinjaFirewall did not detect changes in your files."
|
3440 |
msgstr ""
|
3441 |
|
3480 |
msgid "Save File Guard options"
|
3481 |
msgstr ""
|
3482 |
|
3483 |
+
#: lib/network.php:24 ninjafirewall.php:1051 ninjafirewall.php:1055
|
3484 |
#, php-format
|
3485 |
msgid "You are not allowed to perform this task (%s)."
|
3486 |
msgstr ""
|
3503 |
msgid "Save Network options"
|
3504 |
msgstr ""
|
3505 |
|
3506 |
+
#: lib/security_rules.php:44 lib/security_rules_update.php:559
|
3507 |
+
#: ninjafirewall.php:794
|
3508 |
msgid "Security Rules"
|
3509 |
msgstr ""
|
3510 |
|
3606 |
msgid "Security rules have been updated."
|
3607 |
msgstr ""
|
3608 |
|
3609 |
+
#: lib/security_rules_update.php:91 lib/security_rules_update.php:435
|
3610 |
msgid "No security rules update available."
|
3611 |
msgstr ""
|
3612 |
|
3617 |
"otherwise NinjaFirewall automatic updates will not work."
|
3618 |
msgstr ""
|
3619 |
|
3620 |
+
#: lib/security_rules_update.php:136
|
3621 |
msgid "Automatically update NinjaFirewall security rules"
|
3622 |
msgstr ""
|
3623 |
|
3624 |
+
#: lib/security_rules_update.php:148
|
3625 |
msgid "Check for updates"
|
3626 |
msgstr ""
|
3627 |
|
3628 |
+
#: lib/security_rules_update.php:151
|
3629 |
msgid "Every 15 minutes"
|
3630 |
msgstr ""
|
3631 |
|
3632 |
+
#: lib/security_rules_update.php:152
|
3633 |
msgid "Every 30 minutes"
|
3634 |
msgstr ""
|
3635 |
|
3636 |
+
#: lib/security_rules_update.php:169
|
3637 |
msgid ""
|
3638 |
"The next scheduled date is in the past! WordPress wp-cron may not be working "
|
3639 |
"or may have been disabled."
|
3640 |
msgstr ""
|
3641 |
|
3642 |
+
#: lib/security_rules_update.php:174
|
3643 |
#, php-format
|
3644 |
msgid ""
|
3645 |
"Next scheduled update will start in approximately %s day, %s hour(s), %s "
|
3646 |
"minute(s) and %s seconds."
|
3647 |
msgstr ""
|
3648 |
|
3649 |
+
#: lib/security_rules_update.php:182
|
3650 |
msgid "Notification"
|
3651 |
msgstr ""
|
3652 |
|
3653 |
+
#: lib/security_rules_update.php:184
|
3654 |
msgid "Send me a report by email when security rules have been updated."
|
3655 |
msgstr ""
|
3656 |
|
3657 |
+
#: lib/security_rules_update.php:185
|
3658 |
msgid ""
|
3659 |
"Reports will be sent to the contact email address defined in the Event "
|
3660 |
"Notifications menu."
|
3661 |
msgstr ""
|
3662 |
|
3663 |
+
#: lib/security_rules_update.php:195 lib/security_rules_update.php:210
|
3664 |
msgid "The updates log is currently empty."
|
3665 |
msgstr ""
|
3666 |
|
3667 |
+
#: lib/security_rules_update.php:199
|
3668 |
msgid "Updates Log"
|
3669 |
msgstr ""
|
3670 |
|
3671 |
+
#: lib/security_rules_update.php:213
|
3672 |
msgid "Log is flushed automatically."
|
3673 |
msgstr ""
|
3674 |
|
3675 |
+
#: lib/security_rules_update.php:224
|
3676 |
msgid "Save Updates Options"
|
3677 |
msgstr ""
|
3678 |
|
3679 |
+
#: lib/security_rules_update.php:225
|
3680 |
msgid "Check For Updates Now!"
|
3681 |
msgstr ""
|
3682 |
|
3683 |
+
#: lib/security_rules_update.php:233
|
3684 |
msgid "Delete Log"
|
3685 |
msgstr ""
|
3686 |
|
3687 |
+
#: lib/security_rules_update.php:321
|
3688 |
msgid "Error: Wrong rules format."
|
3689 |
msgstr ""
|
3690 |
|
3691 |
+
#: lib/security_rules_update.php:330
|
3692 |
msgid "Error: Unable to unserialize the new rules."
|
3693 |
msgstr ""
|
3694 |
|
3695 |
+
#: lib/security_rules_update.php:338
|
3696 |
msgid "Error: Unserialized rules seem corrupted."
|
3697 |
msgstr ""
|
3698 |
|
3699 |
+
#: lib/security_rules_update.php:378
|
3700 |
#, php-format
|
3701 |
msgid "Security rules updated to version %s."
|
3702 |
msgstr ""
|
3703 |
|
3704 |
+
#: lib/security_rules_update.php:424
|
|
|
|
|
|
|
|
|
|
|
|
|
3705 |
msgid "Error: Unable to retrieve the new rules version."
|
3706 |
msgstr ""
|
3707 |
|
3708 |
+
#: lib/security_rules_update.php:442
|
3709 |
#, php-format
|
3710 |
msgid "Error: Server returned a %s HTTP error code (#1)."
|
3711 |
msgstr ""
|
3712 |
|
3713 |
+
#: lib/security_rules_update.php:449 lib/security_rules_update.php:515
|
3714 |
msgid "Error: Unable to connect to the remote server"
|
3715 |
msgstr ""
|
3716 |
|
3717 |
+
#: lib/security_rules_update.php:479
|
3718 |
#, php-format
|
3719 |
msgid "Error: The new rules versions do not match (%s != %s)."
|
3720 |
msgstr ""
|
3721 |
|
3722 |
+
#: lib/security_rules_update.php:493
|
3723 |
#, php-format
|
3724 |
msgid ""
|
3725 |
"Error: The new rules %s digital signature is not correct. Aborting update, "
|
3726 |
"rules may have been tampered with."
|
3727 |
msgstr ""
|
3728 |
|
3729 |
+
#: lib/security_rules_update.php:508
|
3730 |
#, php-format
|
3731 |
msgid "Error: Server returned a %s HTTP error code (#2)."
|
3732 |
msgstr ""
|
3733 |
|
3734 |
+
#: lib/security_rules_update.php:550
|
3735 |
msgid "[NinjaFirewall] Security rules update"
|
3736 |
msgstr ""
|
3737 |
|
3738 |
+
#: lib/security_rules_update.php:551
|
3739 |
msgid "NinjaFirewall security rules have been updated:"
|
3740 |
msgstr ""
|
3741 |
|
3742 |
+
#: lib/security_rules_update.php:557
|
3743 |
msgid "Rules version:"
|
3744 |
msgstr ""
|
3745 |
|
3746 |
+
#: lib/security_rules_update.php:559
|
3747 |
+
#, php-format
|
3748 |
+
msgid "This notification can be turned off from NinjaFirewall \"%s\" page."
|
3749 |
msgstr ""
|
3750 |
|
3751 |
+
#: lib/thickbox.php:42
|
3752 |
msgid "Upgrade to Full WAF mode"
|
3753 |
msgstr ""
|
3754 |
|
3755 |
+
#: lib/thickbox.php:47
|
3756 |
msgid ""
|
3757 |
"In <strong>Full WAF</strong> mode, all scripts located inside the blog "
|
3758 |
"installation directories and sub-directories are protected by NinjaFirewall, "
|
3760 |
"highest possible level of protection: security without compromise."
|
3761 |
msgstr ""
|
3762 |
|
3763 |
+
#: lib/thickbox.php:49
|
3764 |
#, php-format
|
3765 |
msgid ""
|
3766 |
"It works on most websites right out of the box, or may require <a href=\"%s"
|
3769 |
"all."
|
3770 |
msgstr ""
|
3771 |
|
3772 |
+
#: lib/thickbox.php:51
|
3773 |
msgid ""
|
3774 |
"If this happened to you, don't worry: you could still run it in "
|
3775 |
"<strong>WordPress WAF</strong> mode. Despite being less powerful than the "
|
3777 |
"higher than other security plugins."
|
3778 |
msgstr ""
|
3779 |
|
3780 |
+
#: lib/thickbox.php:57
|
3781 |
msgid "(recommended)"
|
3782 |
msgstr ""
|
3783 |
|
3784 |
+
#: lib/thickbox.php:117
|
3785 |
msgid "Select your HTTP server and your PHP server API"
|
3786 |
msgstr ""
|
3787 |
|
3788 |
+
#: lib/thickbox.php:127
|
3789 |
msgid "Other webserver + CGI/FastCGI or PHP-FPM"
|
3790 |
msgstr ""
|
3791 |
|
3792 |
+
#: lib/thickbox.php:129
|
3793 |
msgid "View PHPINFO"
|
3794 |
msgstr ""
|
3795 |
|
3796 |
+
#: lib/thickbox.php:161
|
3797 |
msgid "Select the PHP initialization file supported by your server"
|
3798 |
msgstr ""
|
3799 |
|
3800 |
+
#: lib/thickbox.php:173
|
3801 |
msgid "Let NinjaFirewall make the necessary changes (recommended)."
|
3802 |
msgstr ""
|
3803 |
|
3804 |
+
#: lib/thickbox.php:174
|
3805 |
msgid "I want to make the changes myself."
|
3806 |
msgstr ""
|
3807 |
|
3808 |
+
#: lib/thickbox.php:176
|
3809 |
msgid ""
|
3810 |
"Ensure that you have FTP access to your website so that, if there were a "
|
3811 |
"problem during the installation of the firewall, you could easily undo the "
|
3812 |
"changes."
|
3813 |
msgstr ""
|
3814 |
|
3815 |
+
#: lib/thickbox.php:179
|
3816 |
msgid "Please make the changes below, then click on the \"Finish\" button."
|
3817 |
msgstr ""
|
3818 |
|
3819 |
+
#: lib/thickbox.php:186
|
3820 |
#, php-format
|
3821 |
msgid ""
|
3822 |
"The %s file must be created, and the following lines of code added to it:"
|
3823 |
msgstr ""
|
3824 |
|
3825 |
+
#: lib/thickbox.php:187
|
3826 |
#, php-format
|
3827 |
msgid "The following lines of code must be added to your existing %s file:"
|
3828 |
msgstr ""
|
3829 |
|
3830 |
+
#: lib/thickbox.php:247
|
3831 |
msgid ""
|
3832 |
"Log in to your Openlitespeed admin dashboard, click on \"Virtual Host\", "
|
3833 |
"select your domain, add the following instructions to the \"php.ini Override"
|
3834 |
"\" section in the \"General\" tab, and restart Openlitespeed:"
|
3835 |
msgstr ""
|
3836 |
|
3837 |
+
#: lib/thickbox.php:254
|
3838 |
msgid ""
|
3839 |
"Important: if one day you wanted to uninstall NinjaFirewall, do not forget "
|
3840 |
"to remove these instructions from your Openlitespeed admin dashboard "
|
3842 |
"could not do it for you."
|
3843 |
msgstr ""
|
3844 |
|
3845 |
+
#: lib/thickbox.php:272
|
3846 |
msgid "Finish"
|
3847 |
msgstr ""
|
3848 |
|
3854 |
msgid "NinjaFirewall has blocked an attempt to create a user account:"
|
3855 |
msgstr ""
|
3856 |
|
3857 |
+
#: lib/utils.php:215 lib/utils.php:946
|
3858 |
msgid "Username:"
|
3859 |
msgstr ""
|
3860 |
|
3861 |
+
#: lib/utils.php:216 lib/utils.php:951 lib/utils.php:1274
|
3862 |
msgid "User IP:"
|
3863 |
msgstr ""
|
3864 |
|
3865 |
+
#: lib/utils.php:228 lib/utils.php:963 lib/utils.php:1269
|
|
|
|
|
|
|
|
|
3866 |
msgid "A PHP backtrace has been attached to this message for your convenience."
|
3867 |
msgstr ""
|
3868 |
|
3869 |
+
#: lib/utils.php:251 lib/utils.php:252 lib/utils.php:987 lib/utils.php:988
|
3870 |
msgid "You are not allowed to perform this task."
|
3871 |
msgstr ""
|
3872 |
|
3873 |
+
#: lib/utils.php:525 lib/utils.php:529
|
3874 |
msgid "NinjaFirewall error"
|
3875 |
msgstr ""
|
3876 |
|
3877 |
+
#: lib/utils.php:526
|
3878 |
#, php-format
|
3879 |
msgid ""
|
3880 |
"%s directory cannot be created. Please review your installation and ensure "
|
3881 |
"that %s is writable."
|
3882 |
msgstr ""
|
3883 |
|
3884 |
+
#: lib/utils.php:530
|
3885 |
#, php-format
|
3886 |
msgid ""
|
3887 |
"%s directory is read-only. Please review your installation and ensure that "
|
3888 |
"%s is writable."
|
3889 |
msgstr ""
|
3890 |
|
3891 |
+
#: lib/utils.php:549
|
3892 |
msgid "unknown error"
|
3893 |
msgstr ""
|
3894 |
|
3895 |
+
#: lib/utils.php:551
|
3896 |
msgid "NinjaFirewall fatal error:"
|
3897 |
msgstr ""
|
3898 |
|
3899 |
+
#: lib/utils.php:552
|
3900 |
msgid "Review your installation, your site is not protected."
|
3901 |
msgstr ""
|
3902 |
|
3903 |
+
#: lib/utils.php:569
|
3904 |
msgid "Alert: WordPress console login"
|
3905 |
msgstr ""
|
3906 |
|
3907 |
+
#: lib/utils.php:575
|
|
|
|
|
|
|
|
|
3908 |
msgid "Someone just logged in to your WordPress admin console:"
|
3909 |
msgstr ""
|
3910 |
|
3911 |
+
#: lib/utils.php:581
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3912 |
msgid "Support forum"
|
3913 |
msgstr ""
|
3914 |
|
3915 |
+
#: lib/utils.php:642 lib/utils.php:669
|
3916 |
msgid "Forbidden access"
|
3917 |
msgstr ""
|
3918 |
|
3919 |
+
#: lib/utils.php:688
|
3920 |
#, php-format
|
3921 |
msgid ""
|
3922 |
"<strong>ERROR</strong>: Invalid username or password.<br /><a href=\"%s"
|
3923 |
"\">Lost your password</a>?"
|
3924 |
msgstr ""
|
3925 |
|
3926 |
+
#: lib/utils.php:772
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3927 |
msgid "[NinjaFirewall] Alert: Database changes detected"
|
3928 |
msgstr ""
|
3929 |
|
3930 |
+
#: lib/utils.php:773
|
3931 |
msgid ""
|
3932 |
"NinjaFirewall has detected that one or more administrator accounts were "
|
3933 |
"modified in the database:"
|
3934 |
msgstr ""
|
3935 |
|
3936 |
+
#: lib/utils.php:778
|
3937 |
#, php-format
|
3938 |
msgid "Total administrators : %s"
|
3939 |
msgstr ""
|
3940 |
|
3941 |
+
#: lib/utils.php:787
|
3942 |
msgid ""
|
3943 |
"If you cannot see any modifications in the above fields, it is possible that "
|
3944 |
"the administrator password was changed."
|
3945 |
msgstr ""
|
3946 |
|
3947 |
+
#: lib/utils.php:926
|
3948 |
msgid "Blocked privilege escalation attempt"
|
3949 |
msgstr ""
|
3950 |
|
3951 |
+
#: lib/utils.php:939
|
3952 |
msgid ""
|
3953 |
"NinjaFirewall has blocked an attempt to modify a user capability by someone "
|
3954 |
"who does not have administrative privileges:"
|
3955 |
msgstr ""
|
3956 |
|
3957 |
+
#: lib/utils.php:966 lib/utils.php:1279
|
3958 |
+
msgid ""
|
3959 |
+
"This protection (and notification) can be turned off from NinjaFirewall "
|
3960 |
+
"\"Firewall Policies\" page."
|
3961 |
+
msgstr ""
|
3962 |
+
|
3963 |
+
#: lib/utils.php:999
|
3964 |
msgid ""
|
3965 |
"NinjaFirewall brute-force protection is enabled and you are temporarily "
|
3966 |
"whitelisted."
|
3967 |
msgstr ""
|
3968 |
|
3969 |
+
#: lib/utils.php:1014
|
3970 |
#, php-format
|
3971 |
msgid ""
|
3972 |
"Hey, it seems that you've been using NinjaFirewall for some time. If you "
|
3975 |
"rate it. Thank you!"
|
3976 |
msgstr ""
|
3977 |
|
3978 |
+
#: lib/utils.php:1241
|
3979 |
msgid ""
|
3980 |
"The attempt was blocked and the option was reversed to its original value."
|
3981 |
msgstr ""
|
3982 |
|
3983 |
+
#: lib/utils.php:1246
|
3984 |
msgid "Attempt to modify WordPress settings"
|
3985 |
msgstr ""
|
3986 |
|
3987 |
+
#: lib/utils.php:1247
|
3988 |
msgid ""
|
3989 |
"NinjaFirewall has blocked an attempt to modify some important WordPress "
|
3990 |
"settings by a user that does not have administrative privileges:"
|
3991 |
msgstr ""
|
3992 |
|
3993 |
+
#: lib/utils.php:1248 lib/utils.php:1257
|
3994 |
#, php-format
|
3995 |
msgid "Option: %s"
|
3996 |
msgstr ""
|
3997 |
|
3998 |
+
#: lib/utils.php:1249
|
3999 |
#, php-format
|
4000 |
msgid "Original value: %s"
|
4001 |
msgstr ""
|
4002 |
|
4003 |
+
#: lib/utils.php:1250
|
4004 |
#, php-format
|
4005 |
msgid "Modified value: %s"
|
4006 |
msgstr ""
|
4007 |
|
4008 |
+
#: lib/utils.php:1251 lib/utils.php:1259
|
4009 |
#, php-format
|
4010 |
msgid "Action taken: %s"
|
4011 |
msgstr ""
|
4012 |
|
4013 |
+
#: lib/utils.php:1255
|
4014 |
msgid "Code injection attempt in WordPress options table"
|
4015 |
msgstr ""
|
4016 |
|
4017 |
+
#: lib/utils.php:1256
|
4018 |
msgid ""
|
4019 |
"NinjaFirewall has blocked an attempt to inject code in the WordPress options "
|
4020 |
"table by a user that does not have administrative privileges:"
|
4021 |
msgstr ""
|
4022 |
|
4023 |
+
#: lib/utils.php:1258
|
4024 |
#, php-format
|
4025 |
msgid "Code: %s"
|
4026 |
msgstr ""
|
4027 |
|
4028 |
+
#: lib/utils.php:1314
|
|
|
|
|
|
|
|
|
|
|
|
|
4029 |
#, php-format
|
4030 |
msgid "Error, cannot create the %s folder."
|
4031 |
msgstr ""
|
4032 |
|
4033 |
+
#: lib/utils.php:1314 lib/utils.php:1322 lib/utils.php:1330
|
4034 |
msgid "Check your server permissions and try again."
|
4035 |
msgstr ""
|
4036 |
|
4037 |
+
#: lib/utils.php:1322
|
4038 |
#, php-format
|
4039 |
msgid "Error, the %s folder is not writable."
|
4040 |
msgstr ""
|
4041 |
|
4042 |
+
#: lib/utils.php:1330
|
4043 |
#, php-format
|
4044 |
msgid "Error, cannot write %s."
|
4045 |
msgstr ""
|
4413 |
msgid "Cannot retrieve user rules from database (#4)"
|
4414 |
msgstr ""
|
4415 |
|
4416 |
+
#: ninjafirewall.php:110
|
4417 |
msgid ""
|
4418 |
"You do not have \"unfiltered_html\" capability. Please enable it in order to "
|
4419 |
"run NinjaFirewall (or make sure you do not have \"DISALLOW_UNFILTERED_HTML\" "
|
4420 |
"in your wp-config.php script)."
|
4421 |
msgstr ""
|
4422 |
|
4423 |
+
#: ninjafirewall.php:117
|
4424 |
#, php-format
|
4425 |
msgid ""
|
4426 |
"NinjaFirewall requires WordPress 3.3 or greater but your current version is "
|
4427 |
"%s."
|
4428 |
msgstr ""
|
4429 |
|
4430 |
+
#: ninjafirewall.php:121
|
4431 |
#, php-format
|
4432 |
msgid ""
|
4433 |
"NinjaFirewall requires PHP 5.3 or greater but your current version is %s."
|
4434 |
msgstr ""
|
4435 |
|
4436 |
+
#: ninjafirewall.php:125
|
4437 |
#, php-format
|
4438 |
msgid "NinjaFirewall requires the PHP %s extension."
|
4439 |
msgstr ""
|
4440 |
|
4441 |
+
#: ninjafirewall.php:129
|
4442 |
msgid ""
|
4443 |
"You have SAFE_MODE enabled. Please disable it, it is deprecated as of PHP "
|
4444 |
"5.3.0 (see http://php.net/safe-mode)."
|
4445 |
msgstr ""
|
4446 |
|
4447 |
+
#: ninjafirewall.php:133
|
4448 |
msgid "You are not allowed to activate NinjaFirewall."
|
4449 |
msgstr ""
|
4450 |
|
4451 |
+
#: ninjafirewall.php:137
|
4452 |
msgid "NinjaFirewall is not compatible with Microsoft Windows."
|
4453 |
msgstr ""
|
4454 |
|
4455 |
+
#: ninjafirewall.php:289
|
4456 |
msgid ""
|
4457 |
"All fields will be restored to their default values and any changes you made "
|
4458 |
"will be lost. Continue?"
|
4459 |
msgstr ""
|
4460 |
|
4461 |
+
#: ninjafirewall.php:293
|
4462 |
msgid "Missing security nonce, try to reload the page."
|
4463 |
msgstr ""
|
4464 |
|
4465 |
+
#: ninjafirewall.php:295
|
4466 |
msgid "Please select the HTTP server in the list."
|
4467 |
msgstr ""
|
4468 |
|
4469 |
+
#: ninjafirewall.php:299
|
4470 |
msgid ""
|
4471 |
"This action will restore the selected configuration file and will override "
|
4472 |
"all your current firewall options, policies and rules. Continue?"
|
4473 |
msgstr ""
|
4474 |
|
4475 |
+
#: ninjafirewall.php:303
|
4476 |
msgid ""
|
4477 |
"Any character that is not a letter [a-zA-Z], a digit [0-9], a dot [.], a "
|
4478 |
"hyphen [-] or an underscore [_] will be removed from the filename and "
|
4479 |
"replaced with the substitution character. Continue?"
|
4480 |
msgstr ""
|
4481 |
|
4482 |
+
#: ninjafirewall.php:305
|
4483 |
msgid ""
|
4484 |
"Ensure that you can access your admin console over HTTPS before enabling "
|
4485 |
"this option, otherwise you will lock yourself out of your site. Continue?"
|
4486 |
msgstr ""
|
4487 |
|
4488 |
+
#: ninjafirewall.php:309
|
4489 |
msgid "Delete the current snapshot ?"
|
4490 |
msgstr ""
|
4491 |
|
4492 |
+
#: ninjafirewall.php:313
|
4493 |
msgid "Invalid character."
|
4494 |
msgstr ""
|
4495 |
|
4496 |
+
#: ninjafirewall.php:315
|
4497 |
msgid "\"admin\" is not acceptable, please choose another user name."
|
4498 |
msgstr ""
|
4499 |
|
4500 |
+
#: ninjafirewall.php:317
|
4501 |
msgid "Please enter max 1024 character only."
|
4502 |
msgstr ""
|
4503 |
|
4504 |
+
#: ninjafirewall.php:319
|
4505 |
msgid "Select when to enable the login protection."
|
4506 |
msgstr ""
|
4507 |
|
4508 |
+
#: ninjafirewall.php:321
|
4509 |
msgid "Enter a name and a password for the HTTP authentication."
|
4510 |
msgstr ""
|
4511 |
|
4512 |
+
#: ninjafirewall.php:325
|
4513 |
msgid "Your public key is not valid."
|
4514 |
msgstr ""
|
4515 |
|
4516 |
+
#: ninjafirewall.php:331
|
4517 |
msgid "No traffic yet, please wait"
|
4518 |
msgstr ""
|
4519 |
|
4520 |
+
#: ninjafirewall.php:333
|
4521 |
msgid "seconds..."
|
4522 |
msgstr ""
|
4523 |
|
4524 |
+
#: ninjafirewall.php:335
|
4525 |
msgid "Error: Live Log did not receive the expected response from your server:"
|
4526 |
msgstr ""
|
4527 |
|
4528 |
+
#: ninjafirewall.php:337
|
4529 |
msgid "Error: URL does not seem to exist (404 Not Found):"
|
4530 |
msgstr ""
|
4531 |
|
4532 |
+
#: ninjafirewall.php:339
|
4533 |
msgid "Error: Cannot find your log file. Try to reload this page."
|
4534 |
msgstr ""
|
4535 |
|
4536 |
+
#: ninjafirewall.php:341
|
4537 |
msgid "Error: The HTTP server returned the following error code:"
|
4538 |
msgstr ""
|
4539 |
|
4540 |
+
#: ninjafirewall.php:579 ninjafirewall.php:690
|
4541 |
msgid "Error: Security nonces do not match. Reload the page and try again."
|
4542 |
msgstr ""
|
4543 |
|
4550 |
msgid "Error: missing parameter (%s)."
|
4551 |
msgstr ""
|
4552 |
|
4553 |
+
#: ninjafirewall.php:752
|
4554 |
msgid "NinjaFirewall: Dashboard"
|
4555 |
msgstr ""
|
4556 |
|
4557 |
+
#: ninjafirewall.php:756
|
4558 |
msgid "NinjaFirewall: Firewall Options"
|
4559 |
msgstr ""
|
4560 |
|
4561 |
+
#: ninjafirewall.php:760
|
4562 |
msgid "NinjaFirewall: Firewall Policies"
|
4563 |
msgstr ""
|
4564 |
|
4565 |
+
#: ninjafirewall.php:764
|
4566 |
msgid "NinjaFirewall: Monitoring"
|
4567 |
msgstr ""
|
4568 |
|
4569 |
+
#: ninjafirewall.php:774
|
4570 |
msgid "NinjaFirewall: Anti-Malware"
|
4571 |
msgstr ""
|
4572 |
|
4573 |
+
#: ninjafirewall.php:778
|
4574 |
msgid "NinjaFirewall: Network"
|
4575 |
msgstr ""
|
4576 |
|
4577 |
+
#: ninjafirewall.php:782
|
4578 |
msgid "NinjaFirewall: Event Notifications"
|
4579 |
msgstr ""
|
4580 |
|
4581 |
+
#: ninjafirewall.php:786
|
4582 |
msgid "NinjaFirewall: Log-in Protection"
|
4583 |
msgstr ""
|
4584 |
|
4585 |
+
#: ninjafirewall.php:790
|
4586 |
msgid "NinjaFirewall: Logs"
|
4587 |
msgstr ""
|
4588 |
|
4589 |
+
#: ninjafirewall.php:794
|
4590 |
msgid "NinjaFirewall: Security Rules"
|
4591 |
msgstr ""
|
4592 |
|
4593 |
+
#: ninjafirewall.php:838
|
4594 |
msgid "NinjaFirewall Settings"
|
4595 |
msgstr ""
|
4596 |
|
4597 |
+
#: ninjafirewall.php:846
|
4598 |
msgid "NinjaFirewall is enabled"
|
4599 |
msgstr ""
|
4600 |
|
4601 |
+
#: ninjafirewall.php:986
|
4602 |
msgid "Access Restricted"
|
4603 |
msgstr ""
|
4604 |
|
4605 |
+
#: ninjafirewall.php:992
|
4606 |
msgid "Settings"
|
4607 |
msgstr ""
|
4608 |
|
4609 |
+
#: ninjafirewall.php:993
|
4610 |
msgid "Upgrade to Premium"
|
4611 |
msgstr ""
|
4612 |
|
4613 |
+
#: ninjafirewall.php:994
|
4614 |
msgid "Rate it!"
|
4615 |
msgstr ""
|
lib/dashboard.php
CHANGED
@@ -123,6 +123,29 @@ if ( $res !== false ) {
|
|
123 |
</h2>
|
124 |
<br />
|
125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
<!-- Dashboard -->
|
127 |
|
128 |
<div id="dashboard-options"<?php echo $dashboard_div ?>>
|
@@ -173,7 +196,7 @@ if ( $res !== false ) {
|
|
173 |
<?php
|
174 |
if ( defined( 'NFW_WPWAF' ) ) {
|
175 |
?>
|
176 |
-
|
177 |
<br />
|
178 |
<?php printf( __('For better protection, <a %s>click here</a> to enable its Full WAF mode.', 'ninjafirewall'), 'id="nfw-thickbox" style="cursor:pointer;text-decoration:underline" title="'. __('Click to install NinjaFirewall in Full WAF mode.', 'ninjafirewall') .'"') ?>
|
179 |
<?php
|
@@ -200,7 +223,7 @@ if ( $res !== false ) {
|
|
200 |
?>
|
201 |
<tr>
|
202 |
<th scope="row" class="row-med"><?php _e('Edition', 'ninjafirewall') ?></th>
|
203 |
-
<td>WP Edition ~ <a href="?page=nfsubwplus"><?php _e('Need more security?
|
204 |
</tr>
|
205 |
<tr>
|
206 |
<th scope="row" class="row-med"><?php _e('Version', 'ninjafirewall') ?></th>
|
123 |
</h2>
|
124 |
<br />
|
125 |
|
126 |
+
<?php
|
127 |
+
// One-time notice:
|
128 |
+
if ( isset( $nfw_options['welcome'] ) ) {
|
129 |
+
?>
|
130 |
+
<div id="nfw-welcome">
|
131 |
+
<table class="form-table nfw-table" style="background:#fff">
|
132 |
+
<tr>
|
133 |
+
<td style="padding:20px;text-align:center;vertical-align:middle;width:50%">
|
134 |
+
<h3><?php _e('Thank you for using NinjaFirewall.', 'ninjafirewall' )?></h3>
|
135 |
+
<p style="font-size: 1.1em;"><?php printf( __('Every page of NinjaFirewall has a contextual help: whenever you need help about an option or feature, click on the %s tab located in the upper right corner of the corresponding page.', 'ninjafirewall' ), '<strong style="border:1px solid #ccc;padding:2px">'. __('Help') .'</strong>' ) ?></p>
|
136 |
+
<br />
|
137 |
+
<p><input type="button" class="button-primary" value="<?php _e('Got it!', 'ninjafirewall' )?>" onClick="nfwjs_welcomeajax('<?php echo wp_create_nonce('welcome_save') ?>');nfwjs_up_down('nfw-welcome');" /></p>
|
138 |
+
</td>
|
139 |
+
<td style="padding:20px;text-align:center;vertical-align:middle;width:50%">
|
140 |
+
<img class="wpplus img-fluid" src="<?php echo plugins_url( '/ninjafirewall/images/welcome.png') ?>" />
|
141 |
+
</td>
|
142 |
+
</tr>
|
143 |
+
</table>
|
144 |
+
</div>
|
145 |
+
<?php
|
146 |
+
}
|
147 |
+
?>
|
148 |
+
|
149 |
<!-- Dashboard -->
|
150 |
|
151 |
<div id="dashboard-options"<?php echo $dashboard_div ?>>
|
196 |
<?php
|
197 |
if ( defined( 'NFW_WPWAF' ) ) {
|
198 |
?>
|
199 |
+
<?php printf( __('NinjaFirewall is running in %s mode.', 'ninjafirewall'), '<a href="https://blog.nintechnet.com/full_waf-vs-wordpress_waf/">'. __('WordPress WAF', 'ninjafirewall') .'</a>'); ?>
|
200 |
<br />
|
201 |
<?php printf( __('For better protection, <a %s>click here</a> to enable its Full WAF mode.', 'ninjafirewall'), 'id="nfw-thickbox" style="cursor:pointer;text-decoration:underline" title="'. __('Click to install NinjaFirewall in Full WAF mode.', 'ninjafirewall') .'"') ?>
|
202 |
<?php
|
223 |
?>
|
224 |
<tr>
|
225 |
<th scope="row" class="row-med"><?php _e('Edition', 'ninjafirewall') ?></th>
|
226 |
+
<td>WP Edition ~ <a href="?page=nfsubwplus"><?php _e('Need more security? Explore our supercharged premium version: NinjaFirewall (WP+ Edition)', 'ninjafirewall' ) ?></a></td>
|
227 |
</tr>
|
228 |
<tr>
|
229 |
<th scope="row" class="row-med"><?php _e('Version', 'ninjafirewall') ?></th>
|
lib/dashboard_about.php
CHANGED
@@ -29,7 +29,7 @@ if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
|
|
29 |
<li><?php _e('Our blog:', 'ninjafirewall') ?> <a href="https://blog.nintechnet.com/">https://blog.nintechnet.com/</a></li>
|
30 |
<li><?php _e('Stay informed about the latest vulnerabilities in WordPress plugins and themes:', 'ninjafirewall') ?> <a href="https://twitter.com/nintechnet">https://twitter.com/nintechnet</a></li>
|
31 |
<li><a href="https://blog.nintechnet.com/ninjafirewall-general-data-protection-regulation-compliance/"><?php _e('GDPR Compliance', 'ninjafirewall') ?></a></li>
|
32 |
-
<li><a href="https://wordpress.org/support/view/plugin-reviews/ninjafirewall?rate=5#postform"><?php _e('Rate it on WordPress.org!', 'ninjafirewall') ?></a
|
33 |
<li><a href="https://nintechnet.com/referral/"><?php _e('NinjaFirewall Referral Program', 'ninjafirewall') ?></a></li>
|
34 |
</ul>
|
35 |
</font>
|
29 |
<li><?php _e('Our blog:', 'ninjafirewall') ?> <a href="https://blog.nintechnet.com/">https://blog.nintechnet.com/</a></li>
|
30 |
<li><?php _e('Stay informed about the latest vulnerabilities in WordPress plugins and themes:', 'ninjafirewall') ?> <a href="https://twitter.com/nintechnet">https://twitter.com/nintechnet</a></li>
|
31 |
<li><a href="https://blog.nintechnet.com/ninjafirewall-general-data-protection-regulation-compliance/"><?php _e('GDPR Compliance', 'ninjafirewall') ?></a></li>
|
32 |
+
<li><a href="https://wordpress.org/support/view/plugin-reviews/ninjafirewall?rate=5#postform"><?php _e('Rate it on WordPress.org!', 'ninjafirewall') ?></a> <img style="vertical-align:middle" src="<?php echo plugins_url() ?>/ninjafirewall/images/rate.png" /></li>
|
33 |
<li><a href="https://nintechnet.com/referral/"><?php _e('NinjaFirewall Referral Program', 'ninjafirewall') ?></a></li>
|
34 |
</ul>
|
35 |
</font>
|
lib/event_notifications.php
CHANGED
@@ -107,6 +107,23 @@ if (! isset( $nfw_options['a_0'] ) ) {
|
|
107 |
|
108 |
<br />
|
109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
<?php
|
111 |
if (! isset( $nfw_options['a_51']) ) {
|
112 |
$nfw_options['a_51'] = 1;
|
@@ -114,9 +131,6 @@ if (! isset( $nfw_options['a_0'] ) ) {
|
|
114 |
if (! isset( $nfw_options['a_52']) ) {
|
115 |
$nfw_options['a_52'] = 1;
|
116 |
}
|
117 |
-
if (! isset( $nfw_options['a_53']) ) {
|
118 |
-
$nfw_options['a_53'] = 1;
|
119 |
-
}
|
120 |
?>
|
121 |
<h3><?php _e('Administrator account', 'ninjafirewall') ?></h3>
|
122 |
<table class="form-table nfw-table">
|
@@ -124,7 +138,6 @@ if (! isset( $nfw_options['a_0'] ) ) {
|
|
124 |
<th scope="row" class="row-med"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
|
125 |
<td>
|
126 |
<p><label><input type="checkbox" name="nfw_options[a_51]" value="1"<?php checked( $nfw_options['a_51'], 1) ?>> <?php _e('An administrator account is created, modified or deleted in the database (default)', 'ninjafirewall') ?></label></p>
|
127 |
-
<p><label><input type="checkbox" name="nfw_options[a_53]" value="1"<?php checked( $nfw_options['a_53'], 1) ?>> <?php _e('A user attempts to gain administrative privileges (default)', 'ninjafirewall') ?></label></p>
|
128 |
</td>
|
129 |
</tr>
|
130 |
</table>
|
@@ -324,6 +337,12 @@ function nf_sub_event_save() {
|
|
324 |
$nfw_options['a_41'] = 1;
|
325 |
}
|
326 |
|
|
|
|
|
|
|
|
|
|
|
|
|
327 |
if ( empty( $_POST['nfw_options']['a_51']) ) {
|
328 |
$nfw_options['a_51'] = 0;
|
329 |
} else {
|
@@ -345,11 +364,6 @@ function nf_sub_event_save() {
|
|
345 |
nfw_get_blogtimezone();
|
346 |
wp_schedule_event( strtotime( date('Y-m-d 00:00:05', strtotime("+1 day")) ), 'daily', 'nfdailyreport');
|
347 |
}
|
348 |
-
if ( empty( $_POST['nfw_options']['a_53']) ) {
|
349 |
-
$nfw_options['a_53'] = 0;
|
350 |
-
} else {
|
351 |
-
$nfw_options['a_53'] = 1;
|
352 |
-
}
|
353 |
|
354 |
if ( empty( $_POST['nfw_options']['a_61']) ) {
|
355 |
$nfw_options['a_61'] = 0;
|
@@ -458,6 +472,8 @@ function nf_daily_report_log() {
|
|
458 |
|
459 |
function nf_daily_report_email($recipient, $logstats) {
|
460 |
|
|
|
|
|
461 |
$subject = __('[NinjaFirewall] Daily Activity Report', 'ninjafirewall');
|
462 |
if ( is_multisite() ) {
|
463 |
$url = network_home_url('/');
|
@@ -469,7 +485,7 @@ function nf_daily_report_email($recipient, $logstats) {
|
|
469 |
}
|
470 |
|
471 |
$message = "\n". sprintf( __('Daily activity report for: %s', 'ninjafirewall'), $url) . "\n";
|
472 |
-
$message .= __('Date Range Processed: Yesterday', 'ninjafirewall') .", ". ucfirst(
|
473 |
|
474 |
$message.= __('Blocked threats:', 'ninjafirewall') .' '.
|
475 |
($logstats[1] + $logstats[2] + $logstats[3]) .
|
107 |
|
108 |
<br />
|
109 |
|
110 |
+
<?php
|
111 |
+
if (! isset( $nfw_options['secupdates'] ) ) {
|
112 |
+
$nfw_options['secupdates'] = 1;
|
113 |
+
}
|
114 |
+
?>
|
115 |
+
<h3><?php _e('Security updates', 'ninjafirewall') ?></h3>
|
116 |
+
<table class="form-table nfw-table">
|
117 |
+
<tr>
|
118 |
+
<th scope="row" class="row-med"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
|
119 |
+
<td>
|
120 |
+
<p><label><input type="checkbox" name="nfw_options[secupdates]" value="1"<?php checked( $nfw_options['secupdates'], 1) ?>> <?php _e('An important security update is available for a plugin, theme or WordPress (default)', 'ninjafirewall') ?></label></p>
|
121 |
+
</td>
|
122 |
+
</tr>
|
123 |
+
</table>
|
124 |
+
|
125 |
+
<br />
|
126 |
+
|
127 |
<?php
|
128 |
if (! isset( $nfw_options['a_51']) ) {
|
129 |
$nfw_options['a_51'] = 1;
|
131 |
if (! isset( $nfw_options['a_52']) ) {
|
132 |
$nfw_options['a_52'] = 1;
|
133 |
}
|
|
|
|
|
|
|
134 |
?>
|
135 |
<h3><?php _e('Administrator account', 'ninjafirewall') ?></h3>
|
136 |
<table class="form-table nfw-table">
|
138 |
<th scope="row" class="row-med"><?php _e('Send me an alert whenever', 'ninjafirewall') ?></th>
|
139 |
<td>
|
140 |
<p><label><input type="checkbox" name="nfw_options[a_51]" value="1"<?php checked( $nfw_options['a_51'], 1) ?>> <?php _e('An administrator account is created, modified or deleted in the database (default)', 'ninjafirewall') ?></label></p>
|
|
|
141 |
</td>
|
142 |
</tr>
|
143 |
</table>
|
337 |
$nfw_options['a_41'] = 1;
|
338 |
}
|
339 |
|
340 |
+
if ( empty( $_POST['nfw_options']['secupdates']) ) {
|
341 |
+
$nfw_options['secupdates'] = 0;
|
342 |
+
} else {
|
343 |
+
$nfw_options['secupdates'] = 1;
|
344 |
+
}
|
345 |
+
|
346 |
if ( empty( $_POST['nfw_options']['a_51']) ) {
|
347 |
$nfw_options['a_51'] = 0;
|
348 |
} else {
|
364 |
nfw_get_blogtimezone();
|
365 |
wp_schedule_event( strtotime( date('Y-m-d 00:00:05', strtotime("+1 day")) ), 'daily', 'nfdailyreport');
|
366 |
}
|
|
|
|
|
|
|
|
|
|
|
367 |
|
368 |
if ( empty( $_POST['nfw_options']['a_61']) ) {
|
369 |
$nfw_options['a_61'] = 0;
|
472 |
|
473 |
function nf_daily_report_email($recipient, $logstats) {
|
474 |
|
475 |
+
nfw_get_blogtimezone();
|
476 |
+
|
477 |
$subject = __('[NinjaFirewall] Daily Activity Report', 'ninjafirewall');
|
478 |
if ( is_multisite() ) {
|
479 |
$url = network_home_url('/');
|
485 |
}
|
486 |
|
487 |
$message = "\n". sprintf( __('Daily activity report for: %s', 'ninjafirewall'), $url) . "\n";
|
488 |
+
$message .= __('Date Range Processed: Yesterday', 'ninjafirewall') .", ". ucfirst( date('F j, Y',strtotime("-1 days")) ) ."\n\n";
|
489 |
|
490 |
$message.= __('Blocked threats:', 'ninjafirewall') .' '.
|
491 |
($logstats[1] + $logstats[2] + $logstats[3]) .
|
lib/event_updates.php
ADDED
@@ -0,0 +1,258 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
+---------------------------------------------------------------------+
|
4 |
+
| NinjaFirewall (WP Edition) |
|
5 |
+
| |
|
6 |
+
| (c) NinTechNet - https://nintechnet.com/ |
|
7 |
+
+---------------------------------------------------------------------+
|
8 |
+
| This program is free software: you can redistribute it and/or |
|
9 |
+
| modify it under the terms of the GNU General Public License as |
|
10 |
+
| published by the Free Software Foundation, either version 3 of |
|
11 |
+
| the License, or (at your option) any later version. |
|
12 |
+
| |
|
13 |
+
| This program is distributed in the hope that it will be useful, |
|
14 |
+
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
15 |
+
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
16 |
+
| GNU General Public License for more details. |
|
17 |
+
+---------------------------------------------------------------------+ i18n+ / sa / 2
|
18 |
+
*/
|
19 |
+
|
20 |
+
if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
|
21 |
+
|
22 |
+
// ---------------------------------------------------------------------
|
23 |
+
// This function is called by NinjaFirewall's garbage collector
|
24 |
+
// which runs hourly.
|
25 |
+
|
26 |
+
function nfw_check_security_updates() {
|
27 |
+
|
28 |
+
$nfw_checked = nfw_get_option( 'nfw_checked' );
|
29 |
+
if ( empty( $nfw_checked ) ) { $nfw_checked = array(); }
|
30 |
+
|
31 |
+
$nfw_options = nfw_get_option('nfw_options');
|
32 |
+
if ( empty( $nfw_options['secupdates'] ) ) { return; }
|
33 |
+
|
34 |
+
$found = array();
|
35 |
+
|
36 |
+
// If your server can't remotely connect to a SSL port, add this
|
37 |
+
// to your wp-config.php script: `define('NFW_DONT_USE_SSL', 1);`
|
38 |
+
if ( defined( 'NFW_DONT_USE_SSL' ) ) {
|
39 |
+
$proto = "http";
|
40 |
+
} else {
|
41 |
+
$proto = "https";
|
42 |
+
}
|
43 |
+
$url = "$proto://updates.nintechnet.com/secupdates";
|
44 |
+
|
45 |
+
// Fetch latest data:
|
46 |
+
$list = array();
|
47 |
+
$list = nfw_fetch_security_updates( $url );
|
48 |
+
|
49 |
+
if (! isset( $list['wordpress'] ) || ! isset( $list['themes'] ) || ! isset( $list['plugins'] ) ) {
|
50 |
+
nfw_log_error("nfw_check_security_updates: json-encoded array is corrupted");
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
|
54 |
+
// Check WordPress updates
|
55 |
+
global $wp_version;
|
56 |
+
if ( isset( $list['wordpress']['version'] ) && version_compare( $wp_version, $list['wordpress']['version'], '<' ) ) {
|
57 |
+
// Versions are different, check if the user was already warned about that
|
58 |
+
if (! isset( $nfw_checked['wordpress']['version'] ) ||
|
59 |
+
version_compare( $nfw_checked['wordpress']['version'], $list['wordpress']['version'], '<' ) ) {
|
60 |
+
// Mark as checked
|
61 |
+
$nfw_checked['wordpress']['version'] = $list['wordpress']['version'];
|
62 |
+
|
63 |
+
$found['wordpress']['cur_version'] = $wp_version;
|
64 |
+
$found['wordpress']['new_version'] = $list['wordpress']['version'];
|
65 |
+
$found['wordpress']['level'] = $list['wordpress']['level'];
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
// Check themes updates
|
70 |
+
if ( ! function_exists( 'wp_get_themes' ) ) {
|
71 |
+
require_once ABSPATH . 'wp-includes/theme.php';
|
72 |
+
}
|
73 |
+
$themes = wp_get_themes();
|
74 |
+
|
75 |
+
foreach( $themes as $k => $v ) {
|
76 |
+
// No name or no version (unlike plugins, we're dealing with objects here)
|
77 |
+
if ( $v->Name == '' || $v->Version == '' ) {
|
78 |
+
continue;
|
79 |
+
}
|
80 |
+
$hash = hash( 'sha256', $k );
|
81 |
+
|
82 |
+
if ( isset( $list['themes'][$hash] ) && version_compare( $v->Version, $list['themes'][$hash]['version'], '<' ) ) {
|
83 |
+
|
84 |
+
// Make sure we didn't inform the user yet
|
85 |
+
if (! isset( $nfw_checked['themes'][$k] ) ||
|
86 |
+
version_compare( $nfw_checked['themes'][$k]['version'], $list['themes'][$hash]['version'], '<' ) ) {
|
87 |
+
|
88 |
+
// Mark as checked:
|
89 |
+
$nfw_checked['themes'][$k]['version'] = $list['themes'][$hash]['version'];
|
90 |
+
|
91 |
+
$found['themes'][$k]['name'] = $v->Name;
|
92 |
+
$found['themes'][$k]['cur_version'] = $v->Version;
|
93 |
+
$found['themes'][$k]['new_version'] = $list['themes'][$hash]['version'];
|
94 |
+
$found['themes'][$k]['level'] = $list['themes'][$hash]['level'];
|
95 |
+
}
|
96 |
+
}
|
97 |
+
}
|
98 |
+
|
99 |
+
// Check plugins updates
|
100 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
101 |
+
require_once ABSPATH .'wp-admin/includes/plugin.php';
|
102 |
+
}
|
103 |
+
$plugins = get_plugins();
|
104 |
+
|
105 |
+
foreach( $plugins as $k => $v ) {
|
106 |
+
// No name or no version (unlike themes, we're dealing with arrays here)
|
107 |
+
if ( empty( $v['Name'] ) || empty( $v['Version'] ) ) {
|
108 |
+
continue;
|
109 |
+
}
|
110 |
+
$hash = hash( 'sha256', $k );
|
111 |
+
|
112 |
+
if ( isset( $list['plugins'][$hash] ) && version_compare( $v['Version'], $list['plugins'][$hash]['version'], '<' ) ) {
|
113 |
+
// Make sure we didn't inform the user yet
|
114 |
+
if (! isset( $nfw_checked['plugins'][$k] ) ||
|
115 |
+
version_compare( $nfw_checked['plugins'][$k]['version'], $list['plugins'][$hash]['version'], '<' ) ) {
|
116 |
+
|
117 |
+
// Mark as checked
|
118 |
+
$nfw_checked['plugins'][$k]['version'] = $list['plugins'][$hash]['version'];
|
119 |
+
|
120 |
+
$found['plugins'][$k]['name'] = $v['Name'];
|
121 |
+
$found['plugins'][$k]['cur_version'] = $v['Version'];
|
122 |
+
$found['plugins'][$k]['new_version'] = $list['plugins'][$hash]['version'];
|
123 |
+
$found['plugins'][$k]['level'] = $list['plugins'][$hash]['level'];
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
// Nothing to do
|
129 |
+
if ( empty( $found ) ) {
|
130 |
+
return;
|
131 |
+
}
|
132 |
+
|
133 |
+
// Warn the user
|
134 |
+
nfw_alert_security_updates( $found );
|
135 |
+
|
136 |
+
// Update checked list
|
137 |
+
nfw_update_option( 'nfw_checked', $nfw_checked, false );
|
138 |
+
|
139 |
+
return;
|
140 |
+
}
|
141 |
+
|
142 |
+
// ---------------------------------------------------------------------
|
143 |
+
// Send an email alert to the admin
|
144 |
+
|
145 |
+
function nfw_alert_security_updates( $found = array() ) {
|
146 |
+
|
147 |
+
nfw_get_blogtimezone();
|
148 |
+
|
149 |
+
$nfw_options = nfw_get_option('nfw_options');
|
150 |
+
|
151 |
+
if ( is_multisite() && $nfw_options['alert_sa_only'] == 2 ) {
|
152 |
+
$recipient = get_option('admin_email');
|
153 |
+
} else {
|
154 |
+
$recipient = $nfw_options['alert_email'];
|
155 |
+
}
|
156 |
+
|
157 |
+
$subject = __('[NinjaFirewall] Warning: Security update available', 'ninjafirewall');
|
158 |
+
|
159 |
+
$message = __('NinjaFirewall has detected that there are security updates available for your website:', 'ninjafirewall') . "\n\n".
|
160 |
+
__('Date:', 'ninjafirewall') .' '. ucfirst( date_i18n('F j, Y @ H:i:s') ) . ' (UTC '. date('O') . ")\n";
|
161 |
+
|
162 |
+
if ( is_multisite() ) {
|
163 |
+
$message .= sprintf( __('Blog: %s', 'ninjafirewall'), network_home_url('/') ) ."\n\n";
|
164 |
+
} else {
|
165 |
+
$message .= sprintf( __('Blog: %s', 'ninjafirewall'), home_url('/') ) ."\n\n";
|
166 |
+
}
|
167 |
+
|
168 |
+
// WordPress
|
169 |
+
if (! empty( $found['wordpress'] ) ) {
|
170 |
+
$message .= "WordPress:\n" .
|
171 |
+
sprintf( __('Your version: %s', 'ninjafirewall'), $found['wordpress']['cur_version'] ) ."\n".
|
172 |
+
sprintf( __('New version: %s', 'ninjafirewall'), $found['wordpress']['new_version'] ) ."\n";
|
173 |
+
if ( $found['wordpress']['level'] == 2 ) {
|
174 |
+
$message .= __('Severity: This is an important security update', 'ninjafirewall') ."\n";
|
175 |
+
} elseif ( $found['wordpress']['level'] == 3 ) {
|
176 |
+
$message .= __('Severity: **This is a critical security update**', 'ninjafirewall') ."\n";
|
177 |
+
}
|
178 |
+
$message .= "\n";
|
179 |
+
}
|
180 |
+
|
181 |
+
// Plugins
|
182 |
+
if (! empty( $found['plugins'] ) ) {
|
183 |
+
foreach( $found['plugins'] as $k => $v ) {
|
184 |
+
$message .= sprintf( __('Plugin: %s', 'ninjafirewall'), $found['plugins'][$k]['name'] ) ."\n".
|
185 |
+
sprintf( __('Your version: %s', 'ninjafirewall'), $found['plugins'][$k]['cur_version'] ) ."\n".
|
186 |
+
sprintf( __('New version: %s', 'ninjafirewall'), $found['plugins'][$k]['new_version'] ) ."\n";
|
187 |
+
|
188 |
+
if ( $found['plugins'][$k]['level'] == 2 ) {
|
189 |
+
$message .= __('Severity: This is an important security update', 'ninjafirewall') ."\n";
|
190 |
+
} elseif ( $found['plugins'][$k]['level'] == 3 ) {
|
191 |
+
$message .= __('Severity: **This is a critical security update**', 'ninjafirewall') ."\n";
|
192 |
+
}
|
193 |
+
$message .= "\n";
|
194 |
+
}
|
195 |
+
}
|
196 |
+
|
197 |
+
// Themes
|
198 |
+
if (! empty( $found['themes'] ) ) {
|
199 |
+
|
200 |
+
foreach( $found['themes'] as $k => $v ) {
|
201 |
+
$message .= sprintf( __('Theme: %s', 'ninjafirewall'), $found['themes'][$k]['name'] ) ."\n".
|
202 |
+
sprintf( __('Your version: %s', 'ninjafirewall'), $found['themes'][$k]['cur_version'] ) ."\n".
|
203 |
+
sprintf( __('New version: %s', 'ninjafirewall'), $found['themes'][$k]['new_version'] ) ."\n";
|
204 |
+
|
205 |
+
if ( $found['themes'][$k]['level'] == 2 ) {
|
206 |
+
$message .= __('Severity: This is an important security update', 'ninjafirewall') ."\n";
|
207 |
+
} elseif ( $found['themes'][$k]['level'] == 3 ) {
|
208 |
+
$message .= __('Severity: **This is a critical security update**', 'ninjafirewall') ."\n";
|
209 |
+
}
|
210 |
+
$message .= "\n";
|
211 |
+
}
|
212 |
+
}
|
213 |
+
|
214 |
+
$message .= __("Don't leave your blog at risk, make sure to update as soon as possible.", 'ninjafirewall') .
|
215 |
+
"\n\n";
|
216 |
+
$message.= __('This notification can be turned off from NinjaFirewall "Event Notifications" page.', 'ninjafirewall') . "\n\n";
|
217 |
+
$message .= 'NinjaFirewall (WP Edition) - https://nintechnet.com/' . "\n" .
|
218 |
+
__('Support forum:', 'ninjafirewall') . ' http://wordpress.org/support/plugin/ninjafirewall' . "\n\n";
|
219 |
+
|
220 |
+
$message .= sprintf(
|
221 |
+
__('Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): %s', 'ninjafirewall'),
|
222 |
+
'https://nintechnet.com/ninjafirewall/wp-edition/?comparison' );
|
223 |
+
|
224 |
+
wp_mail( $recipient, $subject, $message );
|
225 |
+
|
226 |
+
}
|
227 |
+
|
228 |
+
// ---------------------------------------------------------------------
|
229 |
+
// Download list from remote server
|
230 |
+
|
231 |
+
function nfw_fetch_security_updates( $url ) {
|
232 |
+
|
233 |
+
global $wp_version;
|
234 |
+
$res = wp_remote_get(
|
235 |
+
$url,
|
236 |
+
array(
|
237 |
+
'timeout' => 20,
|
238 |
+
'httpversion' => '1.1' ,
|
239 |
+
'user-agent' => 'Mozilla/5.0 (compatible; NinjaFirewall/'.
|
240 |
+
NFW_ENGINE_VERSION .'; WordPress/'. $wp_version . ')',
|
241 |
+
'sslverify' => true
|
242 |
+
)
|
243 |
+
);
|
244 |
+
if ( is_wp_error( $res ) ) {
|
245 |
+
nfw_log_error( sprintf( "nfw_fetch_security_updates: connection error: %s"), $result->get_error_message() );
|
246 |
+
return false;
|
247 |
+
}
|
248 |
+
|
249 |
+
if ( $res['response']['code'] != 200 ) {
|
250 |
+
nfw_log_error( sprintf( "nfw_fetch_security_updates: HTTP response error: %s"), $res['response']['code'] );
|
251 |
+
return false;
|
252 |
+
}
|
253 |
+
|
254 |
+
return json_decode( $res['body'], true );
|
255 |
+
}
|
256 |
+
|
257 |
+
// ---------------------------------------------------------------------
|
258 |
+
// EOF
|
lib/events.php
ADDED
@@ -0,0 +1,247 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
+---------------------------------------------------------------------+
|
4 |
+
| NinjaFirewall (WP Edition) |
|
5 |
+
| |
|
6 |
+
| (c) NinTechNet - https://nintechnet.com/ |
|
7 |
+
+---------------------------------------------------------------------+
|
8 |
+
| This program is free software: you can redistribute it and/or |
|
9 |
+
| modify it under the terms of the GNU General Public License as |
|
10 |
+
| published by the Free Software Foundation, either version 3 of |
|
11 |
+
| the License, or (at your option) any later version. |
|
12 |
+
| |
|
13 |
+
| This program is distributed in the hope that it will be useful, |
|
14 |
+
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
15 |
+
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
16 |
+
| GNU General Public License for more details. |
|
17 |
+
+---------------------------------------------------------------------+ i18n+ / sa
|
18 |
+
*/
|
19 |
+
|
20 |
+
if (! defined( 'NFW_ENGINE_VERSION' ) ) { die( 'Forbidden' ); }
|
21 |
+
|
22 |
+
function nfw_sys_events() {
|
23 |
+
|
24 |
+
$nfw_options = nfw_get_option( 'nfw_options' );
|
25 |
+
|
26 |
+
$script = $_SERVER['SCRIPT_NAME'];
|
27 |
+
$label_name = __('Name:', 'ninjafirewall');
|
28 |
+
$label_plugin = __('Plugin', 'ninjafirewall');
|
29 |
+
$label_theme = __('Theme', 'ninjafirewall');
|
30 |
+
$label_version = __('Version:', 'ninjafirewall');
|
31 |
+
$alert_action = 0;
|
32 |
+
|
33 |
+
// themes.php
|
34 |
+
if ( strpos( $script, '/themes.php' ) !== FALSE ) {
|
35 |
+
|
36 |
+
if ( current_user_can( 'switch_themes' ) && isset( $_GET['action'] ) ) {
|
37 |
+
|
38 |
+
if ( $_GET['action'] == 'activate' && ! empty( $nfw_options['a_23'] ) ) {
|
39 |
+
$theme = wp_get_theme( $_GET['stylesheet'] );
|
40 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('activated', 'ninjafirewall') );
|
41 |
+
$alert_item = sprintf( '%s %s', $label_name, $theme );
|
42 |
+
|
43 |
+
} elseif ( $_GET['action'] == 'delete' && current_user_can( 'delete_themes' ) && ! empty( $nfw_options['a_24'] ) ) {
|
44 |
+
$theme = wp_get_theme( $_GET['stylesheet'] );
|
45 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('deleted', 'ninjafirewall') );
|
46 |
+
$alert_item = sprintf( '%s %s', $label_name, $theme );
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
// plugins.php
|
51 |
+
} elseif ( current_user_can( 'activate_plugins' ) && strpos( $script, '/plugins.php' ) !== FALSE ) {
|
52 |
+
|
53 |
+
if ( isset( $_REQUEST['action2'] ) ) {
|
54 |
+
if (! isset( $_REQUEST['action'] ) || $_REQUEST['action'] == '-1' ) {
|
55 |
+
$_REQUEST['action'] = $_REQUEST['action2'];
|
56 |
+
}
|
57 |
+
$_REQUEST['action2'] = '-1';
|
58 |
+
}
|
59 |
+
if (! isset( $_REQUEST['action'] ) ) { return; }
|
60 |
+
|
61 |
+
if ( isset( $_REQUEST['plugin'] ) ) {
|
62 |
+
$plugin = $_REQUEST['plugin'];
|
63 |
+
} else {
|
64 |
+
$plugin = '';
|
65 |
+
}
|
66 |
+
if ( isset( $_POST['checked'] ) ) {
|
67 |
+
$plugin_list = implode( ", ", $_POST['checked'] );
|
68 |
+
} else {
|
69 |
+
$plugin_list = '';
|
70 |
+
}
|
71 |
+
|
72 |
+
if ( $_REQUEST['action'] == 'activate' && ! empty( $nfw_options['a_13'] ) ) {
|
73 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('activated', 'ninjafirewall') );
|
74 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin );
|
75 |
+
|
76 |
+
} elseif ( $_REQUEST['action'] == 'activate-selected' && ! empty( $nfw_options['a_13'] ) ) {
|
77 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('activated', 'ninjafirewall') );
|
78 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin_list );
|
79 |
+
|
80 |
+
} elseif ( $_REQUEST['action'] == 'update-selected' && ! empty( $nfw_options['a_14'] ) ) {
|
81 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('updated', 'ninjafirewall') );
|
82 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin_list );
|
83 |
+
|
84 |
+
} elseif ( $_REQUEST['action'] == 'deactivate' && current_user_can( 'deactivate_plugin' ) && ! empty( $nfw_options['a_15'] ) ) {
|
85 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('deactivated', 'ninjafirewall') );
|
86 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin );
|
87 |
+
|
88 |
+
} elseif ( $_REQUEST['action'] == 'deactivate-selected' && current_user_can( 'deactivate_plugin' ) && ! empty( $nfw_options['a_15'] ) ) {
|
89 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('deactivated', 'ninjafirewall') );
|
90 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin_list );
|
91 |
+
|
92 |
+
} elseif ( $_REQUEST['action'] == 'delete-selected' && current_user_can( 'delete_plugins' ) && ! empty( $nfw_options['a_16'] ) ) {
|
93 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('deleted', 'ninjafirewall') );
|
94 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin_list );
|
95 |
+
}
|
96 |
+
|
97 |
+
// update-core.php
|
98 |
+
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/update-core.php' ) !== FALSE ) {
|
99 |
+
|
100 |
+
if (! isset( $_GET['action'] ) ) { return; }
|
101 |
+
|
102 |
+
if ( $_GET['action'] == 'do-plugin-upgrade' && current_user_can( 'update_plugins' ) && ! empty( $nfw_options['a_14'] ) ) {
|
103 |
+
$plugin = implode( ", ", @$_POST['checked'] );
|
104 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('updated', 'ninjafirewall') );
|
105 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin );
|
106 |
+
|
107 |
+
} elseif ( $_GET['action'] == 'do-theme-upgrade' && current_user_can( 'update_themes' ) && ! empty( $nfw_options['a_25'] ) ) {
|
108 |
+
$theme = implode( ", ", @$_POST['checked'] );
|
109 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('updated', 'ninjafirewall') );
|
110 |
+
$alert_item = sprintf( '%s %s', $label_name, $theme );
|
111 |
+
|
112 |
+
} elseif ( $_GET['action'] == 'do-core-upgrade' && current_user_can( 'update_core' ) && ! empty( $nfw_options['a_31'] ) ) {
|
113 |
+
$alert_action = sprintf( '%s %s', 'WordPress', __('updated', 'ninjafirewall') );
|
114 |
+
$alert_item = sprintf( '%s %s', $label_version, @$_POST['version'] );
|
115 |
+
}
|
116 |
+
|
117 |
+
// update.php
|
118 |
+
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/update.php' ) !== FALSE ) {
|
119 |
+
|
120 |
+
if (! isset( $_GET['action'] ) ) { return; }
|
121 |
+
|
122 |
+
if ( $_GET['action'] == 'update-selected' && current_user_can( 'update_plugins' ) && ! empty( $nfw_options['a_14'] ) ) {
|
123 |
+
if ( isset( $_GET['plugins'] ) ) {
|
124 |
+
$plugin = $_GET['plugins'];
|
125 |
+
} elseif ( isset( $_POST['checked'] ) ) {
|
126 |
+
$plugin = implode( ", ", $_POST['checked'] );
|
127 |
+
}
|
128 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('updated', 'ninjafirewall') );
|
129 |
+
$alert_item = sprintf( '%s %s', $label_name, $plugin );
|
130 |
+
|
131 |
+
} elseif ( $_GET['action'] == 'upgrade-plugin' && current_user_can( 'update_plugins' ) && ! empty( $nfw_options['a_14'] ) ) {
|
132 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('updated', 'ninjafirewall') );
|
133 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_REQUEST['plugin'] );
|
134 |
+
|
135 |
+
} elseif ( $_GET['action'] == 'activate-plugin' && current_user_can( 'update_plugins' ) && ! empty( $nfw_options['a_13'] ) ) {
|
136 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('activated', 'ninjafirewall') );
|
137 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_REQUEST['plugin'] );
|
138 |
+
|
139 |
+
} elseif ( $_GET['action'] == 'install-plugin' && current_user_can( 'install_plugins' ) && ! empty( $nfw_options['a_12'] ) ) {
|
140 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('installed', 'ninjafirewall') );
|
141 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_REQUEST['plugin'] );
|
142 |
+
|
143 |
+
} elseif ( $_GET['action'] == 'upload-plugin' && current_user_can( 'upload_plugins' ) && ! empty( $nfw_options['a_11'] ) ) {
|
144 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('uploaded', 'ninjafirewall') );
|
145 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_FILES['pluginzip']['name'] );
|
146 |
+
|
147 |
+
} elseif ( $_GET['action'] == 'upgrade-theme' && current_user_can( 'update_themes' ) && ! empty( $nfw_options['a_25'] ) ) {
|
148 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('updated', 'ninjafirewall') );
|
149 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_REQUEST['theme'] );
|
150 |
+
|
151 |
+
} elseif ( $_GET['action'] == 'update-selected-themes' && current_user_can( 'update_themes' ) && ! empty( $nfw_options['a_25'] ) ) {
|
152 |
+
if ( isset( $_GET['themes'] ) ) {
|
153 |
+
$theme = implode( ", ", $_GET['themes'] );
|
154 |
+
} elseif ( isset( $_POST['checked'] ) ) {
|
155 |
+
$theme = implode( ", ", $_POST['checked'] );
|
156 |
+
}
|
157 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('updated', 'ninjafirewall') );
|
158 |
+
$alert_item = sprintf( '%s %s', $label_name, $theme );
|
159 |
+
|
160 |
+
} elseif ( $_GET['action'] == 'install-theme' && current_user_can( 'install_themes' ) && ! empty( $nfw_options['a_22'] ) ) {
|
161 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('installed', 'ninjafirewall') );
|
162 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_REQUEST['theme'] );
|
163 |
+
|
164 |
+
} elseif ( $_GET['action'] == 'upload-theme' && current_user_can( 'upload_themes' ) && ! empty( $nfw_options['a_21'] ) ) {
|
165 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('uploaded', 'ninjafirewall') );
|
166 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_FILES['themezip']['name'] );
|
167 |
+
}
|
168 |
+
|
169 |
+
// AJAX actions
|
170 |
+
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/admin-ajax.php' ) !== FALSE ) {
|
171 |
+
|
172 |
+
if (! isset( $_REQUEST['action'] ) ) { return; }
|
173 |
+
|
174 |
+
if ( $_REQUEST['action'] == 'install-theme' && current_user_can( 'install_themes' ) && ! empty( $nfw_options['a_22'] ) ) {
|
175 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('installed', 'ninjafirewall') );
|
176 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_POST['slug'] );
|
177 |
+
|
178 |
+
} elseif ( $_REQUEST['action'] == 'update-theme' && current_user_can( 'update_themes' ) && ! empty( $nfw_options['a_25'] ) ) {
|
179 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('updated', 'ninjafirewall') );
|
180 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_POST['slug'] );
|
181 |
+
|
182 |
+
} elseif ( $_REQUEST['action'] == 'delete-theme' && current_user_can( 'delete_themes' ) && ! empty( $nfw_options['a_24'] ) ) {
|
183 |
+
$alert_action = sprintf( '%s %s', $label_theme, __('deleted', 'ninjafirewall') );
|
184 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_POST['slug'] );
|
185 |
+
|
186 |
+
} elseif ( $_REQUEST['action'] == 'install-plugin' && current_user_can( 'install_plugins' ) && ! empty( $nfw_options['a_12'] ) ) {
|
187 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('installed', 'ninjafirewall') );
|
188 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_POST['slug'] );
|
189 |
+
|
190 |
+
} elseif ( $_REQUEST['action'] == 'update-plugin' && current_user_can( 'update_plugins' ) && ! empty( $nfw_options['a_14'] ) ) {
|
191 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('updated', 'ninjafirewall') );
|
192 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_POST['plugin'] );
|
193 |
+
|
194 |
+
} elseif ( $_REQUEST['action'] == 'delete-plugin' && current_user_can( 'delete_plugins' ) && ! empty( $nfw_options['a_16'] ) ) {
|
195 |
+
$alert_action = sprintf( '%s %s', $label_plugin, __('deleted', 'ninjafirewall') );
|
196 |
+
$alert_item = sprintf( '%s %s', $label_name, @$_POST['plugin'] );
|
197 |
+
}
|
198 |
+
}
|
199 |
+
|
200 |
+
if (! empty( $alert_action ) ) {
|
201 |
+
|
202 |
+
if ( is_multisite() && $nfw_options['alert_sa_only'] == 2 ) {
|
203 |
+
$recipient = get_option('admin_email');
|
204 |
+
} else {
|
205 |
+
$recipient = $nfw_options['alert_email'];
|
206 |
+
}
|
207 |
+
|
208 |
+
global $current_user;
|
209 |
+
$current_user = wp_get_current_user();
|
210 |
+
|
211 |
+
$subject = sprintf( __('[NinjaFirewall] Alert: %s', 'ninjafirewall'), $alert_action );
|
212 |
+
if ( is_multisite() ) {
|
213 |
+
$url = __('-Blog:', 'ninjafirewall') .' '. network_home_url('/') ."\n\n";
|
214 |
+
} else {
|
215 |
+
$url = __('-Blog:', 'ninjafirewall') .' '. home_url('/') ."\n\n";
|
216 |
+
}
|
217 |
+
|
218 |
+
$message = __('NinjaFirewall has detected the following activity on your account:', 'ninjafirewall') . "\n\n".
|
219 |
+
"-$alert_action\n-$alert_item\n\n" .
|
220 |
+
__('-User:', 'ninjafirewall') .' '. $current_user->user_login .' ('. $current_user->roles[0] .")\n" .
|
221 |
+
__('-IP:', 'ninjafirewall') .' '. NFW_REMOTE_ADDR . "\n" .
|
222 |
+
__('-Date:', 'ninjafirewall') .' '. ucfirst( date_i18n('F j, Y @ H:i:s O') ) ."\n" .
|
223 |
+
$url .
|
224 |
+
'NinjaFirewall (WP Edition) - https://nintechnet.com/' . "\n" .
|
225 |
+
__('Support forum:', 'ninjafirewall') . ' http://wordpress.org/support/plugin/ninjafirewall' . "\n\n";
|
226 |
+
|
227 |
+
$message .= sprintf(
|
228 |
+
__('Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): %s', 'ninjafirewall'),
|
229 |
+
'https://nintechnet.com/ninjafirewall/wp-edition/?comparison' );
|
230 |
+
|
231 |
+
wp_mail( $recipient, $subject, $message );
|
232 |
+
|
233 |
+
if (! empty($nfw_options['a_41']) ) {
|
234 |
+
nfw_log2(
|
235 |
+
$alert_action .' by '. $current_user->user_login,
|
236 |
+
$alert_item,
|
237 |
+
6,
|
238 |
+
0
|
239 |
+
);
|
240 |
+
}
|
241 |
+
}
|
242 |
+
}
|
243 |
+
|
244 |
+
add_action('admin_init', 'nfw_sys_events', 999999);
|
245 |
+
|
246 |
+
/* ------------------------------------------------------------------ */
|
247 |
+
// EOF
|
lib/firewall.php
CHANGED
@@ -124,93 +124,6 @@ if (! empty($nfw_['nfw_options']['disable_error_handler']) ) {
|
|
124 |
define('WP_DISABLE_FATAL_ERROR_HANDLER', true);
|
125 |
}
|
126 |
|
127 |
-
$nfw_['a_msg'] = '';
|
128 |
-
if ( strpos($_SERVER['SCRIPT_NAME'], '/plugins.php' ) !== FALSE ) {
|
129 |
-
if ( isset( $_REQUEST['action2'] )) {
|
130 |
-
if ( (! isset( $_REQUEST['action'] )) || ( $_REQUEST['action'] == '-1') ) {
|
131 |
-
$_REQUEST['action'] = $_REQUEST['action2'];
|
132 |
-
}
|
133 |
-
$_REQUEST['action2'] = '-1';
|
134 |
-
}
|
135 |
-
if ( isset( $_REQUEST['action'] ) ) {
|
136 |
-
if ( $_REQUEST['action'] == 'update-selected' ) {
|
137 |
-
if (! empty( $_POST['checked'] ) ) {
|
138 |
-
$nfw_['a_msg'] = '1:4:' . @implode(", ", $_POST['checked']);
|
139 |
-
}
|
140 |
-
} elseif ( $_REQUEST['action'] == 'activate' ) {
|
141 |
-
$nfw_['a_msg'] = '1:3:' . @$_REQUEST['plugin'];
|
142 |
-
} elseif ( $_REQUEST['action'] == 'activate-selected' ) {
|
143 |
-
if (! empty( $_POST['checked'] ) ) {
|
144 |
-
$nfw_['a_msg'] = '1:3:' . @implode(", ", $_POST['checked']);
|
145 |
-
}
|
146 |
-
} elseif ( $_REQUEST['action'] == 'deactivate' ) {
|
147 |
-
$nfw_['a_msg'] = '1:5:' . @$_REQUEST['plugin'];
|
148 |
-
} elseif ( ( $_REQUEST['action'] == 'deactivate-selected' ) ){
|
149 |
-
if (! empty( $_POST['checked'] ) ) {
|
150 |
-
$nfw_['a_msg'] = '1:5:' . @implode(", ", $_POST['checked']);
|
151 |
-
}
|
152 |
-
} elseif ( ( $_REQUEST['action'] == 'delete-selected' ) &&
|
153 |
-
( isset($_REQUEST['verify-delete'])) ) {
|
154 |
-
if (! empty( $_POST['checked'] ) ) {
|
155 |
-
$nfw_['a_msg'] = '1:6:' . @implode(", ", $_POST['checked']);
|
156 |
-
}
|
157 |
-
}
|
158 |
-
}
|
159 |
-
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/themes.php' ) !== FALSE ) {
|
160 |
-
if ( isset( $_GET['action'] ) ) {
|
161 |
-
if ( $_GET['action'] == 'activate' ) {
|
162 |
-
$nfw_['a_msg'] = '2:3:' . @$_GET['stylesheet'];
|
163 |
-
} elseif ( $_GET['action'] == 'delete' ) {
|
164 |
-
$nfw_['a_msg'] = '2:4:' . @$_GET['stylesheet'];
|
165 |
-
}
|
166 |
-
}
|
167 |
-
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/update.php' ) !== FALSE ) {
|
168 |
-
if ( isset( $_GET['action'] ) ) {
|
169 |
-
if ( $_REQUEST['action'] == 'update-selected' ) {
|
170 |
-
if (! empty( $_POST['checked'] ) ) {
|
171 |
-
$nfw_['a_msg'] = '1:4:' . @implode(", ", $_POST['checked']);
|
172 |
-
}
|
173 |
-
} elseif ( $_GET['action'] == 'upgrade-plugin' ) {
|
174 |
-
$nfw_['a_msg'] = '1:4:' . @$_REQUEST['plugin'];
|
175 |
-
} elseif ( $_GET['action'] == 'activate-plugin' ) {
|
176 |
-
$nfw_['a_msg'] = '1:3:' . @$_GET['plugin'];
|
177 |
-
} elseif ( $_GET['action'] == 'install-plugin' ) {
|
178 |
-
$nfw_['a_msg'] = '1:2:' . @$_REQUEST['plugin'];
|
179 |
-
} elseif ( $_GET['action'] == 'upload-plugin' ) {
|
180 |
-
$nfw_['a_msg'] = '1:1:' . @$_FILES['pluginzip']['name'];
|
181 |
-
} elseif ( $_GET['action'] == 'install-theme' ) {
|
182 |
-
$nfw_['a_msg'] = '2:2:' . @$_REQUEST['theme'];
|
183 |
-
} elseif ( $_GET['action'] == 'upload-theme' ) {
|
184 |
-
$nfw_['a_msg'] = '2:1:' . @$_FILES['themezip']['name'];
|
185 |
-
}
|
186 |
-
}
|
187 |
-
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/admin-ajax.php' ) !== FALSE ) {
|
188 |
-
if ( isset( $_REQUEST['action']) && $_REQUEST['action'] == 'update-plugin' ) {
|
189 |
-
if (! empty($_REQUEST['plugin']) ) {
|
190 |
-
$nfw_['a_msg'] = '1:4:' . @$_REQUEST['plugin'];
|
191 |
-
}
|
192 |
-
}
|
193 |
-
if ( isset( $_REQUEST['action']) && $_REQUEST['action'] == 'delete-plugin' ) {
|
194 |
-
if (! empty($_REQUEST['plugin']) ) {
|
195 |
-
$nfw_['a_msg'] = '1:6:' . @$_REQUEST['plugin'];
|
196 |
-
}
|
197 |
-
}
|
198 |
-
|
199 |
-
} elseif ( strpos($_SERVER['SCRIPT_NAME'], '/update-core.php' ) !== FALSE ) {
|
200 |
-
if ( isset( $_GET['action'] ) ) {
|
201 |
-
if ( $_GET['action'] == 'do-plugin-upgrade' ) {
|
202 |
-
if (! empty( $_POST['checked'] ) ) {
|
203 |
-
$nfw_['a_msg'] = '1:4:' . @implode(", ", $_POST['checked']);
|
204 |
-
}
|
205 |
-
} elseif ( $_GET['action'] == 'do-core-upgrade' ) {
|
206 |
-
$nfw_['a_msg'] = '3:1:' . @$_POST['version'];
|
207 |
-
}
|
208 |
-
}
|
209 |
-
}
|
210 |
-
if ( $nfw_['a_msg'] ) {
|
211 |
-
define('NFW_ALERT', $nfw_['a_msg']);
|
212 |
-
}
|
213 |
-
|
214 |
nfw_check_ip();
|
215 |
|
216 |
// We only start a session if users already have a PHP session
|
124 |
define('WP_DISABLE_FATAL_ERROR_HANDLER', true);
|
125 |
}
|
126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
nfw_check_ip();
|
128 |
|
129 |
// We only start a session if users already have a PHP session
|
lib/firewall_options.php
CHANGED
@@ -127,7 +127,7 @@ if ( isset( $_POST['nfw_options'] ) ) {
|
|
127 |
<tr>
|
128 |
<th scope="row" class="row-med"><?php _e('Blocked user message', 'ninjafirewall') ?></th>
|
129 |
<td>
|
130 |
-
<textarea id="blocked-msg" name="nfw_options[blocked_msg]" class="
|
131 |
<p class="description"><?php _e('HTML code, including CSS and JS, is allowed.', 'ninjafirewall') ?></p>
|
132 |
<input type="hidden" id="default-msg" value="<?php echo htmlspecialchars( NFW_DEFAULT_MSG ) ?>" />
|
133 |
<p><input class="button-secondary" type="button" value="<?php _e('Default message', 'ninjafirewall') ?>" onclick="nfwjs_default_msg();" /></p>
|
127 |
<tr>
|
128 |
<th scope="row" class="row-med"><?php _e('Blocked user message', 'ninjafirewall') ?></th>
|
129 |
<td>
|
130 |
+
<textarea id="blocked-msg" name="nfw_options[blocked_msg]" class="large-text code" rows="10" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php echo htmlspecialchars( $msg ) ?></textarea>
|
131 |
<p class="description"><?php _e('HTML code, including CSS and JS, is allowed.', 'ninjafirewall') ?></p>
|
132 |
<input type="hidden" id="default-msg" value="<?php echo htmlspecialchars( NFW_DEFAULT_MSG ) ?>" />
|
133 |
<p><input class="button-secondary" type="button" value="<?php _e('Default message', 'ninjafirewall') ?>" onclick="nfwjs_default_msg();" /></p>
|
lib/firewall_policies.php
CHANGED
@@ -186,6 +186,11 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
|
|
186 |
} else {
|
187 |
$disallow_creation = 1;
|
188 |
}
|
|
|
|
|
|
|
|
|
|
|
189 |
if ( empty( $nfw_options['disallow_settings']) ) {
|
190 |
$disallow_settings = 0;
|
191 |
} else {
|
@@ -331,6 +336,18 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
|
|
331 |
<td>
|
332 |
<p><label><input type="checkbox" name="nfw_options[disallow_settings]" value="1"<?php checked( $disallow_settings, 1 ) ?>> <?php echo _e('Block attempts to modify important WordPress settings', 'ninjafirewall') ?></label></p>
|
333 |
<p><label><input type="checkbox" name="nfw_options[disallow_creation]" value="1"<?php checked( $disallow_creation, 1 ) ?>> <?php _e('Block user accounts creation', 'ninjafirewall') ?></label></p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
</td>
|
335 |
</tr>
|
336 |
|
@@ -345,7 +362,7 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
|
|
345 |
<th scope="row" class="row-med"><?php _e('WordPress AJAX', 'ninjafirewall') ?></th>
|
346 |
<td>
|
347 |
<p><label><input type="checkbox" name="nfw_options[admin_ajax]" value="1"<?php checked( $admin_ajax, 1 ) ?>> <?php _e('Protect <code>admin-ajax.php</code> against suspicious bots', 'ninjafirewall') ?></label></p>
|
348 |
-
<p class="description"><?php printf( __('Your server IP (%s), localhost and private IP addresses will not be affected by this policy.', 'ninjafirewall'), htmlspecialchars(
|
349 |
</td>
|
350 |
</tr>
|
351 |
|
@@ -386,7 +403,7 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
|
|
386 |
</td>
|
387 |
</tr>
|
388 |
<tr valign="top">
|
389 |
-
<th scope="row" class="row-med"><a name="builtinconstants"></a><?php _e('Force
|
390 |
<td>
|
391 |
<?php nfw_toggle_switch( 'info', 'nfw_options[force_ssl]', $yes, $no, 'small', $force_ssl, $force_ssl_already_enabled, 'onclick="return nfwjs_ssl_warn(this,'. NFW_IS_HTTPS .');"' ) ?>
|
392 |
</td>
|
@@ -834,7 +851,7 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
|
|
834 |
<td>
|
835 |
<?php nfw_toggle_switch( 'info', 'nfw_options[csp_frontend]', $yes, $no, 'small', $nfw_options['response_headers'][6], $err, 'onclick="nfwjs_csp_onoff(\'csp1_switch\',\'csp1\');"', 'csp1_switch' ) ?>
|
836 |
<br />
|
837 |
-
<textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_frontend_data]" id="csp1" class="large-text code" rows="8"<?php readonly( $err, 1 ); readonly( $nfw_options['response_headers'][6], 0 )
|
838 |
<p class="description"><?php _e('This CSP header will apply to the website frontend only.', 'ninjafirewall') ?></p>
|
839 |
</td>
|
840 |
</tr>
|
@@ -843,7 +860,7 @@ wp_nonce_field('policies_save', 'nfwnonce', 0);
|
|
843 |
<td>
|
844 |
<?php nfw_toggle_switch( 'info', 'nfw_options[csp_backend]', $yes, $no, 'small', $nfw_options['response_headers'][7], $err, 'onclick="nfwjs_csp_onoff(\'csp2_switch\',\'csp2\');"', 'csp2_switch' ) ?>
|
845 |
<br />
|
846 |
-
<textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_backend_data]" id="csp2" class="large-text code" rows="8"<?php readonly( $err, 1 ); readonly( $nfw_options['response_headers'][7], 0 )
|
847 |
<p class="description"><?php _e('This CSP header will apply to the WordPress admin dashboard only.', 'ninjafirewall') ?></p>
|
848 |
<?php echo $err_msg ?>
|
849 |
</td>
|
@@ -1315,6 +1332,11 @@ function nf_sub_policies_save() {
|
|
1315 |
} else {
|
1316 |
$nfw_options['disallow_settings'] = 1;
|
1317 |
}
|
|
|
|
|
|
|
|
|
|
|
1318 |
|
1319 |
if (! isset( $_POST['nfw_options']['enum_archives']) ) {
|
1320 |
$nfw_options['enum_archives'] = 0;
|
@@ -1527,6 +1549,7 @@ function nf_sub_policies_default() {
|
|
1527 |
'/'. basename(WP_CONTENT_DIR) .'/(?:uploads|blogs\.dir)/';
|
1528 |
$nfw_options['disallow_creation']= 0;
|
1529 |
$nfw_options['disallow_settings']= 1;
|
|
|
1530 |
$nfw_options['enum_archives'] = 0;
|
1531 |
$nfw_options['enum_login'] = 0;
|
1532 |
$nfw_options['admin_ajax'] = 0;
|
186 |
} else {
|
187 |
$disallow_creation = 1;
|
188 |
}
|
189 |
+
if ( empty( $nfw_options['disallow_privesc']) ) {
|
190 |
+
$disallow_privesc = 0;
|
191 |
+
} else {
|
192 |
+
$disallow_privesc = 1;
|
193 |
+
}
|
194 |
if ( empty( $nfw_options['disallow_settings']) ) {
|
195 |
$disallow_settings = 0;
|
196 |
} else {
|
336 |
<td>
|
337 |
<p><label><input type="checkbox" name="nfw_options[disallow_settings]" value="1"<?php checked( $disallow_settings, 1 ) ?>> <?php echo _e('Block attempts to modify important WordPress settings', 'ninjafirewall') ?></label></p>
|
338 |
<p><label><input type="checkbox" name="nfw_options[disallow_creation]" value="1"<?php checked( $disallow_creation, 1 ) ?>> <?php _e('Block user accounts creation', 'ninjafirewall') ?></label></p>
|
339 |
+
<?php
|
340 |
+
if ( defined('NFW_DISABLE_PRVESC2') ) {
|
341 |
+
$msg = '<p class="description">'. sprintf( __('To enable this option, please remove the %s constant from your wp-config.php or .htninja script.', 'ninjafirewall'), '<code>NFW_DISABLE_PRVESC2</code>' ) .'</p>';
|
342 |
+
$disabled = 1;
|
343 |
+
$disallow_privesc = 0;
|
344 |
+
} else {
|
345 |
+
$msg ='';
|
346 |
+
$disabled = 0;
|
347 |
+
}
|
348 |
+
?>
|
349 |
+
<p><label><input <?php disabled( $disabled, 1 ) ?>type="checkbox" name="nfw_options[disallow_privesc]" value="1"<?php checked( $disallow_privesc, 1 ) ?>> <?php _e('Block attempts to gain administrative privileges', 'ninjafirewall') ?></label></p>
|
350 |
+
<?php echo $msg ?>
|
351 |
</td>
|
352 |
</tr>
|
353 |
|
362 |
<th scope="row" class="row-med"><?php _e('WordPress AJAX', 'ninjafirewall') ?></th>
|
363 |
<td>
|
364 |
<p><label><input type="checkbox" name="nfw_options[admin_ajax]" value="1"<?php checked( $admin_ajax, 1 ) ?>> <?php _e('Protect <code>admin-ajax.php</code> against suspicious bots', 'ninjafirewall') ?></label></p>
|
365 |
+
<p class="description"><?php printf( __('Your server IP (%s), localhost and private IP addresses will not be affected by this policy.', 'ninjafirewall'), htmlspecialchars( $_SERVER['SERVER_ADDR'] ) ) ?></p>
|
366 |
</td>
|
367 |
</tr>
|
368 |
|
403 |
</td>
|
404 |
</tr>
|
405 |
<tr valign="top">
|
406 |
+
<th scope="row" class="row-med"><a name="builtinconstants"></a><?php _e('Force HTTPS for admin and logins', 'ninjafirewall') ?> <code><a href="http://codex.wordpress.org/Editing_wp-config.php#Require_SSL_for_Admin_and_Logins" target="_blank">FORCE_SSL_ADMIN</a></code></th>
|
407 |
<td>
|
408 |
<?php nfw_toggle_switch( 'info', 'nfw_options[force_ssl]', $yes, $no, 'small', $force_ssl, $force_ssl_already_enabled, 'onclick="return nfwjs_ssl_warn(this,'. NFW_IS_HTTPS .');"' ) ?>
|
409 |
</td>
|
851 |
<td>
|
852 |
<?php nfw_toggle_switch( 'info', 'nfw_options[csp_frontend]', $yes, $no, 'small', $nfw_options['response_headers'][6], $err, 'onclick="nfwjs_csp_onoff(\'csp1_switch\',\'csp1\');"', 'csp1_switch' ) ?>
|
853 |
<br />
|
854 |
+
<textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_frontend_data]" id="csp1" class="large-text code" rows="8"<?php readonly( $err, 1 ); readonly( $nfw_options['response_headers'][6], 0 ) ?>><?php echo htmlspecialchars( $nfw_options['csp_frontend_data'] ) ?></textarea>
|
855 |
<p class="description"><?php _e('This CSP header will apply to the website frontend only.', 'ninjafirewall') ?></p>
|
856 |
</td>
|
857 |
</tr>
|
860 |
<td>
|
861 |
<?php nfw_toggle_switch( 'info', 'nfw_options[csp_backend]', $yes, $no, 'small', $nfw_options['response_headers'][7], $err, 'onclick="nfwjs_csp_onoff(\'csp2_switch\',\'csp2\');"', 'csp2_switch' ) ?>
|
862 |
<br />
|
863 |
+
<textarea autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="nfw_options[csp_backend_data]" id="csp2" class="large-text code" rows="8"<?php readonly( $err, 1 ); readonly( $nfw_options['response_headers'][7], 0 ) ?>><?php echo htmlspecialchars( $nfw_options['csp_backend_data'] ) ?></textarea>
|
864 |
<p class="description"><?php _e('This CSP header will apply to the WordPress admin dashboard only.', 'ninjafirewall') ?></p>
|
865 |
<?php echo $err_msg ?>
|
866 |
</td>
|
1332 |
} else {
|
1333 |
$nfw_options['disallow_settings'] = 1;
|
1334 |
}
|
1335 |
+
if (! isset( $_POST['nfw_options']['disallow_privesc']) ) {
|
1336 |
+
$nfw_options['disallow_privesc'] = 0;
|
1337 |
+
} else {
|
1338 |
+
$nfw_options['disallow_privesc'] = 1;
|
1339 |
+
}
|
1340 |
|
1341 |
if (! isset( $_POST['nfw_options']['enum_archives']) ) {
|
1342 |
$nfw_options['enum_archives'] = 0;
|
1549 |
'/'. basename(WP_CONTENT_DIR) .'/(?:uploads|blogs\.dir)/';
|
1550 |
$nfw_options['disallow_creation']= 0;
|
1551 |
$nfw_options['disallow_settings']= 1;
|
1552 |
+
$nfw_options['disallow_privesc'] = 1;
|
1553 |
$nfw_options['enum_archives'] = 0;
|
1554 |
$nfw_options['enum_login'] = 0;
|
1555 |
$nfw_options['admin_ajax'] = 0;
|
lib/help.php
CHANGED
@@ -33,8 +33,8 @@ function help_nfsubmain() {
|
|
33 |
|
34 |
get_current_screen()->add_help_tab( array(
|
35 |
'id' => 'main01',
|
36 |
-
'title' => __('Firewall Dashboard', '
|
37 |
-
'content' => '<br />' . __('This is NinjaFirewall Dashboard page; it shows information about the firewall status. We recommend you keep an eye on it because, in case of problems, all possible errors and warnings will be displayed here.', '
|
38 |
) );
|
39 |
|
40 |
get_current_screen()->add_help_tab( array(
|
@@ -53,7 +53,7 @@ function help_nfsubmain() {
|
|
53 |
'title' => __('About...', 'ninjafirewall'),
|
54 |
'content' => '<br />'.
|
55 |
|
56 |
-
__('Everything you ever wanted to know about NinjaFirewall.', 'ninjafirewall')
|
57 |
) );
|
58 |
|
59 |
}
|
@@ -87,13 +87,13 @@ get_current_screen()->add_help_tab( array(
|
|
87 |
) );
|
88 |
get_current_screen()->add_help_tab( array(
|
89 |
'id' => 'opt03',
|
90 |
-
'title' => __('
|
91 |
'content' => '<br />' .
|
92 |
__('Lets you customize the HTTP error code returned by NinjaFirewall when blocking a dangerous request and the message to display to the user.' , 'ninjafirewall') . ' ' .
|
93 |
__('You can use any HTML tags and 3 built-in variables:' , 'ninjafirewall') .
|
94 |
-
'<li><code>%%REM_ADDRESS%%</code> : '. __('the blocked user IP.' , 'ninjafirewall') . '</li>
|
95 |
<li><code>%%NUM_INCIDENT%%</code> : '. __('the unique incident number as it will appear in the firewall log "INCIDENT" column.' , 'ninjafirewall') . '</li>
|
96 |
-
<li><code>%%NINJA_LOGO%%</code> : '. __('NinjaFirewall logo.' , 'ninjafirewall') . '</li>'
|
97 |
) );
|
98 |
list ( $major_current ) = explode( '.', NFW_ENGINE_VERSION );
|
99 |
get_current_screen()->add_help_tab( array(
|
@@ -101,8 +101,8 @@ get_current_screen()->add_help_tab( array(
|
|
101 |
'title' => __('Export/import configuration', 'ninjafirewall'),
|
102 |
'content' => '<br />' .
|
103 |
sprintf( __('This options lets you export you current configuration or import it from another NinjaFirewall (WP Edition) installation. The imported file must match the major version of your current version (%s) otherwise it will be rejected. Note that importing will override all firewall rules and options.', 'ninjafirewall'), (int) $major_current .'.x' ) .
|
104 |
-
'<p><span class="dashicons dashicons-warning nfw-warning"></span> 
|
105 |
-
__('"File Check" configuration will not be exported/imported.', 'ninjafirewall') . '</
|
106 |
) );
|
107 |
|
108 |
get_current_screen()->add_help_tab( array(
|
@@ -119,11 +119,16 @@ function help_nfsubpolicies() {
|
|
119 |
|
120 |
// Firewall policies menu help :
|
121 |
|
|
|
|
|
|
|
|
|
|
|
122 |
// Show this text only if we are running in "Full WAF" mode:
|
123 |
if ( defined('NFW_WPWAF') ) {
|
124 |
$res= '';
|
125 |
} else {
|
126 |
-
$res = sprintf( __('Keep in mind, however, that the Firewall Policies apply to any PHP scripts located inside the %s directory and its sub-directories, and not only to your WordPress index page.', 'ninjafirewall'), '<code>' .
|
127 |
}
|
128 |
|
129 |
get_current_screen()->add_help_tab( array(
|
@@ -142,144 +147,165 @@ function help_nfsubpolicies() {
|
|
142 |
'title' => __('Scan and Sanitise', 'ninjafirewall'),
|
143 |
'content' => '<br />'.
|
144 |
__('You can choose to scan and reject dangerous content but also to sanitise requests and variables. Those two actions are different and can be combined together for better security.', 'ninjafirewall') .
|
145 |
-
'<li>'. __('Scan
|
146 |
-
<li>'. sprintf( __('Sanitise
|
147 |
<br />' .
|
148 |
__('This action will be performed when the filtering process is over, right before NinjaFirewall forwards the request to your PHP script.', 'ninjafirewall') . '
|
149 |
<br />
|
150 |
<br />
|
151 |
-
<span class="dashicons dashicons-warning nfw-warning"></span> 
|
152 |
) );
|
|
|
153 |
get_current_screen()->add_help_tab( array(
|
154 |
-
'id' => '
|
155 |
-
'title' => __('
|
156 |
'content' => '
|
157 |
<div style="height:400px;">
|
158 |
|
159 |
-
<!-- Basic Policies -->
|
160 |
-
<h3>' . __('Basic Policies', 'ninjafirewall'). '</h3>
|
161 |
|
162 |
-
<
|
163 |
-
|
164 |
-
<br />
|
165 |
-
<strong>' . __('Uploads', 'ninjafirewall'). '</strong>
|
166 |
-
<li>' . __('File Uploads:', 'ninjafirewall'). '<span class="description"> ' . __('whether to allow/disallow file uploads.', 'ninjafirewall'). '</span></li>
|
167 |
-
<li>' . __('Sanitise filenames:', 'ninjafirewall'). '<span class="description"> ' . __('any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore <code>_</code> will be removed from the filename and replaced with the substitution character.', 'ninjafirewall'). '</span></li>
|
168 |
-
<br />
|
169 |
-
<strong>WordPress</strong>
|
170 |
-
<li>' . __('Whether to block direct access to PHP files located in specific WordPress directories.', 'ninjafirewall'). '</li>
|
171 |
-
<li>' . __('Block attempts to modify important WordPress settings', 'ninjafirewall'). ':<span class="description"> ' . __('enabling this policy will block any attempt (e.g., exploiting a vulnerability, using a backdoor etc) to modify some important WordPress settings. This policy will also send you an alert by email with all details regarding the issue. It is enabled by default.', 'ninjafirewall') . '</span></li>
|
172 |
-
<li>' . __('Block user accounts creation', 'ninjafirewall'). ':<span class="description"> ' . __('enabling this policy will block any attempt (e.g., exploiting a vulnerability, using a backdoor etc) to create a user account. If you allow user registration, you should not enable it.', 'ninjafirewall'). '</span></li>
|
173 |
-
<li>' . __('WordPress AJAX', 'ninjafirewall'). ':<span class="description"> ' . sprintf( __('many vulnerabilities in plugins are exploited via the admin-ajax.php script. This policy will try to detect and immediately block bots and malicious scanners trying to access it. The server IP address (%s) and private IP addresses will not be blocked.', 'ninjafirewall'), NFW_REMOTE_ADDR ). '</span></li>
|
174 |
-
<li>' . __('Protect against username enumeration:', 'ninjafirewall'). '<span class="description"> ' . __('it is possible to enumerate usernames either through the WordPress author archives, the REST API or the login page. Although this is not a vulnerability but a WordPress feature, some hackers use it to retrieve usernames in order to launch more accurate brute-force attacks. If it is a failed login attempt, NinjaFirewall will sanitise the error message returned by WordPress. If it is an author archives scan, it will invalidate it and redirect the user to the blog index page. Regarding the WP REST API, it will block the request immediately.', 'ninjafirewall'). '</span></li>
|
175 |
-
<li>' . __('WordPress REST API:', 'ninjafirewall'). '<span class="description"> ' . __('it allows you to access your WordPress site\'s data through an easy-to-use HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall allows you to block any access to that API if you do not intend to use it.', 'ninjafirewall'). '</span></li>
|
176 |
-
<li>' . __('WordPress XML-RPC API:', 'ninjafirewall'). '<span class="description"> ' . __('XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API that can be accessed through the <code>xmlrpc.php</code> file. Since WordPress version 3.5, it is always activated and cannot be turned off. NinjaFirewall allows you to immediately block any access to that file, or only to block an access using the <code>system.multicall</code> method often used in brute-force amplification attacks or to block Pingbacks.', 'ninjafirewall'). '</span></li>
|
177 |
-
<li>' . __('Block <code>POST</code> requests in the themes folder <code>/wp-content/themes</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option can be useful to block hackers from installing backdoor in the PHP theme files. However, because some custom themes may include an HTML form (contact, search form etc), this option is not enabled by default.', 'ninjafirewall'). '</span></li>
|
178 |
-
<li>' . __('Force SSL for admin and logins <code>FORCE_SSL_ADMIN</code>:', 'ninjafirewall'). '<span class="description"> ' . __('enable this option when you want to secure logins and the admin area so that both passwords and cookies are never sent in the clear. Ensure that you can access your admin console from HTTPS before enabling this option, otherwise you will lock yourself out of your site!', 'ninjafirewall'). '</span></li>
|
179 |
-
<li>' . __('Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>:', 'ninjafirewall'). '<span class="description"> ' . __('disabling the plugin and theme editor provides an additional layer of security if a hacker gains access to a well-privileged user account.', 'ninjafirewall'). '</span></li>
|
180 |
-
<li>' . __('Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option will block users being able to use the plugin and theme installation/update functionality from the WordPress admin area. Setting this constant also disables the Plugin and Theme editor.', 'ninjafirewall'). '</span></li>
|
181 |
-
<li>' . __('Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this option will disable the WSOD protection introduced in WordPress 5.1.', 'ninjafirewall'). '</span></li>
|
182 |
|
183 |
-
<
|
184 |
|
185 |
-
|
186 |
-
<h3>' . __('Intermediate Policies', 'ninjafirewall'). '</h3>
|
187 |
|
188 |
-
<strong>' . __('
|
189 |
-
<li>' . __('Whether to scan and/or sanitise the <code>GET</code> variable.', 'ninjafirewall'). '</li>
|
190 |
-
<br />
|
191 |
-
<strong>' . __('HTTP POST variable', 'ninjafirewall'). '</strong>
|
192 |
-
<li>' . __('Whether to scan and/or sanitise the <code>POST</code> variable.', 'ninjafirewall'). '</li>
|
193 |
-
<li>' . __('Decode Base64-encoded <code>POST</code> variable:', 'ninjafirewall'). '<span class="description"> ' . __('NinjaFirewall will decode and scan base64 encoded values in order to detect obfuscated malicious code. This option is only available for the <code>POST</code> variable.', 'ninjafirewall'). '</span></li>
|
194 |
-
<br />
|
195 |
-
<strong>' . __('HTTP REQUEST variable', 'ninjafirewall'). '</strong>
|
196 |
-
<li>' . __('Whether to sanitise the <code>REQUEST</code> variable.', 'ninjafirewall'). '</li>
|
197 |
-
<br />
|
198 |
-
<strong>' . __('Cookies', 'ninjafirewall'). '</strong>
|
199 |
-
<li>' . __('Whether to scan and/or sanitise cookies.', 'ninjafirewall'). '</li>
|
200 |
-
<br />
|
201 |
-
<strong>' . __('HTTP_USER_AGENT server variable', 'ninjafirewall'). '</strong>
|
202 |
-
<li>' . __('Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests.', 'ninjafirewall'). '</li>
|
203 |
-
<li>' . __('Block suspicious bots/scanners:', 'ninjafirewall'). '<span class="description"> ' . __('rejects some known bots, scanners and various malicious scripts attempting to access your blog.', 'ninjafirewall'). '</span></li>
|
204 |
-
<br />
|
205 |
-
<strong>' . __('HTTP_REFERER server variable', 'ninjafirewall'). '</strong>
|
206 |
-
<li>' . __('Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests.', 'ninjafirewall'). '</li>
|
207 |
-
<li>' . __('Block POST requests that do not have an <code>HTTP_REFERER</code> header:', 'ninjafirewall'). '<span class="description"> ' . __('this option will block any <code>POST</code> request that does not have a Referrer header (<code>HTTP_REFERER</code> variable). If you need external applications to post to your scripts (e.g. Paypal IPN, WordPress WP-Cron...), you are advised to keep this option disabled otherwise they will likely be blocked. Note that <code>POST</code> requests are not required to have a Referrer header and, for that reason, this option is disabled by default.', 'ninjafirewall'). '</span></li>
|
208 |
-
<br />
|
209 |
-
<strong>IP</strong>
|
210 |
-
<li>' . __('Block localhost IP in <code>GET/POST</code> requests:', 'ninjafirewall'). '<span class="description"> ' . __('this option will block any <code>GET</code> or <code>POST</code> request containing the localhost IP (127.0.0.1). It can be useful to block SQL dumpers and various hacker\'s shell scripts.', 'ninjafirewall'). '</span></li>
|
211 |
-
<li>' . __('Block HTTP requests with an IP in the <code>HTTP_HOST</code> header:', 'ninjafirewall'). '<span class="description"> ' . sprintf( __('this option will reject any request using an IP instead of a domain name in the <code>Host</code> header of the HTTP request. Unless you need to connect to your site using its IP address, (e.g. %s), enabling this option will block a lot of hackers scanners because such applications scan IPs rather than domain names.', 'ninjafirewall'), 'http://' . htmlspecialchars($_SERVER['SERVER_ADDR']) . '/index.php'). '</span></li>
|
212 |
-
<li>' . __('Scan traffic coming from localhost and private IP address spaces:', 'ninjafirewall'). '<span class="description"> ' . __('this option will allow the firewall to scan traffic from all non-routable private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to keep it enabled if you have a private network (2 or more servers interconnected).', 'ninjafirewall'). '</span></li>
|
213 |
|
214 |
-
<br />
|
215 |
|
216 |
-
|
217 |
-
<h3>' . __('Advanced Policies', 'ninjafirewall'). '</h3>
|
218 |
|
219 |
-
<strong>' . __('
|
220 |
-
<br />
|
221 |
-
' . __('In addition to filtering incoming requests, NinjaFirewall can also hook the HTTP response in order to alter its headers. Those modifications can help to mitigate threats such as XSS, phishing and clickjacking attacks.', 'ninjafirewall'). '
|
222 |
-
<br />
|
223 |
-
<li>' . __('Set <code>X-Content-Type-Options</code> to protect against MIME type confusion attacks:', 'ninjafirewall'). '<span class="description"> ' . __('this header will send the nosniff value to instruct the browser to disable content or MIME sniffing and to use the content-type returned by the server. Some browsers try to guess (sniff) and override the content-type by looking at the content itself which, in some cases, could lead to security issues such as MIME Confusion Attacks.', 'ninjafirewall'). '</span></li>
|
224 |
-
<li>' . __('Set <code>X-Frame-Options</code> to protect against clickjacking attempts:', 'ninjafirewall'). '<span class="description"> ' . __('this header indicates a policy whether a browser must not allow to render a page in a <frame> or <iframe>. Hosts can declare this policy in the header of their HTTP responses to prevent clickjacking attacks, by ensuring that their content is not embedded into other pages or frames. NinjaFirewall accepts two different values:', 'ninjafirewall'). '
|
225 |
-
<ul>
|
226 |
-
<li><code>SAMEORIGIN</code>: ' . __('a browser receiving content with this header must not display this content in any frame from a page of different origin than the content itself.', 'ninjafirewall'). '</li>
|
227 |
-
<li><code>DENY</code>: ' . __('a browser receiving content with this header must not display this content in any frame.', 'ninjafirewall'). '</li>
|
228 |
-
</ul>
|
229 |
-
</span>
|
230 |
-
' . __('NinjaFirewall does not support the <code>ALLOW-FROM</code> value.', 'ninjafirewall'). '
|
231 |
-
<br />' .
|
232 |
-
__('Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the administrator and the login page only.', 'ninjafirewall'). '</li>
|
233 |
-
<li>' . __('Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari browsers):', 'ninjafirewall'). '<span class="description"> ' . __('this header allows browsers to identify and block XSS attacks by preventing malicious scripts from executing. It is enabled by default on all compatible browsers.', 'ninjafirewall'). '</span></li>'.
|
234 |
-
'<p><span class="dashicons dashicons-warning nfw-warning"></span> <span class="description">' . __("If a visitor disabled their browser's XSS filter, you cannot re-enable it with that option.", 'ninjafirewall'). '</span></p>'.
|
235 |
-
|
236 |
-
'<li>' . __('Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks:', 'ninjafirewall'). '<span class="description"> ' . __('adding this flag to cookies helps to mitigate the risk of CSRF (cross-site request forgery) attacks because cookies can only be sent in requests originating from the same origin as the target domain.', 'ninjafirewall'). '</span></li>'.
|
237 |
-
'<li>' . __('Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks:', 'ninjafirewall'). '<span class="description"> ' . __('adding this flag to cookies helps to mitigate the risk of cross-site scripting by preventing them from being accessed through client-side scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins or any other PHP script, add the <code>HttpOnly</code> flag if it is missing, and re-inject those cookies back into your server HTTP response headers right before they are sent to your visitors. Note that WordPress sets that flag on the logged in user cookies only.', 'ninjafirewall'). '</span></li>
|
238 |
-
<p><span class="dashicons dashicons-warning nfw-warning"></span> <span class="description">' . __('If your PHP scripts send cookies that need to be accessed from JavaScript, you should keep that option disabled.', 'ninjafirewall'). '</span></p>
|
239 |
-
<li>' . __('Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure connections to the server:', 'ninjafirewall'). '<span class="description"> ' . __('this policy enforces secure HTTPS connections to the server. Web browsers will not allow the user to access the web application over insecure HTTP protocol. It helps to defend against cookie hijacking and Man-in-the-middle attacks. Most recent browsers support HSTS headers.', 'ninjafirewall'). '</span></li>
|
240 |
-
<li>' . __('Set <code>Content-Security-Policy</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this policy helps to mitigate threats such as XSS, phishing and clickjacking attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, objects (Java, ActiveX, audio and video files), and other HTML5 features.', 'ninjafirewall'). ' ' . __('NinjaFirewall lets you configure the CSP policy separately for the frontend (blog, website) and the backend (WordPress admin dashboard).', 'ninjafirewall') . '</span></li>
|
241 |
-
<li>' . __('Set <code>Referrer-Policy</code>:', 'ninjafirewall'). '<span class="description"> ' . __('this HTTP header governs which referrer information, sent in the Referer header, should be included with requests made.', 'ninjafirewall') . '</span></li>
|
242 |
|
243 |
-
<br />
|
244 |
-
|
245 |
-
<
|
246 |
-
|
247 |
-
<
|
248 |
-
|
249 |
-
<br />
|
250 |
-
|
251 |
-
<
|
252 |
-
|
253 |
-
<
|
|
|
|
|
|
|
|
|
254 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
</div>'
|
256 |
) );
|
|
|
|
|
257 |
get_current_screen()->add_help_tab( array(
|
258 |
-
'id'
|
259 |
-
'title'
|
260 |
-
'content'
|
261 |
-
|
262 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
263 |
) );
|
264 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
}
|
266 |
/* ------------------------------------------------------------------ */ // i18n+
|
267 |
|
268 |
function help_nfsubfileguard() {
|
269 |
|
270 |
-
// File Guard :
|
271 |
-
get_current_screen()->add_help_tab( array(
|
272 |
-
'id' => 'fileguard01',
|
273 |
-
'title' => __('File Guard', 'ninjafirewall'),
|
274 |
-
'content' => '<br/>' .
|
275 |
-
__('File Guard can detect, in real-time, any access to a PHP file that was recently modified or created, and alert you about this.', 'ninjafirewall') .
|
276 |
-
'<br />' .
|
277 |
-
__('If a hacker uploaded a shell script to your site (or injected a backdoor into an already existing file) and tried to directly access that file using his browser or a script, NinjaFirewall would hook the HTTP request and immediately detect that the file was recently modified/created. It would send you a detailed alert (script name, IP, request, date and time). Alerts will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall') .
|
278 |
-
'<p>' . __('If you do not want to monitor a folder, you can exclude its full path or a part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</code> etc). NinjaFirewall will compare this value to the <code>$_SERVER["SCRIPT_FILENAME"]</code> server variable and, if it matches, will ignore it.', 'ninjafirewall') . '</p>' .
|
279 |
-
__('Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</code>).', 'ninjafirewall') .
|
280 |
-
'<p><span class="dashicons dashicons-warning nfw-warning"></span> <span class="description">' . __('File Guard real-time detection is a totally unique feature, because NinjaFirewall is the only plugin for WordPress that can hook HTTP requests sent to any PHP script, even if that script is not part of the WordPress package (third-party software, shell script, backdoor etc).', 'ninjafirewall') . '</span></p>'
|
281 |
-
) );
|
282 |
-
|
283 |
// File check menu help :
|
284 |
get_current_screen()->add_help_tab( array(
|
285 |
'id' => 'filecheck01',
|
@@ -302,9 +328,21 @@ function help_nfsubfileguard() {
|
|
302 |
'<br />'.
|
303 |
__('Reports will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall'). '</p>'.
|
304 |
|
305 |
-
'<p><span class="dashicons dashicons-warning nfw-warning"></span> 
|
306 |
) );
|
307 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
308 |
}
|
309 |
/* ------------------------------------------------------------------ */ // i18n+
|
310 |
function help_nfsubnetwork() {
|
@@ -343,7 +381,7 @@ function help_nfsublogin() {
|
|
343 |
'id' => 'login01',
|
344 |
'title' => __('Login Protection', 'ninjafirewall'),
|
345 |
'content' => '
|
346 |
-
<div style="height:
|
347 |
|
348 |
<p>' . __('By processing incoming HTTP requests before your blog and any of its plugins, NinjaFirewall is the only plugin for WordPress able to protect it against very large brute-force attacks, including distributed attacks coming from several thousands of different IPs.', 'ninjafirewall') .
|
349 |
|
@@ -372,7 +410,7 @@ function help_nfsublogin() {
|
|
372 |
'id' => 'login02',
|
373 |
'title' => __('AUTH log', 'ninjafirewall'),
|
374 |
'content' => '
|
375 |
-
<div style="height:
|
376 |
<p>' . __('NinjaFirewall can write to the server Authentication log when the brute-force protection is triggered. This can be useful to the system administrator for monitoring purposes or banning IPs at the server level.', 'ninjafirewall') . '
|
377 |
<br />' .
|
378 |
__('If you have a shared hosting account, keep this option disabled as you do not have any access to the server\'s logs.', 'ninjafirewall') .
|
@@ -388,8 +426,8 @@ function help_nfsublogin() {
|
|
388 |
</ul>'.
|
389 |
__('Sample loglines:', 'ninjafirewall') .
|
390 |
'<br />
|
391 |
-
<textarea class="
|
392 |
-
<p><span class="dashicons dashicons-warning nfw-warning"></span> 
|
393 |
</div>'
|
394 |
) );
|
395 |
|
@@ -416,7 +454,7 @@ function help_nfsublog() {
|
|
416 |
</ul>'.
|
417 |
|
418 |
'<p><strong>'. __('Auto-delete log', 'ninjafirewall') .'</strong></p>'.
|
419 |
-
__('This options lets you configure NinjaFirewall to delete its old logs automatically. By default, logs are never deleted, <b>even when uninstall NinjaFirewall</b>. Leave this value to <code>0</code> if you don\'t want to delete old logs.', 'ninjafirewall').
|
420 |
|
421 |
|
422 |
'<p><strong>'. __('Centralized Logging', 'ninjafirewall') .'</strong></p>'.
|
@@ -424,9 +462,9 @@ function help_nfsublog() {
|
|
424 |
'<ul><li>' . __('Enter your public key (optional): This is the public key that was created from your main server.', 'ninjafirewall') . '</li>
|
425 |
</ul>' .
|
426 |
|
427 |
-
'<p><span class="dashicons dashicons-warning nfw-warning"></span> 
|
428 |
__('Centralized Logging will keep working even if NinjaFirewall is disabled. Delete your public key below if you want to disable it.', 'ninjafirewall') .
|
429 |
-
'</
|
430 |
'</div>'
|
431 |
) );
|
432 |
|
@@ -442,12 +480,12 @@ function help_nfsublog() {
|
|
442 |
|
443 |
<p>' . __('Live Log does not make use of any WordPress core file (e.g., <code>admin-ajax.php</code>). It communicates directly with the firewall without loading WordPress bootstrap. Consequently, it is fast, lightweight and it should not affect your server load, even if you set its refresh rate to the lowest value.', 'ninjafirewall') . '</p>
|
444 |
|
445 |
-
<p><span class="dashicons dashicons-warning nfw-warning"></span> 
|
446 |
-
</
|
447 |
|
448 |
|
449 |
'<p><strong>'. __('Log Format', 'ninjafirewall') .'</strong></p>'.
|
450 |
-
__('You can easily customize the log format. Possible values are:', 'ninjafirewall') .
|
451 |
'<ul><li>'. __('<code>%time</code>: the server date, time and timezone.', 'ninjafirewall') . '</li>' .
|
452 |
'<li>'. __('<code>%name</code>: authenticated user (HTTP basic auth), if any.', 'ninjafirewall') . '</li>' .
|
453 |
'<li>'. __('<code>%client</code>: the client REMOTE_ADDR. If you are behind a load balancer or CDN, this will be its IP.', 'ninjafirewall') . '</li>' .
|
@@ -499,56 +537,11 @@ function help_nfsubupdates() {
|
|
499 |
'title' => __('Rules Editor', 'ninjafirewall'),
|
500 |
'content' => '<br />' .
|
501 |
__('Besides the "Firewall Policies", NinjaFirewall includes also a large set of built-in rules used to protect your blog against the most common vulnerabilities and hacking attempts. They are always enabled and you cannot edit them, but if you notice that your visitors are wrongly blocked by some of those rules, you can use the Rules Editor below to disable them individually:', 'ninjafirewall') . '
|
502 |
-
<
|
503 |
<li>'. __('Check your firewall log and find the rule ID you want to disable (it is displayed in the <code>RULE</code> column).', 'ninjafirewall') . '</li>
|
504 |
<li>'. __('Select its ID from the enabled rules list below and click the "Disable it" button.', 'ninjafirewall') . '</li>
|
505 |
-
|
506 |
-
|
507 |
-
) );
|
508 |
-
|
509 |
-
get_current_screen()->add_help_tab( array(
|
510 |
-
'id' => 'editor02',
|
511 |
-
'title' => __('Credits', 'ninjafirewall'),
|
512 |
-
'content' =>
|
513 |
-
'<p>' . __('NinjaFirewall security rules protect against many vulnerabilities. Some of them were reported by the following companies, individuals or mailing lists:', 'ninjafirewall') . '</p>
|
514 |
-
<table cellpadding="2" cellspacing="3">
|
515 |
-
<tr>
|
516 |
-
<th scope="row" style="text-align:left">g0blin Research</th><td>https://g0blin.co.uk/</td>
|
517 |
-
</tr>
|
518 |
-
<tr>
|
519 |
-
<th scope="row" style="text-align:left">HomeLab IT</th><td>https://homelab.it/</td>
|
520 |
-
</tr>
|
521 |
-
<tr>
|
522 |
-
<th scope="row" style="text-align:left">Klikki Oy</th><td>https://klikki.fi/</td>
|
523 |
-
</tr>
|
524 |
-
<tr>
|
525 |
-
<th scope="row" style="text-align:left">Netsparker</th><td>https://netsparker.com/</td>
|
526 |
-
</tr>
|
527 |
-
<tr>
|
528 |
-
<th scope="row" style="text-align:left">Packet Storm</th><td>https://packetstormsecurity.com/</td>
|
529 |
-
</tr>
|
530 |
-
<tr>
|
531 |
-
<th scope="row" style="text-align:left">Plugin Vulnerabilities</th><td>https://pluginvulnerabilities.com/</td>
|
532 |
-
</tr>
|
533 |
-
<tr>
|
534 |
-
<th scope="row" style="text-align:left">Pritect Network</th><td>http://pritect.net/</td>
|
535 |
-
</tr>
|
536 |
-
<tr>
|
537 |
-
<th scope="row" style="text-align:left">SecLists.Org</th><td>http://seclists.org/ (fulldisclosure & oss-sec)</td>
|
538 |
-
</tr>
|
539 |
-
<tr>
|
540 |
-
<th scope="row" style="text-align:left">SecurityFocus</th><td>http://securityfocus.com/</td>
|
541 |
-
</tr>
|
542 |
-
<tr>
|
543 |
-
<th scope="row" style="text-align:left">Sucuri</th><td>https://sucuri.net/</td>
|
544 |
-
</tr>
|
545 |
-
<tr>
|
546 |
-
<th scope="row" style="text-align:left">Summer Of Pwnage</th><td>https://sumofpwn.nl/</td>
|
547 |
-
</tr>
|
548 |
-
<tr>
|
549 |
-
<th scope="row" style="text-align:left">WordPress Hütte</th><td>http://wphutte.com/</td>
|
550 |
-
</tr>
|
551 |
-
</table>'
|
552 |
) );
|
553 |
|
554 |
}
|
33 |
|
34 |
get_current_screen()->add_help_tab( array(
|
35 |
'id' => 'main01',
|
36 |
+
'title' => __('Firewall Dashboard', 'ninjafirewall'),
|
37 |
+
'content' => '<br />' . __('This is NinjaFirewall Dashboard page; it shows information about the firewall status. We recommend you keep an eye on it because, in case of problems, all possible errors and warnings will be displayed here.', 'ninjafirewall') . '<br /> '
|
38 |
) );
|
39 |
|
40 |
get_current_screen()->add_help_tab( array(
|
53 |
'title' => __('About...', 'ninjafirewall'),
|
54 |
'content' => '<br />'.
|
55 |
|
56 |
+
__('Everything you ever wanted to know about NinjaFirewall.', 'ninjafirewall')
|
57 |
) );
|
58 |
|
59 |
}
|
87 |
) );
|
88 |
get_current_screen()->add_help_tab( array(
|
89 |
'id' => 'opt03',
|
90 |
+
'title' => __('Blocked user message', 'ninjafirewall'),
|
91 |
'content' => '<br />' .
|
92 |
__('Lets you customize the HTTP error code returned by NinjaFirewall when blocking a dangerous request and the message to display to the user.' , 'ninjafirewall') . ' ' .
|
93 |
__('You can use any HTML tags and 3 built-in variables:' , 'ninjafirewall') .
|
94 |
+
'<ul><li><code>%%REM_ADDRESS%%</code> : '. __('the blocked user IP.' , 'ninjafirewall') . '</li>
|
95 |
<li><code>%%NUM_INCIDENT%%</code> : '. __('the unique incident number as it will appear in the firewall log "INCIDENT" column.' , 'ninjafirewall') . '</li>
|
96 |
+
<li><code>%%NINJA_LOGO%%</code> : '. __('NinjaFirewall logo.' , 'ninjafirewall') . '</li></ul>'
|
97 |
) );
|
98 |
list ( $major_current ) = explode( '.', NFW_ENGINE_VERSION );
|
99 |
get_current_screen()->add_help_tab( array(
|
101 |
'title' => __('Export/import configuration', 'ninjafirewall'),
|
102 |
'content' => '<br />' .
|
103 |
sprintf( __('This options lets you export you current configuration or import it from another NinjaFirewall (WP Edition) installation. The imported file must match the major version of your current version (%s) otherwise it will be rejected. Note that importing will override all firewall rules and options.', 'ninjafirewall'), (int) $major_current .'.x' ) .
|
104 |
+
'<p><span class="dashicons dashicons-warning nfw-warning"></span> ' .
|
105 |
+
__('"File Check" configuration will not be exported/imported.', 'ninjafirewall') . '</p>'
|
106 |
) );
|
107 |
|
108 |
get_current_screen()->add_help_tab( array(
|
119 |
|
120 |
// Firewall policies menu help :
|
121 |
|
122 |
+
if (! function_exists( 'get_home_path' ) ) {
|
123 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
124 |
+
}
|
125 |
+
$NFW_ABSPATH = get_home_path();
|
126 |
+
|
127 |
// Show this text only if we are running in "Full WAF" mode:
|
128 |
if ( defined('NFW_WPWAF') ) {
|
129 |
$res= '';
|
130 |
} else {
|
131 |
+
$res = sprintf( __('Keep in mind, however, that the Firewall Policies apply to any PHP scripts located inside the %s directory and its sub-directories, and not only to your WordPress index page.', 'ninjafirewall'), '<code>' . $NFW_ABSPATH . '</code>');
|
132 |
}
|
133 |
|
134 |
get_current_screen()->add_help_tab( array(
|
147 |
'title' => __('Scan and Sanitise', 'ninjafirewall'),
|
148 |
'content' => '<br />'.
|
149 |
__('You can choose to scan and reject dangerous content but also to sanitise requests and variables. Those two actions are different and can be combined together for better security.', 'ninjafirewall') .
|
150 |
+
'<ul><li>'. __('Scan: If anything suspicious is detected, NinjaFirewall will block the request and return an HTTP error code and message (defined in the "Firewall Options" page). The user request will fail and the connection will be closed immediately.', 'ninjafirewall') .'</li>
|
151 |
+
<li>'. sprintf( __('Sanitise: This option will not block but sanitise the user request by escaping characters that can be used to exploit vulnerabilities (%s) and replacing <code><</code> and <code>></code> with their corresponding HTML entities (<code>&lt;</code>, <code>&gt;</code>). If it is a variable, i.e. <code>?name=value</code>, both its name and value will be sanitised.', 'ninjafirewall'), '<code>\'</code>, <code>"</code>, <code>\\</code>, <code>\n</code>, <code>\r</code>, <code>`</code>, <code>\x1a</code>, <code>\x00</code>, <code>*</code>, <code>?</code>') .'
|
152 |
<br />' .
|
153 |
__('This action will be performed when the filtering process is over, right before NinjaFirewall forwards the request to your PHP script.', 'ninjafirewall') . '
|
154 |
<br />
|
155 |
<br />
|
156 |
+
<span class="dashicons dashicons-warning nfw-warning"></span> '. __('If you enabled <code>POST</code> requests sanitising, articles and messages posted by your visitors could be corrupted with excessive backslashes or substitution characters.', 'ninjafirewall'). '</li></ul>'
|
157 |
) );
|
158 |
+
|
159 |
get_current_screen()->add_help_tab( array(
|
160 |
+
'id' => 'policies03',
|
161 |
+
'title' => __('Basic Policies', 'ninjafirewall'),
|
162 |
'content' => '
|
163 |
<div style="height:400px;">
|
164 |
|
|
|
|
|
165 |
|
166 |
+
<h3>HTTP / HTTPS</h3>
|
167 |
+
' . __('Whether to filter HTTP and/or HTTPS traffic', 'ninjafirewall'). '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
|
169 |
+
<h3>' . __('Uploads', 'ninjafirewall'). '</h3>
|
170 |
|
171 |
+
<p><strong>' . __('File Uploads', 'ninjafirewall'). '</strong><br />' . __('Whether to allow/disallow file uploads.', 'ninjafirewall'). '</p>
|
|
|
172 |
|
173 |
+
<p><strong>' . __('Sanitise filenames', 'ninjafirewall'). '</strong><br />' . __('Any character that is not a letter <code>a-zA-Z</code>, a digit <code>0-9</code>, a dot <code>.</code>, a hyphen <code>-</code> or an underscore <code>_</code> will be removed from the filename and replaced with the substitution character.', 'ninjafirewall'). '</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
|
|
|
175 |
|
176 |
+
<h3>WordPress</h3>
|
|
|
177 |
|
178 |
+
<p><strong>' . __('Block direct access to any PHP file located in one of these directories') . '</strong><br />'. __('Whether to block direct access to PHP files located in specific WordPress directories.', 'ninjafirewall'). '</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
|
180 |
+
<p><strong>' . __('Block attempts to modify important WordPress settings', 'ninjafirewall'). '</strong><br />' . __('Enabling this policy will block any attempt (e.g., exploiting a vulnerability, using a backdoor etc) to modify some important WordPress settings. This policy will also send you an alert by email with all details regarding the issue. It is enabled by default.', 'ninjafirewall') . '<p>
|
181 |
+
|
182 |
+
<p><strong>' . __('Block user accounts creation', 'ninjafirewall'). '</strong><br />' . __('Enabling this policy will block any attempt (e.g., exploiting a vulnerability, using a backdoor etc) to create a user account. If you allow user registration, you should not enable it.', 'ninjafirewall'). '</p>
|
183 |
+
|
184 |
+
<p><strong>' . __('Block attempts to gain administrative privileges', 'ninjafirewall'). '</strong><br />' . __('This policy will block vulnerabilities that could be leveraged by attackers to gain administrative privileges.', 'ninjafirewall'). '</p>
|
185 |
+
|
186 |
+
<p><strong>' . __('WordPress AJAX', 'ninjafirewall'). '</strong><br />' . sprintf( __('Many vulnerabilities in plugins are exploited via the admin-ajax.php script. This policy will try to detect and immediately block bots and malicious scanners trying to access it. The server IP address (%s) and private IP addresses will not be blocked.', 'ninjafirewall'), NFW_REMOTE_ADDR ). '</p>
|
187 |
+
|
188 |
+
<p><strong>' . __('Protect against username enumeration', 'ninjafirewall'). '</strong><br />' . __('It is possible to enumerate usernames either through the WordPress author archives, the REST API or the login page. Although this is not a vulnerability but a WordPress feature, some hackers use it to retrieve usernames in order to launch more accurate brute-force attacks. If it is a failed login attempt, NinjaFirewall will sanitise the error message returned by WordPress. If it is an author archives scan, it will invalidate it and redirect the user to the blog index page. Regarding the WP REST API, it will block the request immediately.', 'ninjafirewall'). '</p>
|
189 |
+
|
190 |
+
<p><strong>' . __('WordPress REST API', 'ninjafirewall'). '</strong><br />' . __('It allows you to access your WordPress site\'s data through an easy-to-use HTTP REST API. Since WordPress 4.7, it is enabled by default. NinjaFirewall allows you to block any access to that API if you do not intend to use it.', 'ninjafirewall'). '</p>
|
191 |
+
|
192 |
+
<p><strong>' . __('WordPress XML-RPC API', 'ninjafirewall'). '</strong><br />' . __('XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode its calls and HTTP as a transport mechanism. WordPress has an XMLRPC API that can be accessed through the <code>xmlrpc.php</code> file. Since WordPress version 3.5, it is always activated and cannot be turned off. NinjaFirewall allows you to immediately block any access to that file, or only to block an access using the <code>system.multicall</code> method often used in brute-force amplification attacks or to block Pingbacks.', 'ninjafirewall'). '</p>
|
193 |
+
|
194 |
+
<p><strong>' . __('Block <code>POST</code> requests in the themes folder <code>/wp-content/themes</code>', 'ninjafirewall') .'</strong><br />' . __('This option can be useful to block hackers from installing backdoor in the PHP theme files. However, because some custom themes may include an HTML form (contact, search form etc), this option is not enabled by default.', 'ninjafirewall'). '</p>
|
195 |
|
196 |
+
<p><strong>' . __('Force HTTPS for admin and logins <code>FORCE_SSL_ADMIN</code>', 'ninjafirewall'). '</strong><br />' . __('Enable this option when you want to secure logins and the admin area so that both passwords and cookies are never sent in the clear. Ensure that you can access your admin console from HTTPS before enabling this option, otherwise you will lock yourself out of your site!', 'ninjafirewall'). '</p>
|
197 |
+
|
198 |
+
<p><strong>' . __('Disable the plugin and theme editor <code>DISALLOW_FILE_EDIT</code>', 'ninjafirewall'). '</strong><br />' . __('Disabling the plugin and theme editor provides an additional layer of security if a hacker gains access to a well-privileged user account.', 'ninjafirewall'). '</p>
|
199 |
+
|
200 |
+
<p><strong>' . __('Disable plugin and theme update/installation <code>DISALLOW_FILE_MODS</code>', 'ninjafirewall'). '</strong><br />' . __('This option will block users being able to use the plugin and theme installation/update functionality from the WordPress admin area. Setting this constant also disables the Plugin and Theme editor.', 'ninjafirewall'). '</p>
|
201 |
+
|
202 |
+
<p><strong>' . __('Disable the fatal error handler <code>WP_DISABLE_FATAL_ERROR_HANDLER</code>', 'ninjafirewall'). '</strong><br />' . __('This option will disable the WSOD protection introduced in WordPress 5.1.', 'ninjafirewall'). '</p>
|
203 |
+
|
204 |
+
<h3>'. __('Users Whitelist', 'ninjafirewall') .'</h3>'.
|
205 |
+
|
206 |
+
__('By default, any logged in WordPress administrator will not be blocked by NinjaFirewall. You can also add any logged in users to the whitelist (make sure you trust them all before doing so).').
|
207 |
+
'<br />
|
208 |
</div>'
|
209 |
) );
|
210 |
+
|
211 |
+
|
212 |
get_current_screen()->add_help_tab( array(
|
213 |
+
'id' => 'policies04',
|
214 |
+
'title' => __('Intermediate Policies', 'ninjafirewall'),
|
215 |
+
'content' => '
|
216 |
+
<div style="height:400px;">
|
217 |
+
|
218 |
+
<h3>' . __('HTTP GET variable', 'ninjafirewall'). '</h3>'.
|
219 |
+
__('Whether to scan and/or sanitise the <code>GET</code> variable.', 'ninjafirewall').
|
220 |
+
|
221 |
+
'<h3>' . __('HTTP POST variable', 'ninjafirewall'). '</h3>'.
|
222 |
+
__('Whether to scan and/or sanitise the <code>POST</code> variable.', 'ninjafirewall').
|
223 |
+
'<p><strong>' . __('Decode Base64-encoded <code>POST</code> variable', 'ninjafirewall'). '</strong><br />' . __('NinjaFirewall will decode and scan base64 encoded values in order to detect obfuscated malicious code. This option is only available for the <code>POST</code> variable.', 'ninjafirewall'). '</p>
|
224 |
+
|
225 |
+
<h3>' . __('HTTP REQUEST variable', 'ninjafirewall'). '</h3>'.
|
226 |
+
__('Whether to sanitise the <code>REQUEST</code> variable.', 'ninjafirewall').
|
227 |
+
|
228 |
+
'<h3>' . __('Cookies', 'ninjafirewall'). '</h3>'.
|
229 |
+
__('Whether to scan and/or sanitise cookies.', 'ninjafirewall').
|
230 |
+
|
231 |
+
'<h3>' . __('HTTP_USER_AGENT server variable', 'ninjafirewall'). '</h3>'.
|
232 |
+
__('Whether to scan and/or sanitise <code>HTTP_USER_AGENT</code> requests.', 'ninjafirewall').
|
233 |
+
'<p><strong>' . __('Block suspicious bots/scanners', 'ninjafirewall'). '</strong><br />' . __('Rejects some known bots, scanners and various malicious scripts attempting to access your blog.', 'ninjafirewall'). '</p>
|
234 |
+
|
235 |
+
<h3>' . __('HTTP_REFERER server variable', 'ninjafirewall'). '</h3>'.
|
236 |
+
__('Whether to scan and/or sanitise <code>HTTP_REFERER</code> requests.', 'ninjafirewall').
|
237 |
+
'<p><strong>' . __('Block POST requests that do not have an <code>HTTP_REFERER</code> header', 'ninjafirewall'). '</strong><br />' . __('This option will block any <code>POST</code> request that does not have a Referrer header (<code>HTTP_REFERER</code> variable). If you need external applications to post to your scripts (e.g. Paypal IPN, WordPress WP-Cron...), you are advised to keep this option disabled otherwise they will likely be blocked. Note that <code>POST</code> requests are not required to have a Referrer header and, for that reason, this option is disabled by default.', 'ninjafirewall'). '</p>
|
238 |
+
|
239 |
+
<h3>IP</h3>
|
240 |
+
|
241 |
+
<p><strong>' . __('Block localhost IP in <code>GET/POST</code> requests', 'ninjafirewall'). '</strong><br />' . __('this option will block any <code>GET</code> or <code>POST</code> request containing the localhost IP (127.0.0.1). It can be useful to block SQL dumpers and various hacker\'s shell scripts.', 'ninjafirewall'). '</p>
|
242 |
+
|
243 |
+
<p><strong>' . __('Block HTTP requests with an IP in the <code>HTTP_HOST</code> header', 'ninjafirewall'). '</strong><br />' . sprintf( __('This option will reject any request using an IP instead of a domain name in the <code>Host</code> header of the HTTP request. Unless you need to connect to your site using its IP address, (e.g. %s), enabling this option will block a lot of hackers scanners because such applications scan IPs rather than domain names.', 'ninjafirewall'), 'http://' . htmlspecialchars($_SERVER['SERVER_ADDR']) . '/index.php'). '</p>
|
244 |
+
|
245 |
+
<p><strong>' . __('Scan traffic coming from localhost and private IP address spaces', 'ninjafirewall'). '</strong><br />' . __('this option will allow the firewall to scan traffic from all non-routable private IPs (IPv4 and IPv6) as well as the localhost IP. We recommend to keep it enabled if you have a private network (2 or more servers interconnected).', 'ninjafirewall'). '</p>
|
246 |
+
|
247 |
+
</div>'
|
248 |
) );
|
249 |
|
250 |
+
|
251 |
+
get_current_screen()->add_help_tab( array(
|
252 |
+
'id' => 'policies05',
|
253 |
+
'title' => __('Advanced Policies', 'ninjafirewall'),
|
254 |
+
'content' => '
|
255 |
+
<div style="height:400px;">
|
256 |
+
|
257 |
+
<h3>' . __('HTTP response headers', 'ninjafirewall'). '</h3>
|
258 |
+
' . __('In addition to filtering incoming requests, NinjaFirewall can also hook the HTTP response in order to alter its headers. Those modifications can help to mitigate threats such as XSS, phishing and clickjacking attacks.', 'ninjafirewall'). '
|
259 |
+
|
260 |
+
<p><strong>' . __('Set <code>X-Content-Type-Options</code> to protect against MIME type confusion attacks', 'ninjafirewall'). '</strong><br />' . __('This header will send the nosniff value to instruct the browser to disable content or MIME sniffing and to use the content-type returned by the server. Some browsers try to guess (sniff) and override the content-type by looking at the content itself which, in some cases, could lead to security issues such as MIME Confusion Attacks.', 'ninjafirewall'). '</p>
|
261 |
+
|
262 |
+
<p><strong>' . __('Set <code>X-Frame-Options</code> to protect against clickjacking attempts', 'ninjafirewall'). '</strong><br />' . __('This header indicates a policy whether a browser must not allow to render a page in a <frame> or <iframe>. Hosts can declare this policy in the header of their HTTP responses to prevent clickjacking attacks, by ensuring that their content is not embedded into other pages or frames. NinjaFirewall accepts two different values:', 'ninjafirewall'). '</p>
|
263 |
+
<ul>
|
264 |
+
<li><code>SAMEORIGIN</code>: ' . __('A browser receiving content with this header must not display this content in any frame from a page of different origin than the content itself.', 'ninjafirewall'). '</li>
|
265 |
+
<li><code>DENY</code>: ' . __('A browser receiving content with this header must not display this content in any frame.', 'ninjafirewall').
|
266 |
+
'</ul>
|
267 |
+
<p>' . __('NinjaFirewall does not support the <code>ALLOW-FROM</code> value.', 'ninjafirewall'). '</p>
|
268 |
+
<p>' . __('Since v3.1.3, WordPress sets this value to <code>SAMEORIGIN</code> for the administrator and the login page only.', 'ninjafirewall'). '</p>
|
269 |
+
|
270 |
+
<p><strong>' . __('Set <code>X-XSS-Protection</code> (IE/Edge, Chrome, Opera and Safari browsers)', 'ninjafirewall'). '</strong><br />' . __('This header allows browsers to identify and block XSS attacks by preventing malicious scripts from executing. It is enabled by default on all compatible browsers.', 'ninjafirewall'). '</p>'.
|
271 |
+
'<p><span class="dashicons dashicons-warning nfw-warning"></span> ' . __("If a visitor disabled their browser's XSS filter, you cannot re-enable it with that option.", 'ninjafirewall'). '</p>'.
|
272 |
+
|
273 |
+
'<p><strong>' . __('Force <code>SameSite</code> flag on all cookies to mitigate CSRF attacks', 'ninjafirewall'). '</strong><br />' . __('Adding this flag to cookies helps to mitigate the risk of CSRF (cross-site request forgery) attacks because cookies can only be sent in requests originating from the same origin as the target domain.', 'ninjafirewall'). '</p>'.
|
274 |
+
|
275 |
+
'<p><strong>' . __('Force <code>HttpOnly</code> flag on all cookies to mitigate XSS attacks', 'ninjafirewall'). '</strong><br />' . __('Adding this flag to cookies helps to mitigate the risk of cross-site scripting by preventing them from being accessed through client-side scripts. NinjaFirewall can hook all cookies sent by your blog, its plugins or any other PHP script, add the <code>HttpOnly</code> flag if it is missing, and re-inject those cookies back into your server HTTP response headers right before they are sent to your visitors. Note that WordPress sets that flag on the logged in user cookies only.', 'ninjafirewall'). '</p>
|
276 |
+
<p><span class="dashicons dashicons-warning nfw-warning"></span> ' . __('If your PHP scripts send cookies that need to be accessed from JavaScript, you should keep that option disabled.', 'ninjafirewall'). '</p>
|
277 |
+
|
278 |
+
<p><strong>' . __('Set <code>Strict-Transport-Security</code> (HSTS) to enforce secure connections to the server', 'ninjafirewall'). '</strong><br />' . __('This policy enforces secure HTTPS connections to the server. Web browsers will not allow the user to access the web application over insecure HTTP protocol. It helps to defend against cookie hijacking and Man-in-the-middle attacks. Most recent browsers support HSTS headers.', 'ninjafirewall'). '</p>
|
279 |
+
|
280 |
+
<p><strong>' . __('Set <code>Content-Security-Policy</code>', 'ninjafirewall'). '</strong><br />' . __('This policy helps to mitigate threats such as XSS, phishing and clickjacking attacks. It covers JavaScript, CSS, HTML frames, web workers, fonts, images, objects (Java, ActiveX, audio and video files), and other HTML5 features.', 'ninjafirewall'). ' ' . __('NinjaFirewall lets you configure the CSP policy separately for the frontend (blog, website) and the backend (WordPress admin dashboard).', 'ninjafirewall') . '</p>
|
281 |
+
|
282 |
+
<p><strong>' . __('Set <code>Referrer-Policy</code>', 'ninjafirewall'). '</strong><br />' . __('This HTTP header governs which referrer information, sent in the Referer header, should be included with requests made.', 'ninjafirewall') . '</p>
|
283 |
+
|
284 |
+
<h3>PHP</h3>
|
285 |
+
|
286 |
+
<p><strong>' . __('Block PHP built-in wrappers', 'ninjafirewall'). '</strong><br />' . __('PHP has several wrappers for use with the filesystem functions. It is possible for an attacker to use them to bypass firewalls and various IDS to exploit remote and local file inclusions. This option lets you block any script attempting to pass a <code>expect://</code>, <code>file://</code>, <code>phar://</code>, <code>php://</code>, <code>zip://</code> or <code>data://</code> stream inside a <code>GET</code> or <code>POST</code> request, cookies, user agent and referrer variables.', 'ninjafirewall'). '</p>
|
287 |
+
|
288 |
+
<p><strong>' . sprintf( __('Block serialized PHP objects', 'ninjafirewall'). '</strong><br />' . __('Object Serialization is a PHP feature used by many applications to generate a storable representation of a value. However, some insecure PHP applications and plugins can turn that feature into a critical vulnerability called <a href="%s">PHP Object Injection</a>. This option can block serialized PHP objects found inside a a <code>GET</code> or <code>POST</code> request, cookies, user agent and referrer variables.', 'ninjafirewall'), 'https://www.owasp.org/index.php/PHP_Object_Injection'). '</p>
|
289 |
+
|
290 |
+
<p><strong>' . __('Hide PHP notice and error messages', 'ninjafirewall'). '</strong><br />' . __('This option lets you hide errors returned by your scripts. Such errors can leak sensitive informations which can be exploited by hackers.', 'ninjafirewall'). '</p>
|
291 |
+
|
292 |
+
<p><strong>' . __('Sanitise <code>PHP_SELF</code>, <code>PATH_TRANSLATED</code>, <code>PATH_INFO</code>', 'ninjafirewall'). '</strong><br />' . __('This option can sanitise any dangerous characters found in those 3 server variables to prevent various XSS and database injection attempts.', 'ninjafirewall'). '</p>
|
293 |
+
|
294 |
+
<h3>' . __('Various', 'ninjafirewall'). '</h3>
|
295 |
+
<p><strong>' . sprintf( __('Block the <code>DOCUMENT_ROOT</code> server variable (%s) in HTTP requests', 'ninjafirewall'), '<code>' . $_SERVER['DOCUMENT_ROOT'] . '</code>'). '</strong><br />' . __('This option will block scripts attempting to pass the <code>DOCUMENT_ROOT</code> server variable in a <code>GET</code> or <code>POST</code> request. Hackers use shell scripts that often need to pass this value, but most legitimate programs do not.', 'ninjafirewall'). '</p>
|
296 |
+
|
297 |
+
<p><strong>' . __('Block ASCII character 0x00 (NULL byte)', 'ninjafirewall'). '</strong><br />' . __('This option will reject any <code>GET</code> or <code>POST</code> request, <code>HTTP_USER_AGENT</code>, <code>REQUEST_URI</code>, <code>PHP_SELF</code>, <code>PATH_INFO</code>, <code>HTTP_REFERER</code> variables containing the ASCII character 0x00 (NULL byte). Such a character is dangerous and should always be rejected.', 'ninjafirewall'). '</p>
|
298 |
+
|
299 |
+
<p><strong>' . __('Block ASCII control characters 1 to 8 and 14 to 31', 'ninjafirewall'). '</strong><br />' . __('This option will reject any <code>GET</code> or <code>POST</code> request, <code>HTTP_USER_AGENT</code>, <code>HTTP_REFERER</code> variables containing ASCII characters from 1 to 8 and 14 to 31.', 'ninjafirewall'). '</p>
|
300 |
+
<br />
|
301 |
+
|
302 |
+
</div>'
|
303 |
+
) );
|
304 |
}
|
305 |
/* ------------------------------------------------------------------ */ // i18n+
|
306 |
|
307 |
function help_nfsubfileguard() {
|
308 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
309 |
// File check menu help :
|
310 |
get_current_screen()->add_help_tab( array(
|
311 |
'id' => 'filecheck01',
|
328 |
'<br />'.
|
329 |
__('Reports will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall'). '</p>'.
|
330 |
|
331 |
+
'<p><span class="dashicons dashicons-warning nfw-warning"></span> '. sprintf( __('Scheduled scans rely on <a href="%s">WordPress pseudo cron</a> which works only if your site gets sufficient traffic.', 'ninjafirewall'), 'http://codex.wordpress.org/Category:WP-Cron_Functions') . '</p>'
|
332 |
) );
|
333 |
|
334 |
+
// File Guard :
|
335 |
+
get_current_screen()->add_help_tab( array(
|
336 |
+
'id' => 'fileguard01',
|
337 |
+
'title' => __('File Guard', 'ninjafirewall'),
|
338 |
+
'content' => '<br/>' .
|
339 |
+
__('File Guard can detect, in real-time, any access to a PHP file that was recently modified or created, and alert you about this.', 'ninjafirewall') .
|
340 |
+
'<br />' .
|
341 |
+
__('If a hacker uploaded a shell script to your site (or injected a backdoor into an already existing file) and tried to directly access that file using his browser or a script, NinjaFirewall would hook the HTTP request and immediately detect that the file was recently modified/created. It would send you a detailed alert (script name, IP, request, date and time). Alerts will be sent to the contact email address defined in the "Event Notifications" menu.', 'ninjafirewall') .
|
342 |
+
'<p>' . __('If you do not want to monitor a folder, you can exclude its full path or a part of it (e.g., <code>/var/www/public_html/cache/</code> or <code>/cache/</code> etc). NinjaFirewall will compare this value to the <code>$_SERVER["SCRIPT_FILENAME"]</code> server variable and, if it matches, will ignore it.', 'ninjafirewall') . '</p>' .
|
343 |
+
__('Multiple values must be comma-separated (e.g., <code>/foo/bar/,/cache/</code>).', 'ninjafirewall') .
|
344 |
+
'<p><span class="dashicons dashicons-warning nfw-warning"></span> ' . __('File Guard real-time detection is a totally unique feature, because NinjaFirewall is the only plugin for WordPress that can hook HTTP requests sent to any PHP script, even if that script is not part of the WordPress package (third-party software, shell script, backdoor etc).', 'ninjafirewall') . '</p>'
|
345 |
+
) );
|
346 |
}
|
347 |
/* ------------------------------------------------------------------ */ // i18n+
|
348 |
function help_nfsubnetwork() {
|
381 |
'id' => 'login01',
|
382 |
'title' => __('Login Protection', 'ninjafirewall'),
|
383 |
'content' => '
|
384 |
+
<div style="height:400px;">
|
385 |
|
386 |
<p>' . __('By processing incoming HTTP requests before your blog and any of its plugins, NinjaFirewall is the only plugin for WordPress able to protect it against very large brute-force attacks, including distributed attacks coming from several thousands of different IPs.', 'ninjafirewall') .
|
387 |
|
410 |
'id' => 'login02',
|
411 |
'title' => __('AUTH log', 'ninjafirewall'),
|
412 |
'content' => '
|
413 |
+
<div style="height:400px;">
|
414 |
<p>' . __('NinjaFirewall can write to the server Authentication log when the brute-force protection is triggered. This can be useful to the system administrator for monitoring purposes or banning IPs at the server level.', 'ninjafirewall') . '
|
415 |
<br />' .
|
416 |
__('If you have a shared hosting account, keep this option disabled as you do not have any access to the server\'s logs.', 'ninjafirewall') .
|
426 |
</ul>'.
|
427 |
__('Sample loglines:', 'ninjafirewall') .
|
428 |
'<br />
|
429 |
+
<textarea class="large-text code" style="height:80px;" wrap="off">Aug 31 01:40:35 www ninjafirewall[6191]: Possible brute-force attack from 172.16.0.1 on mysite.com (wp-login.php). Blocking access for 5mn.'. "\n" . 'Aug 31 01:45:28 www ninjafirewall[6192]: Possible brute-force attack from fe80::6e88:14ff:fe3e:86f0 on blog.domain.com (XML-RPC API). Blocking access for 25mn.</textarea>
|
430 |
+
<p><span class="dashicons dashicons-warning nfw-warning"></span> ' . sprintf( __('Be careful if you are behind a load balancer, reverse-proxy or CDN because the Login Protection feature will always record the <code>REMOTE_ADDR</code> IP. If you have an application parsing the AUTH log in order to ban IPs (e.g. Fail2ban), you <strong>must</strong> setup your HTTP server to forward the correct IP (or use the <code><a href="%s">.htninja</a></code> file), otherwise you will likely block legitimate users.', 'ninjafirewall'), 'https://nintechnet.com/ninjafirewall/wp-edition/help/?htninja') . '</p>
|
431 |
</div>'
|
432 |
) );
|
433 |
|
454 |
</ul>'.
|
455 |
|
456 |
'<p><strong>'. __('Auto-delete log', 'ninjafirewall') .'</strong></p>'.
|
457 |
+
__('This options lets you configure NinjaFirewall to delete its old logs automatically. By default, logs are never deleted, <b>even when uninstall NinjaFirewall</b>. Leave this value to <code>0</code> if you don\'t want to delete old logs.', 'ninjafirewall').
|
458 |
|
459 |
|
460 |
'<p><strong>'. __('Centralized Logging', 'ninjafirewall') .'</strong></p>'.
|
462 |
'<ul><li>' . __('Enter your public key (optional): This is the public key that was created from your main server.', 'ninjafirewall') . '</li>
|
463 |
</ul>' .
|
464 |
|
465 |
+
'<p><span class="dashicons dashicons-warning nfw-warning"></span> '.
|
466 |
__('Centralized Logging will keep working even if NinjaFirewall is disabled. Delete your public key below if you want to disable it.', 'ninjafirewall') .
|
467 |
+
'</p>'.
|
468 |
'</div>'
|
469 |
) );
|
470 |
|
480 |
|
481 |
<p>' . __('Live Log does not make use of any WordPress core file (e.g., <code>admin-ajax.php</code>). It communicates directly with the firewall without loading WordPress bootstrap. Consequently, it is fast, lightweight and it should not affect your server load, even if you set its refresh rate to the lowest value.', 'ninjafirewall') . '</p>
|
482 |
|
483 |
+
<p><span class="dashicons dashicons-warning nfw-warning"></span> ' . __('If you are using the optional <code>.htninja</code> configuration file to whitelist your IP, the Live Log feature will not work.', 'ninjafirewall') . '
|
484 |
+
</p>'.
|
485 |
|
486 |
|
487 |
'<p><strong>'. __('Log Format', 'ninjafirewall') .'</strong></p>'.
|
488 |
+
__('You can easily customize the log format. Possible values are:', 'ninjafirewall') .
|
489 |
'<ul><li>'. __('<code>%time</code>: the server date, time and timezone.', 'ninjafirewall') . '</li>' .
|
490 |
'<li>'. __('<code>%name</code>: authenticated user (HTTP basic auth), if any.', 'ninjafirewall') . '</li>' .
|
491 |
'<li>'. __('<code>%client</code>: the client REMOTE_ADDR. If you are behind a load balancer or CDN, this will be its IP.', 'ninjafirewall') . '</li>' .
|
537 |
'title' => __('Rules Editor', 'ninjafirewall'),
|
538 |
'content' => '<br />' .
|
539 |
__('Besides the "Firewall Policies", NinjaFirewall includes also a large set of built-in rules used to protect your blog against the most common vulnerabilities and hacking attempts. They are always enabled and you cannot edit them, but if you notice that your visitors are wrongly blocked by some of those rules, you can use the Rules Editor below to disable them individually:', 'ninjafirewall') . '
|
540 |
+
<ul>
|
541 |
<li>'. __('Check your firewall log and find the rule ID you want to disable (it is displayed in the <code>RULE</code> column).', 'ninjafirewall') . '</li>
|
542 |
<li>'. __('Select its ID from the enabled rules list below and click the "Disable it" button.', 'ninjafirewall') . '</li>
|
543 |
+
</ul>
|
544 |
+
'. __('Note: if the <code>RULE</code> column from your log shows a hyphen <code>-</code> instead of a number, that means that the rule can be changed in the "Firewall Policies" page.', 'ninjafirewall')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
545 |
) );
|
546 |
|
547 |
}
|
lib/init_update.php
CHANGED
@@ -131,6 +131,22 @@ if (! empty($nfw_options['engine_version']) && version_compare($nfw_options['eng
|
|
131 |
$nfw_options['allow_local_ip'] = 0;
|
132 |
}
|
133 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
// -------------------------------------------------------------
|
135 |
// All versions:
|
136 |
// Old upgrades from 1.3.x to 1.4 didn't initialize the security
|
131 |
$nfw_options['allow_local_ip'] = 0;
|
132 |
}
|
133 |
}
|
134 |
+
// v4.0.6 update -------------------------------------------------
|
135 |
+
if ( version_compare( $nfw_options['engine_version'], '4.0.6', '<' ) ) {
|
136 |
+
if (! isset( $nfw_options['disallow_privesc'] ) &&
|
137 |
+
! defined('NFW_DISABLE_PRVESC2' ) &&
|
138 |
+
! empty( $nfw_options['a_53'] ) ) {
|
139 |
+
|
140 |
+
$nfw_options['disallow_privesc'] = 1;
|
141 |
+
} else {
|
142 |
+
$nfw_options['disallow_privesc'] = 0;
|
143 |
+
}
|
144 |
+
unset( $nfw_options['a_53'] );
|
145 |
+
}
|
146 |
+
// v4.1 update ---------------------------------------------------
|
147 |
+
if ( version_compare( $nfw_options['engine_version'], '4.1', '<' ) ) {
|
148 |
+
$nfw_options['secupdates'] = 1;
|
149 |
+
}
|
150 |
// -------------------------------------------------------------
|
151 |
// All versions:
|
152 |
// Old upgrades from 1.3.x to 1.4 didn't initialize the security
|
lib/install.php
CHANGED
@@ -26,13 +26,18 @@ function nfw_get_constants() {
|
|
26 |
|
27 |
if ( defined('NFW_HTACCESS_BEGIN') ) { return; }
|
28 |
|
|
|
|
|
|
|
|
|
|
|
29 |
define( 'NFW_HTACCESS_BEGIN', '# BEGIN NinjaFirewall' );
|
30 |
define( 'NFW_HTACCESS_DATA', '<IfModule mod_php'. PHP_MAJOR_VERSION .'.c>' ."\n" .
|
31 |
' php_value auto_prepend_file '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php' ."\n" .
|
32 |
'</IfModule>');
|
33 |
define( 'NFW_LITESPEED_DATA', 'php_value auto_prepend_file '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php');
|
34 |
define( 'NFW_SUPHP_DATA', '<IfModule mod_suphp.c>' ."\n" .
|
35 |
-
' suPHP_ConfigPath '. rtrim(
|
36 |
'</IfModule>');
|
37 |
define( 'NFW_HTACCESS_END', '# END NinjaFirewall' );
|
38 |
define( 'NFW_PHPINI_BEGIN', '; BEGIN NinjaFirewall' );
|
@@ -53,21 +58,26 @@ function nfw_fullwaf_htaccess( $httpserver ) {
|
|
53 |
|
54 |
$htaccess_content = '';
|
55 |
|
|
|
|
|
|
|
|
|
|
|
56 |
// Back-up existing .htaccess
|
57 |
-
if ( file_exists(
|
58 |
-
if (! is_writable(
|
59 |
return sprintf(
|
60 |
__('Error: Your .htaccess file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
61 |
-
htmlspecialchars(
|
62 |
);
|
63 |
}
|
64 |
$backup_file = time();
|
65 |
-
@copy(
|
66 |
|
67 |
// Remove potential NF directives
|
68 |
nfw_remove_directives();
|
69 |
|
70 |
-
$htaccess_content = file_get_contents(
|
71 |
}
|
72 |
|
73 |
// Write new content depending on HTTP server type
|
@@ -86,11 +96,11 @@ function nfw_fullwaf_htaccess( $httpserver ) {
|
|
86 |
}
|
87 |
|
88 |
// Write content
|
89 |
-
$res = @file_put_contents(
|
90 |
if ( $res === false ) {
|
91 |
return sprintf(
|
92 |
__('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
93 |
-
htmlspecialchars(
|
94 |
);
|
95 |
}
|
96 |
|
@@ -98,7 +108,7 @@ function nfw_fullwaf_htaccess( $httpserver ) {
|
|
98 |
$res = nfw_waf_sandbox();
|
99 |
if ( $res !== true ) {
|
100 |
// Undo
|
101 |
-
@file_put_contents(
|
102 |
return $res;
|
103 |
}
|
104 |
|
@@ -151,6 +161,11 @@ function nfw_fullwaf_ini( $httpserver, $initype ) {
|
|
151 |
|
152 |
nfw_get_constants();
|
153 |
|
|
|
|
|
|
|
|
|
|
|
154 |
$ini_content = '';
|
155 |
|
156 |
// [1] .user.ini
|
@@ -162,32 +177,32 @@ function nfw_fullwaf_ini( $httpserver, $initype ) {
|
|
162 |
}
|
163 |
|
164 |
// Back-up existing INI file
|
165 |
-
if ( file_exists(
|
166 |
-
if (! is_writable(
|
167 |
return sprintf(
|
168 |
__('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
169 |
-
htmlspecialchars(
|
170 |
);
|
171 |
}
|
172 |
$backup_file = time();
|
173 |
-
@copy(
|
174 |
|
175 |
// Remove potential NF directives
|
176 |
nfw_remove_directives();
|
177 |
|
178 |
-
$ini_content = file_get_contents(
|
179 |
}
|
180 |
|
181 |
// Write new content
|
182 |
$res = @file_put_contents(
|
183 |
-
|
184 |
NFW_PHPINI_BEGIN . "\n" . NFW_PHPINI_DATA . "\n" . NFW_PHPINI_END . "\n\n" . $ini_content,
|
185 |
LOCK_EX
|
186 |
);
|
187 |
if ( $res === false ) {
|
188 |
return sprintf(
|
189 |
__('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
190 |
-
htmlspecialchars(
|
191 |
);
|
192 |
}
|
193 |
return true;
|
@@ -202,6 +217,11 @@ function nfw_remove_directives( $ini = true, $htaccess = true, $wp_config = true
|
|
202 |
|
203 |
define('NFW_REMOVED_DIRECTIVES', true);
|
204 |
|
|
|
|
|
|
|
|
|
|
|
205 |
$res = array( 'ini' => true, 'htaccess' => true, 'wp-config' => true );
|
206 |
|
207 |
// wp-config.php
|
@@ -222,7 +242,7 @@ function nfw_remove_directives( $ini = true, $htaccess = true, $wp_config = true
|
|
222 |
|
223 |
// .htaccess
|
224 |
if ( $htaccess == true ) {
|
225 |
-
$htaccess =
|
226 |
$mods = 0;
|
227 |
if ( file_exists( $htaccess ) ) {
|
228 |
if ( is_writable( $htaccess ) ) {
|
@@ -247,7 +267,7 @@ function nfw_remove_directives( $ini = true, $htaccess = true, $wp_config = true
|
|
247 |
|
248 |
// .ini
|
249 |
if ( $ini == true ) {
|
250 |
-
$ini =
|
251 |
$mods = 0;
|
252 |
if ( file_exists( $ini ) ) {
|
253 |
if ( is_writable( $ini ) ) {
|
@@ -268,7 +288,7 @@ function nfw_remove_directives( $ini = true, $htaccess = true, $wp_config = true
|
|
268 |
$res['ini'] = __('File is not writable', 'ninjafirewall');
|
269 |
}
|
270 |
}
|
271 |
-
$ini =
|
272 |
$mods = 0;
|
273 |
if ( file_exists( $ini ) ) {
|
274 |
if ( is_writable( $ini ) ) {
|
26 |
|
27 |
if ( defined('NFW_HTACCESS_BEGIN') ) { return; }
|
28 |
|
29 |
+
if (! function_exists( 'get_home_path' ) ) {
|
30 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
31 |
+
}
|
32 |
+
$NFW_ABSPATH = get_home_path();
|
33 |
+
|
34 |
define( 'NFW_HTACCESS_BEGIN', '# BEGIN NinjaFirewall' );
|
35 |
define( 'NFW_HTACCESS_DATA', '<IfModule mod_php'. PHP_MAJOR_VERSION .'.c>' ."\n" .
|
36 |
' php_value auto_prepend_file '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php' ."\n" .
|
37 |
'</IfModule>');
|
38 |
define( 'NFW_LITESPEED_DATA', 'php_value auto_prepend_file '. NFW_LOG_DIR .'/nfwlog/ninjafirewall.php');
|
39 |
define( 'NFW_SUPHP_DATA', '<IfModule mod_suphp.c>' ."\n" .
|
40 |
+
' suPHP_ConfigPath '. rtrim( $NFW_ABSPATH, '/') ."\n" .
|
41 |
'</IfModule>');
|
42 |
define( 'NFW_HTACCESS_END', '# END NinjaFirewall' );
|
43 |
define( 'NFW_PHPINI_BEGIN', '; BEGIN NinjaFirewall' );
|
58 |
|
59 |
$htaccess_content = '';
|
60 |
|
61 |
+
if (! function_exists( 'get_home_path' ) ) {
|
62 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
63 |
+
}
|
64 |
+
$NFW_ABSPATH = get_home_path();
|
65 |
+
|
66 |
// Back-up existing .htaccess
|
67 |
+
if ( file_exists( $NFW_ABSPATH .'.htaccess' ) ) {
|
68 |
+
if (! is_writable( $NFW_ABSPATH .'.htaccess' ) ) {
|
69 |
return sprintf(
|
70 |
__('Error: Your .htaccess file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
71 |
+
htmlspecialchars( $NFW_ABSPATH .'.htaccess' )
|
72 |
);
|
73 |
}
|
74 |
$backup_file = time();
|
75 |
+
@copy( $NFW_ABSPATH .'.htaccess', $NFW_ABSPATH .".htaccess.ninja{$backup_file}" );
|
76 |
|
77 |
// Remove potential NF directives
|
78 |
nfw_remove_directives();
|
79 |
|
80 |
+
$htaccess_content = file_get_contents( $NFW_ABSPATH .'.htaccess' );
|
81 |
}
|
82 |
|
83 |
// Write new content depending on HTTP server type
|
96 |
}
|
97 |
|
98 |
// Write content
|
99 |
+
$res = @file_put_contents( $NFW_ABSPATH .'.htaccess', $data, LOCK_EX );
|
100 |
if ( $res === false ) {
|
101 |
return sprintf(
|
102 |
__('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
103 |
+
htmlspecialchars( $NFW_ABSPATH .'.htaccess' )
|
104 |
);
|
105 |
}
|
106 |
|
108 |
$res = nfw_waf_sandbox();
|
109 |
if ( $res !== true ) {
|
110 |
// Undo
|
111 |
+
@file_put_contents( $NFW_ABSPATH .'.htaccess', $htaccess_content, LOCK_EX );
|
112 |
return $res;
|
113 |
}
|
114 |
|
161 |
|
162 |
nfw_get_constants();
|
163 |
|
164 |
+
if (! function_exists( 'get_home_path' ) ) {
|
165 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
166 |
+
}
|
167 |
+
$NFW_ABSPATH = get_home_path();
|
168 |
+
|
169 |
$ini_content = '';
|
170 |
|
171 |
// [1] .user.ini
|
177 |
}
|
178 |
|
179 |
// Back-up existing INI file
|
180 |
+
if ( file_exists( $NFW_ABSPATH . $initype ) ) {
|
181 |
+
if (! is_writable( $NFW_ABSPATH . $initype ) ) {
|
182 |
return sprintf(
|
183 |
__('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
184 |
+
htmlspecialchars( $NFW_ABSPATH . $initype )
|
185 |
);
|
186 |
}
|
187 |
$backup_file = time();
|
188 |
+
@copy( $NFW_ABSPATH .$initype, $NFW_ABSPATH ."{$initype}.ninja{$backup_file}" );
|
189 |
|
190 |
// Remove potential NF directives
|
191 |
nfw_remove_directives();
|
192 |
|
193 |
+
$ini_content = file_get_contents( $NFW_ABSPATH . $initype );
|
194 |
}
|
195 |
|
196 |
// Write new content
|
197 |
$res = @file_put_contents(
|
198 |
+
$NFW_ABSPATH . $initype,
|
199 |
NFW_PHPINI_BEGIN . "\n" . NFW_PHPINI_DATA . "\n" . NFW_PHPINI_END . "\n\n" . $ini_content,
|
200 |
LOCK_EX
|
201 |
);
|
202 |
if ( $res === false ) {
|
203 |
return sprintf(
|
204 |
__('Error: The following file is not writable, please change its permissions: %s', 'ninjafirewall' ),
|
205 |
+
htmlspecialchars( $NFW_ABSPATH . $initype )
|
206 |
);
|
207 |
}
|
208 |
return true;
|
217 |
|
218 |
define('NFW_REMOVED_DIRECTIVES', true);
|
219 |
|
220 |
+
if (! function_exists( 'get_home_path' ) ) {
|
221 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
222 |
+
}
|
223 |
+
$NFW_ABSPATH = get_home_path();
|
224 |
+
|
225 |
$res = array( 'ini' => true, 'htaccess' => true, 'wp-config' => true );
|
226 |
|
227 |
// wp-config.php
|
242 |
|
243 |
// .htaccess
|
244 |
if ( $htaccess == true ) {
|
245 |
+
$htaccess = $NFW_ABSPATH .'.htaccess';
|
246 |
$mods = 0;
|
247 |
if ( file_exists( $htaccess ) ) {
|
248 |
if ( is_writable( $htaccess ) ) {
|
267 |
|
268 |
// .ini
|
269 |
if ( $ini == true ) {
|
270 |
+
$ini = $NFW_ABSPATH .'php.ini';
|
271 |
$mods = 0;
|
272 |
if ( file_exists( $ini ) ) {
|
273 |
if ( is_writable( $ini ) ) {
|
288 |
$res['ini'] = __('File is not writable', 'ninjafirewall');
|
289 |
}
|
290 |
}
|
291 |
+
$ini = $NFW_ABSPATH .'.user.ini';
|
292 |
$mods = 0;
|
293 |
if ( file_exists( $ini ) ) {
|
294 |
if ( is_writable( $ini ) ) {
|
lib/install_default.php
CHANGED
@@ -102,10 +102,10 @@ function nfw_load_default_conf() {
|
|
102 |
'a_51' => 1,
|
103 |
'sched_scan' => 0,
|
104 |
'report_scan' => 0,
|
|
|
|
|
105 |
// v1.7 (daily report cronjob) :
|
106 |
'a_52' => 1,
|
107 |
-
// v3.4:
|
108 |
-
'a_53' => 1,
|
109 |
// v3.8.3 :
|
110 |
'a_61' => 1,
|
111 |
|
@@ -118,6 +118,8 @@ function nfw_load_default_conf() {
|
|
118 |
'disallow_creation' => 0,
|
119 |
// v3.7.2:
|
120 |
'disallow_settings' => 1,
|
|
|
|
|
121 |
|
122 |
// v1.1.2 :
|
123 |
'no_xmlrpc' => 0,
|
@@ -146,6 +148,7 @@ function nfw_load_default_conf() {
|
|
146 |
'clogs_pubkey' => '',
|
147 |
|
148 |
'rate_notice' => time() + 86400 * 15,
|
|
|
149 |
);
|
150 |
// v1.3.1 :
|
151 |
// Some compatibility checks:
|
@@ -167,9 +170,28 @@ function nfw_load_default_conf() {
|
|
167 |
exit( '<font style="font-size:14px;">'. $err_msg .'</font>' );
|
168 |
}
|
169 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
$nfw_options['engine_version'] = NFW_ENGINE_VERSION;
|
171 |
$nfw_options['rules_version'] = NFW_NEWRULES_VERSION; // downloaded rules
|
172 |
|
|
|
|
|
|
|
|
|
173 |
// Create but disable by default "Block the DOCUMENT_ROOT server variable in HTTP request" rule
|
174 |
if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) > 5 ) {
|
175 |
$nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', $_SERVER['DOCUMENT_ROOT'] );
|
102 |
'a_51' => 1,
|
103 |
'sched_scan' => 0,
|
104 |
'report_scan' => 0,
|
105 |
+
// 4.1
|
106 |
+
'secupdates' => 1,
|
107 |
// v1.7 (daily report cronjob) :
|
108 |
'a_52' => 1,
|
|
|
|
|
109 |
// v3.8.3 :
|
110 |
'a_61' => 1,
|
111 |
|
118 |
'disallow_creation' => 0,
|
119 |
// v3.7.2:
|
120 |
'disallow_settings' => 1,
|
121 |
+
// v4.0.6
|
122 |
+
'disallow_privesc' => 1,
|
123 |
|
124 |
// v1.1.2 :
|
125 |
'no_xmlrpc' => 0,
|
148 |
'clogs_pubkey' => '',
|
149 |
|
150 |
'rate_notice' => time() + 86400 * 15,
|
151 |
+
'welcome' => 1,
|
152 |
);
|
153 |
// v1.3.1 :
|
154 |
// Some compatibility checks:
|
170 |
exit( '<font style="font-size:14px;">'. $err_msg .'</font>' );
|
171 |
}
|
172 |
|
173 |
+
// dropins code:
|
174 |
+
if ( isset( $nfw_rules['dropins'] ) ) {
|
175 |
+
if ( $nfw_rules['dropins'] == 'delete' ) {
|
176 |
+
if ( file_exists( NFW_LOG_DIR .'/nfwlog/dropins.php' ) ) {
|
177 |
+
@unlink( NFW_LOG_DIR .'/nfwlog/dropins.php' );
|
178 |
+
}
|
179 |
+
} else {
|
180 |
+
$dropins = base64_decode( $nfw_rules['dropins'], true );
|
181 |
+
if ( $dropins !== false ) {
|
182 |
+
@file_put_contents( NFW_LOG_DIR .'/nfwlog/dropins.php', $dropins, LOCK_EX );
|
183 |
+
}
|
184 |
+
}
|
185 |
+
unset( $nfw_rules['dropins'] );
|
186 |
+
}
|
187 |
+
|
188 |
$nfw_options['engine_version'] = NFW_ENGINE_VERSION;
|
189 |
$nfw_options['rules_version'] = NFW_NEWRULES_VERSION; // downloaded rules
|
190 |
|
191 |
+
// If the user is using WP-CLI, we populate DOCUMENT_ROOT with ABSPATH:
|
192 |
+
if ( defined('WP_CLI') && WP_CLI ) {
|
193 |
+
$_SERVER['DOCUMENT_ROOT'] = ABSPATH;
|
194 |
+
}
|
195 |
// Create but disable by default "Block the DOCUMENT_ROOT server variable in HTTP request" rule
|
196 |
if ( strlen( $_SERVER['DOCUMENT_ROOT'] ) > 5 ) {
|
197 |
$nfw_rules[NFW_DOC_ROOT]['cha'][1]['wha'] = str_replace( '/', '/[./]*', $_SERVER['DOCUMENT_ROOT'] );
|
lib/login_protection.php
CHANGED
@@ -269,7 +269,7 @@ if ( $gd_disabled && $bfconfig['bf_type'] == 1 ) {
|
|
269 |
<?php _e('User:', 'ninjafirewall') ?> <input maxlength="32" type="text" autocomplete="off" value="<?php echo htmlspecialchars( $bfconfig['auth_name'] ) ?>" size="12" name="nfw_options[auth_name]" onkeyup="nfwjs_auth_user_valid();" /> <?php _e('Password:', 'ninjafirewall') ?> <input maxlength="32" placeholder="<?php echo $placeholder ?>" type="password" autocomplete="off" value="" size="12" name="nfw_options[auth_pass]" />
|
270 |
<br /><p class="description"> <?php _e('User and Password must be from 6 to 32 characters.', 'ninjafirewall') ?></p>
|
271 |
<br /><br /><?php _e('Message (max. 1024 characters, HTML tags allowed)', 'ninjafirewall') ?>:<br />
|
272 |
-
<textarea id="realm" name="nfw_options[auth_msgtxt]" class="
|
273 |
</td>
|
274 |
</tr>
|
275 |
</table>
|
269 |
<?php _e('User:', 'ninjafirewall') ?> <input maxlength="32" type="text" autocomplete="off" value="<?php echo htmlspecialchars( $bfconfig['auth_name'] ) ?>" size="12" name="nfw_options[auth_name]" onkeyup="nfwjs_auth_user_valid();" /> <?php _e('Password:', 'ninjafirewall') ?> <input maxlength="32" placeholder="<?php echo $placeholder ?>" type="password" autocomplete="off" value="" size="12" name="nfw_options[auth_pass]" />
|
270 |
<br /><p class="description"> <?php _e('User and Password must be from 6 to 32 characters.', 'ninjafirewall') ?></p>
|
271 |
<br /><br /><?php _e('Message (max. 1024 characters, HTML tags allowed)', 'ninjafirewall') ?>:<br />
|
272 |
+
<textarea id="realm" name="nfw_options[auth_msgtxt]" class="large-text code" rows="5" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" oninput="nfwjs_realm_valid();"><?php echo htmlspecialchars( $bfconfig['auth_msgtxt'] ) ?></textarea>
|
273 |
</td>
|
274 |
</tr>
|
275 |
</table>
|
lib/logs.php
CHANGED
@@ -50,7 +50,7 @@ if ( $_REQUEST['tab'] == 'livelog' ) {
|
|
50 |
<div id="livelog-options"<?php echo $livelog_div ?>>
|
51 |
<?php include __DIR__ .'/logs_live_log.php'; ?>
|
52 |
</div>
|
53 |
-
|
54 |
<?php
|
55 |
|
56 |
// ---------------------------------------------------------------------
|
50 |
<div id="livelog-options"<?php echo $livelog_div ?>>
|
51 |
<?php include __DIR__ .'/logs_live_log.php'; ?>
|
52 |
</div>
|
53 |
+
</div>
|
54 |
<?php
|
55 |
|
56 |
// ---------------------------------------------------------------------
|
lib/logs_firewall_log.php
CHANGED
@@ -132,7 +132,7 @@ if ( defined('NFW_TEXTAREA_HEIGHT') ) {
|
|
132 |
<table class="form-table">
|
133 |
<tr>
|
134 |
<td width="100%">
|
135 |
-
<textarea name="txtlog" class="
|
136 |
if ( ! empty( $logline ) ) {
|
137 |
echo ' DATE INCIDENT LEVEL RULE IP REQUEST' . "\n";
|
138 |
echo $logline;
|
132 |
<table class="form-table">
|
133 |
<tr>
|
134 |
<td width="100%">
|
135 |
+
<textarea name="txtlog" class="large-text code" style="height:<?php echo $th; ?>px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php
|
136 |
if ( ! empty( $logline ) ) {
|
137 |
echo ' DATE INCIDENT LEVEL RULE IP REQUEST' . "\n";
|
138 |
echo $logline;
|
lib/logs_live_log.php
CHANGED
@@ -95,7 +95,7 @@ if ( defined('NFW_TEXTAREA_HEIGHT') ) {
|
|
95 |
<td style="width:100%;text-align:center;">
|
96 |
<progress id="nfw-progress" value="1" max="<?php echo ($nfwintval/1000) ?>" class="nfw-progress" style="display:none"></progress>
|
97 |
<br />
|
98 |
-
<textarea
|
99 |
<br />
|
100 |
<div style="float:left;width:40%;padding-top:10px;" class="nfw-right">
|
101 |
<?php nfw_toggle_switch( 'danger', 'nfw_options[wf_case]', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', 0, false, 'onclick="nfwjs_livelog()"', 'livelog-switch', 'right' ) ?>
|
95 |
<td style="width:100%;text-align:center;">
|
96 |
<progress id="nfw-progress" value="1" max="<?php echo ($nfwintval/1000) ?>" class="nfw-progress" style="display:none"></progress>
|
97 |
<br />
|
98 |
+
<textarea name="txtlog" id="idtxtlog" class="large-text code" style="height:<?php echo $th; ?>px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php _e('Live Log lets you watch your blog traffic in real time. To enable it, click on the button below.', 'ninjafirewall') ?></textarea>
|
99 |
<br />
|
100 |
<div style="float:left;width:40%;padding-top:10px;" class="nfw-right">
|
101 |
<?php nfw_toggle_switch( 'danger', 'nfw_options[wf_case]', __('Enabled', 'ninjafirewall'), __('Disabled', 'ninjafirewall'), 'large', 0, false, 'onclick="nfwjs_livelog()"', 'livelog-switch', 'right' ) ?>
|
lib/monitoring.php
CHANGED
@@ -26,7 +26,7 @@ if (defined('NFSCANDO') ) {
|
|
26 |
}
|
27 |
|
28 |
// Tab and div display
|
29 |
-
if ( empty( $_REQUEST['tab'] ) ) { $_REQUEST['tab'] = '
|
30 |
|
31 |
if ( $_REQUEST['tab'] == 'filecheck' ) {
|
32 |
$fileguard_tab = ''; $fileguard_div = ' style="display:none"';
|
@@ -43,8 +43,8 @@ if ( $_REQUEST['tab'] == 'filecheck' ) {
|
|
43 |
<h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>"> <?php _e('Monitoring', 'ninjafirewall') ?></h1>
|
44 |
<br />
|
45 |
<h2 class="nav-tab-wrapper wp-clearfix" style="cursor:pointer">
|
46 |
-
<a id="tab-fileguard" class="nav-tab<?php echo $fileguard_tab ?>" onClick="nfwjs_switch_tabs('fileguard', 'fileguard:filecheck')"><?php _e( 'File Guard', 'ninjafirewall' ) ?></a>
|
47 |
<a id="tab-filecheck" class="nav-tab<?php echo $filecheck_tab ?>" onClick="nfwjs_switch_tabs('filecheck', 'fileguard:filecheck')"><?php _e( 'File Check', 'ninjafirewall' ) ?></a>
|
|
|
48 |
</h2>
|
49 |
<br />
|
50 |
|
26 |
}
|
27 |
|
28 |
// Tab and div display
|
29 |
+
if ( empty( $_REQUEST['tab'] ) ) { $_REQUEST['tab'] = 'filecheck'; }
|
30 |
|
31 |
if ( $_REQUEST['tab'] == 'filecheck' ) {
|
32 |
$fileguard_tab = ''; $fileguard_div = ' style="display:none"';
|
43 |
<h1><img style="vertical-align:top;width:33px;height:33px;" src="<?php echo plugins_url( '/ninjafirewall/images/ninjafirewall_32.png' ) ?>"> <?php _e('Monitoring', 'ninjafirewall') ?></h1>
|
44 |
<br />
|
45 |
<h2 class="nav-tab-wrapper wp-clearfix" style="cursor:pointer">
|
|
|
46 |
<a id="tab-filecheck" class="nav-tab<?php echo $filecheck_tab ?>" onClick="nfwjs_switch_tabs('filecheck', 'fileguard:filecheck')"><?php _e( 'File Check', 'ninjafirewall' ) ?></a>
|
47 |
+
<a id="tab-fileguard" class="nav-tab<?php echo $fileguard_tab ?>" onClick="nfwjs_switch_tabs('fileguard', 'fileguard:filecheck')"><?php _e( 'File Guard', 'ninjafirewall' ) ?></a>
|
48 |
</h2>
|
49 |
<br />
|
50 |
|
lib/monitoring_file_check.php
CHANGED
@@ -128,6 +128,10 @@ if ( $err ) {
|
|
128 |
// If we don't have a snapshopt, offer to create one :
|
129 |
if (! file_exists($nfmon_snapshot) ) {
|
130 |
?>
|
|
|
|
|
|
|
|
|
131 |
<form method="post" name="monitor_form">
|
132 |
<?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
|
133 |
<table class="form-table nfw-table">
|
@@ -291,7 +295,7 @@ if (file_exists($nfmon_diff) ) {
|
|
291 |
if ($new_file) {
|
292 |
echo '<tr><td>';
|
293 |
echo __('New files:', 'ninjafirewall') . ' ' . count($new_file). '<br />';
|
294 |
-
echo '<select id="select-1" name="sometext" multiple="multiple" style="width:100%;height:150px" onchange="nfwjs_file_info(this.value, 1);">';
|
295 |
foreach($new_file as $k => $v) {
|
296 |
echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
|
297 |
}
|
@@ -326,7 +330,7 @@ if (file_exists($nfmon_diff) ) {
|
|
326 |
echo '
|
327 |
<tr>
|
328 |
<td>' . __('Deleted files:', 'ninjafirewall') .' '. count($del_file). '<br />' .
|
329 |
-
'<select name="sometext" multiple="multiple" style="width:100%;height:150px">';
|
330 |
foreach($del_file as $k => $v) {
|
331 |
echo '<option title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
|
332 |
}
|
@@ -339,7 +343,7 @@ if (file_exists($nfmon_diff) ) {
|
|
339 |
echo '
|
340 |
<tr>
|
341 |
<td>' . __('Modified files:', 'ninjafirewall') .' '. count($mod_file). '<br />' .
|
342 |
-
'<select id="select-2" name="sometext" multiple="multiple" style="width:100%;height:150px" onchange="nfwjs_file_info(this.value, 2);">';
|
343 |
foreach($mod_file as $k => $v) {
|
344 |
echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
|
345 |
}
|
128 |
// If we don't have a snapshopt, offer to create one :
|
129 |
if (! file_exists($nfmon_snapshot) ) {
|
130 |
?>
|
131 |
+
<div class="nfw-notice nfw-notice-orange">
|
132 |
+
<p><?php _e('File Check lets you perform file integrity monitoring upon request or on a specific interval. To start, create a snapshot of your files by clicking the button below.', 'ninjafirewall' ) ?></p>
|
133 |
+
</div>
|
134 |
+
|
135 |
<form method="post" name="monitor_form">
|
136 |
<?php wp_nonce_field('filecheck_save', 'nfwnonce', 0); ?>
|
137 |
<table class="form-table nfw-table">
|
295 |
if ($new_file) {
|
296 |
echo '<tr><td>';
|
297 |
echo __('New files:', 'ninjafirewall') . ' ' . count($new_file). '<br />';
|
298 |
+
echo '<select id="select-1" name="sometext" multiple="multiple" style="min-width:100%;width:100%;height:150px" onchange="nfwjs_file_info(this.value, 1);">';
|
299 |
foreach($new_file as $k => $v) {
|
300 |
echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
|
301 |
}
|
330 |
echo '
|
331 |
<tr>
|
332 |
<td>' . __('Deleted files:', 'ninjafirewall') .' '. count($del_file). '<br />' .
|
333 |
+
'<select name="sometext" multiple="multiple" style="min-width:100%;width:100%;height:150px">';
|
334 |
foreach($del_file as $k => $v) {
|
335 |
echo '<option title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
|
336 |
}
|
343 |
echo '
|
344 |
<tr>
|
345 |
<td>' . __('Modified files:', 'ninjafirewall') .' '. count($mod_file). '<br />' .
|
346 |
+
'<select id="select-2" name="sometext" multiple="multiple" style="min-width:100%;width:100%;height:150px" onchange="nfwjs_file_info(this.value, 2);">';
|
347 |
foreach($mod_file as $k => $v) {
|
348 |
echo '<option value="' . htmlspecialchars($v) . '" title="' . htmlspecialchars($k) . '">' . htmlspecialchars($k) . '</option>';
|
349 |
}
|
lib/security_rules_update.php
CHANGED
@@ -48,15 +48,15 @@ if ( defined( 'NFUPDATESDO' ) && NFUPDATESDO == 2 ) {
|
|
48 |
$update_url = array(
|
49 |
$proto . '://plugins.svn.wordpress.org/ninjafirewall/updates/',
|
50 |
'version3.txt',
|
51 |
-
'
|
52 |
);
|
53 |
} else {
|
54 |
// Scheduled updates or plugin update
|
55 |
$caching_id = sha1( home_url() );
|
56 |
$update_url = array(
|
57 |
$proto . '://updates.nintechnet.com/index.php',
|
58 |
-
"?version=
|
59 |
-
"?rules=
|
60 |
);
|
61 |
}
|
62 |
|
@@ -107,6 +107,7 @@ if (! empty( $_POST['nfw_act'] ) ) {
|
|
107 |
// If WP cron is disabled, we simply warn the user
|
108 |
if ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON == true ) {
|
109 |
echo '<div class="notice-warning notice is-dismissible"><p>' . sprintf( __('It seems that %s is set. Ensure you have another way to run WP-Cron, otherwise NinjaFirewall automatic updates will not work.', 'ninjafirewall'), '<code>DISABLE_WP_CRON</code>' ) . '</p></div>';
|
|
|
110 |
}
|
111 |
|
112 |
if ( empty($nfw_options['enable_updates']) ) {
|
@@ -162,9 +163,12 @@ if ( empty($nfw_options['notify_updates']) && isset($nfw_options['notify_updates
|
|
162 |
// not in the past, otherwise send a warning because wp-cron
|
163 |
// is obviously not working as expected
|
164 |
if ( $nextcron < time() ) {
|
|
|
|
|
165 |
?>
|
166 |
<p class="description" style="color:red"><?php _e('The next scheduled date is in the past! WordPress wp-cron may not be working or may have been disabled.', 'ninjafirewall'); ?></p>
|
167 |
<?php
|
|
|
168 |
} else {
|
169 |
?>
|
170 |
<p class="description"><?php printf( __('Next scheduled update will start in approximately %s day, %s hour(s), %s minute(s) and %s seconds.', 'ninjafirewall'), $diff->format('%a') % 7, $diff->format('%h'), $diff->format('%i'), $diff->format('%s') ) ?></p>
|
@@ -194,7 +198,7 @@ if ( empty($nfw_options['notify_updates']) && isset($nfw_options['notify_updates
|
|
194 |
<tr>
|
195 |
<th scope="row" class="row-med"><?php _e('Updates Log', 'ninjafirewall') ?></th>
|
196 |
<td>
|
197 |
-
<textarea class="
|
198 |
$reversed = array_reverse($log_data);
|
199 |
$count = 0;
|
200 |
foreach ($reversed as $key) {
|
@@ -336,6 +340,21 @@ function nf_sub_do_updates($update_url, $update_log, $NFUPDATESDO = 1) {
|
|
336 |
return 0;
|
337 |
}
|
338 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
339 |
$nfw_rules = nfw_get_option('nfw_rules');
|
340 |
|
341 |
foreach ( $new_rules as $new_key => $new_value ) {
|
@@ -404,10 +423,11 @@ function nf_sub_updates_getversion($update_url, $rules_version, $update_log) {
|
|
404 |
|
405 |
// Ensure that the rules are compatible :
|
406 |
if ( $new_version[0] != 3 ) {
|
|
|
407 |
// This version of NinjaFirewall may be too old :
|
408 |
nf_sub_updates_log(
|
409 |
$update_log,
|
410 |
-
__('Error:
|
411 |
);
|
412 |
return 0;
|
413 |
}
|
@@ -477,7 +497,7 @@ function nf_sub_updates_download($update_url, $update_log, $new_rules_version) {
|
|
477 |
}
|
478 |
|
479 |
// Verify rules digital signature:
|
480 |
-
if ( function_exists( 'openssl_pkey_get_public') && function_exists( 'openssl_verify' ) ) {
|
481 |
|
482 |
$public_key = rtrim( file_get_contents( __DIR__ .'/sign.pub' ) );
|
483 |
$pubkeyid = openssl_pkey_get_public( $public_key );
|
@@ -551,7 +571,7 @@ function nf_sub_updates_notification($new_rules_version) {
|
|
551 |
}
|
552 |
$msg .=__('Rules version:', 'ninjafirewall') .' '. preg_replace('/(\d{4})(\d\d)(\d\d)/', '$1-$2-$3', $new_rules_version) . "\n";
|
553 |
$msg .= sprintf( __('Date: %s', 'ninjafirewall'), ucfirst(date_i18n('M d, Y @ H:i:s O')) ) . "\n\n" .
|
554 |
-
__('This notification can be turned off from NinjaFirewall "
|
555 |
'NinjaFirewall (WP Edition) - https://nintechnet.com/' . "\n" .
|
556 |
__('Support forum:', 'ninjafirewall') .' http://wordpress.org/support/plugin/ninjafirewall' . "\n\n";
|
557 |
|
48 |
$update_url = array(
|
49 |
$proto . '://plugins.svn.wordpress.org/ninjafirewall/updates/',
|
50 |
'version3.txt',
|
51 |
+
'rules4.txt'
|
52 |
);
|
53 |
} else {
|
54 |
// Scheduled updates or plugin update
|
55 |
$caching_id = sha1( home_url() );
|
56 |
$update_url = array(
|
57 |
$proto . '://updates.nintechnet.com/index.php',
|
58 |
+
"?version=4&cid={$caching_id}&edn=wp&rt={$rules_type}&su={$sched_updates}",
|
59 |
+
"?rules=4&cid={$caching_id}&edn=wp&rt={$rules_type}&su={$sched_updates}"
|
60 |
);
|
61 |
}
|
62 |
|
107 |
// If WP cron is disabled, we simply warn the user
|
108 |
if ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON == true ) {
|
109 |
echo '<div class="notice-warning notice is-dismissible"><p>' . sprintf( __('It seems that %s is set. Ensure you have another way to run WP-Cron, otherwise NinjaFirewall automatic updates will not work.', 'ninjafirewall'), '<code>DISABLE_WP_CRON</code>' ) . '</p></div>';
|
110 |
+
$cron_disabled = 1;
|
111 |
}
|
112 |
|
113 |
if ( empty($nfw_options['enable_updates']) ) {
|
163 |
// not in the past, otherwise send a warning because wp-cron
|
164 |
// is obviously not working as expected
|
165 |
if ( $nextcron < time() ) {
|
166 |
+
// Don't display any message if WP-CRON is disabled
|
167 |
+
if ( empty( $cron_disabled ) ) {
|
168 |
?>
|
169 |
<p class="description" style="color:red"><?php _e('The next scheduled date is in the past! WordPress wp-cron may not be working or may have been disabled.', 'ninjafirewall'); ?></p>
|
170 |
<?php
|
171 |
+
}
|
172 |
} else {
|
173 |
?>
|
174 |
<p class="description"><?php printf( __('Next scheduled update will start in approximately %s day, %s hour(s), %s minute(s) and %s seconds.', 'ninjafirewall'), $diff->format('%a') % 7, $diff->format('%h'), $diff->format('%i'), $diff->format('%s') ) ?></p>
|
198 |
<tr>
|
199 |
<th scope="row" class="row-med"><?php _e('Updates Log', 'ninjafirewall') ?></th>
|
200 |
<td>
|
201 |
+
<textarea class="large-text code" style="height:200px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php
|
202 |
$reversed = array_reverse($log_data);
|
203 |
$count = 0;
|
204 |
foreach ($reversed as $key) {
|
340 |
return 0;
|
341 |
}
|
342 |
|
343 |
+
// dropins code:
|
344 |
+
if ( isset( $new_rules['dropins'] ) ) {
|
345 |
+
if ( $new_rules['dropins'] == 'delete' ) {
|
346 |
+
if ( file_exists( NFW_LOG_DIR .'/nfwlog/dropins.php' ) ) {
|
347 |
+
@unlink( NFW_LOG_DIR .'/nfwlog/dropins.php' );
|
348 |
+
}
|
349 |
+
} else {
|
350 |
+
$dropins = base64_decode( $new_rules['dropins'], true );
|
351 |
+
if ( $dropins !== false ) {
|
352 |
+
@file_put_contents( NFW_LOG_DIR .'/nfwlog/dropins.php', $dropins, LOCK_EX );
|
353 |
+
}
|
354 |
+
}
|
355 |
+
unset( $new_rules['dropins'] );
|
356 |
+
}
|
357 |
+
|
358 |
$nfw_rules = nfw_get_option('nfw_rules');
|
359 |
|
360 |
foreach ( $new_rules as $new_key => $new_value ) {
|
423 |
|
424 |
// Ensure that the rules are compatible :
|
425 |
if ( $new_version[0] != 3 ) {
|
426 |
+
if (! isset( $new_version[1] ) ) { $new_version[1] = '004'; }
|
427 |
// This version of NinjaFirewall may be too old :
|
428 |
nf_sub_updates_log(
|
429 |
$update_log,
|
430 |
+
sprintf( __('Error: %s', 'ninjafirewall'), $new_version[1] )
|
431 |
);
|
432 |
return 0;
|
433 |
}
|
497 |
}
|
498 |
|
499 |
// Verify rules digital signature:
|
500 |
+
if ( function_exists( 'openssl_pkey_get_public') && function_exists( 'openssl_verify' ) && defined('OPENSSL_ALGO_SHA256') ) {
|
501 |
|
502 |
$public_key = rtrim( file_get_contents( __DIR__ .'/sign.pub' ) );
|
503 |
$pubkeyid = openssl_pkey_get_public( $public_key );
|
571 |
}
|
572 |
$msg .=__('Rules version:', 'ninjafirewall') .' '. preg_replace('/(\d{4})(\d\d)(\d\d)/', '$1-$2-$3', $new_rules_version) . "\n";
|
573 |
$msg .= sprintf( __('Date: %s', 'ninjafirewall'), ucfirst(date_i18n('M d, Y @ H:i:s O')) ) . "\n\n" .
|
574 |
+
sprintf( __('This notification can be turned off from NinjaFirewall "%s" page.', 'ninjafirewall'), __('Security Rules', 'ninjafirewall') ) ."\n\n" .
|
575 |
'NinjaFirewall (WP Edition) - https://nintechnet.com/' . "\n" .
|
576 |
__('Support forum:', 'ninjafirewall') .' http://wordpress.org/support/plugin/ninjafirewall' . "\n\n";
|
577 |
|
lib/thickbox.php
CHANGED
@@ -31,6 +31,11 @@ return;
|
|
31 |
|
32 |
function nfw_upgrade_fullwaf() {
|
33 |
|
|
|
|
|
|
|
|
|
|
|
34 |
?>
|
35 |
<div id="nfw-thickbox-content" style="display:none;">
|
36 |
|
@@ -126,12 +131,12 @@ function nfw_upgrade_fullwaf() {
|
|
126 |
</tr>
|
127 |
<?php
|
128 |
$f1 = ''; $f2 = '';
|
129 |
-
if ( file_exists(
|
130 |
$ini_type = 1;
|
131 |
$f1 = $recommended;
|
132 |
$tr_ini_phpini = $display_none;
|
133 |
$tr_ini_userini = '';
|
134 |
-
} elseif ( file_exists(
|
135 |
$ini_type = 2;
|
136 |
$f2 = $recommended;
|
137 |
$tr_ini_phpini = '';
|
@@ -188,36 +193,36 @@ function nfw_upgrade_fullwaf() {
|
|
188 |
<tr id="tr-ini-userini"<?php echo $tr_ini_userini ?>>
|
189 |
<td>
|
190 |
<?php
|
191 |
-
if ( file_exists(
|
192 |
-
$text = sprintf( $file_exist, '<code>'. htmlspecialchars(
|
193 |
} else {
|
194 |
-
$text = sprintf( $file_missing, '<code>'. htmlspecialchars(
|
195 |
}
|
196 |
echo $text;
|
197 |
?>
|
198 |
-
<textarea name="txtlog" class="
|
199 |
</td>
|
200 |
</tr>
|
201 |
<tr id="tr-ini-phpini"<?php echo $tr_ini_phpini ?>>
|
202 |
<td>
|
203 |
<?php
|
204 |
-
if ( file_exists(
|
205 |
-
$text = sprintf( $file_exist, '<code>'. htmlspecialchars(
|
206 |
} else {
|
207 |
-
$text = sprintf( $file_missing, '<code>'. htmlspecialchars(
|
208 |
}
|
209 |
echo $text;
|
210 |
?>
|
211 |
-
<textarea name="txtlog" class="
|
212 |
</td>
|
213 |
</tr>
|
214 |
|
215 |
|
216 |
<?php
|
217 |
-
if ( file_exists(
|
218 |
-
$text = sprintf( $file_exist, '<code>'. htmlspecialchars(
|
219 |
} else {
|
220 |
-
$text = sprintf( $file_missing, '<code>'. htmlspecialchars(
|
221 |
}
|
222 |
?>
|
223 |
<tr id="tr-htaccess-modphp"<?php echo $tr_htaccess_modphp ?>>
|
@@ -225,7 +230,7 @@ function nfw_upgrade_fullwaf() {
|
|
225 |
<?php
|
226 |
echo $text;
|
227 |
?>
|
228 |
-
<textarea name="txtlog" class="
|
229 |
</td>
|
230 |
</tr>
|
231 |
<tr id="tr-htaccess-litespeed"<?php echo $tr_htaccess_litespeed ?>>
|
@@ -233,7 +238,7 @@ function nfw_upgrade_fullwaf() {
|
|
233 |
<?php
|
234 |
echo $text;
|
235 |
?>
|
236 |
-
<textarea name="txtlog" class="
|
237 |
</td>
|
238 |
</tr>
|
239 |
<tr id="tr-htaccess-openlitespeed"<?php echo $tr_htaccess_openlitespeed ?>>
|
@@ -241,7 +246,7 @@ function nfw_upgrade_fullwaf() {
|
|
241 |
<?php
|
242 |
_e('Log in to your Openlitespeed admin dashboard, click on "Virtual Host", select your domain, add the following instructions to the "php.ini Override" section in the "General" tab, and restart Openlitespeed:', 'ninjafirewall' );
|
243 |
?>
|
244 |
-
<textarea name="txtlog" class="
|
245 |
<br />
|
246 |
<br />
|
247 |
<div style="background:#f1f1f1;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
|
@@ -256,7 +261,7 @@ function nfw_upgrade_fullwaf() {
|
|
256 |
<?php
|
257 |
echo $text;
|
258 |
?>
|
259 |
-
<textarea name="txtlog" class="
|
260 |
</td>
|
261 |
</tr>
|
262 |
</table>
|
31 |
|
32 |
function nfw_upgrade_fullwaf() {
|
33 |
|
34 |
+
if (! function_exists( 'get_home_path' ) ) {
|
35 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
36 |
+
}
|
37 |
+
$NFW_ABSPATH = get_home_path();
|
38 |
+
|
39 |
?>
|
40 |
<div id="nfw-thickbox-content" style="display:none;">
|
41 |
|
131 |
</tr>
|
132 |
<?php
|
133 |
$f1 = ''; $f2 = '';
|
134 |
+
if ( file_exists( $NFW_ABSPATH .'.user.ini' ) ) {
|
135 |
$ini_type = 1;
|
136 |
$f1 = $recommended;
|
137 |
$tr_ini_phpini = $display_none;
|
138 |
$tr_ini_userini = '';
|
139 |
+
} elseif ( file_exists( $NFW_ABSPATH .'php.ini' ) ) {
|
140 |
$ini_type = 2;
|
141 |
$f2 = $recommended;
|
142 |
$tr_ini_phpini = '';
|
193 |
<tr id="tr-ini-userini"<?php echo $tr_ini_userini ?>>
|
194 |
<td>
|
195 |
<?php
|
196 |
+
if ( file_exists( $NFW_ABSPATH .'.user.ini' ) ) {
|
197 |
+
$text = sprintf( $file_exist, '<code>'. htmlspecialchars( $NFW_ABSPATH ) .'<b>.user.ini</b>' .'</code>');
|
198 |
} else {
|
199 |
+
$text = sprintf( $file_missing, '<code>'. htmlspecialchars( $NFW_ABSPATH ) .'<b>.user.ini</b>' .'</code>');
|
200 |
}
|
201 |
echo $text;
|
202 |
?>
|
203 |
+
<br /><textarea name="txtlog" class="large-text code" rows="4" style="color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_PHPINI_BEGIN ."\n" . NFW_PHPINI_DATA ."\n". NFW_PHPINI_END ."\n"; ?></textarea>
|
204 |
</td>
|
205 |
</tr>
|
206 |
<tr id="tr-ini-phpini"<?php echo $tr_ini_phpini ?>>
|
207 |
<td>
|
208 |
<?php
|
209 |
+
if ( file_exists( $NFW_ABSPATH .'php.ini' ) ) {
|
210 |
+
$text = sprintf( $file_exist, '<code>'. htmlspecialchars( $NFW_ABSPATH ) .'<b>php.ini</b>' .'</code>');
|
211 |
} else {
|
212 |
+
$text = sprintf( $file_missing, '<code>'. htmlspecialchars( $NFW_ABSPATH ) .'<b>php.ini</b>' .'</code>');
|
213 |
}
|
214 |
echo $text;
|
215 |
?>
|
216 |
+
<br /><textarea name="txtlog" class="large-text code" rows="4" style="color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_PHPINI_BEGIN ."\n" . NFW_PHPINI_DATA ."\n". NFW_PHPINI_END ."\n"; ?></textarea>
|
217 |
</td>
|
218 |
</tr>
|
219 |
|
220 |
|
221 |
<?php
|
222 |
+
if ( file_exists( $NFW_ABSPATH .'.htaccess' ) ) {
|
223 |
+
$text = sprintf( $file_exist, '<code>'. htmlspecialchars( $NFW_ABSPATH ) .'<b>.htaccess</b>' .'</code>');
|
224 |
} else {
|
225 |
+
$text = sprintf( $file_missing, '<code>'. htmlspecialchars( $NFW_ABSPATH ) .'<b>.htaccess</b>' .'</code>');
|
226 |
}
|
227 |
?>
|
228 |
<tr id="tr-htaccess-modphp"<?php echo $tr_htaccess_modphp ?>>
|
230 |
<?php
|
231 |
echo $text;
|
232 |
?>
|
233 |
+
<br /><textarea name="txtlog" class="large-text code" rows="6" style="color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_HTACCESS_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
|
234 |
</td>
|
235 |
</tr>
|
236 |
<tr id="tr-htaccess-litespeed"<?php echo $tr_htaccess_litespeed ?>>
|
238 |
<?php
|
239 |
echo $text;
|
240 |
?>
|
241 |
+
<br /><textarea name="txtlog" class="large-text code" rows="4" style="color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_LITESPEED_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
|
242 |
</td>
|
243 |
</tr>
|
244 |
<tr id="tr-htaccess-openlitespeed"<?php echo $tr_htaccess_openlitespeed ?>>
|
246 |
<?php
|
247 |
_e('Log in to your Openlitespeed admin dashboard, click on "Virtual Host", select your domain, add the following instructions to the "php.ini Override" section in the "General" tab, and restart Openlitespeed:', 'ninjafirewall' );
|
248 |
?>
|
249 |
+
<br /><textarea name="txtlog" class="large-text code" rows="4" style="color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_LITESPEED_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
|
250 |
<br />
|
251 |
<br />
|
252 |
<div style="background:#f1f1f1;border-left:4px solid #fff;-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 0 15px;padding:1px 12px;border-left-color:orange;">
|
261 |
<?php
|
262 |
echo $text;
|
263 |
?>
|
264 |
+
<br /><textarea name="txtlog" class="large-text code" rows="6" style="color:green;font-size:13px" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" wrap="off"><?php echo NFW_HTACCESS_BEGIN ."\n" . NFW_SUPHP_DATA ."\n". NFW_HTACCESS_END ."\n"; ?></textarea>
|
265 |
</td>
|
266 |
</tr>
|
267 |
</table>
|
lib/utils.php
CHANGED
@@ -190,8 +190,10 @@ function nfw_account_creation( $user_login ) {
|
|
190 |
|
191 |
$nfw_options = nfw_get_option( 'nfw_options' );
|
192 |
|
|
|
|
|
193 |
if ( current_user_can('create_users') || empty( $nfw_options['disallow_creation'] ) ||
|
194 |
-
empty( $nfw_options['enabled'] ) ) {
|
195 |
|
196 |
// Do nothing:
|
197 |
return $user_login;
|
@@ -445,6 +447,12 @@ function nfw_garbage_collector() {
|
|
445 |
@file_put_contents( $path . $file, $data, LOCK_EX );
|
446 |
}
|
447 |
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
}
|
449 |
|
450 |
// ---------------------------------------------------------------------
|
@@ -457,7 +465,7 @@ function nfw_log_error( $message ) {
|
|
457 |
if (! file_exists( $log ) ) {
|
458 |
@file_put_contents( $log, "<?php exit; ?>\n", LOCK_EX );
|
459 |
}
|
460 |
-
@file_put_contents( $log,
|
461 |
|
462 |
}
|
463 |
|
@@ -695,76 +703,6 @@ function nfw_err_shake( $shake_codes ) {
|
|
695 |
|
696 |
// ---------------------------------------------------------------------
|
697 |
|
698 |
-
function nfw_check_emailalert() {
|
699 |
-
|
700 |
-
$nfw_options = nfw_get_option( 'nfw_options' );
|
701 |
-
|
702 |
-
if ( ( is_multisite() ) && ( $nfw_options['alert_sa_only'] == 2 ) ) {
|
703 |
-
$recipient = get_option('admin_email');
|
704 |
-
} else {
|
705 |
-
$recipient = $nfw_options['alert_email'];
|
706 |
-
}
|
707 |
-
|
708 |
-
global $current_user;
|
709 |
-
$current_user = wp_get_current_user();
|
710 |
-
|
711 |
-
list( $a_1, $a_2, $a_3 ) = explode( ':', NFW_ALERT . ':' );
|
712 |
-
|
713 |
-
if (! empty($nfw_options['a_' . $a_1 . $a_2]) ) {
|
714 |
-
$alert_array = array(
|
715 |
-
'1' => array (
|
716 |
-
'0' => __('Plugin', 'ninjafirewall'), '1' => __('uploaded', 'ninjafirewall'), '2' => __('installed', 'ninjafirewall'), '3' => __('activated', 'ninjafirewall'),
|
717 |
-
'4' => __('updated', 'ninjafirewall'), '5' => __('deactivated', 'ninjafirewall'), '6' => __('deleted', 'ninjafirewall'), 'label' => __('Name', 'ninjafirewall')
|
718 |
-
),
|
719 |
-
'2' => array (
|
720 |
-
'0' => __('Theme', 'ninjafirewall'), '1' => __('uploaded', 'ninjafirewall'), '2' => __('installed', 'ninjafirewall'), '3' => __('activated', 'ninjafirewall'),
|
721 |
-
'4' => __('deleted', 'ninjafirewall'), 'label' => __('Name', 'ninjafirewall')
|
722 |
-
),
|
723 |
-
'3' => array (
|
724 |
-
'0' => 'WordPress', '1' => __('upgraded', 'ninjafirewall'), 'label' => __('Version', 'ninjafirewall')
|
725 |
-
)
|
726 |
-
);
|
727 |
-
|
728 |
-
if ( substr_count($a_3, ',') ) {
|
729 |
-
$alert_array[$a_1][0] .= 's';
|
730 |
-
$alert_array[$a_1]['label'] .= 's';
|
731 |
-
}
|
732 |
-
$subject = __('[NinjaFirewall] Alert:', 'ninjafirewall') . ' ' . $alert_array[$a_1][0] . ' ' . $alert_array[$a_1][$a_2];
|
733 |
-
if ( is_multisite() ) {
|
734 |
-
$url = __('-Blog :', 'ninjafirewall') .' '. network_home_url('/') . "\n\n";
|
735 |
-
} else {
|
736 |
-
$url = __('-Blog :', 'ninjafirewall') .' '. home_url('/') . "\n\n";
|
737 |
-
}
|
738 |
-
$message = __('NinjaFirewall has detected the following activity on your account:', 'ninjafirewall') . "\n\n".
|
739 |
-
'-' . $alert_array[$a_1][0] . ' ' . $alert_array[$a_1][$a_2] . "\n" .
|
740 |
-
'-' . $alert_array[$a_1]['label'] . ' : ' . $a_3 . "\n\n" .
|
741 |
-
__('-User :', 'ninjafirewall') .' '. $current_user->user_login . ' (' . $current_user->roles[0] . ")\n" .
|
742 |
-
__('-IP :', 'ninjafirewall') .' '. NFW_REMOTE_ADDR . "\n" .
|
743 |
-
__('-Date :', 'ninjafirewall') .' '. ucfirst( date_i18n('F j, Y @ H:i:s O') ) ."\n" .
|
744 |
-
$url .
|
745 |
-
'NinjaFirewall (WP Edition) - https://nintechnet.com/' . "\n" .
|
746 |
-
__('Support forum:', 'ninjafirewall') . ' http://wordpress.org/support/plugin/ninjafirewall' . "\n\n";
|
747 |
-
|
748 |
-
$message .= sprintf(
|
749 |
-
__('Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): %s', 'ninjafirewall'),
|
750 |
-
'https://nintechnet.com/ninjafirewall/wp-edition/?comparison' );
|
751 |
-
|
752 |
-
wp_mail( $recipient, $subject, $message );
|
753 |
-
|
754 |
-
if (! empty($nfw_options['a_41']) ) {
|
755 |
-
nfw_log2(
|
756 |
-
$alert_array[$a_1][0] . ' ' . $alert_array[$a_1][$a_2] . ' by '. $current_user->user_login,
|
757 |
-
$alert_array[$a_1]['label'] . ': ' . $a_3,
|
758 |
-
6,
|
759 |
-
0
|
760 |
-
);
|
761 |
-
}
|
762 |
-
|
763 |
-
}
|
764 |
-
}
|
765 |
-
|
766 |
-
// ---------------------------------------------------------------------
|
767 |
-
|
768 |
function nf_check_dbdata() {
|
769 |
|
770 |
$nfw_options = nfw_get_option( 'nfw_options' );
|
@@ -786,7 +724,8 @@ function nf_check_dbdata() {
|
|
786 |
}
|
787 |
|
788 |
$adm_users = nf_get_dbdata();
|
789 |
-
|
|
|
790 |
set_transient( 'nfw_db_check', 1, 60 );
|
791 |
return;
|
792 |
}
|
@@ -958,8 +897,12 @@ function nfwhook_user_meta( $id, $key, $value ) {
|
|
958 |
if (! defined('NF_DISABLED') ) {
|
959 |
is_nfw_enabled();
|
960 |
}
|
961 |
-
|
962 |
-
|
|
|
|
|
|
|
|
|
963 |
|
964 |
global $wpdb;
|
965 |
|
@@ -973,8 +916,7 @@ function nfwhook_user_meta( $id, $key, $value ) {
|
|
973 |
$value = serialize( $value );
|
974 |
}
|
975 |
|
976 |
-
if ( strpos( $value, 's:
|
977 |
-
strpos( $value, 's:13:"administrator"' ) === FALSE &&
|
978 |
strpos( $value, 's:12:"shop_manager"' ) === FALSE &&
|
979 |
strpos( $value, 's:13:"bbp_keymaster"' ) === FALSE ) {
|
980 |
|
@@ -985,63 +927,58 @@ function nfwhook_user_meta( $id, $key, $value ) {
|
|
985 |
$subject = __('Blocked privilege escalation attempt', 'ninjafirewall');
|
986 |
nfw_log2( 'WordPress: ' . $subject, "$key: $value", 3, 0);
|
987 |
|
988 |
-
|
|
|
989 |
|
990 |
-
|
991 |
-
|
|
|
|
|
|
|
|
|
992 |
|
993 |
-
|
994 |
|
995 |
-
|
996 |
-
$recipient = get_option('admin_email');
|
997 |
-
} else {
|
998 |
-
$recipient = $nfw_options['alert_email'];
|
999 |
-
}
|
1000 |
-
$subject = '[NinjaFirewall] ' . $subject;
|
1001 |
|
1002 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1003 |
|
1004 |
-
|
|
|
|
|
|
|
1005 |
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
$
|
1012 |
-
$
|
1013 |
-
|
1014 |
-
|
1015 |
-
$message.= 'SCRIPT_FILENAME: ' . $_SERVER['SCRIPT_FILENAME'] . "\n";
|
1016 |
-
$message.= 'REQUEST_URI: ' . $_SERVER['REQUEST_URI'] . "\n";
|
1017 |
-
$message.= __('Date:', 'ninjafirewall') .' '. date_i18n('F j, Y @ H:i:s') . ' (UTC '. date('O') . ")\n\n";
|
1018 |
-
|
1019 |
-
// Attach PHP backtrace:
|
1020 |
-
$verbosity = nfw_verbosity( $nfw_options );
|
1021 |
-
if ( $verbosity !== false ) {
|
1022 |
-
$nftmpfname = NFW_LOG_DIR .'/nfwlog/backtrace_'. uniqid() .'.txt';
|
1023 |
-
$dbg = debug_backtrace( $verbosity );
|
1024 |
-
array_shift( $dbg );
|
1025 |
-
file_put_contents( $nftmpfname, print_r( $dbg, true ) );
|
1026 |
-
$message.= __('A PHP backtrace has been attached to this message for your convenience.', 'ninjafirewall') . "\n\n";
|
1027 |
-
}
|
1028 |
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
|
1037 |
-
|
1038 |
-
|
1039 |
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
}
|
1045 |
}
|
1046 |
|
1047 |
// Block it:
|
@@ -1185,6 +1122,7 @@ function nf_monitor_options( $value, $option, $old_value ) {
|
|
1185 |
'blogdescription',
|
1186 |
'blogname',
|
1187 |
'comment_moderation',
|
|
|
1188 |
'comment_registration',
|
1189 |
'default_role',
|
1190 |
'home',
|
@@ -1408,5 +1346,15 @@ function nfw_disable_wpwaf() {
|
|
1408 |
}
|
1409 |
}
|
1410 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1411 |
// ---------------------------------------------------------------------
|
1412 |
// EOF
|
190 |
|
191 |
$nfw_options = nfw_get_option( 'nfw_options' );
|
192 |
|
193 |
+
// We must allow the request if the username exists too, otherwise we'll
|
194 |
+
// block them from using the "Lost password" feature:
|
195 |
if ( current_user_can('create_users') || empty( $nfw_options['disallow_creation'] ) ||
|
196 |
+
empty( $nfw_options['enabled'] ) || username_exists( $user_login ) ) {
|
197 |
|
198 |
// Do nothing:
|
199 |
return $user_login;
|
447 |
@file_put_contents( $path . $file, $data, LOCK_EX );
|
448 |
}
|
449 |
|
450 |
+
// ------------------------------------------------------------------
|
451 |
+
|
452 |
+
// Security updates
|
453 |
+
require __DIR__ .'/event_updates.php';
|
454 |
+
nfw_check_security_updates();
|
455 |
+
|
456 |
}
|
457 |
|
458 |
// ---------------------------------------------------------------------
|
465 |
if (! file_exists( $log ) ) {
|
466 |
@file_put_contents( $log, "<?php exit; ?>\n", LOCK_EX );
|
467 |
}
|
468 |
+
@file_put_contents( $log, date('[d/M/y:H:i:s O]') . " $message\n", FILE_APPEND | LOCK_EX );
|
469 |
|
470 |
}
|
471 |
|
703 |
|
704 |
// ---------------------------------------------------------------------
|
705 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
706 |
function nf_check_dbdata() {
|
707 |
|
708 |
$nfw_options = nfw_get_option( 'nfw_options' );
|
724 |
}
|
725 |
|
726 |
$adm_users = nf_get_dbdata();
|
727 |
+
// Some oject caching plugins can return an array with empty keys.
|
728 |
+
if ( empty( $adm_users[0]->user_login ) ) {
|
729 |
set_transient( 'nfw_db_check', 1, 60 );
|
730 |
return;
|
731 |
}
|
897 |
if (! defined('NF_DISABLED') ) {
|
898 |
is_nfw_enabled();
|
899 |
}
|
900 |
+
|
901 |
+
$nfw_options = nfw_get_option( 'nfw_options' );
|
902 |
+
|
903 |
+
// Note: "NFW_DISABLE_PRVESC2" is now deprecated. Use the corresponding
|
904 |
+
// firewall policy to disable it instead:
|
905 |
+
if ( NF_DISABLED || defined('NFW_DISABLE_PRVESC2') || empty( $nfw_options['disallow_privesc'] ) ) { return; }
|
906 |
|
907 |
global $wpdb;
|
908 |
|
916 |
$value = serialize( $value );
|
917 |
}
|
918 |
|
919 |
+
if ( strpos( $value, 's:13:"administrator"' ) === FALSE &&
|
|
|
920 |
strpos( $value, 's:12:"shop_manager"' ) === FALSE &&
|
921 |
strpos( $value, 's:13:"bbp_keymaster"' ) === FALSE ) {
|
922 |
|
927 |
$subject = __('Blocked privilege escalation attempt', 'ninjafirewall');
|
928 |
nfw_log2( 'WordPress: ' . $subject, "$key: $value", 3, 0);
|
929 |
|
930 |
+
// Alert the admin:
|
931 |
+
nfw_get_blogtimezone();
|
932 |
|
933 |
+
if ( is_multisite() && $nfw_options['alert_sa_only'] == 2 ) {
|
934 |
+
$recipient = get_option('admin_email');
|
935 |
+
} else {
|
936 |
+
$recipient = $nfw_options['alert_email'];
|
937 |
+
}
|
938 |
+
$subject = '[NinjaFirewall] ' . $subject;
|
939 |
|
940 |
+
$message = __('NinjaFirewall has blocked an attempt to modify a user capability by someone who does not have administrative privileges:', 'ninjafirewall') . "\n\n";
|
941 |
|
942 |
+
$message.= __('Blog:', 'ninjafirewall') .' '. home_url('/') . "\n";
|
|
|
|
|
|
|
|
|
|
|
943 |
|
944 |
+
// Show current blog, not main site (multisite):
|
945 |
+
$user_info = get_userdata( $id );
|
946 |
+
if (! empty( $user_info->user_login ) ) {
|
947 |
+
$message.= __('Username:', 'ninjafirewall') .' '. "{$user_info->user_login}, ID: $id\n";
|
948 |
+
}
|
949 |
+
$message.= "meta_key: $key\n";
|
950 |
+
$message.= "meta_value: $value\n\n";
|
951 |
|
952 |
+
$message.= __('User IP:', 'ninjafirewall') .' '. NFW_REMOTE_ADDR . "\n";
|
953 |
+
$message.= 'SCRIPT_FILENAME: ' . $_SERVER['SCRIPT_FILENAME'] . "\n";
|
954 |
+
$message.= 'REQUEST_URI: ' . $_SERVER['REQUEST_URI'] . "\n";
|
955 |
+
$message.= __('Date:', 'ninjafirewall') .' '. date_i18n('F j, Y @ H:i:s') . ' (UTC '. date('O') . ")\n\n";
|
956 |
|
957 |
+
// Attach PHP backtrace:
|
958 |
+
$verbosity = nfw_verbosity( $nfw_options );
|
959 |
+
if ( $verbosity !== false ) {
|
960 |
+
$nftmpfname = NFW_LOG_DIR .'/nfwlog/backtrace_'. uniqid() .'.txt';
|
961 |
+
$dbg = debug_backtrace( $verbosity );
|
962 |
+
array_shift( $dbg );
|
963 |
+
file_put_contents( $nftmpfname, print_r( $dbg, true ) );
|
964 |
+
$message.= __('A PHP backtrace has been attached to this message for your convenience.', 'ninjafirewall') . "\n\n";
|
965 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
966 |
|
967 |
+
$message.= __('This protection (and notification) can be turned off from NinjaFirewall "Firewall Policies" page.', 'ninjafirewall') . "\n\n";
|
968 |
+
$message.= 'NinjaFirewall (WP Edition) - https://nintechnet.com/' . "\n" .
|
969 |
+
'Support forum: http://wordpress.org/support/plugin/ninjafirewall' . "\n\n";
|
970 |
|
971 |
+
$message .= sprintf(
|
972 |
+
__('Need more security? Check out our supercharged NinjaFirewall (WP+ Edition): %s', 'ninjafirewall'),
|
973 |
+
'https://nintechnet.com/ninjafirewall/wp-edition/?comparison' );
|
974 |
|
975 |
+
if ( empty( $nftmpfname ) ) {
|
976 |
+
wp_mail( $recipient, $subject, $message );
|
977 |
|
978 |
+
} else {
|
979 |
+
// Attach backtrace and delete temp file:
|
980 |
+
wp_mail( $recipient, $subject, $message, '', $nftmpfname );
|
981 |
+
unlink( $nftmpfname );
|
|
|
982 |
}
|
983 |
|
984 |
// Block it:
|
1122 |
'blogdescription',
|
1123 |
'blogname',
|
1124 |
'comment_moderation',
|
1125 |
+
'comments_notify',
|
1126 |
'comment_registration',
|
1127 |
'default_role',
|
1128 |
'home',
|
1346 |
}
|
1347 |
}
|
1348 |
|
1349 |
+
// ---------------------------------------------------------------------
|
1350 |
+
function nfw_dropins() {
|
1351 |
+
|
1352 |
+
if ( file_exists( NFW_LOG_DIR .'/nfwlog/dropins.php' ) ) {
|
1353 |
+
@include_once NFW_LOG_DIR .'/nfwlog/dropins.php';
|
1354 |
+
}
|
1355 |
+
}
|
1356 |
+
|
1357 |
+
add_action('plugins_loaded', 'nfw_dropins', -1);
|
1358 |
+
|
1359 |
// ---------------------------------------------------------------------
|
1360 |
// EOF
|
lib/wpplus.php
CHANGED
@@ -242,7 +242,7 @@ nf_not_allowed( 'block', __LINE__ );
|
|
242 |
|
243 |
<hr />
|
244 |
|
245 |
-
<h3><b><a href="https://nintechnet.com/"><?php _e('Learn more</a> about the <font color="#21759B">WP+</font> Edition unique features.', 'ninjafirewall') ?></b></h3>
|
246 |
<h3><b><a href="https://nintechnet.com/ninjafirewall/wp-edition/?comparison"><?php _e('Compare</a> the WP and <font color="#21759B">WP+</font> Editions.', 'ninjafirewall') ?></b></h3>
|
247 |
|
248 |
<hr />
|
242 |
|
243 |
<hr />
|
244 |
|
245 |
+
<h3><b><a href="https://nintechnet.com/ninjafirewall/wp-edition/"><?php _e('Learn more</a> about the <font color="#21759B">WP+</font> Edition unique features.', 'ninjafirewall') ?></b></h3>
|
246 |
<h3><b><a href="https://nintechnet.com/ninjafirewall/wp-edition/?comparison"><?php _e('Compare</a> the WP and <font color="#21759B">WP+</font> Editions.', 'ninjafirewall') ?></b></h3>
|
247 |
|
248 |
<hr />
|
ninjafirewall.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: NinjaFirewall (WP Edition)
|
4 |
Plugin URI: https://nintechnet.com/
|
5 |
Description: A true Web Application Firewall to protect and secure WordPress.
|
6 |
-
Version: 4.
|
7 |
Author: The Ninja Technologies Network
|
8 |
Author URI: https://nintechnet.com/
|
9 |
License: GPLv3 or later
|
@@ -19,7 +19,7 @@ Domain Path: /languages
|
|
19 |
| (c) NinTechNet - https://nintechnet.com/ |
|
20 |
+---------------------------------------------------------------------+
|
21 |
*/
|
22 |
-
define( 'NFW_ENGINE_VERSION', '4.
|
23 |
/*
|
24 |
+---------------------------------------------------------------------+
|
25 |
| This program is free software: you can redistribute it and/or |
|
@@ -92,7 +92,8 @@ if (! empty($_SERVER['DOCUMENT_ROOT']) && $_SERVER['DOCUMENT_ROOT'] != '/' ) {
|
|
92 |
}
|
93 |
/* ------------------------------------------------------------------ */
|
94 |
|
95 |
-
require plugin_dir_path(__FILE__) .
|
|
|
96 |
|
97 |
if (! defined( 'NFW_REMOTE_ADDR') ) {
|
98 |
nfw_select_ip();
|
@@ -246,7 +247,7 @@ function nfw_load_ext( $hook ) {
|
|
246 |
if ( stripos( $hook, 'ninjafirewall' ) === false ) { return; }
|
247 |
|
248 |
if ( strpos ( $hook, 'nfsubwplus' ) !== false ) {
|
249 |
-
// Load thickbox JS and CSS (WP only)
|
250 |
$extra_js = array( 'jquery', 'thickbox' );
|
251 |
$extra_css = array( 'thickbox' );
|
252 |
} else {
|
@@ -324,6 +325,8 @@ function nfw_load_ext( $hook ) {
|
|
324 |
esc_js( __('Your public key is not valid.', 'ninjafirewall') ),
|
325 |
|
326 |
// Live Log
|
|
|
|
|
327 |
'no_traffic' =>
|
328 |
esc_js( __('No traffic yet, please wait', 'ninjafirewall') ),
|
329 |
'seconds' =>
|
@@ -470,11 +473,6 @@ function nfw_admin_init() {
|
|
470 |
}
|
471 |
}
|
472 |
|
473 |
-
// Updates e-mail alert?
|
474 |
-
if ( defined( 'NFW_ALERT' ) ) {
|
475 |
-
nfw_check_emailalert();
|
476 |
-
}
|
477 |
-
|
478 |
// Applies to admin only (unlike the WP+ Edition):
|
479 |
if (! empty( $nfw_options['wl_admin'] ) ) {
|
480 |
$_SESSION['nfw_goodguy'] = true;
|
@@ -679,6 +677,24 @@ function nfw_fullwafsetup() {
|
|
679 |
wp_die();
|
680 |
}
|
681 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
682 |
/* ------------------------------------------------------------------ */
|
683 |
|
684 |
function is_nfw_enabled() {
|
@@ -842,7 +858,6 @@ if ( is_multisite() ) {
|
|
842 |
function nf_sub_main() {
|
843 |
|
844 |
// Main menu (Overview)
|
845 |
-
// require plugin_dir_path(__FILE__) . 'lib/overview.php';
|
846 |
require plugin_dir_path(__FILE__) . 'lib/dashboard.php';
|
847 |
|
848 |
}
|
3 |
Plugin Name: NinjaFirewall (WP Edition)
|
4 |
Plugin URI: https://nintechnet.com/
|
5 |
Description: A true Web Application Firewall to protect and secure WordPress.
|
6 |
+
Version: 4.1
|
7 |
Author: The Ninja Technologies Network
|
8 |
Author URI: https://nintechnet.com/
|
9 |
License: GPLv3 or later
|
19 |
| (c) NinTechNet - https://nintechnet.com/ |
|
20 |
+---------------------------------------------------------------------+
|
21 |
*/
|
22 |
+
define( 'NFW_ENGINE_VERSION', '4.1' );
|
23 |
/*
|
24 |
+---------------------------------------------------------------------+
|
25 |
| This program is free software: you can redistribute it and/or |
|
92 |
}
|
93 |
/* ------------------------------------------------------------------ */
|
94 |
|
95 |
+
require plugin_dir_path(__FILE__) .'lib/utils.php';
|
96 |
+
require plugin_dir_path(__FILE__) .'lib/events.php';
|
97 |
|
98 |
if (! defined( 'NFW_REMOTE_ADDR') ) {
|
99 |
nfw_select_ip();
|
247 |
if ( stripos( $hook, 'ninjafirewall' ) === false ) { return; }
|
248 |
|
249 |
if ( strpos ( $hook, 'nfsubwplus' ) !== false ) {
|
250 |
+
// Load thickbox JS and CSS (WP only for "WP+" menu page's screenshots)
|
251 |
$extra_js = array( 'jquery', 'thickbox' );
|
252 |
$extra_css = array( 'thickbox' );
|
253 |
} else {
|
325 |
esc_js( __('Your public key is not valid.', 'ninjafirewall') ),
|
326 |
|
327 |
// Live Log
|
328 |
+
'live_log_desc' =>
|
329 |
+
esc_js( __('Live Log lets you watch your blog traffic in real time. To enable it, click on the button below.', 'ninjafirewall') ),
|
330 |
'no_traffic' =>
|
331 |
esc_js( __('No traffic yet, please wait', 'ninjafirewall') ),
|
332 |
'seconds' =>
|
473 |
}
|
474 |
}
|
475 |
|
|
|
|
|
|
|
|
|
|
|
476 |
// Applies to admin only (unlike the WP+ Edition):
|
477 |
if (! empty( $nfw_options['wl_admin'] ) ) {
|
478 |
$_SESSION['nfw_goodguy'] = true;
|
677 |
wp_die();
|
678 |
}
|
679 |
|
680 |
+
/* ------------------------------------------------------------------ */
|
681 |
+
// Welcome screen.
|
682 |
+
|
683 |
+
add_action( 'wp_ajax_nfw_welcomescreen', 'nfw_welcomescreen' );
|
684 |
+
|
685 |
+
function nfw_welcomescreen() {
|
686 |
+
|
687 |
+
nf_not_allowed( 'block', __LINE__ );
|
688 |
+
|
689 |
+
if (! check_ajax_referer( 'welcome_save', 'nonce', false ) ) {
|
690 |
+
_e('Error: Security nonces do not match. Reload the page and try again.', 'ninjafirewall');
|
691 |
+
wp_die();
|
692 |
+
}
|
693 |
+
$nfw_options = nfw_get_option( 'nfw_options' );
|
694 |
+
unset( $nfw_options['welcome'] );
|
695 |
+
nfw_update_option( 'nfw_options', $nfw_options);
|
696 |
+
}
|
697 |
+
|
698 |
/* ------------------------------------------------------------------ */
|
699 |
|
700 |
function is_nfw_enabled() {
|
858 |
function nf_sub_main() {
|
859 |
|
860 |
// Main menu (Overview)
|
|
|
861 |
require plugin_dir_path(__FILE__) . 'lib/dashboard.php';
|
862 |
|
863 |
}
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== NinjaFirewall (WP Edition) - Advanced Security ===
|
2 |
Contributors: nintechnet, bruandet
|
3 |
-
Tags: security, firewall, malware, antispam, virus, scanner, hacked site, brute force, seguridad, seguranca, sicherheit, sicurezza, veiligheid
|
4 |
Requires at least: 3.7
|
5 |
-
Tested up to: 5.
|
6 |
-
Stable tag: 4.
|
7 |
-
Requires PHP: 5.
|
8 |
License: GPLv3 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
@@ -18,7 +18,7 @@ NinjaFirewall (WP Edition) is a true Web Application Firewall. Although it can b
|
|
18 |
|
19 |
It allows any blog administrator to benefit from very advanced and powerful security features that usually aren't available at the WordPress level, but only in security applications such as the Apache [ModSecurity](http://www.modsecurity.org/ "") module or the PHP [Suhosin](http://suhosin.org/ "") extension.
|
20 |
|
21 |
-
> NinjaFirewall requires at least PHP 5.
|
22 |
|
23 |
NinjaFirewall can hook, scan, sanitise or reject any HTTP/HTTPS request sent to a PHP script before it reaches WordPress or any of its plugins. All scripts located inside the blog installation directories and sub-directories will be protected, including those that aren't part of the WordPress package. Even encoded PHP scripts, hackers shell scripts and backdoors will be filtered by NinjaFirewall.
|
24 |
|
@@ -119,7 +119,7 @@ Check out our new supercharged edition: [NinjaFirewall WP+ Edition](https://nint
|
|
119 |
|
120 |
* WordPress 3.7+
|
121 |
* Admin/Superadmin with `manage_options` + `unfiltered_html capabilities`.
|
122 |
-
* PHP 5.
|
123 |
* MySQL or MariaDB with MySQLi extension
|
124 |
* Apache / Nginx / LiteSpeed / Openlitespeed compatible
|
125 |
* Unix-like operating systems only (Linux, BSD etc). NinjaFirewall is **NOT** compatible with Microsoft Windows.
|
@@ -200,6 +200,34 @@ NinjaFirewall works on Unix-like servers only. There is no Microsoft Windows ver
|
|
200 |
|
201 |
== Changelog ==
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
= 4.0.4 =
|
204 |
|
205 |
* Improved firewall engine: Fixed a bug in the HTML entities decoder and added ES6 unicode detection and decoding.
|
1 |
=== NinjaFirewall (WP Edition) - Advanced Security ===
|
2 |
Contributors: nintechnet, bruandet
|
3 |
+
Tags: security, firewall, malware, antispam, virus, scanner, hacked site, brute force, seguridad, seguranca, sicherheit, sicurezza, veiligheid, classicpress
|
4 |
Requires at least: 3.7
|
5 |
+
Tested up to: 5.4
|
6 |
+
Stable tag: 4.1
|
7 |
+
Requires PHP: 5.5
|
8 |
License: GPLv3 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
10 |
|
18 |
|
19 |
It allows any blog administrator to benefit from very advanced and powerful security features that usually aren't available at the WordPress level, but only in security applications such as the Apache [ModSecurity](http://www.modsecurity.org/ "") module or the PHP [Suhosin](http://suhosin.org/ "") extension.
|
20 |
|
21 |
+
> NinjaFirewall requires at least PHP 5.5, MySQLi extension and is only compatible with Unix-like OS (Linux, BSD). It is **not compatible with Microsoft Windows**.
|
22 |
|
23 |
NinjaFirewall can hook, scan, sanitise or reject any HTTP/HTTPS request sent to a PHP script before it reaches WordPress or any of its plugins. All scripts located inside the blog installation directories and sub-directories will be protected, including those that aren't part of the WordPress package. Even encoded PHP scripts, hackers shell scripts and backdoors will be filtered by NinjaFirewall.
|
24 |
|
119 |
|
120 |
* WordPress 3.7+
|
121 |
* Admin/Superadmin with `manage_options` + `unfiltered_html capabilities`.
|
122 |
+
* PHP 5.5+, PHP 7.x
|
123 |
* MySQL or MariaDB with MySQLi extension
|
124 |
* Apache / Nginx / LiteSpeed / Openlitespeed compatible
|
125 |
* Unix-like operating systems only (Linux, BSD etc). NinjaFirewall is **NOT** compatible with Microsoft Windows.
|
200 |
|
201 |
== Changelog ==
|
202 |
|
203 |
+
Need more security? Take the time to explore our supercharged Premium edition: [NinjaFirewall WP+ Edition](https://nintechnet.com/ninjafirewall/wp-edition/?comparison)
|
204 |
+
|
205 |
+
= 4.1 =
|
206 |
+
|
207 |
+
* Added a new feature that will alert you by email if there were an important security update available for your themes, plugins or WordPress. It is enabled by default and can be found in the "Event Notifications > Security updates > Send me an alert whenever an important security update is available for a plugin, theme or WordPress".
|
208 |
+
* Fixed an issue with the "Block user accounts creation" policy: when using the WordPress "Lost your password" link, some users were wrongly blocked.
|
209 |
+
* On old PHP installations (<5.4.8), it is now possible to update the security rules: NinjaFirewall will not verify their digital signature anymore because of the missing OPENSSL_ALGO_SHA256 algo required by the openssl_verify function.
|
210 |
+
* Fixed "Date Range Processed" wrong timezone in the daily report.
|
211 |
+
* The contextual help was reformatted and is now easier to read.
|
212 |
+
* Added a dismissible welcome banner to the "Dashboard" page to explain how to use the contextual help.
|
213 |
+
* Many small fixes and adjustments.
|
214 |
+
* WP+ Edition (Premium): Updated IPv4/IPv6/ASN GeoIP databases.
|
215 |
+
|
216 |
+
= 4.0.6 =
|
217 |
+
|
218 |
+
* The option to detect and block attemtps to gain administrative privileges can now be turned off from the admin dashboard. See "Firewall Policies > Basic Policies > General > Block attempts to gain administrative privileges".
|
219 |
+
* Added some code to prevent users who have a caching plugin configured to cache wp-admin requests, from receiving many empty "Database changes detected" email notifications. Note that if you're using a caching plugin, we don't recommend to enable objects caching in the admin back-end because it can have bad side effects.
|
220 |
+
* Several small fixes and adjustments (UI, CSS, JS and PHP code).
|
221 |
+
* WP+ Edition (Premium): Updated IPv4/IPv6/ASN GeoIP databases.
|
222 |
+
|
223 |
+
= 4.0.5 =
|
224 |
+
|
225 |
+
* The "Event Notifications" code was rewritten from scratch.
|
226 |
+
* The "Full WAF" installer will rely on the `
|
227 |
+
get_home_path` function rather than the `ABSPATH` constant in order to better detect if WordPress was installed into its own directory.
|
228 |
+
* WP+ Edition (Premium): Updated IPv4/IPv6/ASN GeoIP databases.
|
229 |
+
* Small fixes and adjustments.
|
230 |
+
|
231 |
= 4.0.4 =
|
232 |
|
233 |
* Improved firewall engine: Fixed a bug in the HTML entities decoder and added ES6 unicode detection and decoding.
|
static/chart.min.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/*!
|
2 |
-
* Chart.js v2.
|
3 |
* https://www.chartjs.org
|
4 |
* (c) 2019 Chart.js Contributors
|
5 |
* Released under the MIT License
|
6 |
*/
|
7 |
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],function(t){return e(function(){try{return t("moment")}catch(t){}}())}):t.Chart=e(t.moment)}(this,function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={rgb2hsl:i,rgb2hsv:n,rgb2hwb:a,rgb2cmyk:o,rgb2keyword:s,rgb2xyz:l,rgb2lab:d,rgb2lch:function(t){return x(d(t))},hsl2rgb:u,hsl2hsv:function(t){var e=t[0],i=t[1]/100,n=t[2]/100;if(0===n)return[0,0,0];return[e,100*(2*(i*=(n*=2)<=1?n:2-n)/(n+i)),100*((n+i)/2)]},hsl2hwb:function(t){return a(u(t))},hsl2cmyk:function(t){return o(u(t))},hsl2keyword:function(t){return s(u(t))},hsv2rgb:h,hsv2hsl:function(t){var e,i,n=t[0],a=t[1]/100,o=t[2]/100;return e=a*o,[n,100*(e=(e/=(i=(2-a)*o)<=1?i:2-i)||0),100*(i/=2)]},hsv2hwb:function(t){return a(h(t))},hsv2cmyk:function(t){return o(h(t))},hsv2keyword:function(t){return s(h(t))},hwb2rgb:c,hwb2hsl:function(t){return i(c(t))},hwb2hsv:function(t){return n(c(t))},hwb2cmyk:function(t){return o(c(t))},hwb2keyword:function(t){return s(c(t))},cmyk2rgb:f,cmyk2hsl:function(t){return i(f(t))},cmyk2hsv:function(t){return n(f(t))},cmyk2hwb:function(t){return a(f(t))},cmyk2keyword:function(t){return s(f(t))},keyword2rgb:w,keyword2hsl:function(t){return i(w(t))},keyword2hsv:function(t){return n(w(t))},keyword2hwb:function(t){return a(w(t))},keyword2cmyk:function(t){return o(w(t))},keyword2lab:function(t){return d(w(t))},keyword2xyz:function(t){return l(w(t))},xyz2rgb:p,xyz2lab:m,xyz2lch:function(t){return x(m(t))},lab2xyz:v,lab2rgb:y,lab2lch:x,lch2lab:k,lch2xyz:function(t){return v(k(t))},lch2rgb:function(t){return y(k(t))}};function i(t){var e,i,n=t[0]/255,a=t[1]/255,o=t[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r;return s==r?e=0:n==s?e=(a-o)/l:a==s?e=2+(o-n)/l:o==s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),i=(r+s)/2,[e,100*(s==r?0:i<=.5?l/(s+r):l/(2-s-r)),100*i]}function n(t){var e,i,n=t[0],a=t[1],o=t[2],r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r;return i=0==s?0:l/s*1e3/10,s==r?e=0:n==s?e=(a-o)/l:a==s?e=2+(o-n)/l:o==s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),[e,i,s/255*1e3/10]}function a(t){var e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.min(e,Math.min(n,a))),100*(a=1-1/255*Math.max(e,Math.max(n,a)))]}function o(t){var e,i=t[0]/255,n=t[1]/255,a=t[2]/255;return[100*((1-i-(e=Math.min(1-i,1-n,1-a)))/(1-e)||0),100*((1-n-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]}function s(t){return _[JSON.stringify(t)]}function l(t){var e=t[0]/255,i=t[1]/255,n=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.1805*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)),100*(.2126*e+.7152*i+.0722*n),100*(.0193*e+.1192*i+.9505*n)]}function d(t){var e=l(t),i=e[0],n=e[1],a=e[2];return n/=100,a/=108.883,i=(i/=95.047)>.008856?Math.pow(i,1/3):7.787*i+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(i-n),200*(n-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]}function u(t){var e,i,n,a,o,r=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return[o=255*l,o,o];e=2*l-(i=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var d=0;d<3;d++)(n=r+1/3*-(d-1))<0&&n++,n>1&&n--,o=6*n<1?e+6*(i-e)*n:2*n<1?i:3*n<2?e+(i-e)*(2/3-n)*6:e,a[d]=255*o;return a}function h(t){var e=t[0]/60,i=t[1]/100,n=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*n*(1-i),s=255*n*(1-i*o),l=255*n*(1-i*(1-o));n*=255;switch(a){case 0:return[n,l,r];case 1:return[s,n,r];case 2:return[r,n,l];case 3:return[r,s,n];case 4:return[l,r,n];case 5:return[n,r,s]}}function c(t){var e,i,n,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,d=s+l;switch(d>1&&(s/=d,l/=d),n=6*o-(e=Math.floor(6*o)),0!=(1&e)&&(n=1-n),a=s+n*((i=1-l)-s),e){default:case 6:case 0:r=i,g=a,b=s;break;case 1:r=a,g=i,b=s;break;case 2:r=s,g=i,b=a;break;case 3:r=s,g=a,b=i;break;case 4:r=a,g=s,b=i;break;case 5:r=i,g=s,b=a}return[255*r,255*g,255*b]}function f(t){var e=t[0]/100,i=t[1]/100,n=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a))]}function p(t){var e,i,n,a=t[0]/100,o=t[1]/100,r=t[2]/100;return i=-.9689*a+1.8758*o+.0415*r,n=.0557*a+-.204*o+1.057*r,e=(e=3.2406*a+-1.5372*o+-.4986*r)>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,[255*(e=Math.min(Math.max(0,e),1)),255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1))]}function m(t){var e=t[0],i=t[1],n=t[2];return i/=100,n/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(e-i),200*(i-(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116))]}function v(t){var e,i,n,a,o=t[0],r=t[1],s=t[2];return o<=8?a=(i=100*o/903.3)/100*7.787+16/116:(i=100*Math.pow((o+16)/116,3),a=Math.pow(i/100,1/3)),[e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i,n=n/108.883<=.008859?n=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3)]}function x(t){var e,i=t[0],n=t[1],a=t[2];return(e=360*Math.atan2(a,n)/2/Math.PI)<0&&(e+=360),[i,Math.sqrt(n*n+a*a),e]}function y(t){return p(v(t))}function k(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]}function w(t){return M[t]}var M={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_={};for(var C in M)_[JSON.stringify(M[C])]=C;var S=function(){return new T};for(var P in e){S[P+"Raw"]=function(t){return function(i){return"number"==typeof i&&(i=Array.prototype.slice.call(arguments)),e[t](i)}}(P);var I=/(\w+)2(\w+)/.exec(P),A=I[1],D=I[2];(S[A]=S[A]||{})[D]=S[P]=function(t){return function(i){"number"==typeof i&&(i=Array.prototype.slice.call(arguments));var n=e[t](i);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(P)}var T=function(){this.convs={}};T.prototype.routeSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i))},T.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},T.prototype.getValues=function(t){var e=this.convs[t];if(!e){var i=this.space,n=this.convs[i];e=S[i][t](n),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){T.prototype[t]=function(e){return this.routeSpace(t,arguments)}});var F=S,L={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},R={getRgba:O,getHsla:z,getRgb:function(t){var e=O(t);return e&&e.slice(0,3)},getHsl:function(t){var e=z(t);return e&&e.slice(0,3)},getHwb:B,getAlpha:function(t){var e=O(t);if(e)return e[3];if(e=z(t))return e[3];if(e=B(t))return e[3]},hexString:function(t,e){var e=void 0!==e&&3===t.length?e:t[3];return"#"+H(t[0])+H(t[1])+H(t[2])+(e>=0&&e<1?H(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return N(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:N,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return W(t,e);var i=Math.round(t[0]/255*100),n=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+i+"%, "+n+"%, "+a+"%)"},percentaString:W,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return V(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:V,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return j[t.slice(0,3)]}};function O(t){if(t){var e=[0,0,0],i=1,n=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(n){a=(n=n[1])[3];for(var o=0;o<e.length;o++)e[o]=parseInt(n[o]+n[o],16);a&&(i=Math.round(parseInt(a+a,16)/255*100)/100)}else if(n=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=n[2],n=n[1];for(o=0;o<e.length;o++)e[o]=parseInt(n.slice(2*o,2*o+2),16);a&&(i=Math.round(parseInt(a,16)/255*100)/100)}else if(n=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(o=0;o<e.length;o++)e[o]=parseInt(n[o+1]);i=parseFloat(n[4])}else if(n=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(o=0;o<e.length;o++)e[o]=Math.round(2.55*parseFloat(n[o+1]));i=parseFloat(n[4])}else if(n=t.match(/(\w+)/)){if("transparent"==n[1])return[0,0,0,0];if(!(e=L[n[1]]))return}for(o=0;o<e.length;o++)e[o]=E(e[o],0,255);return i=i||0==i?E(i,0,1):1,e[3]=i,e}}function z(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var i=parseFloat(e[4]);return[E(parseInt(e[1]),0,360),E(parseFloat(e[2]),0,100),E(parseFloat(e[3]),0,100),E(isNaN(i)?1:i,0,1)]}}}function B(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var i=parseFloat(e[4]);return[E(parseInt(e[1]),0,360),E(parseFloat(e[2]),0,100),E(parseFloat(e[3]),0,100),E(isNaN(i)?1:i,0,1)]}}}function N(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function W(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function V(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function E(t,e,i){return Math.min(Math.max(e,t),i)}function H(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var j={};for(var q in L)j[L[q]]=q;var Y=function(t){return t instanceof Y?t:this instanceof Y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=R.getRgba(t))?this.setValues("rgb",e):(e=R.getHsla(t))?this.setValues("hsl",e):(e=R.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new Y(t);var e};Y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return R.hexString(this.values.rgb)},rgbString:function(){return R.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return R.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return R.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return R.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return R.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return R.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return R.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],i=0;i<t.length;i++){var n=t[i]/255;e[i]=n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),i=t.luminosity();return e>i?(e+.05)/(i+.05):(i+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,i=(e[0]+t)%360;return e[0]=i<0?360+i:i,this.setValues("hsl",e),this},mix:function(t,e){var i=t,n=void 0===e?.5:e,a=2*n-1,o=this.alpha()-i.alpha(),r=((a*o==-1?a:(a+o)/(1+a*o))+1)/2,s=1-r;return this.rgb(r*this.red()+s*i.red(),r*this.green()+s*i.green(),r*this.blue()+s*i.blue()).alpha(this.alpha()*n+i.alpha()*(1-n))},toJSON:function(){return this.rgb()},clone:function(){var t,e,i=new Y,n=this.values,a=i.values;for(var o in n)n.hasOwnProperty(o)&&(t=n[o],"[object Array]"===(e={}.toString.call(t))?a[o]=t.slice(0):"[object Number]"===e?a[o]=t:console.error("unexpected color value:",t));return i}},Y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},Y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},Y.prototype.getValues=function(t){for(var e=this.values,i={},n=0;n<t.length;n++)i[t.charAt(n)]=e[t][n];return 1!==e.alpha&&(i.a=e.alpha),i},Y.prototype.setValues=function(t,e){var i,n,a=this.values,o=this.spaces,r=this.maxes,s=1;if(this.valid=!0,"alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(i=0;i<t.length;i++)a[t][i]=e[t.charAt(i)];s=e.a}else if(void 0!==e[o[t][0]]){var l=o[t];for(i=0;i<t.length;i++)a[t][i]=e[l[i]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;for(i=0;i<t.length;i++)n=Math.max(0,Math.min(r[t][i],a[t][i])),a[t][i]=Math.round(n);for(var d in o)d!==t&&(a[d]=F[t][d](a[t]));return!0},Y.prototype.setSpace=function(t,e){var i=e[0];return void 0===i?this.getValues(t):("number"==typeof i&&(i=Array.prototype.slice.call(e)),this.setValues(t,i),this)},Y.prototype.setChannel=function(t,e,i){var n=this.values[t];return void 0===i?n[e]:i===n[e]?this:(n[e]=i,this.setValues(t,n),this)},"undefined"!=typeof window&&(window.Color=Y);var U,X=Y,K={noop:function(){},uid:(U=0,function(){return U++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,i){return K.valueOrDefault(K.isArray(t)?t[e]:t,i)},callback:function(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)},each:function(t,e,i,n){var a,o,r;if(K.isArray(t))if(o=t.length,n)for(a=o-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;a<o;a++)e.call(i,t[a],a);else if(K.isObject(t))for(o=(r=Object.keys(t)).length,a=0;a<o;a++)e.call(i,t[r[a]],r[a])},arrayEquals:function(t,e){var i,n,a,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,n=t.length;i<n;++i)if(a=t[i],o=e[i],a instanceof Array&&o instanceof Array){if(!K.arrayEquals(a,o))return!1}else if(a!==o)return!1;return!0},clone:function(t){if(K.isArray(t))return t.map(K.clone);if(K.isObject(t)){for(var e={},i=Object.keys(t),n=i.length,a=0;a<n;++a)e[i[a]]=K.clone(t[i[a]]);return e}return t},_merger:function(t,e,i,n){var a=e[t],o=i[t];K.isObject(a)&&K.isObject(o)?K.merge(a,o,n):e[t]=K.clone(o)},_mergerIf:function(t,e,i){var n=e[t],a=i[t];K.isObject(n)&&K.isObject(a)?K.mergeIf(n,a):e.hasOwnProperty(t)||(e[t]=K.clone(a))},merge:function(t,e,i){var n,a,o,r,s,l=K.isArray(e)?e:[e],d=l.length;if(!K.isObject(t))return t;for(n=(i=i||{}).merger||K._merger,a=0;a<d;++a)if(e=l[a],K.isObject(e))for(s=0,r=(o=Object.keys(e)).length;s<r;++s)n(o[s],t,e,i);return t},mergeIf:function(t,e){return K.merge(t,e,{merger:K._mergerIf})},extend:function(t){for(var e=function(e,i){t[i]=e},i=1,n=arguments.length;i<n;++i)K.each(arguments[i],e);return t},inherits:function(t){var e=this,i=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},n=function(){this.constructor=i};return n.prototype=e.prototype,i.prototype=new n,i.extend=K.inherits,t&&K.extend(i.prototype,t),i.__super__=e.prototype,i}},G=K;K.callCallback=K.callback,K.indexOf=function(t,e,i){return Array.prototype.indexOf.call(t,e,i)},K.getValueOrDefault=K.valueOrDefault,K.getValueAtIndexOrDefault=K.valueAtIndexOrDefault;var Z={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i))},easeOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:2==(t/=.5)?1:(i||(i=.45),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),t<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-Z.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*Z.easeInBounce(2*t):.5*Z.easeOutBounce(2*t-1)+.5}},$={effects:Z};G.easingEffects=Z;var J=Math.PI,Q=J/180,tt=2*J,et=J/2,it=J/4,nt=2*J/3,at={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,i,n,a,o){if(o){var r=Math.min(o,a/2,n/2),s=e+r,l=i+r,d=e+n-r,u=i+a-r;t.moveTo(e,l),s<d&&l<u?(t.arc(s,l,r,-J,-et),t.arc(d,l,r,-et,0),t.arc(d,u,r,0,et),t.arc(s,u,r,et,J)):s<d?(t.moveTo(s,i),t.arc(d,l,r,-et,et),t.arc(s,l,r,et,J+et)):l<u?(t.arc(s,l,r,-J,0),t.arc(s,u,r,0,J)):t.arc(s,l,r,-J,J),t.closePath(),t.moveTo(e,i)}else t.rect(e,i,n,a)},drawPoint:function(t,e,i,n,a,o){var r,s,l,d,u,h=(o||0)*Q;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(r=e.toString())&&"[object HTMLCanvasElement]"!==r){if(!(isNaN(i)||i<=0)){switch(t.beginPath(),e){default:t.arc(n,a,i,0,tt),t.closePath();break;case"triangle":t.moveTo(n+Math.sin(h)*i,a-Math.cos(h)*i),h+=nt,t.lineTo(n+Math.sin(h)*i,a-Math.cos(h)*i),h+=nt,t.lineTo(n+Math.sin(h)*i,a-Math.cos(h)*i),t.closePath();break;case"rectRounded":d=i-(u=.516*i),s=Math.cos(h+it)*d,l=Math.sin(h+it)*d,t.arc(n-s,a-l,u,h-J,h-et),t.arc(n+l,a-s,u,h-et,h),t.arc(n+s,a+l,u,h,h+et),t.arc(n-l,a+s,u,h+et,h+J),t.closePath();break;case"rect":if(!o){d=Math.SQRT1_2*i,t.rect(n-d,a-d,2*d,2*d);break}h+=it;case"rectRot":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+l,a-s),t.lineTo(n+s,a+l),t.lineTo(n-l,a+s),t.closePath();break;case"crossRot":h+=it;case"cross":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s);break;case"star":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s),h+=it,s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n+l,a-s),t.lineTo(n-l,a+s);break;case"line":s=Math.cos(h)*i,l=Math.sin(h)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l);break;case"dash":t.moveTo(n,a),t.lineTo(n+Math.cos(h)*i,a+Math.sin(h)*i)}t.fill(),t.stroke()}}else t.drawImage(e,n-e.width/2,a-e.height/2,e.width,e.height)},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,i,n){var a=i.steppedLine;if(a){if("middle"===a){var o=(e.x+i.x)/2;t.lineTo(o,n?i.y:e.y),t.lineTo(o,n?e.y:i.y)}else"after"===a&&!n||"after"!==a&&n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}else i.tension?t.bezierCurveTo(n?e.controlPointPreviousX:e.controlPointNextX,n?e.controlPointPreviousY:e.controlPointNextY,n?i.controlPointNextX:i.controlPointPreviousX,n?i.controlPointNextY:i.controlPointPreviousY,i.x,i.y):t.lineTo(i.x,i.y)}},ot=at;G.clear=at.clear,G.drawRoundedRectangle=function(t){t.beginPath(),at.roundedRect.apply(at,arguments)};var rt={_set:function(t,e){return G.merge(this[t]||(this[t]={}),e)}};rt._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var st=rt,lt=G.valueOrDefault;var dt={toLineHeight:function(t,e){var i=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,i,n,a;return G.isObject(t)?(e=+t.top||0,i=+t.right||0,n=+t.bottom||0,a=+t.left||0):e=i=n=a=+t||0,{top:e,right:i,bottom:n,left:a,height:e+n,width:a+i}},_parseFont:function(t){var e=st.global,i=lt(t.fontSize,e.defaultFontSize),n={family:lt(t.fontFamily,e.defaultFontFamily),lineHeight:G.options.toLineHeight(lt(t.lineHeight,e.defaultLineHeight),i),size:i,style:lt(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return n.string=function(t){return!t||G.isNullOrUndef(t.size)||G.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n},resolve:function(t,e,i){var n,a,o;for(n=0,a=t.length;n<a;++n)if(void 0!==(o=t[n])&&(void 0!==e&&"function"==typeof o&&(o=o(e)),void 0!==i&&G.isArray(o)&&(o=o[i]),void 0!==o))return o}},ut=G,ht=$,ct=ot,ft=dt;ut.easing=ht,ut.canvas=ct,ut.options=ft;var gt=function(t){ut.extend(this,t),this.initialize.apply(this,arguments)};ut.extend(gt.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=ut.clone(t._model)),t._start={},t},transition:function(t){var e=this,i=e._model,n=e._start,a=e._view;return i&&1!==t?(a||(a=e._view={}),n||(n=e._start={}),function(t,e,i,n){var a,o,r,s,l,d,u,h,c,f=Object.keys(i);for(a=0,o=f.length;a<o;++a)if(d=i[r=f[a]],e.hasOwnProperty(r)||(e[r]=d),(s=e[r])!==d&&"_"!==r[0]){if(t.hasOwnProperty(r)||(t[r]=s),(u=typeof d)==typeof(l=t[r]))if("string"===u){if((h=X(l)).valid&&(c=X(d)).valid){e[r]=c.mix(h,n).rgbString();continue}}else if(ut.isFinite(l)&&ut.isFinite(d)){e[r]=l+(d-l)*n;continue}e[r]=d}}(n,a,i,t),e):(e._view=i,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ut.isNumber(this._model.x)&&ut.isNumber(this._model.y)}}),gt.extend=ut.inherits;var pt=gt,mt=pt.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),vt=mt;Object.defineProperty(mt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(mt.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),st._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ut.noop,onComplete:ut.noop}});var bt={animations:[],request:null,addAnimation:function(t,e,i,n){var a,o,r=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=i,n||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=ut.findIndex(this.animations,function(e){return e.chart===t});-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=ut.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,i,n,a=this.animations,o=0;o<a.length;)e=(t=a[o]).chart,i=t.numSteps,n=Math.floor((Date.now()-t.startTime)/t.duration*i)+1,t.currentStep=Math.min(n,i),ut.callback(t.render,[e,t],e),ut.callback(t.onAnimationProgress,[t],e),t.currentStep>=i?(ut.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(o,1)):++o}},xt=ut.options.resolve,yt=["push","pop","shift","splice","unshift"];function kt(t,e){var i=t._chartjs;if(i){var n=i.listeners,a=n.indexOf(e);-1!==a&&n.splice(a,1),n.length>0||(yt.forEach(function(e){delete t[e]}),delete t._chartjs)}}var wt=function(t,e){this.initialize(t,e)};ut.extend(wt.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),i=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=i.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=i.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this.update(!0)},destroy:function(){this._data&&kt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,i=this.getMeta(),n=this.getDataset().data||[],a=i.data;for(t=0,e=n.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);i.dataset=i.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,i=this,n=i.getDataset(),a=n.data||(n.data=[]);i._data!==a&&(i._data&&kt(i._data,i),a&&Object.isExtensible(a)&&(e=i,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),yt.forEach(function(e){var i="onData"+e.charAt(0).toUpperCase()+e.slice(1),n=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=n.apply(this,e);return ut.each(t._chartjs.listeners,function(t){"function"==typeof t[i]&&t[i].apply(t,e)}),a}})}))),i._data=a),i.resyncElements()},update:ut.noop,transition:function(t){for(var e=this.getMeta(),i=e.data||[],n=i.length,a=0;a<n;++a)i[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],i=e.length,n=0;for(t.dataset&&t.dataset.draw();n<i;++n)e[n].draw()},removeHoverStyle:function(t){ut.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,n=t.custom||{},a=t._model,o=ut.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=xt([n.hoverBackgroundColor,e.hoverBackgroundColor,o(a.backgroundColor)],void 0,i),a.borderColor=xt([n.hoverBorderColor,e.hoverBorderColor,o(a.borderColor)],void 0,i),a.borderWidth=xt([n.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,i)},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,i=t.data.length,n=e.length;n<i?t.data.splice(n,i-n):n>i&&this.insertElements(i,n-i)},insertElements:function(t,e){for(var i=0;i<e;++i)this.addElementAndReset(t+i)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),wt.extend=ut.inherits;var Mt=wt;st._set("global",{elements:{arc:{backgroundColor:st.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var _t=pt.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var i=this._view;if(i){for(var n=ut.getAngleFromPoint(i,{x:t,y:e}),a=n.angle,o=n.distance,r=i.startAngle,s=i.endAngle;s<r;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<r;)a+=2*Math.PI;var l=a>=r&&a<=s,d=o>=i.innerRadius&&o<=i.outerRadius;return l&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,i=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t,e=this._chart.ctx,i=this._view,n=i.startAngle,a=i.endAngle,o="inner"===i.borderAlign?.33:0;e.save(),e.beginPath(),e.arc(i.x,i.y,Math.max(i.outerRadius-o,0),n,a),e.arc(i.x,i.y,i.innerRadius,a,n,!0),e.closePath(),e.fillStyle=i.backgroundColor,e.fill(),i.borderWidth&&("inner"===i.borderAlign?(e.beginPath(),t=o/i.outerRadius,e.arc(i.x,i.y,i.outerRadius,n-t,a+t),i.innerRadius>o?(t=o/i.innerRadius,e.arc(i.x,i.y,i.innerRadius-o,a+t,n-t,!0)):e.arc(i.x,i.y,o,a+Math.PI/2,n-Math.PI/2),e.closePath(),e.clip(),e.beginPath(),e.arc(i.x,i.y,i.outerRadius,n,a),e.arc(i.x,i.y,i.innerRadius,a,n,!0),e.closePath(),e.lineWidth=2*i.borderWidth,e.lineJoin="round"):(e.lineWidth=i.borderWidth,e.lineJoin="bevel"),e.strokeStyle=i.borderColor,e.stroke()),e.restore()}}),Ct=ut.valueOrDefault,St=st.global.defaultColor;st._set("global",{elements:{line:{tension:.4,backgroundColor:St,borderWidth:3,borderColor:St,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Pt=pt.extend({draw:function(){var t,e,i,n,a=this._view,o=this._chart.ctx,r=a.spanGaps,s=this._children.slice(),l=st.global,d=l.elements.line,u=-1;for(this._loop&&s.length&&s.push(s[0]),o.save(),o.lineCap=a.borderCapStyle||d.borderCapStyle,o.setLineDash&&o.setLineDash(a.borderDash||d.borderDash),o.lineDashOffset=Ct(a.borderDashOffset,d.borderDashOffset),o.lineJoin=a.borderJoinStyle||d.borderJoinStyle,o.lineWidth=Ct(a.borderWidth,d.borderWidth),o.strokeStyle=a.borderColor||l.defaultColor,o.beginPath(),u=-1,t=0;t<s.length;++t)e=s[t],i=ut.previousItem(s,t),n=e._view,0===t?n.skip||(o.moveTo(n.x,n.y),u=t):(i=-1===u?i:s[u],n.skip||(u!==t-1&&!r||-1===u?o.moveTo(n.x,n.y):ut.canvas.lineTo(o,i._view,e._view),u=t));o.stroke(),o.restore()}}),It=ut.valueOrDefault,At=st.global.defaultColor;function Dt(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}st._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:At,borderColor:At,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Tt=pt.extend({inRange:function(t,e){var i=this._view;return!!i&&Math.pow(t-i.x,2)+Math.pow(e-i.y,2)<Math.pow(i.hitRadius+i.radius,2)},inLabelRange:Dt,inXRange:Dt,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,i=this._chart.ctx,n=e.pointStyle,a=e.rotation,o=e.radius,r=e.x,s=e.y,l=st.global,d=l.defaultColor;e.skip||(void 0===t||ut.canvas._isPointInArea(e,t))&&(i.strokeStyle=e.borderColor||d,i.lineWidth=It(e.borderWidth,l.elements.point.borderWidth),i.fillStyle=e.backgroundColor||d,ut.canvas.drawPoint(i,n,o,r,s,a))}}),Ft=st.global.defaultColor;function Lt(t){return t&&void 0!==t.width}function Rt(t){var e,i,n,a,o;return Lt(t)?(o=t.width/2,e=t.x-o,i=t.x+o,n=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(o=t.height/2,e=Math.min(t.x,t.base),i=Math.max(t.x,t.base),n=t.y-o,a=t.y+o),{left:e,top:n,right:i,bottom:a}}function Ot(t,e,i){return t===e?i:t===i?e:t}function zt(t,e,i){var n,a,o,r,s=t.borderWidth,l=function(t){var e=t.borderSkipped,i={};return e?(t.horizontal?t.base>t.x&&(e=Ot(e,"left","right")):t.base<t.y&&(e=Ot(e,"bottom","top")),i[e]=!0,i):i}(t);return ut.isObject(s)?(n=+s.top||0,a=+s.right||0,o=+s.bottom||0,r=+s.left||0):n=a=o=r=+s||0,{t:l.top||n<0?0:n>i?i:n,r:l.right||a<0?0:a>e?e:a,b:l.bottom||o<0?0:o>i?i:o,l:l.left||r<0?0:r>e?e:r}}function Bt(t,e,i){var n=null===e,a=null===i,o=!(!t||n&&a)&&Rt(t);return o&&(n||e>=o.left&&e<=o.right)&&(a||i>=o.top&&i<=o.bottom)}st._set("global",{elements:{rectangle:{backgroundColor:Ft,borderColor:Ft,borderSkipped:"bottom",borderWidth:0}}});var Nt=pt.extend({draw:function(){var t=this._chart.ctx,e=this._view,i=function(t){var e=Rt(t),i=e.right-e.left,n=e.bottom-e.top,a=zt(t,i/2,n/2);return{outer:{x:e.left,y:e.top,w:i,h:n},inner:{x:e.left+a.l,y:e.top+a.t,w:i-a.l-a.r,h:n-a.t-a.b}}}(e),n=i.outer,a=i.inner;t.fillStyle=e.backgroundColor,t.fillRect(n.x,n.y,n.w,n.h),n.w===a.w&&n.h===a.h||(t.save(),t.beginPath(),t.rect(n.x,n.y,n.w,n.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return Bt(this._view,t,e)},inLabelRange:function(t,e){var i=this._view;return Lt(i)?Bt(i,t,null):Bt(i,null,e)},inXRange:function(t){return Bt(this._view,t,null)},inYRange:function(t){return Bt(this._view,null,t)},getCenterPoint:function(){var t,e,i=this._view;return Lt(i)?(t=i.x,e=(i.y+i.base)/2):(t=(i.x+i.base)/2,e=i.y),{x:t,y:e}},getArea:function(){var t=this._view;return Lt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),Wt={},Vt=_t,Et=Pt,Ht=Tt,jt=Nt;Wt.Arc=Vt,Wt.Line=Et,Wt.Point=Ht,Wt.Rectangle=jt;var qt=ut.options.resolve;st._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}});var Yt=Mt.extend({dataElementType:Wt.Rectangle,initialize:function(){var t;Mt.prototype.initialize.apply(this,arguments),(t=this.getMeta()).stack=this.getDataset().stack,t.bar=!0},update:function(t){var e,i,n=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,i=n.length;e<i;++e)this.updateElement(n[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.getMeta(),o=n.getDataset(),r=n._resolveElementOptions(t,e);t._xScale=n.getScaleForId(a.xAxisID),t._yScale=n.getScaleForId(a.yAxisID),t._datasetIndex=n.index,t._index=e,t._model={backgroundColor:r.backgroundColor,borderColor:r.borderColor,borderSkipped:r.borderSkipped,borderWidth:r.borderWidth,datasetLabel:o.label,label:n.chart.data.labels[e]},n._updateElementGeometry(t,e,i),t.pivot()},_updateElementGeometry:function(t,e,i){var n=this,a=t._model,o=n._getValueScale(),r=o.getBasePixel(),s=o.isHorizontal(),l=n._ruler||n.getRuler(),d=n.calculateBarValuePixels(n.index,e),u=n.calculateBarIndexPixels(n.index,e,l);a.horizontal=s,a.base=i?r:d.base,a.x=s?i?r:d.head:u.center,a.y=s?u.center:i?r:d.head,a.height=s?u.size:void 0,a.width=s?void 0:u.size},_getStacks:function(t){var e,i,n=this.chart,a=this._getIndexScale().options.stacked,o=void 0===t?n.data.datasets.length:t+1,r=[];for(e=0;e<o;++e)(i=n.getDatasetMeta(e)).bar&&n.isDatasetVisible(e)&&(!1===a||!0===a&&-1===r.indexOf(i.stack)||void 0===a&&(void 0===i.stack||-1===r.indexOf(i.stack)))&&r.push(i.stack);return r},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var i=this._getStacks(t),n=void 0!==e?i.indexOf(e):-1;return-1===n?i.length-1:n},getRuler:function(){var t,e,i=this._getIndexScale(),n=this.getStackCount(),a=this.index,o=i.isHorizontal(),r=o?i.left:i.top,s=r+(o?i.width:i.height),l=[];for(t=0,e=this.getMeta().data.length;t<e;++t)l.push(i.getPixelForValue(null,t,a));return{min:ut.isNullOrUndef(i.options.barThickness)?function(t,e){var i,n,a,o,r=t.isHorizontal()?t.width:t.height,s=t.getTicks();for(a=1,o=e.length;a<o;++a)r=Math.min(r,Math.abs(e[a]-e[a-1]));for(a=0,o=s.length;a<o;++a)n=t.getPixelForTick(a),r=a>0?Math.min(r,n-i):r,i=n;return r}(i,l):-1,pixels:l,start:r,end:s,stackCount:n,scale:i}},calculateBarValuePixels:function(t,e){var i,n,a,o,r,s,l=this.chart,d=this.getMeta(),u=this._getValueScale(),h=u.isHorizontal(),c=l.data.datasets,f=+u.getRightValue(c[t].data[e]),g=u.options.minBarLength,p=u.options.stacked,m=d.stack,v=0;if(p||void 0===p&&void 0!==m)for(i=0;i<t;++i)(n=l.getDatasetMeta(i)).bar&&n.stack===m&&n.controller._getValueScaleId()===u.id&&l.isDatasetVisible(i)&&(a=+u.getRightValue(c[i].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return o=u.getPixelForValue(v),s=(r=u.getPixelForValue(v+f))-o,void 0!==g&&Math.abs(s)<g&&(s=g,r=f>=0&&!h||f<0&&h?o-g:o+g),{size:s,base:o,head:r,center:r+s/2}},calculateBarIndexPixels:function(t,e,i){var n=i.scale.options,a="flex"===n.barThickness?function(t,e,i){var n,a=e.pixels,o=a[t],r=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=i.categoryPercentage;return null===r&&(r=o-(null===s?e.end-e.start:s-o)),null===s&&(s=o+o-r),n=o-(o-Math.min(r,s))/2*l,{chunk:Math.abs(s-r)/2*l/e.stackCount,ratio:i.barPercentage,start:n}}(e,i,n):function(t,e,i){var n,a,o=i.barThickness,r=e.stackCount,s=e.pixels[t];return ut.isNullOrUndef(o)?(n=e.min*i.categoryPercentage,a=i.barPercentage):(n=o*r,a=1),{chunk:n/r,ratio:a,start:s-n/2}}(e,i,n),o=this.getStackIndex(t,this.getMeta().stack),r=a.start+a.chunk*o+a.chunk/2,s=Math.min(ut.valueOrDefault(n.maxBarThickness,1/0),a.chunk*a.ratio);return{base:r-s/2,head:r+s/2,center:r,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),i=this.getMeta().data,n=this.getDataset(),a=i.length,o=0;for(ut.canvas.clipArea(t.ctx,t.chartArea);o<a;++o)isNaN(e.getRightValue(n.data[o]))||i[o].draw();ut.canvas.unclipArea(t.ctx)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.rectangle,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderSkipped","borderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=qt([s[a],r[a],l[a]],u,e);return d}}),Ut=ut.valueOrDefault,Xt=ut.options.resolve;st._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var i=e.datasets[t.datasetIndex].label||"",n=e.datasets[t.datasetIndex].data[t.index];return i+": ("+t.xLabel+", "+t.yLabel+", "+n.r+")"}}}});var Kt=Mt.extend({dataElementType:Wt.Point,update:function(t){var e=this,i=e.getMeta().data;ut.each(i,function(i,n){e.updateElement(i,n,t)})},updateElement:function(t,e,i){var n=this,a=n.getMeta(),o=t.custom||{},r=n.getScaleForId(a.xAxisID),s=n.getScaleForId(a.yAxisID),l=n._resolveElementOptions(t,e),d=n.getDataset().data[e],u=n.index,h=i?r.getPixelForDecimal(.5):r.getPixelForValue("object"==typeof d?d:NaN,e,u),c=i?s.getBasePixel():s.getPixelForValue(d,e,u);t._xScale=r,t._yScale=s,t._options=l,t._datasetIndex=u,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:i?0:l.radius,skip:o.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Ut(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Ut(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Ut(i.hoverBorderWidth,i.borderWidth),e.radius=i.radius+i.hoverRadius},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d=r.data[e],u={},h={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},c=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"];for(i=0,n=c.length;i<n;++i)u[a=c[i]]=Xt([s[a],r[a],l[a]],h,e);return u.radius=Xt([s.radius,d?d.r:void 0,r.radius,l.radius],h,e),u}}),Gt=ut.options.resolve,Zt=ut.valueOrDefault;st._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o<n[0].data.length;++o)e.push('<li><span style="background-color:'+n[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],r=a.data[n],s=r&&r.custom||{},l=t.options.elements.arc;return{text:i,fillStyle:Gt([s.backgroundColor,o.backgroundColor,l.backgroundColor],void 0,n),strokeStyle:Gt([s.borderColor,o.borderColor,l.borderColor],void 0,n),lineWidth:Gt([s.borderWidth,o.borderWidth,l.borderWidth],void 0,n),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i<n;++i)(a=r.getDatasetMeta(i)).data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var i=e.labels[t.index],n=": "+e.datasets[t.datasetIndex].data[t.index];return ut.isArray(i)?(i=i.slice())[0]+=n:i+=n,i}}}});var $t=Mt.extend({dataElementType:Wt.Arc,linkScales:ut.noop,getRingIndex:function(t){for(var e=0,i=0;i<t;++i)this.chart.isDatasetVisible(i)&&++e;return e},update:function(t){var e,i,n=this,a=n.chart,o=a.chartArea,r=a.options,s=o.right-o.left,l=o.bottom-o.top,d=Math.min(s,l),u={x:0,y:0},h=n.getMeta(),c=h.data,f=r.cutoutPercentage,g=r.circumference,p=n._getRingWeight(n.index);if(g<2*Math.PI){var m=r.rotation%(2*Math.PI),v=(m+=2*Math.PI*(m>=Math.PI?-1:m<-Math.PI?1:0))+g,b={x:Math.cos(m),y:Math.sin(m)},x={x:Math.cos(v),y:Math.sin(v)},y=m<=0&&v>=0||m<=2*Math.PI&&2*Math.PI<=v,k=m<=.5*Math.PI&&.5*Math.PI<=v||m<=2.5*Math.PI&&2.5*Math.PI<=v,w=m<=-Math.PI&&-Math.PI<=v||m<=Math.PI&&Math.PI<=v,M=m<=.5*-Math.PI&&.5*-Math.PI<=v||m<=1.5*Math.PI&&1.5*Math.PI<=v,_=f/100,C={x:w?-1:Math.min(b.x*(b.x<0?1:_),x.x*(x.x<0?1:_)),y:M?-1:Math.min(b.y*(b.y<0?1:_),x.y*(x.y<0?1:_))},S={x:y?1:Math.max(b.x*(b.x>0?1:_),x.x*(x.x>0?1:_)),y:k?1:Math.max(b.y*(b.y>0?1:_),x.y*(x.y>0?1:_))},P={width:.5*(S.x-C.x),height:.5*(S.y-C.y)};d=Math.min(s/P.width,l/P.height),u={x:-.5*(S.x+C.x),y:-.5*(S.y+C.y)}}for(e=0,i=c.length;e<i;++e)c[e]._options=n._resolveElementOptions(c[e],e);for(a.borderWidth=n.getMaxBorderWidth(),a.outerRadius=Math.max((d-a.borderWidth)/2,0),a.innerRadius=Math.max(f?a.outerRadius/100*f:0,0),a.radiusLength=(a.outerRadius-a.innerRadius)/(n._getVisibleDatasetWeightTotal()||1),a.offsetX=u.x*a.outerRadius,a.offsetY=u.y*a.outerRadius,h.total=n.calculateTotal(),n.outerRadius=a.outerRadius-a.radiusLength*n._getRingWeightOffset(n.index),n.innerRadius=Math.max(n.outerRadius-a.radiusLength*p,0),e=0,i=c.length;e<i;++e)n.updateElement(c[e],e,t)},updateElement:function(t,e,i){var n=this,a=n.chart,o=a.chartArea,r=a.options,s=r.animation,l=(o.left+o.right)/2,d=(o.top+o.bottom)/2,u=r.rotation,h=r.rotation,c=n.getDataset(),f=i&&s.animateRotate?0:t.hidden?0:n.calculateCircumference(c.data[e])*(r.circumference/(2*Math.PI)),g=i&&s.animateScale?0:n.innerRadius,p=i&&s.animateScale?0:n.outerRadius,m=t._options||{};ut.extend(t,{_datasetIndex:n.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:d+a.offsetY,startAngle:u,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:ut.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;i&&s.animateRotate||(v.startAngle=0===e?r.rotation:n.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),i=this.getMeta(),n=0;return ut.each(i.data,function(i,a){t=e.data[a],isNaN(t)||i.hidden||(n+=Math.abs(t))}),n},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,i,n,a,o,r,s,l,d=0,u=this.chart;if(!t)for(e=0,i=u.data.datasets.length;e<i;++e)if(u.isDatasetVisible(e)){t=(n=u.getDatasetMeta(e)).data,e!==this.index&&(o=n.controller);break}if(!t)return 0;for(e=0,i=t.length;e<i;++e)a=t[e],"inner"!==(r=o?o._resolveElementOptions(a,e):a._options).borderAlign&&(s=r.borderWidth,d=(l=r.hoverBorderWidth)>(d=s>d?s:d)?l:d);return d},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Zt(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Zt(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Zt(i.hoverBorderWidth,i.borderWidth)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=this.getDataset(),s=t.custom||{},l=o.options.elements.arc,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=Gt([s[a],r[a],l[a]],u,e);return d},_getRingWeightOffset:function(t){for(var e=0,i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e},_getRingWeight:function(t){return Math.max(Zt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});st._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}});var Jt=Yt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Qt=ut.valueOrDefault,te=ut.options.resolve,ee=ut.canvas._isPointInArea;function ie(t,e){return Qt(t.showLine,e.showLines)}st._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var ne=Mt.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,update:function(t){var e,i,n=this,a=n.getMeta(),o=a.dataset,r=a.data||[],s=n.getScaleForId(a.yAxisID),l=n.getDataset(),d=ie(l,n.chart.options);for(d&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o._scale=s,o._datasetIndex=n.index,o._children=r,o._model=n._resolveLineOptions(o),o.pivot()),e=0,i=r.length;e<i;++e)n.updateElement(r[e],e,t);for(d&&0!==o._model.tension&&n.updateBezierControlPoints(),e=0,i=r.length;e<i;++e)r[e].pivot()},updateElement:function(t,e,i){var n,a,o=this,r=o.getMeta(),s=t.custom||{},l=o.getDataset(),d=o.index,u=l.data[e],h=o.getScaleForId(r.yAxisID),c=o.getScaleForId(r.xAxisID),f=r.dataset._model,g=o._resolvePointOptions(t,e);n=c.getPixelForValue("object"==typeof u?u:NaN,e,d),a=i?h.getBasePixel():o.calculatePointY(u,e,d),t._xScale=c,t._yScale=h,t._options=g,t._datasetIndex=d,t._index=e,t._model={x:n,y:a,skip:s.skip||isNaN(n)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Qt(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolvePointOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(i=0,n=c.length;i<n;++i)d[a=c[i]]=te([s[a],r[h[a]],r[a],l[a]],u,e);return d},_resolveLineOptions:function(t){var e,i,n,a=this.chart,o=a.data.datasets[this.index],r=t.custom||{},s=a.options,l=s.elements.line,d={},u=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill","cubicInterpolationMode"];for(e=0,i=u.length;e<i;++e)d[n=u[e]]=te([r[n],o[n],l[n]]);return d.spanGaps=Qt(o.spanGaps,s.spanGaps),d.tension=Qt(o.lineTension,l.tension),d.steppedLine=te([r.steppedLine,o.steppedLine,l.stepped]),d},calculatePointY:function(t,e,i){var n,a,o,r=this.chart,s=this.getMeta(),l=this.getScaleForId(s.yAxisID),d=0,u=0;if(l.options.stacked){for(n=0;n<i;n++)if(a=r.data.datasets[n],"line"===(o=r.getDatasetMeta(n)).type&&o.yAxisID===l.id&&r.isDatasetVisible(n)){var h=Number(l.getRightValue(a.data[e]));h<0?u+=h||0:d+=h||0}var c=Number(l.getRightValue(t));return c<0?l.getPixelForValue(u+c):l.getPixelForValue(d+c)}return l.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,i,n,a=this.chart,o=this.getMeta(),r=o.dataset._model,s=a.chartArea,l=o.data||[];function d(t,e,i){return Math.max(Math.min(t,i),e)}if(r.spanGaps&&(l=l.filter(function(t){return!t._model.skip})),"monotone"===r.cubicInterpolationMode)ut.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)i=l[t]._model,n=ut.splineCurve(ut.previousItem(l,t)._model,i,ut.nextItem(l,t)._model,r.tension),i.controlPointPreviousX=n.previous.x,i.controlPointPreviousY=n.previous.y,i.controlPointNextX=n.next.x,i.controlPointNextY=n.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)i=l[t]._model,ee(i,s)&&(t>0&&ee(l[t-1]._model,s)&&(i.controlPointPreviousX=d(i.controlPointPreviousX,s.left,s.right),i.controlPointPreviousY=d(i.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&ee(l[t+1]._model,s)&&(i.controlPointNextX=d(i.controlPointNextX,s.left,s.right),i.controlPointNextY=d(i.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,i=this.getMeta(),n=i.data||[],a=e.chartArea,o=n.length,r=0;for(ie(this.getDataset(),e.options)&&(t=(i.dataset._model.borderWidth||0)/2,ut.canvas.clipArea(e.ctx,{left:a.left,right:a.right,top:a.top-t,bottom:a.bottom+t}),i.dataset.draw(),ut.canvas.unclipArea(e.ctx));r<o;++r)n[r].draw(a)},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Qt(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=Qt(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=Qt(i.hoverBorderWidth,i.borderWidth),e.radius=Qt(i.hoverRadius,i.radius)}}),ae=ut.options.resolve;st._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var i=t.data,n=i.datasets,a=i.labels;if(n.length)for(var o=0;o<n[0].data.length;++o)e.push('<li><span style="background-color:'+n[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),o=e.datasets[0],r=a.data[n].custom||{},s=t.options.elements.arc;return{text:i,fillStyle:ae([r.backgroundColor,o.backgroundColor,s.backgroundColor],void 0,n),strokeStyle:ae([r.borderColor,o.borderColor,s.borderColor],void 0,n),lineWidth:ae([r.borderWidth,o.borderWidth,s.borderWidth],void 0,n),hidden:isNaN(o.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i<n;++i)(a=r.getDatasetMeta(i)).data[o].hidden=!a.data[o].hidden;r.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var oe=Mt.extend({dataElementType:Wt.Arc,linkScales:ut.noop,update:function(t){var e,i,n,a=this,o=a.getDataset(),r=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],d=a._angles=[],u=r.data;for(a._updateRadius(),r.count=a.countVisibleElements(),e=0,i=o.data.length;e<i;e++)l[e]=s,n=a._computeAngle(e),d[e]=n,s+=n;for(e=0,i=u.length;e<i;++e)u[e]._options=a._resolveElementOptions(u[e],e),a.updateElement(u[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,i=e.chartArea,n=e.options,a=Math.min(i.right-i.left,i.bottom-i.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(n.cutoutPercentage?e.outerRadius/100*n.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,i){var n=this,a=n.chart,o=n.getDataset(),r=a.options,s=r.animation,l=a.scale,d=a.data.labels,u=l.xCenter,h=l.yCenter,c=r.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(o.data[e]),g=n._starts[e],p=g+(t.hidden?0:n._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(o.data[e]),v=t._options||{};ut.extend(t,{_datasetIndex:n.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:u,y:h,innerRadius:0,outerRadius:i?m:f,startAngle:i&&s.animateRotate?c:g,endAngle:i&&s.animateRotate?c:p,label:ut.valueAtIndexOrDefault(d,e,d[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),i=0;return ut.each(e.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor,a=ut.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=a(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=a(i.hoverBorderWidth,i.borderWidth)},_resolveElementOptions:function(t,e){var i,n,a,o=this.chart,r=this.getDataset(),s=t.custom||{},l=o.options.elements.arc,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h=["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"];for(i=0,n=h.length;i<n;++i)d[a=h[i]]=ae([s[a],r[a],l[a]],u,e);return d},_computeAngle:function(t){var e=this,i=this.getMeta().count,n=e.getDataset(),a=e.getMeta();if(isNaN(n.data[t])||a.data[t].hidden)return 0;var o={chart:e.chart,dataIndex:t,dataset:n,datasetIndex:e.index};return ae([e.chart.options.elements.arc.angle,2*Math.PI/i],o,t)}});st._set("pie",ut.clone(st.doughnut)),st._set("pie",{cutoutPercentage:0});var re=$t,se=ut.valueOrDefault,le=ut.options.resolve;st._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}});var de=Mt.extend({datasetElementType:Wt.Line,dataElementType:Wt.Point,linkScales:ut.noop,update:function(t){var e,i,n=this,a=n.getMeta(),o=a.dataset,r=a.data||[],s=n.chart.scale,l=n.getDataset();for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),o._scale=s,o._datasetIndex=n.index,o._children=r,o._loop=!0,o._model=n._resolveLineOptions(o),o.pivot(),e=0,i=r.length;e<i;++e)n.updateElement(r[e],e,t);for(n.updateBezierControlPoints(),e=0,i=r.length;e<i;++e)r[e].pivot()},updateElement:function(t,e,i){var n=this,a=t.custom||{},o=n.getDataset(),r=n.chart.scale,s=r.getPointPositionForValue(e,o.data[e]),l=n._resolvePointOptions(t,e),d=n.getMeta().dataset._model,u=i?r.xCenter:s.x,h=i?r.yCenter:s.y;t._scale=r,t._options=l,t._datasetIndex=n.index,t._index=e,t._model={x:u,y:h,skip:a.skip||isNaN(u)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:se(a.tension,d?d.tension:0),hitRadius:l.hitRadius}},_resolvePointOptions:function(t,e){var i,n,a,o=this.chart,r=o.data.datasets[this.index],s=t.custom||{},l=o.options.elements.point,d={},u={chart:o,dataIndex:e,dataset:r,datasetIndex:this.index},h={backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},c=Object.keys(h);for(i=0,n=c.length;i<n;++i)d[a=c[i]]=le([s[a],r[h[a]],r[a],l[a]],u,e);return d},_resolveLineOptions:function(t){var e,i,n,a=this.chart,o=a.data.datasets[this.index],r=t.custom||{},s=a.options.elements.line,l={},d=["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"];for(e=0,i=d.length;e<i;++e)l[n=d[e]]=le([r[n],o[n],s[n]]);return l.tension=se(o.lineTension,s.tension),l},updateBezierControlPoints:function(){var t,e,i,n,a=this.getMeta(),o=this.chart.chartArea,r=a.data||[];function s(t,e,i){return Math.max(Math.min(t,i),e)}for(t=0,e=r.length;t<e;++t)i=r[t]._model,n=ut.splineCurve(ut.previousItem(r,t,!0)._model,i,ut.nextItem(r,t,!0)._model,i.tension),i.controlPointPreviousX=s(n.previous.x,o.left,o.right),i.controlPointPreviousY=s(n.previous.y,o.top,o.bottom),i.controlPointNextX=s(n.next.x,o.left,o.right),i.controlPointNextY=s(n.next.y,o.top,o.bottom)},setHoverStyle:function(t){var e=t._model,i=t._options,n=ut.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=se(i.hoverBackgroundColor,n(i.backgroundColor)),e.borderColor=se(i.hoverBorderColor,n(i.borderColor)),e.borderWidth=se(i.hoverBorderWidth,i.borderWidth),e.radius=se(i.hoverRadius,i.radius)}});st._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}});var ue={bar:Yt,bubble:Kt,doughnut:$t,horizontalBar:Jt,line:ne,polarArea:oe,pie:re,radar:de,scatter:ne};function he(t,e){return t.native?{x:t.x,y:t.y}:ut.getRelativePosition(t,e)}function ce(t,e){var i,n,a,o,r;for(n=0,o=t.data.datasets.length;n<o;++n)if(t.isDatasetVisible(n))for(a=0,r=(i=t.getDatasetMeta(n)).data.length;a<r;++a){var s=i.data[a];s._view.skip||e(s)}}function fe(t,e){var i=[];return ce(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function ge(t,e,i,n){var a=Number.POSITIVE_INFINITY,o=[];return ce(t,function(t){if(!i||t.inRange(e.x,e.y)){var r=t.getCenterPoint(),s=n(e,r);s<a?(o=[t],a=s):s===a&&o.push(t)}}),o}function pe(t){var e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,n){var a=e?Math.abs(t.x-n.x):0,o=i?Math.abs(t.y-n.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(o,2))}}function me(t,e,i){var n=he(e,t);i.axis=i.axis||"x";var a=pe(i.axis),o=i.intersect?fe(t,n):ge(t,n,!1,a),r=[];return o.length?(t.data.datasets.forEach(function(e,i){if(t.isDatasetVisible(i)){var n=t.getDatasetMeta(i).data[o[0]._index];n&&!n._view.skip&&r.push(n)}}),r):[]}var ve={modes:{single:function(t,e){var i=he(e,t),n=[];return ce(t,function(t){if(t.inRange(i.x,i.y))return n.push(t),n}),n.slice(0,1)},label:me,index:me,dataset:function(t,e,i){var n=he(e,t);i.axis=i.axis||"xy";var a=pe(i.axis),o=i.intersect?fe(t,n):ge(t,n,!1,a);return o.length>0&&(o=t.getDatasetMeta(o[0]._datasetIndex).data),o},"x-axis":function(t,e){return me(t,e,{intersect:!1})},point:function(t,e){return fe(t,he(e,t))},nearest:function(t,e,i){var n=he(e,t);i.axis=i.axis||"xy";var a=pe(i.axis);return ge(t,n,i.intersect,a)},x:function(t,e,i){var n=he(e,t),a=[],o=!1;return ce(t,function(t){t.inXRange(n.x)&&a.push(t),t.inRange(n.x,n.y)&&(o=!0)}),i.intersect&&!o&&(a=[]),a},y:function(t,e,i){var n=he(e,t),a=[],o=!1;return ce(t,function(t){t.inYRange(n.y)&&a.push(t),t.inRange(n.x,n.y)&&(o=!0)}),i.intersect&&!o&&(a=[]),a}}};function be(t,e){return ut.where(t,function(t){return t.position===e})}function xe(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,i){var n=e?i:t,a=e?t:i;return n.weight===a.weight?n._tmpIndex_-a._tmpIndex_:n.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}function ye(t,e){ut.each(t,function(t){e[t.position]+=t.isHorizontal()?t.height:t.width})}st._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var ke={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure:function(t,e,i){for(var n,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)n=a[r],i.hasOwnProperty(n)&&(e[n]=i[n])},update:function(t,e,i){if(t){var n=t.options.layout||{},a=ut.options.toPadding(n.padding),o=a.left,r=a.right,s=a.top,l=a.bottom,d=be(t.boxes,"left"),u=be(t.boxes,"right"),h=be(t.boxes,"top"),c=be(t.boxes,"bottom"),f=be(t.boxes,"chartArea");xe(d,!0),xe(u,!1),xe(h,!0),xe(c,!1);var g,p=d.concat(u),m=h.concat(c),v=p.concat(m),b=e-o-r,x=i-s-l,y=(e-b/2)/p.length,k=b,w=x,M={top:s,left:o,bottom:l,right:r},_=[];ut.each(v,function(t){var e,i=t.isHorizontal();i?(e=t.update(t.fullWidth?b:k,x/2),w-=e.height):(e=t.update(y,w),k-=e.width),_.push({horizontal:i,width:e.width,box:t})}),g=function(t){var e=0,i=0,n=0,a=0;return ut.each(t,function(t){if(t.getPadding){var o=t.getPadding();e=Math.max(e,o.top),i=Math.max(i,o.left),n=Math.max(n,o.bottom),a=Math.max(a,o.right)}}),{top:e,left:i,bottom:n,right:a}}(v),ut.each(p,T),ye(p,M),ut.each(m,T),ye(m,M),ut.each(p,function(t){var e=ut.findNextWhere(_,function(e){return e.box===t}),i={left:0,right:0,top:M.top,bottom:M.bottom};e&&t.update(e.width,w,i)}),ye(v,M={top:s,left:o,bottom:l,right:r});var C=Math.max(g.left-M.left,0);M.left+=C,M.right+=Math.max(g.right-M.right,0);var S=Math.max(g.top-M.top,0);M.top+=S,M.bottom+=Math.max(g.bottom-M.bottom,0);var P=i-M.top-M.bottom,I=e-M.left-M.right;I===k&&P===w||(ut.each(p,function(t){t.height=P}),ut.each(m,function(t){t.fullWidth||(t.width=I)}),w=P,k=I);var A=o+C,D=s+S;ut.each(d.concat(h),F),A+=k,D+=w,ut.each(u,F),ut.each(c,F),t.chartArea={left:M.left,top:M.top,right:M.left+k,bottom:M.top+w},ut.each(f,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(k,w)})}function T(t){var e=ut.findNextWhere(_,function(e){return e.box===t});if(e)if(e.horizontal){var i={left:Math.max(M.left,g.left),right:Math.max(M.right,g.right),top:0,bottom:0};t.update(t.fullWidth?b:k,x/2,i)}else t.update(e.width,w)}function F(t){t.isHorizontal()?(t.left=t.fullWidth?o:M.left,t.right=t.fullWidth?e-r:M.left+k,t.top=D,t.bottom=D+t.height,D=t.bottom):(t.left=A,t.right=A+t.width,t.top=M.top,t.bottom=M.top+w,A=t.right)}}};var we,Me=(we=Object.freeze({default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&we.default||we,_e="$chartjs",Ce="chartjs-size-monitor",Se="chartjs-render-monitor",Pe="chartjs-render-animation",Ie=["animationstart","webkitAnimationStart"],Ae={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function De(t,e){var i=ut.getStyle(t,e),n=i&&i.match(/^(\d+)(\.\d+)?px$/);return n?Number(n[1]):void 0}var Te=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Fe(t,e,i){t.addEventListener(e,i,Te)}function Le(t,e,i){t.removeEventListener(e,i,Te)}function Re(t,e,i,n,a){return{type:t,chart:e,native:a||null,x:void 0!==i?i:null,y:void 0!==n?n:null}}function Oe(t){var e=document.createElement("div");return e.className=t||"",e}function ze(t,e,i){var n,a,o,r,s=t[_e]||(t[_e]={}),l=s.resizer=function(t){var e=Oe(Ce),i=Oe(Ce+"-expand"),n=Oe(Ce+"-shrink");i.appendChild(Oe()),n.appendChild(Oe()),e.appendChild(i),e.appendChild(n),e._reset=function(){i.scrollLeft=1e6,i.scrollTop=1e6,n.scrollLeft=1e6,n.scrollTop=1e6};var a=function(){e._reset(),t()};return Fe(i,"scroll",a.bind(i,"expand")),Fe(n,"scroll",a.bind(n,"shrink")),e}((n=function(){if(s.resizer){var n=i.options.maintainAspectRatio&&t.parentNode,a=n?n.clientWidth:0;e(Re("resize",i)),n&&n.clientWidth<a&&i.canvas&&e(Re("resize",i))}},o=!1,r=[],function(){r=Array.prototype.slice.call(arguments),a=a||this,o||(o=!0,ut.requestAnimFrame.call(window,function(){o=!1,n.apply(a,r)}))}));!function(t,e){var i=t[_e]||(t[_e]={}),n=i.renderProxy=function(t){t.animationName===Pe&&e()};ut.each(Ie,function(e){Fe(t,e,n)}),i.reflow=!!t.offsetParent,t.classList.add(Se)}(t,function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}})}function Be(t){var e=t[_e]||{},i=e.resizer;delete e.resizer,function(t){var e=t[_e]||{},i=e.renderProxy;i&&(ut.each(Ie,function(e){Le(t,e,i)}),delete e.renderProxy),t.classList.remove(Se)}(t),i&&i.parentNode&&i.parentNode.removeChild(i)}var Ne={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(){var t,e,i;this._loaded||(this._loaded=!0,this.disableCSSInjection||(e=Me,i=(t=this)._style||document.createElement("style"),t._style||(t._style=i,e="/* Chart.js */\n"+e,i.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(i)),i.appendChild(document.createTextNode(e))))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return this._ensureLoaded(),i&&i.canvas===t?(function(t,e){var i=t.style,n=t.getAttribute("height"),a=t.getAttribute("width");if(t[_e]={initial:{height:n,width:a,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===a||""===a){var o=De(t,"width");void 0!==o&&(t.width=o)}if(null===n||""===n)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var r=De(t,"height");void 0!==o&&(t.height=r)}}(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e[_e]){var i=e[_e].initial;["height","width"].forEach(function(t){var n=i[t];ut.isNullOrUndef(n)?e.removeAttribute(t):e.setAttribute(t,n)}),ut.each(i.style||{},function(t,i){e.style[i]=t}),e.width=e.width,delete e[_e]}},addEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var a=i[_e]||(i[_e]={});Fe(n,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){i(function(t,e){var i=Ae[t.type]||t.type,n=ut.getRelativePosition(t,e);return Re(i,e,n.x,n.y,t)}(e,t))})}else ze(n,i,t)},removeEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var a=((i[_e]||{}).proxies||{})[t.id+"_"+e];a&&Le(n,e,a)}else Be(n)}};ut.addEvent=Fe,ut.removeEvent=Le;var We=Ne._enabled?Ne:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Ve=ut.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},We);st._set("global",{plugins:{}});var Ee={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){-1===e.indexOf(t)&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var i=e.indexOf(t);-1!==i&&e.splice(i,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,i){var n,a,o,r,s,l=this.descriptors(t),d=l.length;for(n=0;n<d;++n)if("function"==typeof(s=(o=(a=l[n]).plugin)[e])&&((r=[t].concat(i||[])).push(a.options),!1===s.apply(o,r)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var i=[],n=[],a=t&&t.config||{},o=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach(function(t){if(-1===i.indexOf(t)){var e=t.id,a=o[e];!1!==a&&(!0===a&&(a=ut.clone(st.global.plugins[e])),i.push(t),n.push({plugin:t,options:a||{}}))}}),e.descriptors=n,e.id=this._cacheId,n},_invalidate:function(t){delete t.$plugins}},He={constructors:{},defaults:{},registerScaleType:function(t,e,i){this.constructors[t]=e,this.defaults[t]=ut.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?ut.merge({},[st.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=ut.extend(this.defaults[t],e))},addScalesToLayout:function(t){ut.each(t.scales,function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ke.addBox(t,e)})}},je=ut.valueOrDefault;st._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ut.noop,title:function(t,e){var i="",n=e.labels,a=n?n.length:0;if(t.length>0){var o=t[0];o.label?i=o.label:o.xLabel?i=o.xLabel:a>0&&o.index<a&&(i=n[o.index])}return i},afterTitle:ut.noop,beforeBody:ut.noop,beforeLabel:ut.noop,label:function(t,e){var i=e.datasets[t.datasetIndex].label||"";return i&&(i+=": "),ut.isNullOrUndef(t.value)?i+=t.yLabel:i+=t.value,i},labelColor:function(t,e){var i=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:i.borderColor,backgroundColor:i.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ut.noop,afterBody:ut.noop,beforeFooter:ut.noop,footer:ut.noop,afterFooter:ut.noop}}});var qe={average:function(t){if(!t.length)return!1;var e,i,n=0,a=0,o=0;for(e=0,i=t.length;e<i;++e){var r=t[e];if(r&&r.hasValue()){var s=r.tooltipPosition();n+=s.x,a+=s.y,++o}}return{x:n/o,y:a/o}},nearest:function(t,e){var i,n,a,o=e.x,r=e.y,s=Number.POSITIVE_INFINITY;for(i=0,n=t.length;i<n;++i){var l=t[i];if(l&&l.hasValue()){var d=l.getCenterPoint(),u=ut.distanceBetweenPoints(e,d);u<s&&(s=u,a=l)}}if(a){var h=a.tooltipPosition();o=h.x,r=h.y}return{x:o,y:r}}};function Ye(t,e){return e&&(ut.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Ue(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function Xe(t){var e=st.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:je(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:je(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:je(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:je(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:je(t.titleFontStyle,e.defaultFontStyle),titleFontSize:je(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:je(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:je(t.footerFontStyle,e.defaultFontStyle),footerFontSize:je(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function Ke(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function Ge(t){return Ye([],Ue(t))}var Ze=pt.extend({initialize:function(){this._model=Xe(this._options),this._lastActive=[]},getTitle:function(){var t=this._options.callbacks,e=t.beforeTitle.apply(this,arguments),i=t.title.apply(this,arguments),n=t.afterTitle.apply(this,arguments),a=[];return a=Ye(a,Ue(e)),a=Ye(a,Ue(i)),a=Ye(a,Ue(n))},getBeforeBody:function(){return Ge(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var i=this,n=i._options.callbacks,a=[];return ut.each(t,function(t){var o={before:[],lines:[],after:[]};Ye(o.before,Ue(n.beforeLabel.call(i,t,e))),Ye(o.lines,n.label.call(i,t,e)),Ye(o.after,Ue(n.afterLabel.call(i,t,e))),a.push(o)}),a},getAfterBody:function(){return Ge(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this._options.callbacks,e=t.beforeFooter.apply(this,arguments),i=t.footer.apply(this,arguments),n=t.afterFooter.apply(this,arguments),a=[];return a=Ye(a,Ue(e)),a=Ye(a,Ue(i)),a=Ye(a,Ue(n))},update:function(t){var e,i,n,a,o,r,s,l,d,u,h=this,c=h._options,f=h._model,g=h._model=Xe(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var k=[],w=[];y=qe[c.position].call(h,p,h._eventPosition);var M=[];for(e=0,i=p.length;e<i;++e)M.push((n=p[e],a=void 0,o=void 0,r=void 0,s=void 0,l=void 0,d=void 0,u=void 0,a=n._xScale,o=n._yScale||n._scale,r=n._index,s=n._datasetIndex,l=n._chart.getDatasetMeta(s).controller,d=l._getIndexScale(),u=l._getValueScale(),{xLabel:a?a.getLabelForIndex(r,s):"",yLabel:o?o.getLabelForIndex(r,s):"",label:d?""+d.getLabelForIndex(r,s):"",value:u?""+u.getLabelForIndex(r,s):"",index:r,datasetIndex:s,x:n._model.x,y:n._model.y}));c.filter&&(M=M.filter(function(t){return c.filter(t,m)})),c.itemSort&&(M=M.sort(function(t,e){return c.itemSort(t,e,m)})),ut.each(M,function(t){k.push(c.callbacks.labelColor.call(h,t,h._chart)),w.push(c.callbacks.labelTextColor.call(h,t,h._chart))}),g.title=h.getTitle(M,m),g.beforeBody=h.getBeforeBody(M,m),g.body=h.getBody(M,m),g.afterBody=h.getAfterBody(M,m),g.footer=h.getFooter(M,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=k,g.labelTextColors=w,g.dataPoints=M,x=function(t,e){var i=t._chart.ctx,n=2*e.yPadding,a=0,o=e.body,r=o.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);r+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,d=e.titleFontSize,u=e.bodyFontSize,h=e.footerFontSize;n+=s*d,n+=s?(s-1)*e.titleSpacing:0,n+=s?e.titleMarginBottom:0,n+=r*u,n+=r?(r-1)*e.bodySpacing:0,n+=l?e.footerMarginTop:0,n+=l*h,n+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,i.measureText(t).width+c)};return i.font=ut.fontString(d,e._titleFontStyle,e._titleFontFamily),ut.each(e.title,f),i.font=ut.fontString(u,e._bodyFontStyle,e._bodyFontFamily),ut.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?u+2:0,ut.each(o,function(t){ut.each(t.before,f),ut.each(t.lines,f),ut.each(t.after,f)}),c=0,i.font=ut.fontString(h,e._footerFontStyle,e._footerFontFamily),ut.each(e.footer,f),{width:a+=2*e.xPadding,height:n}}(this,g),b=function(t,e,i,n){var a=t.x,o=t.y,r=t.caretSize,s=t.caretPadding,l=t.cornerRadius,d=i.xAlign,u=i.yAlign,h=r+s,c=l+s;return"right"===d?a-=e.width:"center"===d&&((a-=e.width/2)+e.width>n.width&&(a=n.width-e.width),a<0&&(a=0)),"top"===u?o+=h:o-="bottom"===u?e.height+h:e.height/2,"center"===u?"left"===d?a+=h:"right"===d&&(a-=h):"left"===d?a-=c:"right"===d&&(a+=c),{x:a,y:o}}(g,x,v=function(t,e){var i,n,a,o,r,s=t._model,l=t._chart,d=t._chart.chartArea,u="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(d.left+d.right)/2,f=(d.top+d.bottom)/2;"center"===h?(i=function(t){return t<=c},n=function(t){return t>c}):(i=function(t){return t<=e.width/2},n=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},o=function(t){return t-e.width-s.caretSize-s.caretPadding<0},r=function(t){return t<=f?"top":"bottom"},i(s.x)?(u="left",a(s.x)&&(u="center",h=r(s.y))):n(s.x)&&(u="right",o(s.x)&&(u="center",h=r(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:u,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var i=this._chart.ctx,n=this._view,a=this.getCaretPosition(t,e,n);i.lineTo(a.x1,a.y1),i.lineTo(a.x2,a.y2),i.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,i){var n,a,o,r,s,l,d=i.caretSize,u=i.cornerRadius,h=i.xAlign,c=i.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(n=f)-d,o=n,r=s+d,l=s-d):(a=(n=f+p)+d,o=n,r=s-d,l=s+d);else if("left"===h?(n=(a=f+u+d)-d,o=a+d):"right"===h?(n=(a=f+p-u-d)-d,o=a+d):(n=(a=i.caretX)-d,o=a+d),"top"===c)s=(r=g)-d,l=r;else{s=(r=g+m)+d,l=r;var v=o;o=n,n=v}return{x1:n,x2:a,x3:o,y1:r,y2:s,y3:l}},drawTitle:function(t,e,i){var n=e.title;if(n.length){t.x=Ke(e,e._titleAlign),i.textAlign=e._titleAlign,i.textBaseline="top";var a,o,r=e.titleFontSize,s=e.titleSpacing;for(i.fillStyle=e.titleFontColor,i.font=ut.fontString(r,e._titleFontStyle,e._titleFontFamily),a=0,o=n.length;a<o;++a)i.fillText(n[a],t.x,t.y),t.y+=r+s,a+1===n.length&&(t.y+=e.titleMarginBottom-s)}},drawBody:function(t,e,i){var n,a=e.bodyFontSize,o=e.bodySpacing,r=e._bodyAlign,s=e.body,l=e.displayColors,d=e.labelColors,u=0,h=l?Ke(e,"left"):0;i.textAlign=r,i.textBaseline="top",i.font=ut.fontString(a,e._bodyFontStyle,e._bodyFontFamily),t.x=Ke(e,r);var c=function(e){i.fillText(e,t.x+u,t.y),t.y+=a+o};i.fillStyle=e.bodyFontColor,ut.each(e.beforeBody,c),u=l&&"right"!==r?"center"===r?a/2+1:a+2:0,ut.each(s,function(o,r){n=e.labelTextColors[r],i.fillStyle=n,ut.each(o.before,c),ut.each(o.lines,function(o){l&&(i.fillStyle=e.legendColorBackground,i.fillRect(h,t.y,a,a),i.lineWidth=1,i.strokeStyle=d[r].borderColor,i.strokeRect(h,t.y,a,a),i.fillStyle=d[r].backgroundColor,i.fillRect(h+1,t.y+1,a-2,a-2),i.fillStyle=n),c(o)}),ut.each(o.after,c)}),u=0,ut.each(e.afterBody,c),t.y-=o},drawFooter:function(t,e,i){var n=e.footer;n.length&&(t.x=Ke(e,e._footerAlign),t.y+=e.footerMarginTop,i.textAlign=e._footerAlign,i.textBaseline="top",i.fillStyle=e.footerFontColor,i.font=ut.fontString(e.footerFontSize,e._footerFontStyle,e._footerFontFamily),ut.each(n,function(n){i.fillText(n,t.x,t.y),t.y+=e.footerFontSize+e.footerSpacing}))},drawBackground:function(t,e,i,n){i.fillStyle=e.backgroundColor,i.strokeStyle=e.borderColor,i.lineWidth=e.borderWidth;var a=e.xAlign,o=e.yAlign,r=t.x,s=t.y,l=n.width,d=n.height,u=e.cornerRadius;i.beginPath(),i.moveTo(r+u,s),"top"===o&&this.drawCaret(t,n),i.lineTo(r+l-u,s),i.quadraticCurveTo(r+l,s,r+l,s+u),"center"===o&&"right"===a&&this.drawCaret(t,n),i.lineTo(r+l,s+d-u),i.quadraticCurveTo(r+l,s+d,r+l-u,s+d),"bottom"===o&&this.drawCaret(t,n),i.lineTo(r+u,s+d),i.quadraticCurveTo(r,s+d,r,s+d-u),"center"===o&&"left"===a&&this.drawCaret(t,n),i.lineTo(r,s+u),i.quadraticCurveTo(r,s,r+u,s),i.closePath(),i.fill(),e.borderWidth>0&&i.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i={width:e.width,height:e.height},n={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(t.save(),t.globalAlpha=a,this.drawBackground(n,e,t,i),n.y+=e.yPadding,this.drawTitle(n,e,t),this.drawBody(n,e,t),this.drawFooter(n,e,t),t.restore())}},handleEvent:function(t){var e,i=this,n=i._options;return i._lastActive=i._lastActive||[],"mouseout"===t.type?i._active=[]:i._active=i._chart.getElementsAtEventForMode(t,n.mode,n),(e=!ut.arrayEquals(i._active,i._lastActive))&&(i._lastActive=i._active,(n.enabled||n.custom)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0),i.pivot())),e}}),$e=qe,Je=Ze;Je.positioners=$e;var Qe=ut.valueOrDefault;function ti(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,i,n){if("xAxes"===t||"yAxes"===t){var a,o,r,s=i[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)r=i[t][a],o=Qe(r.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||r.type&&r.type!==e[t][a].type?ut.merge(e[t][a],[He.getScaleDefaults(o),r]):ut.merge(e[t][a],r)}else ut._merger(t,e,i,n)}})}function ei(){return ut.merge({},[].slice.call(arguments),{merger:function(t,e,i,n){var a=e[t]||{},o=i[t];"scales"===t?e[t]=ti(a,o):"scale"===t?e[t]=ut.merge(a,[He.getScaleDefaults(o.type),o]):ut._merger(t,e,i,n)}})}function ii(t){return"top"===t||"bottom"===t}st._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var ni=function(t,e){return this.construct(t,e),this};ut.extend(ni.prototype,{construct:function(t,e){var i=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=ei(st.global,st[t.type],t.options||{}),t}(e);var n=Ve.acquireContext(t,e),a=n&&n.canvas,o=a&&a.height,r=a&&a.width;i.id=ut.uid(),i.ctx=n,i.canvas=a,i.config=e,i.width=r,i.height=o,i.aspectRatio=o?r/o:null,i.options=e.options,i._bufferedRender=!1,i.chart=i,i.controller=i,ni.instances[i.id]=i,Object.defineProperty(i,"data",{get:function(){return i.config.data},set:function(t){i.config.data=t}}),n&&a?(i.initialize(),i.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Ee.notify(t,"beforeInit"),ut.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),Ee.notify(t,"afterInit"),t},clear:function(){return ut.canvas.clear(this),this},stop:function(){return bt.cancelAnimation(this),this},resize:function(t){var e=this,i=e.options,n=e.canvas,a=i.maintainAspectRatio&&e.aspectRatio||null,o=Math.max(0,Math.floor(ut.getMaximumWidth(n))),r=Math.max(0,Math.floor(a?o/a:ut.getMaximumHeight(n)));if((e.width!==o||e.height!==r)&&(n.width=e.width=o,n.height=e.height=r,n.style.width=o+"px",n.style.height=r+"px",ut.retinaScale(e,i.devicePixelRatio),!t)){var s={width:o,height:r};Ee.notify(e,"resize",[s]),i.onResize&&i.onResize(e,s),e.stop(),e.update({duration:i.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},i=t.scale;ut.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),ut.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),i&&(i.id=i.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,i=t.scales||{},n=[],a=Object.keys(i).reduce(function(t,e){return t[e]=!1,t},{});e.scales&&(n=n.concat((e.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(e.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),e.scale&&n.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ut.each(n,function(e){var n=e.options,o=n.id,r=Qe(n.type,e.dtype);ii(n.position)!==ii(e.dposition)&&(n.position=e.dposition),a[o]=!0;var s=null;if(o in i&&i[o].type===r)(s=i[o]).options=n,s.ctx=t.ctx,s.chart=t;else{var l=He.getScaleConstructor(r);if(!l)return;s=new l({id:o,type:r,options:n,ctx:t.ctx,chart:t}),i[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)}),ut.each(a,function(t,e){t||delete i[e]}),t.scales=i,He.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t=this,e=[];return ut.each(t.data.datasets,function(i,n){var a=t.getDatasetMeta(n),o=i.type||t.config.type;if(a.type&&a.type!==o&&(t.destroyDatasetMeta(n),a=t.getDatasetMeta(n)),a.type=o,a.controller)a.controller.updateIndex(n),a.controller.linkScales();else{var r=ue[a.type];if(void 0===r)throw new Error('"'+a.type+'" is not a chart type.');a.controller=new r(t,n),e.push(a.controller)}},t),e},resetElements:function(){var t=this;ut.each(t.data.datasets,function(e,i){t.getDatasetMeta(i).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,i,n=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),i=(e=n).options,ut.each(e.scales,function(t){ke.removeBox(e,t)}),i=ei(st.global,st[e.config.type],i),e.options=e.config.options=i,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=i.tooltips,e.tooltip.initialize(),Ee._invalidate(n),!1!==Ee.notify(n,"beforeUpdate")){n.tooltip._data=n.data;var a=n.buildOrUpdateControllers();ut.each(n.data.datasets,function(t,e){n.getDatasetMeta(e).controller.buildOrUpdateElements()},n),n.updateLayout(),n.options.animation&&n.options.animation.duration&&ut.each(a,function(t){t.reset()}),n.updateDatasets(),n.tooltip.initialize(),n.lastActive=[],Ee.notify(n,"afterUpdate"),n._bufferedRender?n._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:n.render(t)}},updateLayout:function(){!1!==Ee.notify(this,"beforeLayout")&&(ke.update(this,this.width,this.height),Ee.notify(this,"afterScaleUpdate"),Ee.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==Ee.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Ee.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),i={meta:e,index:t};!1!==Ee.notify(this,"beforeDatasetUpdate",[i])&&(e.controller.update(),Ee.notify(this,"afterDatasetUpdate",[i]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var i=e.options.animation,n=Qe(t.duration,i&&i.duration),a=t.lazy;if(!1!==Ee.notify(e,"beforeRender")){var o=function(t){Ee.notify(e,"afterRender"),ut.callback(i&&i.onComplete,[t],e)};if(i&&n){var r=new vt({numSteps:n/16.66,easing:t.easing||i.easing,render:function(t,e){var i=ut.easing.effects[e.easing],n=e.currentStep,a=n/e.numSteps;t.draw(i(a),a,n)},onAnimationProgress:i.onProgress,onAnimationComplete:o});bt.addAnimation(e,r,n,a)}else e.draw(),o(new vt({numSteps:0,chart:e}));return e}},draw:function(t){var e=this;e.clear(),ut.isNullOrUndef(t)&&(t=1),e.transition(t),e.width<=0||e.height<=0||!1!==Ee.notify(e,"beforeDraw",[t])&&(ut.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.drawDatasets(t),e._drawTooltip(t),Ee.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=0,i=(this.data.datasets||[]).length;e<i;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(!1!==Ee.notify(e,"beforeDatasetsDraw",[t])){for(var i=(e.data.datasets||[]).length-1;i>=0;--i)e.isDatasetVisible(i)&&e.drawDataset(i,t);Ee.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var i=this.getDatasetMeta(t),n={meta:i,index:t,easingValue:e};!1!==Ee.notify(this,"beforeDatasetDraw",[n])&&(i.controller.draw(e),Ee.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,i={tooltip:e,easingValue:t};!1!==Ee.notify(this,"beforeTooltipDraw",[i])&&(e.draw(),Ee.notify(this,"afterTooltipDraw",[i]))},getElementAtEvent:function(t){return ve.modes.single(this,t)},getElementsAtEvent:function(t){return ve.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return ve.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,i){var n=ve.modes[e];return"function"==typeof n?n(this,t,i):[]},getDatasetAtEvent:function(t){return ve.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var i=e._meta[this.id];return i||(i=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,i=this.data.datasets.length;e<i;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,i=this.data.datasets[t],n=i._meta&&i._meta[e];n&&(n.controller.destroy(),delete i._meta[e])},destroy:function(){var t,e,i=this,n=i.canvas;for(i.stop(),t=0,e=i.data.datasets.length;t<e;++t)i.destroyDatasetMeta(t);n&&(i.unbindEvents(),ut.canvas.clear(i),Ve.releaseContext(i.ctx),i.canvas=null,i.ctx=null),Ee.notify(i,"destroy"),delete ni.instances[i.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Je({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},i=function(){t.eventHandler.apply(t,arguments)};ut.each(t.options.events,function(n){Ve.addEventListener(t,n,i),e[n]=i}),t.options.responsive&&(i=function(){t.resize()},Ve.addEventListener(t,"resize",i),e.resize=i)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,ut.each(e,function(e,i){Ve.removeEventListener(t,i,e)}))},updateHoverStyle:function(t,e,i){var n,a,o,r=i?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)(n=t[a])&&this.getDatasetMeta(n._datasetIndex).controller[r](n)},eventHandler:function(t){var e=this,i=e.tooltip;if(!1!==Ee.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var n=e.handleEvent(t);i&&(n=i._start?i.handleEvent(t):n|i.handleEvent(t)),Ee.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):n&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,i=this,n=i.options||{},a=n.hover;return i.lastActive=i.lastActive||[],"mouseout"===t.type?i.active=[]:i.active=i.getElementsAtEventForMode(t,a.mode,a),ut.callback(n.onHover||n.hover.onHover,[t.native,i.active],i),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(i,t.native,i.active),i.lastActive.length&&i.updateHoverStyle(i.lastActive,a.mode,!1),i.active.length&&a.mode&&i.updateHoverStyle(i.active,a.mode,!0),e=!ut.arrayEquals(i.active,i.lastActive),i.lastActive=i.active,e}}),ni.instances={};var ai=ni;ni.Controller=ni,ni.types={},ut.configMerge=ei,ut.scaleMerge=ti;function oi(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function ri(t){this.options=t||{}}ut.extend(ri.prototype,{formats:oi,parse:oi,format:oi,add:oi,diff:oi,startOf:oi,endOf:oi,_create:function(t){return t}}),ri.override=function(t){ut.extend(ri.prototype,t)};var si={_date:ri},li={formatters:{values:function(t){return ut.isArray(t)?t:""+t},linear:function(t,e,i){var n=i.length>3?i[2]-i[1]:i[1]-i[0];Math.abs(n)>1&&t!==Math.floor(t)&&(n=t-Math.floor(t));var a=ut.log10(Math.abs(n)),o="";if(0!==t)if(Math.max(Math.abs(i[0]),Math.abs(i[i.length-1]))<1e-4){var r=ut.log10(Math.abs(t));o=t.toExponential(Math.floor(r)-Math.floor(a))}else{var s=-1*Math.floor(a);s=Math.max(Math.min(s,20),0),o=t.toFixed(s)}else o="0";return o},logarithmic:function(t,e,i){var n=t/Math.pow(10,Math.floor(ut.log10(t)));return 0===t?"0":1===n||2===n||5===n||0===e||e===i.length-1?t.toExponential():""}}},di=ut.valueOrDefault,ui=ut.valueAtIndexOrDefault;function hi(t){var e,i,n=[];for(e=0,i=t.length;e<i;++e)n.push(t[e].label);return n}function ci(t,e,i){return ut.isArray(e)?ut.longestText(t,i,e):t.measureText(e).width}st._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:li.formatters.values,minor:{},major:{}}});var fi=pt.extend({getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},mergeTicksOptions:function(){var t=this.options.ticks;for(var e in!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1}),t)"major"!==e&&"minor"!==e&&(void 0===t.minor[e]&&(t.minor[e]=t[e]),void 0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){ut.callback(this.options.beforeUpdate,[this])},update:function(t,e,i){var n,a,o,r,s,l,d=this;for(d.beforeUpdate(),d.maxWidth=t,d.maxHeight=e,d.margins=ut.extend({left:0,right:0,top:0,bottom:0},i),d._maxLabelLines=0,d.longestLabelWidth=0,d.longestTextCache=d.longestTextCache||{},d.beforeSetDimensions(),d.setDimensions(),d.afterSetDimensions(),d.beforeDataLimits(),d.determineDataLimits(),d.afterDataLimits(),d.beforeBuildTicks(),s=d.buildTicks()||[],s=d.afterBuildTicks(s)||s,d.beforeTickToLabelConversion(),o=d.convertTicksToLabels(s)||d.ticks,d.afterTickToLabelConversion(),d.ticks=o,n=0,a=o.length;n<a;++n)r=o[n],(l=s[n])?l.label=r:s.push(l={label:r,major:!1});return d._ticks=s,d.beforeCalculateTickRotation(),d.calculateTickRotation(),d.afterCalculateTickRotation(),d.beforeFit(),d.fit(),d.afterFit(),d.afterUpdate(),d.minSize},afterUpdate:function(){ut.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ut.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){ut.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ut.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ut.noop,afterDataLimits:function(){ut.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ut.callback(this.options.beforeBuildTicks,[this])},buildTicks:ut.noop,afterBuildTicks:function(t){var e=this;return ut.isArray(t)&&t.length?ut.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=ut.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){ut.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){ut.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ut.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,i=t.options.ticks,n=hi(t._ticks),a=ut.options._parseFont(i);e.font=a.string;var o=i.minRotation||0;if(n.length&&t.options.display&&t.isHorizontal())for(var r,s=ut.longestText(e,a.string,n,t.longestTextCache),l=s,d=t.getPixelForTick(1)-t.getPixelForTick(0)-6;l>d&&o<i.maxRotation;){var u=ut.toRadians(o);if(r=Math.cos(u),Math.sin(u)*s>t.maxHeight){o--;break}o++,l=r*s}t.labelRotation=o},afterCalculateTickRotation:function(){ut.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ut.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},i=hi(t._ticks),n=t.options,a=n.ticks,o=n.scaleLabel,r=n.gridLines,s=t._isVisible(),l=n.position,d=t.isHorizontal(),u=ut.options._parseFont,h=u(a),c=n.gridLines.tickMarkLength;if(e.width=d?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:s&&r.drawTicks?c:0,e.height=d?s&&r.drawTicks?c:0:t.maxHeight,o.display&&s){var f=u(o),g=ut.options.toPadding(o.padding),p=f.lineHeight+g.height;d?e.height+=p:e.width+=p}if(a.display&&s){var m=ut.longestText(t.ctx,h.string,i,t.longestTextCache),v=ut.numberOfLabelLines(i),b=.5*h.size,x=t.options.ticks.padding;if(t._maxLabelLines=v,t.longestLabelWidth=m,d){var y=ut.toRadians(t.labelRotation),k=Math.cos(y),w=Math.sin(y)*m+h.lineHeight*v+b;e.height=Math.min(t.maxHeight,e.height+w+x),t.ctx.font=h.string;var M,_,C=ci(t.ctx,i[0],h.string),S=ci(t.ctx,i[i.length-1],h.string),P=t.getPixelForTick(0)-t.left,I=t.right-t.getPixelForTick(i.length-1);0!==t.labelRotation?(M="bottom"===l?k*C:k*b,_="bottom"===l?k*b:k*S):(M=C/2,_=S/2),t.paddingLeft=Math.max(M-P,0)+3,t.paddingRight=Math.max(_-I,0)+3}else a.mirror?m=0:m+=x+b,e.width=Math.min(t.maxWidth,e.width+m),t.paddingTop=h.size/2,t.paddingBottom=h.size/2}t.handleMargins(),t.width=e.width,t.height=e.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){ut.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(ut.isNullOrUndef(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:ut.noop,getPixelForValue:ut.noop,getValueForPixel:ut.noop,getPixelForTick:function(t){var e=this,i=e.options.offset;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(i?0:1),1),a=n*t+e.paddingLeft;i&&(a+=n/2);var o=e.left+a;return o+=e.isFullWidth()?e.margins.left:0}var r=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,n=e.left+i;return n+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,i,n=this,a=n.isHorizontal(),o=n.options.ticks.minor,r=t.length,s=!1,l=o.maxTicksLimit,d=n._tickSize()*(r-1),u=a?n.width-(n.paddingLeft+n.paddingRight):n.height-(n.paddingTop+n.PaddingBottom),h=[];for(d>u&&(s=1+Math.floor(d/u)),r>l&&(s=Math.max(s,1+Math.floor(r/l))),e=0;e<r;e++)i=t[e],s>1&&e%s>0&&delete i.label,h.push(i);return h},_tickSize:function(){var t=this,e=t.isHorizontal(),i=t.options.ticks.minor,n=ut.toRadians(t.labelRotation),a=Math.abs(Math.cos(n)),o=Math.abs(Math.sin(n)),r=i.autoSkipPadding||0,s=t.longestLabelWidth+r||0,l=ut.options._parseFont(i),d=t._maxLabelLines*l.lineHeight+r||0;return e?d*a>s*o?s/a:d/o:d*o<s*a?d/a:s/o},_isVisible:function(){var t,e,i,n=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=n.data.datasets.length;t<e;++t)if(n.isDatasetVisible(t)&&((i=n.getDatasetMeta(t)).xAxisID===this.id||i.yAxisID===this.id))return!0;return!1},draw:function(t){var e=this,i=e.options;if(e._isVisible()){var n,a,o,r=e.chart,s=e.ctx,l=st.global.defaultFontColor,d=i.ticks.minor,u=i.ticks.major||d,h=i.gridLines,c=i.scaleLabel,f=i.position,g=0!==e.labelRotation,p=d.mirror,m=e.isHorizontal(),v=ut.options._parseFont,b=d.display&&d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),x=di(d.fontColor,l),y=v(d),k=y.lineHeight,w=di(u.fontColor,l),M=v(u),_=d.padding,C=d.labelOffset,S=h.drawTicks?h.tickMarkLength:0,P=di(c.fontColor,l),I=v(c),A=ut.options.toPadding(c.padding),D=ut.toRadians(e.labelRotation),T=[],F=h.drawBorder?ui(h.lineWidth,0,0):0,L=ut._alignPixel;"top"===f?(n=L(r,e.bottom,F),a=e.bottom-S,o=n-F/2):"bottom"===f?(n=L(r,e.top,F),a=n+F/2,o=e.top+S):"left"===f?(n=L(r,e.right,F),a=e.right-S,o=n-F/2):(n=L(r,e.left,F),a=n+F/2,o=e.left+S);if(ut.each(b,function(n,s){if(!ut.isNullOrUndef(n.label)){var l,d,u,c,v,b,x,y,w,M,P,I,A,R,O,z,B=n.label;s===e.zeroLineIndex&&i.offset===h.offsetGridLines?(l=h.zeroLineWidth,d=h.zeroLineColor,u=h.zeroLineBorderDash||[],c=h.zeroLineBorderDashOffset||0):(l=ui(h.lineWidth,s),d=ui(h.color,s),u=h.borderDash||[],c=h.borderDashOffset||0);var N=ut.isArray(B)?B.length:1,W=function(t,e,i){var n=t.getPixelForTick(e);return i&&(1===t.getTicks().length?n-=t.isHorizontal()?Math.max(n-t.left,t.right-n):Math.max(n-t.top,t.bottom-n):n-=0===e?(t.getPixelForTick(1)-n)/2:(n-t.getPixelForTick(e-1))/2),n}(e,s,h.offsetGridLines);if(m){var V=S+_;W<e.left-1e-7&&(d="rgba(0,0,0,0)"),v=x=w=P=L(r,W,l),b=a,y=o,A=e.getPixelForTick(s)+C,"top"===f?(M=L(r,t.top,F)+F/2,I=t.bottom,O=((g?1:.5)-N)*k,z=g?"left":"center",R=e.bottom-V):(M=t.top,I=L(r,t.bottom,F)-F/2,O=(g?0:.5)*k,z=g?"right":"center",R=e.top+V)}else{var E=(p?0:S)+_;W<e.top-1e-7&&(d="rgba(0,0,0,0)"),v=a,x=o,b=y=M=I=L(r,W,l),R=e.getPixelForTick(s)+C,O=(1-N)*k/2,"left"===f?(w=L(r,t.left,F)+F/2,P=t.right,z=p?"left":"right",A=e.right-E):(w=t.left,P=L(r,t.right,F)-F/2,z=p?"right":"left",A=e.left+E)}T.push({tx1:v,ty1:b,tx2:x,ty2:y,x1:w,y1:M,x2:P,y2:I,labelX:A,labelY:R,glWidth:l,glColor:d,glBorderDash:u,glBorderDashOffset:c,rotation:-1*D,label:B,major:n.major,textOffset:O,textAlign:z})}}),ut.each(T,function(t){var e=t.glWidth,i=t.glColor;if(h.display&&e&&i&&(s.save(),s.lineWidth=e,s.strokeStyle=i,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),h.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),d.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=t.major?M.string:y.string,s.fillStyle=t.major?w:x,s.textBaseline="middle",s.textAlign=t.textAlign;var n=t.label,a=t.textOffset;if(ut.isArray(n))for(var o=0;o<n.length;++o)s.fillText(""+n[o],0,a),a+=k;else s.fillText(n,0,a);s.restore()}}),c.display){var R,O,z=0,B=I.lineHeight/2;if(m)R=e.left+(e.right-e.left)/2,O="bottom"===f?e.bottom-B-A.bottom:e.top+B+A.top;else{var N="left"===f;R=N?e.left+B+A.top:e.right-B-A.top,O=e.top+(e.bottom-e.top)/2,z=N?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(R,O),s.rotate(z),s.textAlign="center",s.textBaseline="middle",s.fillStyle=P,s.font=I.string,s.fillText(c.labelString,0,0),s.restore()}if(F){var W,V,E,H,j=F,q=ui(h.lineWidth,b.length-1,0);m?(W=L(r,e.left,j)-j/2,V=L(r,e.right,q)+q/2,E=H=n):(E=L(r,e.top,j)-j/2,H=L(r,e.bottom,q)+q/2,W=V=n),s.lineWidth=F,s.strokeStyle=ui(h.color,0),s.beginPath(),s.moveTo(W,E),s.lineTo(V,H),s.stroke()}}}}),gi=fi.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,i=e.getLabels();e.minIndex=0,e.maxIndex=i.length-1,void 0!==e.options.ticks.min&&(t=i.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=i.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=i[e.minIndex],e.max=i[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var i=this,n=i.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===i.id?i.getRightValue(n.data.datasets[e].data[t]):i.ticks[t-i.minIndex]},getPixelForValue:function(t,e){var i,n=this,a=n.options.offset,o=Math.max(n.maxIndex+1-n.minIndex-(a?0:1),1);if(null!=t&&(i=n.isHorizontal()?t.x:t.y),void 0!==i||void 0!==t&&isNaN(e)){t=i||t;var r=n.getLabels().indexOf(t);e=-1!==r?r:e}if(n.isHorizontal()){var s=n.width/o,l=s*(e-n.minIndex);return a&&(l+=s/2),n.left+l}var d=n.height/o,u=d*(e-n.minIndex);return a&&(u+=d/2),n.top+u},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,i=e.options.offset,n=Math.max(e._ticks.length-(i?0:1),1),a=e.isHorizontal(),o=(a?e.width:e.height)/n;return t-=a?e.left:e.top,i&&(t-=o/2),(t<=0?0:Math.round(t/o))+e.minIndex},getBasePixel:function(){return this.bottom}}),pi={position:"bottom"};gi._defaults=pi;var mi=ut.noop,vi=ut.isNullOrUndef;var bi=fi.extend({getRightValue:function(t){return"string"==typeof t?+t:fi.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var i=ut.sign(t.min),n=ut.sign(t.max);i<0&&n<0?t.max=0:i>0&&n>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,o=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==o&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,i=e.stepSize,n=e.maxTicksLimit;return i?t=Math.ceil(this.max/i)-Math.floor(this.min/i)+1:(t=this._computeTickLimit(),n=n||11),n&&(t=Math.min(n,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:mi,buildTicks:function(){var t=this,e=t.options.ticks,i=t.getTickLimit(),n={maxTicks:i=Math.max(2,i),min:e.min,max:e.max,precision:e.precision,stepSize:ut.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var i,n,a,o,r=[],s=t.stepSize,l=s||1,d=t.maxTicks-1,u=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=ut.niceNum((g-f)/d/l)*l;if(p<1e-14&&vi(u)&&vi(h))return[f,g];(o=Math.ceil(g/p)-Math.floor(f/p))>d&&(p=ut.niceNum(o*p/d/l)*l),s||vi(c)?i=Math.pow(10,ut._decimalPlaces(p)):(i=Math.pow(10,c),p=Math.ceil(p*i)/i),n=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!vi(u)&&ut.almostWhole(u/p,p/1e3)&&(n=u),!vi(h)&&ut.almostWhole(h/p,p/1e3)&&(a=h)),o=(a-n)/p,o=ut.almostEquals(o,Math.round(o),p/1e3)?Math.round(o):Math.ceil(o),n=Math.round(n*i)/i,a=Math.round(a*i)/i,r.push(vi(u)?n:u);for(var m=1;m<o;++m)r.push(Math.round((n+m*p)*i)/i);return r.push(vi(h)?a:h),r}(n,t);t.handleDirectionalChanges(),t.max=ut.max(a),t.min=ut.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),fi.prototype.convertTicksToLabels.call(t)}}),xi={position:"left",ticks:{callback:li.formatters.linear}},yi=bi.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,a=t.isHorizontal();function o(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null;var r=e.stacked;if(void 0===r&&ut.each(n,function(t,e){if(!r){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&&o(n)&&void 0!==n.stack&&(r=!0)}}),e.stacked||r){var s={};ut.each(n,function(n,a){var r=i.getDatasetMeta(a),l=[r.type,void 0===e.stacked&&void 0===r.stack?a:"",r.stack].join(".");void 0===s[l]&&(s[l]={positiveValues:[],negativeValues:[]});var d=s[l].positiveValues,u=s[l].negativeValues;i.isDatasetVisible(a)&&o(r)&&ut.each(n.data,function(i,n){var a=+t.getRightValue(i);isNaN(a)||r.data[n].hidden||(d[n]=d[n]||0,u[n]=u[n]||0,e.relativePoints?d[n]=100:a<0?u[n]+=a:d[n]+=a)})}),ut.each(s,function(e){var i=e.positiveValues.concat(e.negativeValues),n=ut.min(i),a=ut.max(i);t.min=null===t.min?n:Math.min(t.min,n),t.max=null===t.max?a:Math.max(t.max,a)})}else ut.each(n,function(e,n){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&o(a)&&ut.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||a.data[i].hidden||(null===t.min?t.min=n:n<t.min&&(t.min=n),null===t.max?t.max=n:n>t.max&&(t.max=n))})});t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=ut.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,i=e.start,n=+e.getRightValue(t),a=e.end-i;return e.isHorizontal()?e.left+e.width/a*(n-i):e.bottom-e.height/a*(n-i)},getValueForPixel:function(t){var e=this,i=e.isHorizontal(),n=i?e.width:e.height,a=(i?t-e.left:e.bottom-t)/n;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}}),ki=xi;yi._defaults=ki;var wi=ut.valueOrDefault;var Mi={position:"left",ticks:{callback:li.formatters.logarithmic}};function _i(t,e){return ut.isFinite(t)&&t>=0?t:e}var Ci=fi.extend({determineDataLimits:function(){var t=this,e=t.options,i=t.chart,n=i.data.datasets,a=t.isHorizontal();function o(e){return a?e.xAxisID===t.id:e.yAxisID===t.id}t.min=null,t.max=null,t.minNotZero=null;var r=e.stacked;if(void 0===r&&ut.each(n,function(t,e){if(!r){var n=i.getDatasetMeta(e);i.isDatasetVisible(e)&&o(n)&&void 0!==n.stack&&(r=!0)}}),e.stacked||r){var s={};ut.each(n,function(n,a){var r=i.getDatasetMeta(a),l=[r.type,void 0===e.stacked&&void 0===r.stack?a:"",r.stack].join(".");i.isDatasetVisible(a)&&o(r)&&(void 0===s[l]&&(s[l]=[]),ut.each(n.data,function(e,i){var n=s[l],a=+t.getRightValue(e);isNaN(a)||r.data[i].hidden||a<0||(n[i]=n[i]||0,n[i]+=a)}))}),ut.each(s,function(e){if(e.length>0){var i=ut.min(e),n=ut.max(e);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?n:Math.max(t.max,n)}})}else ut.each(n,function(e,n){var a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&o(a)&&ut.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||a.data[i].hidden||n<0||(null===t.min?t.min=n:n<t.min&&(t.min=n),null===t.max?t.max=n:n>t.max&&(t.max=n),0!==n&&(null===t.minNotZero||n<t.minNotZero)&&(t.minNotZero=n))})});this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=_i(e.min,t.min),t.max=_i(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(ut.log10(t.min))-1),t.max=Math.pow(10,Math.floor(ut.log10(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(ut.log10(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(ut.log10(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(ut.log10(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,i=!t.isHorizontal(),n={min:_i(e.min),max:_i(e.max)},a=t.ticks=function(t,e){var i,n,a=[],o=wi(t.min,Math.pow(10,Math.floor(ut.log10(e.min)))),r=Math.floor(ut.log10(e.max)),s=Math.ceil(e.max/Math.pow(10,r));0===o?(i=Math.floor(ut.log10(e.minNotZero)),n=Math.floor(e.minNotZero/Math.pow(10,i)),a.push(o),o=n*Math.pow(10,i)):(i=Math.floor(ut.log10(o)),n=Math.floor(o/Math.pow(10,i)));var l=i<0?Math.pow(10,Math.abs(i)):1;do{a.push(o),10==++n&&(n=1,l=++i>=0?1:l),o=Math.round(n*Math.pow(10,i)*l)/l}while(i<r||i===r&&n<s);var d=wi(t.max,o);return a.push(d),a}(n,t);t.max=ut.max(a),t.min=ut.min(a),e.reverse?(i=!i,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),i&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),fi.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},_getFirstTickValue:function(t){var e=Math.floor(ut.log10(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},getPixelForValue:function(t){var e,i,n,a,o,r=this,s=r.options.ticks,l=s.reverse,d=ut.log10,u=r._getFirstTickValue(r.minNotZero),h=0;return t=+r.getRightValue(t),l?(n=r.end,a=r.start,o=-1):(n=r.start,a=r.end,o=1),r.isHorizontal()?(e=r.width,i=l?r.right:r.left):(e=r.height,o*=-1,i=l?r.top:r.bottom),t!==n&&(0===n&&(e-=h=wi(s.fontSize,st.global.defaultFontSize),n=u),0!==t&&(h+=e/(d(a)-d(n))*(d(t)-d(n))),i+=o*h),i},getValueForPixel:function(t){var e,i,n,a,o=this,r=o.options.ticks,s=r.reverse,l=ut.log10,d=o._getFirstTickValue(o.minNotZero);if(s?(i=o.end,n=o.start):(i=o.start,n=o.end),o.isHorizontal()?(e=o.width,a=s?o.right-t:t-o.left):(e=o.height,a=s?t-o.top:o.bottom-t),a!==i){if(0===i){var u=wi(r.fontSize,st.global.defaultFontSize);a-=u,e-=u,i=d}a*=l(n)-l(i),a/=e,a=Math.pow(10,l(i)+a)}return a}}),Si=Mi;Ci._defaults=Si;var Pi=ut.valueOrDefault,Ii=ut.valueAtIndexOrDefault,Ai=ut.options.resolve,Di={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:li.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Ti(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function Fi(t){var e=t.ticks;return e.display&&t.display?Pi(e.fontSize,st.global.defaultFontSize)+2*e.backdropPaddingY:0}function Li(t,e,i,n,a){return t===n||t===a?{start:e-i/2,end:e+i/2}:t<n||t>a?{start:e-i,end:e}:{start:e,end:e+i}}function Ri(t){return 0===t||180===t?"center":t<180?"left":"right"}function Oi(t,e,i,n){var a,o,r=i.y+n/2;if(ut.isArray(e))for(a=0,o=e.length;a<o;++a)t.fillText(e[a],i.x,r),r+=n;else t.fillText(e,i.x,r)}function zi(t,e,i){90===t||270===t?i.y-=e.h/2:(t>270||t<90)&&(i.y-=e.h)}function Bi(t){return ut.isNumber(t)?t:0}var Ni=bi.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Fi(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,i=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY;ut.each(e.data.datasets,function(a,o){if(e.isDatasetVisible(o)){var r=e.getDatasetMeta(o);ut.each(a.data,function(e,a){var o=+t.getRightValue(e);isNaN(o)||r.data[a].hidden||(i=Math.min(o,i),n=Math.max(o,n))})}}),t.min=i===Number.POSITIVE_INFINITY?0:i,t.max=n===Number.NEGATIVE_INFINITY?0:n,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Fi(this.options))},convertTicksToLabels:function(){var t=this;bi.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map(t.options.pointLabels.callback,t)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,i,n,a=ut.options._parseFont(t.options.pointLabels),o={l:0,r:t.width,t:0,b:t.height-t.paddingTop},r={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,d,u=Ti(t);for(e=0;e<u;e++){n=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,d=t.pointLabels[e]||"",i=ut.isArray(d)?{w:ut.longestText(s,s.font,d),h:d.length*l}:{w:s.measureText(d).width,h:l},t._pointLabelSizes[e]=i;var h=t.getIndexAngle(e),c=ut.toDegrees(h)%360,f=Li(c,n.x,i.w,0,180),g=Li(c,n.y,i.h,90,270);f.start<o.l&&(o.l=f.start,r.l=h),f.end>o.r&&(o.r=f.end,r.r=h),g.start<o.t&&(o.t=g.start,r.t=h),g.end>o.b&&(o.b=g.end,r.b=h)}t.setReductions(t.drawingArea,o,r)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,i){var n=this,a=e.l/Math.sin(i.l),o=Math.max(e.r-n.width,0)/Math.sin(i.r),r=-e.t/Math.cos(i.t),s=-Math.max(e.b-(n.height-n.paddingTop),0)/Math.cos(i.b);a=Bi(a),o=Bi(o),r=Bi(r),s=Bi(s),n.drawingArea=Math.min(Math.floor(t-(a+o)/2),Math.floor(t-(r+s)/2)),n.setCenterPoint(a,o,r,s)},setCenterPoint:function(t,e,i,n){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,s=i+a.drawingArea,l=a.height-a.paddingTop-n-a.drawingArea;a.xCenter=Math.floor((r+o)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){return t*(2*Math.PI/Ti(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var i=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*i:(t-e.min)*i},getPointPosition:function(t,e){var i=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(i)*e+this.xCenter,y:Math.sin(i)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,e=t.options,i=e.gridLines,n=e.ticks;if(e.display){var a=t.ctx,o=this.getIndexAngle(0),r=ut.options._parseFont(n);(e.angleLines.display||e.pointLabels.display)&&function(t){var e=t.ctx,i=t.options,n=i.angleLines,a=i.gridLines,o=i.pointLabels,r=Pi(n.lineWidth,a.lineWidth),s=Pi(n.color,a.color),l=Fi(i);e.save(),e.lineWidth=r,e.strokeStyle=s,e.setLineDash&&(e.setLineDash(Ai([n.borderDash,a.borderDash,[]])),e.lineDashOffset=Ai([n.borderDashOffset,a.borderDashOffset,0]));var d=t.getDistanceFromCenterForValue(i.ticks.reverse?t.min:t.max),u=ut.options._parseFont(o);e.font=u.string,e.textBaseline="middle";for(var h=Ti(t)-1;h>=0;h--){if(n.display&&r&&s){var c=t.getPointPosition(h,d);e.beginPath(),e.moveTo(t.xCenter,t.yCenter),e.lineTo(c.x,c.y),e.stroke()}if(o.display){var f=0===h?l/2:0,g=t.getPointPosition(h,d+f+5),p=Ii(o.fontColor,h,st.global.defaultFontColor);e.fillStyle=p;var m=t.getIndexAngle(h),v=ut.toDegrees(m);e.textAlign=Ri(v),zi(v,t._pointLabelSizes[h],g),Oi(e,t.pointLabels[h]||"",g,u.lineHeight)}}e.restore()}(t),ut.each(t.ticks,function(e,s){if(s>0||n.reverse){var l=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(i.display&&0!==s&&function(t,e,i,n){var a,o=t.ctx,r=e.circular,s=Ti(t),l=Ii(e.color,n-1),d=Ii(e.lineWidth,n-1);if((r||s)&&l&&d){if(o.save(),o.strokeStyle=l,o.lineWidth=d,o.setLineDash&&(o.setLineDash(e.borderDash||[]),o.lineDashOffset=e.borderDashOffset||0),o.beginPath(),r)o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI);else{a=t.getPointPosition(0,i),o.moveTo(a.x,a.y);for(var u=1;u<s;u++)a=t.getPointPosition(u,i),o.lineTo(a.x,a.y)}o.closePath(),o.stroke(),o.restore()}}(t,i,l,s),n.display){var d=Pi(n.fontColor,st.global.defaultFontColor);if(a.font=r.string,a.save(),a.translate(t.xCenter,t.yCenter),a.rotate(o),n.showLabelBackdrop){var u=a.measureText(e).width;a.fillStyle=n.backdropColor,a.fillRect(-u/2-n.backdropPaddingX,-l-r.size/2-n.backdropPaddingY,u+2*n.backdropPaddingX,r.size+2*n.backdropPaddingY)}a.textAlign="center",a.textBaseline="middle",a.fillStyle=d,a.fillText(e,0,-l),a.restore()}}})}}}),Wi=Di;Ni._defaults=Wi;var Vi=ut.valueOrDefault,Ei=Number.MIN_SAFE_INTEGER||-9007199254740991,Hi=Number.MAX_SAFE_INTEGER||9007199254740991,ji={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,15,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,15,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},qi=Object.keys(ji);function Yi(t,e){return t-e}function Ui(t){var e,i,n,a={},o=[];for(e=0,i=t.length;e<i;++e)a[n=t[e]]||(a[n]=!0,o.push(n));return o}function Xi(t,e,i,n){var a=function(t,e,i){for(var n,a,o,r=0,s=t.length-1;r>=0&&r<=s;){if(a=t[(n=r+s>>1)-1]||null,o=t[n],!a)return{lo:null,hi:o};if(o[e]<i)r=n+1;else{if(!(a[e]>i))return{lo:a,hi:o};s=n-1}}return{lo:o,hi:null}}(t,e,i),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],r=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=r[e]-o[e],l=s?(i-o[e])/s:0,d=(r[n]-o[n])*l;return o[n]+d}function Ki(t,e){var i=t._adapter,n=t.options.time,a=n.parser,o=a||n.format,r=e;return"function"==typeof a&&(r=a(r)),ut.isFinite(r)||(r="string"==typeof o?i.parse(r,o):i.parse(r)),null!==r?+r:(a||"function"!=typeof o||(r=o(e),ut.isFinite(r)||(r=i.parse(r))),r)}function Gi(t,e){if(ut.isNullOrUndef(e))return null;var i=t.options.time,n=Ki(t,t.getRightValue(e));return null===n?n:(i.round&&(n=+t._adapter.startOf(n,i.round)),n)}function Zi(t){for(var e=qi.indexOf(t)+1,i=qi.length;e<i;++e)if(ji[qi[e]].common)return qi[e]}function $i(t,e,i,n){var a,o=t._adapter,r=t.options,s=r.time,l=s.unit||function(t,e,i,n){var a,o,r,s=qi.length;for(a=qi.indexOf(t);a<s-1;++a)if(r=(o=ji[qi[a]]).steps?o.steps[o.steps.length-1]:Hi,o.common&&Math.ceil((i-e)/(r*o.size))<=n)return qi[a];return qi[s-1]}(s.minUnit,e,i,n),d=Zi(l),u=Vi(s.stepSize,s.unitStepSize),h="week"===l&&s.isoWeekday,c=r.ticks.major.enabled,f=ji[l],g=e,p=i,m=[];for(u||(u=function(t,e,i,n){var a,o,r,s=e-t,l=ji[i],d=l.size,u=l.steps;if(!u)return Math.ceil(s/(n*d));for(a=0,o=u.length;a<o&&(r=u[a],!(Math.ceil(s/(d*r))<=n));++a);return r}(e,i,l,n)),h&&(g=+o.startOf(g,"isoWeek",h),p=+o.startOf(p,"isoWeek",h)),g=+o.startOf(g,h?"day":l),(p=+o.startOf(p,h?"day":l))<i&&(p=+o.add(p,1,l)),a=g,c&&d&&!h&&!s.round&&(a=+o.startOf(a,d),a=+o.add(a,~~((g-a)/(f.size*u))*u,l));a<p;a=+o.add(a,u,l))m.push(+a);return m.push(+a),m}var Ji=fi.extend({initialize:function(){this.mergeTicksOptions(),fi.prototype.initialize.call(this)},update:function(){var t=this.options,e=t.time||(t.time={}),i=this._adapter=new si._date(t.adapters.date);return e.format&&console.warn("options.time.format is deprecated and replaced by options.time.parser."),ut.mergeIf(e.displayFormats,i.formats()),fi.prototype.update.apply(this,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),fi.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,i,n,a,o,r=this,s=r.chart,l=r._adapter,d=r.options.time,u=d.unit||"day",h=Hi,c=Ei,f=[],g=[],p=[],m=s.data.labels||[];for(t=0,i=m.length;t<i;++t)p.push(Gi(r,m[t]));for(t=0,i=(s.data.datasets||[]).length;t<i;++t)if(s.isDatasetVisible(t))if(a=s.data.datasets[t].data,ut.isObject(a[0]))for(g[t]=[],e=0,n=a.length;e<n;++e)o=Gi(r,a[e]),f.push(o),g[t][e]=o;else{for(e=0,n=p.length;e<n;++e)f.push(p[e]);g[t]=p.slice(0)}else g[t]=[];p.length&&(p=Ui(p).sort(Yi),h=Math.min(h,p[0]),c=Math.max(c,p[p.length-1])),f.length&&(f=Ui(f).sort(Yi),h=Math.min(h,f[0]),c=Math.max(c,f[f.length-1])),h=Gi(r,d.min)||h,c=Gi(r,d.max)||c,h=h===Hi?+l.startOf(Date.now(),u):h,c=c===Ei?+l.endOf(Date.now(),u)+1:c,r.min=Math.min(h,c),r.max=Math.max(h+1,c),r._horizontal=r.isHorizontal(),r._table=[],r._timestamps={data:f,datasets:g,labels:p}},buildTicks:function(){var t,e,i,n=this,a=n.min,o=n.max,r=n.options,s=r.time,l=[],d=[];switch(r.ticks.source){case"data":l=n._timestamps.data;break;case"labels":l=n._timestamps.labels;break;case"auto":default:l=$i(n,a,o,n.getLabelCapacity(a))}for("ticks"===r.bounds&&l.length&&(a=l[0],o=l[l.length-1]),a=Gi(n,s.min)||a,o=Gi(n,s.max)||o,t=0,e=l.length;t<e;++t)(i=l[t])>=a&&i<=o&&d.push(i);return n.min=a,n.max=o,n._unit=s.unit||function(t,e,i,n,a){var o,r;for(o=qi.length-1;o>=qi.indexOf(i);o--)if(r=qi[o],ji[r].common&&t._adapter.diff(a,n,r)>=e.length)return r;return qi[i?qi.indexOf(i):0]}(n,d,s.minUnit,n.min,n.max),n._majorUnit=Zi(n._unit),n._table=function(t,e,i,n){if("linear"===n||!t.length)return[{time:e,pos:0},{time:i,pos:1}];var a,o,r,s,l,d=[],u=[e];for(a=0,o=t.length;a<o;++a)(s=t[a])>e&&s<i&&u.push(s);for(u.push(i),a=0,o=u.length;a<o;++a)l=u[a+1],r=u[a-1],s=u[a],void 0!==r&&void 0!==l&&Math.round((l+r)/2)===s||d.push({time:s,pos:a/(o-1)});return d}(n._timestamps.data,a,o,r.distribution),n._offsets=function(t,e,i,n,a){var o,r,s=0,l=0;return a.offset&&e.length&&(a.time.min||(o=Xi(t,"time",e[0],"pos"),s=1===e.length?1-o:(Xi(t,"time",e[1],"pos")-o)/2),a.time.max||(r=Xi(t,"time",e[e.length-1],"pos"),l=1===e.length?r:(r-Xi(t,"time",e[e.length-2],"pos"))/2)),{start:s,end:l}}(n._table,d,0,0,r),r.ticks.reverse&&d.reverse(),function(t,e,i){var n,a,o,r,s=[];for(n=0,a=e.length;n<a;++n)o=e[n],r=!!i&&o===+t._adapter.startOf(o,i),s.push({value:o,major:r});return s}(n,d,n._majorUnit)},getLabelForIndex:function(t,e){var i=this,n=i._adapter,a=i.chart.data,o=i.options.time,r=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return ut.isObject(s)&&(r=i.getRightValue(s)),o.tooltipFormat?n.format(Ki(i,r),o.tooltipFormat):"string"==typeof r?r:n.format(Ki(i,r),o.displayFormats.datetime)},tickFormatFunction:function(t,e,i,n){var a=this._adapter,o=this.options,r=o.time.displayFormats,s=r[this._unit],l=this._majorUnit,d=r[l],u=+a.startOf(t,l),h=o.ticks.major,c=h.enabled&&l&&d&&t===u,f=a.format(t,n||(c?d:s)),g=c?h:o.ticks.minor,p=Vi(g.callback,g.userCallback);return p?p(f,e,i):f},convertTicksToLabels:function(t){var e,i,n=[];for(e=0,i=t.length;e<i;++e)n.push(this.tickFormatFunction(t[e].value,e,t));return n},getPixelForOffset:function(t){var e=this,i=e.options.ticks.reverse,n=e._horizontal?e.width:e.height,a=e._horizontal?i?e.right:e.left:i?e.bottom:e.top,o=Xi(e._table,"time",t,"pos"),r=n*(e._offsets.start+o)/(e._offsets.start+1+e._offsets.end);return i?a-r:a+r},getPixelForValue:function(t,e,i){var n=null;if(void 0!==e&&void 0!==i&&(n=this._timestamps.datasets[i][e]),null===n&&(n=Gi(this,t)),null!==n)return this.getPixelForOffset(n)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this,i=e._horizontal?e.width:e.height,n=e._horizontal?e.left:e.top,a=(i?(t-n)/i:0)*(e._offsets.start+1+e._offsets.start)-e._offsets.end,o=Xi(e._table,"pos",a,"time");return e._adapter._create(o)},getLabelWidth:function(t){var e=this.options.ticks,i=this.ctx.measureText(t).width,n=ut.toRadians(e.maxRotation),a=Math.cos(n),o=Math.sin(n);return i*a+Vi(e.fontSize,st.global.defaultFontSize)*o},getLabelCapacity:function(t){var e=this,i=e.options.time.displayFormats.millisecond,n=e.tickFormatFunction(t,0,[],i),a=e.getLabelWidth(n),o=e.isHorizontal()?e.width:e.height,r=Math.floor(o/a);return r>0?r:1}}),Qi={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};Ji._defaults=Qi;var tn={category:gi,linear:yi,logarithmic:Ci,radialLinear:Ni,time:Ji},en={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};si._date.override("function"==typeof t?{_id:"moment",formats:function(){return en},parse:function(e,i){return"string"==typeof e&&"string"==typeof i?e=t(e,i):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,i){return t(e).format(i)},add:function(e,i,n){return t(e).add(i,n).valueOf()},diff:function(e,i,n){return t.duration(t(e).diff(t(i))).as(n)},startOf:function(e,i,n){return e=t(e),"isoWeek"===i?e.isoWeekday(n).valueOf():e.startOf(i).valueOf()},endOf:function(e,i){return t(e).endOf(i).valueOf()},_create:function(e){return t(e)}}:{}),st._set("global",{plugins:{filler:{propagate:!0}}});var nn={dataset:function(t){var e=t.fill,i=t.chart,n=i.getDatasetMeta(e),a=n&&i.isDatasetVisible(e)&&n.dataset._children||[],o=a.length||0;return o?function(t,e){return e<o&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,i=e?e.x:null,n=e?e.y:null;return function(t){return{x:null===i?t.x:i,y:null===n?t.y:n}}}};function an(t,e,i){var n,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.backgroundColor),!1===o||null===o)return!1;if(!0===o)return"origin";if(n=parseFloat(o,10),isFinite(n)&&Math.floor(n)===n)return"-"!==o[0]&&"+"!==o[0]||(n=e+n),!(n===e||n<0||n>=i)&&n;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function on(t){var e,i=t.el._model||{},n=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===i.scaleBottom?n.bottom:i.scaleBottom:"end"===a?o=void 0===i.scaleTop?n.top:i.scaleTop:void 0!==i.scaleZero?o=i.scaleZero:n.getBasePosition?o=n.getBasePosition():n.getBasePixel&&(o=n.getBasePixel()),null!=o){if(void 0!==o.x&&void 0!==o.y)return o;if(ut.isFinite(o))return{x:(e=n.isHorizontal())?o:null,y:e?null:o}}return null}function rn(t,e,i){var n,a=t[e].fill,o=[e];if(!i)return a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return a;if(!(n=t[a]))return!1;if(n.visible)return a;o.push(a),a=n.fill}return!1}function sn(t){var e=t.fill,i="dataset";return!1===e?null:(isFinite(e)||(i="boundary"),nn[i](t))}function ln(t){return t&&!t.skip}function dn(t,e,i,n,a){var o;if(n&&a){for(t.moveTo(e[0].x,e[0].y),o=1;o<n;++o)ut.canvas.lineTo(t,e[o-1],e[o]);for(t.lineTo(i[a-1].x,i[a-1].y),o=a-1;o>0;--o)ut.canvas.lineTo(t,i[o],i[o-1],!0)}}var un={id:"filler",afterDatasetsUpdate:function(t,e){var i,n,a,o,r=(t.data.datasets||[]).length,s=e.propagate,l=[];for(n=0;n<r;++n)o=null,(a=(i=t.getDatasetMeta(n)).dataset)&&a._model&&a instanceof Wt.Line&&(o={visible:t.isDatasetVisible(n),fill:an(a,n,r),chart:t,el:a}),i.$filler=o,l.push(o);for(n=0;n<r;++n)(o=l[n])&&(o.fill=rn(l,n,s),o.boundary=on(o),o.mapper=sn(o))},beforeDatasetDraw:function(t,e){var i=e.meta.$filler;if(i){var n=t.ctx,a=i.el,o=a._view,r=a._children||[],s=i.mapper,l=o.backgroundColor||st.global.defaultColor;s&&l&&r.length&&(ut.canvas.clipArea(n,t.chartArea),function(t,e,i,n,a,o){var r,s,l,d,u,h,c,f=e.length,g=n.spanGaps,p=[],m=[],v=0,b=0;for(t.beginPath(),r=0,s=f+!!o;r<s;++r)u=i(d=e[l=r%f]._view,l,n),h=ln(d),c=ln(u),h&&c?(v=p.push(d),b=m.push(u)):v&&b&&(g?(h&&p.push(d),c&&m.push(u)):(dn(t,p,m,v,b),v=b=0,p=[],m=[]));dn(t,p,m,v,b),t.closePath(),t.fillStyle=a,t.fill()}(n,r,s,o,l,a._loop),ut.canvas.unclipArea(n))}}},hn=ut.noop,cn=ut.valueOrDefault;function fn(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}st._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var i=e.datasetIndex,n=this.chart,a=n.getDatasetMeta(i);a.hidden=null===a.hidden?!n.data.datasets[i].hidden:null,n.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return ut.isArray(e.datasets)?e.datasets.map(function(e,i){return{text:e.label,fillStyle:ut.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(i),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:i}},this):[]}}},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var i=0;i<t.data.datasets.length;i++)e.push('<li><span style="background-color:'+t.data.datasets[i].backgroundColor+'"></span>'),t.data.datasets[i].label&&e.push(t.data.datasets[i].label),e.push("</li>");return e.push("</ul>"),e.join("")}});var gn=pt.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:hn,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:hn,beforeSetDimensions:hn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:hn,beforeBuildLabels:hn,buildLabels:function(){var t=this,e=t.options.labels||{},i=ut.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter(function(i){return e.filter(i,t.chart.data)})),t.options.reverse&&i.reverse(),t.legendItems=i},afterBuildLabels:hn,beforeFit:hn,fit:function(){var t=this,e=t.options,i=e.labels,n=e.display,a=t.ctx,o=ut.options._parseFont(i),r=o.size,s=t.legendHitBoxes=[],l=t.minSize,d=t.isHorizontal();if(d?(l.width=t.maxWidth,l.height=n?10:0):(l.width=n?10:0,l.height=t.maxHeight),n)if(a.font=o.string,d){var u=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="top",ut.each(t.legendItems,function(t,e){var n=fn(i,r)+r/2+a.measureText(t.text).width;(0===e||u[u.length-1]+n+i.padding>l.width)&&(h+=r+i.padding,u[u.length-(e>0?0:1)]=i.padding),s[e]={left:0,top:0,width:n,height:r},u[u.length-1]+=n+i.padding}),l.height+=h}else{var c=i.padding,f=t.columnWidths=[],g=i.padding,p=0,m=0,v=r+c;ut.each(t.legendItems,function(t,e){var n=fn(i,r)+r/2+a.measureText(t.text).width;e>0&&m+v>l.height-c&&(g+=p+i.padding,f.push(p),p=0,m=0),p=Math.max(p,n),m+=v,s[e]={left:0,top:0,width:n,height:r}}),g+=p,f.push(p),l.width+=g}t.width=l.width,t.height=l.height},afterFit:hn,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,i=e.labels,n=st.global,a=n.defaultColor,o=n.elements.line,r=t.width,s=t.lineWidths;if(e.display){var l,d=t.ctx,u=cn(i.fontColor,n.defaultFontColor),h=ut.options._parseFont(i),c=h.size;d.textAlign="left",d.textBaseline="middle",d.lineWidth=.5,d.strokeStyle=u,d.fillStyle=u,d.font=h.string;var f=fn(i,c),g=t.legendHitBoxes,p=t.isHorizontal();l=p?{x:t.left+(r-s[0])/2+i.padding,y:t.top+i.padding,line:0}:{x:t.left+i.padding,y:t.top+i.padding,line:0};var m=c+i.padding;ut.each(t.legendItems,function(n,u){var h=d.measureText(n.text).width,v=f+c/2+h,b=l.x,x=l.y;p?u>0&&b+v+i.padding>t.left+t.minSize.width&&(x=l.y+=m,l.line++,b=l.x=t.left+(r-s[l.line])/2+i.padding):u>0&&x+m>t.top+t.minSize.height&&(b=l.x=b+t.columnWidths[l.line]+i.padding,x=l.y=t.top+i.padding,l.line++),function(t,i,n){if(!(isNaN(f)||f<=0)){d.save();var r=cn(n.lineWidth,o.borderWidth);if(d.fillStyle=cn(n.fillStyle,a),d.lineCap=cn(n.lineCap,o.borderCapStyle),d.lineDashOffset=cn(n.lineDashOffset,o.borderDashOffset),d.lineJoin=cn(n.lineJoin,o.borderJoinStyle),d.lineWidth=r,d.strokeStyle=cn(n.strokeStyle,a),d.setLineDash&&d.setLineDash(cn(n.lineDash,o.borderDash)),e.labels&&e.labels.usePointStyle){var s=f*Math.SQRT2/2,l=t+f/2,u=i+c/2;ut.canvas.drawPoint(d,n.pointStyle,s,l,u)}else 0!==r&&d.strokeRect(t,i,f,c),d.fillRect(t,i,f,c);d.restore()}}(b,x,n),g[u].left=b,g[u].top=x,function(t,e,i,n){var a=c/2,o=f+a+t,r=e+a;d.fillText(i.text,o,r),i.hidden&&(d.beginPath(),d.lineWidth=2,d.moveTo(o,r),d.lineTo(o+n,r),d.stroke())}(b,x,n,h),p?l.x+=v+i.padding:l.y+=m})}},_getLegendItemAt:function(t,e){var i,n,a,o=this;if(t>=o.left&&t<=o.right&&e>=o.top&&e<=o.bottom)for(a=o.legendHitBoxes,i=0;i<a.length;++i)if(t>=(n=a[i]).left&&t<=n.left+n.width&&e>=n.top&&e<=n.top+n.height)return o.legendItems[i];return null},handleEvent:function(t){var e,i=this,n=i.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!n.onHover&&!n.onLeave)return}else{if("click"!==a)return;if(!n.onClick)return}e=i._getLegendItemAt(t.x,t.y),"click"===a?e&&n.onClick&&n.onClick.call(i,t.native,e):(n.onLeave&&e!==i._hoveredItem&&(i._hoveredItem&&n.onLeave.call(i,t.native,i._hoveredItem),i._hoveredItem=e),n.onHover&&e&&n.onHover.call(i,t.native,e))}});function pn(t,e){var i=new gn({ctx:t.ctx,options:e,chart:t});ke.configure(t,i,e),ke.addBox(t,i),t.legend=i}var mn={id:"legend",_element:gn,beforeInit:function(t){var e=t.options.legend;e&&pn(t,e)},beforeUpdate:function(t){var e=t.options.legend,i=t.legend;e?(ut.mergeIf(e,st.global.legend),i?(ke.configure(t,i,e),i.options=e):pn(t,e)):i&&(ke.removeBox(t,i),delete t.legend)},afterEvent:function(t,e){var i=t.legend;i&&i.handleEvent(e)}},vn=ut.noop;st._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var bn=pt.extend({initialize:function(t){ut.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:vn,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:vn,beforeSetDimensions:vn,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:vn,beforeBuildLabels:vn,buildLabels:vn,afterBuildLabels:vn,beforeFit:vn,fit:function(){var t=this,e=t.options,i=e.display,n=t.minSize,a=ut.isArray(e.text)?e.text.length:1,o=ut.options._parseFont(e),r=i?a*o.lineHeight+2*e.padding:0;t.isHorizontal()?(n.width=t.maxWidth,n.height=r):(n.width=r,n.height=t.maxHeight),t.width=n.width,t.height=n.height},afterFit:vn,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,i=t.options;if(i.display){var n,a,o,r=ut.options._parseFont(i),s=r.lineHeight,l=s/2+i.padding,d=0,u=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=ut.valueOrDefault(i.fontColor,st.global.defaultFontColor),e.font=r.string,t.isHorizontal()?(a=h+(f-h)/2,o=u+l,n=f-h):(a="left"===i.position?h+l:f-l,o=u+(c-u)/2,n=c-u,d=Math.PI*("left"===i.position?-.5:.5)),e.save(),e.translate(a,o),e.rotate(d),e.textAlign="center",e.textBaseline="middle";var g=i.text;if(ut.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,n),p+=s;else e.fillText(g,0,0,n);e.restore()}}});function xn(t,e){var i=new bn({ctx:t.ctx,options:e,chart:t});ke.configure(t,i,e),ke.addBox(t,i),t.titleBlock=i}var yn={},kn=un,wn=mn,Mn={id:"title",_element:bn,beforeInit:function(t){var e=t.options.title;e&&xn(t,e)},beforeUpdate:function(t){var e=t.options.title,i=t.titleBlock;e?(ut.mergeIf(e,st.global.title),i?(ke.configure(t,i,e),i.options=e):xn(t,e)):i&&(ke.removeBox(t,i),delete t.titleBlock)}};for(var _n in yn.filler=kn,yn.legend=wn,yn.title=Mn,ai.helpers=ut,function(){function t(t,e,i){var n;return"string"==typeof t?(n=parseInt(t,10),-1!==t.indexOf("%")&&(n=n/100*e.parentNode[i])):n=t,n}function e(t){return null!=t&&"none"!==t}function i(i,n,a){var o=document.defaultView,r=ut._getParentNode(i),s=o.getComputedStyle(i)[n],l=o.getComputedStyle(r)[n],d=e(s),u=e(l),h=Number.POSITIVE_INFINITY;return d||u?Math.min(d?t(s,i,a):h,u?t(l,r,a):h):"none"}ut.where=function(t,e){if(ut.isArray(t)&&Array.prototype.filter)return t.filter(e);var i=[];return ut.each(t,function(t){e(t)&&i.push(t)}),i},ut.findIndex=Array.prototype.findIndex?function(t,e,i){return t.findIndex(e,i)}:function(t,e,i){i=void 0===i?t:i;for(var n=0,a=t.length;n<a;++n)if(e.call(i,t[n],n,t))return n;return-1},ut.findNextWhere=function(t,e,i){ut.isNullOrUndef(i)&&(i=-1);for(var n=i+1;n<t.length;n++){var a=t[n];if(e(a))return a}},ut.findPreviousWhere=function(t,e,i){ut.isNullOrUndef(i)&&(i=t.length);for(var n=i-1;n>=0;n--){var a=t[n];if(e(a))return a}},ut.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},ut.almostEquals=function(t,e,i){return Math.abs(t-e)<i},ut.almostWhole=function(t,e){var i=Math.round(t);return i-e<t&&i+e>t},ut.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},ut.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},ut.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0==(t=+t)||isNaN(t)?t:t>0?1:-1},ut.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,i=Math.round(e);return t===Math.pow(10,i)?i:e},ut.toRadians=function(t){return t*(Math.PI/180)},ut.toDegrees=function(t){return t*(180/Math.PI)},ut._decimalPlaces=function(t){if(ut.isFinite(t)){for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i}},ut.getAngleFromPoint=function(t,e){var i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),o=Math.atan2(n,i);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},ut.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},ut.aliasPixel=function(t){return t%2==0?0:.5},ut._alignPixel=function(t,e,i){var n=t.currentDevicePixelRatio,a=i/2;return Math.round((e-a)*n)/n+a},ut.splineCurve=function(t,e,i,n){var a=t.skip?e:t,o=e,r=i.skip?e:i,s=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),l=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),d=s/(s+l),u=l/(s+l),h=n*(d=isNaN(d)?0:d),c=n*(u=isNaN(u)?0:u);return{previous:{x:o.x-h*(r.x-a.x),y:o.y-h*(r.y-a.y)},next:{x:o.x+c*(r.x-a.x),y:o.y+c*(r.y-a.y)}}},ut.EPSILON=Number.EPSILON||1e-14,ut.splineCurveMonotone=function(t){var e,i,n,a,o,r,s,l,d,u=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),h=u.length;for(e=0;e<h;++e)if(!(n=u[e]).model.skip){if(i=e>0?u[e-1]:null,(a=e<h-1?u[e+1]:null)&&!a.model.skip){var c=a.model.x-n.model.x;n.deltaK=0!==c?(a.model.y-n.model.y)/c:0}!i||i.model.skip?n.mK=n.deltaK:!a||a.model.skip?n.mK=i.deltaK:this.sign(i.deltaK)!==this.sign(n.deltaK)?n.mK=0:n.mK=(i.deltaK+n.deltaK)/2}for(e=0;e<h-1;++e)n=u[e],a=u[e+1],n.model.skip||a.model.skip||(ut.almostEquals(n.deltaK,0,this.EPSILON)?n.mK=a.mK=0:(o=n.mK/n.deltaK,r=a.mK/n.deltaK,(l=Math.pow(o,2)+Math.pow(r,2))<=9||(s=3/Math.sqrt(l),n.mK=o*s*n.deltaK,a.mK=r*s*n.deltaK)));for(e=0;e<h;++e)(n=u[e]).model.skip||(i=e>0?u[e-1]:null,a=e<h-1?u[e+1]:null,i&&!i.model.skip&&(d=(n.model.x-i.model.x)/3,n.model.controlPointPreviousX=n.model.x-d,n.model.controlPointPreviousY=n.model.y-d*n.mK),a&&!a.model.skip&&(d=(a.model.x-n.model.x)/3,n.model.controlPointNextX=n.model.x+d,n.model.controlPointNextY=n.model.y+d*n.mK))},ut.nextItem=function(t,e,i){return i?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},ut.previousItem=function(t,e,i){return i?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},ut.niceNum=function(t,e){var i=Math.floor(ut.log10(t)),n=t/Math.pow(10,i);return(e?n<1.5?1:n<3?2:n<7?5:10:n<=1?1:n<=2?2:n<=5?5:10)*Math.pow(10,i)},ut.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},ut.getRelativePosition=function(t,e){var i,n,a=t.originalEvent||t,o=t.target||t.srcElement,r=o.getBoundingClientRect(),s=a.touches;s&&s.length>0?(i=s[0].clientX,n=s[0].clientY):(i=a.clientX,n=a.clientY);var l=parseFloat(ut.getStyle(o,"padding-left")),d=parseFloat(ut.getStyle(o,"padding-top")),u=parseFloat(ut.getStyle(o,"padding-right")),h=parseFloat(ut.getStyle(o,"padding-bottom")),c=r.right-r.left-l-u,f=r.bottom-r.top-d-h;return{x:i=Math.round((i-r.left-l)/c*o.width/e.currentDevicePixelRatio),y:n=Math.round((n-r.top-d)/f*o.height/e.currentDevicePixelRatio)}},ut.getConstraintWidth=function(t){return i(t,"max-width","clientWidth")},ut.getConstraintHeight=function(t){return i(t,"max-height","clientHeight")},ut._calculatePadding=function(t,e,i){return(e=ut.getStyle(t,e)).indexOf("%")>-1?i*parseInt(e,10)/100:parseInt(e,10)},ut._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ut.getMaximumWidth=function(t){var e=ut._getParentNode(t);if(!e)return t.clientWidth;var i=e.clientWidth,n=i-ut._calculatePadding(e,"padding-left",i)-ut._calculatePadding(e,"padding-right",i),a=ut.getConstraintWidth(t);return isNaN(a)?n:Math.min(n,a)},ut.getMaximumHeight=function(t){var e=ut._getParentNode(t);if(!e)return t.clientHeight;var i=e.clientHeight,n=i-ut._calculatePadding(e,"padding-top",i)-ut._calculatePadding(e,"padding-bottom",i),a=ut.getConstraintHeight(t);return isNaN(a)?n:Math.min(n,a)},ut.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},ut.retinaScale=function(t,e){var i=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==i){var n=t.canvas,a=t.height,o=t.width;n.height=a*i,n.width=o*i,t.ctx.scale(i,i),n.style.height||n.style.width||(n.style.height=a+"px",n.style.width=o+"px")}},ut.fontString=function(t,e,i){return e+" "+t+"px "+i},ut.longestText=function(t,e,i,n){var a=(n=n||{}).data=n.data||{},o=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(a=n.data={},o=n.garbageCollect=[],n.font=e),t.font=e;var r=0;ut.each(i,function(e){null!=e&&!0!==ut.isArray(e)?r=ut.measureText(t,a,o,r,e):ut.isArray(e)&&ut.each(e,function(e){null==e||ut.isArray(e)||(r=ut.measureText(t,a,o,r,e))})});var s=o.length/2;if(s>i.length){for(var l=0;l<s;l++)delete a[o[l]];o.splice(0,s)}return r},ut.measureText=function(t,e,i,n,a){var o=e[a];return o||(o=e[a]=t.measureText(a).width,i.push(a)),o>n&&(n=o),n},ut.numberOfLabelLines=function(t){var e=1;return ut.each(t,function(t){ut.isArray(t)&&t.length>e&&(e=t.length)}),e},ut.color=X?function(t){return t instanceof CanvasGradient&&(t=st.global.defaultColor),X(t)}:function(t){return console.error("Color.js not found!"),t},ut.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:ut.color(t).saturate(.5).darken(.1).rgbString()}}(),ai._adapters=si,ai.Animation=vt,ai.animationService=bt,ai.controllers=ue,ai.DatasetController=Mt,ai.defaults=st,ai.Element=pt,ai.elements=Wt,ai.Interaction=ve,ai.layouts=ke,ai.platform=Ve,ai.plugins=Ee,ai.Scale=fi,ai.scaleService=He,ai.Ticks=li,ai.Tooltip=Je,ai.helpers.each(tn,function(t,e){ai.scaleService.registerScaleType(e,t,t._defaults)}),yn)yn.hasOwnProperty(_n)&&ai.plugins.register(yn[_n]);ai.platform.initialize();var Cn=ai;return"undefined"!=typeof window&&(window.Chart=ai),ai.Chart=ai,ai.Legend=yn.legend._element,ai.Title=yn.title._element,ai.pluginService=ai.plugins,ai.PluginBase=ai.Element.extend({}),ai.canvasHelpers=ai.helpers.canvas,ai.layoutService=ai.layouts,ai.LinearScaleBase=bi,ai.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(t){ai[t]=function(e,i){return new ai(e,ai.helpers.merge(i||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}}),Cn});
|
1 |
/*!
|
2 |
+
* Chart.js v2.9.3
|
3 |
* https://www.chartjs.org
|
4 |
* (c) 2019 Chart.js Contributors
|
5 |
* Released under the MIT License
|
6 |
*/
|
7 |
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(function(){try{return require("moment")}catch(t){}}()):"function"==typeof define&&define.amd?define(["require"],(function(t){return e(function(){try{return t("moment")}catch(t){}}())})):(t=t||self).Chart=e(t.moment)}(this,(function(t){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t;var e={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},n=function(t,e){return t(e={exports:{}},e.exports),e.exports}((function(t){var n={};for(var i in e)e.hasOwnProperty(i)&&(n[e[i]]=i);var a=t.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var o=a[r].channels,s=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:o}),Object.defineProperty(a[r],"labels",{value:s})}a.rgb.hsl=function(t){var e,n,i=t[0]/255,a=t[1]/255,r=t[2]/255,o=Math.min(i,a,r),s=Math.max(i,a,r),l=s-o;return s===o?e=0:i===s?e=(a-r)/l:a===s?e=2+(r-i)/l:r===s&&(e=4+(i-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),n=(o+s)/2,[e,100*(s===o?0:n<=.5?l/(s+o):l/(2-s-o)),100*n]},a.rgb.hsv=function(t){var e,n,i,a,r,o=t[0]/255,s=t[1]/255,l=t[2]/255,u=Math.max(o,s,l),d=u-Math.min(o,s,l),h=function(t){return(u-t)/6/d+.5};return 0===d?a=r=0:(r=d/u,e=h(o),n=h(s),i=h(l),o===u?a=i-n:s===u?a=1/3+e-i:l===u&&(a=2/3+n-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*u]},a.rgb.hwb=function(t){var e=t[0],n=t[1],i=t[2];return[a.rgb.hsl(t)[0],100*(1/255*Math.min(e,Math.min(n,i))),100*(i=1-1/255*Math.max(e,Math.max(n,i)))]},a.rgb.cmyk=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255;return[100*((1-n-(e=Math.min(1-n,1-i,1-a)))/(1-e)||0),100*((1-i-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(t){var i=n[t];if(i)return i;var a,r,o,s=1/0;for(var l in e)if(e.hasOwnProperty(l)){var u=e[l],d=(r=t,o=u,Math.pow(r[0]-o[0],2)+Math.pow(r[1]-o[1],2)+Math.pow(r[2]-o[2],2));d<s&&(s=d,a=l)}return a},a.keyword.rgb=function(t){return e[t]},a.rgb.xyz=function(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]},a.rgb.lab=function(t){var e=a.rgb.xyz(t),n=e[0],i=e[1],r=e[2];return i/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116)-16,500*(n-i),200*(i-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[r=255*l,r,r];e=2*l-(n=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var u=0;u<3;u++)(i=o+1/3*-(u-1))<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a},a.hsl.hsv=function(t){var e=t[0],n=t[1]/100,i=t[2]/100,a=n,r=Math.max(i,.01);return n*=(i*=2)<=1?i:2-i,a*=r<=1?r:2-r,[e,100*(0===i?2*a/(r+a):2*n/(i+n)),100*((i+n)/2)]},a.hsv.rgb=function(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r));switch(i*=255,a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}},a.hsv.hsl=function(t){var e,n,i,a=t[0],r=t[1]/100,o=t[2]/100,s=Math.max(o,.01);return i=(2-r)*o,n=r*s,[a,100*(n=(n/=(e=(2-r)*s)<=1?e:2-e)||0),100*(i/=2)]},a.hwb.rgb=function(t){var e,n,i,a,r,o,s,l=t[0]/360,u=t[1]/100,d=t[2]/100,h=u+d;switch(h>1&&(u/=h,d/=h),i=6*l-(e=Math.floor(6*l)),0!=(1&e)&&(i=1-i),a=u+i*((n=1-d)-u),e){default:case 6:case 0:r=n,o=a,s=u;break;case 1:r=a,o=n,s=u;break;case 2:r=u,o=n,s=a;break;case 3:r=u,o=a,s=n;break;case 4:r=a,o=u,s=n;break;case 5:r=n,o=u,s=a}return[255*r,255*o,255*s]},a.cmyk.rgb=function(t){var e=t[0]/100,n=t[1]/100,i=t[2]/100,a=t[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,i*(1-a)+a))]},a.xyz.rgb=function(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return n=-.9689*a+1.8758*r+.0415*o,i=.0557*a+-.204*r+1.057*o,e=(e=3.2406*a+-1.5372*r+-.4986*o)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:12.92*i,[255*(e=Math.min(Math.max(0,e),1)),255*(n=Math.min(Math.max(0,n),1)),255*(i=Math.min(Math.max(0,i),1))]},a.xyz.lab=function(t){var e=t[0],n=t[1],i=t[2];return n/=100,i/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(e-n),200*(n-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]},a.lab.xyz=function(t){var e,n,i,a=t[0];e=t[1]/500+(n=(a+16)/116),i=n-t[2]/200;var r=Math.pow(n,3),o=Math.pow(e,3),s=Math.pow(i,3);return n=r>.008856?r:(n-16/116)/7.787,e=o>.008856?o:(e-16/116)/7.787,i=s>.008856?s:(i-16/116)/7.787,[e*=95.047,n*=100,i*=108.883]},a.lab.lch=function(t){var e,n=t[0],i=t[1],a=t[2];return(e=360*Math.atan2(a,i)/2/Math.PI)<0&&(e+=360),[n,Math.sqrt(i*i+a*a),e]},a.lch.lab=function(t){var e,n=t[0],i=t[1];return e=t[2]/360*2*Math.PI,[n,i*Math.cos(e),i*Math.sin(e)]},a.rgb.ansi16=function(t){var e=t[0],n=t[1],i=t[2],r=1 in arguments?arguments[1]:a.rgb.hsv(t)[2];if(0===(r=Math.round(r/50)))return 30;var o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(e/255));return 2===r&&(o+=60),o},a.hsv.ansi16=function(t){return a.rgb.ansi16(a.hsv.rgb(t),t[2])},a.rgb.ansi256=function(t){var e=t[0],n=t[1],i=t[2];return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},a.ansi16.rgb=function(t){var e=t%10;if(0===e||7===e)return t>50&&(e+=3.5),[e=e/10.5*255,e,e];var n=.5*(1+~~(t>50));return[(1&e)*n*255,(e>>1&1)*n*255,(e>>2&1)*n*255]},a.ansi256.rgb=function(t){if(t>=232){var e=10*(t-232)+8;return[e,e,e]}var n;return t-=16,[Math.floor(t/36)/5*255,Math.floor((n=t%36)/6)/5*255,n%6/5*255]},a.rgb.hex=function(t){var e=(((255&Math.round(t[0]))<<16)+((255&Math.round(t[1]))<<8)+(255&Math.round(t[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(t){var e=t.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var n=e[0];3===e[0].length&&(n=n.split("").map((function(t){return t+t})).join(""));var i=parseInt(n,16);return[i>>16&255,i>>8&255,255&i]},a.rgb.hcg=function(t){var e,n=t[0]/255,i=t[1]/255,a=t[2]/255,r=Math.max(Math.max(n,i),a),o=Math.min(Math.min(n,i),a),s=r-o;return e=s<=0?0:r===n?(i-a)/s%6:r===i?2+(a-n)/s:4+(n-i)/s+4,e/=6,[360*(e%=1),100*s,100*(s<1?o/(1-s):0)]},a.hsl.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=1,a=0;return(i=n<.5?2*e*n:2*e*(1-n))<1&&(a=(n-.5*i)/(1-i)),[t[0],100*i,100*a]},a.hsv.hcg=function(t){var e=t[1]/100,n=t[2]/100,i=e*n,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.hcg.rgb=function(t){var e=t[0]/360,n=t[1]/100,i=t[2]/100;if(0===n)return[255*i,255*i,255*i];var a,r=[0,0,0],o=e%1*6,s=o%1,l=1-s;switch(Math.floor(o)){case 0:r[0]=1,r[1]=s,r[2]=0;break;case 1:r[0]=l,r[1]=1,r[2]=0;break;case 2:r[0]=0,r[1]=1,r[2]=s;break;case 3:r[0]=0,r[1]=l,r[2]=1;break;case 4:r[0]=s,r[1]=0,r[2]=1;break;default:r[0]=1,r[1]=0,r[2]=l}return a=(1-n)*i,[255*(n*r[0]+a),255*(n*r[1]+a),255*(n*r[2]+a)]},a.hcg.hsv=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e),i=0;return n>0&&(i=e/n),[t[0],100*i,100*n]},a.hcg.hsl=function(t){var e=t[1]/100,n=t[2]/100*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[t[0],100*i,100*n]},a.hcg.hwb=function(t){var e=t[1]/100,n=e+t[2]/100*(1-e);return[t[0],100*(n-e),100*(1-n)]},a.hwb.hcg=function(t){var e=t[1]/100,n=1-t[2]/100,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[t[0],100*i,100*a]},a.apple.rgb=function(t){return[t[0]/65535*255,t[1]/65535*255,t[2]/65535*255]},a.rgb.apple=function(t){return[t[0]/255*65535,t[1]/255*65535,t[2]/255*65535]},a.gray.rgb=function(t){return[t[0]/100*255,t[0]/100*255,t[0]/100*255]},a.gray.hsl=a.gray.hsv=function(t){return[0,0,t[0]]},a.gray.hwb=function(t){return[0,100,t[0]]},a.gray.cmyk=function(t){return[0,0,0,t[0]]},a.gray.lab=function(t){return[t[0],0,0]},a.gray.hex=function(t){var e=255&Math.round(t[0]/100*255),n=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(n.length)+n},a.rgb.gray=function(t){return[(t[0]+t[1]+t[2])/3/255*100]}}));n.rgb,n.hsl,n.hsv,n.hwb,n.cmyk,n.xyz,n.lab,n.lch,n.hex,n.keyword,n.ansi16,n.ansi256,n.hcg,n.apple,n.gray;function i(t){var e=function(){for(var t={},e=Object.keys(n),i=e.length,a=0;a<i;a++)t[e[a]]={distance:-1,parent:null};return t}(),i=[t];for(e[t].distance=0;i.length;)for(var a=i.pop(),r=Object.keys(n[a]),o=r.length,s=0;s<o;s++){var l=r[s],u=e[l];-1===u.distance&&(u.distance=e[a].distance+1,u.parent=a,i.unshift(l))}return e}function a(t,e){return function(n){return e(t(n))}}function r(t,e){for(var i=[e[t].parent,t],r=n[e[t].parent][t],o=e[t].parent;e[o].parent;)i.unshift(e[o].parent),r=a(n[e[o].parent][o],r),o=e[o].parent;return r.conversion=i,r}var o={};Object.keys(n).forEach((function(t){o[t]={},Object.defineProperty(o[t],"channels",{value:n[t].channels}),Object.defineProperty(o[t],"labels",{value:n[t].labels});var e=function(t){for(var e=i(t),n={},a=Object.keys(e),o=a.length,s=0;s<o;s++){var l=a[s];null!==e[l].parent&&(n[l]=r(l,e))}return n}(t);Object.keys(e).forEach((function(n){var i=e[n];o[t][n]=function(t){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var n=t(e);if("object"==typeof n)for(var i=n.length,a=0;a<i;a++)n[a]=Math.round(n[a]);return n};return"conversion"in t&&(e.conversion=t.conversion),e}(i),o[t][n].raw=function(t){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),t(e))};return"conversion"in t&&(e.conversion=t.conversion),e}(i)}))}));var s=o,l={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},u={getRgba:d,getHsla:h,getRgb:function(t){var e=d(t);return e&&e.slice(0,3)},getHsl:function(t){var e=h(t);return e&&e.slice(0,3)},getHwb:c,getAlpha:function(t){var e=d(t);if(e)return e[3];if(e=h(t))return e[3];if(e=c(t))return e[3]},hexString:function(t,e){e=void 0!==e&&3===t.length?e:t[3];return"#"+v(t[0])+v(t[1])+v(t[2])+(e>=0&&e<1?v(Math.round(255*e)):"")},rgbString:function(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);return"rgb("+t[0]+", "+t[1]+", "+t[2]+")"},rgbaString:f,percentString:function(t,e){if(e<1||t[3]&&t[3]<1)return g(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"},percentaString:g,hslString:function(t,e){if(e<1||t[3]&&t[3]<1)return p(t,e);return"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"},hslaString:p,hwbString:function(t,e){void 0===e&&(e=void 0!==t[3]?t[3]:1);return"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"},keyword:function(t){return b[t.slice(0,3)]}};function d(t){if(t){var e=[0,0,0],n=1,i=t.match(/^#([a-fA-F0-9]{3,4})$/i),a="";if(i){a=(i=i[1])[3];for(var r=0;r<e.length;r++)e[r]=parseInt(i[r]+i[r],16);a&&(n=Math.round(parseInt(a+a,16)/255*100)/100)}else if(i=t.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){a=i[2],i=i[1];for(r=0;r<e.length;r++)e[r]=parseInt(i.slice(2*r,2*r+2),16);a&&(n=Math.round(parseInt(a,16)/255*100)/100)}else if(i=t.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=parseInt(i[r+1]);n=parseFloat(i[4])}else if(i=t.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(r=0;r<e.length;r++)e[r]=Math.round(2.55*parseFloat(i[r+1]));n=parseFloat(i[4])}else if(i=t.match(/(\w+)/)){if("transparent"==i[1])return[0,0,0,0];if(!(e=l[i[1]]))return}for(r=0;r<e.length;r++)e[r]=m(e[r],0,255);return n=n||0==n?m(n,0,1):1,e[3]=n,e}}function h(t){if(t){var e=t.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function c(t){if(t){var e=t.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(e){var n=parseFloat(e[4]);return[m(parseInt(e[1]),0,360),m(parseFloat(e[2]),0,100),m(parseFloat(e[3]),0,100),m(isNaN(n)?1:n,0,1)]}}}function f(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function g(t,e){return"rgba("+Math.round(t[0]/255*100)+"%, "+Math.round(t[1]/255*100)+"%, "+Math.round(t[2]/255*100)+"%, "+(e||t[3]||1)+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e,n){return Math.min(Math.max(e,t),n)}function v(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var b={};for(var x in l)b[l[x]]=x;var y=function(t){return t instanceof y?t:this instanceof y?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof t?(e=u.getRgba(t))?this.setValues("rgb",e):(e=u.getHsla(t))?this.setValues("hsl",e):(e=u.getHwb(t))&&this.setValues("hwb",e):"object"==typeof t&&(void 0!==(e=t).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new y(t);var e};y.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return u.hexString(this.values.rgb)},rgbString:function(){return u.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return u.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return u.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return u.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return u.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return u.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return u.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=t,i=void 0===e?.5:e,a=2*i-1,r=this.alpha()-n.alpha(),o=((a*r==-1?a:(a+r)/(1+a*r))+1)/2,s=1-o;return this.rgb(o*this.red()+s*n.red(),o*this.green()+s*n.green(),o*this.blue()+s*n.blue()).alpha(this.alpha()*i+n.alpha()*(1-i))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new y,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],"[object Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},y.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},y.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},y.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},y.prototype.setValues=function(t,e){var n,i,a=this.values,r=this.spaces,o=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[r[t][0]]){var u=r[t];for(n=0;n<t.length;n++)a[t][n]=e[u[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;for(n=0;n<t.length;n++)i=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(i);for(var d in r)d!==t&&(a[d]=s[t][d](a[t]));return!0},y.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},y.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=y);var _,k=y,w={noop:function(){},uid:(_=0,function(){return _++}),isNullOrUndef:function(t){return null==t},isArray:function(t){if(Array.isArray&&Array.isArray(t))return!0;var e=Object.prototype.toString.call(t);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},isFinite:function(t){return("number"==typeof t||t instanceof Number)&&isFinite(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return w.valueOrDefault(w.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)},each:function(t,e,n,i){var a,r,o;if(w.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if(w.isObject(t))for(r=(o=Object.keys(t)).length,a=0;a<r;a++)e.call(n,t[o[a]],o[a])},arrayEquals:function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!w.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(t){if(w.isArray(t))return t.map(w.clone);if(w.isObject(t)){for(var e={},n=Object.keys(t),i=n.length,a=0;a<i;++a)e[n[a]]=w.clone(t[n[a]]);return e}return t},_merger:function(t,e,n,i){var a=e[t],r=n[t];w.isObject(a)&&w.isObject(r)?w.merge(a,r,i):e[t]=w.clone(r)},_mergerIf:function(t,e,n){var i=e[t],a=n[t];w.isObject(i)&&w.isObject(a)?w.mergeIf(i,a):e.hasOwnProperty(t)||(e[t]=w.clone(a))},merge:function(t,e,n){var i,a,r,o,s,l=w.isArray(e)?e:[e],u=l.length;if(!w.isObject(t))return t;for(i=(n=n||{}).merger||w._merger,a=0;a<u;++a)if(e=l[a],w.isObject(e))for(s=0,o=(r=Object.keys(e)).length;s<o;++s)i(r[s],t,e,n);return t},mergeIf:function(t,e){return w.merge(t,e,{merger:w._mergerIf})},extend:Object.assign||function(t){return w.merge(t,[].slice.call(arguments,1),{merger:function(t,e,n){e[t]=n[t]}})},inherits:function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=w.inherits,t&&w.extend(n.prototype,t),n.__super__=e.prototype,n},_deprecated:function(t,e,n,i){void 0!==e&&console.warn(t+': "'+n+'" is deprecated. Please use "'+i+'" instead')}},M=w;w.callCallback=w.callback,w.indexOf=function(t,e,n){return Array.prototype.indexOf.call(t,e,n)},w.getValueOrDefault=w.valueOrDefault,w.getValueAtIndexOrDefault=w.valueAtIndexOrDefault;var S={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return 1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return 0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return 1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-S.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*S.easeInBounce(2*t):.5*S.easeOutBounce(2*t-1)+.5}},C={effects:S};M.easingEffects=S;var P=Math.PI,A=P/180,D=2*P,T=P/2,I=P/4,F=2*P/3,L={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,r){if(r){var o=Math.min(r,a/2,i/2),s=e+o,l=n+o,u=e+i-o,d=n+a-o;t.moveTo(e,l),s<u&&l<d?(t.arc(s,l,o,-P,-T),t.arc(u,l,o,-T,0),t.arc(u,d,o,0,T),t.arc(s,d,o,T,P)):s<u?(t.moveTo(s,n),t.arc(u,l,o,-T,T),t.arc(s,l,o,T,P+T)):l<d?(t.arc(s,l,o,-P,0),t.arc(s,d,o,0,P)):t.arc(s,l,o,-P,P),t.closePath(),t.moveTo(e,n)}else t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a,r){var o,s,l,u,d,h=(r||0)*A;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(o=e.toString())||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,a),t.rotate(h),t.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void t.restore();if(!(isNaN(n)||n<=0)){switch(t.beginPath(),e){default:t.arc(i,a,n,0,D),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=F,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),h+=F,t.lineTo(i+Math.sin(h)*n,a-Math.cos(h)*n),t.closePath();break;case"rectRounded":u=n-(d=.516*n),s=Math.cos(h+I)*u,l=Math.sin(h+I)*u,t.arc(i-s,a-l,d,h-P,h-T),t.arc(i+l,a-s,d,h-T,h),t.arc(i+s,a+l,d,h,h+T),t.arc(i-l,a+s,d,h+T,h+P),t.closePath();break;case"rect":if(!r){u=Math.SQRT1_2*n,t.rect(i-u,a-u,2*u,2*u);break}h+=I;case"rectRot":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+l,a-s),t.lineTo(i+s,a+l),t.lineTo(i-l,a+s),t.closePath();break;case"crossRot":h+=I;case"cross":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"star":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s),h+=I,s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l),t.moveTo(i+l,a-s),t.lineTo(i-l,a+s);break;case"line":s=Math.cos(h)*n,l=Math.sin(h)*n,t.moveTo(i-s,a-l),t.lineTo(i+s,a+l);break;case"dash":t.moveTo(i,a),t.lineTo(i+Math.cos(h)*n,a+Math.sin(h)*n)}t.fill(),t.stroke()}},_isPointInArea:function(t,e){return t.x>e.left-1e-6&&t.x<e.right+1e-6&&t.y>e.top-1e-6&&t.y<e.bottom+1e-6},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){var a=n.steppedLine;if(a){if("middle"===a){var r=(e.x+n.x)/2;t.lineTo(r,i?n.y:e.y),t.lineTo(r,i?e.y:n.y)}else"after"===a&&!i||"after"!==a&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}else n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}},O=L;M.clear=L.clear,M.drawRoundedRectangle=function(t){t.beginPath(),L.roundedRect.apply(L,arguments)};var R={_set:function(t,e){return M.merge(this[t]||(this[t]={}),e)}};R._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var z=R,N=M.valueOrDefault;var B={toLineHeight:function(t,e){var n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,n,i,a;return M.isObject(t)?(e=+t.top||0,n=+t.right||0,i=+t.bottom||0,a=+t.left||0):e=n=i=a=+t||0,{top:e,right:n,bottom:i,left:a,height:e+i,width:a+n}},_parseFont:function(t){var e=z.global,n=N(t.fontSize,e.defaultFontSize),i={family:N(t.fontFamily,e.defaultFontFamily),lineHeight:M.options.toLineHeight(N(t.lineHeight,e.defaultLineHeight),n),size:n,style:N(t.fontStyle,e.defaultFontStyle),weight:null,string:""};return i.string=function(t){return!t||M.isNullOrUndef(t.size)||M.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(i),i},resolve:function(t,e,n,i){var a,r,o,s=!0;for(a=0,r=t.length;a<r;++a)if(void 0!==(o=t[a])&&(void 0!==e&&"function"==typeof o&&(o=o(e),s=!1),void 0!==n&&M.isArray(o)&&(o=o[n],s=!1),void 0!==o))return i&&!s&&(i.cacheable=!1),o}},E={_factorize:function(t){var e,n=[],i=Math.sqrt(t);for(e=1;e<i;e++)t%e==0&&(n.push(e),n.push(t/e));return i===(0|i)&&n.push(i),n.sort((function(t,e){return t-e})).pop(),n},log10:Math.log10||function(t){var e=Math.log(t)*Math.LOG10E,n=Math.round(e);return t===Math.pow(10,n)?n:e}},W=E;M.log10=E.log10;var V=M,H=C,j=O,q=B,U=W,Y={getRtlAdapter:function(t,e,n){return t?function(t,e){return{x:function(n){return t+t+e-n},setWidth:function(t){e=t},textAlign:function(t){return"center"===t?t:"right"===t?"left":"right"},xPlus:function(t,e){return t-e},leftForLtr:function(t,e){return t-e}}}(e,n):{x:function(t){return t},setWidth:function(t){},textAlign:function(t){return t},xPlus:function(t,e){return t+e},leftForLtr:function(t,e){return t}}},overrideTextDirection:function(t,e){var n,i;"ltr"!==e&&"rtl"!==e||(i=[(n=t.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=i)},restoreTextDirection:function(t){var e=t.prevTextDirection;void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}};V.easing=H,V.canvas=j,V.options=q,V.math=U,V.rtl=Y;var G=function(t){V.extend(this,t),this.initialize.apply(this,arguments)};V.extend(G.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=V.extend({},t._model)),t._start={},t},transition:function(t){var e=this,n=e._model,i=e._start,a=e._view;return n&&1!==t?(a||(a=e._view={}),i||(i=e._start={}),function(t,e,n,i){var a,r,o,s,l,u,d,h,c,f=Object.keys(n);for(a=0,r=f.length;a<r;++a)if(u=n[o=f[a]],e.hasOwnProperty(o)||(e[o]=u),(s=e[o])!==u&&"_"!==o[0]){if(t.hasOwnProperty(o)||(t[o]=s),(d=typeof u)===typeof(l=t[o]))if("string"===d){if((h=k(l)).valid&&(c=k(u)).valid){e[o]=c.mix(h,i).rgbString();continue}}else if(V.isFinite(l)&&V.isFinite(u)){e[o]=l+(u-l)*i;continue}e[o]=u}}(i,a,n,t),e):(e._view=V.extend({},n),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return V.isNumber(this._model.x)&&V.isNumber(this._model.y)}}),G.extend=V.inherits;var X=G,K=X.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),Z=K;Object.defineProperty(K.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(K.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}}),z._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:V.noop,onComplete:V.noop}});var $={animations:[],request:null,addAnimation:function(t,e,n,i){var a,r,o=this.animations;for(e.chart=t,e.startTime=Date.now(),e.duration=n,i||(t.animating=!0),a=0,r=o.length;a<r;++a)if(o[a].chart===t)return void(o[a]=e);o.push(e),1===o.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var e=V.findIndex(this.animations,(function(e){return e.chart===t}));-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=V.requestAnimFrame.call(window,(function(){t.request=null,t.startDigest()})))},startDigest:function(){this.advance(),this.animations.length>0&&this.requestAnimationFrame()},advance:function(){for(var t,e,n,i,a=this.animations,r=0;r<a.length;)e=(t=a[r]).chart,n=t.numSteps,i=Math.floor((Date.now()-t.startTime)/t.duration*n)+1,t.currentStep=Math.min(i,n),V.callback(t.render,[e,t],e),V.callback(t.onAnimationProgress,[t],e),t.currentStep>=n?(V.callback(t.onAnimationComplete,[t],e),e.animating=!1,a.splice(r,1)):++r}},J=V.options.resolve,Q=["push","pop","shift","splice","unshift"];function tt(t,e){var n=t._chartjs;if(n){var i=n.listeners,a=i.indexOf(e);-1!==a&&i.splice(a,1),i.length>0||(Q.forEach((function(e){delete t[e]})),delete t._chartjs)}}var et=function(t,e){this.initialize(t,e)};V.extend(et.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements(),n._type=n.getMeta().type},updateIndex:function(t){this.index=t},linkScales:function(){var t=this.getMeta(),e=this.chart,n=e.scales,i=this.getDataset(),a=e.options.scales;null!==t.xAxisID&&t.xAxisID in n&&!i.xAxisID||(t.xAxisID=i.xAxisID||a.xAxes[0].id),null!==t.yAxisID&&t.yAxisID in n&&!i.yAxisID||(t.yAxisID=i.yAxisID||a.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&tt(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,n=this.getMeta(),i=this.getDataset().data||[],a=n.data;for(t=0,e=i.length;t<e;++t)a[t]=a[t]||this.createMetaData(t);n.dataset=n.dataset||this.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t,e,n=this,i=n.getDataset(),a=i.data||(i.data=[]);n._data!==a&&(n._data&&tt(n._data,n),a&&Object.isExtensible(a)&&(e=n,(t=a)._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),Q.forEach((function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),i=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=i.apply(this,e);return V.each(t._chartjs.listeners,(function(t){"function"==typeof t[n]&&t[n].apply(t,e)})),a}})})))),n._data=a),n.resyncElements()},_configure:function(){this._config=V.merge({},[this.chart.options.datasets[this._type],this.getDataset()],{merger:function(t,e,n){"_meta"!==t&&"data"!==t&&V._merger(t,e,n)}})},_update:function(t){this._configure(),this._cachedDataOpts=null,this.update(t)},update:V.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},getStyle:function(t){var e,n=this.getMeta(),i=n.dataset;return this._configure(),i&&void 0===t?e=this._resolveDatasetElementOptions(i||{}):(t=t||0,e=this._resolveDataElementOptions(n.data[t]||{},t)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(t,e){var n,i,a,r,o=this,s=o.chart,l=o._config,u=t.custom||{},d=s.options.elements[o.datasetElementType.prototype._type]||{},h=o._datasetElementOptions,c={},f={chart:s,dataset:o.getDataset(),datasetIndex:o.index,hover:e};for(n=0,i=h.length;n<i;++n)a=h[n],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,c[a]=J([u[r],l[r],d[r]],f);return c},_resolveDataElementOptions:function(t,e){var n=this,i=t&&t.custom,a=n._cachedDataOpts;if(a&&!i)return a;var r,o,s,l,u=n.chart,d=n._config,h=u.options.elements[n.dataElementType.prototype._type]||{},c=n._dataElementOptions,f={},g={chart:u,dataIndex:e,dataset:n.getDataset(),datasetIndex:n.index},p={cacheable:!i};if(i=i||{},V.isArray(c))for(o=0,s=c.length;o<s;++o)f[l=c[o]]=J([i[l],d[l],h[l]],g,e,p);else for(o=0,s=(r=Object.keys(c)).length;o<s;++o)f[l=r[o]]=J([i[l],d[c[l]],d[l],h[l]],g,e,p);return p.cacheable&&(n._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(t){V.merge(t._model,t.$previousStyle||{}),delete t.$previousStyle},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=V.getHoverColor;t.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=J([i.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,n),a.borderColor=J([i.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,n),a.borderWidth=J([i.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,n)},_removeDatasetHoverStyle:function(){var t=this.getMeta().dataset;t&&this.removeHoverStyle(t)},_setDatasetHoverStyle:function(){var t,e,n,i,a,r,o=this.getMeta().dataset,s={};if(o){for(r=o._model,a=this._resolveDatasetElementOptions(o,!0),t=0,e=(i=Object.keys(a)).length;t<e;++t)s[n=i[t]]=r[n],r[n]=a[n];o.$previousStyle=s}},resyncElements:function(){var t=this.getMeta(),e=this.getDataset().data,n=t.data.length,i=e.length;i<n?t.data.splice(i,n-i):i>n&&this.insertElements(n,i-n)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){var t=arguments.length;this.insertElements(this.getDataset().data.length-t,t)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),et.extend=V.inherits;var nt=et,it=2*Math.PI;function at(t,e){var n=e.startAngle,i=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,o=e.x,s=e.y;t.beginPath(),t.arc(o,s,e.outerRadius,n-r,i+r),e.innerRadius>a?(r=a/e.innerRadius,t.arc(o,s,e.innerRadius-a,i+r,n-r,!0)):t.arc(o,s,a,i+Math.PI/2,n-Math.PI/2),t.closePath(),t.clip()}function rt(t,e,n){var i="inner"===e.borderAlign;i?(t.lineWidth=2*e.borderWidth,t.lineJoin="round"):(t.lineWidth=e.borderWidth,t.lineJoin="bevel"),n.fullCircles&&function(t,e,n,i){var a,r=n.endAngle;for(i&&(n.endAngle=n.startAngle+it,at(t,n),n.endAngle=r,n.endAngle===n.startAngle&&n.fullCircles&&(n.endAngle+=it,n.fullCircles--)),t.beginPath(),t.arc(n.x,n.y,n.innerRadius,n.startAngle+it,n.startAngle,!0),a=0;a<n.fullCircles;++a)t.stroke();for(t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.startAngle+it),a=0;a<n.fullCircles;++a)t.stroke()}(t,e,n,i),i&&at(t,n),t.beginPath(),t.arc(n.x,n.y,e.outerRadius,n.startAngle,n.endAngle),t.arc(n.x,n.y,n.innerRadius,n.endAngle,n.startAngle,!0),t.closePath(),t.stroke()}z._set("global",{elements:{arc:{backgroundColor:z.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var ot=X.extend({_type:"arc",inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var n=this._view;if(n){for(var i=V.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,o=n.startAngle,s=n.endAngle;s<o;)s+=it;for(;a>s;)a-=it;for(;a<o;)a+=it;var l=a>=o&&a<=s,u=r>=n.innerRadius&&r<=n.outerRadius;return l&&u}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t,e=this._chart.ctx,n=this._view,i="inner"===n.borderAlign?.33:0,a={x:n.x,y:n.y,innerRadius:n.innerRadius,outerRadius:Math.max(n.outerRadius-i,0),pixelMargin:i,startAngle:n.startAngle,endAngle:n.endAngle,fullCircles:Math.floor(n.circumference/it)};if(e.save(),e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+it,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),t=0;t<a.fullCircles;++t)e.fill();a.endAngle=a.startAngle+n.circumference%it}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),n.borderWidth&&rt(e,n,a),e.restore()}}),st=V.valueOrDefault,lt=z.global.defaultColor;z._set("global",{elements:{line:{tension:.4,backgroundColor:lt,borderWidth:3,borderColor:lt,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var ut=X.extend({_type:"line",draw:function(){var t,e,n,i=this,a=i._view,r=i._chart.ctx,o=a.spanGaps,s=i._children.slice(),l=z.global,u=l.elements.line,d=-1,h=i._loop;if(s.length){if(i._loop){for(t=0;t<s.length;++t)if(e=V.previousItem(s,t),!s[t]._view.skip&&e._view.skip){s=s.slice(t).concat(s.slice(0,t)),h=o;break}h&&s.push(s[0])}for(r.save(),r.lineCap=a.borderCapStyle||u.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||u.borderDash),r.lineDashOffset=st(a.borderDashOffset,u.borderDashOffset),r.lineJoin=a.borderJoinStyle||u.borderJoinStyle,r.lineWidth=st(a.borderWidth,u.borderWidth),r.strokeStyle=a.borderColor||l.defaultColor,r.beginPath(),(n=s[0]._view).skip||(r.moveTo(n.x,n.y),d=0),t=1;t<s.length;++t)n=s[t]._view,e=-1===d?V.previousItem(s,t):s[d],n.skip||(d!==t-1&&!o||-1===d?r.moveTo(n.x,n.y):V.canvas.lineTo(r,e._view,n),d=t);h&&r.closePath(),r.stroke(),r.restore()}}}),dt=V.valueOrDefault,ht=z.global.defaultColor;function ct(t){var e=this._view;return!!e&&Math.abs(t-e.x)<e.radius+e.hitRadius}z._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:ht,borderColor:ht,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var ft=X.extend({_type:"point",inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:ct,inXRange:ct,inYRange:function(t){var e=this._view;return!!e&&Math.abs(t-e.y)<e.radius+e.hitRadius},getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var e=this._view,n=this._chart.ctx,i=e.pointStyle,a=e.rotation,r=e.radius,o=e.x,s=e.y,l=z.global,u=l.defaultColor;e.skip||(void 0===t||V.canvas._isPointInArea(e,t))&&(n.strokeStyle=e.borderColor||u,n.lineWidth=dt(e.borderWidth,l.elements.point.borderWidth),n.fillStyle=e.backgroundColor||u,V.canvas.drawPoint(n,i,r,o,s,a))}}),gt=z.global.defaultColor;function pt(t){return t&&void 0!==t.width}function mt(t){var e,n,i,a,r;return pt(t)?(r=t.width/2,e=t.x-r,n=t.x+r,i=Math.min(t.y,t.base),a=Math.max(t.y,t.base)):(r=t.height/2,e=Math.min(t.x,t.base),n=Math.max(t.x,t.base),i=t.y-r,a=t.y+r),{left:e,top:i,right:n,bottom:a}}function vt(t,e,n){return t===e?n:t===n?e:t}function bt(t,e,n){var i,a,r,o,s=t.borderWidth,l=function(t){var e=t.borderSkipped,n={};return e?(t.horizontal?t.base>t.x&&(e=vt(e,"left","right")):t.base<t.y&&(e=vt(e,"bottom","top")),n[e]=!0,n):n}(t);return V.isObject(s)?(i=+s.top||0,a=+s.right||0,r=+s.bottom||0,o=+s.left||0):i=a=r=o=+s||0,{t:l.top||i<0?0:i>n?n:i,r:l.right||a<0?0:a>e?e:a,b:l.bottom||r<0?0:r>n?n:r,l:l.left||o<0?0:o>e?e:o}}function xt(t,e,n){var i=null===e,a=null===n,r=!(!t||i&&a)&&mt(t);return r&&(i||e>=r.left&&e<=r.right)&&(a||n>=r.top&&n<=r.bottom)}z._set("global",{elements:{rectangle:{backgroundColor:gt,borderColor:gt,borderSkipped:"bottom",borderWidth:0}}});var yt=X.extend({_type:"rectangle",draw:function(){var t=this._chart.ctx,e=this._view,n=function(t){var e=mt(t),n=e.right-e.left,i=e.bottom-e.top,a=bt(t,n/2,i/2);return{outer:{x:e.left,y:e.top,w:n,h:i},inner:{x:e.left+a.l,y:e.top+a.t,w:n-a.l-a.r,h:i-a.t-a.b}}}(e),i=n.outer,a=n.inner;t.fillStyle=e.backgroundColor,t.fillRect(i.x,i.y,i.w,i.h),i.w===a.w&&i.h===a.h||(t.save(),t.beginPath(),t.rect(i.x,i.y,i.w,i.h),t.clip(),t.fillStyle=e.borderColor,t.rect(a.x,a.y,a.w,a.h),t.fill("evenodd"),t.restore())},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){return xt(this._view,t,e)},inLabelRange:function(t,e){var n=this._view;return pt(n)?xt(n,t,null):xt(n,null,e)},inXRange:function(t){return xt(this._view,t,null)},inYRange:function(t){return xt(this._view,null,t)},getCenterPoint:function(){var t,e,n=this._view;return pt(n)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var t=this._view;return pt(t)?t.width*Math.abs(t.y-t.base):t.height*Math.abs(t.x-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}}),_t={},kt=ot,wt=ut,Mt=ft,St=yt;_t.Arc=kt,_t.Line=wt,_t.Point=Mt,_t.Rectangle=St;var Ct=V._deprecated,Pt=V.valueOrDefault;function At(t,e,n){var i,a,r=n.barThickness,o=e.stackCount,s=e.pixels[t],l=V.isNullOrUndef(r)?function(t,e){var n,i,a,r,o=t._length;for(a=1,r=e.length;a<r;++a)o=Math.min(o,Math.abs(e[a]-e[a-1]));for(a=0,r=t.getTicks().length;a<r;++a)i=t.getPixelForTick(a),o=a>0?Math.min(o,Math.abs(i-n)):o,n=i;return o}(e.scale,e.pixels):-1;return V.isNullOrUndef(r)?(i=l*n.categoryPercentage,a=n.barPercentage):(i=r*o,a=1),{chunk:i/o,ratio:a,start:s-i/2}}z._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),z._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Dt=nt.extend({dataElementType:_t.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,e,n=this;nt.prototype.initialize.apply(n,arguments),(t=n.getMeta()).stack=n.getDataset().stack,t.bar=!0,e=n._getIndexScale().options,Ct("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Ct("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Ct("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Ct("bar chart",n._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Ct("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(t){var e,n,i=this.getMeta().data;for(this._ruler=this.getRuler(),e=0,n=i.length;e<n;++e)this.updateElement(i[e],e,t)},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=i.getDataset(),o=i._resolveDataElementOptions(t,e);t._xScale=i.getScaleForId(a.xAxisID),t._yScale=i.getScaleForId(a.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={backgroundColor:o.backgroundColor,borderColor:o.borderColor,borderSkipped:o.borderSkipped,borderWidth:o.borderWidth,datasetLabel:r.label,label:i.chart.data.labels[e]},V.isArray(r.data[e])&&(t._model.borderSkipped=null),i._updateElementGeometry(t,e,n,o),t.pivot()},_updateElementGeometry:function(t,e,n,i){var a=this,r=t._model,o=a._getValueScale(),s=o.getBasePixel(),l=o.isHorizontal(),u=a._ruler||a.getRuler(),d=a.calculateBarValuePixels(a.index,e,i),h=a.calculateBarIndexPixels(a.index,e,u,i);r.horizontal=l,r.base=n?s:d.base,r.x=l?n?s:d.head:h.center,r.y=l?h.center:n?s:d.head,r.height=l?h.size:void 0,r.width=l?void 0:h.size},_getStacks:function(t){var e,n,i=this._getIndexScale(),a=i._getMatchingVisibleMetas(this._type),r=i.options.stacked,o=a.length,s=[];for(e=0;e<o&&(n=a[e],(!1===r||-1===s.indexOf(n.stack)||void 0===r&&void 0===n.stack)&&s.push(n.stack),n.index!==t);++e);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(t,e){var n=this._getStacks(t),i=void 0!==e?n.indexOf(e):-1;return-1===i?n.length-1:i},getRuler:function(){var t,e,n=this._getIndexScale(),i=[];for(t=0,e=this.getMeta().data.length;t<e;++t)i.push(n.getPixelForValue(null,t,this.index));return{pixels:i,start:n._startPixel,end:n._endPixel,stackCount:this.getStackCount(),scale:n}},calculateBarValuePixels:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._getValueScale(),c=h.isHorizontal(),f=d.data.datasets,g=h._getMatchingVisibleMetas(this._type),p=h._parseValue(f[t].data[e]),m=n.minBarLength,v=h.options.stacked,b=this.getMeta().stack,x=void 0===p.start?0:p.max>=0&&p.min>=0?p.min:p.max,y=void 0===p.start?p.end:p.max>=0&&p.min>=0?p.max-p.min:p.min-p.max,_=g.length;if(v||void 0===v&&void 0!==b)for(i=0;i<_&&(a=g[i]).index!==t;++i)a.stack===b&&(r=void 0===(u=h._parseValue(f[a.index].data[e])).start?u.end:u.min>=0&&u.max>=0?u.max:u.min,(p.min<0&&r<0||p.max>=0&&r>0)&&(x+=r));return o=h.getPixelForValue(x),l=(s=h.getPixelForValue(x+y))-o,void 0!==m&&Math.abs(l)<m&&(l=m,s=y>=0&&!c||y<0&&c?o-m:o+m),{size:l,base:o,head:s,center:s+l/2}},calculateBarIndexPixels:function(t,e,n,i){var a="flex"===i.barThickness?function(t,e,n){var i,a=e.pixels,r=a[t],o=t>0?a[t-1]:null,s=t<a.length-1?a[t+1]:null,l=n.categoryPercentage;return null===o&&(o=r-(null===s?e.end-e.start:s-r)),null===s&&(s=r+r-o),i=r-(r-Math.min(o,s))/2*l,{chunk:Math.abs(s-o)/2*l/e.stackCount,ratio:n.barPercentage,start:i}}(e,n,i):At(e,n,i),r=this.getStackIndex(t,this.getMeta().stack),o=a.start+a.chunk*r+a.chunk/2,s=Math.min(Pt(i.maxBarThickness,1/0),a.chunk*a.ratio);return{base:o-s/2,head:o+s/2,center:o,size:s}},draw:function(){var t=this.chart,e=this._getValueScale(),n=this.getMeta().data,i=this.getDataset(),a=n.length,r=0;for(V.canvas.clipArea(t.ctx,t.chartArea);r<a;++r){var o=e._parseValue(i.data[r]);isNaN(o.min)||isNaN(o.max)||n[r].draw()}V.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var t=this,e=V.extend({},nt.prototype._resolveDataElementOptions.apply(t,arguments)),n=t._getIndexScale().options,i=t._getValueScale().options;return e.barPercentage=Pt(n.barPercentage,e.barPercentage),e.barThickness=Pt(n.barThickness,e.barThickness),e.categoryPercentage=Pt(n.categoryPercentage,e.categoryPercentage),e.maxBarThickness=Pt(n.maxBarThickness,e.maxBarThickness),e.minBarLength=Pt(i.minBarLength,e.minBarLength),e}}),Tt=V.valueOrDefault,It=V.options.resolve;z._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}});var Ft=nt.extend({dataElementType:_t.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(t){var e=this,n=e.getMeta().data;V.each(n,(function(n,i){e.updateElement(n,i,t)}))},updateElement:function(t,e,n){var i=this,a=i.getMeta(),r=t.custom||{},o=i.getScaleForId(a.xAxisID),s=i.getScaleForId(a.yAxisID),l=i._resolveDataElementOptions(t,e),u=i.getDataset().data[e],d=i.index,h=n?o.getPixelForDecimal(.5):o.getPixelForValue("object"==typeof u?u:NaN,e,d),c=n?s.getBasePixel():s.getPixelForValue(u,e,d);t._xScale=o,t._yScale=s,t._options=l,t._datasetIndex=d,t._index=e,t._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:n?0:l.radius,skip:r.skip||isNaN(h)||isNaN(c),x:h,y:c},t.pivot()},setHoverStyle:function(t){var e=t._model,n=t._options,i=V.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Tt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Tt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Tt(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},_resolveDataElementOptions:function(t,e){var n=this,i=n.chart,a=n.getDataset(),r=t.custom||{},o=a.data[e]||{},s=nt.prototype._resolveDataElementOptions.apply(n,arguments),l={chart:i,dataIndex:e,dataset:a,datasetIndex:n.index};return n._cachedDataOpts===s&&(s=V.extend({},s)),s.radius=It([r.radius,o.r,n._config.radius,i.options.elements.point.radius],l,e),s}}),Lt=V.valueOrDefault,Ot=Math.PI,Rt=2*Ot,zt=Ot/2;z._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:-zt,circumference:Rt,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.labels[t.index],i=": "+e.datasets[t.datasetIndex].data[t.index];return V.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}});var Nt=nt.extend({dataElementType:_t.Arc,linkScales:V.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var e,n,i,a,r=this,o=r.chart,s=o.chartArea,l=o.options,u=1,d=1,h=0,c=0,f=r.getMeta(),g=f.data,p=l.cutoutPercentage/100||0,m=l.circumference,v=r._getRingWeight(r.index);if(m<Rt){var b=l.rotation%Rt,x=(b+=b>=Ot?-Rt:b<-Ot?Rt:0)+m,y=Math.cos(b),_=Math.sin(b),k=Math.cos(x),w=Math.sin(x),M=b<=0&&x>=0||x>=Rt,S=b<=zt&&x>=zt||x>=Rt+zt,C=b<=-zt&&x>=-zt||x>=Ot+zt,P=b===-Ot||x>=Ot?-1:Math.min(y,y*p,k,k*p),A=C?-1:Math.min(_,_*p,w,w*p),D=M?1:Math.max(y,y*p,k,k*p),T=S?1:Math.max(_,_*p,w,w*p);u=(D-P)/2,d=(T-A)/2,h=-(D+P)/2,c=-(T+A)/2}for(i=0,a=g.length;i<a;++i)g[i]._options=r._resolveDataElementOptions(g[i],i);for(o.borderWidth=r.getMaxBorderWidth(),e=(s.right-s.left-o.borderWidth)/u,n=(s.bottom-s.top-o.borderWidth)/d,o.outerRadius=Math.max(Math.min(e,n)/2,0),o.innerRadius=Math.max(o.outerRadius*p,0),o.radiusLength=(o.outerRadius-o.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),o.offsetX=h*o.outerRadius,o.offsetY=c*o.outerRadius,f.total=r.calculateTotal(),r.outerRadius=o.outerRadius-o.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-o.radiusLength*v,0),i=0,a=g.length;i<a;++i)r.updateElement(g[i],i,t)},updateElement:function(t,e,n){var i=this,a=i.chart,r=a.chartArea,o=a.options,s=o.animation,l=(r.left+r.right)/2,u=(r.top+r.bottom)/2,d=o.rotation,h=o.rotation,c=i.getDataset(),f=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(c.data[e])*(o.circumference/Rt),g=n&&s.animateScale?0:i.innerRadius,p=n&&s.animateScale?0:i.outerRadius,m=t._options||{};V.extend(t,{_datasetIndex:i.index,_index:e,_model:{backgroundColor:m.backgroundColor,borderColor:m.borderColor,borderWidth:m.borderWidth,borderAlign:m.borderAlign,x:l+a.offsetX,y:u+a.offsetY,startAngle:d,endAngle:h,circumference:f,outerRadius:p,innerRadius:g,label:V.valueAtIndexOrDefault(c.label,e,a.data.labels[e])}});var v=t._model;n&&s.animateRotate||(v.startAngle=0===e?o.rotation:i.getMeta().data[e-1]._model.endAngle,v.endAngle=v.startAngle+v.circumference),t.pivot()},calculateTotal:function(){var t,e=this.getDataset(),n=this.getMeta(),i=0;return V.each(n.data,(function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))})),i},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?Rt*(Math.abs(t)/e):0},getMaxBorderWidth:function(t){var e,n,i,a,r,o,s,l,u=0,d=this.chart;if(!t)for(e=0,n=d.data.datasets.length;e<n;++e)if(d.isDatasetVisible(e)){t=(i=d.getDatasetMeta(e)).data,e!==this.index&&(r=i.controller);break}if(!t)return 0;for(e=0,n=t.length;e<n;++e)a=t[e],r?(r._configure(),o=r._resolveDataElementOptions(a,e)):o=a._options,"inner"!==o.borderAlign&&(s=o.borderWidth,u=(l=o.hoverBorderWidth)>(u=s>u?s:u)?l:u);return u},setHoverStyle:function(t){var e=t._model,n=t._options,i=V.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=Lt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Lt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Lt(n.hoverBorderWidth,n.borderWidth)},_getRingWeightOffset:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&(e+=this._getRingWeight(n));return e},_getRingWeight:function(t){return Math.max(Lt(this.chart.data.datasets[t].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});z._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),z._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Bt=Dt.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Et=V.valueOrDefault,Wt=V.options.resolve,Vt=V.canvas._isPointInArea;function Ht(t,e){var n=t&&t.options.ticks||{},i=n.reverse,a=void 0===n.min?e:0,r=void 0===n.max?e:0;return{start:i?r:a,end:i?a:r}}function jt(t,e,n){var i=n/2,a=Ht(t,i),r=Ht(e,i);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function qt(t){var e,n,i,a;return V.isObject(t)?(e=t.top,n=t.right,i=t.bottom,a=t.left):e=n=i=a=t,{top:e,right:n,bottom:i,left:a}}z._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var Ut=nt.extend({datasetElementType:_t.Line,dataElementType:_t.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.options,l=i._config,u=i._showLine=Et(l.showLine,s.showLines);for(i._xScale=i.getScaleForId(a.xAxisID),i._yScale=i.getScaleForId(a.yAxisID),u&&(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=i._yScale,r._datasetIndex=i.index,r._children=o,r._model=i._resolveDatasetElementOptions(r),r.pivot()),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(u&&0!==r._model.tension&&i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i,a,r=this,o=r.getMeta(),s=t.custom||{},l=r.getDataset(),u=r.index,d=l.data[e],h=r._xScale,c=r._yScale,f=o.dataset._model,g=r._resolveDataElementOptions(t,e);i=h.getPixelForValue("object"==typeof d?d:NaN,e,u),a=n?c.getBasePixel():r.calculatePointY(d,e,u),t._xScale=h,t._yScale=c,t._options=g,t._datasetIndex=u,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:Et(s.tension,f?f.tension:0),steppedLine:!!f&&f.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(t){var e=this,n=e._config,i=t.custom||{},a=e.chart.options,r=a.elements.line,o=nt.prototype._resolveDatasetElementOptions.apply(e,arguments);return o.spanGaps=Et(n.spanGaps,a.spanGaps),o.tension=Et(n.lineTension,r.tension),o.steppedLine=Wt([i.steppedLine,n.steppedLine,r.stepped]),o.clip=qt(Et(n.clip,jt(e._xScale,e._yScale,o.borderWidth))),o},calculatePointY:function(t,e,n){var i,a,r,o,s,l,u,d=this.chart,h=this._yScale,c=0,f=0;if(h.options.stacked){for(s=+h.getRightValue(t),u=(l=d._getSortedVisibleDatasetMetas()).length,i=0;i<u&&(r=l[i]).index!==n;++i)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===h.id&&((o=+h.getRightValue(a.data[e]))<0?f+=o||0:c+=o||0);return s<0?h.getPixelForValue(f+s):h.getPixelForValue(c+s)}return h.getPixelForValue(t)},updateBezierControlPoints:function(){var t,e,n,i,a=this.chart,r=this.getMeta(),o=r.dataset._model,s=a.chartArea,l=r.data||[];function u(t,e,n){return Math.max(Math.min(t,n),e)}if(o.spanGaps&&(l=l.filter((function(t){return!t._model.skip}))),"monotone"===o.cubicInterpolationMode)V.splineCurveMonotone(l);else for(t=0,e=l.length;t<e;++t)n=l[t]._model,i=V.splineCurve(V.previousItem(l,t)._model,n,V.nextItem(l,t)._model,o.tension),n.controlPointPreviousX=i.previous.x,n.controlPointPreviousY=i.previous.y,n.controlPointNextX=i.next.x,n.controlPointNextY=i.next.y;if(a.options.elements.line.capBezierPoints)for(t=0,e=l.length;t<e;++t)n=l[t]._model,Vt(n,s)&&(t>0&&Vt(l[t-1]._model,s)&&(n.controlPointPreviousX=u(n.controlPointPreviousX,s.left,s.right),n.controlPointPreviousY=u(n.controlPointPreviousY,s.top,s.bottom)),t<l.length-1&&Vt(l[t+1]._model,s)&&(n.controlPointNextX=u(n.controlPointNextX,s.left,s.right),n.controlPointNextY=u(n.controlPointNextY,s.top,s.bottom)))},draw:function(){var t,e=this.chart,n=this.getMeta(),i=n.data||[],a=e.chartArea,r=e.canvas,o=0,s=i.length;for(this._showLine&&(t=n.dataset._model.clip,V.canvas.clipArea(e.ctx,{left:!1===t.left?0:a.left-t.left,right:!1===t.right?r.width:a.right+t.right,top:!1===t.top?0:a.top-t.top,bottom:!1===t.bottom?r.height:a.bottom+t.bottom}),n.dataset.draw(),V.canvas.unclipArea(e.ctx));o<s;++o)i[o].draw(a)},setHoverStyle:function(t){var e=t._model,n=t._options,i=V.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Et(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Et(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Et(n.hoverBorderWidth,n.borderWidth),e.radius=Et(n.hoverRadius,n.radius)}}),Yt=V.options.resolve;z._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data,o=r.datasets,s=r.labels;if(a.setAttribute("class",t.id+"-legend"),o.length)for(e=0,n=o[0].data.length;e<n;++e)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=o[0].backgroundColor[e],s[e]&&i.appendChild(document.createTextNode(s[e]));return a.outerHTML},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map((function(n,i){var a=t.getDatasetMeta(0),r=a.controller.getStyle(i);return{text:n,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[i])||a.data[i].hidden,index:i}})):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)(a=o.getDatasetMeta(n)).data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}});var Gt=nt.extend({dataElementType:_t.Arc,linkScales:V.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i,a=this,r=a.getDataset(),o=a.getMeta(),s=a.chart.options.startAngle||0,l=a._starts=[],u=a._angles=[],d=o.data;for(a._updateRadius(),o.count=a.countVisibleElements(),e=0,n=r.data.length;e<n;e++)l[e]=s,i=a._computeAngle(e),u[e]=i,s+=i;for(e=0,n=d.length;e<n;++e)d[e]._options=a._resolveDataElementOptions(d[e],e),a.updateElement(d[e],e,t)},_updateRadius:function(){var t=this,e=t.chart,n=e.chartArea,i=e.options,a=Math.min(n.right-n.left,n.bottom-n.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(i.cutoutPercentage?e.outerRadius/100*i.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),t.outerRadius=e.outerRadius-e.radiusLength*t.index,t.innerRadius=t.outerRadius-e.radiusLength},updateElement:function(t,e,n){var i=this,a=i.chart,r=i.getDataset(),o=a.options,s=o.animation,l=a.scale,u=a.data.labels,d=l.xCenter,h=l.yCenter,c=o.startAngle,f=t.hidden?0:l.getDistanceFromCenterForValue(r.data[e]),g=i._starts[e],p=g+(t.hidden?0:i._angles[e]),m=s.animateScale?0:l.getDistanceFromCenterForValue(r.data[e]),v=t._options||{};V.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{backgroundColor:v.backgroundColor,borderColor:v.borderColor,borderWidth:v.borderWidth,borderAlign:v.borderAlign,x:d,y:h,innerRadius:0,outerRadius:n?m:f,startAngle:n&&s.animateRotate?c:g,endAngle:n&&s.animateRotate?c:p,label:V.valueAtIndexOrDefault(u,e,u[e])}}),t.pivot()},countVisibleElements:function(){var t=this.getDataset(),e=this.getMeta(),n=0;return V.each(e.data,(function(e,i){isNaN(t.data[i])||e.hidden||n++})),n},setHoverStyle:function(t){var e=t._model,n=t._options,i=V.getHoverColor,a=V.valueOrDefault;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=a(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=a(n.hoverBorderWidth,n.borderWidth)},_computeAngle:function(t){var e=this,n=this.getMeta().count,i=e.getDataset(),a=e.getMeta();if(isNaN(i.data[t])||a.data[t].hidden)return 0;var r={chart:e.chart,dataIndex:t,dataset:i,datasetIndex:e.index};return Yt([e.chart.options.elements.arc.angle,2*Math.PI/n],r,t)}});z._set("pie",V.clone(z.doughnut)),z._set("pie",{cutoutPercentage:0});var Xt=Nt,Kt=V.valueOrDefault;z._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var Zt=nt.extend({datasetElementType:_t.Line,dataElementType:_t.Point,linkScales:V.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(t){var e,n,i=this,a=i.getMeta(),r=a.dataset,o=a.data||[],s=i.chart.scale,l=i._config;for(void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),r._scale=s,r._datasetIndex=i.index,r._children=o,r._loop=!0,r._model=i._resolveDatasetElementOptions(r),r.pivot(),e=0,n=o.length;e<n;++e)i.updateElement(o[e],e,t);for(i.updateBezierControlPoints(),e=0,n=o.length;e<n;++e)o[e].pivot()},updateElement:function(t,e,n){var i=this,a=t.custom||{},r=i.getDataset(),o=i.chart.scale,s=o.getPointPositionForValue(e,r.data[e]),l=i._resolveDataElementOptions(t,e),u=i.getMeta().dataset._model,d=n?o.xCenter:s.x,h=n?o.yCenter:s.y;t._scale=o,t._options=l,t._datasetIndex=i.index,t._index=e,t._model={x:d,y:h,skip:a.skip||isNaN(d)||isNaN(h),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Kt(a.tension,u?u.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var t=this,e=t._config,n=t.chart.options,i=nt.prototype._resolveDatasetElementOptions.apply(t,arguments);return i.spanGaps=Kt(e.spanGaps,n.spanGaps),i.tension=Kt(e.lineTension,n.elements.line.tension),i},updateBezierControlPoints:function(){var t,e,n,i,a=this.getMeta(),r=this.chart.chartArea,o=a.data||[];function s(t,e,n){return Math.max(Math.min(t,n),e)}for(a.dataset._model.spanGaps&&(o=o.filter((function(t){return!t._model.skip}))),t=0,e=o.length;t<e;++t)n=o[t]._model,i=V.splineCurve(V.previousItem(o,t,!0)._model,n,V.nextItem(o,t,!0)._model,n.tension),n.controlPointPreviousX=s(i.previous.x,r.left,r.right),n.controlPointPreviousY=s(i.previous.y,r.top,r.bottom),n.controlPointNextX=s(i.next.x,r.left,r.right),n.controlPointNextY=s(i.next.y,r.top,r.bottom)},setHoverStyle:function(t){var e=t._model,n=t._options,i=V.getHoverColor;t.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=Kt(n.hoverBackgroundColor,i(n.backgroundColor)),e.borderColor=Kt(n.hoverBorderColor,i(n.borderColor)),e.borderWidth=Kt(n.hoverBorderWidth,n.borderWidth),e.radius=Kt(n.hoverRadius,n.radius)}});z._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),z._set("global",{datasets:{scatter:{showLine:!1}}});var $t={bar:Dt,bubble:Ft,doughnut:Nt,horizontalBar:Bt,line:Ut,polarArea:Gt,pie:Xt,radar:Zt,scatter:Ut};function Jt(t,e){return t.native?{x:t.x,y:t.y}:V.getRelativePosition(t,e)}function Qt(t,e){var n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas();for(i=0,r=l.length;i<r;++i)for(a=0,o=(n=l[i].data).length;a<o;++a)(s=n[a])._view.skip||e(s)}function te(t,e){var n=[];return Qt(t,(function(t){t.inRange(e.x,e.y)&&n.push(t)})),n}function ee(t,e,n,i){var a=Number.POSITIVE_INFINITY,r=[];return Qt(t,(function(t){if(!n||t.inRange(e.x,e.y)){var o=t.getCenterPoint(),s=i(e,o);s<a?(r=[t],a=s):s===a&&r.push(t)}})),r}function ne(t){var e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return function(t,i){var a=e?Math.abs(t.x-i.x):0,r=n?Math.abs(t.y-i.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ie(t,e,n){var i=Jt(e,t);n.axis=n.axis||"x";var a=ne(n.axis),r=n.intersect?te(t,i):ee(t,i,!1,a),o=[];return r.length?(t._getSortedVisibleDatasetMetas().forEach((function(t){var e=t.data[r[0]._index];e&&!e._view.skip&&o.push(e)})),o):[]}var ae={modes:{single:function(t,e){var n=Jt(e,t),i=[];return Qt(t,(function(t){if(t.inRange(n.x,n.y))return i.push(t),i})),i.slice(0,1)},label:ie,index:ie,dataset:function(t,e,n){var i=Jt(e,t);n.axis=n.axis||"xy";var a=ne(n.axis),r=n.intersect?te(t,i):ee(t,i,!1,a);return r.length>0&&(r=t.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(t,e){return ie(t,e,{intersect:!1})},point:function(t,e){return te(t,Jt(e,t))},nearest:function(t,e,n){var i=Jt(e,t);n.axis=n.axis||"xy";var a=ne(n.axis);return ee(t,i,n.intersect,a)},x:function(t,e,n){var i=Jt(e,t),a=[],r=!1;return Qt(t,(function(t){t.inXRange(i.x)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a},y:function(t,e,n){var i=Jt(e,t),a=[],r=!1;return Qt(t,(function(t){t.inYRange(i.y)&&a.push(t),t.inRange(i.x,i.y)&&(r=!0)})),n.intersect&&!r&&(a=[]),a}}},re=V.extend;function oe(t,e){return V.where(t,(function(t){return t.pos===e}))}function se(t,e){return t.sort((function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i.index-a.index:i.weight-a.weight}))}function le(t,e,n,i){return Math.max(t[n],e[n])+Math.max(t[i],e[i])}function ue(t,e,n){var i,a,r=n.box,o=t.maxPadding;if(n.size&&(t[n.pos]-=n.size),n.size=n.horizontal?r.height:r.width,t[n.pos]+=n.size,r.getPadding){var s=r.getPadding();o.top=Math.max(o.top,s.top),o.left=Math.max(o.left,s.left),o.bottom=Math.max(o.bottom,s.bottom),o.right=Math.max(o.right,s.right)}if(i=e.outerWidth-le(o,t,"left","right"),a=e.outerHeight-le(o,t,"top","bottom"),i!==t.w||a!==t.h)return t.w=i,t.h=a,n.horizontal?i!==t.w:a!==t.h}function de(t,e){var n=e.maxPadding;function i(t){var i={left:0,top:0,right:0,bottom:0};return t.forEach((function(t){i[t]=Math.max(e[t],n[t])})),i}return i(t?["left","right"]:["top","bottom"])}function he(t,e,n){var i,a,r,o,s,l,u=[];for(i=0,a=t.length;i<a;++i)(o=(r=t[i]).box).update(r.width||e.w,r.height||e.h,de(r.horizontal,e)),ue(e,n,r)&&(l=!0,u.length&&(s=!0)),o.fullWidth||u.push(r);return s&&he(u,e,n)||l}function ce(t,e,n){var i,a,r,o,s=n.padding,l=e.x,u=e.y;for(i=0,a=t.length;i<a;++i)o=(r=t[i]).box,r.horizontal?(o.left=o.fullWidth?s.left:e.left,o.right=o.fullWidth?n.outerWidth-s.right:e.left+e.w,o.top=u,o.bottom=u+o.height,o.width=o.right-o.left,u=o.bottom):(o.left=l,o.right=l+o.width,o.top=e.top,o.bottom=e.top+e.h,o.height=o.bottom-o.top,l=o.right);e.x=l,e.y=u}z._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var fe,ge={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],r=a.length,o=0;o<r;++o)i=a[o],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,e,n){if(t){var i=t.options.layout||{},a=V.options.toPadding(i.padding),r=e-a.width,o=n-a.height,s=function(t){var e=function(t){var e,n,i,a=[];for(e=0,n=(t||[]).length;e<n;++e)i=t[e],a.push({index:e,box:i,pos:i.position,horizontal:i.isHorizontal(),weight:i.weight});return a}(t),n=se(oe(e,"left"),!0),i=se(oe(e,"right")),a=se(oe(e,"top"),!0),r=se(oe(e,"bottom"));return{leftAndTop:n.concat(a),rightAndBottom:i.concat(r),chartArea:oe(e,"chartArea"),vertical:n.concat(i),horizontal:a.concat(r)}}(t.boxes),l=s.vertical,u=s.horizontal,d=Object.freeze({outerWidth:e,outerHeight:n,padding:a,availableWidth:r,vBoxMaxWidth:r/2/l.length,hBoxMaxHeight:o/2}),h=re({maxPadding:re({},a),w:r,h:o,x:a.left,y:a.top},a);!function(t,e){var n,i,a;for(n=0,i=t.length;n<i;++n)(a=t[n]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}(l.concat(u),d),he(l,h,d),he(u,h,d)&&he(l,h,d),function(t){var e=t.maxPadding;function n(n){var i=Math.max(e[n]-t[n],0);return t[n]+=i,i}t.y+=n("top"),t.x+=n("left"),n("right"),n("bottom")}(h),ce(s.leftAndTop,h,d),h.x+=h.w,h.y+=h.h,ce(s.rightAndBottom,h,d),t.chartArea={left:h.left,top:h.top,right:h.left+h.w,bottom:h.top+h.h},V.each(s.chartArea,(function(e){var n=e.box;re(n,t.chartArea),n.update(h.w,h.h)}))}}},pe=(fe=Object.freeze({__proto__:null,default:"@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}"}))&&fe.default||fe,me="$chartjs",ve="chartjs-size-monitor",be="chartjs-render-monitor",xe="chartjs-render-animation",ye=["animationstart","webkitAnimationStart"],_e={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function ke(t,e){var n=V.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}var we=!!function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return t}()&&{passive:!0};function Me(t,e,n){t.addEventListener(e,n,we)}function Se(t,e,n){t.removeEventListener(e,n,we)}function Ce(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function Pe(t){var e=document.createElement("div");return e.className=t||"",e}function Ae(t,e,n){var i,a,r,o,s=t[me]||(t[me]={}),l=s.resizer=function(t){var e=Pe(ve),n=Pe(ve+"-expand"),i=Pe(ve+"-shrink");n.appendChild(Pe()),i.appendChild(Pe()),e.appendChild(n),e.appendChild(i),e._reset=function(){n.scrollLeft=1e6,n.scrollTop=1e6,i.scrollLeft=1e6,i.scrollTop=1e6};var a=function(){e._reset(),t()};return Me(n,"scroll",a.bind(n,"expand")),Me(i,"scroll",a.bind(i,"shrink")),e}((i=function(){if(s.resizer){var i=n.options.maintainAspectRatio&&t.parentNode,a=i?i.clientWidth:0;e(Ce("resize",n)),i&&i.clientWidth<a&&n.canvas&&e(Ce("resize",n))}},r=!1,o=[],function(){o=Array.prototype.slice.call(arguments),a=a||this,r||(r=!0,V.requestAnimFrame.call(window,(function(){r=!1,i.apply(a,o)})))}));!function(t,e){var n=t[me]||(t[me]={}),i=n.renderProxy=function(t){t.animationName===xe&&e()};V.each(ye,(function(e){Me(t,e,i)})),n.reflow=!!t.offsetParent,t.classList.add(be)}(t,(function(){if(s.resizer){var e=t.parentNode;e&&e!==l.parentNode&&e.insertBefore(l,e.firstChild),l._reset()}}))}function De(t){var e=t[me]||{},n=e.resizer;delete e.resizer,function(t){var e=t[me]||{},n=e.renderProxy;n&&(V.each(ye,(function(e){Se(t,e,n)})),delete e.renderProxy),t.classList.remove(be)}(t),n&&n.parentNode&&n.parentNode.removeChild(n)}var Te={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(t){if(!this.disableCSSInjection){var e=t.getRootNode?t.getRootNode():document;!function(t,e){var n=t[me]||(t[me]={});if(!n.containsStyles){n.containsStyles=!0,e="/* Chart.js */\n"+e;var i=document.createElement("style");i.setAttribute("type","text/css"),i.appendChild(document.createTextNode(e)),t.appendChild(i)}}(e.host?e:document.head,pe)}},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var n=t&&t.getContext&&t.getContext("2d");return n&&n.canvas===t?(this._ensureLoaded(t),function(t,e){var n=t.style,i=t.getAttribute("height"),a=t.getAttribute("width");if(t[me]={initial:{height:i,width:a,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===a||""===a){var r=ke(t,"width");void 0!==r&&(t.width=r)}if(null===i||""===i)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var o=ke(t,"height");void 0!==r&&(t.height=o)}}(t,e),n):null},releaseContext:function(t){var e=t.canvas;if(e[me]){var n=e[me].initial;["height","width"].forEach((function(t){var i=n[t];V.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)})),V.each(n.style||{},(function(t,n){e.style[n]=t})),e.width=e.width,delete e[me]}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=n[me]||(n[me]={});Me(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(function(t,e){var n=_e[t.type]||t.type,i=V.getRelativePosition(t,e);return Ce(n,e,i.x,i.y,t)}(e,t))})}else Ae(i,n,t)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"!==e){var a=((n[me]||{}).proxies||{})[t.id+"_"+e];a&&Se(i,e,a)}else De(i)}};V.addEvent=Me,V.removeEvent=Se;var Ie=Te._enabled?Te:{acquireContext:function(t){return t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}},Fe=V.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Ie);z._set("global",{plugins:{}});var Le={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach((function(t){-1===e.indexOf(t)&&e.push(t)})),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach((function(t){var n=e.indexOf(t);-1!==n&&e.splice(n,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if("function"==typeof(s=(r=(a=l[i]).plugin)[e])&&((o=[t].concat(n||[])).push(a.options),!1===s.apply(r,o)))return!1;return!0},descriptors:function(t){var e=t.$plugins||(t.$plugins={});if(e.id===this._cacheId)return e.descriptors;var n=[],i=[],a=t&&t.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(t){if(-1===n.indexOf(t)){var e=t.id,a=r[e];!1!==a&&(!0===a&&(a=V.clone(z.global.plugins[e])),n.push(t),i.push({plugin:t,options:a||{}}))}})),e.descriptors=i,e.id=this._cacheId,i},_invalidate:function(t){delete t.$plugins}},Oe={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=V.clone(n)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(t){return this.defaults.hasOwnProperty(t)?V.merge({},[z.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){this.defaults.hasOwnProperty(t)&&(this.defaults[t]=V.extend(this.defaults[t],e))},addScalesToLayout:function(t){V.each(t.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,ge.addBox(t,e)}))}},Re=V.valueOrDefault,ze=V.rtl.getRtlAdapter;z._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:V.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var r=t[0];r.label?n=r.label:r.xLabel?n=r.xLabel:a>0&&r.index<a&&(n=i[r.index])}return n},afterTitle:V.noop,beforeBody:V.noop,beforeLabel:V.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),V.isNullOrUndef(t.value)?n+=t.yLabel:n+=t.value,n},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:V.noop,afterBody:V.noop,beforeFooter:V.noop,footer:V.noop,afterFooter:V.noop}}});var Ne={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,r=0;for(e=0,n=t.length;e<n;++e){var o=t[e];if(o&&o.hasValue()){var s=o.tooltipPosition();i+=s.x,a+=s.y,++r}}return{x:i/r,y:a/r}},nearest:function(t,e){var n,i,a,r=e.x,o=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var l=t[n];if(l&&l.hasValue()){var u=l.getCenterPoint(),d=V.distanceBetweenPoints(e,u);d<s&&(s=d,a=l)}}if(a){var h=a.tooltipPosition();r=h.x,o=h.y}return{x:r,y:o}}};function Be(t,e){return e&&(V.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Ee(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function We(t){var e=z.global;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,rtl:t.rtl,textDirection:t.textDirection,bodyFontColor:t.bodyFontColor,_bodyFontFamily:Re(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:Re(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:Re(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:Re(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:Re(t.titleFontStyle,e.defaultFontStyle),titleFontSize:Re(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:Re(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:Re(t.footerFontStyle,e.defaultFontStyle),footerFontSize:Re(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function Ve(t,e){return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-t.xPadding:t.x+t.xPadding}function He(t){return Be([],Ee(t))}var je=X.extend({initialize:function(){this._model=We(this._options),this._lastActive=[]},getTitle:function(){var t=this,e=t._options,n=e.callbacks,i=n.beforeTitle.apply(t,arguments),a=n.title.apply(t,arguments),r=n.afterTitle.apply(t,arguments),o=[];return o=Be(o,Ee(i)),o=Be(o,Ee(a)),o=Be(o,Ee(r))},getBeforeBody:function(){return He(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(t,e){var n=this,i=n._options.callbacks,a=[];return V.each(t,(function(t){var r={before:[],lines:[],after:[]};Be(r.before,Ee(i.beforeLabel.call(n,t,e))),Be(r.lines,i.label.call(n,t,e)),Be(r.after,Ee(i.afterLabel.call(n,t,e))),a.push(r)})),a},getAfterBody:function(){return He(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var t=this,e=t._options.callbacks,n=e.beforeFooter.apply(t,arguments),i=e.footer.apply(t,arguments),a=e.afterFooter.apply(t,arguments),r=[];return r=Be(r,Ee(n)),r=Be(r,Ee(i)),r=Be(r,Ee(a))},update:function(t){var e,n,i,a,r,o,s,l,u,d,h=this,c=h._options,f=h._model,g=h._model=We(c),p=h._active,m=h._data,v={xAlign:f.xAlign,yAlign:f.yAlign},b={x:f.x,y:f.y},x={width:f.width,height:f.height},y={x:f.caretX,y:f.caretY};if(p.length){g.opacity=1;var _=[],k=[];y=Ne[c.position].call(h,p,h._eventPosition);var w=[];for(e=0,n=p.length;e<n;++e)w.push((i=p[e],a=void 0,r=void 0,o=void 0,s=void 0,l=void 0,u=void 0,d=void 0,a=i._xScale,r=i._yScale||i._scale,o=i._index,s=i._datasetIndex,l=i._chart.getDatasetMeta(s).controller,u=l._getIndexScale(),d=l._getValueScale(),{xLabel:a?a.getLabelForIndex(o,s):"",yLabel:r?r.getLabelForIndex(o,s):"",label:u?""+u.getLabelForIndex(o,s):"",value:d?""+d.getLabelForIndex(o,s):"",index:o,datasetIndex:s,x:i._model.x,y:i._model.y}));c.filter&&(w=w.filter((function(t){return c.filter(t,m)}))),c.itemSort&&(w=w.sort((function(t,e){return c.itemSort(t,e,m)}))),V.each(w,(function(t){_.push(c.callbacks.labelColor.call(h,t,h._chart)),k.push(c.callbacks.labelTextColor.call(h,t,h._chart))})),g.title=h.getTitle(w,m),g.beforeBody=h.getBeforeBody(w,m),g.body=h.getBody(w,m),g.afterBody=h.getAfterBody(w,m),g.footer=h.getFooter(w,m),g.x=y.x,g.y=y.y,g.caretPadding=c.caretPadding,g.labelColors=_,g.labelTextColors=k,g.dataPoints=w,x=function(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,o=r.reduce((function(t,e){return t+e.before.length+e.lines.length+e.after.length}),0);o+=e.beforeBody.length+e.afterBody.length;var s=e.title.length,l=e.footer.length,u=e.titleFontSize,d=e.bodyFontSize,h=e.footerFontSize;i+=s*u,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=o*d,i+=o?(o-1)*e.bodySpacing:0,i+=l?e.footerMarginTop:0,i+=l*h,i+=l?(l-1)*e.footerSpacing:0;var c=0,f=function(t){a=Math.max(a,n.measureText(t).width+c)};return n.font=V.fontString(u,e._titleFontStyle,e._titleFontFamily),V.each(e.title,f),n.font=V.fontString(d,e._bodyFontStyle,e._bodyFontFamily),V.each(e.beforeBody.concat(e.afterBody),f),c=e.displayColors?d+2:0,V.each(r,(function(t){V.each(t.before,f),V.each(t.lines,f),V.each(t.after,f)})),c=0,n.font=V.fontString(h,e._footerFontStyle,e._footerFontFamily),V.each(e.footer,f),{width:a+=2*e.xPadding,height:i}}(this,g),b=function(t,e,n,i){var a=t.x,r=t.y,o=t.caretSize,s=t.caretPadding,l=t.cornerRadius,u=n.xAlign,d=n.yAlign,h=o+s,c=l+s;return"right"===u?a-=e.width:"center"===u&&((a-=e.width/2)+e.width>i.width&&(a=i.width-e.width),a<0&&(a=0)),"top"===d?r+=h:r-="bottom"===d?e.height+h:e.height/2,"center"===d?"left"===u?a+=h:"right"===u&&(a-=h):"left"===u?a-=c:"right"===u&&(a+=c),{x:a,y:r}}(g,x,v=function(t,e){var n,i,a,r,o,s=t._model,l=t._chart,u=t._chart.chartArea,d="center",h="center";s.y<e.height?h="top":s.y>l.height-e.height&&(h="bottom");var c=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===h?(n=function(t){return t<=c},i=function(t){return t>c}):(n=function(t){return t<=e.width/2},i=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},r=function(t){return t-e.width-s.caretSize-s.caretPadding<0},o=function(t){return t<=f?"top":"bottom"},n(s.x)?(d="left",a(s.x)&&(d="center",h=o(s.y))):i(s.x)&&(d="right",r(s.x)&&(d="center",h=o(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:h}}(this,x),h._chart)}else g.opacity=0;return g.xAlign=v.xAlign,g.yAlign=v.yAlign,g.x=b.x,g.y=b.y,g.width=x.width,g.height=x.height,g.caretX=y.x,g.caretY=y.y,h._model=g,t&&c.custom&&c.custom.call(h,g),h},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,r,o,s,l,u=n.caretSize,d=n.cornerRadius,h=n.xAlign,c=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===c)s=g+m/2,"left"===h?(a=(i=f)-u,r=i,o=s+u,l=s-u):(a=(i=f+p)+u,r=i,o=s-u,l=s+u);else if("left"===h?(i=(a=f+d+u)-u,r=a+u):"right"===h?(i=(a=f+p-d-u)-u,r=a+u):(i=(a=n.caretX)-u,r=a+u),"top"===c)s=(o=g)-u,l=o;else{s=(o=g+m)+u,l=o;var v=r;r=i,i=v}return{x1:i,x2:a,x3:r,y1:o,y2:s,y3:l}},drawTitle:function(t,e,n){var i,a,r,o=e.title,s=o.length;if(s){var l=ze(e.rtl,e.x,e.width);for(t.x=Ve(e,e._titleAlign),n.textAlign=l.textAlign(e._titleAlign),n.textBaseline="middle",i=e.titleFontSize,a=e.titleSpacing,n.fillStyle=e.titleFontColor,n.font=V.fontString(i,e._titleFontStyle,e._titleFontFamily),r=0;r<s;++r)n.fillText(o[r],l.x(t.x),t.y+i/2),t.y+=i+a,r+1===s&&(t.y+=e.titleMarginBottom-a)}},drawBody:function(t,e,n){var i,a,r,o,s,l,u,d,h=e.bodyFontSize,c=e.bodySpacing,f=e._bodyAlign,g=e.body,p=e.displayColors,m=0,v=p?Ve(e,"left"):0,b=ze(e.rtl,e.x,e.width),x=function(e){n.fillText(e,b.x(t.x+m),t.y+h/2),t.y+=h+c},y=b.textAlign(f);for(n.textAlign=f,n.textBaseline="middle",n.font=V.fontString(h,e._bodyFontStyle,e._bodyFontFamily),t.x=Ve(e,y),n.fillStyle=e.bodyFontColor,V.each(e.beforeBody,x),m=p&&"right"!==y?"center"===f?h/2+1:h+2:0,s=0,u=g.length;s<u;++s){for(i=g[s],a=e.labelTextColors[s],r=e.labelColors[s],n.fillStyle=a,V.each(i.before,x),l=0,d=(o=i.lines).length;l<d;++l){if(p){var _=b.x(v);n.fillStyle=e.legendColorBackground,n.fillRect(b.leftForLtr(_,h),t.y,h,h),n.lineWidth=1,n.strokeStyle=r.borderColor,n.strokeRect(b.leftForLtr(_,h),t.y,h,h),n.fillStyle=r.backgroundColor,n.fillRect(b.leftForLtr(b.xPlus(_,1),h-2),t.y+1,h-2,h-2),n.fillStyle=a}x(o[l])}V.each(i.after,x)}m=0,V.each(e.afterBody,x),t.y-=c},drawFooter:function(t,e,n){var i,a,r=e.footer,o=r.length;if(o){var s=ze(e.rtl,e.x,e.width);for(t.x=Ve(e,e._footerAlign),t.y+=e.footerMarginTop,n.textAlign=s.textAlign(e._footerAlign),n.textBaseline="middle",i=e.footerFontSize,n.fillStyle=e.footerFontColor,n.font=V.fontString(i,e._footerFontStyle,e._footerFontFamily),a=0;a<o;++a)n.fillText(r[a],s.x(t.x),t.y+i/2),t.y+=i+e.footerSpacing}},drawBackground:function(t,e,n,i){n.fillStyle=e.backgroundColor,n.strokeStyle=e.borderColor,n.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,o=t.x,s=t.y,l=i.width,u=i.height,d=e.cornerRadius;n.beginPath(),n.moveTo(o+d,s),"top"===r&&this.drawCaret(t,i),n.lineTo(o+l-d,s),n.quadraticCurveTo(o+l,s,o+l,s+d),"center"===r&&"right"===a&&this.drawCaret(t,i),n.lineTo(o+l,s+u-d),n.quadraticCurveTo(o+l,s+u,o+l-d,s+u),"bottom"===r&&this.drawCaret(t,i),n.lineTo(o+d,s+u),n.quadraticCurveTo(o,s+u,o,s+u-d),"center"===r&&"left"===a&&this.drawCaret(t,i),n.lineTo(o,s+d),n.quadraticCurveTo(o,s,o+d,s),n.closePath(),n.fill(),e.borderWidth>0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(t.save(),t.globalAlpha=a,this.drawBackground(i,e,t,n),i.y+=e.yPadding,V.rtl.overrideTextDirection(t,e.textDirection),this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),V.rtl.restoreTextDirection(t,e.textDirection),t.restore())}},handleEvent:function(t){var e,n=this,i=n._options;return n._lastActive=n._lastActive||[],"mouseout"===t.type?n._active=[]:(n._active=n._chart.getElementsAtEventForMode(t,i.mode,i),i.reverse&&n._active.reverse()),(e=!V.arrayEquals(n._active,n._lastActive))&&(n._lastActive=n._active,(i.enabled||i.custom)&&(n._eventPosition={x:t.x,y:t.y},n.update(!0),n.pivot())),e}}),qe=Ne,Ue=je;Ue.positioners=qe;var Ye=V.valueOrDefault;function Ge(){return V.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){if("xAxes"===t||"yAxes"===t){var a,r,o,s=n[t].length;for(e[t]||(e[t]=[]),a=0;a<s;++a)o=n[t][a],r=Ye(o.type,"xAxes"===t?"category":"linear"),a>=e[t].length&&e[t].push({}),!e[t][a].type||o.type&&o.type!==e[t][a].type?V.merge(e[t][a],[Oe.getScaleDefaults(r),o]):V.merge(e[t][a],o)}else V._merger(t,e,n,i)}})}function Xe(){return V.merge({},[].slice.call(arguments),{merger:function(t,e,n,i){var a=e[t]||{},r=n[t];"scales"===t?e[t]=Ge(a,r):"scale"===t?e[t]=V.merge(a,[Oe.getScaleDefaults(r.type),r]):V._merger(t,e,n,i)}})}function Ke(t){var e=t.options;V.each(t.scales,(function(e){ge.removeBox(t,e)})),e=Xe(z.global,z[t.config.type],e),t.options=t.config.options=e,t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.tooltip._options=e.tooltips,t.tooltip.initialize()}function Ze(t,e,n){var i,a=function(t){return t.id===i};do{i=e+n++}while(V.findIndex(t,a)>=0);return i}function $e(t){return"top"===t||"bottom"===t}function Je(t,e){return function(n,i){return n[t]===i[t]?n[e]-i[e]:n[t]-i[t]}}z._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Qe=function(t,e){return this.construct(t,e),this};V.extend(Qe.prototype,{construct:function(t,e){var n=this;e=function(t){var e=(t=t||{}).data=t.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=Xe(z.global,z[t.type],t.options||{}),t}(e);var i=Fe.acquireContext(t,e),a=i&&i.canvas,r=a&&a.height,o=a&&a.width;n.id=V.uid(),n.ctx=i,n.canvas=a,n.config=e,n.width=o,n.height=r,n.aspectRatio=r?o/r:null,n.options=e.options,n._bufferedRender=!1,n._layers=[],n.chart=n,n.controller=n,Qe.instances[n.id]=n,Object.defineProperty(n,"data",{get:function(){return n.config.data},set:function(t){n.config.data=t}}),i&&a?(n.initialize(),n.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return Le.notify(t,"beforeInit"),V.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.initToolTip(),Le.notify(t,"afterInit"),t},clear:function(){return V.canvas.clear(this),this},stop:function(){return $.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,a=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(V.getMaximumWidth(i))),o=Math.max(0,Math.floor(a?r/a:V.getMaximumHeight(i)));if((e.width!==r||e.height!==o)&&(i.width=e.width=r,i.height=e.height=o,i.style.width=r+"px",i.style.height=o+"px",V.retinaScale(e,n.devicePixelRatio),!t)){var s={width:r,height:o};Le.notify(e,"resize",[s]),n.onResize&&n.onResize(e,s),e.stop(),e.update({duration:n.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;V.each(e.xAxes,(function(t,n){t.id||(t.id=Ze(e.xAxes,"x-axis-",n))})),V.each(e.yAxes,(function(t,n){t.id||(t.id=Ze(e.yAxes,"y-axis-",n))})),n&&(n.id=n.id||"scale")},buildOrUpdateScales:function(){var t=this,e=t.options,n=t.scales||{},i=[],a=Object.keys(n).reduce((function(t,e){return t[e]=!1,t}),{});e.scales&&(i=i.concat((e.scales.xAxes||[]).map((function(t){return{options:t,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(t){return{options:t,dtype:"linear",dposition:"left"}})))),e.scale&&i.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),V.each(i,(function(e){var i=e.options,r=i.id,o=Ye(i.type,e.dtype);$e(i.position)!==$e(e.dposition)&&(i.position=e.dposition),a[r]=!0;var s=null;if(r in n&&n[r].type===o)(s=n[r]).options=i,s.ctx=t.ctx,s.chart=t;else{var l=Oe.getScaleConstructor(o);if(!l)return;s=new l({id:r,type:o,options:i,ctx:t.ctx,chart:t}),n[s.id]=s}s.mergeTicksOptions(),e.isDefault&&(t.scale=s)})),V.each(a,(function(t,e){t||delete n[e]})),t.scales=n,Oe.addScalesToLayout(this)},buildOrUpdateControllers:function(){var t,e,n=this,i=[],a=n.data.datasets;for(t=0,e=a.length;t<e;t++){var r=a[t],o=n.getDatasetMeta(t),s=r.type||n.config.type;if(o.type&&o.type!==s&&(n.destroyDatasetMeta(t),o=n.getDatasetMeta(t)),o.type=s,o.order=r.order||0,o.index=t,o.controller)o.controller.updateIndex(t),o.controller.linkScales();else{var l=$t[o.type];if(void 0===l)throw new Error('"'+o.type+'" is not a chart type.');o.controller=new l(n,t),i.push(o.controller)}}return i},resetElements:function(){var t=this;V.each(t.data.datasets,(function(e,n){t.getDatasetMeta(n).controller.reset()}),t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var e,n,i=this;if(t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]}),Ke(i),Le._invalidate(i),!1!==Le.notify(i,"beforeUpdate")){i.tooltip._data=i.data;var a=i.buildOrUpdateControllers();for(e=0,n=i.data.datasets.length;e<n;e++)i.getDatasetMeta(e).controller.buildOrUpdateElements();i.updateLayout(),i.options.animation&&i.options.animation.duration&&V.each(a,(function(t){t.reset()})),i.updateDatasets(),i.tooltip.initialize(),i.lastActive=[],Le.notify(i,"afterUpdate"),i._layers.sort(Je("z","_idx")),i._bufferedRender?i._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:i.render(t)}},updateLayout:function(){var t=this;!1!==Le.notify(t,"beforeLayout")&&(ge.update(this,this.width,this.height),t._layers=[],V.each(t.boxes,(function(e){e._configure&&e._configure(),t._layers.push.apply(t._layers,e._layers())}),t),t._layers.forEach((function(t,e){t._idx=e})),Le.notify(t,"afterScaleUpdate"),Le.notify(t,"afterLayout"))},updateDatasets:function(){if(!1!==Le.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t<e;++t)this.updateDataset(t);Le.notify(this,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this.getDatasetMeta(t),n={meta:e,index:t};!1!==Le.notify(this,"beforeDatasetUpdate",[n])&&(e.controller._update(),Le.notify(this,"afterDatasetUpdate",[n]))},render:function(t){var e=this;t&&"object"==typeof t||(t={duration:t,lazy:arguments[1]});var n=e.options.animation,i=Ye(t.duration,n&&n.duration),a=t.lazy;if(!1!==Le.notify(e,"beforeRender")){var r=function(t){Le.notify(e,"afterRender"),V.callback(n&&n.onComplete,[t],e)};if(n&&i){var o=new Z({numSteps:i/16.66,easing:t.easing||n.easing,render:function(t,e){var n=V.easing.effects[e.easing],i=e.currentStep,a=i/e.numSteps;t.draw(n(a),a,i)},onAnimationProgress:n.onProgress,onAnimationComplete:r});$.addAnimation(e,o,i,a)}else e.draw(),r(new Z({numSteps:0,chart:e}));return e}},draw:function(t){var e,n,i=this;if(i.clear(),V.isNullOrUndef(t)&&(t=1),i.transition(t),!(i.width<=0||i.height<=0)&&!1!==Le.notify(i,"beforeDraw",[t])){for(n=i._layers,e=0;e<n.length&&n[e].z<=0;++e)n[e].draw(i.chartArea);for(i.drawDatasets(t);e<n.length;++e)n[e].draw(i.chartArea);i._drawTooltip(t),Le.notify(i,"afterDraw",[t])}},transition:function(t){for(var e=0,n=(this.data.datasets||[]).length;e<n;++e)this.isDatasetVisible(e)&&this.getDatasetMeta(e).controller.transition(t);this.tooltip.transition(t)},_getSortedDatasetMetas:function(t){var e,n,i=[];for(e=0,n=(this.data.datasets||[]).length;e<n;++e)t&&!this.isDatasetVisible(e)||i.push(this.getDatasetMeta(e));return i.sort(Je("order","index")),i},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(t){var e,n;if(!1!==Le.notify(this,"beforeDatasetsDraw",[t])){for(n=(e=this._getSortedVisibleDatasetMetas()).length-1;n>=0;--n)this.drawDataset(e[n],t);Le.notify(this,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n={meta:t,index:t.index,easingValue:e};!1!==Le.notify(this,"beforeDatasetDraw",[n])&&(t.controller.draw(e),Le.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,n={tooltip:e,easingValue:t};!1!==Le.notify(this,"beforeTooltipDraw",[n])&&(e.draw(),Le.notify(this,"afterTooltipDraw",[n]))},getElementAtEvent:function(t){return ae.modes.single(this,t)},getElementsAtEvent:function(t){return ae.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return ae.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var i=ae.modes[e];return"function"==typeof i?i(this,t,n):[]},getDatasetAtEvent:function(t){return ae.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var n=e._meta[this.id];return n||(n=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e.order||0,index:t}),n},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(t){var e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete n._meta[e])},destroy:function(){var t,e,n=this,i=n.canvas;for(n.stop(),t=0,e=n.data.datasets.length;t<e;++t)n.destroyDatasetMeta(t);i&&(n.unbindEvents(),V.canvas.clear(n),Fe.releaseContext(n.ctx),n.canvas=null,n.ctx=null),Le.notify(n,"destroy"),delete Qe.instances[n.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var t=this;t.tooltip=new Ue({_chart:t,_chartInstance:t,_data:t.data,_options:t.options.tooltips},t)},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};V.each(t.options.events,(function(i){Fe.addEventListener(t,i,n),e[i]=n})),t.options.responsive&&(n=function(){t.resize()},Fe.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,V.each(e,(function(e,n){Fe.removeEventListener(t,n,e)})))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"set":"remove";for(a=0,r=t.length;a<r;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[o+"HoverStyle"](i);"dataset"===e&&this.getDatasetMeta(t[0]._datasetIndex).controller["_"+o+"DatasetHoverStyle"]()},eventHandler:function(t){var e=this,n=e.tooltip;if(!1!==Le.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);n&&(i=n._start?n.handleEvent(t):i|n.handleEvent(t)),Le.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a):i&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e,n=this,i=n.options||{},a=i.hover;return n.lastActive=n.lastActive||[],"mouseout"===t.type?n.active=[]:n.active=n.getElementsAtEventForMode(t,a.mode,a),V.callback(i.onHover||i.hover.onHover,[t.native,n.active],n),"mouseup"!==t.type&&"click"!==t.type||i.onClick&&i.onClick.call(n,t.native,n.active),n.lastActive.length&&n.updateHoverStyle(n.lastActive,a.mode,!1),n.active.length&&a.mode&&n.updateHoverStyle(n.active,a.mode,!0),e=!V.arrayEquals(n.active,n.lastActive),n.lastActive=n.active,e}}),Qe.instances={};var tn=Qe;Qe.Controller=Qe,Qe.types={},V.configMerge=Xe,V.scaleMerge=Ge;function en(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function nn(t){this.options=t||{}}V.extend(nn.prototype,{formats:en,parse:en,format:en,add:en,diff:en,startOf:en,endOf:en,_create:function(t){return t}}),nn.override=function(t){V.extend(nn.prototype,t)};var an={_date:nn},rn={formatters:{values:function(t){return V.isArray(t)?t:""+t},linear:function(t,e,n){var i=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(i)>1&&t!==Math.floor(t)&&(i=t-Math.floor(t));var a=V.log10(Math.abs(i)),r="";if(0!==t)if(Math.max(Math.abs(n[0]),Math.abs(n[n.length-1]))<1e-4){var o=V.log10(Math.abs(t)),s=Math.floor(o)-Math.floor(a);s=Math.max(Math.min(s,20),0),r=t.toExponential(s)}else{var l=-1*Math.floor(a);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,e,n){var i=t/Math.pow(10,Math.floor(V.log10(t)));return 0===t?"0":1===i||2===i||5===i||0===e||e===n.length-1?t.toExponential():""}}},on=V.isArray,sn=V.isNullOrUndef,ln=V.valueOrDefault,un=V.valueAtIndexOrDefault;function dn(t,e,n){var i,a=t.getTicks().length,r=Math.min(e,a-1),o=t.getPixelForTick(r),s=t._startPixel,l=t._endPixel;if(!(n&&(i=1===a?Math.max(o-s,l-o):0===e?(t.getPixelForTick(1)-o)/2:(o-t.getPixelForTick(r-1))/2,(o+=r<e?i:-i)<s-1e-6||o>l+1e-6)))return o}function hn(t,e,n,i){var a,r,o,s,l,u,d,h,c,f,g,p,m,v=n.length,b=[],x=[],y=[];for(a=0;a<v;++a){if(s=n[a].label,l=n[a].major?e.major:e.minor,t.font=u=l.string,d=i[u]=i[u]||{data:{},gc:[]},h=l.lineHeight,c=f=0,sn(s)||on(s)){if(on(s))for(r=0,o=s.length;r<o;++r)g=s[r],sn(g)||on(g)||(c=V.measureText(t,d.data,d.gc,c,g),f+=h)}else c=V.measureText(t,d.data,d.gc,c,s),f=h;b.push(c),x.push(f),y.push(h/2)}function _(t){return{width:b[t]||0,height:x[t]||0,offset:y[t]||0}}return function(t,e){V.each(t,(function(t){var n,i=t.gc,a=i.length/2;if(a>e){for(n=0;n<a;++n)delete t.data[i[n]];i.splice(0,a)}}))}(i,v),p=b.indexOf(Math.max.apply(null,b)),m=x.indexOf(Math.max.apply(null,x)),{first:_(0),last:_(v-1),widest:_(p),highest:_(m)}}function cn(t){return t.drawTicks?t.tickMarkLength:0}function fn(t){var e,n;return t.display?(e=V.options._parseFont(t),n=V.options.toPadding(t.padding),e.lineHeight+n.height):0}function gn(t,e){return V.extend(V.options._parseFont({fontFamily:ln(e.fontFamily,t.fontFamily),fontSize:ln(e.fontSize,t.fontSize),fontStyle:ln(e.fontStyle,t.fontStyle),lineHeight:ln(e.lineHeight,t.lineHeight)}),{color:V.options.resolve([e.fontColor,t.fontColor,z.global.defaultFontColor])})}function pn(t){var e=gn(t,t.minor);return{minor:e,major:t.major.enabled?gn(t,t.major):e}}function mn(t){var e,n,i,a=[];for(n=0,i=t.length;n<i;++n)void 0!==(e=t[n])._index&&a.push(e);return a}function vn(t,e,n,i){var a,r,o,s,l=ln(n,0),u=Math.min(ln(i,t.length),t.length),d=0;for(e=Math.ceil(e),i&&(e=(a=i-n)/Math.floor(a/e)),s=l;s<0;)d++,s=Math.round(l+d*e);for(r=Math.max(l,0);r<u;r++)o=t[r],r===s?(o._index=r,d++,s=Math.round(l+d*e)):delete o.label}z._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:rn.formatters.values,minor:{},major:{}}});var bn=X.extend({zeroLineIndex:0,getPadding:function(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){V.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var i,a,r,o,s,l=this,u=l.options.ticks,d=u.sampleSize;if(l.beforeUpdate(),l.maxWidth=t,l.maxHeight=e,l.margins=V.extend({left:0,right:0,top:0,bottom:0},n),l._ticks=null,l.ticks=null,l._labelSizes=null,l._maxLabelLines=0,l.longestLabelWidth=0,l.longestTextCache=l.longestTextCache||{},l._gridLineItems=null,l._labelItems=null,l.beforeSetDimensions(),l.setDimensions(),l.afterSetDimensions(),l.beforeDataLimits(),l.determineDataLimits(),l.afterDataLimits(),l.beforeBuildTicks(),o=l.buildTicks()||[],(!(o=l.afterBuildTicks(o)||o)||!o.length)&&l.ticks)for(o=[],i=0,a=l.ticks.length;i<a;++i)o.push({value:l.ticks[i],major:!1});return l._ticks=o,s=d<o.length,r=l._convertTicksToLabels(s?function(t,e){for(var n=[],i=t.length/e,a=0,r=t.length;a<r;a+=i)n.push(t[Math.floor(a)]);return n}(o,d):o),l._configure(),l.beforeCalculateTickRotation(),l.calculateTickRotation(),l.afterCalculateTickRotation(),l.beforeFit(),l.fit(),l.afterFit(),l._ticksToDraw=u.display&&(u.autoSkip||"auto"===u.source)?l._autoSkip(o):o,s&&(r=l._convertTicksToLabels(l._ticksToDraw)),l.ticks=r,l.afterUpdate(),l.minSize},_configure:function(){var t,e,n=this,i=n.options.ticks.reverse;n.isHorizontal()?(t=n.left,e=n.right):(t=n.top,e=n.bottom,i=!i),n._startPixel=t,n._endPixel=e,n._reversePixels=i,n._length=e-t},afterUpdate:function(){V.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){V.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){V.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){V.callback(this.options.beforeDataLimits,[this])},determineDataLimits:V.noop,afterDataLimits:function(){V.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){V.callback(this.options.beforeBuildTicks,[this])},buildTicks:V.noop,afterBuildTicks:function(t){var e=this;return on(t)&&t.length?V.callback(e.options.afterBuildTicks,[e,t]):(e.ticks=V.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,t)},beforeTickToLabelConversion:function(){V.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this.options.ticks;this.ticks=this.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){V.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){V.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t,e,n,i,a,r,o,s=this,l=s.options,u=l.ticks,d=s.getTicks().length,h=u.minRotation||0,c=u.maxRotation,f=h;!s._isVisible()||!u.display||h>=c||d<=1||!s.isHorizontal()?s.labelRotation=h:(e=(t=s._getLabelSizes()).widest.width,n=t.highest.height-t.highest.offset,i=Math.min(s.maxWidth,s.chart.width-e),e+6>(a=l.offset?s.maxWidth/d:i/(d-1))&&(a=i/(d-(l.offset?.5:1)),r=s.maxHeight-cn(l.gridLines)-u.padding-fn(l.scaleLabel),o=Math.sqrt(e*e+n*n),f=V.toDegrees(Math.min(Math.asin(Math.min((t.highest.height+6)/a,1)),Math.asin(Math.min(r/o,1))-Math.asin(n/o))),f=Math.max(h,Math.min(c,f))),s.labelRotation=f)},afterCalculateTickRotation:function(){V.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){V.callback(this.options.beforeFit,[this])},fit:function(){var t=this,e=t.minSize={width:0,height:0},n=t.chart,i=t.options,a=i.ticks,r=i.scaleLabel,o=i.gridLines,s=t._isVisible(),l="bottom"===i.position,u=t.isHorizontal();if(u?e.width=t.maxWidth:s&&(e.width=cn(o)+fn(r)),u?s&&(e.height=cn(o)+fn(r)):e.height=t.maxHeight,a.display&&s){var d=pn(a),h=t._getLabelSizes(),c=h.first,f=h.last,g=h.widest,p=h.highest,m=.4*d.minor.lineHeight,v=a.padding;if(u){var b=0!==t.labelRotation,x=V.toRadians(t.labelRotation),y=Math.cos(x),_=Math.sin(x),k=_*g.width+y*(p.height-(b?p.offset:0))+(b?0:m);e.height=Math.min(t.maxHeight,e.height+k+v);var w,M,S=t.getPixelForTick(0)-t.left,C=t.right-t.getPixelForTick(t.getTicks().length-1);b?(w=l?y*c.width+_*c.offset:_*(c.height-c.offset),M=l?_*(f.height-f.offset):y*f.width+_*f.offset):(w=c.width/2,M=f.width/2),t.paddingLeft=Math.max((w-S)*t.width/(t.width-S),0)+3,t.paddingRight=Math.max((M-C)*t.width/(t.width-C),0)+3}else{var P=a.mirror?0:g.width+v+m;e.width=Math.min(t.maxWidth,e.width+P),t.paddingTop=c.height/2,t.paddingBottom=f.height/2}}t.handleMargins(),u?(t.width=t._length=n.width-t.margins.left-t.margins.right,t.height=e.height):(t.width=e.width,t.height=t._length=n.height-t.margins.top-t.margins.bottom)},handleMargins:function(){var t=this;t.margins&&(t.margins.left=Math.max(t.paddingLeft,t.margins.left),t.margins.top=Math.max(t.paddingTop,t.margins.top),t.margins.right=Math.max(t.paddingRight,t.margins.right),t.margins.bottom=Math.max(t.paddingBottom,t.margins.bottom))},afterFit:function(){V.callback(this.options.afterFit,[this])},isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(sn(t))return NaN;if(("number"==typeof t||t instanceof Number)&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},_convertTicksToLabels:function(t){var e,n,i,a=this;for(a.ticks=t.map((function(t){return t.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(t)||a.ticks,a.afterTickToLabelConversion(),n=0,i=t.length;n<i;++n)t[n].label=e[n];return e},_getLabelSizes:function(){var t=this,e=t._labelSizes;return e||(t._labelSizes=e=hn(t.ctx,pn(t.options.ticks),t.getTicks(),t.longestTextCache),t.longestLabelWidth=e.widest.width),e},_parseValue:function(t){var e,n,i,a;return on(t)?(e=+this.getRightValue(t[0]),n=+this.getRightValue(t[1]),i=Math.min(e,n),a=Math.max(e,n)):(e=void 0,n=t=+this.getRightValue(t),i=t,a=t),{min:i,max:a,start:e,end:n}},_getScaleLabel:function(t){var e=this._parseValue(t);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(t)},getLabelForIndex:V.noop,getPixelForValue:V.noop,getValueForPixel:V.noop,getPixelForTick:function(t){var e=this.options.offset,n=this._ticks.length,i=1/Math.max(n-(e?0:1),1);return t<0||t>n-1?null:this.getPixelForDecimal(t*i+(e?i/2:0))},getPixelForDecimal:function(t){return this._reversePixels&&(t=1-t),this._startPixel+t*this._length},getDecimalForPixel:function(t){var e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,n,i,a,r=this.options.ticks,o=this._length,s=r.maxTicksLimit||o/this._tickSize()+1,l=r.major.enabled?function(t){var e,n,i=[];for(e=0,n=t.length;e<n;e++)t[e].major&&i.push(e);return i}(t):[],u=l.length,d=l[0],h=l[u-1];if(u>s)return function(t,e,n){var i,a,r=0,o=e[0];for(n=Math.ceil(n),i=0;i<t.length;i++)a=t[i],i===o?(a._index=i,o=e[++r*n]):delete a.label}(t,l,u/s),mn(t);if(i=function(t,e,n,i){var a,r,o,s,l=function(t){var e,n,i=t.length;if(i<2)return!1;for(n=t[0],e=1;e<i;++e)if(t[e]-t[e-1]!==n)return!1;return n}(t),u=(e.length-1)/i;if(!l)return Math.max(u,1);for(o=0,s=(a=V.math._factorize(l)).length-1;o<s;o++)if((r=a[o])>u)return r;return Math.max(u,1)}(l,t,0,s),u>0){for(e=0,n=u-1;e<n;e++)vn(t,i,l[e],l[e+1]);return a=u>1?(h-d)/(u-1):null,vn(t,i,V.isNullOrUndef(a)?0:d-a,d),vn(t,i,h,V.isNullOrUndef(a)?t.length:h+a),mn(t)}return vn(t,i),mn(t)},_tickSize:function(){var t=this.options.ticks,e=V.toRadians(this.labelRotation),n=Math.abs(Math.cos(e)),i=Math.abs(Math.sin(e)),a=this._getLabelSizes(),r=t.autoSkipPadding||0,o=a?a.widest.width+r:0,s=a?a.highest.height+r:0;return this.isHorizontal()?s*n>o*i?o/n:s/i:s*i<o*n?s/n:o/i},_isVisible:function(){var t,e,n,i=this.chart,a=this.options.display;if("auto"!==a)return!!a;for(t=0,e=i.data.datasets.length;t<e;++t)if(i.isDatasetVisible(t)&&((n=i.getDatasetMeta(t)).xAxisID===this.id||n.yAxisID===this.id))return!0;return!1},_computeGridLineItems:function(t){var e,n,i,a,r,o,s,l,u,d,h,c,f,g,p,m,v,b=this,x=b.chart,y=b.options,_=y.gridLines,k=y.position,w=_.offsetGridLines,M=b.isHorizontal(),S=b._ticksToDraw,C=S.length+(w?1:0),P=cn(_),A=[],D=_.drawBorder?un(_.lineWidth,0,0):0,T=D/2,I=V._alignPixel,F=function(t){return I(x,t,D)};for("top"===k?(e=F(b.bottom),s=b.bottom-P,u=e-T,h=F(t.top)+T,f=t.bottom):"bottom"===k?(e=F(b.top),h=t.top,f=F(t.bottom)-T,s=e+T,u=b.top+P):"left"===k?(e=F(b.right),o=b.right-P,l=e-T,d=F(t.left)+T,c=t.right):(e=F(b.left),d=t.left,c=F(t.right)-T,o=e+T,l=b.left+P),n=0;n<C;++n)i=S[n]||{},sn(i.label)&&n<S.length||(n===b.zeroLineIndex&&y.offset===w?(g=_.zeroLineWidth,p=_.zeroLineColor,m=_.zeroLineBorderDash||[],v=_.zeroLineBorderDashOffset||0):(g=un(_.lineWidth,n,1),p=un(_.color,n,"rgba(0,0,0,0.1)"),m=_.borderDash||[],v=_.borderDashOffset||0),void 0!==(a=dn(b,i._index||n,w))&&(r=I(x,a,g),M?o=l=d=c=r:s=u=h=f=r,A.push({tx1:o,ty1:s,tx2:l,ty2:u,x1:d,y1:h,x2:c,y2:f,width:g,color:p,borderDash:m,borderDashOffset:v})));return A.ticksLength=C,A.borderValue=e,A},_computeLabelItems:function(){var t,e,n,i,a,r,o,s,l,u,d,h,c=this,f=c.options,g=f.ticks,p=f.position,m=g.mirror,v=c.isHorizontal(),b=c._ticksToDraw,x=pn(g),y=g.padding,_=cn(f.gridLines),k=-V.toRadians(c.labelRotation),w=[];for("top"===p?(r=c.bottom-_-y,o=k?"left":"center"):"bottom"===p?(r=c.top+_+y,o=k?"right":"center"):"left"===p?(a=c.right-(m?0:_)-y,o=m?"left":"right"):(a=c.left+(m?0:_)+y,o=m?"right":"left"),t=0,e=b.length;t<e;++t)i=(n=b[t]).label,sn(i)||(s=c.getPixelForTick(n._index||t)+g.labelOffset,u=(l=n.major?x.major:x.minor).lineHeight,d=on(i)?i.length:1,v?(a=s,h="top"===p?((k?1:.5)-d)*u:(k?0:.5)*u):(r=s,h=(1-d)*u/2),w.push({x:a,y:r,rotation:k,label:i,font:l,textOffset:h,textAlign:o}));return w},_drawGrid:function(t){var e=this,n=e.options.gridLines;if(n.display){var i,a,r,o,s,l=e.ctx,u=e.chart,d=V._alignPixel,h=n.drawBorder?un(n.lineWidth,0,0):0,c=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(t));for(r=0,o=c.length;r<o;++r)i=(s=c[r]).width,a=s.color,i&&a&&(l.save(),l.lineWidth=i,l.strokeStyle=a,l.setLineDash&&(l.setLineDash(s.borderDash),l.lineDashOffset=s.borderDashOffset),l.beginPath(),n.drawTicks&&(l.moveTo(s.tx1,s.ty1),l.lineTo(s.tx2,s.ty2)),n.drawOnChartArea&&(l.moveTo(s.x1,s.y1),l.lineTo(s.x2,s.y2)),l.stroke(),l.restore());if(h){var f,g,p,m,v=h,b=un(n.lineWidth,c.ticksLength-1,1),x=c.borderValue;e.isHorizontal()?(f=d(u,e.left,v)-v/2,g=d(u,e.right,b)+b/2,p=m=x):(p=d(u,e.top,v)-v/2,m=d(u,e.bottom,b)+b/2,f=g=x),l.lineWidth=h,l.strokeStyle=un(n.color,0),l.beginPath(),l.moveTo(f,p),l.lineTo(g,m),l.stroke()}}},_drawLabels:function(){var t=this;if(t.options.ticks.display){var e,n,i,a,r,o,s,l,u=t.ctx,d=t._labelItems||(t._labelItems=t._computeLabelItems());for(e=0,i=d.length;e<i;++e){if(o=(r=d[e]).font,u.save(),u.translate(r.x,r.y),u.rotate(r.rotation),u.font=o.string,u.fillStyle=o.color,u.textBaseline="middle",u.textAlign=r.textAlign,s=r.label,l=r.textOffset,on(s))for(n=0,a=s.length;n<a;++n)u.fillText(""+s[n],0,l),l+=o.lineHeight;else u.fillText(s,0,l);u.restore()}}},_drawTitle:function(){var t=this,e=t.ctx,n=t.options,i=n.scaleLabel;if(i.display){var a,r,o=ln(i.fontColor,z.global.defaultFontColor),s=V.options._parseFont(i),l=V.options.toPadding(i.padding),u=s.lineHeight/2,d=n.position,h=0;if(t.isHorizontal())a=t.left+t.width/2,r="bottom"===d?t.bottom-u-l.bottom:t.top+u+l.top;else{var c="left"===d;a=c?t.left+u+l.top:t.right-u-l.top,r=t.top+t.height/2,h=c?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(h),e.textAlign="center",e.textBaseline="middle",e.fillStyle=o,e.font=s.string,e.fillText(i.labelString,0,0),e.restore()}},draw:function(t){this._isVisible()&&(this._drawGrid(t),this._drawTitle(),this._drawLabels())},_layers:function(){var t=this,e=t.options,n=e.ticks&&e.ticks.z||0,i=e.gridLines&&e.gridLines.z||0;return t._isVisible()&&n!==i&&t.draw===t._draw?[{z:i,draw:function(){t._drawGrid.apply(t,arguments),t._drawTitle.apply(t,arguments)}},{z:n,draw:function(){t._drawLabels.apply(t,arguments)}}]:[{z:n,draw:function(){t.draw.apply(t,arguments)}}]},_getMatchingVisibleMetas:function(t){var e=this,n=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(i){return(!t||i.type===t)&&(n?i.xAxisID===e.id:i.yAxisID===e.id)}))}});bn.prototype._draw=bn.prototype.draw;var xn=bn,yn=V.isNullOrUndef,_n=xn.extend({determineDataLimits:function(){var t,e=this,n=e._getLabels(),i=e.options.ticks,a=i.min,r=i.max,o=0,s=n.length-1;void 0!==a&&(t=n.indexOf(a))>=0&&(o=t),void 0!==r&&(t=n.indexOf(r))>=0&&(s=t),e.minIndex=o,e.maxIndex=s,e.min=n[o],e.max=n[s]},buildTicks:function(){var t=this._getLabels(),e=this.minIndex,n=this.maxIndex;this.ticks=0===e&&n===t.length-1?t:t.slice(e,n+1)},getLabelForIndex:function(t,e){var n=this.chart;return n.getDatasetMeta(e).controller._getValueScaleId()===this.id?this.getRightValue(n.data.datasets[e].data[t]):this._getLabels()[t]},_configure:function(){var t=this,e=t.options.offset,n=t.ticks;xn.prototype._configure.call(t),t.isHorizontal()||(t._reversePixels=!t._reversePixels),n&&(t._startValue=t.minIndex-(e?.5:0),t._valueRange=Math.max(n.length-(e?0:1),1))},getPixelForValue:function(t,e,n){var i,a,r,o=this;return yn(e)||yn(n)||(t=o.chart.data.datasets[n].data[e]),yn(t)||(i=o.isHorizontal()?t.x:t.y),(void 0!==i||void 0!==t&&isNaN(e))&&(a=o._getLabels(),t=V.valueOrDefault(i,t),e=-1!==(r=a.indexOf(t))?r:e,isNaN(e)&&(e=t)),o.getPixelForDecimal((e-o._startValue)/o._valueRange)},getPixelForTick:function(t){var e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t],t+this.minIndex)},getValueForPixel:function(t){var e=Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange);return Math.min(Math.max(e,0),this.ticks.length-1)},getBasePixel:function(){return this.bottom}}),kn={position:"bottom"};_n._defaults=kn;var wn=V.noop,Mn=V.isNullOrUndef;var Sn=xn.extend({getRightValue:function(t){return"string"==typeof t?+t:xn.prototype.getRightValue.call(this,t)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var n=V.sign(t.min),i=V.sign(t.max);n<0&&i<0?t.max=0:n>0&&i>0&&(t.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),a!==r&&t.min>=t.max&&(a?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:function(){var t,e=this.options.ticks,n=e.stepSize,i=e.maxTicksLimit;return n?t=Math.ceil(this.max/n)-Math.floor(this.min/n)+1:(t=this._computeTickLimit(),i=i||11),i&&(t=Math.min(i,t)),t},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:wn,buildTicks:function(){var t=this,e=t.options.ticks,n=t.getTickLimit(),i={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,precision:e.precision,stepSize:V.valueOrDefault(e.fixedStepSize,e.stepSize)},a=t.ticks=function(t,e){var n,i,a,r,o=[],s=t.stepSize,l=s||1,u=t.maxTicks-1,d=t.min,h=t.max,c=t.precision,f=e.min,g=e.max,p=V.niceNum((g-f)/u/l)*l;if(p<1e-14&&Mn(d)&&Mn(h))return[f,g];(r=Math.ceil(g/p)-Math.floor(f/p))>u&&(p=V.niceNum(r*p/u/l)*l),s||Mn(c)?n=Math.pow(10,V._decimalPlaces(p)):(n=Math.pow(10,c),p=Math.ceil(p*n)/n),i=Math.floor(f/p)*p,a=Math.ceil(g/p)*p,s&&(!Mn(d)&&V.almostWhole(d/p,p/1e3)&&(i=d),!Mn(h)&&V.almostWhole(h/p,p/1e3)&&(a=h)),r=(a-i)/p,r=V.almostEquals(r,Math.round(r),p/1e3)?Math.round(r):Math.ceil(r),i=Math.round(i*n)/n,a=Math.round(a*n)/n,o.push(Mn(d)?i:d);for(var m=1;m<r;++m)o.push(Math.round((i+m*p)*n)/n);return o.push(Mn(h)?a:h),o}(i,t);t.handleDirectionalChanges(),t.max=V.max(a),t.min=V.min(a),e.reverse?(a.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var t=this;t.ticksAsNumbers=t.ticks.slice(),t.zeroLineIndex=t.ticks.indexOf(0),xn.prototype.convertTicksToLabels.call(t)},_configure:function(){var t,e=this,n=e.getTicks(),i=e.min,a=e.max;xn.prototype._configure.call(e),e.options.offset&&n.length&&(i-=t=(a-i)/Math.max(n.length-1,1)/2,a+=t),e._startValue=i,e._endValue=a,e._valueRange=a-i}}),Cn={position:"left",ticks:{callback:rn.formatters.linear}};function Pn(t,e,n,i){var a,r,o=t.options,s=function(t,e,n){var i=[n.type,void 0===e&&void 0===n.stack?n.index:"",n.stack].join(".");return void 0===t[i]&&(t[i]={pos:[],neg:[]}),t[i]}(e,o.stacked,n),l=s.pos,u=s.neg,d=i.length;for(a=0;a<d;++a)r=t._parseValue(i[a]),isNaN(r.min)||isNaN(r.max)||n.data[a].hidden||(l[a]=l[a]||0,u[a]=u[a]||0,o.relativePoints?l[a]=100:r.min<0||r.max<0?u[a]+=r.min:l[a]+=r.max)}function An(t,e,n){var i,a,r=n.length;for(i=0;i<r;++i)a=t._parseValue(n[i]),isNaN(a.min)||isNaN(a.max)||e.data[i].hidden||(t.min=Math.min(t.min,a.min),t.max=Math.max(t.max,a.max))}var Dn=Sn.extend({determineDataLimits:function(){var t,e,n,i,a=this,r=a.options,o=a.chart.data.datasets,s=a._getMatchingVisibleMetas(),l=r.stacked,u={},d=s.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===l)for(t=0;!l&&t<d;++t)l=void 0!==(e=s[t]).stack;for(t=0;t<d;++t)n=o[(e=s[t]).index].data,l?Pn(a,u,e,n):An(a,e,n);V.each(u,(function(t){i=t.pos.concat(t.neg),a.min=Math.min(a.min,V.min(i)),a.max=Math.max(a.max,V.max(i))})),a.min=V.isFinite(a.min)&&!isNaN(a.min)?a.min:0,a.max=V.isFinite(a.max)&&!isNaN(a.max)?a.max:1,a.handleTickRangeOptions()},_computeTickLimit:function(){var t;return this.isHorizontal()?Math.ceil(this.width/40):(t=V.options._parseFont(this.options.ticks),Math.ceil(this.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){return this.getPixelForDecimal((+this.getRightValue(t)-this._startValue)/this._valueRange)},getValueForPixel:function(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange},getPixelForTick:function(t){var e=this.ticksAsNumbers;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])}}),Tn=Cn;Dn._defaults=Tn;var In=V.valueOrDefault,Fn=V.math.log10;var Ln={position:"left",ticks:{callback:rn.formatters.logarithmic}};function On(t,e){return V.isFinite(t)&&t>=0?t:e}var Rn=xn.extend({determineDataLimits:function(){var t,e,n,i,a,r,o=this,s=o.options,l=o.chart,u=l.data.datasets,d=o.isHorizontal();function h(t){return d?t.xAxisID===o.id:t.yAxisID===o.id}o.min=Number.POSITIVE_INFINITY,o.max=Number.NEGATIVE_INFINITY,o.minNotZero=Number.POSITIVE_INFINITY;var c=s.stacked;if(void 0===c)for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e)&&void 0!==e.stack){c=!0;break}if(s.stacked||c){var f={};for(t=0;t<u.length;t++){var g=[(e=l.getDatasetMeta(t)).type,void 0===s.stacked&&void 0===e.stack?t:"",e.stack].join(".");if(l.isDatasetVisible(t)&&h(e))for(void 0===f[g]&&(f[g]=[]),a=0,r=(i=u[t].data).length;a<r;a++){var p=f[g];n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(p[a]=p[a]||0,p[a]+=n.max)}}V.each(f,(function(t){if(t.length>0){var e=V.min(t),n=V.max(t);o.min=Math.min(o.min,e),o.max=Math.max(o.max,n)}}))}else for(t=0;t<u.length;t++)if(e=l.getDatasetMeta(t),l.isDatasetVisible(t)&&h(e))for(a=0,r=(i=u[t].data).length;a<r;a++)n=o._parseValue(i[a]),isNaN(n.min)||isNaN(n.max)||e.data[a].hidden||n.min<0||n.max<0||(o.min=Math.min(n.min,o.min),o.max=Math.max(n.max,o.max),0!==n.min&&(o.minNotZero=Math.min(n.min,o.minNotZero)));o.min=V.isFinite(o.min)?o.min:null,o.max=V.isFinite(o.max)?o.max:null,o.minNotZero=V.isFinite(o.minNotZero)?o.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;t.min=On(e.min,t.min),t.max=On(e.max,t.max),t.min===t.max&&(0!==t.min&&null!==t.min?(t.min=Math.pow(10,Math.floor(Fn(t.min))-1),t.max=Math.pow(10,Math.floor(Fn(t.max))+1)):(t.min=1,t.max=10)),null===t.min&&(t.min=Math.pow(10,Math.floor(Fn(t.max))-1)),null===t.max&&(t.max=0!==t.min?Math.pow(10,Math.floor(Fn(t.min))+1):10),null===t.minNotZero&&(t.min>0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(Fn(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,n=!t.isHorizontal(),i={min:On(e.min),max:On(e.max)},a=t.ticks=function(t,e){var n,i,a=[],r=In(t.min,Math.pow(10,Math.floor(Fn(e.min)))),o=Math.floor(Fn(e.max)),s=Math.ceil(e.max/Math.pow(10,o));0===r?(n=Math.floor(Fn(e.minNotZero)),i=Math.floor(e.minNotZero/Math.pow(10,n)),a.push(r),r=i*Math.pow(10,n)):(n=Math.floor(Fn(r)),i=Math.floor(r/Math.pow(10,n)));var l=n<0?Math.pow(10,Math.abs(n)):1;do{a.push(r),10===++i&&(i=1,l=++n>=0?1:l),r=Math.round(i*Math.pow(10,n)*l)/l}while(n<o||n===o&&i<s);var u=In(t.max,r);return a.push(u),a}(i,t);t.max=V.max(a),t.min=V.min(a),e.reverse?(n=!n,t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max),n&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),xn.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return this._getScaleLabel(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){var e=this.tickValues;return t<0||t>e.length-1?null:this.getPixelForValue(e[t])},_getFirstTickValue:function(t){var e=Math.floor(Fn(t));return Math.floor(t/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var t=this,e=t.min,n=0;xn.prototype._configure.call(t),0===e&&(e=t._getFirstTickValue(t.minNotZero),n=In(t.options.ticks.fontSize,z.global.defaultFontSize)/t._length),t._startValue=Fn(e),t._valueOffset=n,t._valueRange=(Fn(t.max)-Fn(e))/(1-n)},getPixelForValue:function(t){var e=this,n=0;return(t=+e.getRightValue(t))>e.min&&t>0&&(n=(Fn(t)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(n)},getValueForPixel:function(t){var e=this,n=e.getDecimalForPixel(t);return 0===n&&0===e.min?0:Math.pow(10,e._startValue+(n-e._valueOffset)*e._valueRange)}}),zn=Ln;Rn._defaults=zn;var Nn=V.valueOrDefault,Bn=V.valueAtIndexOrDefault,En=V.options.resolve,Wn={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:rn.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}};function Vn(t){var e=t.ticks;return e.display&&t.display?Nn(e.fontSize,z.global.defaultFontSize)+2*e.backdropPaddingY:0}function Hn(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n,end:e}:{start:e,end:e+n}}function jn(t){return 0===t||180===t?"center":t<180?"left":"right"}function qn(t,e,n,i){var a,r,o=n.y+i/2;if(V.isArray(e))for(a=0,r=e.length;a<r;++a)t.fillText(e[a],n.x,o),o+=i;else t.fillText(e,n.x,o)}function Un(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function Yn(t){return V.isNumber(t)?t:0}var Gn=Sn.extend({setDimensions:function(){var t=this;t.width=t.maxWidth,t.height=t.maxHeight,t.paddingTop=Vn(t.options)/2,t.xCenter=Math.floor(t.width/2),t.yCenter=Math.floor((t.height-t.paddingTop)/2),t.drawingArea=Math.min(t.height-t.paddingTop,t.width)/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;V.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var o=e.getDatasetMeta(r);V.each(a.data,(function(e,a){var r=+t.getRightValue(e);isNaN(r)||o.data[a].hidden||(n=Math.min(r,n),i=Math.max(r,i))}))}})),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/Vn(this.options))},convertTicksToLabels:function(){var t=this;Sn.prototype.convertTicksToLabels.call(t),t.pointLabels=t.chart.data.labels.map((function(){var e=V.callback(t.options.pointLabels.callback,arguments,t);return e||0===e?e:""}))},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t=this.options;t.display&&t.pointLabels.display?function(t){var e,n,i,a=V.options._parseFont(t.options.pointLabels),r={l:0,r:t.width,t:0,b:t.height-t.paddingTop},o={};t.ctx.font=a.string,t._pointLabelSizes=[];var s,l,u,d=t.chart.data.labels.length;for(e=0;e<d;e++){i=t.getPointPosition(e,t.drawingArea+5),s=t.ctx,l=a.lineHeight,u=t.pointLabels[e],n=V.isArray(u)?{w:V.longestText(s,s.font,u),h:u.length*l}:{w:s.measureText(u).width,h:l},t._pointLabelSizes[e]=n;var h=t.getIndexAngle(e),c=V.toDegrees(h)%360,f=Hn(c,i.x,n.w,0,180),g=Hn(c,i.y,n.h,90,270);f.start<r.l&&(r.l=f.start,o.l=h),f.end>r.r&&(r.r=f.end,o.r=h),g.start<r.t&&(r.t=g.start,o.t=h),g.end>r.b&&(r.b=g.end,o.b=h)}t.setReductions(t.drawingArea,r,o)}(this):this.setCenterPoint(0,0,0,0)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),r=Math.max(e.r-i.width,0)/Math.sin(n.r),o=-e.t/Math.cos(n.t),s=-Math.max(e.b-(i.height-i.paddingTop),0)/Math.cos(n.b);a=Yn(a),r=Yn(r),o=Yn(o),s=Yn(s),i.drawingArea=Math.min(Math.floor(t-(a+r)/2),Math.floor(t-(o+s)/2)),i.setCenterPoint(a,r,o,s)},setCenterPoint:function(t,e,n,i){var a=this,r=a.width-e-a.drawingArea,o=t+a.drawingArea,s=n+a.drawingArea,l=a.height-a.paddingTop-i-a.drawingArea;a.xCenter=Math.floor((o+r)/2+a.left),a.yCenter=Math.floor((s+l)/2+a.top+a.paddingTop)},getIndexAngle:function(t){var e=this.chart,n=(t*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(n<0?n+360:n)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(V.isNullOrUndef(t))return NaN;var n=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this.getIndexAngle(t)-Math.PI/2;return{x:Math.cos(n)*e+this.xCenter,y:Math.sin(n)*e+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(t){var e=this.min,n=this.max;return this.getPointPositionForValue(t||0,this.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},_drawGrid:function(){var t,e,n,i=this,a=i.ctx,r=i.options,o=r.gridLines,s=r.angleLines,l=Nn(s.lineWidth,o.lineWidth),u=Nn(s.color,o.color);if(r.pointLabels.display&&function(t){var e=t.ctx,n=t.options,i=n.pointLabels,a=Vn(n),r=t.getDistanceFromCenterForValue(n.ticks.reverse?t.min:t.max),o=V.options._parseFont(i);e.save(),e.font=o.string,e.textBaseline="middle";for(var s=t.chart.data.labels.length-1;s>=0;s--){var l=0===s?a/2:0,u=t.getPointPosition(s,r+l+5),d=Bn(i.fontColor,s,z.global.defaultFontColor);e.fillStyle=d;var h=t.getIndexAngle(s),c=V.toDegrees(h);e.textAlign=jn(c),Un(c,t._pointLabelSizes[s],u),qn(e,t.pointLabels[s],u,o.lineHeight)}e.restore()}(i),o.display&&V.each(i.ticks,(function(t,n){0!==n&&(e=i.getDistanceFromCenterForValue(i.ticksAsNumbers[n]),function(t,e,n,i){var a,r=t.ctx,o=e.circular,s=t.chart.data.labels.length,l=Bn(e.color,i-1),u=Bn(e.lineWidth,i-1);if((o||s)&&l&&u){if(r.save(),r.strokeStyle=l,r.lineWidth=u,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),o)r.arc(t.xCenter,t.yCenter,n,0,2*Math.PI);else{a=t.getPointPosition(0,n),r.moveTo(a.x,a.y);for(var d=1;d<s;d++)a=t.getPointPosition(d,n),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}(i,o,e,n))})),s.display&&l&&u){for(a.save(),a.lineWidth=l,a.strokeStyle=u,a.setLineDash&&(a.setLineDash(En([s.borderDash,o.borderDash,[]])),a.lineDashOffset=En([s.borderDashOffset,o.borderDashOffset,0])),t=i.chart.data.labels.length-1;t>=0;t--)e=i.getDistanceFromCenterForValue(r.ticks.reverse?i.min:i.max),n=i.getPointPosition(t,e),a.beginPath(),a.moveTo(i.xCenter,i.yCenter),a.lineTo(n.x,n.y),a.stroke();a.restore()}},_drawLabels:function(){var t=this,e=t.ctx,n=t.options.ticks;if(n.display){var i,a,r=t.getIndexAngle(0),o=V.options._parseFont(n),s=Nn(n.fontColor,z.global.defaultFontColor);e.save(),e.font=o.string,e.translate(t.xCenter,t.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",V.each(t.ticks,(function(r,l){(0!==l||n.reverse)&&(i=t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),n.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=n.backdropColor,e.fillRect(-a/2-n.backdropPaddingX,-i-o.size/2-n.backdropPaddingY,a+2*n.backdropPaddingX,o.size+2*n.backdropPaddingY)),e.fillStyle=s,e.fillText(r,0,-i))})),e.restore()}},_drawTitle:V.noop}),Xn=Wn;Gn._defaults=Xn;var Kn=V._deprecated,Zn=V.options.resolve,$n=V.valueOrDefault,Jn=Number.MIN_SAFE_INTEGER||-9007199254740991,Qn=Number.MAX_SAFE_INTEGER||9007199254740991,ti={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ei=Object.keys(ti);function ni(t,e){return t-e}function ii(t){return V.valueOrDefault(t.time.min,t.ticks.min)}function ai(t){return V.valueOrDefault(t.time.max,t.ticks.max)}function ri(t,e,n,i){var a=function(t,e,n){for(var i,a,r,o=0,s=t.length-1;o>=0&&o<=s;){if(a=t[(i=o+s>>1)-1]||null,r=t[i],!a)return{lo:null,hi:r};if(r[e]<n)o=i+1;else{if(!(a[e]>n))return{lo:a,hi:r};s=i-1}}return{lo:r,hi:null}}(t,e,n),r=a.lo?a.hi?a.lo:t[t.length-2]:t[0],o=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=o[e]-r[e],l=s?(n-r[e])/s:0,u=(o[i]-r[i])*l;return r[i]+u}function oi(t,e){var n=t._adapter,i=t.options.time,a=i.parser,r=a||i.format,o=e;return"function"==typeof a&&(o=a(o)),V.isFinite(o)||(o="string"==typeof r?n.parse(o,r):n.parse(o)),null!==o?+o:(a||"function"!=typeof r||(o=r(e),V.isFinite(o)||(o=n.parse(o))),o)}function si(t,e){if(V.isNullOrUndef(e))return null;var n=t.options.time,i=oi(t,t.getRightValue(e));return null===i?i:(n.round&&(i=+t._adapter.startOf(i,n.round)),i)}function li(t,e,n,i){var a,r,o,s=ei.length;for(a=ei.indexOf(t);a<s-1;++a)if(o=(r=ti[ei[a]]).steps?r.steps:Qn,r.common&&Math.ceil((n-e)/(o*r.size))<=i)return ei[a];return ei[s-1]}function ui(t,e,n){var i,a,r=[],o={},s=e.length;for(i=0;i<s;++i)o[a=e[i]]=i,r.push({value:a,major:!1});return 0!==s&&n?function(t,e,n,i){var a,r,o=t._adapter,s=+o.startOf(e[0].value,i),l=e[e.length-1].value;for(a=s;a<=l;a=+o.add(a,1,i))(r=n[a])>=0&&(e[r].major=!0);return e}(t,r,o,n):r}var di=xn.extend({initialize:function(){this.mergeTicksOptions(),xn.prototype.initialize.call(this)},update:function(){var t=this,e=t.options,n=e.time||(e.time={}),i=t._adapter=new an._date(e.adapters.date);return Kn("time scale",n.format,"time.format","time.parser"),Kn("time scale",n.min,"time.min","ticks.min"),Kn("time scale",n.max,"time.max","ticks.max"),V.mergeIf(n.displayFormats,i.formats()),xn.prototype.update.apply(t,arguments)},getRightValue:function(t){return t&&void 0!==t.t&&(t=t.t),xn.prototype.getRightValue.call(this,t)},determineDataLimits:function(){var t,e,n,i,a,r,o,s=this,l=s.chart,u=s._adapter,d=s.options,h=d.time.unit||"day",c=Qn,f=Jn,g=[],p=[],m=[],v=s._getLabels();for(t=0,n=v.length;t<n;++t)m.push(si(s,v[t]));for(t=0,n=(l.data.datasets||[]).length;t<n;++t)if(l.isDatasetVisible(t))if(a=l.data.datasets[t].data,V.isObject(a[0]))for(p[t]=[],e=0,i=a.length;e<i;++e)r=si(s,a[e]),g.push(r),p[t][e]=r;else p[t]=m.slice(0),o||(g=g.concat(m),o=!0);else p[t]=[];m.length&&(c=Math.min(c,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=n>1?function(t){var e,n,i,a={},r=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,r.push(i));return r}(g).sort(ni):g.sort(ni),c=Math.min(c,g[0]),f=Math.max(f,g[g.length-1])),c=si(s,ii(d))||c,f=si(s,ai(d))||f,c=c===Qn?+u.startOf(Date.now(),h):c,f=f===Jn?+u.endOf(Date.now(),h)+1:f,s.min=Math.min(c,f),s.max=Math.max(c+1,f),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var t,e,n,i=this,a=i.min,r=i.max,o=i.options,s=o.ticks,l=o.time,u=i._timestamps,d=[],h=i.getLabelCapacity(a),c=s.source,f=o.distribution;for(u="data"===c||"auto"===c&&"series"===f?u.data:"labels"===c?u.labels:function(t,e,n,i){var a,r=t._adapter,o=t.options,s=o.time,l=s.unit||li(s.minUnit,e,n,i),u=Zn([s.stepSize,s.unitStepSize,1]),d="week"===l&&s.isoWeekday,h=e,c=[];if(d&&(h=+r.startOf(h,"isoWeek",d)),h=+r.startOf(h,d?"day":l),r.diff(n,e,l)>1e5*u)throw e+" and "+n+" are too far apart with stepSize of "+u+" "+l;for(a=h;a<n;a=+r.add(a,u,l))c.push(a);return a!==n&&"ticks"!==o.bounds||c.push(a),c}(i,a,r,h),"ticks"===o.bounds&&u.length&&(a=u[0],r=u[u.length-1]),a=si(i,ii(o))||a,r=si(i,ai(o))||r,t=0,e=u.length;t<e;++t)(n=u[t])>=a&&n<=r&&d.push(n);return i.min=a,i.max=r,i._unit=l.unit||(s.autoSkip?li(l.minUnit,i.min,i.max,h):function(t,e,n,i,a){var r,o;for(r=ei.length-1;r>=ei.indexOf(n);r--)if(o=ei[r],ti[o].common&&t._adapter.diff(a,i,o)>=e-1)return o;return ei[n?ei.indexOf(n):0]}(i,d.length,l.minUnit,i.min,i.max)),i._majorUnit=s.major.enabled&&"year"!==i._unit?function(t){for(var e=ei.indexOf(t)+1,n=ei.length;e<n;++e)if(ti[ei[e]].common)return ei[e]}(i._unit):void 0,i._table=function(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var a,r,o,s,l,u=[],d=[e];for(a=0,r=t.length;a<r;++a)(s=t[a])>e&&s<n&&d.push(s);for(d.push(n),a=0,r=d.length;a<r;++a)l=d[a+1],o=d[a-1],s=d[a],void 0!==o&&void 0!==l&&Math.round((l+o)/2)===s||u.push({time:s,pos:a/(r-1)});return u}(i._timestamps.data,a,r,f),i._offsets=function(t,e,n,i,a){var r,o,s=0,l=0;return a.offset&&e.length&&(r=ri(t,"time",e[0],"pos"),s=1===e.length?1-r:(ri(t,"time",e[1],"pos")-r)/2,o=ri(t,"time",e[e.length-1],"pos"),l=1===e.length?o:(o-ri(t,"time",e[e.length-2],"pos"))/2),{start:s,end:l,factor:1/(s+1+l)}}(i._table,d,0,0,o),s.reverse&&d.reverse(),ui(i,d,i._majorUnit)},getLabelForIndex:function(t,e){var n=this,i=n._adapter,a=n.chart.data,r=n.options.time,o=a.labels&&t<a.labels.length?a.labels[t]:"",s=a.datasets[e].data[t];return V.isObject(s)&&(o=n.getRightValue(s)),r.tooltipFormat?i.format(oi(n,o),r.tooltipFormat):"string"==typeof o?o:i.format(oi(n,o),r.displayFormats.datetime)},tickFormatFunction:function(t,e,n,i){var a=this._adapter,r=this.options,o=r.time.displayFormats,s=o[this._unit],l=this._majorUnit,u=o[l],d=n[e],h=r.ticks,c=l&&u&&d&&d.major,f=a.format(t,i||(c?u:s)),g=c?h.major:h.minor,p=Zn([g.callback,g.userCallback,h.callback,h.userCallback]);return p?p(f,e,n):f},convertTicksToLabels:function(t){var e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(t[e].value,e,t));return i},getPixelForOffset:function(t){var e=this._offsets,n=ri(this._table,"time",t,"pos");return this.getPixelForDecimal((e.start+n)*e.factor)},getPixelForValue:function(t,e,n){var i=null;if(void 0!==e&&void 0!==n&&(i=this._timestamps.datasets[n][e]),null===i&&(i=si(this,t)),null!==i)return this.getPixelForOffset(i)},getPixelForTick:function(t){var e=this.getTicks();return t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var e=this._offsets,n=this.getDecimalForPixel(t)/e.factor-e.end,i=ri(this._table,"pos",n,"time");return this._adapter._create(i)},_getLabelSize:function(t){var e=this.options.ticks,n=this.ctx.measureText(t).width,i=V.toRadians(this.isHorizontal()?e.maxRotation:e.minRotation),a=Math.cos(i),r=Math.sin(i),o=$n(e.fontSize,z.global.defaultFontSize);return{w:n*a+o*r,h:n*r+o*a}},getLabelWidth:function(t){return this._getLabelSize(t).w},getLabelCapacity:function(t){var e=this,n=e.options.time,i=n.displayFormats,a=i[n.unit]||i.millisecond,r=e.tickFormatFunction(t,0,ui(e,[t],e._majorUnit),a),o=e._getLabelSize(r),s=Math.floor(e.isHorizontal()?e.width/o.w:e.height/o.h);return e.options.offset&&s--,s>0?s:1}}),hi={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};di._defaults=hi;var ci={category:_n,linear:Dn,logarithmic:Rn,radialLinear:Gn,time:di},fi={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};an._date.override("function"==typeof t?{_id:"moment",formats:function(){return fi},parse:function(e,n){return"string"==typeof e&&"string"==typeof n?e=t(e,n):e instanceof t||(e=t(e)),e.isValid()?e.valueOf():null},format:function(e,n){return t(e).format(n)},add:function(e,n,i){return t(e).add(n,i).valueOf()},diff:function(e,n,i){return t(e).diff(t(n),i)},startOf:function(e,n,i){return e=t(e),"isoWeek"===n?e.isoWeekday(i).valueOf():e.startOf(n).valueOf()},endOf:function(e,n){return t(e).endOf(n).valueOf()},_create:function(e){return t(e)}}:{}),z._set("global",{plugins:{filler:{propagate:!0}}});var gi={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],r=a.length||0;return r?function(t,e){return e<r&&a[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return V.isArray(e)?function(t,n){return e[n]}:function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};function pi(t,e,n){var i,a=t._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(i=parseFloat(r,10),isFinite(i)&&Math.floor(i)===i)return"-"!==r[0]&&"+"!==r[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function mi(t){return(t.el._scale||{}).getPointPositionForValue?function(t){var e,n,i,a,r,o=t.el._scale,s=o.options,l=o.chart.data.labels.length,u=t.fill,d=[];if(!l)return null;for(e=s.ticks.reverse?o.max:o.min,n=s.ticks.reverse?o.min:o.max,i=o.getPointPositionForValue(0,e),a=0;a<l;++a)r="start"===u||"end"===u?o.getPointPositionForValue(a,"start"===u?e:n):o.getBasePosition(a),s.gridLines.circular&&(r.cx=i.x,r.cy=i.y,r.angle=o.getIndexAngle(a)-Math.PI/2),d.push(r);return d}(t):function(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?r=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?r=n.scaleZero:i.getBasePixel&&(r=i.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(V.isFinite(r))return{x:(e=i.isHorizontal())?r:null,y:e?null:r}}return null}(t)}function vi(t,e,n){var i,a=t[e].fill,r=[e];if(!n)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(i=t[a]))return!1;if(i.visible)return a;r.push(a),a=i.fill}return!1}function bi(t){var e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),gi[n](t))}function xi(t){return t&&!t.skip}function yi(t,e,n,i,a){var r,o,s,l;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)V.canvas.lineTo(t,e[r-1],e[r]);if(void 0===n[0].angle)for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)V.canvas.lineTo(t,n[r],n[r-1],!0);else for(o=n[0].cx,s=n[0].cy,l=Math.sqrt(Math.pow(n[0].x-o,2)+Math.pow(n[0].y-s,2)),r=a-1;r>0;--r)t.arc(o,s,l,n[r].angle,n[r-1].angle,!0)}}function _i(t,e,n,i,a,r){var o,s,l,u,d,h,c,f,g=e.length,p=i.spanGaps,m=[],v=[],b=0,x=0;for(t.beginPath(),o=0,s=g;o<s;++o)d=n(u=e[l=o%g]._view,l,i),h=xi(u),c=xi(d),r&&void 0===f&&h&&(s=g+(f=o+1)),h&&c?(b=m.push(u),x=v.push(d)):b&&x&&(p?(h&&m.push(u),c&&v.push(d)):(yi(t,m,v,b,x),b=x=0,m=[],v=[]));yi(t,m,v,b,x),t.closePath(),t.fillStyle=a,t.fill()}var ki={id:"filler",afterDatasetsUpdate:function(t,e){var n,i,a,r,o=(t.data.datasets||[]).length,s=e.propagate,l=[];for(i=0;i<o;++i)r=null,(a=(n=t.getDatasetMeta(i)).dataset)&&a._model&&a instanceof _t.Line&&(r={visible:t.isDatasetVisible(i),fill:pi(a,i,o),chart:t,el:a}),n.$filler=r,l.push(r);for(i=0;i<o;++i)(r=l[i])&&(r.fill=vi(l,i,s),r.boundary=mi(r),r.mapper=bi(r))},beforeDatasetsDraw:function(t){var e,n,i,a,r,o,s,l=t._getSortedVisibleDatasetMetas(),u=t.ctx;for(n=l.length-1;n>=0;--n)(e=l[n].$filler)&&e.visible&&(a=(i=e.el)._view,r=i._children||[],o=e.mapper,s=a.backgroundColor||z.global.defaultColor,o&&s&&r.length&&(V.canvas.clipArea(u,t.chartArea),_i(u,r,o,a,s,i._loop),V.canvas.unclipArea(u)))}},wi=V.rtl.getRtlAdapter,Mi=V.noop,Si=V.valueOrDefault;function Ci(t,e){return t.usePointStyle&&t.boxWidth>e?e:t.boxWidth}z._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data.datasets,n=t.options.legend||{},i=n.labels&&n.labels.usePointStyle;return t._getSortedDatasetMetas().map((function(n){var a=n.controller.getStyle(i?0:void 0);return{text:e[n.index].label,fillStyle:a.backgroundColor,hidden:!t.isDatasetVisible(n.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:n.index}}),this)}}},legendCallback:function(t){var e,n,i,a=document.createElement("ul"),r=t.data.datasets;for(a.setAttribute("class",t.id+"-legend"),e=0,n=r.length;e<n;e++)(i=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&i.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Pi=X.extend({initialize:function(t){V.extend(this,t),this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1},beforeUpdate:Mi,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Mi,beforeSetDimensions:Mi,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Mi,beforeBuildLabels:Mi,buildLabels:function(){var t=this,e=t.options.labels||{},n=V.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter((function(n){return e.filter(n,t.chart.data)}))),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:Mi,beforeFit:Mi,fit:function(){var t=this,e=t.options,n=e.labels,i=e.display,a=t.ctx,r=V.options._parseFont(n),o=r.size,s=t.legendHitBoxes=[],l=t.minSize,u=t.isHorizontal();if(u?(l.width=t.maxWidth,l.height=i?10:0):(l.width=i?10:0,l.height=t.maxHeight),i){if(a.font=r.string,u){var d=t.lineWidths=[0],h=0;a.textAlign="left",a.textBaseline="middle",V.each(t.legendItems,(function(t,e){var i=Ci(n,o)+o/2+a.measureText(t.text).width;(0===e||d[d.length-1]+i+2*n.padding>l.width)&&(h+=o+n.padding,d[d.length-(e>0?0:1)]=0),s[e]={left:0,top:0,width:i,height:o},d[d.length-1]+=i+n.padding})),l.height+=h}else{var c=n.padding,f=t.columnWidths=[],g=t.columnHeights=[],p=n.padding,m=0,v=0;V.each(t.legendItems,(function(t,e){var i=Ci(n,o)+o/2+a.measureText(t.text).width;e>0&&v+o+2*c>l.height&&(p+=m+n.padding,f.push(m),g.push(v),m=0,v=0),m=Math.max(m,i),v+=o+c,s[e]={left:0,top:0,width:i,height:o}})),p+=m,f.push(m),g.push(v),l.width+=p}t.width=l.width,t.height=l.height}else t.width=l.width=t.height=l.height=0},afterFit:Mi,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,n=e.labels,i=z.global,a=i.defaultColor,r=i.elements.line,o=t.height,s=t.columnHeights,l=t.width,u=t.lineWidths;if(e.display){var d,h=wi(e.rtl,t.left,t.minSize.width),c=t.ctx,f=Si(n.fontColor,i.defaultFontColor),g=V.options._parseFont(n),p=g.size;c.textAlign=h.textAlign("left"),c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=g.string;var m=Ci(n,p),v=t.legendHitBoxes,b=function(t,i){switch(e.align){case"start":return n.padding;case"end":return t-i;default:return(t-i+n.padding)/2}},x=t.isHorizontal();d=x?{x:t.left+b(l,u[0]),y:t.top+n.padding,line:0}:{x:t.left+n.padding,y:t.top+b(o,s[0]),line:0},V.rtl.overrideTextDirection(t.ctx,e.textDirection);var y=p+n.padding;V.each(t.legendItems,(function(e,i){var f=c.measureText(e.text).width,g=m+p/2+f,_=d.x,k=d.y;h.setWidth(t.minSize.width),x?i>0&&_+g+n.padding>t.left+t.minSize.width&&(k=d.y+=y,d.line++,_=d.x=t.left+b(l,u[d.line])):i>0&&k+y>t.top+t.minSize.height&&(_=d.x=_+t.columnWidths[d.line]+n.padding,d.line++,k=d.y=t.top+b(o,s[d.line]));var w=h.x(_);!function(t,e,i){if(!(isNaN(m)||m<=0)){c.save();var o=Si(i.lineWidth,r.borderWidth);if(c.fillStyle=Si(i.fillStyle,a),c.lineCap=Si(i.lineCap,r.borderCapStyle),c.lineDashOffset=Si(i.lineDashOffset,r.borderDashOffset),c.lineJoin=Si(i.lineJoin,r.borderJoinStyle),c.lineWidth=o,c.strokeStyle=Si(i.strokeStyle,a),c.setLineDash&&c.setLineDash(Si(i.lineDash,r.borderDash)),n&&n.usePointStyle){var s=m*Math.SQRT2/2,l=h.xPlus(t,m/2),u=e+p/2;V.canvas.drawPoint(c,i.pointStyle,s,l,u,i.rotation)}else c.fillRect(h.leftForLtr(t,m),e,m,p),0!==o&&c.strokeRect(h.leftForLtr(t,m),e,m,p);c.restore()}}(w,k,e),v[i].left=h.leftForLtr(w,v[i].width),v[i].top=k,function(t,e,n,i){var a=p/2,r=h.xPlus(t,m+a),o=e+a;c.fillText(n.text,r,o),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(r,o),c.lineTo(h.xPlus(r,i),o),c.stroke())}(w,k,e,f),x?d.x+=g+n.padding:d.y+=y})),V.rtl.restoreTextDirection(t.ctx,e.textDirection)}},_getLegendItemAt:function(t,e){var n,i,a,r=this;if(t>=r.left&&t<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,n=0;n<a.length;++n)if(t>=(i=a[n]).left&&t<=i.left+i.width&&e>=i.top&&e<=i.top+i.height)return r.legendItems[n];return null},handleEvent:function(t){var e,n=this,i=n.options,a="mouseup"===t.type?"click":t.type;if("mousemove"===a){if(!i.onHover&&!i.onLeave)return}else{if("click"!==a)return;if(!i.onClick)return}e=n._getLegendItemAt(t.x,t.y),"click"===a?e&&i.onClick&&i.onClick.call(n,t.native,e):(i.onLeave&&e!==n._hoveredItem&&(n._hoveredItem&&i.onLeave.call(n,t.native,n._hoveredItem),n._hoveredItem=e),i.onHover&&e&&i.onHover.call(n,t.native,e))}});function Ai(t,e){var n=new Pi({ctx:t.ctx,options:e,chart:t});ge.configure(t,n,e),ge.addBox(t,n),t.legend=n}var Di={id:"legend",_element:Pi,beforeInit:function(t){var e=t.options.legend;e&&Ai(t,e)},beforeUpdate:function(t){var e=t.options.legend,n=t.legend;e?(V.mergeIf(e,z.global.legend),n?(ge.configure(t,n,e),n.options=e):Ai(t,e)):n&&(ge.removeBox(t,n),delete t.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}},Ti=V.noop;z._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Ii=X.extend({initialize:function(t){V.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:Ti,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:Ti,beforeSetDimensions:Ti,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:Ti,beforeBuildLabels:Ti,buildLabels:Ti,afterBuildLabels:Ti,beforeFit:Ti,fit:function(){var t,e=this,n=e.options,i=e.minSize={},a=e.isHorizontal();n.display?(t=(V.isArray(n.text)?n.text.length:1)*V.options._parseFont(n).lineHeight+2*n.padding,e.width=i.width=a?e.maxWidth:t,e.height=i.height=a?t:e.maxHeight):e.width=i.width=e.height=i.height=0},afterFit:Ti,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,n=t.options;if(n.display){var i,a,r,o=V.options._parseFont(n),s=o.lineHeight,l=s/2+n.padding,u=0,d=t.top,h=t.left,c=t.bottom,f=t.right;e.fillStyle=V.valueOrDefault(n.fontColor,z.global.defaultFontColor),e.font=o.string,t.isHorizontal()?(a=h+(f-h)/2,r=d+l,i=f-h):(a="left"===n.position?h+l:f-l,r=d+(c-d)/2,i=c-d,u=Math.PI*("left"===n.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(u),e.textAlign="center",e.textBaseline="middle";var g=n.text;if(V.isArray(g))for(var p=0,m=0;m<g.length;++m)e.fillText(g[m],0,p,i),p+=s;else e.fillText(g,0,0,i);e.restore()}}});function Fi(t,e){var n=new Ii({ctx:t.ctx,options:e,chart:t});ge.configure(t,n,e),ge.addBox(t,n),t.titleBlock=n}var Li={},Oi=ki,Ri=Di,zi={id:"title",_element:Ii,beforeInit:function(t){var e=t.options.title;e&&Fi(t,e)},beforeUpdate:function(t){var e=t.options.title,n=t.titleBlock;e?(V.mergeIf(e,z.global.title),n?(ge.configure(t,n,e),n.options=e):Fi(t,e)):n&&(ge.removeBox(t,n),delete t.titleBlock)}};for(var Ni in Li.filler=Oi,Li.legend=Ri,Li.title=zi,tn.helpers=V,function(){function t(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function e(t){return null!=t&&"none"!==t}function n(n,i,a){var r=document.defaultView,o=V._getParentNode(n),s=r.getComputedStyle(n)[i],l=r.getComputedStyle(o)[i],u=e(s),d=e(l),h=Number.POSITIVE_INFINITY;return u||d?Math.min(u?t(s,n,a):h,d?t(l,o,a):h):"none"}V.where=function(t,e){if(V.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return V.each(t,(function(t){e(t)&&n.push(t)})),n},V.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},V.findNextWhere=function(t,e,n){V.isNullOrUndef(n)&&(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},V.findPreviousWhere=function(t,e,n){V.isNullOrUndef(n)&&(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},V.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},V.almostEquals=function(t,e,n){return Math.abs(t-e)<n},V.almostWhole=function(t,e){var n=Math.round(t);return n-e<=t&&n+e>=t},V.max=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.max(t,e)}),Number.NEGATIVE_INFINITY)},V.min=function(t){return t.reduce((function(t,e){return isNaN(e)?t:Math.min(t,e)}),Number.POSITIVE_INFINITY)},V.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},V.toRadians=function(t){return t*(Math.PI/180)},V.toDegrees=function(t){return t*(180/Math.PI)},V._decimalPlaces=function(t){if(V.isFinite(t)){for(var e=1,n=0;Math.round(t*e)/e!==t;)e*=10,n++;return n}},V.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},V.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},V.aliasPixel=function(t){return t%2==0?0:.5},V._alignPixel=function(t,e,n){var i=t.currentDevicePixelRatio,a=n/2;return Math.round((e-a)*i)/i+a},V.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l),h=i*(u=isNaN(u)?0:u),c=i*(d=isNaN(d)?0:d);return{previous:{x:r.x-h*(o.x-a.x),y:r.y-h*(o.y-a.y)},next:{x:r.x+c*(o.x-a.x),y:r.y+c*(o.y-a.y)}}},V.EPSILON=Number.EPSILON||1e-14,V.splineCurveMonotone=function(t){var e,n,i,a,r,o,s,l,u,d=(t||[]).map((function(t){return{model:t._model,deltaK:0,mK:0}})),h=d.length;for(e=0;e<h;++e)if(!(i=d[e]).model.skip){if(n=e>0?d[e-1]:null,(a=e<h-1?d[e+1]:null)&&!a.model.skip){var c=a.model.x-i.model.x;i.deltaK=0!==c?(a.model.y-i.model.y)/c:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}for(e=0;e<h-1;++e)i=d[e],a=d[e+1],i.model.skip||a.model.skip||(V.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(r=i.mK/i.deltaK,o=a.mK/i.deltaK,(l=Math.pow(r,2)+Math.pow(o,2))<=9||(s=3/Math.sqrt(l),i.mK=r*s*i.deltaK,a.mK=o*s*i.deltaK)));for(e=0;e<h;++e)(i=d[e]).model.skip||(n=e>0?d[e-1]:null,a=e<h-1?d[e+1]:null,n&&!n.model.skip&&(u=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-u,i.model.controlPointPreviousY=i.model.y-u*i.mK),a&&!a.model.skip&&(u=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+u,i.model.controlPointNextY=i.model.y+u*i.mK))},V.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},V.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},V.niceNum=function(t,e){var n=Math.floor(V.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},V.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},V.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.target||t.srcElement,o=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var l=parseFloat(V.getStyle(r,"padding-left")),u=parseFloat(V.getStyle(r,"padding-top")),d=parseFloat(V.getStyle(r,"padding-right")),h=parseFloat(V.getStyle(r,"padding-bottom")),c=o.right-o.left-l-d,f=o.bottom-o.top-u-h;return{x:n=Math.round((n-o.left-l)/c*r.width/e.currentDevicePixelRatio),y:i=Math.round((i-o.top-u)/f*r.height/e.currentDevicePixelRatio)}},V.getConstraintWidth=function(t){return n(t,"max-width","clientWidth")},V.getConstraintHeight=function(t){return n(t,"max-height","clientHeight")},V._calculatePadding=function(t,e,n){return(e=V.getStyle(t,e)).indexOf("%")>-1?n*parseInt(e,10)/100:parseInt(e,10)},V._getParentNode=function(t){var e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},V.getMaximumWidth=function(t){var e=V._getParentNode(t);if(!e)return t.clientWidth;var n=e.clientWidth,i=n-V._calculatePadding(e,"padding-left",n)-V._calculatePadding(e,"padding-right",n),a=V.getConstraintWidth(t);return isNaN(a)?i:Math.min(i,a)},V.getMaximumHeight=function(t){var e=V._getParentNode(t);if(!e)return t.clientHeight;var n=e.clientHeight,i=n-V._calculatePadding(e,"padding-top",n)-V._calculatePadding(e,"padding-bottom",n),a=V.getConstraintHeight(t);return isNaN(a)?i:Math.min(i,a)},V.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},V.retinaScale=function(t,e){var n=t.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==n){var i=t.canvas,a=t.height,r=t.width;i.height=a*n,i.width=r*n,t.ctx.scale(n,n),i.style.height||i.style.width||(i.style.height=a+"px",i.style.width=r+"px")}},V.fontString=function(t,e,n){return e+" "+t+"px "+n},V.longestText=function(t,e,n,i){var a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var o,s,l,u,d,h=0,c=n.length;for(o=0;o<c;o++)if(null!=(u=n[o])&&!0!==V.isArray(u))h=V.measureText(t,a,r,h,u);else if(V.isArray(u))for(s=0,l=u.length;s<l;s++)null==(d=u[s])||V.isArray(d)||(h=V.measureText(t,a,r,h,d));var f=r.length/2;if(f>n.length){for(o=0;o<f;o++)delete a[r[o]];r.splice(0,f)}return h},V.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},V.numberOfLabelLines=function(t){var e=1;return V.each(t,(function(t){V.isArray(t)&&t.length>e&&(e=t.length)})),e},V.color=k?function(t){return t instanceof CanvasGradient&&(t=z.global.defaultColor),k(t)}:function(t){return console.error("Color.js not found!"),t},V.getHoverColor=function(t){return t instanceof CanvasPattern||t instanceof CanvasGradient?t:V.color(t).saturate(.5).darken(.1).rgbString()}}(),tn._adapters=an,tn.Animation=Z,tn.animationService=$,tn.controllers=$t,tn.DatasetController=nt,tn.defaults=z,tn.Element=X,tn.elements=_t,tn.Interaction=ae,tn.layouts=ge,tn.platform=Fe,tn.plugins=Le,tn.Scale=xn,tn.scaleService=Oe,tn.Ticks=rn,tn.Tooltip=Ue,tn.helpers.each(ci,(function(t,e){tn.scaleService.registerScaleType(e,t,t._defaults)})),Li)Li.hasOwnProperty(Ni)&&tn.plugins.register(Li[Ni]);tn.platform.initialize();var Bi=tn;return"undefined"!=typeof window&&(window.Chart=tn),tn.Chart=tn,tn.Legend=Li.legend._element,tn.Title=Li.title._element,tn.pluginService=tn.plugins,tn.PluginBase=tn.Element.extend({}),tn.canvasHelpers=tn.helpers.canvas,tn.layoutService=tn.layouts,tn.LinearScaleBase=Sn,tn.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(t){tn[t]=function(e,n){return new tn(e,tn.helpers.merge(n||{},{type:t.charAt(0).toLowerCase()+t.slice(1)}))}})),Bi}));
|
static/ninjafirewall.css
CHANGED
@@ -15,6 +15,9 @@
|
|
15 |
| GNU General Public License for more details. |
|
16 |
+---------------------------------------------------------------------+
|
17 |
*/
|
|
|
|
|
|
|
18 |
.wpplus {
|
19 |
border: 1px solid #ccc;
|
20 |
-moz-box-shadow:-3px 5px 5px #999;
|
@@ -26,7 +29,7 @@
|
|
26 |
}
|
27 |
.nfw-progress {
|
28 |
height: 3px;
|
29 |
-
width:
|
30 |
-webkit-appearance: none;
|
31 |
border: none;
|
32 |
background-color: #f1f1f1;
|
15 |
| GNU General Public License for more details. |
|
16 |
+---------------------------------------------------------------------+
|
17 |
*/
|
18 |
+
textarea {
|
19 |
+
resize: both;
|
20 |
+
}
|
21 |
.wpplus {
|
22 |
border: 1px solid #ccc;
|
23 |
-moz-box-shadow:-3px 5px 5px #999;
|
29 |
}
|
30 |
.nfw-progress {
|
31 |
height: 3px;
|
32 |
+
width: 99%;
|
33 |
-webkit-appearance: none;
|
34 |
border: none;
|
35 |
background-color: #f1f1f1;
|
static/ninjafirewall.js
CHANGED
@@ -223,6 +223,27 @@ function nfwjs_fullwaf_countdown() {
|
|
223 |
}
|
224 |
}
|
225 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
// =====================================================================
|
227 |
// Statistics page.
|
228 |
|
@@ -531,8 +552,7 @@ function nfwjs_livelog() {
|
|
531 |
nfwjs_livelog_stop();
|
532 |
return true;
|
533 |
}
|
534 |
-
jQuery('#idtxtlog').
|
535 |
-
if ( jQuery('#idtxtlog').val() == '' ) {
|
536 |
jQuery('#idtxtlog').val( nfwi18n.no_traffic +' '+ liveinterval/1000 + nfwi18n.seconds +"\n" );
|
537 |
}
|
538 |
if ( scroll == 1 ) {
|
@@ -606,7 +626,7 @@ function nfwjs_start_livelog() {
|
|
606 |
livecls = 0;
|
607 |
livecount = 1;
|
608 |
|
609 |
-
if ( jQuery('#idtxtlog').val() ==
|
610 |
jQuery('#idtxtlog').val( nfwi18n.no_traffic +' '+ liveinterval/1000 + nfwi18n.seconds +"\n" );
|
611 |
}
|
612 |
return false;
|
@@ -627,8 +647,7 @@ function nfwjs_livelog_stop( force ) {
|
|
627 |
|
628 |
var textarea = jQuery('#idtxtlog').val();
|
629 |
if ( textarea.includes( nfwi18n.no_traffic ) ) {
|
630 |
-
jQuery('#idtxtlog').val(
|
631 |
-
jQuery('#idtxtlog').prop( 'disabled', true );
|
632 |
}
|
633 |
|
634 |
lines = 0;
|
223 |
}
|
224 |
}
|
225 |
|
226 |
+
function nfwjs_welcomeajax( nonce ) {
|
227 |
+
|
228 |
+
// Ajax
|
229 |
+
var data = {
|
230 |
+
'action': 'nfw_welcomescreen',
|
231 |
+
'nonce': nonce,
|
232 |
+
};
|
233 |
+
jQuery.ajax( {
|
234 |
+
type: "POST",
|
235 |
+
url: ajaxurl,
|
236 |
+
headers: {
|
237 |
+
'Accept-Language':'en-US,en;q=0.5',
|
238 |
+
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:60.0)',
|
239 |
+
},
|
240 |
+
data: data,
|
241 |
+
dataType: "text",
|
242 |
+
// We don't want any response.
|
243 |
+
});
|
244 |
+
return 1;
|
245 |
+
}
|
246 |
+
|
247 |
// =====================================================================
|
248 |
// Statistics page.
|
249 |
|
552 |
nfwjs_livelog_stop();
|
553 |
return true;
|
554 |
}
|
555 |
+
if ( jQuery('#idtxtlog').val() == nfwi18n.live_log_desc || jQuery('#idtxtlog').val() == '' ) {
|
|
|
556 |
jQuery('#idtxtlog').val( nfwi18n.no_traffic +' '+ liveinterval/1000 + nfwi18n.seconds +"\n" );
|
557 |
}
|
558 |
if ( scroll == 1 ) {
|
626 |
livecls = 0;
|
627 |
livecount = 1;
|
628 |
|
629 |
+
if ( jQuery('#idtxtlog').val() == nfwi18n.live_log_desc ) {
|
630 |
jQuery('#idtxtlog').val( nfwi18n.no_traffic +' '+ liveinterval/1000 + nfwi18n.seconds +"\n" );
|
631 |
}
|
632 |
return false;
|
647 |
|
648 |
var textarea = jQuery('#idtxtlog').val();
|
649 |
if ( textarea.includes( nfwi18n.no_traffic ) ) {
|
650 |
+
jQuery('#idtxtlog').val( nfwi18n.live_log_desc );
|
|
|
651 |
}
|
652 |
|
653 |
lines = 0;
|
uninstall.php
CHANGED
@@ -44,6 +44,11 @@ function nfw_uninstall() {
|
|
44 |
unset( $_SESSION['nfw_goodguy'] );
|
45 |
}
|
46 |
|
|
|
|
|
|
|
|
|
|
|
47 |
define( 'HTACCESS_BEGIN', '# BEGIN NinjaFirewall' );
|
48 |
define( 'HTACCESS_END', '# END NinjaFirewall' );
|
49 |
define( 'PHPINI_BEGIN', '; BEGIN NinjaFirewall' );
|
@@ -70,8 +75,8 @@ function nfw_uninstall() {
|
|
70 |
// Clean-up .htaccess :
|
71 |
if (! empty($nfw_install['htaccess']) && file_exists($nfw_install['htaccess']) ) {
|
72 |
$htaccess_file = $nfw_install['htaccess'];
|
73 |
-
} elseif ( file_exists(
|
74 |
-
$htaccess_file =
|
75 |
} else {
|
76 |
$htaccess_file = '';
|
77 |
}
|
@@ -91,19 +96,19 @@ function nfw_uninstall() {
|
|
91 |
$phpini[] = $nfw_install['phpini'];
|
92 |
}
|
93 |
}
|
94 |
-
if ( file_exists(
|
95 |
-
if ( is_writable(
|
96 |
-
$phpini[] =
|
97 |
}
|
98 |
}
|
99 |
-
if ( file_exists(
|
100 |
-
if ( is_writable(
|
101 |
-
$phpini[] =
|
102 |
}
|
103 |
}
|
104 |
-
if ( file_exists(
|
105 |
-
if ( is_writable(
|
106 |
-
$phpini[] =
|
107 |
}
|
108 |
}
|
109 |
foreach( $phpini as $ini ) {
|
@@ -131,12 +136,14 @@ function nfw_uninstall() {
|
|
131 |
delete_option('nfw_rules');
|
132 |
delete_option('nfw_install');
|
133 |
delete_option('nfw_tmp');
|
|
|
134 |
if ( is_multisite() ) {
|
135 |
// Delete those ones too :
|
136 |
delete_site_option('nfw_options');
|
137 |
delete_site_option('nfw_rules');
|
138 |
delete_site_option('nfw_install');
|
139 |
delete_site_option('nfw_tmp');
|
|
|
140 |
}
|
141 |
|
142 |
// Clear session flag:
|
44 |
unset( $_SESSION['nfw_goodguy'] );
|
45 |
}
|
46 |
|
47 |
+
if (! function_exists( 'get_home_path' ) ) {
|
48 |
+
include_once ABSPATH .'wp-admin/includes/file.php';
|
49 |
+
}
|
50 |
+
$NFW_ABSPATH = get_home_path();
|
51 |
+
|
52 |
define( 'HTACCESS_BEGIN', '# BEGIN NinjaFirewall' );
|
53 |
define( 'HTACCESS_END', '# END NinjaFirewall' );
|
54 |
define( 'PHPINI_BEGIN', '; BEGIN NinjaFirewall' );
|
75 |
// Clean-up .htaccess :
|
76 |
if (! empty($nfw_install['htaccess']) && file_exists($nfw_install['htaccess']) ) {
|
77 |
$htaccess_file = $nfw_install['htaccess'];
|
78 |
+
} elseif ( file_exists( $NFW_ABSPATH . '.htaccess' ) ) {
|
79 |
+
$htaccess_file = $NFW_ABSPATH . '.htaccess';
|
80 |
} else {
|
81 |
$htaccess_file = '';
|
82 |
}
|
96 |
$phpini[] = $nfw_install['phpini'];
|
97 |
}
|
98 |
}
|
99 |
+
if ( file_exists( $NFW_ABSPATH . 'php.ini' ) ) {
|
100 |
+
if ( is_writable( $NFW_ABSPATH . 'php.ini' ) ) {
|
101 |
+
$phpini[] = $NFW_ABSPATH . 'php.ini';
|
102 |
}
|
103 |
}
|
104 |
+
if ( file_exists( $NFW_ABSPATH . 'php5.ini' ) ) {
|
105 |
+
if ( is_writable( $NFW_ABSPATH . 'php5.ini' ) ) {
|
106 |
+
$phpini[] = $NFW_ABSPATH . 'php5.ini';
|
107 |
}
|
108 |
}
|
109 |
+
if ( file_exists( $NFW_ABSPATH . '.user.ini' ) ) {
|
110 |
+
if ( is_writable( $NFW_ABSPATH . '.user.ini' ) ) {
|
111 |
+
$phpini[] = $NFW_ABSPATH . '.user.ini';
|
112 |
}
|
113 |
}
|
114 |
foreach( $phpini as $ini ) {
|
136 |
delete_option('nfw_rules');
|
137 |
delete_option('nfw_install');
|
138 |
delete_option('nfw_tmp');
|
139 |
+
delete_option('nfw_checked');
|
140 |
if ( is_multisite() ) {
|
141 |
// Delete those ones too :
|
142 |
delete_site_option('nfw_options');
|
143 |
delete_site_option('nfw_rules');
|
144 |
delete_site_option('nfw_install');
|
145 |
delete_site_option('nfw_tmp');
|
146 |
+
delete_site_option('nfw_checked');
|
147 |
}
|
148 |
|
149 |
// Clear session flag:
|