Version Description
- Fix: Two-Factor Authentication QR code not being displayed on new device registration.
Download this release
Release Info
Developer | jdailey |
Plugin | Defender Security – Malware Scanner, Login Security & Firewall |
Version | 2.1.1.1 |
Comparing to | |
See all releases |
Code changes from version 2.0.1 to 2.1.1.1
- app/behavior/blacklist-free.php +25 -16
- app/behavior/report-free.php +40 -47
- app/behavior/utils.php +276 -0
- app/controller/dashboard.php +3 -89
- app/module/advanced-tools/behavior/at-widget.php +78 -84
- app/module/advanced-tools/component/auth-api.php +13 -4
- app/module/advanced-tools/component/mask-api.php +2 -0
- app/module/advanced-tools/controller/main.php +3 -4
- app/module/advanced-tools/controller/mask-login.php +0 -2
- app/module/advanced-tools/js/scripts.js +18 -18
- app/module/advanced-tools/view/2factor-otp-email-edit-from.php +75 -35
- app/module/advanced-tools/view/disabled.php +22 -18
- app/module/advanced-tools/view/layouts/layout.php +63 -31
- app/module/advanced-tools/view/login/disabled.php +4 -2
- app/module/advanced-tools/view/login/otp.php +1 -1
- app/module/advanced-tools/view/main-free.php +210 -173
- app/module/advanced-tools/view/main.php +228 -174
- app/module/advanced-tools/view/mask-login/disabled.php +27 -23
- app/module/advanced-tools/view/mask-login/enabled.php +89 -66
- app/module/audit/behavior/audit-free.php +24 -17
- app/module/audit/controller/main-free.php +2 -1
- app/module/audit/view/free.php +24 -14
- app/module/hardener/behavior/widget.php +51 -43
- app/module/hardener/component/change-admin.php +1 -1
- app/module/hardener/component/db-prefix-service.php +3 -1
- app/module/hardener/component/db-prefix.php +12 -1
- app/module/hardener/component/hide-error-service.php +10 -6
- app/module/hardener/component/login-duration.php +46 -43
- app/module/hardener/component/php-version-service.php +29 -1
- app/module/hardener/component/prevent-php.php +2 -1
- app/module/hardener/component/protect-information-service.php +28 -10
- app/module/hardener/component/servers/apache-service.php +12 -3
- app/module/hardener/component/servers/iis-service.php +2 -2
- app/module/hardener/controller/main.php +6 -5
- app/module/hardener/js/scripts.js +27 -89
- app/module/hardener/model/settings.php +3 -0
- app/module/hardener/rule.php +38 -14
- app/module/hardener/view/ignore.php +34 -27
- app/module/hardener/view/issues.php +35 -33
- app/module/hardener/view/layouts/layout.php +110 -99
- app/module/hardener/view/resolved.php +29 -18
- app/module/hardener/view/rules/change-admin.php +82 -36
- app/module/hardener/view/rules/db-prefix.php +91 -37
- app/module/hardener/view/rules/disable-file-editor.php +76 -42
- app/module/hardener/view/rules/disable-trackback.php +75 -54
- app/module/hardener/view/rules/disable-xml-rpc.php +78 -49
- app/module/hardener/view/rules/hide-error.php +77 -41
- app/module/hardener/view/rules/information-disclosure/apache_litespeed.php +13 -0
- app/module/hardener/view/rules/information-disclosure/iis7.php +1 -0
- app/module/hardener/view/rules/information-disclosure/nginx.php +48 -0
- app/module/hardener/view/rules/login-duration.php +140 -42
- app/module/hardener/view/rules/php-version.php +69 -42
- app/module/hardener/view/rules/prevent-php-executed.php +104 -191
- app/module/hardener/view/rules/prevent-php/apache_litespeed.php +20 -0
- app/module/hardener/view/rules/prevent-php/iis7.php +10 -0
- app/module/hardener/view/rules/prevent-php/nginx.php +56 -0
- app/module/hardener/view/rules/protect-information.php +93 -117
- app/module/hardener/view/rules/security-key.php +88 -49
- app/module/hardener/view/rules/wp-version.php +66 -43
- app/module/ip-lockout/behavior/widget.php +52 -44
- app/module/ip-lockout/component/ip-api.php +14 -0
- app/module/ip-lockout/component/login-protection-api.php +5 -5
- app/module/ip-lockout/component/logs-table.php +172 -83
- app/module/ip-lockout/controller/main.php +82 -2
- app/module/ip-lockout/js/script.js +60 -27
- app/module/ip-lockout/model/settings.php +92 -4
- app/module/ip-lockout/view/blacklist/enabled.php +205 -99
- app/module/ip-lockout/view/detect-404/disabled.php +22 -17
- app/module/ip-lockout/view/detect-404/enabled.php +175 -129
- app/module/ip-lockout/view/layouts/layout.php +108 -98
- app/module/ip-lockout/view/logging/enabled.php +30 -28
- app/module/ip-lockout/view/login-lockouts/disabled.php +24 -21
- app/module/ip-lockout/view/login-lockouts/enabled.php +146 -102
- app/module/ip-lockout/view/notification/enabled.php +123 -112
- app/module/ip-lockout/view/notification/report-free.php +26 -76
- app/module/ip-lockout/view/notification/report.php +83 -78
- app/module/ip-lockout/view/settings.php +41 -35
- app/module/scan/behavior/core-result.php +145 -9
- app/module/scan/behavior/scan-widget.php +255 -0
- app/module/scan/behavior/scan.php +117 -93
- app/module/scan/component/result-table.php +136 -67
- app/module/scan/component/scan-api.php +5 -4
- app/module/scan/controller/main.php +74 -16
- app/module/scan/js/script.js +95 -137
- app/module/scan/model/scan.php +3 -2
- app/module/scan/model/settings.php +34 -1
- app/module/scan/view/automation-free.php +31 -59
- app/module/scan/view/automation.php +88 -62
- app/module/scan/view/ignored.php +9 -7
- app/module/scan/view/issues.php +41 -30
- app/module/scan/view/layouts/layout.php +131 -151
- app/module/scan/view/new.php +16 -12
- app/module/scan/view/notification.php +216 -0
- app/module/scan/view/scanning.php +85 -45
- app/module/scan/view/setting-free.php +107 -132
- app/module/scan/view/setting.php +88 -154
- app/view/activator-free.php +106 -84
- app/view/activator.php +148 -117
- app/view/dashboard.php +192 -101
- assets/css/styles.css +612 -2562
- assets/img/dashboard-blacklist.svg +65 -0
- assets/img/defender-activator.svg +135 -0
- assets/img/plugins-hummingbird-icon.png +0 -0
- assets/img/plugins-hummingbird-icon@2x.png +0 -0
- assets/img/plugins-hummingbird.jpg +0 -0
- assets/img/scanning-free-man.svg +32 -30
- assets/js/scripts.js +35 -33
- changelog.txt +17 -5
- languages/wpdef-default.pot +789 -725
app/behavior/blacklist-free.php
CHANGED
@@ -15,24 +15,33 @@ class Blacklist_Free extends Behavior {
|
|
15 |
|
16 |
private function _renderFree() {
|
17 |
?>
|
18 |
-
<div class="
|
19 |
-
<div class="box-
|
20 |
-
<
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
</div>
|
28 |
-
<div class="box-
|
29 |
-
<div class="
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
</div>
|
33 |
-
<a href="<?php echo Utils::instance()->campaignURL( 'defender_dash_blacklist_upgrade_button' ) ?>"
|
34 |
-
target="_blank"
|
35 |
-
class="button button-green button-small"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
|
36 |
</div>
|
37 |
</div>
|
38 |
<?php
|
15 |
|
16 |
private function _renderFree() {
|
17 |
?>
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-header">
|
20 |
+
<h3 class="sui-box-title">
|
21 |
+
<i class="sui-icon-target" aria-hidden="true"></i>
|
22 |
+
<?php _e( "Blacklist Monitor", "defender-security" ) ?>
|
23 |
+
</h3>
|
24 |
+
<div class="sui-actions-left">
|
25 |
+
<span class="sui-tag sui-tag-pro"><?php _e( "Pro", "defender-security" ) ?></span>
|
26 |
+
</div>
|
27 |
</div>
|
28 |
+
<div class="sui-box-body sui-upsell-items">
|
29 |
+
<div class="sui-box-settings-row no-margin-bottom">
|
30 |
+
<p>
|
31 |
+
<?php _e( "Automatically check if you’re on Google’s blacklist every 6 hours. If something’s wrong, we’ll let you know via email.", "defender-security" ) ?>
|
32 |
+
</p>
|
33 |
+
</div>
|
34 |
+
<div class="sui-box-settings-row sui-upsell-row">
|
35 |
+
<img class="sui-image sui-upsell-image"
|
36 |
+
src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/dashboard-blacklist.svg' ?>">
|
37 |
+
<div class="sui-upsell-notice">
|
38 |
+
<p>
|
39 |
+
<?php
|
40 |
+
printf( __( "Blacklist Monitor is a Pro feature, included as part of a WPMU DEV monthly membership. <a target='_blank' href='%s'>Learn more</a>.", "defender-security" ), Utils::instance()->campaignURL( 'defender_dash_blacklist_upgrade_button' ) )
|
41 |
+
?>
|
42 |
+
</p>
|
43 |
+
</div>
|
44 |
</div>
|
|
|
|
|
|
|
45 |
</div>
|
46 |
</div>
|
47 |
<?php
|
app/behavior/report-free.php
CHANGED
@@ -11,59 +11,52 @@ use WP_Defender\Module\Scan\Model\Settings;
|
|
11 |
class Report_Free extends Behavior {
|
12 |
public function renderReportWidget() {
|
13 |
?>
|
14 |
-
<div class="
|
15 |
-
<div class="box-
|
16 |
-
<
|
17 |
-
|
|
|
|
|
18 |
</div>
|
19 |
-
<div class="box-
|
20 |
-
<div class="
|
21 |
-
|
22 |
-
about checking in.", "defender-security" ) ?>
|
23 |
</div>
|
24 |
-
<div class="
|
25 |
-
<div class="
|
26 |
-
<
|
27 |
-
<
|
28 |
-
<
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
<
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
</
|
46 |
-
</div>
|
47 |
-
<div class="col-half">
|
48 |
-
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=reporting' ) ?>">
|
49 |
-
<div class="report-status with-corner">
|
50 |
-
<img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/lockout-pre.svg">
|
51 |
-
<strong><?php _e( "IP LOCKOUTS", "defender-security" ) ?></strong>
|
52 |
-
<div class="corner">
|
53 |
-
Pro
|
54 |
-
</div>
|
55 |
-
</div>
|
56 |
-
</a>
|
57 |
</div>
|
58 |
</div>
|
59 |
-
<div class="
|
60 |
-
<
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
64 |
</div>
|
65 |
</div>
|
66 |
-
<div class="clear"></div>
|
67 |
</div>
|
68 |
</div>
|
69 |
<?php
|
11 |
class Report_Free extends Behavior {
|
12 |
public function renderReportWidget() {
|
13 |
?>
|
14 |
+
<div class="sui-box">
|
15 |
+
<div class="sui-box-header">
|
16 |
+
<h3 class="sui-box-title">
|
17 |
+
<i class="sui-icon-graph-line" aria-hidden="true"></i>
|
18 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
19 |
+
</h3>
|
20 |
</div>
|
21 |
+
<div class="sui-box-body sui-upsell-items">
|
22 |
+
<div class="sui-box-settings-row no-margin-bottom">
|
23 |
+
<p><?php _e( "Get tailored security reports delivered to your inbox so you don’t have to worry about checking in.", "defender-security" ) ?></p>
|
|
|
24 |
</div>
|
25 |
+
<div class="sui-field-list no-border">
|
26 |
+
<div class="sui-field-list-body">
|
27 |
+
<div class="sui-field-list-item">
|
28 |
+
<label class="sui-field-list-item-label">
|
29 |
+
<small><strong><?php _e( "File Scanning", "defender-security" ) ?></strong>
|
30 |
+
</small>
|
31 |
+
</label>
|
32 |
+
<span class="sui-tag sui-tag-disabled"><?php _e( "Inactive", "defender-security" ) ?></span>
|
33 |
+
</div>
|
34 |
+
<div class="sui-field-list-item">
|
35 |
+
<label class="sui-field-list-item-label">
|
36 |
+
<small><strong><?php _e( "IP Lockouts", "defender-security" ) ?></strong></small>
|
37 |
+
</label>
|
38 |
+
<span class="sui-tag sui-tag-disabled"><?php _e( "Inactive", "defender-security" ) ?></span>
|
39 |
+
</div>
|
40 |
+
<div class="sui-field-list-item">
|
41 |
+
<label class="sui-field-list-item-label">
|
42 |
+
<small><strong><?php _e( "Audit Logging", "defender-security" ) ?></strong>
|
43 |
+
</small>
|
44 |
+
</label>
|
45 |
+
<span class="sui-tag sui-tag-disabled"><?php _e( "Inactive", "defender-security" ) ?></span>
|
46 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
</div>
|
48 |
</div>
|
49 |
+
<div class="sui-box-settings-row sui-upsell-row">
|
50 |
+
<img class="sui-image sui-upsell-image"
|
51 |
+
src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/dev-man-pre.svg' ?>">
|
52 |
+
<div class="sui-upsell-notice">
|
53 |
+
<p>
|
54 |
+
<?php
|
55 |
+
printf( __( "Automated reports are included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools. <a href='%s'>Try it all absolutely free.</a>", "defender-security" ), Utils::instance()->campaignURL( 'defender_dash_reports_upsell_link' ) )
|
56 |
+
?>
|
57 |
+
</p>
|
58 |
</div>
|
59 |
</div>
|
|
|
60 |
</div>
|
61 |
</div>
|
62 |
<?php
|
app/behavior/utils.php
CHANGED
@@ -776,4 +776,280 @@ class Utils extends Behavior {
|
|
776 |
|
777 |
return $url;
|
778 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
779 |
}
|
776 |
|
777 |
return $url;
|
778 |
}
|
779 |
+
|
780 |
+
/**
|
781 |
+
* Copy the list from here
|
782 |
+
* https://gist.github.com/DHS/1340150
|
783 |
+
* @return array
|
784 |
+
*/
|
785 |
+
public function countriesList() {
|
786 |
+
$country_array = array(
|
787 |
+
"AF" => "Afghanistan",
|
788 |
+
"AL" => "Albania",
|
789 |
+
"DZ" => "Algeria",
|
790 |
+
"AS" => "American Samoa",
|
791 |
+
"AD" => "Andorra",
|
792 |
+
"AO" => "Angola",
|
793 |
+
"AI" => "Anguilla",
|
794 |
+
"AQ" => "Antarctica",
|
795 |
+
"AG" => "Antigua and Barbuda",
|
796 |
+
"AR" => "Argentina",
|
797 |
+
"AM" => "Armenia",
|
798 |
+
"AW" => "Aruba",
|
799 |
+
"AU" => "Australia",
|
800 |
+
"AT" => "Austria",
|
801 |
+
"AZ" => "Azerbaijan",
|
802 |
+
"BS" => "Bahamas",
|
803 |
+
"BH" => "Bahrain",
|
804 |
+
"BD" => "Bangladesh",
|
805 |
+
"BB" => "Barbados",
|
806 |
+
"BY" => "Belarus",
|
807 |
+
"BE" => "Belgium",
|
808 |
+
"BZ" => "Belize",
|
809 |
+
"BJ" => "Benin",
|
810 |
+
"BM" => "Bermuda",
|
811 |
+
"BT" => "Bhutan",
|
812 |
+
"BO" => "Bolivia",
|
813 |
+
"BA" => "Bosnia and Herzegovina",
|
814 |
+
"BW" => "Botswana",
|
815 |
+
"BV" => "Bouvet Island",
|
816 |
+
"BR" => "Brazil",
|
817 |
+
"BQ" => "British Antarctic Territory",
|
818 |
+
"IO" => "British Indian Ocean Territory",
|
819 |
+
"VG" => "British Virgin Islands",
|
820 |
+
"BN" => "Brunei",
|
821 |
+
"BG" => "Bulgaria",
|
822 |
+
"BF" => "Burkina Faso",
|
823 |
+
"BI" => "Burundi",
|
824 |
+
"KH" => "Cambodia",
|
825 |
+
"CM" => "Cameroon",
|
826 |
+
"CA" => "Canada",
|
827 |
+
"CT" => "Canton and Enderbury Islands",
|
828 |
+
"CV" => "Cape Verde",
|
829 |
+
"KY" => "Cayman Islands",
|
830 |
+
"CF" => "Central African Republic",
|
831 |
+
"TD" => "Chad",
|
832 |
+
"CL" => "Chile",
|
833 |
+
"CN" => "China",
|
834 |
+
"CX" => "Christmas Island",
|
835 |
+
"CC" => "Cocos [Keeling] Islands",
|
836 |
+
"CO" => "Colombia",
|
837 |
+
"KM" => "Comoros",
|
838 |
+
"CG" => "Congo - Brazzaville",
|
839 |
+
"CD" => "Congo - Kinshasa",
|
840 |
+
"CK" => "Cook Islands",
|
841 |
+
"CR" => "Costa Rica",
|
842 |
+
"HR" => "Croatia",
|
843 |
+
"CU" => "Cuba",
|
844 |
+
"CY" => "Cyprus",
|
845 |
+
"CZ" => "Czech Republic",
|
846 |
+
"CI" => "Côte d’Ivoire",
|
847 |
+
"DK" => "Denmark",
|
848 |
+
"DJ" => "Djibouti",
|
849 |
+
"DM" => "Dominica",
|
850 |
+
"DO" => "Dominican Republic",
|
851 |
+
"NQ" => "Dronning Maud Land",
|
852 |
+
"DD" => "East Germany",
|
853 |
+
"EC" => "Ecuador",
|
854 |
+
"EG" => "Egypt",
|
855 |
+
"SV" => "El Salvador",
|
856 |
+
"GQ" => "Equatorial Guinea",
|
857 |
+
"ER" => "Eritrea",
|
858 |
+
"EE" => "Estonia",
|
859 |
+
"ET" => "Ethiopia",
|
860 |
+
"FK" => "Falkland Islands",
|
861 |
+
"FO" => "Faroe Islands",
|
862 |
+
"FJ" => "Fiji",
|
863 |
+
"FI" => "Finland",
|
864 |
+
"FR" => "France",
|
865 |
+
"GF" => "French Guiana",
|
866 |
+
"PF" => "French Polynesia",
|
867 |
+
"TF" => "French Southern Territories",
|
868 |
+
"FQ" => "French Southern and Antarctic Territories",
|
869 |
+
"GA" => "Gabon",
|
870 |
+
"GM" => "Gambia",
|
871 |
+
"GE" => "Georgia",
|
872 |
+
"DE" => "Germany",
|
873 |
+
"GH" => "Ghana",
|
874 |
+
"GI" => "Gibraltar",
|
875 |
+
"GR" => "Greece",
|
876 |
+
"GL" => "Greenland",
|
877 |
+
"GD" => "Grenada",
|
878 |
+
"GP" => "Guadeloupe",
|
879 |
+
"GU" => "Guam",
|
880 |
+
"GT" => "Guatemala",
|
881 |
+
"GG" => "Guernsey",
|
882 |
+
"GN" => "Guinea",
|
883 |
+
"GW" => "Guinea-Bissau",
|
884 |
+
"GY" => "Guyana",
|
885 |
+
"HT" => "Haiti",
|
886 |
+
"HM" => "Heard Island and McDonald Islands",
|
887 |
+
"HN" => "Honduras",
|
888 |
+
"HK" => "Hong Kong SAR China",
|
889 |
+
"HU" => "Hungary",
|
890 |
+
"IS" => "Iceland",
|
891 |
+
"IN" => "India",
|
892 |
+
"ID" => "Indonesia",
|
893 |
+
"IR" => "Iran",
|
894 |
+
"IQ" => "Iraq",
|
895 |
+
"IE" => "Ireland",
|
896 |
+
"IM" => "Isle of Man",
|
897 |
+
"IL" => "Israel",
|
898 |
+
"IT" => "Italy",
|
899 |
+
"JM" => "Jamaica",
|
900 |
+
"JP" => "Japan",
|
901 |
+
"JE" => "Jersey",
|
902 |
+
"JT" => "Johnston Island",
|
903 |
+
"JO" => "Jordan",
|
904 |
+
"KZ" => "Kazakhstan",
|
905 |
+
"KE" => "Kenya",
|
906 |
+
"KI" => "Kiribati",
|
907 |
+
"KW" => "Kuwait",
|
908 |
+
"KG" => "Kyrgyzstan",
|
909 |
+
"LA" => "Laos",
|
910 |
+
"LV" => "Latvia",
|
911 |
+
"LB" => "Lebanon",
|
912 |
+
"LS" => "Lesotho",
|
913 |
+
"LR" => "Liberia",
|
914 |
+
"LY" => "Libya",
|
915 |
+
"LI" => "Liechtenstein",
|
916 |
+
"LT" => "Lithuania",
|
917 |
+
"LU" => "Luxembourg",
|
918 |
+
"MO" => "Macau SAR China",
|
919 |
+
"MK" => "Macedonia",
|
920 |
+
"MG" => "Madagascar",
|
921 |
+
"MW" => "Malawi",
|
922 |
+
"MY" => "Malaysia",
|
923 |
+
"MV" => "Maldives",
|
924 |
+
"ML" => "Mali",
|
925 |
+
"MT" => "Malta",
|
926 |
+
"MH" => "Marshall Islands",
|
927 |
+
"MQ" => "Martinique",
|
928 |
+
"MR" => "Mauritania",
|
929 |
+
"MU" => "Mauritius",
|
930 |
+
"YT" => "Mayotte",
|
931 |
+
"FX" => "Metropolitan France",
|
932 |
+
"MX" => "Mexico",
|
933 |
+
"FM" => "Micronesia",
|
934 |
+
"MI" => "Midway Islands",
|
935 |
+
"MD" => "Moldova",
|
936 |
+
"MC" => "Monaco",
|
937 |
+
"MN" => "Mongolia",
|
938 |
+
"ME" => "Montenegro",
|
939 |
+
"MS" => "Montserrat",
|
940 |
+
"MA" => "Morocco",
|
941 |
+
"MZ" => "Mozambique",
|
942 |
+
"MM" => "Myanmar [Burma]",
|
943 |
+
"NA" => "Namibia",
|
944 |
+
"NR" => "Nauru",
|
945 |
+
"NP" => "Nepal",
|
946 |
+
"NL" => "Netherlands",
|
947 |
+
"AN" => "Netherlands Antilles",
|
948 |
+
"NT" => "Neutral Zone",
|
949 |
+
"NC" => "New Caledonia",
|
950 |
+
"NZ" => "New Zealand",
|
951 |
+
"NI" => "Nicaragua",
|
952 |
+
"NE" => "Niger",
|
953 |
+
"NG" => "Nigeria",
|
954 |
+
"NU" => "Niue",
|
955 |
+
"NF" => "Norfolk Island",
|
956 |
+
"KP" => "North Korea",
|
957 |
+
"VD" => "North Vietnam",
|
958 |
+
"MP" => "Northern Mariana Islands",
|
959 |
+
"NO" => "Norway",
|
960 |
+
"OM" => "Oman",
|
961 |
+
"PC" => "Pacific Islands Trust Territory",
|
962 |
+
"PK" => "Pakistan",
|
963 |
+
"PW" => "Palau",
|
964 |
+
"PS" => "Palestinian Territories",
|
965 |
+
"PA" => "Panama",
|
966 |
+
"PZ" => "Panama Canal Zone",
|
967 |
+
"PG" => "Papua New Guinea",
|
968 |
+
"PY" => "Paraguay",
|
969 |
+
"YD" => "People's Democratic Republic of Yemen",
|
970 |
+
"PE" => "Peru",
|
971 |
+
"PH" => "Philippines",
|
972 |
+
"PN" => "Pitcairn Islands",
|
973 |
+
"PL" => "Poland",
|
974 |
+
"PT" => "Portugal",
|
975 |
+
"PR" => "Puerto Rico",
|
976 |
+
"QA" => "Qatar",
|
977 |
+
"RO" => "Romania",
|
978 |
+
"RU" => "Russia",
|
979 |
+
"RW" => "Rwanda",
|
980 |
+
"RE" => "Réunion",
|
981 |
+
"BL" => "Saint Barthélemy",
|
982 |
+
"SH" => "Saint Helena",
|
983 |
+
"KN" => "Saint Kitts and Nevis",
|
984 |
+
"LC" => "Saint Lucia",
|
985 |
+
"MF" => "Saint Martin",
|
986 |
+
"PM" => "Saint Pierre and Miquelon",
|
987 |
+
"VC" => "Saint Vincent and the Grenadines",
|
988 |
+
"WS" => "Samoa",
|
989 |
+
"SM" => "San Marino",
|
990 |
+
"SA" => "Saudi Arabia",
|
991 |
+
"SN" => "Senegal",
|
992 |
+
"RS" => "Serbia",
|
993 |
+
"CS" => "Serbia and Montenegro",
|
994 |
+
"SC" => "Seychelles",
|
995 |
+
"SL" => "Sierra Leone",
|
996 |
+
"SG" => "Singapore",
|
997 |
+
"SK" => "Slovakia",
|
998 |
+
"SI" => "Slovenia",
|
999 |
+
"SB" => "Solomon Islands",
|
1000 |
+
"SO" => "Somalia",
|
1001 |
+
"ZA" => "South Africa",
|
1002 |
+
"GS" => "South Georgia and the South Sandwich Islands",
|
1003 |
+
"KR" => "South Korea",
|
1004 |
+
"ES" => "Spain",
|
1005 |
+
"LK" => "Sri Lanka",
|
1006 |
+
"SD" => "Sudan",
|
1007 |
+
"SR" => "Suriname",
|
1008 |
+
"SJ" => "Svalbard and Jan Mayen",
|
1009 |
+
"SZ" => "Swaziland",
|
1010 |
+
"SE" => "Sweden",
|
1011 |
+
"CH" => "Switzerland",
|
1012 |
+
"SY" => "Syria",
|
1013 |
+
"ST" => "São Tomé and Príncipe",
|
1014 |
+
"TW" => "Taiwan",
|
1015 |
+
"TJ" => "Tajikistan",
|
1016 |
+
"TZ" => "Tanzania",
|
1017 |
+
"TH" => "Thailand",
|
1018 |
+
"TL" => "Timor-Leste",
|
1019 |
+
"TG" => "Togo",
|
1020 |
+
"TK" => "Tokelau",
|
1021 |
+
"TO" => "Tonga",
|
1022 |
+
"TT" => "Trinidad and Tobago",
|
1023 |
+
"TN" => "Tunisia",
|
1024 |
+
"TR" => "Turkey",
|
1025 |
+
"TM" => "Turkmenistan",
|
1026 |
+
"TC" => "Turks and Caicos Islands",
|
1027 |
+
"TV" => "Tuvalu",
|
1028 |
+
"UM" => "U.S. Minor Outlying Islands",
|
1029 |
+
"PU" => "U.S. Miscellaneous Pacific Islands",
|
1030 |
+
"VI" => "U.S. Virgin Islands",
|
1031 |
+
"UG" => "Uganda",
|
1032 |
+
"UA" => "Ukraine",
|
1033 |
+
"SU" => "Union of Soviet Socialist Republics",
|
1034 |
+
"AE" => "United Arab Emirates",
|
1035 |
+
"GB" => "United Kingdom",
|
1036 |
+
"US" => "United States",
|
1037 |
+
"ZZ" => "Unknown or Invalid Region",
|
1038 |
+
"UY" => "Uruguay",
|
1039 |
+
"UZ" => "Uzbekistan",
|
1040 |
+
"VU" => "Vanuatu",
|
1041 |
+
"VA" => "Vatican City",
|
1042 |
+
"VE" => "Venezuela",
|
1043 |
+
"VN" => "Vietnam",
|
1044 |
+
"WK" => "Wake Island",
|
1045 |
+
"WF" => "Wallis and Futuna",
|
1046 |
+
"EH" => "Western Sahara",
|
1047 |
+
"YE" => "Yemen",
|
1048 |
+
"ZM" => "Zambia",
|
1049 |
+
"ZW" => "Zimbabwe",
|
1050 |
+
"AX" => "Åland Islands",
|
1051 |
+
);
|
1052 |
+
|
1053 |
+
return $country_array;
|
1054 |
+
}
|
1055 |
}
|
app/controller/dashboard.php
CHANGED
@@ -37,93 +37,6 @@ class Dashboard extends Controller {
|
|
37 |
$this->add_filter( 'wdp_register_hub_action', 'addMyEndpoint' );
|
38 |
add_filter( 'custom_menu_order', '__return_true' );
|
39 |
$this->add_filter( 'menu_order', 'menuOrder' );
|
40 |
-
// Add pointer script.
|
41 |
-
$this->add_action( 'admin_enqueue_scripts', 'admin_pointers_header' );
|
42 |
-
}
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Pointer header.
|
46 |
-
*/
|
47 |
-
public function admin_pointers_header() {
|
48 |
-
if ( $this->admin_pointers_check() ) {
|
49 |
-
$this->add_action( 'admin_print_footer_scripts', 'admin_pointers_footer' );
|
50 |
-
wp_enqueue_script( 'wp-pointer' );
|
51 |
-
wp_enqueue_style( 'wp-pointer' );
|
52 |
-
}
|
53 |
-
}
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Admin pointers check.
|
57 |
-
*/
|
58 |
-
function admin_pointers_check() {
|
59 |
-
$currentScreen = get_current_screen();
|
60 |
-
if ( strpos( $currentScreen->id, 'defender' ) !== false ) {
|
61 |
-
return;
|
62 |
-
}
|
63 |
-
$admin_pointers = $this->admin_pointers();
|
64 |
-
foreach ( $admin_pointers as $pointer => $array ) {
|
65 |
-
if ( $array['active'] ) {
|
66 |
-
return true;
|
67 |
-
}
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Pointer scripts.
|
73 |
-
*/
|
74 |
-
function admin_pointers_footer() {
|
75 |
-
$admin_pointers = $this->admin_pointers();
|
76 |
-
?>
|
77 |
-
<script type="text/javascript">
|
78 |
-
/* <![CDATA[ */
|
79 |
-
(function ($) {
|
80 |
-
<?php
|
81 |
-
foreach ( $admin_pointers as $pointer => $array ) {
|
82 |
-
if ( $array['active'] ) {
|
83 |
-
?>
|
84 |
-
$('<?php echo $array['anchor_id']; ?>').pointer({
|
85 |
-
content: '<?php echo $array['content']; ?>',
|
86 |
-
position: {
|
87 |
-
edge: '<?php echo $array['edge']; ?>',
|
88 |
-
align: '<?php echo $array['align']; ?>'
|
89 |
-
},
|
90 |
-
close: function () {
|
91 |
-
$.post(ajaxurl, {
|
92 |
-
pointer: '<?php echo $pointer; ?>',
|
93 |
-
action: 'dismiss-wp-pointer'
|
94 |
-
});
|
95 |
-
}
|
96 |
-
}).pointer('open');
|
97 |
-
<?php
|
98 |
-
}
|
99 |
-
}
|
100 |
-
?>
|
101 |
-
})(jQuery);
|
102 |
-
/* ]]> */
|
103 |
-
</script>
|
104 |
-
<?php
|
105 |
-
}
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Admin pointers.
|
109 |
-
*/
|
110 |
-
function admin_pointers() {
|
111 |
-
$dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
|
112 |
-
$version = \str_replace( '.', '_', wp_defender()->version );
|
113 |
-
$prefix = 'defneder_admin_pointers' . $version . '_' . ( wp_defender()->isFree ? '_free' : null );
|
114 |
-
|
115 |
-
$new_pointer_content = '<h3>' . __( 'Get Secure', "defender-security" ) . '</h3>';
|
116 |
-
$new_pointer_content .= '<p>' . __( 'Enable security tweaks, activate monitoring and start protecting your login are and files here.', "defender-security" ) . '</p>';
|
117 |
-
|
118 |
-
return array(
|
119 |
-
$prefix . 'menu' => array(
|
120 |
-
'content' => $new_pointer_content,
|
121 |
-
'anchor_id' => '#toplevel_page_wp-defender',
|
122 |
-
'edge' => 'top',
|
123 |
-
'align' => 'left',
|
124 |
-
'active' => ( ! in_array( $prefix . 'menu', $dismissed ) ),
|
125 |
-
),
|
126 |
-
);
|
127 |
}
|
128 |
|
129 |
public function skipActivator() {
|
@@ -439,7 +352,8 @@ class Dashboard extends Controller {
|
|
439 |
}
|
440 |
|
441 |
public function scripts() {
|
442 |
-
|
|
|
443 |
wp_enqueue_script( 'defender' );
|
444 |
$data = array(
|
445 |
'activator_title' => __( "QUICK SETUP", "defender-security" ) . '<form method="post" class="skip-activator float-r"><input type="hidden" name="action" value="skipActivator"/>' . wp_nonce_field( 'skipActivator', '_wpnonce', true, false ) . '<button type="submit" class="button button-small button-secondary">' . __( "Skip", "defender-security" ) . '</button></form>',
|
@@ -460,7 +374,7 @@ class Dashboard extends Controller {
|
|
460 |
'utils' => '\WP_Defender\Behavior\Utils',
|
461 |
'activator' => wp_defender()->isFree ? '\WP_Defender\Behavior\Activator_Free' : '\WP_Defender\Behavior\Activator',
|
462 |
'hardener' => '\WP_Defender\Module\Hardener\Behavior\Widget',
|
463 |
-
'scan' => '\WP_Defender\Module\Scan\Behavior\
|
464 |
'lockout' => '\WP_Defender\Module\IP_Lockout\Behavior\Widget',
|
465 |
'audit' => wp_defender()->isFree ? '\WP_Defender\Module\Audit\Behavior\Audit_Free' : '\WP_Defender\Module\Audit\Behavior\Audit',
|
466 |
'blacklist' => wp_defender()->isFree ? '\WP_Defender\Behavior\Blacklist_Free' : '\WP_Defender\Behavior\Blacklist',
|
37 |
$this->add_filter( 'wdp_register_hub_action', 'addMyEndpoint' );
|
38 |
add_filter( 'custom_menu_order', '__return_true' );
|
39 |
$this->add_filter( 'menu_order', 'menuOrder' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
}
|
41 |
|
42 |
public function skipActivator() {
|
352 |
}
|
353 |
|
354 |
public function scripts() {
|
355 |
+
wp_enqueue_script( 'wpmudev-sui' );
|
356 |
+
wp_enqueue_style( 'wpmudev-sui' );
|
357 |
wp_enqueue_script( 'defender' );
|
358 |
$data = array(
|
359 |
'activator_title' => __( "QUICK SETUP", "defender-security" ) . '<form method="post" class="skip-activator float-r"><input type="hidden" name="action" value="skipActivator"/>' . wp_nonce_field( 'skipActivator', '_wpnonce', true, false ) . '<button type="submit" class="button button-small button-secondary">' . __( "Skip", "defender-security" ) . '</button></form>',
|
374 |
'utils' => '\WP_Defender\Behavior\Utils',
|
375 |
'activator' => wp_defender()->isFree ? '\WP_Defender\Behavior\Activator_Free' : '\WP_Defender\Behavior\Activator',
|
376 |
'hardener' => '\WP_Defender\Module\Hardener\Behavior\Widget',
|
377 |
+
'scan' => '\WP_Defender\Module\Scan\Behavior\Scan_Widget',
|
378 |
'lockout' => '\WP_Defender\Module\IP_Lockout\Behavior\Widget',
|
379 |
'audit' => wp_defender()->isFree ? '\WP_Defender\Module\Audit\Behavior\Audit_Free' : '\WP_Defender\Module\Audit\Behavior\Audit',
|
380 |
'blacklist' => wp_defender()->isFree ? '\WP_Defender\Behavior\Blacklist_Free' : '\WP_Defender\Behavior\Blacklist',
|
app/module/advanced-tools/behavior/at-widget.php
CHANGED
@@ -12,101 +12,95 @@ use WP_Defender\Module\Advanced_Tools\Model\Mask_Settings;
|
|
12 |
class AT_Widget extends Behavior {
|
13 |
public function renderATWidget() {
|
14 |
?>
|
15 |
-
<div class="
|
16 |
-
<div class="box-
|
17 |
-
<
|
18 |
-
|
|
|
19 |
</h3>
|
20 |
-
|
21 |
</div>
|
22 |
-
<div class="box-
|
23 |
-
<p class="
|
24 |
<?php _e( "Enable advanced tools for enhanced protection against even the most aggressive of hackers and bots.", "defender-security" ) ?>
|
25 |
</p>
|
26 |
-
<
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
|
|
33 |
?>
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
?>
|
41 |
-
<div class="well well-small well-green with-cap">
|
42 |
-
<i class="def-icon icon-tick"></i>
|
43 |
-
<span>
|
44 |
-
<?php printf( __( "<strong>Two-factor authentication is now active.</strong> To turn on this feature for your account, go to <a href='%s'>Your Profile</a> to complete setup and sync your account with the Authenticator app.", "defender-security" ),
|
45 |
-
admin_url( 'profile.php' ) ) ?>
|
46 |
-
</span>
|
47 |
-
</div>
|
48 |
-
<?php else: ?>
|
49 |
-
<div class="well well-small well-yellow with-cap">
|
50 |
-
<i class="def-icon icon-warning"></i>
|
51 |
-
<span>
|
52 |
-
<?php _e( "Two-factor authentication is currently inactive. Configure and save your settings to finish setup. ", "defender-security" ) ?>
|
53 |
-
</span>
|
54 |
-
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>"><?php _e( "Finish Setup", "defender-security" ) ?></a>
|
55 |
-
</div>
|
56 |
-
<?php endif; ?>
|
57 |
-
<p>
|
58 |
-
<span>
|
59 |
<?php _e( "Note: Each user on your website must individually enable two-factor authentication via their user profile in order to enable and use this security feature.", "defender-security" ) ?>
|
60 |
-
</span>
|
61 |
</p>
|
62 |
<?php else: ?>
|
63 |
-
<
|
64 |
-
<
|
65 |
-
|
66 |
-
|
67 |
-
<
|
68 |
-
|
69 |
-
|
70 |
-
|
|
|
71 |
<?php endif; ?>
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
<?php
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
<
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
|
|
|
|
|
|
99 |
<?php else: ?>
|
100 |
-
<
|
101 |
-
<
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
<?php _e( "Activate", "defender-security" ) ?>
|
106 |
-
</button>
|
107 |
-
</form>
|
108 |
<?php endif; ?>
|
109 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
</div>
|
111 |
</div>
|
112 |
<?php
|
12 |
class AT_Widget extends Behavior {
|
13 |
public function renderATWidget() {
|
14 |
?>
|
15 |
+
<div class="sui-box advanced-tools">
|
16 |
+
<div class="sui-box-header">
|
17 |
+
<h3 class="sui-box-title">
|
18 |
+
<i class="sui-icon-wand-magic" aria-hidden="true"></i>
|
19 |
+
<?php _e( "Advanced Tools", "defender-security" ) ?>
|
20 |
</h3>
|
|
|
21 |
</div>
|
22 |
+
<div class="sui-box-body">
|
23 |
+
<p class="margin-bottom-30">
|
24 |
<?php _e( "Enable advanced tools for enhanced protection against even the most aggressive of hackers and bots.", "defender-security" ) ?>
|
25 |
</p>
|
26 |
+
<hr class="sui-flushed margin-bottom-20"/>
|
27 |
+
<small><strong><?php _e( "Two-Factor Authentication", "defender-security" ) ?></strong></small>
|
28 |
+
<div class="clearfix"></div>
|
29 |
+
<p class="sui-p-small">
|
30 |
+
<?php _e( "Add an extra layer of security to your WordPress account to ensure that you’re the only person who can log in, even if someone else knows your password.", "defender-security" ) ?>
|
31 |
+
</p>
|
32 |
+
<?php
|
33 |
+
$settings = Auth_Settings::instance();
|
34 |
+
if ( $settings->enabled ):
|
35 |
+
$enabledRoles = $settings->userRoles;
|
36 |
+
if ( count( $enabledRoles ) ):
|
37 |
?>
|
38 |
+
<div class="sui-notice sui-notice-success margin-bottom-10 margin-top-10">
|
39 |
+
<p>
|
40 |
+
<?php _e( "Two-factor authentication is now active. User roles with this feature enabled must visit their Profile page to complete setup and sync their account with the Authenticator app.", "defender-security" ) ?>
|
41 |
+
</p>
|
42 |
+
</div>
|
43 |
+
<p class="sui-p-small">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
<?php _e( "Note: Each user on your website must individually enable two-factor authentication via their user profile in order to enable and use this security feature.", "defender-security" ) ?>
|
|
|
45 |
</p>
|
46 |
<?php else: ?>
|
47 |
+
<div class="sui-notice sui-notice-warning margin-top-10">
|
48 |
+
<p class="margin-bottom-10">
|
49 |
+
<?php _e( "Two-factor authentication is currently inactive. Configure and save your settings to finish setup. ", "defender-security" ) ?>
|
50 |
+
</p>
|
51 |
+
<a class="sui-button"
|
52 |
+
href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>">
|
53 |
+
<?php _e( "Finish Setup", "defender-security" ) ?>
|
54 |
+
</a>
|
55 |
+
</div>
|
56 |
<?php endif; ?>
|
57 |
+
<?php else: ?>
|
58 |
+
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm margin-top-10">
|
59 |
+
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
60 |
+
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
61 |
+
<input type="hidden" name="enabled" value="1"/>
|
62 |
+
<button type="submit" class="sui-button sui-button-blue">
|
63 |
+
<?php _e( "Activate", "defender-security" ) ?>
|
64 |
+
</button>
|
65 |
+
</form>
|
66 |
+
<div class="margin-bottom-20"></div>
|
67 |
+
<?php endif; ?>
|
68 |
+
<hr class="sui-flushed margin-bottom-20"/>
|
69 |
+
<small><strong><?php _e( "Mask Login Area", "defender-security" ) ?></strong></small>
|
70 |
+
<div class="clearfix"></div>
|
71 |
+
<p class="sui-p-small margin-bottom-10">
|
72 |
+
<?php _e( "Change the location of WordPress’s default login area.", "defender-security" ) ?>
|
73 |
+
</p>
|
74 |
+
<?php
|
75 |
+
$settings = Mask_Settings::instance();
|
76 |
+
if ( $settings->enabled ):?>
|
77 |
+
<?php if ( $settings->isEnabled() == false ): ?>
|
78 |
+
<div class="sui-notice sui-notice-warning margin-bottom-10 margin-top-10">
|
79 |
+
<p class="margin-bottom-10">
|
80 |
+
<?php _e( "Masking is currently inactive. Choose your URL and save your settings to finish setup. ", "defender-security" ) ?>
|
81 |
+
</p>
|
82 |
+
<a class="sui-button"
|
83 |
+
href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>">
|
84 |
+
<?php _e( "Finish Setup", "defender-security" ) ?>
|
85 |
+
</a>
|
86 |
+
</div>
|
87 |
<?php else: ?>
|
88 |
+
<div class="sui-notice sui-notice-success margin-bottom-10 margin-top-10">
|
89 |
+
<p>
|
90 |
+
<?php printf( __( "Masking is currently active at <strong>%s</strong>", "defender-security" ), \WP_Defender\Module\Advanced_Tools\Component\Mask_Api::getNewLoginUrl() ) ?>
|
91 |
+
</p>
|
92 |
+
</div>
|
|
|
|
|
|
|
93 |
<?php endif; ?>
|
94 |
+
<?php else: ?>
|
95 |
+
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm margin-top-10">
|
96 |
+
<input type="hidden" name="action" value="saveATMaskLoginSettings"/>
|
97 |
+
<?php wp_nonce_field( 'saveATMaskLoginSettings' ) ?>
|
98 |
+
<input type="hidden" name="enabled" value="1"/>
|
99 |
+
<button type="submit" class="sui-button sui-button-blue">
|
100 |
+
<?php _e( "Activate", "defender-security" ) ?>
|
101 |
+
</button>
|
102 |
+
</form>
|
103 |
+
<?php endif; ?>
|
104 |
</div>
|
105 |
</div>
|
106 |
<?php
|
app/module/advanced-tools/component/auth-api.php
CHANGED
@@ -5,9 +5,14 @@
|
|
5 |
|
6 |
namespace WP_Defender\Module\Advanced_Tools\Component;
|
7 |
|
|
|
|
|
|
|
|
|
8 |
use Hammer\Base\Component;
|
9 |
use WP_Defender\Behavior\Utils;
|
10 |
use WP_Defender\Module\Advanced_Tools\Model\Auth_Settings;
|
|
|
11 |
|
12 |
class Auth_API extends Component {
|
13 |
/**
|
@@ -34,13 +39,17 @@ class Auth_API extends Component {
|
|
34 |
*
|
35 |
* @return string
|
36 |
*/
|
37 |
-
public static function generateQRCode( $name, $secret, $width = 200, $height = 200, $title = null ) {
|
38 |
-
$chl =
|
39 |
if ( ! is_null( $title ) ) {
|
40 |
-
$chl .=
|
41 |
}
|
|
|
|
|
|
|
|
|
|
|
42 |
|
43 |
-
return "https://chart.googleapis.com/chart?cht=qr&chs={$width}x{$height}&chl=$chl&chld=M|0";
|
44 |
}
|
45 |
|
46 |
/**
|
5 |
|
6 |
namespace WP_Defender\Module\Advanced_Tools\Component;
|
7 |
|
8 |
+
use BaconQrCode\Renderer\Image\SvgImageBackEnd;
|
9 |
+
use BaconQrCode\Renderer\ImageRenderer;
|
10 |
+
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
|
11 |
+
use BaconQrCode\Writer;
|
12 |
use Hammer\Base\Component;
|
13 |
use WP_Defender\Behavior\Utils;
|
14 |
use WP_Defender\Module\Advanced_Tools\Model\Auth_Settings;
|
15 |
+
use WP_Defender\Module\Scan\Component\Scan_Api;
|
16 |
|
17 |
class Auth_API extends Component {
|
18 |
/**
|
39 |
*
|
40 |
* @return string
|
41 |
*/
|
42 |
+
public static function generateQRCode( $name, $holder, $secret, $width = 200, $height = 200, $title = null ) {
|
43 |
+
$chl = ( 'otpauth://totp/' . rawurlencode( $name ) . ':' . rawurlencode( $holder ) . '?secret=' . $secret . '' );
|
44 |
if ( ! is_null( $title ) ) {
|
45 |
+
$chl .= ( '&issuer=' . rawurlencode( $title ) );
|
46 |
}
|
47 |
+
//manually include the autoload
|
48 |
+
require_once wp_defender()->getPluginPath() . 'vendor/phpqrcode/qrlib.php';
|
49 |
+
|
50 |
+
$code = \QRcode::svg( $chl, false, QR_ECLEVEL_L, 4 );
|
51 |
+
//clean up cache folder
|
52 |
|
|
|
53 |
}
|
54 |
|
55 |
/**
|
app/module/advanced-tools/component/mask-api.php
CHANGED
@@ -24,6 +24,8 @@ class Mask_Api extends Component {
|
|
24 |
if ( empty( $requestUri ) ) {
|
25 |
$requestUri = $_SERVER['REQUEST_URI'];
|
26 |
}
|
|
|
|
|
27 |
$prefix = parse_url( self::site_url(), PHP_URL_PATH );;
|
28 |
$requestPath = parse_url( $requestUri, PHP_URL_PATH );
|
29 |
//clean it a bit
|
24 |
if ( empty( $requestUri ) ) {
|
25 |
$requestUri = $_SERVER['REQUEST_URI'];
|
26 |
}
|
27 |
+
//
|
28 |
+
$requestUri = '/' . ltrim( $requestUri, '/' );
|
29 |
$prefix = parse_url( self::site_url(), PHP_URL_PATH );;
|
30 |
$requestPath = parse_url( $requestUri, PHP_URL_PATH );
|
31 |
//clean it a bit
|
app/module/advanced-tools/controller/main.php
CHANGED
@@ -526,16 +526,15 @@ class Main extends Controller {
|
|
526 |
*/
|
527 |
public function scripts() {
|
528 |
if ( $this->isInPage() || $this->isDashboard() ) {
|
529 |
-
|
|
|
|
|
530 |
wp_enqueue_script( 'defender' );
|
531 |
wp_enqueue_style( 'defender' );
|
532 |
wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
|
533 |
$data = array(
|
534 |
'edit_email_title' => __( 'Edit Email', "defender-security" ),
|
535 |
);
|
536 |
-
if ( $this->isInPage() ) {
|
537 |
-
remove_filter( 'admin_body_class', array( 'WDEV_Plugin_Ui', 'admin_body_class' ) );
|
538 |
-
}
|
539 |
wp_localize_script( 'adtools', 'defender_adtools', $data );
|
540 |
}
|
541 |
}
|
526 |
*/
|
527 |
public function scripts() {
|
528 |
if ( $this->isInPage() || $this->isDashboard() ) {
|
529 |
+
wp_enqueue_script( 'wpmudev-sui' );
|
530 |
+
wp_enqueue_style( 'wpmudev-sui' );
|
531 |
+
|
532 |
wp_enqueue_script( 'defender' );
|
533 |
wp_enqueue_style( 'defender' );
|
534 |
wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
|
535 |
$data = array(
|
536 |
'edit_email_title' => __( 'Edit Email', "defender-security" ),
|
537 |
);
|
|
|
|
|
|
|
538 |
wp_localize_script( 'adtools', 'defender_adtools', $data );
|
539 |
}
|
540 |
}
|
app/module/advanced-tools/controller/mask-login.php
CHANGED
@@ -65,7 +65,6 @@ class Mask_Login extends Controller {
|
|
65 |
//to the 404 redirect, or 403 wp die
|
66 |
$requestPath = Mask_Api::getRequestPath();
|
67 |
$settings = Mask_Settings::instance();
|
68 |
-
|
69 |
if ( '/' . ltrim( $settings->maskUrl, '/' ) == $requestPath ) {
|
70 |
//we need to redirect this one to wp-login and open it
|
71 |
$this->_showLoginPage();
|
@@ -294,7 +293,6 @@ class Mask_Login extends Controller {
|
|
294 |
*/
|
295 |
public function scripts() {
|
296 |
if ( $this->isInPage() || $this->isDashboard() ) {
|
297 |
-
\WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
|
298 |
wp_enqueue_script( 'defender' );
|
299 |
wp_enqueue_style( 'defender' );
|
300 |
wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
|
65 |
//to the 404 redirect, or 403 wp die
|
66 |
$requestPath = Mask_Api::getRequestPath();
|
67 |
$settings = Mask_Settings::instance();
|
|
|
68 |
if ( '/' . ltrim( $settings->maskUrl, '/' ) == $requestPath ) {
|
69 |
//we need to redirect this one to wp-login and open it
|
70 |
$this->_showLoginPage();
|
293 |
*/
|
294 |
public function scripts() {
|
295 |
if ( $this->isInPage() || $this->isDashboard() ) {
|
|
|
296 |
wp_enqueue_script( 'defender' );
|
297 |
wp_enqueue_style( 'defender' );
|
298 |
wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
|
app/module/advanced-tools/js/scripts.js
CHANGED
@@ -21,41 +21,41 @@ jQuery(function ($) {
|
|
21 |
$('#ad-mask-settings-frm').submit();
|
22 |
})
|
23 |
|
24 |
-
$('body').on('change', '#
|
25 |
if ($(this).prop('checked') == true) {
|
26 |
-
$(
|
27 |
} else {
|
28 |
-
$(
|
29 |
}
|
30 |
});
|
31 |
|
32 |
$('body').on('change', '.toggle-checkbox', function (e) {
|
33 |
-
console.log(
|
34 |
if ($(this).prop('checked') == true) {
|
35 |
-
$('label[for="'
|
36 |
} else {
|
37 |
-
$('label[for="'
|
38 |
}
|
39 |
});
|
40 |
|
41 |
$('body').on('change', '#customGraphic', function (e) {
|
42 |
if ($(this).prop('checked') == true) {
|
43 |
-
$(
|
44 |
} else {
|
45 |
-
$(
|
46 |
}
|
47 |
})
|
48 |
$('body').on('change', '#redirectTraffic', function (e) {
|
49 |
if ($(this).prop('checked') == true) {
|
50 |
-
$(
|
51 |
} else {
|
52 |
-
$(
|
53 |
}
|
54 |
})
|
55 |
|
56 |
-
$('body').on(
|
57 |
var jq = jQuery,
|
58 |
-
parentForm = jq('
|
59 |
that = jq(this),
|
60 |
data = parentForm.serialize();
|
61 |
data = data + '&action=testTwoFactorOPTEmail';
|
@@ -69,19 +69,19 @@ jQuery(function ($) {
|
|
69 |
},
|
70 |
success: function (data) {
|
71 |
var notificationType = 'success';
|
72 |
-
if(
|
73 |
notificationType = 'error';
|
74 |
}
|
75 |
parentForm.find('button[type="button"]').removeAttr('disabled');
|
76 |
-
Defender.showNotification(
|
77 |
}
|
78 |
})
|
79 |
return false;
|
80 |
});
|
81 |
|
82 |
-
$('body').on(
|
83 |
var jq = jQuery,
|
84 |
-
parentForm = jq('
|
85 |
that = jq(this),
|
86 |
data = parentForm.serialize();
|
87 |
data = data + '&action=saveTwoFactorOPTEmail';
|
@@ -95,11 +95,11 @@ jQuery(function ($) {
|
|
95 |
},
|
96 |
success: function (data) {
|
97 |
var notificationType = 'success';
|
98 |
-
if(
|
99 |
notificationType = 'error';
|
100 |
}
|
101 |
parentForm.find('button[type="button"]').removeAttr('disabled');
|
102 |
-
Defender.showNotification(
|
103 |
if (data.data.reload != undefined) {
|
104 |
location.reload();
|
105 |
}
|
21 |
$('#ad-mask-settings-frm').submit();
|
22 |
})
|
23 |
|
24 |
+
$('body').on('change', '#forceAuth', function (e) {
|
25 |
if ($(this).prop('checked') == true) {
|
26 |
+
$('#forceAuthRoles').attr('aria-hidden', false)
|
27 |
} else {
|
28 |
+
$('#forceAuthRoles').attr('aria-hidden', true)
|
29 |
}
|
30 |
});
|
31 |
|
32 |
$('body').on('change', '.toggle-checkbox', function (e) {
|
33 |
+
console.log($(this).attr('id'));
|
34 |
if ($(this).prop('checked') == true) {
|
35 |
+
$('label[for="' + $(this).attr('id') + '"]').attr('aria-checked', true);
|
36 |
} else {
|
37 |
+
$('label[for="' + $(this).attr('id') + '"]').attr('aria-checked', false);
|
38 |
}
|
39 |
});
|
40 |
|
41 |
$('body').on('change', '#customGraphic', function (e) {
|
42 |
if ($(this).prop('checked') == true) {
|
43 |
+
$('#customGraphicContainer').attr('aria-hidden', false);
|
44 |
} else {
|
45 |
+
$('#customGraphicContainer').attr('aria-hidden', true);
|
46 |
}
|
47 |
})
|
48 |
$('body').on('change', '#redirectTraffic', function (e) {
|
49 |
if ($(this).prop('checked') == true) {
|
50 |
+
$('#redirectTrafficContainer').attr('aria-hidden',false);
|
51 |
} else {
|
52 |
+
$('#redirectTrafficContainer').attr('aria-hidden',true);
|
53 |
}
|
54 |
})
|
55 |
|
56 |
+
$('body').on('click', '.2f-send-test-email', function () {
|
57 |
var jq = jQuery,
|
58 |
+
parentForm = jq('#edit-one-time-password-email form'),
|
59 |
that = jq(this),
|
60 |
data = parentForm.serialize();
|
61 |
data = data + '&action=testTwoFactorOPTEmail';
|
69 |
},
|
70 |
success: function (data) {
|
71 |
var notificationType = 'success';
|
72 |
+
if (!data.success) {
|
73 |
notificationType = 'error';
|
74 |
}
|
75 |
parentForm.find('button[type="button"]').removeAttr('disabled');
|
76 |
+
Defender.showNotification(notificationType, data.data.message);
|
77 |
}
|
78 |
})
|
79 |
return false;
|
80 |
});
|
81 |
|
82 |
+
$('body').on('click', '.save-2f-opt-email', function () {
|
83 |
var jq = jQuery,
|
84 |
+
parentForm = jq('#edit-one-time-password-email form'),
|
85 |
that = jq(this),
|
86 |
data = parentForm.serialize();
|
87 |
data = data + '&action=saveTwoFactorOPTEmail';
|
95 |
},
|
96 |
success: function (data) {
|
97 |
var notificationType = 'success';
|
98 |
+
if (!data.success) {
|
99 |
notificationType = 'error';
|
100 |
}
|
101 |
parentForm.find('button[type="button"]').removeAttr('disabled');
|
102 |
+
Defender.showNotification(notificationType, data.data.message);
|
103 |
if (data.data.reload != undefined) {
|
104 |
location.reload();
|
105 |
}
|
app/module/advanced-tools/view/2factor-otp-email-edit-from.php
CHANGED
@@ -4,43 +4,83 @@ $subject = ! empty( $settings->email_subject ) ? $settings->email_subject : __(
|
|
4 |
$sender = ! empty( $settings->email_sender ) ? $settings->email_sender : $user->display_name;
|
5 |
$body = ! empty( $settings->email_body ) ? $settings->email_body : $settings->two_factor_opt_email_default_body();
|
6 |
?>
|
7 |
-
<dialog id="edit-one-time-password-email">
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
<label for="email_sender"><?php _e( 'Sender', "defender-security" ); ?></label>
|
21 |
-
<input name="sender" type="text" value="<?php echo $sender; ?>" id="email_sender" />
|
22 |
</div>
|
23 |
</div>
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
</div>
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
42 |
</div>
|
43 |
-
</
|
44 |
-
</
|
45 |
</div>
|
46 |
-
</
|
4 |
$sender = ! empty( $settings->email_sender ) ? $settings->email_sender : $user->display_name;
|
5 |
$body = ! empty( $settings->email_body ) ? $settings->email_body : $settings->two_factor_opt_email_default_body();
|
6 |
?>
|
7 |
+
<div class="sui-dialog" aria-hidden="true" tabindex="-1" id="edit-one-time-password-email">
|
8 |
+
|
9 |
+
<div class="sui-dialog-overlay" data-a11y-dialog-hide></div>
|
10 |
+
|
11 |
+
<div class="sui-dialog-content" aria-labelledby="dialogTitle" aria-describedby="dialogDescription" role="dialog">
|
12 |
+
|
13 |
+
<div class="sui-box" role="document">
|
14 |
+
|
15 |
+
<div class="sui-box-header">
|
16 |
+
<h3 class="sui-box-title" id="dialogTitle"><?php _e( "Edit Email", "defender-security" ) ?></h3>
|
17 |
+
<div class="sui-actions-right">
|
18 |
+
<button data-a11y-dialog-hide class="sui-dialog-close"
|
19 |
+
aria-label="Close this dialog window"></button>
|
|
|
|
|
20 |
</div>
|
21 |
</div>
|
22 |
+
<form method="post">
|
23 |
+
<?php wp_nonce_field( 'twoFactorOPTEmail' ) ?>
|
24 |
+
<div class="sui-box-body">
|
25 |
+
<p id="dialogDescription">
|
26 |
+
<?php _e( "This email sends a temporary passcode when the user can’t access their phone.", "defender-security" ) ?>
|
27 |
+
</p>
|
28 |
+
<div class="sui-row">
|
29 |
+
<div class="sui-col">
|
30 |
+
<div class="sui-form-field">
|
31 |
+
<label for="dialog-text-5" class="sui-label">
|
32 |
+
<?php _e( "Subject", "defender-security" ) ?></label>
|
33 |
+
<input name="subject" class="sui-form-control" type="text"
|
34 |
+
value="<?php echo $subject; ?>"
|
35 |
+
id="email_subject"/>
|
36 |
+
</div>
|
37 |
+
</div>
|
38 |
+
<div class="sui-col">
|
39 |
+
<div class="sui-form-field">
|
40 |
+
<label for="dialog-text-6" class="sui-label">
|
41 |
+
<?php _e( "Sender", "defender-security" ) ?></label>
|
42 |
+
<input name="sender" class="sui-form-control" type="text" value="<?php echo $sender; ?>"
|
43 |
+
id="email_sender"/>
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
<div class="sui-row">
|
48 |
+
<div class="sui-col">
|
49 |
+
<label for="dialog-text-6" class="sui-label">
|
50 |
+
<?php _e( "Body", "defender-security" ) ?>
|
51 |
+
</label>
|
52 |
+
<textarea class="sui-form-control" name="body" rows="8"
|
53 |
+
id="email_body"><?php echo wp_unslash( $body ); ?></textarea>
|
54 |
+
</div>
|
55 |
+
</div>
|
56 |
+
<div class="sui-row">
|
57 |
+
<div class="sui-col">
|
58 |
+
<label for="dialog-text-6" class="sui-label">
|
59 |
+
<?php _e( 'Available variables', "defender-security" ); ?>
|
60 |
+
</label>
|
61 |
+
<span class="sui-tag"><strong>{{passcode}}</strong></span>
|
62 |
+
<span class="sui-tag"><strong>{{display_name}}</strong></span>
|
63 |
+
</div>
|
64 |
+
</div>
|
65 |
</div>
|
66 |
+
|
67 |
+
<div class="sui-box-footer">
|
68 |
+
<div class="sui-flex-child-right">
|
69 |
+
<button type="button" class="sui-button sui-button-ghost"
|
70 |
+
data-a11y-dialog-hide="my-accessible-dialog">
|
71 |
+
<?php _e( 'Cancel', "defender-security" ); ?>
|
72 |
+
</button>
|
73 |
+
</div>
|
74 |
+
<div class="sui-actions-right">
|
75 |
+
<button type="button" class="sui-button save-2f-opt-email">
|
76 |
+
<?php _e( 'Save Template', "defender-security" ); ?>
|
77 |
+
</button>
|
78 |
+
<button type="button" class="sui-button sui-button-blue 2f-send-test-email">
|
79 |
+
<?php _e( 'Send Test', "defender-security" ); ?>
|
80 |
+
</button>
|
81 |
+
</div>
|
82 |
</div>
|
83 |
+
</form>
|
84 |
+
</div>
|
85 |
</div>
|
86 |
+
</div>
|
app/module/advanced-tools/view/disabled.php
CHANGED
@@ -1,24 +1,28 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3 class="
|
4 |
<?php _e( "Two Factor Authentication", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
-
<div class="
|
8 |
-
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>"
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
-
<div class="clear line"></div>
|
15 |
-
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
16 |
-
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
17 |
-
<input type="hidden" name="enabled" value="1"/>
|
18 |
-
<button type="submit" class="button button-primary">
|
19 |
-
<?php _e( "Activate", "defender-security" ) ?>
|
20 |
-
</button>
|
21 |
-
<div class="clear"></div>
|
22 |
-
</form>
|
23 |
</div>
|
24 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
<?php _e( "Two Factor Authentication", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
+
<div class="sui-message">
|
8 |
+
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>" class="sui-image"
|
9 |
+
aria-hidden="true">
|
10 |
+
|
11 |
+
<div class="sui-message-content">
|
12 |
+
|
13 |
+
<p>
|
14 |
+
<?php _e( "Beef up your website’s security with two-factor authentication. Add an extra step in the login process so that users are required to enter a password and an app-generated passcode using their phone – the best protection against brute force attacks.", "defender-security" ) ?>
|
15 |
+
</p>
|
16 |
+
|
17 |
+
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
18 |
+
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
19 |
+
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
20 |
+
<input type="hidden" name="enabled" value="1"/>
|
21 |
+
<button type="submit" class="sui-button sui-button-blue">
|
22 |
+
<?php _e( "Activate", "defender-security" ) ?></button>
|
23 |
+
</form>
|
24 |
+
|
25 |
+
</div>
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
</div>
|
28 |
</div>
|
app/module/advanced-tools/view/layouts/layout.php
CHANGED
@@ -1,38 +1,70 @@
|
|
1 |
-
<div class="wrap">
|
2 |
-
<div class="
|
3 |
-
<div
|
4 |
-
<div class="
|
5 |
-
<
|
6 |
-
|
7 |
-
</
|
8 |
-
<div class="
|
9 |
-
<div class="
|
10 |
-
<
|
11 |
-
<
|
12 |
-
|
13 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>">
|
14 |
-
<?php _e( "Two-Factor Authentication", "defender-security" ) ?>
|
15 |
-
</a>
|
16 |
-
</li>
|
17 |
-
<li class="issues-nav">
|
18 |
-
<a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == 'mask-login' ? 'active' : null ?>"
|
19 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>">
|
20 |
-
<?php _e( "Mask Login Area", "defender-security" ) ?>
|
21 |
-
</a>
|
22 |
-
</li>
|
23 |
-
</ul>
|
24 |
-
<div class="is-hidden-tablet mline">
|
25 |
-
<select class="mobile-nav">
|
26 |
-
<option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
27 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>"><?php _e( "Two Factor Authentication", "defender-security" ) ?></option>
|
28 |
-
</select>
|
29 |
-
</div>
|
30 |
</div>
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
</div>
|
34 |
</div>
|
|
|
35 |
</div>
|
36 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
</div>
|
38 |
</div>
|
1 |
+
<div class="sui-wrap">
|
2 |
+
<div class="wp-defender" id="wp-defender">
|
3 |
+
<div class="advanced-tools">
|
4 |
+
<div class="sui-header">
|
5 |
+
<h1 class="sui-header-title">
|
6 |
+
<?php _e( "Advanced Tools", "defender-security" ) ?>
|
7 |
+
</h1>
|
8 |
+
<div class="sui-actions-right">
|
9 |
+
<div class="sui-actions-right">
|
10 |
+
<a href="#" target="_blank" class="sui-button sui-button-ghost">
|
11 |
+
<i class="sui-icon-academy"></i> <?php _e( "View Documentation", "defender-security" ) ?>
|
12 |
+
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
</div>
|
14 |
+
</div>
|
15 |
+
</div>
|
16 |
+
<div class="sui-row-with-sidenav">
|
17 |
+
<div class="sui-sidenav">
|
18 |
+
<ul class="sui-vertical-tabs sui-sidenav-hide-md">
|
19 |
+
<li class="sui-vertical-tab <?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'current' : null ?>">
|
20 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>">
|
21 |
+
<?php _e( "Two-Factor Auth", "defender-security" ) ?>
|
22 |
+
</a>
|
23 |
+
</li>
|
24 |
+
<li class="sui-vertical-tab <?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == 'mask-login' ? 'current' : null ?>">
|
25 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>">
|
26 |
+
<?php _e( "Mask Login Area", "defender-security" ) ?>
|
27 |
+
</a>
|
28 |
+
</li>
|
29 |
+
</ul>
|
30 |
+
<div class="sui-sidenav-hide-lg">
|
31 |
+
<select class="sui-mobile-nav" style="display: none;">
|
32 |
+
<option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
33 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>"><?php _e( "Two Factor Authentication", "defender-security" ) ?></option>
|
34 |
+
<option <?php selected( 'mask-login', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
35 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>">
|
36 |
+
<?php _e( "Mask Login Area", "defender-security" ) ?>
|
37 |
+
</option>
|
38 |
+
</select>
|
39 |
</div>
|
40 |
</div>
|
41 |
+
<?php echo $contents ?>
|
42 |
</div>
|
43 |
</div>
|
44 |
+
<div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div>
|
45 |
+
<?php if ( wp_defender()->isFree ): ?>
|
46 |
+
<ul class="sui-footer-nav">
|
47 |
+
<li><a href="https://profiles.wordpress.org/wpmudev#content-plugins" target="_blank">Free Plugins</a>
|
48 |
+
</li>
|
49 |
+
<li><a href="https://premium.wpmudev.org/features/" target="_blank">Membership</a></li>
|
50 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
51 |
+
<li><a href="https://wordpress.org/support/plugin/plugin-name" target="_blank">Support</a></li>
|
52 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
53 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
54 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
55 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
56 |
+
</ul>
|
57 |
+
<?php else: ?>
|
58 |
+
<ul class="sui-footer-nav">
|
59 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
60 |
+
<li><a href="https://premium.wpmudev.org/projects/category/plugins/" target="_blank">Plugins</a></li>
|
61 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
62 |
+
<li><a href="https://premium.wpmudev.org/hub/support/" target="_blank">Support</a></li>
|
63 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
64 |
+
<li><a href="https://premium.wpmudev.org/hub/community/" target="_blank">Community</a></li>
|
65 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
66 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
67 |
+
</ul>
|
68 |
+
<?php endif; ?>
|
69 |
</div>
|
70 |
</div>
|
app/module/advanced-tools/view/login/disabled.php
CHANGED
@@ -52,8 +52,10 @@
|
|
52 |
<div class="line"></div>
|
53 |
<p><strong><?php _e( "2. Scan the barcode", "defender-security" ) ?></strong></p>
|
54 |
<p><?php _e( "Open the Google Authenticator app you just downloaded, tap the “+” symbol and then use your phone’s camera to scan the barcode below.", "defender-security" ) ?></p>
|
55 |
-
<img class="barcode"
|
56 |
-
src="
|
|
|
|
|
57 |
<div class="line"></div>
|
58 |
<p><strong><?php _e( "3. Enter passcode", "defender-security" ) ?></strong></p>
|
59 |
<p>
|
52 |
<div class="line"></div>
|
53 |
<p><strong><?php _e( "2. Scan the barcode", "defender-security" ) ?></strong></p>
|
54 |
<p><?php _e( "Open the Google Authenticator app you just downloaded, tap the “+” symbol and then use your phone’s camera to scan the barcode below.", "defender-security" ) ?></p>
|
55 |
+
<!-- <img class="barcode"-->
|
56 |
+
<!-- src="-->
|
57 |
+
<?php //echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode( urlencode( get_bloginfo( 'name' ) ) . ':' . $email, $secretKey, 149, 149, urlencode( get_bloginfo( 'name' ) ) ) ?><!--"/>-->
|
58 |
+
<?php echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode( urlencode( get_bloginfo( 'name' ) ) , $email, $secretKey, 149, 149, urlencode( get_bloginfo( 'name' ) ) ) ?>
|
59 |
<div class="line"></div>
|
60 |
<p><strong><?php _e( "3. Enter passcode", "defender-security" ) ?></strong></p>
|
61 |
<p>
|
app/module/advanced-tools/view/login/otp.php
CHANGED
@@ -223,7 +223,7 @@ do_action( 'login_header' );
|
|
223 |
<form method="post"
|
224 |
action="<?php echo esc_url( add_query_arg( 'action', 'defenderVerifyOTP', site_url( 'wp-login.php', 'login_post' ) ) ); ?>">
|
225 |
<p><?php _e( "Open the Google Authenticator app and enter the 6 digit passcode.", "defender-security" ) ?></p>
|
226 |
-
<input type="text" value="" name="otp">
|
227 |
<button class="button button-primary float-r"
|
228 |
type="submit"><?php _e( "Authenticate", "defender-security" ) ?></button>
|
229 |
<input type="hidden" name="login_token" value="<?php echo $loginToken ?>"/>
|
223 |
<form method="post"
|
224 |
action="<?php echo esc_url( add_query_arg( 'action', 'defenderVerifyOTP', site_url( 'wp-login.php', 'login_post' ) ) ); ?>">
|
225 |
<p><?php _e( "Open the Google Authenticator app and enter the 6 digit passcode.", "defender-security" ) ?></p>
|
226 |
+
<input type="text" value="" autocomplete="off" autofocus name="otp">
|
227 |
<button class="button button-primary float-r"
|
228 |
type="submit"><?php _e( "Authenticate", "defender-security" ) ?></button>
|
229 |
<input type="hidden" name="login_token" value="<?php echo $loginToken ?>"/>
|
app/module/advanced-tools/view/main-free.php
CHANGED
@@ -1,188 +1,218 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3 class="
|
4 |
<?php _e( "Two-Factor Authentication", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
-
<
|
8 |
-
<
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
<div class="well well-error with-cap mline">
|
17 |
-
<i class="def-icon icon-warning icon-yellow "></i>
|
18 |
-
<?php echo implode( '<br/>', array_unique( wp_defender()->global['compatibility'] ) ); ?>
|
19 |
-
</div>
|
20 |
-
<?php endif; ?>
|
21 |
-
<?php
|
22 |
-
if ( count( $enabledRoles ) ):
|
23 |
?>
|
24 |
-
|
25 |
-
<
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
<i class="def-icon icon-warning"></i>
|
34 |
-
<?php
|
35 |
-
_e( "<strong>Two-factor authentication is currently inactive.</strong> Configure and save your settings to complete setup.", "defender-security" )
|
36 |
?>
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
</span>
|
45 |
</div>
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
<?php echo $detail['name'] ?>
|
63 |
-
</label>
|
64 |
-
</span>
|
65 |
-
<div class="list-detail">
|
66 |
-
<span class="toggle">
|
67 |
<input type="checkbox" <?php echo in_array( $role, $enabledRoles ) ? 'checked="checked"' : null ?>
|
68 |
-
name="userRoles[]"
|
69 |
-
value="<?php echo esc_attr( $role ) ?>"
|
70 |
-
class="toggle-checkbox"
|
71 |
id="toggle_<?php echo esc_attr( $role ) ?>_role"/>
|
72 |
-
<
|
73 |
-
|
74 |
-
</span>
|
75 |
-
</div>
|
76 |
</div>
|
77 |
-
|
78 |
-
|
79 |
-
</
|
80 |
</div>
|
81 |
</div>
|
82 |
-
<div class="
|
83 |
-
<div class="
|
84 |
-
<
|
85 |
-
|
|
|
|
|
86 |
<?php _e( "If a user is unable to access their phone, you can allow an option to send the one time password to their registered email.", "defender-security" ) ?>
|
87 |
</span>
|
88 |
</div>
|
89 |
-
<div class="
|
90 |
-
<
|
91 |
-
<
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
97 |
</div>
|
98 |
</div>
|
99 |
-
<div class="
|
100 |
-
<div class="
|
101 |
-
<
|
102 |
-
|
|
|
|
|
103 |
<?php _e( "By default, two-factor authentication is optional for users. This setting forces users to activate two-factor.", "defender-security" ) ?>
|
104 |
</span>
|
105 |
</div>
|
106 |
-
<div class="
|
107 |
-
<
|
108 |
-
<
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
</div>
|
138 |
</div>
|
139 |
</div>
|
140 |
-
<div class="
|
141 |
-
<
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
<
|
146 |
-
<span class="sub">
|
147 |
<?php _e( "By default, Defender’s icon appears above the login fields. You can upload your own branding, or turn this feature off.", "defender-security" ) ?>
|
148 |
</span>
|
149 |
</div>
|
150 |
-
<div class="
|
151 |
-
<
|
152 |
-
<input type="checkbox" class="toggle-checkbox"
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
</div>
|
160 |
</div>
|
161 |
-
<div class="
|
162 |
-
<div class="
|
163 |
-
<
|
164 |
-
|
165 |
-
|
|
|
|
|
166 |
</span>
|
167 |
</div>
|
168 |
-
<div class="
|
169 |
-
|
170 |
-
|
171 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
</div>
|
173 |
-
<div class="line"><?php _e( 'Lost phone one time password', "defender-security" );?></div>
|
174 |
-
<span class="pull-right"><span class="span-icon icon-edit change-one-time-pass-email" tooltip="Edit"></span></span>
|
175 |
-
</div>
|
176 |
</div>
|
177 |
</div>
|
178 |
-
<div class="
|
179 |
-
<div class="
|
180 |
-
<
|
181 |
-
|
182 |
-
|
|
|
|
|
183 |
</span>
|
184 |
</div>
|
185 |
-
<div class="
|
186 |
<a href="https://itunes.apple.com/vn/app/google-authenticator/id388497605?mt=8">
|
187 |
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/ios-download.svg' ?>"/>
|
188 |
</a>
|
@@ -191,42 +221,49 @@
|
|
191 |
</a>
|
192 |
</div>
|
193 |
</div>
|
194 |
-
<div class="
|
195 |
-
<div class="
|
196 |
-
<
|
197 |
-
|
|
|
|
|
198 |
<?php _e( "Here’s a quick link to see which of your users have enabled two-factor verification.", "defender-security" ) ?>
|
199 |
</span>
|
200 |
</div>
|
201 |
-
<div class="
|
202 |
<?php printf( __( "<a href=\"%s\">View users</a> who have enabled this feature.", "defender-security" ), network_admin_url( 'users.php' ) ) ?>
|
203 |
</div>
|
204 |
</div>
|
205 |
-
<div class="
|
206 |
-
<div class="
|
207 |
-
<
|
208 |
-
|
|
|
|
|
209 |
<?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
|
210 |
</span>
|
211 |
</div>
|
212 |
-
<div class="
|
213 |
-
<button type="button" class="button button-
|
214 |
<?php _e( "Deactivate", "defender-security" ) ?>
|
215 |
</button>
|
216 |
</div>
|
217 |
</div>
|
218 |
-
|
|
|
219 |
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
220 |
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
221 |
-
<
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
227 |
</div>
|
228 |
-
|
229 |
-
$view = '2factor-otp-email-edit-from';
|
230 |
-
$settings = array( 'settings' => $settings );
|
231 |
-
$controller->renderPartial( $view, $settings );
|
232 |
-
?>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
<?php _e( "Two-Factor Authentication", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
8 |
+
<div class="sui-box-body sui-upsell-items">
|
9 |
+
<div class="padding-30 no-padding-bottom">
|
10 |
+
<p>
|
11 |
+
<?php _e( "Configure your two-factor authentication settings. Our recommendations are enabled by default.", "defender-security" ) ?>
|
12 |
+
</p>
|
13 |
+
<?php
|
14 |
+
$enabledRoles = $settings->userRoles;
|
15 |
+
$allRoles = get_editable_roles();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
?>
|
17 |
+
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
18 |
+
<div class="sui-notice sui-notice-error">
|
19 |
+
<p>
|
20 |
+
<?php echo implode( '<br/>', array_unique( wp_defender()->global['compatibility'] ) ); ?>
|
21 |
+
</p>
|
22 |
+
</div>
|
23 |
+
<?php endif; ?>
|
24 |
+
<?php
|
25 |
+
if ( count( $enabledRoles ) ):
|
|
|
|
|
|
|
26 |
?>
|
27 |
+
<div class="sui-notice sui-notice-info no-margin-bottom">
|
28 |
+
<p>
|
29 |
+
<?php
|
30 |
+
printf( __( "<strong>Two-factor authentication is now active.</strong> User roles with this feature enabled must visit their <a href='%s'>Profile page</a> to complete setup and sync their account with the Authenticator app.", "defender-security" ),
|
31 |
+
admin_url( 'profile.php' ) );
|
32 |
+
?>
|
33 |
+
</p>
|
34 |
+
</div>
|
35 |
+
<?php else: ?>
|
36 |
+
<div class="sui-notice sui-notice-warning no-margin-bottom">
|
37 |
+
<p>
|
38 |
+
<?php
|
39 |
+
_e( "<strong>Two-factor authentication is currently inactive.</strong> Configure and save your settings to complete setup.", "defender-security" )
|
40 |
+
?>
|
41 |
+
</p>
|
42 |
+
</div>
|
43 |
+
<?php endif; ?>
|
44 |
+
</div>
|
45 |
+
<div class="sui-box-settings-row">
|
46 |
+
<div class="sui-box-settings-col-1">
|
47 |
+
<span class="sui-settings-label">
|
48 |
+
<?php esc_html_e( "User Roles", "defender-security" ) ?>
|
49 |
+
</span>
|
50 |
+
<span class="sui-description">
|
51 |
+
<?php esc_html_e( "Choose the user roles you want to enable two-factor authentication for. Users with those roles will then be required to use the Google Authenticator app to login.", "defender-security" ) ?>
|
52 |
</span>
|
53 |
</div>
|
54 |
+
|
55 |
+
<div class="sui-box-settings-col-2">
|
56 |
+
<div class="sui-field-list">
|
57 |
+
<div class="sui-field-list-header">
|
58 |
+
<h3 class="sui-field-list-title"><?php _e( "User role", "defender-security" ) ?></h3>
|
59 |
+
</div>
|
60 |
+
<div class="sui-field-list-body">
|
61 |
+
<?php
|
62 |
+
foreach ( $allRoles as $role => $detail ):
|
63 |
+
?>
|
64 |
+
<div class="sui-field-list-item">
|
65 |
+
<label class="sui-field-list-item-label"
|
66 |
+
for="toggle_<?php echo esc_attr( $role ) ?>_role">
|
67 |
+
<?php echo $detail['name'] ?>
|
68 |
+
</label>
|
69 |
+
<label class="sui-toggle">
|
|
|
|
|
|
|
|
|
|
|
70 |
<input type="checkbox" <?php echo in_array( $role, $enabledRoles ) ? 'checked="checked"' : null ?>
|
71 |
+
name="userRoles[]" value="<?php echo esc_attr( $role ) ?>"
|
|
|
|
|
72 |
id="toggle_<?php echo esc_attr( $role ) ?>_role"/>
|
73 |
+
<span class="sui-toggle-slider"></span>
|
74 |
+
</label>
|
|
|
|
|
75 |
</div>
|
76 |
+
<?php endforeach; ?>
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
</div>
|
80 |
</div>
|
81 |
+
<div class="sui-box-settings-row">
|
82 |
+
<div class="sui-box-settings-col-1">
|
83 |
+
<span class="sui-settings-label">
|
84 |
+
<?php _e( "Lost Phone", "defender-security" ) ?>
|
85 |
+
</span>
|
86 |
+
<span class="sui-description">
|
87 |
<?php _e( "If a user is unable to access their phone, you can allow an option to send the one time password to their registered email.", "defender-security" ) ?>
|
88 |
</span>
|
89 |
</div>
|
90 |
+
<div class="sui-box-settings-col-2">
|
91 |
+
<div class="sui-form-field">
|
92 |
+
<label class="sui-toggle">
|
93 |
+
<input type="hidden" name="lostPhone" value="0"/>
|
94 |
+
<input role="presentation" type="checkbox" name="lostPhone" class="toggle-checkbox"
|
95 |
+
id="lostPhone" value="1"
|
96 |
+
<?php checked( true, $settings->lostPhone ) ?>/>
|
97 |
+
<span class="sui-toggle-slider"></span>
|
98 |
+
</label>
|
99 |
+
<label for="lostPhone" class="sui-toggle-label">
|
100 |
+
<?php _e( "Enable lost phone option", "defender-security" ) ?>
|
101 |
+
</label>
|
102 |
+
</div>
|
103 |
</div>
|
104 |
</div>
|
105 |
+
<div class="sui-box-settings-row">
|
106 |
+
<div class="sui-box-settings-col-1">
|
107 |
+
<span class="sui-settings-label">
|
108 |
+
<?php _e( "Force Authentication", "defender-security" ) ?>
|
109 |
+
</span>
|
110 |
+
<span class="sui-description">
|
111 |
<?php _e( "By default, two-factor authentication is optional for users. This setting forces users to activate two-factor.", "defender-security" ) ?>
|
112 |
</span>
|
113 |
</div>
|
114 |
+
<div class="sui-box-settings-col-2">
|
115 |
+
<div class="sui-form-field">
|
116 |
+
<label class="sui-toggle">
|
117 |
+
<input type="hidden" name="forceAuth" value="0"/>
|
118 |
+
<input role="presentation" type="checkbox" name="forceAuth" class="toggle-checkbox"
|
119 |
+
id="forceAuth" value="1"
|
120 |
+
<?php checked( true, $settings->forceAuth ) ?>/>
|
121 |
+
<span class="sui-toggle-slider"></span>
|
122 |
+
</label>
|
123 |
+
<label for="forceAuth" class="sui-toggle-label">
|
124 |
+
<?php _e( "Force users to log in with two-factor authentication", "defender-security" ) ?>
|
125 |
+
</label>
|
126 |
+
<span class="sui-description sui-toggle-content">
|
127 |
+
<?php _e( "Note: Users will be forced to set up two-factor when they next login.", "defender-security" ) ?>
|
128 |
+
</span>
|
129 |
+
<div id="forceAuthRoles" class="sui-border-frame sui-toggle-content"
|
130 |
+
aria-hidden="<?php echo ! $settings->forceAuth ?>">
|
131 |
+
<strong><?php _e( "User Roles", "defender-security" ) ?></strong>
|
132 |
+
<ul>
|
133 |
+
<?php
|
134 |
+
$forceAuthRoles = $settings->forceAuthRoles;
|
135 |
+
foreach ( $allRoles as $role => $detail ):
|
136 |
+
?>
|
137 |
+
<li>
|
138 |
+
<label for="forceAuth<?php echo esc_attr( $role ) ?>" class="sui-checkbox">
|
139 |
+
<input id="forceAuth<?php echo esc_attr( $role ) ?>" type="checkbox"
|
140 |
+
name="forceAuthRoles[]"
|
141 |
+
value="<?php echo esc_attr( $role ) ?>" <?php echo in_array( $role, $forceAuthRoles ) ? 'checked="checked"' : null ?> />
|
142 |
+
<span aria-hidden="true"></span>
|
143 |
+
<span><?php echo $detail['name'] ?></span>
|
144 |
+
</label>
|
145 |
+
</li>
|
146 |
+
<?php endforeach; ?>
|
147 |
+
</ul>
|
148 |
+
<strong><?php _e( "Custom warning message", "defender-security" ) ?></strong>
|
149 |
+
<textarea class="sui-form-control"
|
150 |
+
name="forceAuthMess"><?php echo $settings->forceAuthMess ?></textarea>
|
151 |
+
<span class="sui-description">
|
152 |
+
<?php _e( "Note: This is shown in the users Profile area indicating they must use two-factor authentication.", "defender-security" ) ?>
|
153 |
+
</span>
|
154 |
+
</div>
|
155 |
</div>
|
156 |
</div>
|
157 |
</div>
|
158 |
+
<div class="sui-box-settings-row sui-disabled">
|
159 |
+
<div class="sui-box-settings-col-1">
|
160 |
+
<span class="sui-settings-label">
|
161 |
+
<?php _e( "Custom Graphic", "defender-security" ) ?>
|
162 |
+
</span>
|
163 |
+
<span class="sui-description">
|
|
|
164 |
<?php _e( "By default, Defender’s icon appears above the login fields. You can upload your own branding, or turn this feature off.", "defender-security" ) ?>
|
165 |
</span>
|
166 |
</div>
|
167 |
+
<div class="sui-box-settings-col-2">
|
168 |
+
<label class="sui-toggle">
|
169 |
+
<input role="presentation" type="checkbox" name="customGraphic" class="toggle-checkbox"
|
170 |
+
id="customGraphic" value="0"/>
|
171 |
+
<span class="sui-toggle-slider"></span>
|
172 |
+
</label>
|
173 |
+
<label for="customGraphic" class="sui-toggle-label">
|
174 |
+
<?php _e( "Enable custom graphics above login fields", "defender-security" ) ?>
|
175 |
+
</label>
|
176 |
</div>
|
177 |
</div>
|
178 |
+
<div class="sui-box-settings-row">
|
179 |
+
<div class="sui-box-settings-col-1">
|
180 |
+
<span class="sui-settings-label">
|
181 |
+
<?php _e( "Emails", "defender-security" ) ?>
|
182 |
+
</span>
|
183 |
+
<span class="sui-description">
|
184 |
+
<?php _e( 'Customize the default copy for emails the two-factor feature sends to users.', "defender-security" ); ?>
|
185 |
</span>
|
186 |
</div>
|
187 |
+
<div class="sui-box-settings-col-2">
|
188 |
+
<div class="sui-field-list">
|
189 |
+
<div class="sui-field-list-header">
|
190 |
+
<h3 class="sui-field-list-title"><?php _e( "Email", "defender-security" ) ?></h3>
|
191 |
+
</div>
|
192 |
+
<div class="sui-field-list-body">
|
193 |
+
<div class="sui-field-list-item">
|
194 |
+
<label class="sui-field-list-item-label" for="demo-table-2-toggle-5">
|
195 |
+
<?php _e( "Lost phone one time password", "defender-security" ) ?>
|
196 |
+
</label>
|
197 |
+
<button type="button" class="sui-button-icon"
|
198 |
+
data-a11y-dialog-show="edit-one-time-password-email">
|
199 |
+
<i class="sui-icon-pencil" aria-hidden="true"></i>
|
200 |
+
</button>
|
201 |
+
</div>
|
202 |
+
</div>
|
203 |
</div>
|
|
|
|
|
|
|
204 |
</div>
|
205 |
</div>
|
206 |
+
<div class="sui-box-settings-row">
|
207 |
+
<div class="sui-box-settings-col-1">
|
208 |
+
<span class="sui-settings-label">
|
209 |
+
<?php _e( "App Download", "defender-security" ) ?>
|
210 |
+
</span>
|
211 |
+
<span class="sui-description">
|
212 |
+
<?php _e( 'Need the app? Here’s links to the official Google Authenticator apps.', "defender-security" ); ?>
|
213 |
</span>
|
214 |
</div>
|
215 |
+
<div class="sui-box-settings-col-2">
|
216 |
<a href="https://itunes.apple.com/vn/app/google-authenticator/id388497605?mt=8">
|
217 |
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/ios-download.svg' ?>"/>
|
218 |
</a>
|
221 |
</a>
|
222 |
</div>
|
223 |
</div>
|
224 |
+
<div class="sui-box-settings-row">
|
225 |
+
<div class="sui-box-settings-col-1">
|
226 |
+
<span class="sui-settings-label">
|
227 |
+
<?php _e( "Active Users", "defender-security" ) ?>
|
228 |
+
</span>
|
229 |
+
<span class="sui-description">
|
230 |
<?php _e( "Here’s a quick link to see which of your users have enabled two-factor verification.", "defender-security" ) ?>
|
231 |
</span>
|
232 |
</div>
|
233 |
+
<div class="sui-box-settings-col-2">
|
234 |
<?php printf( __( "<a href=\"%s\">View users</a> who have enabled this feature.", "defender-security" ), network_admin_url( 'users.php' ) ) ?>
|
235 |
</div>
|
236 |
</div>
|
237 |
+
<div class="sui-box-settings-row">
|
238 |
+
<div class="sui-box-settings-col-1">
|
239 |
+
<span class="sui-settings-label">
|
240 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
241 |
+
</span>
|
242 |
+
<span class="sui-description">
|
243 |
<?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
|
244 |
</span>
|
245 |
</div>
|
246 |
+
<div class="sui-box-settings-col-2">
|
247 |
+
<button type="button" class="sui-button sui-button-ghost deactivate-2factor">
|
248 |
<?php _e( "Deactivate", "defender-security" ) ?>
|
249 |
</button>
|
250 |
</div>
|
251 |
</div>
|
252 |
+
</div>
|
253 |
+
<div class="sui-box-footer">
|
254 |
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
255 |
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
256 |
+
<div class="sui-actions-right">
|
257 |
+
<button type="submit" class="sui-button sui-button-blue">
|
258 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
259 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
260 |
+
</div>
|
261 |
+
</div>
|
262 |
+
</form>
|
263 |
+
<?php
|
264 |
+
$view = '2factor-otp-email-edit-from';
|
265 |
+
$settings = array( 'settings' => $settings );
|
266 |
+
$controller->renderPartial( $view, $settings );
|
267 |
+
?>
|
268 |
</div>
|
269 |
+
|
|
|
|
|
|
|
|
app/module/advanced-tools/view/main.php
CHANGED
@@ -1,199 +1,247 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3 class="
|
4 |
<?php _e( "Two-Factor Authentication", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
-
<
|
8 |
-
<
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
|
|
15 |
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
16 |
-
<div class="
|
17 |
-
<
|
18 |
-
|
|
|
19 |
</div>
|
20 |
<?php endif; ?>
|
21 |
<?php
|
22 |
if ( count( $enabledRoles ) ):
|
23 |
?>
|
24 |
-
<div class="
|
25 |
-
<
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
|
|
30 |
</div>
|
31 |
<?php else: ?>
|
32 |
-
<div class="
|
33 |
-
<
|
34 |
-
|
35 |
-
|
36 |
-
|
|
|
37 |
</div>
|
38 |
<?php endif; ?>
|
39 |
-
<div class="
|
40 |
-
<div class="
|
41 |
-
<
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
</span>
|
65 |
-
<div class="list-detail">
|
66 |
-
<span class="toggle">
|
67 |
<input type="checkbox" <?php echo in_array( $role, $enabledRoles ) ? 'checked="checked"' : null ?>
|
68 |
-
name="userRoles[]"
|
69 |
-
value="<?php echo esc_attr( $role ) ?>"
|
70 |
-
class="toggle-checkbox"
|
71 |
id="toggle_<?php echo esc_attr( $role ) ?>_role"/>
|
72 |
-
<
|
73 |
-
|
74 |
-
</span>
|
75 |
-
</div>
|
76 |
</div>
|
77 |
-
|
78 |
-
|
79 |
-
</
|
80 |
</div>
|
81 |
</div>
|
82 |
-
<div class="
|
83 |
-
<div class="
|
84 |
-
<
|
85 |
-
|
|
|
|
|
86 |
<?php _e( "If a user is unable to access their phone, you can allow an option to send the one time password to their registered email.", "defender-security" ) ?>
|
87 |
</span>
|
88 |
</div>
|
89 |
-
<div class="
|
90 |
-
<
|
91 |
-
<
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
97 |
</div>
|
98 |
</div>
|
99 |
-
<div class="
|
100 |
-
<div class="
|
101 |
-
<
|
102 |
-
|
|
|
|
|
103 |
<?php _e( "By default, two-factor authentication is optional for users. This setting forces users to activate two-factor.", "defender-security" ) ?>
|
104 |
</span>
|
105 |
</div>
|
106 |
-
<div class="
|
107 |
-
<
|
108 |
-
<
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
</div>
|
138 |
</div>
|
139 |
</div>
|
140 |
-
<div class="
|
141 |
-
<div class="
|
142 |
-
<
|
143 |
-
|
|
|
|
|
144 |
<?php _e( "By default, Defender’s icon appears above the login fields. You can upload your own branding, or turn this feature off.", "defender-security" ) ?>
|
145 |
</span>
|
146 |
</div>
|
147 |
-
<div class="
|
148 |
-
<
|
149 |
<input type="hidden" name="customGraphic" value="0"/>
|
150 |
-
<input type="checkbox"
|
151 |
-
value="1"
|
152 |
-
|
153 |
-
<
|
154 |
-
</
|
155 |
-
<
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
|
|
|
|
162 |
<input type="hidden" id="customGraphicURL" name="customGraphicURL"
|
163 |
value="<?php echo $settings->customGraphicURL ?>"/>
|
164 |
-
<
|
165 |
-
<
|
166 |
-
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
</div>
|
169 |
</div>
|
170 |
</div>
|
171 |
-
<div class="
|
172 |
-
<div class="
|
173 |
-
<
|
174 |
-
|
175 |
-
|
|
|
|
|
176 |
</span>
|
177 |
</div>
|
178 |
-
<div class="
|
179 |
-
<div class="
|
180 |
-
<div class="
|
181 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
</div>
|
183 |
-
<div class="line"><?php _e( 'Lost phone one time password', "defender-security" ); ?></div>
|
184 |
-
<span class="pull-right"><span class="span-icon icon-edit change-one-time-pass-email"
|
185 |
-
tooltip="Edit"></span></span>
|
186 |
</div>
|
187 |
</div>
|
188 |
</div>
|
189 |
-
<div class="
|
190 |
-
<div class="
|
191 |
-
<
|
192 |
-
|
193 |
-
|
|
|
|
|
194 |
</span>
|
195 |
</div>
|
196 |
-
<div class="
|
197 |
<a href="https://itunes.apple.com/vn/app/google-authenticator/id388497605?mt=8">
|
198 |
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/ios-download.svg' ?>"/>
|
199 |
</a>
|
@@ -202,42 +250,48 @@
|
|
202 |
</a>
|
203 |
</div>
|
204 |
</div>
|
205 |
-
<div class="
|
206 |
-
<div class="
|
207 |
-
<
|
208 |
-
|
|
|
|
|
209 |
<?php _e( "Here’s a quick link to see which of your users have enabled two-factor verification.", "defender-security" ) ?>
|
210 |
</span>
|
211 |
</div>
|
212 |
-
<div class="
|
213 |
<?php printf( __( "<a href=\"%s\">View users</a> who have enabled this feature.", "defender-security" ), network_admin_url( 'users.php' ) ) ?>
|
214 |
</div>
|
215 |
</div>
|
216 |
-
<div class="
|
217 |
-
<div class="
|
218 |
-
<
|
219 |
-
|
|
|
|
|
220 |
<?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
|
221 |
</span>
|
222 |
</div>
|
223 |
-
<div class="
|
224 |
-
<button type="button" class="button button-
|
225 |
<?php _e( "Deactivate", "defender-security" ) ?>
|
226 |
</button>
|
227 |
</div>
|
228 |
</div>
|
229 |
-
|
|
|
230 |
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
231 |
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
232 |
-
<
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
</
|
239 |
-
<?php
|
240 |
-
$view = '2factor-otp-email-edit-from';
|
241 |
-
$settings = array( 'settings' => $settings );
|
242 |
-
$controller->renderPartial( $view, $settings );
|
243 |
-
?>
|
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
<?php _e( "Two-Factor Authentication", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
+
<?php _e( "Configure your two-factor authentication settings. Our recommendations are enabled by default.", "defender-security" ) ?>
|
11 |
+
</p>
|
12 |
+
<?php
|
13 |
+
$enabledRoles = $settings->userRoles;
|
14 |
+
$allRoles = get_editable_roles();
|
15 |
+
?>
|
16 |
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
17 |
+
<div class="sui-notice sui-notice-error">
|
18 |
+
<p>
|
19 |
+
<?php echo implode( '<br/>', array_unique( wp_defender()->global['compatibility'] ) ); ?>
|
20 |
+
</p>
|
21 |
</div>
|
22 |
<?php endif; ?>
|
23 |
<?php
|
24 |
if ( count( $enabledRoles ) ):
|
25 |
?>
|
26 |
+
<div class="sui-notice sui-notice-info">
|
27 |
+
<p>
|
28 |
+
<?php
|
29 |
+
printf( __( "<strong>Two-factor authentication is now active.</strong> User roles with this feature enabled must visit their <a href='%s'>Profile page</a> to complete setup and sync their account with the Authenticator app.", "defender-security" ),
|
30 |
+
admin_url( 'profile.php' ) );
|
31 |
+
?>
|
32 |
+
</p>
|
33 |
</div>
|
34 |
<?php else: ?>
|
35 |
+
<div class="sui-notice sui-notice-warning">
|
36 |
+
<p>
|
37 |
+
<?php
|
38 |
+
_e( "<strong>Two-factor authentication is currently inactive.</strong> Configure and save your settings to complete setup.", "defender-security" )
|
39 |
+
?>
|
40 |
+
</p>
|
41 |
</div>
|
42 |
<?php endif; ?>
|
43 |
+
<div class="sui-box-settings-row">
|
44 |
+
<div class="sui-box-settings-col-1">
|
45 |
+
<span class="sui-settings-label">
|
46 |
+
<?php esc_html_e( "User Roles", "defender-security" ) ?>
|
47 |
+
</span>
|
48 |
+
<span class="sui-description">
|
49 |
+
<?php esc_html_e( "Choose the user roles you want to enable two-factor authentication for. Users with those roles will then be required to use the Google Authenticator app to login.", "defender-security" ) ?>
|
50 |
+
</span>
|
51 |
+
</div>
|
52 |
+
|
53 |
+
<div class="sui-box-settings-col-2">
|
54 |
+
<div class="sui-field-list">
|
55 |
+
<div class="sui-field-list-header">
|
56 |
+
<h3 class="sui-field-list-title"><?php _e( "User role", "defender-security" ) ?></h3>
|
57 |
+
</div>
|
58 |
+
<div class="sui-field-list-body">
|
59 |
+
<?php
|
60 |
+
foreach ( $allRoles as $role => $detail ):
|
61 |
+
?>
|
62 |
+
<div class="sui-field-list-item">
|
63 |
+
<label class="sui-field-list-item-label"
|
64 |
+
for="toggle_<?php echo esc_attr( $role ) ?>_role">
|
65 |
+
<?php echo $detail['name'] ?>
|
66 |
+
</label>
|
67 |
+
<label class="sui-toggle">
|
|
|
|
|
|
|
68 |
<input type="checkbox" <?php echo in_array( $role, $enabledRoles ) ? 'checked="checked"' : null ?>
|
69 |
+
name="userRoles[]" value="<?php echo esc_attr( $role ) ?>"
|
|
|
|
|
70 |
id="toggle_<?php echo esc_attr( $role ) ?>_role"/>
|
71 |
+
<span class="sui-toggle-slider"></span>
|
72 |
+
</label>
|
|
|
|
|
73 |
</div>
|
74 |
+
<?php endforeach; ?>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
</div>
|
78 |
</div>
|
79 |
+
<div class="sui-box-settings-row">
|
80 |
+
<div class="sui-box-settings-col-1">
|
81 |
+
<span class="sui-settings-label">
|
82 |
+
<?php _e( "Lost Phone", "defender-security" ) ?>
|
83 |
+
</span>
|
84 |
+
<span class="sui-description">
|
85 |
<?php _e( "If a user is unable to access their phone, you can allow an option to send the one time password to their registered email.", "defender-security" ) ?>
|
86 |
</span>
|
87 |
</div>
|
88 |
+
<div class="sui-box-settings-col-2">
|
89 |
+
<div class="sui-form-field">
|
90 |
+
<label class="sui-toggle">
|
91 |
+
<input type="hidden" name="lostPhone" value="0"/>
|
92 |
+
<input role="presentation" type="checkbox" name="lostPhone" class="toggle-checkbox"
|
93 |
+
id="lostPhone" value="1"
|
94 |
+
<?php checked( true, $settings->lostPhone ) ?>/>
|
95 |
+
<span class="sui-toggle-slider"></span>
|
96 |
+
</label>
|
97 |
+
<label for="lostPhone" class="sui-toggle-label">
|
98 |
+
<?php _e( "Enable lost phone option", "defender-security" ) ?>
|
99 |
+
</label>
|
100 |
+
</div>
|
101 |
</div>
|
102 |
</div>
|
103 |
+
<div class="sui-box-settings-row">
|
104 |
+
<div class="sui-box-settings-col-1">
|
105 |
+
<span class="sui-settings-label">
|
106 |
+
<?php _e( "Force Authentication", "defender-security" ) ?>
|
107 |
+
</span>
|
108 |
+
<span class="sui-description">
|
109 |
<?php _e( "By default, two-factor authentication is optional for users. This setting forces users to activate two-factor.", "defender-security" ) ?>
|
110 |
</span>
|
111 |
</div>
|
112 |
+
<div class="sui-box-settings-col-2">
|
113 |
+
<div class="sui-form-field">
|
114 |
+
<label class="sui-toggle">
|
115 |
+
<input type="hidden" name="forceAuth" value="0"/>
|
116 |
+
<input role="presentation" type="checkbox" name="forceAuth" class="toggle-checkbox"
|
117 |
+
id="forceAuth" value="1"
|
118 |
+
<?php checked( true, $settings->forceAuth ) ?>/>
|
119 |
+
<span class="sui-toggle-slider"></span>
|
120 |
+
</label>
|
121 |
+
<label for="forceAuth" class="sui-toggle-label">
|
122 |
+
<?php _e( "Force users to log in with two-factor authentication", "defender-security" ) ?>
|
123 |
+
</label>
|
124 |
+
<span class="sui-description sui-toggle-content">
|
125 |
+
<?php _e( "Note: Users will be forced to set up two-factor when they next login.", "defender-security" ) ?>
|
126 |
+
</span>
|
127 |
+
<div id="forceAuthRoles" class="sui-border-frame sui-toggle-content"
|
128 |
+
aria-hidden="<?php echo ! $settings->forceAuth ?>">
|
129 |
+
<strong><?php _e( "User Roles", "defender-security" ) ?></strong>
|
130 |
+
<ul>
|
131 |
+
<?php
|
132 |
+
$forceAuthRoles = $settings->forceAuthRoles;
|
133 |
+
foreach ( $allRoles as $role => $detail ):
|
134 |
+
?>
|
135 |
+
<li>
|
136 |
+
<label for="forceAuth<?php echo esc_attr( $role ) ?>" class="sui-checkbox">
|
137 |
+
<input id="forceAuth<?php echo esc_attr( $role ) ?>" type="checkbox"
|
138 |
+
name="forceAuthRoles[]"
|
139 |
+
value="<?php echo esc_attr( $role ) ?>" <?php echo in_array( $role, $forceAuthRoles ) ? 'checked="checked"' : null ?> />
|
140 |
+
<span aria-hidden="true"></span>
|
141 |
+
<span><?php echo $detail['name'] ?></span>
|
142 |
+
</label>
|
143 |
+
</li>
|
144 |
+
<?php endforeach; ?>
|
145 |
+
</ul>
|
146 |
+
<strong><?php _e( "Custom warning message", "defender-security" ) ?></strong>
|
147 |
+
<textarea class="sui-form-control"
|
148 |
+
name="forceAuthMess"><?php echo $settings->forceAuthMess ?></textarea>
|
149 |
+
<span class="sui-description">
|
150 |
+
<?php _e( "Note: This is shown in the users Profile area indicating they must use two-factor authentication.", "defender-security" ) ?>
|
151 |
+
</span>
|
152 |
+
</div>
|
153 |
</div>
|
154 |
</div>
|
155 |
</div>
|
156 |
+
<div class="sui-box-settings-row">
|
157 |
+
<div class="sui-box-settings-col-1">
|
158 |
+
<span class="sui-settings-label">
|
159 |
+
<?php _e( "Custom Graphic", "defender-security" ) ?>
|
160 |
+
</span>
|
161 |
+
<span class="sui-description">
|
162 |
<?php _e( "By default, Defender’s icon appears above the login fields. You can upload your own branding, or turn this feature off.", "defender-security" ) ?>
|
163 |
</span>
|
164 |
</div>
|
165 |
+
<div class="sui-box-settings-col-2">
|
166 |
+
<label class="sui-toggle">
|
167 |
<input type="hidden" name="customGraphic" value="0"/>
|
168 |
+
<input role="presentation" type="checkbox" name="customGraphic" class="toggle-checkbox"
|
169 |
+
id="customGraphic" value="1"
|
170 |
+
<?php checked( true, $settings->customGraphic ) ?>/>
|
171 |
+
<span class="sui-toggle-slider"></span>
|
172 |
+
</label>
|
173 |
+
<label for="customGraphic" class="sui-toggle-label">
|
174 |
+
<?php _e( "Enable custom graphics above login fields", "defender-security" ) ?>
|
175 |
+
</label>
|
176 |
+
<div id="customGraphicContainer" class="sui-border-frame sui-toggle-content"
|
177 |
+
aria-hidden="<?php echo $settings->customGraphic == false ? true : false ?>">
|
178 |
+
<span class="sui-description">
|
179 |
+
<strong><?php _e( "Custom Graphic", "defender-security" ) ?></strong>
|
180 |
+
- <?php _e( "For best results use a 168x168px JPG or PNG.", "defender-security" ) ?></span>
|
181 |
+
</span>
|
182 |
<input type="hidden" id="customGraphicURL" name="customGraphicURL"
|
183 |
value="<?php echo $settings->customGraphicURL ?>"/>
|
184 |
+
<div class="sui-upload">
|
185 |
+
<div class="sui-upload-image">
|
186 |
+
<img id="customGraphicIMG" width="40" height="40"
|
187 |
+
src="<?php echo $settings->customGraphicURL ?>">
|
188 |
+
<div role="button"
|
189 |
+
class="sui-image-preview"
|
190 |
+
style="background-image: url('<?php echo $settings->customGraphicURL ?>');">
|
191 |
+
</div>
|
192 |
+
</div>
|
193 |
+
|
194 |
+
<button type="button" class="sui-upload-button file-picker">
|
195 |
+
<i class="sui-icon-upload-cloud" aria-hidden="true"></i>
|
196 |
+
<?php _e( "Upload file", "defender-security" ) ?>
|
197 |
+
</button>
|
198 |
+
|
199 |
+
<div class="sui-upload-file">
|
200 |
+
<span><?php echo pathinfo( $settings->customGraphicURL, PATHINFO_BASENAME ) ?></span>
|
201 |
+
</div>
|
202 |
+
|
203 |
+
</div>
|
204 |
</div>
|
205 |
</div>
|
206 |
</div>
|
207 |
+
<div class="sui-box-settings-row">
|
208 |
+
<div class="sui-box-settings-col-1">
|
209 |
+
<span class="sui-settings-label">
|
210 |
+
<?php _e( "Emails", "defender-security" ) ?>
|
211 |
+
</span>
|
212 |
+
<span class="sui-description">
|
213 |
+
<?php _e( 'Customize the default copy for emails the two-factor feature sends to users.', "defender-security" ); ?>
|
214 |
</span>
|
215 |
</div>
|
216 |
+
<div class="sui-box-settings-col-2">
|
217 |
+
<div class="sui-field-list">
|
218 |
+
<div class="sui-field-list-header">
|
219 |
+
<h3 class="sui-field-list-title"><?php _e( "Email", "defender-security" ) ?></h3>
|
220 |
+
</div>
|
221 |
+
<div class="sui-field-list-body">
|
222 |
+
<div class="sui-field-list-item">
|
223 |
+
<label class="sui-field-list-item-label" for="demo-table-2-toggle-5">
|
224 |
+
<?php _e( "Lost phone one time password", "defender-security" ) ?>
|
225 |
+
</label>
|
226 |
+
<button type="button" class="sui-button-icon"
|
227 |
+
data-a11y-dialog-show="edit-one-time-password-email">
|
228 |
+
<i class="sui-icon-pencil" aria-hidden="true"></i>
|
229 |
+
</button>
|
230 |
+
</div>
|
231 |
</div>
|
|
|
|
|
|
|
232 |
</div>
|
233 |
</div>
|
234 |
</div>
|
235 |
+
<div class="sui-box-settings-row">
|
236 |
+
<div class="sui-box-settings-col-1">
|
237 |
+
<span class="sui-settings-label">
|
238 |
+
<?php _e( "App Download", "defender-security" ) ?>
|
239 |
+
</span>
|
240 |
+
<span class="sui-description">
|
241 |
+
<?php _e( 'Need the app? Here’s links to the official Google Authenticator apps.', "defender-security" ); ?>
|
242 |
</span>
|
243 |
</div>
|
244 |
+
<div class="sui-box-settings-col-2">
|
245 |
<a href="https://itunes.apple.com/vn/app/google-authenticator/id388497605?mt=8">
|
246 |
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/ios-download.svg' ?>"/>
|
247 |
</a>
|
250 |
</a>
|
251 |
</div>
|
252 |
</div>
|
253 |
+
<div class="sui-box-settings-row">
|
254 |
+
<div class="sui-box-settings-col-1">
|
255 |
+
<span class="sui-settings-label">
|
256 |
+
<?php _e( "Active Users", "defender-security" ) ?>
|
257 |
+
</span>
|
258 |
+
<span class="sui-description">
|
259 |
<?php _e( "Here’s a quick link to see which of your users have enabled two-factor verification.", "defender-security" ) ?>
|
260 |
</span>
|
261 |
</div>
|
262 |
+
<div class="sui-box-settings-col-2">
|
263 |
<?php printf( __( "<a href=\"%s\">View users</a> who have enabled this feature.", "defender-security" ), network_admin_url( 'users.php' ) ) ?>
|
264 |
</div>
|
265 |
</div>
|
266 |
+
<div class="sui-box-settings-row">
|
267 |
+
<div class="sui-box-settings-col-1">
|
268 |
+
<span class="sui-settings-label">
|
269 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
270 |
+
</span>
|
271 |
+
<span class="sui-description">
|
272 |
<?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
|
273 |
</span>
|
274 |
</div>
|
275 |
+
<div class="sui-box-settings-col-2">
|
276 |
+
<button type="button" class="sui-button sui-button-ghost deactivate-2factor">
|
277 |
<?php _e( "Deactivate", "defender-security" ) ?>
|
278 |
</button>
|
279 |
</div>
|
280 |
</div>
|
281 |
+
</div>
|
282 |
+
<div class="sui-box-footer">
|
283 |
<input type="hidden" name="action" value="saveAdvancedSettings"/>
|
284 |
<?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
|
285 |
+
<div class="sui-actions-right">
|
286 |
+
<button type="submit" class="sui-button sui-button-blue">
|
287 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
288 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
289 |
+
</div>
|
290 |
+
</div>
|
291 |
+
</form>
|
292 |
+
<?php
|
293 |
+
$view = '2factor-otp-email-edit-from';
|
294 |
+
$settings = array( 'settings' => $settings );
|
295 |
+
$controller->renderPartial( $view, $settings );
|
296 |
+
?>
|
297 |
+
</div>
|
app/module/advanced-tools/view/mask-login/disabled.php
CHANGED
@@ -1,24 +1,28 @@
|
|
1 |
-
<div class="
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
<?php _e( 'Change the location of WordPress’s default login area, making it harder for automated bots to find and also more convenient for your users.', "defender-security" ) ?>
|
11 |
-
</p>
|
12 |
-
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Mask Login Area", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
+
</div>
|
7 |
+
<div class="sui-message">
|
8 |
+
<img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>" class="sui-image"
|
9 |
+
aria-hidden="true">
|
|
|
|
|
|
|
10 |
|
11 |
+
<div class="sui-message-content">
|
12 |
+
|
13 |
+
<p>
|
14 |
+
<?php _e( 'Change the location of WordPress’s default login area, making it harder for automated bots to find and also more convenient for your users.', "defender-security" ) ?>
|
15 |
+
</p>
|
16 |
+
|
17 |
+
<form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
|
18 |
+
<input type="hidden" name="action" value="saveATMaskLoginSettings"/>
|
19 |
+
<?php wp_nonce_field( 'saveATMaskLoginSettings' ) ?>
|
20 |
+
<input type="hidden" name="enabled" value="1"/>
|
21 |
+
<button type="submit" class="sui-button sui-button-blue">
|
22 |
+
<?php _e( "Activate", "defender-security" ) ?></button>
|
23 |
+
</form>
|
24 |
+
|
25 |
+
</div>
|
26 |
+
|
27 |
+
</div>
|
28 |
+
</div>
|
app/module/advanced-tools/view/mask-login/enabled.php
CHANGED
@@ -1,93 +1,116 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3 class="
|
4 |
<?php _e( "Mask Login Area", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
-
<
|
8 |
-
<
|
9 |
-
<p
|
|
|
|
|
10 |
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
11 |
-
<div class="
|
12 |
-
<
|
13 |
-
|
|
|
14 |
</div>
|
15 |
<?php else: ?>
|
16 |
<?php if ( strlen( trim( $settings->maskUrl ) ) == 0 ): ?>
|
17 |
-
<div class="
|
18 |
-
<
|
19 |
-
|
|
|
20 |
</div>
|
21 |
<?php else: ?>
|
22 |
-
<div class="
|
23 |
-
<
|
24 |
-
|
|
|
25 |
</div>
|
26 |
<?php endif; ?>
|
27 |
<?php endif; ?>
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
<
|
34 |
-
|
35 |
-
<?php _e( 'Choose a new slug where users of your website will now login instead of visiting /wp-login.', "defender-security" ) ?>
|
36 |
</span>
|
37 |
</div>
|
38 |
-
|
39 |
-
|
40 |
-
<span class="
|
41 |
-
|
42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
</div>
|
44 |
</div>
|
45 |
-
<div class="
|
46 |
-
<div class="
|
47 |
-
<
|
48 |
-
|
49 |
-
|
|
|
|
|
50 |
</span>
|
51 |
</div>
|
52 |
-
|
53 |
-
|
|
|
54 |
<input type="hidden" name="redirectTraffic" value="0"/>
|
55 |
-
<input type="checkbox"
|
56 |
-
value="1"
|
57 |
-
|
58 |
-
<
|
59 |
-
</
|
60 |
-
<
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
<input type="text" class="
|
67 |
-
value="<?php echo $settings->redirectTrafficUrl ?>"
|
68 |
-
|
69 |
-
<
|
70 |
-
|
71 |
-
</p>
|
72 |
-
<?php endif; ?>
|
73 |
</div>
|
74 |
</div>
|
75 |
</div>
|
76 |
-
<div class="
|
77 |
-
<div class="
|
78 |
-
<
|
|
|
|
|
|
|
|
|
|
|
79 |
</div>
|
80 |
-
<div class="
|
81 |
-
<button type="button" class="button button-
|
82 |
-
|
83 |
</button>
|
84 |
</div>
|
85 |
</div>
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
<div class="
|
91 |
-
|
92 |
-
|
|
|
|
|
|
|
|
|
93 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
<?php _e( "Mask Login Area", "defender-security" ) ?>
|
5 |
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" id="ad-mask-settings-frm" class="advanced-settings-frm">
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
+
<?php _e( "Change your default WordPress login URL to hide your login area from hackers and bots.", "defender-security" ) ?>
|
11 |
+
</p>
|
12 |
<?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
|
13 |
+
<div class="sui-notice sui-notice-error">
|
14 |
+
<p>
|
15 |
+
<?php echo implode( '<br/>', array_unique( wp_defender()->global['compatibility'] ) ); ?>
|
16 |
+
</p>
|
17 |
</div>
|
18 |
<?php else: ?>
|
19 |
<?php if ( strlen( trim( $settings->maskUrl ) ) == 0 ): ?>
|
20 |
+
<div class="sui-notice sui-notice-warning">
|
21 |
+
<p>
|
22 |
+
<?php _e( "Masking is currently inactive. Choose your URL and save your settings to finish setup. ", "defender-security" ) ?>
|
23 |
+
</p>
|
24 |
</div>
|
25 |
<?php else: ?>
|
26 |
+
<div class="sui-notice sui-notice-info">
|
27 |
+
<p>
|
28 |
+
<?php printf( __( "Masking is currently active at <strong>%s</strong>", "defender-security" ), \WP_Defender\Module\Advanced_Tools\Component\Mask_Api::getNewLoginUrl() ) ?>
|
29 |
+
</p>
|
30 |
</div>
|
31 |
<?php endif; ?>
|
32 |
<?php endif; ?>
|
33 |
+
<div class="sui-box-settings-row">
|
34 |
+
<div class="sui-box-settings-col-1">
|
35 |
+
<span class="sui-settings-label">
|
36 |
+
<?php _e( "Masking URL", "defender-security" ) ?>
|
37 |
+
</span>
|
38 |
+
<span class="sui-description">
|
39 |
+
<?php _e( 'Choose the new URL slug where users of your website will now navigate to log in or register.', "defender-security" ) ?>
|
|
|
40 |
</span>
|
41 |
</div>
|
42 |
+
|
43 |
+
<div class="sui-box-settings-col-2">
|
44 |
+
<span class="sui-description">
|
45 |
+
<?php _e( "You can specify any URLs. For security reasons, less obvious URLs are recommended as they are harder for bots to guess.", "defender-security" ) ?>
|
46 |
+
</span>
|
47 |
+
<div class="sui-form-field">
|
48 |
+
<label class="sui-label"><?php _e( 'New Login URL', "defender-security" ) ?></label>
|
49 |
+
<input type="text" class="sui-form-control" name="maskUrl"
|
50 |
+
value="<?php echo $settings->maskUrl ?>"
|
51 |
+
placeholder="<?php _e( 'I.e. dashboard', "defender-security" ); ?>"/>
|
52 |
+
<span class="sui-description">
|
53 |
+
<?php printf( __( "Users will login at <a href='%s'>%s</a>. Note: Registration and Password Reset emails have hardcoded URLs in them. We will update them automatically to match your new login URL.", "defender-security" ), get_site_url() . '/' . $settings->maskUrl,get_site_url() . '/' . $settings->maskUrl ) ?>
|
54 |
+
</span>
|
55 |
+
</div>
|
56 |
</div>
|
57 |
</div>
|
58 |
+
<div class="sui-box-settings-row">
|
59 |
+
<div class="sui-box-settings-col-1">
|
60 |
+
<span class="sui-settings-label">
|
61 |
+
<?php _e( "Redirect traffic", "defender-security" ) ?>
|
62 |
+
</span>
|
63 |
+
<span class="sui-description">
|
64 |
+
<?php _e( 'With this feature you can send visitors and bots who try to visit the default Wordpress login URLs to a separate URL to avoid 404s.', "defender-security" ) ?>
|
65 |
</span>
|
66 |
</div>
|
67 |
+
|
68 |
+
<div class="sui-box-settings-col-2">
|
69 |
+
<label class="sui-toggle">
|
70 |
<input type="hidden" name="redirectTraffic" value="0"/>
|
71 |
+
<input role="presentation" type="checkbox" name="redirectTraffic" class="toggle-checkbox"
|
72 |
+
id="redirectTraffic" value="1"
|
73 |
+
<?php checked( true, $settings->redirectTraffic ) ?>/>
|
74 |
+
<span class="sui-toggle-slider"></span>
|
75 |
+
</label>
|
76 |
+
<label for="lostPhone" class="sui-toggle-label">
|
77 |
+
<?php _e( "Enable 404 redirection", "defender-security" ) ?>
|
78 |
+
</label>
|
79 |
+
<div id="redirectTrafficContainer" class="sui-border-frame sui-toggle-content"
|
80 |
+
aria-hidden="<?php echo (bool)! $settings->redirectTraffic ?>">
|
81 |
+
<label class="sui-label"><?php _e( "Redirection URL", "defender-security" ) ?></label>
|
82 |
+
<input type="text" class="sui-form-control" name="redirectTrafficUrl"
|
83 |
+
value="<?php echo $settings->redirectTrafficUrl ?>"/>
|
84 |
+
<span class="sui-description">
|
85 |
+
<?php printf( __( "Visitors who visit the default login URLs will be redirected to <a href='%s'>%s</a>", "defender-security" ), get_site_url() . '/' . $settings->redirectTrafficUrl,get_site_url() . '/' . $settings->redirectTrafficUrl ) ?>
|
86 |
+
</span>
|
|
|
|
|
87 |
</div>
|
88 |
</div>
|
89 |
</div>
|
90 |
+
<div class="sui-box-settings-row">
|
91 |
+
<div class="sui-box-settings-col-1">
|
92 |
+
<span class="sui-settings-label">
|
93 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
94 |
+
</span>
|
95 |
+
<span class="sui-description">
|
96 |
+
<?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
|
97 |
+
</span>
|
98 |
</div>
|
99 |
+
<div class="sui-box-settings-col-2">
|
100 |
+
<button type="button" class="sui-button sui-button-ghost deactivate-atmasking">
|
101 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
102 |
</button>
|
103 |
</div>
|
104 |
</div>
|
105 |
+
</div>
|
106 |
+
<div class="sui-box-footer">
|
107 |
+
<input type="hidden" name="action" value="saveATMaskLoginSettings"/>
|
108 |
+
<?php wp_nonce_field( 'saveATMaskLoginSettings' ) ?>
|
109 |
+
<div class="sui-actions-right">
|
110 |
+
<button type="submit" class="sui-button sui-button-blue">
|
111 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
112 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
113 |
+
</div>
|
114 |
+
</div>
|
115 |
+
</form>
|
116 |
</div>
|
app/module/audit/behavior/audit-free.php
CHANGED
@@ -12,27 +12,34 @@ use WP_Defender\Module\Audit\Model\Settings;
|
|
12 |
class Audit_Free extends Behavior {
|
13 |
public function renderAuditWidget() {
|
14 |
?>
|
15 |
-
<div class="
|
16 |
-
<div class="box-
|
17 |
-
<
|
18 |
-
|
19 |
-
|
20 |
-
|
|
|
|
|
|
|
21 |
</div>
|
22 |
-
<div class="box-
|
23 |
-
<div class="
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
</div>
|
28 |
-
<div class="
|
29 |
-
<
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
|
|
|
|
|
|
33 |
</div>
|
34 |
</div>
|
35 |
-
<div class="clear"></div>
|
36 |
</div>
|
37 |
</div>
|
38 |
<?php
|
12 |
class Audit_Free extends Behavior {
|
13 |
public function renderAuditWidget() {
|
14 |
?>
|
15 |
+
<div class="sui-box">
|
16 |
+
<div class="sui-box-header">
|
17 |
+
<h3 class="sui-box-title">
|
18 |
+
<i class="sui-icon-eye" aria-hidden="true"></i>
|
19 |
+
<?php _e( "Audit Logging", "defender-security" ) ?>
|
20 |
+
</h3>
|
21 |
+
<div class="sui-actions-left">
|
22 |
+
<span class="sui-tag sui-tag-pro"><?php _e( "Pro", "defender-security" ) ?></span>
|
23 |
+
</div>
|
24 |
</div>
|
25 |
+
<div class="sui-box-body sui-upsell-items">
|
26 |
+
<div class="sui-box-settings-row no-margin-bottom">
|
27 |
+
<p>
|
28 |
+
<?php _e( "Track and log events when changes are made to your website giving you full visibility of what’s going on behind the scenes.", "defender-security" ) ?>
|
29 |
+
</p>
|
30 |
</div>
|
31 |
+
<div class="sui-box-settings-row sui-upsell-row">
|
32 |
+
<img class="sui-image sui-upsell-image"
|
33 |
+
src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/audit-presale.svg' ?>">
|
34 |
+
<div class="sui-upsell-notice">
|
35 |
+
<p>
|
36 |
+
<?php
|
37 |
+
printf( __( "Audit Logging is a Pro feature that requires a WPMU DEV monthly membership. <a target='_blank' href='%s'>Try it out today</a>!", "defender-security" ),
|
38 |
+
Utils::instance()->campaignURL( 'defender_dash_auditlogging_upsell_link' ) )
|
39 |
+
?>
|
40 |
+
</p>
|
41 |
</div>
|
42 |
</div>
|
|
|
43 |
</div>
|
44 |
</div>
|
45 |
<?php
|
app/module/audit/controller/main-free.php
CHANGED
@@ -41,7 +41,8 @@ class Main_Free extends \WP_Defender\Controller {
|
|
41 |
|
42 |
public function scripts() {
|
43 |
if ( $this->isInPage() ) {
|
44 |
-
|
|
|
45 |
wp_enqueue_script( 'defender' );
|
46 |
wp_enqueue_style( 'defender' );
|
47 |
wp_enqueue_script( 'audit', wp_defender()->getPluginUrl() . 'app/module/audit/js/script.js', array(
|
41 |
|
42 |
public function scripts() {
|
43 |
if ( $this->isInPage() ) {
|
44 |
+
wp_enqueue_script( 'wpmudev-sui' );
|
45 |
+
wp_enqueue_style( 'wpmudev-sui' );
|
46 |
wp_enqueue_script( 'defender' );
|
47 |
wp_enqueue_style( 'defender' );
|
48 |
wp_enqueue_script( 'audit', wp_defender()->getPluginUrl() . 'app/module/audit/js/script.js', array(
|
app/module/audit/view/free.php
CHANGED
@@ -1,23 +1,33 @@
|
|
1 |
-
<div class="wrap">
|
2 |
<div class="wp-defender">
|
3 |
<div class="auditing">
|
4 |
-
<
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
</div>
|
11 |
-
<div class="
|
12 |
-
<img class="
|
13 |
-
<div class="
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
15 |
</div>
|
16 |
-
<a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_auditlogging_upgrade_button') ?>" target="_blank"
|
17 |
-
class="button button-green"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
|
18 |
</div>
|
19 |
</div>
|
20 |
</div>
|
21 |
</div>
|
22 |
</div>
|
23 |
-
<?php $controller->renderPartial('pro-feature') ?>
|
1 |
+
<div class="sui-wrap">
|
2 |
<div class="wp-defender">
|
3 |
<div class="auditing">
|
4 |
+
<div class="sui-header">
|
5 |
+
<h1 class="sui-header-title">
|
6 |
+
<?php _e( "Aduit Logging", "defender-security" ) ?>
|
7 |
+
</h1>
|
8 |
+
</div>
|
9 |
+
<div class="sui-box">
|
10 |
+
<div class="sui-box-header">
|
11 |
+
<h3 class="sui-box-title">
|
12 |
+
<?php _e( "Audit Logging", "defender-security" ) ?>
|
13 |
+
</h3>
|
14 |
+
<div class="sui-actions-left">
|
15 |
+
<span class="sui-tag sui-tag-pro">Pro</span>
|
16 |
+
</div>
|
17 |
</div>
|
18 |
+
<div class="sui-message">
|
19 |
+
<img class="sui-image" src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/audit-free.svg"/>
|
20 |
+
<div class="sui-message-content">
|
21 |
+
<p>
|
22 |
+
<?php _e( "Track and log each and every event when changes are made to your website and get detailed reports on what’s going on behind the scenes, including any hacking attempts on your site. This is a pro feature that requires an active WPMU DEV membership. Try it free today!", "defender-security" ) ?>
|
23 |
+
</p>
|
24 |
+
<a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_auditlogging_upgrade_button' ) ?>"
|
25 |
+
target="_blank"
|
26 |
+
class="sui-button sui-button-purple"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
|
27 |
</div>
|
|
|
|
|
28 |
</div>
|
29 |
</div>
|
30 |
</div>
|
31 |
</div>
|
32 |
</div>
|
33 |
+
<?php $controller->renderPartial( 'pro-feature' ) ?>
|
app/module/hardener/behavior/widget.php
CHANGED
@@ -11,57 +11,65 @@ use WP_Defender\Module\Hardener\Model\Settings;
|
|
11 |
class Widget extends Behavior {
|
12 |
public function renderHardenerWidget() {
|
13 |
$issues = Settings::instance()->getIssues();
|
|
|
14 |
$issues = array_slice( $issues, 0, 3 );
|
15 |
?>
|
16 |
-
<div class="
|
17 |
-
<div class="box-
|
18 |
-
<
|
19 |
-
|
20 |
-
<?php
|
21 |
-
$hardener_issues = count( Settings::instance()->issues );
|
22 |
-
if ( $hardener_issues ): ?>
|
23 |
-
<span class="def-tag tag-yellow"
|
24 |
-
tooltip="<?php esc_attr_e( sprintf( __('You have %d security tweak(s) needing attention.', "defender-security" ), $hardener_issues ) ); ?>">
|
25 |
-
<?php
|
26 |
-
echo $hardener_issues ?>
|
27 |
-
</span>
|
28 |
-
<?php endif; ?>
|
29 |
</h3>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
</div>
|
31 |
-
<div class="box-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
defense against hackers and bots.", "defender-security" ) ?>
|
36 |
-
</div>
|
37 |
<?php if ( $count ): ?>
|
38 |
-
|
39 |
-
<?php
|
40 |
-
foreach ( $issues as $issue ):
|
41 |
-
?>
|
42 |
-
<li>
|
43 |
-
<div>
|
44 |
-
<a target="_blank"
|
45 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener#' . $issue::$slug ) ?>">
|
46 |
-
<span class="list-label"><i
|
47 |
-
class="def-icon icon-h-warning"></i><?php echo $issue->getTitle(); ?></span>
|
48 |
-
</a>
|
49 |
-
</div>
|
50 |
-
</li>
|
51 |
-
<?php endforeach;
|
52 |
-
?>
|
53 |
-
</ul>
|
54 |
<?php else: ?>
|
55 |
-
<div class="
|
56 |
-
<
|
57 |
-
|
|
|
|
|
|
|
58 |
</div>
|
59 |
<?php endif; ?>
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
</div>
|
66 |
</div>
|
67 |
</div>
|
11 |
class Widget extends Behavior {
|
12 |
public function renderHardenerWidget() {
|
13 |
$issues = Settings::instance()->getIssues();
|
14 |
+
$count = count( $issues );
|
15 |
$issues = array_slice( $issues, 0, 3 );
|
16 |
?>
|
17 |
+
<div class="sui-box hardener-widget">
|
18 |
+
<div class="sui-box-header">
|
19 |
+
<h3 class="sui-box-title">
|
20 |
+
<i class="sui-icon-wrench-tool" aria-hidden="true"></i>
|
21 |
+
<?php _e( "Security Tweaks", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
</h3>
|
23 |
+
<?php
|
24 |
+
if ( $count ): ?>
|
25 |
+
<div class="sui-actions-left">
|
26 |
+
<div class="sui-tag sui-tag-warning">
|
27 |
+
<?php echo $count ?>
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
<?php endif; ?>
|
31 |
</div>
|
32 |
+
<div class="sui-box-body">
|
33 |
+
<p>
|
34 |
+
<?php _e( "Defender checks for basic security tweaks you can make to enhance your website’s defense against hackers and bots.", "defender-security" ) ?>
|
35 |
+
</p>
|
|
|
|
|
36 |
<?php if ( $count ): ?>
|
37 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
<?php else: ?>
|
39 |
+
<div class="sui-notice sui-notice-success">
|
40 |
+
<p>
|
41 |
+
<?php
|
42 |
+
_e( "You’ve actioned all of the recommended security tweaks.", "defender-security" )
|
43 |
+
?>
|
44 |
+
</p>
|
45 |
</div>
|
46 |
<?php endif; ?>
|
47 |
+
</div>
|
48 |
+
<?php if ( $count ): ?>
|
49 |
+
<div class="sui-accordion sui-accordion-flushed no-border-bottom">
|
50 |
+
<?php foreach ( $issues as $issue ): ?>
|
51 |
+
<div class="sui-accordion-item sui-warning"
|
52 |
+
onClick="window.location = '<?php echo network_admin_url( 'admin.php?page=wdf-hardener#' . $issue::$slug ) ?>'">
|
53 |
+
<div class="sui-accordion-item-header">
|
54 |
+
<div class="sui-accordion-item-title">
|
55 |
+
<i aria-hidden="true" class="sui-icon-warning-alert sui-warning"></i>
|
56 |
+
<?php echo $issue->getTitle() ?>
|
57 |
+
<div class="sui-actions-right">
|
58 |
+
<i class="sui-icon-chevron-right" aria-hidden="true"></i>
|
59 |
+
</div>
|
60 |
+
</div>
|
61 |
+
</div>
|
62 |
+
</div>
|
63 |
+
<?php endforeach; ?>
|
64 |
+
</div>
|
65 |
+
<?php endif; ?>
|
66 |
+
<div class="sui-box-footer">
|
67 |
+
<div class="sui-actions-left">
|
68 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener' ) ?>"
|
69 |
+
class="sui-button sui-button-ghost">
|
70 |
+
<i class="sui-icon-eye" aria-hidden="true"></i>
|
71 |
+
<?php _e( "View All", "defender-security" ) ?>
|
72 |
+
</a>
|
73 |
</div>
|
74 |
</div>
|
75 |
</div>
|
app/module/hardener/component/change-admin.php
CHANGED
@@ -54,7 +54,7 @@ class Change_Admin extends Rule {
|
|
54 |
Settings::instance()->addToResolved( self::$slug );
|
55 |
wp_send_json_success( array(
|
56 |
'message' => sprintf( __( "Your admin name has changed. You will need to <a href='%s'><strong>%s</strong></a>.<br/>This will auto reload after <span class='hardener-timer'>10</span> seconds.", "defender-security" ), wp_login_url( network_admin_url( 'admin.php?page=wdf-hardener' ) ), "re-login" ),
|
57 |
-
'reload' =>
|
58 |
'url' => wp_login_url( network_admin_url( 'admin.php?page=wdf-hardener' ) )
|
59 |
) );
|
60 |
}
|
54 |
Settings::instance()->addToResolved( self::$slug );
|
55 |
wp_send_json_success( array(
|
56 |
'message' => sprintf( __( "Your admin name has changed. You will need to <a href='%s'><strong>%s</strong></a>.<br/>This will auto reload after <span class='hardener-timer'>10</span> seconds.", "defender-security" ), wp_login_url( network_admin_url( 'admin.php?page=wdf-hardener' ) ), "re-login" ),
|
57 |
+
'reload' => 5,
|
58 |
'url' => wp_login_url( network_admin_url( 'admin.php?page=wdf-hardener' ) )
|
59 |
) );
|
60 |
}
|
app/module/hardener/component/db-prefix-service.php
CHANGED
@@ -218,7 +218,9 @@ class DB_Prefix_Service extends Rule_Service implements IRule_Service {
|
|
218 |
}
|
219 |
|
220 |
public function revert() {
|
221 |
-
|
|
|
|
|
222 |
}
|
223 |
|
224 |
public function listen() {
|
218 |
}
|
219 |
|
220 |
public function revert() {
|
221 |
+
$this->new_prefix = 'wp_';
|
222 |
+
|
223 |
+
return $this->process();
|
224 |
}
|
225 |
|
226 |
public function listen() {
|
app/module/hardener/component/db-prefix.php
CHANGED
@@ -23,10 +23,21 @@ class DB_Prefix extends Rule {
|
|
23 |
|
24 |
function addHooks() {
|
25 |
$this->add_action( 'processingHardener' . self::$slug, 'process' );
|
|
|
26 |
}
|
27 |
|
28 |
function revert() {
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
}
|
31 |
|
32 |
public function getTitle() {
|
23 |
|
24 |
function addHooks() {
|
25 |
$this->add_action( 'processingHardener' . self::$slug, 'process' );
|
26 |
+
$this->add_action( 'processRevert' . self::$slug, 'revert' );
|
27 |
}
|
28 |
|
29 |
function revert() {
|
30 |
+
if ( ! $this->verifyNonce() ) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
$ret = $this->getService()->revert();
|
34 |
+
if ( ! is_wp_error( $ret ) ) {
|
35 |
+
Settings::instance()->addToIssues( self::$slug );
|
36 |
+
} else {
|
37 |
+
wp_send_json_error( array(
|
38 |
+
'message' => $ret->get_error_message()
|
39 |
+
) );
|
40 |
+
}
|
41 |
}
|
42 |
|
43 |
public function getTitle() {
|
app/module/hardener/component/hide-error-service.php
CHANGED
@@ -19,7 +19,7 @@ class Hide_Error_Service extends Rule_Service implements IRule_Service {
|
|
19 |
public function check() {
|
20 |
//we will start a request to see if it is showing error
|
21 |
$altCache = WP_Helper::getArrayCache();
|
22 |
-
$cached
|
23 |
if ( $cached === null ) {
|
24 |
//tmp turn off error log
|
25 |
$isLog = ini_get( 'log_errors' );
|
@@ -35,7 +35,7 @@ class Hide_Error_Service extends Rule_Service implements IRule_Service {
|
|
35 |
ini_set( 'log_errors', 1 );
|
36 |
}
|
37 |
if ( strpos( $body, ABSPATH . 'wp-includes/theme-compat/embed.php' ) !== false ||
|
38 |
-
|
39 |
$altCache->set( 'Hide_Error_Service', 0 );
|
40 |
|
41 |
return false;
|
@@ -149,10 +149,14 @@ class Hide_Error_Service extends Rule_Service implements IRule_Service {
|
|
149 |
}
|
150 |
|
151 |
public function revert() {
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
|
|
|
|
|
|
|
|
156 |
}
|
157 |
|
158 |
public function listen() {
|
19 |
public function check() {
|
20 |
//we will start a request to see if it is showing error
|
21 |
$altCache = WP_Helper::getArrayCache();
|
22 |
+
$cached = $altCache->get( 'Hide_Error_Service', null );
|
23 |
if ( $cached === null ) {
|
24 |
//tmp turn off error log
|
25 |
$isLog = ini_get( 'log_errors' );
|
35 |
ini_set( 'log_errors', 1 );
|
36 |
}
|
37 |
if ( strpos( $body, ABSPATH . 'wp-includes/theme-compat/embed.php' ) !== false ||
|
38 |
+
WP_DEBUG == true && ( ! defined( 'WP_DEBUG_DISPLAY' ) || WP_DEBUG_DISPLAY != false ) ) {
|
39 |
$altCache->set( 'Hide_Error_Service', 0 );
|
40 |
|
41 |
return false;
|
149 |
}
|
150 |
|
151 |
public function revert() {
|
152 |
+
$config_path = $this->retrieveWPConfigPath();
|
153 |
+
//check if can write
|
154 |
+
if ( ! is_writeable( $config_path ) ) {
|
155 |
+
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
156 |
+
sprintf( __( "The file %s is not writable", "defender-security" ), $config_path ) );
|
157 |
+
}
|
158 |
+
$config = file( $config_path );
|
159 |
+
|
160 |
}
|
161 |
|
162 |
public function listen() {
|
app/module/hardener/component/login-duration.php
CHANGED
@@ -13,21 +13,22 @@ use WP_Defender\Behavior\Utils;
|
|
13 |
|
14 |
class Login_Duration extends Rule {
|
15 |
|
16 |
-
|
17 |
|
18 |
-
|
19 |
|
20 |
-
|
21 |
* @return Login_Duration_Service
|
22 |
*/
|
23 |
public function getService() {
|
24 |
if ( self::$service == null ) {
|
25 |
self::$service = new Login_Duration_Service();
|
26 |
}
|
|
|
27 |
return self::$service;
|
28 |
}
|
29 |
|
30 |
-
|
31 |
$this->renderPartial( 'rules/login-duration' );
|
32 |
}
|
33 |
|
@@ -38,7 +39,7 @@ class Login_Duration extends Rule {
|
|
38 |
return __( "Manage Login Duration", "defender-security" );
|
39 |
}
|
40 |
|
41 |
-
|
42 |
* @return bool
|
43 |
*/
|
44 |
function check() {
|
@@ -48,22 +49,22 @@ class Login_Duration extends Rule {
|
|
48 |
function addHooks() {
|
49 |
$this->add_action( 'processingHardener' . self::$slug, 'process' );
|
50 |
$this->add_action( 'processRevert' . self::$slug, 'revert' );
|
51 |
-
$this->add_action( 'wp_login', 'login_action_handler',
|
52 |
if ( $this->check() ) {
|
53 |
$this->add_filter( 'auth_cookie_expiration', 'cookie_duration', 10, 3 );
|
54 |
$this->add_filter( 'login_message', 'login_message' );
|
55 |
$this->add_action( 'wp_loaded', 'check_login' );
|
56 |
}
|
57 |
-
|
58 |
}
|
59 |
|
60 |
-
|
61 |
if ( ! $this->verifyNonce() ) {
|
62 |
return;
|
63 |
}
|
64 |
-
$settings
|
65 |
-
$service
|
66 |
-
$ret
|
67 |
if ( ! is_wp_error( $ret ) ) {
|
68 |
Settings::instance()->addToIssues( self::$slug );
|
69 |
} else {
|
@@ -77,8 +78,8 @@ class Login_Duration extends Rule {
|
|
77 |
if ( ! $this->verifyNonce() ) {
|
78 |
return;
|
79 |
}
|
80 |
-
$service
|
81 |
-
$duration
|
82 |
if ( is_numeric( $duration ) && intval( $duration ) > 0 ) {
|
83 |
$service->setDuration( $duration );
|
84 |
$ret = $service->process();
|
@@ -100,14 +101,14 @@ class Login_Duration extends Rule {
|
|
100 |
* Set the last login user meta
|
101 |
*/
|
102 |
function login_action_handler( $user_login, $user = '' ) {
|
103 |
-
if ( $user == '' ){
|
104 |
$user = get_user_by( 'login', $user_login );
|
105 |
}
|
106 |
-
if (
|
107 |
return;
|
108 |
}
|
109 |
$last_login_time = current_time( 'mysql' );
|
110 |
-
|
111 |
}
|
112 |
|
113 |
/**
|
@@ -115,22 +116,22 @@ class Login_Duration extends Rule {
|
|
115 |
*/
|
116 |
function check_login() {
|
117 |
$defender_logout = HTTP_Helper::retrieve_get( 'defender_logout', false );
|
118 |
-
if( is_user_logged_in() ) {
|
119 |
-
$current_user
|
120 |
-
$user_id
|
121 |
-
if (
|
122 |
-
$current_time
|
123 |
-
$last_login_time
|
124 |
-
$login_period
|
125 |
if ( $last_login_time ) {
|
126 |
-
$current_time
|
127 |
-
$last_login_time
|
128 |
-
$diff
|
129 |
//Check if the current and login times are not the same
|
130 |
//so we dont kick out someone who set it to 0
|
131 |
-
if( ( $current_time != $last_login_time ) && $diff > $login_period ) {
|
132 |
-
$current_url
|
133 |
-
$after_logout_payload = array( 'redirect_to' => $current_url, 'msg'=>'session_expired' );
|
134 |
if ( is_multisite() ) {
|
135 |
set_site_transient( 'defender_logout_payload', $after_logout_payload, 30 * 60 );
|
136 |
}
|
@@ -144,7 +145,7 @@ class Login_Duration extends Rule {
|
|
144 |
$last_login_time = current_time( 'mysql' );
|
145 |
update_user_meta( $user_id, 'last_login_time', $last_login_time );
|
146 |
}
|
147 |
-
} else{
|
148 |
delete_user_meta( $user_id, 'last_login_time' );
|
149 |
wp_logout();
|
150 |
$after_logout = HTTP_Helper::retrieve_get( 'after_logout', false );
|
@@ -153,13 +154,13 @@ class Login_Duration extends Rule {
|
|
153 |
wp_redirect( $after_logout_url );
|
154 |
exit;
|
155 |
}
|
156 |
-
$login_url
|
157 |
$logout_payload = ( is_multisite() ? get_site_transient( 'defender_logout_payload' ) : get_transient( 'defender_logout_payload' ) );
|
158 |
|
159 |
$login_url = add_query_arg( array(
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
wp_redirect( $login_url );
|
164 |
exit;
|
165 |
}
|
@@ -169,13 +170,13 @@ class Login_Duration extends Rule {
|
|
169 |
$after_logout_url = esc_url( $after_logout );
|
170 |
wp_redirect( $after_logout_url );
|
171 |
}
|
172 |
-
$login_url
|
173 |
$logout_payload = ( is_multisite() ? get_site_transient( 'defender_logout_payload' ) : get_transient( 'defender_logout_payload' ) );
|
174 |
|
175 |
$login_url = add_query_arg( array(
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
wp_redirect( $login_url );
|
180 |
exit;
|
181 |
}
|
@@ -188,15 +189,16 @@ class Login_Duration extends Rule {
|
|
188 |
*/
|
189 |
function login_message( $message = '' ) {
|
190 |
$login_msg = HTTP_Helper::retrieve_get( 'defender_login_message', false );
|
191 |
-
if( $login_msg ) {
|
192 |
$logout_msg = strip_tags( $login_msg );
|
193 |
if ( $logout_msg == 'session_expired' ) {
|
194 |
$duration = $this->getService()->getDuration( false );
|
195 |
-
$msg
|
196 |
-
$msg
|
197 |
-
|
198 |
}
|
199 |
}
|
|
|
200 |
return $message;
|
201 |
}
|
202 |
|
@@ -213,9 +215,10 @@ class Login_Duration extends Rule {
|
|
213 |
if ( $remember ) {
|
214 |
$duration = $this->getService()->getDuration( true );
|
215 |
}
|
|
|
216 |
return $duration;
|
217 |
}
|
218 |
-
|
219 |
}
|
220 |
|
221 |
?>
|
13 |
|
14 |
class Login_Duration extends Rule {
|
15 |
|
16 |
+
static $slug = 'login-duration';
|
17 |
|
18 |
+
static $service;
|
19 |
|
20 |
+
/**
|
21 |
* @return Login_Duration_Service
|
22 |
*/
|
23 |
public function getService() {
|
24 |
if ( self::$service == null ) {
|
25 |
self::$service = new Login_Duration_Service();
|
26 |
}
|
27 |
+
|
28 |
return self::$service;
|
29 |
}
|
30 |
|
31 |
+
function getDescription() {
|
32 |
$this->renderPartial( 'rules/login-duration' );
|
33 |
}
|
34 |
|
39 |
return __( "Manage Login Duration", "defender-security" );
|
40 |
}
|
41 |
|
42 |
+
/**
|
43 |
* @return bool
|
44 |
*/
|
45 |
function check() {
|
49 |
function addHooks() {
|
50 |
$this->add_action( 'processingHardener' . self::$slug, 'process' );
|
51 |
$this->add_action( 'processRevert' . self::$slug, 'revert' );
|
52 |
+
$this->add_action( 'wp_login', 'login_action_handler', 9, 2 );
|
53 |
if ( $this->check() ) {
|
54 |
$this->add_filter( 'auth_cookie_expiration', 'cookie_duration', 10, 3 );
|
55 |
$this->add_filter( 'login_message', 'login_message' );
|
56 |
$this->add_action( 'wp_loaded', 'check_login' );
|
57 |
}
|
58 |
+
|
59 |
}
|
60 |
|
61 |
+
function revert() {
|
62 |
if ( ! $this->verifyNonce() ) {
|
63 |
return;
|
64 |
}
|
65 |
+
$settings = Settings::instance();
|
66 |
+
$service = $this->getService();
|
67 |
+
$ret = $service->revert();
|
68 |
if ( ! is_wp_error( $ret ) ) {
|
69 |
Settings::instance()->addToIssues( self::$slug );
|
70 |
} else {
|
78 |
if ( ! $this->verifyNonce() ) {
|
79 |
return;
|
80 |
}
|
81 |
+
$service = $this->getService();
|
82 |
+
$duration = HTTP_Helper::retrieve_post( 'duration' );
|
83 |
if ( is_numeric( $duration ) && intval( $duration ) > 0 ) {
|
84 |
$service->setDuration( $duration );
|
85 |
$ret = $service->process();
|
101 |
* Set the last login user meta
|
102 |
*/
|
103 |
function login_action_handler( $user_login, $user = '' ) {
|
104 |
+
if ( $user == '' ) {
|
105 |
$user = get_user_by( 'login', $user_login );
|
106 |
}
|
107 |
+
if ( ! $user ) {
|
108 |
return;
|
109 |
}
|
110 |
$last_login_time = current_time( 'mysql' );
|
111 |
+
update_user_meta( $user->ID, 'last_login_time', $last_login_time );
|
112 |
}
|
113 |
|
114 |
/**
|
116 |
*/
|
117 |
function check_login() {
|
118 |
$defender_logout = HTTP_Helper::retrieve_get( 'defender_logout', false );
|
119 |
+
if ( is_user_logged_in() ) {
|
120 |
+
$current_user = wp_get_current_user();
|
121 |
+
$user_id = $current_user->ID;
|
122 |
+
if ( ! $defender_logout ) {
|
123 |
+
$current_time = current_time( 'mysql' );
|
124 |
+
$last_login_time = get_user_meta( $user_id, 'last_login_time', true );
|
125 |
+
$login_period = $this->getService()->getDuration( true );
|
126 |
if ( $last_login_time ) {
|
127 |
+
$current_time = strtotime( $current_time );
|
128 |
+
$last_login_time = strtotime( $last_login_time );
|
129 |
+
$diff = $current_time - $last_login_time;
|
130 |
//Check if the current and login times are not the same
|
131 |
//so we dont kick out someone who set it to 0
|
132 |
+
if ( ( $current_time != $last_login_time ) && $diff > $login_period ) {
|
133 |
+
$current_url = Utils::instance()->currentPageURL();
|
134 |
+
$after_logout_payload = array( 'redirect_to' => $current_url, 'msg' => 'session_expired' );
|
135 |
if ( is_multisite() ) {
|
136 |
set_site_transient( 'defender_logout_payload', $after_logout_payload, 30 * 60 );
|
137 |
}
|
145 |
$last_login_time = current_time( 'mysql' );
|
146 |
update_user_meta( $user_id, 'last_login_time', $last_login_time );
|
147 |
}
|
148 |
+
} else {
|
149 |
delete_user_meta( $user_id, 'last_login_time' );
|
150 |
wp_logout();
|
151 |
$after_logout = HTTP_Helper::retrieve_get( 'after_logout', false );
|
154 |
wp_redirect( $after_logout_url );
|
155 |
exit;
|
156 |
}
|
157 |
+
$login_url = wp_login_url();
|
158 |
$logout_payload = ( is_multisite() ? get_site_transient( 'defender_logout_payload' ) : get_transient( 'defender_logout_payload' ) );
|
159 |
|
160 |
$login_url = add_query_arg( array(
|
161 |
+
'redirect_to' => $logout_payload['redirect_to'],
|
162 |
+
'defender_login_message' => $logout_payload['msg'],
|
163 |
+
), $login_url );
|
164 |
wp_redirect( $login_url );
|
165 |
exit;
|
166 |
}
|
170 |
$after_logout_url = esc_url( $after_logout );
|
171 |
wp_redirect( $after_logout_url );
|
172 |
}
|
173 |
+
$login_url = wp_login_url();
|
174 |
$logout_payload = ( is_multisite() ? get_site_transient( 'defender_logout_payload' ) : get_transient( 'defender_logout_payload' ) );
|
175 |
|
176 |
$login_url = add_query_arg( array(
|
177 |
+
'redirect_to' => $logout_payload['redirect_to'],
|
178 |
+
'defender_login_message' => $logout_payload['msg'],
|
179 |
+
), $login_url );
|
180 |
wp_redirect( $login_url );
|
181 |
exit;
|
182 |
}
|
189 |
*/
|
190 |
function login_message( $message = '' ) {
|
191 |
$login_msg = HTTP_Helper::retrieve_get( 'defender_login_message', false );
|
192 |
+
if ( $login_msg ) {
|
193 |
$logout_msg = strip_tags( $login_msg );
|
194 |
if ( $logout_msg == 'session_expired' ) {
|
195 |
$duration = $this->getService()->getDuration( false );
|
196 |
+
$msg = sprintf( __( 'Your session has expired because it has been over %d days since your last login. Please log back in to continue.', "defender-security" ), $duration );
|
197 |
+
$msg = htmlspecialchars( $msg, ENT_QUOTES, 'UTF-8' );
|
198 |
+
$message .= '<p class="login message">' . $msg . '</p>';
|
199 |
}
|
200 |
}
|
201 |
+
|
202 |
return $message;
|
203 |
}
|
204 |
|
215 |
if ( $remember ) {
|
216 |
$duration = $this->getService()->getDuration( true );
|
217 |
}
|
218 |
+
|
219 |
return $duration;
|
220 |
}
|
221 |
+
|
222 |
}
|
223 |
|
224 |
?>
|
app/module/hardener/component/php-version-service.php
CHANGED
@@ -6,6 +6,7 @@
|
|
6 |
namespace WP_Defender\Module\Hardener\Component;
|
7 |
|
8 |
use WP_Defender\Module\Hardener\IRule_Service;
|
|
|
9 |
use WP_Defender\Module\Hardener\Rule_Service;
|
10 |
|
11 |
class PHP_Version_Service extends Rule_Service implements IRule_Service {
|
@@ -14,7 +15,8 @@ class PHP_Version_Service extends Rule_Service implements IRule_Service {
|
|
14 |
* @return bool
|
15 |
*/
|
16 |
public function check() {
|
17 |
-
|
|
|
18 |
return false;
|
19 |
}
|
20 |
|
@@ -32,4 +34,30 @@ class PHP_Version_Service extends Rule_Service implements IRule_Service {
|
|
32 |
public function listen() {
|
33 |
|
34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
}
|
6 |
namespace WP_Defender\Module\Hardener\Component;
|
7 |
|
8 |
use WP_Defender\Module\Hardener\IRule_Service;
|
9 |
+
use WP_Defender\Module\Hardener\Model\Settings;
|
10 |
use WP_Defender\Module\Hardener\Rule_Service;
|
11 |
|
12 |
class PHP_Version_Service extends Rule_Service implements IRule_Service {
|
15 |
* @return bool
|
16 |
*/
|
17 |
public function check() {
|
18 |
+
$this->queryVersion();
|
19 |
+
if ( version_compare( $this->getPHPVersion(),Settings::instance()->min_php_version , '<=' ) ) {
|
20 |
return false;
|
21 |
}
|
22 |
|
34 |
public function listen() {
|
35 |
|
36 |
}
|
37 |
+
|
38 |
+
protected function queryVersion() {
|
39 |
+
$lastCheck = get_site_transient( 'defender_last_check_php_versions' );
|
40 |
+
if ( ! $lastCheck || strtotime( '+24 hours', $lastCheck ) < time() ) {
|
41 |
+
$html = wp_remote_get( 'http://php.net/supported-versions.php' );
|
42 |
+
if ( is_wp_error( $html ) ) {
|
43 |
+
delete_site_transient('defender_last_check_php_versions');
|
44 |
+
return false;
|
45 |
+
}
|
46 |
+
$dom = new \DOMDocument;
|
47 |
+
libxml_use_internal_errors( true );
|
48 |
+
$dom->loadHTML( $html['body'] );
|
49 |
+
$finder = new \DOMXPath( $dom );
|
50 |
+
$classname = "security";
|
51 |
+
$securityNode = $finder->query( "//*[contains(@class, '$classname')]/td[1]/a" );
|
52 |
+
$securityNode = $securityNode->item( 0 )->nodeValue;
|
53 |
+
$classname = "stable";
|
54 |
+
$lastStable = $finder->query( "//*[contains(@class, '$classname')][2]/td[1]/a" );;
|
55 |
+
$lastStable = $lastStable->item( 0 )->nodeValue;
|
56 |
+
$settings = Settings::instance();
|
57 |
+
$settings->stable_php_version = $lastStable;
|
58 |
+
$settings->min_php_version = $securityNode;
|
59 |
+
$settings->save();
|
60 |
+
set_site_transient( 'defender_last_check_php_versions', time(), 60 * 60 * 24 );
|
61 |
+
}
|
62 |
+
}
|
63 |
}
|
app/module/hardener/component/prevent-php.php
CHANGED
@@ -42,6 +42,7 @@ class Prevent_Php extends Rule {
|
|
42 |
return;
|
43 |
}
|
44 |
$settings = Settings::instance();
|
|
|
45 |
if ( in_array( $settings->active_server, array( 'apache', 'litespeed' ) ) ) {
|
46 |
$service = $this->getApacheService();
|
47 |
$service->setHtConfig( $settings->getNewHtConfig() );
|
@@ -110,7 +111,7 @@ class Prevent_Php extends Rule {
|
|
110 |
if ( ! $this->verifyNonce() ) {
|
111 |
return;
|
112 |
}
|
113 |
-
$settings
|
114 |
|
115 |
$file_paths = HTTP_Helper::retrieve_post( 'file_paths' ); //File paths to ignore. Apache and litespeed mainly
|
116 |
if ( $file_paths ) {
|
42 |
return;
|
43 |
}
|
44 |
$settings = Settings::instance();
|
45 |
+
$server = $settings->active_server;
|
46 |
if ( in_array( $settings->active_server, array( 'apache', 'litespeed' ) ) ) {
|
47 |
$service = $this->getApacheService();
|
48 |
$service->setHtConfig( $settings->getNewHtConfig() );
|
111 |
if ( ! $this->verifyNonce() ) {
|
112 |
return;
|
113 |
}
|
114 |
+
$settings = Settings::instance();
|
115 |
|
116 |
$file_paths = HTTP_Helper::retrieve_post( 'file_paths' ); //File paths to ignore. Apache and litespeed mainly
|
117 |
if ( $file_paths ) {
|
app/module/hardener/component/protect-information-service.php
CHANGED
@@ -19,14 +19,19 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
19 |
public function check() {
|
20 |
$cache = WP_Helper::getArrayCache()->get( 'Protect_Information_Service', null );
|
21 |
if ( $cache === null ) {
|
22 |
-
$url
|
23 |
$ssl_verify = apply_filters( 'defender_ssl_verify', true ); //most hosts dont really have valid ssl or ssl still pending
|
24 |
-
$status
|
|
|
|
|
|
|
25 |
if ( 200 == wp_remote_retrieve_response_code( $status ) ) {
|
26 |
WP_Helper::getArrayCache()->set( 'Protect_Information_Service', false );
|
|
|
27 |
return false;
|
28 |
}
|
29 |
WP_Helper::getArrayCache()->set( 'Protect_Information_Service', true );
|
|
|
30 |
return true;
|
31 |
} else {
|
32 |
return $cache;
|
@@ -46,12 +51,24 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
46 |
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
47 |
}
|
48 |
$htConfig = file( $htPath );
|
49 |
-
$
|
50 |
-
$
|
51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
//append this
|
53 |
-
$htConfig = array_merge( $htConfig,
|
54 |
-
file_put_contents( $htPath, implode(
|
55 |
}
|
56 |
|
57 |
return true;
|
@@ -71,7 +88,7 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
71 |
$htConfig = file_get_contents( $htPath );
|
72 |
$rules = $this->apache_rule();
|
73 |
|
74 |
-
preg_match_all('/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches);
|
75 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
76 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
77 |
} else {
|
@@ -95,7 +112,7 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
95 |
protected static function apache_rule() {
|
96 |
$version = Utils::instance()->determineApacheVersion();
|
97 |
if ( floatval( $version ) >= 2.4 ) {
|
98 |
-
$rules
|
99 |
PHP_EOL . '## WP Defender - Prevent information disclosure ##' . PHP_EOL,
|
100 |
'<FilesMatch "\.(txt|md|exe|sh|bak|inc|pot|po|mo|log|sql)$">' . PHP_EOL .
|
101 |
'Require all denied' . PHP_EOL .
|
@@ -109,7 +126,7 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
109 |
'## WP Defender - End ##'
|
110 |
);
|
111 |
} else {
|
112 |
-
$rules
|
113 |
PHP_EOL . '## WP Defender - Prevent information disclosure ##' . PHP_EOL,
|
114 |
'<FilesMatch "\.(txt|md|exe|sh|bak|inc|pot|po|mo|log|sql)$">' . PHP_EOL .
|
115 |
'Order allow,deny' . PHP_EOL .
|
@@ -124,6 +141,7 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
|
|
124 |
'## WP Defender - End ##'
|
125 |
);
|
126 |
}
|
|
|
127 |
return $rules;
|
128 |
}
|
129 |
}
|
19 |
public function check() {
|
20 |
$cache = WP_Helper::getArrayCache()->get( 'Protect_Information_Service', null );
|
21 |
if ( $cache === null ) {
|
22 |
+
$url = wp_defender()->getPluginUrl() . 'changelog.txt';
|
23 |
$ssl_verify = apply_filters( 'defender_ssl_verify', true ); //most hosts dont really have valid ssl or ssl still pending
|
24 |
+
$status = wp_remote_head( $url, array(
|
25 |
+
'user-agent' => $_SERVER['HTTP_USER_AGENT'],
|
26 |
+
'sslverify' => $ssl_verify
|
27 |
+
) );
|
28 |
if ( 200 == wp_remote_retrieve_response_code( $status ) ) {
|
29 |
WP_Helper::getArrayCache()->set( 'Protect_Information_Service', false );
|
30 |
+
|
31 |
return false;
|
32 |
}
|
33 |
WP_Helper::getArrayCache()->set( 'Protect_Information_Service', true );
|
34 |
+
|
35 |
return true;
|
36 |
} else {
|
37 |
return $cache;
|
51 |
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
52 |
}
|
53 |
$htConfig = file( $htPath );
|
54 |
+
$htConfig = array_map( 'trim', $htConfig );
|
55 |
+
$rules = $this->apache_rule();
|
56 |
+
$containsSearch = array_diff( array_map( 'trim', $rules ), $htConfig );
|
57 |
+
if ( count( $containsSearch ) < count( $rules ) ) {
|
58 |
+
//search the wrapper block
|
59 |
+
$htContent = file_get_contents( $htPath );
|
60 |
+
preg_match( '/## WP Defender(.*?)## WP Defender - End ##/s', $htContent, $matches );
|
61 |
+
if ( count( $matches ) ) {
|
62 |
+
//remove the whole parts as it partial done
|
63 |
+
$htContent = str_replace( $matches[0], '', $htContent );
|
64 |
+
$htConfig = explode( PHP_EOL, $htContent );
|
65 |
+
$htConfig = array_merge( $htConfig, $rules );
|
66 |
+
file_put_contents( $htPath, implode( PHP_EOL, $htConfig ), LOCK_EX );
|
67 |
+
}
|
68 |
+
} elseif ( count( $containsSearch ) == 0 || ( count( $containsSearch ) == count( $rules ) ) ) {
|
69 |
//append this
|
70 |
+
$htConfig = array_merge( $htConfig, $rules );
|
71 |
+
file_put_contents( $htPath, implode( PHP_EOL, $htConfig ), LOCK_EX );
|
72 |
}
|
73 |
|
74 |
return true;
|
88 |
$htConfig = file_get_contents( $htPath );
|
89 |
$rules = $this->apache_rule();
|
90 |
|
91 |
+
preg_match_all( '/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches );
|
92 |
if ( is_array( $matches ) && count( $matches ) > 0 ) {
|
93 |
$htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
|
94 |
} else {
|
112 |
protected static function apache_rule() {
|
113 |
$version = Utils::instance()->determineApacheVersion();
|
114 |
if ( floatval( $version ) >= 2.4 ) {
|
115 |
+
$rules = array(
|
116 |
PHP_EOL . '## WP Defender - Prevent information disclosure ##' . PHP_EOL,
|
117 |
'<FilesMatch "\.(txt|md|exe|sh|bak|inc|pot|po|mo|log|sql)$">' . PHP_EOL .
|
118 |
'Require all denied' . PHP_EOL .
|
126 |
'## WP Defender - End ##'
|
127 |
);
|
128 |
} else {
|
129 |
+
$rules = array(
|
130 |
PHP_EOL . '## WP Defender - Prevent information disclosure ##' . PHP_EOL,
|
131 |
'<FilesMatch "\.(txt|md|exe|sh|bak|inc|pot|po|mo|log|sql)$">' . PHP_EOL .
|
132 |
'Order allow,deny' . PHP_EOL .
|
141 |
'## WP Defender - End ##'
|
142 |
);
|
143 |
}
|
144 |
+
|
145 |
return $rules;
|
146 |
}
|
147 |
}
|
app/module/hardener/component/servers/apache-service.php
CHANGED
@@ -95,6 +95,17 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
95 |
//append this
|
96 |
$htConfig = array_merge( $htConfig, array( implode( '', $default ) ) );
|
97 |
file_put_contents( $htPath, implode( '', $htConfig ), LOCK_EX );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
}
|
99 |
|
100 |
return true;
|
@@ -106,7 +117,7 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
106 |
private function protectContentDir() {
|
107 |
$htPath = WP_CONTENT_DIR . '/' . '.htaccess';
|
108 |
if ( ! file_exists( $htPath ) ) {
|
109 |
-
if (
|
110 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
111 |
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
112 |
}
|
@@ -396,5 +407,3 @@ class Apache_Service extends Rule_Service implements IRule_Service {
|
|
396 |
}
|
397 |
}
|
398 |
}
|
399 |
-
|
400 |
-
?>
|
95 |
//append this
|
96 |
$htConfig = array_merge( $htConfig, array( implode( '', $default ) ) );
|
97 |
file_put_contents( $htPath, implode( '', $htConfig ), LOCK_EX );
|
98 |
+
} elseif ( count( $containsSearch ) != count( $htConfig ) ) {
|
99 |
+
//corrupt
|
100 |
+
$htContent = file_get_contents( $htPath );
|
101 |
+
preg_match( '/## WP Defender(.*?)## WP Defender - End ##/s', $htContent, $matches );
|
102 |
+
if ( count( $matches ) ) {
|
103 |
+
//remove the whole parts as it partial done
|
104 |
+
$htContent = str_replace( $matches[0], '', $htContent );
|
105 |
+
$htConfig = explode( PHP_EOL, $htContent );
|
106 |
+
$htConfig = array_merge( $htConfig, $default );
|
107 |
+
file_put_contents( $htPath, implode( PHP_EOL, $htConfig ), LOCK_EX );
|
108 |
+
}
|
109 |
}
|
110 |
|
111 |
return true;
|
117 |
private function protectContentDir() {
|
118 |
$htPath = WP_CONTENT_DIR . '/' . '.htaccess';
|
119 |
if ( ! file_exists( $htPath ) ) {
|
120 |
+
if ( file_put_contents( $htPath, '', LOCK_EX ) === false ) {
|
121 |
return new \WP_Error( Error_Code::NOT_WRITEABLE,
|
122 |
sprintf( __( "The file %s is not writable", "defender-security" ), $htPath ) );
|
123 |
}
|
407 |
}
|
408 |
}
|
409 |
}
|
|
|
|
app/module/hardener/component/servers/iis-service.php
CHANGED
@@ -101,13 +101,13 @@ class Iis_Service extends Rule_Service implements IRule_Service {
|
|
101 |
return true;
|
102 |
}
|
103 |
|
104 |
-
$doc = new DOMDocument();
|
105 |
$doc->preserveWhiteSpace = false;
|
106 |
if ( $doc->load( $path . '/' . $filename ) === false ) {
|
107 |
return false;
|
108 |
}
|
109 |
|
110 |
-
$xpath = new DOMXPath( $doc );
|
111 |
$handlers = $xpath->query( '/configuration/system.webServer/handlers[contains(@accessPolicy,\'Read\')]' );
|
112 |
if ( $handlers->length > 0 ) {
|
113 |
$child = $handlers->item(0);
|
101 |
return true;
|
102 |
}
|
103 |
|
104 |
+
$doc = new \DOMDocument();
|
105 |
$doc->preserveWhiteSpace = false;
|
106 |
if ( $doc->load( $path . '/' . $filename ) === false ) {
|
107 |
return false;
|
108 |
}
|
109 |
|
110 |
+
$xpath = new \DOMXPath( $doc );
|
111 |
$handlers = $xpath->query( '/configuration/system.webServer/handlers[contains(@accessPolicy,\'Read\')]' );
|
112 |
if ( $handlers->length > 0 ) {
|
113 |
$child = $handlers->item(0);
|
app/module/hardener/controller/main.php
CHANGED
@@ -103,9 +103,9 @@ class Main extends Controller {
|
|
103 |
if ( ! $this->checkPermission() ) {
|
104 |
return;
|
105 |
}
|
106 |
-
|
107 |
-
$slug
|
108 |
-
|
109 |
do_action( "processingHardener" . $slug );
|
110 |
//fall back
|
111 |
wp_send_json_success( array(
|
@@ -126,7 +126,7 @@ class Main extends Controller {
|
|
126 |
}
|
127 |
|
128 |
$slug = HTTP_Helper::retrieve_post( 'slug' );
|
129 |
-
|
130 |
do_action( "processUpdate" . $slug );
|
131 |
//fall back
|
132 |
wp_send_json_success( array(
|
@@ -189,11 +189,12 @@ class Main extends Controller {
|
|
189 |
* Enqueue scripts & styles
|
190 |
*/
|
191 |
public function scripts() {
|
192 |
-
|
193 |
wp_enqueue_script( 'defender' );
|
194 |
wp_enqueue_script( 'hardener', wp_defender()->getPluginUrl() . 'app/module/hardener/js/scripts.js', array(
|
195 |
'jquery-effects-core'
|
196 |
) );
|
|
|
197 |
wp_enqueue_style( 'defender' );
|
198 |
}
|
199 |
|
103 |
if ( ! $this->checkPermission() ) {
|
104 |
return;
|
105 |
}
|
106 |
+
|
107 |
+
$slug = HTTP_Helper::retrieve_post( 'slug' );
|
108 |
+
|
109 |
do_action( "processingHardener" . $slug );
|
110 |
//fall back
|
111 |
wp_send_json_success( array(
|
126 |
}
|
127 |
|
128 |
$slug = HTTP_Helper::retrieve_post( 'slug' );
|
129 |
+
|
130 |
do_action( "processUpdate" . $slug );
|
131 |
//fall back
|
132 |
wp_send_json_success( array(
|
189 |
* Enqueue scripts & styles
|
190 |
*/
|
191 |
public function scripts() {
|
192 |
+
wp_enqueue_script( 'wpmudev-sui' );
|
193 |
wp_enqueue_script( 'defender' );
|
194 |
wp_enqueue_script( 'hardener', wp_defender()->getPluginUrl() . 'app/module/hardener/js/scripts.js', array(
|
195 |
'jquery-effects-core'
|
196 |
) );
|
197 |
+
wp_enqueue_style( 'wpmudev-sui' );
|
198 |
wp_enqueue_style( 'defender' );
|
199 |
}
|
200 |
|
app/module/hardener/js/scripts.js
CHANGED
@@ -1,7 +1,9 @@
|
|
1 |
jQuery(function ($) {
|
2 |
WDHardener.formHandler();
|
3 |
-
|
4 |
-
|
|
|
|
|
5 |
//On key up or is a user decides to paste
|
6 |
$('.hardener-instructions textarea.hardener-php-excuted-ignore').on('keyup keypress paste', function (e) {
|
7 |
var text_val = $(this).val();
|
@@ -17,29 +19,18 @@ jQuery(function ($) {
|
|
17 |
$(this).val(text_val);
|
18 |
}
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
if (file) {
|
33 |
-
newRule += "\n location ~* ^" + $wp_content + "/.*\" + file + "$ {" +
|
34 |
-
" \n allow all;" +
|
35 |
-
"\n}";
|
36 |
-
}
|
37 |
-
});
|
38 |
-
$('span.hardener-nginx-extra-instructions').html(newRule);
|
39 |
-
}
|
40 |
-
if ($('.hardener-instructions-apache-litespeed').length) {
|
41 |
-
$('.hardener-update-frm [name="file_paths"]').val(text_val);
|
42 |
-
}
|
43 |
});
|
44 |
|
45 |
/**
|
@@ -75,30 +66,6 @@ jQuery(function ($) {
|
|
75 |
$('.hardener-instructions textarea.hardener-php-excuted-ignore').toggle('fast');
|
76 |
});
|
77 |
|
78 |
-
/**
|
79 |
-
* Server select
|
80 |
-
*/
|
81 |
-
$(document).on('change', 'select.hardener-server-list', function () {
|
82 |
-
var selected = $(this).val();
|
83 |
-
if ($(this).hasClass('information')) {
|
84 |
-
$('.hardener-information').each(function () {
|
85 |
-
$(this).addClass('wd-hide');
|
86 |
-
});
|
87 |
-
$('.hardener-information-' + selected).removeClass('wd-hide');
|
88 |
-
} else {
|
89 |
-
$('.hardener-instructions').each(function () {
|
90 |
-
$(this).addClass('wd-hide');
|
91 |
-
});
|
92 |
-
$('.hardener-instructions-' + selected).removeClass('wd-hide');
|
93 |
-
}
|
94 |
-
if (selected == 'apache' || selected == 'litespeed' || selected == 'nginx') {
|
95 |
-
$('.hardener-instructions-extra-exceptions').removeClass('wd-hide');
|
96 |
-
} else {
|
97 |
-
$('.hardener-instructions-extra-exceptions').addClass('wd-hide');
|
98 |
-
}
|
99 |
-
|
100 |
-
});
|
101 |
-
|
102 |
$('div.hardener').on('form-submitted', function (e, data, form) {
|
103 |
if (form.hasClass('rule-process') == false) {
|
104 |
return;
|
@@ -110,11 +77,11 @@ jQuery(function ($) {
|
|
110 |
$('.count-resolved').text(data.data.fixed);
|
111 |
$('.issues-actioned').text(10 - data.data.issues);
|
112 |
if (data.data.issues > 0) {
|
113 |
-
$('.issues
|
114 |
$('.count-issues').removeClass('wd-hide');
|
115 |
} else {
|
116 |
$('.count-issues').addClass('wd-hide');
|
117 |
-
$('.issues
|
118 |
}
|
119 |
if (data.data.ignore > 0) {
|
120 |
$('.count-ignored').removeClass('wd-hide');
|
@@ -131,9 +98,9 @@ jQuery(function ($) {
|
|
131 |
update_rules = false;
|
132 |
}
|
133 |
if (update_rules) {
|
134 |
-
form.closest('.
|
135 |
$(this).remove();
|
136 |
-
if ($('.
|
137 |
setTimeout(function () {
|
138 |
location.reload();
|
139 |
}, 500)
|
@@ -169,7 +136,10 @@ WDHardener.formHandler = function () {
|
|
169 |
url: ajaxurl,
|
170 |
data: data,
|
171 |
beforeSend: function () {
|
172 |
-
that.find('.button').attr('disabled', 'disabled');
|
|
|
|
|
|
|
173 |
},
|
174 |
success: function (data) {
|
175 |
if (data.data != undefined && data.data.reload != undefined) {
|
@@ -209,45 +179,13 @@ WDHardener.formHandler = function () {
|
|
209 |
} else if (data.data != undefined && data.data.url != undefined) {
|
210 |
location.href = data.data.url;
|
211 |
} else {
|
212 |
-
that.find('.button').
|
|
|
|
|
213 |
jq('div.hardener').trigger('form-submitted', [data, that])
|
214 |
}
|
215 |
}
|
216 |
})
|
217 |
return false;
|
218 |
})
|
219 |
-
}
|
220 |
-
|
221 |
-
WDHardener.rules = function () {
|
222 |
-
var jq = jQuery;
|
223 |
-
if (jq('.rules.ignored').size() > 0) {
|
224 |
-
//no animation for ignored
|
225 |
-
return;
|
226 |
-
}
|
227 |
-
var id = window.location.hash.substr(1);
|
228 |
-
if (id == undefined) {
|
229 |
-
jq('.rule').first().removeClass('closed');
|
230 |
-
} else {
|
231 |
-
jq('#' + id).removeClass('closed');
|
232 |
-
}
|
233 |
-
jq('.rule .rule-title').click(function () {
|
234 |
-
var parent = jq(this).closest('.rule');
|
235 |
-
var otherRules = jq('.rule').not(parent);
|
236 |
-
otherRules.each(function () {
|
237 |
-
var that = jq(this);
|
238 |
-
jq(this).find('.rule-content').first().slideUp(function () {
|
239 |
-
that.addClass('closed');
|
240 |
-
})
|
241 |
-
})
|
242 |
-
if (parent.hasClass('closed')) {
|
243 |
-
//jq(this).switchClass('closed', '', 1000, 'swing');
|
244 |
-
parent.find('.rule-content').first().slideDown();
|
245 |
-
parent.removeClass('closed');
|
246 |
-
} else {
|
247 |
-
//jq(this).switchClass('', 'closed', 1000, 'swing');
|
248 |
-
parent.find('.rule-content').first().slideUp(function () {
|
249 |
-
parent.addClass('closed');
|
250 |
-
})
|
251 |
-
}
|
252 |
-
})
|
253 |
}
|
1 |
jQuery(function ($) {
|
2 |
WDHardener.formHandler();
|
3 |
+
var hash = window.location.hash;
|
4 |
+
if ($(hash).size() > 0) {
|
5 |
+
$(hash).addClass('sui-accordion-item--open');
|
6 |
+
}
|
7 |
//On key up or is a user decides to paste
|
8 |
$('.hardener-instructions textarea.hardener-php-excuted-ignore').on('keyup keypress paste', function (e) {
|
9 |
var text_val = $(this).val();
|
19 |
$(this).val(text_val);
|
20 |
}
|
21 |
|
22 |
+
//Nginx
|
23 |
+
var excludedFiles = text_val.split('\n');
|
24 |
+
var newRule = "";
|
25 |
+
var $wp_content = $('.hardener-wp-content-dir').val();
|
26 |
+
$.each(excludedFiles, function (index, file) {
|
27 |
+
if (file) {
|
28 |
+
newRule += "\n location ~* ^" + $wp_content + "/.*\" + file + "$ {" +
|
29 |
+
" \n allow all;" +
|
30 |
+
"\n}";
|
31 |
+
}
|
32 |
+
});
|
33 |
+
$('span.hardener-nginx-extra-instructions').html(newRule);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
});
|
35 |
|
36 |
/**
|
66 |
$('.hardener-instructions textarea.hardener-php-excuted-ignore').toggle('fast');
|
67 |
});
|
68 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
$('div.hardener').on('form-submitted', function (e, data, form) {
|
70 |
if (form.hasClass('rule-process') == false) {
|
71 |
return;
|
77 |
$('.count-resolved').text(data.data.fixed);
|
78 |
$('.issues-actioned').text(10 - data.data.issues);
|
79 |
if (data.data.issues > 0) {
|
80 |
+
$('.issues i').removeClass('sui-icon-check-tick sui-success').addClass('sui-icon-info sui-warning');
|
81 |
$('.count-issues').removeClass('wd-hide');
|
82 |
} else {
|
83 |
$('.count-issues').addClass('wd-hide');
|
84 |
+
$('.issues i').removeClass('sui-icon-info sui-warning').addClass('sui-icon-check-tick sui-success');
|
85 |
}
|
86 |
if (data.data.ignore > 0) {
|
87 |
$('.count-ignored').removeClass('wd-hide');
|
98 |
update_rules = false;
|
99 |
}
|
100 |
if (update_rules) {
|
101 |
+
form.closest('.sui-accordion-item').slideUp(500, function () {
|
102 |
$(this).remove();
|
103 |
+
if ($('.sui-accordion-item').size() == 0) {
|
104 |
setTimeout(function () {
|
105 |
location.reload();
|
106 |
}, 500)
|
136 |
url: ajaxurl,
|
137 |
data: data,
|
138 |
beforeSend: function () {
|
139 |
+
that.find('.sui-button').attr('disabled', 'disabled');
|
140 |
+
that.find('.sui-button').html('<span class="sui-loading-text">' + that.find('.sui-button').text())
|
141 |
+
that.find('.sui-button').append('<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>');
|
142 |
+
that.find('.sui-button').addClass('sui-button-onload')
|
143 |
},
|
144 |
success: function (data) {
|
145 |
if (data.data != undefined && data.data.reload != undefined) {
|
179 |
} else if (data.data != undefined && data.data.url != undefined) {
|
180 |
location.href = data.data.url;
|
181 |
} else {
|
182 |
+
that.find('.sui-button').html(that.find('.sui-button').text())
|
183 |
+
that.find('.sui-button').removeClass('sui-button-onload')
|
184 |
+
that.find('.sui-button').removeAttr('disabled');
|
185 |
jq('div.hardener').trigger('form-submitted', [data, that])
|
186 |
}
|
187 |
}
|
188 |
})
|
189 |
return false;
|
190 |
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
191 |
}
|
app/module/hardener/model/settings.php
CHANGED
@@ -92,6 +92,9 @@ class Settings extends \Hammer\WP\Settings {
|
|
92 |
*/
|
93 |
public $active_server = 'apache';
|
94 |
|
|
|
|
|
|
|
95 |
/**
|
96 |
* shorthand to add to a list
|
97 |
*
|
92 |
*/
|
93 |
public $active_server = 'apache';
|
94 |
|
95 |
+
public $min_php_version = '';
|
96 |
+
public $stable_php_version = '';
|
97 |
+
|
98 |
/**
|
99 |
* shorthand to add to a list
|
100 |
*
|
app/module/hardener/rule.php
CHANGED
@@ -107,8 +107,9 @@ abstract class Rule extends Component {
|
|
107 |
<?php $this->createNonceField(); ?>
|
108 |
<input type="hidden" name="action" value="ignoreHardener"/>
|
109 |
<input type="hidden" name="slug" value="<?php echo static::$slug ?>"/>
|
110 |
-
<button type="submit" name="ignore" value="ignore"
|
111 |
-
|
|
|
112 |
</form>
|
113 |
<?php
|
114 |
}
|
@@ -124,23 +125,46 @@ abstract class Rule extends Component {
|
|
124 |
|
125 |
public function showRestoreForm() {
|
126 |
?>
|
127 |
-
<div class="
|
128 |
-
<div class="
|
129 |
-
<
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
</div>
|
140 |
</div>
|
|
|
141 |
<?php
|
142 |
}
|
143 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
/**
|
145 |
* @return array
|
146 |
*/
|
107 |
<?php $this->createNonceField(); ?>
|
108 |
<input type="hidden" name="action" value="ignoreHardener"/>
|
109 |
<input type="hidden" name="slug" value="<?php echo static::$slug ?>"/>
|
110 |
+
<button type="submit" name="ignore" value="ignore" class="sui-button sui-button-ghost">
|
111 |
+
<i class="sui-icon-eye-hide" aria-hidden="true"></i> <?php _e( "Ignore", "defender-security" ) ?>
|
112 |
+
</button>
|
113 |
</form>
|
114 |
<?php
|
115 |
}
|
125 |
|
126 |
public function showRestoreForm() {
|
127 |
?>
|
128 |
+
<div class="sui-accordion sui-accordion-flushed">
|
129 |
+
<div class="sui-accordion-item accordion-ignore">
|
130 |
+
<div class="sui-accordion-item-header">
|
131 |
+
<div class="sui-accordion-item-title">
|
132 |
+
<i aria-hidden="true" class="sui-icon-eye-hide"></i>
|
133 |
+
<?php echo $this->getTitle(); ?>
|
134 |
+
<div class="sui-actions-right">
|
135 |
+
<form method="post" class="float-r hardener-frm rule-process">
|
136 |
+
<?php $this->createNonceField(); ?>
|
137 |
+
<input type="hidden" name="action" value="restoreHardener"/>
|
138 |
+
<input type="hidden" name="slug" value="<?php echo static::$slug ?>"/>
|
139 |
+
<button type="submit" class="sui-button sui-button-ghost">
|
140 |
+
<i class="sui-icon-update" aria-hidden="true"></i>
|
141 |
+
<?php _e( "Restore", "defender-security" ) ?>
|
142 |
+
</button>
|
143 |
+
</form>
|
144 |
+
</div>
|
145 |
+
</div>
|
146 |
+
</div>
|
147 |
</div>
|
148 |
</div>
|
149 |
+
|
150 |
<?php
|
151 |
}
|
152 |
|
153 |
+
/**
|
154 |
+
* @return string
|
155 |
+
*/
|
156 |
+
public function getCssClass() {
|
157 |
+
if ( $this->isIgnored() ) {
|
158 |
+
return '';
|
159 |
+
}
|
160 |
+
|
161 |
+
if ( $this->check() ) {
|
162 |
+
return 'sui-success';
|
163 |
+
}
|
164 |
+
|
165 |
+
return 'sui-warning';
|
166 |
+
}
|
167 |
+
|
168 |
/**
|
169 |
* @return array
|
170 |
*/
|
app/module/hardener/view/ignore.php
CHANGED
@@ -1,32 +1,39 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
<?php
|
9 |
</h3>
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
<?php if ( count( \WP_Defender\Module\Hardener\Model\Settings::instance()->ignore ) > 0 ): ?>
|
14 |
-
<div class="line">
|
15 |
-
<?php _e( "You have chosen to ignore these fixes. You can restore and action them at any time.", "defender-security" ) ?>
|
16 |
-
</div>
|
17 |
-
<div class="rules ignored">
|
18 |
-
<?php foreach ( \WP_Defender\Module\Hardener\Model\Settings::instance()->getIgnore() as $rule ): ?>
|
19 |
-
<?php
|
20 |
-
$rule->showRestoreForm();
|
21 |
-
?>
|
22 |
-
<?php endforeach; ?>
|
23 |
-
</div>
|
24 |
-
<?php else: ?>
|
25 |
-
<div class="well well-blue with-cap">
|
26 |
-
<i class="def-icon icon-warning" aria-hidden="true"></i>
|
27 |
-
<?php _e( "You haven't ignored any issues yet. You can ignore any security tweaks you don't want to be warned about by clicking 'Ignore' inside the issue description.", "defender-security" ) ?>
|
28 |
-
</div>
|
29 |
<?php endif; ?>
|
30 |
</div>
|
31 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
</div>
|
1 |
+
<?php
|
2 |
+
$setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
3 |
+
$ignored = $setting->getIgnore();
|
4 |
+
?>
|
5 |
+
<div class="sui-box">
|
6 |
+
<div class="sui-box-header">
|
7 |
+
<h3 class="sui-box-title">
|
8 |
+
<?php _e( "Ignored", "defender-security" ) ?>
|
9 |
</h3>
|
10 |
+
<div class="sui-actions-left">
|
11 |
+
<?php if ( count( $ignored ) ): ?>
|
12 |
+
<span class="sui-tag"><?php echo count( $ignored ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
<?php endif; ?>
|
14 |
</div>
|
15 |
</div>
|
16 |
+
<div class="sui-box-body">
|
17 |
+
<p>
|
18 |
+
<?php _e( "You have chosen to ignore these fixes. You can restore and action them at any time.", "defender-security" ) ?>
|
19 |
+
</p>
|
20 |
+
<?php if ( count( $ignored ) == 0 ): ?>
|
21 |
+
<div class="sui-notice">
|
22 |
+
<p>
|
23 |
+
<?php _e( "Well, turns out you haven't ignored anything yet - keep up the good fight!", "defender-security" ) ?>
|
24 |
+
</p>
|
25 |
+
</div>
|
26 |
+
<?php endif; ?>
|
27 |
+
</div>
|
28 |
+
<?php if ( count( $ignored ) ): ?>
|
29 |
+
<div class="sui-accordion sui-accordion-flushed">
|
30 |
+
<?php foreach ( $ignored as $rule ): ?>
|
31 |
+
<?php
|
32 |
+
$rule->showRestoreForm();
|
33 |
+
?>
|
34 |
+
<?php endforeach; ?>
|
35 |
+
</div>
|
36 |
+
<div class="clearfix"></div>
|
37 |
+
<div class="padding-bottom-30"></div>
|
38 |
+
<?php endif; ?>
|
39 |
</div>
|
app/module/hardener/view/issues.php
CHANGED
@@ -1,36 +1,38 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
|
|
|
|
8 |
</div>
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
<i class="def-icon icon-tick" aria-hidden="true"></i>
|
22 |
-
<?php _e( "You have actioned all available security tweaks. Great work!", "defender-security" ) ?>
|
23 |
-
</div>
|
24 |
-
<?php
|
25 |
-
} else {
|
26 |
-
foreach ( $setting->getIssues() as $rule ): ?>
|
27 |
-
<?php
|
28 |
-
$rule->getDescription();
|
29 |
-
?>
|
30 |
-
<?php endforeach;
|
31 |
-
}
|
32 |
-
?>
|
33 |
-
</div>
|
34 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
</div>
|
36 |
-
|
|
|
|
1 |
+
<?php
|
2 |
+
$setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
3 |
+
$issues = $setting->getIssues();
|
4 |
+
?>
|
5 |
+
<div class="sui-box-header">
|
6 |
+
<h2 class="sui-box-title"><?php _e( "Issues", "defender-security" ) ?></h2>
|
7 |
+
<div class="sui-actions-left">
|
8 |
+
<?php if ( count( $issues ) ): ?>
|
9 |
+
<span class="sui-tag sui-tag-warning"><?php echo count( $issues ) ?></span>
|
10 |
+
<?php endif; ?>
|
11 |
</div>
|
12 |
+
</div>
|
13 |
+
<div class="sui-box-body">
|
14 |
+
<p>
|
15 |
+
<?php _e( "Activate security tweaks to strengthen your website against harmful hackers and bots who try to break in. We recommend you action as many tweaks as possible, some may require your server provider to help.", "defender-security" ) ?>
|
16 |
+
</p>
|
17 |
+
<?php
|
18 |
+
if ( count( $issues ) == 0 ) {
|
19 |
+
?>
|
20 |
+
<div class="sui-notice sui-notice-success">
|
21 |
+
<p>
|
22 |
+
<?php _e( "You have actioned all available security tweaks, great work!", "defender-security" ) ?>
|
23 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
</div>
|
25 |
+
<?php
|
26 |
+
}
|
27 |
+
?>
|
28 |
+
</div>
|
29 |
+
<?php if ( count( $issues ) ) : ?>
|
30 |
+
<div class="sui-accordion sui-accordion-flushed">
|
31 |
+
<?php
|
32 |
+
foreach ( $issues as $rule ) {
|
33 |
+
$rule->getDescription();
|
34 |
+
} ?>
|
35 |
</div>
|
36 |
+
<div class="clearfix"></div>
|
37 |
+
<div class="padding-bottom-30"></div>
|
38 |
+
<?php endif; ?>
|
app/module/hardener/view/layouts/layout.php
CHANGED
@@ -1,113 +1,124 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
<div id="wp-defender" class="wp-defender">
|
3 |
-
<h2 class="title"><?php _e( "Security Tweaks", "defender-security" ) ?></h2>
|
4 |
<div class="hardener">
|
5 |
-
<div class="
|
6 |
-
<
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<span class="issues-actioned"><?php echo( $controller->getCount( 'fixed' ) + $controller->getCount( 'ignore' ) ) ?></span>
|
12 |
-
/<?php echo count( \WP_Defender\Module\Hardener\Model\Settings::instance()->getDefinedRules( false ) ) ?>
|
13 |
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
<div class="clear"></div>
|
28 |
-
<span class="sub"><?php _e( "Security tweaks actioned", "defender-security" ) ?></span>
|
29 |
-
</div>
|
30 |
-
</div>
|
31 |
-
<div class="column is-5">
|
32 |
-
<ul class="dev-list bold">
|
33 |
-
<li>
|
34 |
-
<div>
|
35 |
-
<span class="list-label"><?php _e( "PHP Version", "defender-security" ) ?></span>
|
36 |
-
<span class="list-detail"><?php echo $controller->getPHPVersion() ?></span>
|
37 |
-
</div>
|
38 |
-
</li>
|
39 |
-
<li>
|
40 |
-
<div>
|
41 |
-
<span class="list-label"><?php _e( "WordPress Version", "defender-security" ) ?></span>
|
42 |
-
<span class="list-detail">
|
43 |
-
<?php
|
44 |
-
echo \WP_Defender\Behavior\Utils::instance()->getWPVersion();
|
45 |
-
?>
|
46 |
-
</span>
|
47 |
-
</div>
|
48 |
-
</li>
|
49 |
-
</ul>
|
50 |
-
</div>
|
51 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
</div>
|
|
|
53 |
</div>
|
54 |
-
<div class="row">
|
55 |
-
<div class="
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
<span class="count-ignored <?php echo $controller->getCount( 'ignore' ) == 0 ? 'wd-hide' : null ?>"><?php echo $controller->getCount( 'ignore' ) ?></span>
|
83 |
-
</a>
|
84 |
-
</li>
|
85 |
-
<!-- <li>-->
|
86 |
-
<!-- <a class="-->
|
87 |
-
<?php //echo $controller->isView( 'notification' ) ? 'active' : null ?><!--"-->
|
88 |
-
<!-- href="-->
|
89 |
-
<?php //echo network_admin_url( 'admin.php?page=wdf-hardener&view=notification' ) ?><!--">-->
|
90 |
-
<?php //_e( "Notifications", "defender-security" ) ?><!--</a>-->
|
91 |
-
<!-- </li>-->
|
92 |
-
</ul>
|
93 |
-
</nav>
|
94 |
-
<div class="is-hidden-tablet mline">
|
95 |
-
<nav role="navigation" aria-label="Filters">
|
96 |
-
<select class="mobile-nav">
|
97 |
-
<option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
98 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-hardener' ) ?>"><?php _e( "Issues", "defender-security" ) ?></option>
|
99 |
-
<option <?php selected( 'resolved', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
100 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=resolved' ) ?>"><?php _e( "Resolved", "defender-security" ) ?></option>
|
101 |
-
<option <?php selected( 'ignored', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
102 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=ignored' ) ?>"><?php _e( "Ignored", "defender-security" ) ?></option>
|
103 |
-
</select>
|
104 |
-
</nav>
|
105 |
</div>
|
106 |
</div>
|
107 |
-
<div class="
|
108 |
<?php echo $contents ?>
|
109 |
</div>
|
110 |
</div>
|
111 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
</div>
|
113 |
</div>
|
1 |
+
<?php
|
2 |
+
$countAll = $controller->getCount( 'issues' );
|
3 |
+
$resolved = $controller->getCount( 'fixed' );
|
4 |
+
$ignore = $controller->getCount( 'ignore' );
|
5 |
+
$tooltip = '';
|
6 |
+
$class = '';
|
7 |
+
if ( $countAll > 0 ) {
|
8 |
+
$tooltip = 'data-tooltip="' . esc_attr( sprintf( __( 'You have %d security tweak(s) needing attention.', "defender-security" ), $countAll ) ) . '"';
|
9 |
+
$class = 'sui-tooltip';
|
10 |
+
}
|
11 |
+
?>
|
12 |
+
<div class="sui-wrap">
|
13 |
<div id="wp-defender" class="wp-defender">
|
|
|
14 |
<div class="hardener">
|
15 |
+
<div class="sui-header">
|
16 |
+
<h1 class="sui-header-title">
|
17 |
+
<?php _e( "Security Tweaks", "defender-security" ) ?>
|
18 |
+
</h1>
|
19 |
+
</div>
|
20 |
+
<div class="sui-box sui-summary sui-summary-sm">
|
|
|
|
|
21 |
|
22 |
+
<div class="sui-summary-image-space" aria-hidden="true"></div>
|
23 |
+
|
24 |
+
<div class="sui-summary-segment">
|
25 |
+
|
26 |
+
<div class="sui-summary-details issues">
|
27 |
+
|
28 |
+
<span class="sui-summary-large <?php echo $class ?> count-issues" <?php echo $tooltip ?> ><?php echo $countAll ?></span>
|
29 |
+
<?php if ( $countAll > 0 ): ?>
|
30 |
+
<i aria-hidden="true" class="sui-icon-info sui-warning"></i>
|
31 |
+
<?php else: ?>
|
32 |
+
<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>
|
33 |
+
<?php endif; ?>
|
34 |
+
<span class="sui-summary-sub"><?php _e( "Security issues", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
</div>
|
36 |
+
|
37 |
+
</div>
|
38 |
+
|
39 |
+
<div class="sui-summary-segment">
|
40 |
+
<ul class="sui-list">
|
41 |
+
|
42 |
+
<li>
|
43 |
+
<span class="sui-list-label"><?php _e( "Current PHP version", "defender-security" ) ?></span>
|
44 |
+
<span class="sui-list-detail issues_wp">
|
45 |
+
<?php echo phpversion() ?>
|
46 |
+
</span>
|
47 |
+
</li>
|
48 |
+
|
49 |
+
<li>
|
50 |
+
<span class="sui-list-label"><?php _e( "Current WordPress version", "defender-security" ) ?></span>
|
51 |
+
<span class="sui-list-detail vuln_issues">
|
52 |
+
<?php
|
53 |
+
global $wp_version;
|
54 |
+
echo $wp_version
|
55 |
+
?>
|
56 |
+
</span>
|
57 |
+
</li>
|
58 |
+
|
59 |
+
</ul>
|
60 |
</div>
|
61 |
+
|
62 |
</div>
|
63 |
+
<div class="sui-row-with-sidenav">
|
64 |
+
<div class="sui-sidenav">
|
65 |
+
<ul class="sui-vertical-tabs sui-sidenav-hide-md">
|
66 |
+
<li class="sui-vertical-tab <?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'current' : null ?>">
|
67 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener' ) ?>">
|
68 |
+
<?php _e( "Issues", "defender-security" ) ?></a>
|
69 |
+
<span class="sui-tag sui-tag-warning <?php echo $countAll ? '' : 'wd-hide' ?> count-issues"><?php echo $countAll ?></span>
|
70 |
+
</li>
|
71 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'resolved' ) ? 'current' : null ?>">
|
72 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=resolved' ) ?>">
|
73 |
+
<?php _e( "Resolved", "defender-security" ) ?></a>
|
74 |
+
<span class="sui-tag count-resolved <?php echo $resolved ? '' : 'wd-hide' ?>"><?php echo $resolved ?></span>
|
75 |
+
</li>
|
76 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'ignored' ) ? 'current' : null ?>">
|
77 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=ignored' ) ?>">
|
78 |
+
<?php _e( "Ignored", "defender-security" ) ?></a>
|
79 |
+
<span class="sui-tag count-ignored <?php echo $ignore ? '' : 'wd-hide' ?>"><?php echo $ignore ?></span>
|
80 |
+
</li>
|
81 |
+
</ul>
|
82 |
+
<div class="sui-sidenav-hide-lg">
|
83 |
+
<select class="sui-mobile-nav" style="display: none;">
|
84 |
+
<option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
85 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-hardener' ) ?>"><?php _e( "Issues", "defender-security" ) ?></option>
|
86 |
+
<option <?php selected( 'resolved', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
87 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=resolved' ) ?>"><?php _e( "Resolved", "defender-security" ) ?></option>
|
88 |
+
<option <?php selected( 'ignored', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
|
89 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=ignored' ) ?>"><?php _e( "Ignored", "defender-security" ) ?></option>
|
90 |
+
</select>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
</div>
|
92 |
</div>
|
93 |
+
<div class="sui-box">
|
94 |
<?php echo $contents ?>
|
95 |
</div>
|
96 |
</div>
|
97 |
</div>
|
98 |
+
<div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div>
|
99 |
+
<?php if ( wp_defender()->isFree ): ?>
|
100 |
+
<ul class="sui-footer-nav">
|
101 |
+
<li><a href="https://profiles.wordpress.org/wpmudev#content-plugins" target="_blank">Free Plugins</a>
|
102 |
+
</li>
|
103 |
+
<li><a href="https://premium.wpmudev.org/features/" target="_blank">Membership</a></li>
|
104 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
105 |
+
<li><a href="https://wordpress.org/support/plugin/plugin-name" target="_blank">Support</a></li>
|
106 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
107 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
108 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
109 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
110 |
+
</ul>
|
111 |
+
<?php else: ?>
|
112 |
+
<ul class="sui-footer-nav">
|
113 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
114 |
+
<li><a href="https://premium.wpmudev.org/projects/category/plugins/" target="_blank">Plugins</a></li>
|
115 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
116 |
+
<li><a href="https://premium.wpmudev.org/hub/support/" target="_blank">Support</a></li>
|
117 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
118 |
+
<li><a href="https://premium.wpmudev.org/hub/community/" target="_blank">Community</a></li>
|
119 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
120 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
121 |
+
</ul>
|
122 |
+
<?php endif; ?>
|
123 |
</div>
|
124 |
</div>
|
app/module/hardener/view/resolved.php
CHANGED
@@ -1,21 +1,32 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
<?php
|
15 |
-
$rule->getDescription();
|
16 |
-
?>
|
17 |
-
<?php endforeach; ?>
|
18 |
-
</div>
|
19 |
</div>
|
20 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
</div>
|
1 |
+
<?php
|
2 |
+
$setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
3 |
+
$resolved = $setting->getFixed();
|
4 |
+
?>
|
5 |
+
<div class="sui-box">
|
6 |
+
<div class="sui-box-header">
|
7 |
+
<h3 class="sui-box-title">
|
8 |
+
<?php _e( "Resolved", "defender-security" ) ?>
|
9 |
+
</h3>
|
10 |
+
<div class="sui-actions-left">
|
11 |
+
<?php if ( count( $resolved ) ): ?>
|
12 |
+
<span class="sui-tag sui-tag-success"><?php echo count( $resolved ) ?></span>
|
13 |
+
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
|
14 |
</div>
|
15 |
</div>
|
16 |
+
<div class="sui-box-body">
|
17 |
+
<p>
|
18 |
+
<?php _e( "Excellent work. The following vulnerabilities have been fixed.", "defender-security" ) ?>
|
19 |
+
</p>
|
20 |
+
</div>
|
21 |
+
<?php if ( count( $resolved ) ): ?>
|
22 |
+
<div class="sui-accordion sui-accordion-flushed">
|
23 |
+
<?php foreach ( $resolved as $rule ): ?>
|
24 |
+
<?php
|
25 |
+
$rule->getDescription();
|
26 |
+
?>
|
27 |
+
<?php endforeach; ?>
|
28 |
+
</div>
|
29 |
+
<div class="clearfix"></div>
|
30 |
+
<div class="padding-bottom-30"></div>
|
31 |
+
<?php endif; ?>
|
32 |
</div>
|
app/module/hardener/view/rules/change-admin.php
CHANGED
@@ -1,42 +1,88 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
<div class="
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
</div>
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
<
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
</div>
|
27 |
-
<form method="post" class="hardener-frm rule-process">
|
28 |
-
<?php $controller->createNonceField(); ?>
|
29 |
-
<input type="hidden" name="action" value="processHardener"/>
|
30 |
-
<input type="text" placeholder="<?php esc_attr_e( "Enter new username", "defender-security" ) ?>"
|
31 |
-
name="username" class="block" />
|
32 |
-
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
33 |
-
<button class="button float-r"
|
34 |
-
type="submit"><?php _e( "Update", "defender-security" ) ?></button>
|
35 |
-
</form>
|
36 |
-
<?php $controller->showIgnoreForm() ?>
|
37 |
-
<div class="clear"></div>
|
38 |
<?php endif; ?>
|
39 |
</div>
|
40 |
-
<div class="clear"></div>
|
41 |
</div>
|
42 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
global $wpdb;
|
4 |
+
?>
|
5 |
+
<div id="change_admin" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
6 |
+
<div class="sui-accordion-item-header">
|
7 |
+
<div class="sui-accordion-item-title">
|
8 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
9 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
10 |
+
<?php _e( "Admin User", "defender-security" ) ?>
|
11 |
+
</div>
|
12 |
+
<div class="sui-accordion-col-4">
|
13 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
14 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
15 |
+
</button>
|
16 |
</div>
|
17 |
+
</div>
|
18 |
+
<div class="sui-accordion-item-body">
|
19 |
+
<div class="sui-box">
|
20 |
+
<div class="sui-box-body">
|
21 |
+
<strong>
|
22 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
23 |
+
</strong>
|
24 |
+
<p>
|
25 |
+
<?php _e( "One of most common methods of gaining access to websites is through brute force attacks on login areas using default/common usernames and passwords. If you're using the default ‘admin’ username, you're giving away an important piece of the puzzle hackers need to hijack your website.", "defender-security" ) ?>
|
26 |
+
</p>
|
27 |
+
<?php if ( $checked ): ?>
|
28 |
+
<div class="sui-notice sui-notice-success">
|
29 |
+
<p><?php _e( "You don't have a user account sporting the admin username, great.", "defender-security" ) ?></p>
|
30 |
+
</div>
|
31 |
+
<?php else: ?>
|
32 |
+
<strong>
|
33 |
+
<?php _e( "Status", "defender-security" ) ?>
|
34 |
+
</strong>
|
35 |
+
<div class="sui-notice sui-notice-warning">
|
36 |
+
<p>
|
37 |
+
<?php _e( "You have a user account with the admin username.", "defender-security" ) ?>
|
38 |
+
</p>
|
39 |
+
</div>
|
40 |
+
<p>
|
41 |
+
<?php _e( "Using the default admin username is widely considered bad practice and opens you up to the easitest form of entry to your website. We recommend avoiding generic usernames like admin, administrator, and anything that matches your hostname (mattebutter) as these are the usernames hackers and bots will attempt first.", "defender-security" ) ?>
|
42 |
+
</p>
|
43 |
+
<strong>
|
44 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
45 |
+
</strong>
|
46 |
+
<p>
|
47 |
+
<?php _e( "Choose a new admin username name below. Alternately, you can ignore this tweak if you really want to keep the admin username at your own risk.", "defender-security" ) ?>
|
48 |
+
</p>
|
49 |
+
<div class="sui-border-frame">
|
50 |
+
<div class="sui-form-field ">
|
51 |
+
<label class="sui-label"><?php _e( "New admin username", "defender-security" ) ?></label>
|
52 |
+
<input type="text" id="username" class="sui-form-control"/>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<?php endif; ?>
|
56 |
+
</div>
|
57 |
+
<?php if ( ! $checked ): ?>
|
58 |
+
<div class="sui-box-footer">
|
59 |
+
<div class="sui-actions-left">
|
60 |
+
<?php $controller->showIgnoreForm() ?>
|
61 |
+
</div>
|
62 |
+
<div class="sui-actions-right">
|
63 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
64 |
+
<?php $controller->createNonceField(); ?>
|
65 |
+
<input type="hidden" name="username"/>
|
66 |
+
<input type="hidden" name="action" value="processHardener"/>
|
67 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
68 |
+
<button class="sui-button sui-button-blue" type="submit">
|
69 |
+
<?php _e( "Update Username", "defender-security" ) ?></button>
|
70 |
+
</form>
|
71 |
+
</div>
|
72 |
+
</div>
|
73 |
+
<div class="sui-center-box">
|
74 |
+
<p>
|
75 |
+
<?php _e( "Ensure you backup your database before performing this tweak.", "defender-security" ) ?>
|
76 |
+
</p>
|
77 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
<?php endif; ?>
|
79 |
</div>
|
|
|
80 |
</div>
|
81 |
</div>
|
82 |
+
<script type="text/javascript">
|
83 |
+
jQuery(function ($) {
|
84 |
+
$('#username').keyup(function () {
|
85 |
+
$('input[name="username"]').val($(this).val())
|
86 |
+
})
|
87 |
+
})
|
88 |
+
</script>
|
app/module/hardener/view/rules/db-prefix.php
CHANGED
@@ -1,45 +1,99 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
<div class="
|
13 |
-
|
|
|
|
|
14 |
</div>
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
<p>
|
26 |
-
<?php
|
27 |
</p>
|
28 |
</div>
|
29 |
-
<form method="post" class="hardener-frm rule-process">
|
30 |
-
<?php $controller->createNonceField(); ?>
|
31 |
-
<input type="hidden" name="action" value="processHardener"/>
|
32 |
-
<input type="text"
|
33 |
-
placeholder="<?php esc_attr_e( "Enter new database prefix", "defender-security" ) ?>"
|
34 |
-
name="dbprefix" class="block">
|
35 |
-
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
36 |
-
<button class="button float-r"
|
37 |
-
type="submit"><?php _e( "Update", "defender-security" ) ?></button>
|
38 |
-
</form>
|
39 |
-
<?php $controller->showIgnoreForm() ?>
|
40 |
-
<div class="clear"></div>
|
41 |
<?php endif; ?>
|
42 |
</div>
|
43 |
-
<div class="clear"></div>
|
44 |
</div>
|
45 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
global $wpdb;
|
4 |
+
?>
|
5 |
+
<div id="db_prefix" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
6 |
+
<div class="sui-accordion-item-header">
|
7 |
+
<div class="sui-accordion-item-title">
|
8 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
9 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
10 |
+
<?php _e( "Database Prefix", "defender-security" ) ?>
|
11 |
+
</div>
|
12 |
+
<div class="sui-accordion-col-4">
|
13 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
14 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
15 |
+
</button>
|
16 |
</div>
|
17 |
+
</div>
|
18 |
+
<div class="sui-accordion-item-body">
|
19 |
+
<div class="sui-box">
|
20 |
+
<div class="sui-box-body">
|
21 |
+
<strong>
|
22 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
23 |
+
</strong>
|
24 |
+
<p>
|
25 |
+
<?php _e( "When you first install WordPress on a new database, the default settings start with wp_ as the prefix to anything that gets stored in the tables. This makes it easier for hackers to perform SQL injection attacks if they find a code vulnerability. ", "defender-security" ) ?>
|
26 |
+
</p>
|
27 |
+
<?php if ( $checked ): ?>
|
28 |
+
<div class="sui-notice sui-notice-success">
|
29 |
+
<p><?php printf( __( "You're database prefix is set to <strong>%s</strong> and is unique, %s would be proud.", "defender-security" ), $wpdb->prefix, \WP_Defender\Behavior\Utils::instance()->getDisplayName() ) ?></p>
|
30 |
+
</div>
|
31 |
+
<?php else: ?>
|
32 |
+
<strong>
|
33 |
+
<?php _e( "Status", "defender-security" ) ?>
|
34 |
+
</strong>
|
35 |
+
<div class="sui-notice sui-notice-warning">
|
36 |
+
<p>
|
37 |
+
<?php _e( "Your database prefix is the default wp_ prefix.", "defender-security" ) ?>
|
38 |
+
</p>
|
39 |
+
</div>
|
40 |
+
<p>
|
41 |
+
<?php _e( "You’re currently using the default prefix, it’s much safer to change this to something random.", "defender-security" ) ?>
|
42 |
+
</p>
|
43 |
+
<strong>
|
44 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
45 |
+
</strong>
|
46 |
+
<p>
|
47 |
+
<?php _e( "It’s good practice to come up with a unique prefix to protect yourself from this. We’ve automatically generated a random prefix for you which will make it near impossible for hackers to guess, but feel free to choose your own. Alternately, you can ignore this tweak if you really want to keep the wp_ prefix at your own risk.", "defender-security" ) ?>
|
48 |
+
</p>
|
49 |
+
<div class="sui-border-frame">
|
50 |
+
<div class="sui-form-field ">
|
51 |
+
<label class="sui-label"><?php _e( "New database prefix", "defender-security" ) ?></label>
|
52 |
+
<input type="text" id="dbprefix" class="sui-form-control"/>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<?php endif; ?>
|
56 |
+
</div>
|
57 |
+
<div class="sui-box-footer">
|
58 |
+
<?php if ( $checked ): ?>
|
59 |
+
<form method="post" class="hardener-frm rule-process">
|
60 |
+
<?php $controller->createNonceField(); ?>
|
61 |
+
<input type="hidden" name="action" value="processRevert"/>
|
62 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
63 |
+
<button class="sui-button" type="submit">
|
64 |
+
<i class="sui-icon-undo" aria-hidden="true"></i>
|
65 |
+
<?php _e( "Revert", "defender-security" ) ?></button>
|
66 |
+
</form>
|
67 |
+
<?php else: ?>
|
68 |
+
<div class="sui-actions-left">
|
69 |
+
<?php $controller->showIgnoreForm() ?>
|
70 |
+
</div>
|
71 |
+
<div class="sui-actions-right">
|
72 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
73 |
+
<?php $controller->createNonceField(); ?>
|
74 |
+
<input type="hidden" name="dbprefix"/>
|
75 |
+
<input type="hidden" name="action" value="processHardener"/>
|
76 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
77 |
+
<button class="sui-button sui-button-blue" type="submit">
|
78 |
+
<?php _e( "Update Prefix", "defender-security" ) ?></button>
|
79 |
+
</form>
|
80 |
+
</div>
|
81 |
+
<?php endif; ?>
|
82 |
+
</div>
|
83 |
+
<?php if ( ! $checked ): ?>
|
84 |
+
<div class="sui-center-box">
|
85 |
<p>
|
86 |
+
<?php _e( "Ensure you backup your database before performing this tweak.", "defender-security" ) ?>
|
87 |
</p>
|
88 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
<?php endif; ?>
|
90 |
</div>
|
|
|
91 |
</div>
|
92 |
</div>
|
93 |
+
<script type="text/javascript">
|
94 |
+
jQuery(function ($) {
|
95 |
+
$('#dbprefix').keyup(function () {
|
96 |
+
$('input[name="dbprefix"]').val($(this).val())
|
97 |
+
})
|
98 |
+
})
|
99 |
+
</script>
|
app/module/hardener/view/rules/disable-file-editor.php
CHANGED
@@ -1,45 +1,79 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<
|
12 |
-
|
13 |
-
|
|
|
14 |
</div>
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
</
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
<
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
</div>
|
43 |
-
<div class="clear"></div>
|
44 |
</div>
|
45 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
?>
|
4 |
+
<div id="disable-file-editor" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
5 |
+
<div class="sui-accordion-item-header">
|
6 |
+
<div class="sui-accordion-item-title">
|
7 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
8 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
9 |
+
<?php _e( "File Editor", "defender-security" ) ?>
|
10 |
+
</div>
|
11 |
+
<div class="sui-accordion-col-4">
|
12 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
13 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
14 |
+
</button>
|
15 |
</div>
|
16 |
+
</div>
|
17 |
+
<div class="sui-accordion-item-body">
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-body">
|
20 |
+
<strong>
|
21 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
22 |
+
</strong>
|
23 |
+
<p>
|
24 |
+
<?php _e( "WordPress comes with a file editor built into the system. This means that anyone with access to your login information can further edit your plugin and theme files and inject malicious code. ", "defender-security" ) ?>
|
25 |
+
</p>
|
26 |
+
<strong>
|
27 |
+
<?php _e( "Status", "defender-security" ) ?>
|
28 |
+
</strong>
|
29 |
+
<?php if ( $checked ): ?>
|
30 |
+
<div class="sui-notice sui-notice-success">
|
31 |
+
<p>
|
32 |
+
<?php _e( "You've disabled the file editor, winning.", "defender-security" ) ?>
|
33 |
+
</p>
|
34 |
+
</div>
|
35 |
+
<?php else: ?>
|
36 |
+
<div class="sui-notice sui-notice-warning">
|
37 |
+
<p>
|
38 |
+
<?php _e( "The file editor is currently enabled.", "defender-security" ) ?>
|
39 |
+
</p>
|
40 |
+
</div>
|
41 |
+
<p>
|
42 |
+
<?php _e( "The file editor is currently active. If you don’t need it, we recommend disabling this feature.", "defender-security" ) ?>
|
43 |
+
</p>
|
44 |
+
<strong>
|
45 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
46 |
+
</strong>
|
47 |
+
<p>
|
48 |
+
<?php _e( "We can automatically disable the file editor for you below. Alternately, you can ignore this tweak if you don’t require it. Either way, you can easily revert these actions at any time.", "defender-security" ) ?>
|
49 |
+
</p>
|
50 |
+
<?php endif; ?>
|
51 |
+
</div>
|
52 |
+
<div class="sui-box-footer">
|
53 |
+
<?php if ( $checked ): ?>
|
54 |
+
<form method="post" class="hardener-frm rule-process">
|
55 |
+
<?php $controller->createNonceField(); ?>
|
56 |
+
<input type="hidden" name="action" value="processRevert"/>
|
57 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
58 |
+
<button class="sui-button" type="submit">
|
59 |
+
<i class="sui-icon-undo" aria-hidden="true"></i>
|
60 |
+
<?php _e( "Revert", "defender-security" ) ?></button>
|
61 |
+
</form>
|
62 |
+
<?php else: ?>
|
63 |
+
<div class="sui-actions-left">
|
64 |
+
<?php $controller->showIgnoreForm() ?>
|
65 |
+
</div>
|
66 |
+
<div class="sui-actions-right">
|
67 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
68 |
+
<?php $controller->createNonceField(); ?>
|
69 |
+
<input type="hidden" name="action" value="processHardener"/>
|
70 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
71 |
+
<button class="sui-button sui-button-blue" type="submit">
|
72 |
+
<?php _e( "Disable file editor", "defender-security" ) ?></button>
|
73 |
+
</form>
|
74 |
+
</div>
|
75 |
+
<?php endif; ?>
|
76 |
+
</div>
|
77 |
</div>
|
|
|
78 |
</div>
|
79 |
+
</div>
|
app/module/hardener/view/rules/disable-trackback.php
CHANGED
@@ -1,57 +1,78 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
<
|
12 |
-
|
13 |
-
|
|
|
14 |
</div>
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
<
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
</div>
|
55 |
-
<div class="clear"></div>
|
56 |
</div>
|
57 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
?>
|
4 |
+
<div id="disable_trackback" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
5 |
+
<div class="sui-accordion-item-header">
|
6 |
+
<div class="sui-accordion-item-title sui-accordion-col-8">
|
7 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
8 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
9 |
+
<?php _e( "Disable trackbacks and pingbacks", "defender-security" ) ?>
|
10 |
+
</div>
|
11 |
+
<div class="sui-accordion-col-4">
|
12 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
13 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
14 |
+
</button>
|
15 |
</div>
|
16 |
+
</div>
|
17 |
+
<div class="sui-accordion-item-body">
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-body">
|
20 |
+
<strong>
|
21 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
22 |
+
</strong>
|
23 |
+
<p>
|
24 |
+
<?php _e( "Pingbacks notify a website when it has been mentioned by another website, like a form of courtesy communication. However, these notifications can be sent to any website willing to receive them, opening you up to DDoS attacks, which can take your website down in seconds and fill your posts with spam comments.", "defender-security" ) ?>
|
25 |
+
</p>
|
26 |
+
<?php if ( $checked ): ?>
|
27 |
+
<div class="sui-notice sui-notice-success">
|
28 |
+
<p><?php _e( "Trackbacks and pingbacks are disabled, nice work!", "defender-security" ) ?></p>
|
29 |
+
</div>
|
30 |
+
<?php else: ?>
|
31 |
+
<strong>
|
32 |
+
<?php _e( "Status", "defender-security" ) ?>
|
33 |
+
</strong>
|
34 |
+
<div class="sui-notice sui-notice-warning">
|
35 |
+
<p>
|
36 |
+
<?php _e( "Trackbacks and pingbacks are currently enabled.", "defender-security" ) ?>
|
37 |
+
</p>
|
38 |
+
</div>
|
39 |
+
<p>
|
40 |
+
<?php _e( "Trackbacks and pingbacks can lead to DDos attacks and tons of spam comments. If you don’t require this feature, we recommend turning it off.", "defender-security" ) ?>
|
41 |
+
</p>
|
42 |
+
<strong>
|
43 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
44 |
+
</strong>
|
45 |
+
<p>
|
46 |
+
<?php _e( "We can automatically disable pingbacks and trackbacks for you below. Alternately, you can ignore this tweak if you don’t require it. Either way, you can easily revert these actions at any time.", "defender-security" ) ?>
|
47 |
+
</p>
|
48 |
+
<?php endif; ?>
|
49 |
+
</div>
|
50 |
+
<div class="sui-box-footer">
|
51 |
+
<?php if ( $checked ): ?>
|
52 |
+
<form method="post" class="hardener-frm rule-process">
|
53 |
+
<?php $controller->createNonceField(); ?>
|
54 |
+
<input type="hidden" name="action" value="processRevert"/>
|
55 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
56 |
+
<button class="sui-button" type="submit">
|
57 |
+
<i class="sui-icon-undo" aria-hidden="true"></i>
|
58 |
+
<?php _e( "Revert", "defender-security" ) ?></button>
|
59 |
+
</form>
|
60 |
+
<?php else: ?>
|
61 |
+
<div class="sui-actions-left">
|
62 |
+
<?php $controller->showIgnoreForm() ?>
|
63 |
+
</div>
|
64 |
+
<div class="sui-actions-right">
|
65 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
66 |
+
<?php $controller->createNonceField(); ?>
|
67 |
+
<input type="hidden" name="action" value="processHardener"/>
|
68 |
+
<input type="hidden" name="updatePosts" value="no"/>
|
69 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
70 |
+
<button class="sui-button sui-button-blue" type="submit">
|
71 |
+
<?php _e( "Disable Pingbacks", "defender-security" ) ?></button>
|
72 |
+
</form>
|
73 |
+
</div>
|
74 |
+
<?php endif; ?>
|
75 |
+
</div>
|
76 |
</div>
|
|
|
77 |
</div>
|
78 |
+
</div>
|
app/module/hardener/view/rules/disable-xml-rpc.php
CHANGED
@@ -1,54 +1,83 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
<div class="rule-content">
|
11 |
-
<h3><?php _e( "Overview", "defender-security" ) ?></h3>
|
12 |
-
<div class="line end">
|
13 |
-
<?php _e( 'XML-RPC is a system that allows you to post on your WordPress blog using popular weblog clients like Windows Live Writer. Technically, it’s a remote procedure call which uses XML to encode its calls and HTTP as a transport mechanism.<br/><br/>
|
14 |
-
If you are using the WordPress mobile app, want to make connections to services like IFTTT, or want to access and publish to your blog remotely, then you need XML-RPC enabled.<br/><br/>
|
15 |
-
In the past, there were security concerns with XML-RPC so we recommend making sure this feature is fully disabled if you don’t need it active.', "defender-security" ) ?>
|
16 |
</div>
|
17 |
-
<
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
<?php _e( 'Automatically disable this feature below. You can re-enable it at any time if you need to.', "defender-security" ) ?>
|
22 |
</div>
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
</p>
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
<
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
</div>
|
52 |
-
<div class="clear"></div>
|
53 |
</div>
|
54 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
?>
|
4 |
+
<div id="disable_xml_rpc" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
5 |
+
<div class="sui-accordion-item-header">
|
6 |
+
<div class="sui-accordion-item-title">
|
7 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
8 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
9 |
+
<?php _e( 'XML-RPC', "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
</div>
|
11 |
+
<div class="sui-accordion-col-4">
|
12 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
13 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
14 |
+
</button>
|
|
|
15 |
</div>
|
16 |
+
</div>
|
17 |
+
<div class="sui-accordion-item-body">
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-body">
|
20 |
+
<strong>
|
21 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
22 |
+
</strong>
|
23 |
+
<p>
|
24 |
+
<?php _e( "XML-RPC is a system that allows you to post on your WordPress blog using popular weblog clients like Windows Live Writer. Technically, it’s a remote procedure call which uses XML to encode its calls and HTTP as a transport mechanism.", "defender-security" ) ?>
|
25 |
+
</p>
|
26 |
+
<p>
|
27 |
+
<?php _e( "If you are using the WordPress mobile app, want to make connections to services like IFTTT, or want to access and publish to your blog remotely, then you need XML-RPC enabled, otherwise it’s just another portal for hackers to target and exploit.", "defender-security" ) ?>
|
28 |
</p>
|
29 |
+
<?php if ( $checked ): ?>
|
30 |
+
<div class="sui-notice sui-notice-success">
|
31 |
+
<p>
|
32 |
+
<?php _e( "XML-RPC is disabled.", "defender-security" ) ?>
|
33 |
+
</p>
|
34 |
+
</div>
|
35 |
+
<?php else: ?>
|
36 |
+
<strong>
|
37 |
+
<?php _e( "Status", "defender-security" ) ?>
|
38 |
+
</strong>
|
39 |
+
<div class="sui-notice sui-notice-warning">
|
40 |
+
<p>
|
41 |
+
<?php _e( "XML-RPC is currently enabled.", "defender-security" ) ?>
|
42 |
+
</p>
|
43 |
+
</div>
|
44 |
+
<p>
|
45 |
+
<?php _e( "In the past, there were security concerns with XML-RPC so we recommend making sure this feature is fully disabled if you don’t need it active.", "defender-security" ) ?>
|
46 |
+
</p>
|
47 |
+
<strong>
|
48 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
49 |
+
</strong>
|
50 |
+
<p>
|
51 |
+
<?php _e( "We can automatically disable XML-RPC for you below. Alternately, you can ignore this tweak if you don’t require it. Either way, you can easily revert these actions at any time.", "defender-security" ) ?>
|
52 |
+
</p>
|
53 |
+
<?php endif; ?>
|
54 |
+
</div>
|
55 |
+
<div class="sui-box-footer">
|
56 |
+
<?php if ( $checked ): ?>
|
57 |
+
<form method="post" class="hardener-frm rule-process">
|
58 |
+
<?php $controller->createNonceField(); ?>
|
59 |
+
<input type="hidden" name="action" value="processRevert"/>
|
60 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
61 |
+
<button class="sui-button" type="submit">
|
62 |
+
<i class="sui-icon-undo" aria-hidden="true"></i>
|
63 |
+
<?php _e( "Revert", "defender-security" ) ?></button>
|
64 |
+
</form>
|
65 |
+
<?php else: ?>
|
66 |
+
<div class="sui-actions-left">
|
67 |
+
<?php $controller->showIgnoreForm() ?>
|
68 |
+
</div>
|
69 |
+
<div class="sui-actions-right">
|
70 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
71 |
+
<?php $controller->createNonceField(); ?>
|
72 |
+
<input type="hidden" name="action" value="processHardener"/>
|
73 |
+
<input type="hidden" name="updatePosts" value="no"/>
|
74 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
75 |
+
<button class="sui-button sui-button-blue" type="submit">
|
76 |
+
<?php _e( "Disable XML-RPC", "defender-security" ) ?></button>
|
77 |
+
</form>
|
78 |
+
</div>
|
79 |
+
<?php endif; ?>
|
80 |
+
</div>
|
81 |
</div>
|
|
|
82 |
</div>
|
83 |
+
</div>
|
app/module/hardener/view/rules/hide-error.php
CHANGED
@@ -1,48 +1,84 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
<div class="rule-content">
|
11 |
-
<h3><?php _e( "Overview", "defender-security" ) ?></h3>
|
12 |
-
<div class="line end">
|
13 |
-
<?php _e( "In addition to hiding error logs, developers often use the built-in front-end PHP and scripts error debugging feature, which displays code errors on the front-end. This provides hackers yet another way to find loopholes in your site's security.", "defender-security" ) ?>
|
14 |
</div>
|
15 |
-
<
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
</div>
|
28 |
-
|
29 |
-
|
30 |
-
<
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
<?php
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
</p>
|
42 |
-
<?php $controller->showIgnoreForm() ?>
|
43 |
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
<?php endif; ?>
|
45 |
</div>
|
46 |
-
<div class="clear"></div>
|
47 |
</div>
|
48 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
?>
|
4 |
+
<div id="disable-file-editor" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
5 |
+
<div class="sui-accordion-item-header">
|
6 |
+
<div class="sui-accordion-item-title">
|
7 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
8 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
9 |
+
<?php _e( "Error Reporting", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
10 |
</div>
|
11 |
+
<div class="sui-accordion-col-4">
|
12 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
13 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
14 |
+
</button>
|
15 |
+
</div>
|
16 |
+
</div>
|
17 |
+
<div class="sui-accordion-item-body">
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-body">
|
20 |
+
<strong>
|
21 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
22 |
+
</strong>
|
23 |
+
<p>
|
24 |
+
<?php _e( "Developers often use the built-in PHP and scripts error debugging feature, which displays code errors on the frontend of your website. It’s useful for active development, but on live sites provides hackers yet another way to find loopholes in your site's security.", "defender-security" ) ?>
|
25 |
+
</p>
|
26 |
+
<strong>
|
27 |
+
<?php _e( "Status", "defender-security" ) ?>
|
28 |
+
</strong>
|
29 |
+
<?php if ( $checked ): ?>
|
30 |
+
<div class="sui-notice sui-notice-success">
|
31 |
+
<p>
|
32 |
+
<?php _e( "You've disabled all error reporting, Houston will never report a problem.", "defender-security" ) ?>
|
33 |
+
</p>
|
34 |
</div>
|
35 |
+
<?php else: ?>
|
36 |
+
<?php if ( WP_DEBUG == false || ( WP_DEBUG == true && WP_DEBUG_DISPLAY == false ) ): ?>
|
37 |
+
<div class="sui-notice sui-notice-warning">
|
38 |
+
<p>
|
39 |
+
<?php _e( "We attempted to disable the display_errors setting to prevent code errors displaying but it’s being overridden by your server config. Please contact your hosting provider and ask them to set display_errors to false.", "defender-security" ) ?>
|
40 |
+
</p>
|
41 |
+
</div>
|
42 |
+
<?php else: ?>
|
43 |
+
<div class="sui-notice sui-notice-warning">
|
44 |
+
<p>
|
45 |
+
<?php _e( "Error debugging is currently allowed.", "defender-security" ) ?>
|
46 |
+
</p>
|
47 |
+
</div>
|
48 |
+
<?php endif; ?>
|
49 |
+
<p>
|
50 |
+
<?php _e( "While it may not be in use, we haven’t found any code stopping debugging information being output. It’s best to remove all doubt and disable error reporting completely.", "defender-security" ) ?>
|
51 |
+
</p>
|
52 |
+
<strong>
|
53 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
54 |
+
</strong>
|
55 |
+
<p>
|
56 |
+
<?php _e( "We can automatically disable all error reporting for you below. Alternately, you can ignore this tweak if you don’t require it. Either way, you can easily revert these actions at any time.", "defender-security" ) ?>
|
57 |
</p>
|
|
|
58 |
<?php endif; ?>
|
59 |
+
</div>
|
60 |
+
<?php if ( WP_DEBUG == true && ( ! defined( 'WP_DEBUG_DISPLAY' ) || WP_DEBUG_DISPLAY != false ) ): ?>
|
61 |
+
<div class="sui-box-footer">
|
62 |
+
<div class="sui-actions-left">
|
63 |
+
<?php $controller->showIgnoreForm() ?>
|
64 |
+
</div>
|
65 |
+
<div class="sui-actions-right">
|
66 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
67 |
+
<?php $controller->createNonceField(); ?>
|
68 |
+
<input type="hidden" name="action" value="processHardener"/>
|
69 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
70 |
+
<button class="sui-button sui-button-blue" type="submit">
|
71 |
+
<?php _e( "Disable error debugging", "defender-security" ) ?></button>
|
72 |
+
</form>
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
+
<?php else: ?>
|
76 |
+
<div class="sui-box-footer">
|
77 |
+
<div class="sui-actions-left">
|
78 |
+
<?php $controller->showIgnoreForm() ?>
|
79 |
+
</div>
|
80 |
+
</div>
|
81 |
<?php endif; ?>
|
82 |
</div>
|
|
|
83 |
</div>
|
84 |
+
</div>
|
app/module/hardener/view/rules/information-disclosure/apache_litespeed.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<form method="post" class="hardener-frm hardener-update-frm rule-process">
|
2 |
+
<?php $controller->createNonceField(); ?>
|
3 |
+
<input type="hidden" name="action" value="processHardener"/>
|
4 |
+
<input type="hidden" name="current_server"
|
5 |
+
value="<?php echo $setting->active_server; ?>"/>
|
6 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
7 |
+
<p class="no-margin-bottom">
|
8 |
+
<?php _e( "We can automatically add an .htaccess file to your root folder to action this fix.", "defender-security" ) ?>
|
9 |
+
</p>
|
10 |
+
<button class="sui-button sui-button-blue" type="submit">
|
11 |
+
<?php _e( "Update .htaccess file", "defender-security" ) ?>
|
12 |
+
</button>
|
13 |
+
</form>
|
app/module/hardener/view/rules/information-disclosure/iis7.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<p><?php printf( __( 'For IIS 7 servers, <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc754807(v=ws.10).aspx' ); ?></p>
|
app/module/hardener/view/rules/information-disclosure/nginx.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<p>
|
2 |
+
<?php _e( "We can’t automatically action this fix, but follow the instructions below to patch this up.", "defender-security" ) ?>
|
3 |
+
</p>
|
4 |
+
<strong><?php _e( "Instructions", "defender-security" ) ?></strong>
|
5 |
+
<p>
|
6 |
+
<?php _e( "1. Copy the generated code into your site specific .conf file usually located in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/...", "defender-security" ) ?>
|
7 |
+
</p>
|
8 |
+
<p>
|
9 |
+
<?php _e( "2. Add the code above inside the server section in the file, right before the php location block. Looks something like:", "defender-security" ) ?>
|
10 |
+
<code>location ~ \.php$ {</code>
|
11 |
+
</p>
|
12 |
+
<p>
|
13 |
+
<?php _e( "3. Reload NGINX.", "defender-security" ) ?>
|
14 |
+
</p>
|
15 |
+
<strong><?php _e( "Code", "defender-security" ) ?></strong>
|
16 |
+
<?php
|
17 |
+
if ( DIRECTORY_SEPARATOR == '\\' ) {
|
18 |
+
//Windows
|
19 |
+
$wp_includes = str_replace( ABSPATH, '', WPINC );
|
20 |
+
$wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
|
21 |
+
} else {
|
22 |
+
$wp_includes = str_replace( $_SERVER['DOCUMENT_ROOT'], '', ABSPATH . WPINC );
|
23 |
+
$wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
|
24 |
+
}
|
25 |
+
|
26 |
+
$rules = "# Turn off directory indexing
|
27 |
+
autoindex off;
|
28 |
+
|
29 |
+
# Deny access to htaccess and other hidden files
|
30 |
+
location ~ /\. {
|
31 |
+
deny all;
|
32 |
+
}
|
33 |
+
|
34 |
+
# Deny access to wp-config.php file
|
35 |
+
location = /wp-config.php {
|
36 |
+
deny all;
|
37 |
+
}
|
38 |
+
|
39 |
+
# Deny access to revealing or potentially dangerous files in the /wp-content/ directory (including sub-folders)
|
40 |
+
location ~* ^$wp_content/.*\.(txt|md|exe|sh|bak|inc|pot|po|mo|log|sql)$ {
|
41 |
+
deny all;
|
42 |
+
}
|
43 |
+
";
|
44 |
+
?>
|
45 |
+
<p><code>## WP Defender - Prevent information disclosure ##<?php echo esc_html( $rules ); ?>## WP Defender - End ##</code></p>
|
46 |
+
<div class="sui-notice">
|
47 |
+
<p><?php echo sprintf( __( "Still having trouble? <a target='_blank' href=\"%s\">Open a support ticket</a>.", "defender-security" ), 'https://premium.wpmudev.org/forums/forum/support#question' ) ?></p>
|
48 |
+
</div>
|
app/module/hardener/view/rules/login-duration.php
CHANGED
@@ -1,53 +1,151 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
<div class="
|
13 |
-
|
|
|
|
|
14 |
</div>
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
<form method="post" class="hardener-frm rule-process">
|
26 |
-
|
27 |
<input type="hidden" name="action" value="processRevert"/>
|
28 |
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
29 |
-
<button class="
|
|
|
|
|
30 |
</form>
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
<?php $controller->createNonceField(); ?>
|
39 |
<input type="hidden" name="action" value="processHardener"/>
|
40 |
-
<input type="text" placeholder="<?php esc_attr_e( "Enter number of days", "defender-security" ) ?>"
|
41 |
-
name="duration" class="block defender-login-duration" />
|
42 |
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
43 |
-
<
|
44 |
-
|
|
|
45 |
</form>
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
endif;
|
50 |
-
?>
|
51 |
</div>
|
52 |
</div>
|
53 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
$days = $controller->getService()->getDuration();
|
4 |
+
?>
|
5 |
+
<div id="login-duration" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
6 |
+
<div class="sui-accordion-item-header">
|
7 |
+
<div class="sui-accordion-item-title">
|
8 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
9 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
10 |
+
<?php echo $controller->getTitle() ?>
|
11 |
+
</div>
|
12 |
+
<div class="sui-accordion-col-4">
|
13 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
14 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
15 |
+
</button>
|
16 |
</div>
|
17 |
+
</div>
|
18 |
+
<div class="sui-accordion-item-body">
|
19 |
+
<div class="sui-box">
|
20 |
+
<div class="sui-box-body">
|
21 |
+
<strong>
|
22 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
23 |
+
</strong>
|
24 |
+
<p>
|
25 |
+
<?php _e( "By default, users who select the 'remember me' option will stay logged in for 14 days. If you and your users don’t need to login to your website backend regularly, it’s good practice to reduce this default time to reduce the risk of someone gaining access to your automatically logged in account.", "defender-security" ) ?>
|
26 |
+
</p>
|
27 |
+
<?php if ( $checked ): ?>
|
28 |
+
<div class="sui-notice sui-notice-success">
|
29 |
+
<p><?php printf( __( "You've adjusted the default login duration to %d days.", "defender-security" ), $days ) ?></p>
|
30 |
+
</div>
|
31 |
+
<?php else: ?>
|
32 |
+
<strong>
|
33 |
+
<?php _e( "Status", "defender-security" ) ?>
|
34 |
+
</strong>
|
35 |
+
<div class="sui-notice sui-notice-warning">
|
36 |
+
<p>
|
37 |
+
<?php printf( __( "Your current login duration is the default %d days.", "defender-security" ), $days ) ?>
|
38 |
+
</p>
|
39 |
+
</div>
|
40 |
+
<?php if ( $days > 7 ): ?>
|
41 |
+
<p>
|
42 |
+
<?php printf( __( "If you don’t need to stay logged in for %d days, we recommend you reduce this duration to 7 days or less.", "defender-security" ), $days ) ?>
|
43 |
+
</p>
|
44 |
+
<?php endif; ?>
|
45 |
+
<strong>
|
46 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
47 |
+
</strong>
|
48 |
+
<p>
|
49 |
+
<?php _e( "Choose the shortest login duration that most suit your website’s use case.", "defender-security" ) ?>
|
50 |
+
</p>
|
51 |
+
<div class="sui-form-field">
|
52 |
+
<label class="sui-label"><?php _e( "Login duration", "defender-security" ) ?></label>
|
53 |
+
<input type="text" id="duration"
|
54 |
+
class="sui-input-sm sui-field-has-suffix defender-login-duration sui-form-control"/>
|
55 |
+
<span class="sui-field-suffix"><?php _e( "Days", "defender-security" ) ?></span>
|
56 |
+
</div>
|
57 |
+
<?php endif; ?>
|
58 |
+
</div>
|
59 |
+
<div class="sui-box-footer">
|
60 |
+
<?php if ( $checked ): ?>
|
61 |
<form method="post" class="hardener-frm rule-process">
|
62 |
+
<?php $controller->createNonceField(); ?>
|
63 |
<input type="hidden" name="action" value="processRevert"/>
|
64 |
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
65 |
+
<button class="sui-button" type="submit">
|
66 |
+
<i class="sui-icon-undo" aria-hidden="true"></i>
|
67 |
+
<?php _e( "Revert", "defender-security" ) ?></button>
|
68 |
</form>
|
69 |
+
<?php else: ?>
|
70 |
+
<div class="sui-actions-left">
|
71 |
+
<?php $controller->showIgnoreForm() ?>
|
72 |
+
</div>
|
73 |
+
<div class="sui-actions-right">
|
74 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
75 |
+
<?php $controller->createNonceField(); ?>
|
|
|
76 |
<input type="hidden" name="action" value="processHardener"/>
|
|
|
|
|
77 |
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
78 |
+
<input type="hidden" name="duration">
|
79 |
+
<button class="sui-button sui-button-blue" type="submit">
|
80 |
+
<?php _e( "Update", "defender-security" ) ?></button>
|
81 |
</form>
|
82 |
+
</div>
|
83 |
+
<?php endif; ?>
|
84 |
+
</div>
|
|
|
|
|
85 |
</div>
|
86 |
</div>
|
87 |
</div>
|
88 |
+
<script type="text/javascript">
|
89 |
+
jQuery(function ($) {
|
90 |
+
$('#duration').keyup(function () {
|
91 |
+
$('input[name="duration"]').val($(this).val())
|
92 |
+
})
|
93 |
+
})
|
94 |
+
</script>
|
95 |
+
<!---->
|
96 |
+
<!--<div class="rule closed" id="login-duration">-->
|
97 |
+
<!-- <div class="rule-title" role="link" tabindex="0">-->
|
98 |
+
<!-- --><?php //if ( $controller->check() == false ): ?>
|
99 |
+
<!-- <i class="def-icon icon-warning" aria-hidden="true"></i>-->
|
100 |
+
<!-- --><?php //else: ?>
|
101 |
+
<!-- <i class="def-icon icon-tick" aria-hidden="true"></i>-->
|
102 |
+
<!-- --><?php //endif; ?>
|
103 |
+
<!-- --><?php //echo $controller->getTitle() ?>
|
104 |
+
<!-- </div>-->
|
105 |
+
<!-- <div class="rule-content">-->
|
106 |
+
<!-- <h3>--><?php //_e( "Overview", "defender-security" ) ?><!--</h3>-->
|
107 |
+
<!-- <div class="line end">-->
|
108 |
+
<!-- --><?php //_e( "By default, users who select the 'remember me' option stay logged in for 14 days", "defender-security" ) ?>
|
109 |
+
<!-- </div>-->
|
110 |
+
<!-- <h3>-->
|
111 |
+
<!-- --><?php //_e( "How to fix", "defender-security" ) ?>
|
112 |
+
<!-- </h3>-->
|
113 |
+
<!-- <div class="well">-->
|
114 |
+
<!-- --><?php
|
115 |
+
// $setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
116 |
+
//
|
117 |
+
// if ( $controller->check() ):
|
118 |
+
// ?>
|
119 |
+
<!-- <p class="line">--><?php //esc_attr_e( sprintf( __( 'Login Duration is locked down. Current duration is %d days', "defender-security" ), $controller->getService()->getDuration() ) ); ?><!--</p>-->
|
120 |
+
<!-- <form method="post" class="hardener-frm rule-process">-->
|
121 |
+
<!-- --><?php //$controller->createNonceField(); ?>
|
122 |
+
<!-- <input type="hidden" name="action" value="processRevert"/>-->
|
123 |
+
<!-- <input type="hidden" name="slug" value="--><?php //echo $controller::$slug ?><!--"/>-->
|
124 |
+
<!-- <button class="button button-small button-grey" type="submit">-->
|
125 |
+
<!-- <i class="sui-icon-undo" aria-hidden="true"></i>-->
|
126 |
+
<!-- --><?php //_e( "Revert", "defender-security" ) ?><!--</button>-->
|
127 |
+
<!-- </form>-->
|
128 |
+
<!-- --><?php
|
129 |
+
// else:
|
130 |
+
// ?>
|
131 |
+
<!-- <div class="line">-->
|
132 |
+
<!-- <p>--><?php //_e( "Please change the number of days a user can stay logged in", "defender-security" ) ?><!--</p>-->
|
133 |
+
<!-- </div>-->
|
134 |
+
<!-- <form method="post" class="hardener-frm rule-process">-->
|
135 |
+
<!-- --><?php //$controller->createNonceField(); ?>
|
136 |
+
<!-- <input type="hidden" name="action" value="processHardener"/>-->
|
137 |
+
<!-- <input type="text"-->
|
138 |
+
<!-- placeholder="--><?php //esc_attr_e( "Enter number of days", "defender-security" ) ?><!--"-->
|
139 |
+
<!-- name="duration" class="block defender-login-duration"/>-->
|
140 |
+
<!-- <input type="hidden" name="slug" value="--><?php //echo $controller::$slug ?><!--"/>-->
|
141 |
+
<!-- <button class="button float-r"-->
|
142 |
+
<!-- type="submit">--><?php //_e( "Update", "defender-security" ) ?><!--</button>-->
|
143 |
+
<!-- </form>-->
|
144 |
+
<!-- --><?php //$controller->showIgnoreForm() ?>
|
145 |
+
<!-- <div class="clear"></div>-->
|
146 |
+
<!-- --><?php
|
147 |
+
// endif;
|
148 |
+
// ?>
|
149 |
+
<!-- </div>-->
|
150 |
+
<!-- </div>-->
|
151 |
+
<!--</div>-->
|
app/module/hardener/view/rules/php-version.php
CHANGED
@@ -1,47 +1,74 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
<div class="line">
|
13 |
-
<p>
|
14 |
-
<?php _e( "PHP versions older than 5.6 are no longer supported. For security and stability we strongly recommend you upgrade your PHP version to version 5.6 or newer as soon as possible.", "defender-security" ) ?>
|
15 |
-
</p>
|
16 |
-
<p>
|
17 |
-
<?php printf( esc_html__( "More information: %s", "defender-security" ), '<a target="_blank" href="http://php.net/supported-versions.php">http://php.net/supported-versions.php</a>' ) ?>
|
18 |
-
</p>
|
19 |
</div>
|
20 |
-
<div class="
|
21 |
-
<
|
22 |
-
<
|
23 |
-
|
24 |
-
<span class="<?php echo $class ?>">
|
25 |
-
<?php echo \WP_Defender\Behavior\Utils::instance()->getPHPVersion() ?>
|
26 |
-
</span>
|
27 |
-
</div>
|
28 |
-
<div class="column">
|
29 |
-
<strong><?php _e( "Recommend Version", "defender-security" ) ?></strong>
|
30 |
-
<span><?php echo '5.6' ?></span>
|
31 |
-
</div>
|
32 |
</div>
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
<?php endif; ?>
|
42 |
-
<div class="clear"></div>
|
43 |
</div>
|
44 |
-
<?php $controller->showIgnoreForm() ?>
|
45 |
-
<div class="clear"></div>
|
46 |
</div>
|
47 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
$settings = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
4 |
+
global $wpdb;
|
5 |
+
?>
|
6 |
+
<div id="php_version" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
7 |
+
<div class="sui-accordion-item-header">
|
8 |
+
<div class="sui-accordion-item-title">
|
9 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
10 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
11 |
+
<?php _e( "PHP Version", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
</div>
|
13 |
+
<div class="sui-accordion-col-4">
|
14 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
15 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
16 |
+
</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
</div>
|
18 |
+
</div>
|
19 |
+
<div class="sui-accordion-item-body">
|
20 |
+
<div class="sui-box">
|
21 |
+
<div class="sui-box-body">
|
22 |
+
<strong>
|
23 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
24 |
+
</strong>
|
25 |
+
<p>
|
26 |
+
<?php _e( "PHP is the software that powers WordPress. It interprets the WordPress code and generates web pages people view. Naturally, PHP comes in different versions and is regularly updated. As newer versions are released, WordPress drops support for older PHP versions in favour of newer, faster versions with fewer bugs.", "defender-security" ) ?>
|
27 |
+
</p>
|
28 |
+
<strong>
|
29 |
+
<?php _e( "Status", "defender-security" ) ?>
|
30 |
+
</strong>
|
31 |
+
<div class="sui-border-frame">
|
32 |
+
<div class="sui-row">
|
33 |
+
<div class="sui-col">
|
34 |
+
<strong><?php _e( "Current PHP version", "defender-security" ) ?></strong>
|
35 |
+
<span class="sui-tag <?php echo $checked ? 'sui-tag-success' : 'sui-tag-warning' ?>"><?php echo phpversion() ?></span>
|
36 |
+
</div>
|
37 |
+
<div class="sui-col">
|
38 |
+
<strong><?php _e( "Recommended", "defender-security" ) ?></strong>
|
39 |
+
<span class="sui-tag"><?php printf( __( "%s or above", "defender-security" ), $settings->min_php_version ) ?></span>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
</div>
|
43 |
+
<p>
|
44 |
+
<?php printf( __( "PHP versions older than %s are no longer supported. For security and stability we strongly recommend you upgrade your PHP version to version %s or newer as soon as possible. ", "defender-security" ), $settings->min_php_version, $settings->min_php_version ) ?>
|
45 |
+
</p>
|
46 |
+
<p>
|
47 |
+
<?php _e( "For more information visit <a target='_blank' href='http://php.net/supported-versions.php'>http://php.net/supported-versions.php</a>", "defender-security" ) ?>
|
48 |
+
</p>
|
49 |
+
<strong>
|
50 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
51 |
+
</strong>
|
52 |
+
<p>
|
53 |
+
<?php printf( __( "Upgrade your PHP version to %s or above. Currently the latest stable version of PHP is %s.", "defender-security" ), $settings->min_php_version, $settings->stable_php_version ) ?>
|
54 |
+
</p>
|
55 |
+
<?php if ( $checked ): ?>
|
56 |
+
<div class="sui-notice sui-notice-success">
|
57 |
+
<p><?php _e( "You have the latest version of PHP installed, good stuff!", "defender-security" ) ?></p>
|
58 |
+
</div>
|
59 |
+
<?php else: ?>
|
60 |
+
<div class="sui-notice">
|
61 |
+
<p><?php _e( "We can’t update PHP for you, contact your hosting provider or developer to help you upgrade.", "defender-security" ) ?></p>
|
62 |
+
</div>
|
63 |
+
<?php endif; ?>
|
64 |
+
</div>
|
65 |
+
<?php if ( ! $checked ): ?>
|
66 |
+
<div class="sui-box-footer">
|
67 |
+
<div class="sui-actions-left">
|
68 |
+
<?php $controller->showIgnoreForm() ?>
|
69 |
+
</div>
|
70 |
+
</div>
|
71 |
<?php endif; ?>
|
|
|
72 |
</div>
|
|
|
|
|
73 |
</div>
|
74 |
+
</div>
|
app/module/hardener/view/rules/prevent-php-executed.php
CHANGED
@@ -1,202 +1,115 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
<?php if ( $controller->check() == false ): ?>
|
4 |
-
<i class="def-icon icon-warning" aria-hidden="true"></i>
|
5 |
-
<?php else: ?>
|
6 |
-
<i class="def-icon icon-tick" aria-hidden="true"></i>
|
7 |
-
<?php endif; ?>
|
8 |
-
<?php _e( "Prevent PHP execution", "defender-security" ) ?>
|
9 |
-
</div>
|
10 |
-
<div class="rule-content">
|
11 |
-
<h3><?php _e( "Overview", "defender-security" ) ?></h3>
|
12 |
-
<div class="line end">
|
13 |
-
<?php _e( "By default, a plugin/theme vulnerability could allow a PHP file to get uploaded into your site's directories and in turn execute harmful scripts that can wreak havoc on your website. Prevent this altogether by disabling direct PHP execution in directories that don't require it.", "defender-security" ) ?>
|
14 |
-
</div>
|
15 |
-
<h3>
|
16 |
-
<?php _e( "How to fix", "defender-security" ) ?>
|
17 |
-
</h3>
|
18 |
-
<div class="well">
|
19 |
-
<?php
|
20 |
-
$setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
21 |
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
</p>
|
47 |
-
<
|
48 |
-
<?php
|
49 |
-
|
50 |
-
|
51 |
-
<
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
$servers = \WP_Defender\Behavior\Utils::instance()->serverTypes();
|
56 |
-
|
57 |
-
if ( DIRECTORY_SEPARATOR == '\\' ) {
|
58 |
-
//Windows
|
59 |
-
$wp_includes = str_replace( ABSPATH, '', WPINC );
|
60 |
-
$wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
|
61 |
-
} else {
|
62 |
-
$wp_includes = str_replace( $_SERVER['DOCUMENT_ROOT'], '', ABSPATH . WPINC );
|
63 |
-
$wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
|
64 |
-
}
|
65 |
-
global $is_nginx, $is_IIS, $is_iis7;
|
66 |
-
if ( $is_nginx ) {
|
67 |
-
$setting->active_server = 'nginx';
|
68 |
-
} else if ( $is_IIS ) {
|
69 |
-
$setting->active_server = 'iis';
|
70 |
-
} else if ( $is_iis7 ) {
|
71 |
-
$setting->active_server = 'iis-7';
|
72 |
-
}
|
73 |
-
|
74 |
-
?>
|
75 |
-
<div class="columns">
|
76 |
-
<div class="column is-one-third">
|
77 |
-
<?php _e( 'Server Type:', "defender-security" ); ?>
|
78 |
</div>
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
</select>
|
85 |
-
</div>
|
86 |
-
</div>
|
87 |
-
<input type="hidden" class="hardener-wp-content-dir" value="<?php echo $wp_content; ?>" />
|
88 |
-
<input type="hidden" class="hardener-wp-includes-dir" value="<?php echo $wp_includes; ?>" />
|
89 |
-
<div class="<?php echo ( $setting->active_server != 'apache' ) ? 'wd-hide' : ''; ?> hardener-instructions hardener-instructions-apache">
|
90 |
-
<div class="line">
|
91 |
-
<p><?php _e( "We will place <strong>.htaccess</strong> file into the root folder to lock down the files and folders inside.", "defender-security" ) ?></p>
|
92 |
</div>
|
93 |
-
<
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
</
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
<input type="hidden" name="file_paths" value=""/>
|
111 |
-
<input type="hidden" name="current_server" value="litespeed"/>
|
112 |
-
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
113 |
-
<button class="button float-r"
|
114 |
-
type="submit" ><?php _e( "Add .htaccess file", "defender-security" ) ?></button>
|
115 |
-
</form>
|
116 |
-
</div>
|
117 |
-
<div class="<?php echo ( $setting->active_server != 'nginx' ) ? 'wd-hide' : ''; ?> hardener-instructions hardener-instructions-nginx">
|
118 |
-
<?php
|
119 |
-
|
120 |
-
$rules = "# Stop php access except to needed files in wp-includes
|
121 |
-
location ~* ^$wp_includes/.*(?<!(js/tinymce/wp-tinymce))\.php$ {
|
122 |
-
internal; #internal allows ms-files.php rewrite in multisite to work
|
123 |
-
}
|
124 |
-
|
125 |
-
# Specifically locks down upload directories in case full wp-content rule below is skipped
|
126 |
-
location ~* /(?:uploads|files)/.*\.php$ {
|
127 |
-
deny all;
|
128 |
-
}
|
129 |
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
|
138 |
-
|
139 |
-
<ol>
|
140 |
-
<li>
|
141 |
-
<?php esc_html_e( "Copy the generated code into your site specific .conf file usually located in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/...", "defender-security" ) ?>
|
142 |
-
</li>
|
143 |
-
<li>
|
144 |
-
<?php _e( "Add the code above inside the <strong>server</strong> section in the file, right before the php location block. Looks something like:", "defender-security" ) ?>
|
145 |
-
<pre>location ~ \.php$ {</pre>
|
146 |
-
</li>
|
147 |
-
<li>
|
148 |
-
<?php esc_html_e( "Reload NGINX.", "defender-security" ) ?>
|
149 |
-
</li>
|
150 |
-
</ol>
|
151 |
-
<p><?php echo sprintf( __( "Still having trouble? <a target='_blank' href=\"%s\">Open a support ticket</a>.", "defender-security" ), 'https://premium.wpmudev.org/forums/forum/support#question' ) ?></p>
|
152 |
-
<pre>
|
153 |
-
## WP Defender - Prevent PHP Execution ##
|
154 |
-
<?php echo esc_html( $rules ); ?>
|
155 |
-
<span class="hardener-nginx-extra-instructions"></span>
|
156 |
-
## WP Defender - End ##
|
157 |
-
</pre>
|
158 |
-
</div>
|
159 |
-
<div class="<?php echo ( $setting->active_server != 'iis' ) ? 'wd-hide' : ''; ?> hardener-instructions hardener-instructions-iis">
|
160 |
-
<div class="line">
|
161 |
-
<p><?php printf( __( 'For IIS servers, <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc725855(v=ws.10).aspx' ); ?></p>
|
162 |
-
</div>
|
163 |
-
</div>
|
164 |
-
<div class="<?php echo ( $setting->active_server != 'iis-7' ) ? 'wd-hide' : ''; ?> hardener-instructions hardener-instructions-iis-7">
|
165 |
-
<div class="line">
|
166 |
-
<p><?php _e( "We will place <strong>web.config</strong> file into the uploads folder to lock down the files and folders inside.", "defender-security" ) ?></p>
|
167 |
-
</div>
|
168 |
-
<div class="line">
|
169 |
-
<p><?php printf( __( 'For more information, please <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc725855(v=ws.10).aspx' ); ?></p>
|
170 |
-
</div>
|
171 |
-
<form method="post" class="hardener-frm hardener-litespeed-frm rule-process">
|
172 |
-
<?php $controller->createNonceField(); ?>
|
173 |
-
<input type="hidden" name="action" value="processHardener"/>
|
174 |
-
<input type="hidden" name="current_server" value="iis-7"/>
|
175 |
-
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
176 |
-
<button class="button float-r"
|
177 |
-
type="submit" ><?php _e( "Add web.config file", "defender-security" ) ?></button>
|
178 |
-
</form>
|
179 |
|
180 |
-
</div>
|
181 |
-
<?php $controller->showIgnoreForm();
|
182 |
-
$prevent_php_style = "style='display:none'";
|
183 |
-
if ( in_array( $setting->active_server, array( 'apache', 'litespeed', 'nginx' ) ) ) {
|
184 |
-
$prevent_php_style = "style='display:block'";
|
185 |
-
}
|
186 |
-
?>
|
187 |
-
<div <?php echo $prevent_php_style; ?> class="hardener-instructions hardener-instructions-extra-exceptions">
|
188 |
-
<h3>
|
189 |
-
<?php _e( "Exceptions", "defender-security" ) ?>
|
190 |
-
</h3>
|
191 |
-
<div class="line">
|
192 |
-
<p><?php _e( "By default Defender will lock down directories WordPress doesn't need to allow PHP execution for. However, if you have specific files you need to allow PHP execution for you can add exceptions. Add file name one per line", "defender-security" ) ?></p>
|
193 |
-
<button class="button button-grey hardener-php-excuted-execption" type="button"><?php _e( "Add Exception", "defender-security" ) ?></button>
|
194 |
-
</div>
|
195 |
-
<div class="line">
|
196 |
-
<textarea class="hardener-php-excuted-ignore" style='display:none'></textarea>
|
197 |
</div>
|
|
|
|
|
|
|
|
|
|
|
198 |
</div>
|
199 |
-
|
200 |
</div>
|
201 |
</div>
|
202 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$servers = \WP_Defender\Behavior\Utils::instance()->serverTypes();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
+
if ( DIRECTORY_SEPARATOR == '\\' ) {
|
5 |
+
//Windows
|
6 |
+
$wp_includes = str_replace( ABSPATH, '', WPINC );
|
7 |
+
$wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
|
8 |
+
} else {
|
9 |
+
$wp_includes = str_replace( $_SERVER['DOCUMENT_ROOT'], '', ABSPATH . WPINC );
|
10 |
+
$wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
|
11 |
+
}
|
12 |
+
global $is_nginx, $is_IIS, $is_iis7;
|
13 |
+
$setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
14 |
+
if ( $is_nginx ) {
|
15 |
+
$setting->active_server = 'nginx';
|
16 |
+
} else if ( $is_IIS ) {
|
17 |
+
$setting->active_server = 'iis';
|
18 |
+
} else if ( $is_iis7 ) {
|
19 |
+
$setting->active_server = 'iis-7';
|
20 |
+
}
|
21 |
+
$checked = $controller->check();
|
22 |
+
?>
|
23 |
+
<div id="prevent-php-execute" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
24 |
+
<div class="sui-accordion-item-header">
|
25 |
+
<div class="sui-accordion-item-title">
|
26 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
27 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
28 |
+
<?php _e( "PHP Execution", "defender-security" ) ?>
|
29 |
+
</div>
|
30 |
+
<div class="sui-accordion-col-4">
|
31 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
32 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
33 |
+
</button>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
<div class="sui-accordion-item-body">
|
37 |
+
<div class="sui-box">
|
38 |
+
<div class="sui-box-body">
|
39 |
+
<strong><?php _e( "Overview", "defender-security" ) ?></strong>
|
40 |
+
<p>
|
41 |
+
<?php
|
42 |
+
_e( "By default, a plugin/theme vulnerability could allow a PHP file to get uploaded into your site's directories and in turn execute harmful scripts that can wreak havoc on your website. Prevent this altogether by disabling direct PHP execution in directories that don't require it.", "defender-security" )
|
43 |
+
?>
|
44 |
</p>
|
45 |
+
<strong>
|
46 |
+
<?php _e( "Status", "defender-security" ) ?>
|
47 |
+
</strong>
|
48 |
+
<?php if ( $checked ): ?>
|
49 |
+
<div class="sui-notice sui-notice-success">
|
50 |
+
<p>
|
51 |
+
<?php _e( "You've disabled the file editor, winning.", "defender-security" ) ?>
|
52 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
</div>
|
54 |
+
<?php else: ?>
|
55 |
+
<div class="sui-notice sui-notice-warning">
|
56 |
+
<p>
|
57 |
+
<?php _e( "PHP execution is currently allowed in all directories.", "defender-security" ) ?>
|
58 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
</div>
|
60 |
+
<p>
|
61 |
+
<?php _e( "Currently, all directories can have PHP code executed in them. It’s best to lock this down to only the directories that require, and add any further execeptions you need.", "defender-security" ) ?>
|
62 |
+
</p>
|
63 |
+
<strong>
|
64 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
65 |
+
</strong>
|
66 |
+
<p>
|
67 |
+
<?php _e( "We can lock down directories WordPress doesn’t need to protect you from PHP execution attacks. You can also add exceptions for specific files you need to run. Alternately, you can ignore this tweak if you don’t require it. Either way, you can easily revert these actions at any time.", "defender-security" ) ?>
|
68 |
+
</p>
|
69 |
+
<div class="sui-tabs sui-side-tabs">
|
70 |
+
<div data-tabs>
|
71 |
+
<div class="<?php echo $setting->active_server == 'apache' ? 'active' : '' ?>"><?php _e( "Apache", "defender-security" ) ?></div>
|
72 |
+
<div class="<?php echo $setting->active_server == 'litespeed' ? 'active' : '' ?>"><?php _e( "Litespeed", "defender-security" ) ?></div>
|
73 |
+
<div class="<?php echo $setting->active_server == 'nginx' ? 'active' : '' ?>"><?php _e( "Nginx", "defender-security" ) ?></div>
|
74 |
+
<div class="<?php echo $setting->active_server == 'iis' ? 'active' : '' ?>"><?php _e( "IIS", "defender-security" ) ?></div>
|
75 |
+
<div class="<?php echo $setting->active_server == 'iis7' ? 'active' : '' ?>"><?php _e( "IIS7", "defender-security" ) ?></div>
|
76 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
|
78 |
+
<div data-panes>
|
79 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'apache' ? 'active' : '' ?>">
|
80 |
+
<?php $controller->renderPartial( 'rules/prevent-php/apache_litespeed', array(
|
81 |
+
'setting' => $setting
|
82 |
+
) ) ?>
|
83 |
+
</div>
|
84 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'litespeed' ? 'active' : '' ?>">
|
85 |
+
<?php $controller->renderPartial( 'rules/prevent-php/apache_litespeed', array(
|
86 |
+
'setting' => $setting
|
87 |
+
) ) ?>
|
88 |
+
</div>
|
89 |
+
<div class="sui-tab-boxed hardener-instructions <?php echo $setting->active_server == 'nginx' ? 'active' : '' ?>">
|
90 |
+
<?php $controller->renderPartial( 'rules/prevent-php/nginx', array(
|
91 |
+
'setting' => $setting
|
92 |
+
) ) ?>
|
93 |
+
</div>
|
94 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'iis' ? 'active' : '' ?>">
|
95 |
+
<p><?php printf( __( 'For IIS servers, <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc725855(v=ws.10).aspx' ); ?></p>
|
96 |
+
</div>
|
97 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'iis7' ? 'active' : '' ?>">
|
98 |
+
<?php $controller->renderPartial( 'rules/prevent-php/iis7', array(
|
99 |
+
'setting' => $setting
|
100 |
+
) ) ?>
|
101 |
+
</div>
|
102 |
|
103 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
</div>
|
106 |
+
<?php endif; ?>
|
107 |
+
</div>
|
108 |
+
<div class="sui-box-footer">
|
109 |
+
<div class="sui-actions-left">
|
110 |
+
<?php $controller->showIgnoreForm() ?>
|
111 |
</div>
|
112 |
+
</div>
|
113 |
</div>
|
114 |
</div>
|
115 |
+
</div>
|
app/module/hardener/view/rules/prevent-php/apache_litespeed.php
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<form method="post" class="hardener-frm hardener-update-frm rule-process">
|
2 |
+
<?php $controller->createNonceField(); ?>
|
3 |
+
<input type="hidden" name="action" value="updateHardener"/>
|
4 |
+
<input type="hidden" name="current_server"
|
5 |
+
value="<?php echo $setting->active_server; ?>"/>
|
6 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
7 |
+
<p class="no-margin-bottom">
|
8 |
+
<?php _e( "We can automatically add an .htaccess file to your root folder to action this fix.", "defender-security" ) ?>
|
9 |
+
</p>
|
10 |
+
<button class="sui-button sui-button-blue" type="submit">
|
11 |
+
<?php _e( "Update .htaccess file", "defender-security" ) ?>
|
12 |
+
</button>
|
13 |
+
<div class="sui-form-field margin-top-30">
|
14 |
+
<label class="sui-label"><?php _e( "Exceptions", "defender-security" ) ?></label>
|
15 |
+
<textarea name="file_paths" class="sui-form-control"></textarea>
|
16 |
+
<span class="sui-description">
|
17 |
+
<?php _e( "Add exceptions to PHP files you want to continue to run. Include the full paths to the file.", "defender-security" ) ?>
|
18 |
+
</span>
|
19 |
+
</div>
|
20 |
+
</form>
|
app/module/hardener/view/rules/prevent-php/iis7.php
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<p><?php _e( "We will place <strong>web.config</strong> file into the uploads folder to lock down the files and folders inside.", "defender-security" ) ?></p>
|
2 |
+
<p><?php printf( __( 'For more information, please <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc725855(v=ws.10).aspx' ); ?></p>
|
3 |
+
<form method="post" class="hardener-frm hardener-litespeed-frm rule-process">
|
4 |
+
<?php $controller->createNonceField(); ?>
|
5 |
+
<input type="hidden" name="action" value="processHardener"/>
|
6 |
+
<input type="hidden" name="current_server" value="iis-7"/>
|
7 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
8 |
+
<button class="sui-button sui-button-blue" type="submit">
|
9 |
+
<?php _e( "Add web.config file", "defender-security" ) ?></button>
|
10 |
+
</form>
|
app/module/hardener/view/rules/prevent-php/nginx.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<p>
|
2 |
+
<?php _e( "We can’t automatically action this fix, but follow the instructions below to patch this up.
|
3 |
+
First, add any exceptions to files you want to allow PHP to be executed from, then follow the instructions below.", "defender-security" ) ?>
|
4 |
+
</p>
|
5 |
+
<div class="sui-form-field margin-top-30">
|
6 |
+
<label class="sui-label"><?php _e( "Exceptions", "defender-security" ) ?></label>
|
7 |
+
<textarea class="sui-form-control hardener-php-excuted-ignore"></textarea>
|
8 |
+
<span class="sui-description">
|
9 |
+
<?php _e( "Add exceptions to PHP files you want to continue to run. Include the full paths to the file.", "defender-security" ) ?>
|
10 |
+
</span>
|
11 |
+
</div>
|
12 |
+
<strong><?php _e( "Instructions", "defender-security" ) ?></strong>
|
13 |
+
<p>
|
14 |
+
<?php _e( "1. Copy the generated code into your site specific .conf file usually located in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/...", "defender-security" ) ?>
|
15 |
+
</p>
|
16 |
+
<p>
|
17 |
+
<?php _e( "2. Add the code above inside the server section in the file, right before the php location block. Looks something like:", "defender-security" ) ?>
|
18 |
+
<code>location ~ \.php$ {</code>
|
19 |
+
</p>
|
20 |
+
<p>
|
21 |
+
<?php _e( "3. Reload NGINX.", "defender-security" ) ?>
|
22 |
+
</p>
|
23 |
+
<strong><?php _e( "Code", "defender-security" ) ?></strong>
|
24 |
+
<?php
|
25 |
+
if ( DIRECTORY_SEPARATOR == '\\' ) {
|
26 |
+
//Windows
|
27 |
+
$wp_includes = str_replace( ABSPATH, '', WPINC );
|
28 |
+
$wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
|
29 |
+
} else {
|
30 |
+
$wp_includes = str_replace( $_SERVER['DOCUMENT_ROOT'], '', ABSPATH . WPINC );
|
31 |
+
$wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
|
32 |
+
}
|
33 |
+
|
34 |
+
$rules = "# Stop php access except to needed files in wp-includes
|
35 |
+
location ~* ^$wp_includes/.*(?<!(js/tinymce/wp-tinymce))\.php$ {
|
36 |
+
internal; #internal allows ms-files.php rewrite in multisite to work
|
37 |
+
}
|
38 |
+
|
39 |
+
# Specifically locks down upload directories in case full wp-content rule below is skipped
|
40 |
+
location ~* /(?:uploads|files)/.*\.php$ {
|
41 |
+
deny all;
|
42 |
+
}
|
43 |
+
|
44 |
+
# Deny direct access to .php files in the /wp-content/ directory (including sub-folders).
|
45 |
+
# Note this can break some poorly coded plugins/themes, replace the plugin or remove this block if it causes trouble
|
46 |
+
location ~* ^$wp_content/.*\.php$ {
|
47 |
+
deny all;
|
48 |
+
}
|
49 |
+
";
|
50 |
+
?>
|
51 |
+
<p>
|
52 |
+
<code>## WP Defender - Prevent PHP Execution ##<br/><?php echo esc_html( $rules ) ?><span class="hardener-nginx-extra-instructions"></span><br/>## WP Defender - End ##</code>
|
53 |
+
</p>
|
54 |
+
<div class="sui-notice">
|
55 |
+
<p><?php echo sprintf( __( "Still having trouble? <a target='_blank' href=\"%s\">Open a support ticket</a>.", "defender-security" ), 'https://premium.wpmudev.org/forums/forum/support#question' ) ?></p>
|
56 |
+
</div>
|
app/module/hardener/view/rules/protect-information.php
CHANGED
@@ -1,129 +1,105 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
</div>
|
15 |
-
<
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
<?php _e( 'Server Type:', "defender-security" ); ?>
|
36 |
-
</div>
|
37 |
-
<div class="column is-one-third">
|
38 |
-
<select class="mline hardener-server-list information" name="server">
|
39 |
-
<?php foreach ( $servers as $server => $server_name ): ?>
|
40 |
-
<option value="<?php echo esc_attr( $server ); ?>" <?php selected( $server, $setting->active_server ); ?>><?php echo esc_html( $server_name ); ?></option>
|
41 |
-
<?php endforeach; ?>
|
42 |
-
</select>
|
43 |
-
</div>
|
44 |
-
</div>
|
45 |
-
<div class="<?php echo ( $setting->active_server != 'apache' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-apache">
|
46 |
-
<div class="line">
|
47 |
-
<p><?php _e( "We will place <strong>.htaccess</strong> file into the root folder to lock down the files and folders inside.", "defender-security" ) ?></p>
|
48 |
</div>
|
49 |
-
|
50 |
-
|
51 |
-
<
|
52 |
-
|
53 |
-
|
54 |
-
type="submit"><?php _e( "Add .htaccess file", "defender-security" ) ?></button>
|
55 |
-
</form>
|
56 |
-
</div>
|
57 |
-
<div class="<?php echo ( $setting->active_server != 'litespeed' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-litespeed">
|
58 |
-
<div class="line">
|
59 |
-
<p><?php _e( "We will place <strong>.htaccess</strong> file into the root folder to lock down the files and folders inside.", "defender-security" ) ?></p>
|
60 |
</div>
|
61 |
-
<
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
<button class="button float-r"
|
66 |
-
type="submit"><?php _e( "Add .htaccess file", "defender-security" ) ?></button>
|
67 |
-
</form>
|
68 |
-
</div>
|
69 |
-
<div class="<?php echo ( $setting->active_server != 'nginx' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-nginx">
|
70 |
-
<?php
|
71 |
-
if ( DIRECTORY_SEPARATOR == '\\' ) {
|
72 |
-
//Windows
|
73 |
-
$wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
|
74 |
-
} else {
|
75 |
-
$wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
|
76 |
-
}
|
77 |
|
78 |
-
|
79 |
-
|
|
|
|
|
|
|
|
|
|
|
80 |
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
|
86 |
-
|
87 |
-
location = /wp-config.php {
|
88 |
-
deny all;
|
89 |
-
}
|
90 |
|
91 |
-
# Deny access to revealing or potentially dangerous files in the /wp-content/ directory (including sub-folders)
|
92 |
-
location ~* ^$wp_content/.*\.(txt|md|exe|sh|bak|inc|pot|po|mo|log|sql)$ {
|
93 |
-
deny all;
|
94 |
-
}
|
95 |
-
";
|
96 |
-
?>
|
97 |
-
<div class="">
|
98 |
-
<p><?php esc_html_e( "For NGINX servers:", "defender-security" ) ?></p>
|
99 |
-
<ol>
|
100 |
-
<li>
|
101 |
-
<?php esc_html_e( "Copy the generated code into your site specific .conf file usually located in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/...", "defender-security" ) ?>
|
102 |
-
</li>
|
103 |
-
<li>
|
104 |
-
<?php _e( "Add the code above inside the <strong>server</strong> section in the file, right before the php location block. Looks something like:", "defender-security" ) ?>
|
105 |
-
<pre>location ~ \.php$ {</pre>
|
106 |
-
</li>
|
107 |
-
<li>
|
108 |
-
<?php esc_html_e( "Reload NGINX.", "defender-security" ) ?>
|
109 |
-
</li>
|
110 |
-
</ol>
|
111 |
-
<p><?php echo sprintf( __( "Still having trouble? <a target='_blank' href=\"%s\">Open a support ticket</a>.", "defender-security" ), 'https://premium.wpmudev.org/forums/forum/support#question' ) ?></p>
|
112 |
-
<pre>## WP Defender - Prevent information disclosure ##<?php echo esc_html( $rules ); ?>## WP Defender - End ##</pre>
|
113 |
-
</div>
|
114 |
-
</div>
|
115 |
-
<div class="<?php echo ( $setting->active_server != 'iis' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-iis">
|
116 |
-
<div class="line">
|
117 |
-
<p><?php printf( __( 'For IIS servers, <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc754807(v=ws.10).aspx' ); ?></p>
|
118 |
-
</div>
|
119 |
-
</div>
|
120 |
-
<div class="<?php echo ( $setting->active_server != 'iis-7' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-iis-7">
|
121 |
-
<div class="line">
|
122 |
-
<p><?php printf( __( 'For IIS 7 servers, <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc754807(v=ws.10).aspx' ); ?></p>
|
123 |
</div>
|
|
|
|
|
|
|
|
|
|
|
124 |
</div>
|
125 |
-
|
126 |
-
<?php endif; ?>
|
127 |
</div>
|
128 |
</div>
|
129 |
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
if ( DIRECTORY_SEPARATOR == '\\' ) {
|
4 |
+
//Windows
|
5 |
+
$wp_includes = str_replace( ABSPATH, '', WPINC );
|
6 |
+
$wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
|
7 |
+
} else {
|
8 |
+
$wp_includes = str_replace( $_SERVER['DOCUMENT_ROOT'], '', ABSPATH . WPINC );
|
9 |
+
$wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
|
10 |
+
}
|
11 |
+
global $is_nginx, $is_IIS, $is_iis7;
|
12 |
+
$setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
13 |
+
if ( $is_nginx ) {
|
14 |
+
$setting->active_server = 'nginx';
|
15 |
+
} else if ( $is_IIS ) {
|
16 |
+
$setting->active_server = 'iis';
|
17 |
+
} else if ( $is_iis7 ) {
|
18 |
+
$setting->active_server = 'iis-7';
|
19 |
+
}
|
20 |
+
?>
|
21 |
+
<div id="disable_xml_rpc" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
22 |
+
<div class="sui-accordion-item-header">
|
23 |
+
<div class="sui-accordion-item-title">
|
24 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
25 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
26 |
+
<?php _e( 'Information Disclosure', "defender-security" ) ?>
|
27 |
</div>
|
28 |
+
<div class="sui-accordion-col-4">
|
29 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
30 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
31 |
+
</button>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
<div class="sui-accordion-item-body">
|
35 |
+
<div class="sui-box">
|
36 |
+
<div class="sui-box-body">
|
37 |
+
<strong>
|
38 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
39 |
+
</strong>
|
40 |
+
<p>
|
41 |
+
<?php _e( "Often servers are incorrectly configured, and can allow an attacker to get access to sensitive files like your config, .htaccess and backup files. Hackers can grab these files and use them to gain access to your website or database.", "defender-security" ) ?>
|
42 |
+
</p>
|
43 |
+
<?php if ( $checked ): ?>
|
44 |
+
<div class="sui-notice sui-notice-success">
|
45 |
+
<p>
|
46 |
+
<?php _e( "You've automatically enabled information disclosure protection.", "defender-security" ) ?>
|
47 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
</div>
|
49 |
+
<?php else: ?>
|
50 |
+
<div class="sui-notice sui-notice-warning">
|
51 |
+
<p>
|
52 |
+
<?php _e( "You don't have information disclosure protection active.", "defender-security" ) ?>
|
53 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
</div>
|
55 |
+
<p>
|
56 |
+
<?php _e( "Currently, some of your config files aren’t protected. It’s best to lock this down these files to ensure they can’t be accessed by hackers and bots.", "defender-security" ) ?>
|
57 |
+
</p>
|
58 |
+
<div class="sui-tabs sui-side-tabs">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
+
<div data-tabs>
|
61 |
+
<div class="<?php echo $setting->active_server == 'apache' ? 'active' : '' ?>"><?php _e( "Apache", "defender-security" ) ?></div>
|
62 |
+
<div class="<?php echo $setting->active_server == 'litespeed' ? 'active' : '' ?>"><?php _e( "Litespeed", "defender-security" ) ?></div>
|
63 |
+
<div class="<?php echo $setting->active_server == 'nginx' ? 'active' : '' ?>"><?php _e( "Nginx", "defender-security" ) ?></div>
|
64 |
+
<div class="<?php echo $setting->active_server == 'iis' ? 'active' : '' ?>"><?php _e( "IIS", "defender-security" ) ?></div>
|
65 |
+
<div class="<?php echo $setting->active_server == 'iis7' ? 'active' : '' ?>"><?php _e( "IIS7", "defender-security" ) ?></div>
|
66 |
+
</div>
|
67 |
|
68 |
+
<div data-panes>
|
69 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'apache' ? 'active' : '' ?>">
|
70 |
+
<?php $controller->renderPartial( 'rules/information-disclosure/apache_litespeed', array(
|
71 |
+
'setting' => $setting
|
72 |
+
) ) ?>
|
73 |
+
</div>
|
74 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'litespeed' ? 'active' : '' ?>">
|
75 |
+
<?php $controller->renderPartial( 'rules/information-disclosure/apache_litespeed', array(
|
76 |
+
'setting' => $setting
|
77 |
+
) ) ?>
|
78 |
+
</div>
|
79 |
+
<div class="sui-tab-boxed hardener-instructions <?php echo $setting->active_server == 'nginx' ? 'active' : '' ?>">
|
80 |
+
<?php $controller->renderPartial( 'rules/information-disclosure/nginx', array(
|
81 |
+
'setting' => $setting
|
82 |
+
) ) ?>
|
83 |
+
</div>
|
84 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'iis' ? 'active' : '' ?>">
|
85 |
+
<p><?php printf( __( 'For IIS servers, <a href="%s">visit Microsoft TechNet</a>', "defender-security" ), 'https://technet.microsoft.com/en-us/library/cc725855(v=ws.10).aspx' ); ?></p>
|
86 |
+
</div>
|
87 |
+
<div class="sui-tab-boxed <?php echo $setting->active_server == 'iis7' ? 'active' : '' ?>">
|
88 |
+
<?php $controller->renderPartial( 'rules/prevent-php/iis7', array(
|
89 |
+
'setting' => $setting
|
90 |
+
) ) ?>
|
91 |
+
</div>
|
92 |
|
93 |
+
</div>
|
|
|
|
|
|
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
</div>
|
96 |
+
<?php endif; ?>
|
97 |
+
</div>
|
98 |
+
<div class="sui-box-footer">
|
99 |
+
<div class="sui-actions-left">
|
100 |
+
<?php $controller->showIgnoreForm() ?>
|
101 |
</div>
|
102 |
+
</div>
|
|
|
103 |
</div>
|
104 |
</div>
|
105 |
</div>
|
app/module/hardener/view/rules/security-key.php
CHANGED
@@ -1,57 +1,96 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
</div>
|
10 |
-
<div class="
|
11 |
-
<
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
<form method="post" class="hardener-frm" id="reminder-date">
|
17 |
-
<
|
18 |
-
<
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
</form>
|
33 |
</div>
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
44 |
</div>
|
45 |
-
<form method="post" class="hardener-frm rule-process">
|
46 |
-
<?php $controller->createNonceField(); ?>
|
47 |
-
<input type="hidden" name="action" value="processHardener"/>
|
48 |
-
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
49 |
-
<button class="button float-r"
|
50 |
-
type="submit"><?php _e( "Regenerate Security Keys", "defender-security" ) ?></button>
|
51 |
-
</form>
|
52 |
-
<?php $controller->showIgnoreForm() ?>
|
53 |
<?php endif; ?>
|
54 |
</div>
|
55 |
-
<div class="clear"></div>
|
56 |
</div>
|
57 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
?>
|
4 |
+
<div id="security_key" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
5 |
+
<div class="sui-accordion-item-header">
|
6 |
+
<div class="sui-accordion-item-title">
|
7 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
8 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
9 |
+
<?php _e( "Security Keys", "defender-security" ) ?>
|
10 |
+
</div>
|
11 |
+
<div class="sui-accordion-col-4">
|
12 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
13 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
14 |
+
</button>
|
15 |
+
</div>
|
16 |
</div>
|
17 |
+
<div class="sui-accordion-item-body">
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-body">
|
20 |
+
<strong><?php _e( "Overview", "defender-security" ) ?></strong>
|
21 |
+
<p>
|
22 |
+
<?php _e( "WordPress uses security keys to improve the encryption of informtion stores in user cookies making it harder to crack passwords. A non-encrypted password like “username” or “wordpress” can be easily broken, but a random, unpredictable, encrypted password such as “88a7da62429ba6ad3cb3c76a09641fc” takes years to come up with the right combination.", "defender-security" ) ?>
|
23 |
+
</p>
|
24 |
+
<?php if ( $checked ): ?>
|
25 |
+
<div class="sui-notice sui-notice-success">
|
26 |
+
<p>
|
27 |
+
<?php _e( "You've automatically disabled PHP execution..", "defender-security" ) ?>
|
28 |
+
</p>
|
29 |
+
</div>
|
30 |
+
<?php else: ?>
|
31 |
+
<strong>
|
32 |
+
<?php _e( "Status", "defender-security" ) ?>
|
33 |
+
</strong>
|
34 |
+
<div class="sui-notice sui-notice-warning">
|
35 |
+
<p>
|
36 |
+
<?php printf( __( "Your current security keys are %d days old. Time to update them!", "defender-security" ), $daysAgo ) ?>
|
37 |
+
</p>
|
38 |
+
</div>
|
39 |
+
<p>
|
40 |
+
<?php _e( "Currently you have old security keys, it pays to keep them updated - we recommend every 60 days or less.", "defender-security" ) ?>
|
41 |
+
</p>
|
42 |
+
<strong>
|
43 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
44 |
+
</strong>
|
45 |
+
<p>
|
46 |
+
<?php _e( "We can regenerate your key salts instantly for you and they will be good for another 60 days. Note that this will log all users out of your site. You can also choose how often we should notify you to change them.", "defender-security" ) ?>
|
47 |
+
</p>
|
48 |
+
<?php endif; ?>
|
49 |
<form method="post" class="hardener-frm" id="reminder-date">
|
50 |
+
<div class="sui-form-field">
|
51 |
+
<label class="sui-label"><?php _e( "Reminder frequency", "defender-security" ) ?></label>
|
52 |
+
<div class="sui-row">
|
53 |
+
<div class="sui-col-md-3">
|
54 |
+
<select name="remind_date" class="sui-select-sm">
|
55 |
+
<option
|
56 |
+
value="30 days" <?php selected( '30 days', $interval ) ?>><?php esc_html_e( '30 Days', "defender-security" ) ?></option>
|
57 |
+
<option
|
58 |
+
value="60 days" <?php selected( '60 days', $interval ) ?>><?php esc_html_e( '60 Days', "defender-security" ) ?></option>
|
59 |
+
<option
|
60 |
+
value="90 days" <?php selected( '90 days', $interval ) ?>><?php esc_html_e( '90 Days', "defender-security" ) ?></option>
|
61 |
+
<option
|
62 |
+
value="6 months" <?php selected( '6 months', $interval ) ?>><?php esc_html_e( '6 Months', "defender-security" ) ?></option>
|
63 |
+
<option
|
64 |
+
value="1 year" <?php selected( '1 year', $interval ) ?>><?php esc_html_e( '1 Year', "defender-security" ) ?></option>
|
65 |
+
</select>
|
66 |
+
</div>
|
67 |
+
<div class="sui-col">
|
68 |
+
<input type="hidden" name="action" value="updateSecurityReminder"/>
|
69 |
+
<button type="submit" class="sui-button sui-button-ghost">
|
70 |
+
<?php _e( "Update", "defender-security" ) ?>
|
71 |
+
</button>
|
72 |
+
</div>
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
</form>
|
76 |
</div>
|
77 |
+
<?php if ( !$checked ): ?>
|
78 |
+
<div class="sui-box-footer">
|
79 |
+
<div class="sui-actions-left">
|
80 |
+
<?php $controller->showIgnoreForm() ?>
|
81 |
+
</div>
|
82 |
+
<div class="sui-actions-right">
|
83 |
+
<form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
|
84 |
+
<?php $controller->createNonceField(); ?>
|
85 |
+
<input type="hidden" name="action" value="processHardener"/>
|
86 |
+
<input type="hidden" name="updatePosts" value="no"/>
|
87 |
+
<input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
|
88 |
+
<button class="sui-button sui-button-blue" type="submit">
|
89 |
+
<?php _e( "Regenerate Keys", "defender-security" ) ?></button>
|
90 |
+
</form>
|
91 |
+
</div>
|
92 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
<?php endif; ?>
|
94 |
</div>
|
|
|
95 |
</div>
|
96 |
+
</div>
|
app/module/hardener/view/rules/wp-version.php
CHANGED
@@ -1,49 +1,72 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
<div class="rule-content">
|
11 |
-
<h3><?php _e( "Overview", "defender-security" ) ?></h3>
|
12 |
-
<div class="line">
|
13 |
-
<?php _e( "WordPress is an extremely popular platform, and with that popularity comes hackers that increasingly want to exploit WordPress based websites. Leaving your WordPress installation out of date is an almost guaranteed way to get hacked!", "defender-security" ) ?>
|
14 |
</div>
|
15 |
-
<div class="
|
16 |
-
<
|
17 |
-
<
|
18 |
-
|
19 |
-
<span class="<?php echo $class ?>">
|
20 |
-
<?php echo \WP_Defender\Behavior\Utils::instance()->getWPVersion() ?>
|
21 |
-
</span>
|
22 |
-
</div>
|
23 |
-
<div class="column">
|
24 |
-
<strong><?php _e( "Recommend Version", "defender-security" ) ?></strong>
|
25 |
-
<span><?php echo $controller->getService()->getLatestVersion() ?></span>
|
26 |
-
</div>
|
27 |
</div>
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
<
|
36 |
-
<?php
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
<?php esc_html_e( "Update WordPress", "defender-security" ) ?>
|
41 |
</a>
|
42 |
-
</
|
43 |
-
|
44 |
-
<div class="clear"></div>
|
45 |
-
<?php endif; ?>
|
46 |
</div>
|
47 |
-
<div class="clear"></div>
|
48 |
</div>
|
49 |
-
</div>
|
1 |
+
<?php
|
2 |
+
$checked = $controller->check();
|
3 |
+
?>
|
4 |
+
<div id="wp-version" class="sui-accordion-item <?php echo $controller->getCssClass() ?>">
|
5 |
+
<div class="sui-accordion-item-header">
|
6 |
+
<div class="sui-accordion-item-title">
|
7 |
+
<i aria-hidden="true" class="<?php echo $checked ? 'sui-icon-check-tick sui-success'
|
8 |
+
: 'sui-icon-warning-alert sui-warning' ?>"></i>
|
9 |
+
<?php _e( "WordPress Version", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
10 |
</div>
|
11 |
+
<div class="sui-accordion-col-4">
|
12 |
+
<button class="sui-button-icon sui-accordion-open-indicator" aria-label="Open item">
|
13 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
14 |
+
</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
</div>
|
16 |
+
</div>
|
17 |
+
<div class="sui-accordion-item-body">
|
18 |
+
<div class="sui-box">
|
19 |
+
<div class="sui-box-body">
|
20 |
+
<strong>
|
21 |
+
<?php _e( "Overview", "defender-security" ) ?>
|
22 |
+
</strong>
|
23 |
+
<p>
|
24 |
+
<?php _e( "WordPress is an extremely popular platform, and with that popularity comes hackers that increasingly want to exploit WordPress based websites. Leaving your WordPress installation out of date is an almost guaranteed way to get hacked as you’re missing out on the latest security patches. ", "defender-security" ) ?>
|
25 |
+
</p>
|
26 |
+
<strong>
|
27 |
+
<?php _e( "Status", "defender-security" ) ?>
|
28 |
+
</strong>
|
29 |
+
<?php if ( $checked ): ?>
|
30 |
+
<div class="sui-notice sui-notice-success">
|
31 |
+
<p>
|
32 |
+
<?php _e( "You have the latest version of WordPress installed, good stuff!", "defender-security" ) ?>
|
33 |
+
</p>
|
34 |
+
</div>
|
35 |
+
<?php else: ?>
|
36 |
+
<div class="sui-border-frame">
|
37 |
+
<div class="sui-row">
|
38 |
+
<div class="sui-col">
|
39 |
+
<strong><?php _e( "Current WordPress version", "defender-security" ) ?></strong>
|
40 |
+
<span class="sui-tag <?php echo $checked ? 'sui-tag-success' : 'sui-tag-warning' ?>"><?php echo \WP_Defender\Behavior\Utils::instance()->getWPVersion() ?></span>
|
41 |
+
</div>
|
42 |
+
<div class="sui-col">
|
43 |
+
<strong><?php _e( "Recommended", "defender-security" ) ?></strong>
|
44 |
+
<span class="sui-tag"><?php echo $controller->getService()->getLatestVersion() ?></span>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
</div>
|
48 |
+
<p>
|
49 |
+
<?php printf( __( "Your current WordPress version is out of date, which means you could be missing out on the latest security patches in v%s", "defender-security" ), $controller->getService()->getLatestVersion() ) ?>
|
50 |
+
</p>
|
51 |
+
<strong>
|
52 |
+
<?php _e( "How to fix", "defender-security" ) ?>
|
53 |
+
</strong>
|
54 |
+
<p>
|
55 |
+
<?php _e( "We recommend you update your version to the latest stable release, and maintain updating it regularly. Alternately, you can ignore this upgrade if you don’t require the latest version.", "defender-security" ) ?>
|
56 |
+
</p>
|
57 |
+
<?php endif; ?>
|
58 |
+
</div>
|
59 |
+
<div class="sui-box-footer">
|
60 |
+
<div class="sui-actions-left">
|
61 |
+
<?php $controller->showIgnoreForm() ?>
|
62 |
+
</div>
|
63 |
+
<div class="sui-actions-right">
|
64 |
+
<a href="<?php echo network_admin_url( 'update-core.php' ) ?>"
|
65 |
+
class="sui-button sui-button-ghost">
|
66 |
<?php esc_html_e( "Update WordPress", "defender-security" ) ?>
|
67 |
</a>
|
68 |
+
</div>
|
69 |
+
</div>
|
|
|
|
|
70 |
</div>
|
|
|
71 |
</div>
|
72 |
+
</div>
|
app/module/ip-lockout/behavior/widget.php
CHANGED
@@ -11,72 +11,80 @@ use WP_Defender\Module\IP_Lockout\Model\Settings;
|
|
11 |
|
12 |
class Widget extends Behavior {
|
13 |
public function renderLockoutWidget() {
|
|
|
14 |
?>
|
15 |
-
<div class="
|
16 |
-
<?php if (
|
17 |
<div class="wd-overlay">
|
18 |
-
<i class="
|
19 |
</div>
|
20 |
<input type="hidden" id="summaryNonce" value="<?php echo wp_create_nonce( 'lockoutSummaryData' ) ?>"/>
|
21 |
<?php endif; ?>
|
22 |
-
<div class="box-
|
23 |
-
<
|
24 |
-
|
|
|
|
|
25 |
</div>
|
26 |
-
<div class="box-
|
27 |
-
<
|
28 |
-
|
29 |
-
</div>
|
30 |
-
<?php if ( ! Settings::instance()->detect_404 && ! Settings::instance()->login_protection ): ?>
|
31 |
<form method="post" id="settings-frm" class="ip-frm">
|
32 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
33 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
34 |
<input type="hidden" name="login_protection" value="1"/>
|
35 |
<input type="hidden" name="detect_404" value="1"/>
|
36 |
-
<button type="submit" class="button
|
37 |
<?php esc_html_e( "Activate", "defender-security" ) ?>
|
38 |
</button>
|
39 |
</form>
|
40 |
<?php else: ?>
|
41 |
-
<div class="
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
|
|
47 |
</div>
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
<span class="
|
53 |
</div>
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
<span class="
|
59 |
</div>
|
60 |
-
</li>
|
61 |
-
</ul>
|
62 |
-
<div class="row">
|
63 |
-
<div class="col-third tl">
|
64 |
-
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs', "defender-security"
|
65 |
-
) ?>"
|
66 |
-
class="button button-small button-secondary">
|
67 |
-
<?php _e( "View logs", "defender-security" ) ?></a>
|
68 |
-
</div>
|
69 |
-
<div class="col-two-third tr">
|
70 |
-
<p class="status-text"><?php if ( Settings::instance()->ip_lockout_notification && Settings::instance()->login_lockout_notification ) {
|
71 |
-
echo _e( "Lockout notifications are enabled", "defender-security" );
|
72 |
-
} else {
|
73 |
-
echo _e( "Lockout notifications are disabled", "defender-security" );
|
74 |
-
}
|
75 |
-
?></p>
|
76 |
</div>
|
77 |
</div>
|
78 |
<?php endif; ?>
|
79 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
</div>
|
81 |
<?php
|
82 |
}
|
11 |
|
12 |
class Widget extends Behavior {
|
13 |
public function renderLockoutWidget() {
|
14 |
+
$isOff = ! Settings::instance()->detect_404 && ! Settings::instance()->login_protection;
|
15 |
?>
|
16 |
+
<div class="sui-box" id="lockoutSummary">
|
17 |
+
<?php if ( ! $isOff ): ?>
|
18 |
<div class="wd-overlay">
|
19 |
+
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
|
20 |
</div>
|
21 |
<input type="hidden" id="summaryNonce" value="<?php echo wp_create_nonce( 'lockoutSummaryData' ) ?>"/>
|
22 |
<?php endif; ?>
|
23 |
+
<div class="sui-box-header">
|
24 |
+
<h3 class="sui-box-title">
|
25 |
+
<i class="sui-icon-lock" aria-hidden="true"></i>
|
26 |
+
<?php _e( "IP Lockouts", "defender-security" ) ?>
|
27 |
+
</h3>
|
28 |
</div>
|
29 |
+
<div class="sui-box-body <?php echo ! $isOff ? 'no-padding-bottom' : null ?>">
|
30 |
+
<p><?php _e( "Protect to your login area and have Defender automatically lockout any suspicious behaviour.", "defender-security" ) ?></p>
|
31 |
+
<?php if ( $isOff ): ?>
|
|
|
|
|
32 |
<form method="post" id="settings-frm" class="ip-frm">
|
33 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
34 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
35 |
<input type="hidden" name="login_protection" value="1"/>
|
36 |
<input type="hidden" name="detect_404" value="1"/>
|
37 |
+
<button type="submit" class="sui-button sui-button-blue">
|
38 |
<?php esc_html_e( "Activate", "defender-security" ) ?>
|
39 |
</button>
|
40 |
</form>
|
41 |
<?php else: ?>
|
42 |
+
<div class="sui-field-list sui-flushed no-border">
|
43 |
+
<div class="sui-field-list-body">
|
44 |
+
<div class="sui-field-list-item">
|
45 |
+
<label class="sui-field-list-item-label">
|
46 |
+
<strong><?php _e( "Last lockout", "defender-security" ) ?></strong>
|
47 |
+
</label>
|
48 |
+
<span class="lastLockout">.</span>
|
49 |
</div>
|
50 |
+
<div class="sui-field-list-item">
|
51 |
+
<label class="sui-field-list-item-label">
|
52 |
+
<strong><?php _e( "Login lockouts this week", "defender-security" ) ?></strong>
|
53 |
+
</label>
|
54 |
+
<span class="loginLockoutThisWeek">.</span>
|
55 |
</div>
|
56 |
+
<div class="sui-field-list-item">
|
57 |
+
<label class="sui-field-list-item-label">
|
58 |
+
<strong><?php _e( "404 lockouts this week", "defender-security" ) ?></strong>
|
59 |
+
</label>
|
60 |
+
<span class="lockout404ThisWeek">.</span>
|
61 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
</div>
|
63 |
</div>
|
64 |
<?php endif; ?>
|
65 |
</div>
|
66 |
+
<?php if ( ! $isOff ): ?>
|
67 |
+
<div class="sui-box-footer">
|
68 |
+
<div class="sui-actions-left">
|
69 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs', "defender-security"
|
70 |
+
) ?>"
|
71 |
+
class="sui-button sui-button-ghost">
|
72 |
+
<i class="sui-icon-eye" aria-hidden="true"></i>
|
73 |
+
<?php _e( "View logs", "defender-security" ) ?>
|
74 |
+
</a>
|
75 |
+
</div>
|
76 |
+
<div class="sui-actions-right">
|
77 |
+
<p class="sui-p-small">
|
78 |
+
<?php if ( Settings::instance()->ip_lockout_notification && Settings::instance()->login_lockout_notification ) {
|
79 |
+
echo _e( "Lockout notifications are enabled", "defender-security" );
|
80 |
+
} else {
|
81 |
+
echo _e( "Lockout notifications are disabled", "defender-security" );
|
82 |
+
}
|
83 |
+
?>
|
84 |
+
</p>
|
85 |
+
</div>
|
86 |
+
</div>
|
87 |
+
<?php endif; ?>
|
88 |
</div>
|
89 |
<?php
|
90 |
}
|
app/module/ip-lockout/component/ip-api.php
CHANGED
@@ -5,7 +5,10 @@
|
|
5 |
|
6 |
namespace WP_Defender\Module\IP_Lockout\Component;
|
7 |
|
|
|
8 |
use Hammer\WP\Component;
|
|
|
|
|
9 |
|
10 |
class IP_API extends Component {
|
11 |
public static function compareCIDR( $ip, $block ) {
|
@@ -153,6 +156,17 @@ class IP_API extends Component {
|
|
153 |
return false;
|
154 |
}
|
155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
156 |
/**
|
157 |
* @param $ip
|
158 |
*
|
5 |
|
6 |
namespace WP_Defender\Module\IP_Lockout\Component;
|
7 |
|
8 |
+
use Hammer\GeoIP\GeoIp;
|
9 |
use Hammer\WP\Component;
|
10 |
+
use WP_Defender\Behavior\Utils;
|
11 |
+
use WP_Defender\Module\IP_Lockout\Model\Settings;
|
12 |
|
13 |
class IP_API extends Component {
|
14 |
public static function compareCIDR( $ip, $block ) {
|
156 |
return false;
|
157 |
}
|
158 |
|
159 |
+
public static function getCurrentCountry() {
|
160 |
+
$settings = Settings::instance();
|
161 |
+
if ( ! $settings->isGeoDBDownloaded() ) {
|
162 |
+
return false;
|
163 |
+
}
|
164 |
+
$geoIP = new GeoIp( $settings->geoIP_db );
|
165 |
+
$country = $geoIP->ipToCountry( Utils::instance()->getUserIp() );
|
166 |
+
|
167 |
+
return $country;
|
168 |
+
}
|
169 |
+
|
170 |
/**
|
171 |
* @param $ip
|
172 |
*
|
app/module/ip-lockout/component/login-protection-api.php
CHANGED
@@ -32,7 +32,7 @@ class Login_Protection_Api extends Component {
|
|
32 |
|
33 |
$settings = Settings::instance();
|
34 |
//find backward from log date, if there are only log & counter > max attempt, then lock
|
35 |
-
$after = strtotime( '-' . $settings->login_protection_lockout_timeframe . '
|
36 |
if ( is_object( $model ) ) {
|
37 |
//recal release time, if after time smaller than lock time,then we will use last locktime for check
|
38 |
if ( $after < $model->lock_time ) {
|
@@ -282,16 +282,16 @@ class Login_Protection_Api extends Component {
|
|
282 |
$nonce = wp_create_nonce( 'lockoutIPAction' );
|
283 |
if ( $ip != $log->ip ) {
|
284 |
if ( ! in_array( $log->ip, $blacklist ) ) {
|
285 |
-
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action button
|
286 |
} else {
|
287 |
-
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action button
|
288 |
}
|
289 |
}
|
290 |
|
291 |
if ( ! in_array( $log->ip, $whitelist ) ) {
|
292 |
-
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action button
|
293 |
} else {
|
294 |
-
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action button
|
295 |
}
|
296 |
|
297 |
return implode( '', $links );
|
32 |
|
33 |
$settings = Settings::instance();
|
34 |
//find backward from log date, if there are only log & counter > max attempt, then lock
|
35 |
+
$after = strtotime( '-' . $settings->login_protection_lockout_timeframe . ' ' . $settings->login_protection_lockout_duration_unit );
|
36 |
if ( is_object( $model ) ) {
|
37 |
//recal release time, if after time smaller than lock time,then we will use last locktime for check
|
38 |
if ( $after < $model->lock_time ) {
|
282 |
$nonce = wp_create_nonce( 'lockoutIPAction' );
|
283 |
if ( $ip != $log->ip ) {
|
284 |
if ( ! in_array( $log->ip, $blacklist ) ) {
|
285 |
+
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action sui-button sui-button-red" data-type="blacklist" data-id="' . esc_attr( $log->id ) . '" data-ip="' . esc_attr( $log->ip ) . '" href="#"><i class="sui-icon-cross-close" aria-hidden="true"></i>' . __( "Ban IP", "defender-security" ) . '</a>';
|
286 |
} else {
|
287 |
+
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action sui-button sui-button-blue" data-type="unblacklist" data-id="' . esc_attr( $log->id ) . '" data-ip="' . esc_attr( $log->ip ) . '" href="#">' . __( "Unban IP", "defender-security" ) . '</a>';
|
288 |
}
|
289 |
}
|
290 |
|
291 |
if ( ! in_array( $log->ip, $whitelist ) ) {
|
292 |
+
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action sui-button sui-button-ghost" data-type="whitelist" data-id="' . esc_attr( $log->id ) . '" data-ip="' . esc_attr( $log->ip ) . '" href="#"><i class="sui-icon-check-tick" aria-hidden="true"></i>' . __( "Add Whitelist", "defender-security" ) . '</a>';
|
293 |
} else {
|
294 |
+
$links[] = '<a data-nonce="' . $nonce . '" class="ip-action sui-button sui-button-ghost" data-type="unwhitelist" data-id="' . esc_attr( $log->id ) . '" data-ip="' . esc_attr( $log->ip ) . '" href="#">' . __( "Unwhitelist", "defender-security" ) . '</a>';
|
295 |
}
|
296 |
|
297 |
return implode( '', $links );
|
app/module/ip-lockout/component/logs-table.php
CHANGED
@@ -28,7 +28,8 @@ class Logs_Table extends \WP_List_Table {
|
|
28 |
'list-table',
|
29 |
//'hover-effect',
|
30 |
'logs',
|
31 |
-
'
|
|
|
32 |
);
|
33 |
}
|
34 |
|
@@ -115,10 +116,13 @@ class Logs_Table extends \WP_List_Table {
|
|
115 |
}
|
116 |
ob_start();
|
117 |
?>
|
118 |
-
|
|
|
|
|
|
|
119 |
<span class="badge <?php echo $log->type == 'auth_lock' || $log->type == '404_lock' ? 'locked' : null ?>"><?php echo $log->type == 'auth_fail' || $log->type == 'auth_lock' ? 'login' : '404' ?></span>
|
120 |
<?php
|
121 |
-
echo $log->get_log_text( $format );
|
122 |
|
123 |
return ob_get_clean();
|
124 |
}
|
@@ -155,14 +159,14 @@ class Logs_Table extends \WP_List_Table {
|
|
155 |
<?php $this->display_tablenav( 'top' ); ?>
|
156 |
<?php if ( $this->_pagination_args['total_items'] > 0 ): ?>
|
157 |
<div class="lockout-logs-inner">
|
158 |
-
<div class="lockout-logs-filter
|
159 |
<form method="post">
|
160 |
-
<div class="
|
161 |
-
<div class="
|
162 |
-
<div class="
|
163 |
-
<
|
164 |
<?php _e( "Lockout Type", "defender-security" ) ?>
|
165 |
-
</
|
166 |
<select name="type">
|
167 |
<option value=""><?php esc_html_e( "All", "defender-security" ) ?></option>
|
168 |
<option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_FAIL, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
|
@@ -176,45 +180,69 @@ class Logs_Table extends \WP_List_Table {
|
|
176 |
value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::LOCKOUT_404 ?>"><?php esc_html_e( "404 lockout", "defender-security" ) ?></option>
|
177 |
</select>
|
178 |
</div>
|
179 |
-
|
180 |
-
|
|
|
|
|
181 |
<?php _e( "IP Address", "defender-security" ) ?>
|
182 |
-
</
|
183 |
-
<input name="ip_address" type="text"
|
184 |
placeholder="<?php esc_attr_e( "Enter an IP address", "defender-security" ) ?>">
|
185 |
</div>
|
186 |
</div>
|
187 |
-
<div class="
|
188 |
-
|
189 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
</div>
|
191 |
</div>
|
192 |
</form>
|
193 |
</div>
|
194 |
-
<
|
195 |
-
<
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
|
|
|
|
|
|
208 |
</div>
|
209 |
<?php
|
210 |
$this->display_tablenav( 'bottom' );
|
211 |
?>
|
212 |
<?php else: ?>
|
213 |
-
<div class="
|
214 |
-
<
|
215 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
216 |
</div>
|
217 |
-
<table></table>
|
218 |
<?php endif; ?>
|
219 |
</div>
|
220 |
<?php
|
@@ -224,18 +252,18 @@ class Logs_Table extends \WP_List_Table {
|
|
224 |
* @param object $item
|
225 |
*/
|
226 |
public function single_row( $item ) {
|
227 |
-
$class = '';
|
228 |
if ( in_array( $item->type, array(
|
229 |
Log_Model::AUTH_LOCK,
|
230 |
Log_Model::AUTH_FAIL
|
231 |
) ) ) {
|
232 |
-
$class
|
233 |
} elseif ( in_array( $item->type, array(
|
234 |
Log_Model::ERROR_404,
|
235 |
Log_Model::ERROR_404_IGNORE,
|
236 |
Log_Model::LOCKOUT_404
|
237 |
) ) ) {
|
238 |
-
$class
|
239 |
}
|
240 |
|
241 |
if ( in_array( $item->type, array(
|
@@ -244,23 +272,72 @@ class Logs_Table extends \WP_List_Table {
|
|
244 |
) ) ) {
|
245 |
$class .= ' lockout';
|
246 |
}
|
247 |
-
$class .= '
|
248 |
echo '<tr class="' . $class . '">';
|
249 |
$this->single_row_columns( $item );
|
250 |
echo '</tr>';
|
251 |
-
echo '<tr class="
|
252 |
echo $this->detailRow( $item );
|
253 |
echo '<tr>';
|
254 |
}
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
public function detailRow( $item ) {
|
257 |
|
258 |
?>
|
259 |
-
<td colspan="
|
260 |
-
<div class="
|
261 |
-
<div class="box-
|
262 |
-
<div class="
|
263 |
-
<div class="
|
264 |
<p><strong><?php _e( "Description", "defender-security" ) ?></strong></p>
|
265 |
<p><?php
|
266 |
if ( $item->type == '404_error' ) {
|
@@ -270,7 +347,7 @@ class Logs_Table extends \WP_List_Table {
|
|
270 |
}
|
271 |
?></p>
|
272 |
</div>
|
273 |
-
<div class="
|
274 |
<p><strong><?php _e( "Type", "defender-security" ) ?></strong></p>
|
275 |
<p>
|
276 |
<a href=""><?php echo in_array( $item->type, array(
|
@@ -281,27 +358,27 @@ class Logs_Table extends \WP_List_Table {
|
|
281 |
</p>
|
282 |
</div>
|
283 |
</div>
|
284 |
-
<div class="
|
285 |
-
<div class="
|
286 |
<p><strong><?php _e( "IP", "defender-security" ) ?></strong></p>
|
287 |
<p><a href=""><?php
|
288 |
echo $item->ip
|
289 |
?></a></p>
|
290 |
</div>
|
291 |
-
<div class="
|
292 |
<p><strong><?php _e( "Date/Time", "defender-security" ) ?></strong></p>
|
293 |
<p><?php
|
294 |
echo Utils::instance()->formatDateTime( $item->date )
|
295 |
?></p>
|
296 |
</div>
|
297 |
-
<div class="
|
298 |
<p><strong><?php _e( "Ban Status", "defender-security" ) ?></strong></p>
|
299 |
<p><?php
|
300 |
echo Login_Protection_Api::getIPStatusText( $item->ip )
|
301 |
?></p>
|
302 |
</div>
|
303 |
</div>
|
304 |
-
<div class="
|
305 |
<div>
|
306 |
<?php
|
307 |
echo Login_Protection_Api::getLogsActionsText( $item );
|
@@ -319,29 +396,44 @@ class Logs_Table extends \WP_List_Table {
|
|
319 |
|
320 |
protected function display_tablenav( $which ) {
|
321 |
?>
|
322 |
-
<div class="
|
323 |
-
<div class="
|
324 |
-
<
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
</
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
</div>
|
337 |
-
</
|
338 |
-
|
339 |
-
|
340 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
341 |
</div>
|
342 |
</div>
|
343 |
-
|
344 |
-
<div class="clear"></div>
|
345 |
</div>
|
346 |
<?php
|
347 |
}
|
@@ -374,32 +466,29 @@ class Logs_Table extends \WP_List_Table {
|
|
374 |
$current_url = set_url_scheme( 'http://' . parse_url( get_site_url(), PHP_URL_HOST ) . $_SERVER['REQUEST_URI'] );
|
375 |
$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
|
376 |
$current_url = esc_url( $current_url );
|
377 |
-
|
|
|
378 |
if ( $current_page > 1 && $total_pages > $radius ) {
|
379 |
-
|
380 |
-
|
381 |
-
$links['prev'] = sprintf( '<a class="button button-small lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
|
382 |
-
$current_page - 1, add_query_arg( 'paged', $current_page - 1, $current_url ), '‹' );
|
383 |
}
|
384 |
|
385 |
for ( $i = 1; $i <= $total_pages; $i ++ ) {
|
386 |
if ( ( $i >= 1 && $i <= $radius ) || ( $i > $current_page - 2 && $i < $current_page + 2 ) || ( $i <= $total_pages && $i > $total_pages - $radius ) ) {
|
387 |
if ( $i == $current_page ) {
|
388 |
-
$links[ $i ] = sprintf( '<a
|
389 |
} else {
|
390 |
-
$links[ $i ] = sprintf( '<a class="
|
391 |
-
|
392 |
}
|
393 |
} elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
|
394 |
-
$links[ $i ] = '<a
|
395 |
}
|
396 |
}
|
397 |
|
398 |
if ( $current_page < $total_pages && $total_pages > $radius ) {
|
399 |
-
$links['next'] = sprintf( '<a class="
|
400 |
-
|
401 |
-
// $links['last'] = sprintf( '<a class="button lockout-nav button-small button-light" data-paged="%s" href="%s">%s</a>',
|
402 |
-
// $total_pages, add_query_arg( 'paged', $total_pages, $current_url ), '»' );
|
403 |
}
|
404 |
$output = join( "\n", $links );
|
405 |
$this->_pagination = $output;
|
28 |
'list-table',
|
29 |
//'hover-effect',
|
30 |
'logs',
|
31 |
+
'sui-table',
|
32 |
+
'sui-accordion'
|
33 |
);
|
34 |
}
|
35 |
|
116 |
}
|
117 |
ob_start();
|
118 |
?>
|
119 |
+
<label class="sui-checkbox">
|
120 |
+
<input type="checkbox" class="single-select" name="ids[]" value="<?php echo $log->id ?>"/>
|
121 |
+
<span aria-hidden="true"></span>
|
122 |
+
</label>
|
123 |
<span class="badge <?php echo $log->type == 'auth_lock' || $log->type == '404_lock' ? 'locked' : null ?>"><?php echo $log->type == 'auth_fail' || $log->type == 'auth_lock' ? 'login' : '404' ?></span>
|
124 |
<?php
|
125 |
+
echo wp_trim_words( $log->get_log_text( $format ), 20 );
|
126 |
|
127 |
return ob_get_clean();
|
128 |
}
|
159 |
<?php $this->display_tablenav( 'top' ); ?>
|
160 |
<?php if ( $this->_pagination_args['total_items'] > 0 ): ?>
|
161 |
<div class="lockout-logs-inner">
|
162 |
+
<div class="lockout-logs-filter sui-pagination-filter">
|
163 |
<form method="post">
|
164 |
+
<div class="sui-row">
|
165 |
+
<div class="sui-col">
|
166 |
+
<div class="sui-form-field">
|
167 |
+
<label class="sui-label">
|
168 |
<?php _e( "Lockout Type", "defender-security" ) ?>
|
169 |
+
</label>
|
170 |
<select name="type">
|
171 |
<option value=""><?php esc_html_e( "All", "defender-security" ) ?></option>
|
172 |
<option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_FAIL, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
|
180 |
value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::LOCKOUT_404 ?>"><?php esc_html_e( "404 lockout", "defender-security" ) ?></option>
|
181 |
</select>
|
182 |
</div>
|
183 |
+
</div>
|
184 |
+
<div class="sui-col">
|
185 |
+
<div class="sui-form-field">
|
186 |
+
<label class="sui-label">
|
187 |
<?php _e( "IP Address", "defender-security" ) ?>
|
188 |
+
</label>
|
189 |
+
<input name="ip_address" type="text" class="sui-form-control"
|
190 |
placeholder="<?php esc_attr_e( "Enter an IP address", "defender-security" ) ?>">
|
191 |
</div>
|
192 |
</div>
|
193 |
+
<div class="sui-col"></div>
|
194 |
+
</div>
|
195 |
+
<hr/>
|
196 |
+
<div class="sui-row">
|
197 |
+
<div class="sui-col">
|
198 |
+
<button type="button" class="sui-button sui-button-ghost">
|
199 |
+
<?php _e( "Clear Filters", "defender-security" ) ?>
|
200 |
+
</button>
|
201 |
+
</div>
|
202 |
+
<div class="sui-col">
|
203 |
+
<button type="submit" class="sui-button float-r">
|
204 |
+
<i class="sui-icon-check" aria-hidden="true"></i>
|
205 |
+
<?php _e( "Apply", "defender-security" ) ?>
|
206 |
+
</button>
|
207 |
</div>
|
208 |
</div>
|
209 |
</form>
|
210 |
</div>
|
211 |
+
<div class="sui-row sui-flushed">
|
212 |
+
<table id="iplockout-table"
|
213 |
+
class="<?php echo implode( ' ', $this->get_table_classes() ); ?>">
|
214 |
+
<thead>
|
215 |
+
<tr>
|
216 |
+
<?php $this->print_column_headers(); ?>
|
217 |
+
</tr>
|
218 |
+
</thead>
|
219 |
+
|
220 |
+
<tbody id="the-list"<?php
|
221 |
+
if ( $singular ) {
|
222 |
+
echo " data-wp-lists='list:$singular'";
|
223 |
+
} ?>>
|
224 |
+
<?php $this->display_rows_or_placeholder(); ?>
|
225 |
+
</tbody>
|
226 |
+
</table>
|
227 |
+
</div>
|
228 |
</div>
|
229 |
<?php
|
230 |
$this->display_tablenav( 'bottom' );
|
231 |
?>
|
232 |
<?php else: ?>
|
233 |
+
<div class="sui-row sui-flushed">
|
234 |
+
<table class="sui-table no-border margin-bottom-20">
|
235 |
+
<tr>
|
236 |
+
<td>
|
237 |
+
<div class="sui-notice">
|
238 |
+
<p>
|
239 |
+
<?php _e( "No lockout events have been logged within the selected time period.", "defender-security" ) ?>
|
240 |
+
</p>
|
241 |
+
</div>
|
242 |
+
</td>
|
243 |
+
</tr>
|
244 |
+
</table>
|
245 |
</div>
|
|
|
246 |
<?php endif; ?>
|
247 |
</div>
|
248 |
<?php
|
252 |
* @param object $item
|
253 |
*/
|
254 |
public function single_row( $item ) {
|
255 |
+
$class = 'sui-accordion-item sui-warning ';
|
256 |
if ( in_array( $item->type, array(
|
257 |
Log_Model::AUTH_LOCK,
|
258 |
Log_Model::AUTH_FAIL
|
259 |
) ) ) {
|
260 |
+
$class .= 'log-login';
|
261 |
} elseif ( in_array( $item->type, array(
|
262 |
Log_Model::ERROR_404,
|
263 |
Log_Model::ERROR_404_IGNORE,
|
264 |
Log_Model::LOCKOUT_404
|
265 |
) ) ) {
|
266 |
+
$class .= 'log-404';
|
267 |
}
|
268 |
|
269 |
if ( in_array( $item->type, array(
|
272 |
) ) ) {
|
273 |
$class .= ' lockout';
|
274 |
}
|
275 |
+
$class .= ' ';
|
276 |
echo '<tr class="' . $class . '">';
|
277 |
$this->single_row_columns( $item );
|
278 |
echo '</tr>';
|
279 |
+
echo '<tr class="sui-accordion-item-content">';
|
280 |
echo $this->detailRow( $item );
|
281 |
echo '<tr>';
|
282 |
}
|
283 |
|
284 |
+
/**
|
285 |
+
* Generates the columns for a single row of the table
|
286 |
+
*
|
287 |
+
* @since 3.1.0
|
288 |
+
*
|
289 |
+
* @param object $item The current item
|
290 |
+
*/
|
291 |
+
protected function single_row_columns( $item ) {
|
292 |
+
list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
|
293 |
+
foreach ( $columns as $column_name => $column_display_name ) {
|
294 |
+
$classes = "$column_name column-$column_name";
|
295 |
+
if ( $primary === $column_name ) {
|
296 |
+
$classes .= ' sui-table-item-title';
|
297 |
+
}
|
298 |
+
|
299 |
+
if ( in_array( $column_name, $hidden ) ) {
|
300 |
+
$classes .= ' hidden';
|
301 |
+
}
|
302 |
+
|
303 |
+
// Comments column uses HTML in the display name with screen reader text.
|
304 |
+
// Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
|
305 |
+
$data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
|
306 |
+
|
307 |
+
$attributes = "class='$classes' $data";
|
308 |
+
|
309 |
+
if ( 'cb' === $column_name ) {
|
310 |
+
echo '<th scope="row" class="check-column">';
|
311 |
+
echo $this->column_cb( $item );
|
312 |
+
echo '</th>';
|
313 |
+
} elseif ( method_exists( $this, '_column_' . $column_name ) ) {
|
314 |
+
echo call_user_func(
|
315 |
+
array( $this, '_column_' . $column_name ),
|
316 |
+
$item,
|
317 |
+
$classes,
|
318 |
+
$data,
|
319 |
+
$primary
|
320 |
+
);
|
321 |
+
} elseif ( method_exists( $this, 'column_' . $column_name ) ) {
|
322 |
+
echo "<td $attributes>";
|
323 |
+
echo call_user_func( array( $this, 'column_' . $column_name ), $item );
|
324 |
+
echo "</td>";
|
325 |
+
} else {
|
326 |
+
echo "<td $attributes>";
|
327 |
+
echo $this->column_default( $item, $column_name );
|
328 |
+
echo "</td>";
|
329 |
+
}
|
330 |
+
}
|
331 |
+
}
|
332 |
+
|
333 |
public function detailRow( $item ) {
|
334 |
|
335 |
?>
|
336 |
+
<td colspan="<?php echo count( $this->get_columns() ) ?>">
|
337 |
+
<div class="sui-box">
|
338 |
+
<div class="sui-box-body">
|
339 |
+
<div class="sui-row">
|
340 |
+
<div class="sui-col">
|
341 |
<p><strong><?php _e( "Description", "defender-security" ) ?></strong></p>
|
342 |
<p><?php
|
343 |
if ( $item->type == '404_error' ) {
|
347 |
}
|
348 |
?></p>
|
349 |
</div>
|
350 |
+
<div class="sui-col">
|
351 |
<p><strong><?php _e( "Type", "defender-security" ) ?></strong></p>
|
352 |
<p>
|
353 |
<a href=""><?php echo in_array( $item->type, array(
|
358 |
</p>
|
359 |
</div>
|
360 |
</div>
|
361 |
+
<div class="sui-row">
|
362 |
+
<div class="sui-col">
|
363 |
<p><strong><?php _e( "IP", "defender-security" ) ?></strong></p>
|
364 |
<p><a href=""><?php
|
365 |
echo $item->ip
|
366 |
?></a></p>
|
367 |
</div>
|
368 |
+
<div class="sui-col">
|
369 |
<p><strong><?php _e( "Date/Time", "defender-security" ) ?></strong></p>
|
370 |
<p><?php
|
371 |
echo Utils::instance()->formatDateTime( $item->date )
|
372 |
?></p>
|
373 |
</div>
|
374 |
+
<div class="sui-col">
|
375 |
<p><strong><?php _e( "Ban Status", "defender-security" ) ?></strong></p>
|
376 |
<p><?php
|
377 |
echo Login_Protection_Api::getIPStatusText( $item->ip )
|
378 |
?></p>
|
379 |
</div>
|
380 |
</div>
|
381 |
+
<div class="sui-border-frame">
|
382 |
<div>
|
383 |
<?php
|
384 |
echo Login_Protection_Api::getLogsActionsText( $item );
|
396 |
|
397 |
protected function display_tablenav( $which ) {
|
398 |
?>
|
399 |
+
<div class="sui-row">
|
400 |
+
<div class="sui-col-md-5">
|
401 |
+
<form id="bulk-action" class="ip-frm" method="post">
|
402 |
+
<div class="bulk-action-bar">
|
403 |
+
<label class="sui-checkbox apply-all">
|
404 |
+
<input type="checkbox" id="apply-all"/>
|
405 |
+
<span aria-hidden="true"></span>
|
406 |
+
</label>
|
407 |
+
<select name="type" class="sui-select-sm">
|
408 |
+
<option value=""><?php _e( "Bulk action", "defender-security" ) ?></option>
|
409 |
+
<option value="ban"><?php _e( "Ban", "defender-security" ) ?></option>
|
410 |
+
<option value="whitelist"><?php _e( "Whitelist", "defender-security" ) ?></option>
|
411 |
+
<option value="delete"><?php _e( "Delete", "defender-security" ) ?></option>
|
412 |
+
</select>
|
413 |
+
<input type="hidden" name="ids" class="ids"/>
|
414 |
+
<input type="hidden" name="action" value="bulkAction"/>
|
415 |
+
<?php wp_nonce_field( 'bulkAction' ) ?>
|
416 |
+
<button type="submit" class="sui-button">
|
417 |
+
<?php _e( "Bulk Update", "defender-security" ) ?>
|
418 |
+
</button>
|
419 |
</div>
|
420 |
+
</form>
|
421 |
+
</div>
|
422 |
+
<div class="sui-col">
|
423 |
+
<div class="sui-pagination-wrap">
|
424 |
+
<span class="sui-pagination-results">
|
425 |
+
<?php printf( __( "%s results", "defender-security" ), $this->_pagination_args['total_items'] ) ?>
|
426 |
+
</span>
|
427 |
+
<ul class="sui-pagination">
|
428 |
+
<?php $this->pagination( 'top' ) ?>
|
429 |
+
</ul>
|
430 |
+
<button rel="show-filter" data-target=".lockout-logs-filter"
|
431 |
+
class="sui-button-icon sui-button-outlined sui-pagination-open-filter">
|
432 |
+
<i class="sui-icon-filter" aria-hidden="true"></i>
|
433 |
+
<span class="sui-screen-reader-text">Open search filters</span>
|
434 |
+
</button>
|
435 |
</div>
|
436 |
</div>
|
|
|
|
|
437 |
</div>
|
438 |
<?php
|
439 |
}
|
466 |
$current_url = set_url_scheme( 'http://' . parse_url( get_site_url(), PHP_URL_HOST ) . $_SERVER['REQUEST_URI'] );
|
467 |
$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
|
468 |
$current_url = esc_url( $current_url );
|
469 |
+
|
470 |
+
$radius = 2;
|
471 |
if ( $current_page > 1 && $total_pages > $radius ) {
|
472 |
+
$links['prev'] = sprintf( '<li><a data-paged="%s" class="lockout-nav " href="%s">%s</a></li>', $current_page - 1,
|
473 |
+
add_query_arg( 'paged', $current_page - 1, $current_url ), '<i class="sui-icon-chevron-left" aria-hidden="true"></i>' );
|
|
|
|
|
474 |
}
|
475 |
|
476 |
for ( $i = 1; $i <= $total_pages; $i ++ ) {
|
477 |
if ( ( $i >= 1 && $i <= $radius ) || ( $i > $current_page - 2 && $i < $current_page + 2 ) || ( $i <= $total_pages && $i > $total_pages - $radius ) ) {
|
478 |
if ( $i == $current_page ) {
|
479 |
+
$links[ $i ] = sprintf( '<li><a class="lockout-nav" href="#" data-paged="%s" disabled="">%s</a></li>', $i, $i );
|
480 |
} else {
|
481 |
+
$links[ $i ] = sprintf( '<li><a class="lockout-nav" data-paged="%s" href="%s">%s</a></li>', $i,
|
482 |
+
add_query_arg( 'paged', $i, $current_url ), $i );
|
483 |
}
|
484 |
} elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
|
485 |
+
$links[ $i ] = '<li><a class="lockout-nav " href="#" disabled="">...</a></li>';
|
486 |
}
|
487 |
}
|
488 |
|
489 |
if ( $current_page < $total_pages && $total_pages > $radius ) {
|
490 |
+
$links['next'] = sprintf( '<li><a class="lockout-nav " data-paged="%s" href="%s">%s</a></li>', $current_page + 1,
|
491 |
+
add_query_arg( 'paged', $current_page + 1, $current_url ), '<i class="sui-icon-chevron-right" aria-hidden="true"></i>' );
|
|
|
|
|
492 |
}
|
493 |
$output = join( "\n", $links );
|
494 |
$this->_pagination = $output;
|
app/module/ip-lockout/controller/main.php
CHANGED
@@ -63,11 +63,76 @@ class Main extends Controller {
|
|
63 |
$this->add_ajax_action( 'lockoutSummaryData', 'lockoutSummaryData' );
|
64 |
$this->add_ajax_action( 'migrateData', 'movingDataToTable' );
|
65 |
$this->add_ajax_action( 'lockoutExportAsCsv', 'exportAsCsv' );
|
|
|
|
|
66 |
|
67 |
$this->handleIpAction();
|
68 |
$this->handleUserSearch();
|
69 |
}
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
public function lockoutSummaryData() {
|
72 |
if ( ! $this->checkPermission() ) {
|
73 |
return;
|
@@ -275,6 +340,13 @@ class Main extends Controller {
|
|
275 |
'message' => $settings->ip_lockout_message
|
276 |
) );
|
277 |
die;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
} else {
|
279 |
if ( is_user_logged_in() ) {
|
280 |
//if current user can logged in, and no blacklisted we don't need to check the ip
|
@@ -285,6 +357,9 @@ class Main extends Controller {
|
|
285 |
'ip' => $ip
|
286 |
) );
|
287 |
if ( is_object( $model ) && $model->is_locked() ) {
|
|
|
|
|
|
|
288 |
header( 'HTTP/1.0 403 Forbidden' );
|
289 |
header( 'Cache-Control: private' );
|
290 |
$this->renderPartial( 'locked', array(
|
@@ -300,9 +375,10 @@ class Main extends Controller {
|
|
300 |
*/
|
301 |
private function handleUserSearch() {
|
302 |
$view = HTTP_Helper::retrieve_get( 'view' );
|
303 |
-
$id =
|
304 |
$this->email_search = new Email_Search();
|
305 |
$this->email_search->settings = Settings::instance();
|
|
|
306 |
if ( $view == 'notification' || ( defined( 'DOING_AJAX' ) && $id == 'lockout-notification' ) ) {
|
307 |
$this->email_search->eId = 'lockout-notification';
|
308 |
$this->email_search->add_hooks();
|
@@ -722,6 +798,9 @@ class Main extends Controller {
|
|
722 |
if ( in_array( $k, $textarea ) ) {
|
723 |
$data[ $k ] = wp_kses_post( $v );
|
724 |
} else {
|
|
|
|
|
|
|
725 |
$data[ $k ] = sanitize_text_field( $v );
|
726 |
}
|
727 |
}
|
@@ -830,7 +909,8 @@ class Main extends Controller {
|
|
830 |
*/
|
831 |
public function scripts() {
|
832 |
if ( $this->isInPage() ) {
|
833 |
-
|
|
|
834 |
if ( HTTP_Helper::retrieve_get( 'view' ) == 'blacklist' ) {
|
835 |
remove_filter( 'admin_body_class', array( 'WDEV_Plugin_Ui', 'admin_body_class' ) );
|
836 |
}
|
63 |
$this->add_ajax_action( 'lockoutSummaryData', 'lockoutSummaryData' );
|
64 |
$this->add_ajax_action( 'migrateData', 'movingDataToTable' );
|
65 |
$this->add_ajax_action( 'lockoutExportAsCsv', 'exportAsCsv' );
|
66 |
+
$this->add_ajax_action( 'bulkAction', 'bulkAction' );
|
67 |
+
$this->add_ajax_action( 'downloadGeoIPDB', 'downloadGeoIPDB' );
|
68 |
|
69 |
$this->handleIpAction();
|
70 |
$this->handleUserSearch();
|
71 |
}
|
72 |
|
73 |
+
public function bulkAction() {
|
74 |
+
if ( ! $this->checkPermission() ) {
|
75 |
+
return;
|
76 |
+
}
|
77 |
+
if ( ! wp_verify_nonce( HTTP_Helper::retrieve_post( '_wpnonce' ), 'bulkAction' ) ) {
|
78 |
+
return;
|
79 |
+
}
|
80 |
+
|
81 |
+
$ids = HTTP_Helper::retrieve_post( 'ids' );
|
82 |
+
$ids = explode( ',', $ids );
|
83 |
+
$type = HTTP_Helper::retrieve_post( 'type' );
|
84 |
+
if ( count( $ids ) && $type ) {
|
85 |
+
$settings = Settings::instance();
|
86 |
+
foreach ( $ids as $id ) {
|
87 |
+
$model = Log_Model::findByID( $id );
|
88 |
+
switch ( $type ) {
|
89 |
+
case 'whitelist':
|
90 |
+
$settings->addIpToList( $model->ip, 'whitelist' );
|
91 |
+
break;
|
92 |
+
case 'ban':
|
93 |
+
$settings->addIpToList( $model->ip, 'blacklist' );
|
94 |
+
break;
|
95 |
+
case 'delete':
|
96 |
+
$model->delete();
|
97 |
+
break;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
wp_send_json_success( array(
|
102 |
+
'reload' => 1,
|
103 |
+
'message' => ''
|
104 |
+
) );
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
public function downloadGeoIPDB() {
|
109 |
+
if ( ! $this->checkPermission() ) {
|
110 |
+
return;
|
111 |
+
}
|
112 |
+
|
113 |
+
if ( ! wp_verify_nonce( HTTP_Helper::retrieve_post( '_wpnonce' ), 'downloadGeoIPDB' ) ) {
|
114 |
+
return;
|
115 |
+
}
|
116 |
+
|
117 |
+
$url = "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz";
|
118 |
+
$tmp = download_url( $url );
|
119 |
+
if ( ! is_wp_error( $tmp ) ) {
|
120 |
+
$phar = new \PharData( $tmp );
|
121 |
+
$defPath = Utils::instance()->getDefUploadDir();
|
122 |
+
$path = $defPath . DIRECTORY_SEPARATOR . 'maxmind';
|
123 |
+
if ( ! is_dir( $path ) ) {
|
124 |
+
mkdir( $path );
|
125 |
+
}
|
126 |
+
$phar->extractTo( $path, null, true );
|
127 |
+
$settings = Settings::instance();
|
128 |
+
$settings->geoIP_db = $path . DIRECTORY_SEPARATOR . $phar->current()->getFileName() . DIRECTORY_SEPARATOR . 'GeoLite2-Country.mmdb';
|
129 |
+
$settings->save();
|
130 |
+
wp_send_json_success( array(
|
131 |
+
'message' => __( "Database downloaded", "defender-security" )
|
132 |
+
) );
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
public function lockoutSummaryData() {
|
137 |
if ( ! $this->checkPermission() ) {
|
138 |
return;
|
340 |
'message' => $settings->ip_lockout_message
|
341 |
) );
|
342 |
die;
|
343 |
+
} elseif ( $settings->isCountryBlacklist() ) {
|
344 |
+
header( 'HTTP/1.0 403 Forbidden' );
|
345 |
+
header( 'Cache-Control: private' );
|
346 |
+
$this->renderPartial( 'locked', array(
|
347 |
+
'message' => $settings->ip_lockout_message
|
348 |
+
) );
|
349 |
+
die;
|
350 |
} else {
|
351 |
if ( is_user_logged_in() ) {
|
352 |
//if current user can logged in, and no blacklisted we don't need to check the ip
|
357 |
'ip' => $ip
|
358 |
) );
|
359 |
if ( is_object( $model ) && $model->is_locked() ) {
|
360 |
+
if ( ! defined( 'DONOTCACHEPAGE' ) ) {
|
361 |
+
define( 'DONOTCACHEPAGE', true );
|
362 |
+
}
|
363 |
header( 'HTTP/1.0 403 Forbidden' );
|
364 |
header( 'Cache-Control: private' );
|
365 |
$this->renderPartial( 'locked', array(
|
375 |
*/
|
376 |
private function handleUserSearch() {
|
377 |
$view = HTTP_Helper::retrieve_get( 'view' );
|
378 |
+
$id = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : null;
|
379 |
$this->email_search = new Email_Search();
|
380 |
$this->email_search->settings = Settings::instance();
|
381 |
+
|
382 |
if ( $view == 'notification' || ( defined( 'DOING_AJAX' ) && $id == 'lockout-notification' ) ) {
|
383 |
$this->email_search->eId = 'lockout-notification';
|
384 |
$this->email_search->add_hooks();
|
798 |
if ( in_array( $k, $textarea ) ) {
|
799 |
$data[ $k ] = wp_kses_post( $v );
|
800 |
} else {
|
801 |
+
if ( is_array( $v ) ) {
|
802 |
+
$v = implode( ',', $v );
|
803 |
+
}
|
804 |
$data[ $k ] = sanitize_text_field( $v );
|
805 |
}
|
806 |
}
|
909 |
*/
|
910 |
public function scripts() {
|
911 |
if ( $this->isInPage() ) {
|
912 |
+
wp_enqueue_script( 'wpmudev-sui' );
|
913 |
+
wp_enqueue_style( 'wpmudev-sui' );
|
914 |
if ( HTTP_Helper::retrieve_get( 'view' ) == 'blacklist' ) {
|
915 |
remove_filter( 'admin_body_class', array( 'WDEV_Plugin_Ui', 'admin_body_class' ) );
|
916 |
}
|
app/module/ip-lockout/js/script.js
CHANGED
@@ -3,7 +3,6 @@ jQuery(function ($) {
|
|
3 |
WDIP.formHandler();
|
4 |
WDIP.listenFilter();
|
5 |
WDIP.pullSummaryData();
|
6 |
-
WDIP.showHideLog();
|
7 |
|
8 |
$('div.iplockout').on('form-submitted', function (e, data, form) {
|
9 |
if (form.attr('id') != 'settings-frm') {
|
@@ -40,6 +39,24 @@ jQuery(function ($) {
|
|
40 |
}, 1000);
|
41 |
}
|
42 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
//media uploader
|
44 |
var mediaUploader;
|
45 |
$('.file-picker').click(function () {
|
@@ -58,12 +75,20 @@ jQuery(function ($) {
|
|
58 |
// When a file is selected, grab the URL and set it as the text field's value
|
59 |
mediaUploader.on('select', function () {
|
60 |
var attachment = mediaUploader.state().get('selection').first().toJSON();
|
61 |
-
$('#import').val(attachment.url);
|
62 |
$('#file_import').val(attachment.id);
|
|
|
|
|
63 |
});
|
64 |
// Open the uploader dialog
|
65 |
mediaUploader.open();
|
66 |
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
$('.btn-import-ip').click(function () {
|
68 |
var that = $(this);
|
69 |
$.ajax({
|
@@ -88,6 +113,28 @@ jQuery(function ($) {
|
|
88 |
}
|
89 |
})
|
90 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
$('select[name="report_frequency"]').change(function () {
|
92 |
if ($(this).val() == '1') {
|
93 |
$(this).closest('.schedule-box').find('div.days-container').hide();
|
@@ -175,16 +222,17 @@ jQuery(function ($) {
|
|
175 |
var orderby = false;
|
176 |
$('#lockout-logs-sort').change(function () {
|
177 |
var value = $(this).val();
|
|
|
178 |
if (value === 'latest') {
|
179 |
-
query
|
180 |
order = 'desc';
|
181 |
orderby = 'id';
|
182 |
} else if (value === 'oldest') {
|
183 |
-
query
|
184 |
order = 'asc';
|
185 |
orderby = 'id';
|
186 |
} else if (value === 'ip') {
|
187 |
-
query
|
188 |
order = 'asc';
|
189 |
orderby = 'ip';
|
190 |
}
|
@@ -205,7 +253,7 @@ WDIP.formHandler = function () {
|
|
205 |
url: ajaxurl,
|
206 |
data: data,
|
207 |
beforeSend: function () {
|
208 |
-
that.find('.button').attr('disabled', 'disabled');
|
209 |
},
|
210 |
success: function (data) {
|
211 |
if (data.data != undefined && data.data.reload != undefined) {
|
@@ -222,7 +270,7 @@ WDIP.formHandler = function () {
|
|
222 |
} else if (data.data != undefined && data.data.url != undefined) {
|
223 |
location.href = data.data.url;
|
224 |
} else {
|
225 |
-
var buttons = that.find('.button');
|
226 |
if (buttons.size() > 0) {
|
227 |
buttons.removeAttr('disabled');
|
228 |
}
|
@@ -257,8 +305,12 @@ WDIP.ajaxPull = function (query, callback) {
|
|
257 |
},
|
258 |
success: function (data) {
|
259 |
jq('.lockout-logs-container table').replaceWith(jq(data.data.html).find('table').first());
|
260 |
-
jq('.lockout-logs-container .
|
261 |
//jq('.lockout-logs-container').replaceWith(jq(data.data.html));
|
|
|
|
|
|
|
|
|
262 |
overlay.remove();
|
263 |
if (isFirst == false) {
|
264 |
//window.history.pushState(null, document.title, urlOrigin + '&' + query);
|
@@ -307,22 +359,3 @@ WDIP.pullSummaryData = function () {
|
|
307 |
})
|
308 |
}
|
309 |
}
|
310 |
-
|
311 |
-
WDIP.showHideLog = function () {
|
312 |
-
var jq = jQuery;
|
313 |
-
jq('body').on('click', '.show-hide-log', function (e) {
|
314 |
-
if (jq(e.target).is('input')) {
|
315 |
-
return;
|
316 |
-
}
|
317 |
-
var target = jq(this).next('tr.table-info');
|
318 |
-
if (target.hasClass('wd-hide')) {
|
319 |
-
target.removeClass('wd-hide');
|
320 |
-
jq(this).addClass('opened');
|
321 |
-
jq(this).find('i').removeClass().addClass('dev-icon dev-icon-caret_up')
|
322 |
-
} else {
|
323 |
-
target.addClass('wd-hide');
|
324 |
-
jq(this).removeClass('opened');
|
325 |
-
jq(this).find('i').removeClass().addClass('dev-icon dev-icon-caret_down')
|
326 |
-
}
|
327 |
-
})
|
328 |
-
}
|
3 |
WDIP.formHandler();
|
4 |
WDIP.listenFilter();
|
5 |
WDIP.pullSummaryData();
|
|
|
6 |
|
7 |
$('div.iplockout').on('form-submitted', function (e, data, form) {
|
8 |
if (form.attr('id') != 'settings-frm') {
|
39 |
}, 1000);
|
40 |
}
|
41 |
});
|
42 |
+
$('body').on('change', '.single-select, #apply-all', function () {
|
43 |
+
var inputs = $('input[name="ids[]"]:checked');
|
44 |
+
var ids = [];
|
45 |
+
inputs.each(function (index, input) {
|
46 |
+
ids.push($(input).val());
|
47 |
+
});
|
48 |
+
$('.ids').val(ids.join(','));
|
49 |
+
})
|
50 |
+
$('.deactivate-login-lockout').click(function () {
|
51 |
+
$('.ip-frm').append('<input type="hidden" name="login_protection" value="0"/>');
|
52 |
+
$(this).attr('disabled', 'disabled');
|
53 |
+
$('.ip-frm').submit();
|
54 |
+
});
|
55 |
+
$('.deactivate-404-lockout').click(function () {
|
56 |
+
$('.ip-frm').append('<input type="hidden" name="detect_404" value="0"/>');
|
57 |
+
$(this).attr('disabled', 'disabled');
|
58 |
+
$('.ip-frm').submit();
|
59 |
+
});
|
60 |
//media uploader
|
61 |
var mediaUploader;
|
62 |
$('.file-picker').click(function () {
|
75 |
// When a file is selected, grab the URL and set it as the text field's value
|
76 |
mediaUploader.on('select', function () {
|
77 |
var attachment = mediaUploader.state().get('selection').first().toJSON();
|
|
|
78 |
$('#file_import').val(attachment.id);
|
79 |
+
$('.upload-input').addClass('sui-has_file');
|
80 |
+
$('.upload-input .sui-upload-file span').text(attachment.filename);
|
81 |
});
|
82 |
// Open the uploader dialog
|
83 |
mediaUploader.open();
|
84 |
})
|
85 |
+
$('.file-picker-remove').click(function () {
|
86 |
+
$('.upload-input').removeClass('sui-has_file');
|
87 |
+
$('#file_import').val('');
|
88 |
+
})
|
89 |
+
$('#apply-all').click(function () {
|
90 |
+
$('.single-select').prop('checked', $(this).prop('checked'));
|
91 |
+
});
|
92 |
$('.btn-import-ip').click(function () {
|
93 |
var that = $(this);
|
94 |
$.ajax({
|
113 |
}
|
114 |
})
|
115 |
});
|
116 |
+
$('.download-geo-ip').click(function () {
|
117 |
+
var that = $(this);
|
118 |
+
$.ajax({
|
119 |
+
type: 'POST',
|
120 |
+
url: ajaxurl,
|
121 |
+
data: {
|
122 |
+
action: 'downloadGeoIPDB',
|
123 |
+
_wpnonce: that.data('nonce')
|
124 |
+
}, beforeSend: function () {
|
125 |
+
that.attr('disabled', 'disabled');
|
126 |
+
that.addClass('sui-button-onload');
|
127 |
+
},
|
128 |
+
success: function (data) {
|
129 |
+
if (data.success == 1) {
|
130 |
+
Defender.showNotification('success', data.data.message);
|
131 |
+
location.reload();
|
132 |
+
} else {
|
133 |
+
Defender.showNotification('error', data.data.message);
|
134 |
+
}
|
135 |
+
}
|
136 |
+
})
|
137 |
+
})
|
138 |
$('select[name="report_frequency"]').change(function () {
|
139 |
if ($(this).val() == '1') {
|
140 |
$(this).closest('.schedule-box').find('div.days-container').hide();
|
222 |
var orderby = false;
|
223 |
$('#lockout-logs-sort').change(function () {
|
224 |
var value = $(this).val();
|
225 |
+
var query = WDIP.buildFilterQuery();
|
226 |
if (value === 'latest') {
|
227 |
+
query += '&orderby=id&order=desc'
|
228 |
order = 'desc';
|
229 |
orderby = 'id';
|
230 |
} else if (value === 'oldest') {
|
231 |
+
query += '&orderby=id&order=asc'
|
232 |
order = 'asc';
|
233 |
orderby = 'id';
|
234 |
} else if (value === 'ip') {
|
235 |
+
query += '&orderby=ip&order=asc'
|
236 |
order = 'asc';
|
237 |
orderby = 'ip';
|
238 |
}
|
253 |
url: ajaxurl,
|
254 |
data: data,
|
255 |
beforeSend: function () {
|
256 |
+
that.find('.sui-button').attr('disabled', 'disabled');
|
257 |
},
|
258 |
success: function (data) {
|
259 |
if (data.data != undefined && data.data.reload != undefined) {
|
270 |
} else if (data.data != undefined && data.data.url != undefined) {
|
271 |
location.href = data.data.url;
|
272 |
} else {
|
273 |
+
var buttons = that.find('.sui-button');
|
274 |
if (buttons.size() > 0) {
|
275 |
buttons.removeAttr('disabled');
|
276 |
}
|
305 |
},
|
306 |
success: function (data) {
|
307 |
jq('.lockout-logs-container table').replaceWith(jq(data.data.html).find('table').first());
|
308 |
+
jq('.lockout-logs-container .sui-pagination-wrap').replaceWith(jq(data.data.html).find('.sui-pagination-wrap').first());
|
309 |
//jq('.lockout-logs-container').replaceWith(jq(data.data.html));
|
310 |
+
//rebind according
|
311 |
+
jq('.sui-accordion').each(function () {
|
312 |
+
SUI.suiAccordion(this);
|
313 |
+
});
|
314 |
overlay.remove();
|
315 |
if (isFirst == false) {
|
316 |
//window.history.pushState(null, document.title, urlOrigin + '&' + query);
|
359 |
})
|
360 |
}
|
361 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/module/ip-lockout/model/settings.php
CHANGED
@@ -5,6 +5,7 @@
|
|
5 |
|
6 |
namespace WP_Defender\Module\IP_Lockout\Model;
|
7 |
|
|
|
8 |
use Hammer\Helper\HTTP_Helper;
|
9 |
use Hammer\Helper\WP_Helper;
|
10 |
use WP_Defender\Behavior\Utils;
|
@@ -17,6 +18,7 @@ class Settings extends \Hammer\WP\Settings {
|
|
17 |
public $login_protection_login_attempt = 5;
|
18 |
public $login_protection_lockout_timeframe = 300;
|
19 |
public $login_protection_lockout_duration = 300;
|
|
|
20 |
public $login_protection_lockout_message = "You have been locked out due to too many invalid login attempts.";
|
21 |
public $login_protection_ban_admin_brute = false;
|
22 |
public $login_protection_lockout_ban = false;
|
@@ -26,6 +28,7 @@ class Settings extends \Hammer\WP\Settings {
|
|
26 |
public $detect_404_threshold = 20;
|
27 |
public $detect_404_timeframe = 300;
|
28 |
public $detect_404_lockout_duration = 300;
|
|
|
29 |
public $detect_404_whitelist;
|
30 |
public $detect_404_ignored_filetypes;
|
31 |
public $detect_404_lockout_message = "You have been locked out due to too many attempts to access a file that doesn’t exist.";
|
@@ -36,6 +39,9 @@ class Settings extends \Hammer\WP\Settings {
|
|
36 |
public $ip_whitelist;
|
37 |
public $ip_lockout_message = 'The administrator has blocked your IP from accessing this website.';
|
38 |
|
|
|
|
|
|
|
39 |
public $login_lockout_notification = true;
|
40 |
public $ip_lockout_notification = true;
|
41 |
|
@@ -44,8 +50,9 @@ class Settings extends \Hammer\WP\Settings {
|
|
44 |
public $report_day = 'sunday';
|
45 |
public $report_time = '0:00';
|
46 |
|
47 |
-
public $
|
48 |
|
|
|
49 |
|
50 |
public $receipts = array();
|
51 |
public $report_receipts = array();
|
@@ -62,10 +69,9 @@ class Settings extends \Hammer\WP\Settings {
|
|
62 |
$this->receipts[] = get_current_user_id();
|
63 |
$this->report_receipts[] = get_current_user_id();
|
64 |
$this->ip_whitelist = $this->getUserIp() . PHP_EOL;
|
65 |
-
|
66 |
//default is weekly
|
67 |
-
$this->report_day
|
68 |
-
$hour
|
69 |
if ( $hour == '00' ) {
|
70 |
$hour = 0;
|
71 |
} else {
|
@@ -144,6 +150,26 @@ class Settings extends \Hammer\WP\Settings {
|
|
144 |
return $arr;
|
145 |
}
|
146 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
/**
|
148 |
* @param $ip
|
149 |
*
|
@@ -385,6 +411,68 @@ class Settings extends \Hammer\WP\Settings {
|
|
385 |
return $usernames;
|
386 |
}
|
387 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
388 |
/**
|
389 |
* @return Settings
|
390 |
*/
|
5 |
|
6 |
namespace WP_Defender\Module\IP_Lockout\Model;
|
7 |
|
8 |
+
use Hammer\GeoIP\GeoIp;
|
9 |
use Hammer\Helper\HTTP_Helper;
|
10 |
use Hammer\Helper\WP_Helper;
|
11 |
use WP_Defender\Behavior\Utils;
|
18 |
public $login_protection_login_attempt = 5;
|
19 |
public $login_protection_lockout_timeframe = 300;
|
20 |
public $login_protection_lockout_duration = 300;
|
21 |
+
public $login_protection_lockout_duration_unit = 'seconds';
|
22 |
public $login_protection_lockout_message = "You have been locked out due to too many invalid login attempts.";
|
23 |
public $login_protection_ban_admin_brute = false;
|
24 |
public $login_protection_lockout_ban = false;
|
28 |
public $detect_404_threshold = 20;
|
29 |
public $detect_404_timeframe = 300;
|
30 |
public $detect_404_lockout_duration = 300;
|
31 |
+
public $detect_404_lockout_duration_unit = 'seconds';
|
32 |
public $detect_404_whitelist;
|
33 |
public $detect_404_ignored_filetypes;
|
34 |
public $detect_404_lockout_message = "You have been locked out due to too many attempts to access a file that doesn’t exist.";
|
39 |
public $ip_whitelist;
|
40 |
public $ip_lockout_message = 'The administrator has blocked your IP from accessing this website.';
|
41 |
|
42 |
+
public $country_blacklist;
|
43 |
+
public $country_whitelist;
|
44 |
+
|
45 |
public $login_lockout_notification = true;
|
46 |
public $ip_lockout_notification = true;
|
47 |
|
50 |
public $report_day = 'sunday';
|
51 |
public $report_time = '0:00';
|
52 |
|
53 |
+
public $geoIP_db = null;
|
54 |
|
55 |
+
public $storage_days = 30;
|
56 |
|
57 |
public $receipts = array();
|
58 |
public $report_receipts = array();
|
69 |
$this->receipts[] = get_current_user_id();
|
70 |
$this->report_receipts[] = get_current_user_id();
|
71 |
$this->ip_whitelist = $this->getUserIp() . PHP_EOL;
|
|
|
72 |
//default is weekly
|
73 |
+
$this->report_day = strtolower( date( 'l' ) );
|
74 |
+
$hour = date( 'H', current_time( 'timestamp' ) );
|
75 |
if ( $hour == '00' ) {
|
76 |
$hour = 0;
|
77 |
} else {
|
150 |
return $arr;
|
151 |
}
|
152 |
|
153 |
+
/**
|
154 |
+
* @return array
|
155 |
+
*/
|
156 |
+
public function getCountryBlacklist() {
|
157 |
+
$arr = array_filter( explode( ',', $this->country_blacklist ) );
|
158 |
+
$arr = array_map( 'trim', $arr );
|
159 |
+
|
160 |
+
return $arr;
|
161 |
+
}
|
162 |
+
|
163 |
+
/**
|
164 |
+
* @return array
|
165 |
+
*/
|
166 |
+
public function getCountryWhitelist() {
|
167 |
+
$arr = array_filter( explode( ',', $this->country_whitelist ) );
|
168 |
+
$arr = array_map( 'trim', $arr );
|
169 |
+
|
170 |
+
return $arr;
|
171 |
+
}
|
172 |
+
|
173 |
/**
|
174 |
* @param $ip
|
175 |
*
|
411 |
return $usernames;
|
412 |
}
|
413 |
|
414 |
+
/**
|
415 |
+
* @return bool
|
416 |
+
*/
|
417 |
+
public function isGeoDBDownloaded() {
|
418 |
+
if ( is_null( $this->geoIP_db ) || ! is_file( $this->geoIP_db ) ) {
|
419 |
+
return false;
|
420 |
+
}
|
421 |
+
|
422 |
+
return true;
|
423 |
+
}
|
424 |
+
|
425 |
+
/**
|
426 |
+
* @return bool
|
427 |
+
*/
|
428 |
+
public function isCountryBlacklist() {
|
429 |
+
//return if php less than 5.4
|
430 |
+
if ( version_compare( phpversion(), '5.4', '<' ) ) {
|
431 |
+
return false;
|
432 |
+
}
|
433 |
+
$country = IP_API::getCurrentCountry();
|
434 |
+
if ( $country == false ) {
|
435 |
+
return false;
|
436 |
+
}
|
437 |
+
//if this country is whitelisted, so we dont need to blacklist this
|
438 |
+
if ( $this->isCountryWhitelist() ) {
|
439 |
+
return false;
|
440 |
+
}
|
441 |
+
|
442 |
+
$blacklisted = $this->getCountryBlacklist();
|
443 |
+
if ( empty( $blacklisted ) ) {
|
444 |
+
return false;
|
445 |
+
}
|
446 |
+
if ( in_array( 'all', $blacklisted ) ) {
|
447 |
+
return true;
|
448 |
+
}
|
449 |
+
|
450 |
+
$country = IP_API::getCurrentCountry();
|
451 |
+
|
452 |
+
if ( in_array( strtoupper( $country['iso'] ), $blacklisted ) ) {
|
453 |
+
return true;
|
454 |
+
}
|
455 |
+
|
456 |
+
return false;
|
457 |
+
}
|
458 |
+
|
459 |
+
/**
|
460 |
+
* @return bool
|
461 |
+
*/
|
462 |
+
public function isCountryWhitelist() {
|
463 |
+
$country = IP_API::getCurrentCountry();
|
464 |
+
$whitelist = $this->getCountryWhitelist();
|
465 |
+
if ( empty( $whitelist ) ) {
|
466 |
+
return false;
|
467 |
+
}
|
468 |
+
|
469 |
+
if ( in_array( strtoupper( $country['iso'] ), $whitelist ) ) {
|
470 |
+
return true;
|
471 |
+
}
|
472 |
+
|
473 |
+
return false;
|
474 |
+
}
|
475 |
+
|
476 |
/**
|
477 |
* @return Settings
|
478 |
*/
|
app/module/ip-lockout/view/blacklist/enabled.php
CHANGED
@@ -1,119 +1,225 @@
|
|
1 |
-
<div class="
|
2 |
-
<
|
3 |
-
<
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
|
|
8 |
<?php _e( "Choose which IP addresses you wish to permanently ban from accessing your website.", "defender-security" ) ?>
|
9 |
</p>
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
</span>
|
19 |
</div>
|
20 |
-
<div class="
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
</div>
|
27 |
</div>
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
<
|
32 |
-
<?php esc_html_e( "Lockout message", "defender-security" ) ?>
|
33 |
-
</label>
|
34 |
-
<span class="sub">
|
35 |
-
<?php esc_html_e( "Customize the message locked out users will see.", "defender-security" ) ?>
|
36 |
-
</span>
|
37 |
</div>
|
38 |
-
<div class="
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
</div>
|
48 |
</div>
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
<
|
53 |
-
<?php _e( "Whitelist", "defender-security" ) ?>
|
54 |
-
</label>
|
55 |
-
<span class="sub">
|
56 |
-
<?php _e( "Any IP addresses you list here will be exempt from the options you've selected for Login Protect and 404 Detection.", "defender-security" ) ?>
|
57 |
-
</span>
|
58 |
</div>
|
59 |
-
<div class="
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
</div>
|
66 |
</div>
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
</span>
|
76 |
</div>
|
77 |
-
<div class="
|
78 |
-
<div class="
|
79 |
-
<
|
80 |
-
<
|
81 |
-
|
82 |
-
|
83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
<?php _e( "Import", "defender-security" ) ?>
|
85 |
</button>
|
|
|
|
|
|
|
86 |
</div>
|
87 |
-
<span class="form-help">
|
88 |
-
<?php _e( "Upload your exported blacklist. Note: Existing IP addresses will not be removed, only new IP addresses added.", "defender-security" ) ?>
|
89 |
-
</span>
|
90 |
</div>
|
91 |
</div>
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
</span>
|
101 |
</div>
|
102 |
-
<div class="
|
103 |
-
<
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
</
|
|
|
|
|
|
|
108 |
</div>
|
109 |
</div>
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
</div>
|
|
|
|
1 |
+
<div class="sui-box">
|
2 |
+
<form method="post" id="settings-frm" class="ip-frm">
|
3 |
+
<div class="sui-box-header">
|
4 |
+
<h3 class="sui-box-title">
|
5 |
+
<?php _e( "IP Banning", "defender-security" ) ?>
|
6 |
+
</h3>
|
7 |
+
</div>
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
<?php _e( "Choose which IP addresses you wish to permanently ban from accessing your website.", "defender-security" ) ?>
|
11 |
</p>
|
12 |
+
<div class="sui-box-settings-row">
|
13 |
+
<div class="sui-box-settings-col-1">
|
14 |
+
<span class="sui-settings-label">
|
15 |
+
<?php _e( "IP Addresses", "defender-security" ) ?>
|
16 |
+
</span>
|
17 |
+
<span class="sui-description">
|
18 |
+
<?php _e( "Add IP addresses you want to permanently ban from, or always allow access to your website.", "defender-security" ) ?>
|
19 |
+
</span>
|
|
|
20 |
</div>
|
21 |
+
<div class="sui-box-settings-col-2">
|
22 |
+
<strong><?php _e( "Blacklist", "defender-security" ) ?></strong>
|
23 |
+
<p class="sui-description">
|
24 |
+
<?php _e( "Any IPs addresses you list here will be completely blocked from accessing your website, including admins.", "defender-security" ) ?>
|
25 |
+
</p>
|
26 |
+
<div class="sui-border-frame">
|
27 |
+
<label class="sui-label"><?php _e( "Banned IPs", "defender-security" ) ?></label>
|
28 |
+
<textarea class="sui-form-control"
|
29 |
+
id="ip_blacklist" name="ip_blacklist"
|
30 |
+
placeholder="<?php esc_attr_e( "Add blacklisted IPs here, one per line", "defender-security" ) ?>"
|
31 |
+
rows="8"><?php echo $settings->ip_blacklist ?></textarea>
|
32 |
+
<span class="sui-description">
|
33 |
+
<?php _e( "Both IPv4 and IPv6 are supported. IP ranges are also accepted in format xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx.", "defender-security" ) ?>
|
34 |
+
</span>
|
35 |
+
</div>
|
36 |
+
<strong><?php _e( "Whitelist", "defender-security" ) ?></strong>
|
37 |
+
<div class="sui-border-frame">
|
38 |
+
<label class="sui-label"><?php _e( "Allowed IPs", "defender-security" ) ?></label>
|
39 |
+
<textarea class="sui-form-control"
|
40 |
+
id="ip_whitelist" name="ip_whitelist"
|
41 |
+
placeholder="<?php esc_attr_e( "Add whitelisted IPs here, one per line", "defender-security" ) ?>"
|
42 |
+
rows="8"><?php echo $settings->ip_whitelist ?></textarea>
|
43 |
+
<span class="sui-description">
|
44 |
+
<?php _e( "One IP address per line. Both IPv4 and IPv6 are supported. IP ranges are also accepted in format xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx.", "defender-security" ) ?>
|
45 |
+
</span>
|
46 |
+
</div>
|
47 |
+
<div class="sui-notice">
|
48 |
+
<p>
|
49 |
+
<?php printf( __( "We recommend you add your own IP to avoid getting locked out accidentally! Your current IP is 192.87.990.06.", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->getUserIp() ) ?>
|
50 |
+
</p>
|
51 |
+
</div>
|
52 |
</div>
|
53 |
</div>
|
54 |
+
<div class="sui-box-settings-row">
|
55 |
+
<div class="sui-box-settings-col-1">
|
56 |
+
<span class="sui-settings-label"><?php esc_html_e( "Locations", "defender-security" ) ?></span>
|
57 |
+
<span class="sui-description"><?php esc_html_e( "Use this feature to ban any countries you don’t expect/want traffic from to protect your site entirely from unwanted hackers and bots.", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
58 |
</div>
|
59 |
+
<div class="sui-box-settings-col-2 geo-ip-block">
|
60 |
+
<?php if ( version_compare( phpversion(), '5.4', '<' ) ): ?>
|
61 |
+
<div class="sui-notice sui-notice-warning">
|
62 |
+
<p>
|
63 |
+
<?php printf( __( "This feature requires PHP 5.4 or newer. Please upgrade your PHP version if you wish to use location banning.", "defender-security" ), admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ) ?>
|
64 |
+
</p>
|
65 |
+
</div>
|
66 |
+
<?php else: ?>
|
67 |
+
<?php $country = \WP_Defender\Module\IP_Lockout\Component\IP_API::getCurrentCountry(); ?>
|
68 |
+
<?php if ( $settings->isGeoDBDownloaded() == false ): ?>
|
69 |
+
<div class="sui-notice sui-notice-info">
|
70 |
+
<p>
|
71 |
+
<?php _e( "To use this feature you must first download the latest Geo IP Database.", "defender-security" ) ?>
|
72 |
+
</p>
|
73 |
+
<div class="sui-notice-buttons">
|
74 |
+
<button type="button" class="sui-button sui-button-ghost download-geo-ip"
|
75 |
+
data-nonce="<?php echo wp_create_nonce( 'downloadGeoIPDB' ) ?>">
|
76 |
+
<span class="sui-loading-text"><?php _e( "Download", "defender-security" ) ?></span>
|
77 |
+
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
|
78 |
+
</button>
|
79 |
+
</div>
|
80 |
+
</div>
|
81 |
+
<?php elseif ( ! $country ): ?>
|
82 |
+
<div class="sui-notice sui-notice-warning">
|
83 |
+
<p>
|
84 |
+
<?php printf( __( "Can't detect current country, it seem your site setup in localhost environment", "defender-security" ), admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ) ?>
|
85 |
+
</p>
|
86 |
+
</div>
|
87 |
+
<?php else: ?>
|
88 |
+
<strong><?php _e( "Blacklist", "defender-security" ) ?></strong>
|
89 |
+
<p class="sui-description no-margin-bottom">
|
90 |
+
<?php _e( "Any countries you select will not being able to access any area of your website.", "defender-security" ) ?>
|
91 |
+
</p>
|
92 |
+
<div class="sui-border-frame">
|
93 |
+
<div class="sui-control-with-icon">
|
94 |
+
<input type="hidden" name="country_blacklist[]" value=""/>
|
95 |
+
<select class="sui-select sui-select sui-form-control" name="country_blacklist[]"
|
96 |
+
placeholder="<?php esc_attr_e( "Type country name", "defender-security" ) ?>"
|
97 |
+
multiple>
|
98 |
+
<option value="all" <?php selected( true, in_array( 'all', $settings->getCountryBlacklist() ) ) ?>><?php _e( "Block all", "defender-security" ) ?></option>
|
99 |
+
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->countriesList() as $code => $country ): ?>
|
100 |
+
<option value="<?php echo $code ?>" <?php selected( true, in_array( $code, $settings->getCountryBlacklist() ) ) ?>><?php echo $country ?></option>
|
101 |
+
<?php endforeach; ?>
|
102 |
+
</select>
|
103 |
+
<i class="sui-icon-web-globe-world" aria-hidden="true"></i>
|
104 |
+
</div>
|
105 |
+
</div>
|
106 |
+
<strong><?php _e( "Whitelist", "defender-security" ) ?></strong>
|
107 |
+
<p class="sui-description no-margin-bottom">
|
108 |
+
<?php _e( "Any countries you select will always be able to view your website. Note: We’ve added your default country by default.", "defender-security" ) ?>
|
109 |
+
</p>
|
110 |
+
<div class="sui-border-frame">
|
111 |
+
<div class="sui-control-with-icon">
|
112 |
+
<input type="hidden" name="country_whitelist[]" value=""/>
|
113 |
+
<select class="sui-select sui-select sui-form-control" name="country_whitelist[]"
|
114 |
+
placeholder="<?php esc_attr_e( "Type country name", "defender-security" ) ?>"
|
115 |
+
multiple>
|
116 |
+
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->countriesList() as $code => $country ): ?>
|
117 |
+
<option value="<?php echo $code ?>" <?php selected( true, in_array( $code, $settings->getCountryWhitelist() ) ) ?>><?php echo $country ?></option>
|
118 |
+
<?php endforeach; ?>
|
119 |
+
</select>
|
120 |
+
<i class="sui-icon-web-globe-world" aria-hidden="true"></i>
|
121 |
+
</div>
|
122 |
+
<p class="sui-description">
|
123 |
+
<?php _e( "Note: your whitelist will override any country ban, but will still follow your 404 and login lockout rules.", "defender-security" ) ?>
|
124 |
+
</p>
|
125 |
+
</div>
|
126 |
+
<p class="sui-description">
|
127 |
+
This product includes GeoLite2 data created by MaxMind, available from
|
128 |
+
<a href="https://www.maxmind.com">https://www.maxmind.com</a>.
|
129 |
+
</p>
|
130 |
+
<?php endif; ?>
|
131 |
+
<?php endif; ?>
|
132 |
</div>
|
133 |
</div>
|
134 |
+
<div class="sui-box-settings-row">
|
135 |
+
<div class="sui-box-settings-col-1">
|
136 |
+
<span class="sui-settings-label"><?php esc_html_e( "Message", "defender-security" ) ?></span>
|
137 |
+
<span class="sui-description"><?php esc_html_e( "Customize the message locked out users will see.", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
138 |
</div>
|
139 |
+
<div class="sui-box-settings-col-2">
|
140 |
+
<label class="sui-label">
|
141 |
+
<?php _e( "Custom message", "defender-security" ) ?>
|
142 |
+
</label>
|
143 |
+
<div class="sui-form-field">
|
144 |
+
<textarea name="ip_lockout_message" class="sui-form-control"
|
145 |
+
placeholder="<?php esc_attr_e( "The administrator has blocked your IP from accessing this website.", "defender-security" ) ?>"
|
146 |
+
id="ip_lockout_message"><?php echo $settings->ip_lockout_message ?></textarea>
|
147 |
+
<span class="sui-description">
|
148 |
+
<?php echo sprintf( __( "This message will be displayed across your website during the lockout period. See a quick preview <a href=\"%s\">here</a>.", "defender-security" ), add_query_arg( array(
|
149 |
+
'def-lockout-demo' => 1,
|
150 |
+
'type' => 'blacklist'
|
151 |
+
), network_site_url() ) ) ?>
|
152 |
+
</span>
|
153 |
+
</div>
|
154 |
</div>
|
155 |
</div>
|
156 |
+
<div class="sui-box-settings-row">
|
157 |
+
<div class="sui-box-settings-col-1">
|
158 |
+
<span class="sui-settings-label">
|
159 |
+
<?php _e( "Import", "defender-security" ) ?>
|
160 |
+
</span>
|
161 |
+
<span class="sui-description">
|
162 |
+
<?php _e( "Use this tool to import both your blacklist and whitelist from another website.", "defender-security" ) ?>
|
163 |
+
</span>
|
|
|
164 |
</div>
|
165 |
+
<div class="sui-box-settings-col-2">
|
166 |
+
<div class="sui-form-field">
|
167 |
+
<span><?php _e( "Upload your exported blacklist.", "defender-security" ) ?></span>
|
168 |
+
<div class="upload-input sui-upload">
|
169 |
+
<div class="sui-upload-file">
|
170 |
+
|
171 |
+
<span></span>
|
172 |
+
|
173 |
+
<button aria-label="Remove file" class="file-picker-remove">
|
174 |
+
<i class="sui-icon-close" aria-hidden="true"></i>
|
175 |
+
</button>
|
176 |
+
|
177 |
+
</div>
|
178 |
+
<button type="button" class="sui-upload-button file-picker">
|
179 |
+
<i class="sui-icon-upload-cloud" aria-hidden="true"></i> Upload file
|
180 |
+
</button>
|
181 |
+
<input type="hidden" name="file_import" id="file_import">
|
182 |
+
</div>
|
183 |
+
<div class="clear margin-top-10"></div>
|
184 |
+
<button type="button" class="sui-button sui-button-ghost btn-import-ip">
|
185 |
+
<i class="sui-icon-download-cloud" aria-hidden="true"></i>
|
186 |
<?php _e( "Import", "defender-security" ) ?>
|
187 |
</button>
|
188 |
+
<span class="sui-description">
|
189 |
+
<?php _e( "Note: Existing IPs will not be removed - only new IPs added.", "defender-security" ) ?>
|
190 |
+
</span>
|
191 |
</div>
|
|
|
|
|
|
|
192 |
</div>
|
193 |
</div>
|
194 |
+
<div class="sui-box-settings-row">
|
195 |
+
<div class="sui-box-settings-col-1">
|
196 |
+
<span class="sui-settings-label">
|
197 |
+
<?php _e( "Export", "defender-security" ) ?>
|
198 |
+
</span>
|
199 |
+
<span class="sui-description">
|
200 |
+
<?php _e( "Export both your blacklist and whitelist to use on another website.", "defender-security" ) ?>
|
201 |
+
</span>
|
|
|
202 |
</div>
|
203 |
+
<div class="sui-box-settings-col-2">
|
204 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=export&_wpnonce=' . wp_create_nonce( 'defipexport' ) ) ?>"
|
205 |
+
class="sui-button sui-button-outlined export">
|
206 |
+
<i class="sui-icon-upload-cloud" aria-hidden="true"></i>
|
207 |
+
<?php _e( "Export", "defender-security" ) ?>
|
208 |
+
</a>
|
209 |
+
<span class="sui-description">
|
210 |
+
<?php _e( "The export will include both the blacklist and whitelist.", "defender-security" ) ?>
|
211 |
+
</span>
|
212 |
</div>
|
213 |
</div>
|
214 |
+
</div>
|
215 |
+
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
216 |
+
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
217 |
+
<div class="sui-box-footer">
|
218 |
+
<div class="sui-actions-right">
|
219 |
+
<button type="submit" class="sui-button sui-button-blue">
|
220 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
221 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
222 |
+
</div>
|
223 |
+
</div>
|
224 |
+
</form>
|
225 |
+
</div>
|
app/module/ip-lockout/view/detect-404/disabled.php
CHANGED
@@ -1,20 +1,25 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
|
|
|
|
4 |
</div>
|
5 |
-
<div class="
|
6 |
-
<img
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
<
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
19 |
</div>
|
20 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php esc_html_e( "404 Detection", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<div class="sui-message">
|
8 |
+
<img
|
9 |
+
src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/lockout-man.svg"
|
10 |
+
class="sui-image"/>
|
11 |
+
<div class="sui-message-content">
|
12 |
+
<p>
|
13 |
+
<?php esc_html_e( "With 404 detection enabled, Defender will keep an eye out for IP addresses that repeatedly request pages on your website that don’t exist and then temporarily block them from accessing your site.", "defender-security" ) ?>
|
14 |
+
</p>
|
15 |
+
<form method="post" id="settings-frm" class="ip-frm">
|
16 |
+
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
17 |
+
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
18 |
+
<input type="hidden" name="detect_404" value="1"/>
|
19 |
+
<button type="submit" class="sui-button sui-button-blue">
|
20 |
+
<?php esc_html_e( "Enable", "defender-security" ) ?>
|
21 |
+
</button>
|
22 |
+
</form>
|
23 |
+
</div>
|
24 |
</div>
|
25 |
</div>
|
app/module/ip-lockout/view/detect-404/enabled.php
CHANGED
@@ -1,153 +1,199 @@
|
|
1 |
-
<div class="
|
2 |
<form method="post" id="settings-frm" class="ip-frm">
|
3 |
-
<div class="box-
|
4 |
-
<h3
|
5 |
-
|
6 |
-
|
7 |
-
<span tooltip="<?php esc_attr_e( "Deactivate 404 Detection", "defender-security" ) ?>" class="toggle">
|
8 |
-
<input type="hidden" name="detect_404" value="0"/>
|
9 |
-
<input type="checkbox" checked="checked" class="toggle-checkbox"
|
10 |
-
id="toggle_404_detection" name="detect_404" value="1"/>
|
11 |
-
<label class="toggle-label" for="toggle_404_detection"></label>
|
12 |
-
</span>
|
13 |
-
</div>
|
14 |
-
</div>
|
15 |
</div>
|
16 |
-
<div class="box-
|
|
|
|
|
|
|
|
|
|
|
17 |
<?php if ( ( $count = ( \WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api::get404Lockouts( strtotime( '-24 hours', current_time( 'timestamp' ) ) ) ) ) > 0 ): ?>
|
18 |
-
<div class="
|
19 |
-
|
|
|
|
|
20 |
</div>
|
21 |
<?php else: ?>
|
22 |
-
<div class="
|
23 |
-
|
|
|
|
|
24 |
</div>
|
25 |
<?php endif; ?>
|
26 |
-
<div class="
|
27 |
-
<div class="
|
28 |
-
<
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
42 |
</div>
|
43 |
</div>
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
<
|
48 |
-
|
49 |
-
|
50 |
-
<
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
</div>
|
67 |
</div>
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
<
|
72 |
-
|
73 |
-
|
74 |
-
<
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
'type' => '404'
|
85 |
-
), network_site_url() ) ) ?>
|
86 |
-
</span>
|
87 |
</div>
|
88 |
</div>
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
|
|
101 |
rows="8"><?php echo $settings->detect_404_whitelist ?></textarea>
|
102 |
-
|
103 |
-
|
104 |
-
|
|
|
105 |
</div>
|
106 |
</div>
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
|
|
119 |
rows="8"><?php echo $settings->detect_404_ignored_filetypes ?></textarea>
|
120 |
-
|
121 |
-
|
122 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
</div>
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
</span>
|
134 |
-
</div>
|
135 |
-
<div class="column">
|
136 |
-
<input type="hidden" name="detect_404_logged" value="0"/>
|
137 |
-
<input id="detect_404_logged" <?php checked( 1, $settings->detect_404_logged ) ?>
|
138 |
-
type="checkbox"
|
139 |
-
name="detect_404_logged" value="1">
|
140 |
-
<label for="detect_404_logged"
|
141 |
-
class="inline form-help is-marginless"><?php esc_html_e( 'Monitor 404s from logged in users', "defender-security" ) ?></label>
|
142 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
</div>
|
144 |
-
<div class="clear line"></div>
|
145 |
-
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
146 |
-
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
147 |
-
<button type="submit" class="button button-primary float-r">
|
148 |
-
<?php esc_html_e( "UPDATE SETTINGS", "defender-security" ) ?>
|
149 |
-
</button>
|
150 |
-
<div class="clear"></div>
|
151 |
</div>
|
152 |
</form>
|
153 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
<form method="post" id="settings-frm" class="ip-frm">
|
3 |
+
<div class="sui-box-header">
|
4 |
+
<h3 class="sui-box-title">
|
5 |
+
<?php _e( "404 Detection", "defender-security" ) ?>
|
6 |
+
</h3>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
</div>
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
+
<?php
|
11 |
+
_e("With 404 detection enabled, Defender will keep an eye out for IP addresses that repeatedly request pages on your website that don’t exist and then temporarily block them from accessing your site.","defender-security")
|
12 |
+
?>
|
13 |
+
</p>
|
14 |
<?php if ( ( $count = ( \WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api::get404Lockouts( strtotime( '-24 hours', current_time( 'timestamp' ) ) ) ) ) > 0 ): ?>
|
15 |
+
<div class="sui-notice sui-notice-error">
|
16 |
+
<p>
|
17 |
+
<?php echo sprintf( __( "There have been %d lockouts in the last 24 hours. <a href=\"%s\"><strong>View log</strong></a>.", "defender-security" ), $count, network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs' ) ) ?>
|
18 |
+
</p>
|
19 |
</div>
|
20 |
<?php else: ?>
|
21 |
+
<div class="sui-notice sui-notice-info">
|
22 |
+
<p>
|
23 |
+
<?php esc_html_e( "404 detection is enabled. There are no lockouts logged yet.", "defender-security" ) ?>
|
24 |
+
</p>
|
25 |
</div>
|
26 |
<?php endif; ?>
|
27 |
+
<div class="sui-box-settings-row">
|
28 |
+
<div class="sui-box-settings-col-1">
|
29 |
+
<span class="sui-settings-label"><?php esc_html_e( "Lockout threshold", "defender-security" ) ?></span>
|
30 |
+
<span class="sui-description">
|
31 |
+
<?php esc_html_e( "Specify how many 404 errors within a specific time period will trigger a lockout.", "defender-security" ) ?>
|
32 |
+
</span>
|
33 |
+
</div>
|
34 |
+
<div class="sui-box-settings-col-2">
|
35 |
+
<div class="sui-form-field">
|
36 |
+
<input size="8" value="<?php echo $settings->detect_404_threshold ?>" type="text"
|
37 |
+
class="sui-form-control sui-input-sm sui-field-has-suffix"
|
38 |
+
id="detect_404_threshold"
|
39 |
+
name="detect_404_threshold"/>
|
40 |
+
<span class="sui-field-suffix sui-field-prefix"><?php esc_html_e( "404 errors within", "defender-security" ) ?></span>
|
41 |
+
<input size="8" value="<?php echo $settings->detect_404_timeframe ?>"
|
42 |
+
id="detect_404_timeframe"
|
43 |
+
name="detect_404_timeframe" type="text"
|
44 |
+
class="sui-form-control sui-input-sm sui-field-has-suffix">
|
45 |
+
<span class="sui-field-suffix"><?php esc_html_e( "seconds", "defender-security" ) ?></span>
|
46 |
+
</div>
|
47 |
</div>
|
48 |
</div>
|
49 |
+
<div class="sui-box-settings-row">
|
50 |
+
<div class="sui-box-settings-col-1">
|
51 |
+
<span class="sui-settings-label"><?php esc_html_e( "Lockout time", "defender-security" ) ?></span>
|
52 |
+
<span class="sui-description"><?php esc_html_e( "Choose how long you’d like to ban the locked out user for.", "defender-security" ) ?></span>
|
53 |
+
</div>
|
54 |
+
<div class="sui-box-settings-col-2">
|
55 |
+
<div class="sui-side-tabs sui-tabs">
|
56 |
+
<div data-tabs>
|
57 |
+
<div rel="input_value" data-target="detect_404_lockout_ban" data-value="0"
|
58 |
+
class="<?php echo $settings->detect_404_lockout_ban == 0 ? 'active' : null ?>"><?php _e( "Timeframe", "defender-security" ) ?></div>
|
59 |
+
<div rel="input_value" data-target="detect_404_lockout_ban" data-value="1"
|
60 |
+
class="<?php echo $settings->detect_404_lockout_ban == 1 ? 'active' : null ?>"><?php _e( "Permanent", "defender-security" ) ?></div>
|
61 |
+
</div>
|
62 |
+
<div data-panes>
|
63 |
+
<div class="sui-tab-boxed <?php echo $settings->detect_404_lockout_ban == 0 ? 'active' : null ?>">
|
64 |
+
<p class="sui-description">
|
65 |
+
<?php _e( "Choose a timeframe to temporarily lock out blocked the IP for.", "defender-security" ) ?>
|
66 |
+
</p>
|
67 |
+
<div class="sui-row">
|
68 |
+
<div class="sui-col-md-3">
|
69 |
+
<input value="<?php echo $settings->detect_404_lockout_duration ?>" size="8"
|
70 |
+
name="detect_404_lockout_duration"
|
71 |
+
id="detect_404_lockout_duration" type="text"
|
72 |
+
class="sui-form-control"/>
|
73 |
+
</div>
|
74 |
+
<div class="sui-col-md-3">
|
75 |
+
<select name="detect_404_lockout_duration_unit">
|
76 |
+
<option <?php echo selected( 'second', $settings->detect_404_lockout_duration_unit ) ?>
|
77 |
+
value="seconds"><?php _e( "Seconds", "defender-security" ) ?></option>
|
78 |
+
<option <?php echo selected( 'minute', $settings->detect_404_lockout_duration_unit ) ?>
|
79 |
+
value="minutes"><?php _e( "Minutes", "defender-security" ) ?></option>
|
80 |
+
<option <?php echo selected( 'hour', $settings->detect_404_lockout_duration_unit ) ?>
|
81 |
+
value="hours"><?php _e( "Hours", "defender-security" ) ?></option>
|
82 |
+
</select>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
</div>
|
86 |
+
</div>
|
87 |
+
</div>
|
88 |
+
<input type="hidden" name="detect_404_lockout_ban" value="<?php echo $settings->detect_404_lockout_ban ?>"/>
|
89 |
</div>
|
90 |
</div>
|
91 |
+
<div class="sui-box-settings-row">
|
92 |
+
<div class="sui-box-settings-col-1">
|
93 |
+
<span class="sui-settings-label"><?php esc_html_e( "Lockout message", "defender-security" ) ?></span>
|
94 |
+
<span class="sui-description"><?php esc_html_e( "Customize the message locked out users will see.", "defender-security" ) ?></span>
|
95 |
+
</div>
|
96 |
+
<div class="sui-box-settings-col-2">
|
97 |
+
<div class="sui-form-field">
|
98 |
+
<textarea name="detect_404_lockout_message" class="sui-form-control"
|
99 |
+
id="detect_404_lockout_message"><?php echo $settings->detect_404_lockout_message ?></textarea>
|
100 |
+
<span class="sui-description">
|
101 |
+
<?php echo sprintf( __( "This message will be displayed across your website during the lockout period. See a quick preview <a href=\"%s\">here</a>.", "defender-security" ), add_query_arg( array(
|
102 |
+
'def-lockout-demo' => 1,
|
103 |
+
'type' => '404'
|
104 |
+
), network_site_url() ) ) ?>
|
105 |
+
</span>
|
106 |
+
</div>
|
|
|
|
|
|
|
107 |
</div>
|
108 |
</div>
|
109 |
+
<div class="sui-box-settings-row">
|
110 |
+
<div class="sui-box-settings-col-1">
|
111 |
+
<span class="sui-settings-label">
|
112 |
+
<?php esc_html_e( "Whitelist", "defender-security" ) ?>
|
113 |
+
</span>
|
114 |
+
<span class="sui-description">
|
115 |
+
<?php esc_html_e( "If you know a common file on your website is missing, you can record it here so it doesn't count towards a lockout record.", "defender-security" ) ?>
|
116 |
+
</span>
|
117 |
+
</div>
|
118 |
+
<div class="sui-box-settings-col-2">
|
119 |
+
<div class="sui-form-field">
|
120 |
+
<textarea class="sui-form-control"
|
121 |
+
id="detect_404_whitelist" name="detect_404_whitelist"
|
122 |
rows="8"><?php echo $settings->detect_404_whitelist ?></textarea>
|
123 |
+
<span class="sui-description">
|
124 |
+
<?php esc_html_e( "You must list the full path beginning with a /.", "defender-security" ) ?>
|
125 |
+
</span>
|
126 |
+
</div>
|
127 |
</div>
|
128 |
</div>
|
129 |
+
<div class="sui-box-settings-row">
|
130 |
+
<div class="sui-box-settings-col-1">
|
131 |
+
<span class="sui-settings-label">
|
132 |
+
<?php esc_html_e( "Ignore file types", "defender-security" ) ?>
|
133 |
+
</span>
|
134 |
+
<span class="sui-description">
|
135 |
+
<?php esc_html_e( "Choose which types of files you want to log errors for but not trigger a lockout.", "defender-security" ) ?>
|
136 |
+
</span>
|
137 |
+
</div>
|
138 |
+
<div class="sui-box-settings-col-2">
|
139 |
+
<div class="sui-form-field">
|
140 |
+
<textarea class="sui-form-control"
|
141 |
+
id="detect_404_ignored_filetypes" name="detect_404_ignored_filetypes"
|
142 |
rows="8"><?php echo $settings->detect_404_ignored_filetypes ?></textarea>
|
143 |
+
<span class="sui-description">
|
144 |
+
<?php esc_html_e( "Defender will log the 404 error, but won’t lockout the user for these filetypes.", "defender-security" ) ?>
|
145 |
+
</span>
|
146 |
+
</div>
|
147 |
+
</div>
|
148 |
+
</div>
|
149 |
+
<div class="sui-box-settings-row">
|
150 |
+
<div class="sui-box-settings-col-1">
|
151 |
+
<span class="sui-settings-label">
|
152 |
+
<?php esc_html_e( "Exclusions", "defender-security" ) ?>
|
153 |
+
</span>
|
154 |
+
<span class="sui-description">
|
155 |
+
<?php esc_html_e( "By default, Defender will monitor all interactions with your website but you can choose to disable 404 detection for specific areas of your site.", "defender-security" ) ?>
|
156 |
+
</span>
|
157 |
</div>
|
158 |
+
<div class="sui-box-settings-col-2">
|
159 |
+
<div class="sui-form-field">
|
160 |
+
<label class="sui-toggle">
|
161 |
+
<input type="hidden" name="detect_404_logged" value="0"/>
|
162 |
+
<input id="detect_404_logged" <?php checked( 1, $settings->detect_404_logged ) ?>
|
163 |
+
type="checkbox"
|
164 |
+
name="detect_404_logged" value="1">
|
165 |
+
<span class="sui-toggle-slider"></span>
|
166 |
+
</label>
|
167 |
+
<label for="detect_404_logged" class="sui-toggle-label">
|
168 |
+
<?php _e( "Monitor 404s from logged in users", "defender-security" ) ?>
|
169 |
+
</label>
|
170 |
+
</div>
|
171 |
+
</div>
|
172 |
+
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
173 |
+
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
174 |
</div>
|
175 |
+
<div class="sui-box-settings-row">
|
176 |
+
<div class="sui-box-settings-col-1">
|
177 |
+
<span class="sui-settings-label">
|
178 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
179 |
+
</span>
|
180 |
+
<span class="sui-description">
|
181 |
+
<?php esc_html_e( "If you no longer want to use this feature you can turn it off at any time.", "defender-security" ) ?>
|
182 |
+
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
</div>
|
184 |
+
<div class="sui-box-settings-col-2">
|
185 |
+
<button type="button" class="sui-button sui-button-ghost deactivate-404-lockout">
|
186 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
187 |
+
</button>
|
188 |
+
</div>
|
189 |
+
</div>
|
190 |
+
</div>
|
191 |
+
<div class="sui-box-footer">
|
192 |
+
<div class="sui-actions-right">
|
193 |
+
<button type="submit" class="sui-button sui-button-blue">
|
194 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
195 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
196 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
</div>
|
198 |
</form>
|
199 |
</div>
|
app/module/ip-lockout/view/layouts/layout.php
CHANGED
@@ -1,107 +1,117 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="
|
3 |
-
<div
|
4 |
-
<div class="
|
5 |
-
<
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
</div>
|
12 |
-
<input type="hidden" id="summaryNonce" value="<?php echo wp_create_nonce( 'lockoutSummaryData' ) ?>"/>
|
13 |
-
<div class="box-content">
|
14 |
-
<div class="columns">
|
15 |
-
<div class="column is-7 issues-count">
|
16 |
-
<div>
|
17 |
-
<h5 class="lockoutToday">.</h5>
|
18 |
-
<div class="clear"></div>
|
19 |
-
<span class="sub"><?php _e( "Lockouts in the past 24 hours", "defender-security" ) ?></span>
|
20 |
-
<h6 class="lockoutThisMonth">.</h6>
|
21 |
-
<span class="sub"><?php _e( "Total lockouts in the past 30 days", "defender-security" ) ?></span>
|
22 |
-
</div>
|
23 |
-
</div>
|
24 |
-
<div class="column is-5">
|
25 |
-
<ul class="dev-list bold">
|
26 |
-
<li>
|
27 |
-
<div>
|
28 |
-
<span class="list-label"><?php _e( "Last lockout", "defender-security" ) ?></span>
|
29 |
-
<span class="list-detail lastLockout">.</span>
|
30 |
-
</div>
|
31 |
-
</li>
|
32 |
-
<li>
|
33 |
-
<div>
|
34 |
-
<span class="list-label"><?php _e( "Login lockouts in the past 7 days", "defender-security" ) ?></span>
|
35 |
-
<span class="list-detail loginLockoutThisWeek">.</span>
|
36 |
-
</div>
|
37 |
-
</li>
|
38 |
-
<li>
|
39 |
-
<div>
|
40 |
-
<span class="list-label"><?php _e( "404 lockouts in the past 7 days", "defender-security" ) ?></span>
|
41 |
-
<span class="list-detail lockout404ThisWeek">.</span>
|
42 |
-
</div>
|
43 |
-
</li>
|
44 |
-
</ul>
|
45 |
-
</div>
|
46 |
-
</div>
|
47 |
</div>
|
48 |
</div>
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
<li>
|
61 |
-
<a class="<?php echo $controller->isView( 'blacklist' ) ? 'active' : null ?>"
|
62 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ?>"><?php _e( "IP Banning", "defender-security" ) ?></a>
|
63 |
-
</li>
|
64 |
-
<li>
|
65 |
-
<a class="<?php echo $controller->isView( 'logs' ) ? 'active' : null ?>"
|
66 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs' ) ?>"><?php _e( "Logs", "defender-security" ) ?></a>
|
67 |
-
</li>
|
68 |
-
<li>
|
69 |
-
<a class="<?php echo $controller->isView( 'notification' ) ? 'active' : null ?>"
|
70 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=notification' ) ?>"><?php _e( "Notifications", "defender-security" ) ?></a>
|
71 |
-
</li>
|
72 |
-
<li>
|
73 |
-
<a class="<?php echo $controller->isView( 'settings' ) ? 'active' : null ?>"
|
74 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=settings' ) ?>"><?php _e( "Settings", "defender-security" ) ?></a>
|
75 |
-
</li>
|
76 |
-
<li>
|
77 |
-
<a class="<?php echo $controller->isView( 'reporting' ) ? 'active' : null ?>"
|
78 |
-
href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=reporting' ) ?>"><?php _e( "Reporting", "defender-security" ) ?></a>
|
79 |
-
</li>
|
80 |
-
</ul>
|
81 |
-
<div class="is-hidden-tablet mline">
|
82 |
-
<select class="mobile-nav">
|
83 |
-
<option <?php selected( null, \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
84 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout' ) ?>"><?php _e( "Login Protection", "defender-security" ) ?></option>
|
85 |
-
<option <?php selected( '404', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
86 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=404' ) ?>"><?php _e( "404 Detection", "defender-security" ) ?></option>
|
87 |
-
<option <?php selected( 'blacklist', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
88 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ?>"><?php _e( "IP Blacklist", "defender-security" ) ?></option>
|
89 |
-
<option <?php selected( 'logs', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
90 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs' ) ?>"><?php _e( "Logs", "defender-security" ) ?></option>
|
91 |
-
<option <?php selected( 'notification', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
92 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=notification' ) ?>"><?php _e( "Notifications", "defender-security" ) ?></option>
|
93 |
-
<option <?php selected( 'settings', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
94 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=settings' ) ?>"><?php _e( "Settings", "defender-security" ) ?></option>
|
95 |
-
<option <?php selected( 'reporting', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
96 |
-
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=reporting' ) ?>"><?php _e( "Reporting", "defender-security" ) ?></option>
|
97 |
-
</select>
|
98 |
-
</div>
|
99 |
</div>
|
100 |
-
|
101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
</div>
|
103 |
</div>
|
|
|
104 |
</div>
|
105 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
</div>
|
107 |
</div>
|
1 |
+
<div class="sui-wrap">
|
2 |
+
<div class="wp-defender" id="wp-defender">
|
3 |
+
<div class="iplockout">
|
4 |
+
<div class="sui-header">
|
5 |
+
<h1 class="sui-header-title"><?php _e( "IP Lockout", "defender-security" ) ?></h1>
|
6 |
+
<div class="sui-actions-right">
|
7 |
+
<div class="sui-actions-right">
|
8 |
+
<a href="#" target="_blank" class="sui-button sui-button-ghost">
|
9 |
+
<i class="sui-icon-academy"></i> <?php _e( "View Documentation", "defender-security" ) ?>
|
10 |
+
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
</div>
|
12 |
</div>
|
13 |
+
</div>
|
14 |
+
<div class="sui-box sui-summary" id="lockoutSummary">
|
15 |
+
<input type="hidden" id="summaryNonce" value="<?php echo wp_create_nonce( 'lockoutSummaryData' ) ?>"/>
|
16 |
+
<div class="sui-summary-image-space" aria-hidden="true"></div>
|
17 |
+
<div class="sui-summary-segment">
|
18 |
+
<div class="sui-summary-details">
|
19 |
+
<span class="sui-summary-large lockoutToday">-</span>
|
20 |
+
<span class="sui-summary-sub"><?php _e( "Lockouts in the past 24 hours", "defender-security" ) ?></span>
|
21 |
+
|
22 |
+
<span class="sui-summary-detail lockoutThisMonth">-</span>
|
23 |
+
<span class="sui-summary-sub"><?php _e( "Total lockouts in the past 30 days", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
</div>
|
25 |
+
|
26 |
+
</div>
|
27 |
+
|
28 |
+
<div class="sui-summary-segment">
|
29 |
+
<ul class="sui-list">
|
30 |
+
<li>
|
31 |
+
<span class="sui-list-label"><?php _e( "Last lockout", "defender-security" ) ?></span>
|
32 |
+
<span class="sui-list-detail lastLockout"> .</span>
|
33 |
+
</li>
|
34 |
+
<li>
|
35 |
+
<span class="sui-list-label"><?php _e( "Login lockouts in the past 7 days", "defender-security" ) ?></span>
|
36 |
+
<span class="sui-list-detail loginLockoutThisWeek">.</span>
|
37 |
+
</li>
|
38 |
+
<li>
|
39 |
+
<span class="sui-list-label"><?php _e( "404 lockouts in the past 7 days", "defender-security" ) ?></span>
|
40 |
+
<span class="sui-list-detail lockout404ThisWeek">.</span>
|
41 |
+
</li>
|
42 |
+
</ul>
|
43 |
+
</div>
|
44 |
+
</div>
|
45 |
+
<div class="sui-row-with-sidenav">
|
46 |
+
<div class="sui-sidenav">
|
47 |
+
<ul class="sui-vertical-tabs sui-sidenav-hide-md">
|
48 |
+
<li class="sui-vertical-tab <?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'current' : null ?>">
|
49 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout' ) ?>"><?php _e( "Login Protection", "defender-security" ) ?></a>
|
50 |
+
</li>
|
51 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( '404' ) ? 'current' : null ?>">
|
52 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=404' ) ?>"><?php _e( "404 Detection", "defender-security" ) ?></a>
|
53 |
+
</li>
|
54 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'blacklist' ) ? 'current' : null ?>">
|
55 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ?>"><?php _e( "IP Banning", "defender-security" ) ?></a>
|
56 |
+
</li>
|
57 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'logs' ) ? 'current' : null ?>">
|
58 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs' ) ?>"><?php _e( "Logs", "defender-security" ) ?></a>
|
59 |
+
</li>
|
60 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'notification' ) ? 'current' : null ?>">
|
61 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=notification' ) ?>"><?php _e( "Notifications", "defender-security" ) ?></a>
|
62 |
+
</li>
|
63 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'settings' ) ? 'current' : null ?>">
|
64 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=settings' ) ?>"><?php _e( "Settings", "defender-security" ) ?></a>
|
65 |
+
</li>
|
66 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'reporting' ) ? 'current' : null ?>">
|
67 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=reporting' ) ?>"><?php _e( "Reporting", "defender-security" ) ?></a>
|
68 |
+
</li>
|
69 |
+
</ul>
|
70 |
+
<div class="sui-sidenav-hide-lg">
|
71 |
+
<select class="sui-mobile-nav" style="display: none;">
|
72 |
+
<option <?php selected( null, \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
73 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout' ) ?>"><?php _e( "Login Protection", "defender-security" ) ?></option>
|
74 |
+
<option <?php selected( '404', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
75 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=404' ) ?>"><?php _e( "404 Detection", "defender-security" ) ?></option>
|
76 |
+
<option <?php selected( 'blacklist', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
77 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ?>"><?php _e( "IP Blacklist", "defender-security" ) ?></option>
|
78 |
+
<option <?php selected( 'logs', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
79 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs' ) ?>"><?php _e( "Logs", "defender-security" ) ?></option>
|
80 |
+
<option <?php selected( 'notification', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
81 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=notification' ) ?>"><?php _e( "Notifications", "defender-security" ) ?></option>
|
82 |
+
<option <?php selected( 'settings', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
83 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=settings' ) ?>"><?php _e( "Settings", "defender-security" ) ?></option>
|
84 |
+
<option <?php selected( 'reporting', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', null ) ) ?>
|
85 |
+
value="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=reporting' ) ?>"><?php _e( "Reporting", "defender-security" ) ?></option>
|
86 |
+
</select>
|
87 |
</div>
|
88 |
</div>
|
89 |
+
<?php echo $contents ?>
|
90 |
</div>
|
91 |
</div>
|
92 |
+
<div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div>
|
93 |
+
<?php if ( wp_defender()->isFree ): ?>
|
94 |
+
<ul class="sui-footer-nav">
|
95 |
+
<li><a href="https://profiles.wordpress.org/wpmudev#content-plugins" target="_blank">Free Plugins</a></li>
|
96 |
+
<li><a href="https://premium.wpmudev.org/features/" target="_blank">Membership</a></li>
|
97 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
98 |
+
<li><a href="https://wordpress.org/support/plugin/plugin-name" target="_blank">Support</a></li>
|
99 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
100 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
101 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
102 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
103 |
+
</ul>
|
104 |
+
<?php else: ?>
|
105 |
+
<ul class="sui-footer-nav">
|
106 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
107 |
+
<li><a href="https://premium.wpmudev.org/projects/category/plugins/" target="_blank">Plugins</a></li>
|
108 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
109 |
+
<li><a href="https://premium.wpmudev.org/hub/support/" target="_blank">Support</a></li>
|
110 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
111 |
+
<li><a href="https://premium.wpmudev.org/hub/community/" target="_blank">Community</a></li>
|
112 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
113 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
114 |
+
</ul>
|
115 |
+
<?php endif; ?>
|
116 |
</div>
|
117 |
</div>
|
app/module/ip-lockout/view/logging/enabled.php
CHANGED
@@ -1,31 +1,33 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3><?php esc_html_e( "Logs", "defender-security" ) ?></h3>
|
4 |
-
<
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
</div>
|
13 |
-
<!-- <button type="button" data-target=".lockout-logs-filter" rel="show-filter"-->
|
14 |
-
<!-- class="button button-secondary button-small">-->
|
15 |
-
<?php //_e( "Filter", "defender-security" ) ?><!--</button>-->
|
16 |
</div>
|
17 |
-
<div class="box-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
23 |
</div>
|
24 |
-
</div>
|
25 |
-
<!--<dialog id="bulk" class="no-close">-->
|
26 |
-
<!-- <form id="lockout-bulk" method="post" class="tc">-->
|
27 |
-
<!-- <h4>--><?php //_e( "Bulk Actions", "defender-security" ) ?><!--</h4>-->
|
28 |
-
<!-- <button type="submit" class="button button-primary button-small">--><?php //_e( "Ban", "defender-security" ) ?><!--</button>-->
|
29 |
-
<!-- <button type="submit" class="button button-secondary button-small">--><?php //_e( "Whitelist", "defender-security" ) ?><!--</button>-->
|
30 |
-
<!-- </form>-->
|
31 |
-
<!--</dialog>-->
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title"><?php esc_html_e( "Logs", "defender-security" ) ?></h3>
|
4 |
+
<div class="sui-actions-right">
|
5 |
+
<div class="box-filter">
|
6 |
+
<span>
|
7 |
+
<?php _e( "Sort by", "defender-security" ) ?>
|
8 |
+
</span>
|
9 |
+
<select class="sui-select-sm" name="sort" id="lockout-logs-sort">
|
10 |
+
<option value="latest"><?php _e( "Latest", "defender-security" ) ?></option>
|
11 |
+
<option value="oldest"><?php _e( "Oldest", "defender-security" ) ?></option>
|
12 |
+
<option value="ip"><?php _e( "IP Address", "defender-security" ) ?></option>
|
13 |
+
</select>
|
14 |
+
</div>
|
15 |
+
<a href="<?php echo admin_url( 'admin-ajax.php?action=lockoutExportAsCsv' ) ?>"
|
16 |
+
class="sui-button sui-button-outlined">
|
17 |
+
<?php _e( "Export CSV", "defender-security" ) ?>
|
18 |
+
</a>
|
19 |
</div>
|
|
|
|
|
|
|
20 |
</div>
|
21 |
+
<div class="sui-box-body">
|
22 |
+
<p>
|
23 |
+
<?php
|
24 |
+
_e( "Here's your comprehensive IP lockout log. You can whitelist and ban IPs from there.", "defender-security" )
|
25 |
+
?>
|
26 |
+
</p>
|
27 |
+
<?php
|
28 |
+
$table = new \WP_Defender\Module\IP_Lockout\Component\Logs_Table();
|
29 |
+
$table->prepare_items();
|
30 |
+
$table->display();
|
31 |
+
?>
|
32 |
</div>
|
33 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/module/ip-lockout/view/login-lockouts/disabled.php
CHANGED
@@ -1,22 +1,25 @@
|
|
1 |
-
<div class="
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
<
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
22 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php esc_html_e( "Login Protection", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
+
</div>
|
7 |
+
<div class="sui-message">
|
8 |
+
<img
|
9 |
+
src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/lockout-man.svg"
|
10 |
+
class="sui-image"/>
|
11 |
+
<div class="sui-message-content">
|
12 |
+
<p>
|
13 |
+
<?php esc_html_e( "Put a stop to hackers trying to randomly guess your login credentials. Defender will lock out users after a set number of failed login attempts.", "defender-security" ) ?>
|
14 |
+
</p>
|
15 |
+
<form method="post" id="settings-frm" class="ip-frm">
|
16 |
+
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
17 |
+
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
18 |
+
<input type="hidden" name="login_protection" value="1"/>
|
19 |
+
<button type="submit" class="sui-button sui-button-blue">
|
20 |
+
<?php esc_html_e( "Active", "defender-security" ) ?>
|
21 |
+
</button>
|
22 |
+
</form>
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
</div>
|
app/module/ip-lockout/view/login-lockouts/enabled.php
CHANGED
@@ -1,129 +1,173 @@
|
|
1 |
-
<div class="
|
2 |
<form method="post" id="settings-frm" class="ip-frm">
|
3 |
-
<div class="box-
|
4 |
-
<h3
|
5 |
-
|
6 |
-
|
7 |
-
<span tooltip="<?php esc_attr_e( "Deactivate Login Protection", "defender-security" ) ?>"
|
8 |
-
class="toggle">
|
9 |
-
<input type="hidden" name="login_protection" value="0"/>
|
10 |
-
<input type="checkbox" checked="checked" name="login_protection" value="1"
|
11 |
-
class="toggle-checkbox" id="toggle_login_protect"/>
|
12 |
-
<label class="toggle-label" for="toggle_login_protect"></label>
|
13 |
-
</span>
|
14 |
-
</div>
|
15 |
-
</div>
|
16 |
</div>
|
17 |
-
<div class="box-
|
|
|
|
|
|
|
18 |
<?php if ( ( $count = ( \WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api::getLoginLockouts( strtotime( '-24 hours', current_time( 'timestamp' ) ) ) ) ) > 0 ): ?>
|
19 |
-
<div class="
|
20 |
-
|
|
|
|
|
21 |
</div>
|
22 |
<?php else: ?>
|
23 |
-
<div class="
|
24 |
-
|
|
|
|
|
25 |
</div>
|
26 |
<?php endif; ?>
|
27 |
-
<div class="
|
28 |
-
<div class="
|
29 |
-
<
|
30 |
-
|
31 |
-
</label>
|
32 |
-
<span class="sub">
|
33 |
-
<?php esc_html_e( "Specify how many failed login attempts within a specific time period will trigger a lockout.", "defender-security" ) ?>
|
34 |
-
</span>
|
35 |
</div>
|
36 |
-
<div class="
|
37 |
-
<
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
</div>
|
46 |
</div>
|
47 |
-
<div class="
|
48 |
-
<div class="
|
49 |
-
<
|
50 |
-
|
51 |
-
</label>
|
52 |
-
<span class="sub">
|
53 |
-
<?php esc_html_e( "Choose how long you’d like to ban the locked out user for.", "defender-security" ) ?>
|
54 |
-
</span>
|
55 |
</div>
|
56 |
-
<div class="
|
57 |
-
<
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
</div>
|
70 |
</div>
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
<
|
75 |
-
<?php esc_html_e( "Lockout message", "defender-security" ) ?>
|
76 |
-
</label>
|
77 |
-
<span class="sub">
|
78 |
-
<?php esc_html_e( "Customize the message locked out users will see.", "defender-security" ) ?>
|
79 |
-
</span>
|
80 |
</div>
|
81 |
-
<div class="
|
82 |
-
|
|
|
|
|
83 |
id="login_protection_lockout_message"><?php echo $settings->login_protection_lockout_message ?></textarea>
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
|
|
90 |
</div>
|
91 |
</div>
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
<
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
</span>
|
|
|
101 |
</div>
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
$host = explode( '.', $host );
|
111 |
-
if ( is_array( $host ) ) {
|
112 |
-
$host = array_shift( $host );
|
113 |
-
} else {
|
114 |
-
$host = null;
|
115 |
-
}
|
116 |
-
printf( __( "We recommend adding the usernames <strong>admin</strong>, <strong>administrator</strong> and your hostname <strong>%s</strong> as these are common for bots to try logging in with. One username per line", "defender-security" ), $host ) ?>
|
117 |
</span>
|
118 |
</div>
|
|
|
|
|
|
|
|
|
|
|
119 |
</div>
|
120 |
-
|
|
|
121 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
122 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
123 |
-
<
|
124 |
-
|
125 |
-
|
126 |
-
|
|
|
127 |
</div>
|
128 |
</form>
|
129 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
<form method="post" id="settings-frm" class="ip-frm">
|
3 |
+
<div class="sui-box-header">
|
4 |
+
<h3 class="sui-box-title">
|
5 |
+
<?php _e( "Login Protection", "defender-security" ) ?>
|
6 |
+
</h3>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
</div>
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
+
<?php _e( "Put a stop to hackers trying to randomly guess your login credentials. Defender will lock out users after a set number of failed login attempts.", "defender-security" ) ?>
|
11 |
+
</p>
|
12 |
<?php if ( ( $count = ( \WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api::getLoginLockouts( strtotime( '-24 hours', current_time( 'timestamp' ) ) ) ) ) > 0 ): ?>
|
13 |
+
<div class="sui-notice sui-notice-error">
|
14 |
+
<p>
|
15 |
+
<?php echo sprintf( __( "There have been %d lockouts in the last 24 hours. <a href=\"%s\"><strong>View log</strong></a>.", "defender-security" ), $count, network_admin_url( 'admin.php?page=wdf-ip-lockout&view=logs' ) ) ?>
|
16 |
+
</p>
|
17 |
</div>
|
18 |
<?php else: ?>
|
19 |
+
<div class="sui-notice sui-notice-info">
|
20 |
+
<p>
|
21 |
+
<?php esc_html_e( "Login protection is enabled. There are no lockouts logged yet.", "defender-security" ) ?>
|
22 |
+
</p>
|
23 |
</div>
|
24 |
<?php endif; ?>
|
25 |
+
<div class="sui-box-settings-row">
|
26 |
+
<div class="sui-box-settings-col-1">
|
27 |
+
<span class="sui-settings-label"><?php esc_html_e( "Threshold", "defender-security" ) ?></span>
|
28 |
+
<span class="sui-description"><?php esc_html_e( "Specify how many failed login attempts within a specific time period will trigger a lockout.", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
29 |
</div>
|
30 |
+
<div class="sui-box-settings-col-2">
|
31 |
+
<div class="sui-form-field">
|
32 |
+
<div class="sui-row">
|
33 |
+
<div class="sui-col-md-2">
|
34 |
+
<label class="sui-label"><?php _e( "Failed logins", "defender-security" ) ?></label>
|
35 |
+
<input size="8" value="<?php echo $settings->login_protection_login_attempt ?>"
|
36 |
+
type="text"
|
37 |
+
class="sui-form-control sui-input-sm sui-field-has-suffix"
|
38 |
+
id="login_protection_login_attempt"
|
39 |
+
name="login_protection_login_attempt"/>
|
40 |
+
</div>
|
41 |
+
<div class="sui-col-md-3">
|
42 |
+
<label class="sui-label">
|
43 |
+
<?php _e( "Timeframe", "defender-security" ) ?>
|
44 |
+
</label>
|
45 |
+
<input size="8" value="<?php echo $settings->login_protection_lockout_timeframe ?>"
|
46 |
+
id="login_lockout_timeframe"
|
47 |
+
name="login_protection_lockout_timeframe" type="text"
|
48 |
+
class="sui-form-control sui-input-sm sui-field-has-suffix">
|
49 |
+
<span class="sui-field-suffix"><?php esc_html_e( "seconds", "defender-security" ) ?></span>
|
50 |
+
</div>
|
51 |
+
</div>
|
52 |
+
</div>
|
53 |
</div>
|
54 |
</div>
|
55 |
+
<div class="sui-box-settings-row">
|
56 |
+
<div class="sui-box-settings-col-1">
|
57 |
+
<span class="sui-settings-label"><?php esc_html_e( "Duration", "defender-security" ) ?></span>
|
58 |
+
<span class="sui-description"><?php esc_html_e( "Choose how long you’d like to ban the locked out user for.", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
59 |
</div>
|
60 |
+
<div class="sui-box-settings-col-2">
|
61 |
+
<div class="sui-side-tabs sui-tabs">
|
62 |
+
<div data-tabs>
|
63 |
+
<div rel="input_value" data-target="login_protection_lockout_ban" data-value="0"
|
64 |
+
class="<?php echo $settings->login_protection_lockout_ban == 0 ? 'active' : null ?>"><?php _e( "Timeframe", "defender-security" ) ?></div>
|
65 |
+
<div rel="input_value" data-target="login_protection_lockout_ban" data-value="1"
|
66 |
+
class="<?php echo $settings->login_protection_lockout_ban == 1 ? 'active' : null ?>"><?php _e( "Permanent", "defender-security" ) ?></div>
|
67 |
+
</div>
|
68 |
+
<div data-panes>
|
69 |
+
<div class="sui-tab-boxed <?php echo $settings->login_protection_lockout_ban == 0 ? 'active' : null ?>">
|
70 |
+
<p class="sui-description">
|
71 |
+
<?php _e( "Choose a timeframe to temporarily lock out blocked the IP for.", "defender-security" ) ?>
|
72 |
+
</p>
|
73 |
+
<div class="sui-row">
|
74 |
+
<div class="sui-col-md-3">
|
75 |
+
<input value="<?php echo $settings->login_protection_lockout_duration ?>"
|
76 |
+
size="4"
|
77 |
+
name="login_protection_lockout_duration"
|
78 |
+
id="login_protection_lockout_duration" type="text"
|
79 |
+
class="sui-form-control"/>
|
80 |
+
</div>
|
81 |
+
<div class="sui-col-md-4">
|
82 |
+
<select name="login_protection_lockout_duration_unit">
|
83 |
+
<option <?php echo selected( 'second', $settings->login_protection_lockout_duration_unit ) ?>
|
84 |
+
value="seconds"><?php _e( "Seconds", "defender-security" ) ?></option>
|
85 |
+
<option <?php echo selected( 'minute', $settings->login_protection_lockout_duration_unit ) ?>
|
86 |
+
value="minutes"><?php _e( "Minutes", "defender-security" ) ?></option>
|
87 |
+
<option <?php echo selected( 'hour', $settings->login_protection_lockout_duration_unit ) ?>
|
88 |
+
value="hours"><?php _e( "Hours", "defender-security" ) ?></option>
|
89 |
+
</select>
|
90 |
+
</div>
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
+
</div>
|
94 |
+
<input type="hidden" name="login_protection_lockout_ban"
|
95 |
+
value="<?php echo $settings->login_protection_lockout_ban ?>"/>
|
96 |
+
</div>
|
97 |
</div>
|
98 |
</div>
|
99 |
+
<div class="sui-box-settings-row">
|
100 |
+
<div class="sui-box-settings-col-1">
|
101 |
+
<span class="sui-settings-label"><?php esc_html_e( "Message", "defender-security" ) ?></span>
|
102 |
+
<span class="sui-description"><?php esc_html_e( "Customize the message locked out users will see.", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
103 |
</div>
|
104 |
+
<div class="sui-box-settings-col-2">
|
105 |
+
<div class="sui-form-field">
|
106 |
+
<label class="sui-label"><?php _e( "Custom message", "defender-security" ) ?></label>
|
107 |
+
<textarea name="login_protection_lockout_message" class="sui-form-control"
|
108 |
id="login_protection_lockout_message"><?php echo $settings->login_protection_lockout_message ?></textarea>
|
109 |
+
<span class="sui-description">
|
110 |
+
<?php echo sprintf( __( "This message will be displayed across your website during the lockout period. See a quick preview <a href=\"%s\">here</a>.", "defender-security" ), add_query_arg( array(
|
111 |
+
'def-lockout-demo' => 1,
|
112 |
+
'type' => 'login'
|
113 |
+
), network_site_url() ) ) ?>
|
114 |
+
</span>
|
115 |
+
</div>
|
116 |
</div>
|
117 |
</div>
|
118 |
+
<div class="sui-box-settings-row">
|
119 |
+
<div class="sui-box-settings-col-1">
|
120 |
+
<span class="sui-settings-label"><?php esc_html_e( "Banned usernames", "defender-security" ) ?></span>
|
121 |
+
<span class="sui-description">
|
122 |
+
<?php esc_html_e( "It is highly recommended you avoid using the default username ‘admin’. Use this tool to automatically lockout and ban users who try to login with common usernames.", "defender-security" ) ?>
|
123 |
+
</span>
|
124 |
+
</div>
|
125 |
+
<div class="sui-box-settings-col-2">
|
126 |
+
<div class="sui-form-field">
|
127 |
+
<label class="sui-label"><?php _e( "Banned usernames", "defender-security" ) ?></label>
|
128 |
+
<textarea class="sui-form-control"
|
129 |
+
placeholder="<?php esc_attr_e( "Type usernames, one per line", "defender-security" ) ?>"
|
130 |
+
id="username_blacklist" name="username_blacklist"
|
131 |
+
rows="8"><?php echo $settings->username_blacklist ?></textarea>
|
132 |
+
<span class="sui-description">
|
133 |
+
<?php
|
134 |
+
$host = parse_url( get_site_url(), PHP_URL_HOST );
|
135 |
+
$host = str_replace( 'www.', '', $host );
|
136 |
+
$host = explode( '.', $host );
|
137 |
+
if ( is_array( $host ) ) {
|
138 |
+
$host = array_shift( $host );
|
139 |
+
} else {
|
140 |
+
$host = null;
|
141 |
+
}
|
142 |
+
printf( __( "We recommend adding the usernames <strong>admin</strong>, <strong>administrator</strong> and your hostname <strong>%s</strong> as these are common for bots to try logging in with. One username per line", "defender-security" ), $host ) ?>
|
143 |
</span>
|
144 |
+
</div>
|
145 |
</div>
|
146 |
+
</div>
|
147 |
+
<div class="sui-box-settings-row">
|
148 |
+
<div class="sui-box-settings-col-1">
|
149 |
+
<span class="sui-settings-label">
|
150 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
151 |
+
</span>
|
152 |
+
<span class="sui-description">
|
153 |
+
<?php esc_html_e( "If you no longer want to use this feature you can turn it off at any time.", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
</span>
|
155 |
</div>
|
156 |
+
<div class="sui-box-settings-col-2">
|
157 |
+
<button type="button" class="sui-button sui-button-ghost deactivate-login-lockout">
|
158 |
+
<?php _e( "Deactivate", "defender-security" ) ?>
|
159 |
+
</button>
|
160 |
+
</div>
|
161 |
</div>
|
162 |
+
</div>
|
163 |
+
<div class="sui-box-footer">
|
164 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
165 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
166 |
+
<div class="sui-actions-right">
|
167 |
+
<button type="submit" class="sui-button sui-button-blue">
|
168 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
169 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
170 |
+
</div>
|
171 |
</div>
|
172 |
</form>
|
173 |
</div>
|
app/module/ip-lockout/view/notification/enabled.php
CHANGED
@@ -1,129 +1,140 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3><?php
|
4 |
</div>
|
5 |
-
<
|
6 |
-
<
|
7 |
-
<div class="
|
8 |
-
<div class="
|
9 |
-
<label>
|
10 |
-
|
11 |
-
</
|
12 |
-
<span class="
|
13 |
<?php esc_html_e( "Choose which lockout notifications you wish to be notified about. These are sent instantly.", "defender-security" ) ?>
|
14 |
-
|
15 |
</div>
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
<input type="hidden" name="login_lockout_notification" value="0"/>
|
21 |
-
<input type="checkbox"
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
<
|
26 |
-
</
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
|
|
35 |
<input type="hidden" name="ip_lockout_notification" value="0"/>
|
36 |
-
<input type="checkbox" name="ip_lockout_notification"
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
|
|
|
|
|
|
|
|
45 |
</div>
|
46 |
</div>
|
47 |
-
<div class="
|
48 |
-
<div class="
|
49 |
-
<label>
|
50 |
-
|
51 |
-
</
|
52 |
-
<span class="
|
53 |
-
|
54 |
-
|
55 |
</div>
|
56 |
-
|
57 |
-
|
58 |
-
$email_search->renderInput() ?>
|
59 |
</div>
|
60 |
</div>
|
61 |
-
<div class="
|
62 |
-
<div class="
|
63 |
-
<label>
|
64 |
-
|
65 |
-
</
|
66 |
-
<span class="
|
67 |
<?php esc_html_e( "If you’re getting too many emails from IPs who are repeatedly being locked out you can turn them off for a period of time.", "defender-security" ) ?>
|
68 |
-
|
69 |
</div>
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
<
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
<
|
85 |
-
<
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
</
|
97 |
-
<
|
98 |
-
<
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
|
|
|
|
|
|
117 |
</div>
|
118 |
</div>
|
119 |
</div>
|
120 |
-
|
121 |
-
|
|
|
122 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
123 |
-
<
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
|
|
|
|
129 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title"><?php _e( "Notification", "defender-security" ) ?></h3>
|
4 |
</div>
|
5 |
+
<form method="post" id="settings-frm" class="ip-frm">
|
6 |
+
<div class="sui-box-body">
|
7 |
+
<div class="sui-box-settings-row">
|
8 |
+
<div class="sui-box-settings-col-1">
|
9 |
+
<span class="sui-settings-label">
|
10 |
+
<?php esc_html_e( "Email Notifications", "defender-security" ) ?>
|
11 |
+
</span>
|
12 |
+
<span class="sui-description">
|
13 |
<?php esc_html_e( "Choose which lockout notifications you wish to be notified about. These are sent instantly.", "defender-security" ) ?>
|
14 |
+
</span>
|
15 |
</div>
|
16 |
+
|
17 |
+
<div class="sui-box-settings-col-2">
|
18 |
+
<div class="sui-form-field">
|
19 |
+
<label class="sui-toggle">
|
20 |
<input type="hidden" name="login_lockout_notification" value="0"/>
|
21 |
+
<input role="presentation" type="checkbox" name="login_lockout_notification"
|
22 |
+
class="toggle-checkbox"
|
23 |
+
id="login_lockout_notification" value="1"
|
24 |
+
<?php checked( true, $settings->login_lockout_notification ) ?>/>
|
25 |
+
<span class="sui-toggle-slider"></span>
|
26 |
+
</label>
|
27 |
+
<label for="login_lockout_notification" class="sui-toggle-label">
|
28 |
+
<?php esc_html_e( "Login Protection Lockout", "defender-security" ) ?>
|
29 |
+
</label>
|
30 |
+
<p class="sui-description">
|
31 |
+
<?php esc_html_e( "When a user or IP is locked out for trying to access your login area.", "defender-security" ) ?>
|
32 |
+
</p>
|
33 |
+
</div>
|
34 |
+
<div class="sui-form-field">
|
35 |
+
<label class="sui-toggle">
|
36 |
<input type="hidden" name="ip_lockout_notification" value="0"/>
|
37 |
+
<input role="presentation" type="checkbox" name="ip_lockout_notification"
|
38 |
+
class="toggle-checkbox"
|
39 |
+
id="ip_lockout_notification" value="1"
|
40 |
+
<?php checked( true, $settings->ip_lockout_notification ) ?>/>
|
41 |
+
<span class="sui-toggle-slider"></span>
|
42 |
+
</label>
|
43 |
+
<label for="ip_lockout_notification" class="sui-toggle-label">
|
44 |
+
<?php esc_html_e( "404 Detection Lockout", "defender-security" ) ?>
|
45 |
+
</label>
|
46 |
+
<p class="sui-description">
|
47 |
+
<?php esc_html_e( "When a user or IP is locked out for repeated hits on non-existent files.", "defender-security" ) ?>
|
48 |
+
</p>
|
49 |
+
</div>
|
50 |
</div>
|
51 |
</div>
|
52 |
+
<div class="sui-box-settings-row">
|
53 |
+
<div class="sui-box-settings-col-1">
|
54 |
+
<span class="sui-settings-label">
|
55 |
+
<?php esc_html_e( "Email Recipients", "defender-security" ) ?>
|
56 |
+
</span>
|
57 |
+
<span class="sui-description">
|
58 |
+
<?php esc_html_e( "Choose which of your website’s users will receive lockout notifications via email.", "defender-security" ) ?>
|
59 |
+
</span>
|
60 |
</div>
|
61 |
+
|
62 |
+
<div class="sui-box-settings-col-2">
|
63 |
+
<?php $email_search->renderInput() ?>
|
64 |
</div>
|
65 |
</div>
|
66 |
+
<div class="sui-box-settings-row">
|
67 |
+
<div class="sui-box-settings-col-1">
|
68 |
+
<span class="sui-settings-label">
|
69 |
+
<?php esc_html_e( "Repeat Lockouts", "defender-security" ) ?>
|
70 |
+
</span>
|
71 |
+
<span class="sui-description">
|
72 |
<?php esc_html_e( "If you’re getting too many emails from IPs who are repeatedly being locked out you can turn them off for a period of time.", "defender-security" ) ?>
|
73 |
+
</span>
|
74 |
</div>
|
75 |
+
|
76 |
+
<div class="sui-box-settings-col-2">
|
77 |
+
<label class="sui-toggle">
|
78 |
+
<input type="hidden" name="cooldown_enabled" value="0"/>
|
79 |
+
<input role="presentation" type="checkbox" name="cooldown_enabled"
|
80 |
+
class="toggle-checkbox"
|
81 |
+
id="cooldown_enabled" value="1"
|
82 |
+
<?php checked( true, $settings->cooldown_enabled ) ?>/>
|
83 |
+
<span class="sui-toggle-slider"></span>
|
84 |
+
</label>
|
85 |
+
<label for="ip_lockout_notification" class="sui-toggle-label">
|
86 |
+
<?php esc_html_e( "Limit email notifications for repeat lockouts", "defender-security" ) ?>
|
87 |
+
</label>
|
88 |
+
<div class="sui-border-frame sui-toggle-content">
|
89 |
+
<div class="sui-form-field">
|
90 |
+
<label class="sui-label"><?php _e( "<strong>Threshold</strong> - The number of lockouts before we turn off emails" ) ?></label>
|
91 |
+
<select name="cooldown_number_lockout">
|
92 |
+
<option <?php selected( '1', $settings->cooldown_number_lockout ) ?> value="1">1
|
93 |
+
</option>
|
94 |
+
<option <?php selected( '3', $settings->cooldown_number_lockout ) ?> value="3">3
|
95 |
+
</option>
|
96 |
+
<option <?php selected( '5', $settings->cooldown_number_lockout ) ?> value="5">5
|
97 |
+
</option>
|
98 |
+
<option <?php selected( '10', $settings->cooldown_number_lockout ) ?> value="10">10
|
99 |
+
</option>
|
100 |
+
</select>
|
101 |
+
</div>
|
102 |
+
<div class="sui-form-field">
|
103 |
+
<label class="sui-label"><?php _e( "<strong>Cool Off Period</strong> - For how long should we turn them off?" ) ?></label>
|
104 |
+
<select name="cooldown_period">
|
105 |
+
<option <?php selected( '1', $settings->cooldown_period ) ?>
|
106 |
+
value="1"><?php _e( "1 hour", "defender-security" ) ?></option>
|
107 |
+
<option <?php selected( '2', $settings->cooldown_period ) ?>
|
108 |
+
value="2"><?php _e( "2 hours", "defender-security" ) ?></option>
|
109 |
+
<option <?php selected( '6', $settings->cooldown_period ) ?>
|
110 |
+
value="6"><?php _e( "6 hours", "defender-security" ) ?></option>
|
111 |
+
<option <?php selected( '12', $settings->cooldown_period ) ?>
|
112 |
+
value="12"><?php _e( "12 hours", "defender-security" ) ?></option>
|
113 |
+
<option <?php selected( '24', $settings->cooldown_period ) ?>
|
114 |
+
value="24"><?php _e( "24 hours", "defender-security" ) ?></option>
|
115 |
+
<option <?php selected( '36', $settings->cooldown_period ) ?>
|
116 |
+
value="36"><?php _e( "36 hours", "defender-security" ) ?></option>
|
117 |
+
<option <?php selected( '48', $settings->cooldown_period ) ?>
|
118 |
+
value="48"><?php _e( "48 hours", "defender-security" ) ?></option>
|
119 |
+
<option <?php selected( '168', $settings->cooldown_period ) ?>
|
120 |
+
value="168"><?php _e( "7 days", "defender-security" ) ?></option>
|
121 |
+
<option <?php selected( '720', $settings->cooldown_period ) ?>
|
122 |
+
value="720"><?php _e( "30 days", "defender-security" ) ?></option>
|
123 |
+
</select>
|
124 |
+
</div>
|
125 |
</div>
|
126 |
</div>
|
127 |
</div>
|
128 |
+
</div>
|
129 |
+
<div class="sui-box-footer">
|
130 |
+
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
131 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
132 |
+
<div class="sui-actions-right">
|
133 |
+
<button type="submit" class="sui-button sui-button-blue">
|
134 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
135 |
+
<?php _e( "Save Changes", "defender-security" ) ?>
|
136 |
+
</button>
|
137 |
+
</div>
|
138 |
+
</div>
|
139 |
+
</form>
|
140 |
</div>
|
app/module/ip-lockout/view/notification/report-free.php
CHANGED
@@ -1,84 +1,34 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
4 |
-
|
5 |
-
|
6 |
</div>
|
7 |
-
<div class="box-
|
8 |
-
<
|
9 |
-
<div class="
|
10 |
-
|
|
|
|
|
|
|
11 |
</div>
|
12 |
-
<div class="
|
13 |
-
<div class="
|
14 |
-
<
|
15 |
-
|
16 |
-
|
17 |
-
<span class="sub">
|
18 |
-
<?php esc_html_e( "Configure Defender to automatically email you a lockout report for this website. ", "defender-security" ) ?>
|
19 |
-
</span>
|
20 |
-
</div>
|
21 |
-
<div class="column">
|
22 |
-
<span
|
23 |
-
tooltip="<?php echo esc_attr( __( "Send regular email report", "defender-security" ) ) ?>"
|
24 |
-
class="toggle float-l">
|
25 |
-
<input type="hidden" name="report" value="0"/>
|
26 |
-
<input type="checkbox"
|
27 |
-
name="report"
|
28 |
-
value="1" class="toggle-checkbox"
|
29 |
-
id="toggle_report"/>
|
30 |
-
<label class="toggle-label" for="toggle_report"></label>
|
31 |
-
</span>
|
32 |
-
<label for="toggle_report" role="checkbox" aria-checked="true">
|
33 |
-
<?php esc_html_e( "Send regular email report", "defender-security" ) ?>
|
34 |
-
</label>
|
35 |
-
<div class="clear mline"></div>
|
36 |
-
<div class="well well-white schedule-box">
|
37 |
-
<strong><?php esc_html_e( "SCHEDULE", "defender-security" ) ?></strong>
|
38 |
-
<label><?php esc_html_e( "Frequency", "defender-security" ) ?></label>
|
39 |
-
<select name="report_frequency">
|
40 |
-
<option value="1"><?php esc_html_e( "Daily", "defender-security" ) ?></option>
|
41 |
-
</select>
|
42 |
-
<div class="days-container">
|
43 |
-
<label><?php esc_html_e( "Day of the week", "defender-security" ) ?></label>
|
44 |
-
<select name="report_day">
|
45 |
-
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getDaysOfWeek() as $day ): ?>
|
46 |
-
<option value="<?php echo strtolower( $day ) ?>"><?php echo $day ?></option>
|
47 |
-
<?php endforeach;; ?>
|
48 |
-
</select>
|
49 |
-
</div>
|
50 |
-
<label><?php esc_html_e( "Time of day", "defender-security" ) ?></label>
|
51 |
-
<select name="report_time">
|
52 |
-
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getTimes() as $timestamp => $time ): ?>
|
53 |
-
<option value="<?php echo $timestamp ?>"><?php echo strftime( '%I:%M %p', strtotime( $time ) ) ?></option>
|
54 |
-
<?php endforeach; ?>
|
55 |
-
</select>
|
56 |
-
<!-- <span>-->
|
57 |
-
<?php //printf( esc_html__( "You will receive a lockout report email %s.", "defender-security" ), date_i18n( WD_Utils::get_date_time_format(), \WP_Defender\IP_Lockout\Component\Login_Protection_Api::get_report_sending_time() ) ) ?><!--</span>-->
|
58 |
</div>
|
59 |
</div>
|
60 |
</div>
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
</span>
|
70 |
-
</div>
|
71 |
-
<div class="column">
|
72 |
-
<?php $email_search->renderInput() ?>
|
73 |
-
</div>
|
74 |
-
</div>
|
75 |
-
<div class="clear line"></div>
|
76 |
-
</form>
|
77 |
-
<div class="presale-text">
|
78 |
-
<div>
|
79 |
-
<?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all FREE today!</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_iplockouts_reports_upsell_link') ) ?>
|
80 |
</div>
|
81 |
</div>
|
82 |
</div>
|
83 |
-
</div>
|
84 |
-
<?php $controller->renderPartial('pro-feature') ?>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<div class="sui-box-body sui-upsell-items">
|
8 |
+
<div class="sui-box-settings-row sui-disabled no-padding-bottom no-margin-bottom">
|
9 |
+
<div class="sui-box-settings-col-1">
|
10 |
+
<span class="sui-settings-label"><?php _e( "Lockouts Report", "defender-security" ) ?></span>
|
11 |
+
<span class="sui-description">
|
12 |
+
<?php esc_html_e( "Configure Defender to automatically email you a lockout report for this website.", "defender-security" ) ?>
|
13 |
+
</span>
|
14 |
</div>
|
15 |
+
<div class="sui-box-settings-col-2">
|
16 |
+
<div class="sui-side-tabs sui-tabs">
|
17 |
+
<div data-tabs>
|
18 |
+
<div><?php _e( "On", "defender-security" ) ?></div>
|
19 |
+
<div class="active"><?php _e( "Off", "defender-security" ) ?></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
</div>
|
21 |
</div>
|
22 |
</div>
|
23 |
+
</div>
|
24 |
+
<div class="sui-box-settings-row sui-upsell-row">
|
25 |
+
<img class="sui-image sui-upsell-image"
|
26 |
+
src="<?php echo wp_defender()->getPluginUrl() . '/assets/img/scanning-free-man.svg' ?>">
|
27 |
+
<div class="sui-upsell-notice">
|
28 |
+
<p>
|
29 |
+
<?php printf( __( "Schedule daily, weekly or monthly lockout summary reports for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools – <a href='%s'>Try it all FREE today</a>!", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_iplockout_reports_upsell_link' ) ) ?>
|
30 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
</div>
|
32 |
</div>
|
33 |
</div>
|
34 |
+
</div>
|
|
app/module/ip-lockout/view/notification/report.php
CHANGED
@@ -1,86 +1,91 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
|
|
|
|
4 |
</div>
|
5 |
-
<
|
6 |
-
<
|
7 |
-
<div class="
|
8 |
-
<div class="
|
9 |
-
<label>
|
10 |
-
|
11 |
-
</
|
12 |
-
<span class="
|
13 |
-
<?php esc_html_e( "Configure Defender to automatically email you a lockout report for this website.
|
14 |
-
|
15 |
</div>
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
<
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
</div>
|
51 |
-
<label><?php esc_html_e( "Time of day", "defender-security" ) ?></label>
|
52 |
-
<select name="report_time">
|
53 |
-
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getTimes() as $timestamp => $time ): ?>
|
54 |
-
<option <?php selected( $settings->report_time, $timestamp ) ?>
|
55 |
-
value="<?php echo $timestamp ?>"><?php echo strftime( '%I:%M %p', strtotime( $time ) ) ?></option>
|
56 |
-
<?php endforeach; ?>
|
57 |
-
</select>
|
58 |
-
<!-- <span>-->
|
59 |
-
<?php //printf( esc_html__( "You will receive a lockout report email %s.", "defender-security" ), date_i18n( WD_Utils::get_date_time_format(), \WP_Defender\IP_Lockout\Component\Login_Protection_Api::get_report_sending_time() ) ) ?><!--</span>-->
|
60 |
</div>
|
61 |
</div>
|
62 |
</div>
|
63 |
-
|
64 |
-
|
65 |
-
<div class="column is-one-third">
|
66 |
-
<label>
|
67 |
-
<?php esc_html_e( "Email recipients", "defender-security" ) ?>
|
68 |
-
</label>
|
69 |
-
<span class="sub">
|
70 |
-
<?php esc_html_e( "Choose which of your website’s users will receive the lockout report.", "defender-security" ) ?>
|
71 |
-
</span>
|
72 |
-
</div>
|
73 |
-
<div class="column">
|
74 |
-
<?php $email_search->renderInput() ?>
|
75 |
-
</div>
|
76 |
-
</div>
|
77 |
-
<div class="clear line"></div>
|
78 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
79 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
80 |
-
<
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
</div>
|
|
|
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php esc_html_e( "Reporting", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" id="settings-frm" class="ip-frm">
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<div class="sui-box-settings-row">
|
10 |
+
<div class="sui-box-settings-col-1">
|
11 |
+
<span class="sui-settings-label">
|
12 |
+
<?php esc_html_e( "Lockouts Report", "defender-security" ) ?>
|
13 |
+
</span>
|
14 |
+
<span class="sui-description">
|
15 |
+
<?php esc_html_e( "Configure Defender to automatically email you a lockout report for this website.", "defender-security" ) ?>
|
16 |
+
</span>
|
17 |
</div>
|
18 |
+
|
19 |
+
<div class="sui-box-settings-col-2">
|
20 |
+
<div class="sui-form-field">
|
21 |
+
<label class="sui-toggle">
|
22 |
+
<input type="hidden" name="report" value="0"/>
|
23 |
+
<input role="presentation" type="checkbox" name="report"
|
24 |
+
class="toggle-checkbox"
|
25 |
+
id="report" value="1"
|
26 |
+
<?php checked( true, $settings->report ) ?>/>
|
27 |
+
<span class="sui-toggle-slider"></span>
|
28 |
+
</label>
|
29 |
+
<label for="login_lockout_notification" class="sui-toggle-label">
|
30 |
+
<?php esc_html_e( "Send regular email report", "defender-security" ) ?>
|
31 |
+
</label>
|
32 |
+
<div class="sui-border-frame sui-toggle-content">
|
33 |
+
<strong>
|
34 |
+
<?php _e( "Recipients", "defender-security" ) ?>
|
35 |
+
</strong>
|
36 |
+
<?php $email_search->renderInput() ?>
|
37 |
+
<strong>
|
38 |
+
<?php _e( "Schedule", "defender-security" ) ?>
|
39 |
+
</strong>
|
40 |
+
<div class="sui-row">
|
41 |
+
<div class="sui-col">
|
42 |
+
<label class="sui-label">
|
43 |
+
<?php _e( "Frequency", "defender-security" ) ?>
|
44 |
+
</label>
|
45 |
+
<select name="report_frequency">
|
46 |
+
<option <?php selected( '1', $settings->report_frequency ) ?>
|
47 |
+
value="1"><?php esc_html_e( "Daily", "defender-security" ) ?></option>
|
48 |
+
<option <?php selected( '7', $settings->report_frequency ) ?>
|
49 |
+
value="7"><?php esc_html_e( "Weekly", "defender-security" ) ?></option>
|
50 |
+
<option <?php selected( '30', $settings->report_frequency ) ?>
|
51 |
+
value="30"><?php esc_html_e( "Monthly", "defender-security" ) ?></option>
|
52 |
+
</select>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<div class="sui-row">
|
56 |
+
<div class="sui-col">
|
57 |
+
<label><?php _e( "Day of the week", "defender-security" ) ?></label>
|
58 |
+
<select name="report_day">
|
59 |
+
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getDaysOfWeek() as $day ): ?>
|
60 |
+
<option <?php selected( $settings->report_day, strtolower( $day ) ) ?>
|
61 |
+
value="<?php echo strtolower( $day ) ?>"><?php echo $day ?></option>
|
62 |
+
<?php endforeach;; ?>
|
63 |
+
</select>
|
64 |
+
</div>
|
65 |
+
<div class="sui-col">
|
66 |
+
<label><?php _e( "Time of day", "defender-security" ) ?></label>
|
67 |
+
<select name="report_time">
|
68 |
+
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getTimes() as $timestamp => $time ): ?>
|
69 |
+
<option <?php selected( $settings->report_time, $timestamp ) ?>
|
70 |
+
value="<?php echo $timestamp ?>"><?php echo strftime( '%I:%M %p', strtotime( $time ) ) ?></option>
|
71 |
+
<?php endforeach; ?>
|
72 |
+
</select>
|
73 |
+
</div>
|
74 |
+
</div>
|
75 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
</div>
|
77 |
</div>
|
78 |
</div>
|
79 |
+
</div>
|
80 |
+
<div class="sui-box-footer">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
82 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
83 |
+
<div class="sui-actions-right">
|
84 |
+
<button type="submit" class="sui-button sui-button-blue">
|
85 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
86 |
+
<?php _e( "Save Changes", "defender-security" ) ?>
|
87 |
+
</button>
|
88 |
+
</div>
|
89 |
+
</div>
|
90 |
+
</form>
|
91 |
+
</div>
|
app/module/ip-lockout/view/settings.php
CHANGED
@@ -1,49 +1,55 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3><?php _e( "Settings", "defender-security" ) ?></h3>
|
4 |
</div>
|
5 |
-
<
|
6 |
-
<
|
7 |
-
<div class="
|
8 |
-
<div class="
|
9 |
-
<
|
10 |
-
|
11 |
-
</label>
|
12 |
-
<span class="sub">
|
13 |
<?php esc_html_e( "Event logs are cached on your local server to speed up load times. You can choose how many days to keep logs for before they are removed.", "defender-security" ) ?>
|
14 |
-
|
15 |
</div>
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
22 |
</div>
|
23 |
</div>
|
24 |
-
<div class="
|
25 |
-
<div class="
|
26 |
-
<
|
27 |
-
|
28 |
-
</label>
|
29 |
-
<span class="sub">
|
30 |
<?php esc_html_e( "If you wish to delete your current logs simply hit delete and this will wipe your logs clean.", "defender-security" ) ?>
|
31 |
-
|
32 |
</div>
|
33 |
-
|
|
|
34 |
<button type="button" data-nonce="<?php echo esc_attr( wp_create_nonce( 'lockoutEmptyLogs' ) ) ?>"
|
35 |
-
class="button button-
|
36 |
<span class="delete-status"></span>
|
37 |
-
<span class="
|
|
|
|
|
38 |
</div>
|
39 |
</div>
|
40 |
-
|
|
|
41 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
42 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
43 |
-
<
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
49 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title"><?php _e( "Settings", "defender-security" ) ?></h3>
|
4 |
</div>
|
5 |
+
<form method="post" id="settings-frm" class="ip-frm">
|
6 |
+
<div class="sui-box-body">
|
7 |
+
<div class="sui-box-settings-row">
|
8 |
+
<div class="sui-box-settings-col-1">
|
9 |
+
<span class="sui-settings-label"><?php esc_html_e( "Storage", "defender-security" ) ?></span>
|
10 |
+
<span class="sui-description">
|
|
|
|
|
11 |
<?php esc_html_e( "Event logs are cached on your local server to speed up load times. You can choose how many days to keep logs for before they are removed.", "defender-security" ) ?>
|
12 |
+
</span>
|
13 |
</div>
|
14 |
+
|
15 |
+
<div class="sui-box-settings-col-2">
|
16 |
+
<div class="sui-form-field">
|
17 |
+
<input size="8" value="<?php echo $settings->storage_days ?>" type="text"
|
18 |
+
class="sui-form-control sui-field-has-suffix" id="storage_days"
|
19 |
+
name="storage_days"/>
|
20 |
+
<span class="sui-field-suffix"><?php esc_html_e( "days", "defender-security" ) ?></span>
|
21 |
+
<span class="sui-description">
|
22 |
+
<?php _e( "Choose how many days of event logs you’d like to store locally.", "defender-security" ) ?>
|
23 |
+
</span>
|
24 |
+
</div>
|
25 |
</div>
|
26 |
</div>
|
27 |
+
<div class="sui-box-settings-row">
|
28 |
+
<div class="sui-box-settings-col-1">
|
29 |
+
<span class="sui-settings-label"><?php esc_html_e( "Delete logs", "defender-security" ) ?></span>
|
30 |
+
<span class="sui-description">
|
|
|
|
|
31 |
<?php esc_html_e( "If you wish to delete your current logs simply hit delete and this will wipe your logs clean.", "defender-security" ) ?>
|
32 |
+
</span>
|
33 |
</div>
|
34 |
+
|
35 |
+
<div class="sui-box-settings-col-2">
|
36 |
<button type="button" data-nonce="<?php echo esc_attr( wp_create_nonce( 'lockoutEmptyLogs' ) ) ?>"
|
37 |
+
class="sui-button sui-button-ghost empty-logs"><?php _e( "Delete Logs", "defender-security" ) ?></button>
|
38 |
<span class="delete-status"></span>
|
39 |
+
<span class="sui-description">
|
40 |
+
<?php _e( "Note: Defender will instantly remove all past event logs, you will not be able to get them back.", "defender-security" ) ?>
|
41 |
+
</span>
|
42 |
</div>
|
43 |
</div>
|
44 |
+
</div>
|
45 |
+
<div class="sui-box-footer">
|
46 |
<?php wp_nonce_field( 'saveLockoutSettings' ) ?>
|
47 |
<input type="hidden" name="action" value="saveLockoutSettings"/>
|
48 |
+
<div class="sui-actions-right">
|
49 |
+
<button type="submit" class="sui-button sui-button-blue">
|
50 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
51 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
52 |
+
</div>
|
53 |
+
</div>
|
54 |
+
</form>
|
55 |
</div>
|
app/module/scan/behavior/core-result.php
CHANGED
@@ -52,6 +52,13 @@ class Core_Result extends Behavior {
|
|
52 |
* @return string
|
53 |
*/
|
54 |
public function getIssueDetail() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
$raw = $this->getRaw();
|
56 |
if ( $raw['type'] == 'unknown' ) {
|
57 |
return esc_html__( "Unknown file in WordPress core", "defender-security" );
|
@@ -111,9 +118,127 @@ class Core_Result extends Behavior {
|
|
111 |
return true;
|
112 |
}
|
113 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
/**
|
115 |
* Each item should have an dialog to show about itself description
|
116 |
* return string
|
|
|
117 |
*/
|
118 |
public function renderDialog() {
|
119 |
ob_start();
|
@@ -234,24 +359,34 @@ class Core_Result extends Behavior {
|
|
234 |
if ( is_file( $this->getSubtitle() ) || is_dir( $this->getSubtitle() ) ) {
|
235 |
$raw = $this->getRaw();
|
236 |
if ( $raw['type'] == 'unknown' ) {
|
237 |
-
$
|
238 |
-
|
239 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
}
|
241 |
-
|
242 |
-
$entities = htmlentities( $content, null, 'UTF-8', false );
|
243 |
-
|
244 |
-
return '<pre><code class="html">' . $entities . '</code></pre>';
|
245 |
} elseif ( $raw['type'] == 'modified' ) {
|
246 |
$original = $this->getOriginalSource();
|
247 |
$current = file_get_contents( $this->getSubtitle() );
|
248 |
$diff = $this->textDiff( $original, $current );
|
249 |
|
250 |
-
return '<pre><code class="html">' . $diff . '</code></pre>';
|
251 |
} elseif ( $raw['type'] == 'dir' ) {
|
252 |
$files = File_Helper::findFiles( $raw['file'], true, false );
|
253 |
|
254 |
-
return '<pre><code class="html">' . implode( PHP_EOL, $files ) . '</code></pre>';
|
255 |
}
|
256 |
}
|
257 |
}
|
@@ -379,6 +514,7 @@ class Core_Result extends Behavior {
|
|
379 |
global $wp_version;
|
380 |
$relPath = Scan_Api::convertToUnixPath( $file );
|
381 |
$source_file_url = "http://core.svn.wordpress.org/tags/$wp_version/" . $relPath;
|
|
|
382 |
if ( ! function_exists( 'download_url' ) ) {
|
383 |
require_once ABSPATH . 'wp-admin' . $ds . 'includes' . $ds . 'file.php';
|
384 |
}
|
52 |
* @return string
|
53 |
*/
|
54 |
public function getIssueDetail() {
|
55 |
+
return $this->getIssueSummary();
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @return string
|
60 |
+
*/
|
61 |
+
public function getIssueSummary() {
|
62 |
$raw = $this->getRaw();
|
63 |
if ( $raw['type'] == 'unknown' ) {
|
64 |
return esc_html__( "Unknown file in WordPress core", "defender-security" );
|
118 |
return true;
|
119 |
}
|
120 |
|
121 |
+
/**
|
122 |
+
* Render current issue content
|
123 |
+
* @return false|string
|
124 |
+
*/
|
125 |
+
public function renderIssueContent() {
|
126 |
+
$raw = $this->getRaw();
|
127 |
+
$string = $raw['type'] == 'unknown' ? __( "Defender found this stray file in your WordPress site directory. The current version of WordPress doesn't require it and as far as we can tell it's harmless (maybe even from an older WordPress install), so you can delete it or ignore it. Before deleting any files, be sure to back up your website." ) :
|
128 |
+
( $raw['type'] == 'modified' ? __( "Compare your file with the original file in the WordPress repository. Pieces highlighted in red will be removed when you patch the file, and pieces highlighted in green will be added.", "defender-security" ) :
|
129 |
+
__( "We found this folder in your WordPress file list. Your current version of WordPress doesn’t use this folder so it might belong to another application. If you don’t recognize it, you can delete this folder (don’t forget to back up your website first!) or get in touch with the WPMU DEV support team for more information", "defender-security" ) );
|
130 |
+
ob_start();
|
131 |
+
?>
|
132 |
+
<div class="sui-box issue-content">
|
133 |
+
<div class="sui-box-body">
|
134 |
+
<strong><?php _e( "Issue Details", "defender-security" ) ?></strong>
|
135 |
+
<div>
|
136 |
+
<?php echo $string ?>
|
137 |
+
</div>
|
138 |
+
<?php echo $this->getSrcCode() ?>
|
139 |
+
<table class="sui-table">
|
140 |
+
<tbody>
|
141 |
+
<tr>
|
142 |
+
<td>
|
143 |
+
<i class="sui-icon-folder-open"
|
144 |
+
aria-hidden="true"></i><strong><?php _e( "Location", "defender-security" ) ?></strong>
|
145 |
+
</td>
|
146 |
+
<td>
|
147 |
+
<?php echo $this->getSubtitle() ?>
|
148 |
+
</td>
|
149 |
+
</tr>
|
150 |
+
<tr>
|
151 |
+
<td>
|
152 |
+
<i class="sui-icon-download-cloud" aria-hidden="true"></i>
|
153 |
+
<strong>
|
154 |
+
<?php _e( "Size", "defender-security" ) ?>
|
155 |
+
</strong>
|
156 |
+
</td>
|
157 |
+
<td>
|
158 |
+
<?php
|
159 |
+
$bytes = filesize( $this->getSubtitle() );
|
160 |
+
if ( $bytes ) {
|
161 |
+
echo $this->getOwner()->makeReadable( $bytes );
|
162 |
+
} else {
|
163 |
+
echo 'N/A';
|
164 |
+
}
|
165 |
+
?>
|
166 |
+
</td>
|
167 |
+
</tr>
|
168 |
+
<tr>
|
169 |
+
<td>
|
170 |
+
<i class="sui-icon-calendar" aria-hidden="true"></i>
|
171 |
+
<strong>
|
172 |
+
<?php _e( "Date added", "defender-security" ) ?>
|
173 |
+
</strong>
|
174 |
+
</td>
|
175 |
+
<td>
|
176 |
+
<?php
|
177 |
+
$filemtime = filemtime( $this->getSubtitle() );
|
178 |
+
if ( $filemtime ) {
|
179 |
+
echo $this->getOwner()->formatDateTime( $filemtime );
|
180 |
+
} else {
|
181 |
+
echo 'N/A';
|
182 |
+
}
|
183 |
+
?>
|
184 |
+
</td>
|
185 |
+
</tr>
|
186 |
+
</tbody>
|
187 |
+
</table>
|
188 |
+
</div>
|
189 |
+
<div class="sui-box-footer">
|
190 |
+
<div class="sui-actions-left">
|
191 |
+
<form method="post" class="float-l ignore-item scan-frm">
|
192 |
+
<input type="hidden" name="action" value="ignoreItem">
|
193 |
+
<?php wp_nonce_field( 'ignoreItem' ) ?>
|
194 |
+
<input type="hidden" name="id" value="<?php echo $this->getOwner()->id ?>"/>
|
195 |
+
<button type="submit" class="sui-button sui-button-ghost">
|
196 |
+
<i class="sui-icon-eye-hide" aria-hidden="true"></i>
|
197 |
+
<?php _e( "Ignore", "defender-security" ) ?></button>
|
198 |
+
</form>
|
199 |
+
</div>
|
200 |
+
<div class="sui-actions-right">
|
201 |
+
<?php if ( $raw['type'] == 'unknown' || $raw['type'] == 'dir' ): ?>
|
202 |
+
<form method="post" class="scan-frm delete-item float-r">
|
203 |
+
<input type="hidden" name="action" value="deleteItem"/>
|
204 |
+
<input type="hidden" name="id" value="<?php echo $this->getOwner()->id ?>"/>
|
205 |
+
<?php wp_nonce_field( 'deleteItem' ) ?>
|
206 |
+
<button type="button" class="sui-button sui-button-red delete-mitem">
|
207 |
+
<i class="sui-icon-trash" aria-hidden="true"></i>
|
208 |
+
<?php _e( "Delete", "defender-security" ) ?></button>
|
209 |
+
<div class="confirm-box wd-hide">
|
210 |
+
<span><?php _e( "This will permanently remove the selected file/folder. Are you sure you want to continue?", "defender-security" ) ?></span>
|
211 |
+
<div>
|
212 |
+
<button type="submit" class="sui-button sui-button-red">
|
213 |
+
<?php _e( "Yes", "defender-security" ) ?>
|
214 |
+
</button>
|
215 |
+
<button type="button" class="sui-button sui-button-ghost">
|
216 |
+
<?php _e( "No", "defender-security" ) ?>
|
217 |
+
</button>
|
218 |
+
</div>
|
219 |
+
</div>
|
220 |
+
</form>
|
221 |
+
<?php elseif ( $raw['type'] == 'modified' ): ?>
|
222 |
+
<form method="post" class="scan-frm float-r resolve-item">
|
223 |
+
<input type="hidden" name="id" value="<?php echo $this->getOwner()->id ?>"/>
|
224 |
+
<input type="hidden" name="action" value="resolveItem"/>
|
225 |
+
<?php wp_nonce_field( 'resolveItem' ) ?>
|
226 |
+
<button type="submit" class="sui-button sui-button-blue">
|
227 |
+
<?php _e( "Restore to Original", "defender-security" ) ?>
|
228 |
+
</button>
|
229 |
+
</form>
|
230 |
+
<?php endif; ?>
|
231 |
+
</div>
|
232 |
+
</div>
|
233 |
+
</div>
|
234 |
+
<?php
|
235 |
+
return ob_get_clean();
|
236 |
+
}
|
237 |
+
|
238 |
/**
|
239 |
* Each item should have an dialog to show about itself description
|
240 |
* return string
|
241 |
+
* @deprecated 2.1
|
242 |
*/
|
243 |
public function renderDialog() {
|
244 |
ob_start();
|
359 |
if ( is_file( $this->getSubtitle() ) || is_dir( $this->getSubtitle() ) ) {
|
360 |
$raw = $this->getRaw();
|
361 |
if ( $raw['type'] == 'unknown' ) {
|
362 |
+
$ext = pathinfo( $this->getSubtitle(), PATHINFO_EXTENSION );
|
363 |
+
$ext = strtolower( $ext );
|
364 |
+
$allowed = wp_get_ext_types();
|
365 |
+
$allowed = array_merge( $allowed['code'], array(
|
366 |
+
'sql',
|
367 |
+
'text',
|
368 |
+
'log'
|
369 |
+
) );
|
370 |
+
if ( in_array( $ext, $allowed ) ) {
|
371 |
+
$content = file_get_contents( $this->getSubtitle() );
|
372 |
+
if ( function_exists( 'mb_convert_encoding' ) ) {
|
373 |
+
$content = mb_convert_encoding( $content, 'UTF-8', 'ASCII' );
|
374 |
+
}
|
375 |
+
|
376 |
+
$entities = htmlentities( $content, null, 'UTF-8', false );
|
377 |
+
|
378 |
+
return '<div><strong>' . __( "Current code", "defender-security" ) . '</strong><pre><code class="html">' . $entities . '</code></pre></div>';
|
379 |
}
|
|
|
|
|
|
|
|
|
380 |
} elseif ( $raw['type'] == 'modified' ) {
|
381 |
$original = $this->getOriginalSource();
|
382 |
$current = file_get_contents( $this->getSubtitle() );
|
383 |
$diff = $this->textDiff( $original, $current );
|
384 |
|
385 |
+
return '<div><strong>' . __( "Current code", "defender-security" ) . '</strong><pre><code class="html">' . $diff . '</code></pre></div>';
|
386 |
} elseif ( $raw['type'] == 'dir' ) {
|
387 |
$files = File_Helper::findFiles( $raw['file'], true, false );
|
388 |
|
389 |
+
return '<div><strong>' . __( "Current code", "defender-security" ) . '</strong><pre><code class="html">' . implode( PHP_EOL, $files ) . '</code></pre></div>';
|
390 |
}
|
391 |
}
|
392 |
}
|
514 |
global $wp_version;
|
515 |
$relPath = Scan_Api::convertToUnixPath( $file );
|
516 |
$source_file_url = "http://core.svn.wordpress.org/tags/$wp_version/" . $relPath;
|
517 |
+
$ds = DIRECTORY_SEPARATOR;
|
518 |
if ( ! function_exists( 'download_url' ) ) {
|
519 |
require_once ABSPATH . 'wp-admin' . $ds . 'includes' . $ds . 'file.php';
|
520 |
}
|
app/module/scan/behavior/scan-widget.php
ADDED
@@ -0,0 +1,255 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Author: Hoang Ngo
|
4 |
+
*/
|
5 |
+
|
6 |
+
namespace WP_Defender\Module\Scan\Behavior;
|
7 |
+
|
8 |
+
use Hammer\Base\Behavior;
|
9 |
+
use WP_Defender\Behavior\Utils;
|
10 |
+
use WP_Defender\Module\Scan\Component\Scan_Api;
|
11 |
+
use WP_Defender\Module\Scan\Model\Result_Item;
|
12 |
+
use WP_Defender\Module\Scan\Model\Settings;
|
13 |
+
|
14 |
+
class Scan_Widget extends Behavior {
|
15 |
+
private $lastScan;
|
16 |
+
private $activeScan;
|
17 |
+
private $settled = false;
|
18 |
+
private $countAll;
|
19 |
+
|
20 |
+
private function pullStatus() {
|
21 |
+
if ( $this->settled == false ) {
|
22 |
+
$this->activeScan = Scan_Api::getActiveScan();
|
23 |
+
$this->lastScan = Scan_Api::getLastScan();
|
24 |
+
$this->countAll = is_object( $this->lastScan ) ? $this->lastScan->countAll( Result_Item::STATUS_ISSUE ) : 0;
|
25 |
+
$this->settled = true;
|
26 |
+
}
|
27 |
+
}
|
28 |
+
|
29 |
+
public function renderScanWidget() {
|
30 |
+
$this->pullStatus();
|
31 |
+
?>
|
32 |
+
<div class="sui-box">
|
33 |
+
<div class="sui-box-header">
|
34 |
+
<h3 class="sui-box-title">
|
35 |
+
<i class="sui-icon-layers" aria-hidden="true"></i>
|
36 |
+
<?php _e( "File Scanning" ) ?>
|
37 |
+
</h3>
|
38 |
+
<?php if ( $this->countAll > 0 ): ?>
|
39 |
+
<div class="sui-actions-left">
|
40 |
+
<span class="sui-tag sui-tag-error">
|
41 |
+
<?php echo $this->countAll; ?>
|
42 |
+
</span>
|
43 |
+
</div>
|
44 |
+
<?php endif; ?>
|
45 |
+
</div>
|
46 |
+
<?php
|
47 |
+
$activeScan = $this->activeScan;
|
48 |
+
$lastScan = $this->lastScan;
|
49 |
+
if ( ! is_object( $activeScan ) && ! is_object( $lastScan ) ) {
|
50 |
+
echo $this->_renderNewScan();
|
51 |
+
} elseif ( is_object( $activeScan ) && $activeScan->status != \WP_Defender\Module\Scan\Model\Scan::STATUS_ERROR ) {
|
52 |
+
echo $this->_renderScanning( $activeScan );
|
53 |
+
} elseif ( is_object( $activeScan ) && $activeScan->status == \WP_Defender\Module\Scan\Model\Scan::STATUS_ERROR ) {
|
54 |
+
|
55 |
+
} else {
|
56 |
+
echo $this->_renderResult( $lastScan );
|
57 |
+
}
|
58 |
+
?>
|
59 |
+
</div>
|
60 |
+
<?php
|
61 |
+
}
|
62 |
+
|
63 |
+
private function _renderScanning( $model ) {
|
64 |
+
$percent = Scan_Api::getScanProgress();
|
65 |
+
ob_start();
|
66 |
+
?>
|
67 |
+
<div class="wdf-scanning"></div>
|
68 |
+
<div class="sui-box-body">
|
69 |
+
<p>
|
70 |
+
<?php _e( "Defender is scanning your files for malicious code. This will take a few minutes depending on the size of your website.", "defender-security" ) ?>
|
71 |
+
</p>
|
72 |
+
<div class="sui-progress-block sui-progress-can-close">
|
73 |
+
<div class="sui-progress">
|
74 |
+
<span class="sui-progress-icon" aria-hidden="true">
|
75 |
+
<i class="sui-icon-loader sui-loading"></i>
|
76 |
+
</span>
|
77 |
+
<span class="sui-progress-text">
|
78 |
+
<span><?php echo $percent ?>%</span>
|
79 |
+
</span>
|
80 |
+
<div class="sui-progress-bar" aria-hidden="true">
|
81 |
+
<span style="width: <?php echo $percent ?>%"></span>
|
82 |
+
</div>
|
83 |
+
</div>
|
84 |
+
<form method="post" class="scan-frm">
|
85 |
+
<input type="hidden" name="action" value="cancelScan"/>
|
86 |
+
<?php wp_nonce_field( 'cancelScan', '_wpnonce', true ) ?>
|
87 |
+
<button class="sui-button-icon" type="submit">
|
88 |
+
<i class="sui-icon-close"></i>
|
89 |
+
</button>
|
90 |
+
</form>
|
91 |
+
</div>
|
92 |
+
<div class="sui-progress-state">
|
93 |
+
<span class="sui-progress-state-text">
|
94 |
+
<?php echo $model->statusText ?>
|
95 |
+
</span>
|
96 |
+
</div>
|
97 |
+
<form method="post" id="process-scan" class="scan-frm">
|
98 |
+
<input type="hidden" name="action" value="processScan"/>
|
99 |
+
<?php
|
100 |
+
wp_nonce_field( 'processScan' );
|
101 |
+
?>
|
102 |
+
</form>
|
103 |
+
</div>
|
104 |
+
<?php
|
105 |
+
return ob_get_clean();
|
106 |
+
}
|
107 |
+
|
108 |
+
private function _renderResult( \WP_Defender\Module\Scan\Model\Scan $model ) {
|
109 |
+
ob_start();
|
110 |
+
?>
|
111 |
+
<div class="sui-box-body <?php echo $this->countAll > 0 ? 'no-padding-bottom' : null ?>">
|
112 |
+
<p>
|
113 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get and get notified about anything suspicious.", "defender-security" ) ?>
|
114 |
+
</p>
|
115 |
+
<?php if ( $this->countAll == 0 ): ?>
|
116 |
+
<div class="sui-notice sui-notice-success">
|
117 |
+
<p><?php _e( "Your code is clean, the skies are clear.", "defender-security" ) ?></p>
|
118 |
+
</div>
|
119 |
+
<?php else: ?>
|
120 |
+
<div class="sui-field-list sui-flushed no-border">
|
121 |
+
<div class="sui-field-list-body">
|
122 |
+
<div class="sui-field-list-item">
|
123 |
+
<label class="sui-field-list-item-label">
|
124 |
+
<strong>
|
125 |
+
<?php _e( "WordPress Core", "defender-security" ) ?>
|
126 |
+
</strong>
|
127 |
+
</label>
|
128 |
+
<?php echo $model->getCount( 'core' ) == 0 ? ' <i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' : '<span class="sui-tag sui-tag-error">' . $model->getCount( 'core' ) . '</span>' ?>
|
129 |
+
</div>
|
130 |
+
<div class="sui-field-list-item">
|
131 |
+
<label class="sui-field-list-item-label">
|
132 |
+
<strong>
|
133 |
+
<?php _e( "Plugins & Themes", "defender-security" ) ?>
|
134 |
+
</strong>
|
135 |
+
</label>
|
136 |
+
<?php if ( wp_defender()->isFree == false ): ?>
|
137 |
+
<?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' : '<span class="sui-tag sui-tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
|
138 |
+
<?php else: ?>
|
139 |
+
<a href="<?php echo Utils::instance()->campaignURL( 'defender_dash_filescan_pro_tag' ) ?>"
|
140 |
+
target="_blank" class="sui-button sui-button-purple"
|
141 |
+
data-tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
142 |
+
<?php _e( "Pro Feature", "defender-security" ) ?>
|
143 |
+
</a>
|
144 |
+
<?php endif; ?>
|
145 |
+
</div>
|
146 |
+
<div class="sui-field-list-item">
|
147 |
+
<label class="sui-field-list-item-label">
|
148 |
+
<strong><?php _e( "Suspicious Code", "defender-security" ) ?></strong>
|
149 |
+
</label>
|
150 |
+
<?php if ( wp_defender()->isFree == false ): ?>
|
151 |
+
<?php echo $model->getCount( 'content' ) == 0 ? ' <i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' : '<span class="sui-tag sui-tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
|
152 |
+
<?php else: ?>
|
153 |
+
<a href="<?php echo Utils::instance()->campaignURL( 'defender_dash_filescan_pro_tag' ) ?>"
|
154 |
+
target="_blank" class="sui-button sui-button-purple"
|
155 |
+
tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
156 |
+
<?php _e( "Pro Feature", "defender-security" ) ?>
|
157 |
+
</a>
|
158 |
+
<?php endif; ?>
|
159 |
+
</div>
|
160 |
+
</div>
|
161 |
+
</div>
|
162 |
+
<?php endif; ?>
|
163 |
+
</div>
|
164 |
+
<div class="sui-box-footer">
|
165 |
+
<div class="sui-actions-left">
|
166 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>"
|
167 |
+
class="sui-button sui-button-ghost">
|
168 |
+
<i class="sui-icon-eye" aria-hidden="true"></i>
|
169 |
+
<?php _e( "View Report", "defender-security" ) ?>
|
170 |
+
</a>
|
171 |
+
</div>
|
172 |
+
<?php if ( ! wp_defender()->isFree ): ?>
|
173 |
+
<div class="sui-actions-right">
|
174 |
+
<p class="sui-p-small">
|
175 |
+
<?php
|
176 |
+
if ( ! empty( Settings::instance()->notification ) ) {
|
177 |
+
switch ( Settings::instance()->frequency ) {
|
178 |
+
case '1':
|
179 |
+
_e( "Automatic scans are running daily", "defender-security" );
|
180 |
+
break;
|
181 |
+
case '7':
|
182 |
+
_e( "Automatic scans are running weekly", "defender-security" );
|
183 |
+
break;
|
184 |
+
case '30':
|
185 |
+
_e( "Automatic scans are running monthly", "defender-security" );
|
186 |
+
break;
|
187 |
+
}
|
188 |
+
} else {
|
189 |
+
_e( "Automatic scans are disabled", "defender-security" );
|
190 |
+
}
|
191 |
+
?>
|
192 |
+
</p>
|
193 |
+
</div>
|
194 |
+
<?php endif; ?>
|
195 |
+
</div>
|
196 |
+
<?php
|
197 |
+
return ob_get_clean();
|
198 |
+
}
|
199 |
+
|
200 |
+
public function renderScanStatusText() {
|
201 |
+
$this->pullStatus();
|
202 |
+
$activeScan = $this->activeScan;
|
203 |
+
$lastScan = $this->lastScan;
|
204 |
+
if ( ! is_object( $activeScan ) && ! is_object( $lastScan ) ) {
|
205 |
+
?>
|
206 |
+
<form id="start-a-scan" method="post" class="scan-frm">
|
207 |
+
<?php
|
208 |
+
wp_nonce_field( 'startAScan' );
|
209 |
+
?>
|
210 |
+
<input type="hidden" name="action" value="startAScan"/>
|
211 |
+
<button type="submit"
|
212 |
+
class="sui-button sui-button-blue">
|
213 |
+
<?php _e( "RUN SCAN", "defender-security" ) ?>
|
214 |
+
</button>
|
215 |
+
</form>
|
216 |
+
<?php
|
217 |
+
} elseif ( is_object( $activeScan ) && $activeScan->status != \WP_Defender\Module\Scan\Model\Scan::STATUS_ERROR ) {
|
218 |
+
?>
|
219 |
+
<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>
|
220 |
+
<?php _e( "Scanning…", "defender-security" ) ?>
|
221 |
+
<?php
|
222 |
+
} else {
|
223 |
+
if ( $this->countAll == 0 ) {
|
224 |
+
?>
|
225 |
+
<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>
|
226 |
+
<?php
|
227 |
+
} else {
|
228 |
+
?>
|
229 |
+
<span class="sui-tag sui-tag-error"><?php echo $this->countAll ?></span>
|
230 |
+
<?php
|
231 |
+
}
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
private function _renderNewScan() {
|
236 |
+
ob_start();
|
237 |
+
?>
|
238 |
+
<div class="sui-box-body">
|
239 |
+
<p>
|
240 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get
|
241 |
+
notified about anything suspicious.", "defender-security" ) ?>
|
242 |
+
</p>
|
243 |
+
<form id="start-a-scan" method="post" class="scan-frm">
|
244 |
+
<?php
|
245 |
+
wp_nonce_field( 'startAScan' );
|
246 |
+
?>
|
247 |
+
<input type="hidden" name="action" value="startAScan"/>
|
248 |
+
<button type="submit"
|
249 |
+
class="sui-button sui-button-blue"><?php _e( "Run Scan", "defender-security" ) ?></button>
|
250 |
+
</form>
|
251 |
+
</div>
|
252 |
+
<?php
|
253 |
+
return ob_get_clean();
|
254 |
+
}
|
255 |
+
}
|
app/module/scan/behavior/scan.php
CHANGED
@@ -30,20 +30,21 @@ class Scan extends Behavior {
|
|
30 |
$this->pullStatus();
|
31 |
|
32 |
?>
|
33 |
-
<div class="
|
34 |
-
<div class="box-
|
35 |
-
<
|
36 |
-
<
|
37 |
-
<?php
|
38 |
-
if($this->countAll > 0):
|
39 |
-
?>
|
40 |
-
<span class="def-tag tag-error" tooltip="<?php printf(esc_attr__("You have %s suspicious file(s) needing attention","defender-security"),$this->countAll) ?>"><?php echo $this->countAll ?></span>
|
41 |
-
<?php endif; ?>
|
42 |
</h3>
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
</div>
|
45 |
-
|
46 |
-
<?php
|
47 |
$activeScan = $this->activeScan;
|
48 |
$lastScan = $this->lastScan;
|
49 |
if ( ! is_object( $activeScan ) && ! is_object( $lastScan ) ) {
|
@@ -56,7 +57,21 @@ class Scan extends Behavior {
|
|
56 |
echo $this->_renderResult( $lastScan );
|
57 |
}
|
58 |
?>
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
</div>
|
61 |
<?php
|
62 |
}
|
@@ -99,75 +114,73 @@ class Scan extends Behavior {
|
|
99 |
}
|
100 |
}
|
101 |
|
102 |
-
private function _renderResult(
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
|
|
109 |
if ( $this->countAll == 0 ) {
|
110 |
?>
|
111 |
-
<div class="
|
112 |
-
|
113 |
-
<?php _e( "Your code is clean, the skies are clear.", "defender-security" ) ?>
|
114 |
</div>
|
115 |
<?php
|
116 |
} else {
|
117 |
?>
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
<?php if ( Utils::instance()->getAPIKey() ): ?>
|
133 |
-
<?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
|
134 |
<?php else: ?>
|
135 |
-
<a href="<?php echo Utils::instance()->campaignURL('defender_dash_filescan_pro_tag') ?>" target="_blank" class="button
|
136 |
-
tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
137 |
<?php _e( "Pro Feature", "defender-security" ) ?>
|
138 |
</a>
|
139 |
<?php endif; ?>
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
<?php if ( Utils::instance()->getAPIKey() ): ?>
|
148 |
-
<?php echo $model->getCount( 'content' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
|
149 |
<?php else: ?>
|
150 |
-
<a href="<?php echo Utils::instance()->campaignURL('defender_dash_filescan_pro_tag') ?>" target="_blank" class="button
|
151 |
tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
152 |
<?php _e( "Pro Feature", "defender-security" ) ?>
|
153 |
</a>
|
154 |
<?php endif; ?>
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
</ul>
|
159 |
<?php
|
160 |
}
|
161 |
?>
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
|
|
|
|
|
|
171 |
if ( !empty( Settings::instance()->notification ) ) {
|
172 |
switch ( Settings::instance()->frequency ) {
|
173 |
case '1':
|
@@ -182,29 +195,29 @@ class Scan extends Behavior {
|
|
182 |
}
|
183 |
}
|
184 |
?>
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
return ob_get_clean();
|
192 |
}
|
193 |
|
194 |
private function _renderNewScan() {
|
195 |
ob_start();
|
196 |
?>
|
197 |
-
|
198 |
-
|
|
|
199 |
notified about anything suspicious.", "defender-security" ) ?>
|
200 |
-
|
201 |
-
|
202 |
<?php
|
203 |
wp_nonce_field( 'startAScan' );
|
204 |
?>
|
205 |
<input type="hidden" name="action" value="startAScan"/>
|
206 |
-
<button type="submit" class="button button-
|
207 |
</form>
|
|
|
208 |
<?php
|
209 |
return ob_get_clean();
|
210 |
}
|
@@ -213,23 +226,34 @@ class Scan extends Behavior {
|
|
213 |
ob_start();
|
214 |
$percent = Scan_Api::getScanProgress();
|
215 |
?>
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
<form method="post" id="process-scan" class="scan-frm">
|
234 |
<input type="hidden" name="action" value="processScan"/>
|
235 |
<?php
|
30 |
$this->pullStatus();
|
31 |
|
32 |
?>
|
33 |
+
<div class="sui-box">
|
34 |
+
<div class="sui-box-header">
|
35 |
+
<h3 class="sui-box-title">
|
36 |
+
<i class="sui-icon-layers" aria-hidden="true"></i>
|
37 |
+
<?php _e("File Scanning") ?>
|
|
|
|
|
|
|
|
|
38 |
</h3>
|
39 |
+
<?php if($this->countAll > 0):?>
|
40 |
+
<div class="sui-actions-left">
|
41 |
+
<span class="sui-tag sui-tag-error">
|
42 |
+
<?php echo $this->countAll; ?>
|
43 |
+
</span>
|
44 |
+
</div>
|
45 |
+
<?php endif; ?>
|
46 |
</div>
|
47 |
+
<?php
|
|
|
48 |
$activeScan = $this->activeScan;
|
49 |
$lastScan = $this->lastScan;
|
50 |
if ( ! is_object( $activeScan ) && ! is_object( $lastScan ) ) {
|
57 |
echo $this->_renderResult( $lastScan );
|
58 |
}
|
59 |
?>
|
60 |
+
<!-- <div class="sui-box-body">-->
|
61 |
+
<!-- --><?php
|
62 |
+
// $activeScan = $this->activeScan;
|
63 |
+
// $lastScan = $this->lastScan;
|
64 |
+
// if ( ! is_object( $activeScan ) && ! is_object( $lastScan ) ) {
|
65 |
+
// echo $this->_renderNewScan();
|
66 |
+
// } elseif ( is_object( $activeScan ) && $activeScan->status != \WP_Defender\Module\Scan\Model\Scan::STATUS_ERROR ) {
|
67 |
+
// echo $this->_renderScanning( $activeScan );
|
68 |
+
// } elseif ( is_object( $activeScan ) && $activeScan->status == \WP_Defender\Module\Scan\Model\Scan::STATUS_ERROR ) {
|
69 |
+
//
|
70 |
+
// } else {
|
71 |
+
// echo $this->_renderResult( $lastScan );
|
72 |
+
// }
|
73 |
+
// ?>
|
74 |
+
<!-- </div>-->
|
75 |
</div>
|
76 |
<?php
|
77 |
}
|
114 |
}
|
115 |
}
|
116 |
|
117 |
+
private function _renderResult(\WP_Defender\Module\Scan\Model\Scan $model){
|
118 |
+
ob_start();
|
119 |
+
?>
|
120 |
+
<div class="sui-box-body no-padding-bottom">
|
121 |
+
<p>
|
122 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get and get notified about anything suspicious.", "defender-security" ) ?>
|
123 |
+
</p>
|
124 |
+
<?php
|
125 |
if ( $this->countAll == 0 ) {
|
126 |
?>
|
127 |
+
<div class="sui-notice sui-notice-success">
|
128 |
+
<p><?php _e( "Your code is clean, the skies are clear.", "defender-security" ) ?></p>
|
|
|
129 |
</div>
|
130 |
<?php
|
131 |
} else {
|
132 |
?>
|
133 |
+
<div class="sui-field-list sui-flushed no-border">
|
134 |
+
<div class="sui-field-list-body">
|
135 |
+
<div class="sui-field-list-item">
|
136 |
+
<label class="sui-field-list-item-label">
|
137 |
+
<?php _e( "WordPress Core", "defender-security" ) ?>
|
138 |
+
</label>
|
139 |
+
<?php echo $model->getCount( 'core' ) == 0 ? ' <i class="sui-icon-check" aria-hidden="true"></i>' : '<span class="sui-tag sui-tag-error">' . $model->getCount( 'core' ) . '</span>' ?>
|
140 |
+
</div>
|
141 |
+
<div class="sui-field-list-item">
|
142 |
+
<label class="sui-field-list-item-label">
|
143 |
+
<?php _e( "Plugins & Themes", "defender-security" ) ?>
|
144 |
+
</label>
|
145 |
+
<?php if ( Utils::instance()->getAPIKey() ): ?>
|
146 |
+
<?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="sui-icon-check" aria-hidden="true"></i>' : '<span class="sui-tag sui-tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
|
|
|
|
|
147 |
<?php else: ?>
|
148 |
+
<a href="<?php echo Utils::instance()->campaignURL('defender_dash_filescan_pro_tag') ?>" target="_blank" class="sui-button sui-button-purple"
|
149 |
+
data-tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
150 |
<?php _e( "Pro Feature", "defender-security" ) ?>
|
151 |
</a>
|
152 |
<?php endif; ?>
|
153 |
+
</div>
|
154 |
+
<div class="sui-field-list-item">
|
155 |
+
<label class="sui-field-list-item-label">
|
156 |
+
<?php _e( "Suspicious Code", "defender-security" ) ?>
|
157 |
+
</label>
|
158 |
+
<?php if ( Utils::instance()->getAPIKey() ): ?>
|
159 |
+
<?php echo $model->getCount( 'content' ) == 0 ? ' <i class="sui-icon-check" aria-hidden="true"></i>' : '<span class="sui-tag sui-tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
|
|
|
|
|
160 |
<?php else: ?>
|
161 |
+
<a href="<?php echo Utils::instance()->campaignURL('defender_dash_filescan_pro_tag') ?>" target="_blank" class="sui-button sui-button-purple"
|
162 |
tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
163 |
<?php _e( "Pro Feature", "defender-security" ) ?>
|
164 |
</a>
|
165 |
<?php endif; ?>
|
166 |
+
</div>
|
167 |
+
</div>
|
168 |
+
</div>
|
|
|
169 |
<?php
|
170 |
}
|
171 |
?>
|
172 |
+
</div>
|
173 |
+
|
174 |
+
<div class="sui-box-footer">
|
175 |
+
<div class="sui-actions-left">
|
176 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>"
|
177 |
+
class="sui-button sui-button-ghost">
|
178 |
+
<?php _e( "View Report", "defender-security" ) ?>
|
179 |
+
</a>
|
180 |
+
</div>
|
181 |
+
<?php if(!wp_defender()->isFree): ?>
|
182 |
+
<div class="sui-actions-right">
|
183 |
+
<?php
|
184 |
if ( !empty( Settings::instance()->notification ) ) {
|
185 |
switch ( Settings::instance()->frequency ) {
|
186 |
case '1':
|
195 |
}
|
196 |
}
|
197 |
?>
|
198 |
+
</div>
|
199 |
+
<?php endif; ?>
|
200 |
+
</div>
|
201 |
+
<?php
|
202 |
+
return ob_get_clean();
|
|
|
|
|
203 |
}
|
204 |
|
205 |
private function _renderNewScan() {
|
206 |
ob_start();
|
207 |
?>
|
208 |
+
<div class="sui-box-body">
|
209 |
+
<p>
|
210 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get
|
211 |
notified about anything suspicious.", "defender-security" ) ?>
|
212 |
+
</p>
|
213 |
+
<form id="start-a-scan" method="post" class="scan-frm">
|
214 |
<?php
|
215 |
wp_nonce_field( 'startAScan' );
|
216 |
?>
|
217 |
<input type="hidden" name="action" value="startAScan"/>
|
218 |
+
<button type="submit" class="sui-button sui-button-blue"><?php _e( "Run Scan", "defender-security" ) ?></button>
|
219 |
</form>
|
220 |
+
</div>
|
221 |
<?php
|
222 |
return ob_get_clean();
|
223 |
}
|
226 |
ob_start();
|
227 |
$percent = Scan_Api::getScanProgress();
|
228 |
?>
|
229 |
+
<div class="wdf-scanning"></div>
|
230 |
+
<div class="sui-box-body">
|
231 |
+
<p>
|
232 |
+
<?php _e( "Defender is scanning your files for malicious code. This will take a few minutes depending on the size of your website.", "defender-security" ) ?>
|
233 |
+
</p>
|
234 |
+
<div class="sui-progress-block sui-progress-can-close">
|
235 |
+
<div class="sui-progress">
|
236 |
+
<div class="sui-progress-text sui-icon-loader sui-loading">
|
237 |
+
<span><?php echo $percent ?>%</span>
|
238 |
+
</div>
|
239 |
+
<div class="sui-progress-bar">
|
240 |
+
<span style="width: <?php echo $percent ?>%"></span>
|
241 |
+
</div>
|
242 |
+
<form method="post" class="scan-frm">
|
243 |
+
<input type="hidden" name="action" value="cancelScan"/>
|
244 |
+
<?php wp_nonce_field( 'cancelScan', '_wpnonce', true ) ?>
|
245 |
+
<button class="sui-button-icon" type="submit">
|
246 |
+
<i class="sui-icon-close"></i>
|
247 |
+
</button>
|
248 |
+
</form>
|
249 |
+
</div>
|
250 |
+
</div>
|
251 |
+
<div class="sui-progress-state">
|
252 |
+
<span class="sui-progress-state-text">
|
253 |
+
<?php echo $model->statusText ?>
|
254 |
+
</span>
|
255 |
+
</div>
|
256 |
+
</div>
|
257 |
<form method="post" id="process-scan" class="scan-frm">
|
258 |
<input type="hidden" name="action" value="processScan"/>
|
259 |
<?php
|
app/module/scan/component/result-table.php
CHANGED
@@ -5,6 +5,7 @@
|
|
5 |
|
6 |
namespace WP_Defender\Module\Scan\Component;
|
7 |
|
|
|
8 |
use WP_Defender\Module\Scan\Model\Result_Item;
|
9 |
|
10 |
if ( ! class_exists( 'WP_List_Table' ) ) {
|
@@ -16,7 +17,7 @@ class Result_Table extends \WP_List_Table {
|
|
16 |
|
17 |
public function __construct( $args = array() ) {
|
18 |
parent::__construct( array_merge( array(
|
19 |
-
'plural' => '',
|
20 |
'autoescape' => false,
|
21 |
'screen' => ''
|
22 |
), $args ) );
|
@@ -30,16 +31,14 @@ class Result_Table extends \WP_List_Table {
|
|
30 |
case Result_Item::STATUS_ISSUE:
|
31 |
default:
|
32 |
$columns = array(
|
33 |
-
'col_bulk' => '<input id="apply-all" type="checkbox"/>',
|
34 |
'col_file' => esc_html__( 'Suspicious File', "defender-security" ),
|
35 |
-
'col_issue' => esc_html__( '
|
36 |
'col_action' => '',
|
37 |
);
|
38 |
break;
|
39 |
case Result_Item::STATUS_IGNORED:
|
40 |
$columns = array(
|
41 |
-
'
|
42 |
-
'col_file' => esc_html__( 'File Name', "defender-security" ),
|
43 |
'col_ignore_date' => esc_html__( 'Date Ignored', "defender-security" ),
|
44 |
'col_ignored_action' => '',
|
45 |
);
|
@@ -85,13 +84,13 @@ class Result_Table extends \WP_List_Table {
|
|
85 |
public function column_col_ignored_action( Result_Item $item ) {
|
86 |
ob_start();
|
87 |
?>
|
88 |
-
<form method="post" class="ignore-restore scan-frm">
|
89 |
<input type="hidden" name="action" value="unIgnoreItem"/>
|
90 |
<input type="hidden" name="id" value="<?php echo $item->id ?>"/>
|
91 |
<?php wp_nonce_field( 'unIgnoreItem' ) ?>
|
92 |
-
<button type="submit" tooltip="<?php esc_attr_e( "Restore File", "defender-security" ) ?>"
|
93 |
-
class="button
|
94 |
-
<i class="
|
95 |
</button>
|
96 |
</form>
|
97 |
<?php
|
@@ -103,7 +102,7 @@ class Result_Table extends \WP_List_Table {
|
|
103 |
*/
|
104 |
function prepare_items() {
|
105 |
$model = Scan_Api::getLastScan();
|
106 |
-
$itemsPerPage =
|
107 |
$totalItems = $model->countAll( $this->type );
|
108 |
|
109 |
$this->set_pagination_args( array(
|
@@ -113,7 +112,16 @@ class Result_Table extends \WP_List_Table {
|
|
113 |
) );
|
114 |
$offset = ( $this->get_pagenum() - 1 ) * $itemsPerPage;
|
115 |
$this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() );
|
116 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
}
|
118 |
|
119 |
/**
|
@@ -122,7 +130,7 @@ class Result_Table extends \WP_List_Table {
|
|
122 |
* @return string
|
123 |
*/
|
124 |
public function column_col_bulk( $item ) {
|
125 |
-
return '<input value="' . $item->id . '" type="checkbox" class="scan-chk">';
|
126 |
}
|
127 |
|
128 |
/**
|
@@ -131,7 +139,7 @@ class Result_Table extends \WP_List_Table {
|
|
131 |
* @return string
|
132 |
*/
|
133 |
public function column_col_file( Result_Item $item ) {
|
134 |
-
return $
|
135 |
}
|
136 |
|
137 |
/**
|
@@ -140,7 +148,7 @@ class Result_Table extends \WP_List_Table {
|
|
140 |
* @return mixed
|
141 |
*/
|
142 |
public function column_col_issue( Result_Item $item ) {
|
143 |
-
return $item->
|
144 |
}
|
145 |
|
146 |
/**
|
@@ -149,13 +157,11 @@ class Result_Table extends \WP_List_Table {
|
|
149 |
* @return string
|
150 |
*/
|
151 |
public function column_col_action( Result_Item $item ) {
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
return $content;
|
159 |
}
|
160 |
|
161 |
/**
|
@@ -165,21 +171,23 @@ class Result_Table extends \WP_List_Table {
|
|
165 |
* @access public
|
166 |
*/
|
167 |
public function display() {
|
168 |
-
$singular = $this->_args['singular'];
|
169 |
|
170 |
$this->display_tablenav( 'top' );
|
171 |
?>
|
172 |
-
<
|
173 |
-
<
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
|
|
|
|
|
|
183 |
<?php
|
184 |
$this->display_tablenav( 'bottom' );
|
185 |
}
|
@@ -189,34 +197,41 @@ class Result_Table extends \WP_List_Table {
|
|
189 |
return null;
|
190 |
}
|
191 |
?>
|
192 |
-
<div class="
|
193 |
-
<div class="
|
194 |
<form method="post" class="scan-bulk-frm">
|
195 |
<input type="hidden" name="action" value="scanBulkAction"/>
|
196 |
<?php wp_nonce_field( 'scanBulkAction' ) ?>
|
197 |
-
<
|
198 |
-
|
199 |
-
<
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
</form>
|
209 |
</div>
|
210 |
-
<div class="
|
211 |
-
<
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
|
|
217 |
</div>
|
218 |
</div>
|
219 |
-
<div class="clear"></div>
|
220 |
</div>
|
221 |
<?php
|
222 |
}
|
@@ -230,9 +245,18 @@ class Result_Table extends \WP_List_Table {
|
|
230 |
* @param object $item The current item
|
231 |
*/
|
232 |
public function single_row( $item ) {
|
233 |
-
echo '<tr id="mid-' . $item->id . '">';
|
234 |
$this->single_row_columns( $item );
|
235 |
echo '</tr>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
}
|
237 |
|
238 |
/**
|
@@ -264,32 +288,28 @@ class Result_Table extends \WP_List_Table {
|
|
264 |
$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
|
265 |
$current_url = esc_url( $current_url );
|
266 |
|
267 |
-
$radius =
|
268 |
if ( $current_page > 1 && $total_pages > $radius ) {
|
269 |
-
$links['
|
270 |
-
add_query_arg( 'paged', 1, $current_url ), '
|
271 |
-
$links['prev'] = sprintf( '<a class="button button-light" href="%s">%s</a>',
|
272 |
-
add_query_arg( 'paged', $current_page - 1, $current_url ), '‹' );
|
273 |
}
|
274 |
|
275 |
for ( $i = 1; $i <= $total_pages; $i ++ ) {
|
276 |
if ( ( $i >= 1 && $i <= $radius ) || ( $i > $current_page - 2 && $i < $current_page + 2 ) || ( $i <= $total_pages && $i > $total_pages - $radius ) ) {
|
277 |
if ( $i == $current_page ) {
|
278 |
-
$links[ $i ] = sprintf( '<a href="#"
|
279 |
} else {
|
280 |
-
$links[ $i ] = sprintf( '<a
|
281 |
add_query_arg( 'paged', $i, $current_url ), $i );
|
282 |
}
|
283 |
} elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
|
284 |
-
$links[ $i ] = '<a href="#"
|
285 |
}
|
286 |
}
|
287 |
|
288 |
if ( $current_page < $total_pages && $total_pages > $radius ) {
|
289 |
-
$links['next'] = sprintf( '<a
|
290 |
-
add_query_arg( 'paged', $current_page + 1, $current_url ), '
|
291 |
-
$links['last'] = sprintf( '<a class="button audit-nav button-light" href="%s">%s</a>',
|
292 |
-
add_query_arg( 'paged', $total_pages, $current_url ), '»' );
|
293 |
}
|
294 |
$output = join( "\n", $links );
|
295 |
$this->_pagination = $output;
|
@@ -297,4 +317,53 @@ class Result_Table extends \WP_List_Table {
|
|
297 |
echo $this->_pagination;
|
298 |
}
|
299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
300 |
}
|
5 |
|
6 |
namespace WP_Defender\Module\Scan\Component;
|
7 |
|
8 |
+
use Hammer\Helper\HTTP_Helper;
|
9 |
use WP_Defender\Module\Scan\Model\Result_Item;
|
10 |
|
11 |
if ( ! class_exists( 'WP_List_Table' ) ) {
|
17 |
|
18 |
public function __construct( $args = array() ) {
|
19 |
parent::__construct( array_merge( array(
|
20 |
+
'plural' => 'sui-table sui-accordion',
|
21 |
'autoescape' => false,
|
22 |
'screen' => ''
|
23 |
), $args ) );
|
31 |
case Result_Item::STATUS_ISSUE:
|
32 |
default:
|
33 |
$columns = array(
|
|
|
34 |
'col_file' => esc_html__( 'Suspicious File', "defender-security" ),
|
35 |
+
'col_issue' => esc_html__( 'Details', "defender-security" ),
|
36 |
'col_action' => '',
|
37 |
);
|
38 |
break;
|
39 |
case Result_Item::STATUS_IGNORED:
|
40 |
$columns = array(
|
41 |
+
'col_file' => esc_html__( 'Suspicious File', "defender-security" ),
|
|
|
42 |
'col_ignore_date' => esc_html__( 'Date Ignored', "defender-security" ),
|
43 |
'col_ignored_action' => '',
|
44 |
);
|
84 |
public function column_col_ignored_action( Result_Item $item ) {
|
85 |
ob_start();
|
86 |
?>
|
87 |
+
<form method="post" class="ignore-restore scan-frm float-r">
|
88 |
<input type="hidden" name="action" value="unIgnoreItem"/>
|
89 |
<input type="hidden" name="id" value="<?php echo $item->id ?>"/>
|
90 |
<?php wp_nonce_field( 'unIgnoreItem' ) ?>
|
91 |
+
<button type="submit" data-tooltip="<?php esc_attr_e( "Restore File", "defender-security" ) ?>"
|
92 |
+
class="sui-button-icon sui-tooltip sui-tooltip-top">
|
93 |
+
<i class="sui-icon-update" aria-hidden="true"></i>
|
94 |
</button>
|
95 |
</form>
|
96 |
<?php
|
102 |
*/
|
103 |
function prepare_items() {
|
104 |
$model = Scan_Api::getLastScan();
|
105 |
+
$itemsPerPage = 40;
|
106 |
$totalItems = $model->countAll( $this->type );
|
107 |
|
108 |
$this->set_pagination_args( array(
|
112 |
) );
|
113 |
$offset = ( $this->get_pagenum() - 1 ) * $itemsPerPage;
|
114 |
$this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() );
|
115 |
+
$issueType = HTTP_Helper::retrieve_get( 'type', null );
|
116 |
+
if ( ! in_array( $issueType, array(
|
117 |
+
'core',
|
118 |
+
'vuln',
|
119 |
+
'code'
|
120 |
+
) ) ) {
|
121 |
+
$issueType = null;
|
122 |
+
}
|
123 |
+
|
124 |
+
$this->items = $model->getItems( $offset . ',' . $itemsPerPage, $this->type, $issueType );
|
125 |
}
|
126 |
|
127 |
/**
|
130 |
* @return string
|
131 |
*/
|
132 |
public function column_col_bulk( $item ) {
|
133 |
+
return '<label class="sui-checkbox"><input value="' . $item->id . '" type="checkbox" class="scan-chk"><span aria-hidden="true"></span></label>';
|
134 |
}
|
135 |
|
136 |
/**
|
139 |
* @return string
|
140 |
*/
|
141 |
public function column_col_file( Result_Item $item ) {
|
142 |
+
return $this->column_col_bulk( $item ) . '<span>' . $item->getTitle() . '</span>';
|
143 |
}
|
144 |
|
145 |
/**
|
148 |
* @return mixed
|
149 |
*/
|
150 |
public function column_col_issue( Result_Item $item ) {
|
151 |
+
return $item->getIssueSummary();
|
152 |
}
|
153 |
|
154 |
/**
|
157 |
* @return string
|
158 |
*/
|
159 |
public function column_col_action( Result_Item $item ) {
|
160 |
+
?>
|
161 |
+
<span class="sui-accordion-open-indicator" aria-label="Expand">
|
162 |
+
<i class="sui-icon-chevron-down" aria-hidden="true"></i>
|
163 |
+
</span>
|
164 |
+
<?php
|
|
|
|
|
165 |
}
|
166 |
|
167 |
/**
|
171 |
* @access public
|
172 |
*/
|
173 |
public function display() {
|
|
|
174 |
|
175 |
$this->display_tablenav( 'top' );
|
176 |
?>
|
177 |
+
<div class="sui-row sui-flushed">
|
178 |
+
<table id="scan-result-table"
|
179 |
+
class="sui-table <?php echo $this->type == Result_Item::STATUS_ISSUE ? 'sui-accordion' : null ?>">
|
180 |
+
<thead>
|
181 |
+
<tr>
|
182 |
+
<?php $this->print_column_headers(); ?>
|
183 |
+
</tr>
|
184 |
+
</thead>
|
185 |
+
|
186 |
+
<tbody>
|
187 |
+
<?php $this->display_rows_or_placeholder(); ?>
|
188 |
+
</tbody>
|
189 |
+
</table>
|
190 |
+
</div>
|
191 |
<?php
|
192 |
$this->display_tablenav( 'bottom' );
|
193 |
}
|
197 |
return null;
|
198 |
}
|
199 |
?>
|
200 |
+
<div class="sui-row">
|
201 |
+
<div class="sui-col">
|
202 |
<form method="post" class="scan-bulk-frm">
|
203 |
<input type="hidden" name="action" value="scanBulkAction"/>
|
204 |
<?php wp_nonce_field( 'scanBulkAction' ) ?>
|
205 |
+
<div class="bulk-action-bar">
|
206 |
+
<label class="sui-checkbox apply-all">
|
207 |
+
<input type="checkbox" id="apply-all"/>
|
208 |
+
<span aria-hidden="true"></span>
|
209 |
+
</label>
|
210 |
+
<select name="bulk" class="sui-select-sm bulk-action">
|
211 |
+
<option value=""><?php _e( "Bulk action", "defender-security" ) ?></option>
|
212 |
+
<?php if ( $this->type == Result_Item::STATUS_ISSUE ): ?>
|
213 |
+
<option value="ignore"><?php _e( "Ignore", "defender-security" ) ?></option>
|
214 |
+
<?php endif; ?>
|
215 |
+
<?php if ( $this->type == Result_Item::STATUS_IGNORED ): ?>
|
216 |
+
<option value="unignore"><?php _e( "Restore", "defender-security" ) ?></option>
|
217 |
+
<?php endif; ?>
|
218 |
+
</select>
|
219 |
+
<button type="submit" class="sui-button" disabled>
|
220 |
+
<?php _e( "Bulk Update", "defender-security" ) ?>
|
221 |
+
</button>
|
222 |
+
</div>
|
223 |
</form>
|
224 |
</div>
|
225 |
+
<div class="sui-col">
|
226 |
+
<div class="sui-pagination-wrap">
|
227 |
+
<span class="sui-pagination-results">
|
228 |
+
<?php printf( __( "%s results", "defender-security" ), $this->_pagination_args['total_items'] ) ?>
|
229 |
+
</span>
|
230 |
+
<ul class="sui-pagination">
|
231 |
+
<?php $this->pagination( 'top' ) ?>
|
232 |
+
</ul>
|
233 |
</div>
|
234 |
</div>
|
|
|
235 |
</div>
|
236 |
<?php
|
237 |
}
|
245 |
* @param object $item The current item
|
246 |
*/
|
247 |
public function single_row( $item ) {
|
248 |
+
echo '<tr id="mid-' . $item->id . '" class="sui-accordion-item sui-error">';
|
249 |
$this->single_row_columns( $item );
|
250 |
echo '</tr>';
|
251 |
+
if ( $this->type == Result_Item::STATUS_ISSUE ) {
|
252 |
+
echo '<tr class="sui-accordion-item-content">';
|
253 |
+
echo '<td colspan="' . $this->get_column_count() . '">' . $this->single_row_according_content( $item ) . '</td>';
|
254 |
+
echo '</tr>';
|
255 |
+
}
|
256 |
+
}
|
257 |
+
|
258 |
+
public function single_row_according_content( $item ) {
|
259 |
+
return $item->renderIssueContent();
|
260 |
}
|
261 |
|
262 |
/**
|
288 |
$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
|
289 |
$current_url = esc_url( $current_url );
|
290 |
|
291 |
+
$radius = 2;
|
292 |
if ( $current_page > 1 && $total_pages > $radius ) {
|
293 |
+
$links['prev'] = sprintf( '<li><a href="%s">%s</a></li>',
|
294 |
+
add_query_arg( 'paged', $current_page - 1, $current_url ), '<i class="sui-icon-chevron-left" aria-hidden="true"></i>' );
|
|
|
|
|
295 |
}
|
296 |
|
297 |
for ( $i = 1; $i <= $total_pages; $i ++ ) {
|
298 |
if ( ( $i >= 1 && $i <= $radius ) || ( $i > $current_page - 2 && $i < $current_page + 2 ) || ( $i <= $total_pages && $i > $total_pages - $radius ) ) {
|
299 |
if ( $i == $current_page ) {
|
300 |
+
$links[ $i ] = sprintf( '<li><a href="#" disabled="">%s</a></li>', $i );
|
301 |
} else {
|
302 |
+
$links[ $i ] = sprintf( '<li><a href="%s">%s</a></li>',
|
303 |
add_query_arg( 'paged', $i, $current_url ), $i );
|
304 |
}
|
305 |
} elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
|
306 |
+
$links[ $i ] = '<li><a href="#" disabled="">...</a></li>';
|
307 |
}
|
308 |
}
|
309 |
|
310 |
if ( $current_page < $total_pages && $total_pages > $radius ) {
|
311 |
+
$links['next'] = sprintf( '<li><a href="%s">%s</a></li>',
|
312 |
+
add_query_arg( 'paged', $current_page + 1, $current_url ), '<i class="sui-icon-chevron-right" aria-hidden="true"></i>' );
|
|
|
|
|
313 |
}
|
314 |
$output = join( "\n", $links );
|
315 |
$this->_pagination = $output;
|
317 |
echo $this->_pagination;
|
318 |
}
|
319 |
|
320 |
+
/**
|
321 |
+
* Generates the columns for a single row of the table
|
322 |
+
*
|
323 |
+
* @since 3.1.0
|
324 |
+
*
|
325 |
+
* @param object $item The current item
|
326 |
+
*/
|
327 |
+
protected function single_row_columns( $item ) {
|
328 |
+
list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
|
329 |
+
foreach ( $columns as $column_name => $column_display_name ) {
|
330 |
+
$classes = "$column_name column-$column_name";
|
331 |
+
if ( $primary === $column_name ) {
|
332 |
+
$classes .= ' sui-table-item-title';
|
333 |
+
}
|
334 |
+
|
335 |
+
if ( in_array( $column_name, $hidden ) ) {
|
336 |
+
$classes .= ' hidden';
|
337 |
+
}
|
338 |
+
|
339 |
+
// Comments column uses HTML in the display name with screen reader text.
|
340 |
+
// Instead of using esc_attr(), we strip tags to get closer to a user-friendly string.
|
341 |
+
$data = 'data-colname="' . wp_strip_all_tags( $column_display_name ) . '"';
|
342 |
+
|
343 |
+
$attributes = "class='$classes' $data";
|
344 |
+
|
345 |
+
if ( 'cb' === $column_name ) {
|
346 |
+
echo '<th scope="row" class="check-column">';
|
347 |
+
echo $this->column_cb( $item );
|
348 |
+
echo '</th>';
|
349 |
+
} elseif ( method_exists( $this, '_column_' . $column_name ) ) {
|
350 |
+
echo call_user_func(
|
351 |
+
array( $this, '_column_' . $column_name ),
|
352 |
+
$item,
|
353 |
+
$classes,
|
354 |
+
$data,
|
355 |
+
$primary
|
356 |
+
);
|
357 |
+
} elseif ( method_exists( $this, 'column_' . $column_name ) ) {
|
358 |
+
echo "<td $attributes>";
|
359 |
+
echo call_user_func( array( $this, 'column_' . $column_name ), $item );
|
360 |
+
echo "</td>";
|
361 |
+
} else {
|
362 |
+
echo "<td $attributes>";
|
363 |
+
echo $this->column_default( $item, $column_name );
|
364 |
+
echo "</td>";
|
365 |
+
}
|
366 |
+
}
|
367 |
+
}
|
368 |
+
|
369 |
}
|
app/module/scan/component/scan-api.php
CHANGED
@@ -130,10 +130,6 @@ class Scan_Api extends Component {
|
|
130 |
* @return array
|
131 |
*/
|
132 |
public static function getContentFiles() {
|
133 |
-
// return array(
|
134 |
-
// ABSPATH . 'trash/sample/content-image.php',
|
135 |
-
// //ABSPATH . 'trash/antispam-bee/inc/columns.class.php'
|
136 |
-
// );
|
137 |
$cache = Container::instance()->get( 'cache' );
|
138 |
$cached = $cache->get( self::CACHE_CONTENT, false );
|
139 |
if ( is_array( $cached ) && ! empty( $cached ) ) {
|
@@ -231,12 +227,16 @@ class Scan_Api extends Component {
|
|
231 |
}
|
232 |
|
233 |
$lastPost = $queue->key();
|
|
|
234 |
if ( $lastPost == 0 ) {
|
235 |
//this is newly, we will update the status text here
|
236 |
switch ( $step ) {
|
237 |
case 'core':
|
238 |
$model->statusText = __( "Analyzing WordPress Core...", "defender-security" );
|
239 |
break;
|
|
|
|
|
|
|
240 |
case 'content':
|
241 |
$model->statusText = __( "Analyzing WordPress Content...", "defender-security" );
|
242 |
break;
|
@@ -470,6 +470,7 @@ class Scan_Api extends Component {
|
|
470 |
$cache->delete( self::CACHE_CHECKSUMS );
|
471 |
$altCache = WP_Helper::getArrayCache();
|
472 |
$altCache->delete( 'lastScan' );
|
|
|
473 |
}
|
474 |
|
475 |
/**
|
130 |
* @return array
|
131 |
*/
|
132 |
public static function getContentFiles() {
|
|
|
|
|
|
|
|
|
133 |
$cache = Container::instance()->get( 'cache' );
|
134 |
$cached = $cache->get( self::CACHE_CONTENT, false );
|
135 |
if ( is_array( $cached ) && ! empty( $cached ) ) {
|
227 |
}
|
228 |
|
229 |
$lastPost = $queue->key();
|
230 |
+
|
231 |
if ( $lastPost == 0 ) {
|
232 |
//this is newly, we will update the status text here
|
233 |
switch ( $step ) {
|
234 |
case 'core':
|
235 |
$model->statusText = __( "Analyzing WordPress Core...", "defender-security" );
|
236 |
break;
|
237 |
+
case 'md5':
|
238 |
+
$model->statusText = __( "Prepare Wordpress Content...", "defender-security" );
|
239 |
+
break;
|
240 |
case 'content':
|
241 |
$model->statusText = __( "Analyzing WordPress Content...", "defender-security" );
|
242 |
break;
|
470 |
$cache->delete( self::CACHE_CHECKSUMS );
|
471 |
$altCache = WP_Helper::getArrayCache();
|
472 |
$altCache->delete( 'lastScan' );
|
473 |
+
File_Helper::deleteFolder( Utils::instance()->getDefUploadDir() . '/md5-scan' );
|
474 |
}
|
475 |
|
476 |
/**
|
app/module/scan/controller/main.php
CHANGED
@@ -18,6 +18,7 @@ class Main extends \WP_Defender\Controller {
|
|
18 |
protected $slug = 'wdf-scan';
|
19 |
public $layout = 'layout';
|
20 |
private $email_search;
|
|
|
21 |
|
22 |
/**
|
23 |
* @return array
|
@@ -58,12 +59,22 @@ class Main extends \WP_Defender\Controller {
|
|
58 |
$this->add_ajax_action( 'scanBulkAction', 'scanBulkAction' );
|
59 |
$this->add_ajax_action( 'pullSrcFile', 'pullSrcFile' );
|
60 |
$this->add_ajax_action( 'cancelScan', 'cancelScan' );
|
61 |
-
|
|
|
62 |
//init receiption
|
63 |
-
$
|
64 |
-
|
65 |
-
|
66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
//process scan in background
|
68 |
$this->add_action( 'processScanCron', 'processScanCron' );
|
69 |
//scan as schedule
|
@@ -105,7 +116,6 @@ class Main extends \WP_Defender\Controller {
|
|
105 |
wp_clear_scheduled_hook( 'processScanCron' );
|
106 |
wp_schedule_single_event( strtotime( '+1 minutes' ), 'processScanCron' );
|
107 |
}
|
108 |
-
|
109 |
}
|
110 |
|
111 |
public function cancelScan() {
|
@@ -333,7 +343,8 @@ class Main extends \WP_Defender\Controller {
|
|
333 |
$this->submitStatsToDev();
|
334 |
wp_send_json_success( array(
|
335 |
'mid' => 'mid-' . $model->id,
|
336 |
-
'message' => __( "This item has been resolved.", "defender-security" )
|
|
|
337 |
) );
|
338 |
} elseif ( $ret === false ) {
|
339 |
wp_send_json_error( array(
|
@@ -529,15 +540,25 @@ class Main extends \WP_Defender\Controller {
|
|
529 |
public function scripts() {
|
530 |
$data = array(
|
531 |
'scanning_title' => __( "Scan In Progress", "defender-security" ) . '<form class="scan-frm float-r"><input type="hidden" name="action" value="cancelScan"/>' . wp_nonce_field( 'cancelScan', '_wpnonce', true, false ) . '<button type="submit" class="button button-small button-secondary">' . __( "Cancel", "defender-security" ) . '</button></form>',
|
532 |
-
'no_issues' => __( "Your code is currently clean! There were no issues found during the last scan, though you can always perform a new scan anytime.", "defender-security" )
|
|
|
533 |
);
|
534 |
if ( $this->isInPage() ) {
|
535 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
536 |
wp_enqueue_script( 'defender' );
|
537 |
-
wp_enqueue_script( 'scan', wp_defender()->getPluginUrl() . 'app/module/scan/js/script.js' );
|
538 |
wp_enqueue_script( 'highlight.js', wp_defender()->getPluginUrl() . 'app/module/scan/js/highlight.pack.js' );
|
539 |
wp_enqueue_script( 'highlight-linenumbers.js', wp_defender()->getPluginUrl() . 'app/module/scan/js/highlightjs-line-numbers.js' );
|
540 |
wp_enqueue_style( 'defender' );
|
|
|
541 |
wp_localize_script( 'scan', 'scan', $data );
|
542 |
} else {
|
543 |
wp_enqueue_script( 'scan', wp_defender()->getPluginUrl() . 'app/module/scan/js/script.js' );
|
@@ -563,6 +584,9 @@ class Main extends \WP_Defender\Controller {
|
|
563 |
case 'settings':
|
564 |
$this->viewSettings();
|
565 |
break;
|
|
|
|
|
|
|
566 |
case 'reporting':
|
567 |
$this->viewAutomation();
|
568 |
break;
|
@@ -576,6 +600,27 @@ class Main extends \WP_Defender\Controller {
|
|
576 |
$this->renderPartial( 'new' );
|
577 |
}
|
578 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
579 |
/**
|
580 |
* Render scanning page, this will be move to behavior later due to free vs pro
|
581 |
*/
|
@@ -732,12 +777,18 @@ class Main extends \WP_Defender\Controller {
|
|
732 |
$count = $model->countAll( Result_Item::STATUS_ISSUE );
|
733 |
|
734 |
//Check one instead of validating both conditions
|
735 |
-
if ( $
|
736 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
737 |
}
|
738 |
|
739 |
-
$recipients = $settings->receipts;
|
740 |
-
|
741 |
if ( empty( $recipients ) ) {
|
742 |
return;
|
743 |
}
|
@@ -883,10 +934,17 @@ class Main extends \WP_Defender\Controller {
|
|
883 |
$total_ignored += $ignored_vuln;
|
884 |
$total_ignored += $ignored_content;
|
885 |
|
886 |
-
$premium_counts = array(
|
|
|
|
|
|
|
887 |
}
|
888 |
|
889 |
-
$counts = array(
|
|
|
|
|
|
|
|
|
890 |
|
891 |
$counts = array_merge( $counts, $premium_counts );
|
892 |
|
18 |
protected $slug = 'wdf-scan';
|
19 |
public $layout = 'layout';
|
20 |
private $email_search;
|
21 |
+
private $emailSearchNotification;
|
22 |
|
23 |
/**
|
24 |
* @return array
|
59 |
$this->add_ajax_action( 'scanBulkAction', 'scanBulkAction' );
|
60 |
$this->add_ajax_action( 'pullSrcFile', 'pullSrcFile' );
|
61 |
$this->add_ajax_action( 'cancelScan', 'cancelScan' );
|
62 |
+
$view = HTTP_Helper::retrieve_get( 'view' );
|
63 |
+
$id = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : 0;
|
64 |
//init receiption
|
65 |
+
if ( $view == 'notification' || ( defined( 'DOING_AJAX' ) && $id == 'scanNotificationReceipts' ) ) {
|
66 |
+
$this->emailSearchNotification = new Email_Search();
|
67 |
+
$this->emailSearchNotification->eId = 'scanNotificationReceipts';
|
68 |
+
$this->emailSearchNotification->settings = Settings::instance();
|
69 |
+
$this->emailSearchNotification->attribute = 'receiptsNotification';
|
70 |
+
$this->emailSearchNotification->add_hooks();
|
71 |
+
} elseif ( $view == 'reporting' || ( defined( 'DOING_AJAX' ) && $id == 'scan_receipts' ) ) {
|
72 |
+
$this->email_search = new Email_Search();
|
73 |
+
$this->email_search->eId = 'scan_receipts';
|
74 |
+
$this->email_search->settings = Settings::instance();
|
75 |
+
$this->email_search->add_hooks();
|
76 |
+
}
|
77 |
+
|
78 |
//process scan in background
|
79 |
$this->add_action( 'processScanCron', 'processScanCron' );
|
80 |
//scan as schedule
|
116 |
wp_clear_scheduled_hook( 'processScanCron' );
|
117 |
wp_schedule_single_event( strtotime( '+1 minutes' ), 'processScanCron' );
|
118 |
}
|
|
|
119 |
}
|
120 |
|
121 |
public function cancelScan() {
|
343 |
$this->submitStatsToDev();
|
344 |
wp_send_json_success( array(
|
345 |
'mid' => 'mid-' . $model->id,
|
346 |
+
'message' => __( "This item has been resolved.", "defender-security" ),
|
347 |
+
'counts' => $this->getIssuesAndIgnoredCounts( $model->parentId )
|
348 |
) );
|
349 |
} elseif ( $ret === false ) {
|
350 |
wp_send_json_error( array(
|
540 |
public function scripts() {
|
541 |
$data = array(
|
542 |
'scanning_title' => __( "Scan In Progress", "defender-security" ) . '<form class="scan-frm float-r"><input type="hidden" name="action" value="cancelScan"/>' . wp_nonce_field( 'cancelScan', '_wpnonce', true, false ) . '<button type="submit" class="button button-small button-secondary">' . __( "Cancel", "defender-security" ) . '</button></form>',
|
543 |
+
'no_issues' => __( "Your code is currently clean! There were no issues found during the last scan, though you can always perform a new scan anytime.", "defender-security" ),
|
544 |
+
'url' => network_admin_url( 'admin.php?page=wdf-scan' )
|
545 |
);
|
546 |
if ( $this->isInPage() ) {
|
547 |
+
$view = HTTP_Helper::retrieve_get( 'view' );
|
548 |
+
//init receiption
|
549 |
+
if ( $view == 'notification' ) {
|
550 |
+
$this->emailSearchNotification->add_script();
|
551 |
+
} elseif ( $view == 'reporting' ) {
|
552 |
+
$this->email_search->add_script();
|
553 |
+
}
|
554 |
+
wp_enqueue_script( 'wpmudev-sui' );
|
555 |
+
wp_enqueue_style( 'wpmudev-sui' );
|
556 |
+
|
557 |
wp_enqueue_script( 'defender' );
|
|
|
558 |
wp_enqueue_script( 'highlight.js', wp_defender()->getPluginUrl() . 'app/module/scan/js/highlight.pack.js' );
|
559 |
wp_enqueue_script( 'highlight-linenumbers.js', wp_defender()->getPluginUrl() . 'app/module/scan/js/highlightjs-line-numbers.js' );
|
560 |
wp_enqueue_style( 'defender' );
|
561 |
+
wp_enqueue_script( 'scan', wp_defender()->getPluginUrl() . 'app/module/scan/js/script.js' );
|
562 |
wp_localize_script( 'scan', 'scan', $data );
|
563 |
} else {
|
564 |
wp_enqueue_script( 'scan', wp_defender()->getPluginUrl() . 'app/module/scan/js/script.js' );
|
584 |
case 'settings':
|
585 |
$this->viewSettings();
|
586 |
break;
|
587 |
+
case 'notification':
|
588 |
+
$this->viewNotification();
|
589 |
+
break;
|
590 |
case 'reporting':
|
591 |
$this->viewAutomation();
|
592 |
break;
|
600 |
$this->renderPartial( 'new' );
|
601 |
}
|
602 |
|
603 |
+
private function viewNotification() {
|
604 |
+
$model = Scan_Api::getLastScan();
|
605 |
+
if ( ! is_object( $model ) ) {
|
606 |
+
return $this->viewBrandNew();
|
607 |
+
}
|
608 |
+
$activeScan = Scan_Api::getActiveScan();
|
609 |
+
if ( is_object( $activeScan ) && $activeScan->status != Scan\Model\Scan::STATUS_ERROR ) {
|
610 |
+
$this->viewScanning();
|
611 |
+
} else {
|
612 |
+
$setting = Scan\Model\Settings::instance();
|
613 |
+
//$view = wp_defender()->isFree ? 'setting-free' : 'setting';
|
614 |
+
$view = 'notification';
|
615 |
+
$this->render( $view, array(
|
616 |
+
'setting' => $setting,
|
617 |
+
'model' => $model,
|
618 |
+
'lastScanDate' => $this->getLastScanDate(),
|
619 |
+
'email' => $this->emailSearchNotification
|
620 |
+
) );
|
621 |
+
}
|
622 |
+
}
|
623 |
+
|
624 |
/**
|
625 |
* Render scanning page, this will be move to behavior later due to free vs pro
|
626 |
*/
|
777 |
$count = $model->countAll( Result_Item::STATUS_ISSUE );
|
778 |
|
779 |
//Check one instead of validating both conditions
|
780 |
+
if ( $model->logs == 'report' ) {
|
781 |
+
if ( $settings->always_send == false && $count == 0 ) {
|
782 |
+
return;
|
783 |
+
}
|
784 |
+
$recipients = $settings->receipts;
|
785 |
+
} else {
|
786 |
+
if ( $settings->alwaysSendNotification == false && $count == 0 ) {
|
787 |
+
return;
|
788 |
+
}
|
789 |
+
$recipients = $settings->receiptsNotification;
|
790 |
}
|
791 |
|
|
|
|
|
792 |
if ( empty( $recipients ) ) {
|
793 |
return;
|
794 |
}
|
934 |
$total_ignored += $ignored_vuln;
|
935 |
$total_ignored += $ignored_content;
|
936 |
|
937 |
+
$premium_counts = array(
|
938 |
+
'vuln_issues' => $issues_vuln == 0 ? '<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' : $issues_vuln,
|
939 |
+
'content_issues' => $issues_content == 0 ? '<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' : $issues_content
|
940 |
+
);
|
941 |
}
|
942 |
|
943 |
+
$counts = array(
|
944 |
+
'issues' => $total_issues,
|
945 |
+
'issues_wp' => $issues_wp == 0 ? '<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' : $issues_wp,
|
946 |
+
'ignored' => $total_ignored
|
947 |
+
);
|
948 |
|
949 |
$counts = array_merge( $counts, $premium_counts );
|
950 |
|
app/module/scan/js/script.js
CHANGED
@@ -1,7 +1,10 @@
|
|
1 |
jQuery(function ($) {
|
2 |
//bind form handler for every form inside scan section
|
3 |
WDScan.formHandler();
|
4 |
-
|
|
|
|
|
|
|
5 |
//bind handler for new scan form
|
6 |
$('div.wdf-scanning').on('form-submitted', function (e, data, form) {
|
7 |
if (form.attr('id') != 'start-a-scan') {
|
@@ -14,33 +17,18 @@ jQuery(function ($) {
|
|
14 |
Defender.showNotification('error', data.data.message);
|
15 |
}
|
16 |
});
|
17 |
-
|
18 |
-
$('body').on('click', '#next_issue', function () {
|
19 |
-
var parent = $(this).parent().parent().find('.inner-sourcecode').first();
|
20 |
-
var issues = parent.find('del');
|
21 |
-
if (issues.size() == 0) {
|
22 |
-
return;
|
23 |
-
}
|
24 |
-
if (current_issue === null) {
|
25 |
-
current_issue = 0;
|
26 |
-
} else {
|
27 |
-
current_issue = current_issue + 1;
|
28 |
-
if (issues[current_issue] === undefined) {
|
29 |
-
current_issue = 0;
|
30 |
-
}
|
31 |
-
}
|
32 |
-
console.log($(issues[current_issue]).text());
|
33 |
-
var pos = $(issues[current_issue]).position();
|
34 |
-
parent.scrollTop(pos.top);
|
35 |
-
})
|
36 |
//processing scan
|
|
|
37 |
if ($('#scanning').size() > 0) {
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
|
|
43 |
}
|
|
|
44 |
if ($('#process-scan').size() > 0) {
|
45 |
$('#process-scan').submit();
|
46 |
$('div.wdf-scanning').on('form-submitted', function (e, data, form) {
|
@@ -50,9 +38,9 @@ jQuery(function ($) {
|
|
50 |
if (data.success == true) {
|
51 |
location.reload();
|
52 |
} else {
|
53 |
-
$('.
|
54 |
-
$('.
|
55 |
-
$('.
|
56 |
setTimeout(function () {
|
57 |
$('#process-scan').submit();
|
58 |
}, 1500);
|
@@ -78,10 +66,9 @@ jQuery(function ($) {
|
|
78 |
if (data.success == true) {
|
79 |
//show notification
|
80 |
Defender.showNotification('success', data.data.message);
|
81 |
-
//close the modal form
|
82 |
-
WDP.closeOverlay();
|
83 |
//remove the line
|
84 |
$('#' + data.data.mid).fadeOut('200', function () {
|
|
|
85 |
$('#' + data.data.mid).remove();
|
86 |
WDScan.handleFileIssues(data);
|
87 |
})
|
@@ -101,6 +88,10 @@ jQuery(function ($) {
|
|
101 |
$('#' + data.data.mid).fadeOut('200', function () {
|
102 |
$('#' + data.data.mid).remove();
|
103 |
WDScan.handleFileIssues(data);
|
|
|
|
|
|
|
|
|
104 |
})
|
105 |
} else {
|
106 |
Defender.showNotification('error', data.data.message);
|
@@ -112,7 +103,7 @@ jQuery(function ($) {
|
|
112 |
var confirm_box = parent.find('.confirm-box');
|
113 |
$(this).addClass('wd-hide');
|
114 |
confirm_box.removeClass('wd-hide');
|
115 |
-
confirm_box.find('.button-
|
116 |
confirm_box.addClass('wd-hide');
|
117 |
parent.find('.delete-mitem').removeClass('wd-hide');
|
118 |
})
|
@@ -125,8 +116,9 @@ jQuery(function ($) {
|
|
125 |
//show notification
|
126 |
Defender.showNotification('success', data.data.message);
|
127 |
//close the modal form
|
128 |
-
|
129 |
$('#' + data.data.mid).fadeOut('200', function () {
|
|
|
130 |
$('#' + data.data.mid).remove();
|
131 |
WDScan.handleFileIssues(data);
|
132 |
})
|
@@ -145,7 +137,7 @@ jQuery(function ($) {
|
|
145 |
parent.html(data.data.html);
|
146 |
|
147 |
// hljs.highlightBlock(parent.find('pre code'));
|
148 |
-
|
149 |
hljs.highlightBlock(block);
|
150 |
hljs.lineNumbersBlock(block);
|
151 |
});
|
@@ -163,8 +155,8 @@ jQuery(function ($) {
|
|
163 |
//show notification
|
164 |
Defender.showNotification('success', data.data.message);
|
165 |
//close the modal form
|
166 |
-
WDP.closeOverlay();
|
167 |
$('#' + data.data.mid).fadeOut('200', function () {
|
|
|
168 |
$('#' + data.data.mid).remove();
|
169 |
WDScan.handleFileIssues(data);
|
170 |
})
|
@@ -178,9 +170,12 @@ jQuery(function ($) {
|
|
178 |
}
|
179 |
|
180 |
if (data.success == true) {
|
181 |
-
WDP.closeOverlay();
|
182 |
//show notification
|
183 |
Defender.showNotification('success', data.data.message);
|
|
|
|
|
|
|
|
|
184 |
} else {
|
185 |
Defender.showNotification('error', data.data.message);
|
186 |
}
|
@@ -188,9 +183,9 @@ jQuery(function ($) {
|
|
188 |
|
189 |
$('select[name="frequency"]').change(function () {
|
190 |
if ($(this).val() == '1') {
|
191 |
-
$(this).closest('.
|
192 |
} else {
|
193 |
-
$(this).closest('.
|
194 |
}
|
195 |
}).change();
|
196 |
|
@@ -198,6 +193,13 @@ jQuery(function ($) {
|
|
198 |
$('#apply-all').click(function () {
|
199 |
$('.scan-chk').prop('checked', $(this).prop('checked'));
|
200 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
$('.scan-bulk-frm').submit(function () {
|
202 |
var data = $(this).serialize();
|
203 |
$('.scan-chk').each(function () {
|
@@ -227,14 +229,6 @@ jQuery(function ($) {
|
|
227 |
})
|
228 |
return false;
|
229 |
});
|
230 |
-
|
231 |
-
$('.column-col_action a').click(function () {
|
232 |
-
setTimeout(function () {
|
233 |
-
if ($('.source-code:visible').size() > 0) {
|
234 |
-
$('.source-code:visible').find('form').submit();
|
235 |
-
}
|
236 |
-
}, 500)
|
237 |
-
})
|
238 |
})
|
239 |
|
240 |
window.WDScan = window.WDScan || {};
|
@@ -248,13 +242,13 @@ WDScan.formHandler = function () {
|
|
248 |
url: ajaxurl,
|
249 |
data: data,
|
250 |
beforeSend: function () {
|
251 |
-
that.find('.button').attr('disabled', 'disabled');
|
252 |
},
|
253 |
success: function (data) {
|
254 |
if (data.data != undefined && data.data.url != undefined) {
|
255 |
location.href = data.data.url;
|
256 |
} else {
|
257 |
-
that.find('.button').removeAttr('disabled');
|
258 |
jq('div.wdf-scanning').trigger('form-submitted', [data, that])
|
259 |
}
|
260 |
},
|
@@ -266,102 +260,66 @@ WDScan.formHandler = function () {
|
|
266 |
})
|
267 |
}
|
268 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
//Refresh file issues counts
|
270 |
WDScan.handleFileIssues = function (data) {
|
271 |
var jq = jQuery;
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
}
|
293 |
-
jq('.def-issues-below').show();
|
294 |
-
jq('.def-issues').html(data.data.counts.issues);
|
295 |
-
if (jq('.def-issues-top-right-wp i:not(.tag-error)') && data.data.counts.issues_wp > 0) {
|
296 |
-
jq('.def-issues-top-right-wp').html('<span class="def-tag tag-error">' + data.data.counts.issues_wp + '</span>');
|
297 |
-
} else {
|
298 |
-
if (data.data.counts.issues_wp > 0) {
|
299 |
-
jq('.def-issues-top-right-wp .tag-error').html(data.data.counts.issues_wp);
|
300 |
-
} else {
|
301 |
-
if (jq('.def-issues-top-right-wp span:not(.icon-tick)')) {
|
302 |
-
jq('.def-issues-top-right-wp').html('<i class="def-icon icon-tick"></i>');
|
303 |
-
}
|
304 |
-
}
|
305 |
-
|
306 |
-
}
|
307 |
-
if (data.data.counts.vuln_issues != undefined) {
|
308 |
-
if (jq('.def-issues-top-right-pt i:not(.tag-error)') && data.data.counts.vuln_issues > 0) {
|
309 |
-
jq('.def-issues-top-right-pt').html('<span class="def-tag tag-error">' + data.data.counts.vuln_issues + '</span>');
|
310 |
-
} else {
|
311 |
-
if (data.data.counts.vuln_issues > 0) {
|
312 |
-
jq('.def-issues-top-right-pt .tag-error').html(data.data.counts.vuln_issues);
|
313 |
-
} else {
|
314 |
-
if (jq('.def-issues-top-right-pt span:not(.icon-tick)')) {
|
315 |
-
jq('.def-issues-top-right-pt').html('<i class="def-icon icon-tick"></i>');
|
316 |
-
}
|
317 |
-
}
|
318 |
-
}
|
319 |
-
}
|
320 |
-
if (data.data.counts.content_issues != undefined) {
|
321 |
-
if (jq('.def-issues-top-right-sc i:not(.tag-error)') && data.data.counts.content_issues > 0) {
|
322 |
-
jq('.def-issues-top-right-sc').html('<span class="def-tag tag-error">' + data.data.counts.content_issues + '</span>');
|
323 |
-
} else {
|
324 |
-
if (data.data.counts.content_issues > 0) {
|
325 |
-
jq('.def-issues-top-right-sc .tag-error').html(data.data.counts.content_issues);
|
326 |
-
} else {
|
327 |
-
if (jq('.def-issues-top-right-sc span:not(.icon-tick)')) {
|
328 |
-
jq('.def-issues-top-right-sc').html('<i class="def-icon icon-tick"></i>');
|
329 |
-
}
|
330 |
-
}
|
331 |
-
}
|
332 |
-
}
|
333 |
-
} else {
|
334 |
-
//Show success messages
|
335 |
-
jq('.def-issues-top-left').html(0);
|
336 |
-
if (jq('.def-issues-top-left-icon i:not(.icon-tick)')) {
|
337 |
-
jq('.def-issues-top-left-icon').html('<i class="def-icon icon-tick"></i>');
|
338 |
-
}
|
339 |
-
if (jq('.def-issues-top-right-wp span:not(.icon-tick)')) {
|
340 |
-
jq('.def-issues-top-right-wp').html('<i class="def-icon icon-tick"></i>');
|
341 |
-
}
|
342 |
-
if (data.data.counts.vuln_issues != undefined) {
|
343 |
-
if (jq('.def-issues-top-right-pt span:not(.icon-tick)')) {
|
344 |
-
jq('.def-issues-top-right-pt').html('<i class="def-icon icon-tick"></i>');
|
345 |
-
}
|
346 |
-
if (jq('.def-issues-top-right-sc span:not(.icon-tick)')) {
|
347 |
-
jq('.def-issues-top-right-sc').html('<i class="def-icon icon-tick"></i>');
|
348 |
-
}
|
349 |
-
}
|
350 |
-
jq('.def-issues-summary').hide();
|
351 |
-
jq('.def-issues-below').hide();
|
352 |
-
if (jq('.issues-box-content').length) {
|
353 |
-
jq('.issues-box-content').html('<div class="well well-green with-cap"><i class="def-icon icon-tick"></i>' + scan.no_issues + '</div>');
|
354 |
-
}
|
355 |
-
}
|
356 |
|
|
|
|
|
|
|
|
|
|
|
|
|
357 |
}
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
}
|
365 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
}
|
367 |
}
|
1 |
jQuery(function ($) {
|
2 |
//bind form handler for every form inside scan section
|
3 |
WDScan.formHandler();
|
4 |
+
WDScan.formatCode();
|
5 |
+
WDScan.initAppear();
|
6 |
+
WDScan.showNextIssue();
|
7 |
+
WDScan.typeFilter();
|
8 |
//bind handler for new scan form
|
9 |
$('div.wdf-scanning').on('form-submitted', function (e, data, form) {
|
10 |
if (form.attr('id') != 'start-a-scan') {
|
17 |
Defender.showNotification('error', data.data.message);
|
18 |
}
|
19 |
});
|
20 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
//processing scan
|
22 |
+
//show the scan dialog
|
23 |
if ($('#scanning').size() > 0) {
|
24 |
+
var listen = setInterval(function () {
|
25 |
+
if (SUI.dialogs !== undefined) {
|
26 |
+
SUI.dialogs['scanning'].show();
|
27 |
+
clearInterval(listen);
|
28 |
+
}
|
29 |
+
}, 500)
|
30 |
}
|
31 |
+
//show scan progress
|
32 |
if ($('#process-scan').size() > 0) {
|
33 |
$('#process-scan').submit();
|
34 |
$('div.wdf-scanning').on('form-submitted', function (e, data, form) {
|
38 |
if (data.success == true) {
|
39 |
location.reload();
|
40 |
} else {
|
41 |
+
$('.sui-progress-state-text').text(data.data.statusText);
|
42 |
+
$('.sui-progress-text span').text(data.data.percent + '%');
|
43 |
+
$('.sui-progress-bar span').css('width', data.data.percent + '%');
|
44 |
setTimeout(function () {
|
45 |
$('#process-scan').submit();
|
46 |
}, 1500);
|
66 |
if (data.success == true) {
|
67 |
//show notification
|
68 |
Defender.showNotification('success', data.data.message);
|
|
|
|
|
69 |
//remove the line
|
70 |
$('#' + data.data.mid).fadeOut('200', function () {
|
71 |
+
$('#' + data.data.mid).next('.sui-accordion-item-content').remove();
|
72 |
$('#' + data.data.mid).remove();
|
73 |
WDScan.handleFileIssues(data);
|
74 |
})
|
88 |
$('#' + data.data.mid).fadeOut('200', function () {
|
89 |
$('#' + data.data.mid).remove();
|
90 |
WDScan.handleFileIssues(data);
|
91 |
+
var count = $('#scan-result-table tbody tr').size();
|
92 |
+
if (count === 0) {
|
93 |
+
location.reload();
|
94 |
+
}
|
95 |
})
|
96 |
} else {
|
97 |
Defender.showNotification('error', data.data.message);
|
103 |
var confirm_box = parent.find('.confirm-box');
|
104 |
$(this).addClass('wd-hide');
|
105 |
confirm_box.removeClass('wd-hide');
|
106 |
+
confirm_box.find('.sui-button-ghost').unbind('click').bind('click', function () {
|
107 |
confirm_box.addClass('wd-hide');
|
108 |
parent.find('.delete-mitem').removeClass('wd-hide');
|
109 |
})
|
116 |
//show notification
|
117 |
Defender.showNotification('success', data.data.message);
|
118 |
//close the modal form
|
119 |
+
|
120 |
$('#' + data.data.mid).fadeOut('200', function () {
|
121 |
+
$('#' + data.data.mid).next('.sui-accordion-item-content').remove();
|
122 |
$('#' + data.data.mid).remove();
|
123 |
WDScan.handleFileIssues(data);
|
124 |
})
|
137 |
parent.html(data.data.html);
|
138 |
|
139 |
// hljs.highlightBlock(parent.find('pre code'));
|
140 |
+
parent.find('pre code').each(function (i, block) {
|
141 |
hljs.highlightBlock(block);
|
142 |
hljs.lineNumbersBlock(block);
|
143 |
});
|
155 |
//show notification
|
156 |
Defender.showNotification('success', data.data.message);
|
157 |
//close the modal form
|
|
|
158 |
$('#' + data.data.mid).fadeOut('200', function () {
|
159 |
+
$('#' + data.data.mid).next('.sui-accordion-item-content').remove();
|
160 |
$('#' + data.data.mid).remove();
|
161 |
WDScan.handleFileIssues(data);
|
162 |
})
|
170 |
}
|
171 |
|
172 |
if (data.success == true) {
|
|
|
173 |
//show notification
|
174 |
Defender.showNotification('success', data.data.message);
|
175 |
+
//close any dialog if any
|
176 |
+
$.each(SUI.dialogs, function (i, v) {
|
177 |
+
v.hide();
|
178 |
+
})
|
179 |
} else {
|
180 |
Defender.showNotification('error', data.data.message);
|
181 |
}
|
183 |
|
184 |
$('select[name="frequency"]').change(function () {
|
185 |
if ($(this).val() == '1') {
|
186 |
+
$(this).closest('.sui-form-field').next('div.sui-form-field').hide();
|
187 |
} else {
|
188 |
+
$(this).closest('.sui-form-field').next('div.sui-form-field').show();
|
189 |
}
|
190 |
}).change();
|
191 |
|
193 |
$('#apply-all').click(function () {
|
194 |
$('.scan-chk').prop('checked', $(this).prop('checked'));
|
195 |
});
|
196 |
+
$('select[name="bulk"]').change(function () {
|
197 |
+
if ($(this).val() != "") {
|
198 |
+
$('.scan-bulk-frm button').removeAttr('disabled');
|
199 |
+
} else {
|
200 |
+
$('.scan-bulk-frm button').attr('disabled', 'disabled');
|
201 |
+
}
|
202 |
+
})
|
203 |
$('.scan-bulk-frm').submit(function () {
|
204 |
var data = $(this).serialize();
|
205 |
$('.scan-chk').each(function () {
|
229 |
})
|
230 |
return false;
|
231 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
})
|
233 |
|
234 |
window.WDScan = window.WDScan || {};
|
242 |
url: ajaxurl,
|
243 |
data: data,
|
244 |
beforeSend: function () {
|
245 |
+
that.find('.sui-button, .sui-button-icon').attr('disabled', 'disabled');
|
246 |
},
|
247 |
success: function (data) {
|
248 |
if (data.data != undefined && data.data.url != undefined) {
|
249 |
location.href = data.data.url;
|
250 |
} else {
|
251 |
+
that.find('.sui-button').removeAttr('disabled');
|
252 |
jq('div.wdf-scanning').trigger('form-submitted', [data, that])
|
253 |
}
|
254 |
},
|
260 |
})
|
261 |
}
|
262 |
|
263 |
+
WDScan.formatCode = function () {
|
264 |
+
jQuery('pre code').each(function (i, block) {
|
265 |
+
hljs.highlightBlock(block);
|
266 |
+
hljs.lineNumbersBlock(block);
|
267 |
+
});
|
268 |
+
}
|
269 |
+
|
270 |
//Refresh file issues counts
|
271 |
WDScan.handleFileIssues = function (data) {
|
272 |
var jq = jQuery;
|
273 |
+
jq.each(data.data.counts, function (k, v) {
|
274 |
+
jq('.' + k).html(v);
|
275 |
+
})
|
276 |
+
}
|
277 |
+
var current_issue = null;
|
278 |
+
WDScan.initAppear = function () {
|
279 |
+
jQuery('.sui-accordion-item').click(function () {
|
280 |
+
var that = jQuery(this);
|
281 |
+
current_issue = null;
|
282 |
+
if (that.hasClass('source-pulled')) {
|
283 |
+
return;
|
284 |
+
}
|
285 |
+
var container = jQuery(this).next('.sui-accordion-item-content').first();
|
286 |
+
var form = container.find('.pull-src');
|
287 |
+
if (form.size() > 0) {
|
288 |
+
form.submit();
|
289 |
+
}
|
290 |
+
that.addClass('source-pulled');
|
291 |
+
})
|
292 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
|
294 |
+
WDScan.showNextIssue = function () {
|
295 |
+
jQuery('body').on('click', '#next_issue', function () {
|
296 |
+
var parent = jQuery(this).closest('.sui-box').find('.inner-sourcecode').first();
|
297 |
+
var issues = parent.find('del');
|
298 |
+
if (issues.size() == 0) {
|
299 |
+
return;
|
300 |
}
|
301 |
+
if (current_issue === null) {
|
302 |
+
current_issue = 0;
|
303 |
+
} else {
|
304 |
+
current_issue = current_issue + 1;
|
305 |
+
if (issues[current_issue] === undefined) {
|
306 |
+
current_issue = 0;
|
307 |
}
|
308 |
}
|
309 |
+
var pos = jQuery(issues[current_issue]).position();
|
310 |
+
parent.scrollTop(pos.top);
|
311 |
+
})
|
312 |
+
}
|
313 |
+
|
314 |
+
WDScan.typeFilter = function () {
|
315 |
+
if (jQuery('#type-filter').size() > 0) {
|
316 |
+
var urlOrigin = scan.url;
|
317 |
+
jQuery('#type-filter').change(function () {
|
318 |
+
var type = jQuery(this).val();
|
319 |
+
if (type !== "") {
|
320 |
+
urlOrigin += '&type=' + type;
|
321 |
+
}
|
322 |
+
location.href = urlOrigin;
|
323 |
+
})
|
324 |
}
|
325 |
}
|
app/module/scan/model/scan.php
CHANGED
@@ -119,10 +119,11 @@ class Scan extends Model {
|
|
119 |
*
|
120 |
* @return Result_Item[]
|
121 |
*/
|
122 |
-
public function getItems( $offset = 0, $
|
123 |
$items = Result_Item::findAll( array(
|
124 |
'parentId' => $this->id,
|
125 |
-
'status' => $
|
|
|
126 |
), null, null, $offset );
|
127 |
|
128 |
return $items;
|
119 |
*
|
120 |
* @return Result_Item[]
|
121 |
*/
|
122 |
+
public function getItems( $offset = 0, $status = Result_Item::STATUS_ISSUE, $type = null ) {
|
123 |
$items = Result_Item::findAll( array(
|
124 |
'parentId' => $this->id,
|
125 |
+
'status' => $status,
|
126 |
+
'type' => $type
|
127 |
), null, null, $offset );
|
128 |
|
129 |
return $items;
|
app/module/scan/model/settings.php
CHANGED
@@ -10,6 +10,7 @@ use Hammer\Helper\WP_Helper;
|
|
10 |
use Hammer\Queue\Queue;
|
11 |
use WP_Defender\Module\Scan\Behavior\Core_Scan;
|
12 |
use WP_Defender\Module\Scan\Behavior\Pro\Content_Scan;
|
|
|
13 |
use WP_Defender\Module\Scan\Behavior\Pro\Vuln_Scan;
|
14 |
use WP_Defender\Module\Scan\Component\Scan_Api;
|
15 |
|
@@ -39,12 +40,21 @@ class Settings extends \Hammer\WP\Settings {
|
|
39 |
*/
|
40 |
public $receipts = array();
|
41 |
|
|
|
|
|
|
|
|
|
|
|
42 |
/**
|
43 |
* Toggle notification on or off
|
44 |
* @var bool
|
45 |
*/
|
46 |
public $notification = true;
|
47 |
|
|
|
|
|
|
|
|
|
48 |
/**
|
49 |
* Toggle only sending error email or all email
|
50 |
*
|
@@ -52,6 +62,11 @@ class Settings extends \Hammer\WP\Settings {
|
|
52 |
*/
|
53 |
public $always_send = false;
|
54 |
|
|
|
|
|
|
|
|
|
|
|
55 |
/**
|
56 |
* Maximum filesize to scan, only apply for content scan
|
57 |
* @var int
|
@@ -126,7 +141,8 @@ WP Defender
|
|
126 |
Official WPMU DEV Superhero', "defender-security" );
|
127 |
//call parent to load stored
|
128 |
if ( is_admin() || is_network_admin() && current_user_can( 'manage_options' ) ) {
|
129 |
-
$this->receipts[]
|
|
|
130 |
//default is weekly
|
131 |
$this->day = date( 'l' );
|
132 |
$hour = date( 'H', current_time( 'timestamp' ) );
|
@@ -156,6 +172,7 @@ Official WPMU DEV Superhero', "defender-security" );
|
|
156 |
}
|
157 |
|
158 |
if ( $this->scan_content && wp_defender()->isFree != true ) {
|
|
|
159 |
$scans[] = 'content';
|
160 |
}
|
161 |
|
@@ -206,6 +223,22 @@ Official WPMU DEV Superhero', "defender-security" );
|
|
206 |
$queue->args['owner'] = $queue;
|
207 |
$queue->attachBehavior( 'vuln', new Vuln_Scan() );
|
208 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
return $queue;
|
210 |
break;
|
211 |
case 'content':
|
10 |
use Hammer\Queue\Queue;
|
11 |
use WP_Defender\Module\Scan\Behavior\Core_Scan;
|
12 |
use WP_Defender\Module\Scan\Behavior\Pro\Content_Scan;
|
13 |
+
use WP_Defender\Module\Scan\Behavior\Pro\MD5_Scan;
|
14 |
use WP_Defender\Module\Scan\Behavior\Pro\Vuln_Scan;
|
15 |
use WP_Defender\Module\Scan\Component\Scan_Api;
|
16 |
|
40 |
*/
|
41 |
public $receipts = array();
|
42 |
|
43 |
+
/**
|
44 |
+
* @var array
|
45 |
+
*/
|
46 |
+
public $receiptsNotification = array();
|
47 |
+
|
48 |
/**
|
49 |
* Toggle notification on or off
|
50 |
* @var bool
|
51 |
*/
|
52 |
public $notification = true;
|
53 |
|
54 |
+
/**
|
55 |
+
* @var bool
|
56 |
+
*/
|
57 |
+
public $report = false;
|
58 |
/**
|
59 |
* Toggle only sending error email or all email
|
60 |
*
|
62 |
*/
|
63 |
public $always_send = false;
|
64 |
|
65 |
+
/**
|
66 |
+
* @var bool
|
67 |
+
*/
|
68 |
+
public $alwaysSendNotification = false;
|
69 |
+
|
70 |
/**
|
71 |
* Maximum filesize to scan, only apply for content scan
|
72 |
* @var int
|
141 |
Official WPMU DEV Superhero', "defender-security" );
|
142 |
//call parent to load stored
|
143 |
if ( is_admin() || is_network_admin() && current_user_can( 'manage_options' ) ) {
|
144 |
+
$this->receipts[] = get_current_user_id();
|
145 |
+
$this->receiptsNotification[] = get_current_user_id();
|
146 |
//default is weekly
|
147 |
$this->day = date( 'l' );
|
148 |
$hour = date( 'H', current_time( 'timestamp' ) );
|
172 |
}
|
173 |
|
174 |
if ( $this->scan_content && wp_defender()->isFree != true ) {
|
175 |
+
$scans[] = 'md5';
|
176 |
$scans[] = 'content';
|
177 |
}
|
178 |
|
223 |
$queue->args['owner'] = $queue;
|
224 |
$queue->attachBehavior( 'vuln', new Vuln_Scan() );
|
225 |
|
226 |
+
return $queue;
|
227 |
+
break;
|
228 |
+
case 'md5':
|
229 |
+
if ( ! class_exists( '\WP_Defender\Module\Scan\Behavior\Pro\Md5_Scan' ) ) {
|
230 |
+
return null;
|
231 |
+
}
|
232 |
+
$plugins = array();
|
233 |
+
foreach ( get_plugins() as $slug => $plugin ) {
|
234 |
+
$plugin['slug'] = $slug;
|
235 |
+
$plugins[] = $plugin;
|
236 |
+
}
|
237 |
+
$queue = new Queue( array_merge( $plugins, wp_get_themes() ), 'md5', true );
|
238 |
+
$queue->args = $args;
|
239 |
+
$queue->args['owner'] = $queue;
|
240 |
+
$queue->attachBehavior( 'md5', new MD5_Scan() );
|
241 |
+
|
242 |
return $queue;
|
243 |
break;
|
244 |
case 'content':
|
app/module/scan/view/automation-free.php
CHANGED
@@ -1,67 +1,39 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
4 |
-
|
5 |
-
|
6 |
</div>
|
7 |
-
<div class="box-
|
8 |
-
<
|
9 |
-
<
|
10 |
-
|
11 |
-
</
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
</div>
|
19 |
-
<div class="column">
|
20 |
-
<span class="toggle">
|
21 |
-
<input type="checkbox" class="toggle-checkbox" name="notification" value="1" id="chk1"/>
|
22 |
-
<label class="toggle-label" for="chk1"></label>
|
23 |
</span>
|
24 |
-
<label><?php _e( "Run regular scans & reports", "defender-security" ) ?></label>
|
25 |
-
<div class="clear mline"></div>
|
26 |
-
<div class="well well-white schedule-box">
|
27 |
-
<strong><?php _e( "Schedule", "defender-security" ) ?></strong>
|
28 |
-
<label><?php _e( "Frequency", "defender-security" ) ?></label>
|
29 |
-
<select name="frequency">
|
30 |
-
<option value="1"><?php _e( "Daily", "defender-security" ) ?></option>
|
31 |
-
</select>
|
32 |
-
<div class="days-container">
|
33 |
-
<label><?php _e( "Day of the week", "defender-security" ) ?></label>
|
34 |
-
<select name="day">
|
35 |
-
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getDaysOfWeek() as $day ): ?>
|
36 |
-
<option value="<?php echo $day ?>"><?php echo ucfirst( $day ) ?></option>
|
37 |
-
<?php endforeach; ?>
|
38 |
-
</select>
|
39 |
-
</div>
|
40 |
-
<label><?php _e( "Time of day", "defender-security" ) ?></label>
|
41 |
-
<select name="time">
|
42 |
-
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getTimes() as $time ): ?>
|
43 |
-
<option value="<?php echo $time ?>"><?php echo strftime( '%I:%M %p', strtotime( $time ) ) ?></option>
|
44 |
-
<?php endforeach;; ?>
|
45 |
-
</select>
|
46 |
-
</div>
|
47 |
-
</div>
|
48 |
</div>
|
49 |
-
<div class="
|
50 |
-
<div class="
|
51 |
-
<
|
52 |
-
|
53 |
-
|
54 |
-
</
|
55 |
-
</div>
|
56 |
-
<div class="column">
|
57 |
-
<?php $email->renderInput() ?>
|
58 |
</div>
|
59 |
</div>
|
60 |
-
</
|
61 |
-
<div class="
|
62 |
-
<
|
63 |
-
|
|
|
|
|
|
|
|
|
64 |
</div>
|
65 |
</div>
|
66 |
</div>
|
67 |
-
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<div class="sui-box-body sui-upsell-items">
|
8 |
+
<div class="sui-box-settings-row sui-disabled no-margin-bottom">
|
9 |
+
<p>
|
10 |
+
<?php _e( "Defender can automatically run regular scans of your website and email you reports.", "defender-security" ) ?>
|
11 |
+
</p>
|
12 |
+
</div>
|
13 |
+
<div class="sui-box-settings-row sui-disabled no-margin-bottom padding-bottom-30">
|
14 |
+
<div class="sui-box-settings-col-1">
|
15 |
+
<span class="sui-settings-label"><?php _e( "Enable reporting", "defender-security" ) ?></span>
|
16 |
+
<span class="sui-description">
|
17 |
+
<?php _e( "Enabling this option will ensure you’re always the first to know when something suspicious is detected on your site.", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
|
|
18 |
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
</div>
|
20 |
+
<div class="sui-box-settings-col-2">
|
21 |
+
<div class="sui-side-tabs sui-tabs">
|
22 |
+
<div data-tabs>
|
23 |
+
<div><?php _e( "On", "defender-security" ) ?></div>
|
24 |
+
<div class="active"><?php _e( "Off", "defender-security" ) ?></div>
|
25 |
+
</div>
|
|
|
|
|
|
|
26 |
</div>
|
27 |
</div>
|
28 |
+
</div>
|
29 |
+
<div class="sui-box-settings-row sui-upsell-row">
|
30 |
+
<img class="sui-image sui-upsell-image"
|
31 |
+
src="<?php echo wp_defender()->getPluginUrl() . '/assets/img/scanning-free-man.svg' ?>">
|
32 |
+
<div class="sui-upsell-notice">
|
33 |
+
<p>
|
34 |
+
<?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools – <a href='%s'>Try it all FREE today</a>!", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_filescanning_reports_upsell_link' ) ) ?>
|
35 |
+
</p>
|
36 |
</div>
|
37 |
</div>
|
38 |
</div>
|
39 |
+
</div>
|
app/module/scan/view/automation.php
CHANGED
@@ -1,71 +1,97 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
|
|
|
|
4 |
</div>
|
5 |
-
<
|
6 |
-
<
|
7 |
-
<
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
12 |
</span>
|
13 |
</div>
|
14 |
-
<div class="
|
15 |
-
<
|
16 |
-
<input type="hidden" name="
|
17 |
-
<
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
</div>
|
43 |
-
<label><?php _e( "Time of day", "defender-security" ) ?></label>
|
44 |
-
<select name="time">
|
45 |
-
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getTimes() as $time ): ?>
|
46 |
-
<option <?php selected( $time, $setting->time ) ?>
|
47 |
-
value="<?php echo $time ?>"><?php echo strftime( '%I:%M %p', strtotime( $time ) ) ?></option>
|
48 |
-
<?php endforeach;; ?>
|
49 |
-
</select>
|
50 |
</div>
|
51 |
</div>
|
52 |
</div>
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
<?php $email->renderInput() ?>
|
62 |
-
</div>
|
63 |
</div>
|
64 |
-
|
65 |
-
|
66 |
-
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
67 |
-
<button class="button float-r"><?php _e( "Update Settings", "defender-security" ) ?></button>
|
68 |
-
<div class="clear"></div>
|
69 |
-
</form>
|
70 |
-
</div>
|
71 |
</div>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" class="scan-frm scan-settings">
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
+
<?php _e( "Defender can automatically run regular scans of your website and email you reports.", "defender-security" ) ?>
|
11 |
+
</p>
|
12 |
+
<div class="sui-box-settings-row">
|
13 |
+
<div class="sui-box-settings-col-1">
|
14 |
+
<span class="sui-settings-label"><?php _e( "Enable reporting", "defender-security" ) ?></span>
|
15 |
+
<span class="sui-description">
|
16 |
+
<?php _e( "Enabling this option will ensure you’re always the first to know when something suspicious is detected on your site.", "defender-security" ) ?>
|
17 |
</span>
|
18 |
</div>
|
19 |
+
<div class="sui-box-settings-col-2">
|
20 |
+
<div class="sui-side-tabs sui-tabs">
|
21 |
+
<input type="hidden" name="report" value="<?php echo $setting->report ?>"/>
|
22 |
+
<div data-tabs>
|
23 |
+
<div rel="input_value" data-target="report" data-value="1"
|
24 |
+
class="<?php echo $setting->report == 1 ? 'active' : null ?>"><?php _e( "On", "defender-security" ) ?></div>
|
25 |
+
<div rel="input_value" data-target="report" data-value="0"
|
26 |
+
class="<?php echo $setting->report == 0 ? 'active' : null ?>"><?php _e( "Off", "defender-security" ) ?></div>
|
27 |
+
</div>
|
28 |
+
<div data-panes>
|
29 |
+
<div class="sui-tab-boxed <?php echo $setting->report == 1 ? 'active' : null ?>">
|
30 |
+
<p class="sui-p-small">
|
31 |
+
<?php _e( "By default, we will only notify the recipients below when there is an issue from your file scan. Enable this option to send emails even when no issues are detected. ", "defender-security" ) ?>
|
32 |
+
</p>
|
33 |
+
<label class="sui-toggle">
|
34 |
+
<input type="hidden" name="always_send" value="0"/>
|
35 |
+
<input role="presentation" type="checkbox" name="always_send"
|
36 |
+
class="toggle-checkbox"
|
37 |
+
id="always_send" value="1"
|
38 |
+
<?php checked( true, $setting->always_send ) ?>/>
|
39 |
+
<span class="sui-toggle-slider"></span>
|
40 |
+
</label>
|
41 |
+
<label for="always_send" class="sui-toggle-label">
|
42 |
+
<?php _e( "Also send notifications when no issues are detected.", "defender-security" ) ?>
|
43 |
+
</label>
|
44 |
+
<div class="margin-top-30">
|
45 |
+
<?php $email->renderInput() ?>
|
46 |
+
</div>
|
47 |
+
<div class="margin-bottom-20">
|
48 |
+
<h3 class="sui-field-list-title">
|
49 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
50 |
+
</h3>
|
51 |
+
</div>
|
52 |
+
<div class="sui-form-field">
|
53 |
+
<label class="sui-label"><?php _e( "Frequency", "defender-security" ) ?></label>
|
54 |
+
<select name="frequency">
|
55 |
+
<option <?php selected( 1, $setting->frequency ) ?>
|
56 |
+
value="1"><?php _e( "Daily", "defender-security" ) ?></option>
|
57 |
+
<option <?php selected( 7, $setting->frequency ) ?>
|
58 |
+
value="7"><?php _e( "Weekly", "defender-security" ) ?></option>
|
59 |
+
<option <?php selected( 30, $setting->frequency ) ?>
|
60 |
+
value="30"><?php _e( "Monthly", "defender-security" ) ?></option>
|
61 |
+
</select>
|
62 |
+
</div>
|
63 |
+
<div class="sui-form-field">
|
64 |
+
<label class="sui-label"><?php _e( "Day of the week", "defender-security" ) ?></label>
|
65 |
+
<select name="day">
|
66 |
+
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getDaysOfWeek() as $day ): ?>
|
67 |
+
<option <?php selected( $day, $setting->day ) ?>
|
68 |
+
value="<?php echo $day ?>"><?php echo ucfirst( $day ) ?></option>
|
69 |
+
<?php endforeach; ?>
|
70 |
+
</select>
|
71 |
+
</div>
|
72 |
+
<div class="sui-form-field">
|
73 |
+
<label class="sui-label"><?php _e( "Time of day", "defender-security" ) ?></label>
|
74 |
+
<select name="time">
|
75 |
+
<?php foreach ( \WP_Defender\Behavior\Utils::instance()->getTimes() as $time ): ?>
|
76 |
+
<option <?php selected( $time, $setting->time ) ?>
|
77 |
+
value="<?php echo $time ?>"><?php echo strftime( '%I:%M %p', strtotime( $time ) ) ?></option>
|
78 |
+
<?php endforeach;; ?>
|
79 |
+
</select>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
</div>
|
84 |
</div>
|
85 |
</div>
|
86 |
+
</div>
|
87 |
+
<input type="hidden" name="action" value="saveScanSettings"/>
|
88 |
+
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
89 |
+
<div class="sui-box-footer">
|
90 |
+
<div class="sui-actions-right">
|
91 |
+
<button type="submit" class="sui-button sui-button-blue">
|
92 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
93 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
|
|
|
|
94 |
</div>
|
95 |
+
</div>
|
96 |
+
</form>
|
|
|
|
|
|
|
|
|
|
|
97 |
</div>
|
app/module/scan/view/ignored.php
CHANGED
@@ -1,8 +1,11 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
|
|
|
|
|
|
|
4 |
</div>
|
5 |
-
<div class="box-
|
6 |
<?php $table = new \WP_Defender\Module\Scan\Component\Result_Table();
|
7 |
$table->type = \WP_Defender\Module\Scan\Model\Result_Item::STATUS_IGNORED;
|
8 |
$table->prepare_items();
|
@@ -13,9 +16,8 @@
|
|
13 |
$table->display();
|
14 |
} else {
|
15 |
?>
|
16 |
-
<div class="
|
17 |
-
<
|
18 |
-
<?php _e( "You haven't ignored any suspicious files yet. Ignored files appear here and can be restored at any times.", "defender-security" ) ?>
|
19 |
</div>
|
20 |
<?php
|
21 |
}
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<!-- Box title with icon -->
|
4 |
+
<h3 class="sui-box-title">
|
5 |
+
<?php _e( "Ignored", "defender-security" ) ?>
|
6 |
+
</h3>
|
7 |
</div>
|
8 |
+
<div class="sui-box-body">
|
9 |
<?php $table = new \WP_Defender\Module\Scan\Component\Result_Table();
|
10 |
$table->type = \WP_Defender\Module\Scan\Model\Result_Item::STATUS_IGNORED;
|
11 |
$table->prepare_items();
|
16 |
$table->display();
|
17 |
} else {
|
18 |
?>
|
19 |
+
<div class="sui-notice sui-notice-info">
|
20 |
+
<p> <?php _e( "You haven't ignored any suspicious files yet. Ignored files appear here and can be restored at any times.", "defender-security" ) ?> </p>
|
|
|
21 |
</div>
|
22 |
<?php
|
23 |
}
|
app/module/scan/view/issues.php
CHANGED
@@ -1,40 +1,51 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
|
|
|
|
|
|
|
|
|
|
4 |
<?php _e( "Issues", "defender-security" ) ?>
|
5 |
-
<?php $issues = $model->countAll( \WP_Defender\Module\Scan\Model\Result_Item::STATUS_ISSUE );
|
6 |
-
if ( $issues ) {
|
7 |
-
?>
|
8 |
-
<span class="def-tag tag-error def-issues def-issues-summary"><?php echo $issues ?></span>
|
9 |
-
<?php
|
10 |
-
}
|
11 |
-
?>
|
12 |
</h3>
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
</div>
|
25 |
-
<div class="
|
26 |
-
|
27 |
-
|
|
|
|
|
28 |
if ( $table->get_pagination_arg( 'total_items' ) > 0 ) {
|
29 |
-
?>
|
30 |
-
<p class="line"><?php _e( "Defender has found potentially harmful files on your website. In many cases, the security scan will pick up harmless files, but in some cases you may wish to remove the files listed below that look suspicious.", "defender-security" ) ?></p>
|
31 |
-
<?php
|
32 |
$table->display();
|
33 |
} else {
|
34 |
?>
|
35 |
-
<div class="
|
36 |
-
<
|
37 |
-
|
|
|
38 |
</div>
|
39 |
<?php
|
40 |
}
|
1 |
+
<?php
|
2 |
+
$table = new \WP_Defender\Module\Scan\Component\Result_Table();
|
3 |
+
$table->prepare_items();
|
4 |
+
?>
|
5 |
+
<div class="sui-box">
|
6 |
+
<div class="sui-box-header">
|
7 |
+
<!-- Box title with icon -->
|
8 |
+
<h3 class="sui-box-title">
|
9 |
<?php _e( "Issues", "defender-security" ) ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
</h3>
|
11 |
+
|
12 |
+
<?php if ( $table->get_pagination_arg( 'total_items' ) > 0 ): ?>
|
13 |
+
<div class="sui-actions-right">
|
14 |
+
<div class="box-filter">
|
15 |
+
<span>
|
16 |
+
<?php _e( "Type", "defender-security" ) ?>
|
17 |
+
</span>
|
18 |
+
<select id="type-filter" class="sui-select-sm">
|
19 |
+
<option
|
20 |
+
<?php selected( false, \Hammer\Helper\HTTP_Helper::retrieve_get( 'type' ) ) ?>
|
21 |
+
value=""><?php _e( "All", "defender-security" ) ?></option>
|
22 |
+
<option <?php selected( 'core', \Hammer\Helper\HTTP_Helper::retrieve_get( 'type' ) ) ?>
|
23 |
+
value="core">
|
24 |
+
<?php _e( "Core", "defender-security" ) ?></option>
|
25 |
+
<option
|
26 |
+
<?php selected( 'vuln', \Hammer\Helper\HTTP_Helper::retrieve_get( 'type' ) ) ?>
|
27 |
+
value="vuln"><?php _e( "Plugins/Themes Vulnerability", "defender-security" ) ?></option>
|
28 |
+
<option
|
29 |
+
<?php selected( 'code', \Hammer\Helper\HTTP_Helper::retrieve_get( 'type' ) ) ?>
|
30 |
+
value="code"><?php _e( "Suspicious code", "defender-security" ) ?></option>
|
31 |
+
</select>
|
32 |
+
</div>
|
33 |
+
</div>
|
34 |
+
<?php endif; ?>
|
35 |
</div>
|
36 |
+
<div class="sui-box-body">
|
37 |
+
<p>
|
38 |
+
<?php _e( "Here’s a list of potentially harmful files Defender thinks could be suspicious. In a lot of cases the scan will pick up harmless files, but in some cases you may wish to remove files that look suspicious.", "defender-security" ) ?>
|
39 |
+
</p>
|
40 |
+
<?php
|
41 |
if ( $table->get_pagination_arg( 'total_items' ) > 0 ) {
|
|
|
|
|
|
|
42 |
$table->display();
|
43 |
} else {
|
44 |
?>
|
45 |
+
<div class="sui-notice sui-notice-success">
|
46 |
+
<p>
|
47 |
+
<?php _e( "Your code is currently clean! There were no issues found during the last scan, though you can always perform a new scan anytime.", "defender-security" ) ?>
|
48 |
+
</p>
|
49 |
</div>
|
50 |
<?php
|
51 |
}
|
app/module/scan/view/layouts/layout.php
CHANGED
@@ -1,166 +1,146 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
|
|
2 |
<div id="wp-defender" class="wp-defender">
|
3 |
<div class="wdf-scanning">
|
4 |
-
<
|
5 |
-
|
6 |
-
|
|
|
|
|
7 |
<form id="start-a-scan" method="post" class="scan-frm">
|
8 |
<?php
|
9 |
wp_nonce_field( 'startAScan' );
|
10 |
?>
|
11 |
<input type="hidden" name="action" value="startAScan"/>
|
12 |
-
<button type="submit"
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
18 |
-
|
19 |
-
|
20 |
-
<div class="box-content">
|
21 |
-
<div class="columns">
|
22 |
-
<div class="column is-7 issues-count">
|
23 |
-
<div>
|
24 |
-
<h5 class="def-issues def-issues-top-left"><?php echo $countAll = $model->countAll( \WP_Defender\Module\Scan\Model\Result_Item::STATUS_ISSUE ) ?></h5>
|
25 |
-
<?php if ( $countAll > 0 ) : ?>
|
26 |
-
<span class="def-issues-top-left-icon" tooltip="<?php esc_attr_e( sprintf( __('You have %d suspicious file(s) needing attention.', "defender-security" ), $countAll ) ); ?>">
|
27 |
-
<?php else: ?>
|
28 |
-
<span class="def-issues-top-left-icon" tooltip="<?php esc_attr_e( 'Your code is clean, the skies are clear.', "defender-security" ); ?>">
|
29 |
-
<?php endif; ?>
|
30 |
-
<?php
|
31 |
-
$icon = $countAll == 0 ? ' <i class="def-icon icon-tick" aria-hidden="true"></i>' : ' <i class="def-icon icon-warning fill-red" aria-hidden="true"></i>';
|
32 |
-
echo $icon;
|
33 |
-
?>
|
34 |
-
</span>
|
35 |
-
<div class="clear"></div>
|
36 |
-
<span class="sub"><?php _e( "File scanning issues need attention.", "defender-security" ) ?></span>
|
37 |
-
<div class="clear mline"></div>
|
38 |
-
<strong><?php echo $lastScanDate ?></strong>
|
39 |
-
<span class="sub"><?php _e( "Last scan", "defender-security" ) ?></span>
|
40 |
-
</div>
|
41 |
-
</div>
|
42 |
-
<div class="column is-5">
|
43 |
-
<ul class="dev-list bold">
|
44 |
-
<li>
|
45 |
-
<div>
|
46 |
-
<span class="list-label"><?php _e( "WordPress Core", "defender-security" ) ?></span>
|
47 |
-
<span class="list-detail def-issues-top-right-wp">
|
48 |
-
<?php echo $model->getCount( 'core' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . '<span class="def-issues">' . $model->getCount( 'core' ) . '</span></span>' ?>
|
49 |
-
</span>
|
50 |
-
</div>
|
51 |
-
</li>
|
52 |
-
<li>
|
53 |
-
<div>
|
54 |
-
<span class="list-label"><?php _e( "Plugins & Themes", "defender-security" ) ?></span>
|
55 |
-
<span class="list-detail def-issues-top-right-pt">
|
56 |
-
<?php if ( \WP_Defender\Behavior\Utils::instance()->getAPIKey() ): ?>
|
57 |
-
<?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
|
58 |
-
<?php else: ?>
|
59 |
-
<a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_summary_pro_tag') ?>" target="_blank"
|
60 |
-
class="button button-pre button-small"
|
61 |
-
tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
|
62 |
-
<?php _e( "Pro Feature", "defender-security" ) ?>
|
63 |
-
</a>
|
64 |
-
<?php endif; ?>
|
65 |
-
</span>
|
66 |
-
</div>
|
67 |
-
</li>
|
68 |
-
<li>
|
69 |
-
<div>
|
70 |
-
<span class="list-label"><?php _e( "Suspicious Code", "defender-security" ) ?></span>
|
71 |
-
<span class="list-detail def-issues-top-right-sc">
|
72 |
-
<?php if ( \WP_Defender\Behavior\Utils::instance()->getAPIKey() ): ?>
|
73 |
-
<?php echo $model->getCount( 'content' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
|
74 |
-
<?php else: ?>
|
75 |
-
<a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_summary_pro_tag') ?>" target="_blank"
|
76 |
-
class="button button-pre button-small"
|
77 |
-
tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>" >
|
78 |
-
<?php _e( "Pro Feature", "defender-security" ) ?>
|
79 |
-
</a>
|
80 |
-
<?php endif; ?>
|
81 |
-
</span>
|
82 |
-
</div>
|
83 |
-
</li>
|
84 |
-
</ul>
|
85 |
-
</div>
|
86 |
-
</div>
|
87 |
</div>
|
88 |
</div>
|
89 |
-
<div class="
|
90 |
-
<
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
|
|
158 |
</div>
|
159 |
</div>
|
|
|
160 |
</div>
|
161 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
162 |
</div>
|
163 |
-
</div>
|
164 |
-
<?php if ( wp_defender()->isFree ) {
|
165 |
-
$controller->renderPartial( 'pro-feature' );
|
166 |
-
} ?>
|
1 |
+
<?php $countAll = $model->countAll( \WP_Defender\Module\Scan\Model\Result_Item::STATUS_ISSUE );
|
2 |
+
$core = $model->getCount( 'core' );
|
3 |
+
$vuln = $model->getCount( 'vuln' );
|
4 |
+
$content = $model->getCount( 'content' );
|
5 |
+
?>
|
6 |
+
<div class="sui-wrap">
|
7 |
<div id="wp-defender" class="wp-defender">
|
8 |
<div class="wdf-scanning">
|
9 |
+
<div class="sui-header">
|
10 |
+
<h1 class="sui-header-title">
|
11 |
+
<?php _e( "File Scanning", "defender-security" ) ?>
|
12 |
+
</h1>
|
13 |
+
<div class="sui-actions-left">
|
14 |
<form id="start-a-scan" method="post" class="scan-frm">
|
15 |
<?php
|
16 |
wp_nonce_field( 'startAScan' );
|
17 |
?>
|
18 |
<input type="hidden" name="action" value="startAScan"/>
|
19 |
+
<button type="submit" class="sui-button sui-button-blue">
|
20 |
+
<?php _e( "New Scan", "defender-security" ) ?>
|
21 |
+
</button>
|
22 |
+
</form>
|
23 |
+
</div>
|
24 |
+
<div class="sui-actions-right">
|
25 |
+
<a href="#" target="_blank" class="sui-button sui-button-ghost">
|
26 |
+
<i class="sui-icon-academy"></i> <?php _e( "View Documentation", "defender-security" ) ?>
|
27 |
+
</a>
|
28 |
+
</div>
|
29 |
+
</div>
|
30 |
+
<div class="sui-box sui-summary">
|
31 |
+
<div class="sui-summary-image-space" aria-hidden="true"></div>
|
32 |
+
<div class="sui-summary-segment">
|
33 |
+
<div class="sui-summary-details">
|
34 |
+
<span class="sui-summary-large issues"><?php echo $countAll ?></span>
|
35 |
+
<?php if ( $countAll > 0 ): ?>
|
36 |
+
<i aria-hidden="true" class="sui-icon-info sui-error"></i>
|
37 |
+
<?php else: ?>
|
38 |
+
<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>
|
39 |
+
<?php endif; ?>
|
40 |
+
<span class="sui-summary-sub"><?php _e( "File scanning issues", "defender-security" ) ?></span>
|
41 |
|
42 |
+
<span class="sui-summary-detail"><?php echo $lastScanDate ?></span>
|
43 |
+
<span class="sui-summary-sub"><?php _e( "Last scan", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
</div>
|
45 |
</div>
|
46 |
+
<div class="sui-summary-segment">
|
47 |
+
<ul class="sui-list">
|
48 |
+
<li>
|
49 |
+
<span class="sui-list-label"><?php _e( "Wordpress core", "defender-security" ) ?></span>
|
50 |
+
<span class="sui-list-detail issues_wp">
|
51 |
+
<?php echo $core > 0 ? '<span class="sui-tag sui-tag-error">' . $core . '</span>' : '<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' ?>
|
52 |
+
</span>
|
53 |
+
</li>
|
54 |
+
<li>
|
55 |
+
<span class="sui-list-label"><?php _e( "Plugins & themes", "defender-security" ) ?></span>
|
56 |
+
<span class="sui-list-detail vuln_issues">
|
57 |
+
<?php echo $vuln > 0 ? '<span class="sui-tag sui-tag-error">' . $vuln . '</span>' : '<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' ?>
|
58 |
+
</span>
|
59 |
+
</li>
|
60 |
+
<li>
|
61 |
+
<span class="sui-list-label"><?php _e( "Suspicious code", "defender-security" ) ?></span>
|
62 |
+
<span class="sui-list-detail content_issues">
|
63 |
+
<?php echo $content > 0 ? '<span class="sui-tag sui-tag-error">' . $content . '</span>' : '<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>' ?>
|
64 |
+
</span>
|
65 |
+
</li>
|
66 |
+
</ul>
|
67 |
+
</div>
|
68 |
+
</div>
|
69 |
+
<div class="sui-row-with-sidenav">
|
70 |
+
<div class="sui-sidenav">
|
71 |
+
<ul class="sui-vertical-tabs sui-sidenav-hide-md">
|
72 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( false ) ? 'current' : null ?>">
|
73 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>">
|
74 |
+
<?php _e( "Issues", "defender-security" ) ?>
|
75 |
+
</a>
|
76 |
+
</li>
|
77 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'ignored' ) ? 'current' : null ?>">
|
78 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=ignored' ) ?>">
|
79 |
+
<?php _e( "Ignored", "defender-security" ) ?>
|
80 |
+
</a>
|
81 |
+
</li>
|
82 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'settings' ) ? 'current' : null ?>">
|
83 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=settings' ) ?>">
|
84 |
+
<?php _e( "Settings", "defender-security" ) ?>
|
85 |
+
</a>
|
86 |
+
</li>
|
87 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'notification' ) ? 'current' : null ?>">
|
88 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=notification' ) ?>">
|
89 |
+
<?php _e( "Notifications", "defender-security" ) ?>
|
90 |
+
</a>
|
91 |
+
</li>
|
92 |
+
<li class="sui-vertical-tab <?php echo $controller->isView( 'reporting' ) ? 'current' : null ?>">
|
93 |
+
<a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=reporting' ) ?>">
|
94 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
95 |
+
</a>
|
96 |
+
</li>
|
97 |
+
</ul>
|
98 |
+
<div class="sui-sidenav-hide-lg">
|
99 |
+
<select class="sui-mobile-nav" style="display: none;">
|
100 |
+
<option value="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>" <?php echo $controller->isView( false ) ? 'selected' : null ?>>
|
101 |
+
<?php _e( "Issues", "defender-security" ) ?>
|
102 |
+
</option>
|
103 |
+
<option value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=ignored' ) ?>" <?php echo $controller->isView( 'ignored' ) ? 'selected' : null ?>>
|
104 |
+
<?php _e( "Ignored", "defender-security" ) ?>
|
105 |
+
</option>
|
106 |
+
<option value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=settings' ) ?>" <?php echo $controller->isView( 'settings' ) ? 'selected' : null ?>>
|
107 |
+
<?php _e( "Settings", "defender-security" ) ?>
|
108 |
+
</option>
|
109 |
+
<option value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=notification' ) ?>" <?php echo $controller->isView( 'notification' ) ? 'selected' : null ?>>
|
110 |
+
<?php _e( "Notifications", "defender-security" ) ?>
|
111 |
+
</option>
|
112 |
+
<option value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=reporting' ) ?>" <?php echo $controller->isView( 'reporting' ) ? 'selected' : null ?>>
|
113 |
+
<?php _e( "Reporting", "defender-security" ) ?>
|
114 |
+
</option>
|
115 |
+
</select>
|
116 |
</div>
|
117 |
</div>
|
118 |
+
<?php echo $contents ?>
|
119 |
</div>
|
120 |
</div>
|
121 |
+
<div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div>
|
122 |
+
<?php if ( wp_defender()->isFree ): ?>
|
123 |
+
<ul class="sui-footer-nav">
|
124 |
+
<li><a href="https://profiles.wordpress.org/wpmudev#content-plugins" target="_blank">Free Plugins</a></li>
|
125 |
+
<li><a href="https://premium.wpmudev.org/features/" target="_blank">Membership</a></li>
|
126 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
127 |
+
<li><a href="https://wordpress.org/support/plugin/plugin-name" target="_blank">Support</a></li>
|
128 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
129 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
130 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
131 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
132 |
+
</ul>
|
133 |
+
<?php else: ?>
|
134 |
+
<ul class="sui-footer-nav">
|
135 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
136 |
+
<li><a href="https://premium.wpmudev.org/projects/category/plugins/" target="_blank">Plugins</a></li>
|
137 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
138 |
+
<li><a href="https://premium.wpmudev.org/hub/support/" target="_blank">Support</a></li>
|
139 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
140 |
+
<li><a href="https://premium.wpmudev.org/hub/community/" target="_blank">Community</a></li>
|
141 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
142 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
143 |
+
</ul>
|
144 |
+
<?php endif; ?>
|
145 |
</div>
|
146 |
+
</div>
|
|
|
|
|
|
app/module/scan/view/new.php
CHANGED
@@ -1,24 +1,28 @@
|
|
1 |
-
<div class="wrap">
|
2 |
<div class="wp-defender">
|
3 |
<div class="wdf-scanning">
|
4 |
-
<div class="
|
5 |
-
<
|
6 |
-
|
7 |
-
</
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
13 |
<form id="start-a-scan" method="post" class="scan-frm">
|
14 |
<?php
|
15 |
wp_nonce_field( 'startAScan' );
|
16 |
?>
|
17 |
<input type="hidden" name="action" value="startAScan"/>
|
18 |
-
<
|
|
|
|
|
|
|
19 |
</form>
|
20 |
</div>
|
21 |
</div>
|
22 |
</div>
|
23 |
</div>
|
24 |
-
</div>
|
1 |
+
<div class="sui-wrap">
|
2 |
<div class="wp-defender">
|
3 |
<div class="wdf-scanning">
|
4 |
+
<div class="sui-header">
|
5 |
+
<h1 class="sui-header-title">
|
6 |
+
<?php _e( "File Scanning", "defender-security" ) ?>
|
7 |
+
</h1>
|
8 |
+
</div>
|
9 |
+
<div class="sui-box sui-message">
|
10 |
+
<img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/scan-man.svg" class="sui-image"
|
11 |
+
aria-hidden="true">
|
12 |
+
<div class="sui-message-content">
|
13 |
+
<p><?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious. Defender will keep an eye on your code without you having to worry.", "defender-security" ) ?></p>
|
14 |
<form id="start-a-scan" method="post" class="scan-frm">
|
15 |
<?php
|
16 |
wp_nonce_field( 'startAScan' );
|
17 |
?>
|
18 |
<input type="hidden" name="action" value="startAScan"/>
|
19 |
+
<p>
|
20 |
+
<button type="submit" class="sui-button sui-button-blue">
|
21 |
+
<?php _e( "Run Scan", "defender-security" ) ?></button>
|
22 |
+
</p>
|
23 |
</form>
|
24 |
</div>
|
25 |
</div>
|
26 |
</div>
|
27 |
</div>
|
28 |
+
</div>
|
app/module/scan/view/notification.php
ADDED
@@ -0,0 +1,216 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Notifications", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
+
</div>
|
7 |
+
<form method="post" class="scan-frm scan-settings">
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<p>
|
10 |
+
<?php _e( "Get email notifications when Defender has finished manual files scans.", "defender-security" ) ?>
|
11 |
+
</p>
|
12 |
+
|
13 |
+
<div class="sui-box-settings-row">
|
14 |
+
<div class="sui-box-settings-col-1">
|
15 |
+
<span class="sui-settings-label"><?php _e( "Enable notifications", "defender-security" ) ?></span>
|
16 |
+
<span class="sui-description">
|
17 |
+
<?php _e( "Enabling this option will ensure you get the results of every scan once they’re completed.", "defender-security" ) ?>
|
18 |
+
</span>
|
19 |
+
</div>
|
20 |
+
<div class="sui-box-settings-col-2">
|
21 |
+
<div class="sui-form-field">
|
22 |
+
<input type="hidden" name="notification" value="<?php echo $setting->notification ?>"/>
|
23 |
+
<div class="sui-side-tabs sui-tabs">
|
24 |
+
<div data-tabs>
|
25 |
+
<div rel="input_value" data-target="notification" data-value="1"
|
26 |
+
class="<?php echo $setting->notification == 1 ? 'active' : null ?>"><?php _e( "On", "defender-security" ) ?></div>
|
27 |
+
<div rel="input_value" data-target="notification" data-value="0"
|
28 |
+
class="<?php echo $setting->notification == 0 ? 'active' : null ?>"><?php _e( "Off", "defender-security" ) ?></div>
|
29 |
+
</div>
|
30 |
+
<div data-panes>
|
31 |
+
<div class="sui-tab-boxed no-padding-bottom <?php echo $setting->notification == 1 ? 'active' : null ?>">
|
32 |
+
<p class="sui-p-small">
|
33 |
+
<?php _e( "By default, we will only notify the recipients below when there is an issue from your file scan. Enable this option to send emails even when no issues are detected. ", "defender-security" ) ?>
|
34 |
+
</p>
|
35 |
+
<label class="sui-toggle">
|
36 |
+
<input type="hidden" name="always_send" value="0"/>
|
37 |
+
<input role="presentation" type="checkbox" name="alwaysSendNotification"
|
38 |
+
class="toggle-checkbox"
|
39 |
+
id="alwaysSendNotification" value="1"
|
40 |
+
<?php checked( true, $setting->alwaysSendNotification ) ?>/>
|
41 |
+
<span class="sui-toggle-slider"></span>
|
42 |
+
</label>
|
43 |
+
<label for="always_send" class="sui-toggle-label">
|
44 |
+
<?php _e( "Also send notifications when no issues are detected.", "defender-security" ) ?>
|
45 |
+
</label>
|
46 |
+
<div class="margin-top-30">
|
47 |
+
<?php $email->renderInput() ?>
|
48 |
+
</div>
|
49 |
+
<div class="sui-field-list sui-flushed no-border">
|
50 |
+
<div class="sui-field-list-header">
|
51 |
+
<h3 class="sui-field-list-title"><?php _e( "Email Templates", "defender-security" ) ?></h3>
|
52 |
+
</div>
|
53 |
+
<div class="sui-field-list-body">
|
54 |
+
<div class="sui-field-list-item">
|
55 |
+
<label class="sui-field-list-item-label">
|
56 |
+
<strong>
|
57 |
+
<?php _e( "When an issue is found", "defender-security" ) ?>
|
58 |
+
</strong>
|
59 |
+
</label>
|
60 |
+
<button data-a11y-dialog-show="issue-found" type="button"
|
61 |
+
class="sui-button-icon">
|
62 |
+
<i class="sui-icon-pencil" aria-hidden="true"></i>
|
63 |
+
</button>
|
64 |
+
</div>
|
65 |
+
<div class="sui-field-list-item">
|
66 |
+
<label class="sui-field-list-item-label">
|
67 |
+
<strong>
|
68 |
+
<?php _e( "When no issues are found", "defender-security" ) ?>
|
69 |
+
</strong>
|
70 |
+
</label>
|
71 |
+
<button data-a11y-dialog-show="all-ok" type="button"
|
72 |
+
class="sui-button-icon">
|
73 |
+
<i class="sui-icon-pencil" aria-hidden="true"></i>
|
74 |
+
</button>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
+
</div>
|
78 |
+
</div>
|
79 |
+
</div>
|
80 |
+
</div>
|
81 |
+
</div>
|
82 |
+
</div>
|
83 |
+
</div>
|
84 |
+
</div>
|
85 |
+
<input type="hidden" name="action" value="saveScanSettings"/>
|
86 |
+
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
87 |
+
<div class="sui-box-footer">
|
88 |
+
<div class="sui-actions-right">
|
89 |
+
<button type="submit" class="sui-button sui-button-blue">
|
90 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
91 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
92 |
+
</div>
|
93 |
+
</div>
|
94 |
+
</form>
|
95 |
+
<div class="sui-dialog" aria-hidden="true" tabindex="-1" id="all-ok">
|
96 |
+
|
97 |
+
<div class="sui-dialog-overlay" data-a11y-dialog-hide></div>
|
98 |
+
|
99 |
+
<div class="sui-dialog-content" aria-labelledby="dialogTitle" aria-describedby="dialogDescription"
|
100 |
+
role="dialog">
|
101 |
+
|
102 |
+
<div class="sui-box" role="document">
|
103 |
+
<form method="post" class="scan-frm scan-settings">
|
104 |
+
<div class="sui-box-header">
|
105 |
+
<h3 class="sui-box-title" id="dialogTitle">
|
106 |
+
<?php _e( "Edit Template", "defender-security" ) ?>
|
107 |
+
</h3>
|
108 |
+
<div class="sui-actions-right">
|
109 |
+
<button type="button" data-a11y-dialog-hide class="sui-dialog-close"
|
110 |
+
aria-label="Close this dialog window"></button>
|
111 |
+
</div>
|
112 |
+
</div>
|
113 |
+
|
114 |
+
<div class="sui-box-body">
|
115 |
+
<p>
|
116 |
+
<?php _e( "Edit the email copy for when Defender finishes a scan and sends an email summary report.", "defender-security" ) ?>
|
117 |
+
</p>
|
118 |
+
<div class="sui-row">
|
119 |
+
<div class="sui-col">
|
120 |
+
<div class="sui-form-field">
|
121 |
+
<textarea rows="12" class="sui-form-control"
|
122 |
+
name="email_all_ok"><?php echo $setting->email_all_ok ?></textarea>
|
123 |
+
</div>
|
124 |
+
</div>
|
125 |
+
</div>
|
126 |
+
<div class="sui-form-field">
|
127 |
+
<label for="dialog-text-5" class="sui-label">
|
128 |
+
<?php _e( "Available variables", "defender-security" ) ?>
|
129 |
+
</label>
|
130 |
+
<span class="sui-tag">{USER_NAME}</span>
|
131 |
+
<span class="sui-tag">{SITE_URL}</span>
|
132 |
+
<span class="sui-tag">{ISSUES_COUNT}</span>
|
133 |
+
<span class="sui-tag">{ISSUES_LIST}</span>
|
134 |
+
</div>
|
135 |
+
</div>
|
136 |
+
|
137 |
+
<div class="sui-box-footer">
|
138 |
+
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
139 |
+
<input type="hidden" name="action" value="saveScanSettings"/>
|
140 |
+
<div class="sui-actions-left">
|
141 |
+
<button class="sui-button" type="button" data-a11y-dialog-hide="issue-found">
|
142 |
+
<?php _e( "Cancel", "defender-security" ) ?></button>
|
143 |
+
</div>
|
144 |
+
<div class="sui-actions-right">
|
145 |
+
<button class="sui-modal-close sui-button sui-button-blue"><i class="sui-icon-save"
|
146 |
+
aria-hidden="true"></i><?php _e( "Save Changes", "defender-security" ) ?>
|
147 |
+
</button>
|
148 |
+
</div>
|
149 |
+
</div>
|
150 |
+
</form>
|
151 |
+
</div>
|
152 |
+
|
153 |
+
</div>
|
154 |
+
</div>
|
155 |
+
<div class="sui-dialog" aria-hidden="true" tabindex="-1" id="issue-found">
|
156 |
+
|
157 |
+
<div class="sui-dialog-overlay" data-a11y-dialog-hide></div>
|
158 |
+
|
159 |
+
<div class="sui-dialog-content" aria-labelledby="dialogTitle" aria-describedby="dialogDescription"
|
160 |
+
role="dialog">
|
161 |
+
|
162 |
+
<div class="sui-box" role="document">
|
163 |
+
<form method="post" class="scan-frm scan-settings">
|
164 |
+
<div class="sui-box-header">
|
165 |
+
<h3 class="sui-box-title" id="dialogTitle">
|
166 |
+
<?php _e( "Edit Template", "defender-security" ) ?>
|
167 |
+
</h3>
|
168 |
+
<div class="sui-actions-right">
|
169 |
+
<button type="button" data-a11y-dialog-hide class="sui-dialog-close"
|
170 |
+
aria-label="Close this dialog window"></button>
|
171 |
+
</div>
|
172 |
+
</div>
|
173 |
+
|
174 |
+
<div class="sui-box-body">
|
175 |
+
<p>
|
176 |
+
<?php _e( "Edit the email copy for when Defender finishes a scan and sends an email summary report.", "defender-security" ) ?>
|
177 |
+
</p>
|
178 |
+
<div class="sui-row">
|
179 |
+
<div class="sui-col">
|
180 |
+
<div class="sui-form-field">
|
181 |
+
<textarea rows="12" class="sui-form-control"
|
182 |
+
name="email_has_issue"><?php echo $setting->email_has_issue ?></textarea>
|
183 |
+
</div>
|
184 |
+
</div>
|
185 |
+
</div>
|
186 |
+
<div class="sui-form-field">
|
187 |
+
<label for="dialog-text-5" class="sui-label">
|
188 |
+
<?php _e( "Available variables", "defender-security" ) ?>
|
189 |
+
</label>
|
190 |
+
<span class="sui-tag">{USER_NAME}</span>
|
191 |
+
<span class="sui-tag">{SITE_URL}</span>
|
192 |
+
<span class="sui-tag">{ISSUES_COUNT}</span>
|
193 |
+
<span class="sui-tag">{ISSUES_LIST}</span>
|
194 |
+
</div>
|
195 |
+
</div>
|
196 |
+
|
197 |
+
<div class="sui-box-footer">
|
198 |
+
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
199 |
+
<input type="hidden" name="action" value="saveScanSettings"/>
|
200 |
+
<div class="sui-actions-left">
|
201 |
+
<button type="button" class="sui-button" data-a11y-dialog-hide="issue-found">
|
202 |
+
<?php _e( "Cancel", "defender-security" ) ?></button>
|
203 |
+
</div>
|
204 |
+
<div class="sui-actions-right">
|
205 |
+
<button class="sui-modal-close sui-button sui-button-blue"><i class="sui-icon-save"
|
206 |
+
aria-hidden="true"></i><?php _e( "Save Changes", "defender-security" ) ?>
|
207 |
+
</button>
|
208 |
+
</div>
|
209 |
+
</div>
|
210 |
+
</form>
|
211 |
+
</div>
|
212 |
+
|
213 |
+
</div>
|
214 |
+
|
215 |
+
</div>
|
216 |
+
</div>
|
app/module/scan/view/scanning.php
CHANGED
@@ -1,54 +1,94 @@
|
|
1 |
-
<div class="wrap">
|
2 |
-
<div class="
|
3 |
-
<div class="
|
4 |
-
<div class="
|
5 |
-
<
|
6 |
-
|
7 |
-
|
8 |
-
|
|
|
9 |
<?php
|
10 |
wp_nonce_field( 'startAScan' );
|
11 |
?>
|
12 |
-
|
13 |
-
<button type="submit"
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
</
|
18 |
</div>
|
19 |
</div>
|
20 |
</div>
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
<
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
Get enhanced security protection as part of a WPMU DEV membership including 100+ plugins, 24/7
|
50 |
-
support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_modal_inprogress_upsell_link') ) ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
</div>
|
|
|
52 |
</div>
|
53 |
-
|
54 |
-
</
|
|
1 |
+
<div class="sui-wrap">
|
2 |
+
<div class="wp-defender">
|
3 |
+
<div class="wdf-scanning">
|
4 |
+
<div class="sui-header">
|
5 |
+
<h1 class="sui-header-title">
|
6 |
+
<?php _e( "File Scanning", "defender-security" ) ?>
|
7 |
+
</h1>
|
8 |
+
<div class="sui-actions-left">
|
9 |
+
<form id="start-a-scan" method="post" class="scan-frm">
|
10 |
<?php
|
11 |
wp_nonce_field( 'startAScan' );
|
12 |
?>
|
13 |
+
<input type="hidden" name="action" value="startAScan"/>
|
14 |
+
<button type="submit" class="sui-button sui-button-blue">
|
15 |
+
<?php _e( "New Scan", "defender-security" ) ?>
|
16 |
+
</button>
|
17 |
+
</form>
|
18 |
+
</div>
|
19 |
</div>
|
20 |
</div>
|
21 |
</div>
|
22 |
+
<div class="sui-dialog <?php echo wp_defender()->isFree ? 'scanning-free' : null ?>" aria-hidden="true"
|
23 |
+
tabindex="-1" id="scanning">
|
24 |
+
|
25 |
+
<div class="sui-dialog-overlay"></div>
|
26 |
+
|
27 |
+
<div class="sui-dialog-content" aria-labelledby="dialogTitle" aria-describedby="dialogDescription"
|
28 |
+
role="dialog">
|
29 |
+
|
30 |
+
<div class="sui-box" role="document">
|
31 |
+
|
32 |
+
<div class="sui-box-header">
|
33 |
+
<h3 class="sui-box-title" id="dialogTitle">
|
34 |
+
<?php _e( "Scan in progress", "defender-security" ) ?>
|
35 |
+
</h3>
|
36 |
+
</div>
|
37 |
+
|
38 |
+
<div class="sui-box-body">
|
39 |
+
<p id="dialogDescription">
|
40 |
+
<?php _e( "Defender is scanning your files for malicious code. This will take a few minutes depending on the size of your website.", "defender-security" ) ?>
|
41 |
+
</p>
|
42 |
+
<div class="sui-progress-block sui-progress-can-close">
|
43 |
+
<div class="sui-progress">
|
44 |
+
<span class="sui-progress-icon" aria-hidden="true">
|
45 |
+
<i class="sui-icon-loader sui-loading"></i>
|
46 |
+
</span>
|
47 |
+
<span class="sui-progress-text">
|
48 |
+
<span><?php echo $percent ?>%</span>
|
49 |
+
</span>
|
50 |
+
<div class="sui-progress-bar" aria-hidden="true">
|
51 |
+
<span style="width: <?php echo $percent ?>%"></span>
|
52 |
+
</div>
|
53 |
+
</div>
|
54 |
+
<form method="post" class="scan-frm">
|
55 |
+
<input type="hidden" name="action" value="cancelScan"/>
|
56 |
+
<?php wp_nonce_field( 'cancelScan', '_wpnonce', true ) ?>
|
57 |
+
<button class="sui-button-icon" type="submit">
|
58 |
+
<i class="sui-icon-close"></i>
|
59 |
+
</button>
|
60 |
+
</form>
|
61 |
+
</div>
|
62 |
+
<div class="sui-progress-state">
|
63 |
+
<span class="sui-progress-state-text">
|
64 |
+
<?php echo $model->statusText ?>
|
65 |
+
</span>
|
66 |
+
</div>
|
67 |
+
<?php if ( wp_defender()->isFree ): ?>
|
68 |
+
<div class="sui-row">
|
69 |
+
<div class="sui-col-md-3">
|
70 |
+
</div>
|
71 |
+
<div class="sui-col-md-9">
|
72 |
+
<div class="sui-notice sui-notice-info">
|
73 |
+
<p>
|
74 |
+
<?php printf( __( "Did you know the Pro version of Defender comes with advanced full code scanning and automated reporting?
|
75 |
Get enhanced security protection as part of a WPMU DEV membership including 100+ plugins, 24/7
|
76 |
+
support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_filescanning_modal_inprogress_upsell_link' ) ) ?>
|
77 |
+
</p>
|
78 |
+
</div>
|
79 |
+
</div>
|
80 |
+
</div>
|
81 |
+
<?php endif; ?>
|
82 |
+
<form method="post" id="process-scan" class="scan-frm">
|
83 |
+
<input type="hidden" name="action" value="processScan"/>
|
84 |
+
<?php
|
85 |
+
wp_nonce_field( 'processScan' );
|
86 |
+
?>
|
87 |
+
</form>
|
88 |
+
</div>
|
89 |
</div>
|
90 |
+
|
91 |
</div>
|
92 |
+
|
93 |
+
</div>
|
94 |
+
</div>
|
app/module/scan/view/setting-free.php
CHANGED
@@ -1,151 +1,126 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
|
|
|
|
4 |
</div>
|
5 |
-
<
|
6 |
-
<
|
7 |
-
<div class="
|
8 |
-
<div class="
|
9 |
-
<
|
10 |
-
<span class="
|
11 |
<?php _e( "Choose the scan types you would like to include in your default scan. It's recommended you enable all types.", "defender-security" ) ?>
|
12 |
</span>
|
13 |
</div>
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
<
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
<
|
28 |
-
|
29 |
-
|
30 |
-
<?php _e( "Pro Feature", "defender-security" ) ?></a>
|
31 |
-
<span class="toggle" aria-hidden="true" role="presentation">
|
32 |
-
<input role="presentation" type="checkbox" class="toggle-checkbox" value="1" id="scan-vuln"/>
|
33 |
-
<label class="toggle-label" aria-hidden="true" for="scan-vuln"></label>
|
34 |
-
</span>
|
35 |
-
<label for="scan-vuln"><?php _e( "Plugins & Themes", "defender-security" ) ?></label>
|
36 |
-
<span class="sub inpos">
|
37 |
-
<?php _e( "Defender looks for publicly reported vulnerabilities in your installed plugins and themes.", "defender-security" ) ?>
|
38 |
-
</span>
|
39 |
</div>
|
40 |
-
<div class="
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
<
|
52 |
-
|
53 |
-
|
54 |
</div>
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
</div>
|
62 |
</div>
|
63 |
</div>
|
64 |
-
<div class="
|
65 |
-
<
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
<input type="text" size="4" value="<?php echo esc_attr( $setting->max_filesize ) ?>"
|
73 |
-
name="max_filesize"> <?php _e( "MB", "defender-security" ) ?>
|
74 |
</div>
|
75 |
</div>
|
76 |
-
<div class="
|
77 |
-
<div class="
|
78 |
-
<
|
79 |
-
<span class="
|
80 |
-
|
81 |
-
|
82 |
-
</div>
|
83 |
-
<div class="column">
|
84 |
-
<span class="toggle" aria-hidden="true" role="presentation">
|
85 |
-
<input type="hidden" name="always_send" value="0"/>
|
86 |
-
<input type="checkbox" role="presentation" name="always_send" class="toggle-checkbox" value="1"
|
87 |
-
id="always_send" <?php checked( true, $setting->always_send ) ?>/>
|
88 |
-
<label class="toggle-label" aria-hidden="true" for="always_send"></label>
|
89 |
-
</span>
|
90 |
-
<label><?php _e( "Send all scan report emails", "defender-security" ) ?></label>
|
91 |
-
</div>
|
92 |
-
</div>
|
93 |
-
<div class="columns">
|
94 |
-
<div class="column is-one-third">
|
95 |
-
<strong><?php _e( "Email subject", "defender-security" ) ?></strong>
|
96 |
</div>
|
97 |
-
|
98 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
</div>
|
100 |
</div>
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
<ul class="dev-list">
|
110 |
-
<li>
|
111 |
-
<div>
|
112 |
-
<span class="list-label"><?php _e( "When an issue is found", "defender-security" ) ?></span>
|
113 |
-
<span class="list-detail tr">
|
114 |
-
<a href="#issue-found" rel="dialog" role='button'><?php _e( "Edit", "defender-security" ) ?></a></span>
|
115 |
-
</div>
|
116 |
-
</li>
|
117 |
-
<li>
|
118 |
-
<div>
|
119 |
-
<span class="list-label"><?php _e( "When no issues are found", "defender-security" ) ?></span>
|
120 |
-
<span class="list-detail tr">
|
121 |
-
<a href="#all-ok"
|
122 |
-
rel="dialog" role='button'><?php _e( "Edit", "defender-security" ) ?></a></span>
|
123 |
-
</div>
|
124 |
-
</li>
|
125 |
-
</ul>
|
126 |
-
</div>
|
127 |
</div>
|
128 |
-
|
|
|
|
|
|
|
|
|
|
|
129 |
<input type="hidden" name="action" value="saveScanSettings"/>
|
130 |
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
131 |
-
<
|
132 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
</form>
|
134 |
</div>
|
135 |
-
</
|
136 |
-
<dialog id="issue-found" title="<?php esc_attr_e( "Issues found", "defender-security" ) ?>">
|
137 |
-
<form method="post" class="scan-frm scan-settings">
|
138 |
-
<textarea rows="12" name="email_has_issue"><?php echo $setting->email_has_issue ?></textarea>
|
139 |
-
<input type="hidden" name="action" value="saveScanSettings"/>
|
140 |
-
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
141 |
-
<button class="button"><?php _e( "Save", "defender-security" ) ?></button>
|
142 |
-
</form>
|
143 |
-
</dialog>
|
144 |
-
<dialog id="all-ok" title="<?php esc_attr_e( 'All OK', "defender-security" ) ?>">
|
145 |
-
<form method="post" class="scan-frm scan-settings">
|
146 |
-
<input type="hidden" name="action" value="saveScanSettings"/>
|
147 |
-
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
148 |
-
<textarea rows="12" name="email_all_ok"><?php echo $setting->email_all_ok ?></textarea>
|
149 |
-
<button class="button"><?php _e( "Save", "defender-security" ) ?></button>
|
150 |
-
</form>
|
151 |
-
</dialog>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Settings", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" class="scan-frm scan-settings">
|
8 |
+
<div class="sui-box-body sui-upsell-items">
|
9 |
+
<div class="sui-box-settings-row no-border no-padding-bottom no-margin-bottom">
|
10 |
+
<div class="sui-box-settings-col-1">
|
11 |
+
<span class="sui-settings-label"><?php _e( "Scan Types", "defender-security" ) ?></span>
|
12 |
+
<span class="sui-description">
|
13 |
<?php _e( "Choose the scan types you would like to include in your default scan. It's recommended you enable all types.", "defender-security" ) ?>
|
14 |
</span>
|
15 |
</div>
|
16 |
+
|
17 |
+
<div class="sui-box-settings-col-2">
|
18 |
+
<div class="sui-form-field">
|
19 |
+
<label class="sui-toggle">
|
20 |
+
<input type="hidden" name="scan_core" value="0"/>
|
21 |
+
<input role="presentation" type="checkbox" name="scan_core" class="toggle-checkbox"
|
22 |
+
id="core-scan" value="1"
|
23 |
+
<?php checked( true, $setting->scan_core ) ?>/>
|
24 |
+
<span class="sui-toggle-slider"></span>
|
25 |
+
</label>
|
26 |
+
<label for="core-scan" class="sui-toggle-label">
|
27 |
+
<?php _e( "WordPress Core", "defender-security" ) ?>
|
28 |
+
</label>
|
29 |
+
<p class="sui-description sui-toggle-content">
|
30 |
+
<?php _e( "Defender checks for any modifications or additions to WordPress core files.", "defender-security" ) ?>
|
31 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
</div>
|
33 |
+
<div class="sui-form-field">
|
34 |
+
<div class="relative">
|
35 |
+
<label class="sui-toggle">
|
36 |
+
<input role="presentation" disabled type="checkbox" class="toggle-checkbox" value="0"/>
|
37 |
+
<span class="sui-toggle-slider"></span>
|
38 |
+
</label>
|
39 |
+
<label for="scan_vuln" class="sui-toggle-label">
|
40 |
+
<?php _e( "Plugins & Themes", "defender-security" ) ?>
|
41 |
+
</label>
|
42 |
+
<span class="sui-tag sui-tag-pro"><?php _e( "Pro", "defender-security" ) ?></span>
|
43 |
+
</div>
|
44 |
+
<p class="sui-description sui-toggle-content">
|
45 |
+
<?php _e( "Defender looks for publicly reported vulnerabilities in your installed plugins and themes.", "defender-security" ) ?>
|
46 |
+
</p>
|
47 |
</div>
|
48 |
+
<div class="sui-form-field">
|
49 |
+
<div class="relative">
|
50 |
+
<label class="sui-toggle">
|
51 |
+
<input role="presentation" disabled type="checkbox" class="toggle-checkbox" value="0"/>
|
52 |
+
<span class="sui-toggle-slider"></span>
|
53 |
+
</label>
|
54 |
+
<label for="scan_content" class="sui-toggle-label">
|
55 |
+
<?php _e( "Suspicious Code", "defender-security" ) ?>
|
56 |
+
</label>
|
57 |
+
<span class="sui-tag sui-tag-pro"><?php _e( "Pro", "defender-security" ) ?></span>
|
58 |
+
</div>
|
59 |
+
<p class="sui-description sui-toggle-content">
|
60 |
+
<?php _e( "Defender looks inside all of your files for suspicious and potentially harmful code.", "defender-security" ) ?>
|
61 |
+
</p>
|
62 |
</div>
|
63 |
</div>
|
64 |
</div>
|
65 |
+
<div class="sui-box-settings-row sui-upsell-row">
|
66 |
+
<img class="sui-image sui-upsell-image"
|
67 |
+
src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/scanning-free-man.svg' ?>">
|
68 |
+
<div class="sui-upsell-notice">
|
69 |
+
<p>
|
70 |
+
<?php printf( __( "Defender Pro allows you to scan your entire file structure for malicious code, including non-WordPress files. This feature is included in a WPMU DEV monthly membership along with 24/7 support and lots of handy site management tools – <a target='_blank' href='%s'>Try it all FREE today!</a>", "defender-security" ),
|
71 |
+
\WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_filescanning_settings_upsell_link' ) ) ?>
|
72 |
+
</p>
|
|
|
|
|
73 |
</div>
|
74 |
</div>
|
75 |
+
<div class="sui-box-settings-row">
|
76 |
+
<div class="sui-box-settings-col-1">
|
77 |
+
<span class="sui-settings-label"><?php _e( "Maximum included file size", "defender-security" ) ?></span>
|
78 |
+
<span class="sui-description">
|
79 |
+
<?php _e( "Defender will skip any files larger than this size. The smaller the number, the faster Defender will scan your website.", "defender-security" ) ?>
|
80 |
+
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
</div>
|
82 |
+
|
83 |
+
<div class="sui-box-settings-col-2">
|
84 |
+
<div class="sui-form-field">
|
85 |
+
<div class="sui-form-field">
|
86 |
+
<input type="number" size="4" class="sui-form-control sui-input-sm sui-field-has-suffix"
|
87 |
+
value="<?php echo esc_attr( $setting->max_filesize ) ?>"
|
88 |
+
name="max_filesize">
|
89 |
+
<span class="sui-field-suffix">Mb</span>
|
90 |
+
|
91 |
+
</div>
|
92 |
+
</div>
|
93 |
</div>
|
94 |
</div>
|
95 |
+
</div>
|
96 |
+
<input type="hidden" name="action" value="saveScanSettings"/>
|
97 |
+
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
98 |
+
<div class="sui-box-footer">
|
99 |
+
<div class="sui-actions-right">
|
100 |
+
<button type="submit" class="sui-button sui-button-blue">
|
101 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
102 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
</div>
|
104 |
+
</div>
|
105 |
+
</form>
|
106 |
+
</div>
|
107 |
+
<dialog id="all-ok" title="<?php esc_attr_e( 'All OK', "defender-security" ) ?>">
|
108 |
+
<div class="wp-defender">
|
109 |
+
<form method="post" class="scan-frm scan-settings">
|
110 |
<input type="hidden" name="action" value="saveScanSettings"/>
|
111 |
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
112 |
+
<textarea rows="12" name="email_all_ok"><?php echo $setting->email_all_ok ?></textarea>
|
113 |
+
<strong class="small">
|
114 |
+
<?php _e( "Available variables", "defender-security" ) ?>
|
115 |
+
</strong>
|
116 |
+
<div class="clearfix"></div>
|
117 |
+
<span class="def-tag tag-generic">{USER_NAME}</span>
|
118 |
+
<span class="def-tag tag-generic">{SITE_URL}</span>
|
119 |
+
<div class="clearfix mline"></div>
|
120 |
+
<hr class="mline"/>
|
121 |
+
<button type="button"
|
122 |
+
class="button button-light close"><?php _e( "Cancel", "defender-security" ) ?></button>
|
123 |
+
<button class="button float-r"><?php _e( "Save Template", "defender-security" ) ?></button>
|
124 |
</form>
|
125 |
</div>
|
126 |
+
</dialog>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/module/scan/view/setting.php
CHANGED
@@ -1,162 +1,96 @@
|
|
1 |
-
<div class="
|
2 |
-
<div class="box-
|
3 |
-
<h3
|
|
|
|
|
4 |
</div>
|
5 |
-
<
|
6 |
-
<
|
7 |
-
<div class="
|
8 |
-
<div class="
|
9 |
-
<
|
10 |
-
<span class="
|
11 |
-
|
12 |
-
|
13 |
</div>
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
<
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
<
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
<
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
</div>
|
48 |
</div>
|
49 |
-
<div class="
|
50 |
-
<div class="
|
51 |
-
<
|
52 |
-
<span class="
|
53 |
-
|
54 |
-
|
55 |
</div>
|
56 |
-
|
57 |
-
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
</div>
|
60 |
</div>
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
<span class="toggle">
|
70 |
-
<input type="hidden" name="always_send" value="0"/>
|
71 |
-
<input type="checkbox" name="always_send" class="toggle-checkbox" value="1"
|
72 |
-
id="always_send" <?php checked( true, $setting->always_send ) ?>/>
|
73 |
-
<label class="toggle-label" for="always_send"></label>
|
74 |
-
</span>
|
75 |
-
<label><?php _e( "Send all scan report emails", "defender-security" ) ?></label>
|
76 |
-
</div>
|
77 |
-
</div>
|
78 |
-
<div class="columns">
|
79 |
-
<div class="column is-one-third">
|
80 |
-
<strong><?php _e( "Email subject", "defender-security" ) ?></strong>
|
81 |
-
</div>
|
82 |
-
<div class="column">
|
83 |
-
<input type="text" name="email_subject" value="<?php echo esc_attr( $setting->email_subject ) ?>"/>
|
84 |
-
</div>
|
85 |
</div>
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
<span class="sub">
|
90 |
-
<?php _e( "When Defender scans your website, a report will be generated with any issues that have been found. You can choose to have reports emailed to you.", "defender-security" ) ?>
|
91 |
-
</span>
|
92 |
-
</div>
|
93 |
-
<div class="column">
|
94 |
-
<ul class="dev-list">
|
95 |
-
<li>
|
96 |
-
<div>
|
97 |
-
<span class="list-label"><?php _e( "When an issue is found", "defender-security" ) ?></span>
|
98 |
-
<span class="list-detail tr">
|
99 |
-
<a href="#issue-found" rel="dialog" role="button"><?php _e( "Edit", "defender-security" ) ?></a></span>
|
100 |
-
</div>
|
101 |
-
</li>
|
102 |
-
<li>
|
103 |
-
<div>
|
104 |
-
<span class="list-label"><?php _e( "When no issues are found", "defender-security" ) ?></span>
|
105 |
-
<span class="list-detail tr">
|
106 |
-
<a href="#all-ok"
|
107 |
-
rel="dialog" role="button"><?php _e( "Edit", "defender-security" ) ?></a></span>
|
108 |
-
</div>
|
109 |
-
</li>
|
110 |
-
</ul>
|
111 |
-
</div>
|
112 |
-
</div>
|
113 |
-
<div class="clear line"></div>
|
114 |
-
<input type="hidden" name="action" value="saveScanSettings"/>
|
115 |
-
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
116 |
-
<button class="button float-r"><?php _e( "Update Settings", "defender-security" ) ?></button>
|
117 |
-
<div class="clear"></div>
|
118 |
-
</form>
|
119 |
-
</div>
|
120 |
-
</div>
|
121 |
-
<dialog id="issue-found" title="<?php esc_attr_e( "Issues found", "defender-security" ) ?>">
|
122 |
-
<div class="wp-defender">
|
123 |
-
<form method="post" class="scan-frm scan-settings">
|
124 |
-
<textarea rows="12" name="email_has_issue"><?php echo $setting->email_has_issue ?></textarea>
|
125 |
-
<strong class="small">
|
126 |
-
<?php _e( "Available variables", "defender-security" ) ?>
|
127 |
-
</strong>
|
128 |
-
<input type="hidden" name="action" value="saveScanSettings"/>
|
129 |
-
<div class="clearfix"></div>
|
130 |
-
<span class="def-tag tag-generic">{USER_NAME}</span>
|
131 |
-
<span class="def-tag tag-generic">{SITE_URL}</span>
|
132 |
-
<span class="def-tag tag-generic">{ISSUES_COUNT}</span>
|
133 |
-
<span class="def-tag tag-generic">{ISSUES_LIST}</span>
|
134 |
-
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
135 |
-
<div class="clearfix mline"></div>
|
136 |
-
<hr class="mline"/>
|
137 |
-
<button type="button"
|
138 |
-
class="button button-light close"><?php _e( "Cancel", "defender-security" ) ?></button>
|
139 |
-
<button class="button float-r"><?php _e( "Save Template", "defender-security" ) ?></button>
|
140 |
-
</form>
|
141 |
-
</div>
|
142 |
-
</dialog>
|
143 |
-
<dialog id="all-ok" title="<?php esc_attr_e( 'All OK', "defender-security" ) ?>">
|
144 |
-
<div class="wp-defender">
|
145 |
-
<form method="post" class="scan-frm scan-settings">
|
146 |
-
<input type="hidden" name="action" value="saveScanSettings"/>
|
147 |
-
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
148 |
-
<textarea rows="12" name="email_all_ok"><?php echo $setting->email_all_ok ?></textarea>
|
149 |
-
<strong class="small">
|
150 |
-
<?php _e( "Available variables", "defender-security" ) ?>
|
151 |
-
</strong>
|
152 |
-
<div class="clearfix"></div>
|
153 |
-
<span class="def-tag tag-generic">{USER_NAME}</span>
|
154 |
-
<span class="def-tag tag-generic">{SITE_URL}</span>
|
155 |
-
<div class="clearfix mline"></div>
|
156 |
-
<hr class="mline"/>
|
157 |
-
<button type="button"
|
158 |
-
class="button button-light close"><?php _e( "Cancel", "defender-security" ) ?></button>
|
159 |
-
<button class="button float-r"><?php _e( "Save Template", "defender-security" ) ?></button>
|
160 |
-
</form>
|
161 |
-
</div>
|
162 |
-
</dialog>
|
1 |
+
<div class="sui-box">
|
2 |
+
<div class="sui-box-header">
|
3 |
+
<h3 class="sui-box-title">
|
4 |
+
<?php _e( "Settings", "defender-security" ) ?>
|
5 |
+
</h3>
|
6 |
</div>
|
7 |
+
<form method="post" class="scan-frm scan-settings">
|
8 |
+
<div class="sui-box-body">
|
9 |
+
<div class="sui-box-settings-row">
|
10 |
+
<div class="sui-box-settings-col-1">
|
11 |
+
<span class="sui-settings-label"><?php _e( "Scan Types", "defender-security" ) ?></span>
|
12 |
+
<span class="sui-description">
|
13 |
+
<?php _e( "Choose the scan types you would like to include in your default scan. It's recommended you enable all types.", "defender-security" ) ?>
|
14 |
+
</span>
|
15 |
</div>
|
16 |
+
|
17 |
+
<div class="sui-box-settings-col-2">
|
18 |
+
<div class="sui-form-field">
|
19 |
+
<label class="sui-toggle">
|
20 |
+
<input type="hidden" name="scan_core" value="0"/>
|
21 |
+
<input role="presentation" type="checkbox" name="scan_core" class="toggle-checkbox"
|
22 |
+
id="core-scan" value="1"
|
23 |
+
<?php checked( true, $setting->scan_core ) ?>/>
|
24 |
+
<span class="sui-toggle-slider"></span>
|
25 |
+
</label>
|
26 |
+
<label for="core-scan" class="sui-toggle-label">
|
27 |
+
<?php _e( "WordPress Core", "defender-security" ) ?>
|
28 |
+
</label>
|
29 |
+
<p class="sui-description sui-toggle-content">
|
30 |
+
<?php _e( "Defender checks for any modifications or additions to WordPress core files.", "defender-security" ) ?>
|
31 |
+
</p>
|
32 |
+
</div>
|
33 |
+
<div class="sui-form-field">
|
34 |
+
<label class="sui-toggle">
|
35 |
+
<input type="hidden" name="scan_vuln" value="0"/>
|
36 |
+
<input role="presentation" type="checkbox" class="toggle-checkbox" name="scan_vuln"
|
37 |
+
value="1"
|
38 |
+
id="scan-vuln" <?php checked( true, $setting->scan_vuln ) ?>/>
|
39 |
+
<span class="sui-toggle-slider"></span>
|
40 |
+
</label>
|
41 |
+
<label for="scan_vuln" class="sui-toggle-label">
|
42 |
+
<?php _e( "Plugins & Themes", "defender-security" ) ?>
|
43 |
+
</label>
|
44 |
+
<p class="sui-description sui-toggle-content">
|
45 |
+
<?php _e( "Defender looks for publicly reported vulnerabilities in your installed plugins and themes.", "defender-security" ) ?>
|
46 |
+
</p>
|
47 |
+
</div>
|
48 |
+
<div class="sui-form-field">
|
49 |
+
<label class="sui-toggle">
|
50 |
+
<input type="hidden" name="scan_content" value="0"/>
|
51 |
+
<input role="presentation" type="checkbox" class="toggle-checkbox" name="scan_content"
|
52 |
+
value="1"
|
53 |
+
id="scan-content" <?php checked( true, $setting->scan_content ) ?>/>
|
54 |
+
<span class="sui-toggle-slider"></span>
|
55 |
+
</label>
|
56 |
+
<label for="scan_content" class="sui-toggle-label">
|
57 |
+
<?php _e( "Suspicious Code", "defender-security" ) ?>
|
58 |
+
</label>
|
59 |
+
<p class="sui-description sui-toggle-content">
|
60 |
+
<?php _e( "Defender looks inside all of your files for suspicious and potentially harmful code.", "defender-security" ) ?>
|
61 |
+
</p>
|
62 |
+
</div>
|
63 |
</div>
|
64 |
</div>
|
65 |
+
<div class="sui-box-settings-row">
|
66 |
+
<div class="sui-box-settings-col-1">
|
67 |
+
<span class="sui-settings-label"><?php _e( "Maximum included file size", "defender-security" ) ?></span>
|
68 |
+
<span class="sui-description">
|
69 |
+
<?php _e( "Defender will skip any files larger than this size. The smaller the number, the faster Defender will scan your website.", "defender-security" ) ?>
|
70 |
+
</span>
|
71 |
</div>
|
72 |
+
|
73 |
+
<div class="sui-box-settings-col-2">
|
74 |
+
<div class="sui-form-field">
|
75 |
+
<div class="sui-form-field">
|
76 |
+
<input type="number" size="4" class="sui-form-control sui-input-sm sui-field-has-suffix"
|
77 |
+
value="<?php echo esc_attr( $setting->max_filesize ) ?>"
|
78 |
+
name="max_filesize">
|
79 |
+
<span class="sui-field-suffix">Mb</span>
|
80 |
+
|
81 |
+
</div>
|
82 |
+
</div>
|
83 |
</div>
|
84 |
</div>
|
85 |
+
</div>
|
86 |
+
<input type="hidden" name="action" value="saveScanSettings"/>
|
87 |
+
<?php wp_nonce_field( 'saveScanSettings' ) ?>
|
88 |
+
<div class="sui-box-footer">
|
89 |
+
<div class="sui-actions-right">
|
90 |
+
<button type="submit" class="sui-button sui-button-blue">
|
91 |
+
<i class="sui-icon-save" aria-hidden="true"></i>
|
92 |
+
<?php _e( "Save Changes", "defender-security" ) ?></button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
</div>
|
94 |
+
</div>
|
95 |
+
</form>
|
96 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/view/activator-free.php
CHANGED
@@ -1,94 +1,116 @@
|
|
1 |
-
<dialog id="activator">
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<div class="
|
10 |
-
<
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
</
|
20 |
-
</div>
|
21 |
-
<div class="column is-2">
|
22 |
-
<span class="toggle float-r">
|
23 |
-
<input type="checkbox"
|
24 |
-
name="activator[]" checked
|
25 |
-
class="toggle-checkbox" id="active_scan"
|
26 |
-
value="activate_scan"/>
|
27 |
-
<label class="toggle-label" for="active_scan"></label>
|
28 |
-
</span>
|
29 |
</div>
|
30 |
</div>
|
31 |
-
<
|
32 |
-
<div class="
|
33 |
-
<
|
34 |
-
<
|
35 |
-
|
36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
</div>
|
38 |
-
|
39 |
-
|
40 |
-
<
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
<?php _e( "These services will be configured with recommended settings. You can change these at any time.", "defender-security" ) ?>
|
50 |
-
</p>
|
51 |
</div>
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
</div>
|
56 |
-
</form>
|
57 |
-
</div>
|
58 |
-
<div class="activate-progress wd-hide">
|
59 |
-
<div class="line">
|
60 |
-
<?php _e( "Just a moment while Defender activates those services for you...", "defender-security" ) ?>
|
61 |
</div>
|
62 |
-
<div class="
|
63 |
-
<div class="
|
64 |
-
<
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
</div>
|
69 |
-
<div class="
|
70 |
-
<span
|
71 |
</div>
|
72 |
</div>
|
73 |
</div>
|
74 |
-
<p class="tc sub status-text"></p>
|
75 |
</div>
|
76 |
-
|
77 |
-
|
78 |
-
jQuery(function ($) {
|
79 |
-
//hack to fix the dialog toggle
|
80 |
-
setTimeout(function () {
|
81 |
-
$('.wd-activator label').each(function () {
|
82 |
-
var parent = $(this).closest('div');
|
83 |
-
var input = parent.find('#' + $(this).attr('for'));
|
84 |
-
$(this).on('click', function () {
|
85 |
-
if (input.prop('checked') == false) {
|
86 |
-
input.prop('checked', true);
|
87 |
-
} else {
|
88 |
-
input.prop('checked', false);
|
89 |
-
}
|
90 |
-
})
|
91 |
-
})
|
92 |
-
}, 500)
|
93 |
-
})
|
94 |
-
</script>
|
1 |
+
<div class="sui-dialog" aria-hidden="true" tabindex="-1" id="activator">
|
2 |
+
|
3 |
+
<div class="sui-dialog-overlay" data-a11y-dialog-hide></div>
|
4 |
+
|
5 |
+
<div class="sui-dialog-content" aria-labelledby="Quick setup" aria-describedby="" role="dialog">
|
6 |
+
|
7 |
+
<div class="sui-box activate-picker" role="document">
|
8 |
+
|
9 |
+
<div class="sui-box-header">
|
10 |
+
<h3 class="sui-box-title">
|
11 |
+
<?php _e( "Quick Setup", "defender-security" ) ?></h3>
|
12 |
+
<div class="sui-actions-right">
|
13 |
+
<form method="post" class="skip-activator">
|
14 |
+
<input type="hidden" name="action" value="skipActivator"/>
|
15 |
+
<?php wp_nonce_field( 'skipActivator', '_wpnonce', true ) ?>
|
16 |
+
<button type="submit" class="sui-button sui-button-ghost">
|
17 |
+
<?php _e( "Skip", "defender-security" ) ?>
|
18 |
+
</button>
|
19 |
+
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
</div>
|
21 |
</div>
|
22 |
+
<form method="post">
|
23 |
+
<div class="sui-box-body">
|
24 |
+
<p><?php _e( "Welcome to Defender, the hottest security plugin for WordPress! Let’s quickly set up the basics for you, then you can fine tweak each setting as you go – our recommendations are on by default.", "defender-security" ) ?></p>
|
25 |
+
<hr class="sui-flushed"/>
|
26 |
+
<input type="hidden" value="activateModule" name="action"/>
|
27 |
+
<?php wp_nonce_field( 'activateModule' ) ?>
|
28 |
+
<div class="sui-row">
|
29 |
+
<div class="sui-col-md-10">
|
30 |
+
<span class="sui-settings-label">
|
31 |
+
<?php
|
32 |
+
if ( wp_defender()->isFree ) {
|
33 |
+
_e( "File Scanning", "defender-security" );
|
34 |
+
} else {
|
35 |
+
_e( "Automatic File Scans & Reporting", "defender-security" );
|
36 |
+
} ?>
|
37 |
+
</span>
|
38 |
+
<span class="sui-description">
|
39 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious.", "defender-security" ) ?>
|
40 |
+
</span>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<div class="sui-col-md-2">
|
44 |
+
<div class="sui-form-field tr">
|
45 |
+
<label class="sui-toggle">
|
46 |
+
<input type="checkbox"
|
47 |
+
name="activator[]" checked
|
48 |
+
class="toggle-checkbox" id="active_scan"
|
49 |
+
value="activate_scan"/>
|
50 |
+
<span class="sui-toggle-slider"></span>
|
51 |
+
</label>
|
52 |
+
</div>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
<hr class="sui-flushed"/>
|
56 |
+
<div class="sui-row">
|
57 |
+
<div class="sui-col-md-10">
|
58 |
+
<span class="sui-settings-label">
|
59 |
+
<?php _e( "IP Lockouts", "defender-security" ) ?>
|
60 |
+
</span>
|
61 |
+
<span class="sui-description">
|
62 |
+
<?php _e( "Protect your login area and have Defender automatically lockout any suspicious behaviour.", "defender-security" ) ?>
|
63 |
+
</span>
|
64 |
+
</div>
|
65 |
+
|
66 |
+
<div class="sui-col-md-2">
|
67 |
+
<div class="sui-form-field tr">
|
68 |
+
<label class="sui-toggle">
|
69 |
+
<input type="checkbox" checked
|
70 |
+
name="activator[]" class="toggle-checkbox" id="activate_lockout"
|
71 |
+
value="activate_lockout"/>
|
72 |
+
<span class="sui-toggle-slider"></span>
|
73 |
+
</label>
|
74 |
+
</div>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
</div>
|
78 |
+
|
79 |
+
<div class="sui-box-footer">
|
80 |
+
<div class="sui-row">
|
81 |
+
<div class="sui-col-md-9">
|
82 |
+
<small><?php _e( "Note: These services will be configured with our recommended settings. You can change these at any time.", "defender-security" ) ?></small>
|
83 |
+
</div>
|
84 |
+
<div class="sui-col-md-3">
|
85 |
+
<button type="submit" class="sui-button sui-button-blue">
|
86 |
+
<?php _e( "Get Started", "defender-security" ) ?></button>
|
87 |
+
</div>
|
88 |
+
</div>
|
|
|
|
|
89 |
</div>
|
90 |
+
</form>
|
91 |
+
<img src="<?php echo wp_defender()->getPluginUrl() . '/assets/img/defender-activator.svg' ?>"
|
92 |
+
class="sui-image sui-image-center"/>
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
</div>
|
94 |
+
<div class="sui-box activate-progress wd-hide">
|
95 |
+
<div class="sui-box-body">
|
96 |
+
<p>
|
97 |
+
<?php _e( "Just a moment while Defender activates those services for you...", "defender-security" ) ?>
|
98 |
+
</p>
|
99 |
+
<div class="sui-progress-block">
|
100 |
+
<div class="sui-progress">
|
101 |
+
<div class="sui-progress-text scan-progress-text sui-icon-loader sui-loading">
|
102 |
+
<span>0%</span>
|
103 |
+
</div>
|
104 |
+
<div class="sui-progress-bar scan-progress-bar">
|
105 |
+
<span style="width: 0%"></span>
|
106 |
+
</div>
|
107 |
+
</div>
|
108 |
</div>
|
109 |
+
<div class="sui-progress-state">
|
110 |
+
<span class="status-text"></span>
|
111 |
</div>
|
112 |
</div>
|
113 |
</div>
|
|
|
114 |
</div>
|
115 |
+
|
116 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/view/activator.php
CHANGED
@@ -1,129 +1,160 @@
|
|
1 |
-
<dialog id="activator">
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
<div class="
|
10 |
-
<
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
</
|
20 |
-
</div>
|
21 |
-
<div class="column is-2">
|
22 |
-
<span class="toggle float-r">
|
23 |
-
<input type="checkbox"
|
24 |
-
name="activator[]" checked
|
25 |
-
class="toggle-checkbox" id="active_scan"
|
26 |
-
value="activate_scan"/>
|
27 |
-
<label class="toggle-label" for="active_scan"></label>
|
28 |
-
</span>
|
29 |
-
</div>
|
30 |
-
</div>
|
31 |
-
<div class="columns">
|
32 |
-
<div class="column is-10">
|
33 |
-
<strong><?php _e( "Audit Logging", "defender-security" ) ?></strong>
|
34 |
-
<p class="sub">
|
35 |
-
<?php _e( "Track and log events when changes are made to your website, giving you full visibility over what's going on behind the scenes.", "defender-security" ) ?>
|
36 |
-
</p>
|
37 |
-
</div>
|
38 |
-
<div class="column is-2">
|
39 |
-
<span class="toggle float-r">
|
40 |
-
<input type="checkbox"
|
41 |
-
name="activator[]" checked
|
42 |
-
class="toggle-checkbox" id="active_audit" value="activate_audit"/>
|
43 |
-
<label class="toggle-label" for="active_audit"></label>
|
44 |
-
</span>
|
45 |
-
</div>
|
46 |
-
</div>
|
47 |
-
<div class="columns">
|
48 |
-
<div class="column is-10">
|
49 |
-
<strong><?php _e( "IP Lockouts", "defender-security" ) ?></strong>
|
50 |
-
<p class="sub">
|
51 |
-
<?php _e( "Protect your login area and give Defender the nod to automatically lockout any suspicious behavior.", "defender-security" ) ?>
|
52 |
-
</p>
|
53 |
-
</div>
|
54 |
-
<div class="column is-2">
|
55 |
-
<span class="toggle float-r">
|
56 |
-
<input type="checkbox" checked
|
57 |
-
name="activator[]" class="toggle-checkbox" id="activate_lockout" value="activate_lockout"/>
|
58 |
-
<label class="toggle-label" for="activate_lockout"></label>
|
59 |
-
</span>
|
60 |
</div>
|
61 |
</div>
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
<
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
</div>
|
71 |
-
<
|
72 |
-
<
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
</div>
|
79 |
</div>
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
|
|
|
|
89 |
</div>
|
90 |
-
</
|
91 |
-
|
92 |
-
|
93 |
-
<div class="activate-progress wd-hide">
|
94 |
-
<div class="line">
|
95 |
-
<?php _e( "Just a moment while Defender activates those services for you...", "defender-security" ) ?>
|
96 |
</div>
|
97 |
-
<div class="
|
98 |
-
<div class="
|
99 |
-
<
|
100 |
-
|
101 |
-
|
102 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
</div>
|
104 |
-
<div class="
|
105 |
-
<span
|
106 |
</div>
|
107 |
</div>
|
108 |
</div>
|
109 |
-
<p class="tc sub status-text"></p>
|
110 |
</div>
|
111 |
-
|
112 |
-
|
113 |
-
jQuery(function ($) {
|
114 |
-
//hack to fix the dialog toggle
|
115 |
-
setTimeout(function () {
|
116 |
-
$('.wd-activator label').each(function () {
|
117 |
-
var parent = $(this).closest('div');
|
118 |
-
var input = parent.find('#' + $(this).attr('for'));
|
119 |
-
$(this).on('click', function () {
|
120 |
-
if (input.prop('checked') == false) {
|
121 |
-
input.prop('checked', true);
|
122 |
-
} else {
|
123 |
-
input.prop('checked', false);
|
124 |
-
}
|
125 |
-
})
|
126 |
-
})
|
127 |
-
}, 500)
|
128 |
-
})
|
129 |
-
</script>
|
1 |
+
<div class="sui-dialog" aria-hidden="true" tabindex="-1" id="activator">
|
2 |
+
|
3 |
+
<div class="sui-dialog-overlay" data-a11y-dialog-hide></div>
|
4 |
+
|
5 |
+
<div class="sui-dialog-content" aria-labelledby="Quick setup" aria-describedby="" role="dialog">
|
6 |
+
|
7 |
+
<div class="sui-box activate-picker" role="document">
|
8 |
+
|
9 |
+
<div class="sui-box-header">
|
10 |
+
<h3 class="sui-box-title">
|
11 |
+
<?php _e( "Quick Setup", "defender-security" ) ?></h3>
|
12 |
+
<div class="sui-actions-right">
|
13 |
+
<form method="post" class="skip-activator">
|
14 |
+
<input type="hidden" name="action" value="skipActivator"/>
|
15 |
+
<?php wp_nonce_field( 'skipActivator', '_wpnonce', true ) ?>
|
16 |
+
<button type="submit" class="sui-button sui-button-ghost">
|
17 |
+
<?php _e( "Skip", "defender-security" ) ?>
|
18 |
+
</button>
|
19 |
+
</form>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
</div>
|
21 |
</div>
|
22 |
+
<form method="post">
|
23 |
+
<div class="sui-box-body">
|
24 |
+
<p><?php _e( "Welcome to Defender, the hottest security plugin for WordPress! Let’s quickly set up the basics for you, then you can fine tweak each setting as you go – our recommendations are on by default.", "defender-security" ) ?></p>
|
25 |
+
<hr class="sui-flushed"/>
|
26 |
+
<input type="hidden" value="activateModule" name="action"/>
|
27 |
+
<?php wp_nonce_field( 'activateModule' ) ?>
|
28 |
+
<div class="sui-row">
|
29 |
+
<div class="sui-col-md-10">
|
30 |
+
<span class="sui-settings-label">
|
31 |
+
<?php
|
32 |
+
if ( wp_defender()->isFree ) {
|
33 |
+
_e( "File Scanning", "defender-security" );
|
34 |
+
} else {
|
35 |
+
_e( "Automatic File Scans & Reporting", "defender-security" );
|
36 |
+
} ?>
|
37 |
+
</span>
|
38 |
+
<span class="sui-description">
|
39 |
+
<?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious.", "defender-security" ) ?>
|
40 |
+
</span>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
<div class="sui-col-md-2">
|
44 |
+
<div class="sui-form-field tr">
|
45 |
+
<label class="sui-toggle">
|
46 |
+
<input type="checkbox"
|
47 |
+
name="activator[]" checked
|
48 |
+
class="toggle-checkbox" id="active_scan"
|
49 |
+
value="activate_scan"/>
|
50 |
+
<span class="sui-toggle-slider"></span>
|
51 |
+
</label>
|
52 |
+
</div>
|
53 |
+
</div>
|
54 |
</div>
|
55 |
+
<hr class="sui-flushed"/>
|
56 |
+
<div class="sui-row">
|
57 |
+
<div class="sui-col-md-10">
|
58 |
+
<span class="sui-settings-label">
|
59 |
+
<?php _e( "Audit Logging", "defender-security" ) ?>
|
60 |
+
</span>
|
61 |
+
<span class="sui-description">
|
62 |
+
<?php _e( "Track and log events when changes are made to your website giving you full visibility of what’s going on behind the scenes.", "defender-security" ) ?>
|
63 |
+
</span>
|
64 |
+
</div>
|
65 |
+
|
66 |
+
<div class="sui-col-md-2">
|
67 |
+
<div class="sui-form-field tr">
|
68 |
+
<label class="sui-toggle">
|
69 |
+
<input type="checkbox"
|
70 |
+
name="activator[]" checked
|
71 |
+
class="toggle-checkbox" id="active_audit" value="activate_audit"/>
|
72 |
+
<span class="sui-toggle-slider"></span>
|
73 |
+
</label>
|
74 |
+
</div>
|
75 |
+
</div>
|
76 |
+
</div>
|
77 |
+
<hr class="sui-flushed"/>
|
78 |
+
<div class="sui-row">
|
79 |
+
<div class="sui-col-md-10">
|
80 |
+
<span class="sui-settings-label">
|
81 |
+
<?php _e( "IP Lockouts", "defender-security" ) ?>
|
82 |
+
</span>
|
83 |
+
<span class="sui-description">
|
84 |
+
<?php _e( "Protect your login area and have Defender automatically lockout any suspicious behaviour.", "defender-security" ) ?>
|
85 |
+
</span>
|
86 |
+
</div>
|
87 |
+
|
88 |
+
<div class="sui-col-md-2">
|
89 |
+
<div class="sui-form-field tr">
|
90 |
+
<label class="sui-toggle">
|
91 |
+
<input type="checkbox" checked
|
92 |
+
name="activator[]" class="toggle-checkbox" id="activate_lockout"
|
93 |
+
value="activate_lockout"/>
|
94 |
+
<span class="sui-toggle-slider"></span>
|
95 |
+
</label>
|
96 |
+
</div>
|
97 |
+
</div>
|
98 |
+
</div>
|
99 |
+
<hr class="sui-flushed"/>
|
100 |
+
<div class="sui-row">
|
101 |
+
<div class="sui-col-md-10">
|
102 |
+
<span class="sui-settings-label">
|
103 |
+
<?php _e( "Blacklist Monitor", "defender-security" ) ?>
|
104 |
+
</span>
|
105 |
+
<span class="sui-description">
|
106 |
+
<?php _e( "Automatically check if you’re on Google’s blacklist every 6 hours. If something’s wrong, we’ll let you know via email.", "defender-security" ) ?>
|
107 |
+
</span>
|
108 |
+
</div>
|
109 |
+
|
110 |
+
<div class="sui-col-md-2">
|
111 |
+
<div class="sui-form-field tr">
|
112 |
+
<label class="sui-toggle">
|
113 |
+
<input type="checkbox" checked
|
114 |
+
name="activator[]" class="toggle-checkbox" id="activate_blacklist"
|
115 |
+
value="activate_blacklist"/>
|
116 |
+
<span class="sui-toggle-slider"></span>
|
117 |
+
</label>
|
118 |
+
</div>
|
119 |
+
</div>
|
120 |
</div>
|
121 |
</div>
|
122 |
+
|
123 |
+
<div class="sui-box-footer">
|
124 |
+
<div class="sui-row">
|
125 |
+
<div class="sui-col-md-9">
|
126 |
+
<small><?php _e( "Note: These services will be configured with our recommended settings. You can change these at any time.", "defender-security" ) ?></small>
|
127 |
+
</div>
|
128 |
+
<div class="sui-col-md-3">
|
129 |
+
<button type="submit" class="sui-button sui-button-blue">
|
130 |
+
<?php _e( "Get Started", "defender-security" ) ?></button>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
</div>
|
134 |
+
</form>
|
135 |
+
<img src="<?php echo wp_defender()->getPluginUrl() . '/assets/img/defender-activator.svg' ?>"
|
136 |
+
class="sui-image sui-image-center"/>
|
|
|
|
|
|
|
137 |
</div>
|
138 |
+
<div class="sui-box activate-progress wd-hide">
|
139 |
+
<div class="sui-box-body">
|
140 |
+
<p>
|
141 |
+
<?php _e( "Just a moment while Defender activates those services for you...", "defender-security" ) ?>
|
142 |
+
</p>
|
143 |
+
<div class="sui-progress-block">
|
144 |
+
<div class="sui-progress">
|
145 |
+
<div class="sui-progress-text scan-progress-text sui-icon-loader sui-loading">
|
146 |
+
<span>0%</span>
|
147 |
+
</div>
|
148 |
+
<div class="sui-progress-bar scan-progress-bar">
|
149 |
+
<span style="width: 0%"></span>
|
150 |
+
</div>
|
151 |
+
</div>
|
152 |
</div>
|
153 |
+
<div class="sui-progress-state">
|
154 |
+
<span class="status-text"></span>
|
155 |
</div>
|
156 |
</div>
|
157 |
</div>
|
|
|
158 |
</div>
|
159 |
+
|
160 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/view/dashboard.php
CHANGED
@@ -1,118 +1,209 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
|
2 |
<div id="wp-defender" class="wp-defender">
|
3 |
<div class="def-dashboard">
|
4 |
-
<
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
if ( $sCount > 0 && $hCount > 0 ) :
|
21 |
-
?>
|
22 |
-
<span class=""
|
23 |
-
tooltip="<?php esc_attr_e( sprintf( __( 'You have %d security tweak(s) and %d suspicious file(s) needing attention.', "defender-security" ), $hCount, $sCount ) ); ?>">
|
24 |
-
<?php elseif ( $hCount > 0 ): ?>
|
25 |
-
<span class=""
|
26 |
-
tooltip="<?php esc_attr_e( sprintf( __( 'You have %d security tweak(s) needing attention.', "defender-security" ), $hCount ) ); ?>">
|
27 |
-
<?php elseif ( $sCount > 0 ): ?>
|
28 |
-
<span class=""
|
29 |
-
tooltip="<?php esc_attr_e( sprintf( __( 'You have %d suspicious file(s) needing attention.', "defender-security" ), $sCount ) ); ?>">
|
30 |
-
<?php else: ?>
|
31 |
-
<span class=""
|
32 |
-
tooltip="<?php esc_attr_e( 'You have no outstanding security issues.', "defender-security" ); ?>">
|
33 |
-
<?php endif; ?>
|
34 |
-
<i class="def-icon icon-warning icon-yellow <?php echo $sCount > 0 ? 'fill-red' : null ?>" aria-hidden="true"></i>
|
35 |
-
<?php endif; ?>
|
36 |
-
</span>
|
37 |
-
<div class="clear"></div>
|
38 |
-
<span class="sub"><?php
|
39 |
-
_e( "security issues", "defender-security" ) ?></span>
|
40 |
-
</div>
|
41 |
-
</div>
|
42 |
-
<div class="column is-5">
|
43 |
-
<ul class="dev-list bold">
|
44 |
-
<li>
|
45 |
-
<div>
|
46 |
-
<span class="list-label"><?php _e( "Security tweaks actioned", "defender-security" ) ?></span>
|
47 |
-
<span class="list-detail"><span>
|
48 |
-
<?php
|
49 |
-
$settings = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
50 |
-
echo count( $settings->fixed ) + count( $settings->ignore ) ?>
|
51 |
-
/
|
52 |
-
<?php echo count( $settings->getDefinedRules() ) ?>
|
53 |
-
</span></span>
|
54 |
-
</div>
|
55 |
-
</li>
|
56 |
-
<li>
|
57 |
-
<div>
|
58 |
-
<span class="list-label"><?php _e( "File Scan Issues", "defender-security" ) ?></span>
|
59 |
-
<span class="list-detail">
|
60 |
-
<?php echo $controller->renderScanStatusText() ?>
|
61 |
-
</span>
|
62 |
-
</div>
|
63 |
-
</li>
|
64 |
-
<li>
|
65 |
-
<div>
|
66 |
-
<span class="list-label"><?php _e( "Last Lockout" ) ?></span>
|
67 |
-
<span class="list-detail lastLockout">.</span>
|
68 |
-
</div>
|
69 |
-
</li>
|
70 |
-
</ul>
|
71 |
-
</div>
|
72 |
</div>
|
73 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
</div>
|
75 |
-
<div class="row
|
76 |
-
<div class="col
|
77 |
<?php echo $controller->renderHardenerWidget() ?>
|
78 |
<?php $controller->renderBlacklistWidget() ?>
|
79 |
-
<?php $controller->renderAuditWidget() ?>
|
80 |
<?php $controller->renderATWidget() ?>
|
81 |
-
<?php if ( wp_defender()->isFree ): ?>
|
82 |
-
<div class="dev-box dev-team">
|
83 |
-
<div class="box-title">
|
84 |
-
<h3><?php _e( "TRY PRO FEATURES FOR FREE!", "defender-security" ) ?></h3>
|
85 |
-
</div>
|
86 |
-
<div class="box-content tc">
|
87 |
-
<div class="line">
|
88 |
-
<?php _e( "Upgrade to Defender Pro to unlock Advanced File Scanning, Blacklist Monitoring, Audit Logging and automated reporting for Audit Logging, IP Lockouts and File Scans.", "defender-security" ) ?>
|
89 |
-
</div>
|
90 |
-
<div class="line">
|
91 |
-
<?php _e( "Get all this as part of a WPMU DEV Membership, and the best part is you can try everything absolutely free.", "defender-security" ) ?>
|
92 |
-
</div>
|
93 |
-
<a href="#pro-feature" rel="dialog"
|
94 |
-
class="button button-green">
|
95 |
-
<?php _e( "FIND OUT MORE", "defender-security" ) ?></a>
|
96 |
-
</div>
|
97 |
-
</div>
|
98 |
-
<?php endif; ?>
|
99 |
</div>
|
100 |
-
<div class="col
|
101 |
<?php $controller->renderScanWidget() ?>
|
102 |
<?php $controller->renderLockoutWidget() ?>
|
|
|
103 |
<?php $controller->renderReportWidget() ?>
|
104 |
</div>
|
105 |
</div>
|
106 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
</div>
|
108 |
</div>
|
109 |
-
|
110 |
-
if ( $controller->isShowActivator() ) {
|
111 |
-
$view = wp_defender()->isFree ? 'activator-free' : 'activator';
|
112 |
-
$controller->renderPartial( $view );
|
113 |
-
} ?>
|
114 |
-
<?php
|
115 |
-
if ( wp_defender()->isFree ) {
|
116 |
-
$controller->renderPartial( 'pro-feature' );
|
117 |
-
}
|
118 |
-
?>
|
1 |
+
<?php
|
2 |
+
list( $hCount, $sCount ) = $controller->countTotalIssues( true );
|
3 |
+
$countAll = $hCount + $sCount;
|
4 |
+
?>
|
5 |
+
<div class="sui-wrap">
|
6 |
<div id="wp-defender" class="wp-defender">
|
7 |
<div class="def-dashboard">
|
8 |
+
<div class="sui-header">
|
9 |
+
<h1 class="sui-header-title">
|
10 |
+
<?php _e( "Dashboard", "defender-security" ) ?>
|
11 |
+
</h1>
|
12 |
+
</div>
|
13 |
+
<div class="sui-box sui-summary">
|
14 |
+
<div class="sui-summary-image-space" aria-hidden="true"></div>
|
15 |
+
<div class="sui-summary-segment">
|
16 |
+
<div class="sui-summary-details">
|
17 |
+
<span class="sui-summary-large"><?php echo $countAll ?></span>
|
18 |
+
<?php if ( $countAll > 0 ): ?>
|
19 |
+
<i aria-hidden="true" class="sui-icon-info sui-error"></i>
|
20 |
+
<?php else: ?>
|
21 |
+
<i class="sui-icon-check-tick sui-success" aria-hidden="true"></i>
|
22 |
+
<?php endif; ?>
|
23 |
+
<span class="sui-summary-sub"><?php _e( "Security issues", "defender-security" ) ?></span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
</div>
|
25 |
</div>
|
26 |
+
<div class="sui-summary-segment">
|
27 |
+
<ul class="sui-list">
|
28 |
+
<li>
|
29 |
+
<span class="sui-list-label"><?php _e( "Security Tweaks Actioned", "defender-security" ) ?></span>
|
30 |
+
<span class="sui-list-detail">
|
31 |
+
<?php
|
32 |
+
$settings = \WP_Defender\Module\Hardener\Model\Settings::instance();
|
33 |
+
echo count( $settings->fixed ) + count( $settings->ignore ) ?>
|
34 |
+
/
|
35 |
+
<?php echo count( $settings->getDefinedRules() )
|
36 |
+
?>
|
37 |
+
</span>
|
38 |
+
</li>
|
39 |
+
<li>
|
40 |
+
<span class="sui-list-label"><?php _e( "File Scan Issues", "defender-security" ) ?></span>
|
41 |
+
<span class="sui-list-detail">
|
42 |
+
<?php echo $controller->renderScanStatusText() ?>
|
43 |
+
</span>
|
44 |
+
</li>
|
45 |
+
<li>
|
46 |
+
<span class="sui-list-label"><?php _e( "Last Lockout", "defender-security" ) ?></span>
|
47 |
+
<span class="sui-list-detail lastLockout">
|
48 |
+
-
|
49 |
+
</span>
|
50 |
+
</li>
|
51 |
+
</ul>
|
52 |
+
</div>
|
53 |
</div>
|
54 |
+
<div class="sui-row">
|
55 |
+
<div class="sui-col">
|
56 |
<?php echo $controller->renderHardenerWidget() ?>
|
57 |
<?php $controller->renderBlacklistWidget() ?>
|
|
|
58 |
<?php $controller->renderATWidget() ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
</div>
|
60 |
+
<div class="sui-col">
|
61 |
<?php $controller->renderScanWidget() ?>
|
62 |
<?php $controller->renderLockoutWidget() ?>
|
63 |
+
<?php $controller->renderAuditWidget() ?>
|
64 |
<?php $controller->renderReportWidget() ?>
|
65 |
</div>
|
66 |
</div>
|
67 |
</div>
|
68 |
+
<?php
|
69 |
+
if ( $controller->isShowActivator() ) {
|
70 |
+
$view = wp_defender()->isFree ? 'activator-free' : 'activator';
|
71 |
+
$controller->renderPartial( $view );
|
72 |
+
} ?>
|
73 |
+
<?php if ( wp_defender()->isFree ): ?>
|
74 |
+
<div id="sui-cross-sell-footer" class="sui-row">
|
75 |
+
|
76 |
+
<div><span class="sui-icon-plugin-2"></span></div>
|
77 |
+
<h3><?php _e( "Check out our other free wordpress.org plugins!", "defender-security" ) ?></h3>
|
78 |
+
|
79 |
+
</div>
|
80 |
+
|
81 |
+
<!-- Cross-Sell Modules -->
|
82 |
+
<div class="sui-row sui-cross-sell-modules">
|
83 |
+
|
84 |
+
<div class="sui-col-md-4">
|
85 |
+
|
86 |
+
<!-- Cross-Sell Banner #1 -->
|
87 |
+
<div aria-hidden="true" class="sui-cross-1">
|
88 |
+
<span></span>
|
89 |
+
</div>
|
90 |
+
|
91 |
+
<div class="sui-box">
|
92 |
+
<div class="sui-box-body">
|
93 |
+
<h3><?php _e( "Smush Image Compression and Optimization", "defender-security" ) ?></h3>
|
94 |
+
<p><?php _e( "Resize, optimize and compress all of your images with the incredibly powerful and
|
95 |
+
award-winning, 100% free WordPress image optimizer.", "defender-security" ) ?></p>
|
96 |
+
<a href="https://wordpress.org/plugins/wp-smushit/"
|
97 |
+
target="_blank"
|
98 |
+
class="sui-button sui-button-ghost">
|
99 |
+
<?php _e( "View features", "defender-security" ) ?> <i aria-hidden="true"
|
100 |
+
class="sui-icon-arrow-right"></i>
|
101 |
+
</a>
|
102 |
+
</div>
|
103 |
+
</div>
|
104 |
+
|
105 |
+
</div>
|
106 |
+
|
107 |
+
<div class="sui-col-md-4">
|
108 |
+
|
109 |
+
<!-- Cross-Sell Banner #2 -->
|
110 |
+
<div aria-hidden="true" class="sui-cross-2">
|
111 |
+
<span></span>
|
112 |
+
</div>
|
113 |
+
|
114 |
+
<div class="sui-box">
|
115 |
+
<div class="sui-box-body">
|
116 |
+
<h3><?php _e( "Hummingbird Page Speed Optimization", "defender-security" ) ?></h3>
|
117 |
+
<p><?php _e( "Performance Tests, File Optimization & Compression, Page, Browser & Gravatar Caching,
|
118 |
+
GZIP Compression, CloudFlare Integration & more.", "defender-security" ) ?></p>
|
119 |
+
<a href="https://wordpress.org/plugins/defender-security/"
|
120 |
+
target="_blank"
|
121 |
+
class="sui-button sui-button-ghost">
|
122 |
+
<?php _e( "View features", "defender-security" ) ?> <i aria-hidden="true"
|
123 |
+
class="sui-icon-arrow-right"></i>
|
124 |
+
</a>
|
125 |
+
</div>
|
126 |
+
</div>
|
127 |
+
|
128 |
+
</div>
|
129 |
+
|
130 |
+
<div class="sui-col-md-4">
|
131 |
+
|
132 |
+
<!-- Cross-Sell Banner #3 -->
|
133 |
+
<div aria-hidden="true" class="sui-cross-3">
|
134 |
+
<span></span>
|
135 |
+
</div>
|
136 |
+
|
137 |
+
<div class="sui-box">
|
138 |
+
<div class="sui-box-body">
|
139 |
+
<h3><?php _e( "SmartCrawl Search Engine Optimization", "defender-security" ) ?></h3>
|
140 |
+
<p><?php _e( "Customize Titles & Meta Data, OpenGraph, Twitter & Pinterest Support, Auto-Keyword
|
141 |
+
Linking, SEO & Readability Analysis, Sitemaps, URL Crawler & more.", "defender-security" ) ?></p>
|
142 |
+
<span class="sui-tag"><?php _e( "Coming Soon", "defender-security" ) ?></span>
|
143 |
+
</div>
|
144 |
+
</div>
|
145 |
+
|
146 |
+
</div>
|
147 |
+
|
148 |
+
</div>
|
149 |
+
|
150 |
+
<div class="sui-cross-sell-bottom">
|
151 |
+
|
152 |
+
<h3><?php _e( "WPMU DEV - Your WordPress Toolkit", "defender-security" ) ?></h3>
|
153 |
+
<p><?php _e( "Pretty much everything you need for developing and managing WordPress based websites, and then
|
154 |
+
some.", "defender-security" ) ?></p>
|
155 |
+
|
156 |
+
<a href="https://premium.wpmudev.org/"
|
157 |
+
target="_blank"
|
158 |
+
role="button"
|
159 |
+
class="sui-button sui-button-green">
|
160 |
+
<?php _e( "Learn more", "defender-security" ) ?>
|
161 |
+
</a>
|
162 |
+
|
163 |
+
<img class="sui-image" src="<?php echo wp_defender()->getPluginUrl() . '/sui/images/dev-team.png' ?>"
|
164 |
+
aria-hidden="true">
|
165 |
+
|
166 |
+
</div>
|
167 |
+
<?php endif; ?>
|
168 |
+
<div class="sui-footer">Made with <i class="sui-icon-heart"></i> by WPMU DEV</div>
|
169 |
+
<?php if ( wp_defender()->isFree ): ?>
|
170 |
+
<ul class="sui-footer-nav">
|
171 |
+
<li><a href="https://profiles.wordpress.org/wpmudev#content-plugins" target="_blank">Free Plugins</a>
|
172 |
+
</li>
|
173 |
+
<li><a href="https://premium.wpmudev.org/features/" target="_blank">Membership</a></li>
|
174 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
175 |
+
<li><a href="https://wordpress.org/support/plugin/plugin-name" target="_blank">Support</a></li>
|
176 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
177 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
178 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
179 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
180 |
+
</ul>
|
181 |
+
<?php else: ?>
|
182 |
+
<ul class="sui-footer-nav">
|
183 |
+
<li><a href="https://premium.wpmudev.org/hub/" target="_blank">The Hub</a></li>
|
184 |
+
<li><a href="https://premium.wpmudev.org/projects/category/plugins/" target="_blank">Plugins</a></li>
|
185 |
+
<li><a href="https://premium.wpmudev.org/roadmap/" target="_blank">Roadmap</a></li>
|
186 |
+
<li><a href="https://premium.wpmudev.org/hub/support/" target="_blank">Support</a></li>
|
187 |
+
<li><a href="https://premium.wpmudev.org/docs/" target="_blank">Docs</a></li>
|
188 |
+
<li><a href="https://premium.wpmudev.org/hub/community/" target="_blank">Community</a></li>
|
189 |
+
<li><a href="https://premium.wpmudev.org/terms-of-service/" target="_blank">Terms of Service</a></li>
|
190 |
+
<li><a href="https://incsub.com/privacy-policy/" target="_blank">Privacy Policy</a></li>
|
191 |
+
</ul>
|
192 |
+
<?php endif; ?>
|
193 |
+
<ul class="sui-footer-social">
|
194 |
+
<li><a href="https://www.facebook.com/wpmudev" target="_blank">
|
195 |
+
<i class="sui-icon-social-facebook" aria-hidden="true"></i>
|
196 |
+
<span class="sui-screen-reader-text">Facebook</span>
|
197 |
+
</a></li>
|
198 |
+
<li><a href="https://twitter.com/wpmudev" target="_blank">
|
199 |
+
<i class="sui-icon-social-twitter" aria-hidden="true"></i></a>
|
200 |
+
<span class="sui-screen-reader-text">Twitter</span>
|
201 |
+
</li>
|
202 |
+
<li><a href="https://www.instagram.com/wpmu_dev/" target="_blank">
|
203 |
+
<i class="sui-icon-instagram" aria-hidden="true"></i>
|
204 |
+
<span class="sui-screen-reader-text">Instagram</span>
|
205 |
+
</a></li>
|
206 |
+
</ul>
|
207 |
</div>
|
208 |
</div>
|
209 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/css/styles.css
CHANGED
@@ -1,2585 +1,635 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
.wpmud .row.is_multiline .col-half:nth-child(odd) {
|
12 |
-
padding-left: 0; }
|
13 |
-
.wpmud .row.is_multiline .col-half:nth-child(even) {
|
14 |
-
padding-right: 0; }
|
15 |
-
.wpmud .columns .column {
|
16 |
-
box-sizing: border-box; }
|
17 |
-
.wpmud ::-webkit-input-placeholder {
|
18 |
-
/* WebKit, Blink, Edge */
|
19 |
-
color: #AAAAAA; }
|
20 |
-
.wpmud :-moz-placeholder {
|
21 |
-
/* Mozilla Firefox 4 to 18 */
|
22 |
-
color: #AAAAAA;
|
23 |
-
opacity: 1; }
|
24 |
-
.wpmud ::-moz-placeholder {
|
25 |
-
color: #AAAAAA;
|
26 |
-
opacity: 1; }
|
27 |
-
.wpmud :-ms-input-placeholder {
|
28 |
-
/* Internet Explorer 10-11 */
|
29 |
-
color: #AAAAAA; }
|
30 |
-
.wpmud input[type="text"], .wpmud textarea, .wpmud input[type="search"], .wpmud input[type="password"] {
|
31 |
-
background: #FAFAFA;
|
32 |
-
border: solid 1px #DDDDDD;
|
33 |
color: #333;
|
34 |
-
font-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
|
|
|
|
72 |
color: #AAA;
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
.
|
79 |
-
|
80 |
-
|
81 |
-
.
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
.
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
.
|
93 |
-
|
94 |
-
|
95 |
-
.
|
96 |
-
color: #
|
97 |
-
|
98 |
-
box-shadow: 0 0 0 2px #1ABC9C inset;
|
99 |
font-weight: 500;
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
font-size: 18px; }
|
128 |
-
.wpmud .dev-list.bold .list-detail i {
|
129 |
-
vertical-align: sub; }
|
130 |
-
.wpmud .def-dashboard .dev-box .box-title h3 {
|
131 |
-
width: calc( 80% - 50px ); }
|
132 |
-
.wpmud .dev-box {
|
133 |
-
position: relative; }
|
134 |
-
.wpmud .dev-box .box-title {
|
135 |
-
position: relative; }
|
136 |
-
.wpmud .dev-box .box-title h3 {
|
137 |
-
color: #333;
|
138 |
-
display: inline-block;
|
139 |
-
font-size: 15px;
|
140 |
-
overflow: visible; }
|
141 |
-
.wpmud .dev-box .box-title .span-icon {
|
142 |
-
margin-right: 10px;
|
143 |
-
vertical-align: middle; }
|
144 |
-
.wpmud .dev-box .box-title .def-tag {
|
145 |
-
margin-left: 16px;
|
146 |
-
position: relative;
|
147 |
-
top: -1px; }
|
148 |
-
.wpmud .dev-box .box-title .toggle {
|
149 |
-
margin-top: 9px; }
|
150 |
-
.wpmud .dev-box .box-title .button {
|
151 |
-
font-weight: 500;
|
152 |
-
float: right;
|
153 |
-
margin-left: 10px;
|
154 |
-
margin-top: 15px; }
|
155 |
-
.wpmud .dev-box .box-title > div {
|
156 |
-
float: right; }
|
157 |
-
.wpmud .dev-box .box-title > div > span {
|
158 |
-
line-height: 60px;
|
159 |
-
float: left;
|
160 |
-
margin-right: 10px; }
|
161 |
-
.wpmud .dev-box .box-title > div .select-container {
|
162 |
-
float: right;
|
163 |
-
display: inline-block;
|
164 |
-
width: auto;
|
165 |
-
min-width: 150px;
|
166 |
-
margin-top: 7px; }
|
167 |
-
.wpmud .dev-box .box-title div.sort {
|
168 |
-
margin-right: 10px; }
|
169 |
-
.wpmud .dev-box .box-content {
|
170 |
-
color: #666; }
|
171 |
-
.wpmud .dev-box .box-content strong {
|
172 |
-
color: #333; }
|
173 |
-
.wpmud .dev-box .column .line {
|
174 |
-
padding-bottom: 5px;
|
175 |
-
font-weight: 500;
|
176 |
-
font-size: 13px;
|
177 |
-
color: #333; }
|
178 |
-
.wpmud .dev-box .column .box-title {
|
179 |
-
height: auto;
|
180 |
-
margin: -5px -30px 15px -30px;
|
181 |
-
padding-bottom: 10px; }
|
182 |
-
.wpmud .dev-box .column .pull-right {
|
183 |
-
float: right; }
|
184 |
-
.wpmud .dev-box .column .pull-right [tooltip]:after {
|
185 |
-
width: 50px;
|
186 |
-
margin-left: -30px; }
|
187 |
-
.wpmud .dev-box .column .line,
|
188 |
-
.wpmud .dev-box .column .pull-right {
|
189 |
-
display: inline-block; }
|
190 |
-
.wpmud .toggle {
|
191 |
-
width: 40px;
|
192 |
-
height: 18px; }
|
193 |
-
.wpmud .toggle .toggle-label {
|
194 |
-
width: 40px;
|
195 |
-
height: 18px; }
|
196 |
-
.wpmud .toggle .toggle-label:after {
|
197 |
-
width: 16px;
|
198 |
-
height: 16px;
|
199 |
-
position: absolute;
|
200 |
-
top: 50%;
|
201 |
-
margin-top: -8px; }
|
202 |
-
.wpmud .toggle .toggle-checkbox:checked + .toggle-label:after {
|
203 |
-
margin-left: 23px; }
|
204 |
-
.wpmud .toggle .toggle-checkbox:checked + .toggle-label:before {
|
205 |
-
left: 23px; }
|
206 |
-
.wpmud .toggle .toggle-checkbox:checked + .toggle-label {
|
207 |
-
background: #17A8E3; }
|
208 |
-
.wpmud .toggle .toggle-label:before {
|
209 |
-
background: #AAAAAA; }
|
210 |
-
.wpmud .search-box .input-box {
|
211 |
-
width: 100%; }
|
212 |
-
.wpmud .scanning .box {
|
213 |
-
background-image: url("../img/scanning-man.svg");
|
214 |
-
background-repeat: no-repeat;
|
215 |
-
background-position: 50% 100%;
|
216 |
-
padding-bottom: 160px !important; }
|
217 |
-
.wpmud .wd-activator .box {
|
218 |
-
background-image: url("../img/scanning-man.svg");
|
219 |
-
background-repeat: no-repeat;
|
220 |
-
background-position: 50% 102%;
|
221 |
-
padding-bottom: 110px !important; }
|
222 |
-
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
|
223 |
-
.wpmud .wd-activator .box {
|
224 |
-
background-image: url("../img/scanning-man.png"); } }
|
225 |
-
.wpmud .wd-calendar {
|
226 |
-
background-color: white;
|
227 |
-
margin-top: 10px;
|
228 |
-
padding: 10px;
|
229 |
-
display: none;
|
230 |
-
border: solid 1px #E6E6E6; }
|
231 |
-
.wpmud .wd-calendar .ui-datepicker-header {
|
232 |
-
width: 100%;
|
233 |
-
font-family: "Roboto Condensed", sans-serif; }
|
234 |
-
.wpmud .wd-calendar .ui-datepicker-header .ui-datepicker-prev {
|
235 |
-
position: absolute;
|
236 |
-
top: 10px;
|
237 |
-
left: 10px;
|
238 |
-
cursor: pointer; }
|
239 |
-
.wpmud .wd-calendar .ui-datepicker-header .ui-datepicker-next {
|
240 |
-
position: absolute;
|
241 |
-
top: 10px;
|
242 |
-
right: 10px;
|
243 |
-
cursor: pointer; }
|
244 |
-
.wpmud .wd-calendar .ui-datepicker-header .ui-datepicker-title {
|
245 |
-
text-align: center; }
|
246 |
-
.wpmud .wd-calendar .ui-datepicker-calendar {
|
247 |
-
margin-top: 10px;
|
248 |
-
border-top: 1px solid #ddd;
|
249 |
-
padding-top: 10px; }
|
250 |
-
.wpmud .wd-calendar .ui-datepicker-calendar th, .wpmud .wd-calendar .ui-datepicker-calendar td {
|
251 |
-
padding: 5px; }
|
252 |
-
.wpmud .wd-calendar .ui-datepicker-calendar th a, .wpmud .wd-calendar .ui-datepicker-calendar td a {
|
253 |
-
display: block;
|
254 |
-
width: 100%;
|
255 |
-
height: 100%; }
|
256 |
-
.wpmud .wd-calendar .ui-datepicker-calendar td {
|
257 |
-
text-align: center; }
|
258 |
-
.wpmud .wd-calendar .ui-datepicker-today {
|
259 |
-
background: #FFF5D5; }
|
260 |
-
.wpmud .wd-calendar .ui-datepicker-today a {
|
261 |
-
color: #777; }
|
262 |
-
.wpmud .wd-calendar .ui-datepicker-current-day {
|
263 |
-
background: #E1F6FF; }
|
264 |
-
.wpmud .wd-calendar .ui-datepicker-current-day a {
|
265 |
-
color: #777; }
|
266 |
-
.wpmud .wd-calendar .applyBtn, .wpmud .wd-calendar .cancelBtn {
|
267 |
-
display: none; }
|
268 |
-
.wpmud a {
|
269 |
-
color: #17A8E3; }
|
270 |
-
.wpmud a:hover, .wpmud a:focus {
|
271 |
-
color: #0A9BD6; }
|
272 |
-
.wpmud .dev-overlay .back {
|
273 |
-
background: rgba(51, 51, 51, 0.95); }
|
274 |
-
.wpmud .dev-overlay .box {
|
275 |
-
position: relative;
|
276 |
-
margin: 30px auto;
|
277 |
width: 100%;
|
278 |
-
|
279 |
-
|
280 |
-
padding:
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
.
|
292 |
-
|
293 |
-
|
294 |
-
.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
padding-left: 0;
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
.
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
.
|
310 |
-
margin:
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
.
|
322 |
-
|
323 |
-
|
324 |
-
.
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
background-repeat: no-repeat;
|
342 |
-
background-position: center;
|
343 |
-
border: 5px solid transparent;
|
344 |
-
box-sizing: content-box !important;
|
345 |
-
background-color: transparent;
|
346 |
-
border-radius: 5px;
|
347 |
-
opacity: .7; }
|
348 |
-
.wpmud .wp-defender .span-icon.icon-edit:hover {
|
349 |
-
border-color: #f9f9f9;
|
350 |
-
background-color: #f9f9f9;
|
351 |
-
opacity: 1; }
|
352 |
-
.wpmud .reporting-sale {
|
353 |
-
background-image: url("../img/dev-man-pre.svg");
|
354 |
-
background-repeat: no-repeat;
|
355 |
-
background-position: 30px 100%; }
|
356 |
-
.wpmud .report-sale {
|
357 |
-
background-image: url("../img/scanning-free-man.svg");
|
358 |
-
background-repeat: no-repeat;
|
359 |
-
background-position: 30px 100%;
|
360 |
-
padding-bottom: 200px;
|
361 |
-
overflow: hidden; }
|
362 |
-
.wpmud .report-sale form {
|
363 |
-
position: relative;
|
364 |
-
margin: -30px -30px 0 -30px;
|
365 |
-
padding: 0 30px; }
|
366 |
-
.wpmud .report-sale .presale-text {
|
367 |
-
position: absolute;
|
368 |
-
bottom: 30px;
|
369 |
-
right: 30px; }
|
370 |
-
.wpmud .report-sale .last {
|
371 |
-
box-shadow: none; }
|
372 |
-
.wpmud .reporting-sale.audit-widget {
|
373 |
-
background-image: url("../img/audit-presale.svg"); }
|
374 |
-
.wpmud .reporting-sale.audit-widget .presale-text div {
|
375 |
-
width: 67%; }
|
376 |
-
.wpmud .feature-disabled {
|
377 |
-
width: 110%;
|
378 |
-
height: 100%;
|
379 |
-
position: absolute;
|
380 |
-
top: 0;
|
381 |
-
left: -30px;
|
382 |
-
z-index: 999;
|
383 |
-
opacity: 0.5;
|
384 |
-
background: #f2f2f2; }
|
385 |
-
.wpmud .no-shadow {
|
386 |
-
box-shadow: none !important; }
|
387 |
-
.wpmud .sale-overlay {
|
388 |
width: 100%;
|
389 |
height: 100%;
|
|
|
|
|
390 |
position: absolute;
|
391 |
top: 0;
|
392 |
left: 0;
|
393 |
-
z-index:
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
background-position: 7% 100%;
|
411 |
-
padding-bottom: 170px !important; }
|
412 |
-
.wpmud .scanning.scanning-free .box .presale-text {
|
413 |
-
position: absolute;
|
414 |
-
bottom: 30px;
|
415 |
-
right: 30px; }
|
416 |
-
@media screen and (max-width: 768px) {
|
417 |
-
.wpmud .scanning.scanning-free .box .presale-text {
|
418 |
-
bottom: 0; } }
|
419 |
-
.wpmud .feature-pre-require {
|
420 |
-
position: relative; }
|
421 |
-
.wpmud .feature-pre-require input, .wpmud .feature-pre-require label {
|
422 |
-
z-index: 1; }
|
423 |
-
.wpmud .feature-pre-require div {
|
424 |
-
width: 100%;
|
425 |
-
height: 100%;
|
426 |
-
position: absolute;
|
427 |
-
top: 0;
|
428 |
-
left: 0;
|
429 |
-
z-index: 2;
|
430 |
-
background: white;
|
431 |
-
opacity: 0.7; }
|
432 |
-
.wpmud .feature-pre-require .button-pre {
|
433 |
-
z-index: 3;
|
434 |
-
opacity: 1;
|
435 |
-
position: absolute;
|
436 |
-
top: 10px;
|
437 |
-
right: 0; }
|
438 |
-
.wpmud .presale-text {
|
439 |
-
overflow: hidden;
|
440 |
-
padding-top: 5%; }
|
441 |
-
.wpmud .presale-text div {
|
442 |
-
position: relative;
|
443 |
-
width: 70%;
|
444 |
-
float: right;
|
445 |
-
padding: 15px 20px;
|
446 |
-
border-radius: 5px;
|
447 |
-
background-color: #E1F6FF;
|
448 |
-
font-size: 13px;
|
449 |
-
color: #333;
|
450 |
-
line-height: 22px; }
|
451 |
-
@media screen and (max-width: 768px) {
|
452 |
-
.wpmud .presale-text div {
|
453 |
-
width: 80%; } }
|
454 |
-
.wpmud .presale-text div:before {
|
455 |
-
content: '';
|
456 |
-
display: inline-block;
|
457 |
-
width: 0;
|
458 |
-
height: 0;
|
459 |
-
border: 10px solid transparent;
|
460 |
-
vertical-align: middle; }
|
461 |
-
.wpmud .presale-text div:before {
|
462 |
-
border-right-color: #E1F6FF;
|
463 |
-
position: absolute;
|
464 |
-
left: -19px;
|
465 |
-
top: 45%; }
|
466 |
-
.wpmud .presale-text a {
|
467 |
-
color: #333;
|
468 |
-
text-decoration: underline;
|
469 |
-
cursor: pointer;
|
470 |
-
font-weight: 500; }
|
471 |
-
|
472 |
-
@font-face {
|
473 |
-
font-family: 'defender-icon';
|
474 |
-
src: url("fonts/Glyphter.eot");
|
475 |
-
src: url("fonts/Glyphter.eot?#iefix") format("embedded-opentype"), url("fonts/Glyphter.woff") format("woff"), url("fonts/Glyphter.ttf") format("truetype"), url("fonts/Glyphter.svg#Glyphter") format("svg");
|
476 |
-
font-weight: normal;
|
477 |
-
font-style: normal; }
|
478 |
-
.wp-defender {
|
479 |
-
letter-spacing: -0.015em;
|
480 |
-
font-family: Roboto, sans-serif;
|
481 |
-
font-size: 15px;
|
482 |
-
font-weight: 400;
|
483 |
-
line-height: 30px;
|
484 |
-
margin: 30px 10px 0 8px;
|
485 |
-
-webkit-font-smoothing: antialiased !important;
|
486 |
-
/*
|
487 |
-
|
488 |
-
Visual Studio-like style based on original C# coloring by Jason Diamond <jason@diamond.name>
|
489 |
-
|
490 |
-
*/ }
|
491 |
-
.wp-defender table {
|
492 |
-
border-collapse: collapse; }
|
493 |
-
.wp-defender .line {
|
494 |
-
padding-bottom: 30px; }
|
495 |
-
.wp-defender .mline {
|
496 |
-
margin-bottom: 30px; }
|
497 |
-
.wp-defender .marginless {
|
498 |
-
margin: 0 !important; }
|
499 |
-
.wp-defender .end {
|
500 |
-
border-bottom: 1px solid #E6E6E6; }
|
501 |
-
.wp-defender p.sub {
|
502 |
-
font-size: 13px;
|
503 |
-
color: #888;
|
504 |
-
margin: 0;
|
505 |
-
padding: 0;
|
506 |
-
line-height: 22px; }
|
507 |
-
.wp-defender .clear {
|
508 |
-
clear: both; }
|
509 |
-
.wp-defender .clear:after {
|
510 |
-
clear: both;
|
511 |
-
content: ".";
|
512 |
display: block;
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
535 |
display: block;
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
@media screen and (min-width: 980px) and (max-width: 1179px) {
|
666 |
-
.wp-defender .is-inline-desktop-only {
|
667 |
-
display: inline !important; } }
|
668 |
-
@media screen and (min-width: 1180px) {
|
669 |
-
.wp-defender .is-inline-widescreen {
|
670 |
-
display: inline !important; } }
|
671 |
-
.wp-defender .is-inline-block {
|
672 |
-
display: inline-block; }
|
673 |
-
@media screen and (max-width: 768px) {
|
674 |
-
.wp-defender .is-inline-block-mobile {
|
675 |
-
display: inline-block !important; } }
|
676 |
-
@media screen and (min-width: 769px) {
|
677 |
-
.wp-defender .is-inline-block-tablet {
|
678 |
-
display: inline-block !important; } }
|
679 |
-
@media screen and (min-width: 769px) and (max-width: 979px) {
|
680 |
-
.wp-defender .is-inline-block-tablet-only {
|
681 |
-
display: inline-block !important; } }
|
682 |
-
@media screen and (max-width: 979px) {
|
683 |
-
.wp-defender .is-inline-block-touch {
|
684 |
-
display: inline-block !important; } }
|
685 |
-
@media screen and (min-width: 980px) {
|
686 |
-
.wp-defender .is-inline-block-desktop {
|
687 |
-
display: inline-block !important; } }
|
688 |
-
@media screen and (min-width: 980px) and (max-width: 1179px) {
|
689 |
-
.wp-defender .is-inline-block-desktop-only {
|
690 |
-
display: inline-block !important; } }
|
691 |
-
@media screen and (min-width: 1180px) {
|
692 |
-
.wp-defender .is-inline-block-widescreen {
|
693 |
-
display: inline-block !important; } }
|
694 |
-
.wp-defender .is-inline-flex {
|
695 |
-
display: inline-flex; }
|
696 |
-
@media screen and (max-width: 768px) {
|
697 |
-
.wp-defender .is-inline-flex-mobile {
|
698 |
-
display: inline-flex !important; } }
|
699 |
-
@media screen and (min-width: 769px) {
|
700 |
-
.wp-defender .is-inline-flex-tablet {
|
701 |
-
display: inline-flex !important; } }
|
702 |
-
@media screen and (min-width: 769px) and (max-width: 979px) {
|
703 |
-
.wp-defender .is-inline-flex-tablet-only {
|
704 |
-
display: inline-flex !important; } }
|
705 |
-
@media screen and (max-width: 979px) {
|
706 |
-
.wp-defender .is-inline-flex-touch {
|
707 |
-
display: inline-flex !important; } }
|
708 |
-
@media screen and (min-width: 980px) {
|
709 |
-
.wp-defender .is-inline-flex-desktop {
|
710 |
-
display: inline-flex !important; } }
|
711 |
-
@media screen and (min-width: 980px) and (max-width: 1179px) {
|
712 |
-
.wp-defender .is-inline-flex-desktop-only {
|
713 |
-
display: inline-flex !important; } }
|
714 |
-
@media screen and (min-width: 1180px) {
|
715 |
-
.wp-defender .is-inline-flex-widescreen {
|
716 |
-
display: inline-flex !important; } }
|
717 |
-
.wp-defender .is-clearfix:after {
|
718 |
-
clear: both;
|
719 |
-
content: " ";
|
720 |
-
display: table; }
|
721 |
-
.wp-defender .is-pulled-left {
|
722 |
-
float: left; }
|
723 |
-
.wp-defender .is-pulled-right {
|
724 |
-
float: right; }
|
725 |
-
.wp-defender .is-clipped {
|
726 |
-
overflow: hidden !important; }
|
727 |
-
.wp-defender .is-overlay {
|
728 |
-
bottom: 0;
|
729 |
-
left: 0;
|
730 |
-
position: absolute;
|
731 |
-
right: 0;
|
732 |
-
top: 0; }
|
733 |
-
.wp-defender .has-text-centered {
|
734 |
-
text-align: center; }
|
735 |
-
.wp-defender .has-text-left {
|
736 |
-
text-align: left; }
|
737 |
-
.wp-defender .has-text-right {
|
738 |
-
text-align: right; }
|
739 |
-
.wp-defender .is-hidden {
|
740 |
-
display: none !important; }
|
741 |
-
@media screen and (max-width: 768px) {
|
742 |
-
.wp-defender .is-hidden-mobile {
|
743 |
-
display: none !important; } }
|
744 |
-
@media screen and (min-width: 769px) {
|
745 |
-
.wp-defender .is-hidden-tablet {
|
746 |
-
display: none !important; } }
|
747 |
-
@media screen and (min-width: 769px) and (max-width: 979px) {
|
748 |
-
.wp-defender .is-hidden-tablet-only {
|
749 |
-
display: none !important; } }
|
750 |
-
@media screen and (max-width: 979px) {
|
751 |
-
.wp-defender .is-hidden-touch {
|
752 |
-
display: none !important; } }
|
753 |
-
@media screen and (min-width: 980px) {
|
754 |
-
.wp-defender .is-hidden-desktop {
|
755 |
-
display: none !important; } }
|
756 |
-
@media screen and (min-width: 980px) and (max-width: 1179px) {
|
757 |
-
.wp-defender .is-hidden-desktop-only {
|
758 |
-
display: none !important; } }
|
759 |
-
@media screen and (min-width: 1180px) {
|
760 |
-
.wp-defender .is-hidden-widescreen {
|
761 |
-
display: none !important; } }
|
762 |
-
.wp-defender .is-disabled {
|
763 |
-
pointer-events: none; }
|
764 |
-
.wp-defender .is-marginless {
|
765 |
-
margin: 0 !important; }
|
766 |
-
.wp-defender .is-paddingless {
|
767 |
-
padding: 0 !important; }
|
768 |
-
.wp-defender .is-unselectable {
|
769 |
-
-webkit-touch-callout: none;
|
770 |
-
-webkit-user-select: none;
|
771 |
-
-moz-user-select: none;
|
772 |
-
-ms-user-select: none;
|
773 |
-
user-select: none; }
|
774 |
-
.wp-defender .column {
|
775 |
display: block;
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
flex: none;
|
817 |
-
width: 16.6666666667%; }
|
818 |
-
.columns.is-mobile > .wp-defender .column.is-offset-2 {
|
819 |
-
margin-left: 16.6666666667%; }
|
820 |
-
.columns.is-mobile > .wp-defender .column.is-3 {
|
821 |
-
flex: none;
|
822 |
-
width: 25%; }
|
823 |
-
.columns.is-mobile > .wp-defender .column.is-offset-3 {
|
824 |
-
margin-left: 25%; }
|
825 |
-
.columns.is-mobile > .wp-defender .column.is-4 {
|
826 |
-
flex: none;
|
827 |
-
width: 33.3333333333%; }
|
828 |
-
.columns.is-mobile > .wp-defender .column.is-offset-4 {
|
829 |
-
margin-left: 33.3333333333%; }
|
830 |
-
.columns.is-mobile > .wp-defender .column.is-5 {
|
831 |
-
flex: none;
|
832 |
-
width: 41.6666666667%; }
|
833 |
-
.columns.is-mobile > .wp-defender .column.is-offset-5 {
|
834 |
-
margin-left: 41.6666666667%; }
|
835 |
-
.columns.is-mobile > .wp-defender .column.is-6 {
|
836 |
-
flex: none;
|
837 |
-
width: 50%; }
|
838 |
-
.columns.is-mobile > .wp-defender .column.is-offset-6 {
|
839 |
-
margin-left: 50%; }
|
840 |
-
.columns.is-mobile > .wp-defender .column.is-7 {
|
841 |
-
flex: none;
|
842 |
-
width: 58.3333333333%; }
|
843 |
-
.columns.is-mobile > .wp-defender .column.is-offset-7 {
|
844 |
-
margin-left: 58.3333333333%; }
|
845 |
-
.columns.is-mobile > .wp-defender .column.is-8 {
|
846 |
-
flex: none;
|
847 |
-
width: 66.6666666667%; }
|
848 |
-
.columns.is-mobile > .wp-defender .column.is-offset-8 {
|
849 |
-
margin-left: 66.6666666667%; }
|
850 |
-
.columns.is-mobile > .wp-defender .column.is-9 {
|
851 |
-
flex: none;
|
852 |
-
width: 75%; }
|
853 |
-
.columns.is-mobile > .wp-defender .column.is-offset-9 {
|
854 |
-
margin-left: 75%; }
|
855 |
-
.columns.is-mobile > .wp-defender .column.is-10 {
|
856 |
-
flex: none;
|
857 |
-
width: 83.3333333333%; }
|
858 |
-
.columns.is-mobile > .wp-defender .column.is-offset-10 {
|
859 |
-
margin-left: 83.3333333333%; }
|
860 |
-
.columns.is-mobile > .wp-defender .column.is-11 {
|
861 |
-
flex: none;
|
862 |
-
width: 91.6666666667%; }
|
863 |
-
.columns.is-mobile > .wp-defender .column.is-offset-11 {
|
864 |
-
margin-left: 91.6666666667%; }
|
865 |
-
.columns.is-mobile > .wp-defender .column.is-12 {
|
866 |
-
flex: none;
|
867 |
-
width: 100%; }
|
868 |
-
.columns.is-mobile > .wp-defender .column.is-offset-12 {
|
869 |
-
margin-left: 100%; }
|
870 |
-
@media screen and (max-width: 768px) {
|
871 |
-
.wp-defender .column.is-narrow-mobile {
|
872 |
-
flex: none; }
|
873 |
-
.wp-defender .column.is-full-mobile {
|
874 |
-
flex: none;
|
875 |
-
width: 100%; }
|
876 |
-
.wp-defender .column.is-three-quarters-mobile {
|
877 |
-
flex: none;
|
878 |
-
width: 75%; }
|
879 |
-
.wp-defender .column.is-two-thirds-mobile {
|
880 |
-
flex: none;
|
881 |
-
width: 66.6666%; }
|
882 |
-
.wp-defender .column.is-half-mobile {
|
883 |
-
flex: none;
|
884 |
-
width: 50%; }
|
885 |
-
.wp-defender .column.is-one-third-mobile {
|
886 |
-
flex: none;
|
887 |
-
width: 33.3333%; }
|
888 |
-
.wp-defender .column.is-one-quarter-mobile {
|
889 |
-
flex: none;
|
890 |
-
width: 25%; }
|
891 |
-
.wp-defender .column.is-offset-three-quarters-mobile {
|
892 |
-
margin-left: 75%; }
|
893 |
-
.wp-defender .column.is-offset-two-thirds-mobile {
|
894 |
-
margin-left: 66.6666%; }
|
895 |
-
.wp-defender .column.is-offset-half-mobile {
|
896 |
-
margin-left: 50%; }
|
897 |
-
.wp-defender .column.is-offset-one-third-mobile {
|
898 |
-
margin-left: 33.3333%; }
|
899 |
-
.wp-defender .column.is-offset-one-quarter-mobile {
|
900 |
-
margin-left: 25%; }
|
901 |
-
.wp-defender .column.is-1-mobile {
|
902 |
-
flex: none;
|
903 |
-
width: 8.3333333333%; }
|
904 |
-
.wp-defender .column.is-offset-1-mobile {
|
905 |
-
margin-left: 8.3333333333%; }
|
906 |
-
.wp-defender .column.is-2-mobile {
|
907 |
-
flex: none;
|
908 |
-
width: 16.6666666667%; }
|
909 |
-
.wp-defender .column.is-offset-2-mobile {
|
910 |
-
margin-left: 16.6666666667%; }
|
911 |
-
.wp-defender .column.is-3-mobile {
|
912 |
-
flex: none;
|
913 |
-
width: 25%; }
|
914 |
-
.wp-defender .column.is-offset-3-mobile {
|
915 |
-
margin-left: 25%; }
|
916 |
-
.wp-defender .column.is-4-mobile {
|
917 |
-
flex: none;
|
918 |
-
width: 33.3333333333%; }
|
919 |
-
.wp-defender .column.is-offset-4-mobile {
|
920 |
-
margin-left: 33.3333333333%; }
|
921 |
-
.wp-defender .column.is-5-mobile {
|
922 |
-
flex: none;
|
923 |
-
width: 41.6666666667%; }
|
924 |
-
.wp-defender .column.is-offset-5-mobile {
|
925 |
-
margin-left: 41.6666666667%; }
|
926 |
-
.wp-defender .column.is-6-mobile {
|
927 |
-
flex: none;
|
928 |
-
width: 50%; }
|
929 |
-
.wp-defender .column.is-offset-6-mobile {
|
930 |
-
margin-left: 50%; }
|
931 |
-
.wp-defender .column.is-7-mobile {
|
932 |
-
flex: none;
|
933 |
-
width: 58.3333333333%; }
|
934 |
-
.wp-defender .column.is-offset-7-mobile {
|
935 |
-
margin-left: 58.3333333333%; }
|
936 |
-
.wp-defender .column.is-8-mobile {
|
937 |
-
flex: none;
|
938 |
-
width: 66.6666666667%; }
|
939 |
-
.wp-defender .column.is-offset-8-mobile {
|
940 |
-
margin-left: 66.6666666667%; }
|
941 |
-
.wp-defender .column.is-9-mobile {
|
942 |
-
flex: none;
|
943 |
-
width: 75%; }
|
944 |
-
.wp-defender .column.is-offset-9-mobile {
|
945 |
-
margin-left: 75%; }
|
946 |
-
.wp-defender .column.is-10-mobile {
|
947 |
-
flex: none;
|
948 |
-
width: 83.3333333333%; }
|
949 |
-
.wp-defender .column.is-offset-10-mobile {
|
950 |
-
margin-left: 83.3333333333%; }
|
951 |
-
.wp-defender .column.is-11-mobile {
|
952 |
-
flex: none;
|
953 |
-
width: 91.6666666667%; }
|
954 |
-
.wp-defender .column.is-offset-11-mobile {
|
955 |
-
margin-left: 91.6666666667%; }
|
956 |
-
.wp-defender .column.is-12-mobile {
|
957 |
-
flex: none;
|
958 |
-
width: 100%; }
|
959 |
-
.wp-defender .column.is-offset-12-mobile {
|
960 |
-
margin-left: 100%; } }
|
961 |
-
@media screen and (min-width: 769px) {
|
962 |
-
.wp-defender .column.is-narrow, .wp-defender .column.is-narrow-tablet {
|
963 |
-
flex: none; }
|
964 |
-
.wp-defender .column.is-full, .wp-defender .column.is-full-tablet {
|
965 |
-
flex: none;
|
966 |
-
width: 100%; }
|
967 |
-
.wp-defender .column.is-three-quarters, .wp-defender .column.is-three-quarters-tablet {
|
968 |
-
flex: none;
|
969 |
-
width: 75%; }
|
970 |
-
.wp-defender .column.is-two-thirds, .wp-defender .column.is-two-thirds-tablet {
|
971 |
-
flex: none;
|
972 |
-
width: 66.6666%; }
|
973 |
-
.wp-defender .column.is-half, .wp-defender .column.is-half-tablet {
|
974 |
-
flex: none;
|
975 |
-
width: 50%; }
|
976 |
-
.wp-defender .column.is-one-third, .wp-defender .column.is-one-third-tablet {
|
977 |
-
flex: none;
|
978 |
-
width: 33.3333%; }
|
979 |
-
.wp-defender .column.is-one-quarter, .wp-defender .column.is-one-quarter-tablet {
|
980 |
-
flex: none;
|
981 |
-
width: 25%; }
|
982 |
-
.wp-defender .column.is-offset-three-quarters, .wp-defender .column.is-offset-three-quarters-tablet {
|
983 |
-
margin-left: 75%; }
|
984 |
-
.wp-defender .column.is-offset-two-thirds, .wp-defender .column.is-offset-two-thirds-tablet {
|
985 |
-
margin-left: 66.6666%; }
|
986 |
-
.wp-defender .column.is-offset-half, .wp-defender .column.is-offset-half-tablet {
|
987 |
-
margin-left: 50%; }
|
988 |
-
.wp-defender .column.is-offset-one-third, .wp-defender .column.is-offset-one-third-tablet {
|
989 |
-
margin-left: 33.3333%; }
|
990 |
-
.wp-defender .column.is-offset-one-quarter, .wp-defender .column.is-offset-one-quarter-tablet {
|
991 |
-
margin-left: 25%; }
|
992 |
-
.wp-defender .column.is-1, .wp-defender .column.is-1-tablet {
|
993 |
-
flex: none;
|
994 |
-
width: 8.3333333333%; }
|
995 |
-
.wp-defender .column.is-offset-1, .wp-defender .column.is-offset-1-tablet {
|
996 |
-
margin-left: 8.3333333333%; }
|
997 |
-
.wp-defender .column.is-2, .wp-defender .column.is-2-tablet {
|
998 |
-
flex: none;
|
999 |
-
width: 16.6666666667%; }
|
1000 |
-
.wp-defender .column.is-offset-2, .wp-defender .column.is-offset-2-tablet {
|
1001 |
-
margin-left: 16.6666666667%; }
|
1002 |
-
.wp-defender .column.is-3, .wp-defender .column.is-3-tablet {
|
1003 |
-
flex: none;
|
1004 |
-
width: 25%; }
|
1005 |
-
.wp-defender .column.is-offset-3, .wp-defender .column.is-offset-3-tablet {
|
1006 |
-
margin-left: 25%; }
|
1007 |
-
.wp-defender .column.is-4, .wp-defender .column.is-4-tablet {
|
1008 |
-
flex: none;
|
1009 |
-
width: 33.3333333333%; }
|
1010 |
-
.wp-defender .column.is-offset-4, .wp-defender .column.is-offset-4-tablet {
|
1011 |
-
margin-left: 33.3333333333%; }
|
1012 |
-
.wp-defender .column.is-5, .wp-defender .column.is-5-tablet {
|
1013 |
-
flex: none;
|
1014 |
-
width: 41.6666666667%; }
|
1015 |
-
.wp-defender .column.is-offset-5, .wp-defender .column.is-offset-5-tablet {
|
1016 |
-
margin-left: 41.6666666667%; }
|
1017 |
-
.wp-defender .column.is-6, .wp-defender .column.is-6-tablet {
|
1018 |
-
flex: none;
|
1019 |
-
width: 50%; }
|
1020 |
-
.wp-defender .column.is-offset-6, .wp-defender .column.is-offset-6-tablet {
|
1021 |
-
margin-left: 50%; }
|
1022 |
-
.wp-defender .column.is-7, .wp-defender .column.is-7-tablet {
|
1023 |
-
flex: none;
|
1024 |
-
width: 58.3333333333%; }
|
1025 |
-
.wp-defender .column.is-offset-7, .wp-defender .column.is-offset-7-tablet {
|
1026 |
-
margin-left: 58.3333333333%; }
|
1027 |
-
.wp-defender .column.is-8, .wp-defender .column.is-8-tablet {
|
1028 |
-
flex: none;
|
1029 |
-
width: 66.6666666667%; }
|
1030 |
-
.wp-defender .column.is-offset-8, .wp-defender .column.is-offset-8-tablet {
|
1031 |
-
margin-left: 66.6666666667%; }
|
1032 |
-
.wp-defender .column.is-9, .wp-defender .column.is-9-tablet {
|
1033 |
-
flex: none;
|
1034 |
-
width: 75%; }
|
1035 |
-
.wp-defender .column.is-offset-9, .wp-defender .column.is-offset-9-tablet {
|
1036 |
-
margin-left: 75%; }
|
1037 |
-
.wp-defender .column.is-10, .wp-defender .column.is-10-tablet {
|
1038 |
-
flex: none;
|
1039 |
-
width: 83.3333333333%; }
|
1040 |
-
.wp-defender .column.is-offset-10, .wp-defender .column.is-offset-10-tablet {
|
1041 |
-
margin-left: 83.3333333333%; }
|
1042 |
-
.wp-defender .column.is-11, .wp-defender .column.is-11-tablet {
|
1043 |
-
flex: none;
|
1044 |
-
width: 91.6666666667%; }
|
1045 |
-
.wp-defender .column.is-offset-11, .wp-defender .column.is-offset-11-tablet {
|
1046 |
-
margin-left: 91.6666666667%; }
|
1047 |
-
.wp-defender .column.is-12, .wp-defender .column.is-12-tablet {
|
1048 |
-
flex: none;
|
1049 |
-
width: 100%; }
|
1050 |
-
.wp-defender .column.is-offset-12, .wp-defender .column.is-offset-12-tablet {
|
1051 |
-
margin-left: 100%; } }
|
1052 |
-
@media screen and (min-width: 980px) {
|
1053 |
-
.wp-defender .column.is-narrow-desktop {
|
1054 |
-
flex: none; }
|
1055 |
-
.wp-defender .column.is-full-desktop {
|
1056 |
-
flex: none;
|
1057 |
-
width: 100%; }
|
1058 |
-
.wp-defender .column.is-three-quarters-desktop {
|
1059 |
-
flex: none;
|
1060 |
-
width: 75%; }
|
1061 |
-
.wp-defender .column.is-two-thirds-desktop {
|
1062 |
-
flex: none;
|
1063 |
-
width: 66.6666%; }
|
1064 |
-
.wp-defender .column.is-half-desktop {
|
1065 |
-
flex: none;
|
1066 |
-
width: 50%; }
|
1067 |
-
.wp-defender .column.is-one-third-desktop {
|
1068 |
-
flex: none;
|
1069 |
-
width: 33.3333%; }
|
1070 |
-
.wp-defender .column.is-one-quarter-desktop {
|
1071 |
-
flex: none;
|
1072 |
-
width: 25%; }
|
1073 |
-
.wp-defender .column.is-offset-three-quarters-desktop {
|
1074 |
-
margin-left: 75%; }
|
1075 |
-
.wp-defender .column.is-offset-two-thirds-desktop {
|
1076 |
-
margin-left: 66.6666%; }
|
1077 |
-
.wp-defender .column.is-offset-half-desktop {
|
1078 |
-
margin-left: 50%; }
|
1079 |
-
.wp-defender .column.is-offset-one-third-desktop {
|
1080 |
-
margin-left: 33.3333%; }
|
1081 |
-
.wp-defender .column.is-offset-one-quarter-desktop {
|
1082 |
-
margin-left: 25%; }
|
1083 |
-
.wp-defender .column.is-1-desktop {
|
1084 |
-
flex: none;
|
1085 |
-
width: 8.3333333333%; }
|
1086 |
-
.wp-defender .column.is-offset-1-desktop {
|
1087 |
-
margin-left: 8.3333333333%; }
|
1088 |
-
.wp-defender .column.is-2-desktop {
|
1089 |
-
flex: none;
|
1090 |
-
width: 16.6666666667%; }
|
1091 |
-
.wp-defender .column.is-offset-2-desktop {
|
1092 |
-
margin-left: 16.6666666667%; }
|
1093 |
-
.wp-defender .column.is-3-desktop {
|
1094 |
-
flex: none;
|
1095 |
-
width: 25%; }
|
1096 |
-
.wp-defender .column.is-offset-3-desktop {
|
1097 |
-
margin-left: 25%; }
|
1098 |
-
.wp-defender .column.is-4-desktop {
|
1099 |
-
flex: none;
|
1100 |
-
width: 33.3333333333%; }
|
1101 |
-
.wp-defender .column.is-offset-4-desktop {
|
1102 |
-
margin-left: 33.3333333333%; }
|
1103 |
-
.wp-defender .column.is-5-desktop {
|
1104 |
-
flex: none;
|
1105 |
-
width: 41.6666666667%; }
|
1106 |
-
.wp-defender .column.is-offset-5-desktop {
|
1107 |
-
margin-left: 41.6666666667%; }
|
1108 |
-
.wp-defender .column.is-6-desktop {
|
1109 |
-
flex: none;
|
1110 |
-
width: 50%; }
|
1111 |
-
.wp-defender .column.is-offset-6-desktop {
|
1112 |
-
margin-left: 50%; }
|
1113 |
-
.wp-defender .column.is-7-desktop {
|
1114 |
-
flex: none;
|
1115 |
-
width: 58.3333333333%; }
|
1116 |
-
.wp-defender .column.is-offset-7-desktop {
|
1117 |
-
margin-left: 58.3333333333%; }
|
1118 |
-
.wp-defender .column.is-8-desktop {
|
1119 |
-
flex: none;
|
1120 |
-
width: 66.6666666667%; }
|
1121 |
-
.wp-defender .column.is-offset-8-desktop {
|
1122 |
-
margin-left: 66.6666666667%; }
|
1123 |
-
.wp-defender .column.is-9-desktop {
|
1124 |
-
flex: none;
|
1125 |
-
width: 75%; }
|
1126 |
-
.wp-defender .column.is-offset-9-desktop {
|
1127 |
-
margin-left: 75%; }
|
1128 |
-
.wp-defender .column.is-10-desktop {
|
1129 |
-
flex: none;
|
1130 |
-
width: 83.3333333333%; }
|
1131 |
-
.wp-defender .column.is-offset-10-desktop {
|
1132 |
-
margin-left: 83.3333333333%; }
|
1133 |
-
.wp-defender .column.is-11-desktop {
|
1134 |
-
flex: none;
|
1135 |
-
width: 91.6666666667%; }
|
1136 |
-
.wp-defender .column.is-offset-11-desktop {
|
1137 |
-
margin-left: 91.6666666667%; }
|
1138 |
-
.wp-defender .column.is-12-desktop {
|
1139 |
-
flex: none;
|
1140 |
-
width: 100%; }
|
1141 |
-
.wp-defender .column.is-offset-12-desktop {
|
1142 |
-
margin-left: 100%; } }
|
1143 |
-
@media screen and (min-width: 1180px) {
|
1144 |
-
.wp-defender .column.is-narrow-widescreen {
|
1145 |
-
flex: none; }
|
1146 |
-
.wp-defender .column.is-full-widescreen {
|
1147 |
-
flex: none;
|
1148 |
-
width: 100%; }
|
1149 |
-
.wp-defender .column.is-three-quarters-widescreen {
|
1150 |
-
flex: none;
|
1151 |
-
width: 75%; }
|
1152 |
-
.wp-defender .column.is-two-thirds-widescreen {
|
1153 |
-
flex: none;
|
1154 |
-
width: 66.6666%; }
|
1155 |
-
.wp-defender .column.is-half-widescreen {
|
1156 |
-
flex: none;
|
1157 |
-
width: 50%; }
|
1158 |
-
.wp-defender .column.is-one-third-widescreen {
|
1159 |
-
flex: none;
|
1160 |
-
width: 33.3333%; }
|
1161 |
-
.wp-defender .column.is-one-quarter-widescreen {
|
1162 |
-
flex: none;
|
1163 |
-
width: 25%; }
|
1164 |
-
.wp-defender .column.is-offset-three-quarters-widescreen {
|
1165 |
-
margin-left: 75%; }
|
1166 |
-
.wp-defender .column.is-offset-two-thirds-widescreen {
|
1167 |
-
margin-left: 66.6666%; }
|
1168 |
-
.wp-defender .column.is-offset-half-widescreen {
|
1169 |
-
margin-left: 50%; }
|
1170 |
-
.wp-defender .column.is-offset-one-third-widescreen {
|
1171 |
-
margin-left: 33.3333%; }
|
1172 |
-
.wp-defender .column.is-offset-one-quarter-widescreen {
|
1173 |
-
margin-left: 25%; }
|
1174 |
-
.wp-defender .column.is-1-widescreen {
|
1175 |
-
flex: none;
|
1176 |
-
width: 8.3333333333%; }
|
1177 |
-
.wp-defender .column.is-offset-1-widescreen {
|
1178 |
-
margin-left: 8.3333333333%; }
|
1179 |
-
.wp-defender .column.is-2-widescreen {
|
1180 |
-
flex: none;
|
1181 |
-
width: 16.6666666667%; }
|
1182 |
-
.wp-defender .column.is-offset-2-widescreen {
|
1183 |
-
margin-left: 16.6666666667%; }
|
1184 |
-
.wp-defender .column.is-3-widescreen {
|
1185 |
-
flex: none;
|
1186 |
-
width: 25%; }
|
1187 |
-
.wp-defender .column.is-offset-3-widescreen {
|
1188 |
-
margin-left: 25%; }
|
1189 |
-
.wp-defender .column.is-4-widescreen {
|
1190 |
-
flex: none;
|
1191 |
-
width: 33.3333333333%; }
|
1192 |
-
.wp-defender .column.is-offset-4-widescreen {
|
1193 |
-
margin-left: 33.3333333333%; }
|
1194 |
-
.wp-defender .column.is-5-widescreen {
|
1195 |
-
flex: none;
|
1196 |
-
width: 41.6666666667%; }
|
1197 |
-
.wp-defender .column.is-offset-5-widescreen {
|
1198 |
-
margin-left: 41.6666666667%; }
|
1199 |
-
.wp-defender .column.is-6-widescreen {
|
1200 |
-
flex: none;
|
1201 |
-
width: 50%; }
|
1202 |
-
.wp-defender .column.is-offset-6-widescreen {
|
1203 |
-
margin-left: 50%; }
|
1204 |
-
.wp-defender .column.is-7-widescreen {
|
1205 |
-
flex: none;
|
1206 |
-
width: 58.3333333333%; }
|
1207 |
-
.wp-defender .column.is-offset-7-widescreen {
|
1208 |
-
margin-left: 58.3333333333%; }
|
1209 |
-
.wp-defender .column.is-8-widescreen {
|
1210 |
-
flex: none;
|
1211 |
-
width: 66.6666666667%; }
|
1212 |
-
.wp-defender .column.is-offset-8-widescreen {
|
1213 |
-
margin-left: 66.6666666667%; }
|
1214 |
-
.wp-defender .column.is-9-widescreen {
|
1215 |
-
flex: none;
|
1216 |
-
width: 75%; }
|
1217 |
-
.wp-defender .column.is-offset-9-widescreen {
|
1218 |
-
margin-left: 75%; }
|
1219 |
-
.wp-defender .column.is-10-widescreen {
|
1220 |
-
flex: none;
|
1221 |
-
width: 83.3333333333%; }
|
1222 |
-
.wp-defender .column.is-offset-10-widescreen {
|
1223 |
-
margin-left: 83.3333333333%; }
|
1224 |
-
.wp-defender .column.is-11-widescreen {
|
1225 |
-
flex: none;
|
1226 |
-
width: 91.6666666667%; }
|
1227 |
-
.wp-defender .column.is-offset-11-widescreen {
|
1228 |
-
margin-left: 91.6666666667%; }
|
1229 |
-
.wp-defender .column.is-12-widescreen {
|
1230 |
-
flex: none;
|
1231 |
-
width: 100%; }
|
1232 |
-
.wp-defender .column.is-offset-12-widescreen {
|
1233 |
-
margin-left: 100%; } }
|
1234 |
-
.wp-defender .columns {
|
1235 |
-
margin-left: -10px;
|
1236 |
-
margin-right: -10px;
|
1237 |
-
margin-top: -10px; }
|
1238 |
-
.wp-defender .columns:last-child {
|
1239 |
-
margin-bottom: -10px; }
|
1240 |
-
.wp-defender .columns:not(:last-child) {
|
1241 |
-
margin-bottom: 10px; }
|
1242 |
-
.wp-defender .columns.is-centered {
|
1243 |
-
justify-content: center; }
|
1244 |
-
.wp-defender .columns.is-gapless {
|
1245 |
-
margin-left: 0;
|
1246 |
-
margin-right: 0;
|
1247 |
-
margin-top: 0; }
|
1248 |
-
.wp-defender .columns.is-gapless:last-child {
|
1249 |
-
margin-bottom: 0; }
|
1250 |
-
.wp-defender .columns.is-gapless:not(:last-child) {
|
1251 |
-
margin-bottom: 20px; }
|
1252 |
-
.wp-defender .columns.is-gapless > .column {
|
1253 |
-
margin: 0;
|
1254 |
-
padding: 0; }
|
1255 |
-
@media screen and (min-width: 769px) {
|
1256 |
-
.wp-defender .columns.is-grid {
|
1257 |
-
flex-wrap: wrap; }
|
1258 |
-
.wp-defender .columns.is-grid > .column {
|
1259 |
-
max-width: 33.3333%;
|
1260 |
-
padding: 10px;
|
1261 |
-
width: 33.3333%; }
|
1262 |
-
.wp-defender .columns.is-grid > .column + .column {
|
1263 |
-
margin-left: 0; } }
|
1264 |
-
.wp-defender .columns.is-mobile {
|
1265 |
-
display: flex; }
|
1266 |
-
.wp-defender .columns.is-multiline {
|
1267 |
-
flex-wrap: wrap; }
|
1268 |
-
.wp-defender .columns.is-vcentered {
|
1269 |
-
align-items: center; }
|
1270 |
-
@media screen and (min-width: 769px) {
|
1271 |
-
.wp-defender .columns:not(.is-desktop) {
|
1272 |
-
display: flex; } }
|
1273 |
-
@media screen and (min-width: 980px) {
|
1274 |
-
.wp-defender .columns.is-desktop {
|
1275 |
-
display: flex; } }
|
1276 |
-
.wp-defender p {
|
1277 |
-
margin-bottom: 0; }
|
1278 |
-
.wp-defender .title:not(.name) {
|
1279 |
-
font-size: 32px;
|
1280 |
-
font-weight: bold;
|
1281 |
-
font-family: "Roboto Condensed", sans-serif;
|
1282 |
-
text-align: left;
|
1283 |
-
color: #333;
|
1284 |
-
text-transform: uppercase;
|
1285 |
-
margin: 0 0 30px;
|
1286 |
-
width: 100%;
|
1287 |
-
max-width: 100%;
|
1288 |
-
line-height: 40px; }
|
1289 |
-
.wp-defender .title:not(.name) span {
|
1290 |
-
color: #666;
|
1291 |
-
font-size: 15px;
|
1292 |
-
font-weight: 400;
|
1293 |
-
font-family: Roboto, sans-serif;
|
1294 |
-
float: right;
|
1295 |
-
text-transform: none; }
|
1296 |
-
.wp-defender .title:not(.name) span .button {
|
1297 |
-
margin-left: 10px; }
|
1298 |
-
.wp-defender .title:not(.name) span form {
|
1299 |
-
display: inline; }
|
1300 |
-
.wp-defender .summary-box {
|
1301 |
background-image: url("../img/defender.svg");
|
1302 |
background-repeat: no-repeat;
|
1303 |
-
background-
|
1304 |
-
|
1305 |
-
|
1306 |
-
|
1307 |
-
.wp-defender .summary-box .issues-count > div {
|
1308 |
-
position: absolute;
|
1309 |
-
top: 50%;
|
1310 |
-
transform: translateY(-50%);
|
1311 |
-
right: 20px;
|
1312 |
-
width: 40%;
|
1313 |
-
float: right;
|
1314 |
-
min-height: 80px; }
|
1315 |
-
.wp-defender .summary-box .issues-count > div h5 {
|
1316 |
-
text-align: left;
|
1317 |
-
display: inline-block;
|
1318 |
-
clear: both;
|
1319 |
-
font-size: 50px;
|
1320 |
-
color: #333;
|
1321 |
-
margin: 0;
|
1322 |
-
width: auto;
|
1323 |
-
position: relative;
|
1324 |
-
vertical-align: top; }
|
1325 |
-
.wp-defender .summary-box .issues-count > div h6 {
|
1326 |
-
color: #333;
|
1327 |
-
font-size: 22px;
|
1328 |
-
text-align: left;
|
1329 |
-
font-weight: bold;
|
1330 |
-
display: inline-block; }
|
1331 |
-
.wp-defender .summary-box .issues-count > div i {
|
1332 |
-
font-size: 18px;
|
1333 |
-
top: 5px;
|
1334 |
-
line-height: 1; }
|
1335 |
-
.wp-defender .summary-box .issues-count > div i.icon-warning:not(.fill-red) {
|
1336 |
-
mask: none;
|
1337 |
-
-webkit-mask: none;
|
1338 |
-
background: url("../img/wpmud-icon-warning-yellow.svg") no-repeat; }
|
1339 |
-
.wp-defender .summary-box .issues-count > div strong {
|
1340 |
-
display: block; }
|
1341 |
-
.wp-defender .summary-box .issues-count .sub {
|
1342 |
-
font-size: 13px;
|
1343 |
-
color: #888;
|
1344 |
-
line-height: 22px;
|
1345 |
-
display: block; }
|
1346 |
-
.wp-defender .summary-box .dev-list {
|
1347 |
-
margin: auto 0 auto 79px; }
|
1348 |
-
.wp-defender .summary-box .dev-list li:first-child .list-label, .wp-defender .summary-box .dev-list li:first-child .list-detail {
|
1349 |
-
padding-top: 0; }
|
1350 |
-
.wp-defender .summary-box .dev-list li:last-child .list-label, .wp-defender .summary-box .dev-list li:last-child .list-detail {
|
1351 |
-
padding-bottom: 0; }
|
1352 |
-
.wp-defender .def-tag {
|
1353 |
-
-webkit-border-radius: 16px;
|
1354 |
-
-moz-border-radius: 16px;
|
1355 |
-
border-radius: 16px;
|
1356 |
-
font-size: 13px;
|
1357 |
-
padding: 4px 16px;
|
1358 |
-
color: #fff;
|
1359 |
-
text-transform: uppercase; }
|
1360 |
-
.wp-defender .def-tag.tag-generic {
|
1361 |
-
background: #E6E6E6;
|
1362 |
-
color: #333; }
|
1363 |
-
.wp-defender .def-tag.tag-yellow {
|
1364 |
-
background-color: #FECF2F;
|
1365 |
-
color: #333; }
|
1366 |
-
.wp-defender .def-tag.tag-inactive {
|
1367 |
-
background: #E6E6E6;
|
1368 |
-
color: #C0C0C0; }
|
1369 |
-
.wp-defender .def-tag.tag-active {
|
1370 |
-
background: #D1F1EA;
|
1371 |
-
color: #1ABC9C; }
|
1372 |
-
.wp-defender .def-tag.tag-success {
|
1373 |
-
background: #1ABC9C;
|
1374 |
-
color: #fff; }
|
1375 |
-
.wp-defender .def-tag.tag-error {
|
1376 |
-
background: #FF7F83;
|
1377 |
-
color: #fff; }
|
1378 |
-
.wp-defender i.tag-yellow {
|
1379 |
-
color: #FECF2F; }
|
1380 |
-
.wp-defender i.tag-active {
|
1381 |
-
color: #1ABC9C; }
|
1382 |
-
.wp-defender .span-icon {
|
1383 |
-
width: 20px;
|
1384 |
-
height: 20px;
|
1385 |
-
display: inline-block; }
|
1386 |
-
.wp-defender .span-icon.hardener-icon {
|
1387 |
-
background: url("../img/hardening.svg") no-repeat center;
|
1388 |
-
width: 16px;
|
1389 |
-
background-size: contain; }
|
1390 |
-
.wp-defender .span-icon.icon-scan {
|
1391 |
-
background: url("../img/scanning.svg") no-repeat center;
|
1392 |
-
background-size: contain; }
|
1393 |
-
.wp-defender .span-icon.icon-blacklist {
|
1394 |
-
background: url("../img/blacklist.svg") no-repeat center;
|
1395 |
-
background-size: contain; }
|
1396 |
-
.wp-defender .span-icon.icon-lockout {
|
1397 |
-
background: url("../img/ip-lockout.svg") no-repeat center;
|
1398 |
-
background-size: contain; }
|
1399 |
-
.wp-defender .span-icon.icon-audit {
|
1400 |
-
background: url("../img/audit.svg") no-repeat center;
|
1401 |
-
background-size: contain; }
|
1402 |
-
.wp-defender .span-icon.icon-report {
|
1403 |
-
background: url("../img/reporting.svg") no-repeat center;
|
1404 |
-
background-size: contain; }
|
1405 |
-
.wp-defender .report-status {
|
1406 |
-
background-color: #F8F8F8;
|
1407 |
-
width: 100%;
|
1408 |
-
padding: 33px 0;
|
1409 |
-
position: relative;
|
1410 |
-
text-align: center;
|
1411 |
-
-webkit-border-radius: 7px;
|
1412 |
-
-moz-border-radius: 7px;
|
1413 |
-
border-radius: 7px;
|
1414 |
-
margin-bottom: 20px; }
|
1415 |
-
.wp-defender .report-status strong {
|
1416 |
-
display: block;
|
1417 |
-
font-family: "Roboto Condensed", sans-serif;
|
1418 |
-
font-weight: bold;
|
1419 |
-
margin-top: 10px;
|
1420 |
-
font-size: 13px;
|
1421 |
-
text-transform: uppercase; }
|
1422 |
-
.wp-defender .report-status img {
|
1423 |
-
color: #666;
|
1424 |
-
width: 26px;
|
1425 |
-
height: 26px; }
|
1426 |
-
.wp-defender .report-status .corner {
|
1427 |
-
position: absolute;
|
1428 |
-
top: 0;
|
1429 |
-
right: 0;
|
1430 |
-
color: #1ABC9C;
|
1431 |
-
font-weight: bold;
|
1432 |
-
font-family: "Roboto Condensed", sans-serif;
|
1433 |
-
padding-right: 6px;
|
1434 |
-
padding-top: 5px;
|
1435 |
-
text-transform: uppercase;
|
1436 |
-
font-size: 13px; }
|
1437 |
-
.wp-defender .report-status i.def-icon {
|
1438 |
-
vertical-align: sub;
|
1439 |
-
margin-right: 3px; }
|
1440 |
-
.wp-defender .report-status i.def-icon:before {
|
1441 |
-
font-size: 16px; }
|
1442 |
-
.wp-defender .report-status a {
|
1443 |
-
display: inline-block;
|
1444 |
-
width: 100%;
|
1445 |
-
height: 100%; }
|
1446 |
-
.wp-defender .report-status:hover {
|
1447 |
-
background-color: #f2f2f2;
|
1448 |
-
cursor: pointer; }
|
1449 |
-
.wp-defender .report-status.with-corner::before,
|
1450 |
-
.wp-defender .report-status.with-corner::after {
|
1451 |
-
content: '';
|
1452 |
-
position: absolute;
|
1453 |
-
top: 0;
|
1454 |
-
right: 0;
|
1455 |
-
border-color: transparent;
|
1456 |
-
border-style: solid;
|
1457 |
-
border-top-right-radius: 7px; }
|
1458 |
-
.wp-defender .report-status.with-corner::before {
|
1459 |
-
border-width: 30px;
|
1460 |
-
border-right-color: #D1F1EA;
|
1461 |
-
border-top-color: #D1F1EA; }
|
1462 |
-
.wp-defender .report-status.with-corner::after {
|
1463 |
-
border-right-color: #D1F1EA;
|
1464 |
-
border-top-color: #D1F1EA; }
|
1465 |
-
.wp-defender .report-status.with-corner.feature-disabled:before {
|
1466 |
-
border-right-color: #E6E6E6;
|
1467 |
-
border-top-color: #E6E6E6; }
|
1468 |
-
.wp-defender .report-status.with-corner.feature-disabled:after {
|
1469 |
-
border-right-color: #E6E6E6;
|
1470 |
-
border-top-color: #E6E6E6; }
|
1471 |
-
.wp-defender .report-status.feature-disabled {
|
1472 |
-
left: 0; }
|
1473 |
-
.wp-defender .report-status.feature-disabled .corner {
|
1474 |
-
color: #666;
|
1475 |
-
font-size: 18px;
|
1476 |
-
cursor: pointer; }
|
1477 |
-
.wp-defender .report-status.feature-disabled .corner i:before {
|
1478 |
-
font-size: 16px;
|
1479 |
-
color: #666;
|
1480 |
-
width: 16px;
|
1481 |
-
height: 16px; }
|
1482 |
-
.wp-defender .well {
|
1483 |
-
width: 100%;
|
1484 |
-
background: #F9F9F9;
|
1485 |
-
color: #333;
|
1486 |
-
-webkit-border-radius: 7px;
|
1487 |
-
-moz-border-radius: 7px;
|
1488 |
-
border-radius: 7px;
|
1489 |
-
position: relative;
|
1490 |
-
padding: 30px 30px;
|
1491 |
-
line-height: 30px;
|
1492 |
display: block;
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
1516 |
-
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
|
1531 |
-
|
1532 |
-
|
1533 |
-
|
1534 |
-
|
1535 |
-
|
1536 |
-
|
1537 |
-
|
1538 |
-
|
1539 |
-
|
1540 |
-
|
1541 |
-
|
1542 |
-
|
1543 |
-
|
1544 |
-
|
1545 |
-
|
1546 |
-
font-size: 13px; }
|
1547 |
-
.wp-defender .well.schedule-box label {
|
1548 |
-
margin-top: 25px;
|
1549 |
-
padding: 0;
|
1550 |
-
color: #AAAAAA;
|
1551 |
-
font-size: 13px; }
|
1552 |
-
.wp-defender .well.well-small {
|
1553 |
-
padding: 15px 20px; }
|
1554 |
-
.wp-defender .well.well-small.with-cap {
|
1555 |
-
padding-left: 50px; }
|
1556 |
-
.wp-defender .well.well-small.with-cap i {
|
1557 |
-
position: absolute;
|
1558 |
-
top: 18px;
|
1559 |
-
left: 20px; }
|
1560 |
-
.wp-defender ul.inner-nav {
|
1561 |
-
list-style-type: none;
|
1562 |
-
margin: 15px 0 0;
|
1563 |
-
padding: 0; }
|
1564 |
-
.wp-defender ul.inner-nav li {
|
1565 |
-
margin-bottom: 10px; }
|
1566 |
-
.wp-defender ul.inner-nav li a {
|
1567 |
-
padding: 5px 15px;
|
1568 |
-
display: block;
|
1569 |
-
line-height: 20px;
|
1570 |
-
color: #666; }
|
1571 |
-
.wp-defender ul.inner-nav li a span {
|
1572 |
-
font-size: 13px;
|
1573 |
-
color: #888;
|
1574 |
-
float: right;
|
1575 |
-
margin-right: 20px; }
|
1576 |
-
.wp-defender ul.inner-nav li a span.def-tag {
|
1577 |
-
line-height: 18px;
|
1578 |
-
margin-right: 2px;
|
1579 |
-
position: relative;
|
1580 |
-
top: -3px;
|
1581 |
-
color: #333; }
|
1582 |
-
.wp-defender ul.inner-nav li a:hover, .wp-defender ul.inner-nav a.active {
|
1583 |
-
cursor: pointer;
|
1584 |
-
background: rgba(0, 0, 0, 0.02);
|
1585 |
-
color: #333;
|
1586 |
-
-webkit-border-radius: 25px;
|
1587 |
-
-moz-border-radius: 25px;
|
1588 |
-
border-radius: 25px;
|
1589 |
-
font-weight: 500; }
|
1590 |
-
.wp-defender ul.inner-nav a.active {
|
1591 |
-
font-weight: 500; }
|
1592 |
-
.wp-defender form div {
|
1593 |
-
padding-top: 0; }
|
1594 |
-
.wp-defender form input[type="text"] {
|
1595 |
-
width: auto;
|
1596 |
-
display: inline-block;
|
1597 |
-
margin-right: 10px; }
|
1598 |
-
.wp-defender form input[type="text"].block {
|
1599 |
-
width: 100%;
|
1600 |
-
display: block;
|
1601 |
-
margin-right: 10px;
|
1602 |
-
text-align: left; }
|
1603 |
-
.wp-defender form .columns {
|
1604 |
-
padding-bottom: 30px;
|
1605 |
-
padding-top: 30px;
|
1606 |
-
margin-bottom: 0;
|
1607 |
-
position: relative;
|
1608 |
-
box-shadow: 0px 11px 0px -10px #E6E6E6; }
|
1609 |
-
.wp-defender form .columns .column {
|
1610 |
-
padding-right: 20px; }
|
1611 |
-
.wp-defender form .columns .column .toggle {
|
1612 |
-
vertical-align: top; }
|
1613 |
-
.wp-defender form .columns .column strong {
|
1614 |
-
color: #333; }
|
1615 |
-
.wp-defender form .columns .column > label, .wp-defender form .columns .column .feature-pre-require > label {
|
1616 |
-
display: inline-block;
|
1617 |
-
padding-top: 0;
|
1618 |
-
font-weight: 400;
|
1619 |
-
color: #333;
|
1620 |
-
line-height: 30px;
|
1621 |
-
margin: 0; }
|
1622 |
-
.wp-defender form .columns .column span.sub, .wp-defender form .columns .column span.form-help {
|
1623 |
-
display: block;
|
1624 |
-
font-size: 13px;
|
1625 |
-
color: #888;
|
1626 |
-
line-height: 22px;
|
1627 |
-
margin: 10px 0; }
|
1628 |
-
.wp-defender form .columns .column span.sub strong, .wp-defender form .columns .column span.form-help strong {
|
1629 |
-
color: #888;
|
1630 |
-
font-weight: 500; }
|
1631 |
-
.wp-defender form .columns .column span.inline {
|
1632 |
-
display: inline; }
|
1633 |
-
.wp-defender form .columns .column span.sub.inpos {
|
1634 |
-
margin-left: 48px; }
|
1635 |
-
.wp-defender form .columns .column .form-help {
|
1636 |
-
display: inline;
|
1637 |
-
vertical-align: top; }
|
1638 |
-
.wp-defender form .columns .column .form-help-s {
|
1639 |
-
display: block;
|
1640 |
-
font-size: 12px;
|
1641 |
-
color: #666;
|
1642 |
-
line-height: 22px;
|
1643 |
-
margin: 10px 0;
|
1644 |
-
word-break: break-all; }
|
1645 |
-
.wp-defender form .columns .column .form-help-s strong {
|
1646 |
-
color: #666;
|
1647 |
-
font-weight: 500; }
|
1648 |
-
.wp-defender form .columns .is-one-third label {
|
1649 |
-
color: #333;
|
1650 |
-
padding: 0;
|
1651 |
-
line-height: 30px;
|
1652 |
-
font-weight: 500; }
|
1653 |
-
.wp-defender form .last {
|
1654 |
-
box-shadow: none; }
|
1655 |
-
.wp-defender form .columns:not(:last-child) {
|
1656 |
-
margin-bottom: 0; }
|
1657 |
-
.wp-defender form button[type="reset"] {
|
1658 |
-
margin-right: 10px; }
|
1659 |
-
.wp-defender .receipt .search-box .input-box {
|
1660 |
-
width: 100%; }
|
1661 |
-
.wp-defender .receipt .search-box .input-box .current-item {
|
1662 |
-
border-radius: 4px 0 0 4px;
|
1663 |
-
border-right: none; }
|
1664 |
-
.wp-defender .receipt ul {
|
1665 |
-
list-style-type: none;
|
1666 |
-
margin: 5px 0 30px 0;
|
1667 |
-
padding: 0; }
|
1668 |
-
.wp-defender .receipt ul li {
|
1669 |
-
overflow: hidden;
|
1670 |
-
margin-bottom: 10px; }
|
1671 |
-
.wp-defender .receipt ul li img {
|
1672 |
-
-webkit-border-radius: 50px;
|
1673 |
-
-moz-border-radius: 50px;
|
1674 |
-
border-radius: 50px;
|
1675 |
-
width: 30px;
|
1676 |
-
height: 30px;
|
1677 |
-
margin-right: 10px;
|
1678 |
-
display: inline-block;
|
1679 |
-
vertical-align: middle; }
|
1680 |
-
.wp-defender .receipt ul li span.name {
|
1681 |
-
margin-right: 10px;
|
1682 |
-
display: inline-block; }
|
1683 |
-
.wp-defender .receipt > div span {
|
1684 |
-
display: inline-block;
|
1685 |
-
width: 80%; }
|
1686 |
-
.wp-defender .receipt > div span input {
|
1687 |
-
border-right: 0;
|
1688 |
-
-webkit-border-top-right-radius: 0px;
|
1689 |
-
-webkit-border-bottom-right-radius: 0px;
|
1690 |
-
-moz-border-radius-topright: 0px;
|
1691 |
-
-moz-border-radius-bottomright: 0px;
|
1692 |
-
border-top-right-radius: 0px;
|
1693 |
-
border-bottom-right-radius: 0px; }
|
1694 |
-
.wp-defender .receipt > div button {
|
1695 |
-
width: 20%;
|
1696 |
-
display: inline-block;
|
1697 |
-
-webkit-border-top-left-radius: 0px;
|
1698 |
-
-webkit-border-bottom-left-radius: 0px;
|
1699 |
-
-moz-border-radius-topleft: 0px;
|
1700 |
-
-moz-border-radius-bottomleft: 0px;
|
1701 |
-
border-top-left-radius: 0px;
|
1702 |
-
border-bottom-left-radius: 0px;
|
1703 |
-
float: right; }
|
1704 |
-
.wp-defender input[type="checkbox"] {
|
1705 |
-
border: solid 1px #E6E6E6;
|
1706 |
-
-webkit-border-radius: 2px;
|
1707 |
-
-moz-border-radius: 2px;
|
1708 |
-
border-radius: 2px;
|
1709 |
-
box-shadow: none; }
|
1710 |
-
.wp-defender .bulk-nav {
|
1711 |
-
margin-bottom: 30px; }
|
1712 |
-
.wp-defender .bulk-nav .bulk-action {
|
1713 |
-
position: relative;
|
1714 |
-
width: 40%;
|
1715 |
-
float: left; }
|
1716 |
-
.wp-defender .bulk-nav .bulk-action input {
|
1717 |
-
position: absolute;
|
1718 |
-
top: 50%;
|
1719 |
-
margin-top: -10px;
|
1720 |
-
left: 0; }
|
1721 |
-
.wp-defender .bulk-nav .bulk-action .select-container {
|
1722 |
-
display: inline-block;
|
1723 |
-
min-width: 150px;
|
1724 |
-
float: left;
|
1725 |
-
border-right: 0;
|
1726 |
-
border-top-right-radius: 0;
|
1727 |
-
border-bottom-right-radius: 0;
|
1728 |
-
overflow: visible; }
|
1729 |
-
.wp-defender .bulk-nav .bulk-action .select-container .dropdown-handle {
|
1730 |
-
height: 39px; }
|
1731 |
-
.wp-defender .bulk-nav .bulk-action .select-container .select-list-container {
|
1732 |
-
height: 39px; }
|
1733 |
-
.wp-defender .bulk-nav .bulk-action .button {
|
1734 |
-
float: left;
|
1735 |
-
border-left: 0;
|
1736 |
-
border-left: 0;
|
1737 |
-
border-top-left-radius: 0;
|
1738 |
-
border-bottom-left-radius: 0; }
|
1739 |
-
.wp-defender .nav {
|
1740 |
-
float: right; }
|
1741 |
-
.wp-defender .nav span {
|
1742 |
-
margin-right: 10px;
|
1743 |
-
font-size: 13px;
|
1744 |
-
color: #888; }
|
1745 |
-
.wp-defender .nav .button-group .button {
|
1746 |
-
margin: 0;
|
1747 |
-
box-shadow: none;
|
1748 |
-
border: solid 1px #E6E6E6; }
|
1749 |
-
.wp-defender .nav .button-group .button:not(:first-child):not(:last-child) {
|
1750 |
-
border-right: 0; }
|
1751 |
-
.wp-defender .nav .button-group .button:first-child {
|
1752 |
-
border-right: 0; }
|
1753 |
-
.wp-defender .upload-input input[type="text"] {
|
1754 |
-
margin-right: 0;
|
1755 |
-
border-right: 0;
|
1756 |
-
border-top-right-radius: 0;
|
1757 |
-
border-bottom-right-radius: 0; }
|
1758 |
-
.wp-defender .upload-input .button.button-light {
|
1759 |
-
border-right: 0;
|
1760 |
-
border-top-right-radius: 0;
|
1761 |
-
border-bottom-right-radius: 0;
|
1762 |
-
border-left: 0;
|
1763 |
-
border-top-left-radius: 0;
|
1764 |
-
border-bottom-left-radius: 0;
|
1765 |
-
margin-left: -5px; }
|
1766 |
-
.wp-defender .upload-input .button.button-grey {
|
1767 |
-
border-left: 0;
|
1768 |
-
border-top-left-radius: 0;
|
1769 |
-
border-bottom-left-radius: 0;
|
1770 |
-
margin-left: -5px; }
|
1771 |
-
.wp-defender .floated-alert {
|
1772 |
-
position: fixed;
|
1773 |
-
top: 0;
|
1774 |
-
right: 0;
|
1775 |
-
left: 0;
|
1776 |
-
margin-right: auto;
|
1777 |
-
margin-left: auto;
|
1778 |
-
/* give it dimensions */
|
1779 |
-
width: 50%;
|
1780 |
-
color: #333;
|
1781 |
-
z-index: 999999;
|
1782 |
-
border-bottom-left-radius: 5px;
|
1783 |
-
border-bottom-right-radius: 5px;
|
1784 |
-
-webkit-box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.15);
|
1785 |
-
-moz-box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.15);
|
1786 |
-
box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.15);
|
1787 |
-
vertical-align: middle;
|
1788 |
-
padding: 15px 30px;
|
1789 |
-
box-sizing: content-box;
|
1790 |
-
cursor: pointer; }
|
1791 |
-
.wp-defender .floated-alert.alert-error {
|
1792 |
-
background: #FFE5E9; }
|
1793 |
-
.wp-defender .floated-alert.alert-error:before {
|
1794 |
-
content: '\f05a';
|
1795 |
-
font-family: 'FontAwesomeWdv';
|
1796 |
-
font-size: 18px;
|
1797 |
-
vertical-align: middle;
|
1798 |
-
margin-right: 5px;
|
1799 |
-
color: #FF7F83; }
|
1800 |
-
.wp-defender .floated-alert.alert-ok {
|
1801 |
-
background: #D1F1EA; }
|
1802 |
-
.wp-defender .floated-alert.alert-ok:before {
|
1803 |
-
content: '\67';
|
1804 |
-
font-family: 'WPMU-DEV-App-Icons';
|
1805 |
-
font-size: 18px;
|
1806 |
-
margin-right: 5px;
|
1807 |
-
vertical-align: middle;
|
1808 |
-
color: #1ABC9C; }
|
1809 |
-
.wp-defender .list-results {
|
1810 |
-
max-height: 200px;
|
1811 |
-
overflow-y: scroll; }
|
1812 |
-
.wp-defender .status-text {
|
1813 |
-
font-size: 13px;
|
1814 |
-
line-height: 22px;
|
1815 |
-
margin: 4px 0; }
|
1816 |
-
.wp-defender i.def-icon:before {
|
1817 |
display: inline-block;
|
1818 |
-
font-family: 'defender-icon';
|
1819 |
-
font-style: normal;
|
1820 |
-
font-weight: normal;
|
1821 |
-
line-height: 1;
|
1822 |
-
-webkit-font-smoothing: antialiased;
|
1823 |
-
-moz-osx-font-smoothing: grayscale;
|
1824 |
-
color: #888888;
|
1825 |
-
font-size: 20px; }
|
1826 |
-
.wp-defender i.def-icon.icon-cross:before {
|
1827 |
-
content: '\0041';
|
1828 |
-
color: #FF7F83; }
|
1829 |
-
.wp-defender i.def-icon.icon-info:before {
|
1830 |
-
content: '\0042'; }
|
1831 |
-
.wp-defender i.def-icon.icon-h-warning:before {
|
1832 |
-
content: '\0045';
|
1833 |
-
color: #FECF2F; }
|
1834 |
-
.wp-defender i.def-icon.icon-tick:before {
|
1835 |
-
content: '\0043';
|
1836 |
-
color: #1ABC9C; }
|
1837 |
-
.wp-defender i.def-icon.icon-warning:before {
|
1838 |
-
content: '\0044';
|
1839 |
-
color: #FECF2F;
|
1840 |
-
opacity: 0; }
|
1841 |
-
.wp-defender i.def-icon.fill-blue:before {
|
1842 |
-
color: #17A8E3; }
|
1843 |
-
.wp-defender i.def-icon.fill-red:before {
|
1844 |
-
color: #FF7F83; }
|
1845 |
-
.wp-defender i.def-icon.fill-grey:before {
|
1846 |
-
color: #888888; }
|
1847 |
-
.wp-defender .max-600 {
|
1848 |
-
max-width: 600px;
|
1849 |
-
margin: 0 auto; }
|
1850 |
-
.wp-defender .table {
|
1851 |
-
width: 100%; }
|
1852 |
-
.wp-defender .table tr th {
|
1853 |
-
font-size: 13px;
|
1854 |
-
line-height: 22px;
|
1855 |
-
font-weight: 600;
|
1856 |
-
padding: 0px 30px 15px 30px;
|
1857 |
-
color: #333;
|
1858 |
-
text-align: left;
|
1859 |
-
border-bottom: solid 1px #E6E6E6; }
|
1860 |
-
.wp-defender .table tr td {
|
1861 |
-
font-size: 15px;
|
1862 |
-
line-height: 30px;
|
1863 |
-
color: #333;
|
1864 |
-
padding: 15px 30px;
|
1865 |
-
text-align: left;
|
1866 |
-
border-bottom: solid 1px #E6E6E6; }
|
1867 |
-
.wp-defender .table tr td:first-child, .wp-defender .table tr th:first-child {
|
1868 |
-
padding-left: 0; }
|
1869 |
-
.wp-defender .table tbody tr:last-child th, .wp-defender .table tbody tr:last-child td {
|
1870 |
-
border-bottom: none;
|
1871 |
-
padding-bottom: 0; }
|
1872 |
-
.wp-defender strong.small {
|
1873 |
-
color: #888;
|
1874 |
-
font-size: 12px;
|
1875 |
-
font-weight: bold;
|
1876 |
-
line-height: 22px; }
|
1877 |
-
.wp-defender .wd-select-inline {
|
1878 |
-
display: inline-block; }
|
1879 |
-
.wp-defender .def-dashboard .hardener-widget .dev-list {
|
1880 |
-
margin: 0 0 30px; }
|
1881 |
-
.wp-defender .def-dashboard .hardener-widget .dev-list a {
|
1882 |
-
color: #666;
|
1883 |
-
cursor: pointer;
|
1884 |
-
display: block;
|
1885 |
-
width: 100%; }
|
1886 |
-
.wp-defender .def-dashboard .hardener-widget .dev-list .list-label {
|
1887 |
-
display: block;
|
1888 |
-
cursor: pointer; }
|
1889 |
-
.wp-defender .def-dashboard .hardener-widget .dev-list .list-label i {
|
1890 |
-
vertical-align: sub;
|
1891 |
-
margin-right: 6px;
|
1892 |
-
background-image: url("../img/wpmud-icon-warning-yellow.svg");
|
1893 |
-
background-repeat: no-repeat;
|
1894 |
-
width: 20px;
|
1895 |
-
height: 20px;
|
1896 |
-
display: inline-block; }
|
1897 |
-
.wp-defender .def-dashboard .hardener-widget .dev-list .list-label i:before {
|
1898 |
-
content: ''; }
|
1899 |
-
.wp-defender .hardener .col-third {
|
1900 |
-
width: 25%; }
|
1901 |
-
.wp-defender .hardener .col-two-third {
|
1902 |
-
width: 75%; }
|
1903 |
-
.wp-defender .hardener .summary-box {
|
1904 |
-
background-image: url("../img/hardener-man.svg"); }
|
1905 |
-
.wp-defender .hardener .rules .rule {
|
1906 |
-
background: #F8F8F8;
|
1907 |
-
border-left: solid 3px #FECF2F;
|
1908 |
-
padding: 15px 30px 30px 30px;
|
1909 |
-
line-height: 30px;
|
1910 |
-
margin: 0 -30px; }
|
1911 |
-
.wp-defender .hardener .rules .rule .rule-title {
|
1912 |
-
padding: 0 0 15px 30px;
|
1913 |
-
cursor: pointer;
|
1914 |
-
border-bottom: solid 1px #E6E6E6;
|
1915 |
-
position: relative; }
|
1916 |
-
.wp-defender .hardener .rules .rule .rule-title i {
|
1917 |
-
font-size: 20px;
|
1918 |
-
display: inline-block;
|
1919 |
-
width: 20px;
|
1920 |
-
height: 20px;
|
1921 |
-
margin-right: 10px;
|
1922 |
-
position: absolute;
|
1923 |
-
left: 0;
|
1924 |
-
top: 2px; }
|
1925 |
-
.wp-defender .hardener .rules .rule .rule-title i.icon-warning {
|
1926 |
-
top: 5px; }
|
1927 |
-
.wp-defender .hardener .rules .rule .rule-title:after {
|
1928 |
-
font-family: 'WPMU-DEV-App-Icons';
|
1929 |
-
speak: none;
|
1930 |
-
font-style: normal;
|
1931 |
-
font-weight: normal;
|
1932 |
-
font-variant: normal;
|
1933 |
-
text-transform: none;
|
1934 |
-
line-height: 1;
|
1935 |
-
font-size: 20px;
|
1936 |
-
-webkit-font-smoothing: antialiased;
|
1937 |
-
-moz-osx-font-smoothing: grayscale;
|
1938 |
-
content: "\72";
|
1939 |
-
position: absolute;
|
1940 |
-
top: 5px;
|
1941 |
-
right: 0; }
|
1942 |
-
.wp-defender .hardener .rules .rule .rule-content {
|
1943 |
-
margin-top: 30px;
|
1944 |
-
background: #fff;
|
1945 |
-
padding: 0 30px 30px 30px;
|
1946 |
-
-webkit-border-radius: 5px;
|
1947 |
-
-moz-border-radius: 5px;
|
1948 |
-
border-radius: 5px;
|
1949 |
-
overflow: hidden;
|
1950 |
-
box-shadow: 0 2px 0 #EAEAEA; }
|
1951 |
-
.wp-defender .hardener .rules .rule .rule-content h3 {
|
1952 |
-
font-weight: bold;
|
1953 |
-
color: #333;
|
1954 |
-
font-family: Roboto, sans-serif;
|
1955 |
-
text-align: left;
|
1956 |
-
padding: 0;
|
1957 |
-
margin: 30px 0;
|
1958 |
-
font-size: 13px;
|
1959 |
-
text-transform: none; }
|
1960 |
-
.wp-defender .hardener .rules .rule .rule-content form input.block {
|
1961 |
-
width: 100%;
|
1962 |
-
display: block;
|
1963 |
-
margin-bottom: 30px;
|
1964 |
-
text-align: left; }
|
1965 |
-
.wp-defender .hardener .rules .rule .rule-content form button {
|
1966 |
-
margin-left: 0; }
|
1967 |
-
.wp-defender .hardener .rules .rule .security-reminder form {
|
1968 |
-
display: inline-block;
|
1969 |
-
line-height: 49px; }
|
1970 |
-
.wp-defender .hardener .rules .rule .security-reminder form .select-container {
|
1971 |
-
width: auto;
|
1972 |
-
display: inline-block;
|
1973 |
-
vertical-align: middle;
|
1974 |
-
margin: 0 10px; }
|
1975 |
-
.wp-defender .hardener .rules .rule .security-reminder form .button {
|
1976 |
-
vertical-align: middle; }
|
1977 |
-
.wp-defender .hardener .rules .rule .version-col strong {
|
1978 |
-
color: #333;
|
1979 |
-
font-family: Roboto, sans-serif;
|
1980 |
-
display: block;
|
1981 |
-
font-weight: bold;
|
1982 |
-
margin-bottom: 10px;
|
1983 |
-
font-size: 13px;
|
1984 |
-
text-transform: none; }
|
1985 |
-
.wp-defender .hardener .rules .rule .well.has-input {
|
1986 |
-
position: relative; }
|
1987 |
-
.wp-defender .hardener .rules .rule .well.has-input form.ignore-frm {
|
1988 |
-
position: absolute;
|
1989 |
-
left: 30px; }
|
1990 |
-
.wp-defender .hardener .rules .rule.closed {
|
1991 |
-
padding: 0 30px 15px 30px;
|
1992 |
-
background: #fff;
|
1993 |
-
border-bottom: solid 1px #E6E6E6; }
|
1994 |
-
.wp-defender .hardener .rules .rule.closed .rule-title {
|
1995 |
-
border-bottom: 0;
|
1996 |
-
padding: 15px 30px 0 30px; }
|
1997 |
-
.wp-defender .hardener .rules .rule.closed .rule-title i {
|
1998 |
-
top: 18px; }
|
1999 |
-
.wp-defender .hardener .rules .rule.closed .rule-title i.icon-warning {
|
2000 |
-
top: 20px; }
|
2001 |
-
.wp-defender .hardener .rules .rule.closed .rule-title:after {
|
2002 |
-
content: '\65';
|
2003 |
-
top: 20px; }
|
2004 |
-
.wp-defender .hardener .rules .rule.closed .rule-content {
|
2005 |
-
display: none; }
|
2006 |
-
.wp-defender .hardener .rules:not(.ignored) i.icon-warning {
|
2007 |
-
background: url("../img/wpmud-icon-warning-yellow.svg") no-repeat;
|
2008 |
-
vertical-align: sub;
|
2009 |
-
margin-right: 6px; }
|
2010 |
-
.wp-defender .hardener .rules:not(.ignored) i.icon-warning:before {
|
2011 |
-
content: ""; }
|
2012 |
-
.wp-defender .hardener .rule.closed:first-child {
|
2013 |
-
border-top: solid 1px #E6E6E6; }
|
2014 |
-
.wp-defender .hardener .rule:first-child {
|
2015 |
-
border-top: solid 1px transparent; }
|
2016 |
-
.wp-defender .hardener .rules.fixed .rule {
|
2017 |
-
border-left: solid 3px #1ABC9C; }
|
2018 |
-
.wp-defender .hardener .rules.ignored .rule {
|
2019 |
-
border-left: solid 3px #E6E6E6; }
|
2020 |
-
.wp-defender .hardener .rules.ignored .rule.closed .rule-title i {
|
2021 |
-
top: 18px; }
|
2022 |
-
.wp-defender .hardener .rules.ignored .rule.closed .rule-title:after {
|
2023 |
-
content: ''; }
|
2024 |
-
.wp-defender .hardener .inner-nav li a {
|
2025 |
-
padding-right: 0; }
|
2026 |
-
.wp-defender .hardener .inner-nav li a span:not(.def-tag) {
|
2027 |
-
margin-right: 18px; }
|
2028 |
-
.wp-defender .scan-progress {
|
2029 |
-
overflow: hidden;
|
2030 |
-
width: 100%; }
|
2031 |
-
.wp-defender .scan-progress .scan-progress-text {
|
2032 |
-
width: 80px;
|
2033 |
-
float: left; }
|
2034 |
-
.wp-defender .scan-progress .scan-progress-text img {
|
2035 |
-
display: inline-block;
|
2036 |
-
vertical-align: sub;
|
2037 |
-
margin-right: 10px; }
|
2038 |
-
.wp-defender .scan-progress .scan-progress-text span {
|
2039 |
-
font-weight: bold;
|
2040 |
-
font-family: "Roboto Condensed", sans-serif;
|
2041 |
-
font-size: 13px; }
|
2042 |
-
.wp-defender .scan-progress .scan-progress-bar {
|
2043 |
-
background: #E6E6E6;
|
2044 |
-
-webkit-border-radius: 5px;
|
2045 |
-
-moz-border-radius: 5px;
|
2046 |
-
border-radius: 5px;
|
2047 |
-
height: 10px;
|
2048 |
-
overflow: hidden;
|
2049 |
-
width: auto;
|
2050 |
-
margin-top: 11px;
|
2051 |
-
position: relative; }
|
2052 |
-
.wp-defender .scan-progress .scan-progress-bar span {
|
2053 |
-
background: #17A8E3;
|
2054 |
-
height: 10px;
|
2055 |
-
display: inline-block;
|
2056 |
-
position: absolute;
|
2057 |
-
top: 0;
|
2058 |
-
left: 0;
|
2059 |
-
-webkit-transition: 1000ms width ease-in-out;
|
2060 |
-
-moz-transition: 1000ms width ease-in-out;
|
2061 |
-
transition: 1000ms width ease-in-out; }
|
2062 |
-
.wp-defender .wdf-scanning .summary-box, .wp-defender .scan-dialog .summary-box {
|
2063 |
-
background-image: url("../img/scan-result-man.svg"); }
|
2064 |
-
.wp-defender .wdf-scanning .summary-box .issues-count, .wp-defender .scan-dialog .summary-box .issues-count {
|
2065 |
-
padding-left: 20px;
|
2066 |
-
padding-right: 0; }
|
2067 |
-
.wp-defender .wdf-scanning .summary-box .issues-count div, .wp-defender .scan-dialog .summary-box .issues-count div {
|
2068 |
-
width: 50%; }
|
2069 |
-
.wp-defender .wdf-scanning .row > .col-third, .wp-defender .scan-dialog .row > .col-third {
|
2070 |
-
width: 25%; }
|
2071 |
-
.wp-defender .wdf-scanning .row > .col-two-third, .wp-defender .scan-dialog .row > .col-two-third {
|
2072 |
-
width: 75%; }
|
2073 |
-
.wp-defender .wdf-scanning input[name="email_subject"], .wp-defender .scan-dialog input[name="email_subject"] {
|
2074 |
-
width: 100%; }
|
2075 |
-
.wp-defender .wdf-scanning table, .wp-defender .scan-dialog table {
|
2076 |
-
width: 100%;
|
2077 |
-
margin-bottom: 30px;
|
2078 |
-
border-collapse: collapse; }
|
2079 |
-
.wp-defender .wdf-scanning table td, .wp-defender .wdf-scanning table th, .wp-defender .scan-dialog table td, .wp-defender .scan-dialog table th {
|
2080 |
-
border-bottom: solid 1px #E6E6E6; }
|
2081 |
-
.wp-defender .wdf-scanning table thead th, .wp-defender .scan-dialog table thead th {
|
2082 |
-
font-family: Roboto, sans-serif;
|
2083 |
-
text-align: left;
|
2084 |
-
font-weight: bold;
|
2085 |
-
color: #333;
|
2086 |
-
padding-bottom: 7px;
|
2087 |
-
font-size: 13px;
|
2088 |
-
line-height: 22px;
|
2089 |
-
white-space: nowrap; }
|
2090 |
-
.wp-defender .wdf-scanning table tbody tr td, .wp-defender .scan-dialog table tbody tr td {
|
2091 |
-
padding: 7px 10px 7px 0; }
|
2092 |
-
.wp-defender .wdf-scanning table tbody tr td p, .wp-defender .scan-dialog table tbody tr td p {
|
2093 |
-
color: #666;
|
2094 |
-
margin-bottom: 5;
|
2095 |
-
line-height: 17px; }
|
2096 |
-
.wp-defender .wdf-scanning table tbody tr td [tooltip]:after, .wp-defender .scan-dialog table tbody tr td [tooltip]:after {
|
2097 |
-
margin-left: -35px;
|
2098 |
-
width: 65px; }
|
2099 |
-
.wp-defender .wdf-scanning table tbody tr td:first-child, .wp-defender .wdf-scanning table tbody tr td.bulk, .wp-defender .scan-dialog table tbody tr td:first-child, .wp-defender .scan-dialog table tbody tr td.bulk {
|
2100 |
-
width: 25px;
|
2101 |
-
vertical-align: middle; }
|
2102 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(2), .wp-defender .wdf-scanning table tbody tr td.col_file, .wp-defender .scan-dialog table tbody tr td:nth-child(2), .wp-defender .scan-dialog table tbody tr td.col_file {
|
2103 |
-
color: #333;
|
2104 |
-
line-height: 20px;
|
2105 |
-
width: 47%;
|
2106 |
-
padding-right: 10px; }
|
2107 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(2) span, .wp-defender .wdf-scanning table tbody tr td.col_file span, .wp-defender .scan-dialog table tbody tr td:nth-child(2) span, .wp-defender .scan-dialog table tbody tr td.col_file span {
|
2108 |
-
display: block;
|
2109 |
-
font-size: 13px;
|
2110 |
-
color: #888; }
|
2111 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(3), .wp-defender .wdf-scanning table tbody tr td.item-issue, .wp-defender .wdf-scanning table tbody tr td.col_fixed_date, .wp-defender .scan-dialog table tbody tr td:nth-child(3), .wp-defender .scan-dialog table tbody tr td.item-issue, .wp-defender .scan-dialog table tbody tr td.col_fixed_date {
|
2112 |
-
font-size: 13px;
|
2113 |
-
vertical-align: middle; }
|
2114 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(4), .wp-defender .wdf-scanning table tbody tr td.item-action, .wp-defender .scan-dialog table tbody tr td:nth-child(4), .wp-defender .scan-dialog table tbody tr td.item-action {
|
2115 |
-
text-align: center;
|
2116 |
-
width: 70px; }
|
2117 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(4) a, .wp-defender .wdf-scanning table tbody tr td.item-action a, .wp-defender .scan-dialog table tbody tr td:nth-child(4) a, .wp-defender .scan-dialog table tbody tr td.item-action a {
|
2118 |
-
background: transparent;
|
2119 |
-
padding: 10px 15px; }
|
2120 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(4) a:hover, .wp-defender .wdf-scanning table tbody tr td.item-action a:hover, .wp-defender .scan-dialog table tbody tr td:nth-child(4) a:hover, .wp-defender .scan-dialog table tbody tr td.item-action a:hover {
|
2121 |
-
background: #F9F9F9; }
|
2122 |
-
.wp-defender .wdf-scanning table tbody tr td:nth-child(4) a:active, .wp-defender .wdf-scanning table tbody tr td.item-action a:active, .wp-defender .scan-dialog table tbody tr td:nth-child(4) a:active, .wp-defender .scan-dialog table tbody tr td.item-action a:active {
|
2123 |
-
background: #E6E6E6; }
|
2124 |
-
.wp-defender .wdf-scanning .has-presale, .wp-defender .scan-dialog .has-presale {
|
2125 |
-
background-image: url("../img/scanning-free-man.svg");
|
2126 |
-
background-repeat: no-repeat;
|
2127 |
-
background-position: 2% 110%;
|
2128 |
-
padding-bottom: 160px;
|
2129 |
-
position: relative; }
|
2130 |
-
.wp-defender .wdf-scanning .has-presale .presale-text, .wp-defender .scan-dialog .has-presale .presale-text {
|
2131 |
-
position: absolute;
|
2132 |
-
font-size: 13px;
|
2133 |
-
line-height: 15px;
|
2134 |
-
bottom: 30px;
|
2135 |
-
left: 150px; }
|
2136 |
-
.wp-defender .wdf-scanning .has-presale .presale-text div, .wp-defender .scan-dialog .has-presale .presale-text div {
|
2137 |
-
float: left;
|
2138 |
-
width: 100%; }
|
2139 |
-
.wp-defender .wdf-scanning .item-detail, .wp-defender .scan-dialog .item-detail {
|
2140 |
margin-bottom: 0;
|
2141 |
-
|
2142 |
-
|
2143 |
-
|
2144 |
-
|
2145 |
-
|
2146 |
-
|
2147 |
-
|
2148 |
-
|
2149 |
-
|
2150 |
-
|
2151 |
-
|
2152 |
-
|
2153 |
-
|
2154 |
-
.wp-defender .
|
2155 |
-
|
2156 |
-
.wp-defender .wdf-scanning .vuln-list ul li:before, .wp-defender .scan-dialog .vuln-list ul li:before {
|
2157 |
-
content: '-';
|
2158 |
-
margin-right: 2px; }
|
2159 |
-
.wp-defender .wdf-scanning .vuln-list ul li, .wp-defender .scan-dialog .vuln-list ul li {
|
2160 |
-
color: #888;
|
2161 |
-
margin-bottom: 5px;
|
2162 |
-
line-height: 15px;
|
2163 |
-
font-size: 13px;
|
2164 |
-
font-family: Roboto, sans-serif;
|
2165 |
-
font-weight: normal; }
|
2166 |
-
.wp-defender .wdf-scanning .confirm-box, .wp-defender .scan-dialog .confirm-box {
|
2167 |
-
font-size: 13px; }
|
2168 |
-
.wp-defender .wdf-scanning .confirm-box span, .wp-defender .scan-dialog .confirm-box span {
|
2169 |
-
display: inline-block;
|
2170 |
-
width: 70%;
|
2171 |
-
float: left; }
|
2172 |
-
.wp-defender .wdf-scanning .scan-frm.delete-item, .wp-defender .scan-dialog .scan-frm.delete-item {
|
2173 |
-
max-width: 85%; }
|
2174 |
-
.wp-defender .wdf-scanning .inner-nav li a, .wp-defender .scan-dialog .inner-nav li a {
|
2175 |
-
padding-right: 0; }
|
2176 |
-
.wp-defender .wdf-scanning .inner-nav li a span:not(.def-tag), .wp-defender .scan-dialog .inner-nav li a span:not(.def-tag) {
|
2177 |
-
margin-right: 18px; }
|
2178 |
-
.wp-defender .wdf-scanning .inner-nav li a span.def-tag, .wp-defender .scan-dialog .inner-nav li a span.def-tag {
|
2179 |
-
color: white; }
|
2180 |
-
.wp-defender .wdf-scanning .inner-sourcecode, .wp-defender .scan-dialog .inner-sourcecode {
|
2181 |
-
position: relative; }
|
2182 |
-
.wp-defender .auditing .row > .col-third {
|
2183 |
-
width: 25%; }
|
2184 |
-
.wp-defender .auditing .row > .col-two-third {
|
2185 |
-
width: 75%; }
|
2186 |
-
.wp-defender .auditing .summary-box {
|
2187 |
-
background-image: url("../img/dev-man-pre.svg");
|
2188 |
-
background-repeat: no-repeat;
|
2189 |
-
background-position: 20px 50px; }
|
2190 |
-
.wp-defender .auditing .summary-box .columns {
|
2191 |
-
min-height: 120px; }
|
2192 |
-
.wp-defender .auditing .summary-box .columns .issues-count > div {
|
2193 |
-
width: 50%; }
|
2194 |
-
.wp-defender .auditing .summary-box .columns .is-5 {
|
2195 |
-
position: relative; }
|
2196 |
-
.wp-defender .auditing .summary-box .columns .is-5 div.dev-list-container {
|
2197 |
-
width: 90%;
|
2198 |
-
position: absolute;
|
2199 |
-
top: 50%;
|
2200 |
-
transform: translateY(-50%); }
|
2201 |
-
.wp-defender .auditing .bulk-nav .bulk-action {
|
2202 |
-
width: 30%;
|
2203 |
-
padding-left: 0; }
|
2204 |
-
.wp-defender .auditing .is-free {
|
2205 |
-
background-image: url("../img/scanning-free-man.svg");
|
2206 |
background-repeat: no-repeat;
|
2207 |
-
background-
|
2208 |
-
|
2209 |
-
|
2210 |
-
|
2211 |
-
background-color: #F2F2F2;
|
2212 |
-
color: #333;
|
2213 |
-
line-height: 22px; }
|
2214 |
-
.wp-defender .auditing #audit-table {
|
2215 |
-
margin: 10px -30px 30px -30px; }
|
2216 |
-
.wp-defender .auditing #audit-table > table {
|
2217 |
-
width: 100%; }
|
2218 |
-
.wp-defender .auditing #audit-table > table td, .wp-defender .auditing #audit-table > table th {
|
2219 |
-
border-bottom: solid 1px #E6E6E6;
|
2220 |
-
padding-bottom: 15px; }
|
2221 |
-
.wp-defender .auditing #audit-table > table thead th {
|
2222 |
-
text-align: left;
|
2223 |
-
font-weight: bold;
|
2224 |
-
font-size: 13px;
|
2225 |
-
color: #333;
|
2226 |
-
padding: 0 30px 15px 30px;
|
2227 |
-
line-height: 22px;
|
2228 |
-
white-space: nowrap; }
|
2229 |
-
.wp-defender .auditing #audit-table > table thead th a {
|
2230 |
-
padding: 0;
|
2231 |
-
margin: 0;
|
2232 |
-
color: #333; }
|
2233 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td {
|
2234 |
-
padding: 15px 30px;
|
2235 |
-
font-size: 13px;
|
2236 |
-
line-height: 22px;
|
2237 |
-
vertical-align: top; }
|
2238 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td span.sub {
|
2239 |
-
font-size: 12px;
|
2240 |
-
display: block;
|
2241 |
-
line-height: 22px; }
|
2242 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td:first-child {
|
2243 |
-
width: 60%;
|
2244 |
-
padding: 15px 30px; }
|
2245 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td:nth-child(2) {
|
2246 |
-
white-space: nowrap; }
|
2247 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td:nth-child(3) {
|
2248 |
-
white-space: nowrap; }
|
2249 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td:last-child {
|
2250 |
-
text-align: right;
|
2251 |
-
padding: 15px 30px; }
|
2252 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td:last-child > a {
|
2253 |
-
color: #666;
|
2254 |
-
font-size: 20px;
|
2255 |
-
vertical-align: middle; }
|
2256 |
-
.wp-defender .auditing #audit-table > table > tbody > tr > td:last-child > a i {
|
2257 |
-
font-size: 20px; }
|
2258 |
-
.wp-defender .auditing #audit-table > table > tbody tr.show-info {
|
2259 |
-
cursor: pointer; }
|
2260 |
-
.wp-defender .auditing #audit-table > table > tbody tr.critical td:first-child:before {
|
2261 |
-
color: #FF7F83; }
|
2262 |
-
.wp-defender .auditing #audit-table > table > tbody tr.warning td:first-child:before {
|
2263 |
-
color: #FECF2F; }
|
2264 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info {
|
2265 |
-
background: #F9F9F9; }
|
2266 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child::before {
|
2267 |
-
background: none;
|
2268 |
-
width: 100%;
|
2269 |
-
display: block;
|
2270 |
-
border-top: solid 1px #E6E6E6;
|
2271 |
-
height: 30px;
|
2272 |
-
padding-top: 0;
|
2273 |
-
padding-bottom: 0; }
|
2274 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child {
|
2275 |
-
text-align: left;
|
2276 |
-
padding-top: 0; }
|
2277 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child .box-content strong {
|
2278 |
-
font-size: 13px;
|
2279 |
-
line-height: 22px;
|
2280 |
-
font-weight: bold; }
|
2281 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child .box-content p {
|
2282 |
-
font-size: 13px;
|
2283 |
-
line-height: 22px;
|
2284 |
-
color: #888; }
|
2285 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child .box-content table {
|
2286 |
-
width: 100%; }
|
2287 |
-
.wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child .box-content table td, .wp-defender .auditing #audit-table > table > tbody > tr.table-info > td:first-child .box-content table th {
|
2288 |
-
border: none;
|
2289 |
-
width: 20%;
|
2290 |
-
padding: 0; }
|
2291 |
-
.wp-defender .auditing #audit-table > table > tbody tr.opened {
|
2292 |
-
background: #F9F9F9; }
|
2293 |
-
.wp-defender .auditing #audit-table > table > tbody tr.opened td {
|
2294 |
-
border-bottom: none; }
|
2295 |
-
.wp-defender .auditing .audit-filter > strong {
|
2296 |
-
text-transform: uppercase;
|
2297 |
display: block;
|
2298 |
-
|
2299 |
-
|
2300 |
-
|
2301 |
-
|
2302 |
-
|
2303 |
-
|
2304 |
-
|
2305 |
-
|
2306 |
-
|
2307 |
-
|
2308 |
-
|
2309 |
-
|
2310 |
-
|
2311 |
-
|
2312 |
-
|
2313 |
-
|
2314 |
-
|
2315 |
-
|
2316 |
-
|
2317 |
-
|
2318 |
-
|
2319 |
-
|
2320 |
-
|
2321 |
-
|
2322 |
-
|
2323 |
-
|
2324 |
-
|
2325 |
-
|
2326 |
-
|
2327 |
-
|
2328 |
-
|
2329 |
-
|
2330 |
-
|
2331 |
-
|
2332 |
-
|
2333 |
-
|
2334 |
-
|
2335 |
-
|
2336 |
-
|
2337 |
-
|
2338 |
-
|
2339 |
-
|
2340 |
-
|
2341 |
-
.wp-defender .iplockout table thead th a {
|
2342 |
-
padding: 0;
|
2343 |
-
margin: 0;
|
2344 |
-
color: #333; }
|
2345 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td {
|
2346 |
-
padding: 7px 0;
|
2347 |
-
font-size: 13px;
|
2348 |
-
font-weight: 500; }
|
2349 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td:first-child {
|
2350 |
-
width: 75%;
|
2351 |
-
padding-left: 30px;
|
2352 |
-
padding-right: 10px;
|
2353 |
-
box-shadow: inset 2px 0 0 0 #FECF2F;
|
2354 |
-
color: #333; }
|
2355 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td:first-child input[type="checkbox"] {
|
2356 |
-
margin-right: 10px; }
|
2357 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td:first-child .badge {
|
2358 |
-
background: #FFF5D5;
|
2359 |
-
-webkit-border-radius: 2px;
|
2360 |
-
-moz-border-radius: 2px;
|
2361 |
-
border-radius: 2px;
|
2362 |
-
font-size: 10px;
|
2363 |
-
color: #333;
|
2364 |
-
font-family: "Roboto Condensed", sans-serif;
|
2365 |
-
font-weight: bold;
|
2366 |
-
padding: 5px 10px;
|
2367 |
-
margin-right: 10px;
|
2368 |
-
text-transform: uppercase; }
|
2369 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td:first-child .badge.locked {
|
2370 |
-
background: #FFE5E9; }
|
2371 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td:last-child {
|
2372 |
-
padding-right: 30px; }
|
2373 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td {
|
2374 |
-
padding: 10px 0;
|
2375 |
-
cursor: pointer; }
|
2376 |
-
.wp-defender .iplockout table tbody tr:not(.table-info) td.action {
|
2377 |
-
text-align: center; }
|
2378 |
-
.wp-defender .iplockout table tbody tr:not(.table-info).log-404.lockout td:first-child:before, .wp-defender .iplockout table tbody tr.log-login.lockout td:first-child:before {
|
2379 |
-
background: #FFE5E9; }
|
2380 |
-
.wp-defender .iplockout table tbody tr:not(.table-info).opened {
|
2381 |
-
background: #F9F9F9; }
|
2382 |
-
.wp-defender .iplockout table tbody tr:not(.table-info).opened td {
|
2383 |
-
border-bottom: none !important; }
|
2384 |
-
.wp-defender .iplockout table tbody tr.table-info {
|
2385 |
-
background: #F9F9F9; }
|
2386 |
-
.wp-defender .iplockout table tbody tr.table-info td {
|
2387 |
-
padding: 15px 30px;
|
2388 |
-
box-shadow: inset 2px 0 0 0 #FECF2F;
|
2389 |
-
border-top: none; }
|
2390 |
-
.wp-defender .iplockout table tbody tr.table-info td p {
|
2391 |
-
margin-bottom: 5px;
|
2392 |
-
font-size: 13px;
|
2393 |
-
line-height: 18px; }
|
2394 |
-
.wp-defender .iplockout table tbody tr.table-info td p strong {
|
2395 |
-
font-weight: 500;
|
2396 |
-
color: #333; }
|
2397 |
-
.wp-defender .iplockout table tbody tr.table-info td .well form {
|
2398 |
-
display: inline-block;
|
2399 |
-
margin-right: 10px;
|
2400 |
-
margin-bottom: 5px; }
|
2401 |
-
.wp-defender .iplockout .lockout-logs-filter {
|
2402 |
-
padding: 0 30px; }
|
2403 |
-
.wp-defender .iplockout .lockout-logs-filter .columns {
|
2404 |
-
margin-bottom: 10px;
|
2405 |
-
border-bottom: none;
|
2406 |
-
box-shadow: none; }
|
2407 |
-
.wp-defender .iplockout .lockout-logs-filter .columns .column {
|
2408 |
-
padding-bottom: 0; }
|
2409 |
-
.wp-defender .iplockout .lockout-logs-filter .columns .column input {
|
2410 |
-
margin-bottom: 0; }
|
2411 |
-
.wp-defender .iplockout .lockout-logs-filter .columns .column strong {
|
2412 |
-
display: block;
|
2413 |
-
font-size: 12px;
|
2414 |
-
font-weight: bold;
|
2415 |
-
color: #888; }
|
2416 |
-
.wp-defender .iplockout .bulk-nav .bulk-action {
|
2417 |
-
padding-left: 0;
|
2418 |
-
width: 50%; }
|
2419 |
-
.wp-defender .iplockout .bulk-nav .bulk-action p {
|
2420 |
-
line-height: 42px; }
|
2421 |
-
.wp-defender .iplockout .well.schedule-box strong {
|
2422 |
-
color: #888; }
|
2423 |
-
.wp-defender .iplockout .well.schedule-box .columns {
|
2424 |
-
border-bottom: 0;
|
2425 |
-
margin-bottom: 0;
|
2426 |
-
padding-bottom: 0; }
|
2427 |
-
.wp-defender .iplockout .well.schedule-box .columns .column {
|
2428 |
-
padding-bottom: 0; }
|
2429 |
-
.wp-defender .iplockout .well.schedule-box .columns .column label {
|
2430 |
-
line-height: 43px;
|
2431 |
-
padding: 0; }
|
2432 |
-
.wp-defender .wpmudev-register div {
|
2433 |
-
padding-left: 40%; }
|
2434 |
-
.wp-defender .wpmudev-register div input {
|
2435 |
-
width: 100%;
|
2436 |
-
margin-bottom: 20px; }
|
2437 |
-
.wp-defender .wpmudev-register div input.error {
|
2438 |
-
border-bottom: solid 2px #FF6D6D;
|
2439 |
-
border-bottom-left-radius: 0;
|
2440 |
-
border-bottom-right-radius: 0;
|
2441 |
-
margin-bottom: 0; }
|
2442 |
-
.wp-defender .wpmudev-register div span.validate-error {
|
2443 |
-
color: #FF6D6D;
|
2444 |
-
font-size: 12px;
|
2445 |
-
line-height: 22px;
|
2446 |
-
margin-bottom: 20px; }
|
2447 |
-
.wp-defender .wpmudev-register div label {
|
2448 |
-
color: #AAAAAA;
|
2449 |
-
font-size: 12px;
|
2450 |
-
font-weight: 500;
|
2451 |
-
line-height: 22px;
|
2452 |
-
padding: 0;
|
2453 |
-
font-family: Roboto, sans-serif; }
|
2454 |
-
.wp-defender .wpmudev-register div label span {
|
2455 |
-
font-weight: 400; }
|
2456 |
-
.wp-defender .advanced-tools .row > .col-third {
|
2457 |
-
width: 25%; }
|
2458 |
-
.wp-defender .advanced-tools .row > .col-two-third {
|
2459 |
-
width: 75%; }
|
2460 |
-
.wp-defender .advanced-tools i.icon-warning:not(.fill-red) {
|
2461 |
-
background: url("../img/wpmud-icon-warning-yellow.svg") no-repeat;
|
2462 |
-
mask: none;
|
2463 |
-
-webkit-mask: none; }
|
2464 |
-
.wp-defender .advanced-tools .button-pre {
|
2465 |
-
height: fit-content;
|
2466 |
-
z-index: 1000;
|
2467 |
-
position: absolute;
|
2468 |
-
right: 0; }
|
2469 |
-
.wp-defender .advanced-tools .toggle .toggle-label:after {
|
2470 |
-
left: 0; }
|
2471 |
-
.wp-defender .advanced-tools .at-line {
|
2472 |
-
margin-top: 15px; }
|
2473 |
-
.wp-defender .advanced-tools .at-line strong {
|
2474 |
-
color: #333333;
|
2475 |
-
font-size: 13px;
|
2476 |
-
font-weight: 500;
|
2477 |
-
line-height: 30px; }
|
2478 |
-
.wp-defender .advanced-tools .at-line span {
|
2479 |
-
display: block;
|
2480 |
-
color: #888888;
|
2481 |
-
font-size: 13px;
|
2482 |
-
line-height: 22px;
|
2483 |
-
margin-bottom: 10px; }
|
2484 |
-
.wp-defender .advanced-tools .at-line .well span {
|
2485 |
-
color: #333;
|
2486 |
-
margin-bottom: 0; }
|
2487 |
-
.wp-defender .advanced-tools .at-line .well.well-yellow a {
|
2488 |
-
opacity: 0.5;
|
2489 |
-
color: #000000;
|
2490 |
-
font-size: 12px;
|
2491 |
-
font-weight: bold;
|
2492 |
-
line-height: 22px;
|
2493 |
-
text-decoration: none;
|
2494 |
-
text-transform: uppercase; }
|
2495 |
-
.wp-defender .advanced-tools .at-line .well.well-yellow a:hover {
|
2496 |
-
opacity: 1; }
|
2497 |
-
.wp-defender .advanced-tools .well.well-white label {
|
2498 |
-
color: #666;
|
2499 |
-
font-size: 13px;
|
2500 |
-
font-weight: 500;
|
2501 |
-
display: inline; }
|
2502 |
-
.wp-defender .toggle-row {
|
2503 |
-
display: none; }
|
2504 |
-
@media screen and (min-width: 769px) and (max-width: 979px) {
|
2505 |
-
.wp-defender .summary-box {
|
2506 |
-
background-image: none !important; }
|
2507 |
-
.wp-defender .summary-box .issues-count {
|
2508 |
-
overflow: hidden; }
|
2509 |
-
.wp-defender .summary-box .issues-count div {
|
2510 |
-
width: 100% !important;
|
2511 |
-
text-align: center; }
|
2512 |
-
.wp-defender .has-presale {
|
2513 |
-
padding-bottom: 200px !important; }
|
2514 |
-
.wp-defender .upload-input input[type="text"] {
|
2515 |
-
width: 150px; }
|
2516 |
-
.wp-defender .upload-input .button.button-light {
|
2517 |
-
border-top-right-radius: 5px;
|
2518 |
-
border-bottom-right-radius: 5px;
|
2519 |
-
border-left: 0;
|
2520 |
-
border-top-left-radius: 0;
|
2521 |
-
border-bottom-left-radius: 0; }
|
2522 |
-
.wp-defender .upload-input .button.button-grey {
|
2523 |
-
border-top-left-radius: 5px;
|
2524 |
-
border-bottom-left-radius: 5px;
|
2525 |
-
clear: both; }
|
2526 |
-
.wp-defender .def-dashboard .col-half {
|
2527 |
-
width: 100%;
|
2528 |
-
padding-right: 0; } }
|
2529 |
-
@media screen and (max-width: 768px) {
|
2530 |
-
.wp-defender .toggle-row {
|
2531 |
-
display: none; }
|
2532 |
-
.wp-defender .summary-box {
|
2533 |
-
background-image: none !important; }
|
2534 |
-
.wp-defender .summary-box ul.dev-list {
|
2535 |
-
margin: 0; }
|
2536 |
-
.wp-defender .summary-box .issues-count > div {
|
2537 |
-
width: 100%;
|
2538 |
-
text-align: center;
|
2539 |
-
margin-bottom: 20px;
|
2540 |
-
position: relative;
|
2541 |
-
top: 0;
|
2542 |
-
transform: none; }
|
2543 |
-
.wp-defender .auditing .summary-box .columns .issues-count div {
|
2544 |
-
width: 100%; }
|
2545 |
-
.wp-defender .auditing .summary-box .columns .is-5 div.dev-list-container {
|
2546 |
-
width: 100%;
|
2547 |
-
top: 0;
|
2548 |
-
transform: none;
|
2549 |
-
position: relative; }
|
2550 |
-
.wp-defender .col-half, .wp-defender .col-two-third, .wp-defender .col-third {
|
2551 |
-
width: 100% !important;
|
2552 |
-
padding: 0 !important;
|
2553 |
-
display: block !important; }
|
2554 |
-
.wp-defender .scan .summary-box .issues-count div {
|
2555 |
-
width: 100%; }
|
2556 |
-
.wp-defender .has-presale {
|
2557 |
-
padding-bottom: 150px !important; }
|
2558 |
-
.wp-defender .upload-input input[type="text"] {
|
2559 |
-
top: 2px;
|
2560 |
-
position: relative; }
|
2561 |
-
.wp-defender .upload-input .button.button-light {
|
2562 |
-
border-top-right-radius: 5px;
|
2563 |
-
border-bottom-right-radius: 5px;
|
2564 |
-
border-left: 0;
|
2565 |
-
border-top-left-radius: 0;
|
2566 |
-
border-bottom-left-radius: 0;
|
2567 |
-
margin-right: 20px; }
|
2568 |
-
.wp-defender .upload-input .button.button-grey {
|
2569 |
-
border-top-left-radius: 5px;
|
2570 |
-
border-bottom-left-radius: 5px; }
|
2571 |
-
.wp-defender .schedule-box .is-one-third {
|
2572 |
-
text-align: left; }
|
2573 |
-
.wp-defender .floated-alert {
|
2574 |
-
font-size: 13px;
|
2575 |
-
line-height: 22px;
|
2576 |
-
padding: 10px 20px;
|
2577 |
-
width: 100%;
|
2578 |
-
border-radius: 0;
|
2579 |
-
text-align: center; }
|
2580 |
-
.wp-defender .floated-alert.alert-ok::before, .wp-defender .floated-alert.alert-error::before {
|
2581 |
-
content: ""; } }
|
2582 |
|
2583 |
.wp-defender.no-close {
|
2584 |
max-width: none;
|
2585 |
-
margin: 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.wp-defender .summary-box {
|
2 |
+
background-repeat: no-repeat;
|
3 |
+
background-position: 3% 100%;
|
4 |
+
}
|
5 |
+
.wp-defender .summary-box .notification {
|
6 |
+
position: absolute;
|
7 |
+
top: 50%;
|
8 |
+
transform: translateY(-50%);
|
9 |
+
}
|
10 |
+
.wp-defender .summary-box .notification h5 {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
color: #333;
|
12 |
+
font-size: 50px;
|
13 |
+
line-height: 55px;
|
14 |
+
display: inline-block;
|
15 |
+
margin: 0;
|
16 |
+
font-weight: normal;
|
17 |
+
}
|
18 |
+
.wp-defender .summary-box .notification .notification-icon {
|
19 |
+
vertical-align: top;
|
20 |
+
display: inline-block;
|
21 |
+
margin-top: 5px;
|
22 |
+
}
|
23 |
+
.wp-defender .summary-box .notification .notification-icon i {
|
24 |
+
font-size: 16px;
|
25 |
+
}
|
26 |
+
.wp-defender .summary-box .notification .sub {
|
27 |
+
font-size: 13px;
|
28 |
+
color: #888;
|
29 |
+
letter-spacing: -0.25px;
|
30 |
+
}
|
31 |
+
.wp-defender .summary-box .summary-list {
|
32 |
+
margin: 0;
|
33 |
+
}
|
34 |
+
.wp-defender .summary-box .summary-list li {
|
35 |
+
border-bottom: solid 1px #E6E6E6;
|
36 |
+
padding: 19px 0;
|
37 |
+
font-size: 13px;
|
38 |
+
font-weight: 500;
|
39 |
+
letter-spacing: -0.25px;
|
40 |
+
}
|
41 |
+
.wp-defender .summary-box .summary-list li .list-label {
|
42 |
+
color: #333;
|
43 |
+
}
|
44 |
+
.wp-defender .summary-box .summary-list li .list-detail {
|
45 |
+
color: #888;
|
46 |
+
float: right;
|
47 |
+
}
|
48 |
+
.wp-defender .summary-box .summary-list li:last-child {
|
49 |
+
border: none;
|
50 |
+
}
|
51 |
+
.wp-defender .sui-box .sui-box-header .sui-actions-right .box-filter span {
|
52 |
color: #AAA;
|
53 |
+
font-size: 13px;
|
54 |
+
font-weight: bold;
|
55 |
+
display: inline-block;
|
56 |
+
margin-right: 10px;
|
57 |
+
}
|
58 |
+
.wp-defender .sui-box .sui-box-header .sui-actions-right .box-filter select {
|
59 |
+
min-width: 140px;
|
60 |
+
}
|
61 |
+
.wp-defender .sui-box .sui-box-header .sui-actions-right .box-filter .select-container {
|
62 |
+
display: inline-block;
|
63 |
+
vertical-align: middle;
|
64 |
+
margin-right: 10px;
|
65 |
+
min-width: 150px;
|
66 |
+
}
|
67 |
+
.wp-defender .sui-box .sui-box-body .bulk-action-bar .select-container {
|
68 |
+
display: inline-block;
|
69 |
+
vertical-align: middle;
|
70 |
+
margin-right: 10px;
|
71 |
+
}
|
72 |
+
.wp-defender .sui-box .sui-box-body .bulk-action-bar .sui-checkbox {
|
73 |
+
margin-right: 10px;
|
74 |
+
}
|
75 |
+
.wp-defender .sui-box .sui-box-body .sui-form-field strong {
|
76 |
+
color: #333;
|
77 |
+
font-size: 13px;
|
|
|
78 |
font-weight: 500;
|
79 |
+
}
|
80 |
+
.wp-defender .sui-box .sui-box-body .sui-form-field label strong {
|
81 |
+
color: #AAAAAA;
|
82 |
+
}
|
83 |
+
.wp-defender .sui-box .sui-box-body .sui-form-field span:not(.sui-tag) {
|
84 |
+
font-size: 13px;
|
85 |
+
}
|
86 |
+
.wp-defender .sui-box .sui-box-body label.sui-field-list-item-label strong {
|
87 |
+
color: #333;
|
88 |
+
font-size: 13px;
|
89 |
+
}
|
90 |
+
.wp-defender .sui-box .sui-box-body .sui-field-list-item span {
|
91 |
+
font-size: 13px;
|
92 |
+
}
|
93 |
+
.wp-defender .sui-box .sui-flushed {
|
94 |
+
margin-left: -30px;
|
95 |
+
margin-right: -30px;
|
96 |
+
}
|
97 |
+
.wp-defender .sui-box small strong {
|
98 |
+
color: #333;
|
99 |
+
font-weight: bold;
|
100 |
+
}
|
101 |
+
.wp-defender .sui-box .sui-center-box {
|
102 |
+
text-align: center;
|
103 |
+
clear: both;
|
104 |
+
padding-bottom: 30px;
|
105 |
+
display: block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
width: 100%;
|
107 |
+
}
|
108 |
+
.wp-defender .sui-box .sui-box-settings-row.sui-disabled {
|
109 |
+
padding: 0;
|
110 |
+
}
|
111 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-1 {
|
112 |
+
background-image: url("../../sui/images/plugins-smush.jpg");
|
113 |
+
}
|
114 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-1 span {
|
115 |
+
background-image: url("../../sui/images/plugins-smush-icon.png");
|
116 |
+
}
|
117 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-2 {
|
118 |
+
background-image: url("../../sui/images/plugins-defender.jpg");
|
119 |
+
}
|
120 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-2 span {
|
121 |
+
background-image: url("../../sui/images/plugins-defender-icon.png");
|
122 |
+
}
|
123 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-3 {
|
124 |
+
background-image: url("../../sui/images/plugins-smartcrawl.jpg");
|
125 |
+
}
|
126 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-3 span {
|
127 |
+
background-image: url("../../sui/images/plugins-smartcrawl-icon.png");
|
128 |
+
}
|
129 |
+
.wp-defender .icon-green {
|
130 |
+
color: #1abc9c;
|
131 |
+
}
|
132 |
+
.wp-defender .no-border {
|
133 |
+
border: none !important;
|
134 |
+
}
|
135 |
+
.wp-defender .no-border-bottom {
|
136 |
+
border-bottom: 0 !important;
|
137 |
+
}
|
138 |
+
.wp-defender i.icon-warning:before {
|
139 |
+
color: #FECF2F !important;
|
140 |
+
}
|
141 |
+
.wp-defender .icon-success:before {
|
142 |
+
color: #1ABC9C;
|
143 |
+
}
|
144 |
+
.wp-defender .line {
|
145 |
+
padding-bottom: 30px;
|
146 |
+
margin-bottom: 30px;
|
147 |
+
}
|
148 |
+
.wp-defender .line.end {
|
149 |
+
border-bottom: solid 1px #E6E6E6;
|
150 |
+
}
|
151 |
+
.wp-defender .wd-hide {
|
152 |
+
display: none !important;
|
153 |
+
}
|
154 |
+
.wp-defender .float-r {
|
155 |
+
float: right;
|
156 |
+
}
|
157 |
+
.wp-defender .float-l {
|
158 |
+
float: left;
|
159 |
+
}
|
160 |
+
.wp-defender .no-padding-left {
|
161 |
padding-left: 0;
|
162 |
+
}
|
163 |
+
.wp-defender .no-padding-bottom {
|
164 |
+
padding-bottom: 0 !important;
|
165 |
+
}
|
166 |
+
.wp-defender .no-margin-bottom {
|
167 |
+
margin-bottom: 0 !important;
|
168 |
+
}
|
169 |
+
.wp-defender .no-margin-top {
|
170 |
+
margin-top: 0 !important;
|
171 |
+
}
|
172 |
+
.wp-defender .margin-top-30 {
|
173 |
+
margin-top: 30px;
|
174 |
+
}
|
175 |
+
.wp-defender .margin-top-10 {
|
176 |
+
margin-top: 10px !important;
|
177 |
+
}
|
178 |
+
.wp-defender .margin-bottom-10 {
|
179 |
+
margin-bottom: 10px !important;
|
180 |
+
}
|
181 |
+
.wp-defender .margin-bottom-20 {
|
182 |
+
margin-bottom: 20px !important;
|
183 |
+
}
|
184 |
+
.wp-defender .margin-bottom-30 {
|
185 |
+
margin-bottom: 30px !important;
|
186 |
+
}
|
187 |
+
.wp-defender .padding-bottom-30 {
|
188 |
+
padding-bottom: 30px !important;
|
189 |
+
}
|
190 |
+
.wp-defender .clearfix {
|
191 |
+
clear: both;
|
192 |
+
display: block;
|
193 |
+
}
|
194 |
+
.wp-defender .relative {
|
195 |
+
position: relative;
|
196 |
+
}
|
197 |
+
.wp-defender .tr {
|
198 |
+
text-align: right;
|
199 |
+
}
|
200 |
+
.wp-defender .font-heavy {
|
201 |
+
font-weight: 500;
|
202 |
+
}
|
203 |
+
.wp-defender .padding-30 {
|
204 |
+
padding: 30px;
|
205 |
+
}
|
206 |
+
.wp-defender .wd-overlay {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
width: 100%;
|
208 |
height: 100%;
|
209 |
+
background-color: #fff;
|
210 |
+
opacity: 0.7;
|
211 |
position: absolute;
|
212 |
top: 0;
|
213 |
left: 0;
|
214 |
+
z-index: 100;
|
215 |
+
}
|
216 |
+
.wp-defender .wd-overlay i {
|
217 |
+
font-size: 30px;
|
218 |
+
position: absolute;
|
219 |
+
top: 50%;
|
220 |
+
left: 50%;
|
221 |
+
margin-top: -15px;
|
222 |
+
margin-left: -15px;
|
223 |
+
}
|
224 |
+
@media (min-width: 783px) {
|
225 |
+
.wp-defender .hardener .sui-summary {
|
226 |
+
background-image: url("../img/hardener-man.svg");
|
227 |
+
background-repeat: no-repeat;
|
228 |
+
background-position: 30px bottom;
|
229 |
+
}
|
230 |
+
.wp-defender .hardener .sui-summary .sui-summary-image-space {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
display: block;
|
232 |
+
}
|
233 |
+
.wp-defender .hardener .sui-summary .sui-summary-segment .sui-summary-details {
|
234 |
+
padding-left: 30px !important;
|
235 |
+
}
|
236 |
+
.wp-defender .hardener .sui-summary .sui-summary-segment .sui-list i {
|
237 |
+
font-size: 16px;
|
238 |
+
}
|
239 |
+
}
|
240 |
+
.wp-defender .hardener .sui-accordion-item-body strong {
|
241 |
+
font-size: 13px;
|
242 |
+
font-weight: bold;
|
243 |
+
color: #333;
|
244 |
+
}
|
245 |
+
.wp-defender .hardener .sui-accordion-item-body p {
|
246 |
+
font-size: 13px;
|
247 |
+
line-height: 22px;
|
248 |
+
}
|
249 |
+
.wp-defender .hardener .sui-accordion-item-body .sui-notice {
|
250 |
+
margin: 10px 0;
|
251 |
+
}
|
252 |
+
.wp-defender .hardener .sui-accordion .sui-accordion-item.accordion-ignore .sui-accordion-item-header {
|
253 |
+
box-shadow: inset 3px 0 #C0C0C0;
|
254 |
+
}
|
255 |
+
.wp-defender .hardener .sui-accordion .sui-accordion-item.accordion-ignore .sui-accordion-item-header button i {
|
256 |
+
font-size: 12px !important;
|
257 |
+
}
|
258 |
+
.wp-defender .hardener .sui-accordion .sui-accordion-item .sui-accordion-item-header .sui-accordion-item-title i {
|
259 |
+
font-size: 16px !important;
|
260 |
+
}
|
261 |
+
.wp-defender .hardener .sui-accordion .sui-accordion-item:last-child {
|
262 |
+
border-bottom: 0;
|
263 |
+
}
|
264 |
+
.wp-defender .hardener-widget .sui-accordion-item-header .sui-accordion-item-title .sui-actions-right i {
|
265 |
+
font-size: 12px !important;
|
266 |
+
margin-right: 0 !important;
|
267 |
+
}
|
268 |
+
@media (min-width: 783px) {
|
269 |
+
.wp-defender .wdf-scanning .sui-summary {
|
270 |
+
background-image: url("../img/scan-result-man.svg");
|
271 |
+
background-repeat: no-repeat;
|
272 |
+
background-size: 192px 182px;
|
273 |
+
background-position: 30px bottom;
|
274 |
+
}
|
275 |
+
.wp-defender .wdf-scanning .sui-summary .sui-summary-image-space {
|
276 |
display: block;
|
277 |
+
}
|
278 |
+
.wp-defender .wdf-scanning .sui-summary .sui-summary-segment .sui-summary-details {
|
279 |
+
padding-left: 30px !important;
|
280 |
+
}
|
281 |
+
.wp-defender .wdf-scanning .sui-summary .sui-summary-segment .sui-list i {
|
282 |
+
font-size: 16px;
|
283 |
+
}
|
284 |
+
}
|
285 |
+
.wp-defender .wdf-scanning .apply-all {
|
286 |
+
margin-right: 0;
|
287 |
+
}
|
288 |
+
.wp-defender .wdf-scanning #scan-result-table {
|
289 |
+
border: none;
|
290 |
+
}
|
291 |
+
.wp-defender .wdf-scanning .issue-content strong {
|
292 |
+
color: #333;
|
293 |
+
}
|
294 |
+
.wp-defender .wdf-scanning .issue-content table tr td i {
|
295 |
+
font-size: 16px !important;
|
296 |
+
vertical-align: middle;
|
297 |
+
}
|
298 |
+
.wp-defender .wdf-scanning .issue-content table tr td .ignore-restore {
|
299 |
+
width: 60px;
|
300 |
+
}
|
301 |
+
.wp-defender .wdf-scanning .issue-content .sui-box-body div {
|
302 |
+
margin-bottom: 30px;
|
303 |
+
}
|
304 |
+
.wp-defender .wdf-scanning .issue-content .hljs {
|
305 |
+
display: block;
|
306 |
+
overflow-x: auto;
|
307 |
+
padding: 0.5em;
|
308 |
+
color: black;
|
309 |
+
background-color: #FAFAFA;
|
310 |
+
}
|
311 |
+
.wp-defender .wdf-scanning .issue-content .hljs del {
|
312 |
+
background: #FFA5A8;
|
313 |
+
}
|
314 |
+
.wp-defender .wdf-scanning .issue-content .hljs ins {
|
315 |
+
background: #D1F1EA;
|
316 |
+
text-decoration: none;
|
317 |
+
}
|
318 |
+
.wp-defender .wdf-scanning .issue-content .hljs-comment,
|
319 |
+
.wp-defender .wdf-scanning .issue-content .hljs-quote,
|
320 |
+
.wp-defender .wdf-scanning .issue-content .hljs-variable {
|
321 |
+
color: #008000;
|
322 |
+
}
|
323 |
+
.wp-defender .wdf-scanning .issue-content .hljs-keyword,
|
324 |
+
.wp-defender .wdf-scanning .issue-content .hljs-selector-tag,
|
325 |
+
.wp-defender .wdf-scanning .issue-content .hljs-built_in,
|
326 |
+
.wp-defender .wdf-scanning .issue-content .hljs-name,
|
327 |
+
.wp-defender .wdf-scanning .issue-content .hljs-tag {
|
328 |
+
color: #00f;
|
329 |
+
}
|
330 |
+
.wp-defender .wdf-scanning .issue-content .hljs-string,
|
331 |
+
.wp-defender .wdf-scanning .issue-content .hljs-title,
|
332 |
+
.wp-defender .wdf-scanning .issue-content .hljs-section,
|
333 |
+
.wp-defender .wdf-scanning .issue-content .hljs-attribute,
|
334 |
+
.wp-defender .wdf-scanning .issue-content .hljs-literal,
|
335 |
+
.wp-defender .wdf-scanning .issue-content .hljs-template-tag,
|
336 |
+
.wp-defender .wdf-scanning .issue-content .hljs-template-variable,
|
337 |
+
.wp-defender .wdf-scanning .issue-content .hljs-type,
|
338 |
+
.wp-defender .wdf-scanning .issue-content .hljs-addition {
|
339 |
+
color: #a31515;
|
340 |
+
}
|
341 |
+
.wp-defender .wdf-scanning .issue-content .hljs-deletion,
|
342 |
+
.wp-defender .wdf-scanning .issue-content .hljs-selector-attr,
|
343 |
+
.wp-defender .wdf-scanning .issue-content .hljs-selector-pseudo,
|
344 |
+
.wp-defender .wdf-scanning .issue-content .hljs-meta {
|
345 |
+
color: #2b91af;
|
346 |
+
}
|
347 |
+
.wp-defender .wdf-scanning .issue-content .hljs-doctag {
|
348 |
+
color: #808080;
|
349 |
+
}
|
350 |
+
.wp-defender .wdf-scanning .issue-content .hljs-attr {
|
351 |
+
color: #f00;
|
352 |
+
}
|
353 |
+
.wp-defender .wdf-scanning .issue-content .hljs-symbol,
|
354 |
+
.wp-defender .wdf-scanning .issue-content .hljs-bullet,
|
355 |
+
.wp-defender .wdf-scanning .issue-content .hljs-link {
|
356 |
+
color: #00b0e8;
|
357 |
+
}
|
358 |
+
.wp-defender .wdf-scanning .issue-content .hljs-emphasis {
|
359 |
+
font-style: italic;
|
360 |
+
}
|
361 |
+
.wp-defender .wdf-scanning .issue-content .hljs-strong {
|
362 |
+
font-weight: bold;
|
363 |
+
}
|
364 |
+
.wp-defender .wdf-scanning .issue-content .hljs-line-numbers {
|
365 |
+
border-right: 1px solid #ccc;
|
366 |
+
color: #999;
|
367 |
+
-webkit-touch-callout: none;
|
368 |
+
-webkit-user-select: none;
|
369 |
+
-khtml-user-select: none;
|
370 |
+
-moz-user-select: none;
|
371 |
+
-ms-user-select: none;
|
372 |
+
user-select: none;
|
373 |
+
background-color: #F2F2F2;
|
374 |
+
width: 40px;
|
375 |
+
text-align: center;
|
376 |
+
}
|
377 |
+
.wp-defender .wdf-scanning .issue-content pre {
|
378 |
+
border: 1px solid #E6E6E6;
|
379 |
+
padding: 0;
|
380 |
+
max-height: 400px;
|
381 |
+
overflow-y: scroll;
|
382 |
+
border-radius: 5px;
|
383 |
+
}
|
384 |
+
.wp-defender .wdf-scanning .issue-content pre code {
|
385 |
+
border: none;
|
386 |
+
border-radius: 0;
|
387 |
+
}
|
388 |
+
.wp-defender .wdf-scanning .sui-box-settings-row.sui-upsell-row {
|
389 |
+
border-bottom: 1px solid #E6E6E6 !important;
|
390 |
+
}
|
391 |
+
.wp-defender .wdf-scanning .sui-box-body.sui-upsell-items .sui-box-settings-row:before {
|
392 |
+
background-color: transparent;
|
393 |
+
}
|
394 |
+
.wp-defender .wdf-scanning .sui-tag-pro {
|
395 |
+
position: absolute;
|
396 |
+
top: 10px;
|
397 |
+
}
|
398 |
+
@media (min-width: 783px) {
|
399 |
+
.wp-defender .auditing .sui-summary {
|
400 |
+
background-image: url("../img/dev-man-pre.svg");
|
401 |
+
background-repeat: no-repeat;
|
402 |
+
background-size: 18%;
|
403 |
+
background-position: 30px 40px;
|
404 |
+
}
|
405 |
+
.wp-defender .auditing .sui-summary .sui-summary-image-space {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
406 |
display: block;
|
407 |
+
}
|
408 |
+
.wp-defender .auditing .sui-summary .sui-summary-segment .sui-summary-details {
|
409 |
+
padding-left: 30px !important;
|
410 |
+
}
|
411 |
+
}
|
412 |
+
.wp-defender .auditing .sui-pagination-filter .sui-form-field .sui-checkbox {
|
413 |
+
padding-left: 0;
|
414 |
+
}
|
415 |
+
.wp-defender .auditing .sui-pagination-filter .sui-form-field .sui-checkbox span {
|
416 |
+
font-size: 13px;
|
417 |
+
}
|
418 |
+
.wp-defender .auditing .sui-date {
|
419 |
+
display: inline-block;
|
420 |
+
margin-left: 10px;
|
421 |
+
}
|
422 |
+
.wp-defender .auditing #audit-table-container {
|
423 |
+
margin-bottom: 30px;
|
424 |
+
}
|
425 |
+
.wp-defender .auditing #audit-table-container #audit-table {
|
426 |
+
border: none;
|
427 |
+
}
|
428 |
+
.wp-defender .auditing #audit-table-container #audit-table thead tr th:nth-child(1) {
|
429 |
+
width: 75%;
|
430 |
+
word-break: break-all;
|
431 |
+
}
|
432 |
+
.wp-defender .auditing #audit-table-container #audit-table thead tr th:nth-child(2) {
|
433 |
+
width: 20%;
|
434 |
+
}
|
435 |
+
.wp-defender .auditing #audit-table-container #audit-table tbody tr.sui-accordion-item-content {
|
436 |
+
font-size: 13px;
|
437 |
+
}
|
438 |
+
.wp-defender .auditing #audit-table-container #audit-table tbody tr.sui-accordion-item-content strong {
|
439 |
+
font-weight: bold;
|
440 |
+
color: #333;
|
441 |
+
}
|
442 |
+
.wp-defender .auditing #audit-table-container #audit-table tbody tr.sui-accordion-item-content a, .wp-defender .auditing #audit-table-container #audit-table tbody tr.sui-accordion-item-content p {
|
443 |
+
font-size: 13px;
|
444 |
+
}
|
445 |
+
@media (min-width: 783px) {
|
446 |
+
.wp-defender .iplockout .sui-summary {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
447 |
background-image: url("../img/defender.svg");
|
448 |
background-repeat: no-repeat;
|
449 |
+
background-size: 192px 182px;
|
450 |
+
background-position: 30px bottom;
|
451 |
+
}
|
452 |
+
.wp-defender .iplockout .sui-summary .sui-summary-image-space {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
display: block;
|
454 |
+
}
|
455 |
+
.wp-defender .iplockout .sui-summary .sui-summary-segment .sui-summary-details {
|
456 |
+
padding-left: 30px !important;
|
457 |
+
}
|
458 |
+
.wp-defender .iplockout .sui-summary .sui-summary-segment .sui-list i {
|
459 |
+
font-size: 16px;
|
460 |
+
}
|
461 |
+
}
|
462 |
+
.wp-defender .iplockout #iplockout-table {
|
463 |
+
border: none;
|
464 |
+
margin-bottom: 30px;
|
465 |
+
}
|
466 |
+
.wp-defender .iplockout #iplockout-table thead tr th:nth-child(1) {
|
467 |
+
width: 75%;
|
468 |
+
word-break: break-all;
|
469 |
+
}
|
470 |
+
.wp-defender .iplockout #iplockout-table thead tr th:nth-child(2) {
|
471 |
+
width: 20%;
|
472 |
+
}
|
473 |
+
.wp-defender .iplockout #iplockout-table tbody tr.sui-accordion-item-content {
|
474 |
+
font-size: 13px;
|
475 |
+
}
|
476 |
+
.wp-defender .iplockout #iplockout-table tbody tr.sui-accordion-item-content strong {
|
477 |
+
font-weight: bold;
|
478 |
+
color: #333;
|
479 |
+
}
|
480 |
+
.wp-defender .iplockout #iplockout-table tbody tr.sui-accordion-item-content a, .wp-defender .iplockout #iplockout-table tbody tr.sui-accordion-item-content p {
|
481 |
+
font-size: 13px;
|
482 |
+
margin-bottom: 0;
|
483 |
+
margin-top: 0;
|
484 |
+
}
|
485 |
+
.wp-defender .iplockout #iplockout-table tbody tr td .badge {
|
486 |
+
background: #FFF5D5;
|
487 |
+
-webkit-border-radius: 2px;
|
488 |
+
-moz-border-radius: 2px;
|
489 |
+
border-radius: 2px;
|
490 |
+
font-size: 10px;
|
491 |
+
color: #333;
|
492 |
+
font-family: "Roboto Condensed", sans-serif;
|
493 |
+
font-weight: bold;
|
494 |
+
padding: 5px 10px;
|
495 |
+
margin-right: 10px;
|
496 |
+
text-transform: uppercase;
|
497 |
+
}
|
498 |
+
.wp-defender .iplockout #iplockout-table tbody tr td .badge.locked {
|
499 |
+
background: #FFE5E9;
|
500 |
+
}
|
501 |
+
@media (max-width: 783px) {
|
502 |
+
.wp-defender .iplockout .sui-flushed {
|
503 |
+
margin-right: -20px;
|
504 |
+
margin-left: -20px;
|
505 |
+
}
|
506 |
+
.wp-defender .iplockout .sui-checkbox {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
display: inline-block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
508 |
margin-bottom: 0;
|
509 |
+
margin-right: 10px;
|
510 |
+
}
|
511 |
+
}
|
512 |
+
.wp-defender .iplockout .geo-ip-block .sui-notice p::before {
|
513 |
+
content: "W";
|
514 |
+
}
|
515 |
+
.wp-defender .advanced-tools div[aria-hidden=true], .wp-defender .advanced-tools div[aria-hidden="1"] {
|
516 |
+
display: none !important;
|
517 |
+
}
|
518 |
+
.wp-defender .advanced-tools .sui-upsell-items .sui-box-settings-row:nth-child(0)::before {
|
519 |
+
background-color: transparent;
|
520 |
+
}
|
521 |
+
@media (min-width: 783px) {
|
522 |
+
.wp-defender .def-dashboard .sui-summary {
|
523 |
+
background-image: url("../img/defender.svg");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
524 |
background-repeat: no-repeat;
|
525 |
+
background-size: 192px 182px;
|
526 |
+
background-position: 30px bottom;
|
527 |
+
}
|
528 |
+
.wp-defender .def-dashboard .sui-summary .sui-summary-image-space {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
529 |
display: block;
|
530 |
+
}
|
531 |
+
.wp-defender .def-dashboard .sui-summary .sui-summary-segment .sui-summary-details {
|
532 |
+
padding-left: 30px !important;
|
533 |
+
}
|
534 |
+
.wp-defender .def-dashboard .sui-summary .sui-summary-segment .sui-list i {
|
535 |
+
font-size: 16px;
|
536 |
+
}
|
537 |
+
}
|
538 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-2 {
|
539 |
+
background-image: url("../img/plugins-hummingbird.jpg");
|
540 |
+
}
|
541 |
+
.wp-defender .sui-cross-sell-modules .sui-cross-2 span {
|
542 |
+
background-image: url("../img/plugins-hummingbird-icon.png");
|
543 |
+
}
|
544 |
+
.wp-defender .activate-picker .sui-toggle {
|
545 |
+
vertical-align: initial;
|
546 |
+
}
|
547 |
+
|
548 |
+
#scanning .sui-box {
|
549 |
+
background-image: url("../img/scan-result-man.svg");
|
550 |
+
background-repeat: no-repeat;
|
551 |
+
background-position: 50% 120%;
|
552 |
+
padding-bottom: 100px;
|
553 |
+
}
|
554 |
+
|
555 |
+
#scanning.scanning-free .sui-box {
|
556 |
+
background-image: url("../img/scanning-free-man.svg");
|
557 |
+
background-repeat: no-repeat;
|
558 |
+
background-position: 30px 100%;
|
559 |
+
padding-bottom: 0;
|
560 |
+
}
|
561 |
+
#scanning.scanning-free .sui-box .sui-row, #scanning.scanning-free .sui-box .sui-progress-block {
|
562 |
+
margin-bottom: 0;
|
563 |
+
}
|
564 |
+
#scanning.scanning-free .sui-box .sui-notice-info {
|
565 |
+
border-left-color: #8D00B1;
|
566 |
+
}
|
567 |
+
#scanning.scanning-free .sui-box .sui-notice-info p::before {
|
568 |
+
color: #8D00B1;
|
569 |
+
}
|
570 |
+
#scanning.scanning-free .sui-box .sui-notice-info p a {
|
571 |
+
color: #333;
|
572 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
573 |
|
574 |
.wp-defender.no-close {
|
575 |
max-width: none;
|
576 |
+
margin: 0;
|
577 |
+
}
|
578 |
+
|
579 |
+
.wd-calendar {
|
580 |
+
background-color: white;
|
581 |
+
margin-top: 10px;
|
582 |
+
padding: 10px;
|
583 |
+
display: none;
|
584 |
+
border: solid 1px #E6E6E6;
|
585 |
+
}
|
586 |
+
.wd-calendar .ui-datepicker-header {
|
587 |
+
width: 100%;
|
588 |
+
font-family: "Roboto Condensed", sans-serif;
|
589 |
+
}
|
590 |
+
.wd-calendar .ui-datepicker-header .ui-datepicker-prev {
|
591 |
+
position: absolute;
|
592 |
+
top: 10px;
|
593 |
+
left: 10px;
|
594 |
+
cursor: pointer;
|
595 |
+
}
|
596 |
+
.wd-calendar .ui-datepicker-header .ui-datepicker-next {
|
597 |
+
position: absolute;
|
598 |
+
top: 10px;
|
599 |
+
right: 10px;
|
600 |
+
cursor: pointer;
|
601 |
+
}
|
602 |
+
.wd-calendar .ui-datepicker-header .ui-datepicker-title {
|
603 |
+
text-align: center;
|
604 |
+
}
|
605 |
+
.wd-calendar .ui-datepicker-calendar {
|
606 |
+
margin-top: 10px;
|
607 |
+
border-top: 1px solid #ddd;
|
608 |
+
padding-top: 10px;
|
609 |
+
}
|
610 |
+
.wd-calendar .ui-datepicker-calendar th, .wd-calendar .ui-datepicker-calendar td {
|
611 |
+
padding: 5px;
|
612 |
+
}
|
613 |
+
.wd-calendar .ui-datepicker-calendar th a, .wd-calendar .ui-datepicker-calendar td a {
|
614 |
+
display: block;
|
615 |
+
width: 100%;
|
616 |
+
height: 100%;
|
617 |
+
}
|
618 |
+
.wd-calendar .ui-datepicker-calendar td {
|
619 |
+
text-align: center;
|
620 |
+
}
|
621 |
+
.wd-calendar .ui-datepicker-today {
|
622 |
+
background: #FFF5D5;
|
623 |
+
}
|
624 |
+
.wd-calendar .ui-datepicker-today a {
|
625 |
+
color: #777;
|
626 |
+
}
|
627 |
+
.wd-calendar .ui-datepicker-current-day {
|
628 |
+
background: #E1F6FF;
|
629 |
+
}
|
630 |
+
.wd-calendar .ui-datepicker-current-day a {
|
631 |
+
color: #777;
|
632 |
+
}
|
633 |
+
.wd-calendar .applyBtn, .wd-calendar .cancelBtn {
|
634 |
+
display: none;
|
635 |
+
}
|
assets/img/dashboard-blacklist.svg
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="98px" height="126px" viewBox="0 0 98 126" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<!-- Generator: sketchtool 52.3 (67297) - http://www.bohemiancoding.com/sketch -->
|
4 |
+
<title>F616E01B-6F81-48F8-AED3-D8D9CB232B3D</title>
|
5 |
+
<desc>Created with sketchtool.</desc>
|
6 |
+
<defs>
|
7 |
+
<rect id="path-1" x="0" y="0" width="100" height="144"></rect>
|
8 |
+
</defs>
|
9 |
+
<g id="Dashboard" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
10 |
+
<g id="Dashboard---Free-/-Expired" transform="translate(-220.000000, -1032.000000)">
|
11 |
+
<g id="Blacklist-Monitor---Free" transform="translate(190.000000, 851.000000)">
|
12 |
+
<g id="Graphic-/-Dashboard---Blacklist" transform="translate(30.000000, 181.000000)">
|
13 |
+
<g id="graphic-defender-dashboard-blacklist">
|
14 |
+
<mask id="mask-2" fill="white">
|
15 |
+
<use xlink:href="#path-1"></use>
|
16 |
+
</mask>
|
17 |
+
<g id="mask"></g>
|
18 |
+
<g id="graphic" mask="url(#mask-2)">
|
19 |
+
<g transform="translate(-22.000000, 0.000000)">
|
20 |
+
<path d="M83.9437098,165.718709 C85.8947508,161.821775 88.4968959,154.677269 92.399735,134.976016 C96.3025741,115.274763 93.9177161,96.4390753 92.399735,91.8927777 C90.8821325,87.3461021 60.5020694,104.449525 60.5020694,104.449525 C60.5020694,104.449525 63.072795,142.336724 66.0277476,153.378165 C68.9827003,164.419605 70.0668644,165.502129 69.8499558,166.15187 C69.6330473,166.801233 68.1154448,168.965903 68.1154448,168.965903 C68.1154448,168.965903 64.6335521,174.028138 63.8912177,181.040352 L82.7278107,181.040352 C83.2759495,175.789885 84.1216278,168.564114 83.9437098,165.718709" id="Fill-1" fill="#9F5622"></path>
|
21 |
+
<path d="M76.5246814,159.397587 C76.5193817,159.203307 73.9331356,159.53517 72.9261956,159.042289 C71.9192555,158.54903 69.75547,130.396607 75.3943344,118.00428 C73.3467634,119.222119 64.0776151,128.304509 62.6497287,129.8527 C63.5964795,139.231801 64.7775521,148.707286 66.0278991,153.378316 C68.9824732,164.419756 70.0666372,165.50228 69.8497287,166.151643 C69.6331987,166.801006 68.1152177,168.966054 68.1152177,168.966054 C68.1152177,168.966054 65.9892871,172.057521 64.7056278,176.754631 L65.1114322,177.204045 L67.6742082,177.675381 C67.6742082,177.675381 69.7535773,165.935063 71.6031672,165.964923 C73.1979937,165.990247 74.4278991,165.885926 74.4869527,165.609625 C74.5460063,165.333703 74.5709905,163.041655 74.5660694,162.473935 C74.5467634,160.253325 76.5458801,160.181131 76.5246814,159.397587" id="Fill-5" fill="#98480C"></path>
|
22 |
+
<path d="M47.2355584,94.9236554 C47.2355584,94.9236554 40.2971356,113.758965 38.7791546,123.068518 C37.2611735,132.377694 35.743571,147.96581 35.743571,147.96581 L34.0090599,150.780221 C34.0090599,150.780221 23.3843281,157.491566 21.649817,165.502393 C21.278082,167.219161 20.6568833,170.599402 19.9107634,174.846721 L42.1516467,174.846721 C43.5060946,170.814471 44.6773249,166.202405 45.3507634,161.17192 C45.7175773,160.522557 48.7531609,157.924727 49.4038864,156.19284 C50.0538549,154.460575 60.285653,149.264914 70.8895647,119.820947 C81.4938549,90.3773577 47.2355584,94.9236554 47.2355584,94.9236554" id="Fill-9" fill="#9F5622"></path>
|
23 |
+
<path d="M60.5021451,23.311606 C58.16347,28.1606625 40.9610726,32.0201774 38.5273817,32.8880107 C35.0511672,33.4084839 26.0117981,32.1936685 23.7522397,41.9133262 C21.4923028,51.6329839 23.4043533,59.0961238 34.1820189,64.1296327 C36.0936909,68.9896506 41.3085804,73.3288173 42.5256151,73.8492905 C43.7422713,74.3697637 46.52347,80.0976149 48.4355205,81.4862994 C50.3479495,82.874606 50.8692114,84.7837637 50.8692114,84.7837637 L77.9865615,88.4285881 L95.1953943,82.5276238 C95.1953943,82.5276238 97.4549527,76.9736417 97.4549527,75.5849571 L97.4549527,73.1549482 C97.4549527,73.1549482 101.801073,68.6422905 102.496467,65.5183173 C103.191483,62.3939661 78.6815773,28.7223351 78.6815773,28.7223351 C78.6815773,28.7223351 62.8408202,18.4621714 60.5021451,23.311606" id="Fill-14" fill="#9F5622"></path>
|
24 |
+
<path d="M80.2461956,27.1601973 L87.1993817,34.102864 C87.1993817,34.102864 92.0667634,33.0615396 95.19547,34.102864 C100.062852,34.102864 107.711054,34.4498461 112.056795,38.0950485 C116.402536,41.7398729 119.531243,47.4673461 119.704997,56.4926616 C119.878751,65.5179771 112.404303,67.7744949 110.492252,68.6423283 C108.580202,69.5101616 100.062852,68.6423283 95.19547,67.4275128 C90.3280883,66.2123193 75.2054385,62.5674949 75.2054385,62.5674949 L80.2461956,27.1601973 Z" id="Fill-16" fill="#9F5622"></path>
|
25 |
+
<path d="M78.5727066,35.6277333 L86.8920757,34.8623315 C87.2903091,34.8252899 87.4640631,34.3403464 87.1786372,34.0598881 L85.6114448,32.5173673 L81.6363028,28.5482393 C81.2384479,29.2130994 80.5506246,30.1913018 79.7594574,30.5787274 L78.5727066,35.6277333 Z" id="Fill-18" fill="#98480C"></path>
|
26 |
+
<path d="M92.3996972,91.8926643 C91.4105489,88.929331 78.8635457,92.9200036 69.7556593,97.6208935 C62.5791293,90.7394589 47.2354069,94.9236554 47.2354069,94.9236554 C47.2354069,94.9236554 46.4533249,97.0475036 45.3574259,100.219102 C49.4048707,101.125867 60.0561009,104.199569 63.7143975,112.027078 C68.2675836,121.769414 67.8337666,125.666349 67.8337666,125.666349 C67.8337666,125.666349 78.3055647,122.541242 82.794776,118.758834 C87.9824101,114.388673 91.507836,108.666492 94.1538927,103.042962 C93.7231041,97.6685185 92.9955331,93.6770899 92.3996972,91.8926643" id="Fill-20" fill="#1F191A"></path>
|
27 |
+
<path d="M47.1882397,80.1887071 C46.6336656,80.2310405 45.8716467,80.1580911 45.8220568,81.1529244 C45.7251483,83.0908083 47.1882397,83.4907071 47.1882397,83.4907071 L47.1882397,92.7979929 C47.1882397,92.7979929 45.4048959,93.5342905 45.3556845,94.1723143 C45.3064732,94.8107161 45.6505741,95.9884899 46.9285552,96.2833113 C48.2069148,96.5777548 61.4322776,97.7559065 76.4761893,97.6576327 C91.5201009,97.5597369 94.3720883,96.479481 95.0110789,96.2833113 C95.6500694,96.0867637 95.8961262,93.4851536 95.0110789,93.3868798 C94.9618675,92.6505821 96.0437603,83.127094 96.0437603,83.127094 C96.0437603,83.127094 98.4524669,82.4399333 98.4524669,80.7220315 C98.4524669,79.0037518 97.8134763,78.2096238 96.6335394,78.7047726 C95.4536025,79.1999214 93.9783975,80.1819036 73.7233817,80.5254839 C53.4676088,80.8690643 47.1882397,80.1887071 47.1882397,80.1887071" id="Fill-22" fill="#FFBC00"></path>
|
28 |
+
<path d="M57.1854132,59.4738354 C57.1854132,59.4738354 78.8868644,64.6993563 87.5719117,66.3669872 C96.2565804,68.0346182 100.441438,68.4163741 101.125855,68.5040646 C101.81065,68.5913771 119.193994,62.8090973 115.296833,51.8028086 C111.399672,40.796142 103.716644,42.2415229 103.716644,42.2415229 C103.716644,42.2415229 98.7065489,44.5762818 99.2630158,51.4690557 C92.8049716,51.1356807 70.6689464,49.4680497 57.1854132,59.4738354" id="Fill-24" fill="#9F5622"></path>
|
29 |
+
<path d="M70.8985741,39.9032488 C71.4213502,40.7147637 72.3930852,37.0827905 70.8898675,36.6125881 C69.3862713,36.1427637 53.7325174,33.9338708 51.1432429,33.8631893 C48.554347,33.7925077 43.4030536,33.8786863 41.4925174,33.2047548 C39.5816025,32.5308232 39.3400883,33.9100583 46.4185741,34.7325345 C53.4974385,35.5553887 59.2646309,36.6715524 61.1475331,36.4659333 C63.0308139,36.2603143 69.2333375,37.3178917 70.8985741,39.9032488" id="Fill-28" fill="#98480C"></path>
|
30 |
+
<path d="M76.9679243,38.3409598 C77.2461577,39.5538854 78.2977666,36.9496295 83.0023722,36.1415164 C84.35947,35.7612723 89.4706372,35.8852485 88.896,36.0405967 C87.9602271,36.2930848 87.544959,37.0505491 91.0423722,36.3323943 C93.9958107,35.7253646 95.5145489,35.3969033 97.4565047,35.3587277 C99.3984606,35.3201741 97.768429,34.3801473 94.5231293,34.4976979 C91.2778297,34.6152485 83.3816782,34.7777783 77.4377035,35.9143527 C76.4689968,36.099561 76.857388,37.8590402 76.9679243,38.3409598" id="Fill-30" fill="#98480C"></path>
|
31 |
+
<path d="M75.9265363,52.3832667 C75.9265363,52.3832667 75.8424984,48.0637548 75.3806688,45.9251655 C74.9184606,43.7861982 74.9036972,43.1572458 75.2054006,43.4925107 C75.5067256,43.8281536 78.1527823,50.2061238 78.362877,51.3578173 C78.5725931,52.5091327 75.9685552,53.6566685 75.9265363,52.3832667" id="Fill-32" fill="#98480C"></path>
|
32 |
+
<path d="M34.1819054,64.1296705 C34.1819054,64.1296705 36.6977413,69.3260872 41.2759117,70.7518134 C42.5357224,72.4292717 44.5938927,73.6455991 46.5680252,73.6032658 C47.0722524,74.7776378 46.1061956,77.377736 49.4241767,77.6714235 C52.7421577,77.965111 52.9938927,78.440983 53.3720631,78.5596676 C53.7498549,78.6779741 50.4742713,75.616367 49.7179306,75.616367 C48.9619685,75.616367 47.2399495,74.5259057 46.8621577,72.932736 C46.4839874,71.3388104 45.3082145,72.2761914 43.5437981,71.3463699 C41.7797603,70.4161705 41.6537035,68.5047449 41.6537035,68.5047449 C41.6537035,68.5047449 41.4019685,66.9773432 41.905817,65.9288372 C39.7219685,65.9288372 34.1819054,64.1296705 34.1819054,64.1296705" id="Fill-34" fill="#98480C"></path>
|
33 |
+
<path d="M101.626826,62.9498179 L67.8625363,59.5544577 L34.1819054,64.1298595 C34.1819054,64.1298595 37.9579306,71.3809548 45.6863849,72.4294607 C52.9015268,73.4080411 66.4509274,72.6494429 77.1729464,67.3403893 C78.516795,66.6751512 80.1123785,66.7927018 81.3449338,67.6450381 C84.0629148,69.5247137 89.5779937,72.5640202 97.4548391,73.155175 C97.4548391,73.155175 101.800959,68.6425173 102.496353,65.5181661 C102.584934,65.1182673 102.259382,64.2156601 101.626826,62.9498179" id="Fill-36" fill="#98480C"></path>
|
34 |
+
<path d="M61.8004543,75.4624929 C64.3049338,74.8342964 77.0817161,69.5932786 79.6728833,69.5932786 C82.2640505,69.5932786 90.4558486,75.8994333 92.2690978,76.4614839 C94.0827256,77.0231565 90.5690347,78.5841982 87.8234196,77.8974155 C85.0778044,77.2106327 80.0873943,71.2166863 78.9555331,71.2790524 C77.8240505,71.3414185 70.2284669,77.9590256 65.1142713,78.5841982 C60.0004543,79.2097488 59.2846183,76.0929571 61.8004543,75.4624929" id="Fill-38" fill="#9F5622"></path>
|
35 |
+
<path d="M34.1819054,64.1296705 C34.1819054,64.1296705 42.6583722,67.5896646 45.3509905,68.2567926 C48.0439874,68.9239205 61.4056278,66.4780366 79.1096025,58.9177568 C95.9228517,52.136108 99.2631672,51.4689801 99.2631672,51.4689801 C99.2631672,51.4689801 98.3720631,47.3528193 86.2357855,48.0770217 C74.0987508,48.8008461 53.5000126,49.2457241 53.5000126,49.2457241 C53.5000126,49.2457241 49.7141451,44.0202033 46.8193817,41.9080723 C43.9242397,39.7955634 39.6931987,38.4613074 39.6931987,38.4613074 C39.6931987,38.4613074 18.4267003,48.9958818 34.1819054,64.1296705" id="Fill-40" fill="#9F5622"></path>
|
36 |
+
<path d="M99.2631293,51.469169 C99.2631293,51.469169 100.135306,48.8490381 100.173161,47.39005 C100.211394,45.9310619 98.2929085,42.7757167 98.2929085,42.7757167 C98.2929085,42.7757167 103.221237,43.1533149 105.974423,42.1788923 C104.794486,43.1684339 102.619344,44.2483119 102.133666,44.9354726 C101.648366,45.6230113 100.43171,49.2992077 101.187293,51.5353149 C100.271584,53.9679696 99.2631293,51.469169 99.2631293,51.469169" id="Fill-42" fill="#98480C"></path>
|
37 |
+
<path d="M51.5008959,44.2484631 C50.4038612,43.822106 47.3766057,41.3244393 43.4537035,39.7675554 C43.1542713,38.6328708 42.981653,37.3016387 42.5531356,37.1795524 C41.9228517,37.8720048 41.7778675,38.6835196 41.754776,39.1782905 C39.7923785,38.5950732 37.663041,38.3142369 35.4735142,38.6578173 C35.4735142,38.6578173 41.0563533,39.6371536 43.5941451,40.9302101 C43.8072681,41.0651476 44.0211483,41.1929036 44.2248076,41.3032726 C46.2894132,42.7758679 50.3860694,44.1305345 53.5000126,49.2456863 C56.2210221,53.7715732 63.2018423,52.0045345 63.2018423,52.0045345 C63.2018423,52.0045345 53.2709905,44.9356238 51.5008959,44.2484631" id="Fill-44" fill="#98480C"></path>
|
38 |
+
<path d="M104.496265,64.2544405 C104.496265,61.2529315 98.4523533,52.3583958 98.4523533,52.3583958 L97.9405552,51.3975804 C90.189388,50.9780268 69.8643407,50.0652143 57.185224,59.4737976 C57.185224,59.4737976 78.8870536,64.6993185 87.5717224,66.3669494 C96.2563912,68.0342024 100.441249,68.4163363 101.126044,68.5036488 C101.29147,68.5248155 102.435066,68.2016458 104.016644,67.5454792 C104.292984,66.390006 104.496265,65.2145 104.496265,64.2544405" id="Fill-46" fill="#FF5B0C"></path>
|
39 |
+
<path d="M99.2631293,51.469169 C99.2631293,51.469169 96.5905741,51.246919 95.5885552,51.4302375 C101.187293,58.3619429 96.0507634,67.6284071 96.0507634,67.6284071 C98.4072303,68.154928 101.382625,68.5952702 104.050259,68.8239458 C106.832593,67.9459071 107.613918,59.9184488 105.832467,55.3419131 C104.050637,50.7653774 99.2631293,51.469169 99.2631293,51.469169" id="Fill-48" fill="#FFAD00"></path>
|
40 |
+
<path d="M97.9404416,51.3977315 C90.1892744,50.978178 69.8642271,50.0653655 57.185489,59.4739488 C57.185489,59.4739488 68.5782965,62.216922 78.1578549,64.3626929 C78.0912303,63.0639667 78.4001262,61.963678 79.6663722,61.3638298 C90.0030284,54.6218685 95.8455521,52.4292286 98.1297161,51.7526512 L97.9404416,51.3977315 Z" id="Fill-50" fill="#FF3500"></path>
|
41 |
+
<path d="M86.2357098,48.0769839 C76.591041,48.6522637 61.6050473,49.0510286 55.8556467,49.1908798 C54.9062461,50.8513292 53.4518612,54.4447488 53.833817,60.474603 C53.9996215,63.0849065 54.1056151,65.348228 54.1737539,67.2449125 C60.275205,65.8928917 68.9788013,63.2440345 79.1095268,58.918097 C95.922776,52.1360702 99.2630915,51.4693202 99.2630915,51.4693202 C99.2630915,51.4693202 98.3723659,47.3527815 86.2357098,48.0769839" id="Fill-52" fill="#FF5B0C"></path>
|
42 |
+
<path d="M48.7120505,58.3620562 C48.7120505,66.398586 50.3753943,67.9437527 50.407571,67.9732348 C53.0063091,67.557083 56.4306625,66.7916812 60.5019558,65.6191991 C60.4940063,65.5972765 58.7337539,60.6877438 58.9559621,56.6944253 C59.1785489,52.6924134 60.7385489,49.0653539 61.854511,49.0336039 C56.9488959,49.1711872 53.4999369,49.2456485 53.4999369,49.2456485 C53.4999369,49.2456485 48.7120505,50.2461515 48.7120505,58.3620562" id="Fill-54" fill="#FFAD00"></path>
|
43 |
+
<path d="M48.7120505,83.8206048 C47.9640379,83.8206048 44.3772871,84.3180214 52.9464984,84.7160304 C61.5149527,85.1140393 73.2726814,85.1140393 78.3543218,84.7160304 C83.4359621,84.3180214 95.1335016,83.7181732 95.5885174,83.4225958 C96.0435331,83.1273964 81.6230915,84.119206 73.6118612,84.2186137 C65.6002524,84.3180214 50.8550158,83.8206048 48.7120505,83.8206048" id="Fill-62" fill="#FFA500"></path>
|
44 |
+
<path d="M48.0348265,93.4767247 C47.2868139,93.4767247 43.7000631,93.9741414 52.2692744,94.3721503 C60.8381073,94.7697813 72.5954574,94.7697813 77.6770978,94.3721503 C82.7587382,93.9741414 94.4562776,93.3742932 94.9112934,93.0787158 C95.3663091,92.7831384 80.9458675,93.7753259 72.9346372,93.8747336 C64.9230284,93.9741414 50.1777918,93.4767247 48.0348265,93.4767247" id="Fill-64" fill="#F9D400"></path>
|
45 |
+
<path d="M47.0233817,32.1484625 C47.0233817,32.1484625 55.2829401,29.3268702 59.6108896,26.6031738 C62.5344227,24.7631857 66.0969464,31.2953702 62.7104479,31.7334446 C59.3243281,32.171897 47.707041,32.8125667 46.5547382,33.3341738 C45.4020568,33.8561589 45.7416151,32.9286054 47.0233817,32.1484625" id="Fill-66" fill="#98480C"></path>
|
46 |
+
<path d="M83.8756845,31.496567 C83.9324669,31.3945134 83.9884921,31.2043914 84.0430032,30.9515253 L80.2461577,27.1600461 L79.8032555,30.2719241 C79.0927192,29.2872961 78.6816151,28.7222217 78.6816151,28.7222217 C78.6816151,28.7222217 62.840858,18.462436 60.502183,23.3114926 C60.1524038,24.0372068 59.7935394,24.4930461 58.876694,25.1677336 C59.2764416,28.0123824 58.4671041,30.8377545 59.8639495,31.8019717 C60.4654637,32.2169896 70.7616151,37.0290045 71.1469779,37.179439 C72.5551798,37.7297723 77.058776,37.3601116 77.2915836,37.179439 C77.5243912,36.9987664 83.3888707,32.369692 83.8756845,31.496567" id="Fill-68" fill="#98480C"></path>
|
47 |
+
<path d="M79.0011483,29.2863134 C78.8137666,26.4152062 76.6257539,20.3604057 75.6877098,20.2980396 C73.8752177,20.4851378 70.8744606,29.0988372 70.3119369,31.2835396 C69.9890347,32.5369086 69.3901703,33.3828193 68.7897918,33.8628491 C68.4373628,33.7437866 68.0762271,33.6209443 67.7109274,33.4958342 C70.6295394,34.4940693 73.2850599,35.3585009 73.4667634,35.3585009 C73.8710536,35.3585009 75.894776,35.3585009 76.1226625,35.181986 C76.2267634,35.1007211 77.6501073,34.2419592 79.2089716,33.2531735 C79.1082776,32.7723878 79.1449968,31.4857568 79.0011483,29.2863134" id="Fill-70" fill="#9F5622"></path>
|
48 |
+
<path d="M67.4361767,24.7297348 C64.3029274,22.6089104 59.3216025,17.1108687 57.2032429,14.1259908 C57.1786372,14.6578033 57.1775016,15.2425324 57.2161136,15.8790443 C57.4106877,19.1186783 57.4916972,19.5559967 58.1696782,20.3909461 C58.1696782,22.3004818 59.3526435,30.0546634 59.8580063,30.5600176 C60.1657666,30.8669342 64.9725804,32.5719848 68.7898675,33.8631515 C69.3902461,33.3827438 69.9891104,32.536833 70.3120126,31.283464 C70.5251356,30.4556961 71.088795,28.7041545 71.8050095,26.838464 C71.8031167,26.8433777 71.8008454,26.8482914 71.7989527,26.853583 C71.2080379,26.822589 70.1147886,26.5428866 67.4361767,24.7297348" id="Fill-72" fill="#FFBC00"></path>
|
49 |
+
<path d="M84.4036088,19.7387104 C83.1415268,21.2562848 80.107836,24.5571509 78.3082145,25.8377342 C78.6735142,27.1130259 78.9407697,28.3637491 79.0013375,29.286389 C79.1448076,31.4862104 79.1084669,32.7724634 79.2087823,33.2528711 C81.0561009,32.080389 83.0938297,30.7245884 83.352,30.2611896 C83.827836,29.4073414 84.2419685,22.4782818 84.3176782,21.316383 C84.3403912,20.968267 84.4017161,19.8955705 84.4607697,18.4702223 C84.4418423,18.9347551 84.4221577,19.3622461 84.4036088,19.7387104" id="Fill-74" fill="#FFBC00"></path>
|
50 |
+
<path d="M84.4036088,19.7387104 C84.4221577,19.3622461 84.4418423,18.9347551 84.4607697,18.4702223 C84.4615268,18.4535914 84.4622839,18.4369604 84.4626625,18.4199515 C84.4721262,18.1958116 84.4812114,17.9629783 84.4902965,17.7229634 C84.4910536,17.6995289 84.4918107,17.6753384 84.4925678,17.6515259 C84.501653,17.4183146 84.5096025,17.1790557 84.5179306,16.9341271 C84.5183091,16.9208979 84.5186877,16.9084247 84.5194448,16.8955735 C84.5270158,16.6514009 84.5345868,16.4008027 84.5414006,16.1479366 C84.5429148,16.0980437 84.544429,16.0481509 84.5455647,15.998636 C84.5527571,15.7438801 84.5588139,15.4861003 84.5648707,15.2252967 C84.5648707,15.2150914 84.5652492,15.204508 84.5652492,15.1943027 C84.5705489,14.9455943 84.5750915,14.6946182 84.5792555,14.442886 C84.5800126,14.3873235 84.5811483,14.332139 84.5819054,14.2765765 C84.5853123,14.0218205 84.5883407,13.7663086 84.590612,13.5107967 C84.5909905,13.4616598 84.5909905,13.411767 84.5913691,13.3622521 C84.5928833,13.1301747 84.5936404,12.8984753 84.5936404,12.6679098 C84.5936404,12.6263324 84.5940189,12.5843771 84.5936404,12.5424217 C84.5932618,12.2903116 84.5917476,12.0404693 84.5890978,11.7928949 C84.5883407,11.7331747 84.5875836,11.6742104 84.5868265,11.6148682 C84.5837981,11.362758 84.5796341,11.1129158 84.5735773,10.8683652 C84.5735773,10.8574039 84.5731987,10.8475765 84.5728202,10.8366152 C84.567142,10.601514 84.559571,10.3713265 84.5512429,10.1452967 C84.5493502,10.0912461 84.5474574,10.0368176 84.5451861,9.98314494 C84.5361009,9.75598125 84.525123,9.53335327 84.5130095,9.31828482 C84.5107382,9.27859732 84.5080883,9.2407997 84.505817,9.20149018 C84.4937035,9.00607649 84.4808328,8.81633244 84.4660694,8.63301399 C84.4634196,8.59937411 84.4607697,8.56497827 84.4584984,8.53171637 C84.4418423,8.33290089 84.4229148,8.14353482 84.4024732,7.96210625 C84.3979306,7.92241875 84.393388,7.8834872 84.3888454,7.84455565 C84.3668896,7.66199315 84.3437981,7.48585625 84.3176782,7.32446042 C83.7358486,3.71289792 80.8274574,0.606311607 73.4412114,0.101335417 C66.0553438,-0.40401875 62.0843659,1.06101696 60.2124416,2.75321637 C58.3405174,4.44541577 57.8162271,10.696008 57.8162271,10.696008 L57.8094132,10.713017 C57.8078991,10.7175527 57.8044921,10.7258682 57.8025994,10.7322937 C57.7991924,10.7409872 57.7946498,10.7527045 57.7901073,10.7651777 C57.7855647,10.7776509 57.780265,10.7931479 57.7742082,10.8090229 C57.7704227,10.8211182 57.7655016,10.8354812 57.7605804,10.8490884 C57.7530095,10.871767 57.7450599,10.8944455 57.7363533,10.9212818 C57.7337035,10.9295973 57.7302965,10.9401807 57.7272681,10.9488741 C57.6931987,11.0543295 57.6519369,11.1926687 57.6068896,11.3620021 C57.6031041,11.3752312 57.5996972,11.3884604 57.5962902,11.4020676 C57.5819054,11.4568741 57.567142,11.5150824 57.5523785,11.5759366 C57.5489716,11.5910557 57.5451861,11.6069307 57.5414006,11.6224277 C57.5258801,11.6881955 57.5099811,11.7558533 57.4944606,11.8284247 L57.4944606,11.8288027 C57.443735,12.061258 57.3937666,12.3288652 57.3487192,12.6267104 C57.3453123,12.649389 57.3422839,12.6716896 57.338877,12.6947461 C57.3263849,12.7801687 57.3142713,12.8689932 57.3029148,12.9593295 C57.2987508,12.9918354 57.2949653,13.0250973 57.2911798,13.0579812 C57.2802019,13.1494515 57.2696025,13.2424336 57.2601388,13.3388176 C57.257489,13.3664098 57.2552177,13.395136 57.2525678,13.4227283 C57.2325047,13.6411985 57.21547,13.8698741 57.2041136,14.1114009 C57.203735,14.1163146 57.2033565,14.1208503 57.2033565,14.126142 C59.3217161,17.110642 64.3026625,22.6086836 67.4362902,24.729886 C70.1149022,26.5426598 71.2081514,26.8227402 71.7990662,26.8537342 C71.800959,26.8484426 71.8032303,26.8431509 71.805123,26.8382372 C71.8702334,26.6685259 71.9364795,26.4980586 72.0038612,26.3272134 C72.0212744,26.2833682 72.0390662,26.2395229 72.0564795,26.1952997 C72.1113691,26.0569604 72.1673943,25.9189991 72.2234196,25.7806598 C72.2427256,25.7330348 72.2624101,25.6857878 72.2817161,25.6381628 C72.3422839,25.491508 72.4032303,25.3452312 72.4649338,25.1993324 C72.4789401,25.1656926 72.4929464,25.1320527 72.5069527,25.0987908 C72.5841767,24.9177402 72.6617792,24.7382015 72.7405174,24.5601747 C72.7461956,24.5473235 72.7522524,24.5348503 72.7575521,24.5219991 C72.8283407,24.3632491 72.8987508,24.2071449 72.9702965,24.0525527 C72.9922524,24.0045497 73.0145868,23.9576807 73.0369211,23.9100557 C73.0929464,23.7894812 73.1497287,23.6700408 73.2061325,23.5528682 C73.2311167,23.5010854 73.2561009,23.4493027 73.2810852,23.3982759 C73.3401388,23.2777015 73.399571,23.1601509 73.4590032,23.0437342 C73.4790662,23.0044247 73.4987508,22.9643592 73.5188139,22.9254277 C73.5986877,22.7715914 73.678183,22.6215348 73.7576782,22.4771479 C73.7648707,22.4635408 73.7724416,22.4514455 73.7800126,22.4382164 C73.8508013,22.3104604 73.9215899,22.1872402 73.9916215,22.0681777 C74.0166057,22.0266003 74.0408328,21.9869128 74.0650599,21.9464693 C74.119571,21.856889 74.174082,21.7699545 74.227836,21.6860437 C74.2547129,21.6444664 74.2815899,21.603267 74.3084669,21.5628235 C74.3633565,21.4804247 74.417489,21.4025616 74.4716215,21.3273443 C74.4947129,21.2948384 74.518183,21.2611985 74.5408959,21.2302045 C74.6169842,21.1277729 74.6930726,21.031011 74.7676467,20.9436985 C74.7733249,20.9368949 74.7786246,20.9319812 74.7843028,20.9255557 C74.8531987,20.8458027 74.920959,20.7736092 74.9883407,20.7078414 C75.0110536,20.6851628 75.0341451,20.666264 75.0572366,20.6450973 C75.107205,20.5997402 75.156795,20.5577848 75.2060063,20.5203652 C75.2309905,20.5018443 75.2555962,20.4840795 75.2802019,20.4674485 C75.3290347,20.4345646 75.3771104,20.4077283 75.424429,20.3842937 C75.4463849,20.3737104 75.4679621,20.3608592 75.4891609,20.3525437 C75.5569211,20.3249515 75.6235457,20.3049187 75.6878991,20.2981152 C75.7234826,20.300383 75.7617161,20.3143682 75.8007066,20.3336449 C75.8124416,20.3393146 75.8241767,20.3468741 75.8359117,20.3536777 C75.8661956,20.3718205 75.8976151,20.3944991 75.9297918,20.4220914 C75.9415268,20.4315408 75.9525047,20.4402342 75.9642397,20.4511955 C76.0070158,20.490883 76.0516845,20.5366182 76.0971104,20.5910467 C76.1024101,20.5978503 76.1088454,20.6061658 76.1145237,20.6129693 C76.1550284,20.6628622 76.1966688,20.7188027 76.2398233,20.7789009 C76.2534511,20.7985557 76.2670789,20.8185884 76.2807066,20.8393771 C76.3200757,20.8968295 76.3598233,20.9588176 76.399571,21.0242074 C76.4105489,21.0415943 76.4211483,21.0578473 76.4317476,21.0756122 C76.4828517,21.1614128 76.5350915,21.2525051 76.5880883,21.3496449 C76.5952808,21.3636301 76.6036088,21.3791271 76.6108013,21.3934902 C76.6569842,21.4789128 76.7035457,21.5692491 76.7501073,21.6626092 C76.7625994,21.6879336 76.77547,21.7128801 76.7879621,21.7385824 C76.8375521,21.8395021 76.8875205,21.9438235 76.9371104,22.0526807 C76.941653,22.0621301 76.9461956,22.0708235 76.9507382,22.0802729 C77.0075205,22.2050051 77.0650599,22.3346509 77.1225994,22.4680765 C77.1282776,22.4813057 77.1339558,22.4949128 77.1400126,22.5085199 C77.1911167,22.6287164 77.2425994,22.7526926 77.2944606,22.8793146 C77.3024101,22.8993473 77.3107382,22.9193801 77.3186877,22.9394128 C77.4341451,23.2262967 77.5488454,23.5260318 77.6605174,23.8352164 C77.6624101,23.841264 77.6646814,23.8473116 77.6669527,23.8533592 C77.7218423,24.0056836 77.7759748,24.1595199 77.8293502,24.3152461 C77.832,24.3231836 77.8346498,24.3311211 77.8372997,24.3390586 C77.9485931,24.6637402 78.0553438,24.9944693 78.1571735,25.3267104 C78.1583091,25.3312461 78.1598233,25.3357818 78.160959,25.3399396 C78.2116845,25.5058711 78.2605174,25.6721807 78.3082145,25.8377342 C80.107836,24.5571509 83.1415268,21.2562848 84.4036088,19.7387104" id="Fill-76" fill="#FF5B0C"></path>
|
51 |
+
<path d="M63.8163028,14.7428857 C63.6028013,14.2292161 69.8057035,14.1702518 70.4783849,14.1702518 C71.1506877,14.1702518 73.1876593,13.6815286 73.2501199,14.4930435 C73.3125804,15.3045583 71.7173754,18.7377161 70.8898675,18.9871804 C70.0619811,19.2370226 65.3221703,18.3631417 63.8163028,14.7428857" id="Fill-78" fill="#1F191A"></path>
|
52 |
+
<path d="M77.5172744,14.8004893 C77.7163912,15.4698851 78.5635836,18.3005488 79.1885678,18.4256589 C79.8135521,18.5503911 83.3143722,15.0446619 83.1894511,13.4269238 C82.8143091,13.1823732 80.1924795,13.9095994 79.692795,13.9579804 C79.1927319,14.0067393 77.2628896,13.9447512 77.5172744,14.8004893" id="Fill-80" fill="#1F191A"></path>
|
53 |
+
<path d="M75.2052871,3.25377024 C74.438347,1.70746964 73.9655394,0.686555952 73.4181577,0.100314881 C71.8918486,-0.00362857143 70.5188517,-0.0191255952 69.2726688,0.0303892857 C70.52453,0.056847619 73.7448454,1.20287143 73.7448454,7.47841012 C73.7448454,17.2483387 74.1987256,20.1360768 74.5787886,21.1826929 C74.9739937,20.6625976 75.3514069,20.3330024 75.6875584,20.2982286 C75.8143722,20.306544 75.9646562,20.4282524 76.1289464,20.6327375 C76.0396088,19.9550262 75.9525426,18.81505 75.9525426,16.9315946 C75.9525426,13.0622524 76.4079369,5.6784875 75.2052871,3.25377024" id="Fill-82" fill="#FFAD00"></path>
|
54 |
+
<path d="M74.0792555,23.5978473 C73.9993817,23.5672312 73.9637981,23.4768949 74.0020315,23.4001658 C74.2329464,22.9352551 75.0445552,21.4709753 76.1101703,21.4709753 C77.1553438,21.4709753 77.1159748,22.8796926 77.0701703,23.3725735 C77.0607066,23.475761 76.9918107,23.5600497 76.8930095,23.5906658 C76.6079621,23.6783562 75.9924416,23.8541152 75.5116845,23.8915348 C75.0199495,23.9293324 74.3654385,23.7070824 74.0792555,23.5978473" id="Fill-84" fill="#98480C"></path>
|
55 |
+
<path d="M76.9213249,25.1339048 C76.8403155,24.5416161 76.2459937,23.0316012 77.0704732,23.3725357 C79.6782965,24.4501458 80.328265,25.0246696 79.9822713,26.0463393 C79.7982965,26.590247 78.6970978,26.5566071 78.8844795,28.3172202 C78.962082,29.0486042 77.0155836,25.8244673 76.9213249,25.1339048" id="Fill-86" fill="#9F5622"></path>
|
56 |
+
<path d="M72.0138927,26.9603235 C72.0138927,26.9603235 73.3872681,25.381517 74.656164,25.0284872 C75.9254385,24.6750795 77.1947129,24.8621777 77.8397603,24.8829664 C78.484429,24.9037551 79.2956593,24.8716271 79.5663218,24.8149307 C79.8366057,24.7582342 80.2321893,25.4646717 79.982347,26.0463771 C79.7328833,26.6280824 75.2803912,25.7757461 74.7394448,25.8071182 C74.1984984,25.8384902 73.0128833,27.2301985 72.0138927,26.9603235" id="Fill-88" fill="#98480C"></path>
|
57 |
+
<path d="M75.1346877,26.9950217 C75.1346877,26.9950217 76.0454763,26.6072182 76.8385363,26.8978818 C77.6315962,27.1889235 77.6520379,27.625108 77.7561388,27.9365604 C77.8602397,28.2483908 77.0694511,28.3315455 76.5493249,27.9365604 C76.0291987,27.5419533 74.2159495,27.196861 75.1346877,26.9950217" id="Fill-90" fill="#98480C"></path>
|
58 |
+
</g>
|
59 |
+
</g>
|
60 |
+
</g>
|
61 |
+
</g>
|
62 |
+
</g>
|
63 |
+
</g>
|
64 |
+
</g>
|
65 |
+
</svg>
|
assets/img/defender-activator.svg
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="191px" height="110px" viewBox="0 0 191 110" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<!-- Generator: sketchtool 52.3 (67297) - http://www.bohemiancoding.com/sketch -->
|
4 |
+
<title>1B54E1B1-40CA-455E-A489-A42915DC8A10</title>
|
5 |
+
<desc>Created with sketchtool.</desc>
|
6 |
+
<defs>
|
7 |
+
<rect id="path-1" x="0" y="0" width="192" height="110"></rect>
|
8 |
+
</defs>
|
9 |
+
<g id="Onboarding" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
10 |
+
<g id="Onboarding---1" transform="translate(-585.000000, -904.000000)">
|
11 |
+
<g id="Modal" transform="translate(380.000000, 60.000000)">
|
12 |
+
<g id="Graphic-/-Modal-/-Requirements" transform="translate(204.000000, 844.000000)">
|
13 |
+
<g id="graphic-defender-modal-requirements">
|
14 |
+
<mask id="mask-2" fill="white">
|
15 |
+
<use xlink:href="#path-1"></use>
|
16 |
+
</mask>
|
17 |
+
<g id="Mask"></g>
|
18 |
+
<g id="graphic" mask="url(#mask-2)">
|
19 |
+
<path d="M30.1301476,68.2414731 C30.2120676,68.2539887 30.2934187,68.267642 30.3747698,68.2815798 C30.2934187,68.267642 30.2120676,68.2539887 30.1301476,68.2414731" id="Fill-23" fill="#FF5B0C"></path>
|
20 |
+
<path d="M30.6640498,68.334101 C30.7419876,68.3491765 30.8202098,68.3636832 30.8978631,68.3798965 C30.8202098,68.3636832 30.7419876,68.3491765 30.6640498,68.334101" id="Fill-25" fill="#FF5B0C"></path>
|
21 |
+
<path d="M40.0370916,90.969452 C39.9858916,91.0200831 39.9338382,91.0698609 39.8815004,91.1193543 C39.9341227,91.0698609 39.9858916,91.0200831 40.0370916,90.969452" id="Fill-27" fill="#FF5B0C"></path>
|
22 |
+
<path d="M40.3723662,90.6201037 C40.3220196,90.6752859 40.2693973,90.7290459 40.217344,90.7833748 C40.2693973,90.7290459 40.3220196,90.6752859 40.3723662,90.6201037" id="Fill-29" fill="#FF5B0C"></path>
|
23 |
+
<path d="M31.3690453,68.4879396 C31.4370276,68.5050062 31.5044409,68.5243485 31.5721387,68.5422685 C31.5044409,68.5243485 31.4370276,68.5050062 31.3690453,68.4879396" id="Fill-31" fill="#FF5B0C"></path>
|
24 |
+
<path d="M29.604608,68.1691539 C29.6791324,68.1779717 29.7528036,68.1887806 29.8267591,68.1987361 C29.7528036,68.1887806 29.678848,68.1779717 29.604608,68.1691539" id="Fill-33" fill="#FF5B0C"></path>
|
25 |
+
<path d="M40.5943182,75.0499346 C39.4187093,73.8023637 38.3500516,72.4667793 37.1337671,71.3855512 C37.1960604,71.3291541 37.257216,71.2664908 37.3158116,71.1918644 C37.5024071,70.9543132 37.303296,70.4290801 36.9659449,70.6600801 C36.7901582,70.7805647 36.6052693,70.8158841 36.4178204,70.7962306 C35.7849316,70.3168557 35.104256,69.9146708 34.3445049,69.6324007 C33.9448604,69.4258964 33.529856,69.2461665 33.1179804,69.070709 C33.1057493,69.065582 33.0938027,69.0615943 33.0815716,69.0564673 L33.0821404,69.0564673 C32.8816071,69.3219322 32.6842027,69.5728705 32.5533582,69.79618 C32.0043804,70.7344217 31.6144071,71.8407152 31.2318293,72.8607041 C30.6455893,74.4235857 30.5309582,76.0870136 30.7030471,77.7296486 C30.8421404,79.0620999 30.8549404,80.3609408 31.2543004,81.6535154 C31.6670293,82.9879605 32.0581404,84.4391874 32.774656,85.6474513 C33.5637049,86.9790481 34.8326116,87.8284217 36.1362204,88.5983268 C37.3581938,89.3200949 38.5810204,90.079746 39.9466382,90.5021541 C40.0857316,90.545164 40.2285227,90.5833317 40.3724516,90.6197904 C41.9073138,88.9253157 42.7489849,86.7286794 43.124736,84.4354846 C43.6782649,81.0596375 42.981376,77.5838138 40.5943182,75.0499346" id="Fill-35" fill="#FF5B0C"></path>
|
26 |
+
<path d="M31.8795947,68.628391 C31.9569636,68.6511466 32.0343324,68.6756088 32.1114169,68.700071 C32.0343324,68.6756088 31.9569636,68.6511466 31.8795947,68.628391" id="Fill-37" fill="#FF5B0C"></path>
|
27 |
+
<path d="M32.3984782,68.7961295 C32.4727182,68.8220139 32.5466738,68.847045 32.6206293,68.8743517 C32.5466738,68.847045 32.4727182,68.8220139 32.3984782,68.7961295" id="Fill-39" fill="#FF5B0C"></path>
|
28 |
+
<path d="M40.2173724,90.7836551 C40.1579236,90.8462329 40.0984747,90.9082418 40.0370347,90.9691129 C40.0981902,90.9082418 40.1579236,90.8462329 40.2173724,90.7836551" id="Fill-41" fill="#FFBC00"></path>
|
29 |
+
<polygon id="Fill-43" fill="#FFBC00" points="40.3723662 90.6198189 40.3723662 90.6198189 40.3723662 90.6201033"></polygon>
|
30 |
+
<path d="M29.826816,68.1986342 C29.9280782,68.2122875 30.0293404,68.2262253 30.1300338,68.2413008 C30.0293404,68.2262253 29.9280782,68.2122875 29.826816,68.1986342" id="Fill-45" fill="#FFBC00"></path>
|
31 |
+
<path d="M32.1115591,68.7001691 C32.2074169,68.7306046 32.3029902,68.7630313 32.3985636,68.7960268 C32.3029902,68.7630313 32.2074169,68.7306046 32.1115591,68.7001691" id="Fill-47" fill="#FFBC00"></path>
|
32 |
+
<path d="M30.3748836,68.2815207 C30.4715947,68.2980185 30.5680213,68.315654 30.6641636,68.3341429 C30.5680213,68.315654 30.4715947,68.2980185 30.3748836,68.2815207" id="Fill-49" fill="#FFBC00"></path>
|
33 |
+
<path d="M30.89792,68.3800162 C31.0555022,68.4130117 31.2125156,68.4485673 31.36896,68.4878206 C31.2125156,68.4485673 31.0555022,68.4130117 30.89792,68.3800162" id="Fill-51" fill="#FFBC00"></path>
|
34 |
+
<polygon id="Fill-53" fill="#FFBC00" points="29.6043236 68.1691539 29.6043236 68.1691539 29.604608 68.1691539"></polygon>
|
35 |
+
<path d="M32.6207147,68.8745726 C32.7748836,68.931746 32.9284836,68.9917637 33.0815147,69.0563326 C32.9284836,68.9917637 32.7748836,68.931746 32.6207147,68.8745726" id="Fill-55" fill="#FFBC00"></path>
|
36 |
+
<path d="M31.5721102,68.5424567 C31.6747947,68.5700478 31.7774791,68.5979234 31.8795947,68.6283589 C31.7774791,68.5979234 31.6747947,68.5700478 31.5721102,68.5424567" id="Fill-57" fill="#FFBC00"></path>
|
37 |
+
<path d="M13.5546027,79.9299592 C13.8103182,79.9587274 14.1075627,79.9792354 14.2628693,80.067249 C16.3162738,81.2313636 21.4027093,81.482302 21.9300693,81.4968285 C22.3652693,81.5087915 22.8058738,81.4290381 23.250176,81.4381528 C24.0907093,81.4552428 24.9329493,81.4646423 25.7749049,81.4589456 C25.7569849,81.3250739 25.7379271,81.1912021 25.7234204,81.0581848 C25.4935893,78.9415868 25.6901404,76.9919012 26.3051093,75.1447557 C26.4791893,73.1831072 27.2093582,71.4743908 28.2987804,69.8044117 C28.6873316,69.2082551 29.1285049,68.6807434 29.6043804,68.1691824 C29.2232249,68.1241787 28.8383716,68.0914228 28.4492516,68.0697755 C26.8299093,67.9806226 24.9724871,67.9586904 23.4583893,68.6203587 C22.7859627,68.9143069 22.2679893,69.4053599 21.634816,69.7668137 C20.6344249,70.3384746 19.5376071,70.8158556 18.4965404,71.3123205 C15.6984604,72.6470504 12.1696427,73.3155547 10.8867982,76.4800554 C9.96491378,78.7541663 9.51150933,81.9428778 11.4559716,83.7883143 C12.4711538,84.7516213 13.773056,85.183429 15.0516338,85.6665067 C15.0979982,85.6838815 15.142656,85.7060985 15.1890204,85.7246127 C14.0321849,84.244048 13.588736,82.2462255 12.9908338,80.5061774 C12.8022471,79.9587274 13.1515449,79.8852403 13.5546027,79.9299592" id="Fill-59" fill="#FF5B0C"></path>
|
38 |
+
<path d="M26.3051662,75.1448127 C25.6901973,76.9916734 25.4933618,78.9416438 25.7234773,81.0582418 C25.737984,81.1912591 25.7570418,81.3251308 25.7749618,81.4590026 C27.5598507,81.4470396 29.342464,81.3558928 31.1043129,81.0850162 C30.850304,79.979862 30.8218596,78.8670174 30.7029618,77.7296771 C30.5308729,76.087042 30.6457884,74.4236142 31.231744,72.8607326 C31.6143218,71.8407436 32.0042951,70.7344502 32.5535573,69.7962085 C32.6844018,69.572899 32.8815218,69.3219607 33.0820551,69.0564958 L33.0814862,69.0564958 C32.9284551,68.9918386 32.7748551,68.9320236 32.6206862,68.8744872 C32.5467307,68.8471432 32.4727751,68.8220778 32.3985351,68.796158 C32.3029618,68.7631173 32.2073884,68.7306462 32.1115307,68.7001691 C32.0344462,68.6756734 31.9570773,68.6511777 31.8797084,68.628391 C31.7773084,68.5981986 31.6749084,68.5700001 31.572224,68.5423713 C31.5042418,68.5244268 31.4371129,68.5047732 31.3691307,68.4879681 C31.2126862,68.448661 31.0553884,68.4130568 30.8978062,68.3800162 C30.8201529,68.3634958 30.7422151,68.3492541 30.6639929,68.334158 C30.5678507,68.3156438 30.471424,68.2979841 30.3749973,68.2814637 C30.2933618,68.2675069 30.2120107,68.2541197 30.1300907,68.2415871 C30.0293973,68.226206 29.9281351,68.2122492 29.8268729,68.1985772 C29.7526329,68.1888928 29.6789618,68.1780692 29.6047218,68.1692393 L29.6044373,68.1692393 C29.1285618,68.6808004 28.6873884,69.2083121 28.2988373,69.8044687 C27.2094151,71.4744477 26.4789618,73.1828793 26.3051662,75.1448127" id="Fill-61" fill="#FFBC00"></path>
|
39 |
+
<path d="M26.6551467,91.6222905 C28.6994489,92.3531734 30.9422933,92.6721869 33.1040711,92.6511092 C33.1623822,92.6505396 33.2189867,92.6482609 33.2764444,92.6471216 C30.8487111,90.7820316 28.3185778,88.7135704 27.0385778,85.9090994 C26.4085333,84.5290809 25.9793067,82.9747443 25.7747911,81.4588602 C24.9328356,81.4645568 24.0905956,81.4554422 23.2500622,81.4380673 C21.408,81.4001845 19.50336,81.2258663 17.6701156,80.8661216 C16.7041422,80.6764224 15.74784,80.4357381 14.8094578,80.1375174 C14.4385422,80.0198811 12.5751467,79.2975433 12.9904356,80.506092 C13.5886222,82.2461401 14.0320711,84.2436777 15.1889067,85.7245273 C16.8514844,86.3856259 18.3183644,87.5534434 19.8546489,88.4609231 C20.1732267,88.5845408 20.4827022,88.7061647 20.7725511,88.8292128 C22.7730489,89.6797258 24.6008889,90.8879896 26.6551467,91.6222905" id="Fill-63" fill="#E43500"></path>
|
40 |
+
<path d="M27.0384924,85.9092133 C28.3184924,88.7136843 30.8489102,90.7818607 33.2766436,92.6469507 C35.3977458,92.5996683 37.1032747,92.0636116 38.8571591,90.8129075 C39.0653724,90.6642244 39.285248,90.5095598 39.4963058,90.3477744 C38.3096036,89.9097004 37.2221724,89.2394871 36.1361636,88.5983268 C34.8325547,87.8284217 33.7744213,86.5671788 32.9848036,85.2358668 C32.2685724,84.027603 31.6669724,82.9879605 31.2542436,81.6535154 C31.1959324,81.4643859 31.1475769,81.2749716 31.1043413,81.0852725 C29.3424924,81.3558644 27.5598791,81.4470111 25.7749902,81.4589741 C25.9792213,82.9745734 26.408448,84.52891 27.0384924,85.9092133" id="Fill-65" fill="#FFAD00"></path>
|
41 |
+
<path d="M98.6445938,47.3982947 C98.6445938,47.3982947 84.4232249,50.4106942 79.2267093,52.8756436 C74.0304782,55.3405931 71.8425316,52.6019186 67.4669227,56.9835129 C63.0910293,61.3653921 60.0827449,66.569016 58.715136,83.2745031 C58.715136,89.2995869 55.433216,91.7645364 62.2704071,99.980275 C66.6463004,108.470023 62.5440427,122.437121 62.5440427,122.437121 C62.5440427,122.437121 94.542336,128.46249 95.6363093,127.914755 C96.7302827,127.366735 116.421518,124.628345 117.789127,118.602977 C119.156452,112.578178 118.882816,103.266969 124.352967,99.980275 C129.822549,96.6938656 145.685163,85.1917176 145.685163,69.3076905 C145.685163,53.4233785 122.164736,54.5188483 118.882816,53.6971036 C115.600896,52.8756436 110.131314,47.3982947 98.6445938,47.3982947" id="Fill-67" fill="#9F5622"></path>
|
42 |
+
<path d="M143.060167,52.1158502 C142.152789,50.747225 141.0207,49.6369439 139.733874,48.6309118 C138.302834,47.5123705 136.755456,46.2018514 134.931314,45.8492275 C133.868629,45.6435777 132.969785,45.2428169 131.870407,45.2348416 C130.714994,45.2262965 129.558443,45.4074507 128.433749,45.6589587 C126.358443,46.1229525 124.258674,46.6350832 122.418603,47.732262 C120.442283,48.9106184 118.933305,50.3917528 117.151829,51.8107935 C116.470585,52.3534014 115.967118,52.9407281 115.465927,53.6468305 C114.936576,54.3930943 114.190478,55.1658477 113.99734,56.0821572 C113.929643,56.4045888 114.369678,56.5817552 114.469803,56.2419488 C114.530958,56.0351597 114.633358,55.8334975 114.758798,55.6366776 C114.694514,55.7605801 114.628238,55.8839131 114.571349,56.0086702 C112.946887,59.5639624 112.841643,63.4827022 114.303687,67.0792953 C115.603314,70.276267 117.784149,72.902717 120.897394,74.42914 C124.361074,76.1270327 128.266496,76.9174457 132.108487,76.4169932 C135.706994,75.9487269 139.420416,74.2855838 141.805483,71.4811128 C144.078478,68.8085197 145.333163,65.0236517 145.554745,61.5472583 C145.764949,58.2446134 144.888576,54.8736085 143.060167,52.1158502" id="Fill-69" fill="#9F5622"></path>
|
43 |
+
<path d="M168.091534,51.6891411 C167.660885,49.6309339 166.311481,47.904273 164.87589,46.4279808 C163.286699,44.7941756 161.491854,43.1729031 159.584654,41.9247625 C157.742876,40.7196318 155.494059,39.3886047 153.348779,38.8274826 C151.315285,38.2951287 148.736796,38.5506244 146.764459,39.2424851 C145.430983,39.7098969 144.078165,40.099834 142.741845,40.5561374 C141.703623,40.9104703 141.012708,41.5721386 140.113294,42.1682952 C139.103516,42.837654 138.235108,43.354342 137.374948,44.221945 C136.544085,45.0602101 135.500743,45.553257 134.585116,46.2807218 C132.470556,47.9609549 130.840121,50.2111398 129.66053,52.6228254 C129.60165,52.7430252 129.538503,52.8646491 129.473081,52.9868427 C129.502663,52.8304691 129.531676,52.6752348 129.561828,52.517437 C129.705756,51.7560769 128.689152,51.3293963 128.442539,52.1383236 C127.075214,56.6281546 126.382876,61.5785615 128.321365,66.0259524 C128.757703,67.0271423 129.377792,67.9286404 129.82693,68.920146 C130.375623,70.1329672 130.62309,71.4554493 131.024156,72.7189709 C131.294094,73.569199 131.638556,74.3570486 132.142023,75.0964764 C132.656014,75.8510005 133.176263,76.9151386 133.949668,77.441511 C134.645988,77.915474 135.473152,77.8089462 136.269312,77.7722027 C137.586859,77.7115332 138.904121,77.8952508 140.195783,78.1433408 C142.294414,78.5460954 144.163783,79.9793778 146.361685,79.6079549 C148.734805,79.2069092 151.036245,78.6714222 153.28933,77.8465443 C155.409579,77.0703729 157.666361,76.6741694 159.666005,75.5741423 C160.398165,75.1713877 160.810894,74.6302039 161.271694,73.9511608 C161.875285,73.0619105 162.518414,72.3173556 162.921472,71.305342 C163.35525,70.2158538 163.523356,69.154564 163.783623,68.0240597 C164.029952,66.9547946 164.682752,65.9279697 165.082112,64.8960178 C165.48773,63.8489697 166.116921,62.9335147 166.545863,61.9015628 C167.019748,60.7630831 167.30533,59.4961435 167.647232,58.3109512 C168.268743,56.1578945 168.556032,53.9079943 168.091534,51.6891411" id="Fill-71" fill="#9F5622"></path>
|
44 |
+
<path d="M82.7068302,57.6144762 C82.4667591,57.4931371 82.2261191,57.3709435 81.9840569,57.2501741 C81.3082169,56.2375909 80.4326969,55.3417894 79.5000036,54.5858412 C77.6425813,53.0807808 75.8409102,51.788491 73.653248,51.0692863 C71.5298702,50.0142629 69.1103858,49.6778745 66.7938702,50.0715144 C65.6623502,50.0971494 64.552448,50.2711827 63.5199147,50.6952999 C62.3215502,51.1880619 61.0600391,51.4540964 59.880448,51.9964195 C58.5242169,52.6202049 57.2388124,53.448216 56.1058702,54.4212074 C56.0586524,54.4619386 56.0125724,54.5046636 55.9656391,54.5456797 C55.807488,54.6664491 55.6553102,54.7849398 55.5108124,54.9002974 C53.8166613,56.2481297 52.5497458,57.9500101 51.6033991,59.8931445 C51.4495147,60.2090249 51.3124124,60.528893 51.1832747,60.8513245 C50.9955413,61.2443948 50.8220302,61.6405983 50.6675769,62.0390804 C49.9405369,63.9149941 49.340928,66.3030385 49.3761991,68.5295822 C49.1415324,70.437967 49.2490524,72.4423406 49.6680391,74.2547364 C50.9056569,79.6081827 55.8501547,82.8666784 61.1550436,83.2375317 C66.8348302,83.6343048 71.2977636,79.980745 75.2273636,76.3585169 C77.3899947,74.3652518 79.3176747,72.2811248 80.754688,69.6899941 C82.1385102,67.1948523 83.3374436,64.0292123 83.2876658,61.1390064 C83.2691769,60.0483788 82.9668124,59.0315231 82.4849636,58.0981236 C82.8715236,58.2715872 83.1474347,58.4527413 83.1522702,58.6205083 C83.1599502,58.8660348 83.4822258,58.8782826 83.5061191,58.6330409 C83.5590258,58.0872999 83.153408,57.8403492 82.7068302,57.6144762" id="Fill-73" fill="#9F5622"></path>
|
45 |
+
<path d="M64.3412764,70.2864925 C64.233472,68.7139265 62.9620053,67.8560079 61.9596231,66.7787674 C60.6409387,65.3620054 59.100672,64.0352508 57.4946987,62.9520289 C56.7602631,62.4567033 55.9532942,62.0895529 55.0934187,61.8616861 C54.7028764,61.7594308 50.9519076,61.131088 51.7366898,62.5216454 C47.8389476,61.5799857 43.630592,61.9810313 39.9803164,63.6421805 C35.3726009,65.7394099 32.2792676,69.5590276 30.3052231,74.1249092 C28.8713387,77.4403716 30.3285476,81.5878328 32.1470009,84.4524037 C32.8655076,85.5840473 33.8348942,86.453929 34.8321564,87.3229561 C35.3814187,87.8017613 35.7984142,88.4694111 36.4051342,88.8770079 C37.1956053,89.4073679 38.2605653,89.7488834 39.153152,90.0576429 C40.8416142,90.6415517 42.7886364,90.9144222 44.5513387,91.1796022 C46.1524764,91.4200017 47.5488142,90.4344777 49.0148409,89.9457033 C50.7334542,89.3729031 52.2876587,88.58249 53.955072,87.8906293 C55.6597476,87.1836725 57.3735253,87.1241423 58.6942009,85.6857329 C60.925952,83.255818 61.7818453,79.6911263 63.0447787,76.7368328 C63.8682453,74.8113581 64.4866276,72.4025208 64.3412764,70.2864925" id="Fill-75" fill="#9F5622"></path>
|
46 |
+
<path d="M23.2451698,72.6541713 C23.0540231,71.9939271 22.3323876,71.7523883 21.8010453,71.3912194 C20.6322631,70.5973883 19.5297564,69.6468988 18.5046187,68.6784647 C17.2234809,67.4684919 15.9420587,65.6512539 14.1088142,65.320847 C12.0878364,64.9565449 9.66522311,65.7871195 7.89341867,66.7262157 C7.28726756,67.0475079 6.47546311,67.3414561 6.15802311,67.9971429 C5.84968533,68.6343155 5.90742756,69.5255597 5.89604978,70.2034635 C5.85764978,72.4983673 5.75553422,74.6810467 5.99389867,76.9790837 C6.12872533,78.282482 5.74586311,81.3125412 7.69999644,81.2481688 C9.53580089,81.1872144 11.1778987,80.7480011 11.718912,78.8176842 C11.7900231,78.5641824 11.836672,78.3072625 11.8656853,78.0483488 C13.741312,78.8114179 15.8100764,77.3929469 17.3241742,76.4680924 C18.3086364,75.8662391 19.314432,75.289736 20.3139698,74.7155116 C21.2264676,74.1914179 22.2928498,73.9589937 23.082752,73.2338075 C23.2278187,73.1002206 23.2997831,72.8435856 23.2451698,72.6541713" id="Fill-77" fill="#FF5B0C"></path>
|
47 |
+
<path d="M7.55655111,72.3220554 C7.77244444,72.2673673 7.74030222,71.8495165 7.50336,71.8745819 C7.25048889,71.8614795 6.99448889,71.8500862 6.73763556,71.8398322 C6.57521778,71.7828655 6.40256,71.7401404 6.21710222,71.7170689 C6.10787556,71.7031121 6.03136,71.7489703 5.98072889,71.8181848 C4.94364444,71.80081 3.89717333,71.8415412 2.89507556,72.0400702 C1.82215111,72.252556 1.88302222,73.0170492 1.67480889,74.0099789 C1.49304889,74.8781515 0.909368889,76.3615646 1.34001778,77.2203377 C1.71178667,77.9626139 2.70307556,78.9882995 3.51175111,79.1725868 C4.75363556,79.4548568 6.44608,79.3631404 7.69877333,79.1680295 C8.82858667,78.9920023 8.93155556,78.525445 8.98503111,77.4094672 C9.05784889,75.8893106 8.83256889,73.460535 7.55655111,72.3220554" id="Fill-79" fill="#FF5B0C"></path>
|
48 |
+
<path d="M10.7904284,78.1463885 C9.68194844,77.919661 8.545024,77.8678213 7.41805511,77.9521321 C6.84660622,77.9948571 6.27800178,78.0717621 5.71337956,78.1720236 C5.18431289,78.2660186 4.64017067,78.3776734 4.12760178,78.542592 C3.69695289,78.6810211 3.61076622,78.9587338 3.59369956,79.4107646 C3.563264,80.234788 3.40767289,81.4134292 3.67049956,82.2038423 C3.860224,82.7749335 4.68084622,83.2585809 5.23409067,83.4012825 C6.24756622,83.66219 7.52955733,83.2038928 8.49809067,82.9683355 C9.19441067,82.7988596 9.87451733,82.5755501 10.5696996,82.4015168 C11.0797084,82.2739113 11.6804551,82.2309015 12.0843662,81.851788 C13.2741973,80.7349557 12.1913173,78.4332159 10.7904284,78.1463885" id="Fill-81" fill="#B2270D"></path>
|
49 |
+
<path d="M13.8648747,82.2266859 C13.6623502,81.5821076 13.4353636,80.2459535 12.7185636,79.9913123 C12.2967324,79.8417747 11.7500302,80.1251841 11.3464036,80.2257303 C10.5869369,80.4148598 9.83571911,80.6333271 9.07710578,80.8264443 C7.99849244,81.100739 6.31515022,81.2477131 5.41431467,81.9800201 C5.05449244,82.2725441 4.83120356,82.7923654 5.33893689,83.0672297 C5.374208,83.4884985 5.71155911,84.6566009 5.77527467,84.79503 C5.904128,85.075591 6.05147022,85.3094393 6.32595911,85.4643888 C7.24443022,85.9833555 8.65470578,85.7452346 9.63603911,85.6119326 C10.8318436,85.4487229 12.846848,85.3709634 13.8526436,84.5671631 C14.5580658,84.0031927 14.0841813,82.9248129 13.8648747,82.2266859" id="Fill-83" fill="#B2270D"></path>
|
50 |
+
<path d="M12.7396124,83.3087401 C11.3535147,83.1953763 9.96770133,83.5542666 8.64361244,83.921417 C7.91714133,84.1227943 7.42875022,84.2202074 7.50725689,85.0544848 C7.46032356,85.0727142 7.42419911,85.1148695 7.427328,85.1809509 C7.52318578,87.0796513 8.25136356,89.1199139 10.3639324,89.2039398 C11.5534791,89.2512222 12.9515236,88.9097068 14.0955591,88.6317092 C15.0481636,88.4007092 15.4421191,88.2953208 15.7066524,87.2759016 C16.264448,85.1265477 14.8095147,83.478216 12.7396124,83.3087401" id="Fill-85" fill="#B2270D"></path>
|
51 |
+
<path d="M103.134606,23.9760055 C99.8404551,24.120701 96.3141973,24.3938564 93.517824,26.3472448 C92.3112107,27.190352 91.3267484,28.1405567 90.3835307,29.2665037 C89.3023573,30.5570845 89.0733796,31.7869957 88.7906418,33.4438724 C88.4498773,35.44141 88.4384996,37.4215727 88.4325262,39.4390487 C88.4276907,41.1580191 88.6805618,42.3181461 89.7150862,43.6844926 C90.0089173,44.0727207 90.0225707,43.8533989 90.0461796,44.2530203 C90.0700729,44.6546356 89.5478329,45.4723927 89.406464,45.8611905 C89.0366862,46.8771917 88.6239573,47.888066 88.2917262,48.9168847 C87.9873707,49.8602534 87.7825707,50.8389414 87.7060551,51.8281683 C87.6827307,52.1309464 87.614464,54.3939488 87.724544,54.3705925 C87.3778062,54.4437947 87.4255929,55.0316911 87.7842773,55.0413755 C87.8337707,55.0425148 87.8829796,55.043939 87.9324729,55.0453631 C88.0431218,55.0482115 88.1742507,54.9835543 88.2220373,54.8781658 C88.4382151,54.4002152 88.5502862,53.8496319 88.6327751,53.2896492 C89.537024,53.216447 90.4839396,53.1734371 91.2434062,52.6373804 C92.0682951,52.0551806 92.324864,51.108394 92.8391396,50.3316529 C93.3704818,51.2602102 93.735424,52.294156 94.8077796,52.8037232 C96.5494329,53.6317343 98.7669618,53.666484 100.626375,54.0663903 C101.997113,54.3609081 103.768917,54.7049871 105.17066,54.4514852 C106.597717,54.1937109 108.232704,53.3033212 109.477433,52.5806985 C110.759708,51.8361436 106.603122,23.8236196 103.134606,23.9760055" id="Fill-87" fill="#9F5622"></path>
|
52 |
+
<path d="M152.066532,52.6017762 C152.066532,52.6017762 147.234958,51.871463 143.314745,53.5146677 C139.394816,55.1578724 134.836594,59.6308983 133.651598,60.2700647 C132.466318,60.9089464 128.546389,60.8177996 130.734336,52.145188 C128.911047,52.5106295 126.358443,64.4693656 124.444132,69.4901264 C122.529536,74.5108872 118.700629,80.9925592 116.148309,82.2703224 C114.598087,87.6562398 110.222478,93.4987454 108.67254,94.7767935 C107.122887,96.0551264 107.031865,102.262789 107.031865,102.262789 L119.732025,105.071532 C119.732025,105.071532 125.264185,99.1586726 127.908096,97.789193 C130.551723,96.420283 138.027492,91.4903841 139.394816,88.5691313 C140.169358,86.9145333 142.114105,82.623516 143.65494,79.2137737 C144.384825,79.591463 145.060096,79.8253113 145.593998,79.8056578 C148.055296,79.7145111 158.8127,76.2455234 159.906389,75.8803668 C161.000363,75.5149254 164.19126,70.3118711 164.19126,68.2120783 C154.527829,58.9920166 152.066532,52.6017762 152.066532,52.6017762" id="Fill-89" fill="#98480C"></path>
|
53 |
+
<path d="M142.862108,78.3503009 C142.607815,78.2648508 142.374855,78.1506326 142.151566,78.0235968 C142.123691,77.9874229 142.090695,77.9540974 142.048313,77.9281776 C140.50378,76.9680037 139.834482,75.329926 138.51722,74.1547028 C138.002091,73.6946967 136.62282,72.6755623 135.912277,73.4229655 C135.839175,73.5001554 135.786268,73.5898779 135.743033,73.6850123 C134.395335,72.1734007 133.651228,70.4860469 132.829753,68.6064303 C132.302962,67.4004451 131.798073,66.1286634 131.195051,64.9591369 C130.879033,64.3464599 130.389788,63.3472639 129.587371,63.3455549 C129.469042,63.34527 129.463922,63.5304118 129.580544,63.5423748 C130.743637,63.6622898 131.299157,66.3365919 131.641628,67.2238483 C132.224171,68.7340358 132.782535,70.3128681 133.496491,71.7655191 C134.046606,72.8846301 134.805788,73.9123095 135.695815,74.8340308 C135.863068,75.6392552 136.305095,76.5131245 136.506197,76.9819605 C137.345024,78.9364883 137.608988,81.2769655 137.326251,83.392709 C137.071388,85.298815 135.049273,86.897016 133.7889,88.2459877 C132.332544,89.804312 130.572117,90.9445006 128.75082,92.0257287 C127.065486,93.0260641 125.400917,94.0164303 123.801771,95.1517768 C122.361344,96.1748989 120.278357,97.5301369 118.677504,96.0971393 C118.444828,95.8886412 118.069362,96.1660691 118.086144,96.4380851 C118.118855,96.9604698 118.266482,97.3464192 118.514233,97.8067102 C118.718748,98.1861085 119.088811,98.6142133 119.02538,99.0773527 C118.952846,99.6042947 118.641095,100.024139 118.240028,100.336887 C117.915762,100.496109 117.595193,100.663875 117.28202,100.85215 C117.101397,100.961242 117.066411,101.207908 117.139513,101.389916 C116.784811,101.596136 116.424988,101.791816 116.087922,102.027658 C115.950535,102.123932 115.972153,102.376864 116.164153,102.387403 C117.272348,102.448927 118.374855,102.916339 119.404544,103.297162 C119.793948,103.441002 120.104562,103.630132 120.50506,103.498254 C120.929735,103.358401 121.435762,102.341545 121.78506,101.969552 C122.376988,101.339501 122.977166,100.688941 123.624562,100.115856 C124.277077,99.5382133 125.006677,99.049439 125.656633,98.4678089 C126.23946,97.9462787 126.678357,96.9949346 127.34026,96.5958829 C128.056491,96.1635055 129.012508,95.9202577 129.771691,95.5288964 C130.477682,95.1645943 131.117113,94.6880678 131.760811,94.2198015 C134.265344,92.3960123 137.03754,90.377397 138.902926,87.8677287 C139.979833,86.4190654 140.610731,84.592143 141.323833,82.944381 C141.893291,81.6287349 142.70794,80.0348064 142.995228,78.6291529 C143.017984,78.517783 142.980722,78.3904624 142.862108,78.3503009" id="Fill-91" fill="#944308"></path>
|
54 |
+
<path d="M115.920725,54.0771285 C115.537294,52.6523911 113.302414,51.5398313 112.164636,50.8482555 C110.175516,49.6391371 107.835676,49.2375218 105.60933,48.6661457 C102.907676,47.9725761 100.084565,47.5245329 97.3362631,47.0497154 C96.0391964,46.8255514 94.6946276,46.7403862 93.5739164,45.9644996 C92.5991253,45.2888745 92.4790898,44.2859756 91.7972764,43.4363171 C91.5682987,43.1506291 91.0927076,43.3944466 91.0969742,43.7265625 L91.0969742,43.7331137 C91.0102187,43.7772629 90.9408142,43.8604343 90.913792,43.9888942 C90.6293476,45.3458412 90.1472142,46.6116414 89.9759787,48.0104589 C89.907712,48.5678782 90.0439609,50.0342012 89.6997831,50.4677179 C89.5038009,50.7149534 88.7707876,50.871327 88.4630187,51.0385243 C87.1858631,51.7332333 85.8737209,52.0112308 84.5098098,52.4752247 C83.361792,52.8654466 82.2501831,53.2787401 81.070592,53.5678461 C80.7727787,53.6410483 80.6706631,54.0435181 80.8896853,54.2545798 C81.2256142,54.5781507 81.6406187,54.5941014 82.0854898,54.6587586 C83.2426098,54.8268104 84.3823787,54.966094 85.5497387,55.036163 C87.9450453,55.1800039 90.2900053,55.7884084 92.6958364,55.7878387 C94.9489209,55.7872691 96.9258098,55.0717672 99.1271253,54.6767031 C101.664939,54.2215391 104.230343,54.2654035 106.796601,54.2505921 C108.159659,54.2429016 109.271552,54.4639324 110.563783,54.8823529 C111.607979,55.2204503 112.670663,55.5189559 113.764636,55.6417191 C114.915783,55.7707487 116.344832,55.6533973 115.920725,54.0771285" id="Fill-93" fill="#98480C"></path>
|
55 |
+
<path d="M96.4484836,56.0528763 C96.3429547,56.1460169 96.2357191,56.2377333 96.1290524,56.3300194 C96.433408,55.9882191 96.784128,55.7509528 97.1342791,55.4980206 C97.1371236,55.4985903 97.139968,55.4988751 97.142528,55.4994448 C96.9229369,55.7050946 96.6390613,55.8853942 96.4484836,56.0528763 M110.14875,50.5464744 C109.298261,50.2673375 108.160768,50.4883683 107.275861,50.4596001 C106.031132,50.4197234 104.797497,50.2414176 103.551061,50.2365755 C102.250866,50.2317333 100.961764,50.1699244 99.6627058,50.1403017 C98.6640213,50.117515 97.4568391,50.0067148 96.5016747,50.3721562 C95.4108302,50.7894374 95.171328,51.5499429 95.3963236,52.3033276 C94.8959858,52.0822968 94.3933724,51.9136753 93.9137991,51.8991488 C93.5204124,51.8871858 93.3912747,52.5750588 93.7934791,52.6519639 C94.3928036,52.7661821 94.8766436,53.2640711 95.3698702,53.5862179 C95.9379058,53.9570711 96.5252836,54.2718122 97.1240391,54.5879774 C98.1668124,55.1388455 99.1199858,55.801938 100.135168,56.3938221 C101.062457,56.9344361 101.967275,57.3904546 103.061817,57.2924719 C103.921977,57.215282 104.724395,56.9207641 105.547577,56.6857764 C106.685924,56.3607814 107.849017,56.0571488 108.970866,55.6791747 C109.662919,55.4458961 110.455666,55.2217321 110.857301,54.5549367 C111.494457,53.4976346 111.52091,50.9967962 110.14875,50.5464744 M97.9287324,54.8392006 C97.882368,54.8263831 97.8342969,54.8169836 97.787648,54.8047358 C97.7816747,54.5036667 97.375488,54.23279 97.0782436,54.5022425 C97.0290347,54.5469614 96.9749902,54.5839898 96.9220836,54.623012 C95.8938169,54.4580933 94.8189013,54.42961 93.8008747,54.3603954 C93.0431147,54.3085557 92.3129458,54.2142758 91.5529102,54.1983252 C91.1663502,54.1903498 90.5792569,54.0607506 90.2163058,54.2683942 C89.495808,54.6805483 89.8436836,55.8728615 89.7091413,56.5356692 C89.3587058,58.2611908 88.8979058,59.8442956 88.2240569,61.4809491 C86.8783502,64.7482746 85.707008,68.0375323 84.557568,71.3703695 C84.0043236,72.9751217 83.615488,74.5174953 83.3387236,76.1963042 C83.1797191,77.1627444 82.7991324,78.3681599 82.9481813,79.3439996 C82.9672391,79.4690416 83.1097458,79.6114583 83.2349013,79.6305422 C84.4264391,79.8148295 85.9120924,79.803721 87.1087502,79.6698492 C87.6773547,79.6060465 87.9327858,79.4713202 88.0926436,78.907065 C88.4371058,77.6931044 87.8889813,76.0917703 87.8710613,74.8615742 C87.8485902,73.3123646 87.8539947,71.717012 87.9211236,70.1695113 C87.941888,69.6932697 88.0030436,69.220446 88.0915058,68.7510403 C89.2949902,66.1963683 90.5539413,63.6963843 92.365568,61.4644287 C93.4848569,60.0858344 94.633728,58.7112277 95.9814258,57.5516704 C96.674048,56.9555138 97.8587591,56.2266248 98.215168,55.3447801 C98.2987947,55.1382758 98.123008,54.8936038 97.9287324,54.8392006" id="Fill-95" fill="#98480C"></path>
|
56 |
+
<path d="M109.197369,52.0816132 C105.587769,51.9605589 101.876053,51.4717846 98.4291556,50.3774541 C96.6306133,49.8063629 94.9677511,49.1424159 93.3085867,48.2318031 C92.5895111,47.8375935 91.5117511,46.8139017 90.6951111,46.7683284 C90.4664178,46.7557957 90.3222044,47.0591434 90.4365511,47.24457 C90.3278933,47.3177723 90.30144,47.5194344 90.4570311,47.5513358 C90.4348444,47.5467784 90.9573689,48.6838339 90.9653333,48.6975059 C91.2122311,49.1085207 91.4830222,49.4688351 91.8101333,49.8197501 C92.5610667,50.6244048 93.4095644,51.3265195 94.2774044,51.9970176 C96.0548978,53.3710546 98.1125689,54.6505269 100.120462,55.6539954 C100.9152,56.0516231 101.371164,56.2988586 102.231893,56.1091594 C103.095467,55.9186058 103.925191,55.5360744 104.73472,55.1891471 C105.66912,54.788956 106.611484,54.3958857 107.541049,53.9862951 C108.16768,53.710861 109.0176,53.4112162 109.4656,52.8683234 C109.684907,52.6028586 109.606684,52.0952852 109.197369,52.0816132" id="Fill-97" fill="#944308"></path>
|
57 |
+
<path d="M96.9660018,101.855989 C95.2798151,101.707876 93.6596196,100.865053 92.0072818,100.514138 C90.4237796,100.177465 88.6920818,100.062108 87.1583573,99.5380139 C85.462784,98.9589473 84.436224,97.4732556 83.3587484,96.1598882 C82.9434596,95.6540238 82.3586418,94.9789683 81.6281884,95.3270349 C80.6374684,95.7990041 80.9935929,97.5498758 80.5160107,98.3234837 C79.7866951,99.5041187 78.5823573,99.4861742 77.3598151,99.4830411 C76.6444373,99.4810472 75.9978951,99.6257427 75.299584,99.7692988 C73.7118151,100.095433 72.1422507,100.412168 70.5684196,100.793845 C69.4716018,101.060164 68.4857173,101.132512 67.6906951,100.180598 C67.6161707,100.092015 67.560704,100.003147 67.5123484,99.915988 L67.5123484,99.7063506 C67.5123484,99.7023629 67.5112107,99.6989449 67.5112107,99.6949572 C67.5089351,98.942427 67.5006862,98.1893271 67.514624,97.4373666 C67.5311218,96.5569461 67.7820018,95.732353 67.829504,94.8695922 C67.8892373,93.7823826 66.8922596,93.882644 66.4371484,92.9885515 C66.0650951,92.2582383 66.1524196,90.9015762 65.2879929,90.4962581 C64.6405973,90.1931952 64.0853618,90.6788364 63.6774684,91.1422605 C62.3078684,92.696882 61.6872107,94.493612 61.9474773,96.5703333 C62.1218418,97.9643086 62.7225884,99.2867908 63.2820907,100.561991 C63.6441884,101.386584 64.0728462,102.266719 64.7904996,102.837241 C64.6300729,103.340827 64.3570062,103.80539 64.3154773,104.34458 C64.2620018,105.035301 64.4864284,105.742258 64.6491307,106.403072 C64.8877796,107.373215 65.0137884,108.19439 65.0078151,109.187035 C65.0052551,109.613431 64.9312996,110.249464 65.2598329,110.610348 C65.8247396,111.230431 67.1038862,110.722857 67.7279573,110.51265 C68.4828729,110.258009 69.5941973,110.13667 69.8590151,109.258813 C70.0097707,108.757791 69.7796551,108.064506 69.7349973,107.558926 C69.652224,106.624672 69.6124018,105.41356 70.059264,104.562762 C70.9157262,102.933515 73.889024,102.59912 75.4759396,102.063918 C77.1678151,101.493396 78.9396196,100.920311 80.7367396,100.842836 C81.7772373,100.798402 82.7582862,100.736878 83.3644373,101.74405 C83.8229618,102.506549 83.9899307,103.48951 84.2092373,104.342301 C84.3087929,104.729105 84.9061262,104.738505 85.0005618,104.342301 C85.1205973,103.838716 85.1857351,103.346808 85.1988196,102.828981 C85.2210062,101.958529 85.211904,101.598215 86.2393173,101.599639 C87.3884729,101.601063 88.5538418,101.918653 89.7140907,101.945427 C92.1657173,102.002963 94.5101084,102.646118 96.9660018,102.677734 C97.5013262,102.684285 97.4839751,101.901278 96.9660018,101.855989" id="Fill-99" fill="#98480C"></path>
|
58 |
+
<g id="Group-103" transform="translate(159.857778, 0.279422)">
|
59 |
+
<polygon id="Clip-102" points="20.6246829 0.00541183724 0.19077309 0.00541183724 0.19077309 13.0237328 20.6246829 13.0237328 20.6246829 0.00541183724"></polygon>
|
60 |
+
<path d="M19.5398827,0.745523305 C18.8091449,0.347895684 17.7453227,0.376094205 16.9488782,0.366409864 C15.7883449,0.352168187 14.6403271,0.318842663 13.481216,0.274123798 C10.823936,0.170729223 8.18656711,-0.00757657213 5.52502044,0.00609543773 C4.63442489,0.0109376079 3.61355378,-0.0206789149 2.77188267,0.322830333 C2.03118933,0.624753884 1.87730489,1.15881677 1.70066489,1.8953963 C1.44039822,2.98118175 1.06862933,4.06297953 0.866673778,5.15759482 C0.641393778,6.37468853 0.577678222,7.6219746 0.423224889,8.84932232 C0.203633778,10.5947822 -0.315192889,11.9565714 1.602816,12.5940289 C3.21760711,13.1303704 5.10091378,13.2716478 6.61842489,12.3875245 C7.36224711,11.9542927 7.63986489,11.3678205 8.06966044,10.656876 C8.27218489,10.3216269 8.47584711,10.0316663 8.64167822,9.67533958 C8.79442489,9.34721134 8.95086933,8.58129396 9.16420267,8.18907818 C9.19094044,8.18366634 9.22109156,8.1774 9.25636267,8.16913983 C9.513216,8.11188829 9.81330489,8.11131862 10.0758471,8.0805566 C10.6913849,8.00849371 11.3003804,7.9489635 11.9107982,7.84585376 C13.1871004,7.63023477 14.4833138,7.50376868 15.764736,7.30922737 C17.4332871,7.05629519 20.382976,6.6589524 20.544256,4.50902885 C20.5485227,4.45348631 20.546816,4.40164661 20.5411271,4.35265524 C20.7521849,3.13214353 20.613376,1.32914723 19.5398827,0.745523305" id="Fill-101" fill="#FF5B0C"></path>
|
61 |
+
</g>
|
62 |
+
<path d="M166.346553,4.10997707 C165.535886,3.11533835 164.636188,1.02750851 163.1585,0.917847596 C162.366322,0.859171887 161.986304,1.24796967 161.806535,1.79570456 C161.382144,2.43572552 161.215175,3.34605351 161.538873,3.92796843 C161.877931,4.53751221 162.581931,5.10717928 163.056384,5.62386732 C163.611335,6.22828409 164.150642,6.88710407 164.784668,7.40977361 C165.518535,8.01447522 166.661433,8.94189322 167.200171,7.82164291 C167.893646,6.37981554 167.2673,5.23991171 166.346553,4.10997707" id="Fill-104" fill="#E43500"></path>
|
63 |
+
<path d="M185.510713,25.4029646 C185.139797,25.2668142 184.339371,25.3534036 184.074837,25.0708487 C183.83306,24.8122199 184.120917,24.0468721 184.149362,23.692824 C184.169273,23.4458734 183.868046,23.2012014 183.630251,23.2966206 C183.248811,23.4501459 183.007886,23.6763037 182.8833,24.0118376 C181.668437,24.2419831 179.679886,24.0594048 178.721877,23.4985676 C177.994553,23.0733111 177.426517,21.9610361 176.657664,21.7049708 C176.568348,21.4372273 176.229006,21.2577821 175.995762,21.5292285 C175.465273,22.1456083 175.17258,23.0137809 175.044864,23.8104603 C174.850873,25.0173 174.663708,26.3298129 174.584064,27.5540275 C174.531442,28.3638092 174.517504,29.1214665 175.111708,29.7124961 C175.725255,30.3223247 176.77514,30.7626773 177.567317,31.09166 C179.357326,31.8347908 181.395086,31.256009 182.753877,29.8945047 C183.137593,29.5096946 183.143851,29.0701964 183.20074,28.5221767 C183.286642,27.6981533 183.220082,26.620628 184.192028,26.2825306 C184.581717,26.1469498 185.093717,26.2671496 185.510713,26.1950867 C185.947051,26.1198906 185.850624,25.5274369 185.510713,25.4029646" id="Fill-106" fill="#E43500"></path>
|
64 |
+
<path d="M183.66848,30.1522221 C182.293191,30.8722813 181.272036,30.2974872 179.973547,29.8984354 C178.98368,29.5948028 178.148267,29.3159508 177.238044,28.7921419 C175.972551,28.0638226 175.636338,27.0335797 174.845867,25.919026 C174.069333,24.8235562 172.530204,23.7289409 171.113956,23.9075316 C170.474524,23.9878546 169.315129,24.7218707 169.948871,25.4590199 C167.233564,30.1451012 173.423929,35.2065932 177.733262,36.3117473 C180.186027,36.9409446 183.767467,38.9179742 185.614649,36.991645 C187.171129,35.3680938 186.439538,30.1263022 186.477938,28.0179644 C186.485902,27.5721999 184.584676,29.6722776 183.66848,30.1522221" id="Fill-108" fill="#E43500"></path>
|
65 |
+
<path d="M177.129045,3.2743894 C174.340636,3.45582836 171.419392,4.01894427 168.772068,4.90278274 C167.612388,5.28958668 166.494236,5.98657435 166.256156,7.0740688 C166.071836,6.85958915 165.892352,6.64340049 165.72197,6.5186434 C165.318912,6.22327102 164.951979,6.11076178 164.50085,5.9130873 C164.281259,5.8170984 164.067356,6.13839063 164.188814,6.32381726 C164.792405,7.24439926 165.598521,7.99692947 166.252459,8.87222293 C166.908388,9.7500799 167.351836,10.8367199 168.06949,11.6598888 C168.46373,12.1119196 168.946148,11.5399739 168.789703,11.0970577 C168.44837,10.131472 167.748636,8.84003674 167.712796,7.79270382 C168.083143,6.4175275 170.188032,5.71712182 171.406308,5.07596153 C172.125952,4.69713292 173.137721,4.46670259 173.85765,4.2468111 C175.029845,3.98447941 175.988139,3.91355586 177.168868,3.71844488 C177.397845,3.68939186 177.366556,3.25900838 177.129045,3.2743894" id="Fill-110" fill="#E43500"></path>
|
66 |
+
<path d="M186.442382,25.7678933 C186.007182,25.2566171 185.469582,25.2899427 184.847787,25.236394 C183.959467,25.1597737 183.702329,24.2679599 183.99616,23.5308107 C184.208924,22.9970327 184.508444,22.4692361 184.919467,22.0679057 C185.115449,21.8762127 184.903253,21.5606171 184.655218,21.6662904 C183.370667,22.2128859 183.323449,23.8652053 182.359182,24.7103064 C182.286364,24.774394 182.329031,24.9290586 182.432853,24.9267799 C182.928071,24.9173804 183.267982,24.4243335 183.543324,24.0472139 C183.538489,24.2332102 183.5584,24.4155037 183.610453,24.5898218 C183.719396,24.9541239 183.856498,25.2563323 184.188444,25.4551461 C184.719218,25.7738748 185.387093,25.5964236 185.919004,25.8886628 C185.89312,25.9991782 185.941476,26.1233656 186.083413,26.1250746 C186.152533,26.1259291 186.221938,26.1264988 186.291058,26.1273533 C186.47168,26.1296319 186.553031,25.8977774 186.442382,25.7678933" id="Fill-112" fill="#E43500"></path>
|
67 |
+
<path d="M185.550165,25.8761016 C184.530716,26.2016663 183.465188,26.3175936 182.534201,26.8835578 C182.48613,26.9131805 182.524245,26.9994851 182.576014,26.9684382 C183.500743,26.4056072 184.559161,26.2928131 185.570361,25.969527 C185.624405,25.9527218 185.606201,25.8584419 185.550165,25.8761016" id="Fill-114" fill="#E43500"></path>
|
68 |
+
<path d="M156.188501,12.141229 C156.03035,11.9125076 156.016128,11.6142869 155.915435,11.3613547 C155.807915,11.0907629 155.636964,10.8557752 155.494172,10.6036975 C155.221675,10.1226137 154.941212,9.61617965 154.710244,9.11458779 C154.652501,8.98926104 154.48923,9.09863711 154.538439,9.2157037 C154.778226,9.78480111 155.070919,10.366716 155.368732,10.9076149 C155.617906,11.3613547 155.694137,11.918774 156.006741,12.3255163 C156.113692,12.4647999 156.276964,12.2691192 156.188501,12.141229" id="Fill-116" fill="#E43500"></path>
|
69 |
+
<path d="M154.796828,9.80915438 C154.648633,9.46507546 154.45066,8.99054279 154.185557,8.71938126 C154.14858,8.6814984 154.087424,8.72935043 154.114162,8.7749238 C154.252402,9.01162047 154.303033,9.36282022 154.369593,9.62913958 C154.438144,9.90371911 154.626446,10.4181285 154.561308,10.6898597 C154.569273,10.726888 154.577522,10.7642012 154.585486,10.8009448 C154.482802,10.8092049 154.383246,10.8294281 154.285966,10.8624688 C154.130375,10.8966488 153.977913,10.9402284 153.823175,10.9769719 C153.498624,11.0538769 153.205077,11.1105588 152.889344,11.2267709 C152.780971,11.2663628 152.769308,11.4224515 152.881095,11.4680249 C153.359531,11.6625662 153.763157,11.6899102 154.268331,11.5457845 C154.563015,11.4617586 155.019548,11.2996883 155.101468,10.9650089 C155.18282,10.6323233 154.92682,10.1105083 154.796828,9.80915438" id="Fill-118" fill="#E43500"></path>
|
70 |
+
<path d="M155.710976,12.6535875 C155.51414,12.4738576 155.307065,12.3357133 155.08918,12.2129501 C155.072683,12.1969994 155.056469,12.1819032 155.04054,12.1659525 C155.152043,12.1400327 155.254443,12.0822115 155.339776,11.9722657 C155.61654,11.6167935 155.523527,10.9838933 154.990478,10.9924383 C154.767758,10.9961412 154.660807,11.1610598 154.66166,11.3319599 C154.545892,11.2909439 154.43126,11.2527762 154.312647,11.2191658 C154.099029,11.1582115 153.885127,11.1049476 153.662976,11.0969723 C153.411527,11.0878576 153.303723,11.2895197 153.319652,11.4914667 C153.148416,11.4350697 152.978318,11.3755395 152.811349,11.3023372 C152.763563,11.2815444 152.729998,11.36614 152.774087,11.3892115 C152.971776,11.4917515 153.170603,11.5780561 153.366869,11.6606578 C153.390763,11.7113582 153.420629,11.7592102 153.462727,11.7962386 C153.836772,12.1263607 154.259172,12.4228724 154.661945,12.7176751 C154.920505,12.9070894 155.156878,13.1472041 155.478869,13.2050253 C155.744256,13.2525925 155.891883,12.8182213 155.710976,12.6535875" id="Fill-120" fill="#E43500"></path>
|
71 |
+
<path d="M90.7134862,47.3982947 C90.7134862,47.3982947 91.3167929,47.8113033 92.0810951,48.7677744 C93.174784,50.1369692 99.738624,53.9711134 101.926571,54.2448385 C104.114517,54.5188483 110.678073,51.7801739 110.678073,51.7801739 C110.678073,51.7801739 111.22506,51.5064488 111.22506,50.4106942 C111.22506,49.3152244 112.866304,39.4562811 112.866304,39.4562811 C112.866304,39.4562811 106.849451,33.7052072 106.5761,33.7052072 C106.302464,33.7052072 98.6446507,35.074402 98.6446507,35.074402 C98.6446507,35.074402 92.9014329,41.3734957 92.3544462,43.5641504 C91.8074596,45.75509 90.7134862,47.3982947 90.7134862,47.3982947" id="Fill-126" fill="#9F5622"></path>
|
72 |
+
<path d="M111.888498,45.013355 C112.194844,43.7358766 112.481849,42.646958 111.983787,41.384006 C111.508196,40.177736 110.888107,38.6325141 109.947733,37.7093686 C109.044622,36.8232514 107.883236,35.6793599 106.750009,35.1208014 C105.330062,34.4206805 103.603484,34.8316953 102.12096,35.0607015 C99.2813511,35.4993451 96.3996444,36.5711737 94.9179733,39.2312342 C93.9832889,40.9097582 93.2204089,42.8377964 92.6737067,44.6766818 C92.2120533,46.2293094 91.6818489,47.9853081 92.2569956,49.5874968 C92.2934044,49.6888975 92.4330667,49.6154105 92.4140089,49.5219851 C92.0240356,47.6064795 93.0537244,45.2622995 93.7725156,43.5290874 C94.4398222,41.9192083 95.0277689,39.9541417 96.2343822,38.6493192 C97.3960533,37.3932033 98.8731733,36.5976633 100.516978,36.1518988 C102.032782,35.7405991 104.293547,35.2455584 105.808782,35.598752 C107.161031,35.9143476 108.8256,37.4777989 109.694862,38.5342465 C110.613333,39.650794 111.641884,41.587662 111.658382,43.0460097 C111.678293,44.7695375 110.953813,46.5417718 110.558151,48.1952305 C110.290489,49.3140566 110.376391,51.4172674 109.451378,52.1848938 C109.207324,52.3874105 109.477262,52.7970011 109.761991,52.6574327 C110.87872,52.1094129 111.338667,50.8504487 111.523556,49.691461 C111.546596,49.5473353 111.460409,49.4140332 111.351467,49.3713081 C111.474916,48.954027 111.597227,48.5370307 111.700196,48.1206041 C111.724089,48.0249 111.699911,47.9471404 111.655538,47.8893192 C111.671467,47.843461 111.688533,47.797318 111.704462,47.751175 C111.725227,47.6913599 111.717547,47.6329691 111.693084,47.5831232 C111.724658,47.4914068 111.758507,47.4005449 111.796338,47.3125313 C111.831893,47.2293599 111.812267,47.1447644 111.769031,47.082101 C111.796907,46.9869666 111.824213,46.8918322 111.860907,46.7992613 C111.925476,46.6038655 111.657813,46.4315412 111.538916,46.585921 C111.527822,46.5904783 111.517013,46.5973143 111.506489,46.60472 C111.632782,46.0754993 111.760782,45.5457089 111.888498,45.013355" id="Fill-128" fill="#98480C"></path>
|
73 |
+
<path d="M111.192092,22.88008 C111.191808,22.881789 111.191524,22.8837829 111.191524,22.8854919 C111.419932,23.0643673 111.644075,23.2478001 111.859115,23.4403476 C115.518208,24.9938297 116.933319,28.7923698 116.736484,32.6381922 C116.539079,36.5019592 114.238777,39.5565141 112.803186,42.999297 C112.685141,43.2824216 112.577906,43.570958 112.475506,43.8612033 C112.806599,43.9084857 113.17467,43.9392477 113.561515,43.921588 C113.73531,43.468133 113.874688,43.144847 113.960021,43.0163871 C114.507008,42.195212 117.515292,35.3480985 117.515292,34.8006485 C117.515292,34.2714277 120.833052,26.8404055 111.192092,22.88008" id="Fill-130" fill="#FF5B0C"></path>
|
74 |
+
<path d="M90.7009991,33.353808 C90.7539058,33.1814837 90.8133547,33.0117229 90.8773547,32.843956 C90.7485013,31.5300189 91.5600213,30.4898068 92.1243591,29.2653074 C92.9805369,27.4079079 93.6913636,25.3901471 95.0609636,23.8306835 C96.2809458,22.44212 97.6277902,21.7052556 99.3592036,21.1276132 C100.076572,20.888353 100.83291,20.7091927 101.607168,20.5884233 C96.2840747,20.2198487 93.4706347,21.8838462 92.9014613,23.0243197 C92.0811236,24.6675244 89.6195413,30.1448734 89.6195413,30.1448734 C89.6195413,30.1448734 89.3459058,30.4185984 88.7989191,30.9663333 C88.4365369,31.3297809 87.8352213,32.6553962 87.4699947,33.9867081 C88.425728,34.1259917 89.7449813,34.2319498 90.5041636,34.2498943 C90.5360213,33.9724665 90.6022969,33.6773789 90.7009991,33.353808" id="Fill-132" fill="#FF5B0C"></path>
|
75 |
+
<path d="M90.4484978,43.2356519 C90.67264,41.3919244 91.1709867,39.6709602 91.7134222,37.9309121 C91.6218311,37.3381735 91.4616889,36.8120859 91.21536,36.4947814 C90.6205867,35.728864 90.4106667,35.0663412 90.5039644,34.2497234 C89.7447822,34.2320637 88.4258133,34.1261057 87.4697956,33.9865372 C87.2840533,34.6635866 87.1583289,35.34206 87.1583289,35.8957764 C87.1583289,37.539266 88.2520178,39.4561957 88.2520178,39.4561957 C88.2520178,39.4561957 87.9783822,44.9335446 88.5253689,45.7552894 C88.7600356,46.1076285 89.4481067,46.9142771 90.1575111,47.7200711 C90.1660444,46.2170046 90.2695822,44.7082413 90.4484978,43.2356519" id="Fill-134" fill="#FFBC00"></path>
|
76 |
+
<path d="M112.47542,43.8612318 C112.002958,45.2010888 111.671012,46.6030395 111.27222,47.9685314 C111.110087,48.9853872 110.940843,50.0161998 110.784114,50.9584291 C110.685412,51.5497435 110.404949,52.0541837 109.584327,52.6019186 C110.404949,52.8756436 110.6783,52.6019186 110.6783,52.6019186 C110.6783,52.6019186 112.624185,46.3663428 113.561429,43.9216165 C113.174585,43.9389914 112.806514,43.9085142 112.47542,43.8612318" id="Fill-136" fill="#FFBC00"></path>
|
77 |
+
<path d="M112.04571,42.1950695 C112.04571,42.4762002 111.989675,43.0307711 111.896661,43.7559573 C112.065337,43.7949795 112.264732,43.8308686 112.475506,43.8613457 C112.577906,43.5708155 112.685141,43.2822792 112.803186,42.9991546 C114.238777,39.5563716 116.539079,36.5021016 116.736484,32.6380498 C116.933319,28.7922274 116.442652,25.7866639 111.191524,22.8853494 C111.04475,24.5231423 110.364928,30.846162 108.197177,36.6106232 C110.761444,38.5887921 112.04571,40.8500856 112.04571,42.1950695" id="Fill-138" fill="#E43500"></path>
|
78 |
+
<path d="M95.060992,23.8308259 C93.691392,25.3902895 92.9805653,27.4080503 92.1243876,29.265165 C91.5597653,30.4899492 90.7485298,31.5298764 90.8773831,32.8440984 C90.8130987,33.0115805 90.7536498,33.1813413 90.7010276,33.3539504 C90.6023253,33.6772365 90.5360498,33.972324 90.5039076,34.2497519 C90.5790009,34.2517457 90.6503964,34.2528851 90.7135431,34.2528851 C91.8274276,35.1825818 94.4522809,37.1205891 96.0244053,38.2701773 C98.4865564,35.305345 102.278485,34.8755312 104.523036,35.0193721 C105.126628,33.2166607 107.274468,24.60244 107.390236,21.6196631 C105.206556,21.0200885 103.283712,20.7042081 101.607196,20.5882809 C100.832939,20.7093351 100.076601,20.8884954 99.359232,21.1277556 C97.6275342,21.7051132 96.2809742,22.4422624 95.060992,23.8308259" id="Fill-140" fill="#E43500"></path>
|
79 |
+
<path d="M95.3629298,39.1823282 C95.5697209,38.8544848 95.7913031,38.5511371 96.0242631,38.2702912 C94.4524231,37.1207031 91.8272853,35.1824109 90.7134009,34.2527142 C90.6505387,34.2527142 90.5791431,34.2515748 90.5040498,34.2498658 C90.410752,35.0664836 90.620672,35.7287216 91.2154453,36.494639 C91.4614898,36.8122284 91.6219164,37.3380311 91.7135076,37.9307697 C91.171072,39.6711026 90.6727253,41.3920668 90.4485831,43.2355095 C90.2696676,44.7080989 90.1658453,46.2168621 90.157312,47.7202136 C91.1005298,48.7920422 92.0810098,49.8630163 92.0810098,49.8630163 C92.0810098,49.8630163 92.0810098,44.3859522 95.3629298,39.1823282" id="Fill-142" fill="#FFAD00"></path>
|
80 |
+
<path d="M111.896548,43.7560998 C111.752903,44.8766349 111.521365,46.4059062 111.272192,47.968503 C111.670983,46.603011 112.00293,45.2010603 112.475392,43.8612033 C112.264619,43.831011 112.065508,43.7951219 111.896548,43.7560998" id="Fill-144" fill="#FFAD00"></path>
|
81 |
+
<path d="M111.192092,22.8800722 C111.187257,22.8783656 111.182421,22.8763745 111.177586,22.8743834 C111.182421,22.8780811 111.186688,22.8817789 111.191524,22.8854767 C111.191524,22.88377 111.191808,22.8817789 111.192092,22.8800722" id="Fill-146" fill="#FFBC00"></path>
|
82 |
+
<path d="M107.390151,21.6197486 C107.274667,24.6025254 105.126542,33.2167461 104.522951,35.0194576 C105.438578,35.0781333 106.098489,35.2316586 106.302436,35.3481555 C106.997618,35.7463528 107.627947,36.1716092 108.19712,36.6105377 C110.364871,30.8463614 111.044978,24.5230568 111.191467,22.885264 C111.186916,22.881846 111.182364,22.8781432 111.177529,22.8744403 C110.84416,22.7377202 110.496569,22.604703 110.131342,22.4768127 C109.17504,22.1415636 108.263396,21.8595784 107.390151,21.6197486" id="Fill-148" fill="#FFAD00"></path>
|
83 |
+
<path d="M103.02043,33.1574438 C103.02043,32.8834339 103.294066,31.7879641 103.294066,31.7879641 C103.294066,31.7879641 104.661675,29.3232995 104.661675,29.0492896 C104.661675,28.7755646 98.6445369,27.4063698 95.909888,28.5015547 C98.0975502,29.8710344 103.02043,33.1574438 103.02043,33.1574438" id="Fill-150" fill="#1F191A"></path>
|
84 |
+
<path d="M110.951822,30.9663903 L110.1312,34.8005345 L110.404836,35.6222793 C110.404836,35.6222793 113.139484,36.4437392 115.327716,36.4437392 C114.507093,33.4310549 110.951822,30.9663903 110.951822,30.9663903" id="Fill-152" fill="#1F191A"></path>
|
85 |
+
<path d="M114.265714,76.8362682 C113.91158,76.7434125 113.580203,76.7348674 113.215829,76.7200561 C112.91062,76.7075234 112.617358,76.6440055 112.319545,76.5887478 C112.087154,76.4577244 111.834567,76.5676702 111.724772,76.8419649 C111.714816,76.8667454 111.705145,76.8915259 111.695189,76.9163064 C111.570887,77.2270598 111.829163,77.5358194 112.122709,77.5751264 C112.825287,77.6685518 113.546069,77.740045 114.240398,77.5594605 C114.239829,77.556897 114.23926,77.5543335 114.238692,77.5514852 C114.543616,77.4631868 114.628665,76.9314026 114.265714,76.8362682" id="Fill-154" fill="#98480C"></path>
|
86 |
+
<path d="M67.5168142,73.9818089 C67.3791431,73.8767053 67.2226987,73.8211628 67.0588587,73.7955277 C66.9692587,73.7530875 66.8813653,73.707799 66.7917653,73.6653588 C66.5556764,73.5534192 66.3503076,73.6542503 66.220032,73.8339803 C65.8676053,73.889238 65.283072,74.0236794 65.4850276,74.5098903 C65.618432,74.8311825 65.9523698,74.8009901 66.2413653,74.8103896 C66.304512,74.8123835 66.3699342,74.8143773 66.4347876,74.8175105 C66.6799787,74.9476794 66.9209031,75.0385413 67.2079076,75.0607583 C67.7950009,75.1066165 67.9104853,74.2820234 67.5168142,73.9818089" id="Fill-156" fill="#98480C"></path>
|
87 |
+
<path d="M110.886827,44.867036 C110.804338,44.6300545 110.823964,44.384528 110.787271,44.1412801 C110.768213,44.0150989 110.598116,43.999433 110.543502,44.0999793 C110.00192,43.4753393 108.924729,43.0272962 108.242916,42.7225243 C106.921102,42.1314947 105.492622,41.5455921 104.089742,41.1878412 C102.796089,40.8580039 101.555627,40.4501223 100.23808,40.2017475 C99.6270933,40.0866747 98.8716089,39.9416945 98.2253511,40.0875292 C98.2526578,40.0197388 98.1778489,39.9371371 98.1110044,39.9975218 L98.1104356,39.9980915 C98.0754489,39.99211 98.03648,40.0012247 97.9983644,40.0356895 C97.8390756,40.178676 97.6789333,40.3339102 97.5879111,40.5301605 C97.5230578,40.6700138 97.7056711,40.8201211 97.7904356,40.6694441 C97.8197333,40.6141864 97.8564267,40.5646254 97.8902756,40.512216 C97.9133156,40.5130705 97.9377778,40.508798 97.9636622,40.4928473 C98.76096,39.9966673 100.149618,40.4922777 100.987876,40.6634626 C102.058524,40.8827845 103.07712,41.2496501 104.133547,41.5245144 C105.229227,41.8099176 106.239858,42.3098005 107.292302,42.7156883 C108.155591,43.0486587 110.011307,43.6809891 110.472391,44.565967 C110.486898,44.5938806 110.50624,44.6123948 110.527004,44.6266365 C110.527573,44.7323097 110.558862,44.8493763 110.584462,44.9462197 C110.640498,45.1598449 110.954809,45.0630015 110.886827,44.867036" id="Fill-158" fill="#98480C"></path>
|
88 |
+
<path d="M105.709596,47.9134446 C105.217792,47.3739699 104.824405,46.9435864 104.250681,46.7675593 C104.240441,46.7615778 104.232476,46.7536025 104.220814,46.74933 C103.685774,46.5630488 103.040085,46.6291302 102.483428,46.6325482 C102.464654,46.6325482 102.449294,46.63796 102.432796,46.6422326 C102.01125,46.595235 101.591125,46.5650427 101.181241,46.5462436 C101.084814,46.5274446 100.989525,46.506367 100.896796,46.4807319 C100.636814,46.3867369 100.388494,46.2551438 100.157241,46.0688626 C100.071908,45.9586321 99.8907164,46.0970612 99.9436231,46.2454594 C100.328761,47.3201364 101.620139,47.3503287 102.781241,47.2919379 C102.87141,47.3073189 102.961579,47.3218454 103.052316,47.3358022 C103.46789,47.4631228 103.882894,47.5978491 104.301312,47.67333 C104.34341,47.6810205 104.37669,47.67333 104.405703,47.6605125 C104.801081,47.8143226 105.17541,47.994907 105.495125,48.1948602 C105.668068,48.3030969 105.839872,48.0567159 105.709596,47.9134446" id="Fill-160" fill="#98480C"></path>
|
89 |
+
<path d="M98.097664,40.2779974 C98.097664,40.2779974 99.4652729,40.2779974 102.200206,41.0994573 C104.934855,41.9212021 107.943424,43.0163871 108.490411,43.2903969 C109.037397,43.5641219 110.405006,44.6598766 110.405006,44.6598766 C110.405006,44.6598766 108.763762,46.5768063 108.216775,46.8505313 C107.669788,47.1245412 106.029113,46.3027964 104.387868,45.7550615 C102.747193,45.2076115 100.011975,44.9336016 99.1919218,44.3858667 C98.3712996,43.8381318 98.9182862,42.1949271 98.097664,40.2779974" id="Fill-162" fill="#333333"></path>
|
90 |
+
<path d="M107.122944,36.9915596 C107.122944,36.9915596 105.481984,36.4438247 105.208633,36.1698148 C104.934997,35.8958049 103.841024,35.6220799 103.841024,35.8958049 C103.841024,36.1698148 105.755335,38.0870293 105.755335,38.0870293 C105.755335,38.0870293 107.669931,37.2652846 107.669931,36.9915596 C107.669931,36.7175497 107.122944,36.9915596 107.122944,36.9915596" id="Fill-164" fill="#98480C"></path>
|
91 |
+
<path d="M109.365447,44.2678887 C105.470265,41.5716544 98.7255182,40.4721969 98.5685049,40.5243215 C98.411776,40.5770157 98.7255182,42.7759306 98.908416,43.0114879 C99.0913138,43.2470453 99.7387093,43.29034 99.7387093,43.29034 C99.7387093,43.29034 98.9869227,43.3780687 99.0128071,43.6660354 C99.0219093,43.7640181 99.033856,43.9975816 99.0458027,44.2610527 C99.0890382,44.3071957 99.1368249,44.349351 99.1917227,44.3858097 C100.01206,44.9335446 102.746994,45.2075545 104.387954,45.7552894 C106.010709,46.296758 107.631474,47.1045459 108.196665,46.8575952 C108.377287,46.1959269 108.05814,45.9956889 108.05814,45.9956889 L108.7903,46.2053264 C108.7903,46.2053264 109.15638,45.6029035 109.365447,44.2678887" id="Fill-166" fill="#F1F1F1"></path>
|
92 |
+
<path d="M105.9871,44.8698274 C102.96886,43.6478915 99.9770738,43.3220419 99.7077049,43.2946979 C99.6323271,43.3055216 99.433216,43.3388471 99.2671004,43.405783 C99.7537849,43.4607559 101.19734,43.6544427 103.563349,44.2360727 C106.064185,44.8510284 107.735012,45.8755746 108.196096,46.181201 C108.138638,46.0467596 108.05814,45.9957744 108.05814,45.9957744 L108.136363,46.0179914 C107.833714,45.8371221 107.159012,45.4520271 105.9871,44.8698274" id="Fill-168" fill="#CBCBCB"></path>
|
93 |
+
<path d="M169.651826,5.88323674 C169.180501,5.82627004 167.772786,6.27573736 167.337017,6.17946363 C166.817906,6.06496054 165.936697,4.95952158 165.651684,4.57300247 C165.094172,3.81705425 164.827932,3.13658693 163.830386,2.90672626 C163.356501,2.79735018 162.152448,2.73611097 161.835292,3.25308385 C161.625372,3.59488409 161.84411,3.99051788 162.124857,4.21724538 C162.679239,5.11076819 163.611932,5.81174353 164.313088,6.5656979 C164.953941,7.25499507 165.585124,8.27925647 166.455524,8.71334279 C166.945621,8.95772996 167.107755,8.98478915 167.48123,8.55326634 C167.831381,8.14880271 167.72699,7.52074476 168.060359,7.07498027 C168.270564,6.79384957 168.778866,6.5537349 168.908004,6.22845499 C168.945835,6.13332059 169.743132,5.89434525 169.651826,5.88323674" id="Fill-185" fill="#B2270D"></path>
|
94 |
+
<path d="M167.172096,8.86313674 C166.275812,9.41229581 165.56982,7.86621936 165.116416,7.29655228 C164.47158,6.48591603 163.84438,5.56903687 163.14038,4.81422799 C163.083776,4.75327361 163.008398,4.84214168 163.053909,4.90195672 C163.897856,6.01223785 164.558336,7.27518977 165.424469,8.37835006 C165.670798,8.69138212 166.028914,9.19183465 166.387314,9.37270395 C166.775865,9.56923909 166.993749,9.37669162 167.318585,9.16021813 C167.481856,9.05141171 167.354425,8.75119716 167.172096,8.86313674" id="Fill-187" fill="#8E1926"></path>
|
95 |
+
<path d="M186.215424,28.6601785 C186.172757,28.6069147 186.096242,28.6749899 186.126677,28.7296779 C186.375282,29.1777211 183.872171,31.1795312 183.45034,31.4484141 C182.2241,32.2299973 180.135708,32.4142846 178.73226,32.2171798 C177.229255,32.0061181 175.372686,31.3427408 174.659868,29.9011983 C174.145593,28.8615559 173.857166,27.6766483 173.125006,26.7591995 C173.008668,26.6133647 172.835157,26.8198691 172.931868,26.955165 C173.97834,28.4200639 174.069077,30.41162 175.6449,31.4632254 C177.000277,32.3672871 178.717468,32.7230441 180.321735,32.5886027 C182.068793,32.4421983 183.350784,32.037165 184.619122,30.8696323 C184.872277,30.6363536 186.664846,29.2156039 186.215424,28.6601785" id="Fill-189" fill="#B2270D"></path>
|
96 |
+
<path d="M120.48822,107.039191 C120.681643,106.986212 120.874496,106.932378 121.067065,106.875696 C121.408114,106.748091 121.705074,106.601971 121.940025,106.319986 C122.311794,105.874221 122.481892,105.144478 122.329998,104.581362 C122.008576,103.389334 120.397483,102.60832 119.362958,102.237467 C118.284345,101.850093 117.054407,101.648431 115.807687,101.559563 C113.311118,101.052844 110.748558,100.91413 108.243456,100.40086 C102.76022,99.2777615 97.0138738,99.1524348 91.431936,98.9456456 C85.659136,98.7317356 79.7768249,98.5055778 74.0296249,99.2247825 C71.2918471,99.5677221 68.5651627,99.9687677 65.895936,100.687118 C64.7553138,100.993884 63.6795449,101.440218 62.5633849,101.81278 C61.9037582,102.032956 60.8945493,102.201578 60.7819093,103.047818 C60.7338382,103.408702 60.901376,103.735122 61.1468516,103.988054 C61.661696,104.518414 62.017536,104.654564 62.1674382,105.394847 C62.383616,106.462972 62.5568427,107.572969 62.8757049,108.614605 C63.1291449,109.442046 63.3851449,110.290565 63.0290204,111.145351 C63.023616,111.158738 63.0167893,111.170986 63.0111004,111.184373 C62.9200782,111.219123 62.8319004,111.260139 62.7474204,111.311124 C61.9745849,111.776542 61.8224071,112.828432 62.2820693,113.567575 C62.908416,114.574462 64.2143004,114.438596 65.258496,114.377072 C66.582016,114.299028 67.8802204,114.17484 69.2074382,114.131546 C71.978496,114.041538 74.7233849,113.623688 77.5026916,113.59321 C80.5866382,113.559315 83.6563627,113.686636 86.7366116,113.729361 C92.8075093,113.813672 98.863616,114.334632 104.917163,114.804323 C107.878514,115.033614 110.86006,115.175461 113.78614,115.711233 C115.085198,115.949353 116.333909,116.418474 117.552469,116.919212 C118.410923,117.27212 120.179314,118.572955 121.249678,118.063388 C122.317198,117.55496 122.371243,114.422076 119.6255,113.613434 C119.883207,111.893039 120.385536,108.841332 120.457216,107.124071 C120.469163,107.09217 120.47798,107.067389 120.48822,107.039191" id="Fill-191" fill="#FFBC00"></path>
|
97 |
+
<path d="M74.7012551,53.8587751 C74.7012551,53.8587751 55.7606684,52.6997874 50.6048284,67.1351512 C41.3447396,65.7656715 30.1913884,72.4037171 30.5068373,81.1495309 C32.4009529,86.5232005 38.4311751,92.3121573 45.0280107,92.6345889 C48.4057884,92.7997924 57.567744,88.3028404 58.3041707,87.3543448 C58.0936818,80.8214027 59.654144,76.7237874 60.0751218,74.4058121 C60.4960996,72.0875519 66.9145884,58.7057874 74.7012551,53.8587751" id="Fill-193" fill="#98480C"></path>
|
98 |
+
<path d="M63.6615396,63.5689783 C61.1314062,65.9724037 59.3413973,68.9041953 57.4341973,71.7878501 C56.9278862,72.5540523 56.4446151,73.33649 55.9277796,74.0955714 C55.6126151,74.5584259 55.0792818,75.6940572 54.5234773,75.821093 C53.8772196,75.9683519 52.9749618,74.4185726 52.7465529,73.9335011 C52.4825884,73.3720942 52.4151751,72.7995788 51.9560818,72.3643531 C51.7490062,72.167818 51.4861796,72.1931682 51.3231929,72.4304345 C50.7742151,73.2293926 50.8276907,74.2508057 50.8737707,75.179363 C50.8985173,75.6803852 50.9653618,76.1540634 51.0347662,76.6508131 C51.1135573,77.2107958 51.1735751,77.4719882 50.6143573,77.7610942 C50.2815573,77.9337033 49.7394062,78.0276984 49.3792996,78.1373593 C46.3983218,79.0493963 43.3223396,79.5883014 40.2693973,80.189585 C38.9106062,80.4573285 37.6286151,80.9597748 36.292864,81.3092656 C35.0902329,81.6245763 34.1515662,82.1990856 33.2410596,83.0467502 C32.7233707,83.5284037 32.4113351,84.0906651 32.2981262,84.6617564 C33.673984,86.7188242 35.5618418,88.6420202 37.7472284,90.0869808 C39.001344,90.7993494 40.3277084,91.4171534 41.6591929,91.9984986 C42.7528818,92.3542557 43.8812729,92.5787046 45.0278684,92.6345319 C48.0734151,92.783215 56.1900373,88.8536515 58.2898062,87.3921707 C58.3987484,87.1560436 58.5284551,86.0218365 58.5526329,85.7136466 C58.6208996,84.8409166 59.6750507,76.608088 60.075264,74.4057551 C60.2473529,73.4572594 61.4238151,70.6570609 63.2866418,67.3472952 C63.6348018,66.2372989 64.0845084,65.1372718 64.2930062,64.0010708 C64.3598507,63.6356293 63.9917796,63.2550917 63.6615396,63.5689783" id="Fill-195" fill="#98480C"></path>
|
99 |
+
<path d="M62.0187591,75.151193 C62.0187591,75.151193 68.1306169,78.4752004 78.5478258,77.2108243 C83.9144391,76.4733903 86.3344924,76.2623286 86.3344924,76.2623286 C86.3344924,76.2623286 103.170759,83.3222127 118.954297,81.4255062 C122.953017,85.0081424 120.848412,91.7515764 120.427435,92.0680265 C120.006457,92.3839069 114.955577,95.3342127 107.590172,91.1195308 C100.224199,86.904849 93.2792036,80.7934605 83.7039502,81.4255062 C74.1284124,82.0578366 64.7545458,89.3757799 62.6502258,89.69223 C60.5456213,90.0081104 58.8619947,87.0578046 62.0187591,75.151193" id="Fill-197" fill="#98480C"></path>
|
100 |
+
<path d="M185.720434,16.5505946 C184.070656,14.8025711 181.498709,13.7022592 179.070692,14.0286784 C177.903616,14.1856217 176.976043,14.8481445 176.090283,15.5832999 C176.048469,15.6177647 176.005518,15.6559324 175.961429,15.6963788 C175.861305,15.5878572 175.700025,15.5442777 175.578567,15.6815674 C175.34902,15.9413356 175.140238,16.2090792 174.935154,16.4776772 C174.873429,16.4893554 174.786674,16.5115724 174.662372,16.5511642 C174.356878,16.6480076 174.099172,16.7568141 173.812452,16.9066365 C173.408825,17.1176982 173.3983,17.7021766 173.629554,18.0425527 C173.622158,18.0499583 173.615047,18.0576488 173.607652,18.0647697 C172.616078,19.0201014 171.715812,20.0537623 170.67446,20.9606723 C168.4575,22.892983 165.955243,24.3960496 163.455829,25.9238967 C161.02838,27.4075946 158.920932,29.2550249 156.558905,30.8150582 C154.870158,31.9304663 153.189945,33.0270755 151.879509,34.5321359 C151.568327,35.664634 151.319723,36.8136525 151.244629,38.0259041 C151.102692,40.3233714 151.274212,42.7031556 151.66902,44.9672974 C151.87126,46.1274244 152.125269,47.3066353 152.478265,48.4513813 C153.198763,47.7583813 153.762532,46.8306784 154.555278,46.2011963 C155.710976,45.2834626 157.161927,44.6930027 158.468665,44.0233591 C161.407545,42.5171593 164.362354,41.3356698 166.92918,39.1772012 C169.350656,37.1406414 170.972558,34.6845218 172.220985,31.8042851 C172.311723,31.5949324 172.605269,31.5607524 172.782478,31.6567413 C174.904434,32.8066143 177.843029,33.4346723 180.243456,33.1857277 C181.317518,33.0746427 182.715847,32.7812641 183.659634,32.2246994 C184.464612,31.7501667 184.945607,31.1676821 185.517909,30.4897783 C185.721856,30.2485243 186.127758,30.3915107 186.203705,30.6712173 C186.609892,32.1665933 186.35702,33.559999 186.215083,35.1009485 C186.081963,36.5430607 185.476665,37.7912012 184.91062,39.1028597 C183.644558,42.0366451 182.280078,44.9015009 180.943758,47.8062333 C178.706603,52.6694811 177.194496,57.8964614 174.59638,62.5711494 C175.141945,62.4800027 175.68182,62.3657845 176.210603,62.2179559 C177.224078,61.9351162 178.564949,61.5967339 179.664896,60.9883295 C179.404914,61.3970656 179.135545,61.8001051 178.860203,62.1985872 C179.992007,60.5636427 181.008896,58.8443874 181.776896,57.0106291 C182.816825,54.526311 183.064576,51.8266587 183.685234,49.2229953 C184.354532,46.4148215 185.26902,43.6781408 186.133732,40.9260792 C186.988487,38.205634 188.129963,35.4851889 188.644238,32.675306 C189.599687,27.4574404 189.609927,20.6712814 185.720434,16.5505946" id="Fill-199" fill="#FF5B0C"></path>
|
101 |
+
<path d="M176.210716,62.2179843 C175.681934,62.3658129 175.141774,62.4800312 174.59621,62.5711779 C174.352156,63.0103912 174.10213,63.4464714 173.837028,63.8751459 C172.534556,65.9837686 171.172068,67.4959498 168.70565,68.1017908 C167.306183,68.4455848 165.870023,68.5489794 164.480796,68.9580004 C163.822592,69.1522568 163.190841,69.413734 162.558805,69.6769202 C163.562894,69.8700374 164.594859,69.9472273 165.621703,69.9500756 C170.137259,69.9637476 175.268352,67.0715478 177.941845,63.4800818 C178.222592,63.1023925 178.497081,62.719861 178.76645,62.3327723 C178.798023,62.2880534 178.829028,62.2436194 178.860032,62.1986157 C179.135374,61.8001335 179.404743,61.3970941 179.66501,60.988358 C178.564779,61.5967624 177.224192,61.9351446 176.210716,62.2179843" id="Fill-201" fill="#FFBC00"></path>
|
102 |
+
<path d="M151.556551,49.1158979 C151.902151,48.94984 152.201387,48.7174158 152.478151,48.4513813 C152.125156,47.3066353 151.871147,46.1274244 151.669191,44.9672974 C151.274382,42.7031556 151.102578,40.3233714 151.244516,38.0259041 C151.319609,36.8136525 151.568213,35.664634 151.87968,34.5321359 L151.87968,34.5324207 C151.746276,34.6850915 151.618844,34.8440286 151.493689,35.0055292 C151.462969,35.0456908 151.432249,35.0855674 151.402098,35.1260138 C151.277796,35.2917869 151.156338,35.4606932 151.041138,35.6364355 C147.981653,40.3151112 146.636231,46.74238 147.648853,52.3849324 C148.597476,50.9462382 150.102471,49.8143097 151.556551,49.1158979" id="Fill-203" fill="#FFBC00"></path>
|
103 |
+
<path d="M158.072092,56.8795772 C161.309355,59.8723232 165.58939,62.9277326 170.175488,62.8941222 C171.639239,62.8835834 173.139684,62.8152233 174.596324,62.571121 C177.194724,57.8964329 178.706546,52.6694527 180.943701,47.8064896 C182.280021,44.9014724 183.644501,42.0366166 184.910564,39.1028312 C185.476608,37.7911727 186.08219,36.543317 186.215026,35.10092 C186.356964,33.5599705 186.609835,32.1665649 186.203648,30.6711888 C186.127701,30.3914822 185.721799,30.2484958 185.517852,30.4900346 C184.945835,31.1676536 184.464555,31.7501382 183.659577,32.2246709 C182.716075,32.7815205 181.317461,33.0746142 180.243399,33.1856993 C177.842972,33.4346438 174.904377,32.8065858 172.782421,31.6567128 C172.605212,31.5607239 172.31195,31.5949039 172.220928,31.8042566 C170.972786,34.6844933 169.350599,37.1406129 166.929408,39.1771727 C164.362297,41.3356413 161.407772,42.5171308 158.468892,44.0233306 C157.16187,44.6929742 155.710919,45.2834342 154.555221,46.2011678 C153.762759,46.8306499 153.198706,47.7586376 152.478208,48.4513528 C152.819541,49.5579311 153.253604,50.6317535 153.827612,51.6224046 C154.961408,53.5789261 156.415204,55.3477424 158.072092,56.8795772" id="Fill-205" fill="#E43500"></path>
|
104 |
+
<path d="M168.705707,68.1018477 C171.172124,67.4960068 172.534613,65.9835407 173.837084,63.8752028 C174.102187,63.4465284 174.352213,63.0104482 174.596267,62.5712349 C173.139627,62.8150524 171.639182,62.8836973 170.175431,62.8942361 C165.589333,62.9278465 161.309298,59.8721523 158.072036,56.8796911 C156.415147,55.3478564 154.961636,53.5790401 153.827556,51.6225185 C153.253547,50.6318674 152.819484,49.558045 152.478151,48.4514667 C152.201387,48.7172164 151.902151,48.9499254 151.556551,49.1159834 C150.102471,49.8143952 148.597476,50.9463237 147.648853,52.384733 C147.764053,53.0278872 147.908551,53.661357 148.086044,54.2805851 C149.280711,58.4437121 152.128569,61.9198206 155.146809,65.0225123 C156.333511,66.2424544 157.570276,67.4353372 159.013831,68.3351264 C160.110649,69.0190117 161.313564,69.4374322 162.558862,69.6769772 C163.190613,69.4135062 163.822649,69.1523138 164.480569,68.9580573 C165.869796,68.5487515 167.30624,68.4456418 168.705707,68.1018477" id="Fill-207" fill="#FFAD00"></path>
|
105 |
+
<path d="M190.532096,17.1511376 C189.704363,16.5743497 188.106069,15.7184249 187.071829,15.6722819 C186.382052,15.641235 185.635669,16.1490932 185.040896,16.4231031 C184.33718,16.7478133 183.675278,17.1303448 183.004274,17.5177184 C181.578069,18.341457 180.134514,19.102817 178.836309,20.1259391 C177.813163,20.9323028 176.692167,21.7759798 176.326372,23.0870686 C176.271189,23.284743 176.356523,23.443965 176.485376,23.5302695 C176.213732,24.3238158 175.984754,25.1373004 175.644274,25.9103386 C175.170958,26.9844459 174.710158,28.0602621 174.250212,29.1377874 C174.034034,29.6436518 173.8207,30.0666296 174.288612,30.4753657 C175.035847,31.1287739 176.462336,31.4480723 177.369998,31.7875938 C178.292167,32.1322424 179.405198,32.7218478 180.400469,32.434166 C181.305856,32.1724039 182.415189,31.3973719 183.128292,30.7815618 C184.45494,29.6359613 184.756452,28.1112473 184.315847,26.6044779 C185.273856,26.5865334 186.402532,26.0575975 187.21462,25.8898306 C188.664149,25.5901857 189.649749,25.4326727 190.385323,24.0774348 C191.419278,22.1733226 192.757589,18.7023411 190.532096,17.1511376" id="Fill-209" fill="#FF5B0C"></path>
|
106 |
+
<path d="M187.427385,15.8179173 C187.407474,15.8011121 187.387847,15.7900036 187.367936,15.7771861 C187.370212,14.9463266 187.431652,14.0906867 187.472327,13.2791959 C187.508167,12.5642637 187.564772,11.7194475 187.10454,11.109334 C186.686407,10.5547631 185.680043,10.0417779 185.047438,9.78685191 C184.238194,9.46128718 183.38742,9.20579149 182.552576,9.4963217 C180.283563,10.2861651 178.022514,11.2033291 175.78422,12.0660899 C173.978852,12.7622231 171.794318,13.5643143 170.986212,15.4544697 C169.956523,17.8630221 169.164629,20.4416201 168.443563,22.9584092 C168.224825,23.7209086 167.915634,24.3982428 168.30134,25.137101 C168.683065,25.8671293 169.416647,26.3937866 170.111545,26.7919838 C171.557092,27.6202798 174.269554,28.1589 175.660487,26.9070566 C176.13494,26.4798063 176.536576,25.8990307 176.924843,25.3849062 C177.598123,24.4933772 178.059492,23.2432428 179.120185,22.7977631 C180.520789,22.209297 182.052807,21.7914462 183.496647,21.3095079 C184.54454,20.960302 185.704505,20.6219197 186.524843,19.8440393 C187.405483,19.0089074 188.626887,16.8233797 187.427385,15.8179173" id="Fill-211" fill="#FF5B0C"></path>
|
107 |
+
<path d="M183.835705,8.21308964 C183.810105,7.1435397 184.039367,5.95549901 183.671296,4.92041393 C183.086763,3.27635475 180.603563,3.19090469 179.171954,3.29572343 C176.847189,3.46633872 174.625678,4.552409 172.490069,5.44137448 C170.548736,6.24916239 168.07862,7.31330049 166.774727,9.03967657 C165.320363,10.9645816 164.730994,13.4078837 163.739705,15.5683461 C162.953785,17.281335 161.556594,18.90688 163.011243,20.6739873 C164.263083,22.1944287 166.49142,22.8609392 168.405163,22.6381994 C170.42102,22.4034965 171.561643,20.0655829 172.744363,18.6596445 C173.768647,17.4411266 174.462976,16.061393 175.975936,15.4085545 C177.371989,14.8061316 178.793927,14.3452709 180.246869,13.9083363 C181.55446,13.515266 182.806016,12.9561377 183.362958,11.9344398 C183.367509,11.9694744 183.372345,12.0047937 183.376612,12.0395434 C183.413874,12.3471636 183.818923,12.2534534 183.847652,11.9868492 C183.984469,10.7153523 183.86614,9.48373206 183.835705,8.21308964" id="Fill-213" fill="#FF5B0C"></path>
|
108 |
+
<path d="M167.984327,14.3258737 C167.176789,12.6140242 166.499243,10.8819514 164.921429,9.71128557 C163.037838,8.31332256 160.615509,7.39501924 158.364985,6.81082565 C157.325625,6.54108829 156.248718,6.38357534 155.178069,6.30211295 C154.120789,6.22178989 153.213696,6.63365919 152.236914,6.98258027 C152.222407,6.98742244 152.212167,6.99653711 152.198514,7.00223379 C152.179172,6.98485894 152.160967,6.96577509 152.138496,6.95153342 C151.777252,6.72480592 151.525803,7.26684414 151.812238,7.51151615 C151.837554,7.5331635 150.634923,10.8207122 150.5695,11.0491487 C150.099029,12.6906444 150.481038,14.2731795 151.109376,15.8121351 C151.734869,17.3439699 152.821163,18.8675445 154.025785,19.9889342 C155.278478,21.1556123 156.942194,22.4142917 158.660807,22.716785 C162.589269,23.4077911 166.093909,20.8665063 168.57142,18.0717196 C169.604807,16.9067504 168.554638,15.5349921 167.984327,14.3258737" id="Fill-215" fill="#FF5B0C"></path>
|
109 |
+
<path d="M186.746254,24.2847651 C186.020068,23.5330894 184.820281,23.3094951 183.851748,23.0770709 C181.437099,22.4974346 179.025294,21.6679994 176.716743,20.7525444 C174.681828,19.945611 172.088263,18.7780783 169.97797,19.9894753 C169.178396,20.4483422 167.555072,22.315426 168.863801,22.9617133 C168.819143,23.2063853 168.77477,23.4237133 168.765383,23.5185629 C168.647623,24.6766961 168.484068,25.7431128 168.673508,26.9018157 C169.014556,28.9905 170.065294,30.7222879 171.533312,32.2051313 C174.421561,35.1226813 177.776299,37.46914 182.083356,36.1406763 C185.964885,34.9438058 187.252565,29.8882953 187.274183,26.2785999 C187.279019,25.5007195 187.313721,24.871807 186.746254,24.2847651" id="Fill-217" fill="#FF5B0C"></path>
|
110 |
+
<path d="M170.360718,13.552038 C167.83798,12.6174991 167.83798,9.60509963 167.836274,7.30136597 C167.837696,7.06751763 167.83798,6.8319603 167.83798,6.59241529 C167.666745,6.79778027 167.525945,7.01197509 167.409892,7.23272109 C166.196736,9.60509963 167.83798,12.0697642 166.563954,14.6084856 C166.432825,14.8579998 166.246229,15.0727642 165.947847,15.2314165 C165.797376,15.3988986 165.642638,15.5566964 165.48534,15.702816 C165.289358,15.877419 165.076594,16.0449011 164.854158,16.2001354 C164.186567,16.6664079 163.43222,17.025583 162.772309,17.1645818 C161.344683,17.4650811 159.067136,15.4869122 157.939314,14.7509023 C156.985003,14.1276866 156.488647,12.865874 155.709838,12.0355842 C155.279474,11.5767174 154.890069,10.6233795 155.052203,10.3826952 C154.60534,10.3297162 154.430123,10.607144 154.338247,10.9822698 C154.123492,11.8609813 154.743865,12.492742 155.257003,13.098583 C156.057998,14.0442303 156.865536,14.9443043 157.132914,16.1952932 C157.507243,17.9453105 156.921287,18.2828382 156.171776,19.7807778 C155.385572,21.3527741 158.185643,22.5345485 159.19798,22.6595904 C160.104789,22.77153 161.15638,22.7490281 162.05238,22.5598986 C162.4799,22.4698912 162.878976,22.2850343 163.293412,22.155435 C164.165234,21.8831342 164.416398,21.96716 165.284807,22.3032636 C166.801749,22.8903055 168.954994,23.6485324 169.914994,21.8349973 C170.356736,20.9995805 170.709163,20.0533635 171.055616,19.1461687 C171.125305,18.9647297 171.19414,18.7847149 171.262407,18.6081181 C171.543154,17.491001 171.760754,16.3573635 171.472327,15.3521859 C171.414585,15.1510935 171.336932,14.9554128 171.2351,14.7659985 C171.112505,14.5387014 170.952078,14.3233672 170.744149,14.1239837 C170.634638,13.9394116 170.508914,13.7497125 170.360718,13.552038" id="Fill-219" fill="#E43500"></path>
|
111 |
+
<path d="M185.897643,15.9350408 C183.624932,16.2124687 181.374692,17.6981604 179.334656,18.6270026 C178.351616,19.0744761 177.357767,19.4658374 176.816754,20.4678818 C176.336043,21.3588411 176.361643,22.5508694 176.750194,23.4814206 C176.758727,23.6708349 176.929678,23.8659459 177.147847,23.8405957 C177.160363,23.8391715 177.172594,23.8377473 177.185109,23.8363232 C177.377963,23.8141062 176.563314,23.0587276 176.540558,22.9029237 C176.304469,21.2731062 177.152114,20.5063343 178.71542,19.5498633 C179.667172,18.9676635 180.535296,18.3772036 181.559296,17.9075131 C182.324167,17.5563133 183.093874,17.2484083 183.878087,16.951042 C184.479687,16.7231752 185.535545,16.5565476 185.961927,16.0660642 C186.010283,16.0105217 185.972736,15.9259261 185.897643,15.9350408" id="Fill-221" fill="#E43500"></path>
|
112 |
+
<path d="M184.857372,25.3331519 C183.932928,25.3337216 183.216412,24.8646007 183.250261,23.9104084 C183.257088,23.7141581 182.99227,23.7107401 182.970937,23.900724 C182.865408,24.8398202 182.435612,24.9973332 181.567772,24.930967 C181.081941,24.8936538 180.528697,24.7270261 180.068466,24.54929 C178.825728,24.0693455 177.694208,23.3991322 176.863061,22.3358486 C176.699221,22.1264959 176.38235,21.6656353 176.614741,21.4084306 C176.307541,21.1871149 175.761692,20.9791864 175.53499,20.8342062 C175.081586,20.5695958 174.646955,20.2813443 174.257835,19.9284355 C173.44091,19.1887228 172.962475,18.1277179 172.480057,17.1513085 C172.192199,16.5676846 171.893817,15.9866242 171.600555,15.4075576 C171.370155,14.9526784 171.603968,14.412634 171.851435,13.9993406 C170.887737,13.5823443 169.780679,11.9476846 169.076395,11.3503887 C168.828644,11.1404663 168.320341,10.5901679 167.953408,10.651692 C167.615204,10.7083739 167.93435,11.0407746 167.829106,11.3233295 C167.563719,12.0345588 167.356359,12.7195835 167.021568,13.4234072 C166.757319,13.9788326 166.238492,14.4428264 165.905408,14.9583751 C164.988644,16.3785551 164.156928,17.1780829 162.35099,17.2005847 C161.064732,17.2165354 159.958528,16.159803 158.848341,15.6735921 C158.74651,15.6291581 159.228359,17.8679497 159.317675,18.5623739 C159.419506,19.3527869 159.925248,21.4582764 161.198706,22.0985822 C161.410901,22.2053948 162.077639,22.4768412 162.334492,22.489089 C162.820324,22.3686044 163.261212,22.0695292 164.362297,22.0644022 C166.049337,22.8551001 167.157532,22.855385 167.404146,22.9547919 C169.171968,25.1146846 169.71099,27.6801803 172.901888,27.7240446 C173.099292,27.7650607 173.299826,27.7775933 173.496092,27.7864232 C174.084608,27.8134824 174.631879,27.808925 174.923435,28.443819 C174.906937,28.6226945 174.899541,28.7987216 174.917746,28.9664885 C175.074475,30.4422111 177.678848,31.4260261 178.892857,31.5903751 C179.519772,31.6755403 180.635932,31.8216599 181.217621,31.4798597 C181.867577,31.0978979 182.218012,30.1468387 182.468608,29.4888732 C182.809088,28.5933566 183.109177,27.6479941 183.219257,26.6915231 C183.277852,26.1808165 183.085852,25.9341507 183.717604,25.7176772 C184.019684,25.6137129 184.54107,25.7011568 184.884395,25.634221 C185.039417,25.6040286 185.018937,25.3331519 184.857372,25.3331519" id="Fill-223" fill="#B2270D"></path>
|
113 |
+
<path d="M183.575723,16.7948109 C181.558158,17.8373016 177.982407,18.5348589 176.594603,20.5634434 C175.972238,21.4734866 175.665038,22.6555457 175.498638,23.712563 C175.272505,25.1455605 175.20566,28.2149268 175.2287,27.9055975 C175.324558,26.6378035 176.109909,24.5419983 176.271189,23.2807554 C176.429625,22.0411598 176.78262,21.1809625 177.60694,20.1848996 C179.07638,18.4083928 181.709198,18.0401031 183.642283,16.9303916 C183.721074,16.8848182 183.661625,16.7503768 183.575723,16.7948109" id="Fill-225" fill="#8E1926"></path>
|
114 |
+
<path d="M178.521828,10.7810349 C177.085952,11.4079535 175.583232,11.8295072 174.162432,12.4928845 C173.262165,12.9132988 172.140032,13.1841755 171.600156,14.0927945 C170.798023,15.4431903 170.29541,17.0339856 169.91141,18.5068598 C169.555001,19.8743456 168.773916,20.8236958 168.647054,22.2259313 C168.631979,22.3917044 169.775445,19.8826058 170.087481,18.6512704 C170.418574,17.3458783 171.100103,16.0812174 171.608405,14.8336465 C172.155392,13.491226 173.449045,13.1807575 174.645419,12.6028302 C175.935374,11.9798993 177.34309,11.6309782 178.577294,10.893829 C178.643285,10.8545219 178.594645,10.7491335 178.521828,10.7810349" id="Fill-227" fill="#8E1926"></path>
|
115 |
+
<path d="M166.550158,6.27294599 C164.474852,5.31049346 162.534087,3.90768829 160.571136,2.74044044 C158.989909,1.7999201 157.228629,0.880192602 155.463367,1.89619383 C153.903758,2.79370432 152.761998,4.57220493 152.054869,6.17838126 C151.685945,7.01579186 151.130425,8.35678816 151.522674,9.28420617 C151.861732,10.0857277 153.000647,10.8750015 153.673358,11.356655 C154.398407,11.8756217 155.196558,12.3547117 155.983616,12.8181359 C156.344007,13.0892974 156.69302,13.3433689 156.995954,13.5812049 C158.541056,14.7940261 160.175758,16.2706032 162.14838,16.6893085 C164.179598,17.1205465 165.378532,15.9074404 166.58742,14.4499472 C167.780665,13.011253 168.073074,12.12656 167.961856,10.2355502 C167.847509,8.28785845 167.965269,6.9294873 166.550158,6.27294599" id="Fill-229" fill="#FF5B0C"></path>
|
116 |
+
<path d="M64.0106951,104.172512 C64.0106951,104.172512 73.7554773,102.004074 85.5670329,101.905522 C97.3788729,101.806969 119.525717,106.242397 119.525717,106.242397 C119.525717,106.242397 98.6585884,103.778302 89.6027307,103.67975 C80.5471573,103.581198 64.0106951,104.172512 64.0106951,104.172512" id="Fill-231" fill="#FFAD00"></path>
|
117 |
+
<path d="M119.1457,113.970615 C118.699406,113.416329 118.96394,112.417987 119.054677,111.717297 C119.185806,110.70215 119.513202,109.72631 119.603086,108.704897 C119.671353,107.935847 119.470251,106.915288 119.987371,106.353027 C120.810837,105.456655 121.490375,104.980414 121.379442,103.606092 C121.368917,103.477347 121.352704,103.364838 121.332793,103.260019 C120.716402,102.78805 119.947548,102.447104 119.363015,102.237467 C119.19178,102.175943 119.015708,102.120685 118.837646,102.068561 C117.938233,101.932695 117.043655,101.764358 116.150784,101.587762 C116.036437,101.577792 115.922375,101.567538 115.807744,101.559563 C113.310891,101.052844 110.748615,100.91413 108.243513,100.40086 C107.950251,100.34076 107.655566,100.285218 107.360882,100.23053 C107.375957,100.32367 107.435691,100.411114 107.525006,100.445294 C107.975566,101.233429 108.255744,102.107583 107.854677,103.008511 C107.522162,103.755914 106.865095,103.80576 106.462891,104.348653 C105.959708,105.027981 106.272313,106.608522 106.288526,107.379567 C106.304171,108.137794 106.328064,108.896305 106.351957,109.653963 C106.367317,110.133907 106.240455,110.900964 106.41226,111.354419 C106.572402,111.777112 106.855708,111.750907 107.189077,112.049413 C107.991495,112.766908 108.075691,114.15832 107.423744,114.98861 C109.554233,115.145553 111.684722,115.326707 113.785913,115.711233 C115.085255,115.949353 116.333682,116.418474 117.552242,116.919212 C118.339584,117.242498 119.889237,118.358475 120.966713,118.150547 C121.286144,117.163884 120.849237,116.096043 120.311068,115.235845 C119.985095,114.71517 119.51178,114.425494 119.1457,113.970615" id="Fill-235" fill="#FFAD00"></path>
|
118 |
+
<path d="M69.23264,114.130549 C68.6301867,113.671397 68.0740978,113.506194 68.0743822,112.463418 C67.97056,111.874098 68.2075022,111.371082 68.7849244,110.954085 C68.8770844,110.90367 68.96896,110.853254 69.0608356,110.802839 C69.07648,110.754132 69.1433244,110.745017 69.1547022,110.679791 C69.3091556,109.79054 68.7980089,108.56775 68.6560711,107.673657 C68.5442844,106.970973 68.3869867,106.279967 68.2641067,105.579561 C68.19328,105.176237 68.2348089,104.404053 67.9918933,104.056556 C67.8701511,103.882523 67.5973689,103.867712 67.4326756,103.744379 C66.2004622,102.823227 66.8558222,101.38852 67.4144711,100.357708 C67.4230044,100.342612 67.4269867,100.327231 67.4284089,100.312135 C66.91584,100.428062 66.4046933,100.550255 65.8961067,100.68726 C64.7554844,100.994026 63.6797156,101.440075 62.5635556,101.812922 C62.3197867,101.8941 62.0290844,101.968442 61.7528889,102.072406 C61.6849067,102.786483 61.8433422,103.694533 62.2444089,104.245116 C62.4105244,104.473268 62.6531556,104.563845 62.8155733,104.768355 C63.2322844,105.292164 63.4072178,106.186541 63.5568356,106.858749 C63.7331911,107.651155 63.8995911,108.533 63.9382756,109.343067 C63.9877689,110.378721 63.5138844,110.998804 63.1933156,111.829379 C62.8909511,112.612671 63.1367111,113.694469 63.6452978,114.343319 C63.6561067,114.356991 63.6680533,114.367815 63.6788622,114.381202 C64.1962667,114.451841 64.7571911,114.406553 65.2583822,114.37693 C66.5821867,114.29917 67.8801067,114.174698 69.2073244,114.131688 C69.2155733,114.131403 69.2243911,114.130834 69.23264,114.130549" id="Fill-237" fill="#FFAD00"></path>
|
119 |
+
<path d="M155.021824,10.811626 C155.021824,10.811626 158.926962,17.0078948 162.419655,16.980266 C163.90474,16.9529219 166.187406,15.7959281 167.617308,11.6376433 C168.057344,8.77364205 167.699797,7.09369383 166.57226,6.46050888 C165.445006,5.82703909 162.756437,4.10579001 162.756437,4.10579001 C162.756437,4.10579001 167.259762,6.59808348 167.562411,6.59808348 C167.864775,6.59808348 170.985131,5.22205265 171.027797,5.27617102 C171.069895,5.3302894 168.304811,6.40525117 167.919957,7.6445619 C167.53482,8.88358779 168.854926,9.70988989 167.892366,12.60152 C166.929806,15.4931501 165.032277,17.2557 165.032277,17.2557 L164.42698,21.4689577 C164.42698,21.4689577 164.262002,18.0267444 163.547193,17.7513104 C162.8321,17.4758763 160.173682,16.9241538 158.937486,15.832102 C155.539228,12.8316655 155.021824,10.811626 155.021824,10.811626" id="Fill-239" fill="#8E1926"></path>
|
120 |
+
<path d="M15.8159929,85.8816699 C15.5992462,84.4159165 14.1664996,83.7548179 12.7627662,83.7382975 C12.7641884,83.7351644 12.7670329,83.7326009 12.7684551,83.7294677 C12.8810951,83.508152 12.8549262,83.3594689 12.8498062,83.1105244 C12.8404196,82.6374159 12.8682951,81.8760559 12.8031573,81.4277279 C12.7505351,81.0637106 12.7189618,81.0802309 12.4154596,80.8506551 C12.1881884,80.6791853 11.5772018,80.2630435 11.2554951,80.2473777 C10.7830329,80.2240213 10.4846507,80.5510102 10.0198684,80.6219338 C9.90808178,80.4080238 9.54171733,80.4313801 9.56589511,80.7196317 C9.59633067,81.083649 9.54683733,81.7584196 9.77439289,82.0523678 C9.84095289,82.1381027 9.89300622,82.1494961 9.97492622,82.2073173 C9.98772622,82.2110201 9.99995733,82.2175713 10.0124729,82.2215589 C9.50929067,82.3927439 8.737024,82.4309116 8.32969956,82.531173 C7.39160178,82.762173 6.38637511,82.9518721 5.52507733,83.4053271 C5.48895289,83.4241261 5.50943289,83.4970435 5.55124622,83.4802383 C6.51551289,83.0965676 7.63337956,82.9515873 8.64628622,82.7325503 C9.19412622,82.6143444 9.96297956,82.5795947 10.5549084,82.3588487 C10.5816462,82.4052766 10.5770951,82.478194 10.5372729,82.5815885 C10.6223218,82.7066305 10.5873351,82.9475996 10.6325618,83.1110941 C10.7139129,83.3136107 10.8009529,83.5141335 10.8931129,83.711808 C11.138304,84.0140164 11.115264,84.1367797 10.8242773,84.0803826 C10.7036729,84.211406 10.1316551,84.3304665 9.993984,84.392845 C9.62420622,84.5608968 9.28145067,84.7711039 8.94210844,84.9918499 C8.77599289,85.1000867 8.84909511,85.4455898 9.07409067,85.3718179 C9.27149511,85.3068758 10.3492551,84.8705109 10.5039929,84.9659301 C10.313984,84.8485787 10.8609707,85.9676896 10.7597084,85.725866 C11.1072996,86.5555861 11.5464818,87.4673382 11.998464,88.2529091 C12.044544,88.3332322 12.0965973,88.3998832 12.1509262,88.4605528 C12.1051307,88.6183506 12.1844907,88.8043469 12.390144,88.8351089 C13.2190151,88.9595811 14.0390684,88.6553789 14.6756551,88.2577513 C14.7021084,88.070046 14.704384,88.2759806 14.7075129,88.2734171 C15.5028196,87.7721101 15.984384,87.0207192 15.8159929,85.8816699" id="Fill-241" fill="#B2270D"></path>
|
121 |
+
<path d="M6.19377778,77.082991 C5.07733333,77.069319 3.00629333,76.8710748 1.89468444,76.9690576 C1.72344889,76.9838689 1.66030222,77.1658776 1.75502222,77.3006038 C1.92824889,77.5458455 2.08213333,77.8039047 2.26844444,78.0403165 C2.36401778,78.1613708 2.47153778,78.2656199 2.57763556,78.3764201 C2.73578667,78.5413387 3.41816889,79.1685422 3.64942222,79.1713905 C3.85763556,79.1742388 3.91480889,78.7706297 4.11960889,78.7458492 C4.35057778,78.7179355 4.37617778,78.5954571 4.60686222,78.5641254 C5.06794667,78.5017469 5.38737778,78.3299922 5.84476444,78.2453967 C5.89511111,78.2359972 5.94545778,78.2265977 5.99580444,78.2166285 C6.03562667,78.2092228 6.07573333,78.2015323 6.11584,78.1932721 C6.19776,78.1773215 6.26602667,78.0793387 6.26318222,77.9973067 C6.23331556,77.141097 7.03488,77.0935298 6.19377778,77.082991" id="Fill-243" fill="#B2270D"></path>
|
122 |
+
<path d="M13.2720924,77.8576813 C12.8027591,77.1823409 12.5288391,76.2933755 12.2799502,75.5063804 C12.0242347,74.6983076 11.9064747,74.0315123 11.8387769,73.2057799 C11.812608,72.8864815 11.7827413,72.5871215 11.6601458,72.2894704 C11.6211769,72.194336 11.5042702,72.211426 11.454208,72.2823496 C11.2337636,72.5956665 11.1933724,72.8981597 10.8958436,73.1895444 C10.4242347,73.6515444 9.81211022,73.544447 9.15618133,73.4900438 C8.18167467,73.409151 6.69431467,73.4686813 6.19141689,72.5623409 C6.18601244,72.5321486 6.18259911,72.5019562 6.17691022,72.471479 C6.16752356,72.423627 6.142208,72.3985617 6.11205689,72.3880228 C6.11063467,72.3846048 6.10864356,72.3814716 6.10750578,72.3780536 C6.09015467,72.3296319 6.03383467,72.3566911 6.02643911,72.3974223 C5.98462578,72.4204938 5.95191467,72.4669217 5.95845689,72.5287306 C6.14334578,74.2422891 6.18032356,75.9253705 6.17577244,77.6491831 C6.17321244,78.4726369 6.15586133,79.3513483 6.249728,80.1696751 C6.28215467,80.4519451 6.23835022,80.737918 6.48183467,80.9461313 C7.03479467,81.4186702 8.60777244,80.773807 9.21477689,80.6262633 C10.0339769,80.4271646 10.9592747,80.0728317 11.5674169,79.4419254 C11.6894436,79.8016702 11.8529991,80.1015999 12.1943324,80.3713372 C12.4466347,80.5707207 13.1190613,80.6293964 13.2783502,80.8193804 C13.6873813,81.3064457 13.2186169,83.003484 13.765888,83.7745284 C13.9004302,83.9639427 14.1552924,83.7970302 14.1669547,83.6104642 C14.2076302,82.9422448 14.1965369,82.2760191 14.2619591,81.6077996 C14.3131591,81.0862694 14.5626169,80.4792891 14.5455502,79.9665888 C14.5156836,79.0875925 13.7254969,78.5093804 13.2720924,77.8576813" id="Fill-245" fill="#B2270D"></path>
|
123 |
+
<path d="M15.149312,84.4778393 C14.5488498,83.804208 14.3264142,83.725594 14.2319787,83.2843868 C14.0900409,82.6204398 14.6990364,80.5659355 14.5582364,79.9518344 C14.4865564,79.6405113 14.6466987,79.2400354 13.5905564,78.2117863 C13.549312,78.1719096 12.2593564,75.250372 12.2573653,75.3936433 C12.2530987,75.6813252 12.3586276,77.7138973 12.4240498,78.1858665 C12.4314453,78.2388455 12.4328676,78.2906852 12.4317298,78.3442339 C12.4175076,78.9509293 12.5287253,79.4676174 11.3397476,79.9552524 C11.1107698,80.0489626 10.8593209,80.0666223 10.6144142,80.0315878 C9.66152533,79.8957222 6.57501867,80.5622327 6.48428089,78.6404608 C6.48086756,78.5735249 6.388992,78.5678282 6.38586311,78.6370428 C6.35884089,79.2408899 6.179072,79.5912351 6.66575644,79.9005644 C6.97807644,80.0993782 7.82173867,80.1198862 8.22621867,80.1728652 C8.59002311,80.2204324 9.86319644,80.0751673 10.0048498,80.5286223 C10.1140764,80.8783979 9.66749867,81.042462 9.396992,81.0789207 C9.35176533,81.0849022 9.30511644,81.0894596 9.26500978,81.1113917 C9.189632,81.1521229 9.18052978,81.2882734 9.29060978,81.2657715 C9.44534756,81.234155 9.59212089,81.210229 9.72495644,81.1791821 C9.94938311,81.1922845 10.9557476,80.9988825 11.1187342,80.998028 C12.0556942,80.9937555 12.6900053,81.886139 12.6004053,82.7770983 C12.561152,83.1647567 12.3830898,83.5327617 12.1447253,83.8358245 C12.0969387,83.8967789 12.0500053,83.9691266 11.9788942,83.9990342 C11.8938453,84.0349232 11.7760853,84.0372018 11.6847787,84.0599885 C11.4794098,84.1115434 11.2783076,84.1799035 11.0823253,84.2605113 C10.9941476,84.29697 11.0163342,84.4299873 11.1164587,84.418594 C11.2441742,84.4040674 11.3607964,84.3855533 11.4720142,84.3647604 C11.7618631,84.3727358 12.2530987,84.2616507 12.410112,84.261081 C13.3089564,84.2582327 15.264512,84.6068689 15.149312,84.4778393" id="Fill-247" fill="#8E1926"></path>
|
124 |
+
<path d="M6.99793067,79.3004771 C6.49019733,77.993376 6.48479289,76.6925412 6.42136178,75.3096744 C6.36703289,74.1310332 6.52802844,72.8883044 6.36959289,71.7278926 C6.33858844,71.4997409 6.04987733,71.5746522 6.02456178,71.76663 C5.83227733,73.2147237 5.93553067,74.6725017 6.00351289,76.1257224 C6.05784178,77.2921158 5.887744,78.6205794 6.883584,79.4164043 C6.95924622,79.4770739 7.02324622,79.3657039 6.99793067,79.3004771" id="Fill-249" fill="#FF5B0C"></path>
|
125 |
+
<path d="M9.96960711,84.9768392 C8.72402489,85.4986543 7.00398933,85.7760821 5.86422044,84.9708577 C5.97543822,85.1730895 6.11168711,85.34342 6.32587378,85.4644742 C6.77074489,85.7156974 7.330816,85.7888996 7.90141156,85.7829181 C8.63158044,85.673542 9.31965156,85.3858602 9.988096,85.0144372 C10.0108516,85.0019046 9.99378489,84.9665852 9.96960711,84.9768392" id="Fill-251" fill="#FF5B0C"></path>
|
126 |
+
<path d="M15.7065387,87.2758162 C15.7489209,87.111752 15.7762276,86.9519604 15.7958542,86.7944475 C15.5708587,87.1422292 15.315712,87.4732058 15.0770631,87.8144364 C14.3090631,88.4931947 13.2045653,88.7982514 12.2115698,88.8372736 C11.2879787,88.8740171 9.40552533,89.2383192 8.698112,88.3470751 C8.39574756,87.965683 8.12694756,87.3789259 7.72673422,86.9422761 C8.11528533,88.165921 8.91286756,89.146318 10.3641031,89.2041392 C11.5533653,89.2514216 12.9514098,88.9096213 14.0954453,88.6319086 C15.0483342,88.4006238 15.4420053,88.2952354 15.7065387,87.2758162" id="Fill-253" fill="#FF5B0C"></path>
|
127 |
+
<path d="M9.11320178,82.2653663 C8.02065067,82.5707079 6.95881956,83.0956561 5.79458844,83.0560642 C4.93983289,83.0272961 4.06857956,82.4607621 3.56824178,81.7295945 C3.59156622,81.8967917 3.62200178,82.0582924 3.67035733,82.2038423 C3.86008178,82.7746487 4.68098844,83.2585809 5.23394844,83.4012825 C5.34232178,83.4291962 5.45410844,83.4471407 5.56731733,83.4596734 C6.85016178,83.4796117 7.960064,82.8054107 9.13681067,82.3736031 C9.19682844,82.3516709 9.18004622,82.2468522 9.11320178,82.2653663" id="Fill-255" fill="#FF5B0C"></path>
|
128 |
+
<path d="M58.3009849,83.0144501 C57.885696,81.543 57.1256604,80.1430432 56.5880604,78.7091911 C55.9406649,76.984524 55.2548693,75.3165388 54.7130027,73.5542737 C54.3096604,72.2420456 53.5860338,71.2234809 52.6155093,70.2658705 C52.5449671,70.1963711 52.4428516,70.1650395 52.3523982,70.2197275 C51.426816,70.7771467 51.7687182,72.2668261 51.966976,73.1247448 C52.0998116,73.699254 52.3117227,74.2290444 52.5668693,74.7354784 C53.113856,77.2485647 53.8448782,79.7078175 54.8927716,82.0773477 C53.9299271,82.7347435 53.0373404,83.4898372 52.0605582,84.1272947 C50.9034382,84.8823884 43.1802027,89.4796017 43.3673671,89.5499556 C45.5871716,90.3828089 48.6930204,89.4457065 50.8476871,88.8418594 C53.2082916,88.180476 56.4333227,87.720185 58.0614827,85.6218163 C58.6463004,84.8687164 58.5456071,83.8817682 58.3009849,83.0144501" id="Fill-257" fill="#944308"></path>
|
129 |
+
</g>
|
130 |
+
</g>
|
131 |
+
</g>
|
132 |
+
</g>
|
133 |
+
</g>
|
134 |
+
</g>
|
135 |
+
</svg>
|
assets/img/plugins-hummingbird-icon.png
ADDED
Binary file
|
assets/img/plugins-hummingbird-icon@2x.png
ADDED
Binary file
|
assets/img/plugins-hummingbird.jpg
ADDED
Binary file
|
assets/img/scanning-free-man.svg
CHANGED
@@ -1,35 +1,37 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"
|
2 |
-
<svg width="
|
3 |
-
<!-- Generator:
|
4 |
-
<title>
|
5 |
-
<desc>Created with
|
6 |
<defs>
|
7 |
-
<rect id="path-1" x="0" y="0" width="
|
8 |
</defs>
|
9 |
-
<g id="
|
10 |
-
<g id="File-Scanning---
|
11 |
-
<g id="
|
12 |
-
<g id="Graphic" transform="translate(30.000000,
|
13 |
-
<
|
14 |
-
<
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
<g
|
19 |
-
<
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
33 |
</g>
|
34 |
</g>
|
35 |
</g>
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="100px" height="126px" viewBox="0 0 100 126" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<!-- Generator: sketchtool 52.3 (67297) - http://www.bohemiancoding.com/sketch -->
|
4 |
+
<title>9B3BDE8D-005F-4EC9-92D1-16AAF8D4A140</title>
|
5 |
+
<desc>Created with sketchtool.</desc>
|
6 |
<defs>
|
7 |
+
<rect id="path-1" x="0" y="0" width="100" height="126"></rect>
|
8 |
</defs>
|
9 |
+
<g id="File-Scanning" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
10 |
+
<g id="File-Scanning---Settings---Free" transform="translate(-440.000000, -723.000000)">
|
11 |
+
<g id="Body" transform="translate(410.000000, 371.000000)">
|
12 |
+
<g id="Graphic-/-File-Scanning---Settings---Upsell" transform="translate(30.000000, 352.000000)">
|
13 |
+
<g id="defender-graphic-filescan-settings-upsell">
|
14 |
+
<mask id="mask-2" fill="white">
|
15 |
+
<use xlink:href="#path-1"></use>
|
16 |
+
</mask>
|
17 |
+
<g id="Mask"></g>
|
18 |
+
<g id="graphic" mask="url(#mask-2)">
|
19 |
+
<g transform="translate(50.000000, 97.096000) scale(-1, 1) translate(-50.000000, -97.096000) ">
|
20 |
+
<path d="M25.3409124,73.6613329 C25.3409124,73.6613329 30.8598905,79.1943448 31.414635,81.7130004 C13.6788686,88.2972773 2.59018248,103.995437 0.159890511,128.096417 C-1.3999635,141.163129 8.98981752,141.724169 8.44456204,143.190464 C7.89967153,144.65676 7.22959854,159.688024 11.0507664,171.883792 C14.8719343,184.079561 15.7343431,194.174625 15.7343431,194.174625 L92.5387226,194.174625 L97.0770438,130.035781 C97.0770438,130.035781 105.389818,110.090949 92.2861679,91.5686094 C82.3963869,77.5897056 77.294562,76.7253322 77.294562,76.7253322 L76.985073,71.2014459 L25.3409124,73.6613329 Z" id="Fill-1" fill="#9F5622"></path>
|
21 |
+
<path d="M28.4724818,148.440693 C28.2316058,138.277735 30.2206569,137.841898 28.9356204,132.68778 C27.6509489,127.533661 23.8764964,121.43596 24.7476642,113.015254 C25.6184672,104.594184 29.6830657,96.1734785 29.6830657,96.1734785 C29.6830657,96.1734785 25.4819708,98.8695351 23.2275912,101.151291 C20.9732117,103.432682 19.9487591,117.079415 17.8480292,120.274093 C16.1739416,122.81976 5.84,133.287877 1.7089781,137.437453 C4.28014599,141.627547 8.80934307,142.209028 8.44474453,143.190209 C8.34766423,143.4512 8.24729927,144.147663 8.16846715,145.174471 C8.18160584,145.186882 13.9392701,150.473139 17.0188321,150.473139 C20.1024088,150.473139 19.2312409,158.894209 19.2312409,166.443971 C19.2312409,173.993367 20.090365,176.316371 21.6932847,178.058624 C23.2958394,179.800876 28.4724818,194.174369 28.4724818,194.174369 L34.0381752,180.962378 C34.0381752,180.962378 28.7133577,165.572662 28.4724818,148.440693" id="Fill-4" fill="#98480C"></path>
|
22 |
+
<path d="M35.0389051,73.1993603 L27.9764964,76.5181454 C29.4808759,78.2603981 31.1250365,80.3972401 31.4148175,81.7131464 C28.5210219,82.7874078 25.8078832,84.1084244 23.2768613,85.6648806 C26.6808759,87.6757899 30.9505839,89.215455 34.0381752,87.7528096 C39.4487591,85.1892562 45.9305109,78.6225004 77.2943796,76.7254782 L76.9852555,71.2012268 L35.0389051,73.1993603 Z" id="Fill-6" fill="#98480C"></path>
|
23 |
+
<path d="M11.9472628,44.4998998 C11.9472628,44.4998998 9.05748175,49.3798864 9.03850365,50.4165505 C9.01916058,51.4532145 8.78631387,52.7924823 13.4501825,53.4663139 C12.5691606,54.5548112 12.154562,60.2812851 12.154562,60.2812851 C12.154562,60.2812851 9.59872263,60.2086456 9.45164234,62.4090015 C9.30456204,64.6093575 10.8071168,65.8325481 13.4501825,66.283716 C14.0202555,66.6308524 13.8020073,68.6118298 13.7264599,68.9301295 C13.6509124,69.2484292 11.6899635,73.4633446 18.3998175,76.1889681 C25.1096715,78.9142265 41.7958029,78.033062 41.7958029,78.033062 L40.005292,51.0305184 L11.9472628,44.4998998 Z" id="Fill-8" fill="#9F5622"></path>
|
24 |
+
<path d="M11.155438,45.9759051 C11.155438,45.9759051 22.5933942,46.0437993 28.805073,63.7335224 C30.5058029,72.3947776 30.3360949,78.4621825 30.3360949,78.4621825 L35.0543431,78.4621825 L33.1598175,54.0388883 C33.1598175,54.0388883 14.3933942,41.6011097 11.155438,45.9759051" id="Fill-10" fill="#98480C"></path>
|
25 |
+
<path d="M66.3005474,1.43924744 C40.9333942,-1.93648116 28.1330292,9.41389523 24.7111314,17.0103796 C21.5439781,24.0418092 15.9417883,39.8779477 13.7436131,46.0826012 C15.7771898,46.6173592 18.9074818,48.2818621 23.2275547,52.7252816 C25.4472628,55.0081327 27.0523723,57.698714 28.2184307,60.5031823 C28.3056569,60.7130702 28.3903285,60.9233232 28.4724453,61.1339412 C35.2330292,61.2569538 55.9826642,60.3119104 72.2144161,42.9415821 C72.8363139,42.2195674 73.7173358,42.7349793 74.3910584,42.9178556 C74.985219,43.0788305 83.8801095,40.5568897 86.5939781,35.1585711 C85.6571168,25.3219433 80.4538321,3.9436672 66.3005474,1.43924744" id="Fill-12" fill="#FF5B0C"></path>
|
26 |
+
<path d="M86.9192701,33.0255618 C84.9845985,18.6575439 79.169635,1.52156002 62.6280292,0.495116595 C39.2054015,-0.958403224 25.3170803,10.1371874 22.5758394,15.1682933 C19.8349635,20.1990342 11.0145255,43.8780474 10.8072263,44.5000459 C10.599927,45.1216793 11.0554015,46.0568671 11.0554015,46.0568671 C11.4345985,45.8871316 12.3210949,45.7090006 13.7437226,46.0827837 C15.9418978,39.8777652 21.5440876,24.0416266 24.7112409,17.0105622 C28.1331387,9.41371272 40.9331387,-1.93629865 66.3006569,1.43906493 C80.4539416,3.94384971 85.6572263,25.3217607 86.5940876,35.1583886 C86.7747445,34.7984764 86.9283942,34.4257883 87.049927,34.0403245 C87.0083212,33.7037737 86.9648905,33.3653978 86.9192701,33.0255618" id="Fill-14" fill="#FFBC00"></path>
|
27 |
+
<path d="M21.6932117,40.6054377 C21.2494161,40.9284827 23.9559854,46.2370057 30.1829927,48.1606746 C30.6278832,48.2709114 39.7629197,41.2723339 40.3789781,37.7221245 C40.310365,37.422806 39.7289781,38.1072233 29.5329927,39.6815656 C25.6326277,40.1604752 21.9282482,40.4342421 21.6932117,40.6054377" id="Fill-17" fill="#1F191A"></path>
|
28 |
+
<path d="M87.0500365,34.040434 C85.1029562,40.2085852 75.024854,43.0897082 74.3909124,42.9177826 C74.1222993,42.8447781 73.8208394,42.7199404 73.5157299,42.6407305 C73.445292,45.0790811 72.7562409,50.0499583 71.0073358,54.171428 C69.0106204,58.8765687 67.164635,61.8989555 61.9409124,61.3656576 C66.9868978,60.6407228 68.3131752,57.9464913 69.1066058,56.6196343 C69.8996715,55.2931423 71.6361679,48.9468601 72.115,44.9396425 C72.2124453,44.1238171 72.2598905,43.4554608 72.2602555,42.8951512 C72.244927,42.9108472 72.2292336,42.924353 72.214635,42.941509 C55.9828832,60.3118374 35.2332482,61.2572459 28.4726642,61.1338682 C30.9306934,67.4319674 31.2485766,74.1936453 31.2982117,78.1691059 C62.3087956,78.5640603 78.8993066,74.8714921 82.0602555,72.539363 C85.2215693,70.2072339 87.6569708,60.6188214 87.8124453,48.1606016 C87.8555109,44.7089483 87.7383577,39.6216289 87.0500365,34.040434" id="Fill-19" fill="#FFBC00"></path>
|
29 |
+
<path d="M73.5156204,42.6407305 C73.5254745,42.2954191 73.5232847,42.0004809 73.509781,41.7665014 C73.400292,39.8789698 71.540438,39.154035 70.8021168,39.1270233 C70.0637956,39.0996466 67.3013869,38.8123739 64.1426277,40.7816706 C64.1426277,40.7816706 67.5886131,39.5646854 69.7627007,39.947594 C71.4944526,40.2523879 72.2608759,40.7024607 72.260146,42.8951512 C72.6262044,42.5118775 73.0740146,42.5261134 73.5156204,42.6407305" id="Fill-21" fill="#D23100"></path>
|
30 |
+
<path d="M72.114927,44.9395695 C71.6364599,48.9467871 69.8995985,55.2930693 69.1065328,56.6195613 C68.3134672,57.9464183 66.9868248,60.6406498 61.9408394,61.3655846 C67.164562,61.8988825 69.0109124,58.8764957 71.0072628,54.171355 C72.7561679,50.0498853 73.445219,45.0790081 73.5156569,42.6406575 C73.0740511,42.5260404 72.6262409,42.5118045 72.2601825,42.8950782 C72.2601825,43.4553878 72.2123723,44.1241091 72.114927,44.9395695" id="Fill-23" fill="#FFAD00"></path>
|
31 |
+
<path d="M43.195073,89.0751404 C45.165146,89.4032956 55.1308394,84.1546363 61.0888686,84.1546363 C67.0468978,84.1546363 74.1155109,85.3394995 75.075,85.1763344 C76.0344891,85.0131693 76.2363139,84.457605 74.2673358,84.1546363 C72.2979927,83.8516676 63.8155109,80.670131 62.6541971,80.1145666 C61.4928832,79.5590023 59.8071168,79.6195961 58.4790146,79.7659701 C57.1505474,79.9127092 54.2220803,80.3671622 54.2220803,81.1749572 C54.2220803,81.9831171 51.445073,84.9624312 49.3242701,85.6694799 C47.2038321,86.3765286 42.114781,88.8951842 43.195073,89.0751404" id="Fill-25" fill="#98480C"></path>
|
32 |
+
<path d="M9.04919708,50.304452 C9.0429927,50.3453346 9.0389781,50.3832969 9.03824818,50.416514 C9.01927007,51.453178 8.78605839,52.7924458 13.449927,53.4662774 C13.449927,53.4662774 14.3747445,53.4764981 15.5794891,52.763609 C16.7769343,52.0547352 9.98715328,50.2285273 9.04919708,50.304452" id="Fill-27" fill="#98480C"></path>
|
33 |
+
<path d="M13.4500365,66.2836065 C13.4500365,66.2836065 10.5157299,65.7200116 10.0978467,64.4417026 C9.6799635,63.1633937 15.4566058,64.1219429 15.5055109,64.1956774 C15.554781,64.269777 15.7208394,65.7159964 13.4500365,66.2836065" id="Fill-29" fill="#98480C"></path>
|
34 |
+
</g>
|
35 |
</g>
|
36 |
</g>
|
37 |
</g>
|
assets/js/scripts.js
CHANGED
@@ -1,12 +1,11 @@
|
|
1 |
jQuery(function ($) {
|
2 |
$('body').on('change', '.toggle-checkbox', function (e) {
|
3 |
if ($(this).prop('checked') == true) {
|
4 |
-
$('label[for="'
|
5 |
} else {
|
6 |
-
$('label[for="'
|
7 |
}
|
8 |
});
|
9 |
-
|
10 |
//blacklist helper
|
11 |
if ($('.blacklist-widget').size() > 0) {
|
12 |
$('.blacklist-widget').submit(function () {
|
@@ -16,7 +15,7 @@ jQuery(function ($) {
|
|
16 |
url: ajaxurl,
|
17 |
data: that.serialize(),
|
18 |
success: function (data) {
|
19 |
-
var parent = that.closest('.
|
20 |
parent.replaceWith(data.data.html);
|
21 |
}
|
22 |
})
|
@@ -26,7 +25,7 @@ jQuery(function ($) {
|
|
26 |
$('body').on('submit', '.toggle-blacklist-widget', function () {
|
27 |
var that = $(this);
|
28 |
var overlay = Defender.createOverlay();
|
29 |
-
var parent = that.closest('.
|
30 |
$.ajax({
|
31 |
type: 'POST',
|
32 |
url: ajaxurl,
|
@@ -48,27 +47,21 @@ jQuery(function ($) {
|
|
48 |
$('body').on('change', '#toggle_blacklist', function () {
|
49 |
$('.toggle-blacklist-widget').submit();
|
50 |
})
|
51 |
-
$('[rel="show-filter"]').click(function () {
|
52 |
-
var target = $($(this).data('target'));
|
53 |
-
if (target.is(':visible')) {
|
54 |
-
target.addClass('wd-hide');
|
55 |
-
} else {
|
56 |
-
target.removeClass('wd-hide')
|
57 |
-
}
|
58 |
-
});
|
59 |
|
60 |
if ($('#activator').size() > 0) {
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
|
|
65 |
}
|
66 |
|
67 |
-
$('.change-one-time-pass-email').click(function(){
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
});
|
73 |
|
74 |
if ($('#requirement').size() > 0) {
|
@@ -83,20 +76,20 @@ jQuery(function ($) {
|
|
83 |
});
|
84 |
}
|
85 |
|
86 |
-
$('body').on('submit', '.activate-picker form', function () {
|
87 |
var that = $(this);
|
88 |
$.ajax({
|
89 |
type: 'POST',
|
90 |
url: ajaxurl,
|
91 |
data: that.serialize(),
|
92 |
beforeSend: function () {
|
93 |
-
that.find('.button').attr('disabled', 'disabled');
|
94 |
},
|
95 |
success: function (data) {
|
96 |
-
that.find('.button').removeAttr('disabled');
|
97 |
if (data.success == 1) {
|
98 |
$('.activate-picker').addClass('wd-hide');
|
99 |
-
|
100 |
$('.activate-progress').removeClass('wd-hide');
|
101 |
//remove skip button
|
102 |
$('.skip-activator').hide();
|
@@ -123,6 +116,11 @@ jQuery(function ($) {
|
|
123 |
})
|
124 |
return false;
|
125 |
})
|
|
|
|
|
|
|
|
|
|
|
126 |
$('body').on('submit', '.skip-activator', function () {
|
127 |
var that = $(this);
|
128 |
$.ajax({
|
@@ -130,7 +128,7 @@ jQuery(function ($) {
|
|
130 |
url: ajaxurl,
|
131 |
data: that.serialize(),
|
132 |
beforeSend: function () {
|
133 |
-
that.find('.button').attr('disabled', 'disabled');
|
134 |
},
|
135 |
success: function (data) {
|
136 |
location.reload();
|
@@ -157,22 +155,26 @@ jQuery(function ($) {
|
|
157 |
$('.wp-defender a[disabled="disabled"]').click(function (e) {
|
158 |
e.preventDefault()
|
159 |
})
|
|
|
|
|
|
|
|
|
160 |
})
|
161 |
window.Defender = window.Defender || {};
|
162 |
|
163 |
//Added extra parameter to allow for some actions to keep modal open
|
164 |
Defender.showNotification = function (type, message, closeModal) {
|
165 |
var jq = jQuery;
|
166 |
-
if (jq('body').find('.
|
167 |
return;
|
168 |
}
|
169 |
-
var div = jq('<div class="
|
170 |
if (type == 'error') {
|
171 |
-
div.addClass('
|
172 |
} else {
|
173 |
-
div.addClass('
|
174 |
}
|
175 |
-
div.html(message); //Decode the message incase it was esc_html
|
176 |
div.hide();
|
177 |
jq('#wp-defender').prepend(div);
|
178 |
var close_modal = (typeof closeModal === 'undefined') ? true : closeModal;
|
@@ -199,6 +201,6 @@ Defender.showNotification = function (type, message, closeModal) {
|
|
199 |
Defender.createOverlay = function () {
|
200 |
var jq = jQuery;
|
201 |
var div = jq('<div class="wd-overlay"/>');
|
202 |
-
div.html('<i class="
|
203 |
return div;
|
204 |
};
|
1 |
jQuery(function ($) {
|
2 |
$('body').on('change', '.toggle-checkbox', function (e) {
|
3 |
if ($(this).prop('checked') == true) {
|
4 |
+
$('label[for="' + $(this).attr('id') + '"]').attr('aria-checked', true);
|
5 |
} else {
|
6 |
+
$('label[for="' + $(this).attr('id') + '"]').attr('aria-checked', false);
|
7 |
}
|
8 |
});
|
|
|
9 |
//blacklist helper
|
10 |
if ($('.blacklist-widget').size() > 0) {
|
11 |
$('.blacklist-widget').submit(function () {
|
15 |
url: ajaxurl,
|
16 |
data: that.serialize(),
|
17 |
success: function (data) {
|
18 |
+
var parent = that.closest('.sui-box');
|
19 |
parent.replaceWith(data.data.html);
|
20 |
}
|
21 |
})
|
25 |
$('body').on('submit', '.toggle-blacklist-widget', function () {
|
26 |
var that = $(this);
|
27 |
var overlay = Defender.createOverlay();
|
28 |
+
var parent = that.closest('.sui-box');
|
29 |
$.ajax({
|
30 |
type: 'POST',
|
31 |
url: ajaxurl,
|
47 |
$('body').on('change', '#toggle_blacklist', function () {
|
48 |
$('.toggle-blacklist-widget').submit();
|
49 |
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
if ($('#activator').size() > 0) {
|
52 |
+
var listen = setInterval(function () {
|
53 |
+
if (SUI.dialogs !== undefined) {
|
54 |
+
SUI.dialogs['activator'].show();
|
55 |
+
clearInterval(listen);
|
56 |
+
}
|
57 |
+
}, 500)
|
58 |
}
|
59 |
|
60 |
+
$('.change-one-time-pass-email').click(function () {
|
61 |
+
WDP.showOverlay("#edit-one-time-password-email", {
|
62 |
+
title: defender_adtools.edit_email_title,
|
63 |
+
class: 'wd-one-time-pass-email'
|
64 |
+
});
|
65 |
});
|
66 |
|
67 |
if ($('#requirement').size() > 0) {
|
76 |
});
|
77 |
}
|
78 |
|
79 |
+
$('body').on('submit', '.activate-picker form:not(.skip-activator)', function () {
|
80 |
var that = $(this);
|
81 |
$.ajax({
|
82 |
type: 'POST',
|
83 |
url: ajaxurl,
|
84 |
data: that.serialize(),
|
85 |
beforeSend: function () {
|
86 |
+
that.find('.sui-button').attr('disabled', 'disabled');
|
87 |
},
|
88 |
success: function (data) {
|
89 |
+
that.find('.sui-button').removeAttr('disabled');
|
90 |
if (data.success == 1) {
|
91 |
$('.activate-picker').addClass('wd-hide');
|
92 |
+
//$('.activate-picker').closest('.box').attr('style', 'padding-bottom:150px !important');
|
93 |
$('.activate-progress').removeClass('wd-hide');
|
94 |
//remove skip button
|
95 |
$('.skip-activator').hide();
|
116 |
})
|
117 |
return false;
|
118 |
})
|
119 |
+
$('body').on('click', '[rel="show-filter"]', function () {
|
120 |
+
var target = $(this).data('target');
|
121 |
+
$(target).toggleClass('sui-open')
|
122 |
+
})
|
123 |
+
|
124 |
$('body').on('submit', '.skip-activator', function () {
|
125 |
var that = $(this);
|
126 |
$.ajax({
|
128 |
url: ajaxurl,
|
129 |
data: that.serialize(),
|
130 |
beforeSend: function () {
|
131 |
+
that.find('.sui-button').attr('disabled', 'disabled');
|
132 |
},
|
133 |
success: function (data) {
|
134 |
location.reload();
|
155 |
$('.wp-defender a[disabled="disabled"]').click(function (e) {
|
156 |
e.preventDefault()
|
157 |
})
|
158 |
+
$('body').on('click', '[rel="input_value"]', function () {
|
159 |
+
var target = $('[name="' + $(this).data('target') + '"]');
|
160 |
+
$(target).val($(this).data('value'));
|
161 |
+
})
|
162 |
})
|
163 |
window.Defender = window.Defender || {};
|
164 |
|
165 |
//Added extra parameter to allow for some actions to keep modal open
|
166 |
Defender.showNotification = function (type, message, closeModal) {
|
167 |
var jq = jQuery;
|
168 |
+
if (jq('body').find('.sui-notice-floating').size() > 0) {
|
169 |
return;
|
170 |
}
|
171 |
+
var div = jq('<div class="sui-notice-floating"/>');
|
172 |
if (type == 'error') {
|
173 |
+
div.addClass('sui-notice-error');
|
174 |
} else {
|
175 |
+
div.addClass('sui-notice-success');
|
176 |
}
|
177 |
+
div.html('<p>' + message + '</p>'); //Decode the message incase it was esc_html
|
178 |
div.hide();
|
179 |
jq('#wp-defender').prepend(div);
|
180 |
var close_modal = (typeof closeModal === 'undefined') ? true : closeModal;
|
201 |
Defender.createOverlay = function () {
|
202 |
var jq = jQuery;
|
203 |
var div = jq('<div class="wd-overlay"/>');
|
204 |
+
div.html('<i class="sui-icon-loader sui-loading" aria-hidden="true"></i>');
|
205 |
return div;
|
206 |
};
|
changelog.txt
CHANGED
@@ -4,12 +4,24 @@ Tested up to: 4.7.4
|
|
4 |
|
5 |
Change Log:
|
6 |
|
7 |
-
2.
|
8 |
----------------------------------------------------------------------
|
9 |
-
- Fix:
|
10 |
-
|
11 |
-
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
- Other minor enhancements and fixes
|
14 |
|
15 |
2.0 - 2018-04-09
|
4 |
|
5 |
Change Log:
|
6 |
|
7 |
+
2.1.1.1 - 2019-20-03
|
8 |
----------------------------------------------------------------------
|
9 |
+
- Fix: Two-Factor Authentication QR code not being displayed on new device registration.
|
10 |
+
|
11 |
+
2.1.1 - 2019-18-02
|
12 |
+
----------------------------------------------------------------------
|
13 |
+
- Fix: Prevent Information Disclosure corrupts htaccess code
|
14 |
+
|
15 |
+
2.1 - 2019-18-02
|
16 |
+
----------------------------------------------------------------------
|
17 |
+
- New: Geo-based IP blocking. Completely block incoming traffic from specific countries to gain full control over who can and can’t access your site.
|
18 |
+
- New: Upgraded design components and improved user experience across the board.
|
19 |
+
- Fix: Corrupt .htaccess rules generated by Defender weren’t able to be re-applied when adding them a second time.
|
20 |
+
- Fix: Users can no longer get past login masking when using double slashes.
|
21 |
+
- Fix: Javascript errors prevented adding recipients to notifications and editing templates.
|
22 |
+
- Fix: Blacklist monitoring could not be enabled on some sites.
|
23 |
+
- Fix: Parse error on installations running PHP 5.3.
|
24 |
+
- Improvement: Removed activation redirection and tooltips on first activation.
|
25 |
- Other minor enhancements and fixes
|
26 |
|
27 |
2.0 - 2018-04-09
|
languages/wpdef-default.pot
CHANGED
@@ -1,260 +1,279 @@
|
|
1 |
-
# Copyright (C)
|
2 |
# This file is distributed under the GNU General Public License (Version 2 - GPLv2).
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: Defender Pro 2.
|
6 |
"Report-Msgid-Bugs-To: https://wpmudev.org\n"
|
7 |
-
"POT-Creation-Date:
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"PO-Revision-Date:
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
|
14 |
-
"X-Generator: grunt-wp-
|
15 |
|
16 |
-
#: app/behavior/blacklist-free.php:
|
17 |
-
#: app/behavior/blacklist.php:
|
18 |
-
#: app/behavior/blacklist.php:
|
19 |
-
|
|
|
20 |
msgstr ""
|
21 |
|
22 |
-
#: app/behavior/blacklist-free.php:25 app/behavior/blacklist.php:
|
23 |
-
#: app/module/audit/behavior/audit-free.php:
|
24 |
-
#: app/module/scan/
|
25 |
-
#: app/module/scan/view/
|
26 |
-
|
27 |
-
#: app/module/scan/view/setting-free.php:29
|
28 |
-
#: app/module/scan/view/setting-free.php:44
|
29 |
-
msgid "Try Defender Pro free today"
|
30 |
msgstr ""
|
31 |
|
32 |
-
#: app/behavior/blacklist-free.php:
|
33 |
-
|
34 |
-
|
|
|
35 |
msgstr ""
|
36 |
|
37 |
-
#: app/behavior/blacklist-free.php:
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
msgid ""
|
40 |
"Automatically check if you’re on Google’s blacklist every 6 hours. If "
|
41 |
"something’s\n"
|
42 |
" wrong, we’ll let you know via email."
|
43 |
msgstr ""
|
44 |
|
45 |
-
#: app/behavior/blacklist
|
46 |
-
|
47 |
-
#: app/module/ip-lockout/view/notification/report-free.php:5
|
48 |
-
#: app/module/scan/view/automation-free.php:5
|
49 |
-
msgid "Upgrade to Pro"
|
50 |
msgstr ""
|
51 |
|
52 |
-
#: app/behavior/blacklist.php:
|
53 |
-
msgid "
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: app/behavior/blacklist.php:
|
57 |
-
|
58 |
-
|
59 |
-
"
|
60 |
-
" from a few minutes up to 12 hours."
|
61 |
msgstr ""
|
62 |
|
63 |
-
#: app/behavior/blacklist.php:
|
64 |
-
msgid "
|
|
|
|
|
|
|
|
|
65 |
msgstr ""
|
66 |
|
67 |
-
#: app/behavior/blacklist.php:
|
68 |
msgid "A WPMU DEV subscription is required for blacklist monitoring"
|
69 |
msgstr ""
|
70 |
|
71 |
-
#: app/behavior/blacklist.php:
|
72 |
msgid "Whoops, it looks like something went wrong. Details: "
|
73 |
msgstr ""
|
74 |
|
75 |
-
#: app/behavior/blacklist.php:
|
76 |
-
#: app/behavior/
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
|
|
|
|
|
|
81 |
msgstr ""
|
82 |
|
83 |
-
#: app/behavior/blacklist.php:
|
84 |
-
msgid "
|
85 |
msgstr ""
|
86 |
|
87 |
-
#: app/behavior/blacklist.php:
|
88 |
-
msgid "
|
|
|
|
|
|
|
89 |
msgstr ""
|
90 |
|
91 |
-
#: app/behavior/blacklist.php:
|
92 |
-
msgid "
|
|
|
|
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: app/behavior/blacklist.php:
|
96 |
msgid "Your domain is currently clean."
|
97 |
msgstr ""
|
98 |
|
99 |
-
#: app/behavior/blacklist.php:
|
100 |
msgid "Something wrong happened, please try again."
|
101 |
msgstr ""
|
102 |
|
103 |
-
#: app/behavior/report-free.php:
|
104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: app/behavior/report-free.php:
|
108 |
msgid ""
|
109 |
"Get tailored security reports delivered to your inbox so you don’t have to "
|
110 |
-
"worry
|
111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
msgstr ""
|
113 |
|
114 |
-
#: app/behavior/report-free.php:
|
115 |
-
#: app/
|
116 |
-
|
|
|
117 |
msgstr ""
|
118 |
|
119 |
-
#: app/behavior/report-free.php:
|
120 |
-
#: app/module/
|
121 |
-
#: app/module/
|
122 |
-
#: app/
|
123 |
-
|
124 |
-
msgid "AUDIT LOGGING"
|
125 |
msgstr ""
|
126 |
|
127 |
-
#: app/behavior/report-free.php:
|
128 |
-
#: app/module/
|
129 |
-
#: app/module/
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
msgstr ""
|
132 |
|
133 |
-
#: app/behavior/report-free.php:
|
134 |
msgid ""
|
135 |
-
"
|
136 |
-
"plugins
|
137 |
-
"
|
138 |
-
"tools – <a target='_blank' href=\"%s\">Try\n"
|
139 |
-
" it all absolutely FREE</a>"
|
140 |
msgstr ""
|
141 |
|
142 |
-
#: app/behavior/report-free.php:
|
143 |
msgid "Scan reports are active scheduled to send %s"
|
144 |
msgstr ""
|
145 |
|
146 |
-
#: app/behavior/report-free.php:
|
147 |
msgid "Audit reports are active scheduled to send %s"
|
148 |
msgstr ""
|
149 |
|
150 |
-
#: app/behavior/report-free.php:
|
151 |
msgid "Lockout reports are active scheduled to send %s"
|
152 |
msgstr ""
|
153 |
|
154 |
-
#: app/behavior/report-free.php:
|
155 |
-
#: app/behavior/utils.php:
|
156 |
msgid "daily"
|
157 |
msgstr ""
|
158 |
|
159 |
-
#: app/behavior/report-free.php:
|
160 |
-
#: app/behavior/utils.php:
|
161 |
msgid "weekly"
|
162 |
msgstr ""
|
163 |
|
164 |
-
#: app/behavior/report-free.php:
|
165 |
-
#: app/behavior/utils.php:
|
166 |
msgid "monthly"
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: app/behavior/report.php:
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
|
|
|
|
|
|
|
|
175 |
msgid "Daily"
|
176 |
msgstr ""
|
177 |
|
178 |
-
#: app/behavior/report.php:
|
179 |
-
#: app/behavior/report.php:
|
180 |
-
#: app/module/ip-lockout/view/notification/report.php:
|
181 |
-
#: app/module/scan/view/automation.php:
|
182 |
msgid "Weekly"
|
183 |
msgstr ""
|
184 |
|
185 |
-
#: app/behavior/report.php:
|
186 |
-
#: app/behavior/report.php:
|
187 |
-
#: app/module/ip-lockout/view/notification/report.php:
|
188 |
-
#: app/module/scan/view/automation.php:
|
189 |
msgid "Monthly"
|
190 |
msgstr ""
|
191 |
|
192 |
-
#: app/behavior/
|
193 |
-
#: app/behavior/report.php:161
|
194 |
-
msgid "Inactive"
|
195 |
-
msgstr ""
|
196 |
-
|
197 |
-
#: app/behavior/report.php:76
|
198 |
-
msgid ""
|
199 |
-
"Get a daily, weekly or monthly summary of lockouts that have occurred "
|
200 |
-
"within the report period."
|
201 |
-
msgstr ""
|
202 |
-
|
203 |
-
#: app/behavior/report.php:100
|
204 |
-
msgid "To activate this report you must first enable the Audit Logging module."
|
205 |
-
msgstr ""
|
206 |
-
|
207 |
-
#: app/behavior/utils.php:76 free/utils.php:78
|
208 |
msgid ""
|
209 |
"WPMU DEV Dashboard will be required for this action. Please visit <a "
|
210 |
"href=\"%s\">here</a> and install the WPMU DEV Dashboard"
|
211 |
msgstr ""
|
212 |
|
213 |
-
#: app/behavior/utils.php:
|
214 |
-
#: app/module/audit/view/table.php:78
|
215 |
-
#: free/utils.php:179 free/utils.php:188
|
216 |
msgid "Guest"
|
217 |
msgstr ""
|
218 |
|
219 |
-
#: app/behavior/utils.php:
|
220 |
msgid "WordPress Core Integrity"
|
221 |
msgstr ""
|
222 |
|
223 |
-
#: app/behavior/utils.php:
|
224 |
msgid "Plugins & Themes vulnerability"
|
225 |
msgstr ""
|
226 |
|
227 |
-
#: app/behavior/utils.php:
|
228 |
-
#: app/module/scan/
|
229 |
-
#: app/module/scan/view/setting-free.php:
|
230 |
#: app/view/settings.php:98
|
231 |
msgid "Suspicious Code"
|
232 |
msgstr ""
|
233 |
|
234 |
-
#: app/behavior/utils.php:
|
235 |
-
#: app/module/ip-lockout/controller/main.php:
|
236 |
msgid "Never"
|
237 |
msgstr ""
|
238 |
|
239 |
-
#: app/behavior/utils.php:
|
240 |
msgid "Please upgrade to 5.3 or later"
|
241 |
msgstr ""
|
242 |
|
243 |
-
#: app/controller/dashboard.php:
|
244 |
-
msgid "Get Secure"
|
245 |
-
msgstr ""
|
246 |
-
|
247 |
-
#: app/controller/dashboard.php:116
|
248 |
-
msgid ""
|
249 |
-
"Enable security tweaks, activate monitoring and start protecting your login "
|
250 |
-
"are and files here."
|
251 |
-
msgstr ""
|
252 |
-
|
253 |
-
#: app/controller/dashboard.php:147 app/view/dashboard.php:4
|
254 |
msgid "Dashboard"
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: app/controller/dashboard.php:
|
258 |
#: app/controller/requirement.php:69 app/module/ip-lockout/view/locked.php:75
|
259 |
msgid "Defender"
|
260 |
msgstr ""
|
@@ -263,27 +282,28 @@ msgstr ""
|
|
263 |
msgid "Defender Pro"
|
264 |
msgstr ""
|
265 |
|
266 |
-
#: app/controller/dashboard.php:
|
267 |
msgid "QUICK SETUP"
|
268 |
msgstr ""
|
269 |
|
270 |
-
#: app/controller/dashboard.php:
|
|
|
271 |
msgid "Skip"
|
272 |
msgstr ""
|
273 |
|
274 |
-
#: app/controller/dashboard.php:
|
275 |
msgid "Activating File Scanning..."
|
276 |
msgstr ""
|
277 |
|
278 |
-
#: app/controller/dashboard.php:
|
279 |
msgid "Activating Audit Module..."
|
280 |
msgstr ""
|
281 |
|
282 |
-
#: app/controller/dashboard.php:
|
283 |
msgid "Activating IP Lockouts Module..."
|
284 |
msgstr ""
|
285 |
|
286 |
-
#: app/controller/dashboard.php:
|
287 |
msgid "Activating Blacklist Monitoring..."
|
288 |
msgstr ""
|
289 |
|
@@ -333,7 +353,7 @@ msgid "Module"
|
|
333 |
msgstr ""
|
334 |
|
335 |
#: app/controller/requirement.php:45
|
336 |
-
#: app/module/scan/behavior/pro/vuln-result.php:
|
337 |
msgid "Version"
|
338 |
msgstr ""
|
339 |
|
@@ -349,7 +369,7 @@ msgstr ""
|
|
349 |
msgid "Defender%s"
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
353 |
#: app/module/advanced-tools/controller/main.php:486
|
354 |
#: app/module/advanced-tools/view/layouts/layout.php:6
|
355 |
msgid "Advanced Tools"
|
@@ -361,82 +381,74 @@ msgid ""
|
|
361 |
"aggressive of hackers and bots."
|
362 |
msgstr ""
|
363 |
|
364 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
365 |
-
#: app/module/advanced-tools/view/layouts/layout.php:14
|
366 |
#: app/module/advanced-tools/view/main-free.php:4
|
367 |
#: app/module/advanced-tools/view/main.php:4
|
368 |
msgid "Two-Factor Authentication"
|
369 |
msgstr ""
|
370 |
|
371 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
372 |
msgid ""
|
373 |
"Add an extra layer of security to your WordPress account to ensure that "
|
374 |
"you’re the only person who can log in, even if someone else knows your "
|
375 |
-
"password"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
msgstr ""
|
377 |
|
378 |
#: app/module/advanced-tools/behavior/at-widget.php:44
|
379 |
msgid ""
|
380 |
-
"
|
381 |
-
"
|
382 |
-
"
|
383 |
msgstr ""
|
384 |
|
385 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
386 |
msgid ""
|
387 |
"Two-factor authentication is currently inactive. Configure and save your "
|
388 |
"settings to finish setup. "
|
389 |
msgstr ""
|
390 |
|
391 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
392 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
393 |
msgid "Finish Setup"
|
394 |
msgstr ""
|
395 |
|
396 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
397 |
-
|
398 |
-
|
399 |
-
"authentication via their user profile in order to enable and use this "
|
400 |
-
"security feature."
|
401 |
-
msgstr ""
|
402 |
-
|
403 |
-
#: app/module/advanced-tools/behavior/at-widget.php:68
|
404 |
-
#: app/module/advanced-tools/behavior/at-widget.php:105
|
405 |
-
#: app/module/advanced-tools/view/disabled.php:19
|
406 |
-
#: app/module/advanced-tools/view/mask-login/disabled.php:19
|
407 |
-
#: app/module/audit/behavior/audit.php:43 app/module/audit/view/new.php:15
|
408 |
-
#: app/module/ip-lockout/behavior/widget.php:37
|
409 |
-
msgid "Activate"
|
410 |
-
msgstr ""
|
411 |
-
|
412 |
-
#: app/module/advanced-tools/behavior/at-widget.php:75
|
413 |
-
#: app/module/advanced-tools/view/layouts/layout.php:20
|
414 |
#: app/module/advanced-tools/view/mask-login/disabled.php:4
|
415 |
#: app/module/advanced-tools/view/mask-login/enabled.php:4
|
416 |
msgid "Mask Login Area"
|
417 |
msgstr ""
|
418 |
|
419 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
420 |
msgid "Change the location of WordPress’s default login area."
|
421 |
msgstr ""
|
422 |
|
423 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
|
|
424 |
msgid ""
|
425 |
-
"
|
426 |
-
"
|
427 |
msgstr ""
|
428 |
|
429 |
-
#: app/module/advanced-tools/behavior/at-widget.php:
|
430 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
431 |
msgid "Masking is currently active at <strong>%s</strong>"
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: app/module/advanced-tools/component/mask-api.php:
|
435 |
msgid "The URL is invalid"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: app/module/advanced-tools/component/mask-api.php:
|
439 |
-
#: app/module/advanced-tools/component/mask-api.php:
|
440 |
msgid ""
|
441 |
"A page already exists at this URL, please pick a unique page for your new "
|
442 |
"login area."
|
@@ -465,8 +477,8 @@ msgid "Your token is invalid"
|
|
465 |
msgstr ""
|
466 |
|
467 |
#: app/module/advanced-tools/controller/main.php:246
|
468 |
-
#: app/module/advanced-tools/controller/main.php:
|
469 |
-
#: app/module/advanced-tools/controller/main.php:
|
470 |
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:3
|
471 |
msgid "Your OTP code"
|
472 |
msgstr ""
|
@@ -491,92 +503,96 @@ msgstr ""
|
|
491 |
msgid "Whoops, the passcode you entered was incorrect or expired."
|
492 |
msgstr ""
|
493 |
|
494 |
-
#: app/module/advanced-tools/controller/main.php:
|
|
|
495 |
msgid "Edit Email"
|
496 |
msgstr ""
|
497 |
|
498 |
-
#: app/module/advanced-tools/controller/main.php:
|
499 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
500 |
-
#: app/module/audit/controller/main.php:
|
501 |
-
#: app/module/ip-lockout/controller/main.php:
|
502 |
-
#: app/module/scan/controller/main.php:
|
503 |
msgid "Your settings have been updated."
|
504 |
msgstr ""
|
505 |
|
506 |
-
#: app/module/advanced-tools/controller/main.php:
|
507 |
-
#: app/module/advanced-tools/controller/main.php:
|
508 |
msgid "%s variable was not found in mail body."
|
509 |
msgstr ""
|
510 |
|
511 |
-
#: app/module/advanced-tools/controller/main.php:
|
512 |
msgid "Email settings has been saved."
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: app/module/advanced-tools/controller/main.php:
|
516 |
msgid "Test email has been sent to your email."
|
517 |
msgstr ""
|
518 |
|
519 |
-
#: app/module/advanced-tools/controller/main.php:
|
520 |
msgid "Test email failed."
|
521 |
msgstr ""
|
522 |
|
523 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
524 |
msgid "This feature is disabled"
|
525 |
msgstr ""
|
526 |
|
527 |
-
#: app/module/advanced-tools/controller/mask-login.php:
|
528 |
msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
532 |
msgid ""
|
533 |
-
"This email sends a temporary passcode when the user can
|
534 |
"phone."
|
535 |
msgstr ""
|
536 |
|
537 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
538 |
#: app/view/settings.php:275
|
539 |
msgid "Subject"
|
540 |
msgstr ""
|
541 |
|
542 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
543 |
msgid "Sender"
|
544 |
msgstr ""
|
545 |
|
546 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
547 |
msgid "Body"
|
548 |
msgstr ""
|
549 |
|
550 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
551 |
-
#: app/module/scan/view/
|
552 |
-
#: app/view/
|
|
|
553 |
msgid "Available variables"
|
554 |
msgstr ""
|
555 |
|
556 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
557 |
#: app/module/advanced-tools/view/login/disabled.php:37
|
558 |
-
#: app/module/scan/controller/main.php:
|
559 |
-
#: app/module/scan/view/
|
|
|
|
|
560 |
msgid "Cancel"
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
564 |
-
#: app/module/scan/view/setting.php:
|
565 |
msgid "Save Template"
|
566 |
msgstr ""
|
567 |
|
568 |
-
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:
|
569 |
msgid "Send Test"
|
570 |
msgstr ""
|
571 |
|
572 |
#: app/module/advanced-tools/view/disabled.php:4
|
573 |
-
#: app/module/advanced-tools/view/layouts/layout.php:
|
574 |
#: app/module/advanced-tools/view/login/disabled.php:5
|
575 |
#: app/module/advanced-tools/view/login/enabled.php:5
|
576 |
msgid "Two Factor Authentication"
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: app/module/advanced-tools/view/disabled.php:
|
580 |
msgid ""
|
581 |
"Beef up your website’s security with two-factor authentication. Add an "
|
582 |
"extra step in the login process so that users are required to enter a "
|
@@ -584,14 +600,24 @@ msgid ""
|
|
584 |
"protection against brute force attacks."
|
585 |
msgstr ""
|
586 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
587 |
#: app/module/advanced-tools/view/login/disabled.php:1
|
588 |
#: app/module/advanced-tools/view/login/enabled.php:1
|
589 |
msgid "Security"
|
590 |
msgstr ""
|
591 |
|
592 |
#: app/module/advanced-tools/view/login/disabled.php:28
|
593 |
-
#: app/module/ip-lockout/view/detect-404/disabled.php:
|
594 |
-
#: app/module/ip-lockout/view/login-lockouts/disabled.php:18
|
595 |
msgid "Enable"
|
596 |
msgstr ""
|
597 |
|
@@ -620,17 +646,17 @@ msgid ""
|
|
620 |
"and then use your phone’s camera to scan the barcode below."
|
621 |
msgstr ""
|
622 |
|
623 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
624 |
msgid "3. Enter passcode"
|
625 |
msgstr ""
|
626 |
|
627 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
628 |
msgid ""
|
629 |
"Enter the 6 digit passcode that is shown on your device into the input "
|
630 |
"field below and hit “Verify”."
|
631 |
msgstr ""
|
632 |
|
633 |
-
#: app/module/advanced-tools/view/login/disabled.php:
|
634 |
msgid "Verify"
|
635 |
msgstr ""
|
636 |
|
@@ -672,295 +698,301 @@ msgstr ""
|
|
672 |
msgid "Lost your device?"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: app/module/advanced-tools/view/main-free.php:
|
676 |
-
#: app/module/advanced-tools/view/main.php:
|
677 |
msgid ""
|
678 |
"Configure your two-factor authentication settings. Our recommendations are "
|
679 |
"enabled by default."
|
680 |
msgstr ""
|
681 |
|
682 |
-
#: app/module/advanced-tools/view/main-free.php:
|
683 |
-
#: app/module/advanced-tools/view/main.php:
|
684 |
msgid ""
|
685 |
"<strong>Two-factor authentication is now active.</strong> User roles with "
|
686 |
"this feature enabled must visit their <a href='%s'>Profile page</a> to "
|
687 |
"complete setup and sync their account with the Authenticator app."
|
688 |
msgstr ""
|
689 |
|
690 |
-
#: app/module/advanced-tools/view/main-free.php:
|
691 |
-
#: app/module/advanced-tools/view/main.php:
|
692 |
msgid ""
|
693 |
"<strong>Two-factor authentication is currently inactive.</strong> Configure "
|
694 |
"and save your settings to complete setup."
|
695 |
msgstr ""
|
696 |
|
697 |
-
#: app/module/advanced-tools/view/main-free.php:
|
698 |
-
#: app/module/advanced-tools/view/main-free.php:
|
699 |
-
#: app/module/advanced-tools/view/main.php:
|
700 |
-
#: app/module/advanced-tools/view/main.php:
|
701 |
msgid "User Roles"
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: app/module/advanced-tools/view/main-free.php:
|
705 |
-
#: app/module/advanced-tools/view/main.php:
|
706 |
msgid ""
|
707 |
"Choose the user roles you want to enable two-factor authentication for. "
|
708 |
"Users with those roles will then be required to use the Google "
|
709 |
"Authenticator app to login."
|
710 |
msgstr ""
|
711 |
|
712 |
-
#: app/module/advanced-tools/view/main-free.php:
|
713 |
-
#: app/module/advanced-tools/view/main.php:
|
714 |
msgid "User role"
|
715 |
msgstr ""
|
716 |
|
717 |
#: app/module/advanced-tools/view/main-free.php:84
|
718 |
-
#: app/module/advanced-tools/view/main.php:
|
719 |
msgid "Lost Phone"
|
720 |
msgstr ""
|
721 |
|
722 |
-
#: app/module/advanced-tools/view/main-free.php:
|
723 |
-
#: app/module/advanced-tools/view/main.php:
|
724 |
msgid ""
|
725 |
"If a user is unable to access their phone, you can allow an option to send "
|
726 |
"the one time password to their registered email."
|
727 |
msgstr ""
|
728 |
|
729 |
-
#: app/module/advanced-tools/view/main-free.php:
|
730 |
-
#: app/module/advanced-tools/view/main.php:
|
731 |
msgid "Enable lost phone option"
|
732 |
msgstr ""
|
733 |
|
734 |
-
#: app/module/advanced-tools/view/main-free.php:
|
735 |
-
#: app/module/advanced-tools/view/main.php:
|
736 |
msgid "Force Authentication"
|
737 |
msgstr ""
|
738 |
|
739 |
-
#: app/module/advanced-tools/view/main-free.php:
|
740 |
-
#: app/module/advanced-tools/view/main.php:
|
741 |
msgid ""
|
742 |
"By default, two-factor authentication is optional for users. This setting "
|
743 |
"forces users to activate two-factor."
|
744 |
msgstr ""
|
745 |
|
746 |
-
#: app/module/advanced-tools/view/main-free.php:
|
747 |
-
#: app/module/advanced-tools/view/main.php:
|
748 |
msgid "Force users to log in with two-factor authentication"
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: app/module/advanced-tools/view/main-free.php:
|
752 |
-
#: app/module/advanced-tools/view/main.php:
|
753 |
msgid "Note: Users will be forced to set up two-factor when they next login."
|
754 |
msgstr ""
|
755 |
|
756 |
-
#: app/module/advanced-tools/view/main-free.php:
|
757 |
-
#: app/module/advanced-tools/view/main.php:
|
758 |
msgid "Custom warning message"
|
759 |
msgstr ""
|
760 |
|
761 |
-
#: app/module/advanced-tools/view/main-free.php:
|
762 |
-
#: app/module/advanced-tools/view/main.php:
|
763 |
msgid ""
|
764 |
"Note: This is shown in the users Profile area indicating they must use "
|
765 |
"two-factor authentication."
|
766 |
msgstr ""
|
767 |
|
768 |
-
#: app/module/advanced-tools/view/main-free.php:
|
769 |
-
#: app/module/scan/behavior/scan.php:137 app/module/scan/behavior/scan.php:152
|
770 |
-
#: app/module/scan/view/layouts/layout.php:62
|
771 |
-
#: app/module/scan/view/layouts/layout.php:78
|
772 |
-
#: app/module/scan/view/setting-free.php:30
|
773 |
-
#: app/module/scan/view/setting-free.php:45
|
774 |
-
msgid "Pro Feature"
|
775 |
-
msgstr ""
|
776 |
-
|
777 |
-
#: app/module/advanced-tools/view/main-free.php:145
|
778 |
-
#: app/module/advanced-tools/view/main.php:142
|
779 |
#: app/module/advanced-tools/view/main.php:159
|
|
|
780 |
msgid "Custom Graphic"
|
781 |
msgstr ""
|
782 |
|
783 |
-
#: app/module/advanced-tools/view/main-free.php:
|
784 |
-
#: app/module/advanced-tools/view/main.php:
|
785 |
msgid ""
|
786 |
"By default, Defender’s icon appears above the login fields. You can upload "
|
787 |
"your own branding, or turn this feature off."
|
788 |
msgstr ""
|
789 |
|
790 |
-
#: app/module/advanced-tools/view/main-free.php:
|
791 |
-
#: app/module/advanced-tools/view/main.php:
|
792 |
msgid "Enable custom graphics above login fields"
|
793 |
msgstr ""
|
794 |
|
795 |
-
#: app/module/advanced-tools/view/main-free.php:
|
796 |
-
#: app/module/advanced-tools/view/main.php:
|
797 |
msgid "Emails"
|
798 |
msgstr ""
|
799 |
|
800 |
-
#: app/module/advanced-tools/view/main-free.php:
|
801 |
-
#: app/module/advanced-tools/view/main.php:
|
802 |
msgid "Customize the default copy for emails the two-factor feature sends to users."
|
803 |
msgstr ""
|
804 |
|
805 |
-
#: app/module/advanced-tools/view/main-free.php:
|
806 |
-
#: app/module/advanced-tools/view/main.php:
|
807 |
msgid "Email"
|
808 |
msgstr ""
|
809 |
|
810 |
-
#: app/module/advanced-tools/view/main-free.php:
|
811 |
-
#: app/module/advanced-tools/view/main.php:
|
812 |
msgid "Lost phone one time password"
|
813 |
msgstr ""
|
814 |
|
815 |
-
#: app/module/advanced-tools/view/main-free.php:
|
816 |
-
#: app/module/advanced-tools/view/main.php:
|
817 |
msgid "App Download"
|
818 |
msgstr ""
|
819 |
|
820 |
-
#: app/module/advanced-tools/view/main-free.php:
|
821 |
-
#: app/module/advanced-tools/view/main.php:
|
822 |
msgid "Need the app? Here’s links to the official Google Authenticator apps."
|
823 |
msgstr ""
|
824 |
|
825 |
-
#: app/module/advanced-tools/view/main-free.php:
|
826 |
-
#: app/module/advanced-tools/view/main.php:
|
827 |
msgid "Active Users"
|
828 |
msgstr ""
|
829 |
|
830 |
-
#: app/module/advanced-tools/view/main-free.php:
|
831 |
-
#: app/module/advanced-tools/view/main.php:
|
832 |
msgid ""
|
833 |
"Here’s a quick link to see which of your users have enabled two-factor "
|
834 |
"verification."
|
835 |
msgstr ""
|
836 |
|
837 |
-
#: app/module/advanced-tools/view/main-free.php:
|
838 |
-
#: app/module/advanced-tools/view/main.php:
|
839 |
msgid "<a href=\"%s\">View users</a> who have enabled this feature."
|
840 |
msgstr ""
|
841 |
|
842 |
-
#: app/module/advanced-tools/view/main-free.php:
|
843 |
-
#: app/module/advanced-tools/view/main-free.php:
|
844 |
-
#: app/module/advanced-tools/view/main.php:
|
845 |
-
#: app/module/advanced-tools/view/main.php:
|
846 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
847 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
848 |
-
#: app/module/audit/view/settings.php:
|
|
|
|
|
|
|
|
|
849 |
msgid "Deactivate"
|
850 |
msgstr ""
|
851 |
|
852 |
-
#: app/module/advanced-tools/view/main-free.php:
|
853 |
-
#: app/module/advanced-tools/view/main.php:
|
|
|
854 |
msgid "Disable two-factor authentication on your website."
|
855 |
msgstr ""
|
856 |
|
857 |
-
#: app/module/advanced-tools/view/main-free.php:
|
858 |
-
#: app/module/advanced-tools/view/main.php:
|
859 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
860 |
msgstr ""
|
861 |
|
862 |
-
#: app/module/advanced-tools/view/main.php:
|
863 |
-
msgid "
|
864 |
msgstr ""
|
865 |
|
866 |
-
#: app/module/advanced-tools/view/mask-login/disabled.php:
|
867 |
msgid ""
|
868 |
"Change the location of WordPress’s default login area, making it harder for "
|
869 |
"automated bots to find and also more convenient for your users."
|
870 |
msgstr ""
|
871 |
|
872 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
873 |
msgid ""
|
874 |
"Change your default WordPress login URL to hide your login area from "
|
875 |
"hackers and bots."
|
876 |
msgstr ""
|
877 |
|
878 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
879 |
-
msgid ""
|
880 |
-
"Masking is currently inactive. Choose your URL and save your settings to "
|
881 |
-
"finish setup. "
|
882 |
-
msgstr ""
|
883 |
-
|
884 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:33
|
885 |
msgid "Masking URL"
|
886 |
msgstr ""
|
887 |
|
888 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
889 |
msgid ""
|
890 |
-
"Choose
|
891 |
-
"
|
892 |
msgstr ""
|
893 |
|
894 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
895 |
msgid ""
|
896 |
-
"You can
|
897 |
-
"
|
898 |
-
"harder for bots to guess."
|
899 |
msgstr ""
|
900 |
|
901 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
902 |
-
msgid "New Login
|
903 |
msgstr ""
|
904 |
|
905 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
906 |
msgid "I.e. dashboard"
|
907 |
msgstr ""
|
908 |
|
909 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
910 |
msgid ""
|
911 |
-
"Users will login at <
|
912 |
"Reset emails have hardcoded URLs in them. We will update them automatically "
|
913 |
"to match your new login URL."
|
914 |
msgstr ""
|
915 |
|
916 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
917 |
msgid "Redirect traffic"
|
918 |
msgstr ""
|
919 |
|
920 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
921 |
msgid ""
|
922 |
"With this feature you can send visitors and bots who try to visit the "
|
923 |
-
"default
|
924 |
msgstr ""
|
925 |
|
926 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
927 |
msgid "Enable 404 redirection"
|
928 |
msgstr ""
|
929 |
|
930 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
931 |
msgid "Redirection URL"
|
932 |
msgstr ""
|
933 |
|
934 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:
|
935 |
msgid ""
|
936 |
-
"Visitors who visit the default login URLs will be redirected to "
|
937 |
-
"
|
938 |
-
msgstr ""
|
939 |
-
|
940 |
-
#: app/module/advanced-tools/view/mask-login/enabled.php:88
|
941 |
-
#: app/view/settings.php:187 app/view/settings.php:326
|
942 |
-
msgid "Save Settings"
|
943 |
msgstr ""
|
944 |
|
945 |
-
#: app/module/audit/behavior/audit-free.php:
|
946 |
-
#: app/module/audit/
|
947 |
msgid ""
|
948 |
-
"Track and log events when changes are made to your website
|
949 |
-
"visibility
|
950 |
msgstr ""
|
951 |
|
952 |
-
#: app/module/audit/behavior/audit-free.php:
|
953 |
msgid ""
|
954 |
-
"Audit
|
955 |
-
"
|
956 |
-
" 24/7 support and lots of handy site management "
|
957 |
-
"tools – <a target='_blank' href=\"%s\">Try it all absolutely FREE</a>"
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: app/module/audit/behavior/audit.php:
|
961 |
msgid "Please hold on, Defender will update Audit information soon..."
|
962 |
msgstr ""
|
963 |
|
|
|
|
|
|
|
|
|
|
|
|
|
964 |
#: app/module/audit/component/audit-api.php:66
|
965 |
#: app/module/audit/component/audit-api.php:133
|
966 |
msgid ""
|
@@ -1191,7 +1223,7 @@ msgid "plugin"
|
|
1191 |
msgstr ""
|
1192 |
|
1193 |
#: app/module/audit/component/core-audit.php:284
|
1194 |
-
#: app/module/scan/behavior/pro/vuln-result.php:
|
1195 |
msgid "WordPress"
|
1196 |
msgstr ""
|
1197 |
|
@@ -1504,15 +1536,15 @@ msgstr ""
|
|
1504 |
|
1505 |
#: app/module/audit/component/options-audit.php:215
|
1506 |
#: app/module/audit/view/layouts/layout.php:71
|
1507 |
-
#: app/module/audit/view/layouts/layout.php:
|
1508 |
-
#: app/module/audit/view/settings.php:
|
1509 |
-
#: app/module/ip-lockout/view/layouts/layout.php:
|
1510 |
-
#: app/module/ip-lockout/view/layouts/layout.php:
|
1511 |
#: app/module/ip-lockout/view/settings.php:3
|
1512 |
-
#: app/module/scan/view/layouts/layout.php:
|
1513 |
-
#: app/module/scan/view/layouts/layout.php:
|
1514 |
-
#: app/module/scan/view/setting-free.php:
|
1515 |
-
#: app/view/settings.php:6 free/main-activator.php:161 main-activator.php:
|
1516 |
msgid "Settings"
|
1517 |
msgstr ""
|
1518 |
|
@@ -1621,97 +1653,90 @@ msgstr ""
|
|
1621 |
msgid "password reset"
|
1622 |
msgstr ""
|
1623 |
|
1624 |
-
#: app/module/audit/controller/main-free.php:36
|
1625 |
-
#: app/module/audit/controller/main.php:513
|
1626 |
-
#: app/module/audit/view/pro-feature.php:22
|
1627 |
-
#: app/module/ip-lockout/view/pro-feature.php:22
|
1628 |
-
#: app/module/scan/view/pro-feature.php:22 app/view/activator.php:33
|
1629 |
-
#: app/view/pro-feature.php:22
|
1630 |
-
msgid "Audit Logging"
|
1631 |
-
msgstr ""
|
1632 |
-
|
1633 |
#: app/module/audit/controller/main.php:84
|
1634 |
msgid "Summary"
|
1635 |
msgstr ""
|
1636 |
|
1637 |
-
#: app/module/audit/controller/main.php:85 app/module/audit/view/table.php:
|
1638 |
-
#: app/module/
|
1639 |
-
#: app/module/ip-lockout/controller/main.php:148
|
1640 |
msgid "Date / Time"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
-
#: app/module/audit/controller/main.php:86 app/module/audit/view/table.php:
|
1644 |
-
#: app/module/audit/view/table.php:96
|
1645 |
msgid "Context"
|
1646 |
msgstr ""
|
1647 |
|
1648 |
-
#: app/module/audit/controller/main.php:87 app/module/audit/view/table.php:
|
1649 |
-
#: app/module/
|
1650 |
-
#: app/module/ip-lockout/
|
1651 |
-
#: app/module/
|
1652 |
msgid "Type"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:
|
1656 |
-
#: app/module/
|
1657 |
-
#: app/module/ip-lockout/controller/main.php:150
|
1658 |
msgid "IP address"
|
1659 |
msgstr ""
|
1660 |
|
1661 |
-
#: app/module/audit/controller/main.php:89 app/module/audit/view/table.php:
|
1662 |
-
#: app/module/audit/view/table.php:129
|
1663 |
msgid "User"
|
1664 |
msgstr ""
|
1665 |
|
1666 |
-
#: app/module/audit/controller/main.php:
|
1667 |
-
#: app/module/audit/view/layouts/layout.php:
|
1668 |
msgid "at %s"
|
1669 |
msgstr ""
|
1670 |
|
1671 |
-
#: app/module/audit/controller/main.php:
|
1672 |
-
#: app/module/audit/view/layouts/layout.php:
|
1673 |
msgid "%s at %s"
|
1674 |
msgstr ""
|
1675 |
|
1676 |
-
#: app/module/audit/controller/main.php:
|
1677 |
msgid "Hi {USER_NAME},"
|
1678 |
msgstr ""
|
1679 |
|
1680 |
-
#: app/module/audit/controller/main.php:
|
1681 |
msgid ""
|
1682 |
"It’s WP Defender here, reporting from the frontline with a quick update on "
|
1683 |
"what’s been happening at <a href=\"%s\">%s</a>."
|
1684 |
msgstr ""
|
1685 |
|
1686 |
-
#: app/module/audit/controller/main.php:
|
1687 |
msgid "Event Type"
|
1688 |
msgstr ""
|
1689 |
|
1690 |
-
#: app/module/audit/controller/main.php:
|
1691 |
msgid "Action Summaries"
|
1692 |
msgstr ""
|
1693 |
|
1694 |
-
#: app/module/audit/controller/main.php:
|
1695 |
msgid "You can view the full audit report for your site here."
|
1696 |
msgstr ""
|
1697 |
|
1698 |
-
#: app/module/audit/controller/main.php:
|
1699 |
msgid "There were no events logged for %s"
|
1700 |
msgstr ""
|
1701 |
|
1702 |
-
#: app/module/audit/controller/main.php:
|
1703 |
-
#: app/module/audit/controller/main.php:
|
1704 |
msgid "Here’s what’s been happening at %s"
|
1705 |
msgstr ""
|
1706 |
|
1707 |
-
#: app/module/audit/controller/main.php:
|
1708 |
msgid "Type a user’s name"
|
1709 |
msgstr ""
|
1710 |
|
1711 |
-
#: app/module/audit/controller/main.php:
|
1712 |
msgid "We did not find an user with this name..."
|
1713 |
msgstr ""
|
1714 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1715 |
#: app/module/audit/view/email_template.php:416
|
1716 |
msgid "Audit Update From"
|
1717 |
msgstr ""
|
@@ -1786,70 +1811,81 @@ msgstr ""
|
|
1786 |
msgid "<a href=\"%s\">Configure reporting preferences</a>"
|
1787 |
msgstr ""
|
1788 |
|
1789 |
-
#: app/module/audit/view/free.php:
|
1790 |
-
|
1791 |
-
msgid "Upgrade"
|
1792 |
msgstr ""
|
1793 |
|
1794 |
-
#: app/module/audit/view/free.php:
|
1795 |
msgid ""
|
1796 |
"Track and log each and every event when changes are made to your website "
|
1797 |
-
"and get
|
1798 |
-
"hacking attempts. This is a pro feature that requires an
|
1799 |
-
"membership. Try it free today!"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
-
#: app/module/audit/view/layouts/layout.php:
|
1803 |
msgid "Events logged in the past 7 days"
|
1804 |
msgstr ""
|
1805 |
|
1806 |
-
#: app/module/audit/view/layouts/layout.php:
|
1807 |
-
#: app/module/audit/view/layouts/layout.php:
|
1808 |
-
#: app/module/audit/view/layouts/layout.php:85
|
1809 |
-
msgid "Reports"
|
1810 |
-
msgstr ""
|
1811 |
-
|
1812 |
-
#: app/module/audit/view/layouts/layout.php:67
|
1813 |
-
#: app/module/audit/view/layouts/layout.php:81
|
1814 |
msgid "Event Logs"
|
1815 |
msgstr ""
|
1816 |
|
1817 |
-
#: app/module/audit/view/
|
1818 |
-
|
|
|
1819 |
msgstr ""
|
1820 |
|
1821 |
-
#: app/module/audit/view/main.php:
|
1822 |
-
#: app/module/ip-lockout/view/logging/enabled.php:
|
1823 |
msgid "Export CSV"
|
1824 |
msgstr ""
|
1825 |
|
1826 |
-
#: app/module/audit/view/main.php:
|
1827 |
msgid ""
|
1828 |
"Here are your latest event logs showing what’s been happening behind the "
|
1829 |
"scenes."
|
1830 |
msgstr ""
|
1831 |
|
1832 |
-
#: app/module/audit/view/main.php:
|
1833 |
-
|
1834 |
-
#: app/module/ip-lockout/component/logs-table.php:340
|
1835 |
-
msgid "Filter"
|
1836 |
msgstr ""
|
1837 |
|
1838 |
-
#: app/module/audit/view/main.php:
|
1839 |
-
msgid "
|
1840 |
msgstr ""
|
1841 |
|
1842 |
-
#: app/module/audit/view/main.php:
|
1843 |
-
#: app/module/ip-lockout/component/logs-table.php:
|
1844 |
-
#: app/module/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1845 |
msgid "Apply"
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#: app/module/audit/view/main.php:
|
1849 |
-
msgid "
|
1850 |
msgstr ""
|
1851 |
|
1852 |
-
#: app/module/audit/view/
|
|
|
|
|
|
|
|
|
1853 |
msgid ""
|
1854 |
"Track and log each and every event when changes are made to your website "
|
1855 |
"and get\n"
|
@@ -1936,166 +1972,113 @@ msgstr ""
|
|
1936 |
msgid "As part of a WPMU DEV free trial."
|
1937 |
msgstr ""
|
1938 |
|
1939 |
-
#: app/module/audit/view/report.php:
|
1940 |
#: app/module/ip-lockout/view/notification/enabled.php:3
|
1941 |
-
msgid "
|
1942 |
-
msgstr ""
|
1943 |
-
|
1944 |
-
#: app/module/audit/view/report.php:9
|
1945 |
-
msgid "Audit report"
|
1946 |
msgstr ""
|
1947 |
|
1948 |
#: app/module/audit/view/report.php:11
|
1949 |
-
msgid ""
|
1950 |
-
"Defender can automatically send an email report summarising your website "
|
1951 |
-
"events so that you can keep track of logs without having to check back here."
|
1952 |
msgstr ""
|
1953 |
|
1954 |
-
#: app/module/audit/view/report.php:
|
1955 |
-
msgid "
|
|
|
|
|
1956 |
msgstr ""
|
1957 |
|
1958 |
-
#: app/module/audit/view/report.php:
|
1959 |
-
#: app/module/
|
1960 |
-
|
1961 |
-
msgid "Schedule"
|
1962 |
msgstr ""
|
1963 |
|
1964 |
-
#: app/module/audit/view/report.php:
|
1965 |
-
#: app/module/ip-lockout/view/notification/report
|
1966 |
-
#: app/module/
|
1967 |
-
#: app/module/scan/view/automation-free.php:28
|
1968 |
-
#: app/module/scan/view/automation.php:25
|
1969 |
msgid "Frequency"
|
1970 |
msgstr ""
|
1971 |
|
1972 |
-
#: app/module/audit/view/report.php:
|
1973 |
-
#: app/module/ip-lockout/view/notification/report
|
1974 |
-
#: app/module/
|
1975 |
-
#: app/module/scan/view/automation-free.php:33
|
1976 |
-
#: app/module/scan/view/automation.php:35
|
1977 |
msgid "Day of the week"
|
1978 |
msgstr ""
|
1979 |
|
1980 |
-
#: app/module/audit/view/report.php:
|
1981 |
-
#: app/module/ip-lockout/view/notification/report
|
1982 |
-
#: app/module/
|
1983 |
-
#: app/module/scan/view/automation-free.php:40
|
1984 |
-
#: app/module/scan/view/automation.php:43
|
1985 |
msgid "Time of day"
|
1986 |
msgstr ""
|
1987 |
|
1988 |
-
#: app/module/audit/view/
|
1989 |
-
|
1990 |
-
|
1991 |
-
|
1992 |
-
#: app/module/audit/view/report.php:57
|
1993 |
-
#: app/module/scan/view/automation-free.php:53
|
1994 |
-
#: app/module/scan/view/automation.php:57 app/view/settings.php:201
|
1995 |
-
msgid ""
|
1996 |
-
"Choose which of your website’s users will receive scan report results to "
|
1997 |
-
"their email inboxes."
|
1998 |
-
msgstr ""
|
1999 |
-
|
2000 |
-
#: app/module/audit/view/report.php:67 app/module/scan/view/automation.php:67
|
2001 |
-
#: app/module/scan/view/setting-free.php:131
|
2002 |
-
#: app/module/scan/view/setting.php:116
|
2003 |
-
msgid "Update Settings"
|
2004 |
-
msgstr ""
|
2005 |
-
|
2006 |
-
#: app/module/audit/view/settings.php:13
|
2007 |
msgid "If you no longer want to use this feature you can turn it off at any time."
|
2008 |
msgstr ""
|
2009 |
|
2010 |
-
#: app/module/audit/view/
|
2011 |
-
msgid "
|
2012 |
-
msgstr ""
|
2013 |
-
|
2014 |
-
#: app/module/audit/view/settings.php:30
|
2015 |
-
#: app/module/ip-lockout/view/blacklist/enabled.php:114
|
2016 |
-
#: app/module/ip-lockout/view/detect-404/enabled.php:148
|
2017 |
-
#: app/module/ip-lockout/view/login-lockouts/enabled.php:124
|
2018 |
-
#: app/module/ip-lockout/view/notification/enabled.php:124
|
2019 |
-
#: app/module/ip-lockout/view/notification/report.php:81
|
2020 |
-
#: app/module/ip-lockout/view/settings.php:44
|
2021 |
-
msgid "UPDATE SETTINGS"
|
2022 |
-
msgstr ""
|
2023 |
-
|
2024 |
-
#: app/module/audit/view/table.php:4
|
2025 |
-
msgid "%d Results"
|
2026 |
-
msgstr ""
|
2027 |
-
|
2028 |
-
#: app/module/audit/view/table.php:16
|
2029 |
-
msgid "Event Summary"
|
2030 |
msgstr ""
|
2031 |
|
2032 |
-
#: app/module/audit/view/table.php:
|
2033 |
msgid "Date"
|
2034 |
msgstr ""
|
2035 |
|
2036 |
-
#: app/module/audit/view/table.php:
|
2037 |
msgid " ago"
|
2038 |
msgstr ""
|
2039 |
|
2040 |
-
#: app/module/audit/view/table.php:
|
2041 |
-
#: app/module/ip-lockout/component/logs-table.php:
|
2042 |
msgid "Description"
|
2043 |
msgstr ""
|
2044 |
|
2045 |
-
#: app/module/audit/view/table.php:
|
2046 |
-
msgid ""
|
2047 |
-
"You can ban this IP address from being able to access your site, just be "
|
2048 |
-
"sure it’s not a legitimate operation of a plugin or service that needs "
|
2049 |
-
"access."
|
2050 |
-
msgstr ""
|
2051 |
-
|
2052 |
-
#: app/module/audit/view/table.php:184
|
2053 |
msgid "There have been no events logged in the selected time period."
|
2054 |
msgstr ""
|
2055 |
|
2056 |
-
#: app/module/audit/view/widget.php:
|
2057 |
-
msgid "
|
2058 |
msgstr ""
|
2059 |
|
2060 |
-
#: app/module/audit/view/widget.php:
|
2061 |
msgid "Last event logged"
|
2062 |
msgstr ""
|
2063 |
|
2064 |
-
#: app/module/audit/view/widget.php:
|
2065 |
msgid "Events logged this month"
|
2066 |
msgstr ""
|
2067 |
|
2068 |
-
#: app/module/audit/view/widget.php:
|
2069 |
-
msgid "
|
2070 |
msgstr ""
|
2071 |
|
2072 |
-
#: app/module/audit/view/widget.php:
|
2073 |
msgid "Audit log reports are enabled"
|
2074 |
msgstr ""
|
2075 |
|
2076 |
-
#: app/module/audit/view/widget.php:
|
2077 |
msgid "Audit log reports are disabled"
|
2078 |
msgstr ""
|
2079 |
|
2080 |
-
#: app/module/hardener/behavior/widget.php:
|
2081 |
#: app/module/hardener/controller/main.php:146
|
2082 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2083 |
msgid "Security Tweaks"
|
2084 |
msgstr ""
|
2085 |
|
2086 |
#: app/module/hardener/behavior/widget.php:34
|
2087 |
msgid ""
|
2088 |
-
"Defender checks for security tweaks you can make to enhance your
|
2089 |
-
"
|
2090 |
msgstr ""
|
2091 |
|
2092 |
-
#: app/module/hardener/behavior/widget.php:
|
2093 |
-
|
2094 |
-
msgid "You have actioned all available security tweaks. Great work!"
|
2095 |
msgstr ""
|
2096 |
|
2097 |
-
#: app/module/hardener/behavior/widget.php:
|
2098 |
-
msgid "
|
2099 |
msgstr ""
|
2100 |
|
2101 |
#: app/module/hardener/component/change-admin-service.php:90
|
@@ -2115,7 +2098,6 @@ msgid "The username already exists!"
|
|
2115 |
msgstr ""
|
2116 |
|
2117 |
#: app/module/hardener/component/change-admin.php:36
|
2118 |
-
#: app/module/hardener/view/rules/change-admin.php:8
|
2119 |
msgid "Change default admin user account"
|
2120 |
msgstr ""
|
2121 |
|
@@ -2131,18 +2113,19 @@ msgstr ""
|
|
2131 |
#: app/module/hardener/component/disable-file-editor-service.php:32
|
2132 |
#: app/module/hardener/component/disable-file-editor-service.php:66
|
2133 |
#: app/module/hardener/component/hide-error-service.php:61
|
2134 |
-
#: app/module/hardener/component/
|
2135 |
-
#: app/module/hardener/component/protect-information-service.php:
|
|
|
2136 |
#: app/module/hardener/component/security-key-service.php:48
|
2137 |
#: app/module/hardener/component/servers/apache-service.php:67
|
2138 |
#: app/module/hardener/component/servers/apache-service.php:71
|
2139 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2140 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2141 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2142 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2143 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2144 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2145 |
-
#: app/module/hardener/component/servers/apache-service.php:
|
2146 |
msgid "The file %s is not writable"
|
2147 |
msgstr ""
|
2148 |
|
@@ -2176,8 +2159,7 @@ msgstr ""
|
|
2176 |
msgid "This prefix is already in use. Please choose a different prefix."
|
2177 |
msgstr ""
|
2178 |
|
2179 |
-
#: app/module/hardener/component/db-prefix.php:
|
2180 |
-
#: app/module/hardener/view/rules/db-prefix.php:8
|
2181 |
msgid "Change default database prefix"
|
2182 |
msgstr ""
|
2183 |
|
@@ -2191,7 +2173,6 @@ msgid ""
|
|
2191 |
msgstr ""
|
2192 |
|
2193 |
#: app/module/hardener/component/disable-file-editor.php:24
|
2194 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:8
|
2195 |
msgid "Disable the file editor"
|
2196 |
msgstr ""
|
2197 |
|
@@ -2204,7 +2185,7 @@ msgid "Sorry, you are not allowed to edit plugins for this site."
|
|
2204 |
msgstr ""
|
2205 |
|
2206 |
#: app/module/hardener/component/disable-trackback.php:28
|
2207 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2208 |
msgid "Disable trackbacks and pingbacks"
|
2209 |
msgstr ""
|
2210 |
|
@@ -2217,26 +2198,24 @@ msgid "WP_DEBUG get override somewhere, please check with your host provider"
|
|
2217 |
msgstr ""
|
2218 |
|
2219 |
#: app/module/hardener/component/hide-error.php:33
|
2220 |
-
#: app/module/hardener/view/rules/hide-error.php:8
|
2221 |
msgid "Hide error reporting"
|
2222 |
msgstr ""
|
2223 |
|
2224 |
-
#: app/module/hardener/component/login-duration.php:
|
2225 |
msgid "Manage Login Duration"
|
2226 |
msgstr ""
|
2227 |
|
2228 |
-
#: app/module/hardener/component/login-duration.php:
|
2229 |
msgid "Duration can only be a number and greater than 0"
|
2230 |
msgstr ""
|
2231 |
|
2232 |
-
#: app/module/hardener/component/login-duration.php:
|
2233 |
msgid ""
|
2234 |
"Your session has expired because it has been over %d days since your last "
|
2235 |
"login. Please log back in to continue."
|
2236 |
msgstr ""
|
2237 |
|
2238 |
#: app/module/hardener/component/php-version.php:30
|
2239 |
-
#: app/module/hardener/view/rules/php-version.php:8
|
2240 |
msgid "Update PHP to latest version"
|
2241 |
msgstr ""
|
2242 |
|
@@ -2245,22 +2224,19 @@ msgid "Process is not possible on your current server"
|
|
2245 |
msgstr ""
|
2246 |
|
2247 |
#: app/module/hardener/component/prevent-php-service.php:58
|
2248 |
-
#: app/module/hardener/component/protect-information-service.php:
|
2249 |
msgid "Revert is not possible on your current server"
|
2250 |
msgstr ""
|
2251 |
|
2252 |
#: app/module/hardener/component/prevent-php.php:36
|
2253 |
-
#: app/module/hardener/view/rules/prevent-php-executed.php:8
|
2254 |
msgid "Prevent PHP execution"
|
2255 |
msgstr ""
|
2256 |
|
2257 |
#: app/module/hardener/component/protect-information.php:28
|
2258 |
-
#: app/module/hardener/view/rules/protect-information.php:8
|
2259 |
msgid "Prevent Information Disclosure"
|
2260 |
msgstr ""
|
2261 |
|
2262 |
#: app/module/hardener/component/security-key.php:40
|
2263 |
-
#: app/module/hardener/view/rules/security-key.php:8
|
2264 |
msgid "Update old security keys"
|
2265 |
msgstr ""
|
2266 |
|
@@ -2276,7 +2252,6 @@ msgid "The file %s could not be loaded"
|
|
2276 |
msgstr ""
|
2277 |
|
2278 |
#: app/module/hardener/component/wp-version.php:30
|
2279 |
-
#: app/module/hardener/view/rules/wp-version.php:8
|
2280 |
msgid "Update WordPress to latest version"
|
2281 |
msgstr ""
|
2282 |
|
@@ -2301,208 +2276,270 @@ msgid "Security tweak successfully updated."
|
|
2301 |
msgstr ""
|
2302 |
|
2303 |
#: app/module/hardener/rule.php:111
|
2304 |
-
#: app/module/scan/behavior/core-result.php:
|
2305 |
-
#: app/module/scan/behavior/
|
2306 |
-
#: app/module/scan/behavior/pro/
|
2307 |
-
#: app/module/scan/
|
|
|
|
|
|
|
2308 |
msgid "Ignore"
|
2309 |
msgstr ""
|
2310 |
|
2311 |
-
#: app/module/hardener/rule.php:
|
2312 |
-
#: app/module/scan/component/result-table.php:
|
2313 |
msgid "Restore"
|
2314 |
msgstr ""
|
2315 |
|
2316 |
-
#: app/module/hardener/view/ignore.php:
|
2317 |
-
|
|
|
|
|
|
|
|
|
|
|
2318 |
msgstr ""
|
2319 |
|
2320 |
-
#: app/module/hardener/view/ignore.php:
|
2321 |
msgid ""
|
2322 |
"You have chosen to ignore these fixes. You can restore and action them at "
|
2323 |
"any time."
|
2324 |
msgstr ""
|
2325 |
|
2326 |
-
#: app/module/hardener/view/ignore.php:
|
2327 |
-
msgid ""
|
2328 |
-
"You haven't ignored any issues yet. You can ignore any security tweaks you "
|
2329 |
-
"don't want to be warned about by clicking 'Ignore' inside the issue "
|
2330 |
-
"description."
|
2331 |
msgstr ""
|
2332 |
|
2333 |
-
#: app/module/hardener/view/issues.php:
|
2334 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2335 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2336 |
-
#: app/module/scan/view/issues.php:
|
2337 |
-
#: app/module/scan/view/layouts/layout.php:
|
2338 |
msgid "Issues"
|
2339 |
msgstr ""
|
2340 |
|
2341 |
-
#: app/module/hardener/view/issues.php:
|
2342 |
msgid ""
|
2343 |
-
"
|
2344 |
-
"
|
2345 |
-
"
|
2346 |
msgstr ""
|
2347 |
|
2348 |
-
#: app/module/hardener/view/
|
2349 |
-
|
2350 |
-
msgid "You have no outstanding security issues."
|
2351 |
msgstr ""
|
2352 |
|
2353 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2354 |
-
msgid "
|
2355 |
msgstr ""
|
2356 |
|
2357 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2358 |
-
msgid "
|
2359 |
msgstr ""
|
2360 |
|
2361 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2362 |
-
|
|
|
2363 |
msgstr ""
|
2364 |
|
2365 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2366 |
-
|
|
|
2367 |
msgstr ""
|
2368 |
|
2369 |
-
#: app/module/hardener/view/layouts/layout.php:
|
2370 |
-
#: app/module/hardener/view/layouts/layout.php:
|
|
|
2371 |
msgid "Resolved"
|
2372 |
msgstr ""
|
2373 |
|
2374 |
-
#: app/module/hardener/view/
|
2375 |
-
|
2376 |
-
#: app/module/scan/view/cleaned.php:3 app/module/scan/view/ignored.php:3
|
2377 |
-
#: app/module/scan/view/layouts/layout.php:121
|
2378 |
-
#: app/module/scan/view/layouts/layout.php:147
|
2379 |
-
msgid "Ignored"
|
2380 |
msgstr ""
|
2381 |
|
2382 |
-
#: app/module/hardener/view/
|
2383 |
-
msgid "
|
2384 |
msgstr ""
|
2385 |
|
2386 |
-
#: app/module/hardener/view/
|
2387 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2388 |
msgstr ""
|
2389 |
|
2390 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2391 |
-
|
2392 |
-
|
2393 |
-
|
2394 |
-
|
2395 |
-
|
2396 |
-
|
2397 |
-
|
2398 |
-
#: app/module/hardener/view/rules/
|
2399 |
-
|
2400 |
-
|
2401 |
-
|
2402 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2403 |
msgstr ""
|
2404 |
|
2405 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2406 |
msgid ""
|
2407 |
-
"
|
2408 |
-
"
|
2409 |
-
"
|
2410 |
-
"
|
2411 |
-
"
|
2412 |
-
"username."
|
2413 |
msgstr ""
|
2414 |
|
2415 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2416 |
-
#: app/module/hardener/view/rules/db-prefix.php:
|
2417 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:
|
2418 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2419 |
-
#: app/module/hardener/view/rules/disable-xml-rpc.php:
|
2420 |
-
#: app/module/hardener/view/rules/hide-error.php:
|
2421 |
-
#: app/module/hardener/view/rules/login-duration.php:
|
2422 |
-
#: app/module/hardener/view/rules/php-version.php:
|
2423 |
-
#: app/module/hardener/view/rules/prevent-php-executed.php:
|
2424 |
-
#: app/module/hardener/view/rules/
|
2425 |
-
#: app/module/hardener/view/rules/
|
2426 |
-
#: app/module/hardener/view/rules/wp-version.php:29
|
2427 |
msgid "How to fix"
|
2428 |
msgstr ""
|
2429 |
|
2430 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2431 |
-
msgid "
|
|
|
|
|
2432 |
msgstr ""
|
2433 |
|
2434 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2435 |
-
msgid "
|
2436 |
msgstr ""
|
2437 |
|
2438 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2439 |
-
msgid "
|
2440 |
msgstr ""
|
2441 |
|
2442 |
-
#: app/module/hardener/view/rules/change-admin.php:
|
2443 |
-
#: app/module/hardener/view/rules/db-prefix.php:
|
2444 |
-
|
2445 |
-
|
2446 |
-
|
2447 |
-
#: app/module/
|
2448 |
-
msgid "
|
2449 |
msgstr ""
|
2450 |
|
2451 |
-
#: app/module/hardener/view/rules/db-prefix.php:
|
2452 |
msgid ""
|
2453 |
"When you first install WordPress on a new database, the default settings "
|
2454 |
"start with wp_ as the prefix to anything that gets stored in the tables. "
|
2455 |
"This makes it easier for hackers to perform SQL injection attacks if they "
|
2456 |
-
"find a code vulnerability.
|
2457 |
-
"prefix to protect yourself from this. Please backup your database before "
|
2458 |
-
"changing the prefix."
|
2459 |
msgstr ""
|
2460 |
|
2461 |
-
#: app/module/hardener/view/rules/db-prefix.php:
|
2462 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
2463 |
msgstr ""
|
2464 |
|
2465 |
-
#: app/module/hardener/view/rules/db-prefix.php:
|
2466 |
msgid ""
|
2467 |
-
"
|
2468 |
-
"
|
2469 |
msgstr ""
|
2470 |
|
2471 |
-
#: app/module/hardener/view/rules/db-prefix.php:
|
2472 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2473 |
msgstr ""
|
2474 |
|
2475 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:
|
2476 |
msgid ""
|
2477 |
"WordPress comes with a file editor built into the system. This means that "
|
2478 |
-
"anyone with access to your login information can edit your plugin
|
2479 |
-
"files
|
2480 |
msgstr ""
|
2481 |
|
2482 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:
|
2483 |
-
|
|
|
2484 |
msgstr ""
|
2485 |
|
2486 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:
|
2487 |
-
|
2488 |
-
#: app/module/hardener/view/rules/disable-xml-rpc.php:36
|
2489 |
-
#: app/module/hardener/view/rules/login-duration.php:29
|
2490 |
-
#: app/module/hardener/view/rules/prevent-php-executed.php:52
|
2491 |
-
#: app/module/hardener/view/rules/protect-information.php:26
|
2492 |
-
msgid "Revert"
|
2493 |
msgstr ""
|
2494 |
|
2495 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:
|
2496 |
msgid ""
|
2497 |
-
"
|
2498 |
-
"
|
2499 |
msgstr ""
|
2500 |
|
2501 |
-
#: app/module/hardener/view/rules/disable-file-editor.php:
|
2502 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2503 |
msgstr ""
|
2504 |
|
2505 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2506 |
msgid ""
|
2507 |
"Pingbacks notify a website when it has been mentioned by another website, "
|
2508 |
"like a form of courtesy communication. However, these notifications can be "
|
@@ -2511,303 +2548,487 @@ msgid ""
|
|
2511 |
"with spam comments."
|
2512 |
msgstr ""
|
2513 |
|
2514 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2515 |
-
msgid "Trackbacks and pingbacks are
|
2516 |
msgstr ""
|
2517 |
|
2518 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2519 |
-
msgid "
|
2520 |
msgstr ""
|
2521 |
|
2522 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2523 |
-
msgid "
|
|
|
|
|
2524 |
msgstr ""
|
2525 |
|
2526 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2527 |
-
msgid "
|
|
|
|
|
|
|
2528 |
msgstr ""
|
2529 |
|
2530 |
-
#: app/module/hardener/view/rules/disable-trackback.php:
|
2531 |
msgid "Disable Pingbacks"
|
2532 |
msgstr ""
|
2533 |
|
2534 |
-
#: app/module/hardener/view/rules/disable-xml-rpc.php:
|
2535 |
-
|
2536 |
-
msgid "Disable XML-RPC"
|
2537 |
msgstr ""
|
2538 |
|
2539 |
-
#: app/module/hardener/view/rules/disable-xml-rpc.php:
|
2540 |
msgid ""
|
2541 |
"XML-RPC is a system that allows you to post on your WordPress blog using "
|
2542 |
"popular weblog clients like Windows Live Writer. Technically, it’s a remote "
|
2543 |
"procedure call which uses XML to encode its calls and HTTP as a transport "
|
2544 |
-
"mechanism
|
2545 |
-
"If you are using the WordPress mobile app, want to make connections to "
|
2546 |
-
"services like IFTTT, or want to access and publish to your blog remotely, "
|
2547 |
-
"then you need XML-RPC enabled.<br/><br/>\n"
|
2548 |
-
"In the past, there were security concerns with XML-RPC so we recommend "
|
2549 |
-
"making sure this feature is fully disabled if you don’t need it active."
|
2550 |
msgstr ""
|
2551 |
|
2552 |
-
#: app/module/hardener/view/rules/disable-xml-rpc.php:
|
2553 |
msgid ""
|
2554 |
-
"
|
2555 |
-
"
|
|
|
|
|
2556 |
msgstr ""
|
2557 |
|
2558 |
-
#: app/module/hardener/view/rules/disable-xml-rpc.php:
|
2559 |
msgid "XML-RPC is disabled."
|
2560 |
msgstr ""
|
2561 |
|
2562 |
-
#: app/module/hardener/view/rules/
|
|
|
|
|
|
|
|
|
2563 |
msgid ""
|
2564 |
-
"In
|
2565 |
-
"
|
2566 |
-
"errors on the front-end. This provides hackers yet another way to find "
|
2567 |
-
"loopholes in your site's security."
|
2568 |
msgstr ""
|
2569 |
|
2570 |
-
#: app/module/hardener/view/rules/
|
2571 |
-
msgid "
|
|
|
|
|
|
|
2572 |
msgstr ""
|
2573 |
|
2574 |
-
#: app/module/hardener/view/rules/
|
2575 |
-
msgid "
|
2576 |
msgstr ""
|
2577 |
|
2578 |
-
#: app/module/hardener/view/rules/hide-error.php:
|
2579 |
-
msgid "
|
2580 |
msgstr ""
|
2581 |
|
2582 |
-
#: app/module/hardener/view/rules/hide-error.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2583 |
msgid ""
|
2584 |
"We attempted to disable the display_errors setting to prevent code errors "
|
2585 |
"displaying but it’s being overridden by your server config. Please contact "
|
2586 |
"your hosting provider and ask them to set display_errors to false."
|
2587 |
msgstr ""
|
2588 |
|
2589 |
-
#: app/module/hardener/view/rules/
|
|
|
|
|
|
|
|
|
2590 |
msgid ""
|
2591 |
-
"
|
2592 |
-
"
|
|
|
2593 |
msgstr ""
|
2594 |
|
2595 |
-
#: app/module/hardener/view/rules/
|
2596 |
-
msgid "
|
|
|
|
|
|
|
2597 |
msgstr ""
|
2598 |
|
2599 |
-
#: app/module/hardener/view/rules/
|
2600 |
-
msgid "
|
2601 |
msgstr ""
|
2602 |
|
2603 |
-
#: app/module/hardener/view/rules/
|
|
|
2604 |
msgid ""
|
2605 |
-
"
|
2606 |
-
"
|
2607 |
-
"or newer as soon as possible."
|
2608 |
msgstr ""
|
2609 |
|
2610 |
-
#: app/module/hardener/view/rules/
|
2611 |
-
|
|
|
2612 |
msgstr ""
|
2613 |
|
2614 |
-
#: app/module/hardener/view/rules/
|
2615 |
-
|
2616 |
-
msgid "Current version"
|
2617 |
msgstr ""
|
2618 |
|
2619 |
-
#: app/module/hardener/view/rules/
|
2620 |
-
|
2621 |
-
|
|
|
2622 |
msgstr ""
|
2623 |
|
2624 |
-
#: app/module/hardener/view/rules/
|
2625 |
-
|
|
|
2626 |
msgstr ""
|
2627 |
|
2628 |
-
#: app/module/hardener/view/rules/
|
|
|
2629 |
msgid ""
|
2630 |
-
"
|
2631 |
-
"
|
2632 |
msgstr ""
|
2633 |
|
2634 |
-
#: app/module/hardener/view/rules/
|
|
|
2635 |
msgid ""
|
2636 |
-
"By default, a plugin/theme vulnerability could allow a PHP file to get "
|
2637 |
-
"uploaded into your site's directories and in turn execute harmful scripts "
|
2638 |
-
"that can wreak havoc on your website. Prevent this altogether by
|
1 |
+
# Copyright (C) 2019 WPMU DEV
|
2 |
# This file is distributed under the GNU General Public License (Version 2 - GPLv2).
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: Defender Pro 2.1.1.1\n"
|
6 |
"Report-Msgid-Bugs-To: https://wpmudev.org\n"
|
7 |
+
"POT-Creation-Date: 2019-03-20 08:36:11+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
12 |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
|
14 |
+
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
15 |
|
16 |
+
#: app/behavior/blacklist-free.php:22 app/behavior/blacklist.php:32
|
17 |
+
#: app/behavior/blacklist.php:65 app/behavior/blacklist.php:137
|
18 |
+
#: app/behavior/blacklist.php:165 app/behavior/blacklist.php:189
|
19 |
+
#: app/view/activator.php:103
|
20 |
+
msgid "Blacklist Monitor"
|
21 |
msgstr ""
|
22 |
|
23 |
+
#: app/behavior/blacklist-free.php:25 app/behavior/blacklist.php:68
|
24 |
+
#: app/module/audit/behavior/audit-free.php:22
|
25 |
+
#: app/module/scan/view/setting-free.php:42
|
26 |
+
#: app/module/scan/view/setting-free.php:57
|
27 |
+
msgid "Pro"
|
|
|
|
|
|
|
28 |
msgstr ""
|
29 |
|
30 |
+
#: app/behavior/blacklist-free.php:31 app/view/activator.php:106
|
31 |
+
msgid ""
|
32 |
+
"Automatically check if you’re on Google’s blacklist every 6 hours. If "
|
33 |
+
"something’s wrong, we’ll let you know via email."
|
34 |
msgstr ""
|
35 |
|
36 |
+
#: app/behavior/blacklist-free.php:40
|
37 |
+
msgid ""
|
38 |
+
"Blacklist Monitor is a Pro feature, included as part of a WPMU DEV monthly "
|
39 |
+
"membership. <a target='_blank' href='%s'>Learn more</a>."
|
40 |
+
msgstr ""
|
41 |
+
|
42 |
+
#: app/behavior/blacklist.php:37
|
43 |
+
msgid ""
|
44 |
+
"Automatically check if you’re on Google’s blacklist every 6 hours. If "
|
45 |
+
"something’s wrong, we’ll let you know."
|
46 |
+
msgstr ""
|
47 |
+
|
48 |
+
#: app/behavior/blacklist.php:41 app/behavior/blacklist.php:84
|
49 |
+
#: app/behavior/blacklist.php:142
|
50 |
msgid ""
|
51 |
"Automatically check if you’re on Google’s blacklist every 6 hours. If "
|
52 |
"something’s\n"
|
53 |
" wrong, we’ll let you know via email."
|
54 |
msgstr ""
|
55 |
|
56 |
+
#: app/behavior/blacklist.php:47 app/behavior/blacklist.php:223
|
57 |
+
msgid "Want to know more about blacklisting? <a href=\"%s\">Read this article.</a>"
|
|
|
|
|
|
|
58 |
msgstr ""
|
59 |
|
60 |
+
#: app/behavior/blacklist.php:76
|
61 |
+
msgid "BLACKLIST MONITOR"
|
62 |
msgstr ""
|
63 |
|
64 |
+
#: app/behavior/blacklist.php:79 app/module/scan/behavior/scan-widget.php:141
|
65 |
+
#: app/module/scan/behavior/scan-widget.php:155
|
66 |
+
#: app/module/scan/behavior/scan.php:149 app/module/scan/behavior/scan.php:162
|
67 |
+
msgid "Try Defender Pro free today"
|
|
|
68 |
msgstr ""
|
69 |
|
70 |
+
#: app/behavior/blacklist.php:80
|
71 |
+
msgid "PRO FEATURE"
|
72 |
+
msgstr ""
|
73 |
+
|
74 |
+
#: app/behavior/blacklist.php:88 app/module/audit/view/free.php:26
|
75 |
+
msgid "Upgrade to Pro"
|
76 |
msgstr ""
|
77 |
|
78 |
+
#: app/behavior/blacklist.php:99
|
79 |
msgid "A WPMU DEV subscription is required for blacklist monitoring"
|
80 |
msgstr ""
|
81 |
|
82 |
+
#: app/behavior/blacklist.php:123
|
83 |
msgid "Whoops, it looks like something went wrong. Details: "
|
84 |
msgstr ""
|
85 |
|
86 |
+
#: app/behavior/blacklist.php:149
|
87 |
+
#: app/module/advanced-tools/behavior/at-widget.php:63
|
88 |
+
#: app/module/advanced-tools/behavior/at-widget.php:100
|
89 |
+
#: app/module/advanced-tools/view/disabled.php:22
|
90 |
+
#: app/module/advanced-tools/view/mask-login/disabled.php:22
|
91 |
+
#: app/module/audit/behavior/audit.php:46 app/module/audit/view/new.php:16
|
92 |
+
#: app/module/audit/view/new.php:33
|
93 |
+
#: app/module/ip-lockout/behavior/widget.php:38
|
94 |
+
msgid "Activate"
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: app/behavior/blacklist.php:173
|
98 |
+
msgid "Try Again"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: app/behavior/blacklist.php:205
|
102 |
+
msgid ""
|
103 |
+
" Automatically check if you’re on Google’s blacklist every 6 hours. If "
|
104 |
+
"something’s\n"
|
105 |
+
" wrong, we’ll let you know via email."
|
106 |
msgstr ""
|
107 |
|
108 |
+
#: app/behavior/blacklist.php:211
|
109 |
+
msgid ""
|
110 |
+
"Your domain is currently on Google’s blacklist. Check out the article below "
|
111 |
+
"to find out how to fix up your domain."
|
112 |
msgstr ""
|
113 |
|
114 |
+
#: app/behavior/blacklist.php:217
|
115 |
msgid "Your domain is currently clean."
|
116 |
msgstr ""
|
117 |
|
118 |
+
#: app/behavior/blacklist.php:290
|
119 |
msgid "Something wrong happened, please try again."
|
120 |
msgstr ""
|
121 |
|
122 |
+
#: app/behavior/report-free.php:18 app/behavior/report.php:18
|
123 |
+
#: app/module/audit/view/layouts/layout.php:40
|
124 |
+
#: app/module/ip-lockout/view/layouts/layout.php:67
|
125 |
+
#: app/module/ip-lockout/view/layouts/layout.php:85
|
126 |
+
#: app/module/ip-lockout/view/notification/report-free.php:4
|
127 |
+
#: app/module/ip-lockout/view/notification/report.php:4
|
128 |
+
#: app/module/scan/view/automation-free.php:4
|
129 |
+
#: app/module/scan/view/automation.php:4 app/module/scan/view/automation.php:49
|
130 |
+
#: app/module/scan/view/layouts/layout.php:94
|
131 |
+
#: app/module/scan/view/layouts/layout.php:113
|
132 |
+
msgid "Reporting"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: app/behavior/report-free.php:23 app/behavior/report.php:22
|
136 |
msgid ""
|
137 |
"Get tailored security reports delivered to your inbox so you don’t have to "
|
138 |
+
"worry about checking in."
|
139 |
+
msgstr ""
|
140 |
+
|
141 |
+
#: app/behavior/report-free.php:29 app/behavior/report.php:27
|
142 |
+
#: app/module/scan/behavior/scan-widget.php:36
|
143 |
+
#: app/module/scan/behavior/scan.php:37 app/module/scan/controller/main.php:531
|
144 |
+
#: app/module/scan/view/layouts/layout.php:11 app/module/scan/view/new.php:6
|
145 |
+
#: app/module/scan/view/scanning.php:6 app/view/activator-free.php:33
|
146 |
+
#: app/view/activator.php:33
|
147 |
+
msgid "File Scanning"
|
148 |
msgstr ""
|
149 |
|
150 |
+
#: app/behavior/report-free.php:32 app/behavior/report-free.php:38
|
151 |
+
#: app/behavior/report-free.php:45 app/behavior/report.php:77
|
152 |
+
#: app/behavior/report.php:102 app/behavior/report.php:125
|
153 |
+
msgid "Inactive"
|
154 |
msgstr ""
|
155 |
|
156 |
+
#: app/behavior/report-free.php:36 app/behavior/report.php:33
|
157 |
+
#: app/module/ip-lockout/behavior/widget.php:26
|
158 |
+
#: app/module/ip-lockout/controller/main.php:864 app/module/ip-lockout.php:35
|
159 |
+
#: app/view/activator-free.php:59 app/view/activator.php:81
|
160 |
+
msgid "IP Lockouts"
|
|
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: app/behavior/report-free.php:42 app/behavior/report.php:39
|
164 |
+
#: app/module/audit/behavior/audit-free.php:19
|
165 |
+
#: app/module/audit/behavior/audit.php:23
|
166 |
+
#: app/module/audit/controller/main-free.php:36
|
167 |
+
#: app/module/audit/controller/main.php:521 app/module/audit/view/free.php:12
|
168 |
+
#: app/module/audit/view/layouts/layout.php:8 app/module/audit/view/new.php:4
|
169 |
+
#: app/module/audit/view/pro-feature.php:22 app/module/audit/view/widget.php:5
|
170 |
+
#: app/module/ip-lockout/view/pro-feature.php:22
|
171 |
+
#: app/module/scan/view/pro-feature.php:22 app/view/activator.php:59
|
172 |
+
#: app/view/pro-feature.php:22
|
173 |
+
msgid "Audit Logging"
|
174 |
msgstr ""
|
175 |
|
176 |
+
#: app/behavior/report-free.php:55
|
177 |
msgid ""
|
178 |
+
"Automated reports are included in a WPMU DEV membership along with 100+ "
|
179 |
+
"plugins & themes, 24/7 support and lots of handy site management tools. <a "
|
180 |
+
"href='%s'>Try it all absolutely free.</a>"
|
|
|
|
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: app/behavior/report-free.php:76 app/behavior/report.php:140
|
184 |
msgid "Scan reports are active scheduled to send %s"
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: app/behavior/report-free.php:91 app/behavior/report.php:154
|
188 |
msgid "Audit reports are active scheduled to send %s"
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: app/behavior/report-free.php:106 app/behavior/report.php:168
|
192 |
msgid "Lockout reports are active scheduled to send %s"
|
193 |
msgstr ""
|
194 |
|
195 |
+
#: app/behavior/report-free.php:122 app/behavior/report.php:184
|
196 |
+
#: app/behavior/utils.php:933 free/utils.php:709
|
197 |
msgid "daily"
|
198 |
msgstr ""
|
199 |
|
200 |
+
#: app/behavior/report-free.php:125 app/behavior/report.php:187
|
201 |
+
#: app/behavior/utils.php:936 free/utils.php:712
|
202 |
msgid "weekly"
|
203 |
msgstr ""
|
204 |
|
205 |
+
#: app/behavior/report-free.php:128 app/behavior/report.php:190
|
206 |
+
#: app/behavior/utils.php:939 free/utils.php:715
|
207 |
msgid "monthly"
|
208 |
msgstr ""
|
209 |
|
210 |
+
#: app/behavior/report.php:49
|
211 |
+
msgid ""
|
212 |
+
"You can also <a target='_blank' href=\"%s\">create PDF reports</a> to send "
|
213 |
+
"to your clients via The Hub."
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#: app/behavior/report.php:66 app/behavior/report.php:91
|
217 |
+
#: app/behavior/report.php:113 app/module/audit/view/report.php:31
|
218 |
+
#: app/module/ip-lockout/view/notification/report.php:47
|
219 |
+
#: app/module/scan/view/automation.php:56
|
220 |
msgid "Daily"
|
221 |
msgstr ""
|
222 |
|
223 |
+
#: app/behavior/report.php:69 app/behavior/report.php:94
|
224 |
+
#: app/behavior/report.php:116 app/module/audit/view/report.php:33
|
225 |
+
#: app/module/ip-lockout/view/notification/report.php:49
|
226 |
+
#: app/module/scan/view/automation.php:58
|
227 |
msgid "Weekly"
|
228 |
msgstr ""
|
229 |
|
230 |
+
#: app/behavior/report.php:72 app/behavior/report.php:97
|
231 |
+
#: app/behavior/report.php:119 app/module/audit/view/report.php:35
|
232 |
+
#: app/module/ip-lockout/view/notification/report.php:51
|
233 |
+
#: app/module/scan/view/automation.php:60
|
234 |
msgid "Monthly"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: app/behavior/utils.php:78 free/utils.php:78
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
238 |
msgid ""
|
239 |
"WPMU DEV Dashboard will be required for this action. Please visit <a "
|
240 |
"href=\"%s\">here</a> and install the WPMU DEV Dashboard"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: app/behavior/utils.php:193 app/behavior/utils.php:202
|
244 |
+
#: app/module/audit/view/table.php:78 free/utils.php:179 free/utils.php:188
|
|
|
245 |
msgid "Guest"
|
246 |
msgstr ""
|
247 |
|
248 |
+
#: app/behavior/utils.php:757
|
249 |
msgid "WordPress Core Integrity"
|
250 |
msgstr ""
|
251 |
|
252 |
+
#: app/behavior/utils.php:758
|
253 |
msgid "Plugins & Themes vulnerability"
|
254 |
msgstr ""
|
255 |
|
256 |
+
#: app/behavior/utils.php:759 app/module/scan/behavior/scan-widget.php:148
|
257 |
+
#: app/module/scan/behavior/scan.php:156
|
258 |
+
#: app/module/scan/view/setting-free.php:55 app/module/scan/view/setting.php:57
|
259 |
#: app/view/settings.php:98
|
260 |
msgid "Suspicious Code"
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: app/behavior/utils.php:788 app/module/audit/controller/main.php:144
|
264 |
+
#: app/module/ip-lockout/controller/main.php:158
|
265 |
msgid "Never"
|
266 |
msgstr ""
|
267 |
|
268 |
+
#: app/behavior/utils.php:916 free/utils.php:692
|
269 |
msgid "Please upgrade to 5.3 or later"
|
270 |
msgstr ""
|
271 |
|
272 |
+
#: app/controller/dashboard.php:60 app/view/dashboard.php:10
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
msgid "Dashboard"
|
274 |
msgstr ""
|
275 |
|
276 |
+
#: app/controller/dashboard.php:324 app/controller/gdpr.php:16
|
277 |
#: app/controller/requirement.php:69 app/module/ip-lockout/view/locked.php:75
|
278 |
msgid "Defender"
|
279 |
msgstr ""
|
282 |
msgid "Defender Pro"
|
283 |
msgstr ""
|
284 |
|
285 |
+
#: app/controller/dashboard.php:359
|
286 |
msgid "QUICK SETUP"
|
287 |
msgstr ""
|
288 |
|
289 |
+
#: app/controller/dashboard.php:359 app/view/activator-free.php:17
|
290 |
+
#: app/view/activator.php:17
|
291 |
msgid "Skip"
|
292 |
msgstr ""
|
293 |
|
294 |
+
#: app/controller/dashboard.php:360
|
295 |
msgid "Activating File Scanning..."
|
296 |
msgstr ""
|
297 |
|
298 |
+
#: app/controller/dashboard.php:361
|
299 |
msgid "Activating Audit Module..."
|
300 |
msgstr ""
|
301 |
|
302 |
+
#: app/controller/dashboard.php:362
|
303 |
msgid "Activating IP Lockouts Module..."
|
304 |
msgstr ""
|
305 |
|
306 |
+
#: app/controller/dashboard.php:363
|
307 |
msgid "Activating Blacklist Monitoring..."
|
308 |
msgstr ""
|
309 |
|
353 |
msgstr ""
|
354 |
|
355 |
#: app/controller/requirement.php:45
|
356 |
+
#: app/module/scan/behavior/pro/vuln-result.php:177
|
357 |
msgid "Version"
|
358 |
msgstr ""
|
359 |
|
369 |
msgid "Defender%s"
|
370 |
msgstr ""
|
371 |
|
372 |
+
#: app/module/advanced-tools/behavior/at-widget.php:19
|
373 |
#: app/module/advanced-tools/controller/main.php:486
|
374 |
#: app/module/advanced-tools/view/layouts/layout.php:6
|
375 |
msgid "Advanced Tools"
|
381 |
"aggressive of hackers and bots."
|
382 |
msgstr ""
|
383 |
|
384 |
+
#: app/module/advanced-tools/behavior/at-widget.php:27
|
|
|
385 |
#: app/module/advanced-tools/view/main-free.php:4
|
386 |
#: app/module/advanced-tools/view/main.php:4
|
387 |
msgid "Two-Factor Authentication"
|
388 |
msgstr ""
|
389 |
|
390 |
+
#: app/module/advanced-tools/behavior/at-widget.php:30
|
391 |
msgid ""
|
392 |
"Add an extra layer of security to your WordPress account to ensure that "
|
393 |
"you’re the only person who can log in, even if someone else knows your "
|
394 |
+
"password."
|
395 |
+
msgstr ""
|
396 |
+
|
397 |
+
#: app/module/advanced-tools/behavior/at-widget.php:40
|
398 |
+
msgid ""
|
399 |
+
"Two-factor authentication is now active. User roles with this feature "
|
400 |
+
"enabled must visit their Profile page to complete setup and sync their "
|
401 |
+
"account with the Authenticator app."
|
402 |
msgstr ""
|
403 |
|
404 |
#: app/module/advanced-tools/behavior/at-widget.php:44
|
405 |
msgid ""
|
406 |
+
"Note: Each user on your website must individually enable two-factor "
|
407 |
+
"authentication via their user profile in order to enable and use this "
|
408 |
+
"security feature."
|
409 |
msgstr ""
|
410 |
|
411 |
+
#: app/module/advanced-tools/behavior/at-widget.php:49
|
412 |
msgid ""
|
413 |
"Two-factor authentication is currently inactive. Configure and save your "
|
414 |
"settings to finish setup. "
|
415 |
msgstr ""
|
416 |
|
417 |
+
#: app/module/advanced-tools/behavior/at-widget.php:53
|
418 |
+
#: app/module/advanced-tools/behavior/at-widget.php:84
|
419 |
msgid "Finish Setup"
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: app/module/advanced-tools/behavior/at-widget.php:69
|
423 |
+
#: app/module/advanced-tools/view/layouts/layout.php:26
|
424 |
+
#: app/module/advanced-tools/view/layouts/layout.php:36
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
425 |
#: app/module/advanced-tools/view/mask-login/disabled.php:4
|
426 |
#: app/module/advanced-tools/view/mask-login/enabled.php:4
|
427 |
msgid "Mask Login Area"
|
428 |
msgstr ""
|
429 |
|
430 |
+
#: app/module/advanced-tools/behavior/at-widget.php:72
|
431 |
msgid "Change the location of WordPress’s default login area."
|
432 |
msgstr ""
|
433 |
|
434 |
+
#: app/module/advanced-tools/behavior/at-widget.php:80
|
435 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:22
|
436 |
msgid ""
|
437 |
+
"Masking is currently inactive. Choose your URL and save your settings to "
|
438 |
+
"finish setup. "
|
439 |
msgstr ""
|
440 |
|
441 |
+
#: app/module/advanced-tools/behavior/at-widget.php:90
|
442 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:28
|
443 |
msgid "Masking is currently active at <strong>%s</strong>"
|
444 |
msgstr ""
|
445 |
|
446 |
+
#: app/module/advanced-tools/component/mask-api.php:144
|
447 |
msgid "The URL is invalid"
|
448 |
msgstr ""
|
449 |
|
450 |
+
#: app/module/advanced-tools/component/mask-api.php:149
|
451 |
+
#: app/module/advanced-tools/component/mask-api.php:160
|
452 |
msgid ""
|
453 |
"A page already exists at this URL, please pick a unique page for your new "
|
454 |
"login area."
|
477 |
msgstr ""
|
478 |
|
479 |
#: app/module/advanced-tools/controller/main.php:246
|
480 |
+
#: app/module/advanced-tools/controller/main.php:587
|
481 |
+
#: app/module/advanced-tools/controller/main.php:631
|
482 |
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:3
|
483 |
msgid "Your OTP code"
|
484 |
msgstr ""
|
503 |
msgid "Whoops, the passcode you entered was incorrect or expired."
|
504 |
msgstr ""
|
505 |
|
506 |
+
#: app/module/advanced-tools/controller/main.php:536
|
507 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:16
|
508 |
msgid "Edit Email"
|
509 |
msgstr ""
|
510 |
|
511 |
+
#: app/module/advanced-tools/controller/main.php:567
|
512 |
+
#: app/module/advanced-tools/controller/mask-login.php:284
|
513 |
+
#: app/module/audit/controller/main.php:201
|
514 |
+
#: app/module/ip-lockout/controller/main.php:818
|
515 |
+
#: app/module/scan/controller/main.php:316
|
516 |
msgid "Your settings have been updated."
|
517 |
msgstr ""
|
518 |
|
519 |
+
#: app/module/advanced-tools/controller/main.php:593
|
520 |
+
#: app/module/advanced-tools/controller/main.php:637
|
521 |
msgid "%s variable was not found in mail body."
|
522 |
msgstr ""
|
523 |
|
524 |
+
#: app/module/advanced-tools/controller/main.php:605
|
525 |
msgid "Email settings has been saved."
|
526 |
msgstr ""
|
527 |
|
528 |
+
#: app/module/advanced-tools/controller/main.php:654
|
529 |
msgid "Test email has been sent to your email."
|
530 |
msgstr ""
|
531 |
|
532 |
+
#: app/module/advanced-tools/controller/main.php:658
|
533 |
msgid "Test email failed."
|
534 |
msgstr ""
|
535 |
|
536 |
+
#: app/module/advanced-tools/controller/mask-login.php:231
|
537 |
msgid "This feature is disabled"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: app/module/advanced-tools/controller/mask-login.php:277
|
541 |
msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
|
542 |
msgstr ""
|
543 |
|
544 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:26
|
545 |
msgid ""
|
546 |
+
"This email sends a temporary passcode when the user can’t access their "
|
547 |
"phone."
|
548 |
msgstr ""
|
549 |
|
550 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:32
|
551 |
#: app/view/settings.php:275
|
552 |
msgid "Subject"
|
553 |
msgstr ""
|
554 |
|
555 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:41
|
556 |
msgid "Sender"
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:50
|
560 |
msgid "Body"
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:59
|
564 |
+
#: app/module/scan/view/notification.php:128
|
565 |
+
#: app/module/scan/view/notification.php:188
|
566 |
+
#: app/module/scan/view/setting-free.php:114 app/view/settings.php:229
|
567 |
msgid "Available variables"
|
568 |
msgstr ""
|
569 |
|
570 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:71
|
571 |
#: app/module/advanced-tools/view/login/disabled.php:37
|
572 |
+
#: app/module/scan/controller/main.php:542
|
573 |
+
#: app/module/scan/view/notification.php:142
|
574 |
+
#: app/module/scan/view/notification.php:202
|
575 |
+
#: app/module/scan/view/setting-free.php:122 vendor/email-search.php:202
|
576 |
msgid "Cancel"
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:76
|
580 |
+
#: app/module/scan/view/setting-free.php:123
|
581 |
msgid "Save Template"
|
582 |
msgstr ""
|
583 |
|
584 |
+
#: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:79
|
585 |
msgid "Send Test"
|
586 |
msgstr ""
|
587 |
|
588 |
#: app/module/advanced-tools/view/disabled.php:4
|
589 |
+
#: app/module/advanced-tools/view/layouts/layout.php:33
|
590 |
#: app/module/advanced-tools/view/login/disabled.php:5
|
591 |
#: app/module/advanced-tools/view/login/enabled.php:5
|
592 |
msgid "Two Factor Authentication"
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: app/module/advanced-tools/view/disabled.php:14
|
596 |
msgid ""
|
597 |
"Beef up your website’s security with two-factor authentication. Add an "
|
598 |
"extra step in the login process so that users are required to enter a "
|
600 |
"protection against brute force attacks."
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: app/module/advanced-tools/view/layouts/layout.php:11
|
604 |
+
#: app/module/audit/view/layouts/layout.php:12 app/module/audit/view/new.php:8
|
605 |
+
#: app/module/ip-lockout/view/layouts/layout.php:9
|
606 |
+
#: app/module/scan/view/layouts/layout.php:26
|
607 |
+
msgid "View Documentation"
|
608 |
+
msgstr ""
|
609 |
+
|
610 |
+
#: app/module/advanced-tools/view/layouts/layout.php:21
|
611 |
+
msgid "Two-Factor Auth"
|
612 |
+
msgstr ""
|
613 |
+
|
614 |
#: app/module/advanced-tools/view/login/disabled.php:1
|
615 |
#: app/module/advanced-tools/view/login/enabled.php:1
|
616 |
msgid "Security"
|
617 |
msgstr ""
|
618 |
|
619 |
#: app/module/advanced-tools/view/login/disabled.php:28
|
620 |
+
#: app/module/ip-lockout/view/detect-404/disabled.php:20
|
|
|
621 |
msgid "Enable"
|
622 |
msgstr ""
|
623 |
|
646 |
"and then use your phone’s camera to scan the barcode below."
|
647 |
msgstr ""
|
648 |
|
649 |
+
#: app/module/advanced-tools/view/login/disabled.php:60
|
650 |
msgid "3. Enter passcode"
|
651 |
msgstr ""
|
652 |
|
653 |
+
#: app/module/advanced-tools/view/login/disabled.php:62
|
654 |
msgid ""
|
655 |
"Enter the 6 digit passcode that is shown on your device into the input "
|
656 |
"field below and hit “Verify”."
|
657 |
msgstr ""
|
658 |
|
659 |
+
#: app/module/advanced-tools/view/login/disabled.php:68
|
660 |
msgid "Verify"
|
661 |
msgstr ""
|
662 |
|
698 |
msgid "Lost your device?"
|
699 |
msgstr ""
|
700 |
|
701 |
+
#: app/module/advanced-tools/view/main-free.php:11
|
702 |
+
#: app/module/advanced-tools/view/main.php:10
|
703 |
msgid ""
|
704 |
"Configure your two-factor authentication settings. Our recommendations are "
|
705 |
"enabled by default."
|
706 |
msgstr ""
|
707 |
|
708 |
+
#: app/module/advanced-tools/view/main-free.php:30
|
709 |
+
#: app/module/advanced-tools/view/main.php:29
|
710 |
msgid ""
|
711 |
"<strong>Two-factor authentication is now active.</strong> User roles with "
|
712 |
"this feature enabled must visit their <a href='%s'>Profile page</a> to "
|
713 |
"complete setup and sync their account with the Authenticator app."
|
714 |
msgstr ""
|
715 |
|
716 |
+
#: app/module/advanced-tools/view/main-free.php:39
|
717 |
+
#: app/module/advanced-tools/view/main.php:38
|
718 |
msgid ""
|
719 |
"<strong>Two-factor authentication is currently inactive.</strong> Configure "
|
720 |
"and save your settings to complete setup."
|
721 |
msgstr ""
|
722 |
|
723 |
+
#: app/module/advanced-tools/view/main-free.php:48
|
724 |
+
#: app/module/advanced-tools/view/main-free.php:131
|
725 |
+
#: app/module/advanced-tools/view/main.php:46
|
726 |
+
#: app/module/advanced-tools/view/main.php:129
|
727 |
msgid "User Roles"
|
728 |
msgstr ""
|
729 |
|
730 |
+
#: app/module/advanced-tools/view/main-free.php:51
|
731 |
+
#: app/module/advanced-tools/view/main.php:49
|
732 |
msgid ""
|
733 |
"Choose the user roles you want to enable two-factor authentication for. "
|
734 |
"Users with those roles will then be required to use the Google "
|
735 |
"Authenticator app to login."
|
736 |
msgstr ""
|
737 |
|
738 |
+
#: app/module/advanced-tools/view/main-free.php:58
|
739 |
+
#: app/module/advanced-tools/view/main.php:56
|
740 |
msgid "User role"
|
741 |
msgstr ""
|
742 |
|
743 |
#: app/module/advanced-tools/view/main-free.php:84
|
744 |
+
#: app/module/advanced-tools/view/main.php:82
|
745 |
msgid "Lost Phone"
|
746 |
msgstr ""
|
747 |
|
748 |
+
#: app/module/advanced-tools/view/main-free.php:87
|
749 |
+
#: app/module/advanced-tools/view/main.php:85
|
750 |
msgid ""
|
751 |
"If a user is unable to access their phone, you can allow an option to send "
|
752 |
"the one time password to their registered email."
|
753 |
msgstr ""
|
754 |
|
755 |
+
#: app/module/advanced-tools/view/main-free.php:100
|
756 |
+
#: app/module/advanced-tools/view/main.php:98
|
757 |
msgid "Enable lost phone option"
|
758 |
msgstr ""
|
759 |
|
760 |
+
#: app/module/advanced-tools/view/main-free.php:108
|
761 |
+
#: app/module/advanced-tools/view/main.php:106
|
762 |
msgid "Force Authentication"
|
763 |
msgstr ""
|
764 |
|
765 |
+
#: app/module/advanced-tools/view/main-free.php:111
|
766 |
+
#: app/module/advanced-tools/view/main.php:109
|
767 |
msgid ""
|
768 |
"By default, two-factor authentication is optional for users. This setting "
|
769 |
"forces users to activate two-factor."
|
770 |
msgstr ""
|
771 |
|
772 |
+
#: app/module/advanced-tools/view/main-free.php:124
|
773 |
+
#: app/module/advanced-tools/view/main.php:122
|
774 |
msgid "Force users to log in with two-factor authentication"
|
775 |
msgstr ""
|
776 |
|
777 |
+
#: app/module/advanced-tools/view/main-free.php:127
|
778 |
+
#: app/module/advanced-tools/view/main.php:125
|
779 |
msgid "Note: Users will be forced to set up two-factor when they next login."
|
780 |
msgstr ""
|
781 |
|
782 |
+
#: app/module/advanced-tools/view/main-free.php:148
|
783 |
+
#: app/module/advanced-tools/view/main.php:146
|
784 |
msgid "Custom warning message"
|
785 |
msgstr ""
|
786 |
|
787 |
+
#: app/module/advanced-tools/view/main-free.php:152
|
788 |
+
#: app/module/advanced-tools/view/main.php:150
|
789 |
msgid ""
|
790 |
"Note: This is shown in the users Profile area indicating they must use "
|
791 |
"two-factor authentication."
|
792 |
msgstr ""
|
793 |
|
794 |
+
#: app/module/advanced-tools/view/main-free.php:161
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
795 |
#: app/module/advanced-tools/view/main.php:159
|
796 |
+
#: app/module/advanced-tools/view/main.php:179
|
797 |
msgid "Custom Graphic"
|
798 |
msgstr ""
|
799 |
|
800 |
+
#: app/module/advanced-tools/view/main-free.php:164
|
801 |
+
#: app/module/advanced-tools/view/main.php:162
|
802 |
msgid ""
|
803 |
"By default, Defender’s icon appears above the login fields. You can upload "
|
804 |
"your own branding, or turn this feature off."
|
805 |
msgstr ""
|
806 |
|
807 |
+
#: app/module/advanced-tools/view/main-free.php:174
|
808 |
+
#: app/module/advanced-tools/view/main.php:174
|
809 |
msgid "Enable custom graphics above login fields"
|
810 |
msgstr ""
|
811 |
|
812 |
+
#: app/module/advanced-tools/view/main-free.php:181
|
813 |
+
#: app/module/advanced-tools/view/main.php:210
|
814 |
msgid "Emails"
|
815 |
msgstr ""
|
816 |
|
817 |
+
#: app/module/advanced-tools/view/main-free.php:184
|
818 |
+
#: app/module/advanced-tools/view/main.php:213
|
819 |
msgid "Customize the default copy for emails the two-factor feature sends to users."
|
820 |
msgstr ""
|
821 |
|
822 |
+
#: app/module/advanced-tools/view/main-free.php:190
|
823 |
+
#: app/module/advanced-tools/view/main.php:219
|
824 |
msgid "Email"
|
825 |
msgstr ""
|
826 |
|
827 |
+
#: app/module/advanced-tools/view/main-free.php:195
|
828 |
+
#: app/module/advanced-tools/view/main.php:224
|
829 |
msgid "Lost phone one time password"
|
830 |
msgstr ""
|
831 |
|
832 |
+
#: app/module/advanced-tools/view/main-free.php:209
|
833 |
+
#: app/module/advanced-tools/view/main.php:238
|
834 |
msgid "App Download"
|
835 |
msgstr ""
|
836 |
|
837 |
+
#: app/module/advanced-tools/view/main-free.php:212
|
838 |
+
#: app/module/advanced-tools/view/main.php:241
|
839 |
msgid "Need the app? Here’s links to the official Google Authenticator apps."
|
840 |
msgstr ""
|
841 |
|
842 |
+
#: app/module/advanced-tools/view/main-free.php:227
|
843 |
+
#: app/module/advanced-tools/view/main.php:256
|
844 |
msgid "Active Users"
|
845 |
msgstr ""
|
846 |
|
847 |
+
#: app/module/advanced-tools/view/main-free.php:230
|
848 |
+
#: app/module/advanced-tools/view/main.php:259
|
849 |
msgid ""
|
850 |
"Here’s a quick link to see which of your users have enabled two-factor "
|
851 |
"verification."
|
852 |
msgstr ""
|
853 |
|
854 |
+
#: app/module/advanced-tools/view/main-free.php:234
|
855 |
+
#: app/module/advanced-tools/view/main.php:263
|
856 |
msgid "<a href=\"%s\">View users</a> who have enabled this feature."
|
857 |
msgstr ""
|
858 |
|
859 |
+
#: app/module/advanced-tools/view/main-free.php:240
|
860 |
+
#: app/module/advanced-tools/view/main-free.php:248
|
861 |
+
#: app/module/advanced-tools/view/main.php:269
|
862 |
+
#: app/module/advanced-tools/view/main.php:277
|
863 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:93
|
864 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:101
|
865 |
+
#: app/module/audit/view/settings.php:12 app/module/audit/view/settings.php:22
|
866 |
+
#: app/module/ip-lockout/view/detect-404/enabled.php:178
|
867 |
+
#: app/module/ip-lockout/view/detect-404/enabled.php:186
|
868 |
+
#: app/module/ip-lockout/view/login-lockouts/enabled.php:150
|
869 |
+
#: app/module/ip-lockout/view/login-lockouts/enabled.php:158
|
870 |
msgid "Deactivate"
|
871 |
msgstr ""
|
872 |
|
873 |
+
#: app/module/advanced-tools/view/main-free.php:243
|
874 |
+
#: app/module/advanced-tools/view/main.php:272
|
875 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:96
|
876 |
msgid "Disable two-factor authentication on your website."
|
877 |
msgstr ""
|
878 |
|
879 |
+
#: app/module/advanced-tools/view/main-free.php:259
|
880 |
+
#: app/module/advanced-tools/view/main.php:288
|
881 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:112
|
882 |
+
#: app/module/audit/view/report.php:70
|
883 |
+
#: app/module/ip-lockout/view/blacklist/enabled.php:221
|
884 |
+
#: app/module/ip-lockout/view/detect-404/enabled.php:195
|
885 |
+
#: app/module/ip-lockout/view/login-lockouts/enabled.php:169
|
886 |
+
#: app/module/ip-lockout/view/notification/enabled.php:135
|
887 |
+
#: app/module/ip-lockout/view/notification/report.php:86
|
888 |
+
#: app/module/ip-lockout/view/settings.php:51
|
889 |
+
#: app/module/scan/view/automation.php:93
|
890 |
+
#: app/module/scan/view/notification.php:91
|
891 |
+
#: app/module/scan/view/notification.php:146
|
892 |
+
#: app/module/scan/view/notification.php:206
|
893 |
+
#: app/module/scan/view/setting-free.php:102
|
894 |
+
#: app/module/scan/view/setting.php:92
|
895 |
+
msgid "Save Changes"
|
896 |
+
msgstr ""
|
897 |
+
|
898 |
+
#: app/module/advanced-tools/view/main.php:180
|
899 |
+
msgid "For best results use a 168x168px JPG or PNG."
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: app/module/advanced-tools/view/main.php:196
|
903 |
+
msgid "Upload file"
|
904 |
msgstr ""
|
905 |
|
906 |
+
#: app/module/advanced-tools/view/mask-login/disabled.php:14
|
907 |
msgid ""
|
908 |
"Change the location of WordPress’s default login area, making it harder for "
|
909 |
"automated bots to find and also more convenient for your users."
|
910 |
msgstr ""
|
911 |
|
912 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:10
|
913 |
msgid ""
|
914 |
"Change your default WordPress login URL to hide your login area from "
|
915 |
"hackers and bots."
|
916 |
msgstr ""
|
917 |
|
918 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:36
|
|
|
|
|
|
|
|
|
|
|
|
|
919 |
msgid "Masking URL"
|
920 |
msgstr ""
|
921 |
|
922 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:39
|
923 |
msgid ""
|
924 |
+
"Choose the new URL slug where users of your website will now navigate to "
|
925 |
+
"log in or register."
|
926 |
msgstr ""
|
927 |
|
928 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:45
|
929 |
msgid ""
|
930 |
+
"You can specify any URLs. For security reasons, less obvious URLs are "
|
931 |
+
"recommended as they are harder for bots to guess."
|
|
|
932 |
msgstr ""
|
933 |
|
934 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:48
|
935 |
+
msgid "New Login URL"
|
936 |
msgstr ""
|
937 |
|
938 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:51
|
939 |
msgid "I.e. dashboard"
|
940 |
msgstr ""
|
941 |
|
942 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:53
|
943 |
msgid ""
|
944 |
+
"Users will login at <a href='%s'>%s</a>. Note: Registration and Password "
|
945 |
"Reset emails have hardcoded URLs in them. We will update them automatically "
|
946 |
"to match your new login URL."
|
947 |
msgstr ""
|
948 |
|
949 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:61
|
950 |
msgid "Redirect traffic"
|
951 |
msgstr ""
|
952 |
|
953 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:64
|
954 |
msgid ""
|
955 |
"With this feature you can send visitors and bots who try to visit the "
|
956 |
+
"default Wordpress login URLs to a separate URL to avoid 404s."
|
957 |
msgstr ""
|
958 |
|
959 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:77
|
960 |
msgid "Enable 404 redirection"
|
961 |
msgstr ""
|
962 |
|
963 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:81
|
964 |
msgid "Redirection URL"
|
965 |
msgstr ""
|
966 |
|
967 |
+
#: app/module/advanced-tools/view/mask-login/enabled.php:85
|
968 |
msgid ""
|
969 |
+
"Visitors who visit the default login URLs will be redirected to <a "
|
970 |
+
"href='%s'>%s</a>"
|
|
|
|
|
|
|
|
|
|
|
971 |
msgstr ""
|
972 |
|
973 |
+
#: app/module/audit/behavior/audit-free.php:28
|
974 |
+
#: app/module/audit/view/widget.php:10 app/view/activator.php:62
|
975 |
msgid ""
|
976 |
+
"Track and log events when changes are made to your website giving you full "
|
977 |
+
"visibility of what’s going on behind the scenes."
|
978 |
msgstr ""
|
979 |
|
980 |
+
#: app/module/audit/behavior/audit-free.php:37
|
981 |
msgid ""
|
982 |
+
"Audit Logging is a Pro feature that requires a WPMU DEV monthly membership. "
|
983 |
+
"<a target='_blank' href='%s'>Try it out today</a>!"
|
|
|
|
|
984 |
msgstr ""
|
985 |
|
986 |
+
#: app/module/audit/behavior/audit.php:33
|
987 |
msgid "Please hold on, Defender will update Audit information soon..."
|
988 |
msgstr ""
|
989 |
|
990 |
+
#: app/module/audit/behavior/audit.php:40
|
991 |
+
msgid ""
|
992 |
+
"Track and log events when changes are made to your website, giving you full "
|
993 |
+
"visibility over what's going on behind the scenes."
|
994 |
+
msgstr ""
|
995 |
+
|
996 |
#: app/module/audit/component/audit-api.php:66
|
997 |
#: app/module/audit/component/audit-api.php:133
|
998 |
msgid ""
|
1223 |
msgstr ""
|
1224 |
|
1225 |
#: app/module/audit/component/core-audit.php:284
|
1226 |
+
#: app/module/scan/behavior/pro/vuln-result.php:169
|
1227 |
msgid "WordPress"
|
1228 |
msgstr ""
|
1229 |
|
1536 |
|
1537 |
#: app/module/audit/component/options-audit.php:215
|
1538 |
#: app/module/audit/view/layouts/layout.php:71
|
1539 |
+
#: app/module/audit/view/layouts/layout.php:82
|
1540 |
+
#: app/module/audit/view/settings.php:4
|
1541 |
+
#: app/module/ip-lockout/view/layouts/layout.php:64
|
1542 |
+
#: app/module/ip-lockout/view/layouts/layout.php:83
|
1543 |
#: app/module/ip-lockout/view/settings.php:3
|
1544 |
+
#: app/module/scan/view/layouts/layout.php:84
|
1545 |
+
#: app/module/scan/view/layouts/layout.php:107
|
1546 |
+
#: app/module/scan/view/setting-free.php:4 app/module/scan/view/setting.php:4
|
1547 |
+
#: app/view/settings.php:6 free/main-activator.php:161 main-activator.php:121
|
1548 |
msgid "Settings"
|
1549 |
msgstr ""
|
1550 |
|
1653 |
msgid "password reset"
|
1654 |
msgstr ""
|
1655 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1656 |
#: app/module/audit/controller/main.php:84
|
1657 |
msgid "Summary"
|
1658 |
msgstr ""
|
1659 |
|
1660 |
+
#: app/module/audit/controller/main.php:85 app/module/audit/view/table.php:87
|
1661 |
+
#: app/module/ip-lockout/controller/main.php:213
|
|
|
1662 |
msgid "Date / Time"
|
1663 |
msgstr ""
|
1664 |
|
1665 |
+
#: app/module/audit/controller/main.php:86 app/module/audit/view/table.php:45
|
|
|
1666 |
msgid "Context"
|
1667 |
msgstr ""
|
1668 |
|
1669 |
+
#: app/module/audit/controller/main.php:87 app/module/audit/view/table.php:54
|
1670 |
+
#: app/module/ip-lockout/component/logs-table.php:351
|
1671 |
+
#: app/module/ip-lockout/controller/main.php:214
|
1672 |
+
#: app/module/scan/view/issues.php:16
|
1673 |
msgid "Type"
|
1674 |
msgstr ""
|
1675 |
|
1676 |
+
#: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:63
|
1677 |
+
#: app/module/ip-lockout/controller/main.php:215
|
|
|
1678 |
msgid "IP address"
|
1679 |
msgstr ""
|
1680 |
|
1681 |
+
#: app/module/audit/controller/main.php:89 app/module/audit/view/table.php:72
|
|
|
1682 |
msgid "User"
|
1683 |
msgstr ""
|
1684 |
|
1685 |
+
#: app/module/audit/controller/main.php:208
|
1686 |
+
#: app/module/audit/view/layouts/layout.php:45
|
1687 |
msgid "at %s"
|
1688 |
msgstr ""
|
1689 |
|
1690 |
+
#: app/module/audit/controller/main.php:210
|
1691 |
+
#: app/module/audit/view/layouts/layout.php:48
|
1692 |
msgid "%s at %s"
|
1693 |
msgstr ""
|
1694 |
|
1695 |
+
#: app/module/audit/controller/main.php:361
|
1696 |
msgid "Hi {USER_NAME},"
|
1697 |
msgstr ""
|
1698 |
|
1699 |
+
#: app/module/audit/controller/main.php:363
|
1700 |
msgid ""
|
1701 |
"It’s WP Defender here, reporting from the frontline with a quick update on "
|
1702 |
"what’s been happening at <a href=\"%s\">%s</a>."
|
1703 |
msgstr ""
|
1704 |
|
1705 |
+
#: app/module/audit/controller/main.php:375
|
1706 |
msgid "Event Type"
|
1707 |
msgstr ""
|
1708 |
|
1709 |
+
#: app/module/audit/controller/main.php:379
|
1710 |
msgid "Action Summaries"
|
1711 |
msgstr ""
|
1712 |
|
1713 |
+
#: app/module/audit/controller/main.php:420
|
1714 |
msgid "You can view the full audit report for your site here."
|
1715 |
msgstr ""
|
1716 |
|
1717 |
+
#: app/module/audit/controller/main.php:453
|
1718 |
msgid "There were no events logged for %s"
|
1719 |
msgstr ""
|
1720 |
|
1721 |
+
#: app/module/audit/controller/main.php:458
|
1722 |
+
#: app/module/audit/controller/main.php:484
|
1723 |
msgid "Here’s what’s been happening at %s"
|
1724 |
msgstr ""
|
1725 |
|
1726 |
+
#: app/module/audit/controller/main.php:579 app/view/settings.php:209
|
1727 |
msgid "Type a user’s name"
|
1728 |
msgstr ""
|
1729 |
|
1730 |
+
#: app/module/audit/controller/main.php:580
|
1731 |
msgid "We did not find an user with this name..."
|
1732 |
msgstr ""
|
1733 |
|
1734 |
+
#: app/module/audit/controller/main.php:708
|
1735 |
+
#: app/module/ip-lockout/component/logs-table.php:425
|
1736 |
+
#: app/module/scan/component/result-table.php:228
|
1737 |
+
msgid "%s results"
|
1738 |
+
msgstr ""
|
1739 |
+
|
1740 |
#: app/module/audit/view/email_template.php:416
|
1741 |
msgid "Audit Update From"
|
1742 |
msgstr ""
|
1811 |
msgid "<a href=\"%s\">Configure reporting preferences</a>"
|
1812 |
msgstr ""
|
1813 |
|
1814 |
+
#: app/module/audit/view/free.php:6
|
1815 |
+
msgid "Aduit Logging"
|
|
|
1816 |
msgstr ""
|
1817 |
|
1818 |
+
#: app/module/audit/view/free.php:22
|
1819 |
msgid ""
|
1820 |
"Track and log each and every event when changes are made to your website "
|
1821 |
+
"and get detailed reports on what’s going on behind the scenes, including "
|
1822 |
+
"any hacking attempts on your site. This is a pro feature that requires an "
|
1823 |
+
"active WPMU DEV membership. Try it free today!"
|
1824 |
msgstr ""
|
1825 |
|
1826 |
+
#: app/module/audit/view/layouts/layout.php:30
|
1827 |
msgid "Events logged in the past 7 days"
|
1828 |
msgstr ""
|
1829 |
|
1830 |
+
#: app/module/audit/view/layouts/layout.php:68
|
1831 |
+
#: app/module/audit/view/layouts/layout.php:80 app/module/audit/view/main.php:4
|
|
|
|
|
|
|
|
|
|
|
|
|
1832 |
msgid "Event Logs"
|
1833 |
msgstr ""
|
1834 |
|
1835 |
+
#: app/module/audit/view/layouts/layout.php:74
|
1836 |
+
#: app/module/audit/view/layouts/layout.php:84
|
1837 |
+
msgid "Reports"
|
1838 |
msgstr ""
|
1839 |
|
1840 |
+
#: app/module/audit/view/main.php:9
|
1841 |
+
#: app/module/ip-lockout/view/logging/enabled.php:17
|
1842 |
msgid "Export CSV"
|
1843 |
msgstr ""
|
1844 |
|
1845 |
+
#: app/module/audit/view/main.php:15
|
1846 |
msgid ""
|
1847 |
"Here are your latest event logs showing what’s been happening behind the "
|
1848 |
"scenes."
|
1849 |
msgstr ""
|
1850 |
|
1851 |
+
#: app/module/audit/view/main.php:19
|
1852 |
+
msgid "Date range"
|
|
|
|
|
1853 |
msgstr ""
|
1854 |
|
1855 |
+
#: app/module/audit/view/main.php:43 vendor/email-search.php:191
|
1856 |
+
msgid "Username"
|
1857 |
msgstr ""
|
1858 |
|
1859 |
+
#: app/module/audit/view/main.php:52
|
1860 |
+
#: app/module/ip-lockout/component/logs-table.php:187
|
1861 |
+
#: app/module/ip-lockout/view/logging/enabled.php:12
|
1862 |
+
msgid "IP Address"
|
1863 |
+
msgstr ""
|
1864 |
+
|
1865 |
+
#: app/module/audit/view/main.php:64
|
1866 |
+
#: app/module/ip-lockout/component/logs-table.php:171
|
1867 |
+
#: app/module/scan/view/issues.php:21
|
1868 |
+
msgid "All"
|
1869 |
+
msgstr ""
|
1870 |
+
|
1871 |
+
#: app/module/audit/view/main.php:66
|
1872 |
+
msgid "Specific"
|
1873 |
+
msgstr ""
|
1874 |
+
|
1875 |
+
#: app/module/audit/view/main.php:93
|
1876 |
+
#: app/module/ip-lockout/component/logs-table.php:205
|
1877 |
msgid "Apply"
|
1878 |
msgstr ""
|
1879 |
|
1880 |
+
#: app/module/audit/view/main.php:99
|
1881 |
+
msgid "Active Filters"
|
1882 |
msgstr ""
|
1883 |
|
1884 |
+
#: app/module/audit/view/main.php:106
|
1885 |
+
msgid "Loading events...."
|
1886 |
+
msgstr ""
|
1887 |
+
|
1888 |
+
#: app/module/audit/view/new.php:25
|
1889 |
msgid ""
|
1890 |
"Track and log each and every event when changes are made to your website "
|
1891 |
"and get\n"
|
1972 |
msgid "As part of a WPMU DEV free trial."
|
1973 |
msgstr ""
|
1974 |
|
1975 |
+
#: app/module/audit/view/report.php:4
|
1976 |
#: app/module/ip-lockout/view/notification/enabled.php:3
|
1977 |
+
msgid "Notification"
|
|
|
|
|
|
|
|
|
1978 |
msgstr ""
|
1979 |
|
1980 |
#: app/module/audit/view/report.php:11
|
1981 |
+
msgid "Scheduled Reports"
|
|
|
|
|
1982 |
msgstr ""
|
1983 |
|
1984 |
+
#: app/module/audit/view/report.php:12
|
1985 |
+
msgid ""
|
1986 |
+
"Schedule Defender to automatically email you a summary of all your website "
|
1987 |
+
"events."
|
1988 |
msgstr ""
|
1989 |
|
1990 |
+
#: app/module/audit/view/report.php:22
|
1991 |
+
#: app/module/ip-lockout/view/notification/report.php:30
|
1992 |
+
msgid "Send regular email report"
|
|
|
1993 |
msgstr ""
|
1994 |
|
1995 |
+
#: app/module/audit/view/report.php:26
|
1996 |
+
#: app/module/ip-lockout/view/notification/report.php:43
|
1997 |
+
#: app/module/scan/view/automation.php:53
|
|
|
|
|
1998 |
msgid "Frequency"
|
1999 |
msgstr ""
|
2000 |
|
2001 |
+
#: app/module/audit/view/report.php:41
|
2002 |
+
#: app/module/ip-lockout/view/notification/report.php:57
|
2003 |
+
#: app/module/scan/view/automation.php:64
|
|
|
|
|
2004 |
msgid "Day of the week"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
+
#: app/module/audit/view/report.php:50
|
2008 |
+
#: app/module/ip-lockout/view/notification/report.php:66
|
2009 |
+
#: app/module/scan/view/automation.php:73
|
|
|
|
|
2010 |
msgid "Time of day"
|
2011 |
msgstr ""
|
2012 |
|
2013 |
+
#: app/module/audit/view/settings.php:15
|
2014 |
+
#: app/module/ip-lockout/view/detect-404/enabled.php:181
|
2015 |
+
#: app/module/ip-lockout/view/login-lockouts/enabled.php:153
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016 |
msgid "If you no longer want to use this feature you can turn it off at any time."
|
2017 |
msgstr ""
|
2018 |
|
2019 |
+
#: app/module/audit/view/table.php:6
|
2020 |
+
msgid "Event summary"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021 |
msgstr ""
|
2022 |
|
2023 |
+
#: app/module/audit/view/table.php:8
|
2024 |
msgid "Date"
|
2025 |
msgstr ""
|
2026 |
|
2027 |
+
#: app/module/audit/view/table.php:24
|
2028 |
msgid " ago"
|
2029 |
msgstr ""
|
2030 |
|
2031 |
+
#: app/module/audit/view/table.php:38
|
2032 |
+
#: app/module/ip-lockout/component/logs-table.php:341
|
2033 |
msgid "Description"
|
2034 |
msgstr ""
|
2035 |
|
2036 |
+
#: app/module/audit/view/table.php:106
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2037 |
msgid "There have been no events logged in the selected time period."
|
2038 |
msgstr ""
|
2039 |
|
2040 |
+
#: app/module/audit/view/widget.php:14
|
2041 |
+
msgid "%d events logged in the past 7 days."
|
2042 |
msgstr ""
|
2043 |
|
2044 |
+
#: app/module/audit/view/widget.php:21
|
2045 |
msgid "Last event logged"
|
2046 |
msgstr ""
|
2047 |
|
2048 |
+
#: app/module/audit/view/widget.php:29
|
2049 |
msgid "Events logged this month"
|
2050 |
msgstr ""
|
2051 |
|
2052 |
+
#: app/module/audit/view/widget.php:43
|
2053 |
+
msgid "View Logs"
|
2054 |
msgstr ""
|
2055 |
|
2056 |
+
#: app/module/audit/view/widget.php:49
|
2057 |
msgid "Audit log reports are enabled"
|
2058 |
msgstr ""
|
2059 |
|
2060 |
+
#: app/module/audit/view/widget.php:51
|
2061 |
msgid "Audit log reports are disabled"
|
2062 |
msgstr ""
|
2063 |
|
2064 |
+
#: app/module/hardener/behavior/widget.php:21
|
2065 |
#: app/module/hardener/controller/main.php:146
|
2066 |
+
#: app/module/hardener/view/layouts/layout.php:17
|
2067 |
msgid "Security Tweaks"
|
2068 |
msgstr ""
|
2069 |
|
2070 |
#: app/module/hardener/behavior/widget.php:34
|
2071 |
msgid ""
|
2072 |
+
"Defender checks for basic security tweaks you can make to enhance your "
|
2073 |
+
"website’s defense against hackers and bots."
|
2074 |
msgstr ""
|
2075 |
|
2076 |
+
#: app/module/hardener/behavior/widget.php:42
|
2077 |
+
msgid "You’ve actioned all of the recommended security tweaks."
|
|
|
2078 |
msgstr ""
|
2079 |
|
2080 |
+
#: app/module/hardener/behavior/widget.php:71
|
2081 |
+
msgid "View All"
|
2082 |
msgstr ""
|
2083 |
|
2084 |
#: app/module/hardener/component/change-admin-service.php:90
|
2098 |
msgstr ""
|
2099 |
|
2100 |
#: app/module/hardener/component/change-admin.php:36
|
|
|
2101 |
msgid "Change default admin user account"
|
2102 |
msgstr ""
|
2103 |
|
2113 |
#: app/module/hardener/component/disable-file-editor-service.php:32
|
2114 |
#: app/module/hardener/component/disable-file-editor-service.php:66
|
2115 |
#: app/module/hardener/component/hide-error-service.php:61
|
2116 |
+
#: app/module/hardener/component/hide-error-service.php:156
|
2117 |
+
#: app/module/hardener/component/protect-information-service.php:51
|
2118 |
+
#: app/module/hardener/component/protect-information-service.php:86
|
2119 |
#: app/module/hardener/component/security-key-service.php:48
|
2120 |
#: app/module/hardener/component/servers/apache-service.php:67
|
2121 |
#: app/module/hardener/component/servers/apache-service.php:71
|
2122 |
+
#: app/module/hardener/component/servers/apache-service.php:122
|
2123 |
+
#: app/module/hardener/component/servers/apache-service.php:126
|
2124 |
+
#: app/module/hardener/component/servers/apache-service.php:180
|
2125 |
+
#: app/module/hardener/component/servers/apache-service.php:184
|
2126 |
+
#: app/module/hardener/component/servers/apache-service.php:231
|
2127 |
+
#: app/module/hardener/component/servers/apache-service.php:262
|
2128 |
+
#: app/module/hardener/component/servers/apache-service.php:296
|
2129 |
msgid "The file %s is not writable"
|
2130 |
msgstr ""
|
2131 |
|
2159 |
msgid "This prefix is already in use. Please choose a different prefix."
|
2160 |
msgstr ""
|
2161 |
|
2162 |
+
#: app/module/hardener/component/db-prefix.php:44
|
|
|
2163 |
msgid "Change default database prefix"
|
2164 |
msgstr ""
|
2165 |
|
2173 |
msgstr ""
|
2174 |
|
2175 |
#: app/module/hardener/component/disable-file-editor.php:24
|
|
|
2176 |
msgid "Disable the file editor"
|
2177 |
msgstr ""
|
2178 |
|
2185 |
msgstr ""
|
2186 |
|
2187 |
#: app/module/hardener/component/disable-trackback.php:28
|
2188 |
+
#: app/module/hardener/view/rules/disable-trackback.php:9
|
2189 |
msgid "Disable trackbacks and pingbacks"
|
2190 |
msgstr ""
|
2191 |
|
2198 |
msgstr ""
|
2199 |
|
2200 |
#: app/module/hardener/component/hide-error.php:33
|
|
|
2201 |
msgid "Hide error reporting"
|
2202 |
msgstr ""
|
2203 |
|
2204 |
+
#: app/module/hardener/component/login-duration.php:39
|
2205 |
msgid "Manage Login Duration"
|
2206 |
msgstr ""
|
2207 |
|
2208 |
+
#: app/module/hardener/component/login-duration.php:95
|
2209 |
msgid "Duration can only be a number and greater than 0"
|
2210 |
msgstr ""
|
2211 |
|
2212 |
+
#: app/module/hardener/component/login-duration.php:196
|
2213 |
msgid ""
|
2214 |
"Your session has expired because it has been over %d days since your last "
|
2215 |
"login. Please log back in to continue."
|
2216 |
msgstr ""
|
2217 |
|
2218 |
#: app/module/hardener/component/php-version.php:30
|
|
|
2219 |
msgid "Update PHP to latest version"
|
2220 |
msgstr ""
|
2221 |
|
2224 |
msgstr ""
|
2225 |
|
2226 |
#: app/module/hardener/component/prevent-php-service.php:58
|
2227 |
+
#: app/module/hardener/component/protect-information-service.php:103
|
2228 |
msgid "Revert is not possible on your current server"
|
2229 |
msgstr ""
|
2230 |
|
2231 |
#: app/module/hardener/component/prevent-php.php:36
|
|
|
2232 |
msgid "Prevent PHP execution"
|
2233 |
msgstr ""
|
2234 |
|
2235 |
#: app/module/hardener/component/protect-information.php:28
|
|
|
2236 |
msgid "Prevent Information Disclosure"
|
2237 |
msgstr ""
|
2238 |
|
2239 |
#: app/module/hardener/component/security-key.php:40
|
|
|
2240 |
msgid "Update old security keys"
|
2241 |
msgstr ""
|
2242 |
|
2252 |
msgstr ""
|
2253 |
|
2254 |
#: app/module/hardener/component/wp-version.php:30
|
|
|
2255 |
msgid "Update WordPress to latest version"
|
2256 |
msgstr ""
|
2257 |
|
2276 |
msgstr ""
|
2277 |
|
2278 |
#: app/module/hardener/rule.php:111
|
2279 |
+
#: app/module/scan/behavior/core-result.php:197
|
2280 |
+
#: app/module/scan/behavior/core-result.php:314
|
2281 |
+
#: app/module/scan/behavior/pro/content-result.php:87
|
2282 |
+
#: app/module/scan/behavior/pro/content-result.php:181
|
2283 |
+
#: app/module/scan/behavior/pro/vuln-result.php:124
|
2284 |
+
#: app/module/scan/behavior/pro/vuln-result.php:201
|
2285 |
+
#: app/module/scan/component/result-table.php:213
|
2286 |
msgid "Ignore"
|
2287 |
msgstr ""
|
2288 |
|
2289 |
+
#: app/module/hardener/rule.php:141
|
2290 |
+
#: app/module/scan/component/result-table.php:216
|
2291 |
msgid "Restore"
|
2292 |
msgstr ""
|
2293 |
|
2294 |
+
#: app/module/hardener/view/ignore.php:8
|
2295 |
+
#: app/module/hardener/view/layouts/layout.php:78
|
2296 |
+
#: app/module/hardener/view/layouts/layout.php:89
|
2297 |
+
#: app/module/scan/view/cleaned.php:3 app/module/scan/view/ignored.php:5
|
2298 |
+
#: app/module/scan/view/layouts/layout.php:79
|
2299 |
+
#: app/module/scan/view/layouts/layout.php:104
|
2300 |
+
msgid "Ignored"
|
2301 |
msgstr ""
|
2302 |
|
2303 |
+
#: app/module/hardener/view/ignore.php:18
|
2304 |
msgid ""
|
2305 |
"You have chosen to ignore these fixes. You can restore and action them at "
|
2306 |
"any time."
|
2307 |
msgstr ""
|
2308 |
|
2309 |
+
#: app/module/hardener/view/ignore.php:23
|
2310 |
+
msgid "Well, turns out you haven't ignored anything yet - keep up the good fight!"
|
|
|
|
|
|
|
2311 |
msgstr ""
|
2312 |
|
2313 |
+
#: app/module/hardener/view/issues.php:6
|
2314 |
+
#: app/module/hardener/view/layouts/layout.php:68
|
2315 |
+
#: app/module/hardener/view/layouts/layout.php:85
|
2316 |
+
#: app/module/scan/view/issues.php:9 app/module/scan/view/layouts/layout.php:74
|
2317 |
+
#: app/module/scan/view/layouts/layout.php:101
|
2318 |
msgid "Issues"
|
2319 |
msgstr ""
|
2320 |
|
2321 |
+
#: app/module/hardener/view/issues.php:15
|
2322 |
msgid ""
|
2323 |
+
"Activate security tweaks to strengthen your website against harmful hackers "
|
2324 |
+
"and bots who try to break in. We recommend you action as many tweaks as "
|
2325 |
+
"possible, some may require your server provider to help."
|
2326 |
msgstr ""
|
2327 |
|
2328 |
+
#: app/module/hardener/view/issues.php:22
|
2329 |
+
msgid "You have actioned all available security tweaks, great work!"
|
|
|
2330 |
msgstr ""
|
2331 |
|
2332 |
+
#: app/module/hardener/view/layouts/layout.php:8
|
2333 |
+
msgid "You have %d security tweak(s) needing attention."
|
2334 |
msgstr ""
|
2335 |
|
2336 |
+
#: app/module/hardener/view/layouts/layout.php:34 app/view/dashboard.php:23
|
2337 |
+
msgid "Security issues"
|
2338 |
msgstr ""
|
2339 |
|
2340 |
+
#: app/module/hardener/view/layouts/layout.php:43
|
2341 |
+
#: app/module/hardener/view/rules/php-version.php:34
|
2342 |
+
msgid "Current PHP version"
|
2343 |
msgstr ""
|
2344 |
|
2345 |
+
#: app/module/hardener/view/layouts/layout.php:50
|
2346 |
+
#: app/module/hardener/view/rules/wp-version.php:39
|
2347 |
+
msgid "Current WordPress version"
|
2348 |
msgstr ""
|
2349 |
|
2350 |
+
#: app/module/hardener/view/layouts/layout.php:73
|
2351 |
+
#: app/module/hardener/view/layouts/layout.php:87
|
2352 |
+
#: app/module/hardener/view/resolved.php:8
|
2353 |
msgid "Resolved"
|
2354 |
msgstr ""
|
2355 |
|
2356 |
+
#: app/module/hardener/view/resolved.php:18
|
2357 |
+
msgid "Excellent work. The following vulnerabilities have been fixed."
|
|
|
|
|
|
|
|
|
2358 |
msgstr ""
|
2359 |
|
2360 |
+
#: app/module/hardener/view/rules/change-admin.php:10
|
2361 |
+
msgid "Admin User"
|
2362 |
msgstr ""
|
2363 |
|
2364 |
+
#: app/module/hardener/view/rules/change-admin.php:22
|
2365 |
+
#: app/module/hardener/view/rules/db-prefix.php:22
|
2366 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:21
|
2367 |
+
#: app/module/hardener/view/rules/disable-trackback.php:21
|
2368 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:21
|
2369 |
+
#: app/module/hardener/view/rules/hide-error.php:21
|
2370 |
+
#: app/module/hardener/view/rules/login-duration.php:22
|
2371 |
+
#: app/module/hardener/view/rules/php-version.php:23
|
2372 |
+
#: app/module/hardener/view/rules/prevent-php-executed.php:39
|
2373 |
+
#: app/module/hardener/view/rules/protect-information.php:38
|
2374 |
+
#: app/module/hardener/view/rules/security-key.php:20
|
2375 |
+
#: app/module/hardener/view/rules/wp-version.php:21
|
2376 |
+
msgid "Overview"
|
2377 |
msgstr ""
|
2378 |
|
2379 |
+
#: app/module/hardener/view/rules/change-admin.php:25
|
2380 |
+
msgid ""
|
2381 |
+
"One of most common methods of gaining access to websites is through brute "
|
2382 |
+
"force attacks on login areas using default/common usernames and passwords. "
|
2383 |
+
"If you're using the default ‘admin’ username, you're giving away an "
|
2384 |
+
"important piece of the puzzle hackers need to hijack your website."
|
2385 |
+
msgstr ""
|
2386 |
+
|
2387 |
+
#: app/module/hardener/view/rules/change-admin.php:29
|
2388 |
+
msgid "You don't have a user account sporting the admin username, great."
|
2389 |
+
msgstr ""
|
2390 |
+
|
2391 |
+
#: app/module/hardener/view/rules/change-admin.php:33
|
2392 |
+
#: app/module/hardener/view/rules/db-prefix.php:33
|
2393 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:27
|
2394 |
+
#: app/module/hardener/view/rules/disable-trackback.php:32
|
2395 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:37
|
2396 |
+
#: app/module/hardener/view/rules/hide-error.php:27
|
2397 |
+
#: app/module/hardener/view/rules/login-duration.php:33
|
2398 |
+
#: app/module/hardener/view/rules/php-version.php:29
|
2399 |
+
#: app/module/hardener/view/rules/prevent-php-executed.php:46
|
2400 |
+
#: app/module/hardener/view/rules/security-key.php:32
|
2401 |
+
#: app/module/hardener/view/rules/wp-version.php:27
|
2402 |
+
#: app/module/ip-lockout/controller/main.php:216
|
2403 |
+
msgid "Status"
|
2404 |
+
msgstr ""
|
2405 |
+
|
2406 |
+
#: app/module/hardener/view/rules/change-admin.php:37
|
2407 |
+
msgid "You have a user account with the admin username."
|
2408 |
msgstr ""
|
2409 |
|
2410 |
+
#: app/module/hardener/view/rules/change-admin.php:41
|
2411 |
msgid ""
|
2412 |
+
"Using the default admin username is widely considered bad practice and "
|
2413 |
+
"opens you up to the easitest form of entry to your website. We recommend "
|
2414 |
+
"avoiding generic usernames like admin, administrator, and anything that "
|
2415 |
+
"matches your hostname (mattebutter) as these are the usernames hackers and "
|
2416 |
+
"bots will attempt first."
|
|
|
2417 |
msgstr ""
|
2418 |
|
2419 |
+
#: app/module/hardener/view/rules/change-admin.php:44
|
2420 |
+
#: app/module/hardener/view/rules/db-prefix.php:44
|
2421 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:45
|
2422 |
+
#: app/module/hardener/view/rules/disable-trackback.php:43
|
2423 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:48
|
2424 |
+
#: app/module/hardener/view/rules/hide-error.php:53
|
2425 |
+
#: app/module/hardener/view/rules/login-duration.php:46
|
2426 |
+
#: app/module/hardener/view/rules/php-version.php:50
|
2427 |
+
#: app/module/hardener/view/rules/prevent-php-executed.php:64
|
2428 |
+
#: app/module/hardener/view/rules/security-key.php:43
|
2429 |
+
#: app/module/hardener/view/rules/wp-version.php:52
|
|
|
2430 |
msgid "How to fix"
|
2431 |
msgstr ""
|
2432 |
|
2433 |
+
#: app/module/hardener/view/rules/change-admin.php:47
|
2434 |
+
msgid ""
|
2435 |
+
"Choose a new admin username name below. Alternately, you can ignore this "
|
2436 |
+
"tweak if you really want to keep the admin username at your own risk."
|
2437 |
msgstr ""
|
2438 |
|
2439 |
+
#: app/module/hardener/view/rules/change-admin.php:51
|
2440 |
+
msgid "New admin username"
|
2441 |
msgstr ""
|
2442 |
|
2443 |
+
#: app/module/hardener/view/rules/change-admin.php:69
|
2444 |
+
msgid "Update Username"
|
2445 |
msgstr ""
|
2446 |
|
2447 |
+
#: app/module/hardener/view/rules/change-admin.php:75
|
2448 |
+
#: app/module/hardener/view/rules/db-prefix.php:86
|
2449 |
+
msgid "Ensure you backup your database before performing this tweak."
|
2450 |
+
msgstr ""
|
2451 |
+
|
2452 |
+
#: app/module/hardener/view/rules/db-prefix.php:10
|
2453 |
+
msgid "Database Prefix"
|
2454 |
msgstr ""
|
2455 |
|
2456 |
+
#: app/module/hardener/view/rules/db-prefix.php:25
|
2457 |
msgid ""
|
2458 |
"When you first install WordPress on a new database, the default settings "
|
2459 |
"start with wp_ as the prefix to anything that gets stored in the tables. "
|
2460 |
"This makes it easier for hackers to perform SQL injection attacks if they "
|
2461 |
+
"find a code vulnerability. "
|
|
|
|
|
2462 |
msgstr ""
|
2463 |
|
2464 |
+
#: app/module/hardener/view/rules/db-prefix.php:29
|
2465 |
+
msgid ""
|
2466 |
+
"You're database prefix is set to <strong>%s</strong> and is unique, %s "
|
2467 |
+
"would be proud."
|
2468 |
+
msgstr ""
|
2469 |
+
|
2470 |
+
#: app/module/hardener/view/rules/db-prefix.php:37
|
2471 |
+
msgid "Your database prefix is the default wp_ prefix."
|
2472 |
msgstr ""
|
2473 |
|
2474 |
+
#: app/module/hardener/view/rules/db-prefix.php:41
|
2475 |
msgid ""
|
2476 |
+
"You’re currently using the default prefix, it’s much safer to change this "
|
2477 |
+
"to something random."
|
2478 |
msgstr ""
|
2479 |
|
2480 |
+
#: app/module/hardener/view/rules/db-prefix.php:47
|
2481 |
+
msgid ""
|
2482 |
+
"It’s good practice to come up with a unique prefix to protect yourself from "
|
2483 |
+
"this. We’ve automatically generated a random prefix for you which will make "
|
2484 |
+
"it near impossible for hackers to guess, but feel free to choose your own. "
|
2485 |
+
"Alternately, you can ignore this tweak if you really want to keep the wp_ "
|
2486 |
+
"prefix at your own risk."
|
2487 |
+
msgstr ""
|
2488 |
+
|
2489 |
+
#: app/module/hardener/view/rules/db-prefix.php:51
|
2490 |
+
msgid "New database prefix"
|
2491 |
+
msgstr ""
|
2492 |
+
|
2493 |
+
#: app/module/hardener/view/rules/db-prefix.php:65
|
2494 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:60
|
2495 |
+
#: app/module/hardener/view/rules/disable-trackback.php:58
|
2496 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:63
|
2497 |
+
#: app/module/hardener/view/rules/login-duration.php:67
|
2498 |
+
msgid "Revert"
|
2499 |
+
msgstr ""
|
2500 |
+
|
2501 |
+
#: app/module/hardener/view/rules/db-prefix.php:78
|
2502 |
+
msgid "Update Prefix"
|
2503 |
+
msgstr ""
|
2504 |
+
|
2505 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:9
|
2506 |
+
msgid "File Editor"
|
2507 |
msgstr ""
|
2508 |
|
2509 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:24
|
2510 |
msgid ""
|
2511 |
"WordPress comes with a file editor built into the system. This means that "
|
2512 |
+
"anyone with access to your login information can further edit your plugin "
|
2513 |
+
"and theme files and inject malicious code. "
|
2514 |
msgstr ""
|
2515 |
|
2516 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:32
|
2517 |
+
#: app/module/hardener/view/rules/prevent-php-executed.php:51
|
2518 |
+
msgid "You've disabled the file editor, winning."
|
2519 |
msgstr ""
|
2520 |
|
2521 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:38
|
2522 |
+
msgid "The file editor is currently enabled."
|
|
|
|
|
|
|
|
|
|
|
2523 |
msgstr ""
|
2524 |
|
2525 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:42
|
2526 |
msgid ""
|
2527 |
+
"The file editor is currently active. If you don’t need it, we recommend "
|
2528 |
+
"disabling this feature."
|
2529 |
msgstr ""
|
2530 |
|
2531 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:48
|
2532 |
+
msgid ""
|
2533 |
+
"We can automatically disable the file editor for you below. Alternately, "
|
2534 |
+
"you can ignore this tweak if you don’t require it. Either way, you can "
|
2535 |
+
"easily revert these actions at any time."
|
2536 |
+
msgstr ""
|
2537 |
+
|
2538 |
+
#: app/module/hardener/view/rules/disable-file-editor.php:72
|
2539 |
+
msgid "Disable file editor"
|
2540 |
msgstr ""
|
2541 |
|
2542 |
+
#: app/module/hardener/view/rules/disable-trackback.php:24
|
2543 |
msgid ""
|
2544 |
"Pingbacks notify a website when it has been mentioned by another website, "
|
2545 |
"like a form of courtesy communication. However, these notifications can be "
|
2548 |
"with spam comments."
|
2549 |
msgstr ""
|
2550 |
|
2551 |
+
#: app/module/hardener/view/rules/disable-trackback.php:28
|
2552 |
+
msgid "Trackbacks and pingbacks are disabled, nice work!"
|
2553 |
msgstr ""
|
2554 |
|
2555 |
+
#: app/module/hardener/view/rules/disable-trackback.php:36
|
2556 |
+
msgid "Trackbacks and pingbacks are currently enabled."
|
2557 |
msgstr ""
|
2558 |
|
2559 |
+
#: app/module/hardener/view/rules/disable-trackback.php:40
|
2560 |
+
msgid ""
|
2561 |
+
"Trackbacks and pingbacks can lead to DDos attacks and tons of spam "
|
2562 |
+
"comments. If you don’t require this feature, we recommend turning it off."
|
2563 |
msgstr ""
|
2564 |
|
2565 |
+
#: app/module/hardener/view/rules/disable-trackback.php:46
|
2566 |
+
msgid ""
|
2567 |
+
"We can automatically disable pingbacks and trackbacks for you below. "
|
2568 |
+
"Alternately, you can ignore this tweak if you don’t require it. Either way, "
|
2569 |
+
"you can easily revert these actions at any time."
|
2570 |
msgstr ""
|
2571 |
|
2572 |
+
#: app/module/hardener/view/rules/disable-trackback.php:71
|
2573 |
msgid "Disable Pingbacks"
|
2574 |
msgstr ""
|
2575 |
|
2576 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:9
|
2577 |
+
msgid "XML-RPC"
|
|
|
2578 |
msgstr ""
|
2579 |
|
2580 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:24
|
2581 |
msgid ""
|
2582 |
"XML-RPC is a system that allows you to post on your WordPress blog using "
|
2583 |
"popular weblog clients like Windows Live Writer. Technically, it’s a remote "
|
2584 |
"procedure call which uses XML to encode its calls and HTTP as a transport "
|
2585 |
+
"mechanism."
|
|
|
|
|
|
|
|
|
|
|
2586 |
msgstr ""
|
2587 |
|
2588 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:27
|
2589 |
msgid ""
|
2590 |
+
"If you are using the WordPress mobile app, want to make connections to "
|
2591 |
+
"services like IFTTT, or want to access and publish to your blog remotely, "
|
2592 |
+
"then you need XML-RPC enabled, otherwise it’s just another portal for "
|
2593 |
+
"hackers to target and exploit."
|
2594 |
msgstr ""
|
2595 |
|
2596 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:32
|
2597 |
msgid "XML-RPC is disabled."
|
2598 |
msgstr ""
|
2599 |
|
2600 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:41
|
2601 |
+
msgid "XML-RPC is currently enabled."
|
2602 |
+
msgstr ""
|
2603 |
+
|
2604 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:45
|
2605 |
msgid ""
|
2606 |
+
"In the past, there were security concerns with XML-RPC so we recommend "
|
2607 |
+
"making sure this feature is fully disabled if you don’t need it active."
|
|
|
|
|
2608 |
msgstr ""
|
2609 |
|
2610 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:51
|
2611 |
+
msgid ""
|
2612 |
+
"We can automatically disable XML-RPC for you below. Alternately, you can "
|
2613 |
+
"ignore this tweak if you don’t require it. Either way, you can easily "
|
2614 |
+
"revert these actions at any time."
|
2615 |
msgstr ""
|
2616 |
|
2617 |
+
#: app/module/hardener/view/rules/disable-xml-rpc.php:76
|
2618 |
+
msgid "Disable XML-RPC"
|
2619 |
msgstr ""
|
2620 |
|
2621 |
+
#: app/module/hardener/view/rules/hide-error.php:9
|
2622 |
+
msgid "Error Reporting"
|
2623 |
msgstr ""
|
2624 |
|
2625 |
+
#: app/module/hardener/view/rules/hide-error.php:24
|
2626 |
+
msgid ""
|
2627 |
+
"Developers often use the built-in PHP and scripts error debugging feature, "
|
2628 |
+
"which displays code errors on the frontend of your website. It’s useful for "
|
2629 |
+
"active development, but on live sites provides hackers yet another way to "
|
2630 |
+
"find loopholes in your site's security."
|
2631 |
+
msgstr ""
|
2632 |
+
|
2633 |
+
#: app/module/hardener/view/rules/hide-error.php:32
|
2634 |
+
msgid "You've disabled all error reporting, Houston will never report a problem."
|
2635 |
+
msgstr ""
|
2636 |
+
|
2637 |
+
#: app/module/hardener/view/rules/hide-error.php:39
|
2638 |
msgid ""
|
2639 |
"We attempted to disable the display_errors setting to prevent code errors "
|
2640 |
"displaying but it’s being overridden by your server config. Please contact "
|
2641 |
"your hosting provider and ask them to set display_errors to false."
|
2642 |
msgstr ""
|
2643 |
|
2644 |
+
#: app/module/hardener/view/rules/hide-error.php:45
|
2645 |
+
msgid "Error debugging is currently allowed."
|
2646 |
+
msgstr ""
|
2647 |
+
|
2648 |
+
#: app/module/hardener/view/rules/hide-error.php:50
|
2649 |
msgid ""
|
2650 |
+
"While it may not be in use, we haven’t found any code stopping debugging "
|
2651 |
+
"information being output. It’s best to remove all doubt and disable error "
|
2652 |
+
"reporting completely."
|
2653 |
msgstr ""
|
2654 |
|
2655 |
+
#: app/module/hardener/view/rules/hide-error.php:56
|
2656 |
+
msgid ""
|
2657 |
+
"We can automatically disable all error reporting for you below. "
|
2658 |
+
"Alternately, you can ignore this tweak if you don’t require it. Either way, "
|
2659 |
+
"you can easily revert these actions at any time."
|
2660 |
msgstr ""
|
2661 |
|
2662 |
+
#: app/module/hardener/view/rules/hide-error.php:71
|
2663 |
+
msgid "Disable error debugging"
|
2664 |
msgstr ""
|
2665 |
|
2666 |
+
#: app/module/hardener/view/rules/information-disclosure/apache_litespeed.php:8
|
2667 |
+
#: app/module/hardener/view/rules/prevent-php/apache_litespeed.php:8
|
2668 |
msgid ""
|
2669 |
+
"We can automatically add an .htaccess file to your root folder to action "
|
2670 |
+
"this fix."
|
|
|
2671 |
msgstr ""
|
2672 |
|
2673 |
+
#: app/module/hardener/view/rules/information-disclosure/apache_litespeed.php:11
|
2674 |
+
#: app/module/hardener/view/rules/prevent-php/apache_litespeed.php:11
|
2675 |
+
msgid "Update .htaccess file"
|
2676 |
msgstr ""
|
2677 |
|
2678 |
+
#: app/module/hardener/view/rules/information-disclosure/iis7.php:1
|
2679 |
+
msgid "For IIS 7 servers, <a href=\"%s\">visit Microsoft TechNet</a>"
|
|
|
2680 |
msgstr ""
|
2681 |
|
2682 |
+
#: app/module/hardener/view/rules/information-disclosure/nginx.php:2
|
2683 |
+
msgid ""
|
2684 |
+
"We can’t automatically action this fix, but follow the instructions below "
|
2685 |
+
"to patch this up."
|
2686 |
msgstr ""
|
2687 |
|
2688 |
+
#: app/module/hardener/view/rules/information-disclosure/nginx.php:4
|
2689 |
+
#: app/module/hardener/view/rules/prevent-php/nginx.php:12
|
2690 |
+
msgid "Instructions"
|
2691 |
msgstr ""
|
2692 |
|
2693 |
+
#: app/module/hardener/view/rules/information-disclosure/nginx.php:6
|
2694 |
+
#: app/module/hardener/view/rules/prevent-php/nginx.php:14
|
2695 |
msgid ""
|
2696 |
+
"1. Copy the generated code into your site specific .conf file usually "
|
2697 |
+
"located in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/..."
|
2698 |
msgstr ""
|
2699 |
|
2700 |
+
#: app/module/hardener/view/rules/information-disclosure/nginx.php:9
|
2701 |
+
#: app/module/hardener/view/rules/prevent-php/nginx.php:17
|
2702 |
msgid ""
|
|
|
|
|
|