Defender Security – Malware Scanner, Login Security & Firewall - Version 2.1.1.1

Version Description

  • Fix: Two-Factor Authentication QR code not being displayed on new device registration.
Download this release

Release Info

Developer jdailey
Plugin Icon 128x128 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

Files changed (109) hide show
  1. app/behavior/blacklist-free.php +25 -16
  2. app/behavior/report-free.php +40 -47
  3. app/behavior/utils.php +276 -0
  4. app/controller/dashboard.php +3 -89
  5. app/module/advanced-tools/behavior/at-widget.php +78 -84
  6. app/module/advanced-tools/component/auth-api.php +13 -4
  7. app/module/advanced-tools/component/mask-api.php +2 -0
  8. app/module/advanced-tools/controller/main.php +3 -4
  9. app/module/advanced-tools/controller/mask-login.php +0 -2
  10. app/module/advanced-tools/js/scripts.js +18 -18
  11. app/module/advanced-tools/view/2factor-otp-email-edit-from.php +75 -35
  12. app/module/advanced-tools/view/disabled.php +22 -18
  13. app/module/advanced-tools/view/layouts/layout.php +63 -31
  14. app/module/advanced-tools/view/login/disabled.php +4 -2
  15. app/module/advanced-tools/view/login/otp.php +1 -1
  16. app/module/advanced-tools/view/main-free.php +210 -173
  17. app/module/advanced-tools/view/main.php +228 -174
  18. app/module/advanced-tools/view/mask-login/disabled.php +27 -23
  19. app/module/advanced-tools/view/mask-login/enabled.php +89 -66
  20. app/module/audit/behavior/audit-free.php +24 -17
  21. app/module/audit/controller/main-free.php +2 -1
  22. app/module/audit/view/free.php +24 -14
  23. app/module/hardener/behavior/widget.php +51 -43
  24. app/module/hardener/component/change-admin.php +1 -1
  25. app/module/hardener/component/db-prefix-service.php +3 -1
  26. app/module/hardener/component/db-prefix.php +12 -1
  27. app/module/hardener/component/hide-error-service.php +10 -6
  28. app/module/hardener/component/login-duration.php +46 -43
  29. app/module/hardener/component/php-version-service.php +29 -1
  30. app/module/hardener/component/prevent-php.php +2 -1
  31. app/module/hardener/component/protect-information-service.php +28 -10
  32. app/module/hardener/component/servers/apache-service.php +12 -3
  33. app/module/hardener/component/servers/iis-service.php +2 -2
  34. app/module/hardener/controller/main.php +6 -5
  35. app/module/hardener/js/scripts.js +27 -89
  36. app/module/hardener/model/settings.php +3 -0
  37. app/module/hardener/rule.php +38 -14
  38. app/module/hardener/view/ignore.php +34 -27
  39. app/module/hardener/view/issues.php +35 -33
  40. app/module/hardener/view/layouts/layout.php +110 -99
  41. app/module/hardener/view/resolved.php +29 -18
  42. app/module/hardener/view/rules/change-admin.php +82 -36
  43. app/module/hardener/view/rules/db-prefix.php +91 -37
  44. app/module/hardener/view/rules/disable-file-editor.php +76 -42
  45. app/module/hardener/view/rules/disable-trackback.php +75 -54
  46. app/module/hardener/view/rules/disable-xml-rpc.php +78 -49
  47. app/module/hardener/view/rules/hide-error.php +77 -41
  48. app/module/hardener/view/rules/information-disclosure/apache_litespeed.php +13 -0
  49. app/module/hardener/view/rules/information-disclosure/iis7.php +1 -0
  50. app/module/hardener/view/rules/information-disclosure/nginx.php +48 -0
  51. app/module/hardener/view/rules/login-duration.php +140 -42
  52. app/module/hardener/view/rules/php-version.php +69 -42
  53. app/module/hardener/view/rules/prevent-php-executed.php +104 -191
  54. app/module/hardener/view/rules/prevent-php/apache_litespeed.php +20 -0
  55. app/module/hardener/view/rules/prevent-php/iis7.php +10 -0
  56. app/module/hardener/view/rules/prevent-php/nginx.php +56 -0
  57. app/module/hardener/view/rules/protect-information.php +93 -117
  58. app/module/hardener/view/rules/security-key.php +88 -49
  59. app/module/hardener/view/rules/wp-version.php +66 -43
  60. app/module/ip-lockout/behavior/widget.php +52 -44
  61. app/module/ip-lockout/component/ip-api.php +14 -0
  62. app/module/ip-lockout/component/login-protection-api.php +5 -5
  63. app/module/ip-lockout/component/logs-table.php +172 -83
  64. app/module/ip-lockout/controller/main.php +82 -2
  65. app/module/ip-lockout/js/script.js +60 -27
  66. app/module/ip-lockout/model/settings.php +92 -4
  67. app/module/ip-lockout/view/blacklist/enabled.php +205 -99
  68. app/module/ip-lockout/view/detect-404/disabled.php +22 -17
  69. app/module/ip-lockout/view/detect-404/enabled.php +175 -129
  70. app/module/ip-lockout/view/layouts/layout.php +108 -98
  71. app/module/ip-lockout/view/logging/enabled.php +30 -28
  72. app/module/ip-lockout/view/login-lockouts/disabled.php +24 -21
  73. app/module/ip-lockout/view/login-lockouts/enabled.php +146 -102
  74. app/module/ip-lockout/view/notification/enabled.php +123 -112
  75. app/module/ip-lockout/view/notification/report-free.php +26 -76
  76. app/module/ip-lockout/view/notification/report.php +83 -78
  77. app/module/ip-lockout/view/settings.php +41 -35
  78. app/module/scan/behavior/core-result.php +145 -9
  79. app/module/scan/behavior/scan-widget.php +255 -0
  80. app/module/scan/behavior/scan.php +117 -93
  81. app/module/scan/component/result-table.php +136 -67
  82. app/module/scan/component/scan-api.php +5 -4
  83. app/module/scan/controller/main.php +74 -16
  84. app/module/scan/js/script.js +95 -137
  85. app/module/scan/model/scan.php +3 -2
  86. app/module/scan/model/settings.php +34 -1
  87. app/module/scan/view/automation-free.php +31 -59
  88. app/module/scan/view/automation.php +88 -62
  89. app/module/scan/view/ignored.php +9 -7
  90. app/module/scan/view/issues.php +41 -30
  91. app/module/scan/view/layouts/layout.php +131 -151
  92. app/module/scan/view/new.php +16 -12
  93. app/module/scan/view/notification.php +216 -0
  94. app/module/scan/view/scanning.php +85 -45
  95. app/module/scan/view/setting-free.php +107 -132
  96. app/module/scan/view/setting.php +88 -154
  97. app/view/activator-free.php +106 -84
  98. app/view/activator.php +148 -117
  99. app/view/dashboard.php +192 -101
  100. assets/css/styles.css +612 -2562
  101. assets/img/dashboard-blacklist.svg +65 -0
  102. assets/img/defender-activator.svg +135 -0
  103. assets/img/plugins-hummingbird-icon.png +0 -0
  104. assets/img/plugins-hummingbird-icon@2x.png +0 -0
  105. assets/img/plugins-hummingbird.jpg +0 -0
  106. assets/img/scanning-free-man.svg +32 -30
  107. assets/js/scripts.js +35 -33
  108. changelog.txt +17 -5
  109. 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="dev-box">
19
- <div class="box-title">
20
- <span class="span-icon icon-blacklist"></span>
21
- <h3><?php _e( "BLACKLIST MONITOR", "defender-security" ) ?></h3>
22
- <a href="<?php echo Utils::instance()->campaignURL( 'defender_dash_blacklist_pro_tag' ) ?>"
23
- target="_blank"
24
- class="button button-small button-pre"
25
- tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
26
- <?php _e( "PRO FEATURE", "defender-security" ) ?></a>
27
  </div>
28
- <div class="box-content">
29
- <div class="line">
30
- <?php _e( "Automatically check if you’re on Google’s blacklist every 6 hours. If something’s
31
- wrong, we’ll let you know via email.", "defender-security" ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
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="dev-box reporting-sale">
15
- <div class="box-title">
16
- <span class="span-icon icon-report"></span>
17
- <h3><?php _e( "REPORTING", "defender-security" ) ?></h3>
 
 
18
  </div>
19
- <div class="box-content">
20
- <div class="line">
21
- <?php _e( "Get tailored security reports delivered to your inbox so you don’t have to worry
22
- about checking in.", "defender-security" ) ?>
23
  </div>
24
- <div class="row is_multiline">
25
- <div class="col-half">
26
- <a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=reporting' ) ?>">
27
- <div class="report-status with-corner">
28
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/scanning-pre.svg">
29
- <strong><?php _e( "FILE SCANNING", "defender-security" ) ?></strong>
30
- <div class="corner">
31
- Pro
32
- </div>
33
- </div>
34
- </a>
35
- </div>
36
- <div class="col-half">
37
- <a href="<?php echo network_admin_url( 'admin.php?page=wdf-logging&view=report' ) ?>">
38
- <div class="report-status with-corner">
39
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/audit-pre.svg">
40
- <strong><?php _e( "AUDIT LOGGING", "defender-security" ) ?></strong>
41
- <div class="corner">
42
- Pro
43
- </div>
44
- </div>
45
- </a>
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="presale-text">
60
- <div>
61
- <?php printf( __( " Automated reports are included in a WPMU DEV membership along with 100+ plugins
62
- , 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try
63
- it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL( 'defender_dash_reports_upsell_link' ) ) ?>
 
 
 
 
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
- \WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
 
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\Scan',
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="dev-box advanced-tools">
16
- <div class="box-title">
17
- <span class="span-icon icon-scan"></span>
18
- <h3><?php _e( "Advanced Tools", "defender-security" ) ?>
 
19
  </h3>
20
-
21
  </div>
22
- <div class="box-content">
23
- <p class="line end">
24
  <?php _e( "Enable advanced tools for enhanced protection against even the most aggressive of hackers and bots.", "defender-security" ) ?>
25
  </p>
26
- <div class="at-line end">
27
- <strong>
28
- <?php _e( "Two-Factor Authentication", "defender-security" ) ?>
29
- </strong>
30
- <span>
31
- <?php
32
- _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" )
 
 
 
 
33
  ?>
34
- </span>
35
- <?php
36
- $settings = Auth_Settings::instance();
37
- if ( $settings->enabled ):
38
- $enabledRoles = $settings->userRoles;
39
- if ( count( $enabledRoles ) ):
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
- <form method="post" id="advanced-settings-frm" class="advanced-settings-frm line">
64
- <input type="hidden" name="action" value="saveAdvancedSettings"/>
65
- <?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
66
- <input type="hidden" name="enabled" value="1"/>
67
- <button type="submit" class="button button-primary button-small">
68
- <?php _e( "Activate", "defender-security" ) ?>
69
- </button>
70
- </form>
 
71
  <?php endif; ?>
72
- </div>
73
- <div class="at-line">
74
- <strong>
75
- <?php _e( "Mask Login Area", "defender-security" ) ?>
76
- </strong>
77
- <span>
78
- <?php
79
- _e( 'Change the location of WordPress’s default login area.', "defender-security" )
80
- ?>
81
- </span>
82
- <?php
83
- $settings = Mask_Settings::instance();
84
- if ( $settings->enabled ):?>
85
- <?php if ( $settings->isEnabled() == false ): ?>
86
- <div class="well well-small well-yellow with-cap">
87
- <i class="def-icon icon-warning"></i>
88
- <span>
89
- <?php _e( "<strong>Masking is currently inactive.</strong> Choose your URL and save your settings to finish setup.", "defender-security" ) ?>
90
- </span>
91
- <a href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>"><?php _e( "Finish Setup", "defender-security" ) ?></a>
92
- </div>
93
- <?php else: ?>
94
- <div class="well well-green with-cap">
95
- <i class="def-icon icon-tick"></i>
96
- <?php printf( __( "Masking is currently active at <strong>%s</strong>", "defender-security" ), \WP_Defender\Module\Advanced_Tools\Component\Mask_Api::getNewLoginUrl() ) ?>
97
- </div>
98
- <?php endif; ?>
 
 
 
99
  <?php else: ?>
100
- <form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
101
- <input type="hidden" name="action" value="saveATMaskLoginSettings"/>
102
- <?php wp_nonce_field( 'saveATMaskLoginSettings' ) ?>
103
- <input type="hidden" name="enabled" value="1"/>
104
- <button type="submit" class="button button-primary button-small">
105
- <?php _e( "Activate", "defender-security" ) ?>
106
- </button>
107
- </form>
108
  <?php endif; ?>
109
- </div>
 
 
 
 
 
 
 
 
 
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 = urlencode( 'otpauth://totp/' . $name . '?secret=' . $secret . '' );
39
  if ( ! is_null( $title ) ) {
40
- $chl .= urlencode( '&issuer=' . $title );
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
- \WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
 
 
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', '#toggle_force_auth', function (e) {
25
  if ($(this).prop('checked') == true) {
26
- $(this).closest('.column').find('.well').removeClass('is-hidden')
27
  } else {
28
- $(this).closest('.column').find('.well').addClass('is-hidden')
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
- $(this).closest('.column').find('.well').removeClass('is-hidden')
44
  } else {
45
- $(this).closest('.column').find('.well').addClass('is-hidden')
46
  }
47
  })
48
  $('body').on('change', '#redirectTraffic', function (e) {
49
  if ($(this).prop('checked') == true) {
50
- $(this).closest('.column').find('.well').removeClass('is-hidden')
51
  } else {
52
- $(this).closest('.column').find('.well').addClass('is-hidden')
53
  }
54
  })
55
 
56
- $('body').on( 'click','.2f-send-test-email', function(){
57
  var jq = jQuery,
58
- parentForm = jq('.wd-one-time-pass-email form'),
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( ! 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('.wd-one-time-pass-email form'),
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( ! 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
  }
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
- <div class="wp-defender">
9
- <div class="">
10
- <?php _e( "This email sends a temporary passcode when the user can't access their phone.", "defender-security" ) ?>
11
- </div>
12
- <form method="post">
13
- <?php wp_nonce_field( 'twoFactorOPTEmail' ) ?>
14
- <div class="columns">
15
- <div class="column is-7">
16
- <label for="email_subject"><?php _e( 'Subject', "defender-security" ); ?></label>
17
- <input name="subject" type="text" value="<?php echo $subject; ?>" id="email_subject" />
18
- </div>
19
- <div class="column is-5">
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
- <div class="columns">
25
- <div class="column is-12">
26
- <label for="email_body"><?php _e( 'Body', "defender-security" ); ?></label>
27
- <textarea name="body" rows="8" id="email_body"><?php echo $body; ?></textarea>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  </div>
29
- </div>
30
- <div class="columns">
31
- <div class="column is-12">
32
- <label><?php _e( 'Available variables', "defender-security" ); ?></label>
33
- <span class="def-tag tag-generic"><strong>{{passcode}}</strong></span>
34
- <span class="def-tag tag-generic"><strong>{{display_name}}</strong></span>
35
- </div>
36
- </div>
37
- <div class="columns footer">
38
- <div class="column is-12">
39
- <button class="close button button-secondary" aria-label="close" type="button"><?php _e( 'Cancel', "defender-security" ); ?></button>
40
- <button class="button button-primary float-r save-2f-opt-email" type="button"><?php _e( 'Save Template', "defender-security" ); ?></button>
41
- <button class="button button-grey float-r 2f-send-test-email" type="button"><?php _e( 'Send Test', "defender-security" ); ?></button>
 
 
 
42
  </div>
43
- </div>
44
- </form>
45
  </div>
46
- </dialog>
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="dev-box">
2
- <div class="box-title">
3
- <h3 class="def-issues-title">
4
  <?php _e( "Two Factor Authentication", "defender-security" ) ?>
5
  </h3>
6
  </div>
7
- <div class="box-content issues-box-content tc">
8
- <img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>"/>
9
- <p>
10
- <?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" ) ?>
11
- </p>
12
- <form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
 
 
 
 
 
 
 
 
 
 
 
 
 
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="wpmud">
3
- <div id="wp-defender" class="wp-defender">
4
- <div class="advanced-tools">
5
- <h2 class="title">
6
- <?php _e( "Advanced Tools", "defender-security" ) ?>
7
- </h2>
8
- <div class="row">
9
- <div class="col-third">
10
- <ul class="inner-nav is-hidden-mobile">
11
- <li class="issues-nav">
12
- <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'active' : null ?>"
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
- <div class="col-two-third">
32
- <?php echo $contents ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="<?php echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode( urlencode( get_bloginfo( 'name' ) ) . ':' . $email, $secretKey, 149, 149, urlencode( get_bloginfo( 'name' ) ) ) ?>"/>
 
 
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="dev-box is-clipped">
2
- <div class="box-title">
3
- <h3 class="def-issues-title">
4
  <?php _e( "Two-Factor Authentication", "defender-security" ) ?>
5
  </h3>
6
  </div>
7
- <div class="box-content issues-box-content">
8
- <form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
9
- <?php
10
- $class = 'line';
11
- $enabledRoles = $settings->userRoles;
12
-
13
- ?>
14
- <p class="<?php echo $class ?>"><?php _e( "Configure your two-factor authentication settings. Our recommendations are enabled by default.", "defender-security" ) ?></p>
15
- <?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
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
- <div class="well well-green with-cap">
25
- <i class="def-icon icon-tick"></i>
26
- <?php
27
- 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" ),
28
- admin_url( 'profile.php' ) );
29
- ?>
30
- </div>
31
- <?php else: ?>
32
- <div class="well well-yellow with-cap">
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
- </div>
38
- <?php endif; ?>
39
- <div class="columns">
40
- <div class="column is-one-third">
41
- <label><?php _e( "User Roles", "defender-security" ) ?></label>
42
- <span class="sub">
43
- <?php _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" ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  </span>
45
  </div>
46
- <div class="column">
47
- <ul class="dev-list marginless">
48
- <li class="list-header">
49
- <div>
50
- <span class="list-label"><?php _e( "User role", "defender-security" ) ?></span>
51
- </div>
52
- </li>
53
- <?php
54
- $enabledRoles = $settings->userRoles;
55
- $allRoles = get_editable_roles();
56
- foreach ( $allRoles as $role => $detail ):
57
- ?>
58
- <li>
59
- <div>
60
- <span class="list-label">
61
- <label for="toggle_<?php echo esc_attr( $role ) ?>_role" role="checkbox" aria-checked="<?php echo in_array( $role, $enabledRoles ) ? 'true' : 'false' ?>">
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
- <label class="toggle-label"
73
- for="toggle_<?php echo esc_attr( $role ) ?>_role"></label>
74
- </span>
75
- </div>
76
  </div>
77
- </li>
78
- <?php endforeach; ?>
79
- </ul>
80
  </div>
81
  </div>
82
- <div class="columns">
83
- <div class="column is-one-third">
84
- <label><?php _e( "Lost Phone", "defender-security" ) ?></label>
85
- <span class="sub">
 
 
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="column">
90
- <span class="toggle">
91
- <input type="hidden" name="lostPhone" value="0"/>
92
- <input type="checkbox" <?php checked( 1, $settings->lostPhone ) ?> name="lostPhone" value="1"
93
- class="toggle-checkbox" id="toggle_lost_phone"/>
94
- <label class="toggle-label" for="toggle_lost_phone"></label>
95
- </span>&nbsp;
96
- <span><?php _e( "Enable lost phone option", "defender-security" ) ?></span>
 
 
 
 
 
97
  </div>
98
  </div>
99
- <div class="columns no-shadow">
100
- <div class="column is-one-third">
101
- <label><?php _e( "Force Authentication", "defender-security" ) ?></label>
102
- <span class="sub">
 
 
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="column">
107
- <span class="toggle">
108
- <input type="hidden" name="forceAuth" value="0"/>
109
- <input type="checkbox" <?php checked( 1, $settings->forceAuth ) ?> name="forceAuth" value="1"
110
- class="toggle-checkbox" id="toggle_force_auth"/>
111
- <label class="toggle-label" for="toggle_force_auth"></label>
112
- </span>&nbsp;
113
- <span><?php _e( "Force users to log in with two-factor authentication", "defender-security" ) ?></span>
114
- <span class="form-help"><?php _e( "Note: Users will be forced to set up two-factor when they next login.", "defender-security" ) ?></span>
115
- <div class="well well-white <?php echo $settings->forceAuth == false ? 'is-hidden' : null ?>">
116
- <p>
117
- <span class="form-help"><strong><?php _e( "User Roles", "defender-security" ) ?></strong></span>
118
- </p>
119
- <ul>
120
- <?php
121
- $forceAuthRoles = $settings->forceAuthRoles;
122
- foreach ( $allRoles as $role => $detail ):
123
- ?>
124
- <li>
125
- <input id="forceAuth<?php echo esc_attr($role) ?>" type="checkbox" name="forceAuthRoles[]" value="<?php echo esc_attr( $role ) ?>" <?php echo in_array( $role, $forceAuthRoles ) ? 'checked="checked"' : null ?> />
126
- <label for="forceAuth<?php echo esc_attr($role) ?>"><?php echo $detail['name'] ?></label>
127
- </li>
128
- <?php endforeach; ?>
129
- </ul>
130
- <p>
131
- <span class="form-help"><strong><?php _e( "Custom warning message", "defender-security" ) ?></strong></span>
132
- </p>
133
- <textarea name="forceAuthMess"><?php echo $settings->forceAuthMess ?></textarea>
134
- <p>
135
- <span class="form-help"><?php _e( "Note: This is shown in the users Profile area indicating they must use two-factor authentication.", "defender-security" ) ?></span>
136
- </p>
 
 
 
 
 
 
 
 
 
 
137
  </div>
138
  </div>
139
  </div>
140
- <div class="columns no-shadow">
141
- <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_twofactor_whitelabel_pro_tag' ) ?>"
142
- role="button" target="_blank" class="button button-small button-pre">
143
- <?php _e( "Pro Feature", "defender-security" ) ?></a>
144
- <div class="column is-one-third">
145
- <label><?php _e( "Custom Graphic", "defender-security" ) ?></label>
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="column">
151
- <span class="toggle">
152
- <input type="checkbox" class="toggle-checkbox" id="customGraphic"/>
153
- <label class="toggle-label" for="customGraphic"></label>
154
- </span>&nbsp;
155
- <span><?php _e( "Enable custom graphics above login fields", "defender-security" ) ?></span>
156
- </div>
157
- <div class="feature-disabled">
158
-
159
  </div>
160
  </div>
161
- <div class="columns">
162
- <div class="column is-one-third">
163
- <label><?php _e( "Emails", "defender-security" ) ?></label>
164
- <span class="sub">
165
- <?php _e( "Customize the default copy for emails the two-factor feature sends to users.", "defender-security" ) ?>
 
 
166
  </span>
167
  </div>
168
- <div class="column">
169
- <div class="well well-white">
170
- <div class="box-title">
171
- <strong><?php _e( 'Email', "defender-security" );?></strong>
 
 
 
 
 
 
 
 
 
 
 
 
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="columns">
179
- <div class="column is-one-third">
180
- <label><?php _e( "App Download", "defender-security" ) ?></label>
181
- <span class="sub">
182
- <?php _e( "Need the app? Here’s links to the official Google Authenticator apps.", "defender-security" ) ?>
 
 
183
  </span>
184
  </div>
185
- <div class="column">
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="columns">
195
- <div class="column is-one-third">
196
- <label><?php _e( "Active Users", "defender-security" ) ?></label>
197
- <span class="sub">
 
 
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="column">
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="columns mline">
206
- <div class="column is-one-third">
207
- <label><?php _e( "Deactivate", "defender-security" ) ?></label>
208
- <span class="sub">
 
 
209
  <?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
210
  </span>
211
  </div>
212
- <div class="column">
213
- <button type="button" class="button button-secondary deactivate-2factor">
214
  <?php _e( "Deactivate", "defender-security" ) ?>
215
  </button>
216
  </div>
217
  </div>
218
- <div class="clear line"></div>
 
219
  <input type="hidden" name="action" value="saveAdvancedSettings"/>
220
  <?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
221
- <button type="submit" class="button button-primary float-r">
222
- <?php _e( "SAVE SETTINGS", "defender-security" ) ?>
223
- </button>
224
- <div class="clear"></div>
225
- </form>
226
- </div>
 
 
 
 
 
 
227
  </div>
228
- <?php
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="dev-box">
2
- <div class="box-title">
3
- <h3 class="def-issues-title">
4
  <?php _e( "Two-Factor Authentication", "defender-security" ) ?>
5
  </h3>
6
  </div>
7
- <div class="box-content issues-box-content">
8
- <form method="post" id="advanced-settings-frm" class="advanced-settings-frm">
9
- <?php
10
- $class = 'line';
11
- $enabledRoles = $settings->userRoles;
12
-
13
- ?>
14
- <p class="<?php echo $class ?>"><?php _e( "Configure your two-factor authentication settings. Our recommendations are enabled by default.", "defender-security" ) ?></p>
 
15
  <?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
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
- <div class="well well-green with-cap">
25
- <i class="def-icon icon-tick"></i>
26
- <?php
27
- 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" ),
28
- admin_url( 'profile.php' ) );
29
- ?>
 
30
  </div>
31
  <?php else: ?>
32
- <div class="well well-yellow with-cap">
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
  </div>
38
  <?php endif; ?>
39
- <div class="columns">
40
- <div class="column is-one-third">
41
- <label><?php _e( "User Roles", "defender-security" ) ?></label>
42
- <span class="sub">
43
- <?php _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" ) ?>
44
- </span>
45
- </div>
46
- <div class="column">
47
- <ul class="dev-list marginless">
48
- <li class="list-header">
49
- <div>
50
- <span class="list-label"><?php _e( "User role", "defender-security" ) ?></span>
51
- </div>
52
- </li>
53
- <?php
54
- $enabledRoles = $settings->userRoles;
55
- $allRoles = get_editable_roles();
56
- foreach ( $allRoles as $role => $detail ):
57
- ?>
58
- <li>
59
- <div>
60
- <span class="list-label">
61
- <label for="toggle_<?php echo esc_attr( $role ) ?>_role" role="checkbox" aria-checked="<?php echo in_array( $role, $enabledRoles ) ? 'true' : 'false' ?>">
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
- <label class="toggle-label"
73
- for="toggle_<?php echo esc_attr( $role ) ?>_role"></label>
74
- </span>
75
- </div>
76
  </div>
77
- </li>
78
- <?php endforeach; ?>
79
- </ul>
80
  </div>
81
  </div>
82
- <div class="columns">
83
- <div class="column is-one-third">
84
- <label><?php _e( "Lost Phone", "defender-security" ) ?></label>
85
- <span class="sub">
 
 
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="column">
90
- <span class="toggle">
91
- <input type="hidden" name="lostPhone" value="0"/>
92
- <input type="checkbox" <?php checked( 1, $settings->lostPhone ) ?> name="lostPhone" value="1"
93
- class="toggle-checkbox" id="toggle_lost_phone"/>
94
- <label class="toggle-label" for="toggle_lost_phone"></label>
95
- </span>&nbsp;
96
- <span><?php _e( "Enable lost phone option", "defender-security" ) ?></span>
 
 
 
 
 
97
  </div>
98
  </div>
99
- <div class="columns">
100
- <div class="column is-one-third">
101
- <label><?php _e( "Force Authentication", "defender-security" ) ?></label>
102
- <span class="sub">
 
 
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="column">
107
- <span class="toggle">
108
- <input type="hidden" name="forceAuth" value="0"/>
109
- <input type="checkbox" <?php checked( 1, $settings->forceAuth ) ?> name="forceAuth" value="1"
110
- class="toggle-checkbox" id="toggle_force_auth"/>
111
- <label class="toggle-label" for="toggle_force_auth"></label>
112
- </span>&nbsp;
113
- <span><?php _e( "Force users to log in with two-factor authentication", "defender-security" ) ?></span>
114
- <span class="form-help"><?php _e( "Note: Users will be forced to set up two-factor when they next login.", "defender-security" ) ?></span>
115
- <div class="well well-white <?php echo $settings->forceAuth == false ? 'is-hidden' : null ?>">
116
- <p>
117
- <span class="form-help"><strong><?php _e( "User Roles", "defender-security" ) ?></strong></span>
118
- </p>
119
- <ul>
120
- <?php
121
- $forceAuthRoles = $settings->forceAuthRoles;
122
- foreach ( $allRoles as $role => $detail ):
123
- ?>
124
- <li>
125
- <input id="forceAuth<?php echo esc_attr($role) ?>" type="checkbox" name="forceAuthRoles[]" value="<?php echo esc_attr( $role ) ?>" <?php echo in_array( $role, $forceAuthRoles ) ? 'checked="checked"' : null ?> />
126
- <label for="forceAuth<?php echo esc_attr($role) ?>"><?php echo $detail['name'] ?></label>
127
- </li>
128
- <?php endforeach; ?>
129
- </ul>
130
- <p>
131
- <span class="form-help"><strong><?php _e( "Custom warning message", "defender-security" ) ?></strong></span>
132
- </p>
133
- <textarea name="forceAuthMess"><?php echo $settings->forceAuthMess ?></textarea>
134
- <p>
135
- <span class="form-help"><?php _e( "Note: This is shown in the users Profile area indicating they must use two-factor authentication.", "defender-security" ) ?></span>
136
- </p>
 
 
 
 
 
 
 
 
 
 
137
  </div>
138
  </div>
139
  </div>
140
- <div class="columns">
141
- <div class="column is-one-third">
142
- <label><?php _e( "Custom Graphic", "defender-security" ) ?></label>
143
- <span class="sub">
 
 
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="column">
148
- <span class="toggle">
149
  <input type="hidden" name="customGraphic" value="0"/>
150
- <input type="checkbox" <?php checked( 1, $settings->customGraphic ) ?> name="customGraphic"
151
- value="1"
152
- class="toggle-checkbox" id="customGraphic"/>
153
- <label class="toggle-label" for="customGraphic"></label>
154
- </span>&nbsp;
155
- <span><?php _e( "Enable custom graphics above login fields", "defender-security" ) ?></span>
156
- <span class="form-help"></span>
157
- <div class="well well-white <?php echo $settings->customGraphic == false ? 'is-hidden' : null ?>">
158
- <p>
159
- <span class="form-help"><strong><?php _e( "Custom Graphic", "defender-security" ) ?></strong>
160
- - <?php _e( "For best results use a 168x168px JPG or PNG.", "defender-security" ) ?></span>
161
- </p>
 
 
162
  <input type="hidden" id="customGraphicURL" name="customGraphicURL"
163
  value="<?php echo $settings->customGraphicURL ?>"/>
164
- <button type="button" class="button button-light file-picker">
165
- <i class="wdv-icon wdv-icon-fw wdv-icon-plus-sign"></i>
166
- </button>
167
- <img id="customGraphicIMG" height="40" src="<?php echo $settings->customGraphicURL ?>">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  </div>
169
  </div>
170
  </div>
171
- <div class="columns">
172
- <div class="column is-one-third">
173
- <label><?php _e( "Emails", "defender-security" ) ?></label>
174
- <span class="sub">
175
- <?php _e( "Customize the default copy for emails the two-factor feature sends to users.", "defender-security" ) ?>
 
 
176
  </span>
177
  </div>
178
- <div class="column">
179
- <div class="well well-white">
180
- <div class="box-title">
181
- <strong><?php _e( 'Email', "defender-security" ); ?></strong>
 
 
 
 
 
 
 
 
 
 
 
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="columns">
190
- <div class="column is-one-third">
191
- <label><?php _e( "App Download", "defender-security" ) ?></label>
192
- <span class="sub">
193
- <?php _e( "Need the app? Here’s links to the official Google Authenticator apps.", "defender-security" ) ?>
 
 
194
  </span>
195
  </div>
196
- <div class="column">
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="columns">
206
- <div class="column is-one-third">
207
- <label><?php _e( "Active Users", "defender-security" ) ?></label>
208
- <span class="sub">
 
 
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="column">
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="columns mline">
217
- <div class="column is-one-third">
218
- <label><?php _e( "Deactivate", "defender-security" ) ?></label>
219
- <span class="sub">
 
 
220
  <?php _e( "Disable two-factor authentication on your website.", "defender-security" ) ?>
221
  </span>
222
  </div>
223
- <div class="column">
224
- <button type="button" class="button button-secondary deactivate-2factor">
225
  <?php _e( "Deactivate", "defender-security" ) ?>
226
  </button>
227
  </div>
228
  </div>
229
- <div class="clear line"></div>
 
230
  <input type="hidden" name="action" value="saveAdvancedSettings"/>
231
  <?php wp_nonce_field( 'saveAdvancedSettings' ) ?>
232
- <button type="submit" class="button button-primary float-r">
233
- <?php _e( "SAVE SETTINGS", "defender-security" ) ?>
234
- </button>
235
- <div class="clear"></div>
236
- </form>
237
- </div>
238
- </div>
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="dev-box">
2
- <div class="box-title">
3
- <h3 class="def-issues-title">
4
- <?php _e( "Mask Login Area", "defender-security" ) ?>
5
- </h3>
6
- </div>
7
- <div class="box-content issues-box-content tc">
8
- <img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/2factor-disabled.svg' ?>"/>
9
- <p>
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
- <div class="clear line"></div>
15
- <input type="hidden" name="action" value="saveATMaskLoginSettings"/>
16
- <?php wp_nonce_field( 'saveATMaskLoginSettings' ) ?>
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( "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="dev-box">
2
- <div class="box-title">
3
- <h3 class="def-issues-title">
4
  <?php _e( "Mask Login Area", "defender-security" ) ?>
5
  </h3>
6
  </div>
7
- <div class="box-content issues-box-content">
8
- <form method="post" id="ad-mask-settings-frm" class="advanced-settings-frm">
9
- <p class="line"><?php _e( "Change your default WordPress login URL to hide your login area from hackers and bots.", "defender-security" ) ?></p>
 
 
10
  <?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
11
- <div class="well well-error with-cap">
12
- <i class="def-icon icon-warning icon-yellow "></i>
13
- <?php echo implode( '<br/>', array_unique( wp_defender()->global['compatibility'] ) ); ?>
 
14
  </div>
15
  <?php else: ?>
16
  <?php if ( strlen( trim( $settings->maskUrl ) ) == 0 ): ?>
17
- <div class="well well-yellow with-cap">
18
- <i class="def-icon icon-warning icon-yellow "></i>
19
- <?php _e( "Masking is currently inactive. Choose your URL and save your settings to finish setup. ", "defender-security" ) ?>
 
20
  </div>
21
  <?php else: ?>
22
- <div class="well well-green with-cap">
23
- <i class="def-icon icon-tick"></i>
24
- <?php printf( __( "Masking is currently active at <strong>%s</strong>", "defender-security" ), \WP_Defender\Module\Advanced_Tools\Component\Mask_Api::getNewLoginUrl() ) ?>
 
25
  </div>
26
  <?php endif; ?>
27
  <?php endif; ?>
28
-
29
- <input type="hidden" name="action" value="saveATMaskLoginSettings"/>
30
- <?php wp_nonce_field( 'saveATMaskLoginSettings' ) ?>
31
- <div class="columns">
32
- <div class="column is-one-third">
33
- <label><?php _e( "Masking URL", "defender-security" ) ?></label>
34
- <span class="sub">
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
- <div class="column">
39
- <span class="form-help"><?php _e( "You can choose any slug you like using alphanumeric characters and '-'s only. For security reasons, less obvious slugs are recommended as they are harder for bots to guess.", "defender-security" ) ?></span>
40
- <span class="form-help"><strong><?php _e( 'New Login Slug', "defender-security" ) ?></strong></span>
41
- <input type="text" class="tl block" name="maskUrl" value="<?php echo $settings->maskUrl ?>" placeholder="<?php _e( 'I.e. dashboard', "defender-security" ); ?>"/>
42
- <span class="form-help-s"><?php printf( __( "Users will login at <strong>%s</strong>. 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 ) ?></span>
 
 
 
 
 
 
 
 
 
43
  </div>
44
  </div>
45
- <div class="columns">
46
- <div class="column is-one-third">
47
- <label><?php _e( "Redirect traffic", "defender-security" ) ?></label>
48
- <span class="sub">
49
- <?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" ) ?>
 
 
50
  </span>
51
  </div>
52
- <div class="column">
53
- <span class="toggle">
 
54
  <input type="hidden" name="redirectTraffic" value="0"/>
55
- <input type="checkbox" <?php checked( 1, $settings->redirectTraffic ) ?> name="redirectTraffic"
56
- value="1"
57
- class="toggle-checkbox" id="redirectTraffic"/>
58
- <label class="toggle-label" for="redirectTraffic"></label>
59
- </span>&nbsp;
60
- <span><?php _e( "Enable 404 redirection", "defender-security" ) ?></span>
61
- <div class="clear mline"></div>
62
- <div class="well well-white <?php echo $settings->redirectTraffic == false ? 'is-hidden' : null ?>">
63
- <p>
64
- <span class="form-help"><strong><?php _e( "Redirection URL", "defender-security" ) ?></strong></span>
65
- </p>
66
- <input type="text" class="block" name="redirectTrafficUrl"
67
- value="<?php echo $settings->redirectTrafficUrl ?>">
68
- <?php if ( strlen( $settings->redirectTrafficUrl ) ): ?>
69
- <p>
70
- <span class="form-help-s"><?php printf( __( "Visitors who visit the default login URLs will be redirected to <strong>%s</strong>", "defender-security" ), get_site_url() . '/' . $settings->redirectTrafficUrl ) ?></span>
71
- </p>
72
- <?php endif; ?>
73
  </div>
74
  </div>
75
  </div>
76
- <div class="columns mline">
77
- <div class="column is-one-third">
78
- <label><?php _e( "Deactivate", "defender-security" ) ?></label>
 
 
 
 
 
79
  </div>
80
- <div class="column">
81
- <button type="button" class="button button-secondary deactivate-atmasking">
82
- <?php _e( "Deactivate", "defender-security" ) ?>
83
  </button>
84
  </div>
85
  </div>
86
- <div class="clear line"></div>
87
- <button type="submit" class="button button-primary float-r">
88
- <?php _e( "Save Settings", "defender-security" ) ?>
89
- </button>
90
- <div class="clear"></div>
91
- </form>
92
- </div>
 
 
 
 
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="dev-box reporting-sale audit-widget">
16
- <div class="box-title">
17
- <span class="span-icon icon-blacklist"></span>
18
- <h3><?php _e( "AUDIT LOGGING", "defender-security" ) ?></h3>
19
- <a href="<?php echo Utils::instance()->campaignURL('defender_dash_auditlogging_pro_tag') ?>" target="_blank" class="button button-small button-pre"
20
- tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>"><?php _e( "PRO FEATURE", "defender-security" ) ?></a>
 
 
 
21
  </div>
22
- <div class="box-content">
23
- <div class="line">
24
- <?php
25
- esc_html_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" )
26
- ?>
27
  </div>
28
- <div class="presale-text">
29
- <div>
30
- <?php printf( __( "Audit logging is a pro feature included in a WPMU DEV membership along with 100+ plugins,
31
- 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL('defender_dash_auditlogging_upsell_link') ) ?>
32
- </a>
 
 
 
 
 
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 whats 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
- \WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
 
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
- <h2 class="title">
5
- <?php _e( "AUDIT LOGGING", "defender-security" ) ?>
6
- </h2>
7
- <div class="dev-box">
8
- <div class="box-title">
9
- <h3><?php _e( "Upgrade", "defender-security" ) ?></h3>
 
 
 
 
 
 
 
10
  </div>
11
- <div class="box-content tc">
12
- <img class="mline" src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/audit-free.svg"/>
13
- <div class="line max-600">
14
- <?php _e( "Track and log each and every event when changes are made to your website and get details reports on everything from what your users are doing to hacking attempts. This is a pro feature that requires an active WPMU DEV membership. Try it free today!", "defender-security" ) ?>
 
 
 
 
 
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="dev-box hardener-widget">
17
- <div class="box-title">
18
- <span class="span-icon hardener-icon" aria-hidden="true"></span>
19
- <h3><?php _e( "Security Tweaks", "defender-security" ) ?>
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-content">
32
- <?php $count = count( $issues ); ?>
33
- <div class="line <?php echo $count ? 'end' : null ?>">
34
- <?php _e( "Defender checks for security tweaks you can make to enhance your website’s
35
- defense against hackers and bots.", "defender-security" ) ?>
36
- </div>
37
  <?php if ( $count ): ?>
38
- <ul class="dev-list end">
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="well well-green with-cap mline">
56
- <i class="def-icon icon-tick"></i>
57
- <?php _e( "You have actioned all available security tweaks. Great work!", "defender-security" ) ?>
 
 
 
58
  </div>
59
  <?php endif; ?>
60
- <div class="row">
61
- <div class="col-third tl">
62
- <a href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener' ) ?>"
63
- class="button button-small button-secondary"><?php _e( "VIEW ALL", "defender-security" ) ?></a>
64
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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' => 10,
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
- // TODO: Implement revert() method.
 
 
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
- // TODO: Implement revert() method.
 
 
 
 
 
 
 
 
 
 
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 = $altCache->get( 'Hide_Error_Service', null );
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
- WP_DEBUG == true && ( ! defined( 'WP_DEBUG_DISPLAY' ) || WP_DEBUG_DISPLAY != false )) {
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
- * find the line we append by checking the comment
154
- * remove whole block
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
- 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
  return self::$service;
28
  }
29
 
30
- function getDescription() {
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', 10, 2 );
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
- function revert() {
61
  if ( ! $this->verifyNonce() ) {
62
  return;
63
  }
64
- $settings = Settings::instance();
65
- $service = $this->getService();
66
- $ret = $service->revert();
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 = $this->getService();
81
- $duration = HTTP_Helper::retrieve_post( '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 ( !$user ){
107
  return;
108
  }
109
  $last_login_time = current_time( 'mysql' );
110
- update_user_meta( $user->ID, 'last_login_time', $last_login_time );
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 = wp_get_current_user();
120
- $user_id = $current_user->ID;
121
- if ( !$defender_logout ) {
122
- $current_time = current_time( 'mysql' );
123
- $last_login_time = get_user_meta( $user_id, 'last_login_time', true );
124
- $login_period = $this->getService()->getDuration( true );
125
  if ( $last_login_time ) {
126
- $current_time = strtotime( $current_time );
127
- $last_login_time = strtotime( $last_login_time );
128
- $diff = $current_time - $last_login_time ;
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 = Utils::instance()->currentPageURL();
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 = wp_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
- 'redirect_to' => $logout_payload['redirect_to'],
161
- 'defender_login_message' => $logout_payload['msg'],
162
- ), $login_url );
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 = wp_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
- 'redirect_to' => $logout_payload['redirect_to'],
177
- 'defender_login_message' => $logout_payload['msg'],
178
- ), $login_url );
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 = 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 );
196
- $msg = htmlspecialchars( $msg, ENT_QUOTES, 'UTF-8' );
197
- $message .= '<p class="login message">'. $msg . '</p>';
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
- if ( version_compare( $this->getPHPVersion(), '5.6', '<=' ) ) {
 
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 = Settings::instance();
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 = 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( 'user-agent' => $_SERVER['HTTP_USER_AGENT'], 'sslverify' => $ssl_verify ) );
 
 
 
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
- $rules = $this->apache_rule();
50
- $containsSearch = array_diff( $rules, $htConfig );
51
- if ( count( $containsSearch ) == 0 || ( count( $containsSearch ) == count( $rules ) ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
52
  //append this
53
- $htConfig = array_merge( $htConfig, array( implode( '', $rules ) ) );
54
- file_put_contents( $htPath, implode( '', $htConfig ), LOCK_EX );
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 = array(
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 = array(
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 ( file_put_contents( $htPath, '', LOCK_EX ) === false ) {
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 = HTTP_Helper::retrieve_post( '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
- \WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
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
- WDHardener.rules();
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
- if ($('.hardener-instructions-apache').is(':visible')) {
21
- //Apache
22
- $('.hardener-apache-frm [name="file_paths"]').val(text_val);
23
- } else if ($('.hardener-instructions-litespeed').is(':visible')) {
24
- //Litespeed
25
- $('.hardener-litespeed-frm [name="file_paths"]').val(text_val);
26
- } else if ($('.hardener-instructions-nginx').is(':visible')) {
27
- //Nginx
28
- var excludedFiles = text_val.split('\n');
29
- var newRule = "";
30
- var $wp_content = $('.hardener-wp-content-dir').val();
31
- $.each(excludedFiles, function (index, file) {
32
- if (file) {
33
- newRule += "\n location ~* ^" + $wp_content + "/.*&#92;" + 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-count i').removeClass('def-icon icon-tick').addClass('def-icon icon-warning');
114
  $('.count-issues').removeClass('wd-hide');
115
  } else {
116
  $('.count-issues').addClass('wd-hide');
117
- $('.issues-count i').removeClass('def-icon icon-warning').addClass('def-icon icon-tick');
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('.rule').slideUp(500, function () {
135
  $(this).remove();
136
- if ($('.rule').size() == 0) {
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').removeAttr('disabled');
 
 
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 + "/.*&#92;" + 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
- class="button button-secondary"><?php _e( "Ignore", "defender-security" ) ?></button>
 
112
  </form>
113
  <?php
114
  }
@@ -124,23 +125,46 @@ abstract class Rule extends Component {
124
 
125
  public function showRestoreForm() {
126
  ?>
127
- <div class="rule closed">
128
- <div class="rule-title">
129
- <i class="def-icon icon-warning fill-grey"></i>
130
- <?php echo $this->getTitle(); ?>
131
- <form method="post" class="float-r hardener-frm rule-process">
132
- <?php $this->createNonceField(); ?>
133
- <input type="hidden" name="action" value="restoreHardener"/>
134
- <input type="hidden" name="slug" value="<?php echo static::$slug ?>"/>
135
- <button type="submit"
136
- class="button button-secondary button-small"><?php _e( "Restore", "defender-security" ) ?></button>
137
- </form>
138
- <div class="clear"></div>
 
 
 
 
 
 
 
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
- <div class="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "IGNORED", "defender-security" ) ?>
4
- <?php if ( $controller->getCount( 'ignore' ) ): ?>
5
- <span class="def-tag tag-generic count-ignored">
6
- <?php echo $controller->getCount( 'ignore' ) ?>
7
- </span>
8
- <?php endif; ?>
9
  </h3>
10
- </div>
11
- <div class="box-content">
12
- <div class="box-content">
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
- <div class="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "Issues", "defender-security" ) ?>
4
- <?php if ( $controller->getCount( 'issues' ) ): ?>
5
- <span class="def-tag tag-yellow count-issues"><?php echo $controller->getCount( 'issues' ) ?></span>
6
- <?php endif; ?>
7
- </h3>
 
 
 
8
  </div>
9
- <div class="box-content">
10
- <div class="box-content">
11
- <div class="line">
12
- <?php _e( "There are a number of security tweaks you can make to your website to strengthen it against harmful hackers and bots that try to break in. We recommend you action as many tweaks as possible.", "defender-security" ) ?>
13
- </div>
14
- <div class="rules">
15
- <?php
16
- $setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
17
- $issues = $setting->getIssues();
18
- if ( count( $issues ) == 0 ) {
19
- ?>
20
- <div class="well well-green with-cap">
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
- </div>
 
 
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
- <div class="wrap">
 
 
 
 
 
 
 
 
 
 
 
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="dev-box summary-box">
6
- <div class="box-content">
7
- <div class="columns">
8
- <div class="column is-7 issues-count">
9
- <div>
10
- <h5 class="">
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
- </h5>
15
- <?php if ( $controller->getCount( 'issues' ) > 0 ) :
16
- $hardener_issues = ( $controller->getCount( 'fixed' ) + $controller->getCount( 'ignore' ) ) . '/' . count( \WP_Defender\Module\Hardener\Model\Settings::instance()->getDefinedRules( false ) );
17
- ?>
18
- <span class="" tooltip="<?php esc_attr_e( sprintf( __('You have actioned %s security tweaks.', "defender-security" ), $hardener_issues ) ); ?>">
19
- <?php else : ?>
20
- <span class="" tooltip="<?php esc_attr_e( 'You have no outstanding security issues.', "defender-security" ); ?>">
21
- <?php endif; ?>
22
- <?php
23
- $icon = $controller->getCount( 'issues' ) == 0 ? ' <i class="def-icon icon-tick icon-active" aria-hidden="true"></i>' : ' <i class="def-icon icon-warning" aria-hidden="true"></i>';
24
- echo $icon;
25
- ?>
26
- </span>
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="col-third">
56
- <nav role="navigation" aria-label="Filters">
57
- <ul class="inner-nav is-hidden-mobile">
58
- <li>
59
- <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'active' : null ?>"
60
- href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener' ) ?>">
61
- <?php _e( "Issues", "defender-security" ) ?>
62
- <?php
63
- $tooltip = '';
64
- if ( $controller->getCount( 'issues' ) > 0 ) :
65
- $tooltip = 'tooltip="'.esc_attr( sprintf( __('You have %d security tweak(s) needing attention.', "defender-security" ), $controller->getCount( 'issues' ) ) ).'"';
66
- endif;
67
- ?>
68
- <span class="def-tag count-issues tag-yellow <?php echo $controller->getCount( 'issues' ) == 0 ? 'wd-hide' : null ?>" <?php echo $tooltip; ?>><?php echo $controller->getCount( 'issues' ) ?></span>
69
- </a>
70
- </li>
71
- <li>
72
- <a class="<?php echo $controller->isView( 'resolved' ) ? 'active' : null ?>"
73
- href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=resolved' ) ?>">
74
- <?php _e( "Resolved", "defender-security" ) ?>
75
- <span class="count-resolved <?php echo $controller->getCount( 'fixed' ) == 0 ? 'wd-hide' : null ?>"><?php echo $controller->getCount( 'fixed' ) ?></span>
76
- </a>
77
- </li>
78
- <li>
79
- <a class="<?php echo $controller->isView( 'ignored' ) ? 'active' : null ?>"
80
- href="<?php echo network_admin_url( 'admin.php?page=wdf-hardener&view=ignored' ) ?>">
81
- <?php _e( "Ignored", "defender-security" ) ?>
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="col-two-third">
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
- <div class="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "RESOLVED", "defender-security" ) ?>
4
- <span class="def-tag tag-success count-resolved">
5
- <?php echo $controller->getCount( 'fixed' ) ?></span></h3>
6
- </div>
7
- <div class="box-content">
8
- <div class="box-content">
9
- <div class="line">
10
- <?php _e( "Excellent work. The following vulnerabilities have been fixed.", "defender-security" ) ?>
11
- </div>
12
- <div class="rules fixed">
13
- <?php foreach ( \WP_Defender\Module\Hardener\Model\Settings::instance()->getFixed() as $rule ): ?>
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
- <div class="rule closed" id="change_admin">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Change default admin user account", "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( "If you're using the default admin login name, you're giving away an important piece of the puzzle hackers
14
- need to hijack your website. Having a default admin user account is bad practice, but one that's easily
15
- fixed. Ensure you backup your database before choosing a new username.", "defender-security" ) ?>
16
  </div>
17
- <h3>
18
- <?php _e( "How to fix", "defender-security" ) ?>
19
- </h3>
20
- <div class="well has-input">
21
- <?php if ( $controller->check() ): ?>
22
- <?php _e( "You don’t have a user with username admin.", "defender-security" ) ?>
23
- <?php else: ?>
24
- <div class="line">
25
- <p><?php _e( "Please change the username from admin to something unique.", "defender-security" ) ?></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <div class="rule closed" id="db_prefix">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Change default database prefix", "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( "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. It’s good practice to come up with a unique prefix to protect yourself from this. Please backup your database before changing the prefix.", "defender-security" ) ?>
 
 
14
  </div>
15
- <h3>
16
- <?php _e( "How to fix", "defender-security" ) ?>
17
- </h3>
18
- <div class="well has-input">
19
- <?php if ( $controller->check() ): ?>
20
- <?php
21
- global $wpdb;
22
- printf( __( "Your prefix is <strong>%s</strong> and is unique.", "defender-security" ), $wpdb->prefix ) ?>
23
- <?php else: ?>
24
- <div class="line">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  <p>
26
- <?php esc_html_e( "We recommend using a different prefix to protect your database. Ensure you backup your database before changing the prefix.", "defender-security" ) ?>
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
- <div class="rule closed" id="disable_file_editor">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Disable the file editor", "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( "WordPress comes with a file editor built into the system. This means that anyone with access to your login information can edit your plugin and theme files. We recommend disabling the editor.", "defender-security" ) ?>
 
14
  </div>
15
- <h3>
16
- <?php _e( "How to fix", "defender-security" ) ?>
17
- </h3>
18
- <div class="well">
19
- <?php if ( $controller->check() ): ?>
20
- <p class="line"><?php _e( "The file editor is disabled.", "defender-security" ) ?></p>
21
- <form method="post" class="hardener-frm rule-process">
22
- <?php $controller->createNonceField(); ?>
23
- <input type="hidden" name="action" value="processRevert"/>
24
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
25
- <button class="button button-small button-grey"
26
- type="submit"><?php _e( "Revert", "defender-security" ) ?></button>
27
- </form>
28
- <?php else: ?>
29
- <div class="line">
30
- <p><?php _e( "We will disable access to the file editor for you. You can enable it again anytime.", "defender-security" ) ?></p>
31
- </div>
32
- <form method="post" class="hardener-frm rule-process">
33
- <?php $controller->createNonceField(); ?>
34
- <input type="hidden" name="action" value="processHardener"/>
35
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
36
- <button class="button float-r"
37
- type="submit"><?php _e( "Disable File Editor", "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
+ ?>
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
- <div class="rule closed" id="disable_trackback">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Disable trackbacks and pingbacks", "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( "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" ) ?>
 
14
  </div>
15
- <h3>
16
- <?php _e( "How to fix", "defender-security" ) ?>
17
- </h3>
18
- <div class="well">
19
- <?php if ( $controller->check() ): ?>
20
- <p class="mline"><?php _e( "Trackbacks and pingbacks are turned off.", "defender-security" ) ?></p>
21
- <form method="post" class="hardener-frm rule-process">
22
- <?php $controller->createNonceField(); ?>
23
- <input type="hidden" name="action" value="processRevert"/>
24
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
25
- <button class="button button-small button-grey"
26
- type="submit"><?php _e( "Revert", "defender-security" ) ?></button>
27
- </form>
28
- <?php else: ?>
29
- <div class="line">
30
- <p><?php _e( "We will turn off trackbacks and pingbacks in your WordPress settings area.", "defender-security" ) ?></p>
31
- </div>
32
- <label>
33
- <?php if ( is_multisite() ) : ?>
34
- <?php _e( "Disable pingbacks on all existing posts in all sites", "defender-security" ); ?>
35
- <?php else: ?>
36
- <?php _e( "Disable pingbacks on all existing posts", "defender-security" ); ?>
37
- <?php endif; ?>
38
- <span class="toggle float-r">
39
- <input type="checkbox" name="update_posts" value="1" class="toggle-checkbox trackback-toggle-update-posts" id="toggle_update_posts"/>
40
- <label class="toggle-label" for="toggle_update_posts"></label>
41
- </span>
42
- </label>
43
- <div class="clear mline"></div>
44
- <form method="post" class="hardener-frm rule-process hardener-frm-process-trackback">
45
- <?php $controller->createNonceField(); ?>
46
- <input type="hidden" name="action" value="processHardener"/>
47
- <input type="hidden" name="updatePosts" value="no"/>
48
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
49
- <button class="button float-r"
50
- type="submit"><?php _e( "Disable Pingbacks", "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="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
- <div class="rule closed" id="disable_xml_rpc">
2
- <div class="rule-title" role="link" tabindex="0">
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( 'Disable XML-RPC', "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( '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
- <h3>
18
- <?php _e( "How to fix", "defender-security" ) ?>
19
- </h3>
20
- <div class="line">
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
- <div class="">
24
- <?php if ( $controller->check() ): ?>
25
- <p class="mline notification">
26
- <i class="def-icon icon-tick" aria-hidden="true"></i>
27
- <span><?php _e( 'XML-RPC is disabled.', "defender-security" ) ?></span>
 
 
 
 
 
 
 
28
  </p>
29
- <div class="end"></div>
30
- <div class="clear mline"></div>
31
- <form method="post" class="hardener-frm rule-process">
32
- <?php $controller->createNonceField(); ?>
33
- <input type="hidden" name="action" value="processRevert"/>
34
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
35
- <button class="button button-secondary"
36
- type="submit"><?php _e( "Revert", "defender-security" ) ?></button>
37
- </form>
38
- <?php else: ?>
39
- <div class="end"></div>
40
- <div class="clear mline"></div>
41
- <form method="post" class="hardener-frm rule-process hardener-frm-process-xml-rpc">
42
- <?php $controller->createNonceField(); ?>
43
- <input type="hidden" name="action" value="processHardener"/>
44
- <input type="hidden" name="updatePosts" value="no"/>
45
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
46
- <button class="button float-r"
47
- type="submit"><?php _e( "Disable XML-RPC", "defender-security" ) ?></button>
48
- </form>
49
- <?php $controller->showIgnoreForm() ?>
50
- <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <div class="rule closed" id="disable-file-editor">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Hide error reporting", "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( "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
- <h3>
16
- <?php _e( "How to fix", "defender-security" ) ?>
17
- </h3>
18
- <div class="well">
19
- <?php if ( $controller->check() ): ?>
20
- <p class=""><?php _e( "All PHP errors are hidden.", "defender-security" ) ?></p>
21
- <?php else: ?>
22
- <?php
23
- //if WP debug == true, we will display a form to turn it off
24
- if ( WP_DEBUG == true && ( ! defined( 'WP_DEBUG_DISPLAY' ) || WP_DEBUG_DISPLAY != false ) ): ?>
25
- <div class="line">
26
- <p><?php _e( "We will add the necessary code to prevent these errors displaying.", "defender-security" ) ?></p>
 
 
 
 
 
 
 
 
 
 
 
27
  </div>
28
- <form method="post" class="hardener-frm rule-process">
29
- <?php $controller->createNonceField(); ?>
30
- <input type="hidden" name="action" value="processHardener"/>
31
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
32
- <button class="button float-r"
33
- type="submit"><?php _e( "Disable error debugging", "defender-security" ) ?></button>
34
- </form>
35
- <?php $controller->showIgnoreForm() ?>
36
- <?php
37
- //php debug is turn off, however the error still dsplay, need to show user about this
38
- else: ?>
39
- <p class="line">
40
- <?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" ) ?>
 
 
 
 
 
 
 
 
 
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
- <div class="rule closed" id="login-duration">
2
- <div class="rule-title" role="link" tabindex="0">
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 echo $controller->getTitle() ?>
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, users who select the 'remember me' option stay logged in for 14 days", "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
- if ( $controller->check() ):
23
- ?>
24
- <p class="line"><?php esc_attr_e( sprintf( __('Login Duration is locked down. Current duration is %d days', "defender-security" ), $controller->getService()->getDuration() ) ); ?></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  <form method="post" class="hardener-frm rule-process">
26
- <?php $controller->createNonceField(); ?>
27
  <input type="hidden" name="action" value="processRevert"/>
28
  <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
29
- <button class="button button-small button-grey" type="submit"><?php _e( "Revert", "defender-security" ) ?></button>
 
 
30
  </form>
31
- <?php
32
- else:
33
- ?>
34
- <div class="line">
35
- <p><?php _e( "Please change the number of days a user can stay logged in", "defender-security" ) ?></p>
36
- </div>
37
- <form method="post" class="hardener-frm rule-process">
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
- <button class="button float-r"
44
- type="submit"><?php _e( "Update", "defender-security" ) ?></button>
 
45
  </form>
46
- <?php $controller->showIgnoreForm() ?>
47
- <div class="clear"></div>
48
- <?php
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
- <div class="rule closed" id="php_version">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Update PHP to latest version", "defender-security" ) ?>
9
- </div>
10
- <div class="rule-content">
11
- <h3><?php _e( "Overview", "defender-security" ) ?></h3>
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="columns version-col">
21
- <div class="column">
22
- <strong><?php _e( "Current version", "defender-security" ) ?></strong>
23
- <?php $class = $controller->check() ? 'def-tag tag-success' : 'def-tag tag-error' ?>
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
- <h3>
34
- <?php _e( "How to fix", "defender-security" ) ?>
35
- </h3>
36
- <div class="well mline">
37
- <?php if ( $controller->check() ): ?>
38
- <?php _e( "Your PHP version is okay.", "defender-security" ) ?>
39
- <?php else: ?>
40
- <?php _e( "Your PHP version can be upgraded by your hosting provider or System Administrator. Please contact them for assistance.", "defender-security" ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <div class="rule closed" id="disable-file-editor">
2
- <div class="rule-title" role="link" tabindex="0">
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
- if ( $controller->check() ): ?>
23
- <p class="line"><?php _e( "PHP execution is locked down.", "defender-security" ) ?>
24
- <?php
25
- if ( in_array( $setting->active_server, array( 'apache', 'litespeed' ) ) ) {
26
- $file_paths = $setting->getExcludedFilePaths();
27
- if ( !empty( $file_paths ) && is_array( $file_paths ) && count( $file_paths ) > 0 ) {
28
- _e(" The following file paths have been allowed in the /wp-content directory :", "defender-security" );
29
- ?>
30
- <div class="hardener-instructions hardener-instructions-apache-litespeed">
31
- <textarea class="hardener-php-excuted-ignore"><?php echo implode( "\n", $file_paths ); ?></textarea>
32
- <form method="post" class="hardener-frm hardener-update-frm rule-process">
33
- <?php $controller->createNonceField(); ?>
34
- <input type="hidden" name="action" value="updateHardener"/>
35
- <input type="hidden" name="file_paths" value="<?php echo implode( "\n", $file_paths ); ?>"/>
36
- <input type="hidden" name="current_server" value="<?php echo $setting->active_server; ?>"/>
37
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
38
- <button class="button button-small float-r"
39
- type="submit"><?php _e( "Update .htaccess file", "defender-security" ) ?></button>
40
- </form>
41
- </div>
42
- <?php
43
- }
44
- }
45
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  </p>
47
- <form method="post" class="hardener-frm rule-process">
48
- <?php $controller->createNonceField(); ?>
49
- <input type="hidden" name="action" value="processRevert"/>
50
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
51
- <button class="button button-small button-grey"
52
- type="submit"><?php _e( "Revert", "defender-security" ) ?></button>
53
- </form>
54
- <?php else:
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
- <div class="column is-one-third">
80
- <select class="mline hardener-server-list" name="server">
81
- <?php foreach ( $servers as $server => $server_name ): ?>
82
- <option value="<?php echo esc_attr( $server ); ?>" <?php selected( $server, $setting->active_server ); ?>><?php echo esc_html( $server_name ); ?></option>
83
- <?php endforeach; ?>
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
- <form method="post" class="hardener-frm hardener-apache-frm rule-process">
94
- <?php $controller->createNonceField(); ?>
95
- <input type="hidden" name="action" value="processHardener"/>
96
- <input type="hidden" name="file_paths" value=""/>
97
- <input type="hidden" name="current_server" value="apache"/>
98
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
99
- <button class="button float-r"
100
- type="submit"><?php _e( "Add .htaccess file", "defender-security" ) ?></button>
101
- </form>
102
- </div>
103
- <div class="<?php echo ( $setting->active_server != 'litespeed' ) ? 'wd-hide' : ''; ?> hardener-instructions hardener-instructions-litespeed">
104
- <div class="line">
105
- <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>
106
- </div>
107
- <form method="post" class="hardener-frm hardener-litespeed-frm rule-process">
108
- <?php $controller->createNonceField(); ?>
109
- <input type="hidden" name="action" value="processHardener"/>
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
- # Deny direct access to .php files in the /wp-content/ directory (including sub-folders).
131
- # Note this can break some poorly coded plugins/themes, replace the plugin or remove this block if it causes trouble
132
- location ~* ^$wp_content/.*\.php$ {
133
- deny all;
134
- }
135
- ";
136
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
 
138
- <p><?php esc_html_e( "For NGINX servers:", "defender-security" ) ?></p>
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
- <?php endif; ?>
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
- <div class="rule closed" id="disable-file-editor">
2
- <div class="rule-title" role="link" tabindex="0">
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 Information Disclosure", "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( "Often servers are incorrectly configured, and can allow an attacker to get access to sensitive information that can be used in attacks. WP Defender can help you prevent that disclosure.", "defender-security" ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  </div>
15
- <h3>
16
- <?php _e( "How to fix", "defender-security" ) ?>
17
- </h3>
18
- <div class="well">
19
- <?php if ( $controller->check() ): ?>
20
- <p class="line"><?php _e( "Your WordPress is protected.", "defender-security" ) ?></p>
21
- <form method="post" class="hardener-frm rule-process">
22
- <?php $controller->createNonceField(); ?>
23
- <input type="hidden" name="action" value="processRevert"/>
24
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
25
- <button class="button button-small button-grey"
26
- type="submit"><?php _e( "Revert", "defender-security" ) ?></button>
27
- </form>
28
- <?php else:
29
- $servers = \WP_Defender\Behavior\Utils::instance()->serverTypes();
30
- $setting = \WP_Defender\Module\Hardener\Model\Settings::instance();
31
- $setting->active_server = \WP_Defender\Behavior\Utils::instance()->determineServer( true );
32
- ?>
33
- <div class="columns">
34
- <div class="column is-one-third">
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
- <form method="post" class="hardener-frm rule-process">
50
- <?php $controller->createNonceField(); ?>
51
- <input type="hidden" name="action" value="processHardener"/>
52
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
53
- <button class="button float-r"
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
- <form method="post" class="hardener-frm rule-process">
62
- <?php $controller->createNonceField(); ?>
63
- <input type="hidden" name="action" value="processHardener"/>
64
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
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
- $rules = "# Turn off directory indexing
79
- autoindex off;
 
 
 
 
 
80
 
81
- # Deny access to htaccess and other hidden files
82
- location ~ /\. {
83
- deny all;
84
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
 
86
- # Deny access to wp-config.php file
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
- <?php $controller->showIgnoreForm() ?>
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
- <div class="rule closed" id="security_key">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Update old security keys", "defender-security" ) ?>
 
 
 
 
 
 
 
9
  </div>
10
- <div class="rule-content">
11
- <h3><?php _e( "Overview", "defender-security" ) ?></h3>
12
- <div class="line end">
13
- <p><?php _e( "We recommend changing your security keys every 60 days", "defender-security" ) ?></p>
14
- <div class="security-reminder">
15
- <?php esc_html_e( "Remind me to change my security keys every", "defender-security" ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  <form method="post" class="hardener-frm" id="reminder-date">
17
- <select name="remind_date">
18
- <option
19
- value="30 days" <?php selected( '30 days', $interval ) ?>><?php esc_html_e( '30 Days', "defender-security" ) ?></option>
20
- <option
21
- value="60 days" <?php selected( '60 days', $interval ) ?>><?php esc_html_e( '60 Days', "defender-security" ) ?></option>
22
- <option
23
- value="90 days" <?php selected( '90 days', $interval ) ?>><?php esc_html_e( '90 Days', "defender-security" ) ?></option>
24
- <option
25
- value="6 months" <?php selected( '6 months', $interval ) ?>><?php esc_html_e( '6 Months', "defender-security" ) ?></option>
26
- <option
27
- value="1 year" <?php selected( '1 year', $interval ) ?>><?php esc_html_e( '1 Year', "defender-security" ) ?></option>
28
- </select>
29
- <input type="hidden" name="action" value="updateSecurityReminder"/>
30
- <button type="submit" class="button">
31
- <?php _e( "Update", "defender-security" ) ?></button>
 
 
 
 
 
 
 
 
 
 
32
  </form>
33
  </div>
34
- </div>
35
- <h3>
36
- <?php _e( "How to fix", "defender-security" ) ?>
37
- </h3>
38
- <div class="well">
39
- <?php if ( $controller->check() ): ?>
40
- <?php printf( esc_html__( "Your salt keys are %d days old. You are fine for now.", "defender-security" ), $daysAgo ) ?>
41
- <?php else: ?>
42
- <div class="line">
43
- <p><?php _e( "We can regenerate your key salts instantly for you and they will be good for another <span class=\"expiry-days\">60 days</span>. Note that this will log all users out of your site.", "defender-security" ) ?></p>
 
 
 
 
 
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
- <div class="rule closed" id="wp-version">
2
- <div class="rule-title" role="link" tabindex="0">
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( "Update WordPress to latest version", "defender-security" ) ?>
9
- </div>
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="columns version-col">
16
- <div class="column">
17
- <strong><?php _e( "Current version", "defender-security" ) ?></strong>
18
- <?php $class = $controller->check() ? 'def-tag tag-success' : 'def-tag tag-error' ?>
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
- <h3>
29
- <?php _e( "How to fix", "defender-security" ) ?>
30
- </h3>
31
- <div class="well">
32
- <?php if ( $controller->check() ): ?>
33
- <?php _e( "You have the latest WordPress version installed.", "defender-security" ) ?>
34
- <?php else: ?>
35
- <form method="post" class="hardener-frm">
36
- <?php $controller->createNonceField(); ?>
37
- <input type="hidden" name="action" value="processHardener"/>
38
- <input type="hidden" name="slug" value="<?php echo $controller::$slug ?>"/>
39
- <a href="<?php echo network_admin_url('update-core.php') ?>" class="button float-r">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  <?php esc_html_e( "Update WordPress", "defender-security" ) ?>
41
  </a>
42
- </form>
43
- <?php $controller->showIgnoreForm() ?>
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="dev-box" id="lockoutSummary">
16
- <?php if ( Settings::instance()->detect_404 || Settings::instance()->login_protection ): ?>
17
  <div class="wd-overlay">
18
- <i class="wdv-icon wdv-icon-fw wdv-icon-refresh spin"></i>
19
  </div>
20
  <input type="hidden" id="summaryNonce" value="<?php echo wp_create_nonce( 'lockoutSummaryData' ) ?>"/>
21
  <?php endif; ?>
22
- <div class="box-title">
23
- <span class="span-icon icon-lockout"></span>
24
- <h3><?php _e( "IP LOCKOUTS", "defender-security" ) ?></h3>
 
 
25
  </div>
26
- <div class="box-content advanced-tools">
27
- <div class="line">
28
- <?php _e( "Protect your login area by automatically locking out any suspicious behavior.", "defender-security" ) ?>
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 button-primary button-small">
37
  <?php esc_html_e( "Activate", "defender-security" ) ?>
38
  </button>
39
  </form>
40
  <?php else: ?>
41
- <div class="end"></div>
42
- <ul class="dev-list bold end">
43
- <li>
44
- <div>
45
- <span class="list-label"><?php _e( "Last lockout", "defender-security" ) ?></span>
46
- <span class="list-detail lastLockout">.</span>
 
47
  </div>
48
- </li>
49
- <li>
50
- <div>
51
- <span class="list-label"><?php _e( "Login lockouts this week", "defender-security" ) ?></span>
52
- <span class="list-detail loginLockoutThisWeek">.</span>
53
  </div>
54
- </li>
55
- <li>
56
- <div>
57
- <span class="list-label"><?php _e( "404 lockouts this week", "defender-security" ) ?></span>
58
- <span class="list-detail lockout404ThisWeek">.</span>
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 . ' seconds' );
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 button-primary button-small" data-type="blacklist" data-id="' . esc_attr( $log->id ) . '" data-ip="' . esc_attr( $log->ip ) . '" href="#">' . __( "Ban IP", "defender-security" ) . '</a>';
286
  } else {
287
- $links[] = '<a data-nonce="' . $nonce . '" class="ip-action button button-primary button-small" 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 button button-secondary button-small" data-type="whitelist" data-id="' . esc_attr( $log->id ) . '" data-ip="' . esc_attr( $log->ip ) . '" href="#">' . __( "Add Whitelist", "defender-security" ) . '</a>';
293
  } else {
294
- $links[] = '<a data-nonce="' . $nonce . '" class="ip-action button button-secondary button-small" 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 );
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
- 'intro'
 
32
  );
33
  }
34
 
@@ -115,10 +116,13 @@ class Logs_Table extends \WP_List_Table {
115
  }
116
  ob_start();
117
  ?>
118
- <!-- <input type="checkbox" class="single-select" name="ids[]" value="--><?php //echo $log->id ?><!--"/>-->
 
 
 
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 mline wd-hide">
159
  <form method="post">
160
- <div class="well well-white">
161
- <div class="columns">
162
- <div class="column is-4">
163
- <strong>
164
  <?php _e( "Lockout Type", "defender-security" ) ?>
165
- </strong>
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
- <div class="column is-4">
180
- <strong>
 
 
181
  <?php _e( "IP Address", "defender-security" ) ?>
182
- </strong>
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="well-footer tr">
188
- <button type="submit" class="button button-small">
189
- <?php _e( "Apply", "defender-security" ) ?></button>
 
 
 
 
 
 
 
 
 
 
 
190
  </div>
191
  </div>
192
  </form>
193
  </div>
194
- <table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
195
- <thead>
196
- <tr>
197
- <?php $this->print_column_headers(); ?>
198
- </tr>
199
- </thead>
200
-
201
- <tbody id="the-list"<?php
202
- if ( $singular ) {
203
- echo " data-wp-lists='list:$singular'";
204
- } ?>>
205
- <?php $this->display_rows_or_placeholder(); ?>
206
- </tbody>
207
- </table>
 
 
 
208
  </div>
209
  <?php
210
  $this->display_tablenav( 'bottom' );
211
  ?>
212
  <?php else: ?>
213
- <div class="well with-cap well-blue">
214
- <i class="def-icon icon-info fill-blue"></i>
215
- <?php _e( "No lockout events have been logged within the selected time period.", "defender-security" ) ?>
 
 
 
 
 
 
 
 
 
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 = 'log-login';
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 = 'log-404';
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 .= ' show-hide-log';
248
  echo '<tr class="' . $class . '">';
249
  $this->single_row_columns( $item );
250
  echo '</tr>';
251
- echo '<tr class="table-info wd-hide">';
252
  echo $this->detailRow( $item );
253
  echo '<tr>';
254
  }
255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  public function detailRow( $item ) {
257
 
258
  ?>
259
- <td colspan="4">
260
- <div class="dev-box">
261
- <div class="box-content">
262
- <div class="columns">
263
- <div class="column is-8">
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="column is-4">
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="columns">
285
- <div class="column is-4">
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="column is-4">
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="column is-4">
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="well well-white">
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="intro">
323
- <div class="columns">
324
- <div class="column is-3">
325
- <!-- <input type="checkbox" id="bulk-select">-->
326
- <!-- <a href="#bulk" rel="dialog" class="button button-small button-light button-disabled">-->
327
- <!-- --><?php //_e( "Bulk Action", "defender-security" ) ?>
328
- <!-- </a>-->
329
- </div>
330
- <div class="column is-7">
331
- <div class="nav">
332
- <span><?php echo sprintf( esc_html__( "%s results", "defender-security" ), $this->get_pagination_arg( 'total_items' ) ) ?></span>
333
- <div class="button-group">
334
- <?php $this->pagination( $which ); ?>
335
- </div>
 
 
 
 
 
 
336
  </div>
337
- </div>
338
- <div class="column is-2 tr">
339
- <button type="button" rel="show-filter" data-target=".lockout-logs-filter"
340
- class="button button-small button-secondary"><?php _e( "Filter", "defender-security" ) ?></button>
 
 
 
 
 
 
 
 
 
 
 
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
- $radius = 1;
 
378
  if ( $current_page > 1 && $total_pages > $radius ) {
379
- // $links['first'] = sprintf( '<a class="button button-small lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
380
- // 1, add_query_arg( 'paged', 1, $current_url ), '&laquo;' );
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 ), '&lsaquo;' );
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 href="#" class="button button-small lockout-nav button-light" data-paged="%s" disabled="">%s</a>', $i, $i );
389
  } else {
390
- $links[ $i ] = sprintf( '<a class="button button-small lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
391
- $i, add_query_arg( 'paged', $i, $current_url ), $i );
392
  }
393
  } elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
394
- $links[ $i ] = '<a href="#" class="button lockout-nav button-small button-light" disabled="">...</a>';
395
  }
396
  }
397
 
398
  if ( $current_page < $total_pages && $total_pages > $radius ) {
399
- $links['next'] = sprintf( '<a class="button lockout-nav button-small button-light" data-paged="%s" href="%s">%s</a>',
400
- $current_page + 1, add_query_arg( 'paged', $current_page + 1, $current_url ), '&rsaquo;' );
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 ), '&raquo;' );
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 = HTTP_Helper::retrieve_post( '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
- \WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
 
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 = 'orderby=id&order=desc'
180
  order = 'desc';
181
  orderby = 'id';
182
  } else if (value === 'oldest') {
183
- query = 'orderby=id&order=asc'
184
  order = 'asc';
185
  orderby = 'id';
186
  } else if (value === 'ip') {
187
- query = 'orderby=ip&order=asc'
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 .nav').replaceWith(jq(data.data.html).find('.nav').first());
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 $storage_days = 30;
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 = strtolower( date( 'l' ) );
68
- $hour = date( 'H', current_time( 'timestamp' ) );
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "IP Banning", "defender-security" ) ?></h3>
4
- </div>
5
- <div class="box-content">
6
- <form method="post" id="settings-frm" class="ip-frm">
7
- <p class="intro">
 
 
8
  <?php _e( "Choose which IP addresses you wish to permanently ban from accessing your website.", "defender-security" ) ?>
9
  </p>
10
-
11
- <div class="columns">
12
- <div class="column is-one-third">
13
- <label for="ip_blacklist">
14
- <?php _e( "Blacklist", "defender-security" ) ?>
15
- </label>
16
- <span class="sub">
17
- <?php _e( "Any IP addresses you list here will be completely blocked from accessing your website, including admins.", "defender-security" ) ?>
18
- </span>
19
  </div>
20
- <div class="column">
21
- <textarea name="ip_blacklist" id="ip_blacklist"
22
- rows="8"><?php echo $settings->ip_blacklist ?></textarea>
23
- <span class="form-help">
24
- <?php _e( "One IP address per line and IPv4 format only. IP ranges are accepted in format xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx", "defender-security" ) ?>
25
- </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  </div>
27
  </div>
28
-
29
- <div class="columns">
30
- <div class="column is-one-third">
31
- <label for="detect_404_lockout_message">
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="column">
39
- <textarea name="ip_lockout_message"
40
- id="ip_lockout_message"><?php echo $settings->ip_lockout_message ?></textarea>
41
- <span class="form-help">
42
- <?php echo sprintf( __( "This message will be displayed across your website for any IP matching your blacklist. See a quick preview <a href=\"%s\">here</a>.", "defender-security" ), add_query_arg( array(
43
- 'def-lockout-demo' => 1,
44
- 'type' => 'blacklist'
45
- ), network_site_url() ) ) ?>
46
- </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  </div>
48
  </div>
49
-
50
- <div class="columns">
51
- <div class="column is-one-third">
52
- <label for="ip_whitelist">
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="column">
60
- <textarea name="ip_whitelist" id="ip_whitelist"
61
- rows="8"><?php echo $settings->ip_whitelist ?></textarea>
62
- <span class="form-help">
63
- <?php _e( "One IP address per line and IPv4 format only. IP ranges are accepted in format xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx", "defender-security" ) ?>
64
- </span>
 
 
 
 
 
 
 
 
 
65
  </div>
66
  </div>
67
-
68
- <div class="columns">
69
- <div class="column is-one-third">
70
- <label for="import">
71
- <?php _e( "Import", "defender-security" ) ?>
72
- </label>
73
- <span class="sub">
74
- <?php _e( "Import your blacklist and whitelist from another website (CSV file).", "defender-security" ) ?>
75
- </span>
76
  </div>
77
- <div class="column">
78
- <div class="upload-input">
79
- <input disabled="disabled" type="text" id="import">
80
- <input type="hidden" name="file_import" id="file_import">
81
- <button type="button" class="button button-light file-picker">
82
- <?php _e( "Select", "defender-security" ) ?></button>
83
- <button type="button" class="button button-grey btn-import-ip">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <div class="columns">
94
- <div class="column is-one-third">
95
- <label for="import">
96
- <?php _e( "Export", "defender-security" ) ?>
97
- </label>
98
- <span class="sub">
99
- <?php _e( "Export both your blacklist and whitelist as a CSV file to use on another website.", "defender-security" ) ?>
100
- </span>
101
  </div>
102
- <div class="column">
103
- <p>
104
- <a href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=export&_wpnonce=' . wp_create_nonce( 'defipexport' ) ) ?>"
105
- class="button button-secondary export">
106
- <?php _e( "Export", "defender-security" ) ?></a>
107
- </p>
 
 
 
108
  </div>
109
  </div>
110
- <div class="clear line"></div>
111
- <?php wp_nonce_field( 'saveLockoutSettings' ) ?>
112
- <input type="hidden" name="action" value="saveLockoutSettings"/>
113
- <button type="submit" class="button button-primary float-r">
114
- <?php esc_html_e( "UPDATE SETTINGS", "defender-security" ) ?>
115
- </button>
116
- <div class="clear"></div>
117
- </form>
118
- </div>
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php esc_html_e( "404 DETECTION", "defender-security" ) ?></h3>
 
 
4
  </div>
5
- <div class="box-content tc">
6
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/lockout-man.svg"
7
- class="intro line"/>
8
- <p class="intro max-600 line">
9
- <?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" ) ?>
10
- </p>
11
- <form method="post" id="settings-frm" class="ip-frm">
12
- <?php wp_nonce_field( 'saveLockoutSettings' ) ?>
13
- <input type="hidden" name="action" value="saveLockoutSettings"/>
14
- <input type="hidden" name="detect_404" value="1"/>
15
- <button type="submit" class="button button-primary">
16
- <?php esc_html_e( "Enable", "defender-security" ) ?>
17
- </button>
18
- </form>
 
 
 
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="dev-box">
2
  <form method="post" id="settings-frm" class="ip-frm">
3
- <div class="box-title">
4
- <h3 role="checkbox"><label for="toggle_404_detection" role="checkbox" aria-checked="true"><?php esc_html_e( "404 DETECTION", "defender-security" ) ?></label></h3>
5
- <div class="side float-r">
6
- <div>
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-content">
 
 
 
 
 
17
  <?php if ( ( $count = ( \WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api::get404Lockouts( strtotime( '-24 hours', current_time( 'timestamp' ) ) ) ) ) > 0 ): ?>
18
- <div class="well well-yellow">
19
- <?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' ) ) ?>
 
 
20
  </div>
21
  <?php else: ?>
22
- <div class="well well-blue">
23
- <?php esc_html_e( "404 Detection is enabled. There are no lockouts logged yet.", "defender-security" ) ?>
 
 
24
  </div>
25
  <?php endif; ?>
26
- <div class="columns">
27
- <div class="column is-one-third">
28
- <label for="detect_404_threshold">
29
- <?php esc_html_e( "Lockout threshold", "defender-security" ) ?>
30
- </label>
31
- <span class="sub">
32
- <?php esc_html_e( "Specify how many 404 errors within a specific time period will trigger a lockout.", "defender-security" ) ?>
33
- </span>
34
- </div>
35
- <div class="column">
36
- <input size="8" value="<?php echo $settings->detect_404_threshold ?>" id="detect_404_threshold"
37
- name="detect_404_threshold" type="text" class="inline">
38
- <span class=""><?php esc_html_e( "404 errors within", "defender-security" ) ?></span>&nbsp;
39
- <input size="8" value="<?php echo $settings->detect_404_timeframe ?>" id="detect_404_timeframe"
40
- name="detect_404_timeframe" type="text" class="inline">
41
- <span class=""><?php esc_html_e( "seconds", "defender-security" ) ?></span>
 
 
 
 
42
  </div>
43
  </div>
44
-
45
- <div class="columns">
46
- <div class="column is-one-third">
47
- <label for="login_protection_lockout_timeframe">
48
- <?php esc_html_e( "Lockout time", "defender-security" ) ?>
49
- </label>
50
- <span class="sub">
51
- <?php esc_html_e( "Choose how long you’d like to ban the locked out user for.", "defender-security" ) ?>
52
- </span>
53
- </div>
54
- <div class="column">
55
- <input value="<?php echo $settings->detect_404_lockout_duration ?>" size="8"
56
- name="detect_404_lockout_duration"
57
- id="detect_404_lockout_duration" type="text" class="inline"/>
58
- <span class=""><?php esc_html_e( "seconds", "defender-security" ) ?></span>
59
- <div class="clearfix"></div>
60
- <input type="hidden" name="detect_404_lockout_ban" value="0"/>
61
- <input id="detect_404_lockout_ban" <?php checked( 1, $settings->detect_404_lockout_ban ) ?>
62
- type="checkbox"
63
- name="detect_404_lockout_ban" value="1">
64
- <label for="detect_404_lockout_ban"
65
- class="inline form-help is-marginless"><?php esc_html_e( 'Permanently ban 404 lockouts.', "defender-security" ) ?></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  </div>
67
  </div>
68
-
69
- <div class="columns">
70
- <div class="column is-one-third">
71
- <label for="detect_404_lockout_message">
72
- <?php esc_html_e( "Lockout message", "defender-security" ) ?>
73
- </label>
74
- <span class="sub">
75
- <?php esc_html_e( "Customize the message locked out users will see.", "defender-security" ) ?>
76
- </span>
77
- </div>
78
- <div class="column">
79
- <textarea name="detect_404_lockout_message"
80
- id="detect_404_lockout_message"><?php echo $settings->detect_404_lockout_message ?></textarea>
81
- <span class="form-help">
82
- <?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(
83
- 'def-lockout-demo' => 1,
84
- 'type' => '404'
85
- ), network_site_url() ) ) ?>
86
- </span>
87
  </div>
88
  </div>
89
-
90
- <div class="columns">
91
- <div class="column is-one-third">
92
- <label for="detect_404_whitelist">
93
- <?php esc_html_e( "Whitelist", "defender-security" ) ?>
94
- </label>
95
- <span class="sub">
96
- <?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" ) ?>
97
- </span>
98
- </div>
99
- <div class="column">
100
- <textarea id="detect_404_whitelist" name="detect_404_whitelist"
 
101
  rows="8"><?php echo $settings->detect_404_whitelist ?></textarea>
102
- <span class="form-help">
103
- <?php esc_html_e( "You must list the full path beginning with a /.", "defender-security" ) ?>
104
- </span>
 
105
  </div>
106
  </div>
107
-
108
- <div class="columns">
109
- <div class="column is-one-third">
110
- <label for="detect_404_ignored_filetypes">
111
- <?php esc_html_e( "Ignore file types", "defender-security" ) ?>
112
- </label>
113
- <span class="sub">
114
- <?php esc_html_e( "Choose which types of files you want to log errors for but not trigger a lockout.", "defender-security" ) ?>
115
- </span>
116
- </div>
117
- <div class="column">
118
- <textarea id="detect_404_ignored_filetypes" name="detect_404_ignored_filetypes"
 
119
  rows="8"><?php echo $settings->detect_404_ignored_filetypes ?></textarea>
120
- <span class="form-help">
121
- <?php esc_html_e( "Defender will log the 404 error, but won’t lockout the user for these filetypes.", "defender-security" ) ?>
122
- </span>
 
 
 
 
 
 
 
 
 
 
 
123
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  </div>
125
-
126
- <div class="columns">
127
- <div class="column is-one-third">
128
- <label>
129
- <?php esc_html_e( "Exclusions", "defender-security" ) ?>
130
- </label>
131
- <span class="sub">
132
- <?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" ) ?>
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="wpmud">
2
- <div class="wrap">
3
- <div id="wp-defender" class="wp-defender">
4
- <div class="iplockout">
5
- <h2 class="title">
6
- <?php _e( "IP LOCKOUTS", "defender-security" ) ?>
7
- </h2>
8
- <div class="dev-box summary-box" id="lockoutSummary">
9
- <div class="wd-overlay">
10
- <i class="wdv-icon wdv-icon-fw wdv-icon-refresh spin"></i>
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
- <div class="row">
50
- <div class="col-third">
51
- <ul class="inner-nav is-hidden-mobile">
52
- <li>
53
- <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'active' : null ?>"
54
- href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout' ) ?>"><?php _e( "Login Protection", "defender-security" ) ?></a>
55
- </li>
56
- <li>
57
- <a class="<?php echo $controller->isView( '404' ) ? 'active' : null ?>"
58
- href="<?php echo network_admin_url( 'admin.php?page=wdf-ip-lockout&view=404' ) ?>"><?php _e( "404 Detection", "defender-security" ) ?></a>
59
- </li>
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
- <div class="col-two-third">
101
- <?php echo $contents ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php esc_html_e( "Logs", "defender-security" ) ?></h3>
4
- <a href="<?php echo admin_url('admin-ajax.php?action=lockoutExportAsCsv') ?>" class="button button-small button-secondary"><?php _e( "Export CSV", "defender-security" ) ?></a>
5
- <div class="sort">
6
- <span><?php _e( "Sort by", "defender-security" ) ?></span>
7
- <select name="sort" id="lockout-logs-sort">
8
- <option value="latest"><?php _e( "Latest", "defender-security" ) ?></option>
9
- <option value="oldest"><?php _e( "Oldest", "defender-security" ) ?></option>
10
- <option value="ip"><?php _e( "IP Address", "defender-security" ) ?></option>
11
- </select>
 
 
 
 
 
 
 
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-content">
18
- <?php
19
- $table = new \WP_Defender\Module\IP_Lockout\Component\Logs_Table();
20
- $table->prepare_items();
21
- $table->display();
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php esc_html_e( "Login Protection", "defender-security" ) ?></h3>
4
- </div>
5
- <div class="box-content tc">
6
- <img
7
- src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/lockout-man.svg"
8
- class="line"/>
9
- <p class="line max-600">
10
- <?php esc_html_e( "Watch and protect your login area for attackers trying to randomly guess login
11
- details for your site. Defender will lock them out after a set number of failed attempts.", "defender-security" ) ?>
12
- </p>
13
- <form method="post" id="settings-frm" class="ip-frm">
14
- <?php wp_nonce_field( 'saveLockoutSettings' ) ?>
15
- <input type="hidden" name="action" value="saveLockoutSettings"/>
16
- <input type="hidden" name="login_protection" value="1"/>
17
- <button type="submit" class="button button-primary">
18
- <?php esc_html_e( "Enable", "defender-security" ) ?>
19
- </button>
20
- </form>
21
- </div>
 
 
 
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="dev-box">
2
  <form method="post" id="settings-frm" class="ip-frm">
3
- <div class="box-title">
4
- <h3 role="checkbox"><label for="toggle_login_protect" role="checkbox" aria-checked="true"><?php _e( "Login Protection", "defender-security" ) ?></label></h3>
5
- <div class="side float-r">
6
- <div>
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-content">
 
 
 
18
  <?php if ( ( $count = ( \WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api::getLoginLockouts( strtotime( '-24 hours', current_time( 'timestamp' ) ) ) ) ) > 0 ): ?>
19
- <div class="well well-yellow">
20
- <?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' ) ) ?>
 
 
21
  </div>
22
  <?php else: ?>
23
- <div class="well well-blue">
24
- <?php esc_html_e( "Login protection is enabled. There are no lockouts logged yet.", "defender-security" ) ?>
 
 
25
  </div>
26
  <?php endif; ?>
27
- <div class="columns">
28
- <div class="column is-one-third">
29
- <label for="login_protection_login_attempt">
30
- <?php esc_html_e( "Lockout threshold", "defender-security" ) ?>
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="column">
37
- <input size="8" value="<?php echo $settings->login_protection_login_attempt ?>" type="text"
38
- class="inline" id="login_protection_login_attempt"
39
- name="login_protection_login_attempt"/>
40
- <span><?php esc_html_e( "failed logins within", "defender-security" ) ?></span>&nbsp;
41
- <input size="8" value="<?php echo $settings->login_protection_lockout_timeframe ?>"
42
- id="login_lockout_timeframe"
43
- name="login_protection_lockout_timeframe" type="text" class="inline">
44
- <span><?php esc_html_e( "seconds", "defender-security" ) ?></span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  </div>
46
  </div>
47
- <div class="columns">
48
- <div class="column is-one-third">
49
- <label for="login_protection_lockout_timeframe">
50
- <?php esc_html_e( "Lockout time", "defender-security" ) ?>
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="column">
57
- <input value="<?php echo $settings->login_protection_lockout_duration ?>" size="8"
58
- name="login_protection_lockout_duration"
59
- id="login_protection_lockout_duration" type="text" class="inline"/>
60
- <span class=""><?php esc_html_e( "seconds", "defender-security" ) ?></span>
61
- <div class="clearfix"></div>
62
- <input type="hidden" name="login_protection_lockout_ban" value="0"/>
63
- <input
64
- id="login_protection_lockout_ban" <?php checked( 1, $settings->login_protection_lockout_ban ) ?>
65
- type="checkbox"
66
- name="login_protection_lockout_ban" value="1">
67
- <label for="login_protection_lockout_ban"
68
- class="inline form-help is-marginless"><?php esc_html_e( 'Permanently ban login lockouts.', "defender-security" ) ?></label>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  </div>
70
  </div>
71
-
72
- <div class="columns">
73
- <div class="column is-one-third">
74
- <label for="login_protection_lockout_message">
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="column">
82
- <textarea name="login_protection_lockout_message"
 
 
83
  id="login_protection_lockout_message"><?php echo $settings->login_protection_lockout_message ?></textarea>
84
- <span class="form-help">
85
- <?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(
86
- 'def-lockout-demo' => 1,
87
- 'type' => 'login'
88
- ), network_site_url() ) ) ?>
89
- </span>
 
90
  </div>
91
  </div>
92
-
93
- <div class="columns">
94
- <div class="column is-one-third">
95
- <label for="username_blacklist">
96
- <?php esc_html_e( "Automatically ban usernames", "defender-security" ) ?>
97
- </label>
98
- <span class="sub">
99
- <?php esc_html_e( "We recommend you avoid using the default username \"admin.\" Defender will automatically lock out any users who attempt to enter your site using the usernames you list here.", "defender-security" ) ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  </span>
 
101
  </div>
102
- <div class="column">
103
- <textarea placeholder="<?php esc_attr_e( "Type usernames, one per line", "defender-security" ) ?>"
104
- id="username_blacklist" name="username_blacklist"
105
- rows="8"><?php echo $settings->username_blacklist ?></textarea>
106
- <span class="sub">
107
- <?php
108
- $host = parse_url( get_site_url(), PHP_URL_HOST );
109
- $host = str_replace( 'www.', '', $host );
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
- <div class="clear line"></div>
 
121
  <?php wp_nonce_field( 'saveLockoutSettings' ) ?>
122
  <input type="hidden" name="action" value="saveLockoutSettings"/>
123
- <button type="submit" class="button button-primary float-r">
124
- <?php esc_html_e( "UPDATE SETTINGS", "defender-security" ) ?>
125
- </button>
126
- <div class="clear"></div>
 
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php esc_html_e( "NOTIFICATIONS", "defender-security" ) ?></h3>
4
  </div>
5
- <div class="box-content">
6
- <form method="post" id="settings-frm" class="ip-frm">
7
- <div class="columns">
8
- <div class="column is-one-third">
9
- <label>
10
- <?php esc_html_e( "Send email notifications", "defender-security" ) ?>
11
- </label>
12
- <span class="sub">
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
- <div class="column">
17
- <span
18
- tooltip="<?php echo esc_attr( __( "Enable Login Protection", "defender-security" ) ) ?>"
19
- class="toggle float-l">
20
  <input type="hidden" name="login_lockout_notification" value="0"/>
21
- <input type="checkbox"
22
- name="login_lockout_notification" <?php checked( 1, $settings->login_lockout_notification ) ?>
23
- value="1" class="toggle-checkbox"
24
- id="toggle_login_protection"/>
25
- <label class="toggle-label" for="toggle_login_protection"></label>
26
- </span>
27
- <label for="toggle_login_protection" role="checkbox" aria-checked="<?php echo $settings->login_lockout_notification?'true':'false';?>"><?php esc_html_e( "Login Protection Lockout", "defender-security" ) ?></label>
28
- <span class="sub inpos">
29
- <?php esc_html_e( "When a user or IP is locked out for trying to access your login area.", "defender-security" ) ?>
30
- </span>
31
- <div class="clear mline"></div>
32
- <span
33
- tooltip="<?php echo esc_attr( __( "Enable 404 Detection", "defender-security" ) ) ?>"
34
- class="toggle float-l">
 
35
  <input type="hidden" name="ip_lockout_notification" value="0"/>
36
- <input type="checkbox" name="ip_lockout_notification"
37
- value="1" <?php checked( 1, $settings->ip_lockout_notification ) ?>
38
- class="toggle-checkbox" id="toggle_404_detection"/>
39
- <label class="toggle-label" for="toggle_404_detection"></label>
40
- </span>
41
- <label for="toggle_404_detection" role="checkbox" aria-checked="<?php echo $settings->ip_lockout_notification?'true':'false';?>">
42
- <?php esc_html_e( "404 Detection Lockout", "defender-security" ) ?>
43
- </label>
44
- <span class="sub inpos"><?php esc_html_e( "When a user or IP is locked out for repeated hits on non-existent files.", "defender-security" ) ?></span>
 
 
 
 
45
  </div>
46
  </div>
47
- <div class="columns">
48
- <div class="column is-one-third">
49
- <label>
50
- <?php esc_html_e( "Email recipients", "defender-security" ) ?>
51
- </label>
52
- <span class="sub">
53
- <?php esc_html_e( "Choose which of your website's users will receive scan report results via email.", "defender-security" ) ?>
54
- </span>
55
  </div>
56
- <div class="column">
57
- <?php
58
- $email_search->renderInput() ?>
59
  </div>
60
  </div>
61
- <div class="columns">
62
- <div class="column is-one-third">
63
- <label>
64
- <?php esc_html_e( "Repeat Lockouts", "defender-security" ) ?>
65
- </label>
66
- <span class="sub">
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
- </span>
69
  </div>
70
- <div class="column">
71
- <span class="toggle float-l">
72
- <input type="hidden" name="cooldown_enabled" value="0"/>
73
- <input type="checkbox"
74
- name="cooldown_enabled" <?php checked( 1, $settings->cooldown_enabled ) ?>
75
- value="1" class="toggle-checkbox"
76
- id="cooldown_enabled"/>
77
- <label class="toggle-label" for="cooldown_enabled"></label>
78
- </span>
79
- <label for="cooldown_enabled" role="checkbox" aria-checked="<?php echo $settings->cooldown_enabled?'true':'false';?>"><?php _e( "Limit email notifications for repeat lockouts", "defender-security" ) ?></label>
80
- <div class="well well-white schedule-box">
81
- <label><strong><?php _e( "Threshold", "defender-security" ) ?></strong>
82
- - <?php _e( "The number of lockouts before we turn off emails", "defender-security" ) ?>
83
- </label>
84
- <select name="cooldown_number_lockout">
85
- <option <?php selected( '1', $settings->cooldown_number_lockout ) ?> value="1">1
86
- </option>
87
- <option <?php selected( '3', $settings->cooldown_number_lockout ) ?> value="3">3
88
- </option>
89
- <option <?php selected( '5', $settings->cooldown_number_lockout ) ?> value="5">5
90
- </option>
91
- <option <?php selected( '10', $settings->cooldown_number_lockout ) ?> value="10">10
92
- </option>
93
- </select>
94
- <label><strong><?php _e( "Cool Off Period", "defender-security" ) ?></strong>
95
- - <?php _e( "For how long should we turn them off?", "defender-security" ) ?>
96
- </label>
97
- <select name="cooldown_period" class="mline">
98
- <option <?php selected( '1', $settings->cooldown_period ) ?>
99
- value="1"><?php _e( "1 hour", "defender-security" ) ?></option>
100
- <option <?php selected( '2', $settings->cooldown_period ) ?>
101
- value="2"><?php _e( "2 hours", "defender-security" ) ?></option>
102
- <option <?php selected( '6', $settings->cooldown_period ) ?>
103
- value="6"><?php _e( "6 hours", "defender-security" ) ?></option>
104
- <option <?php selected( '12', $settings->cooldown_period ) ?>
105
- value="12"><?php _e( "12 hours", "defender-security" ) ?></option>
106
- <option <?php selected( '24', $settings->cooldown_period ) ?>
107
- value="24"><?php _e( "24 hours", "defender-security" ) ?></option>
108
- <option <?php selected( '36', $settings->cooldown_period ) ?>
109
- value="36"><?php _e( "36 hours", "defender-security" ) ?></option>
110
- <option <?php selected( '48', $settings->cooldown_period ) ?>
111
- value="48"><?php _e( "48 hours", "defender-security" ) ?></option>
112
- <option <?php selected( '168', $settings->cooldown_period ) ?>
113
- value="168"><?php _e( "7 days", "defender-security" ) ?></option>
114
- <option <?php selected( '720', $settings->cooldown_period ) ?>
115
- value="720"><?php _e( "30 days", "defender-security" ) ?></option>
116
- </select>
 
 
 
117
  </div>
118
  </div>
119
  </div>
120
- <div class="clear line"></div>
121
- <?php wp_nonce_field( 'saveLockoutSettings' ) ?>
 
122
  <input type="hidden" name="action" value="saveLockoutSettings"/>
123
- <button type="submit" class="button button-primary float-r">
124
- <?php esc_html_e( "UPDATE SETTINGS", "defender-security" ) ?>
125
- </button>
126
- <div class="clear"></div>
127
- </form>
128
- </div>
 
 
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 websites 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="dev-box report-sale">
2
- <div class="box-title">
3
- <h3><?php esc_html_e( "Reporting", "defender-security" ) ?></h3>
4
- <a class="button button-green button-small"
5
- href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_iplockouts_reports_upgrade_button') ?>" target="_blank"><?php _e( "Upgrade to Pro", "defender-security" ) ?></a>
6
  </div>
7
- <div class="box-content">
8
- <form method="post" id="settings-frm" class="ip-frm">
9
- <div class="sale-overlay">
10
-
 
 
 
11
  </div>
12
- <div class="columns">
13
- <div class="column is-one-third">
14
- <label>
15
- <?php esc_html_e( "Lockouts report", "defender-security" ) ?>
16
- </label>
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
- <div class="columns last">
63
- <div class="column is-one-third">
64
- <label>
65
- <?php esc_html_e( "Email recipients", "defender-security" ) ?>
66
- </label>
67
- <span class="sub">
68
- <?php esc_html_e( "Choose which of your website’s users will receive the lockout report.", "defender-security" ) ?>
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php esc_html_e( "Reporting", "defender-security" ) ?></h3>
 
 
4
  </div>
5
- <div class="box-content">
6
- <form method="post" id="settings-frm" class="ip-frm">
7
- <div class="columns">
8
- <div class="column is-one-third">
9
- <label>
10
- <?php esc_html_e( "Lockouts report", "defender-security" ) ?>
11
- </label>
12
- <span class="sub">
13
- <?php esc_html_e( "Configure Defender to automatically email you a lockout report for this website. ", "defender-security" ) ?>
14
- </span>
15
  </div>
16
- <div class="column">
17
- <span
18
- tooltip="<?php echo esc_attr( __( "Send regular email report", "defender-security" ) ) ?>"
19
- class="toggle float-l">
20
- <input type="hidden" name="report" value="0"/>
21
- <input type="checkbox"
22
- name="report" <?php checked( 1, $settings->report ) ?>
23
- value="1" class="toggle-checkbox"
24
- id="toggle_report"/>
25
- <label class="toggle-label" for="toggle_report"></label>
26
- </span>
27
- <label for="toggle_report" role="checkbox" aria-checked="true">
28
- <?php esc_html_e( "Send regular email report", "defender-security" ) ?>
29
- </label>
30
- <div class="clear mline"></div>
31
- <div class="well well-white schedule-box">
32
- <strong><?php esc_html_e( "SCHEDULE", "defender-security" ) ?></strong>
33
- <label><?php esc_html_e( "Frequency", "defender-security" ) ?></label>
34
- <select name="report_frequency">
35
- <option <?php selected( '1', $settings->report_frequency ) ?>
36
- value="1"><?php esc_html_e( "Daily", "defender-security" ) ?></option>
37
- <option <?php selected( '7', $settings->report_frequency ) ?>
38
- value="7"><?php esc_html_e( "Weekly", "defender-security" ) ?></option>
39
- <option <?php selected( '30', $settings->report_frequency ) ?>
40
- value="30"><?php esc_html_e( "Monthly", "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 <?php selected( $settings->report_day, strtolower( $day ) ) ?>
47
- value="<?php echo strtolower( $day ) ?>"><?php echo $day ?></option>
48
- <?php endforeach;; ?>
49
- </select>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <div class="columns">
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
- <button type="submit" class="button button-primary float-r">
81
- <?php esc_html_e( "UPDATE SETTINGS", "defender-security" ) ?>
82
- </button>
83
- <div class="clear"></div>
84
- </form>
85
- </div>
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "Settings", "defender-security" ) ?></h3>
4
  </div>
5
- <div class="box-content">
6
- <form method="post" id="settings-frm" class="ip-frm">
7
- <div class="columns">
8
- <div class="column is-one-third">
9
- <label for="login_protection_login_attempt">
10
- <?php esc_html_e( "Storage", "defender-security" ) ?>
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
- </span>
15
  </div>
16
- <div class="column">
17
- <input size="8" value="<?php echo $settings->storage_days ?>" type="text"
18
- class="inline" id="storage_days"
19
- name="storage_days"/>
20
- <span><?php esc_html_e( "days", "defender-security" ) ?></span>&nbsp;
21
- <span class="form-help"><?php _e( "Choose how many days of event logs you’d like to store locally.", "defender-security" ) ?></span>
 
 
 
 
 
22
  </div>
23
  </div>
24
- <div class="columns">
25
- <div class="column is-one-third">
26
- <label for="login_protection_login_attempt">
27
- <?php esc_html_e( "Delete logs", "defender-security" ) ?>
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
- </span>
32
  </div>
33
- <div class="column">
 
34
  <button type="button" data-nonce="<?php echo esc_attr( wp_create_nonce( 'lockoutEmptyLogs' ) ) ?>"
35
- class="button button-secondary empty-logs"><?php _e( "Delete Logs", "defender-security" ) ?></button>
36
  <span class="delete-status"></span>
37
- <span class="form-help"><?php _e( "Note: Defender will instantly remove all past event logs, you will not be able to get them back.", "defender-security" ) ?></span>
 
 
38
  </div>
39
  </div>
40
- <div class="clear line"></div>
 
41
  <?php wp_nonce_field( 'saveLockoutSettings' ) ?>
42
  <input type="hidden" name="action" value="saveLockoutSettings"/>
43
- <button type="submit" class="button button-primary float-r">
44
- <?php esc_html_e( "UPDATE SETTINGS", "defender-security" ) ?>
45
- </button>
46
- <div class="clear"></div>
47
- </form>
48
- </div>
 
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
- $content = file_get_contents( $this->getSubtitle() );
238
- if ( function_exists( 'mb_convert_encoding' ) ) {
239
- $content = mb_convert_encoding( $content, 'UTF-8', 'ASCII' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="dev-box">
34
- <div class="box-title">
35
- <span class="span-icon icon-scan"></span>
36
- <h3><?php _e( "FILE SCANNING", "defender-security" ) ?>
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
- <div class="box-content">
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
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  </div>
61
  <?php
62
  }
@@ -99,75 +114,73 @@ class Scan extends Behavior {
99
  }
100
  }
101
 
102
- private function _renderResult( \WP_Defender\Module\Scan\Model\Scan $model ) {
103
- ob_start();
104
- ?>
105
- <div class="line">
106
- <?php _e( "Scan your website for file changes, vulnerabilities and injected code, and get notifications about anything suspicious.", "defender-security" ) ?>
107
- </div>
108
- <?php
 
109
  if ( $this->countAll == 0 ) {
110
  ?>
111
- <div class="well well-green with-cap mline">
112
- <i class="def-icon icon-tick"></i>
113
- <?php _e( "Your code is clean, the skies are clear.", "defender-security" ) ?>
114
  </div>
115
  <?php
116
  } else {
117
  ?>
118
- <div class="end"></div>
119
- <ul class="dev-list bold end">
120
- <li>
121
- <div>
122
- <span class="list-label"><?php _e( "WordPress Core", "defender-security" ) ?></span>
123
- <span class="list-detail">
124
- <?php echo $model->getCount( 'core' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'core' ) . '</span>' ?>
125
- </span>
126
- </div>
127
- </li>
128
- <li>
129
- <div>
130
- <span class="list-label"><?php _e( "Plugins & Themes", "defender-security" ) ?></span>
131
- <span class="list-detail">
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 button-pre button-small"
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
- </span>
141
- </div>
142
- </li>
143
- <li>
144
- <div>
145
- <span class="list-label"><?php _e( "Suspicious Code", "defender-security" ) ?></span>
146
- <span class="list-detail">
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 button-pre button-small"
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
- </span>
156
- </div>
157
- </li>
158
- </ul>
159
  <?php
160
  }
161
  ?>
162
- <div class="row">
163
- <div class="col-third tl">
164
- <a href="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>"
165
- class="button button-small button-secondary"><?php _e( "VIEW REPORT", "defender-security" ) ?></a>
166
- </div>
167
- <div class="col-two-third tr">
168
- <?php if ( wp_defender()->isFree == false ): ?>
169
- <p class="status-text">
170
- <?php
 
 
 
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
- <?php endif; ?>
186
- </p>
187
- </div>
188
- </div>
189
- <?php
190
-
191
- return ob_get_clean();
192
  }
193
 
194
  private function _renderNewScan() {
195
  ob_start();
196
  ?>
197
- <div class="line">
198
- <?php _e( "Scan your website for file changes, vulnerabilities and injected code and get
 
199
  notified about anything suspicious.", "defender-security" ) ?>
200
- </div>
201
- <form id="start-a-scan" method="post" class="scan-frm">
202
  <?php
203
  wp_nonce_field( 'startAScan' );
204
  ?>
205
  <input type="hidden" name="action" value="startAScan"/>
206
- <button type="submit" class="button button-small"><?php _e( "RUN SCAN", "defender-security" ) ?></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
- <div class="wdf-scanning"></div>
217
- <div class="line">
218
- <?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" ) ?>
219
- </div>
220
- <div class="well mline">
221
- <div class="scan-progress">
222
- <div class="scan-progress-text">
223
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/loading.gif" width="18"
224
- height="18"/>
225
- <span><?php echo $percent ?>%</span>
226
- </div>
227
- <div class="scan-progress-bar">
228
- <span style="width: <?php echo $percent ?>%"></span>
229
- </div>
230
- </div>
231
- </div>
232
- <p class="tc sub status-text scan-status"><?php echo $model->statusText ?></p>
 
 
 
 
 
 
 
 
 
 
 
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__( 'Issue', "defender-security" ),
36
  'col_action' => '',
37
  );
38
  break;
39
  case Result_Item::STATUS_IGNORED:
40
  $columns = array(
41
- 'col_bulk' => '<input id="apply-all" type="checkbox"/>',
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 button-small">
94
- <i class="wdv-icon wdv-icon-fw wdv-icon-refresh" aria-hidden="true"></i>
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 = 100;
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
- $this->items = $model->getItems( $offset . ',' . $itemsPerPage, $this->type );
 
 
 
 
 
 
 
 
 
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 $item->getTitle() . ' <span class="sub">' . $item->getSubtitle() . '</span>';
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->getIssueDetail();
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
- $content = $item->renderDialog();
153
-
154
- $content .= '<a href="#dia_' . $item->id . '" rel="dialog" role="button" tooltip="' . esc_attr__( "Fix Issue", "defender-security" ) . '" class="fix">
155
- <img src="' . wp_defender()->getPluginUrl() . 'assets/img/icon-fix.svg">
156
- </a>';
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
- <table class="<?php echo( $this->type == Result_Item::STATUS_FIXED ? 'resolved-table' : null ) ?>">
173
- <thead>
174
- <tr>
175
- <?php $this->print_column_headers(); ?>
176
- </tr>
177
- </thead>
178
-
179
- <tbody>
180
- <?php $this->display_rows_or_placeholder(); ?>
181
- </tbody>
182
- </table>
 
 
 
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="bulk-nav">
193
- <div class="bulk-action">
194
  <form method="post" class="scan-bulk-frm">
195
  <input type="hidden" name="action" value="scanBulkAction"/>
196
  <?php wp_nonce_field( 'scanBulkAction' ) ?>
197
- <select name="bulk" class="bulk-action">
198
- <?php if ( $this->type != Result_Item::STATUS_IGNORED ): ?>
199
- <option value="ignore"><?php _e( "Ignore", "defender-security" ) ?></option>
200
- <!-- <option value="resolve">--><?php //_e( "Resolve", "defender-security" ) ?><!--</option>-->
201
- <!-- <option value="delete">--><?php //_e( "Delete", "defender-security" ) ?><!--</option>-->
202
- <?php endif; ?>
203
- <?php if ( $this->type == Result_Item::STATUS_IGNORED ): ?>
204
- <option value="unignore"><?php _e( "Restore", "defender-security" ) ?></option>
205
- <?php endif; ?>
206
- </select>
207
- <button class="button button-grey"><?php _e( "Apply", "defender-security" ) ?></button>
 
 
 
 
 
 
 
208
  </form>
209
  </div>
210
- <div class="nav">
211
- <span><?php printf( __( "%s Results", "defender-security" ), $this->_pagination_args['total_items'] ) ?></span>
212
- <div class="button-group is-hidden-mobile">
213
- <?php $this->pagination( 'top' ) ?>
214
- </div>
215
- <div class="button-group is-hidden-tablet">
216
- <?php $this->pagination( 'top' ) ?>
 
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 = 3;
268
  if ( $current_page > 1 && $total_pages > $radius ) {
269
- $links['first'] = sprintf( '<a class="button button-light" href="%s">%s</a>',
270
- add_query_arg( 'paged', 1, $current_url ), '&laquo;' );
271
- $links['prev'] = sprintf( '<a class="button button-light" href="%s">%s</a>',
272
- add_query_arg( 'paged', $current_page - 1, $current_url ), '&lsaquo;' );
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="#" class="button audit-nav button-light" disabled="">%s</a>', $i );
279
  } else {
280
- $links[ $i ] = sprintf( '<a class="button audit-nav button-light" href="%s">%s</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="#" class="button audit-nav button-light" disabled="">...</a>';
285
  }
286
  }
287
 
288
  if ( $current_page < $total_pages && $total_pages > $radius ) {
289
- $links['next'] = sprintf( '<a class="button audit-nav button-light" href="%s">%s</a>',
290
- add_query_arg( 'paged', $current_page + 1, $current_url ), '&rsaquo;' );
291
- $links['last'] = sprintf( '<a class="button audit-nav button-light" href="%s">%s</a>',
292
- add_query_arg( 'paged', $total_pages, $current_url ), '&raquo;' );
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
- $this->email_search = new Email_Search();
64
- $this->email_search->eId = 'scan_receipts';
65
- $this->email_search->settings = Settings::instance();
66
- $this->email_search->add_hooks();
 
 
 
 
 
 
 
 
 
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
- \WDEV_Plugin_Ui::load( wp_defender()->getPluginUrl() . 'shared-ui/' );
 
 
 
 
 
 
 
 
 
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 ( $settings->always_send == false && $count == 0 ) {
736
- return;
 
 
 
 
 
 
 
 
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( 'vuln_issues' => $issues_vuln, 'content_issues' => $issues_content );
 
 
 
887
  }
888
 
889
- $counts = array( 'issues' => $total_issues, 'issues_wp' => $issues_wp, 'ignored' => $total_ignored );
 
 
 
 
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
- var current_issue = null;
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
- $('body').addClass('wpmud');
39
- WDP.showOverlay("#scanning", {
40
- title: scan.scanning_title,
41
- class: 'no-close wp-defender scanning'
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
- $('.status-text.scan-status').text(data.data.statusText);
54
- $('.scan-progress-text span').text(data.data.percent + '%');
55
- $('.scan-progress-bar span').css('width', data.data.percent + '%');
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-secondary').unbind('click').bind('click', function () {
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
- WDP.closeOverlay();
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
- $('pre code').each(function (i, block) {
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('.schedule-box').find('div.days-container').hide();
192
  } else {
193
- $(this).closest('.schedule-box').find('div.days-container').show();
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
- if (data.data.counts != undefined) {
273
- if (data.data.counts.issues) {
274
- //If the issues are more than 0, update or create elements
275
- if (data.data.counts.issues > 0) {
276
- if (jq('.def-issues-top-left-icon i:not(.icon-warning)')) {
277
- jq('.def-issues-top-left-icon').html('<i class="def-icon icon-warning fill-red"></i>');
278
- }
279
- if (!jq('.def-issues-below').length) {
280
- if (jq('li.issues-nav a').length) {
281
- jq('li.issues-nav a').append('<span class="def-tag tag-error def-issues-below">' + data.data.counts.issues + '</span>');
282
- }
283
- } else {
284
- jq('.def-issues-below').html(data.data.counts.issues);
285
- }
286
- if (!jq('.def-issues-summary').length) {
287
- if (jq('.def-issues-title').length) {
288
- jq('.def-issues-title').append('<span class="def-tag tag-error def-issues def-issues-summary">' + data.data.counts.issues + '</span>');
289
- }
290
- } else {
291
- jq('.def-issues-summary').html(data.data.counts.issues);
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
- //Ignored counts
359
- if (data.data.counts.ignored) {
360
- if (data.data.counts.ignored > 0) {
361
- jq('.def-ignored').html(data.data.counts.ignored);
362
- } else {
363
- jq('.def-ignored').html("");
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, $type = Result_Item::STATUS_ISSUE ) {
123
  $items = Result_Item::findAll( array(
124
  'parentId' => $this->id,
125
- 'status' => $type
 
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[] = get_current_user_id();
 
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="dev-box report-sale">
2
- <div class="box-title">
3
- <h3><?php _e( "Reporting", "defender-security" ) ?></h3>
4
- <a class="button button-green button-small"
5
- href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_reports_upgrade_button') ?>" target="_blank"><?php _e( "Upgrade to Pro", "defender-security" ) ?></a>
6
  </div>
7
- <div class="box-content">
8
- <form method="post" class="">
9
- <div class="sale-overlay">
10
-
11
- </div>
12
- <div class="columns">
13
- <div class="column is-one-third">
14
- <strong><?php _e( "Schedule scans", "defender-security" ) ?></strong>
15
- <span class="sub">
16
- <?php _e( "Configure Defender to automatically and regularly scan your website and email you reports.", "defender-security" ) ?>
17
- </span>
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="columns last">
50
- <div class="column is-one-third">
51
- <strong><?php _e( "Email recipients", "defender-security" ) ?></strong>
52
- <span class="sub">
53
- <?php _e( "Choose which of your website’s users will receive scan report results to their email inboxes.", "defender-security" ) ?>
54
- </span>
55
- </div>
56
- <div class="column">
57
- <?php $email->renderInput() ?>
58
  </div>
59
  </div>
60
- </form>
61
- <div class="presale-text">
62
- <div>
63
- <?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_filescanning_reports_upsell_link') ) ?>
 
 
 
 
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "Reporting", "defender-security" ) ?></h3>
 
 
4
  </div>
5
- <div class="box-content">
6
- <form method="post" class="scan-frm scan-settings">
7
- <div class="columns">
8
- <div class="column is-one-third">
9
- <strong><?php _e( "Schedule scans", "defender-security" ) ?></strong>
10
- <span class="sub">
11
- <?php _e( "Configure Defender to automatically and regularly scan your website and email you reports.", "defender-security" ) ?>
 
 
 
12
  </span>
13
  </div>
14
- <div class="column">
15
- <span class="toggle">
16
- <input type="hidden" name="notification" value="0"/>
17
- <input type="checkbox" class="toggle-checkbox" name="notification" value="1"
18
- id="chk1" <?php checked( 1, $setting->notification ) ?>/>
19
- <label class="toggle-label" for="chk1"></label>
20
- </span>
21
- <label><?php _e( "Run regular scans & reports", "defender-security" ) ?></label>
22
- <div class="clear mline"></div>
23
- <div class="well well-white schedule-box">
24
- <strong><?php _e( "Schedule", "defender-security" ) ?></strong>
25
- <label><?php _e( "Frequency", "defender-security" ) ?></label>
26
- <select name="frequency">
27
- <option <?php selected( 1, $setting->frequency ) ?>
28
- value="1"><?php _e( "Daily", "defender-security" ) ?></option>
29
- <option <?php selected( 7, $setting->frequency ) ?>
30
- value="7"><?php _e( "Weekly", "defender-security" ) ?></option>
31
- <option <?php selected( 30, $setting->frequency ) ?>
32
- value="30"><?php _e( "Monthly", "defender-security" ) ?></option>
33
- </select>
34
- <div class="days-container">
35
- <label><?php _e( "Day of the week", "defender-security" ) ?></label>
36
- <select name="day">
37
- <?php foreach ( \WP_Defender\Behavior\Utils::instance()->getDaysOfWeek() as $day ): ?>
38
- <option <?php selected( $day, $setting->day ) ?>
39
- value="<?php echo $day ?>"><?php echo ucfirst( $day ) ?></option>
40
- <?php endforeach; ?>
41
- </select>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <div class="columns">
54
- <div class="column is-one-third">
55
- <strong><?php _e( "Email recipients", "defender-security" ) ?></strong>
56
- <span class="sub">
57
- <?php _e( "Choose which of your website’s users will receive scan report results to their email inboxes.", "defender-security" ) ?>
58
- </span>
59
- </div>
60
- <div class="column">
61
- <?php $email->renderInput() ?>
62
- </div>
63
  </div>
64
- <div class="clear line"></div>
65
- <input type="hidden" name="action" value="saveScanSettings"/>
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "Ignored", "defender-security" ) ?></h3>
 
 
 
4
  </div>
5
- <div class="box-content">
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="well well-blue with-cap">
17
- <i class="def-icon icon-warning" aria-hidden="true"></i>
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
- <div class="dev-box">
2
- <div class="box-title">
3
- <h3 class="def-issues-title">
 
 
 
 
 
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
- <!-- <div>-->
14
- <!-- <span>--><?php //_e( "Type", "defender-security" ) ?><!--</span>-->
15
- <!-- <select>-->
16
- <!-- <option value="all">--><?php //_e( "All", "defender-security" ) ?><!--</option>-->
17
- <!-- <option value="core">--><?php //_e( "Core", "defender-security" ) ?><!--</option>-->
18
- <!-- <option value="plugins">-->
19
- <?php //_e( "Plugins & Themes", "defender-security" ) ?><!--</option>-->
20
- <!-- <option value="suspicious">-->
21
- <?php //_e( "Suspicious", "defender-security" ) ?><!--</option>-->
22
- <!-- </select>-->
23
- <!-- </div>-->
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  </div>
25
- <div class="box-content issues-box-content">
26
- <?php $table = new \WP_Defender\Module\Scan\Component\Result_Table();
27
- $table->prepare_items();
 
 
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="well well-green with-cap">
36
- <i class="def-icon icon-tick" aria-hidden="true"></i>
37
- <?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" ) ?>
 
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
- <div class="wrap">
 
 
 
 
 
2
  <div id="wp-defender" class="wp-defender">
3
  <div class="wdf-scanning">
4
- <h2 class="title">
5
- <?php _e( "File Scanning", "defender-security" ) ?>
6
- <span>
 
 
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
- class="button button-small"><?php _e( "New Scan", "defender-security" ) ?></button>
14
- </form>
15
- </span>
16
- </h2>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- <div class="scan">
19
- <div class="dev-box summary-box">
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="row">
90
- <div class="col-third">
91
- <nav role="navigation" aria-label="Filters">
92
- <ul class="inner-nav is-hidden-mobile">
93
- <li class="issues-nav">
94
- <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'active' : null ?>"
95
- href="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>">
96
- <?php _e( "Issues", "defender-security" ) ?>
97
- <?php
98
- $issues = $model->countAll( \WP_Defender\Module\Scan\Model\Result_Item::STATUS_ISSUE );
99
- $tooltip = '';
100
- if ( $issues > 0 ) :
101
- $tooltip = 'tooltip="' . esc_attr( sprintf( __("You have %d suspicious file(s) needing attention", "defender-security" ), $countAll ) ) . '"';
102
- endif;
103
- echo $issues > 0 ? '<span class="def-tag tag-error def-issues-below" ' . $tooltip . '>' . $issues . '</span>' : '' ?>
104
- </a>
105
- </li>
106
- <!-- <li>-->
107
- <!-- <a class="-->
108
- <?php //echo $controller->isView( 'cleaned' ) ? 'active' : null ?><!--"-->
109
- <!-- href="-->
110
- <?php //echo network_admin_url( 'admin.php?page=wdf-scan&view=cleaned' ) ?><!--">--><?php //_e( "Cleaned", "defender-security" ) ?>
111
- <!-- <span>-->
112
- <!-- --><?php
113
- // $issues = $model->countAll( \WP_Defender\Module\Scan\Model\Result_Item::STATUS_FIXED );
114
- // echo $issues > 0 ? $issues : '' ?>
115
- <!-- </span>-->
116
- <!-- </a>-->
117
- <!-- </li>-->
118
- <li>
119
- <a class="<?php echo $controller->isView( 'ignored' ) ? 'active' : null ?>"
120
- href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=ignored' ) ?>">
121
- <?php _e( "Ignored", "defender-security" ) ?>
122
- <span class="def-ignored">
123
- <?php
124
- $issues = $model->countAll( \WP_Defender\Module\Scan\Model\Result_Item::STATUS_IGNORED );
125
- echo $issues > 0 ? $issues : '' ?>
126
- </span>
127
- </a>
128
- </li>
129
- <li>
130
- <a class="<?php echo $controller->isView( 'settings' ) ? 'active' : null ?>"
131
- href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=settings' ) ?>">
132
- <?php _e( "Settings", "defender-security" ) ?></a>
133
- </li>
134
- <li>
135
- <a class="<?php echo $controller->isView( 'reporting' ) ? 'active' : null ?>"
136
- href="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=reporting' ) ?>">
137
- <?php _e( "Reporting", "defender-security" ) ?></a>
138
- </li>
139
- </ul>
140
- </nav>
141
- <div class="is-hidden-tablet mline">
142
- <nav role="navigation" aria-label="Filters">
143
- <select class="mobile-nav">
144
- <option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
145
- value="<?php echo network_admin_url( 'admin.php?page=wdf-scan' ) ?>"><?php _e( "Issues", "defender-security" ) ?></option>
146
- <option <?php selected( 'ignored', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
147
- value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=ignored' ) ?>"><?php _e( "Ignored", "defender-security" ) ?></option>
148
- <option <?php selected( 'settings', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
149
- value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=settings' ) ?>"><?php _e( "Settings", "defender-security" ) ?></option>
150
- <option <?php selected( 'reporting', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
151
- value="<?php echo network_admin_url( 'admin.php?page=wdf-scan&view=reporting' ) ?>"><?php _e( "Reporting", "defender-security" ) ?></option>
152
- </select>
153
- </nav>
154
- </div>
155
- </div>
156
- <div class="col-two-third">
157
- <?php echo $contents ?>
 
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="dev-box">
5
- <div class="box-title">
6
- <h3><?php _e( "GET STARTED", "defender-security" ) ?></h3>
7
- </div>
8
- <div class="box-content tc">
9
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/scan-man.svg" class="mline">
10
- <div class="line max-600">
11
- <?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" ) ?>
12
- </div>
 
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
- <button type="submit" class="button"><?php _e( "RUN SCAN", "defender-security" ) ?></button>
 
 
 
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="wpmud">
3
- <div class="wp-defender">
4
- <div class="wdf-scanning">
5
- <h2 class="title">
6
- <?php _e( "File Scanning", "defender-security" ) ?>
7
- <span><?php echo $lastScanDate == null ? null : sprintf( __( "Last scan: %s", "defender-security" ), $lastScanDate ) ?>
8
- <form id="start-a-scan" method="post" class="scan-frm">
 
9
  <?php
10
  wp_nonce_field( 'startAScan' );
11
  ?>
12
- <input type="hidden" name="action" value="startAScan"/>
13
- <button type="submit"
14
- class="button button-small"><?php _e( "New Scan", "defender-security" ) ?></button>
15
- </form>
16
- </span>
17
- </h2>
18
  </div>
19
  </div>
20
  </div>
21
- </div>
22
- <dialog id="scanning" class="<?php echo wp_defender()->isFree ? 'scanning-free' : null ?>">
23
- <div class="line">
24
- <?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" ) ?>
25
- </div>
26
- <div class="well mline">
27
- <div class="scan-progress">
28
- <div class="scan-progress-text">
29
- <img aria-hidden="true" src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/loading.gif" width="18"
30
- height="18"/>
31
- <span><?php echo $percent ?>%</span>
32
- </div>
33
- <div class="scan-progress-bar">
34
- <span style="width: <?php echo $percent ?>%"></span>
35
- </div>
36
- </div>
37
- </div>
38
- <p class="tc sub status-text scan-status"><?php echo $model->statusText ?></p>
39
- <form method="post" id="process-scan" class="scan-frm">
40
- <input type="hidden" name="action" value="processScan"/>
41
- <?php
42
- wp_nonce_field( 'processScan' );
43
- ?>
44
- </form>
45
- <?php if ( wp_defender()->isFree == true ): ?>
46
- <div class="presale-text">
47
- <div>
48
- <?php printf( __( "Did you know the Pro version of Defender comes with advanced full code scanning and automated reporting?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <?php endif; ?>
54
- </dialog>
 
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "Settings", "defender-security" ) ?></h3>
 
 
4
  </div>
5
- <div class="box-content">
6
- <form method="post" class="scan-frm scan-settings">
7
- <div class="columns <?php echo wp_defender()->isFree ? 'has-presale' : null ?>">
8
- <div class="column is-one-third">
9
- <strong><?php _e( "Scan Types", "defender-security" ) ?></strong>
10
- <span class="sub">
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
- <div class="column">
15
- <span class="toggle">
16
- <input type="hidden" name="scan_core" value="0"/>
17
- <input type="checkbox" name="scan_core" class="toggle-checkbox" id="core-scan" value="1"
18
- <?php checked( true, $setting->scan_core ) ?>/>
19
- <label class="toggle-label" for="core-scan"></label>
20
- </span>
21
- <label for="core-scan"><?php _e( "WordPress Core", "defender-security" ) ?></label>
22
- <span class="sub inpos">
23
- <?php _e( "Defender checks for any modifications or additions to WordPress core files.", "defender-security" ) ?>
24
- </span>
25
- <div class="clear mline"></div>
26
- <div class="feature-pre-require">
27
- <div></div>
28
- <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_pro_tag') ?>" role="button" target="_blank" class="button button-small button-pre"
29
- tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>" >
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="clear mline"></div>
41
- <div class="feature-pre-require">
42
- <div></div>
43
- <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_pro_tag') ?>" role="button" target="_blank" class="button button-small button-pre"
44
- tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
45
- <?php _e( "Pro Feature", "defender-security" ) ?></a>
46
- <span class="toggle" aria-hidden="true" role="presentation">
47
- <input role="presentation" type="checkbox" class="toggle-checkbox" value="1" id="scan-content"/>
48
- <label class="toggle-label" aria-hidden="true" for="scan-content"></label>
49
- </span>
50
- <label for="scan-content"><?php _e( "Suspicious Code", "defender-security" ) ?></label>
51
- <span class="sub inpos">
52
- <?php _e( "Defender looks inside all of your files for suspicious and potentially harmful code.", "defender-security" ) ?>
53
- </span>
54
  </div>
55
- </div>
56
- <div class="clear"></div>
57
- <div class="presale-text">
58
- <div>
59
- <?php printf( __( "Defender scans through every line of code on your website, searching for anything suspicious. This feature is included when you join WPMU DEV, along with 100+ plugins, 24/7 support and lots of handy site management tools. – <a href=\"%s\" target='_blank' role='button'>Try it all FREE today!
60
- </a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_upsell_link') ) ?>
 
 
 
 
 
 
 
 
61
  </div>
62
  </div>
63
  </div>
64
- <div class="columns">
65
- <div class="column is-one-third">
66
- <strong><?php _e( "Maximum included file size", "defender-security" ) ?></strong>
67
- <span class="sub">
68
- <?php _e( "Defender will skip any files larger than this size. The smaller the number, the faster Defender will scan your website.", "defender-security" ) ?>
69
- </span>
70
- </div>
71
- <div class="column">
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="columns">
77
- <div class="column is-one-third">
78
- <strong><?php _e( "Optional emails", "defender-security" ) ?></strong>
79
- <span class="sub">
80
- <?php _e( "By default, you'll only get email reports when your site runs into trouble. Turn this option on to get reports even when your site is running smoothly.", "defender-security" ) ?>
81
- </span>
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
- <div class="column">
98
- <input type="text" name="email_subject" value="<?php echo esc_attr( $setting->email_subject ) ?>"/>
 
 
 
 
 
 
 
 
 
99
  </div>
100
  </div>
101
- <div class="columns">
102
- <div class="column is-one-third">
103
- <strong><?php _e( "Email templates", "defender-security" ) ?></strong>
104
- <span class="sub">
105
- <?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" ) ?>
106
- </span>
107
- </div>
108
- <div class="column">
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
- <div class="clear line"></div>
 
 
 
 
 
129
  <input type="hidden" name="action" value="saveScanSettings"/>
130
  <?php wp_nonce_field( 'saveScanSettings' ) ?>
131
- <button class="button float-r"><?php _e( "Update Settings", "defender-security" ) ?></button>
132
- <div class="clear"></div>
 
 
 
 
 
 
 
 
 
 
133
  </form>
134
  </div>
135
- </div>
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="dev-box">
2
- <div class="box-title">
3
- <h3><?php _e( "Settings", "defender-security" ) ?></h3>
 
 
4
  </div>
5
- <div class="box-content">
6
- <form method="post" class="scan-frm scan-settings">
7
- <div class="columns <?php echo wp_defender()->isFree ? 'has-presale' : null ?>">
8
- <div class="column is-one-third">
9
- <strong><?php _e( "Scan Types", "defender-security" ) ?></strong>
10
- <span class="sub">
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
- <div class="column">
15
- <span class="toggle" aria-hidden="true" role="presentation">
16
- <input type="hidden" name="scan_core" value="0"/>
17
- <input role="presentation" type="checkbox" name="scan_core" class="toggle-checkbox" id="core-scan" value="1"
18
- <?php checked( true, $setting->scan_core ) ?>/>
19
- <label aria-hidden="true" class="toggle-label" for="core-scan"></label>
20
- </span>
21
- <label for="core-scan"><?php _e( "WordPress Core", "defender-security" ) ?></label>
22
- <span class="sub inpos">
23
- <?php _e( "Defender checks for any modifications or additions to WordPress core files.", "defender-security" ) ?>
24
- </span>
25
- <div class="clear mline"></div>
26
- <span class="toggle" aria-hidden="true" role="presentation">
27
- <input type="hidden" name="scan_vuln" value="0"/>
28
- <input role="presentation" type="checkbox" class="toggle-checkbox" name="scan_vuln" value="1"
29
- id="scan-vuln" <?php checked( true, $setting->scan_vuln ) ?>/>
30
- <label aria-hidden="true" class="toggle-label" for="scan-vuln"></label>
31
- </span>
32
- <label for="scan-vuln"><?php _e( "Plugins & Themes", "defender-security" ) ?></label>
33
- <span class="sub inpos">
34
- <?php _e( "Defender looks for publicly reported vulnerabilities in your installed plugins and themes.", "defender-security" ) ?>
35
- </span>
36
- <div class="clear mline"></div>
37
- <span class="toggle" aria-hidden="true" role="presentation">
38
- <input type="hidden" name="scan_content" value="0"/>
39
- <input role="presentation" type="checkbox" class="toggle-checkbox" name="scan_content" value="1"
40
- id="scan-content" <?php checked( true, $setting->scan_content ) ?>/>
41
- <label aria-hidden="true" class="toggle-label" for="scan-content"></label>
42
- </span>
43
- <label for="scan-content"><?php _e( "Suspicious Code", "defender-security" ) ?></label>
44
- <span class="sub inpos">
45
- <?php _e( "Defender looks inside all of your files for suspicious and potentially harmful code.", "defender-security" ) ?>
46
- </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  </div>
48
  </div>
49
- <div class="columns">
50
- <div class="column is-one-third">
51
- <strong><?php _e( "Maximum included file size", "defender-security" ) ?></strong>
52
- <span class="sub">
53
- <?php _e( "Defender will skip any files larger than this size. The smaller the number, the faster Defender will scan your website.", "defender-security" ) ?>
54
- </span>
55
  </div>
56
- <div class="column">
57
- <input type="text" size="4" value="<?php echo esc_attr( $setting->max_filesize ) ?>"
58
- name="max_filesize"> <?php _e( "MB", "defender-security" ) ?>
 
 
 
 
 
 
 
 
59
  </div>
60
  </div>
61
- <div class="columns">
62
- <div class="column is-one-third">
63
- <strong><?php _e( "Optional emails", "defender-security" ) ?></strong>
64
- <span class="sub">
65
- <?php _e( "By default, you'll only get email reports when your site runs into trouble. Turn this option on to get reports even when your site is running smoothly.", "defender-security" ) ?>
66
- </span>
67
- </div>
68
- <div class="column">
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
- <div class="columns">
87
- <div class="column is-one-third">
88
- <strong><?php _e( "Email templates", "defender-security" ) ?></strong>
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
- <div class="activate-picker">
3
- <div class="line end">
4
- <?php _e( "Welcome to Defender! Let's quickly set up the most important security features, then you can fine tune each setting later. Our recommendations are turned on by default.", "defender-security" ) ?>
5
- </div>
6
- <form method="post">
7
- <input type="hidden" value="activateModule" name="action"/>
8
- <?php wp_nonce_field( 'activateModule' ) ?>
9
- <div class="columns">
10
- <div class="column is-10">
11
- <strong><?php
12
- if ( wp_defender()->isFree ) {
13
- _e( "File Scanning", "defender-security" );
14
- } else {
15
- _e( "Automatic File Scans & Reporting", "defender-security" );
16
- } ?></strong>
17
- <p class="sub">
18
- <?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious.", "defender-security" ) ?>
19
- </p>
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( "IP Lockouts", "defender-security" ) ?></strong>
34
- <p class="sub">
35
- <?php _e( "Protect your login area and give Defender the nod to automatically lockout any suspicious behavior.", "defender-security" ) ?>
36
- </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  </div>
38
- <div class="column is-2">
39
- <span class="toggle float-r">
40
- <input type="checkbox" checked
41
- name="activator[]" class="toggle-checkbox" id="activate_lockout" value="activate_lockout"/>
42
- <label class="toggle-label" for="activate_lockout"></label>
43
- </span>
44
- </div>
45
- </div>
46
- <div class="columns last">
47
- <div class="column is-9">
48
- <p class="sub">
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
- <div class="column is-3 tr">
53
- <button type="submit" class="button"><?php _e( "Get Started", "defender-security" ) ?></button>
54
- </div>
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="well mline">
63
- <div class="scan-progress">
64
- <div class="scan-progress-text">
65
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/loading.gif" width="18"
66
- height="18"/>
67
- <span>0%</span>
 
 
 
 
 
 
 
 
68
  </div>
69
- <div class="scan-progress-bar">
70
- <span style="width: 0%"></span>
71
  </div>
72
  </div>
73
  </div>
74
- <p class="tc sub status-text"></p>
75
  </div>
76
- </dialog>
77
- <script type="text/javascript">
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
- <div class="activate-picker">
3
- <div class="line end">
4
- <?php _e( "Welcome to Defender Pro! Let's quickly set up the most important security features, then you can fine tune each setting later. Our recommendations are turned on by default.", "defender-security" ) ?>
5
- </div>
6
- <form method="post">
7
- <input type="hidden" value="activateModule" name="action"/>
8
- <?php wp_nonce_field( 'activateModule' ) ?>
9
- <div class="columns">
10
- <div class="column is-10">
11
- <strong><?php
12
- if ( wp_defender()->isFree ) {
13
- _e( "File Scanning", "defender-security" );
14
- } else {
15
- _e( "Automatic File Scans & Reporting", "defender-security" );
16
- } ?></strong>
17
- <p class="sub">
18
- <?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious.", "defender-security" ) ?>
19
- </p>
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
- <?php $blStats = $controller->pullBlackListStatus( false, false );
63
- if ( ! is_wp_error( $blStats ) ):?>
64
- <div class="columns">
65
- <div class="column is-10">
66
- <strong><?php _e( "Blacklist Monitor", "defender-security" ) ?></strong>
67
- <p class="sub">
68
- <?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" ) ?>
69
- </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  </div>
71
- <div class="column is-2">
72
- <span class="toggle float-r">
73
- <input type="checkbox" checked
74
- name="activator[]" class="toggle-checkbox" id="activate_blacklist"
75
- value="activate_blacklist"/>
76
- <label class="toggle-label" for="activate_blacklist"></label>
77
- </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  </div>
79
  </div>
80
- <?php endif; ?>
81
- <div class="columns last">
82
- <div class="column is-9">
83
- <p class="sub">
84
- <?php _e( "These services will be configured with recommended settings. You can change these at any time.", "defender-security" ) ?>
85
- </p>
86
- </div>
87
- <div class="column is-3 tr">
88
- <button type="submit" class="button"><?php _e( "Get Started", "defender-security" ) ?></button>
 
 
89
  </div>
90
- </div>
91
- </form>
92
- </div>
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="well mline">
98
- <div class="scan-progress">
99
- <div class="scan-progress-text">
100
- <img src="<?php echo wp_defender()->getPluginUrl() ?>assets/img/loading.gif" width="18"
101
- height="18"/>
102
- <span>0%</span>
 
 
 
 
 
 
 
 
103
  </div>
104
- <div class="scan-progress-bar">
105
- <span style="width: 0%"></span>
106
  </div>
107
  </div>
108
  </div>
109
- <p class="tc sub status-text"></p>
110
  </div>
111
- </dialog>
112
- <script type="text/javascript">
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
- <div class="wrap">
 
 
 
 
2
  <div id="wp-defender" class="wp-defender">
3
  <div class="def-dashboard">
4
- <h2 class="title"><?php _e( "Dashboard", "defender-security" ) ?></h2>
5
- <div class="dev-box summary-box">
6
- <div class="box-content">
7
- <div class="columns">
8
- <div class="column is-7 issues-count">
9
- <div>
10
- <h5 class=""><?php list( $hCount, $sCount ) = $controller->countTotalIssues( true );
11
- $countAll = $hCount + $sCount;
12
- echo $countAll;
13
- ?></h5>
14
- <?php if ( $countAll == 0 ): ?>
15
- <span class=""
16
- tooltip="<?php esc_attr_e( 'You have no outstanding security issues.', "defender-security" ); ?>">
17
- <i class="def-icon icon-tick" aria-hidden="true"></i>
18
- <?php else: ?>
19
- <?php
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 is_multiline">
76
- <div class="col-half">
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-half">
101
  <?php $controller->renderScanWidget() ?>
102
  <?php $controller->renderLockoutWidget() ?>
 
103
  <?php $controller->renderReportWidget() ?>
104
  </div>
105
  </div>
106
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  </div>
108
  </div>
109
- <?php
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
- @keyframes spinAround {
2
- from {
3
- transform: rotate(0deg); }
4
- to {
5
- transform: rotate(359deg); } }
6
- .wpmud .row.is_multiline {
7
- display: flex;
8
- flex-wrap: wrap; }
9
- .wpmud .row.is_multiline .col-half:last-child {
10
- padding-right: 15px; }
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-weight: 400;
35
- letter-spacing: -0.015em; }
36
- .wpmud .select-container {
37
- background: #FAFAFA; }
38
- .wpmud .select-container .dropdown-handle {
39
- background: none; }
40
- .wpmud .select-container .select-list-container .list-value {
41
- color: #333;
42
- font-weight: 400; }
43
- .wpmud .select-container .select-list-container ul li {
44
- color: #333;
45
- font-weight: 400; }
46
- .wpmud .select-container:hover, .wpmud .select-container.active:hover {
47
- border: solid 1px #DDDDDD; }
48
- .wpmud .select-container:hover .list-value, .wpmud .select-container.active:hover .list-value {
49
- color: #333;
50
- font-weight: 400; }
51
- .wpmud .select-container:focus, .wpmud .select-container.active {
52
- background: #FFFFFF; }
53
- .wpmud .select-container:focus .list-value, .wpmud .select-container.active .list-value {
54
- color: #333;
55
- font-weight: 400;
56
- background: #FFFFFF; }
57
- .wpmud .select-container:focus .dropdown-handle, .wpmud .select-container.active .dropdown-handle {
58
- background: none; }
59
- .wpmud input[type="text"]:hover, .wpmud textarea:hover, .wpmud input[type="search"]:hover {
60
- border: solid 1px #DDDDDD; }
61
- .wpmud input[type="text"]:focus, .wpmud textarea:focus, .wpmud input[type="search"]:focus {
62
- border: solid 1px #DDDDDD;
63
- background: #FFFFFF; }
64
- .wpmud input[type="text"]:focus::-webkit-input-placeholder, .wpmud textarea:focus::-webkit-input-placeholder, .wpmud input[type="search"]:focus::-webkit-input-placeholder {
65
- color: #AAA;
66
- opacity: 1; }
67
- .wpmud input[type="text"]:focus::-moz-placeholder, .wpmud textarea:focus::-moz-placeholder, .wpmud input[type="search"]:focus::-moz-placeholder {
68
- color: #AAA;
69
- background: #FFF;
70
- opacity: 1; }
71
- .wpmud input[type="text"]:focus:-ms-input-placeholder, .wpmud textarea:focus:-ms-input-placeholder, .wpmud input[type="search"]:focus:-ms-input-placeholder {
 
 
72
  color: #AAA;
73
- background: #FFF;
74
- opacity: 1; }
75
- .wpmud .button:not(.button-secondary):not(.button-green):not(.button-pre):not(.button-grey):not(.button-light):not([disabled]) {
76
- background-color: #17A8E3;
77
- color: #fff; }
78
- .wpmud .button-secondary {
79
- color: #666666;
80
- box-shadow: 0 0 0 2px #666666 inset; }
81
- .wpmud .button:not(.button-secondary):not(.button-green):not(.button-pre):not(.button-grey):not(.button-light):not([disabled]):hover,
82
- .wpmud .button:not(.button-secondary):not(.button-green):not(.button-pre):not(.button-grey):not(.button-light):not([disabled]):focus {
83
- background-color: #0A9BD6; }
84
- .wpmud .button-secondary:hover, .wpmud .button-secondary:focus {
85
- color: #fff;
86
- background: #666666 !important; }
87
- .wpmud .button[disabled], .wpmud .button[disabled]:hover, .wpmud .button[disabled]:active, .wpmud .button[disabled]:focus {
88
- background: #E6E6E6;
89
- color: #AAAAAA;
90
- cursor: not-allowed;
91
- text-shadow: none; }
92
- .wpmud .button.button-small {
93
- font: 500 12px/20px Roboto, sans-serif;
94
- padding: 5px 16px; }
95
- .wpmud .button.button-pre {
96
- color: #1ABC9C;
97
- background-color: #fff;
98
- box-shadow: 0 0 0 2px #1ABC9C inset;
99
  font-weight: 500;
100
- -webkit-border-radius: 16px;
101
- -moz-border-radius: 16px;
102
- border-radius: 16px; }
103
- .wpmud .button.button-pre:hover, .wpmud .button.button-pre:active, .wpmud .button.button-pre:focus {
104
- background: #1ABC9C !important;
105
- color: #fff; }
106
- .wpmud .dev-list {
107
- margin-top: 0;
108
- margin-bottom: 30px; }
109
- .wpmud .dev-list > li .list-detail {
110
- padding: 17px 0; }
111
- .wpmud .dev-list > li .list-detail img {
112
- margin-right: 5px;
113
- display: inline-block;
114
- vertical-align: middle; }
115
- .wpmud .dev-list > li .list-label {
116
- padding: 17px 0; }
117
- .wpmud .dev-list.bold {
118
- font-family: "Roboto Condensed", sans-serif; }
119
- .wpmud .dev-list.bold .list-label {
120
- font-weight: bold;
121
- color: #333;
122
- font-size: 13px;
123
- font-family: Roboto, sans-serif;
124
- text-transform: capitalize; }
125
- .wpmud .dev-list.bold .list-detail {
126
- color: #555;
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
- left: 0;
279
- max-width: 780px;
280
- padding: 30px; }
281
- .wpmud .dev-overlay .box .title {
282
- margin: -30px -30px 30px -30px;
283
- padding: 0 30px; }
284
- .wpmud .dev-overlay .box .title .close {
285
- padding: 0 30px; }
286
- .wpmud .dev-overlay .box .title h3 {
287
- color: #333;
288
- font-size: 15px; }
289
- .wpmud .dev-overlay .box-scroll {
290
- padding: 30px; }
291
- .wpmud .dev-overlay .wp-defender form input[type="text"],
292
- .wpmud .dev-overlay .wp-defender form label {
293
- width: 100%; }
294
- .wpmud .dev-overlay .wp-defender .columns .column > label {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
295
  padding-left: 0;
296
- padding-bottom: 0;
297
- color: #6b6b6b;
298
- font-size: 12px;
299
- font-weight: 700; }
300
- .wpmud .dev-overlay .wp-defender .columns {
301
- box-shadow: none;
302
- padding: 10px 0 0; }
303
- .wpmud .dev-overlay .wp-defender .columns.footer {
304
- border-top: 1px solid #EAEAEA;
305
- margin: 15px -40px -30px -40px;
306
- padding: 15px 25px; }
307
- .wpmud .dev-overlay .wp-defender .def-tag {
308
- text-transform: none; }
309
- .wpmud .dev-overlay.small .box {
310
- margin: 30px auto; }
311
- @media screen and (min-width: 769px) and (max-width: 979px) {
312
- .wpmud .dev-overlay {
313
- width: 100%;
314
- left: 36px; } }
315
- @media screen and (max-width: 768px) {
316
- .wpmud .dev-overlay {
317
- width: 100%;
318
- left: 0; }
319
- .wpmud .dev-overlay .box-scroll {
320
- padding: 10px; } }
321
- .wpmud button#collapse-button {
322
- text-transform: none !important;
323
- font-weight: normal; }
324
- .wpmud [tooltip]:after {
325
- text-transform: none;
326
- font: 400 13px/20px 'Roboto Condensed'; }
327
- .wpmud .row .col-half {
328
- float: left; }
329
- @media (max-width: 475px) {
330
- .wpmud .scanning.scanning-free.wp-defender .box {
331
- padding-bottom: 20px !important; }
332
- .wpmud .scanning.scanning-free.wp-defender .box .presale-text {
333
- position: relative;
334
- bottom: 0;
335
- right: 0; }
336
- .wpmud .scanning.scanning-free.wp-defender .box .presale-text div:before {
337
- content: none; } }
338
- .wpmud .wp-defender .span-icon.icon-edit {
339
- background-image: url(../img/edit.svg);
340
- background-size: contain;
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: 999;
394
- opacity: 0.5;
395
- background: #f2f2f2; }
396
- .wpmud .dev-team:not(.dev-overlay) {
397
- background-image: url("../img/dev-team.svg");
398
- background-repeat: no-repeat;
399
- background-position: 50% 100%;
400
- padding-bottom: 35%; }
401
- .wpmud .dev-team.dev-overlay .box {
402
- padding-bottom: 270px;
403
- background-image: url("../img/dev-team-big.svg");
404
- background-size: 90%;
405
- background-repeat: no-repeat;
406
- background-position: 50% 100%; }
407
- .wpmud .scanning.scanning-free .box {
408
- background-image: url("../img/scanning-free-man.svg");
409
- background-repeat: no-repeat;
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
- height: 0;
514
- line-height: 0;
515
- visibility: hidden; }
516
- .wp-defender .wd-hide {
517
- display: none !important; }
518
- .wp-defender .wd-overlay {
519
- width: 100%;
520
- height: 100%;
521
- background-color: #fff;
522
- opacity: 0.7;
523
- position: absolute;
524
- top: 0;
525
- left: 0;
526
- z-index: 100; }
527
- .wp-defender .wd-overlay i {
528
- font-size: 30px;
529
- position: absolute;
530
- top: 50%;
531
- left: 50%;
532
- margin-top: -15px;
533
- margin-left: -15px; }
534
- .wp-defender .hljs {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
535
  display: block;
536
- overflow-x: auto;
537
- padding: 0.5em;
538
- background: white;
539
- color: black; }
540
- .wp-defender .hljs del {
541
- background: #FFA5A8; }
542
- .wp-defender .hljs ins {
543
- background: #D1F1EA;
544
- text-decoration: none; }
545
- .wp-defender .hljs-comment,
546
- .wp-defender .hljs-quote,
547
- .wp-defender .hljs-variable {
548
- color: #008000; }
549
- .wp-defender .hljs-keyword,
550
- .wp-defender .hljs-selector-tag,
551
- .wp-defender .hljs-built_in,
552
- .wp-defender .hljs-name,
553
- .wp-defender .hljs-tag {
554
- color: #00f; }
555
- .wp-defender .hljs-string,
556
- .wp-defender .hljs-title,
557
- .wp-defender .hljs-section,
558
- .wp-defender .hljs-attribute,
559
- .wp-defender .hljs-literal,
560
- .wp-defender .hljs-template-tag,
561
- .wp-defender .hljs-template-variable,
562
- .wp-defender .hljs-type,
563
- .wp-defender .hljs-addition {
564
- color: #a31515; }
565
- .wp-defender .hljs-deletion,
566
- .wp-defender .hljs-selector-attr,
567
- .wp-defender .hljs-selector-pseudo,
568
- .wp-defender .hljs-meta {
569
- color: #2b91af; }
570
- .wp-defender .hljs-doctag {
571
- color: #808080; }
572
- .wp-defender .hljs-attr {
573
- color: #f00; }
574
- .wp-defender .hljs-symbol,
575
- .wp-defender .hljs-bullet,
576
- .wp-defender .hljs-link {
577
- color: #00b0e8; }
578
- .wp-defender .hljs-emphasis {
579
- font-style: italic; }
580
- .wp-defender .hljs-strong {
581
- font-weight: bold; }
582
- .wp-defender .hljs-line-numbers {
583
- text-align: right;
584
- border-right: 1px solid #ccc;
585
- color: #999;
586
- -webkit-touch-callout: none;
587
- -webkit-user-select: none;
588
- -khtml-user-select: none;
589
- -moz-user-select: none;
590
- -ms-user-select: none;
591
- user-select: none; }
592
- .wp-defender pre {
593
- border: none;
594
- padding: 0;
595
- max-height: 400px;
596
- overflow-y: scroll; }
597
- @keyframes spinAround {
598
- from {
599
- transform: rotate(0deg); }
600
- to {
601
- transform: rotate(359deg); } }
602
- .wp-defender .is-block {
603
- display: block; }
604
- @media screen and (max-width: 768px) {
605
- .wp-defender .is-block-mobile {
606
- display: block !important; } }
607
- @media screen and (min-width: 769px) {
608
- .wp-defender .is-block-tablet {
609
- display: block !important; } }
610
- @media screen and (min-width: 769px) and (max-width: 979px) {
611
- .wp-defender .is-block-tablet-only {
612
- display: block !important; } }
613
- @media screen and (max-width: 979px) {
614
- .wp-defender .is-block-touch {
615
- display: block !important; } }
616
- @media screen and (min-width: 980px) {
617
- .wp-defender .is-block-desktop {
618
- display: block !important; } }
619
- @media screen and (min-width: 980px) and (max-width: 1179px) {
620
- .wp-defender .is-block-desktop-only {
621
- display: block !important; } }
622
- @media screen and (min-width: 1180px) {
623
- .wp-defender .is-block-widescreen {
624
- display: block !important; } }
625
- .wp-defender .is-flex {
626
- display: flex; }
627
- @media screen and (max-width: 768px) {
628
- .wp-defender .is-flex-mobile {
629
- display: flex !important; } }
630
- @media screen and (min-width: 769px) {
631
- .wp-defender .is-flex-tablet {
632
- display: flex !important; } }
633
- @media screen and (min-width: 769px) and (max-width: 979px) {
634
- .wp-defender .is-flex-tablet-only {
635
- display: flex !important; } }
636
- @media screen and (max-width: 979px) {
637
- .wp-defender .is-flex-touch {
638
- display: flex !important; } }
639
- @media screen and (min-width: 980px) {
640
- .wp-defender .is-flex-desktop {
641
- display: flex !important; } }
642
- @media screen and (min-width: 980px) and (max-width: 1179px) {
643
- .wp-defender .is-flex-desktop-only {
644
- display: flex !important; } }
645
- @media screen and (min-width: 1180px) {
646
- .wp-defender .is-flex-widescreen {
647
- display: flex !important; } }
648
- .wp-defender .is-inline {
649
- display: inline; }
650
- @media screen and (max-width: 768px) {
651
- .wp-defender .is-inline-mobile {
652
- display: inline !important; } }
653
- @media screen and (min-width: 769px) {
654
- .wp-defender .is-inline-tablet {
655
- display: inline !important; } }
656
- @media screen and (min-width: 769px) and (max-width: 979px) {
657
- .wp-defender .is-inline-tablet-only {
658
- display: inline !important; } }
659
- @media screen and (max-width: 979px) {
660
- .wp-defender .is-inline-touch {
661
- display: inline !important; } }
662
- @media screen and (min-width: 980px) {
663
- .wp-defender .is-inline-desktop {
664
- display: inline !important; } }
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
- flex-basis: 0;
777
- flex-grow: 1;
778
- flex-shrink: 1;
779
- padding: 10px; }
780
- .columns.is-mobile > .wp-defender .column.is-narrow {
781
- flex: none; }
782
- .columns.is-mobile > .wp-defender .column.is-full {
783
- flex: none;
784
- width: 100%; }
785
- .columns.is-mobile > .wp-defender .column.is-three-quarters {
786
- flex: none;
787
- width: 75%; }
788
- .columns.is-mobile > .wp-defender .column.is-two-thirds {
789
- flex: none;
790
- width: 66.6666%; }
791
- .columns.is-mobile > .wp-defender .column.is-half {
792
- flex: none;
793
- width: 50%; }
794
- .columns.is-mobile > .wp-defender .column.is-one-third {
795
- flex: none;
796
- width: 33.3333%; }
797
- .columns.is-mobile > .wp-defender .column.is-one-quarter {
798
- flex: none;
799
- width: 25%; }
800
- .columns.is-mobile > .wp-defender .column.is-offset-three-quarters {
801
- margin-left: 75%; }
802
- .columns.is-mobile > .wp-defender .column.is-offset-two-thirds {
803
- margin-left: 66.6666%; }
804
- .columns.is-mobile > .wp-defender .column.is-offset-half {
805
- margin-left: 50%; }
806
- .columns.is-mobile > .wp-defender .column.is-offset-one-third {
807
- margin-left: 33.3333%; }
808
- .columns.is-mobile > .wp-defender .column.is-offset-one-quarter {
809
- margin-left: 25%; }
810
- .columns.is-mobile > .wp-defender .column.is-1 {
811
- flex: none;
812
- width: 8.3333333333%; }
813
- .columns.is-mobile > .wp-defender .column.is-offset-1 {
814
- margin-left: 8.3333333333%; }
815
- .columns.is-mobile > .wp-defender .column.is-2 {
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-position: 3% 100%; }
1304
- .wp-defender .summary-box .issues-count {
1305
- vertical-align: middle;
1306
- position: relative; }
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
- box-sizing: border-box;
1494
- word-break: break-all; }
1495
- .wp-defender .well a:not(.button) {
1496
- color: #333;
1497
- text-decoration: underline;
1498
- cursor: pointer; }
1499
- .wp-defender .well form .columns {
1500
- padding: 10px 0;
1501
- box-shadow: none; }
1502
- .wp-defender .well .well-footer {
1503
- border-top: 1px solid #ddd;
1504
- padding: 30px 30px 0 30px;
1505
- margin: 0 -30px; }
1506
- .wp-defender .well.well-white {
1507
- background: white;
1508
- border: solid 1px #E6E6E6; }
1509
- .wp-defender .well.with-cap {
1510
- padding: 15px 30px 15px 60px; }
1511
- .wp-defender .well.with-cap i {
1512
- position: absolute;
1513
- top: 20px;
1514
- left: 30px; }
1515
- .wp-defender .well.well-blue {
1516
- background: #E1F6FF; }
1517
- .wp-defender .well.well-blue i:before {
1518
- color: #17A8E3 !important; }
1519
- .wp-defender .well.well-yellow {
1520
- background-color: #FFF5D5; }
1521
- .wp-defender .well.well-grey {
1522
- background-color: #F2F2F2; }
1523
- .wp-defender .well.well-error {
1524
- background: #FFE5E9; }
1525
- .wp-defender .well.well-error i:before {
1526
- color: #FF7F83 !important; }
1527
- .wp-defender .well.well-green {
1528
- background: #D1F1EA; }
1529
- .wp-defender .well.well-green i:before {
1530
- color: #1ABC9C !important; }
1531
- .wp-defender .well.well-blank {
1532
- padding-left: 30px;
1533
- padding-bottom: 0;
1534
- background: none; }
1535
- .wp-defender .well.well-blank i {
1536
- left: 0;
1537
- width: 21px;
1538
- mask-repeat: no-repeat;
1539
- -webkit-mask-repeat: no-repeat; }
1540
- .wp-defender .well.with-outline {
1541
- border: solid 1px #ddd; }
1542
- .wp-defender .well.schedule-box strong {
1543
- font-weight: bold;
1544
- color: #333;
1545
- font-family: Roboto, sans-serif;
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
- padding-bottom: 0; }
2142
- .wp-defender .wdf-scanning .item-detail .list-detail, .wp-defender .wdf-scanning .item-detail .list-label, .wp-defender .scan-dialog .item-detail .list-detail, .wp-defender .scan-dialog .item-detail .list-label {
2143
- padding: 5px 0;
2144
- font-size: 13px; }
2145
- .wp-defender .wdf-scanning .item-detail .list-detail, .wp-defender .scan-dialog .item-detail .list-detail {
2146
- color: #666;
2147
- text-align: left; }
2148
- .wp-defender .wdf-scanning .item-detail .list-label, .wp-defender .scan-dialog .item-detail .list-label {
2149
- width: 150px;
2150
- font-weight: bold; }
2151
- .wp-defender .wdf-scanning .vuln-list p, .wp-defender .scan-dialog .vuln-list p {
2152
- font-size: 15px;
2153
- line-height: 30px; }
2154
- .wp-defender .wdf-scanning .vuln-list ul, .wp-defender .scan-dialog .vuln-list ul {
2155
- margin: 10px 0 10px 10px; }
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-position: 2% 117%; }
2208
- .wp-defender .auditing .is-free .presale-text div {
2209
- width: 83%;
2210
- font-size: 13px;
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
- margin-bottom: 10px;
2299
- font-size: 13px;
2300
- line-height: 22px; }
2301
- .wp-defender .auditing .audit-filter .columns {
2302
- margin-bottom: 10px;
2303
- border-bottom: none; }
2304
- .wp-defender .auditing .audit-filter .columns .column {
2305
- padding-bottom: 0; }
2306
- .wp-defender .auditing .audit-filter .columns .column input {
2307
- margin-bottom: 0; }
2308
- .wp-defender .auditing .audit-filter .columns .column #wd_range_from {
2309
- width: 210px; }
2310
- .wp-defender .auditing .audit-filter .events .event {
2311
- float: left;
2312
- margin-right: 10px; }
2313
- .wp-defender .auditing .audit-filter .events .event label {
2314
- display: inline-block;
2315
- padding: 0; }
2316
- .wp-defender .auditing .banIP {
2317
- display: inline-block;
2318
- margin-right: 10px; }
2319
- .wp-defender .iplockout .row > .col-third {
2320
- width: 25%; }
2321
- .wp-defender .iplockout .row > .col-two-third {
2322
- width: 75%; }
2323
- .wp-defender .iplockout .lockout-logs-container .lockout-logs-inner {
2324
- margin: 0 -30px 0 -30px; }
2325
- .wp-defender .iplockout table {
2326
- width: 100%;
2327
- margin-bottom: 30px; }
2328
- .wp-defender .iplockout table td, .wp-defender .iplockout table th {
2329
- border-bottom: solid 1px #E6E6E6; }
2330
- .wp-defender .iplockout table thead th:first-child {
2331
- padding-left: 30px; }
2332
- .wp-defender .iplockout table thead th:last-child {
2333
- padding-right: 30px; }
2334
- .wp-defender .iplockout table thead th {
2335
- font-family: "Roboto Condensed", sans-serif;
2336
- text-align: left;
2337
- font-weight: bold;
2338
- color: #333;
2339
- padding: 7px;
2340
- text-transform: none; }
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" standalone="no"?>
2
- <svg width="118px" height="167px" viewBox="0 0 118 167" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 41.2 (35397) - http://www.bohemiancoding.com/sketch -->
4
- <title>Graphic</title>
5
- <desc>Created with Sketch.</desc>
6
  <defs>
7
- <rect id="path-1" x="0" y="0" width="118" height="167"></rect>
8
  </defs>
9
- <g id="Security-Plugin" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
10
- <g id="File-Scanning---Scanning---Free" transform="translate(-410.000000, -567.000000)">
11
- <g id="Modal" transform="translate(380.000000, 256.000000)">
12
- <g id="Graphic" transform="translate(30.000000, 311.000000)">
13
- <mask id="mask-2" fill="white">
14
- <use xlink:href="#path-1"></use>
15
- </mask>
16
- <g id="Mask"></g>
17
- <g id="Defender" mask="url(#mask-2)">
18
- <g transform="translate(59.000000, 114.500000) scale(-1, 1) translate(-59.000000, -114.500000) ">
19
- <path d="M29.9022766,86.8647793 C29.9022766,86.8647793 36.4146708,93.3895575 37.0692693,96.3596703 C16.141065,104.124148 3.05641533,122.636129 0.188670803,151.057095 C-1.65195693,166.465954 10.6079847,167.127558 9.96458321,168.85668 C9.32161241,170.585802 8.53092628,188.311349 13.0399044,202.693152 C17.5488825,217.074954 18.5665248,228.979511 18.5665248,228.979511 L109.195693,228.979511 L114.550912,153.344082 C114.550912,153.344082 124.359985,129.824232 108.897678,107.981851 C97.2277365,91.4972944 91.2075832,90.4779861 91.2075832,90.4779861 L90.8423861,83.9639692 L29.9022766,86.8647793 Z" id="Fill-1" fill="#A05621"></path>
20
- <path d="M33.5975285,175.047987 C33.3132949,163.063367 35.6603752,162.549408 34.1440321,156.471439 C32.6281197,150.393469 28.1742657,143.202783 29.2022438,133.272705 C30.2297912,123.342198 35.0260175,113.412121 35.0260175,113.412121 C35.0260175,113.412121 30.0687255,116.591433 27.4085577,119.282183 C24.7483898,121.972502 23.5395358,138.065348 21.0606745,141.832657 C19.0852511,144.834623 6.8912,157.1791 2.01659416,162.072469 C5.05057226,167.013617 10.3950248,167.699326 9.96479854,168.856378 C9.8502438,169.164151 9.73181314,169.985452 9.63879124,171.196311 C9.65429489,171.210946 16.4483387,177.444739 20.0822219,177.444739 C23.7208423,177.444739 22.6928642,187.375247 22.6928642,196.278267 C22.6928642,205.180858 23.7066307,207.920249 25.5980759,209.974792 C27.4890905,212.029335 33.5975285,228.979209 33.5975285,228.979209 L40.1650467,213.399031 C40.1650467,213.399031 33.881762,195.250781 33.5975285,175.047987" id="Fill-4" fill="#98480B"></path>
21
- <path d="M41.345908,86.3200004 L33.0122657,90.233662 C34.7874336,92.2882053 36.7275431,94.8080662 37.0694847,96.3598425 C33.6548058,97.6266602 30.4533022,99.1844628 27.4666964,101.019906 C31.4834336,103.391262 36.5216891,105.206905 40.1650467,103.482087 C46.5495358,100.459029 54.1980029,92.7152128 91.2073679,90.4781583 L90.8426015,83.9637109 L41.345908,86.3200004 Z" id="Fill-6" fill="#98480B"></path>
22
- <path d="M14.0977701,52.476297 C14.0977701,52.476297 10.6878285,58.2309981 10.6654343,59.4534793 C10.6426095,60.6759605 10.3678504,62.2552857 15.8712153,63.0498985 C14.8316095,64.3335038 14.3423832,71.0864211 14.3423832,71.0864211 C14.3423832,71.0864211 11.3264927,71.0007613 11.152938,73.5955207 C10.9793832,76.1902801 12.7523978,77.6327218 15.8712153,78.1647594 C16.5439015,78.5741184 16.2863686,80.9101767 16.1972226,81.2855301 C16.1080766,81.6608835 13.7941569,86.6313026 21.7117847,89.8454812 C29.6294124,93.0592293 49.3190474,92.0201203 49.3190474,92.0201203 L47.2062445,60.1774981 L14.0977701,52.476297 Z" id="Fill-8" fill="#A05621"></path>
23
- <path d="M13.1634168,54.2168692 C13.1634168,54.2168692 26.6602051,54.2969331 33.9899861,75.1574556 C35.9968474,85.3712 35.796592,92.5261586 35.796592,92.5261586 L41.3641248,92.5261586 L39.1285847,63.7251041 C39.1285847,63.7251041 16.9842051,49.0579124 13.1634168,54.2168692" id="Fill-10" fill="#98480B"></path>
24
- <path d="M78.234646,1.69722575 C48.3014051,-2.28358628 33.1969745,11.1012915 29.159135,20.05941 C25.4218942,28.35119 18.8113102,47.0258818 16.2174635,54.34269 C18.6170839,54.9733009 22.3108285,56.9361581 27.4085146,62.1760397 C30.0277701,64.868081 31.9217993,68.0409363 33.2977482,71.3480923 C33.4006752,71.5956017 33.5005876,71.8435415 33.5974854,72.0919118 C41.5749745,72.2369739 66.0595438,71.1225359 85.2130109,50.6386581 C85.9468504,49.7872258 86.9864562,50.3950227 87.7814489,50.6106788 C88.4825584,50.8005077 98.9785292,47.8265209 102.180894,41.4605791 C101.075398,29.8607821 94.9355219,4.65055094 78.234646,1.69722575" id="Fill-12" fill="#FF5A0C"></path>
25
- <path d="M102.564739,38.945238 C100.281826,22.0018207 93.4201693,1.79429248 73.9010745,0.58386391 C46.2623737,-1.13019248 29.8741547,11.9542305 26.6394905,17.8871383 C23.4052569,23.8196158 12.9971401,51.7429805 12.752527,52.4764692 C12.5079139,53.2095274 13.0453737,54.3123432 13.0453737,54.3123432 C13.4928263,54.1121835 14.538892,53.9021233 16.2175927,54.3429053 C18.8114394,47.0256665 25.4220234,28.3509748 29.1592642,20.0596252 C33.1971036,11.1010763 48.3011036,-2.28337105 78.2347752,1.69701053 C94.9356511,4.65076617 101.075527,29.8605669 102.181023,41.4603639 C102.394199,41.0359391 102.575505,40.5964485 102.718914,40.1418921 C102.669819,39.7450162 102.618571,39.345988 102.564739,38.945238" id="Fill-14" fill="#FFBD00"></path>
26
- <path d="M25.5979898,47.8837709 C25.0743109,48.2647201 28.2680628,54.5247709 35.6159314,56.7932483 C36.1409022,56.9232445 46.9202453,48.6702051 47.6471942,44.4836374 C47.5662307,44.1306675 46.8801942,44.9377633 34.8489314,46.7942991 C30.2465007,47.3590509 25.8753328,47.6818893 25.5979898,47.8837709" id="Fill-17" fill="#1F191A"></path>
27
- <path d="M102.719043,40.1420212 C100.421488,47.4157844 88.5293277,50.8133352 87.7812766,50.6105927 C87.4643131,50.5245024 87.1085905,50.3772882 86.7485613,50.2838803 C86.6654445,53.1592938 85.8523642,59.0211773 83.7886562,63.8814009 C81.4325321,69.429916 79.2542693,72.9940513 73.0902766,72.3651622 C79.0445394,71.5102863 80.6095467,68.3331265 81.5457949,66.7684367 C82.4816124,65.2041773 84.5306781,57.7203539 85.0957,52.9948615 C85.2106854,52.0328032 85.2666708,51.2446472 85.2671015,50.5839047 C85.2490139,50.6024141 85.2304956,50.6183408 85.2132693,50.638572 C66.0598022,71.1224498 41.5752328,72.2373182 33.5977438,72.0918258 C36.4982182,79.5188295 36.8733204,87.4925062 36.9318898,92.1805494 C73.5243788,92.6462976 93.1011818,88.2918539 96.8311015,85.5417017 C100.561452,82.7915494 103.435226,71.4844592 103.618685,56.7931622 C103.669503,52.7228164 103.531262,46.723619 102.719043,40.1420212" id="Fill-19" fill="#FFBD00"></path>
28
- <path d="M86.7484321,50.2838803 C86.7600599,49.8766735 86.7574759,49.528869 86.7415416,49.2529498 C86.6123445,47.027087 84.4177168,46.1722111 83.5464978,46.1403577 C82.6752788,46.1080739 79.4156365,45.7693088 75.6883007,48.0915927 C75.6883007,48.0915927 79.7545635,46.6564686 82.3199869,47.1080118 C84.363454,47.4674385 85.2678336,47.9981848 85.2669723,50.5839047 C85.6989212,50.131931 86.2273372,50.1487186 86.7484321,50.2838803" id="Fill-21" fill="#D33000"></path>
29
- <path d="M85.0956139,52.9947754 C84.5310226,57.7202679 82.4815263,65.2040912 81.5457088,66.7683506 C80.6098912,68.3330404 79.0444533,71.5102002 73.0901905,72.3650761 C79.2541832,72.9939652 81.4328766,69.4298299 83.7885701,63.8813148 C85.8522781,59.0210912 86.6653584,53.1592077 86.7484752,50.2837942 C86.2273803,50.1486325 85.6989642,50.1318449 85.2670153,50.5838186 C85.2670153,51.2445611 85.2105993,52.0331476 85.0956139,52.9947754" id="Fill-23" fill="#FFAD00"></path>
30
- <path d="M50.9701861,105.041439 C53.2948723,105.428415 65.0543905,99.2389579 72.084865,99.2389579 C79.1153394,99.2389579 87.4563029,100.636202 88.5885,100.443791 C89.7206971,100.251379 89.9588504,99.5962323 87.6354562,99.2389579 C85.3116314,98.8816835 75.3023029,95.1298714 73.9319526,94.4747248 C72.5616022,93.8195782 70.5723978,93.8910331 69.0052372,94.063644 C67.437646,94.2366853 63.9820547,94.772597 63.9820547,95.7251853 C63.9820547,96.6782041 60.7051861,100.191546 58.2026387,101.02533 C55.7005219,101.859114 49.6954416,104.829227 50.9701861,105.041439" id="Fill-25" fill="#98480B"></path>
31
- <path d="M10.6780526,59.3212878 C10.6707314,59.3694983 10.6659942,59.4142652 10.6651328,59.4534363 C10.6427387,60.6759175 10.3675489,62.2552427 15.8709139,63.0498555 C15.8709139,63.0498555 16.9621985,63.0619081 18.3837971,62.221237 C19.7967825,61.3853009 11.7848409,59.2317539 10.6780526,59.3212878" id="Fill-27" fill="#98480B"></path>
32
- <path d="M15.8710431,78.1646303 C15.8710431,78.1646303 12.4085613,77.5000137 11.9154591,75.9925739 C11.4223569,74.485134 18.2387949,75.6154987 18.2965029,75.7024498 C18.3546416,75.7898314 18.5505905,77.4952788 15.8710431,78.1646303" id="Fill-29" fill="#98480B"></path>
 
 
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="'+$(this).attr('id')+'"]').attr('aria-checked',true);
5
  } else {
6
- $('label[for="'+$(this).attr('id')+'"]').attr('aria-checked',false);
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('.dev-box');
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('.dev-box');
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
- WDP.showOverlay("#activator", {
62
- title: dashboard.activator_title,
63
- class: 'no-close wp-defender wd-activator'
64
- });
 
 
65
  }
66
 
67
- $('.change-one-time-pass-email').click(function(){
68
- WDP.showOverlay("#edit-one-time-password-email", {
69
- title: defender_adtools.edit_email_title,
70
- class: 'wd-one-time-pass-email'
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
- $('.activate-picker').closest('.box').attr('style', 'padding-bottom:150px !important');
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('.floated-alert').size() > 0) {
167
  return;
168
  }
169
- var div = jq('<div class="floated-alert"/>');
170
  if (type == 'error') {
171
- div.addClass('alert-error');
172
  } else {
173
- div.addClass('alert-ok');
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="wdv-icon wdv-icon-fw wdv-icon-refresh spin"></i>');
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.0.1 - 2018-19-11
8
  ----------------------------------------------------------------------
9
- - Fix: permanently ban 404 lockouts now send correct email
10
- - Fix: IP lockout logs sorting show wrong results when pagination
11
- - Fix: IP lockout logs show wrong badge for 404 lockout
12
- - Fix: Conflict issue with sensei plugin make 2FA does not work properly
 
 
 
 
 
 
 
 
 
 
 
 
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) 2018 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.0.1-beta2\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
- "POT-Creation-Date: 2018-10-08 10:52:02+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: 2018-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-i18n1.0.2\n"
15
 
16
- #: app/behavior/blacklist-free.php:21 app/behavior/blacklist.php:58
17
- #: app/behavior/blacklist.php:116 app/behavior/blacklist.php:141
18
- #: app/behavior/blacklist.php:168
19
- msgid "BLACKLIST MONITOR"
 
20
  msgstr ""
21
 
22
- #: app/behavior/blacklist-free.php:25 app/behavior/blacklist.php:61
23
- #: app/module/audit/behavior/audit-free.php:20
24
- #: app/module/scan/behavior/scan.php:136 app/module/scan/behavior/scan.php:151
25
- #: app/module/scan/view/layouts/layout.php:61
26
- #: app/module/scan/view/layouts/layout.php:77
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:26 app/behavior/blacklist.php:62
33
- #: app/module/audit/behavior/audit-free.php:20
34
- msgid "PRO FEATURE"
 
35
  msgstr ""
36
 
37
- #: app/behavior/blacklist-free.php:30 app/behavior/blacklist.php:34
38
- #: app/behavior/blacklist.php:66
 
 
 
 
 
 
 
 
 
 
 
 
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-free.php:35 app/behavior/blacklist.php:70
46
- #: app/module/audit/view/free.php:17
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:30 app/view/activator.php:66
53
- msgid "Blacklist Monitor"
54
  msgstr ""
55
 
56
- #: app/behavior/blacklist.php:38
57
- msgid ""
58
- "We are currently requesting\n"
59
- " your domain status from Google. This can take anywhere\n"
60
- " from a few minutes up to 12 hours."
61
  msgstr ""
62
 
63
- #: app/behavior/blacklist.php:42 app/behavior/blacklist.php:198
64
- msgid "Want to know more about blacklisting? <a href=\"%s\">Read this article.</a>"
 
 
 
 
65
  msgstr ""
66
 
67
- #: app/behavior/blacklist.php:81
68
  msgid "A WPMU DEV subscription is required for blacklist monitoring"
69
  msgstr ""
70
 
71
- #: app/behavior/blacklist.php:103
72
  msgid "Whoops, it looks like something went wrong. Details: "
73
  msgstr ""
74
 
75
- #: app/behavior/blacklist.php:120 app/behavior/blacklist.php:145
76
- #: app/behavior/blacklist.php:185
77
- msgid ""
78
- " Automatically check if you’re on Google’s blacklist every 6 hours. If "
79
- "something’s\n"
80
- " wrong, we’ll let you know via email."
 
 
 
81
  msgstr ""
82
 
83
- #: app/behavior/blacklist.php:127
84
- msgid "ACTIVATE"
85
  msgstr ""
86
 
87
- #: app/behavior/blacklist.php:153
88
- msgid "Try Again"
 
 
 
89
  msgstr ""
90
 
91
- #: app/behavior/blacklist.php:190
92
- msgid "Your domain is currently on Google’s blacklist."
 
 
93
  msgstr ""
94
 
95
- #: app/behavior/blacklist.php:195
96
  msgid "Your domain is currently clean."
97
  msgstr ""
98
 
99
- #: app/behavior/blacklist.php:260
100
  msgid "Something wrong happened, please try again."
101
  msgstr ""
102
 
103
- #: app/behavior/report-free.php:17 app/behavior/report.php:17
104
- msgid "REPORTING"
 
 
 
 
 
 
 
 
 
105
  msgstr ""
106
 
107
- #: app/behavior/report-free.php:21 app/behavior/report.php:21
108
  msgid ""
109
  "Get tailored security reports delivered to your inbox so you don’t have to "
110
- "worry\n"
111
- " about checking in."
 
 
 
 
 
 
 
 
112
  msgstr ""
113
 
114
- #: app/behavior/report-free.php:29 app/behavior/report.php:140
115
- #: app/module/scan/behavior/scan.php:36
116
- msgid "FILE SCANNING"
 
117
  msgstr ""
118
 
119
- #: app/behavior/report-free.php:40 app/behavior/report.php:98
120
- #: app/module/audit/behavior/audit-free.php:18
121
- #: app/module/audit/behavior/audit.php:22 app/module/audit/view/free.php:5
122
- #: app/module/audit/view/layouts/layout.php:5
123
- #: app/module/audit/view/widget.php:4
124
- msgid "AUDIT LOGGING"
125
  msgstr ""
126
 
127
- #: app/behavior/report-free.php:51 app/behavior/report.php:53
128
- #: app/module/ip-lockout/behavior/widget.php:24
129
- #: app/module/ip-lockout/view/layouts/layout.php:6
130
- msgid "IP LOCKOUTS"
 
 
 
 
 
 
 
131
  msgstr ""
132
 
133
- #: app/behavior/report-free.php:61
134
  msgid ""
135
- " Automated reports are included in a WPMU DEV membership along with 100+ "
136
- "plugins\n"
137
- " , 24/7 support and lots of handy site management "
138
- "tools – <a target='_blank' href=\"%s\">Try\n"
139
- " it all absolutely FREE</a>"
140
  msgstr ""
141
 
142
- #: app/behavior/report-free.php:83 app/behavior/report.php:180
143
  msgid "Scan reports are active scheduled to send %s"
144
  msgstr ""
145
 
146
- #: app/behavior/report-free.php:98 app/behavior/report.php:194
147
  msgid "Audit reports are active scheduled to send %s"
148
  msgstr ""
149
 
150
- #: app/behavior/report-free.php:113 app/behavior/report.php:208
151
  msgid "Lockout reports are active scheduled to send %s"
152
  msgstr ""
153
 
154
- #: app/behavior/report-free.php:129 app/behavior/report.php:224
155
- #: app/behavior/utils.php:917 free/utils.php:709
156
  msgid "daily"
157
  msgstr ""
158
 
159
- #: app/behavior/report-free.php:132 app/behavior/report.php:227
160
- #: app/behavior/utils.php:920 free/utils.php:712
161
  msgid "weekly"
162
  msgstr ""
163
 
164
- #: app/behavior/report-free.php:135 app/behavior/report.php:230
165
- #: app/behavior/utils.php:923 free/utils.php:715
166
  msgid "monthly"
167
  msgstr ""
168
 
169
- #: app/behavior/report.php:60 app/behavior/report.php:110
170
- #: app/behavior/report.php:147 app/module/audit/view/report.php:28
171
- #: app/module/ip-lockout/view/notification/report-free.php:40
172
- #: app/module/ip-lockout/view/notification/report.php:36
173
- #: app/module/scan/view/automation-free.php:30
174
- #: app/module/scan/view/automation.php:28
 
 
 
 
175
  msgid "Daily"
176
  msgstr ""
177
 
178
- #: app/behavior/report.php:63 app/behavior/report.php:113
179
- #: app/behavior/report.php:150 app/module/audit/view/report.php:30
180
- #: app/module/ip-lockout/view/notification/report.php:38
181
- #: app/module/scan/view/automation.php:30
182
  msgid "Weekly"
183
  msgstr ""
184
 
185
- #: app/behavior/report.php:66 app/behavior/report.php:116
186
- #: app/behavior/report.php:153 app/module/audit/view/report.php:32
187
- #: app/module/ip-lockout/view/notification/report.php:40
188
- #: app/module/scan/view/automation.php:32
189
  msgid "Monthly"
190
  msgstr ""
191
 
192
- #: app/behavior/report.php:74 app/behavior/report.php:124
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:177 app/behavior/utils.php:186
214
- #: app/module/audit/view/table.php:78 app/module/audit/view/table.php:136
215
- #: free/utils.php:179 free/utils.php:188
216
  msgid "Guest"
217
  msgstr ""
218
 
219
- #: app/behavior/utils.php:741
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
- #: app/behavior/utils.php:742
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
- #: app/behavior/utils.php:743 app/module/scan/behavior/scan.php:145
228
- #: app/module/scan/view/layouts/layout.php:70
229
- #: app/module/scan/view/setting-free.php:50 app/module/scan/view/setting.php:43
230
  #: app/view/settings.php:98
231
  msgid "Suspicious Code"
232
  msgstr ""
233
 
234
- #: app/behavior/utils.php:772 app/module/audit/controller/main.php:144
235
- #: app/module/ip-lockout/controller/main.php:93
236
  msgid "Never"
237
  msgstr ""
238
 
239
- #: app/behavior/utils.php:900 free/utils.php:692
240
  msgid "Please upgrade to 5.3 or later"
241
  msgstr ""
242
 
243
- #: app/controller/dashboard.php:115
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:411 app/controller/gdpr.php:16
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:445
267
  msgid "QUICK SETUP"
268
  msgstr ""
269
 
270
- #: app/controller/dashboard.php:445
 
271
  msgid "Skip"
272
  msgstr ""
273
 
274
- #: app/controller/dashboard.php:446
275
  msgid "Activating File Scanning..."
276
  msgstr ""
277
 
278
- #: app/controller/dashboard.php:447
279
  msgid "Activating Audit Module..."
280
  msgstr ""
281
 
282
- #: app/controller/dashboard.php:448
283
  msgid "Activating IP Lockouts Module..."
284
  msgstr ""
285
 
286
- #: app/controller/dashboard.php:449
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:132
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:18
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:28
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:32
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
- "<strong>Two-factor authentication is now active.</strong> To turn on this "
381
- "feature for your account, go to <a href='%s'>Your Profile</a> to complete "
382
- "setup and sync your account with the Authenticator app."
383
  msgstr ""
384
 
385
- #: app/module/advanced-tools/behavior/at-widget.php:52
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:54
392
- #: app/module/advanced-tools/behavior/at-widget.php:91
393
  msgid "Finish Setup"
394
  msgstr ""
395
 
396
- #: app/module/advanced-tools/behavior/at-widget.php:59
397
- msgid ""
398
- "Note: Each user on your website must individually enable two-factor "
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:79
420
  msgid "Change the location of WordPress’s default login area."
421
  msgstr ""
422
 
423
- #: app/module/advanced-tools/behavior/at-widget.php:89
 
424
  msgid ""
425
- "<strong>Masking is currently inactive.</strong> Choose your URL and save "
426
- "your settings to finish setup."
427
  msgstr ""
428
 
429
- #: app/module/advanced-tools/behavior/at-widget.php:96
430
- #: app/module/advanced-tools/view/mask-login/enabled.php:24
431
  msgid "Masking is currently active at <strong>%s</strong>"
432
  msgstr ""
433
 
434
- #: app/module/advanced-tools/component/mask-api.php:142
435
  msgid "The URL is invalid"
436
  msgstr ""
437
 
438
- #: app/module/advanced-tools/component/mask-api.php:147
439
- #: app/module/advanced-tools/component/mask-api.php:158
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:588
469
- #: app/module/advanced-tools/controller/main.php:632
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:534
 
495
  msgid "Edit Email"
496
  msgstr ""
497
 
498
- #: app/module/advanced-tools/controller/main.php:568
499
- #: app/module/advanced-tools/controller/mask-login.php:285
500
- #: app/module/audit/controller/main.php:197
501
- #: app/module/ip-lockout/controller/main.php:740
502
- #: app/module/scan/controller/main.php:306
503
  msgid "Your settings have been updated."
504
  msgstr ""
505
 
506
- #: app/module/advanced-tools/controller/main.php:594
507
- #: app/module/advanced-tools/controller/main.php:638
508
  msgid "%s variable was not found in mail body."
509
  msgstr ""
510
 
511
- #: app/module/advanced-tools/controller/main.php:606
512
  msgid "Email settings has been saved."
513
  msgstr ""
514
 
515
- #: app/module/advanced-tools/controller/main.php:655
516
  msgid "Test email has been sent to your email."
517
  msgstr ""
518
 
519
- #: app/module/advanced-tools/controller/main.php:659
520
  msgid "Test email failed."
521
  msgstr ""
522
 
523
- #: app/module/advanced-tools/controller/mask-login.php:232
524
  msgid "This feature is disabled"
525
  msgstr ""
526
 
527
- #: app/module/advanced-tools/controller/mask-login.php:278
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:10
532
  msgid ""
533
- "This email sends a temporary passcode when the user can't access their "
534
  "phone."
535
  msgstr ""
536
 
537
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:16
538
  #: app/view/settings.php:275
539
  msgid "Subject"
540
  msgstr ""
541
 
542
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:20
543
  msgid "Sender"
544
  msgstr ""
545
 
546
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:26
547
  msgid "Body"
548
  msgstr ""
549
 
550
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:32
551
- #: app/module/scan/view/setting.php:126 app/module/scan/view/setting.php:150
552
- #: app/view/settings.php:229
 
553
  msgid "Available variables"
554
  msgstr ""
555
 
556
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:39
557
  #: app/module/advanced-tools/view/login/disabled.php:37
558
- #: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
559
- #: app/module/scan/view/setting.php:158
 
 
560
  msgid "Cancel"
561
  msgstr ""
562
 
563
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:40
564
- #: app/module/scan/view/setting.php:139 app/module/scan/view/setting.php:159
565
  msgid "Save Template"
566
  msgstr ""
567
 
568
- #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:41
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:27
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:10
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:16
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:58
624
  msgid "3. Enter passcode"
625
  msgstr ""
626
 
627
- #: app/module/advanced-tools/view/login/disabled.php:60
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:66
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:14
676
- #: app/module/advanced-tools/view/main.php:14
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:27
683
- #: app/module/advanced-tools/view/main.php:27
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:35
691
- #: app/module/advanced-tools/view/main.php:35
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:41
698
- #: app/module/advanced-tools/view/main-free.php:117
699
- #: app/module/advanced-tools/view/main.php:41
700
- #: app/module/advanced-tools/view/main.php:117
701
  msgid "User Roles"
702
  msgstr ""
703
 
704
- #: app/module/advanced-tools/view/main-free.php:43
705
- #: app/module/advanced-tools/view/main.php:43
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:50
713
- #: app/module/advanced-tools/view/main.php:50
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:84
719
  msgid "Lost Phone"
720
  msgstr ""
721
 
722
- #: app/module/advanced-tools/view/main-free.php:86
723
- #: app/module/advanced-tools/view/main.php:86
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:96
730
- #: app/module/advanced-tools/view/main.php:96
731
  msgid "Enable lost phone option"
732
  msgstr ""
733
 
734
- #: app/module/advanced-tools/view/main-free.php:101
735
- #: app/module/advanced-tools/view/main.php:101
736
  msgid "Force Authentication"
737
  msgstr ""
738
 
739
- #: app/module/advanced-tools/view/main-free.php:103
740
- #: app/module/advanced-tools/view/main.php:103
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:113
747
- #: app/module/advanced-tools/view/main.php:113
748
  msgid "Force users to log in with two-factor authentication"
749
  msgstr ""
750
 
751
- #: app/module/advanced-tools/view/main-free.php:114
752
- #: app/module/advanced-tools/view/main.php:114
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:131
757
- #: app/module/advanced-tools/view/main.php:131
758
  msgid "Custom warning message"
759
  msgstr ""
760
 
761
- #: app/module/advanced-tools/view/main-free.php:135
762
- #: app/module/advanced-tools/view/main.php:135
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:143
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:147
784
- #: app/module/advanced-tools/view/main.php:144
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:155
791
- #: app/module/advanced-tools/view/main.php:155
792
  msgid "Enable custom graphics above login fields"
793
  msgstr ""
794
 
795
- #: app/module/advanced-tools/view/main-free.php:163
796
- #: app/module/advanced-tools/view/main.php:173
797
  msgid "Emails"
798
  msgstr ""
799
 
800
- #: app/module/advanced-tools/view/main-free.php:165
801
- #: app/module/advanced-tools/view/main.php:175
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:171
806
- #: app/module/advanced-tools/view/main.php:181
807
  msgid "Email"
808
  msgstr ""
809
 
810
- #: app/module/advanced-tools/view/main-free.php:173
811
- #: app/module/advanced-tools/view/main.php:183
812
  msgid "Lost phone one time password"
813
  msgstr ""
814
 
815
- #: app/module/advanced-tools/view/main-free.php:180
816
- #: app/module/advanced-tools/view/main.php:191
817
  msgid "App Download"
818
  msgstr ""
819
 
820
- #: app/module/advanced-tools/view/main-free.php:182
821
- #: app/module/advanced-tools/view/main.php:193
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:196
826
- #: app/module/advanced-tools/view/main.php:207
827
  msgid "Active Users"
828
  msgstr ""
829
 
830
- #: app/module/advanced-tools/view/main-free.php:198
831
- #: app/module/advanced-tools/view/main.php:209
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:202
838
- #: app/module/advanced-tools/view/main.php:213
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:207
843
- #: app/module/advanced-tools/view/main-free.php:214
844
- #: app/module/advanced-tools/view/main.php:218
845
- #: app/module/advanced-tools/view/main.php:225
846
- #: app/module/advanced-tools/view/mask-login/enabled.php:78
847
- #: app/module/advanced-tools/view/mask-login/enabled.php:82
848
- #: app/module/audit/view/settings.php:10
 
 
 
 
849
  msgid "Deactivate"
850
  msgstr ""
851
 
852
- #: app/module/advanced-tools/view/main-free.php:209
853
- #: app/module/advanced-tools/view/main.php:220
 
854
  msgid "Disable two-factor authentication on your website."
855
  msgstr ""
856
 
857
- #: app/module/advanced-tools/view/main-free.php:222
858
- #: app/module/advanced-tools/view/main.php:233
859
- msgid "SAVE SETTINGS"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
860
  msgstr ""
861
 
862
- #: app/module/advanced-tools/view/main.php:160
863
- msgid "For best results use a 168x168px JPG or PNG."
864
  msgstr ""
865
 
866
- #: app/module/advanced-tools/view/mask-login/disabled.php:10
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:9
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:19
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:35
889
  msgid ""
890
- "Choose a new slug where users of your website will now login instead of "
891
- "visiting /wp-login."
892
  msgstr ""
893
 
894
- #: app/module/advanced-tools/view/mask-login/enabled.php:39
895
  msgid ""
896
- "You can choose any slug you like using alphanumeric characters and '-'s "
897
- "only. For security reasons, less obvious slugs are recommended as they are "
898
- "harder for bots to guess."
899
  msgstr ""
900
 
901
- #: app/module/advanced-tools/view/mask-login/enabled.php:40
902
- msgid "New Login Slug"
903
  msgstr ""
904
 
905
- #: app/module/advanced-tools/view/mask-login/enabled.php:41
906
  msgid "I.e. dashboard"
907
  msgstr ""
908
 
909
- #: app/module/advanced-tools/view/mask-login/enabled.php:42
910
  msgid ""
911
- "Users will login at <strong>%s</strong>. Note: Registration and Password "
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:47
917
  msgid "Redirect traffic"
918
  msgstr ""
919
 
920
- #: app/module/advanced-tools/view/mask-login/enabled.php:49
921
  msgid ""
922
  "With this feature you can send visitors and bots who try to visit the "
923
- "default WordPress login URLs to a separate URL to avoid 404s."
924
  msgstr ""
925
 
926
- #: app/module/advanced-tools/view/mask-login/enabled.php:60
927
  msgid "Enable 404 redirection"
928
  msgstr ""
929
 
930
- #: app/module/advanced-tools/view/mask-login/enabled.php:64
931
  msgid "Redirection URL"
932
  msgstr ""
933
 
934
- #: app/module/advanced-tools/view/mask-login/enabled.php:70
935
  msgid ""
936
- "Visitors who visit the default login URLs will be redirected to "
937
- "<strong>%s</strong>"
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:25
946
- #: app/module/audit/behavior/audit.php:38 app/view/activator.php:35
947
  msgid ""
948
- "Track and log events when changes are made to your website, giving you full "
949
- "visibility over what's going on behind the scenes."
950
  msgstr ""
951
 
952
- #: app/module/audit/behavior/audit-free.php:30
953
  msgid ""
954
- "Audit logging is a pro feature included in a WPMU DEV membership along with "
955
- "100+ plugins,\n"
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:31
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:124
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:83
1508
- #: app/module/audit/view/settings.php:3
1509
- #: app/module/ip-lockout/view/layouts/layout.php:74
1510
- #: app/module/ip-lockout/view/layouts/layout.php:94
1511
  #: app/module/ip-lockout/view/settings.php:3
1512
- #: app/module/scan/view/layouts/layout.php:132
1513
- #: app/module/scan/view/layouts/layout.php:149
1514
- #: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
1515
- #: app/view/settings.php:6 free/main-activator.php:161 main-activator.php:119
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:50
1638
- #: app/module/audit/view/table.php:146
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:46
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:47
1649
- #: app/module/audit/view/table.php:107
1650
- #: app/module/ip-lockout/component/logs-table.php:274
1651
- #: app/module/ip-lockout/controller/main.php:149
1652
  msgid "Type"
1653
  msgstr ""
1654
 
1655
- #: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:48
1656
- #: app/module/audit/view/table.php:118
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:49
1662
- #: app/module/audit/view/table.php:129
1663
  msgid "User"
1664
  msgstr ""
1665
 
1666
- #: app/module/audit/controller/main.php:204
1667
- #: app/module/audit/view/layouts/layout.php:39
1668
  msgid "at %s"
1669
  msgstr ""
1670
 
1671
- #: app/module/audit/controller/main.php:206
1672
- #: app/module/audit/view/layouts/layout.php:42
1673
  msgid "%s at %s"
1674
  msgstr ""
1675
 
1676
- #: app/module/audit/controller/main.php:353
1677
  msgid "Hi {USER_NAME},"
1678
  msgstr ""
1679
 
1680
- #: app/module/audit/controller/main.php:355
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:367
1687
  msgid "Event Type"
1688
  msgstr ""
1689
 
1690
- #: app/module/audit/controller/main.php:371
1691
  msgid "Action Summaries"
1692
  msgstr ""
1693
 
1694
- #: app/module/audit/controller/main.php:412
1695
  msgid "You can view the full audit report for your site here."
1696
  msgstr ""
1697
 
1698
- #: app/module/audit/controller/main.php:445
1699
  msgid "There were no events logged for %s"
1700
  msgstr ""
1701
 
1702
- #: app/module/audit/controller/main.php:450
1703
- #: app/module/audit/controller/main.php:476
1704
  msgid "Here’s what’s been happening at %s"
1705
  msgstr ""
1706
 
1707
- #: app/module/audit/controller/main.php:569 app/view/settings.php:209
1708
  msgid "Type a user’s name"
1709
  msgstr ""
1710
 
1711
- #: app/module/audit/controller/main.php:570
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:9 free/main-activator.php:122
1790
- #: free/main-activator.php:167
1791
- msgid "Upgrade"
1792
  msgstr ""
1793
 
1794
- #: app/module/audit/view/free.php:14
1795
  msgid ""
1796
  "Track and log each and every event when changes are made to your website "
1797
- "and get details reports on everything from what your users are doing to "
1798
- "hacking attempts. This is a pro feature that requires an active WPMU DEV "
1799
- "membership. Try it free today!"
1800
  msgstr ""
1801
 
1802
- #: app/module/audit/view/layouts/layout.php:20
1803
  msgid "Events logged in the past 7 days"
1804
  msgstr ""
1805
 
1806
- #: app/module/audit/view/layouts/layout.php:28
1807
- #: app/module/audit/view/layouts/layout.php:75
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/main.php:3 app/module/audit/view/new.php:3
1818
- msgid "EVENT LOGS"
 
1819
  msgstr ""
1820
 
1821
- #: app/module/audit/view/main.php:5
1822
- #: app/module/ip-lockout/view/logging/enabled.php:4
1823
  msgid "Export CSV"
1824
  msgstr ""
1825
 
1826
- #: app/module/audit/view/main.php:8
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:21 app/module/audit/view/main.php:27
1833
- #: app/module/audit/view/main.php:78
1834
- #: app/module/ip-lockout/component/logs-table.php:340
1835
- msgid "Filter"
1836
  msgstr ""
1837
 
1838
- #: app/module/audit/view/main.php:36
1839
- msgid "192.168.1.1"
1840
  msgstr ""
1841
 
1842
- #: app/module/audit/view/main.php:58
1843
- #: app/module/ip-lockout/component/logs-table.php:189
1844
- #: app/module/scan/component/result-table.php:207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1845
  msgid "Apply"
1846
  msgstr ""
1847
 
1848
- #: app/module/audit/view/main.php:65
1849
- msgid "Loading events..."
1850
  msgstr ""
1851
 
1852
- #: app/module/audit/view/new.php:8
 
 
 
 
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:3
1940
  #: app/module/ip-lockout/view/notification/enabled.php:3
1941
- msgid "NOTIFICATIONS"
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:21
1955
- msgid "Run regular reports"
 
 
1956
  msgstr ""
1957
 
1958
- #: app/module/audit/view/report.php:24
1959
- #: app/module/scan/view/automation-free.php:27
1960
- #: app/module/scan/view/automation.php:24
1961
- msgid "Schedule"
1962
  msgstr ""
1963
 
1964
- #: app/module/audit/view/report.php:25
1965
- #: app/module/ip-lockout/view/notification/report-free.php:38
1966
- #: app/module/ip-lockout/view/notification/report.php:33
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:35
1973
- #: app/module/ip-lockout/view/notification/report-free.php:43
1974
- #: app/module/ip-lockout/view/notification/report.php:43
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:43
1981
- #: app/module/ip-lockout/view/notification/report-free.php:50
1982
- #: app/module/ip-lockout/view/notification/report.php:51
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/report.php:55 app/view/settings.php:196
1989
- msgid "Email Recipients"
1990
- msgstr ""
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/settings.php:17
2011
- msgid "Deactivate Audit Logging"
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:17
2033
  msgid "Date"
2034
  msgstr ""
2035
 
2036
- #: app/module/audit/view/table.php:29
2037
  msgid " ago"
2038
  msgstr ""
2039
 
2040
- #: app/module/audit/view/table.php:41
2041
- #: app/module/ip-lockout/component/logs-table.php:264
2042
  msgid "Description"
2043
  msgstr ""
2044
 
2045
- #: app/module/audit/view/table.php:158
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:8
2057
- msgid "There have been <strong>%d events</strong> logged in the past 24 hours."
2058
  msgstr ""
2059
 
2060
- #: app/module/audit/view/widget.php:13
2061
  msgid "Last event logged"
2062
  msgstr ""
2063
 
2064
- #: app/module/audit/view/widget.php:19
2065
  msgid "Events logged this month"
2066
  msgstr ""
2067
 
2068
- #: app/module/audit/view/widget.php:27
2069
- msgid "VIEW LOGS"
2070
  msgstr ""
2071
 
2072
- #: app/module/audit/view/widget.php:32
2073
  msgid "Audit log reports are enabled"
2074
  msgstr ""
2075
 
2076
- #: app/module/audit/view/widget.php:34
2077
  msgid "Audit log reports are disabled"
2078
  msgstr ""
2079
 
2080
- #: app/module/hardener/behavior/widget.php:19
2081
  #: app/module/hardener/controller/main.php:146
2082
- #: app/module/hardener/view/layouts/layout.php:3
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 website’s\n"
2089
- " defense against hackers and bots."
2090
  msgstr ""
2091
 
2092
- #: app/module/hardener/behavior/widget.php:57
2093
- #: app/module/hardener/view/issues.php:22
2094
- msgid "You have actioned all available security tweaks. Great work!"
2095
  msgstr ""
2096
 
2097
- #: app/module/hardener/behavior/widget.php:63
2098
- msgid "VIEW ALL"
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/protect-information-service.php:46
2135
- #: app/module/hardener/component/protect-information-service.php:69
 
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:111
2140
- #: app/module/hardener/component/servers/apache-service.php:115
2141
- #: app/module/hardener/component/servers/apache-service.php:169
2142
- #: app/module/hardener/component/servers/apache-service.php:173
2143
- #: app/module/hardener/component/servers/apache-service.php:220
2144
- #: app/module/hardener/component/servers/apache-service.php:251
2145
- #: app/module/hardener/component/servers/apache-service.php:285
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:33
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:8
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:38
2225
  msgid "Manage Login Duration"
2226
  msgstr ""
2227
 
2228
- #: app/module/hardener/component/login-duration.php:94
2229
  msgid "Duration can only be a number and greater than 0"
2230
  msgstr ""
2231
 
2232
- #: app/module/hardener/component/login-duration.php:195
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:86
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:189
2305
- #: app/module/scan/behavior/pro/content-result.php:111
2306
- #: app/module/scan/behavior/pro/vuln-result.php:156
2307
- #: app/module/scan/component/result-table.php:199
 
 
 
2308
  msgid "Ignore"
2309
  msgstr ""
2310
 
2311
- #: app/module/hardener/rule.php:136
2312
- #: app/module/scan/component/result-table.php:204
2313
  msgid "Restore"
2314
  msgstr ""
2315
 
2316
- #: app/module/hardener/view/ignore.php:3
2317
- msgid "IGNORED"
 
 
 
 
 
2318
  msgstr ""
2319
 
2320
- #: app/module/hardener/view/ignore.php:15
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:27
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:3
2334
- #: app/module/hardener/view/layouts/layout.php:61
2335
- #: app/module/hardener/view/layouts/layout.php:98
2336
- #: app/module/scan/view/issues.php:4 app/module/scan/view/layouts/layout.php:96
2337
- #: app/module/scan/view/layouts/layout.php:145
2338
  msgid "Issues"
2339
  msgstr ""
2340
 
2341
- #: app/module/hardener/view/issues.php:12
2342
  msgid ""
2343
- "There are a number of security tweaks you can make to your website to "
2344
- "strengthen it against harmful hackers and bots that try to break in. We "
2345
- "recommend you action as many tweaks as possible."
2346
  msgstr ""
2347
 
2348
- #: app/module/hardener/view/layouts/layout.php:20 app/view/dashboard.php:16
2349
- #: app/view/dashboard.php:32
2350
- msgid "You have no outstanding security issues."
2351
  msgstr ""
2352
 
2353
- #: app/module/hardener/view/layouts/layout.php:28 app/view/dashboard.php:46
2354
- msgid "Security tweaks actioned"
2355
  msgstr ""
2356
 
2357
- #: app/module/hardener/view/layouts/layout.php:35
2358
- msgid "PHP Version"
2359
  msgstr ""
2360
 
2361
- #: app/module/hardener/view/layouts/layout.php:41
2362
- msgid "WordPress Version"
 
2363
  msgstr ""
2364
 
2365
- #: app/module/hardener/view/layouts/layout.php:65
2366
- msgid "You have %d security tweak(s) needing attention."
 
2367
  msgstr ""
2368
 
2369
- #: app/module/hardener/view/layouts/layout.php:74
2370
- #: app/module/hardener/view/layouts/layout.php:100
 
2371
  msgid "Resolved"
2372
  msgstr ""
2373
 
2374
- #: app/module/hardener/view/layouts/layout.php:81
2375
- #: app/module/hardener/view/layouts/layout.php:102
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/resolved.php:3
2383
- msgid "RESOLVED"
2384
  msgstr ""
2385
 
2386
- #: app/module/hardener/view/resolved.php:10
2387
- msgid "Excellent work. The following vulnerabilities have been fixed."
 
 
 
 
 
 
 
 
 
 
 
2388
  msgstr ""
2389
 
2390
- #: app/module/hardener/view/rules/change-admin.php:11
2391
- #: app/module/hardener/view/rules/db-prefix.php:11
2392
- #: app/module/hardener/view/rules/disable-file-editor.php:11
2393
- #: app/module/hardener/view/rules/disable-trackback.php:11
2394
- #: app/module/hardener/view/rules/disable-xml-rpc.php:11
2395
- #: app/module/hardener/view/rules/hide-error.php:11
2396
- #: app/module/hardener/view/rules/login-duration.php:11
2397
- #: app/module/hardener/view/rules/php-version.php:11
2398
- #: app/module/hardener/view/rules/prevent-php-executed.php:11
2399
- #: app/module/hardener/view/rules/protect-information.php:11
2400
- #: app/module/hardener/view/rules/security-key.php:11
2401
- #: app/module/hardener/view/rules/wp-version.php:11
2402
- msgid "Overview"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2403
  msgstr ""
2404
 
2405
- #: app/module/hardener/view/rules/change-admin.php:13
2406
  msgid ""
2407
- "If you're using the default admin login name, you're giving away an "
2408
- "important piece of the puzzle hackers\n"
2409
- " need to hijack your website. Having a default admin user "
2410
- "account is bad practice, but one that's easily\n"
2411
- " fixed. Ensure you backup your database before choosing a new "
2412
- "username."
2413
  msgstr ""
2414
 
2415
- #: app/module/hardener/view/rules/change-admin.php:18
2416
- #: app/module/hardener/view/rules/db-prefix.php:16
2417
- #: app/module/hardener/view/rules/disable-file-editor.php:16
2418
- #: app/module/hardener/view/rules/disable-trackback.php:16
2419
- #: app/module/hardener/view/rules/disable-xml-rpc.php:18
2420
- #: app/module/hardener/view/rules/hide-error.php:16
2421
- #: app/module/hardener/view/rules/login-duration.php:16
2422
- #: app/module/hardener/view/rules/php-version.php:34
2423
- #: app/module/hardener/view/rules/prevent-php-executed.php:16
2424
- #: app/module/hardener/view/rules/protect-information.php:16
2425
- #: app/module/hardener/view/rules/security-key.php:36
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:22
2431
- msgid "You don’t have a user with username admin."
 
 
2432
  msgstr ""
2433
 
2434
- #: app/module/hardener/view/rules/change-admin.php:25
2435
- msgid "Please change the username from admin to something unique."
2436
  msgstr ""
2437
 
2438
- #: app/module/hardener/view/rules/change-admin.php:30
2439
- msgid "Enter new username"
2440
  msgstr ""
2441
 
2442
- #: app/module/hardener/view/rules/change-admin.php:34
2443
- #: app/module/hardener/view/rules/db-prefix.php:37
2444
- #: app/module/hardener/view/rules/login-duration.php:44
2445
- #: app/module/hardener/view/rules/security-key.php:31
2446
- #: app/module/scan/behavior/pro/vuln-result.php:162
2447
- #: app/module/scan/behavior/pro/vuln-result.php:166
2448
- msgid "Update"
2449
  msgstr ""
2450
 
2451
- #: app/module/hardener/view/rules/db-prefix.php:13
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. It’s good practice to come up with a unique "
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:22
2462
- msgid "Your prefix is <strong>%s</strong> and is unique."
 
 
 
 
 
 
2463
  msgstr ""
2464
 
2465
- #: app/module/hardener/view/rules/db-prefix.php:26
2466
  msgid ""
2467
- "We recommend using a different prefix to protect your database. Ensure you "
2468
- "backup your database before changing the prefix."
2469
  msgstr ""
2470
 
2471
- #: app/module/hardener/view/rules/db-prefix.php:33
2472
- msgid "Enter new database prefix"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2473
  msgstr ""
2474
 
2475
- #: app/module/hardener/view/rules/disable-file-editor.php:13
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 and theme "
2479
- "files. We recommend disabling the editor."
2480
  msgstr ""
2481
 
2482
- #: app/module/hardener/view/rules/disable-file-editor.php:20
2483
- msgid "The file editor is disabled."
 
2484
  msgstr ""
2485
 
2486
- #: app/module/hardener/view/rules/disable-file-editor.php:26
2487
- #: app/module/hardener/view/rules/disable-trackback.php:26
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:30
2496
  msgid ""
2497
- "We will disable access to the file editor for you. You can enable it again "
2498
- "anytime."
2499
  msgstr ""
2500
 
2501
- #: app/module/hardener/view/rules/disable-file-editor.php:37
2502
- msgid "Disable File Editor"
 
 
 
 
 
 
 
2503
  msgstr ""
2504
 
2505
- #: app/module/hardener/view/rules/disable-trackback.php:13
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:20
2515
- msgid "Trackbacks and pingbacks are turned off."
2516
  msgstr ""
2517
 
2518
- #: app/module/hardener/view/rules/disable-trackback.php:30
2519
- msgid "We will turn off trackbacks and pingbacks in your WordPress settings area."
2520
  msgstr ""
2521
 
2522
- #: app/module/hardener/view/rules/disable-trackback.php:34
2523
- msgid "Disable pingbacks on all existing posts in all sites"
 
 
2524
  msgstr ""
2525
 
2526
- #: app/module/hardener/view/rules/disable-trackback.php:36
2527
- msgid "Disable pingbacks on all existing posts"
 
 
 
2528
  msgstr ""
2529
 
2530
- #: app/module/hardener/view/rules/disable-trackback.php:50
2531
  msgid "Disable Pingbacks"
2532
  msgstr ""
2533
 
2534
- #: app/module/hardener/view/rules/disable-xml-rpc.php:8
2535
- #: app/module/hardener/view/rules/disable-xml-rpc.php:47
2536
- msgid "Disable XML-RPC"
2537
  msgstr ""
2538
 
2539
- #: app/module/hardener/view/rules/disable-xml-rpc.php:13
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.<br/><br/>\n"
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:21
2553
  msgid ""
2554
- "Automatically disable this feature below. You can re-enable it at any time "
2555
- "if you need to."
 
 
2556
  msgstr ""
2557
 
2558
- #: app/module/hardener/view/rules/disable-xml-rpc.php:27
2559
  msgid "XML-RPC is disabled."
2560
  msgstr ""
2561
 
2562
- #: app/module/hardener/view/rules/hide-error.php:13
 
 
 
 
2563
  msgid ""
2564
- "In addition to hiding error logs, developers often use the built-in "
2565
- "front-end PHP and scripts error debugging feature, which displays code "
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/hide-error.php:20
2571
- msgid "All PHP errors are hidden."
 
 
 
2572
  msgstr ""
2573
 
2574
- #: app/module/hardener/view/rules/hide-error.php:26
2575
- msgid "We will add the necessary code to prevent these errors displaying."
2576
  msgstr ""
2577
 
2578
- #: app/module/hardener/view/rules/hide-error.php:33
2579
- msgid "Disable error debugging"
2580
  msgstr ""
2581
 
2582
- #: app/module/hardener/view/rules/hide-error.php:40
 
 
 
 
 
 
 
 
 
 
 
 
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/login-duration.php:13
 
 
 
 
2590
  msgid ""
2591
- "By default, users who select the 'remember me' option stay logged in for 14 "
2592
- "days"
 
2593
  msgstr ""
2594
 
2595
- #: app/module/hardener/view/rules/login-duration.php:35
2596
- msgid "Please change the number of days a user can stay logged in"
 
 
 
2597
  msgstr ""
2598
 
2599
- #: app/module/hardener/view/rules/login-duration.php:40
2600
- msgid "Enter number of days"
2601
  msgstr ""
2602
 
2603
- #: app/module/hardener/view/rules/php-version.php:14
 
2604
  msgid ""
2605
- "PHP versions older than 5.6 are no longer supported. For security and "
2606
- "stability we strongly recommend you upgrade your PHP version to version 5.6 "
2607
- "or newer as soon as possible."
2608
  msgstr ""
2609
 
2610
- #: app/module/hardener/view/rules/php-version.php:17
2611
- msgid "More information: %s"
 
2612
  msgstr ""
2613
 
2614
- #: app/module/hardener/view/rules/php-version.php:22
2615
- #: app/module/hardener/view/rules/wp-version.php:17
2616
- msgid "Current version"
2617
  msgstr ""
2618
 
2619
- #: app/module/hardener/view/rules/php-version.php:29
2620
- #: app/module/hardener/view/rules/wp-version.php:24
2621
- msgid "Recommend Version"
 
2622
  msgstr ""
2623
 
2624
- #: app/module/hardener/view/rules/php-version.php:38
2625
- msgid "Your PHP version is okay."
 
2626
  msgstr ""
2627
 
2628
- #: app/module/hardener/view/rules/php-version.php:40
 
2629
  msgid ""
2630
- "Your PHP version can be upgraded by your hosting provider or System "
2631
- "Administrator. Please contact them for assistance."
2632
  msgstr ""
2633
 
2634
- #: app/module/hardener/view/rules/prevent-php-executed.php:13
 
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 cant 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 whats 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 ""