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

Version Description

  • New: Ability to edit default two-factor authentication email notifications
  • New: Added Privacy Policy in privacy guideline page
  • Improvements for lockout logs interface
  • Improvement: Smarter report default time.
  • Fix: Defender auto redirect issue when bulk activating plugins
  • Fix: saving 404 redirect URL issue
  • Fix: Some layouts are shifted on mobile devices
  • Other minor enhancements and fixes
Download this release

Release Info

Developer hoang1213
Plugin Icon 128x128 Defender Security – Malware Scanner, Login Security & Firewall
Version 1.9
Comparing to
See all releases

Code changes from version 1.8 to 1.9

app/behavior/utils.php CHANGED
@@ -156,7 +156,7 @@ class Utils extends Behavior {
156
  if ( strlen( $timestring ) == 0 ) {
157
  return null;
158
  }
159
- if ( ! is_int( $timestring ) ) {
160
  $timestring = strtotime( $timestring );
161
  }
162
  $format = get_option( 'date_format' ) . ' ' . get_option( 'time_format' );
@@ -460,6 +460,9 @@ class Utils extends Behavior {
460
  * @return bool
461
  */
462
  function isCloudflare() {
 
 
 
463
  if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
464
  $ip = $_SERVER['HTTP_CLIENT_IP'];
465
  } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
156
  if ( strlen( $timestring ) == 0 ) {
157
  return null;
158
  }
159
+ if ( ! filter_var( $timestring, FILTER_VALIDATE_INT ) ) {
160
  $timestring = strtotime( $timestring );
161
  }
162
  $format = get_option( 'date_format' ) . ' ' . get_option( 'time_format' );
460
  * @return bool
461
  */
462
  function isCloudflare() {
463
+ if ( php_sapi_name() == 'cli' ) {
464
+ return false;
465
+ }
466
  if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
467
  $ip = $_SERVER['HTTP_CLIENT_IP'];
468
  } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
app/controller/gdpr.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author: Hoang Ngo
4
+ */
5
+
6
+ namespace WP_Defender\Controller;
7
+
8
+ use WP_Defender\Controller;
9
+
10
+ class GDPR extends Controller {
11
+ public function __construct() {
12
+ $this->add_filter( 'wp_get_default_privacy_policy_content', 'addPolicy' );
13
+ }
14
+
15
+ public function addPolicy( $content ) {
16
+ $pluginName = wp_defender()->isFree ? __( "Defender", "defender-security" ) : __( "Defender Pro", "defender-security" );
17
+ $content .= '<h3>' . sprintf( __( 'Plugin: %s', "defender-security" ), $pluginName ) . '</h3>';
18
+ $content .= '<p><strong>' . __( "Third parties", "defender-security" ) . '</strong></p>';
19
+ $content .= '<p>' . __( "This site may be using WPMU DEV third-party cloud storage to store backups of its audit logs where personal information is collected.", "defender-security" ) . '</p>';
20
+ $content .= '<p><strong>' . __( "Additional data", "defender-security" ) . '</strong></p>';
21
+ $content .= '<p>' . __( "This site creates and stores an activity log that capture the IP address, username, email address and tracks user activity (like when a user makes a comment). Information will be stored locally for 30 days and remotely for 1 year. Information on remote logs cannot be cleared for security purposes.", "defender-security" ) . '</p>';
22
+
23
+ return $content;
24
+ }
25
+ }
app/module/advanced-tools/component/mask-api.php CHANGED
@@ -74,26 +74,35 @@ class Mask_Api extends Component {
74
  *
75
  * @return bool|\WP_Error
76
  */
77
- public static function isValidMaskSlug( $slug = null ) {
78
  if ( empty( $slug ) ) {
79
  return true;
80
  }
81
- if ( preg_match( '|[^a-z0-9_]|i', $slug ) ) {
82
- return new \WP_Error( Error_Code::VALIDATE, __( "The URL is invalid", "defender-security" ) );
 
 
83
  }
84
- if ( in_array( $slug, array( 'admin', 'backend', 'wp-login', 'wp-login.php' ) ) ) {
85
- return new \WP_Error( Error_Code::VALIDATE, __( "A page already exists at this URL, please pick a unique page for your new login area.", "defender-security" ) );
 
86
  }
 
 
 
 
 
87
 
88
- //check if any URL appear
89
- $post = get_posts( array(
90
- 'name' => $slug,
91
- 'post_type' => array( 'post', 'page' ),
92
- 'post_status' => 'publish',
93
- 'numberposts' => 1
94
- ) );
95
- if ( $post ) {
96
- return new \WP_Error( Error_Code::VALIDATE, __( "A page already exists at this URL, please pick a unique page for your new login area.", "defender-security" ) );
 
97
  }
98
 
99
  return true;
74
  *
75
  * @return bool|\WP_Error
76
  */
77
+ public static function isValidMaskSlug( $slug = null, $context = 'login' ) {
78
  if ( empty( $slug ) ) {
79
  return true;
80
  }
81
+
82
+ if ( $context == 'redirect' && $slug == '/' ) {
83
+ //redirect to home
84
+ return true;
85
  }
86
+ //validate slug, only allow a-z,0-9 and -
87
+ if ( preg_match( '|[^a-z0-9-]|i', $slug ) ) {
88
+ return new \WP_Error( Error_Code::VALIDATE, __( "The URL is invalid", "defender-security" ) );
89
  }
90
+ //if context is login, we will check for exists page
91
+ if ( $context == 'login' ) {
92
+ if ( in_array( $slug, array( 'admin', 'backend', 'wp-login', 'wp-login.php' ) ) ) {
93
+ return new \WP_Error( Error_Code::VALIDATE, __( "A page already exists at this URL, please pick a unique page for your new login area.", "defender-security" ) );
94
+ }
95
 
96
+ //check if any URL appear
97
+ $post = get_posts( array(
98
+ 'name' => $slug,
99
+ 'post_type' => array( 'post', 'page' ),
100
+ 'post_status' => 'publish',
101
+ 'numberposts' => 1
102
+ ) );
103
+ if ( $post ) {
104
+ return new \WP_Error( Error_Code::VALIDATE, __( "A page already exists at this URL, please pick a unique page for your new login area.", "defender-security" ) );
105
+ }
106
  }
107
 
108
  return true;
app/module/advanced-tools/controller/main.php CHANGED
@@ -37,6 +37,8 @@ class Main extends Controller {
37
  $this->add_action( 'defender_enqueue_assets', 'scripts', 11 );
38
  }
39
  $this->add_ajax_action( 'saveAdvancedSettings', 'saveSettings' );
 
 
40
  $this->add_action( 'update_option_jetpack_active_modules', 'listenForJetpackOption', 10, 3 );
41
  $setting = Auth_Settings::instance();
42
  if ( $setting->enabled ) {
@@ -232,8 +234,24 @@ class Main extends Controller {
232
  $code = Auth_API::createBackupCode( $user->ID );
233
  //send email
234
  $backupEmail = Auth_API::getBackupEmail( $user->ID );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  //send
236
- wp_mail( $backupEmail, 'Your OTP code', $code );
 
237
  wp_send_json_success( array(
238
  'message' => __( "Your code has been sent to your email.", "defender-security" )
239
  ) );
@@ -505,6 +523,10 @@ class Main extends Controller {
505
  wp_enqueue_script( 'defender' );
506
  wp_enqueue_style( 'defender' );
507
  wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
 
 
 
 
508
  }
509
  }
510
 
@@ -535,4 +557,110 @@ class Main extends Controller {
535
  Utils::instance()->submitStatsToDev();
536
  wp_send_json_success( $res );
537
  }
538
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  $this->add_action( 'defender_enqueue_assets', 'scripts', 11 );
38
  }
39
  $this->add_ajax_action( 'saveAdvancedSettings', 'saveSettings' );
40
+ $this->add_ajax_action( 'saveTwoFactorOPTEmail', 'saveTwoFactorOPTEmail' );
41
+ $this->add_ajax_action( 'testTwoFactorOPTEmail', 'testTwoFactorOPTEmail' );
42
  $this->add_action( 'update_option_jetpack_active_modules', 'listenForJetpackOption', 10, 3 );
43
  $setting = Auth_Settings::instance();
44
  if ( $setting->enabled ) {
234
  $code = Auth_API::createBackupCode( $user->ID );
235
  //send email
236
  $backupEmail = Auth_API::getBackupEmail( $user->ID );
237
+
238
+ $settings = Auth_Settings::instance();
239
+ $subject = ! empty( $settings->email_subject ) ? esc_attr( $settings->email_subject ) : __( 'Your OTP code', "defender-security" );
240
+ $sender = ! empty( $settings->email_sender ) ? esc_attr( $settings->email_sender ) : false;
241
+ $body = ! empty( $settings->email_body ) ? $settings->email_body : $settings->two_factor_opt_email_default_body();
242
+ $body = $this->replace_email_vars( $body, array(
243
+ 'display_name' => $user->display_name,
244
+ 'passcode' => $code,
245
+ ) );
246
+ $headers = array( 'Content-Type: text/html; charset=UTF-8' );
247
+ if ( $sender ) {
248
+ $from_email = get_bloginfo( 'admin_email' );
249
+ $headers[] = sprintf( 'From: %s <%s>', $sender, $from_email );
250
+ }
251
+
252
  //send
253
+ wp_mail( $backupEmail, $subject, $body, $headers );
254
+
255
  wp_send_json_success( array(
256
  'message' => __( "Your code has been sent to your email.", "defender-security" )
257
  ) );
523
  wp_enqueue_script( 'defender' );
524
  wp_enqueue_style( 'defender' );
525
  wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
526
+ $data = array(
527
+ 'edit_email_title' => __( 'Edit Email', "defender-security" ),
528
+ );
529
+ wp_localize_script( 'adtools', 'defender_adtools', $data );
530
  }
531
  }
532
 
557
  Utils::instance()->submitStatsToDev();
558
  wp_send_json_success( $res );
559
  }
560
+
561
+ /**
562
+ * Saving email settings in admin area
563
+ */
564
+ public function saveTwoFactorOPTEmail() {
565
+ if ( ! $this->checkPermission() ) {
566
+ return;
567
+ }
568
+
569
+ if ( ! wp_verify_nonce( HTTP_Helper::retrieve_post( '_wpnonce' ), 'twoFactorOPTEmail' ) ) {
570
+ return;
571
+ }
572
+
573
+ $data = $_POST;
574
+ $subject = ! empty( $data['subject'] ) ? esc_attr( $data['subject'] ) : __( 'Your OTP code', "defender-security" );
575
+ $sender = ! empty( $data['sender'] ) ? esc_attr( $data['sender'] ) : false;
576
+ $body = ! empty( $data['body'] ) ? $data['body'] : false;
577
+
578
+ if ( false === strpos( $body, '{{passcode}}' ) ) {
579
+ wp_send_json_error( array(
580
+ 'message' => sprintf( __( '%s variable was not found in mail body.', "defender-security" ), '{{passcode}}' ),
581
+ ) );
582
+ }
583
+ $email_settings['email_subject'] = $subject;
584
+ $email_settings['email_sender'] = $sender;
585
+ $email_settings['email_body'] = $body;
586
+
587
+ $setting = Auth_Settings::instance();
588
+ $setting->import( $email_settings );
589
+ $setting->save();
590
+
591
+ $res = array(
592
+ 'message' => __( 'Email settings has been saved.', "defender-security" )
593
+ );
594
+ $res['reload'] = 1;
595
+ Utils::instance()->submitStatsToDev();
596
+ wp_send_json_success( $res );
597
+ }
598
+
599
+ /**
600
+ * Test OPT email.
601
+ */
602
+ public function testTwoFactorOPTEmail() {
603
+ if ( ! $this->checkPermission() ) {
604
+ return;
605
+ }
606
+
607
+ if ( ! wp_verify_nonce( HTTP_Helper::retrieve_post( '_wpnonce' ), 'twoFactorOPTEmail' ) ) {
608
+ return;
609
+ }
610
+
611
+ $user = wp_get_current_user();
612
+ //create a backup code for this user
613
+ $code = Auth_API::createBackupCode( $user->ID );
614
+ //send email
615
+ $backup_email = Auth_API::getBackupEmail( $user->ID );
616
+
617
+ $data = $_POST;
618
+ $subject = ! empty( $data['subject'] ) ? esc_attr( $data['subject'] ) : __( 'Your OTP code', "defender-security" );
619
+ $sender = ! empty( $data['sender'] ) ? esc_attr( $data['sender'] ) : false;
620
+ $body = ! empty( $data['body'] ) ? $data['body'] : false;
621
+
622
+ if ( false === strpos( $body, '{{passcode}}' ) ) {
623
+ wp_send_json_error( array(
624
+ 'message' => sprintf( __( '%s variable was not found in mail body.', "defender-security" ), '{{passcode}}' ),
625
+ ) );
626
+ }
627
+ $body = $this->replace_email_vars( $body, array(
628
+ 'display_name' => $user->display_name,
629
+ 'passcode' => $code,
630
+ ) );
631
+ $headers = array( 'Content-Type: text/html; charset=UTF-8' );
632
+ if ( $sender ) {
633
+ $from_email = get_bloginfo( 'admin_email' );
634
+ $headers[] = sprintf( 'From: %s <%s>', $sender, $from_email );
635
+ }
636
+
637
+ //send
638
+ $send_mail = wp_mail( $backup_email, $subject, $body, $headers );
639
+ if ( $send_mail ) {
640
+ wp_send_json_success( array(
641
+ 'message' => __( 'Test email has been sent to your email.', "defender-security" ),
642
+ ) );
643
+ } else {
644
+ wp_send_json_error( array(
645
+ 'message' => __( 'Test email failed.', "defender-security" ),
646
+ ) );
647
+ }
648
+ }
649
+
650
+ /**
651
+ * Replace email variables.
652
+ * @param string $content Content to replace.
653
+ * @param array $values Variables values.
654
+ * @return string
655
+ */
656
+ public function replace_email_vars( $content, $values ) {
657
+ $content = apply_filters( 'the_content', $content );
658
+ $tags = array( 'display_name', 'passcode' );
659
+ foreach ( $tags as $key => $tag ) {
660
+ $upper_tag = strtoupper( $tag );
661
+ $content = str_replace( '{{' . $upper_tag . '}}', $values[ $tag ], $content );
662
+ $content = str_replace( '{{' . $tag . '}}', $values[ $tag ], $content );
663
+ }
664
+ return $content;
665
+ }
666
+ }
app/module/advanced-tools/controller/mask-login.php CHANGED
@@ -166,19 +166,19 @@ class Mask_Login extends Controller {
166
  && is_wp_error( $error = Mask_Api::isValidMaskSlug( $data['maskUrl'] ) ) ) {
167
  //validate
168
  $res = array(
169
- 'message' => __( "The Login URL is invalid.", "defender-security" )
170
  );
171
  wp_send_json_error( $res );
172
  }
173
  if ( isset( $data['redirectTrafficUrl'] ) && $setting->redirectTrafficUrl != $data['redirectTrafficUrl']
174
- && is_wp_error( $error = Mask_Api::isValidMaskSlug( $data['redirectTrafficUrl'] ) ) ) {
175
  //validate
176
  $res = array(
177
- 'message' => __( "The Redirection URL is invalid.", "defender-security" )
178
  );
179
  wp_send_json_error( $res );
180
  }
181
- if ( $data['redirectTrafficUrl'] == $data['maskUrl'] && strlen( $data['maskUrl'] ) > 0 ) {
182
  $res = array(
183
  'message' => __( "Login and 404 redirect URLs can't be the same. Please use different URLs.", "defender-security" )
184
  );
@@ -206,4 +206,4 @@ class Mask_Login extends Controller {
206
  wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
207
  }
208
  }
209
- }
166
  && is_wp_error( $error = Mask_Api::isValidMaskSlug( $data['maskUrl'] ) ) ) {
167
  //validate
168
  $res = array(
169
+ 'message' => $error->get_error_message()
170
  );
171
  wp_send_json_error( $res );
172
  }
173
  if ( isset( $data['redirectTrafficUrl'] ) && $setting->redirectTrafficUrl != $data['redirectTrafficUrl']
174
+ && is_wp_error( $error = Mask_Api::isValidMaskSlug( $data['redirectTrafficUrl'], 'redirect' ) ) ) {
175
  //validate
176
  $res = array(
177
+ 'message' => $error->get_error_message()
178
  );
179
  wp_send_json_error( $res );
180
  }
181
+ if ( ! empty( $data['redirectTrafficUrl'] ) && ! empty( $data['maskUrl'] ) && $data['redirectTrafficUrl'] === $data['maskUrl'] && strlen( $data['maskUrl'] ) > 0 ) {
182
  $res = array(
183
  'message' => __( "Login and 404 redirect URLs can't be the same. Please use different URLs.", "defender-security" )
184
  );
206
  wp_enqueue_script( 'adtools', wp_defender()->getPluginUrl() . 'app/module/advanced-tools/js/scripts.js' );
207
  }
208
  }
209
+ }
app/module/advanced-tools/js/scripts.js CHANGED
@@ -43,7 +43,60 @@ jQuery(function ($) {
43
  }
44
  })
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  var mediaUploader;
48
  $('.file-picker').click(function () {
49
  if (mediaUploader) {
43
  }
44
  })
45
 
46
+ $('body').on( 'click','.2f-send-test-email', function(){
47
+ var jq = jQuery,
48
+ parentForm = jq('.wd-one-time-pass-email form'),
49
+ that = jq(this),
50
+ data = parentForm.serialize();
51
+ data = data + '&action=testTwoFactorOPTEmail';
52
+ // return;
53
+ jq.ajax({
54
+ type: 'POST',
55
+ url: ajaxurl,
56
+ data: data,
57
+ beforeSend: function () {
58
+ parentForm.find('button[type="button"]').attr('disabled', 'disabled');
59
+ },
60
+ success: function (data) {
61
+ var notificationType = 'success';
62
+ if( ! data.success ) {
63
+ notificationType = 'error';
64
+ }
65
+ parentForm.find('button[type="button"]').removeAttr('disabled');
66
+ Defender.showNotification( notificationType, data.data.message);
67
+ }
68
+ })
69
+ return false;
70
+ });
71
 
72
+ $('body').on( 'click','.save-2f-opt-email', function(){
73
+ var jq = jQuery,
74
+ parentForm = jq('.wd-one-time-pass-email form'),
75
+ that = jq(this),
76
+ data = parentForm.serialize();
77
+ data = data + '&action=saveTwoFactorOPTEmail';
78
+ // return;
79
+ jq.ajax({
80
+ type: 'POST',
81
+ url: ajaxurl,
82
+ data: data,
83
+ beforeSend: function () {
84
+ parentForm.find('button[type="button"]').attr('disabled', 'disabled');
85
+ },
86
+ success: function (data) {
87
+ var notificationType = 'success';
88
+ if( ! data.success ) {
89
+ notificationType = 'error';
90
+ }
91
+ parentForm.find('button[type="button"]').removeAttr('disabled');
92
+ Defender.showNotification( notificationType, data.data.message);
93
+ if (data.data.reload != undefined) {
94
+ location.reload();
95
+ }
96
+ }
97
+ })
98
+ return false;
99
+ });
100
  var mediaUploader;
101
  $('.file-picker').click(function () {
102
  if (mediaUploader) {
app/module/advanced-tools/model/auth-settings.php CHANGED
@@ -18,6 +18,9 @@ class Auth_Settings extends \Hammer\WP\Settings {
18
  public $customGraphic = 0;
19
  public $customGraphicURL = '';
20
  public $isConflict = array();
 
 
 
21
 
22
  public function __construct( $id, $is_multi ) {
23
  //fetch the userRoles
@@ -96,4 +99,19 @@ class Auth_Settings extends \Hammer\WP\Settings {
96
  )
97
  );
98
  }
99
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  public $customGraphic = 0;
19
  public $customGraphicURL = '';
20
  public $isConflict = array();
21
+ public $email_subject = '';
22
+ public $email_sender = '';
23
+ public $email_body = '';
24
 
25
  public function __construct( $id, $is_multi ) {
26
  //fetch the userRoles
99
  )
100
  );
101
  }
102
+
103
+ /**
104
+ * Email default body.
105
+ */
106
+ public function two_factor_opt_email_default_body() {
107
+ $content = 'Hi {{display_name}},
108
+
109
+ Your temporary login passcode is <strong>{{passcode}}</strong>.
110
+
111
+ Copy and paste the passcode into the input field on the login screen to complete logging in.
112
+
113
+ Regards,
114
+ Administrator';
115
+ return $content;
116
+ }
117
+ }
app/module/advanced-tools/view/2factor-otp-email-edit-from.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $user = wp_get_current_user();
3
+ $subject = ! empty( $settings->email_subject ) ? $settings->email_subject : __( 'Your OTP code', "defender-security" );
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>
app/module/advanced-tools/view/login/disabled.php CHANGED
@@ -79,6 +79,35 @@
79
  $('#def2qr').hide();
80
  $('#def2').show();
81
  })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  $('#verifyOTP').click(function () {
83
  var data = {
84
  action: 'defVerifyOTP',
79
  $('#def2qr').hide();
80
  $('#def2').show();
81
  })
82
+ $("input#otpCode").keydown(function(event) {
83
+ if (event.keyCode == 13) {
84
+ event.preventDefault();
85
+
86
+ var data = {
87
+ action: 'defVerifyOTP',
88
+ otp: $('#otpCode').val(),
89
+ nonce: $('#defNonce').val()
90
+ }
91
+ var that = $(this).next('#verifyOTP');
92
+ var parent = that.closest('.well');
93
+ $.ajax({
94
+ type: 'POST',
95
+ url: ajaxurl,
96
+ data: data,
97
+ beforeSend: function () {
98
+ that.attr('disabled', 'disabled');
99
+ },
100
+ success: function (data) {
101
+ if (data.success == true) {
102
+ location.reload();
103
+ } else {
104
+ that.removeAttr('disabled');
105
+ parent.find('.error').text(data.data.message);
106
+ }
107
+ }
108
+ })
109
+ }
110
+ });
111
  $('#verifyOTP').click(function () {
112
  var data = {
113
  action: 'defVerifyOTP',
app/module/advanced-tools/view/main-free.php CHANGED
@@ -142,6 +142,23 @@
142
 
143
  </div>
144
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  <div class="columns">
146
  <div class="column is-one-third">
147
  <label><?php _e( "App Download", "defender-security" ) ?></label>
@@ -191,4 +208,9 @@
191
  <div class="clear"></div>
192
  </form>
193
  </div>
194
- </div>
 
 
 
 
 
142
 
143
  </div>
144
  </div>
145
+ <div class="columns">
146
+ <div class="column is-one-third">
147
+ <label><?php _e( "Emails", "defender-security" ) ?></label>
148
+ <span class="sub">
149
+ <?php _e( "Customize the default copy for emails the two-factor feature sends to users.", "defender-security" ) ?>
150
+ </span>
151
+ </div>
152
+ <div class="column">
153
+ <div class="well well-white">
154
+ <div class="box-title">
155
+ <strong><?php _e( 'Email', "defender-security" );?></strong>
156
+ </div>
157
+ <div class="line"><?php _e( 'Lost phone one time password', "defender-security" );?></div>
158
+ <span class="pull-right"><span class="span-icon icon-edit change-one-time-pass-email" tooltip="Edit"></span></span>
159
+ </div>
160
+ </div>
161
+ </div>
162
  <div class="columns">
163
  <div class="column is-one-third">
164
  <label><?php _e( "App Download", "defender-security" ) ?></label>
208
  <div class="clear"></div>
209
  </form>
210
  </div>
211
+ </div>
212
+ <?php
213
+ $view = '2factor-otp-email-edit-from';
214
+ $settings = array( 'settings' => $settings );
215
+ $controller->renderPartial( $view, $settings );
216
+ ?>
app/module/advanced-tools/view/main.php CHANGED
@@ -152,6 +152,23 @@
152
  </div>
153
  </div>
154
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  <div class="columns">
156
  <div class="column is-one-third">
157
  <label><?php _e( "App Download", "defender-security" ) ?></label>
@@ -201,4 +218,9 @@
201
  <div class="clear"></div>
202
  </form>
203
  </div>
204
- </div>
 
 
 
 
 
152
  </div>
153
  </div>
154
  </div>
155
+ <div class="columns">
156
+ <div class="column is-one-third">
157
+ <label><?php _e( "Emails", "defender-security" ) ?></label>
158
+ <span class="sub">
159
+ <?php _e( "Customize the default copy for emails the two-factor feature sends to users.", "defender-security" ) ?>
160
+ </span>
161
+ </div>
162
+ <div class="column">
163
+ <div class="well well-white">
164
+ <div class="box-title">
165
+ <strong><?php _e( 'Email', "defender-security" );?></strong>
166
+ </div>
167
+ <div class="line"><?php _e( 'Lost phone one time password', "defender-security" );?></div>
168
+ <span class="pull-right"><span class="span-icon icon-edit change-one-time-pass-email" tooltip="Edit"></span></span>
169
+ </div>
170
+ </div>
171
+ </div>
172
  <div class="columns">
173
  <div class="column is-one-third">
174
  <label><?php _e( "App Download", "defender-security" ) ?></label>
218
  <div class="clear"></div>
219
  </form>
220
  </div>
221
+ </div>
222
+ <?php
223
+ $view = '2factor-otp-email-edit-from';
224
+ $settings = array( 'settings' => $settings );
225
+ $controller->renderPartial( $view, $settings );
226
+ ?>
app/module/advanced-tools/view/mask-login/enabled.php CHANGED
@@ -58,7 +58,7 @@
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 line"></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>
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>
app/module/ip-lockout/component/login-protection-api.php CHANGED
@@ -239,6 +239,33 @@ class Login_Protection_Api extends Component {
239
  return null;
240
  }
241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
242
 
243
  /**
244
  * @return string
@@ -253,19 +280,19 @@ class Login_Protection_Api extends Component {
253
  $nonce = wp_create_nonce( 'lockoutIPAction' );
254
  if ( $ip != $log->ip ) {
255
  if ( ! in_array( $log->ip, $blacklist ) ) {
256
- $links[] = '<a data-nonce="' . $nonce . '" class="ip-action" data-type="blacklist" data-id="' . $log->id . '" href="#">' . __( "Ban", "defender-security" ) . '</a>';
257
  } else {
258
- $links[] = '<a data-nonce="' . $nonce . '" class="ip-action" data-type="unblacklist" data-id="' . $log->id . '" href="#">' . __( "Unban", "defender-security" ) . '</a>';
259
  }
260
  }
261
 
262
  if ( ! in_array( $log->ip, $whitelist ) ) {
263
- $links[] = '<a data-nonce="' . $nonce . '" class="ip-action" data-type="whitelist" data-id="' . $log->id . '" href="#">' . __( "Whitelist", "defender-security" ) . '</a>';
264
  } else {
265
- $links[] = '<a data-nonce="' . $nonce . '" class="ip-action" data-type="unwhitelist" data-id="' . $log->id . '" href="#">' . __( "Unwhitelist", "defender-security" ) . '</a>';
266
  }
267
 
268
- return implode( ' | ', $links );
269
  }
270
 
271
  /**
@@ -414,6 +441,7 @@ class Login_Protection_Api extends Component {
414
  }
415
  }
416
  }
 
417
  return false;
418
  }
419
 
@@ -530,6 +558,33 @@ CREATE TABLE `{$tableName2}` (
530
  }
531
  }
532
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
533
  /**
534
  * @return bool
535
  */
239
  return null;
240
  }
241
 
242
+ public static function time_since( $since ) {
243
+ $since = time() - $since;
244
+ if ( $since < 0 ) {
245
+ $since = 0;
246
+ }
247
+ $chunks = array(
248
+ array( 60 * 60 * 24 * 365, esc_html__( "year" ) ),
249
+ array( 60 * 60 * 24 * 30, esc_html__( "month" ) ),
250
+ array( 60 * 60 * 24 * 7, esc_html__( "week" ) ),
251
+ array( 60 * 60 * 24, esc_html__( 'day' ) ),
252
+ array( 60 * 60, esc_html__( "hour" ) ),
253
+ array( 60, esc_html__( "minute" ) ),
254
+ array( 1, esc_html__( "second" ) )
255
+ );
256
+
257
+ for ( $i = 0, $j = count( $chunks ); $i < $j; $i ++ ) {
258
+ $seconds = $chunks[ $i ][0];
259
+ $name = $chunks[ $i ][1];
260
+ if ( ( $count = floor( $since / $seconds ) ) != 0 ) {
261
+ break;
262
+ }
263
+ }
264
+
265
+ $print = ( $count == 1 ) ? '1 ' . $name : "$count {$name}s";
266
+
267
+ return $print;
268
+ }
269
 
270
  /**
271
  * @return string
280
  $nonce = wp_create_nonce( 'lockoutIPAction' );
281
  if ( $ip != $log->ip ) {
282
  if ( ! in_array( $log->ip, $blacklist ) ) {
283
+ $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>';
284
  } else {
285
+ $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>';
286
  }
287
  }
288
 
289
  if ( ! in_array( $log->ip, $whitelist ) ) {
290
+ $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>';
291
  } else {
292
+ $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>';
293
  }
294
 
295
+ return implode( '', $links );
296
  }
297
 
298
  /**
441
  }
442
  }
443
  }
444
+
445
  return false;
446
  }
447
 
558
  }
559
  }
560
 
561
+ /**
562
+ * @param $ip
563
+ *
564
+ * @return string|void
565
+ */
566
+ public static function getIPStatusText( $ip ) {
567
+ if ( Settings::instance()->isWhitelist( $ip ) ) {
568
+ return __( "Is whitelisted", "defender-security" );
569
+ }
570
+ if ( Settings::instance()->isBlacklist( $ip ) ) {
571
+ return __( "Is blacklisted", "defender-security" );
572
+ }
573
+
574
+ $model = IP_Model::findOne( array(
575
+ 'ip' => $ip
576
+ ) );
577
+ if ( ! is_object( $model ) ) {
578
+ return __( "Not banned", "defender-security" );
579
+ }
580
+
581
+ if ( $model->status == IP_Model::STATUS_BLOCKED ) {
582
+ return __( "Banned", "defender-security" );
583
+ } elseif ( $model->status == IP_Model::STATUS_NORMAL ) {
584
+ return __( "Not banned", "defender-security" );
585
+ }
586
+ }
587
+
588
  /**
589
  * @return bool
590
  */
app/module/ip-lockout/component/logs-table.php CHANGED
@@ -8,6 +8,7 @@ namespace WP_Defender\Module\IP_Lockout\Component;
8
  use Hammer\Helper\HTTP_Helper;
9
  use Hammer\Helper\WP_Helper;
10
  use WP_Defender\Behavior\Utils;
 
11
  use WP_Defender\Module\IP_Lockout\Model\Log_Model;
12
 
13
  class Logs_Table extends \WP_List_Table {
@@ -36,9 +37,8 @@ class Logs_Table extends \WP_List_Table {
36
  */
37
  function get_columns() {
38
  $columns = array(
39
- 'reason' => esc_html__( 'DETAILS', "defender-security" ),
40
- 'date' => esc_html__( 'DATE', "defender-security" ),
41
- 'ip' => esc_html__( 'IP', "defender-security" ),
42
  'action' => ''
43
  );
44
 
@@ -48,8 +48,8 @@ class Logs_Table extends \WP_List_Table {
48
  protected function get_sortable_columns() {
49
  return array(
50
  //'reason' => array( 'log', true ),
51
- 'date' => array( 'date', true ),
52
- 'ip' => array( 'ip', true ),
53
  );
54
  }
55
 
@@ -68,6 +68,10 @@ class Logs_Table extends \WP_List_Table {
68
  if ( ( $filter = Http_Helper::retrieve_get( 'type', null ) ) != null ) {
69
  $params['type'] = $filter;
70
  }
 
 
 
 
71
  $logs = Log_Model::findAll( $params,
72
  HTTP_Helper::retrieve_get( 'orderby', 'id' ),
73
  HTTP_Helper::retrieve_get( 'order', 'desc' ),
@@ -96,7 +100,7 @@ class Logs_Table extends \WP_List_Table {
96
  * @return string
97
  */
98
  public function column_action( Log_Model $log ) {
99
- return Login_Protection_Api::getLogsActionsText( $log );
100
  }
101
 
102
  /**
@@ -109,8 +113,14 @@ class Logs_Table extends \WP_List_Table {
109
  if ( $log->type == Log_Model::ERROR_404 ) {
110
  $format = true;
111
  }
 
 
 
 
 
 
112
 
113
- return $log->get_log_text( $format );
114
  }
115
 
116
  /**
@@ -141,56 +151,61 @@ class Logs_Table extends \WP_List_Table {
141
 
142
  $this->screen->render_screen_reader_content( 'heading_list' );
143
  ?>
144
- <?php if ( ! defined( 'DOING_AJAX' ) ): ?>
145
- <div class="well well-white lockout-logs-filter mline wd-hide">
146
- <form>
147
- <strong>
148
- <?php _e( "Filter", "defender-security" ) ?>
149
- </strong>
150
- <div class="columns">
151
- <div class="column is-5">
152
- <select name="interval">
153
- <option value="1"><?php _e( "Last 24 hours", "defender-security" ) ?></option>
154
- <option value="7"><?php _e( "Last 7 days", "defender-security" ) ?></option>
155
- <option value="30"
156
- selected><?php _e( "Last 30 days", "defender-security" ) ?></option>
157
- </select>
158
- </div>
159
- <div class="column is-5">
160
- <select name="type">
161
- <option value=""><?php esc_html_e( "All", "defender-security" ) ?></option>
162
- <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_FAIL, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
163
- value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_FAIL ?>">
164
- <?php esc_html_e( "Failed login attempts", "defender-security" ) ?></option>
165
- <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_LOCK, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
166
- value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_LOCK ?>"><?php esc_html_e( "Login lockout", "defender-security" ) ?></option>
167
- <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::ERROR_404, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
168
- value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::ERROR_404 ?>"><?php esc_html_e( "404 error", "defender-security" ) ?></option>
169
- <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::LOCKOUT_404, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
170
- value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::LOCKOUT_404 ?>"><?php esc_html_e( "404 lockout", "defender-security" ) ?></option>
171
- </select>
172
- </div>
173
- </div>
174
- </form>
175
- </div>
176
- <?php endif; ?>
177
  <div class="lockout-logs-container">
 
178
  <?php if ( $this->_pagination_args['total_items'] > 0 ): ?>
179
- <?php $this->display_tablenav( 'top' ); ?>
180
- <table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>">
181
- <thead>
182
- <tr>
183
- <?php $this->print_column_headers(); ?>
184
- </tr>
185
- </thead>
186
-
187
- <tbody id="the-list"<?php
188
- if ( $singular ) {
189
- echo " data-wp-lists='list:$singular'";
190
- } ?>>
191
- <?php $this->display_rows_or_placeholder(); ?>
192
- </tbody>
193
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  <?php
195
  $this->display_tablenav( 'bottom' );
196
  ?>
@@ -199,6 +214,7 @@ class Logs_Table extends \WP_List_Table {
199
  <i class="def-icon icon-info fill-blue"></i>
200
  <?php _e( "No lockout events have been logged within the selected time period.", "defender-security" ) ?>
201
  </div>
 
202
  <?php endif; ?>
203
  </div>
204
  <?php
@@ -228,33 +244,99 @@ class Logs_Table extends \WP_List_Table {
228
  ) ) ) {
229
  $class .= ' lockout';
230
  }
231
-
232
  echo '<tr class="' . $class . '">';
233
  $this->single_row_columns( $item );
234
  echo '</tr>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
235
  }
236
 
237
  protected function display_tablenav( $which ) {
238
  ?>
239
  <div class="intro">
240
- <?php if ( $which === 'top' ): ?>
241
-
242
- <?php endif; ?>
243
- <div class="bulk-nav">
244
- <div class="bulk-action">
245
- <?php if ( $which === 'top' ): ?>
246
- <p><?php
247
- $dayText = sprintf( _n( '%s day', '%s days', HTTP_Helper::retrieve_get( 'interval', 30 ), "defender-security" ), HTTP_Helper::retrieve_get( 'interval', 30 ) );
248
- printf( esc_html__( 'Your website\'s lockout log for the past %s.', "defender-security" ), $dayText ) ?></p>
249
- <?php endif; ?>
250
  </div>
251
- <div class="nav">
252
- <span><?php echo sprintf( esc_html__( "%s results", "defender-security" ), $this->get_pagination_arg( 'total_items' ) ) ?></span>
253
- <div class="button-group">
254
- <?php $this->pagination( $which ); ?>
 
 
255
  </div>
256
  </div>
 
 
 
 
257
  </div>
 
258
  <div class="clear"></div>
259
  </div>
260
  <?php
@@ -288,32 +370,32 @@ class Logs_Table extends \WP_List_Table {
288
  $current_url = set_url_scheme( 'http://' . parse_url( get_site_url(), PHP_URL_HOST ) . $_SERVER['REQUEST_URI'] );
289
  $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
290
  $current_url = esc_url( $current_url );
291
- $radius = 3;
292
  if ( $current_page > 1 && $total_pages > $radius ) {
293
- $links['first'] = sprintf( '<a class="button lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
294
- 1, add_query_arg( 'paged', 1, $current_url ), '&laquo;' );
295
- $links['prev'] = sprintf( '<a class="button lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
296
  $current_page - 1, add_query_arg( 'paged', $current_page - 1, $current_url ), '&lsaquo;' );
297
  }
298
 
299
  for ( $i = 1; $i <= $total_pages; $i ++ ) {
300
  if ( ( $i >= 1 && $i <= $radius ) || ( $i > $current_page - 2 && $i < $current_page + 2 ) || ( $i <= $total_pages && $i > $total_pages - $radius ) ) {
301
  if ( $i == $current_page ) {
302
- $links[ $i ] = sprintf( '<a href="#" class="button lockout-nav button-light" data-paged="%s" disabled="">%s</a>', $i, $i );
303
  } else {
304
- $links[ $i ] = sprintf( '<a class="button lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
305
  $i, add_query_arg( 'paged', $i, $current_url ), $i );
306
  }
307
  } elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
308
- $links[ $i ] = '<a href="#" class="button lockout-nav button-light" disabled="">...</a>';
309
  }
310
  }
311
 
312
  if ( $current_page < $total_pages && $total_pages > $radius ) {
313
- $links['next'] = sprintf( '<a class="button lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
314
  $current_page + 1, add_query_arg( 'paged', $current_page + 1, $current_url ), '&rsaquo;' );
315
- $links['last'] = sprintf( '<a class="button lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
316
- $total_pages, add_query_arg( 'paged', $total_pages, $current_url ), '&raquo;' );
317
  }
318
  $output = join( "\n", $links );
319
  $this->_pagination = $output;
8
  use Hammer\Helper\HTTP_Helper;
9
  use Hammer\Helper\WP_Helper;
10
  use WP_Defender\Behavior\Utils;
11
+ use WP_Defender\Module\IP_Lockout\Model\IP_Model;
12
  use WP_Defender\Module\IP_Lockout\Model\Log_Model;
13
 
14
  class Logs_Table extends \WP_List_Table {
37
  */
38
  function get_columns() {
39
  $columns = array(
40
+ 'reason' => esc_html__( 'Details', "defender-security" ),
41
+ 'date' => esc_html__( 'Time', "defender-security" ),
 
42
  'action' => ''
43
  );
44
 
48
  protected function get_sortable_columns() {
49
  return array(
50
  //'reason' => array( 'log', true ),
51
+ // 'date' => array( 'date', true ),
52
+ // 'ip' => array( 'ip', true ),
53
  );
54
  }
55
 
68
  if ( ( $filter = Http_Helper::retrieve_get( 'type', null ) ) != null ) {
69
  $params['type'] = $filter;
70
  }
71
+ if ( ( $ip = Http_Helper::retrieve_get( 'ip_address', null ) ) != null ) {
72
+ $params['ip'] = $ip;
73
+ }
74
+
75
  $logs = Log_Model::findAll( $params,
76
  HTTP_Helper::retrieve_get( 'orderby', 'id' ),
77
  HTTP_Helper::retrieve_get( 'order', 'desc' ),
100
  * @return string
101
  */
102
  public function column_action( Log_Model $log ) {
103
+ return '<i class="dev-icon dev-icon-caret_down"></i>';
104
  }
105
 
106
  /**
113
  if ( $log->type == Log_Model::ERROR_404 ) {
114
  $format = true;
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
  }
125
 
126
  /**
151
 
152
  $this->screen->render_screen_reader_content( 'heading_list' );
153
  ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  <div class="lockout-logs-container">
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' ) ) ?>
169
+ value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_FAIL ?>">
170
+ <?php esc_html_e( "Failed login attempts", "defender-security" ) ?></option>
171
+ <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_LOCK, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
172
+ value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::AUTH_LOCK ?>"><?php esc_html_e( "Login lockout", "defender-security" ) ?></option>
173
+ <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::ERROR_404, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
174
+ value="<?php echo \WP_Defender\Module\IP_Lockout\Model\Log_Model::ERROR_404 ?>"><?php esc_html_e( "404 error", "defender-security" ) ?></option>
175
+ <option <?php selected( \WP_Defender\Module\IP_Lockout\Model\Log_Model::LOCKOUT_404, \Hammer\Helper\HTTP_Helper::retrieve_get( 'filter' ) ) ?>
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
  ?>
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
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' ) {
267
+ printf( __( "%s tried to access file %s", "defender-security" ), $item->ip, $item->log );
268
+ } elseif ( $item->type == 'auth_fail' ) {
269
+ printf( __( "%s tried to login with username %s", "defender-security" ), $item->ip, $item->tried );
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 $item->type == '404_error' ? __( "404 error", "defender-security" ) : __( "Login failed", "defender-security" ) ?></a>
277
+ </p>
278
+ </div>
279
+ </div>
280
+ <div class="columns">
281
+ <div class="column is-4">
282
+ <p><strong><?php _e( "IP", "defender-security" ) ?></strong></p>
283
+ <p><a href=""><?php
284
+ echo $item->ip
285
+ ?></a></p>
286
+ </div>
287
+ <div class="column is-4">
288
+ <p><strong><?php _e( "Date/Time", "defender-security" ) ?></strong></p>
289
+ <p><?php
290
+ echo Utils::instance()->formatDateTime( $item->date )
291
+ ?></p>
292
+ </div>
293
+ <div class="column is-4">
294
+ <p><strong><?php _e( "Ban Status", "defender-security" ) ?></strong></p>
295
+ <p><?php
296
+ echo Login_Protection_Api::getIPStatusText( $item->ip )
297
+ ?></p>
298
+ </div>
299
+ </div>
300
+ <div class="well well-white">
301
+ <div>
302
+ <?php
303
+ echo Login_Protection_Api::getLogsActionsText( $item );
304
+ ?>
305
+ </div>
306
+ <p>
307
+ <?php _e( "Note: Make sure this IP is not a legitimate operation, banning the IP will result in being permanently locked out from accessing your website.", "defender-security" ) ?>
308
+ </p>
309
+ </div>
310
+ </div>
311
+ </div>
312
+ </td>
313
+ <?php
314
  }
315
 
316
  protected function display_tablenav( $which ) {
317
  ?>
318
  <div class="intro">
319
+ <div class="columns">
320
+ <div class="column is-3">
321
+ <!-- <input type="checkbox" id="bulk-select">-->
322
+ <!-- <a href="#bulk" rel="dialog" class="button button-small button-light button-disabled">-->
323
+ <!-- --><?php //_e( "Bulk Action", "defender-security" ) ?>
324
+ <!-- </a>-->
 
 
 
 
325
  </div>
326
+ <div class="column is-7">
327
+ <div class="nav">
328
+ <span><?php echo sprintf( esc_html__( "%s results", "defender-security" ), $this->get_pagination_arg( 'total_items' ) ) ?></span>
329
+ <div class="button-group">
330
+ <?php $this->pagination( $which ); ?>
331
+ </div>
332
  </div>
333
  </div>
334
+ <div class="column is-2 tr">
335
+ <button type="button" rel="show-filter" data-target=".lockout-logs-filter"
336
+ class="button button-small button-secondary"><?php _e( "Filter", "defender-security" ) ?></button>
337
+ </div>
338
  </div>
339
+
340
  <div class="clear"></div>
341
  </div>
342
  <?php
370
  $current_url = set_url_scheme( 'http://' . parse_url( get_site_url(), PHP_URL_HOST ) . $_SERVER['REQUEST_URI'] );
371
  $current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
372
  $current_url = esc_url( $current_url );
373
+ $radius = 1;
374
  if ( $current_page > 1 && $total_pages > $radius ) {
375
+ // $links['first'] = sprintf( '<a class="button button-small lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
376
+ // 1, add_query_arg( 'paged', 1, $current_url ), '&laquo;' );
377
+ $links['prev'] = sprintf( '<a class="button button-small lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
378
  $current_page - 1, add_query_arg( 'paged', $current_page - 1, $current_url ), '&lsaquo;' );
379
  }
380
 
381
  for ( $i = 1; $i <= $total_pages; $i ++ ) {
382
  if ( ( $i >= 1 && $i <= $radius ) || ( $i > $current_page - 2 && $i < $current_page + 2 ) || ( $i <= $total_pages && $i > $total_pages - $radius ) ) {
383
  if ( $i == $current_page ) {
384
+ $links[ $i ] = sprintf( '<a href="#" class="button button-small lockout-nav button-light" data-paged="%s" disabled="">%s</a>', $i, $i );
385
  } else {
386
+ $links[ $i ] = sprintf( '<a class="button button-small lockout-nav button-light" data-paged="%s" href="%s">%s</a>',
387
  $i, add_query_arg( 'paged', $i, $current_url ), $i );
388
  }
389
  } elseif ( $i == $current_page - $radius || $i == $current_page + $radius ) {
390
+ $links[ $i ] = '<a href="#" class="button lockout-nav button-small button-light" disabled="">...</a>';
391
  }
392
  }
393
 
394
  if ( $current_page < $total_pages && $total_pages > $radius ) {
395
+ $links['next'] = sprintf( '<a class="button lockout-nav button-small button-light" data-paged="%s" href="%s">%s</a>',
396
  $current_page + 1, add_query_arg( 'paged', $current_page + 1, $current_url ), '&rsaquo;' );
397
+ // $links['last'] = sprintf( '<a class="button lockout-nav button-small button-light" data-paged="%s" href="%s">%s</a>',
398
+ // $total_pages, add_query_arg( 'paged', $total_pages, $current_url ), '&raquo;' );
399
  }
400
  $output = join( "\n", $links );
401
  $this->_pagination = $output;
app/module/ip-lockout/controller/main.php CHANGED
@@ -62,6 +62,7 @@ class Main extends Controller {
62
  $this->add_ajax_action( 'lockoutEmptyLogs', 'lockoutEmptyLogs' );
63
  $this->add_ajax_action( 'lockoutSummaryData', 'lockoutSummaryData' );
64
  $this->add_ajax_action( 'migrateData', 'movingDataToTable' );
 
65
 
66
  $this->handleIpAction();
67
  $this->handleUserSearch();
@@ -136,6 +137,40 @@ class Main extends Controller {
136
  wp_send_json_success( $data );
137
  }
138
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  public function lockoutEmptyLogs() {
140
  if ( ! $this->checkPermission() ) {
141
  return;
@@ -187,8 +222,11 @@ class Main extends Controller {
187
  'message' => Login_Protection_Api::getLogsActionsText( $log )
188
  ) );
189
  } else {
 
 
190
  wp_send_json_success( array(
191
- 'message' => sprintf( __( "IP %s has been added to your blacklist. You can control your blacklist in <a href=\"%s\">IP Lockouts.</a>", "defender-security" ), $ip, network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) )
 
192
  ) );
193
  }
194
  } else {
62
  $this->add_ajax_action( 'lockoutEmptyLogs', 'lockoutEmptyLogs' );
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();
137
  wp_send_json_success( $data );
138
  }
139
 
140
+ public function exportAsCsv() {
141
+ if ( ! $this->checkPermission() ) {
142
+ return;
143
+ }
144
+ $logs = Log_Model::findAll();
145
+ $fp = fopen( 'php://memory', 'w' );
146
+ $headers = array(
147
+ __( "Log", "defender-security" ),
148
+ __( "Date / Time", "defender-security" ),
149
+ __( "Type", "defender-security" ),
150
+ __( "IP address", "defender-security" ),
151
+ __( "Status", "defender-security" )
152
+ );
153
+ fputcsv( $fp, $headers );
154
+ foreach ( $logs as $log ) {
155
+ $item = array(
156
+ $log->log,
157
+ $log->get_date(),
158
+ $log->get_type(),
159
+ $log->ip,
160
+ Login_Protection_Api::getIPStatusText( $log->ip )
161
+ );
162
+ fputcsv( $fp, $item );
163
+ }
164
+
165
+ $filename = 'wdf-lockout-logs-export-' . date( 'ymdHis' ) . '.csv';
166
+ fseek( $fp, 0 );
167
+ header( 'Content-Type: text/csv' );
168
+ header( 'Content-Disposition: attachment; filename="' . $filename . '";' );
169
+ // make php send the generated csv lines to the browser
170
+ fpassthru( $fp );
171
+ exit();
172
+ }
173
+
174
  public function lockoutEmptyLogs() {
175
  if ( ! $this->checkPermission() ) {
176
  return;
222
  'message' => Login_Protection_Api::getLogsActionsText( $log )
223
  ) );
224
  } else {
225
+ $item = new \StdClass();
226
+ $item->ip = $ip;
227
  wp_send_json_success( array(
228
+ 'message' => sprintf( __( "IP %s has been added to your blacklist. You can control your blacklist in <a href=\"%s\">IP Lockouts.</a>", "defender-security" ), $ip, network_admin_url( 'admin.php?page=wdf-ip-lockout&view=blacklist' ) ),
229
+ 'buttons' => Login_Protection_Api::getLogsActionsText($item )
230
  ) );
231
  }
232
  } else {
app/module/ip-lockout/js/script.js CHANGED
@@ -3,6 +3,7 @@ jQuery(function ($) {
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') {
@@ -105,7 +106,7 @@ jQuery(function ($) {
105
  },
106
  success: function (data) {
107
  if (data.success == 1) {
108
- that.closest('td').html(data.data.message);
109
  }
110
  }
111
  })
@@ -159,6 +160,23 @@ jQuery(function ($) {
159
  $('input[name="login_protection"], input[name="detect_404"]').change(function () {
160
  $('#settings-frm').submit();
161
  })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
  });
163
 
164
  window.WDIP = window.WDIP || {};
@@ -203,33 +221,12 @@ WDIP.formHandler = function () {
203
  WDIP.listenFilter = function () {
204
  var jq = jQuery;
205
  var form = jq('.lockout-logs-filter form');
206
- var inputs = form.find(':input');
207
- var typingTimer; //timer identifier
208
- var doneTypingInterval = 800; //time in ms, 5 second for example
209
- var old_query = '';
210
- //on keyup, start the countdown
211
- inputs.on('change', function () {
212
- clearTimeout(typingTimer);
213
- typingTimer = setTimeout(doneTyping, doneTypingInterval);
214
- });
215
-
216
- //on keydown, clear the countdown
217
- inputs.on('click', function () {
218
- clearTimeout(typingTimer);
219
- });
220
-
221
- //user is "finished typing," do something
222
- function doneTyping() {
223
- //build query
224
  var query = WDIP.buildFilterQuery();
225
- if (query == old_query) {
226
- //no need
227
- return;
228
- }
229
  WDIP.ajaxPull(query, function () {
230
- old_query = query;
231
  })
232
- }
 
233
  };
234
  var isFirst = true;
235
  var urlOrigin = location.href;
@@ -244,10 +241,12 @@ WDIP.ajaxPull = function (query, callback) {
244
  jq('.lockout-logs-container').prepend(overlay);
245
  },
246
  success: function (data) {
247
- jq('.lockout-logs-container').html(data.data.html);
 
 
248
  overlay.remove();
249
  if (isFirst == false) {
250
- window.history.pushState(null, document.title, urlOrigin + '&' + query);
251
  } else {
252
  isFirst = false;
253
  }
@@ -262,7 +261,9 @@ WDIP.buildFilterQuery = function () {
262
  var inputs = form.find(':input');
263
  var query = [];
264
  inputs.each(function () {
265
- query.push(jq(this).attr('name') + '=' + jq(this).val());
 
 
266
  });
267
  return query.join('&');
268
  };
@@ -290,4 +291,23 @@ WDIP.pullSummaryData = function () {
290
  }
291
  })
292
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  }
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') {
106
  },
107
  success: function (data) {
108
  if (data.success == 1) {
109
+ that.parent().html(data.data.message);
110
  }
111
  }
112
  })
160
  $('input[name="login_protection"], input[name="detect_404"]').change(function () {
161
  $('#settings-frm').submit();
162
  })
163
+
164
+ $('#bulk-select').on('click', function () {
165
+ $('.single-select').prop('checked', $(this).prop('checked'))
166
+ })
167
+
168
+ $('#lockout-logs-sort').change(function () {
169
+ var value = $(this).val();
170
+ if (value === 'latest') {
171
+ query = 'orderby=id&order=desc'
172
+ } else if (value === 'oldest') {
173
+ query = 'orderby=id&order=asc'
174
+ } else if (value === 'ip') {
175
+ query = 'orderby=ip&order=asc'
176
+ }
177
+ console.log(query);
178
+ WDIP.ajaxPull(query);
179
+ })
180
  });
181
 
182
  window.WDIP = window.WDIP || {};
221
  WDIP.listenFilter = function () {
222
  var jq = jQuery;
223
  var form = jq('.lockout-logs-filter form');
224
+ form.on('submit', function () {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
  var query = WDIP.buildFilterQuery();
 
 
 
 
226
  WDIP.ajaxPull(query, function () {
 
227
  })
228
+ return false;
229
+ })
230
  };
231
  var isFirst = true;
232
  var urlOrigin = location.href;
241
  jq('.lockout-logs-container').prepend(overlay);
242
  },
243
  success: function (data) {
244
+ jq('.lockout-logs-container table').replaceWith(jq(data.data.html).find('table').first());
245
+ jq('.lockout-logs-container .nav').replaceWith(jq(data.data.html).find('.nav').first());
246
+ //jq('.lockout-logs-container').replaceWith(jq(data.data.html));
247
  overlay.remove();
248
  if (isFirst == false) {
249
+ //window.history.pushState(null, document.title, urlOrigin + '&' + query);
250
  } else {
251
  isFirst = false;
252
  }
261
  var inputs = form.find(':input');
262
  var query = [];
263
  inputs.each(function () {
264
+ if (jq(this).attr('name') !== undefined) {
265
+ query.push(jq(this).attr('name') + '=' + jq(this).val());
266
+ }
267
  });
268
  return query.join('&');
269
  };
291
  }
292
  })
293
  }
294
+ }
295
+
296
+ WDIP.showHideLog = function () {
297
+ var jq = jQuery;
298
+ jq('body').on('click', '.show-hide-log', function (e) {
299
+ if (jq(e.target).is('input')) {
300
+ return;
301
+ }
302
+ var target = jq(this).next('tr.table-info');
303
+ if (target.hasClass('wd-hide')) {
304
+ target.removeClass('wd-hide');
305
+ jq(this).addClass('opened');
306
+ jq(this).find('i').removeClass().addClass('dev-icon dev-icon-caret_up')
307
+ } else {
308
+ target.addClass('wd-hide');
309
+ jq(this).removeClass('opened');
310
+ jq(this).find('i').removeClass().addClass('dev-icon dev-icon-caret_down')
311
+ }
312
+ })
313
  }
app/module/ip-lockout/model/log-model.php CHANGED
@@ -8,6 +8,7 @@ namespace WP_Defender\Module\IP_Lockout\Model;
8
 
9
  use Hammer\Base\DB_Model;
10
  use WP_Defender\Behavior\Utils;
 
11
 
12
  class Log_Model extends DB_Model {
13
  const AUTH_FAIL = 'auth_fail', AUTH_LOCK = 'auth_lock', ERROR_404 = '404_error', LOCKOUT_404 = '404_lockout', ERROR_404_IGNORE = '404_error_ignore';
@@ -36,7 +37,7 @@ class Log_Model extends DB_Model {
36
  if ( ! $format ) {
37
  return esc_html( $this->log );
38
  } else {
39
- $text = sprintf( __( "Request for file <span class='log-text-table' tooltip='%s'>%s</span> which doesn't exist", "defender-security" ), esc_attr( $this->log ), pathinfo( $this->log, PATHINFO_BASENAME ) );
40
 
41
  return $text;
42
  }
@@ -54,7 +55,11 @@ class Log_Model extends DB_Model {
54
  * @return string
55
  */
56
  public function get_date() {
57
- return Utils::instance()->formatDateTime( date( 'Y-m-d H:i:s', $this->date ) );
 
 
 
 
58
  }
59
 
60
  /**
8
 
9
  use Hammer\Base\DB_Model;
10
  use WP_Defender\Behavior\Utils;
11
+ use WP_Defender\Module\IP_Lockout\Component\Login_Protection_Api;
12
 
13
  class Log_Model extends DB_Model {
14
  const AUTH_FAIL = 'auth_fail', AUTH_LOCK = 'auth_lock', ERROR_404 = '404_error', LOCKOUT_404 = '404_lockout', ERROR_404_IGNORE = '404_error_ignore';
37
  if ( ! $format ) {
38
  return esc_html( $this->log );
39
  } else {
40
+ $text = sprintf( __( "Request for file <span class='log-text-table'>%s</span> which doesn't exist", "defender-security" ), esc_attr( $this->log ) );
41
 
42
  return $text;
43
  }
55
  * @return string
56
  */
57
  public function get_date() {
58
+ if ( strtotime( '-24 hours' ) > $this->date ) {
59
+ return Utils::instance()->formatDateTime( date( 'Y-m-d H:i:s', $this->date ) );
60
+ } else {
61
+ return Login_Protection_Api::time_since( $this->date );
62
+ }
63
  }
64
 
65
  /**
app/module/ip-lockout/model/settings.php CHANGED
@@ -62,8 +62,11 @@ 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
 
 
 
 
 
67
  parent::__construct( $id, $isMulti );
68
  }
69
 
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
+ $this->report_time = ltrim( date( 'H', current_time( 'timestamp' ) ) . ':0', '0' );
69
+ }
70
  parent::__construct( $id, $isMulti );
71
  }
72
 
app/module/ip-lockout/view/logging/enabled.php CHANGED
@@ -1,8 +1,18 @@
1
  <div class="dev-box">
2
  <div class="box-title">
3
- <h3><?php esc_html_e( "LOCKOUT LOGS", "defender-security" ) ?></h3>
4
- <button type="button" data-target=".lockout-logs-filter" rel="show-filter"
5
- class="button button-secondary button-small"><?php _e( "Filter", "defender-security" ) ?></button>
 
 
 
 
 
 
 
 
 
 
6
  </div>
7
  <div class="box-content">
8
  <?php
@@ -11,4 +21,11 @@
11
  $table->display();
12
  ?>
13
  </div>
14
- </div>
 
 
 
 
 
 
 
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
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>-->
app/module/scan/component/scan-api.php CHANGED
@@ -140,6 +140,9 @@ class Scan_Api extends Component {
140
  $files = File_Helper::findFiles( WP_CONTENT_DIR, true, false, array(), array(
141
  'ext' => array( 'php' )
142
  ), true, $settings->max_filesize );
 
 
 
143
  //include wp-config.php here
144
  $files[] = ABSPATH . 'wp-config.php';
145
 
140
  $files = File_Helper::findFiles( WP_CONTENT_DIR, true, false, array(), array(
141
  'ext' => array( 'php' )
142
  ), true, $settings->max_filesize );
143
+ // $files = File_Helper::findFiles( ABSPATH . 'trash', true, false, array(), array(
144
+ // 'ext' => array( 'php' )
145
+ // ), true, $settings->max_filesize );
146
  //include wp-config.php here
147
  $files[] = ABSPATH . 'wp-config.php';
148
 
app/module/scan/model/settings.php CHANGED
@@ -43,7 +43,7 @@ class Settings extends \Hammer\WP\Settings {
43
  * Toggle notification on or off
44
  * @var bool
45
  */
46
- public $notification = false;
47
 
48
  /**
49
  * Toggle only sending error email or all email
@@ -127,7 +127,11 @@ 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
  }
 
131
  parent::__construct( $id, $is_multi );
132
  }
133
 
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
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
+ $this->time = ltrim( date( 'H', current_time( 'timestamp' ) ) . ':0', '0' );
133
  }
134
+
135
  parent::__construct( $id, $is_multi );
136
  }
137
 
assets/css/styles.css CHANGED
@@ -127,6 +127,8 @@
127
  font-size: 18px; }
128
  .wpmud .dev-list.bold .list-detail i {
129
  vertical-align: sub; }
 
 
130
  .wpmud .dev-box {
131
  position: relative; }
132
  .wpmud .dev-box .box-title {
@@ -162,10 +164,29 @@
162
  width: auto;
163
  min-width: 150px;
164
  margin-top: 7px; }
 
 
165
  .wpmud .dev-box .box-content {
166
  color: #666; }
167
  .wpmud .dev-box .box-content strong {
168
  color: #333; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  .wpmud .toggle {
170
  width: 40px;
171
  height: 18px; }
@@ -267,6 +288,24 @@
267
  font-size: 15px; }
268
  .wpmud .dev-overlay .box-scroll {
269
  padding: 30px; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  .wpmud .dev-overlay.small .box {
271
  margin: 30px auto; }
272
  @media screen and (min-width: 769px) and (max-width: 979px) {
@@ -285,6 +324,31 @@
285
  .wpmud [tooltip]:after {
286
  text-transform: none;
287
  font: 400 13px/20px 'Roboto Condensed'; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  .wpmud .reporting-sale {
289
  background-image: url("../img/dev-man-pre.svg");
290
  background-repeat: no-repeat;
@@ -745,14 +809,14 @@
745
  margin-left: 25%; }
746
  .columns.is-mobile > .wp-defender .column.is-1 {
747
  flex: none;
748
- width: 8.33333%; }
749
  .columns.is-mobile > .wp-defender .column.is-offset-1 {
750
- margin-left: 8.33333%; }
751
  .columns.is-mobile > .wp-defender .column.is-2 {
752
  flex: none;
753
- width: 16.66667%; }
754
  .columns.is-mobile > .wp-defender .column.is-offset-2 {
755
- margin-left: 16.66667%; }
756
  .columns.is-mobile > .wp-defender .column.is-3 {
757
  flex: none;
758
  width: 25%; }
@@ -760,14 +824,14 @@
760
  margin-left: 25%; }
761
  .columns.is-mobile > .wp-defender .column.is-4 {
762
  flex: none;
763
- width: 33.33333%; }
764
  .columns.is-mobile > .wp-defender .column.is-offset-4 {
765
- margin-left: 33.33333%; }
766
  .columns.is-mobile > .wp-defender .column.is-5 {
767
  flex: none;
768
- width: 41.66667%; }
769
  .columns.is-mobile > .wp-defender .column.is-offset-5 {
770
- margin-left: 41.66667%; }
771
  .columns.is-mobile > .wp-defender .column.is-6 {
772
  flex: none;
773
  width: 50%; }
@@ -775,14 +839,14 @@
775
  margin-left: 50%; }
776
  .columns.is-mobile > .wp-defender .column.is-7 {
777
  flex: none;
778
- width: 58.33333%; }
779
  .columns.is-mobile > .wp-defender .column.is-offset-7 {
780
- margin-left: 58.33333%; }
781
  .columns.is-mobile > .wp-defender .column.is-8 {
782
  flex: none;
783
- width: 66.66667%; }
784
  .columns.is-mobile > .wp-defender .column.is-offset-8 {
785
- margin-left: 66.66667%; }
786
  .columns.is-mobile > .wp-defender .column.is-9 {
787
  flex: none;
788
  width: 75%; }
@@ -790,14 +854,14 @@
790
  margin-left: 75%; }
791
  .columns.is-mobile > .wp-defender .column.is-10 {
792
  flex: none;
793
- width: 83.33333%; }
794
  .columns.is-mobile > .wp-defender .column.is-offset-10 {
795
- margin-left: 83.33333%; }
796
  .columns.is-mobile > .wp-defender .column.is-11 {
797
  flex: none;
798
- width: 91.66667%; }
799
  .columns.is-mobile > .wp-defender .column.is-offset-11 {
800
- margin-left: 91.66667%; }
801
  .columns.is-mobile > .wp-defender .column.is-12 {
802
  flex: none;
803
  width: 100%; }
@@ -836,14 +900,14 @@
836
  margin-left: 25%; }
837
  .wp-defender .column.is-1-mobile {
838
  flex: none;
839
- width: 8.33333%; }
840
  .wp-defender .column.is-offset-1-mobile {
841
- margin-left: 8.33333%; }
842
  .wp-defender .column.is-2-mobile {
843
  flex: none;
844
- width: 16.66667%; }
845
  .wp-defender .column.is-offset-2-mobile {
846
- margin-left: 16.66667%; }
847
  .wp-defender .column.is-3-mobile {
848
  flex: none;
849
  width: 25%; }
@@ -851,14 +915,14 @@
851
  margin-left: 25%; }
852
  .wp-defender .column.is-4-mobile {
853
  flex: none;
854
- width: 33.33333%; }
855
  .wp-defender .column.is-offset-4-mobile {
856
- margin-left: 33.33333%; }
857
  .wp-defender .column.is-5-mobile {
858
  flex: none;
859
- width: 41.66667%; }
860
  .wp-defender .column.is-offset-5-mobile {
861
- margin-left: 41.66667%; }
862
  .wp-defender .column.is-6-mobile {
863
  flex: none;
864
  width: 50%; }
@@ -866,14 +930,14 @@
866
  margin-left: 50%; }
867
  .wp-defender .column.is-7-mobile {
868
  flex: none;
869
- width: 58.33333%; }
870
  .wp-defender .column.is-offset-7-mobile {
871
- margin-left: 58.33333%; }
872
  .wp-defender .column.is-8-mobile {
873
  flex: none;
874
- width: 66.66667%; }
875
  .wp-defender .column.is-offset-8-mobile {
876
- margin-left: 66.66667%; }
877
  .wp-defender .column.is-9-mobile {
878
  flex: none;
879
  width: 75%; }
@@ -881,14 +945,14 @@
881
  margin-left: 75%; }
882
  .wp-defender .column.is-10-mobile {
883
  flex: none;
884
- width: 83.33333%; }
885
  .wp-defender .column.is-offset-10-mobile {
886
- margin-left: 83.33333%; }
887
  .wp-defender .column.is-11-mobile {
888
  flex: none;
889
- width: 91.66667%; }
890
  .wp-defender .column.is-offset-11-mobile {
891
- margin-left: 91.66667%; }
892
  .wp-defender .column.is-12-mobile {
893
  flex: none;
894
  width: 100%; }
@@ -927,14 +991,14 @@
927
  margin-left: 25%; }
928
  .wp-defender .column.is-1, .wp-defender .column.is-1-tablet {
929
  flex: none;
930
- width: 8.33333%; }
931
  .wp-defender .column.is-offset-1, .wp-defender .column.is-offset-1-tablet {
932
- margin-left: 8.33333%; }
933
  .wp-defender .column.is-2, .wp-defender .column.is-2-tablet {
934
  flex: none;
935
- width: 16.66667%; }
936
  .wp-defender .column.is-offset-2, .wp-defender .column.is-offset-2-tablet {
937
- margin-left: 16.66667%; }
938
  .wp-defender .column.is-3, .wp-defender .column.is-3-tablet {
939
  flex: none;
940
  width: 25%; }
@@ -942,14 +1006,14 @@
942
  margin-left: 25%; }
943
  .wp-defender .column.is-4, .wp-defender .column.is-4-tablet {
944
  flex: none;
945
- width: 33.33333%; }
946
  .wp-defender .column.is-offset-4, .wp-defender .column.is-offset-4-tablet {
947
- margin-left: 33.33333%; }
948
  .wp-defender .column.is-5, .wp-defender .column.is-5-tablet {
949
  flex: none;
950
- width: 41.66667%; }
951
  .wp-defender .column.is-offset-5, .wp-defender .column.is-offset-5-tablet {
952
- margin-left: 41.66667%; }
953
  .wp-defender .column.is-6, .wp-defender .column.is-6-tablet {
954
  flex: none;
955
  width: 50%; }
@@ -957,14 +1021,14 @@
957
  margin-left: 50%; }
958
  .wp-defender .column.is-7, .wp-defender .column.is-7-tablet {
959
  flex: none;
960
- width: 58.33333%; }
961
  .wp-defender .column.is-offset-7, .wp-defender .column.is-offset-7-tablet {
962
- margin-left: 58.33333%; }
963
  .wp-defender .column.is-8, .wp-defender .column.is-8-tablet {
964
  flex: none;
965
- width: 66.66667%; }
966
  .wp-defender .column.is-offset-8, .wp-defender .column.is-offset-8-tablet {
967
- margin-left: 66.66667%; }
968
  .wp-defender .column.is-9, .wp-defender .column.is-9-tablet {
969
  flex: none;
970
  width: 75%; }
@@ -972,14 +1036,14 @@
972
  margin-left: 75%; }
973
  .wp-defender .column.is-10, .wp-defender .column.is-10-tablet {
974
  flex: none;
975
- width: 83.33333%; }
976
  .wp-defender .column.is-offset-10, .wp-defender .column.is-offset-10-tablet {
977
- margin-left: 83.33333%; }
978
  .wp-defender .column.is-11, .wp-defender .column.is-11-tablet {
979
  flex: none;
980
- width: 91.66667%; }
981
  .wp-defender .column.is-offset-11, .wp-defender .column.is-offset-11-tablet {
982
- margin-left: 91.66667%; }
983
  .wp-defender .column.is-12, .wp-defender .column.is-12-tablet {
984
  flex: none;
985
  width: 100%; }
@@ -1018,14 +1082,14 @@
1018
  margin-left: 25%; }
1019
  .wp-defender .column.is-1-desktop {
1020
  flex: none;
1021
- width: 8.33333%; }
1022
  .wp-defender .column.is-offset-1-desktop {
1023
- margin-left: 8.33333%; }
1024
  .wp-defender .column.is-2-desktop {
1025
  flex: none;
1026
- width: 16.66667%; }
1027
  .wp-defender .column.is-offset-2-desktop {
1028
- margin-left: 16.66667%; }
1029
  .wp-defender .column.is-3-desktop {
1030
  flex: none;
1031
  width: 25%; }
@@ -1033,14 +1097,14 @@
1033
  margin-left: 25%; }
1034
  .wp-defender .column.is-4-desktop {
1035
  flex: none;
1036
- width: 33.33333%; }
1037
  .wp-defender .column.is-offset-4-desktop {
1038
- margin-left: 33.33333%; }
1039
  .wp-defender .column.is-5-desktop {
1040
  flex: none;
1041
- width: 41.66667%; }
1042
  .wp-defender .column.is-offset-5-desktop {
1043
- margin-left: 41.66667%; }
1044
  .wp-defender .column.is-6-desktop {
1045
  flex: none;
1046
  width: 50%; }
@@ -1048,14 +1112,14 @@
1048
  margin-left: 50%; }
1049
  .wp-defender .column.is-7-desktop {
1050
  flex: none;
1051
- width: 58.33333%; }
1052
  .wp-defender .column.is-offset-7-desktop {
1053
- margin-left: 58.33333%; }
1054
  .wp-defender .column.is-8-desktop {
1055
  flex: none;
1056
- width: 66.66667%; }
1057
  .wp-defender .column.is-offset-8-desktop {
1058
- margin-left: 66.66667%; }
1059
  .wp-defender .column.is-9-desktop {
1060
  flex: none;
1061
  width: 75%; }
@@ -1063,14 +1127,14 @@
1063
  margin-left: 75%; }
1064
  .wp-defender .column.is-10-desktop {
1065
  flex: none;
1066
- width: 83.33333%; }
1067
  .wp-defender .column.is-offset-10-desktop {
1068
- margin-left: 83.33333%; }
1069
  .wp-defender .column.is-11-desktop {
1070
  flex: none;
1071
- width: 91.66667%; }
1072
  .wp-defender .column.is-offset-11-desktop {
1073
- margin-left: 91.66667%; }
1074
  .wp-defender .column.is-12-desktop {
1075
  flex: none;
1076
  width: 100%; }
@@ -1109,14 +1173,14 @@
1109
  margin-left: 25%; }
1110
  .wp-defender .column.is-1-widescreen {
1111
  flex: none;
1112
- width: 8.33333%; }
1113
  .wp-defender .column.is-offset-1-widescreen {
1114
- margin-left: 8.33333%; }
1115
  .wp-defender .column.is-2-widescreen {
1116
  flex: none;
1117
- width: 16.66667%; }
1118
  .wp-defender .column.is-offset-2-widescreen {
1119
- margin-left: 16.66667%; }
1120
  .wp-defender .column.is-3-widescreen {
1121
  flex: none;
1122
  width: 25%; }
@@ -1124,14 +1188,14 @@
1124
  margin-left: 25%; }
1125
  .wp-defender .column.is-4-widescreen {
1126
  flex: none;
1127
- width: 33.33333%; }
1128
  .wp-defender .column.is-offset-4-widescreen {
1129
- margin-left: 33.33333%; }
1130
  .wp-defender .column.is-5-widescreen {
1131
  flex: none;
1132
- width: 41.66667%; }
1133
  .wp-defender .column.is-offset-5-widescreen {
1134
- margin-left: 41.66667%; }
1135
  .wp-defender .column.is-6-widescreen {
1136
  flex: none;
1137
  width: 50%; }
@@ -1139,14 +1203,14 @@
1139
  margin-left: 50%; }
1140
  .wp-defender .column.is-7-widescreen {
1141
  flex: none;
1142
- width: 58.33333%; }
1143
  .wp-defender .column.is-offset-7-widescreen {
1144
- margin-left: 58.33333%; }
1145
  .wp-defender .column.is-8-widescreen {
1146
  flex: none;
1147
- width: 66.66667%; }
1148
  .wp-defender .column.is-offset-8-widescreen {
1149
- margin-left: 66.66667%; }
1150
  .wp-defender .column.is-9-widescreen {
1151
  flex: none;
1152
  width: 75%; }
@@ -1154,14 +1218,14 @@
1154
  margin-left: 75%; }
1155
  .wp-defender .column.is-10-widescreen {
1156
  flex: none;
1157
- width: 83.33333%; }
1158
  .wp-defender .column.is-offset-10-widescreen {
1159
- margin-left: 83.33333%; }
1160
  .wp-defender .column.is-11-widescreen {
1161
  flex: none;
1162
- width: 91.66667%; }
1163
  .wp-defender .column.is-offset-11-widescreen {
1164
- margin-left: 91.66667%; }
1165
  .wp-defender .column.is-12-widescreen {
1166
  flex: none;
1167
  width: 100%; }
@@ -1421,7 +1485,7 @@
1421
  -moz-border-radius: 7px;
1422
  border-radius: 7px;
1423
  position: relative;
1424
- padding: 15px 30px;
1425
  line-height: 30px;
1426
  display: block;
1427
  box-sizing: border-box;
@@ -1433,6 +1497,10 @@
1433
  .wp-defender .well form .columns {
1434
  padding: 10px 0;
1435
  box-shadow: none; }
 
 
 
 
1436
  .wp-defender .well.well-white {
1437
  background: white;
1438
  border: solid 1px #E6E6E6; }
@@ -1666,18 +1734,20 @@
1666
  border-left: 0;
1667
  border-top-left-radius: 0;
1668
  border-bottom-left-radius: 0; }
1669
- .wp-defender .bulk-nav .nav {
1670
- float: right; }
1671
- .wp-defender .bulk-nav .nav span {
1672
- margin-right: 10px; }
1673
- .wp-defender .bulk-nav .nav .button-group .button {
1674
- margin: 0;
1675
- box-shadow: none;
1676
- border: solid 1px #E6E6E6; }
1677
- .wp-defender .bulk-nav .nav .button-group .button:not(:first-child):not(:last-child) {
1678
- border-right: 0; }
1679
- .wp-defender .bulk-nav .nav .button-group .button:first-child {
1680
- border-right: 0; }
 
 
1681
  .wp-defender .upload-input input[type="text"] {
1682
  margin-right: 0;
1683
  border-right: 0;
@@ -2168,15 +2238,6 @@
2168
  .wp-defender .auditing #audit-table > table > tbody > tr > td:first-child {
2169
  width: 60%;
2170
  padding: 15px 30px; }
2171
- .wp-defender .auditing #audit-table > table > tbody > tr > td:first-child:before {
2172
- content: '';
2173
- background: url("../img/wpmudev-icon-warning.svg");
2174
- width: 16px;
2175
- height: 16px;
2176
- background-size: contain;
2177
- display: inline-block;
2178
- vertical-align: sub;
2179
- margin-right: 10px; }
2180
  .wp-defender .auditing #audit-table > table > tbody > tr > td:nth-child(2) {
2181
  white-space: nowrap; }
2182
  .wp-defender .auditing #audit-table > table > tbody > tr > td:nth-child(3) {
@@ -2248,62 +2309,106 @@
2248
  .wp-defender .auditing .audit-filter .events .event label {
2249
  display: inline-block;
2250
  padding: 0; }
 
 
 
2251
  .wp-defender .iplockout .row > .col-third {
2252
  width: 25%; }
2253
  .wp-defender .iplockout .row > .col-two-third {
2254
  width: 75%; }
 
 
2255
  .wp-defender .iplockout table {
2256
  width: 100%;
2257
  margin-bottom: 30px; }
2258
  .wp-defender .iplockout table td, .wp-defender .iplockout table th {
2259
  border-bottom: solid 1px #E6E6E6; }
 
 
 
 
2260
  .wp-defender .iplockout table thead th {
2261
  font-family: "Roboto Condensed", sans-serif;
2262
  text-align: left;
2263
  font-weight: bold;
2264
  color: #333;
2265
- padding-bottom: 7px; }
 
2266
  .wp-defender .iplockout table thead th a {
2267
  padding: 0;
2268
  margin: 0;
2269
  color: #333; }
2270
- .wp-defender .iplockout table tbody tr td {
2271
  padding: 7px 0;
2272
- font-size: 13px; }
2273
- .wp-defender .iplockout table tbody tr td:first-child {
2274
- width: 50%; }
2275
- .wp-defender .iplockout table tbody tr td:first-child:not(.colspanchange):before {
2276
- content: '';
2277
- background: #FFF5D5;
2278
- -webkit-border-radius: 2px;
2279
- -moz-border-radius: 2px;
2280
- border-radius: 2px;
2281
- font-size: 10px;
2282
- color: #333;
2283
- font-family: "Roboto Condensed", sans-serif;
2284
- font-weight: bold;
2285
- padding: 5px;
2286
- margin-right: 10px;
2287
- text-transform: uppercase; }
2288
- .wp-defender .iplockout table tbody tr.log-404 td:first-child:before {
2289
- content: "404"; }
2290
- .wp-defender .iplockout table tbody tr.log-login td:first-child:before {
2291
- content: "login"; }
2292
- .wp-defender .iplockout table tbody tr.log-404.lockout td:first-child:before, .wp-defender .iplockout table tbody tr.log-login.lockout td:first-child:before {
 
 
 
 
 
 
 
 
 
 
 
2293
  background: #FFE5E9; }
2294
- .wp-defender .iplockout .lockout-logs-filter > strong {
2295
- text-transform: uppercase;
2296
- display: block;
2297
- margin-bottom: 10px;
2298
- font-size: 13px;
2299
- font-weight: bold; }
2300
- .wp-defender .iplockout .lockout-logs-filter .columns {
2301
- margin-bottom: 10px;
2302
- border-bottom: none; }
2303
- .wp-defender .iplockout .lockout-logs-filter .columns .column {
2304
- padding-bottom: 0; }
2305
- .wp-defender .iplockout .lockout-logs-filter .columns .column input {
2306
- margin-bottom: 0; }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2307
  .wp-defender .iplockout .bulk-nav .bulk-action {
2308
  padding-left: 0;
2309
  width: 50%; }
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 {
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; }
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) {
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;
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
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%; }
1485
  -moz-border-radius: 7px;
1486
  border-radius: 7px;
1487
  position: relative;
1488
+ padding: 30px 30px;
1489
  line-height: 30px;
1490
  display: block;
1491
  box-sizing: border-box;
1497
  .wp-defender .well form .columns {
1498
  padding: 10px 0;
1499
  box-shadow: none; }
1500
+ .wp-defender .well .well-footer {
1501
+ border-top: 1px solid #ddd;
1502
+ padding: 30px 30px 0 30px;
1503
+ margin: 0 -30px; }
1504
  .wp-defender .well.well-white {
1505
  background: white;
1506
  border: solid 1px #E6E6E6; }
1734
  border-left: 0;
1735
  border-top-left-radius: 0;
1736
  border-bottom-left-radius: 0; }
1737
+ .wp-defender .nav {
1738
+ float: right; }
1739
+ .wp-defender .nav span {
1740
+ margin-right: 10px;
1741
+ font-size: 13px;
1742
+ color: #888; }
1743
+ .wp-defender .nav .button-group .button {
1744
+ margin: 0;
1745
+ box-shadow: none;
1746
+ border: solid 1px #E6E6E6; }
1747
+ .wp-defender .nav .button-group .button:not(:first-child):not(:last-child) {
1748
+ border-right: 0; }
1749
+ .wp-defender .nav .button-group .button:first-child {
1750
+ border-right: 0; }
1751
  .wp-defender .upload-input input[type="text"] {
1752
  margin-right: 0;
1753
  border-right: 0;
2238
  .wp-defender .auditing #audit-table > table > tbody > tr > td:first-child {
2239
  width: 60%;
2240
  padding: 15px 30px; }
 
 
 
 
 
 
 
 
 
2241
  .wp-defender .auditing #audit-table > table > tbody > tr > td:nth-child(2) {
2242
  white-space: nowrap; }
2243
  .wp-defender .auditing #audit-table > table > tbody > tr > td:nth-child(3) {
2309
  .wp-defender .auditing .audit-filter .events .event label {
2310
  display: inline-block;
2311
  padding: 0; }
2312
+ .wp-defender .auditing .banIP {
2313
+ display: inline-block;
2314
+ margin-right: 10px; }
2315
  .wp-defender .iplockout .row > .col-third {
2316
  width: 25%; }
2317
  .wp-defender .iplockout .row > .col-two-third {
2318
  width: 75%; }
2319
+ .wp-defender .iplockout .lockout-logs-container .lockout-logs-inner {
2320
+ margin: 0 -30px 0 -30px; }
2321
  .wp-defender .iplockout table {
2322
  width: 100%;
2323
  margin-bottom: 30px; }
2324
  .wp-defender .iplockout table td, .wp-defender .iplockout table th {
2325
  border-bottom: solid 1px #E6E6E6; }
2326
+ .wp-defender .iplockout table thead th:first-child {
2327
+ padding-left: 30px; }
2328
+ .wp-defender .iplockout table thead th:last-child {
2329
+ padding-right: 30px; }
2330
  .wp-defender .iplockout table thead th {
2331
  font-family: "Roboto Condensed", sans-serif;
2332
  text-align: left;
2333
  font-weight: bold;
2334
  color: #333;
2335
+ padding: 7px;
2336
+ text-transform: none; }
2337
  .wp-defender .iplockout table thead th a {
2338
  padding: 0;
2339
  margin: 0;
2340
  color: #333; }
2341
+ .wp-defender .iplockout table tbody tr:not(.table-info) td {
2342
  padding: 7px 0;
2343
+ font-size: 13px;
2344
+ font-weight: 500; }
2345
+ .wp-defender .iplockout table tbody tr:not(.table-info) td:first-child {
2346
+ width: 75%;
2347
+ padding-left: 30px;
2348
+ padding-right: 10px;
2349
+ box-shadow: inset 2px 0 0 0 #FECF2F;
2350
+ color: #333; }
2351
+ .wp-defender .iplockout table tbody tr:not(.table-info) td:first-child input[type="checkbox"] {
2352
+ margin-right: 10px; }
2353
+ .wp-defender .iplockout table tbody tr:not(.table-info) td:first-child .badge {
2354
+ background: #FFF5D5;
2355
+ -webkit-border-radius: 2px;
2356
+ -moz-border-radius: 2px;
2357
+ border-radius: 2px;
2358
+ font-size: 10px;
2359
+ color: #333;
2360
+ font-family: "Roboto Condensed", sans-serif;
2361
+ font-weight: bold;
2362
+ padding: 5px 10px;
2363
+ margin-right: 10px;
2364
+ text-transform: uppercase; }
2365
+ .wp-defender .iplockout table tbody tr:not(.table-info) td:first-child .badge.locked {
2366
+ background: #FFE5E9; }
2367
+ .wp-defender .iplockout table tbody tr:not(.table-info) td:last-child {
2368
+ padding-right: 30px; }
2369
+ .wp-defender .iplockout table tbody tr:not(.table-info) td {
2370
+ padding: 10px 0;
2371
+ cursor: pointer; }
2372
+ .wp-defender .iplockout table tbody tr:not(.table-info) td.action {
2373
+ text-align: center; }
2374
+ .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 {
2375
  background: #FFE5E9; }
2376
+ .wp-defender .iplockout table tbody tr:not(.table-info).opened {
2377
+ background: #F9F9F9; }
2378
+ .wp-defender .iplockout table tbody tr:not(.table-info).opened td {
2379
+ border-bottom: none !important; }
2380
+ .wp-defender .iplockout table tbody tr.table-info {
2381
+ background: #F9F9F9; }
2382
+ .wp-defender .iplockout table tbody tr.table-info td {
2383
+ padding: 15px 30px;
2384
+ box-shadow: inset 2px 0 0 0 #FECF2F;
2385
+ border-top: none; }
2386
+ .wp-defender .iplockout table tbody tr.table-info td p {
2387
+ margin-bottom: 5px;
2388
+ font-size: 13px;
2389
+ line-height: 18px; }
2390
+ .wp-defender .iplockout table tbody tr.table-info td p strong {
2391
+ font-weight: 500;
2392
+ color: #333; }
2393
+ .wp-defender .iplockout table tbody tr.table-info td .well form {
2394
+ display: inline-block;
2395
+ margin-right: 10px;
2396
+ margin-bottom: 5px; }
2397
+ .wp-defender .iplockout .lockout-logs-filter {
2398
+ padding: 0 30px; }
2399
+ .wp-defender .iplockout .lockout-logs-filter .columns {
2400
+ margin-bottom: 10px;
2401
+ border-bottom: none;
2402
+ box-shadow: none; }
2403
+ .wp-defender .iplockout .lockout-logs-filter .columns .column {
2404
+ padding-bottom: 0; }
2405
+ .wp-defender .iplockout .lockout-logs-filter .columns .column input {
2406
+ margin-bottom: 0; }
2407
+ .wp-defender .iplockout .lockout-logs-filter .columns .column strong {
2408
+ display: block;
2409
+ font-size: 12px;
2410
+ font-weight: bold;
2411
+ color: #888; }
2412
  .wp-defender .iplockout .bulk-nav .bulk-action {
2413
  padding-left: 0;
2414
  width: 50%; }
assets/css/styles.css.map ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "mappings": "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",
4
+ "sources": ["../scss/mixins.sass","../scss/override.scss","../scss/vars.scss","../scss/sale.scss","../scss/main.scss","../scss/misc.scss","../scss/helpers.sass","../scss/grid.sass","../scss/components.scss","../scss/dashboard.scss","../scss/hardener.scss","../scss/scan.scss","../scss/audit.scss","../scss/ip-lockout.scss","../scss/register-modal.scss","../scss/auth.scss","../scss/mobile.scss"],
5
+ "names": [],
6
+ "file": "styles.css"
7
+ }
assets/img/edit.svg ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="15px" height="16px" viewBox="0 0 15 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
4
+ <title>edit</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <g id="edit" transform="translate(0.000000, 1.000000)" fill="#000000">
9
+ <path d="M-1.73472348e-18,14.5126953 L1.39160156,9.94238281 L11.2646484,0.0546875 C11.3037111,0.0156248047 11.347656,-0.0136717773 11.3964844,-0.033203125 C11.4453127,-0.0527344727 11.4941404,-0.0625 11.5429687,-0.0625 C11.6015628,-0.0625 11.6552732,-0.0527344727 11.7041016,-0.033203125 C11.7529299,-0.0136717773 11.791992,0.0156248047 11.8212891,0.0546875 L14.8681641,3.11621094 C14.9072268,3.14550796 14.9365233,3.18457007 14.9560547,3.23339844 C14.975586,3.28222681 14.9853516,3.33593721 14.9853516,3.39453125 C14.9853516,3.44335962 14.975586,3.49218726 14.9560547,3.54101562 C14.9365233,3.58984399 14.9072268,3.63378887 14.8681641,3.67285156 L4.99511719,13.5458984 L0.424804687,14.9375 C0.415039014,14.9375 0.402832104,14.9399414 0.388183594,14.9448242 C0.373535083,14.9497071 0.361328174,14.9521484 0.3515625,14.9521484 C0.302734131,14.9521484 0.256347876,14.9423829 0.212402344,14.9228516 C0.168456812,14.9033202 0.131836084,14.8740236 0.102539062,14.8349609 C0.0634763672,14.8056639 0.0341797852,14.7690432 0.0146484375,14.7250977 C-0.00488291016,14.6811521 -0.0146484375,14.6347659 -0.0146484375,14.5859375 C-0.0146484375,14.5761718 -0.0122070557,14.5639649 -0.00732421875,14.5493164 C-0.00244138184,14.5346679 -1.73472348e-18,14.522461 -1.73472348e-18,14.5126953 Z M1.2890625,13.6337891 L4.21875,12.7548828 L2.18261719,10.71875 L1.2890625,13.6337891 Z" id="/"></path>
10
+ </g>
11
+ </g>
12
+ </svg>
assets/js/scripts.js CHANGED
@@ -56,6 +56,13 @@ jQuery(function ($) {
56
  });
57
  }
58
 
 
 
 
 
 
 
 
59
  if ($('#requirement').size() > 0) {
60
  WDP.showOverlay("#requirement", {
61
  class: 'no-close wp-defender wd-requirement'
@@ -186,4 +193,4 @@ Defender.createOverlay = function () {
186
  var div = jq('<div class="wd-overlay"/>');
187
  div.html('<i class="wdv-icon wdv-icon-fw wdv-icon-refresh spin"></i>');
188
  return div;
189
- };
56
  });
57
  }
58
 
59
+ $('.change-one-time-pass-email').click(function(){
60
+ WDP.showOverlay("#edit-one-time-password-email", {
61
+ title: defender_adtools.edit_email_title,
62
+ class: 'wd-one-time-pass-email'
63
+ });
64
+ });
65
+
66
  if ($('#requirement').size() > 0) {
67
  WDP.showOverlay("#requirement", {
68
  class: 'no-close wp-defender wd-requirement'
193
  var div = jq('<div class="wd-overlay"/>');
194
  div.html('<i class="wdv-icon wdv-icon-fw wdv-icon-refresh spin"></i>');
195
  return div;
196
+ };
changelog.txt CHANGED
@@ -4,6 +4,13 @@ Tested up to: 4.7.4
4
 
5
  Change Log:
6
 
 
 
 
 
 
 
 
7
  1.7.5 - 2018-07-02
8
  ----------------------------------------------------------------------
9
  - Fix: Report status missing in Hub Security tab
4
 
5
  Change Log:
6
 
7
+ 1.8 - 2018-10-04
8
+ ----------------------------------------------------------------------
9
+ - New: Hide the default WordPress login URLs with the new Mask Login Area feature, giving you enhanced protection from hackers and bots.
10
+ - New: Ability to force two-factor authentication for all users.
11
+ - Fix: Fixed a bug where file scanning would detect wp-config.php as suspicious.
12
+ - Fix: Fixed an issue where the lockout pages could be cached by external cache engines.
13
+
14
  1.7.5 - 2018-07-02
15
  ----------------------------------------------------------------------
16
  - Fix: Report status missing in Hub Security tab
languages/wpdef-default.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GNU General Public License (Version 2 - GPLv2).
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Defender Pro 1.8-beta6\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
- "POT-Creation-Date: 2018-04-06 03:29:50+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -152,17 +152,17 @@ 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:909 free/utils.php:706
156
  msgid "daily"
157
  msgstr ""
158
 
159
  #: app/behavior/report-free.php:132 app/behavior/report.php:227
160
- #: app/behavior/utils.php:912 free/utils.php:709
161
  msgid "weekly"
162
  msgstr ""
163
 
164
  #: app/behavior/report-free.php:135 app/behavior/report.php:230
165
- #: app/behavior/utils.php:915 free/utils.php:712
166
  msgid "monthly"
167
  msgstr ""
168
 
@@ -211,32 +211,32 @@ msgid ""
211
  msgstr ""
212
 
213
  #: app/behavior/utils.php:178 app/behavior/utils.php:187
214
- #: app/module/audit/view/table.php:86 app/module/audit/view/table.php:144
215
  #: free/utils.php:179 free/utils.php:188
216
  msgid "Guest"
217
  msgstr ""
218
 
219
- #: app/behavior/utils.php:737
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
- #: app/behavior/utils.php:738
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
- #: app/behavior/utils.php:739 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:768 app/module/audit/controller/main.php:144
235
- #: app/module/ip-lockout/controller/main.php:92
236
  msgid "Never"
237
  msgstr ""
238
 
239
- #: app/behavior/utils.php:892 free/utils.php:689
240
  msgid "Please upgrade to 5.3 or later"
241
  msgstr ""
242
 
@@ -244,8 +244,8 @@ msgstr ""
244
  msgid "Dashboard"
245
  msgstr ""
246
 
247
- #: app/controller/dashboard.php:324 app/controller/requirement.php:69
248
- #: app/module/ip-lockout/view/locked.php:75
249
  msgid "Defender"
250
  msgstr ""
251
 
@@ -281,6 +281,32 @@ msgstr ""
281
  msgid "Debug"
282
  msgstr ""
283
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  #: app/controller/requirement.php:37
285
  msgid "Required Modules"
286
  msgstr ""
@@ -314,7 +340,7 @@ msgid "Defender%s"
314
  msgstr ""
315
 
316
  #: app/module/advanced-tools/behavior/at-widget.php:18
317
- #: app/module/advanced-tools/controller/main.php:461
318
  #: app/module/advanced-tools/view/layouts/layout.php:5
319
  msgid "Advanced Tools"
320
  msgstr ""
@@ -395,83 +421,144 @@ msgstr ""
395
  msgid "Masking is currently active at <strong>%s</strong>"
396
  msgstr ""
397
 
398
- #: app/module/advanced-tools/component/mask-api.php:82
399
  msgid "The URL is invalid"
400
  msgstr ""
401
 
402
- #: app/module/advanced-tools/component/mask-api.php:85
403
- #: app/module/advanced-tools/component/mask-api.php:96
404
  msgid ""
405
  "A page already exists at this URL, please pick a unique page for your new "
406
  "login area."
407
  msgstr ""
408
 
409
- #: app/module/advanced-tools/controller/main.php:58
410
  #: app/module/advanced-tools/controller/mask-login.php:47
411
  msgid ""
412
  "We’ve detected a conflict with Jetpack’s Wordpress.com Log In feature. "
413
  "Please disable it and return to this page to continue setup."
414
  msgstr ""
415
 
416
- #: app/module/advanced-tools/controller/main.php:61
417
  #: app/module/advanced-tools/controller/mask-login.php:50
418
  msgid ""
419
  "We’ve detected a conflict with Theme my login. Please disable it and return "
420
  "to this page to continue setup."
421
  msgstr ""
422
 
423
- #: app/module/advanced-tools/controller/main.php:203
424
  msgid "Two Factor"
425
  msgstr ""
426
 
427
- #: app/module/advanced-tools/controller/main.php:226
428
  msgid "Your token is invalid"
429
  msgstr ""
430
 
431
- #: app/module/advanced-tools/controller/main.php:238
 
 
 
 
 
 
 
432
  msgid "Your code has been sent to your email."
433
  msgstr ""
434
 
435
- #: app/module/advanced-tools/controller/main.php:282
436
  msgid "Please input a valid OTP code"
437
  msgstr ""
438
 
439
- #: app/module/advanced-tools/controller/main.php:297
440
  msgid "Your OTP code is incorrect. Please try again."
441
  msgstr ""
442
 
443
- #: app/module/advanced-tools/controller/main.php:358
444
  msgid "Some error happen"
445
  msgstr ""
446
 
447
- #: app/module/advanced-tools/controller/main.php:395
448
  msgid "Whoops, the passcode you entered was incorrect or expired."
449
  msgstr ""
450
 
451
- #: app/module/advanced-tools/controller/main.php:532
 
 
 
 
452
  #: app/module/advanced-tools/controller/mask-login.php:191
453
  #: app/module/audit/controller/main.php:197
454
- #: app/module/ip-lockout/controller/main.php:700
455
  #: app/module/scan/controller/main.php:306
456
  msgid "Your settings have been updated."
457
  msgstr ""
458
 
459
- #: app/module/advanced-tools/controller/mask-login.php:137
460
- msgid "This feature is disabled"
 
461
  msgstr ""
462
 
463
- #: app/module/advanced-tools/controller/mask-login.php:169
464
- msgid "The Login URL is invalid."
465
  msgstr ""
466
 
467
- #: app/module/advanced-tools/controller/mask-login.php:177
468
- msgid "The Redirection URL is invalid."
 
 
 
 
 
 
 
 
469
  msgstr ""
470
 
471
  #: app/module/advanced-tools/controller/mask-login.php:183
472
  msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
473
  msgstr ""
474
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475
  #: app/module/advanced-tools/view/disabled.php:4
476
  #: app/module/advanced-tools/view/layouts/layout.php:26
477
  #: app/module/advanced-tools/view/login/disabled.php:6
@@ -503,12 +590,6 @@ msgstr ""
503
  msgid "Use the Google Authenticator app to sign in with a separate passcode."
504
  msgstr ""
505
 
506
- #: app/module/advanced-tools/view/login/disabled.php:31
507
- #: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
508
- #: app/module/scan/view/setting.php:158
509
- msgid "Cancel"
510
- msgstr ""
511
-
512
  #: app/module/advanced-tools/view/login/disabled.php:35
513
  msgid "1. Install the Verification app"
514
  msgstr ""
@@ -701,48 +782,68 @@ msgstr ""
701
 
702
  #: app/module/advanced-tools/view/main-free.php:147
703
  #: app/module/advanced-tools/view/main.php:157
704
- msgid "App Download"
705
  msgstr ""
706
 
707
  #: app/module/advanced-tools/view/main-free.php:149
708
  #: app/module/advanced-tools/view/main.php:159
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
709
  msgid "Need the app? Here’s links to the official Google Authenticator apps."
710
  msgstr ""
711
 
712
- #: app/module/advanced-tools/view/main-free.php:163
713
- #: app/module/advanced-tools/view/main.php:173
714
  msgid "Active Users"
715
  msgstr ""
716
 
717
- #: app/module/advanced-tools/view/main-free.php:165
718
- #: app/module/advanced-tools/view/main.php:175
719
  msgid ""
720
  "Here’s a quick link to see which of your users have enabled two-factor "
721
  "verification."
722
  msgstr ""
723
 
724
- #: app/module/advanced-tools/view/main-free.php:169
725
- #: app/module/advanced-tools/view/main.php:179
726
  msgid "<a href=\"%s\">View users</a> who have enabled this feature."
727
  msgstr ""
728
 
729
- #: app/module/advanced-tools/view/main-free.php:174
730
- #: app/module/advanced-tools/view/main-free.php:181
731
- #: app/module/advanced-tools/view/main.php:184
732
- #: app/module/advanced-tools/view/main.php:191
733
  #: app/module/advanced-tools/view/mask-login/enabled.php:78
734
  #: app/module/advanced-tools/view/mask-login/enabled.php:82
735
  #: app/module/audit/view/settings.php:10
736
  msgid "Deactivate"
737
  msgstr ""
738
 
739
- #: app/module/advanced-tools/view/main-free.php:176
740
- #: app/module/advanced-tools/view/main.php:186
741
  msgid "Disable two-factor authentication on your website."
742
  msgstr ""
743
 
744
- #: app/module/advanced-tools/view/main-free.php:189
745
- #: app/module/advanced-tools/view/main.php:199
746
  msgid "SAVE SETTINGS"
747
  msgstr ""
748
 
@@ -840,59 +941,66 @@ msgstr ""
840
  msgid "Please hold on, Defender will update Audit information soon..."
841
  msgstr ""
842
 
843
- #: app/module/audit/component/audit-api.php:58
844
- #: app/module/audit/component/audit-api.php:90
845
  msgid ""
846
  "Whoops, Defender had trouble loading up your event log. You can try a <a "
847
  "href='%s'class=''>​quick refresh</a>​ of this page or check back again "
848
  "later."
849
  msgstr ""
850
 
851
- #: app/module/audit/component/audit-api.php:115
852
  msgid "trashed"
853
  msgstr ""
854
 
855
- #: app/module/audit/component/audit-api.php:116
856
  msgid "updated"
857
  msgstr ""
858
 
859
- #: app/module/audit/component/audit-api.php:117
860
  msgid "deleted"
861
  msgstr ""
862
 
863
- #: app/module/audit/component/audit-api.php:118
864
  msgid "created"
865
  msgstr ""
866
 
867
- #: app/module/audit/component/audit-api.php:119
868
  msgid "restored"
869
  msgstr ""
870
 
871
- #: app/module/audit/component/audit-api.php:162
 
872
  msgid "year"
873
  msgstr ""
874
 
875
- #: app/module/audit/component/audit-api.php:163
 
876
  msgid "month"
877
  msgstr ""
878
 
879
- #: app/module/audit/component/audit-api.php:164
 
880
  msgid "week"
881
  msgstr ""
882
 
883
- #: app/module/audit/component/audit-api.php:165
 
884
  msgid "day"
885
  msgstr ""
886
 
887
- #: app/module/audit/component/audit-api.php:166
 
888
  msgid "hour"
889
  msgstr ""
890
 
891
- #: app/module/audit/component/audit-api.php:167
 
892
  msgid "minute"
893
  msgstr ""
894
 
895
- #: app/module/audit/component/audit-api.php:168
 
896
  msgid "second"
897
  msgstr ""
898
 
@@ -1384,7 +1492,7 @@ msgstr ""
1384
  #: app/module/scan/view/layouts/layout.php:132
1385
  #: app/module/scan/view/layouts/layout.php:149
1386
  #: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
1387
- #: app/view/settings.php:6 free/main-activator.php:157 main-activator.php:102
1388
  msgid "Settings"
1389
  msgstr ""
1390
 
@@ -1494,7 +1602,7 @@ msgid "password reset"
1494
  msgstr ""
1495
 
1496
  #: app/module/audit/controller/main-free.php:36
1497
- #: app/module/audit/controller/main.php:506
1498
  #: app/module/audit/view/pro-feature.php:22
1499
  #: app/module/ip-lockout/view/pro-feature.php:22
1500
  #: app/module/scan/view/pro-feature.php:22 app/view/activator.php:33
@@ -1502,32 +1610,36 @@ msgstr ""
1502
  msgid "Audit Logging"
1503
  msgstr ""
1504
 
1505
- #: app/module/audit/controller/main.php:84 app/module/audit/view/table.php:20
1506
  msgid "Summary"
1507
  msgstr ""
1508
 
1509
- #: app/module/audit/controller/main.php:85 app/module/audit/view/table.php:58
1510
- #: app/module/audit/view/table.php:154
 
1511
  msgid "Date / Time"
1512
  msgstr ""
1513
 
1514
- #: app/module/audit/controller/main.php:86 app/module/audit/view/table.php:54
1515
- #: app/module/audit/view/table.php:104
1516
  msgid "Context"
1517
  msgstr ""
1518
 
1519
- #: app/module/audit/controller/main.php:87 app/module/audit/view/table.php:55
1520
- #: app/module/audit/view/table.php:115
 
 
1521
  msgid "Type"
1522
  msgstr ""
1523
 
1524
- #: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:56
1525
- #: app/module/audit/view/table.php:126
 
1526
  msgid "IP address"
1527
  msgstr ""
1528
 
1529
- #: app/module/audit/controller/main.php:89 app/module/audit/view/table.php:57
1530
- #: app/module/audit/view/table.php:137
1531
  msgid "User"
1532
  msgstr ""
1533
 
@@ -1541,42 +1653,42 @@ msgstr ""
1541
  msgid "%s at %s"
1542
  msgstr ""
1543
 
1544
- #: app/module/audit/controller/main.php:346
1545
  msgid "Hi {USER_NAME},"
1546
  msgstr ""
1547
 
1548
- #: app/module/audit/controller/main.php:348
1549
  msgid ""
1550
  "It’s WP Defender here, reporting from the frontline with a quick update on "
1551
  "what’s been happening at <a href=\"%s\">%s</a>."
1552
  msgstr ""
1553
 
1554
- #: app/module/audit/controller/main.php:360
1555
  msgid "Event Type"
1556
  msgstr ""
1557
 
1558
- #: app/module/audit/controller/main.php:364
1559
  msgid "Action Summaries"
1560
  msgstr ""
1561
 
1562
- #: app/module/audit/controller/main.php:405
1563
  msgid "You can view the full audit report for your site here."
1564
  msgstr ""
1565
 
1566
- #: app/module/audit/controller/main.php:438
1567
  msgid "There were no events logged for %s"
1568
  msgstr ""
1569
 
1570
- #: app/module/audit/controller/main.php:443
1571
- #: app/module/audit/controller/main.php:469
1572
  msgid "Here’s what’s been happening at %s"
1573
  msgstr ""
1574
 
1575
- #: app/module/audit/controller/main.php:562 app/view/settings.php:209
1576
  msgid "Type a user’s name"
1577
  msgstr ""
1578
 
1579
- #: app/module/audit/controller/main.php:563
1580
  msgid "We did not find an user with this name..."
1581
  msgstr ""
1582
 
@@ -1647,8 +1759,8 @@ msgstr ""
1647
  msgid "<a href=\"%s\">Configure reporting preferences</a>"
1648
  msgstr ""
1649
 
1650
- #: app/module/audit/view/free.php:9 free/main-activator.php:118
1651
- #: free/main-activator.php:163
1652
  msgid "Upgrade"
1653
  msgstr ""
1654
 
@@ -1679,23 +1791,34 @@ msgstr ""
1679
  msgid "EVENT LOGS"
1680
  msgstr ""
1681
 
1682
- #: app/module/audit/view/main.php:4
 
1683
  msgid "Export CSV"
1684
  msgstr ""
1685
 
1686
- #: app/module/audit/view/main.php:7
1687
  msgid ""
1688
  "Here are your latest event logs showing what’s been happening behind the "
1689
  "scenes."
1690
  msgstr ""
1691
 
1692
- #: app/module/audit/view/main.php:11
1693
- #: app/module/ip-lockout/component/logs-table.php:148
1694
- #: app/module/ip-lockout/view/logging/enabled.php:5
1695
  msgid "Filter"
1696
  msgstr ""
1697
 
1698
- #: app/module/audit/view/main.php:38
 
 
 
 
 
 
 
 
 
 
1699
  msgid "Loading events..."
1700
  msgstr ""
1701
 
@@ -1871,38 +1994,35 @@ msgstr ""
1871
  msgid "UPDATE SETTINGS"
1872
  msgstr ""
1873
 
1874
- #: app/module/audit/view/table.php:7 app/module/audit/view/table.php:198
1875
  msgid "%d Results"
1876
  msgstr ""
1877
 
1878
- #: app/module/audit/view/table.php:21
1879
- msgid "Time"
1880
  msgstr ""
1881
 
1882
- #: app/module/audit/view/table.php:22
1883
- msgid "IP Address"
1884
  msgstr ""
1885
 
1886
- #: app/module/audit/view/table.php:34
1887
  msgid " ago"
1888
  msgstr ""
1889
 
1890
- #: app/module/audit/view/table.php:49
 
1891
  msgid "Description"
1892
  msgstr ""
1893
 
1894
- #: app/module/audit/view/table.php:168
1895
  msgid ""
1896
  "You can ban this IP address from being able to access your site, just be "
1897
  "sure it’s not a legitimate operation of a plugin or service that needs "
1898
  "access."
1899
  msgstr ""
1900
 
1901
- #: app/module/audit/view/table.php:178
1902
- msgid "Ban Ip"
1903
- msgstr ""
1904
-
1905
- #: app/module/audit/view/table.php:208
1906
  msgid "There have been no events logged in the selected time period."
1907
  msgstr ""
1908
 
@@ -2677,8 +2797,8 @@ msgid "Lockout notifications are disabled"
2677
  msgstr ""
2678
 
2679
  #: app/module/ip-lockout/component/login-protection-api.php:61
2680
- #: app/module/ip-lockout/controller/main.php:595
2681
- #: app/module/ip-lockout/controller/main.php:604
2682
  msgid ""
2683
  "You have been locked out by the administrator for attempting to login with "
2684
  "a banned username"
@@ -2700,191 +2820,234 @@ msgstr ""
2700
  msgid "Lockout occurred: Too many 404 requests for %s"
2701
  msgstr ""
2702
 
2703
- #: app/module/ip-lockout/component/login-protection-api.php:256
2704
- msgid "Ban"
2705
  msgstr ""
2706
 
2707
- #: app/module/ip-lockout/component/login-protection-api.php:258
2708
- msgid "Unban"
2709
  msgstr ""
2710
 
2711
- #: app/module/ip-lockout/component/login-protection-api.php:263
2712
- #: app/module/ip-lockout/view/blacklist/enabled.php:53
2713
- #: app/module/ip-lockout/view/detect-404/enabled.php:93
2714
- msgid "Whitelist"
2715
  msgstr ""
2716
 
2717
- #: app/module/ip-lockout/component/login-protection-api.php:265
2718
  msgid "Unwhitelist"
2719
  msgstr ""
2720
 
2721
- #: app/module/ip-lockout/component/logs-table.php:39
2722
- msgid "DETAILS"
2723
  msgstr ""
2724
 
2725
- #: app/module/ip-lockout/component/logs-table.php:40
2726
- msgid "DATE"
2727
  msgstr ""
2728
 
2729
- #: app/module/ip-lockout/component/logs-table.php:41
2730
- msgid "IP"
 
2731
  msgstr ""
2732
 
2733
- #: app/module/ip-lockout/component/logs-table.php:133
2734
- #: vendor/email-search.php:120 vendor/email-search.php:232
2735
- msgid "You"
2736
  msgstr ""
2737
 
2738
- #: app/module/ip-lockout/component/logs-table.php:153
2739
- msgid "Last 24 hours"
2740
  msgstr ""
2741
 
2742
- #: app/module/ip-lockout/component/logs-table.php:154
2743
- msgid "Last 7 days"
2744
  msgstr ""
2745
 
2746
- #: app/module/ip-lockout/component/logs-table.php:156
2747
- msgid "Last 30 days"
 
2748
  msgstr ""
2749
 
2750
- #: app/module/ip-lockout/component/logs-table.php:161
 
 
 
 
2751
  msgid "All"
2752
  msgstr ""
2753
 
2754
- #: app/module/ip-lockout/component/logs-table.php:164
2755
  #: app/module/ip-lockout/model/log-model-legacy.php:111
2756
- #: app/module/ip-lockout/model/log-model.php:65
2757
  msgid "Failed login attempts"
2758
  msgstr ""
2759
 
2760
- #: app/module/ip-lockout/component/logs-table.php:166
2761
  #: app/module/ip-lockout/model/log-model-legacy.php:112
2762
- #: app/module/ip-lockout/model/log-model.php:66
2763
  msgid "Login lockout"
2764
  msgstr ""
2765
 
2766
- #: app/module/ip-lockout/component/logs-table.php:168
 
2767
  #: app/module/ip-lockout/model/log-model-legacy.php:113
2768
  #: app/module/ip-lockout/model/log-model-legacy.php:114
2769
- #: app/module/ip-lockout/model/log-model.php:67
2770
- #: app/module/ip-lockout/model/log-model.php:68
2771
  msgid "404 error"
2772
  msgstr ""
2773
 
2774
- #: app/module/ip-lockout/component/logs-table.php:170
2775
  #: app/module/ip-lockout/model/log-model-legacy.php:115
2776
- #: app/module/ip-lockout/model/log-model.php:69
2777
  msgid "404 lockout"
2778
  msgstr ""
2779
 
2780
- #: app/module/ip-lockout/component/logs-table.php:200
 
 
 
 
 
 
 
 
2781
  msgid "No lockout events have been logged within the selected time period."
2782
  msgstr ""
2783
 
2784
- #: app/module/ip-lockout/component/logs-table.php:247
2785
- msgid "%s day"
2786
- msgid_plural "%s days"
2787
- msgstr[0] ""
2788
- msgstr[1] ""
2789
 
2790
- #: app/module/ip-lockout/component/logs-table.php:248
2791
- msgid "Your website's lockout log for the past %s."
2792
  msgstr ""
2793
 
2794
- #: app/module/ip-lockout/component/logs-table.php:252
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2795
  msgid "%s results"
2796
  msgstr ""
2797
 
2798
- #: app/module/ip-lockout/component/logs-table.php:343
2799
  msgid "Select All"
2800
  msgstr ""
2801
 
 
 
 
 
2802
  #: app/module/ip-lockout/controller/main.php:151
 
 
 
 
2803
  msgid "Your logs have been successfully deleted."
2804
  msgstr ""
2805
 
2806
- #: app/module/ip-lockout/controller/main.php:191
2807
  msgid ""
2808
  "IP %s has been added to your blacklist. You can control your blacklist in "
2809
  "<a href=\"%s\">IP Lockouts.</a>"
2810
  msgstr ""
2811
 
2812
- #: app/module/ip-lockout/controller/main.php:196
2813
  msgid "No record found"
2814
  msgstr ""
2815
 
2816
- #: app/module/ip-lockout/controller/main.php:221
2817
  msgid "Demo"
2818
  msgstr ""
2819
 
2820
- #: app/module/ip-lockout/controller/main.php:409
2821
  msgid "404 lockout alert for %s"
2822
  msgstr ""
2823
 
2824
- #: app/module/ip-lockout/controller/main.php:436
2825
  msgid "Login lockout alert for %s"
2826
  msgstr ""
2827
 
2828
- #: app/module/ip-lockout/controller/main.php:534
2829
  msgid "Failed login attempt with username %s"
2830
  msgstr ""
2831
 
2832
- #: app/module/ip-lockout/controller/main.php:597
2833
- #: app/module/ip-lockout/controller/main.php:607
2834
  msgid "%d login attempts remaining"
2835
  msgstr ""
2836
 
2837
- #: app/module/ip-lockout/controller/main.php:696
2838
  msgid ""
2839
  "Your settings have been updated, however some IPs were removed because "
2840
  "invalid format, or you blacklist yourself"
2841
  msgstr ""
2842
 
2843
- #: app/module/ip-lockout/controller/main.php:707
2844
  msgid "Login Protection has been activated."
2845
  msgstr ""
2846
 
2847
- #: app/module/ip-lockout/controller/main.php:709
2848
  msgid "Login Protection has been deactivated."
2849
  msgstr ""
2850
 
2851
- #: app/module/ip-lockout/controller/main.php:714
2852
  msgid "404 Detection has been activated."
2853
  msgstr ""
2854
 
2855
- #: app/module/ip-lockout/controller/main.php:716
2856
  msgid "404 Detection has been deactivated."
2857
  msgstr ""
2858
 
2859
- #: app/module/ip-lockout/controller/main.php:746 app/module/ip-lockout.php:35
2860
  #: app/view/activator-free.php:33 app/view/activator.php:49
2861
  msgid "IP Lockouts"
2862
  msgstr ""
2863
 
2864
- #: app/module/ip-lockout/controller/main.php:763
2865
- #: app/module/ip-lockout/controller/main.php:769
2866
  msgid "Your file is invalid!"
2867
  msgstr ""
2868
 
2869
- #: app/module/ip-lockout/controller/main.php:775
2870
  msgid "Your file content is invalid!"
2871
  msgstr ""
2872
 
2873
- #: app/module/ip-lockout/controller/main.php:784
2874
  msgid "Your whitelist/blacklist has been successfully imported."
2875
  msgstr ""
2876
 
2877
- #: app/module/ip-lockout/controller/main.php:969
2878
  msgid "Thanks for your patience. All set."
2879
  msgstr ""
2880
 
2881
  #: app/module/ip-lockout/model/log-model-legacy.php:79
2882
- #: app/module/ip-lockout/model/log-model.php:39
2883
  msgid ""
2884
  "Request for file <span class='log-text-table' tooltip='%s'>%s</span> which "
2885
  "doesn't exist"
2886
  msgstr ""
2887
 
 
 
 
 
2888
  #: app/module/ip-lockout/view/blacklist/enabled.php:3
2889
  #: app/module/ip-lockout/view/layouts/layout.php:62
2890
  msgid "IP Banning"
@@ -2931,6 +3094,11 @@ msgid ""
2931
  "blacklist. See a quick preview <a href=\"%s\">here</a>."
2932
  msgstr ""
2933
 
 
 
 
 
 
2934
  #: app/module/ip-lockout/view/blacklist/enabled.php:56
2935
  msgid ""
2936
  "Any IP addresses you list here will be exempt from the options you've "
@@ -3232,6 +3400,7 @@ msgstr ""
3232
 
3233
  #: app/module/ip-lockout/view/layouts/layout.php:66
3234
  #: app/module/ip-lockout/view/layouts/layout.php:90
 
3235
  msgid "Logs"
3236
  msgstr ""
3237
 
@@ -3259,8 +3428,20 @@ msgstr ""
3259
  msgid "Powered by"
3260
  msgstr ""
3261
 
3262
- #: app/module/ip-lockout/view/logging/enabled.php:3
3263
- msgid "LOCKOUT LOGS"
 
 
 
 
 
 
 
 
 
 
 
 
3264
  msgstr ""
3265
 
3266
  #: app/module/ip-lockout/view/login-lockouts/disabled.php:10
@@ -3540,9 +3721,9 @@ msgstr ""
3540
  #: app/module/scan/behavior/core-result.php:75
3541
  #: app/module/scan/behavior/core-result.php:406
3542
  #: app/module/scan/behavior/core-result.php:411
3543
- #: app/module/scan/behavior/pro/content-result.php:209
3544
- #: app/module/scan/behavior/pro/content-result.php:230
3545
  #: app/module/scan/behavior/pro/content-result.php:235
 
3546
  msgid "Defender doesn't have enough permission to remove this file"
3547
  msgstr ""
3548
 
@@ -3665,7 +3846,7 @@ msgstr ""
3665
  msgid "This will permanent delete this file, do you want to do this?"
3666
  msgstr ""
3667
 
3668
- #: app/module/scan/behavior/pro/content-result.php:203
3669
  msgid "wp-config.php can't be removed. Please remove the suspicious code manually."
3670
  msgstr ""
3671
 
@@ -3809,10 +3990,6 @@ msgstr ""
3809
  msgid "Fix Issue"
3810
  msgstr ""
3811
 
3812
- #: app/module/scan/component/result-table.php:207
3813
- msgid "Apply"
3814
- msgstr ""
3815
-
3816
  #: app/module/scan/component/result-table.php:211
3817
  msgid "%s Results"
3818
  msgstr ""
@@ -3825,19 +4002,19 @@ msgstr ""
3825
  msgid "A scan is already in progress"
3826
  msgstr ""
3827
 
3828
- #: app/module/scan/component/scan-api.php:192
3829
  msgid "No scan record exists"
3830
  msgstr ""
3831
 
3832
- #: app/module/scan/component/scan-api.php:232
3833
  msgid "Analyzing WordPress Core..."
3834
  msgstr ""
3835
 
3836
- #: app/module/scan/component/scan-api.php:235
3837
  msgid "Analyzing WordPress Content..."
3838
  msgstr ""
3839
 
3840
- #: app/module/scan/component/scan-api.php:238
3841
  msgid "Checking for any published vulnerabilities your plugins & themes..."
3842
  msgstr ""
3843
 
@@ -4153,15 +4330,6 @@ msgstr ""
4153
  msgid "All OK"
4154
  msgstr ""
4155
 
4156
- #: app/module/scan/view/setting.php:126 app/module/scan/view/setting.php:150
4157
- #: app/view/settings.php:229
4158
- msgid "Available variables"
4159
- msgstr ""
4160
-
4161
- #: app/module/scan/view/setting.php:139 app/module/scan/view/setting.php:159
4162
- msgid "Save Template"
4163
- msgstr ""
4164
-
4165
  #: app/module/scan.php:20
4166
  msgid "Scans"
4167
  msgstr ""
@@ -4392,10 +4560,6 @@ msgstr ""
4392
  msgid "A link back to the Scans tab of this website"
4393
  msgstr ""
4394
 
4395
- #: app/view/settings.php:275
4396
- msgid "Subject"
4397
- msgstr ""
4398
-
4399
  #: app/view/settings.php:290
4400
  msgid ""
4401
  "When an issue has been found during an automated scan, Defender will send "
@@ -4408,11 +4572,11 @@ msgid ""
4408
  "this email."
4409
  msgstr ""
4410
 
4411
- #: free/main-activator.php:66
4412
  msgid "Get Members!"
4413
  msgstr ""
4414
 
4415
- #: free/main-activator.php:74
4416
  msgid ""
4417
  "We're happy that you've chosen to install Defender! Are you interested in "
4418
  "how to make the most of this plugin? How would you like a quick 5 day email "
@@ -4420,18 +4584,18 @@ msgid ""
4420
  "bulletproof? Only the info you want, no subscription!"
4421
  msgstr ""
4422
 
4423
- #: free/main-activator.php:116
4424
  msgid ""
4425
  "%s, you now have access to Defender's pro features but you still have the "
4426
  "free version installed. Let's upgrade Defender and unlock all those juicy "
4427
  "features! &nbsp; %s"
4428
  msgstr ""
4429
 
4430
- #: free/main-activator.php:146
4431
  msgid "<br/>Something went wrong. Please try again later!"
4432
  msgstr ""
4433
 
4434
- #: free/main-activator.php:162 main-activator.php:107
4435
  msgid "Docs"
4436
  msgstr ""
4437
 
@@ -4471,7 +4635,7 @@ msgstr ""
4471
  msgid "Rate %s"
4472
  msgstr ""
4473
 
4474
- #: main-activator.php:91
4475
  msgid ""
4476
  "We noticed you have both the free and pro versions of Defender installed, "
4477
  "so we've automatically deactivated the free version for you."
2
  # This file is distributed under the GNU General Public License (Version 2 - GPLv2).
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Defender Pro 1.9-beta5\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
+ "POT-Creation-Date: 2018-05-23 04:19:52+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
152
  msgstr ""
153
 
154
  #: app/behavior/report-free.php:129 app/behavior/report.php:224
155
+ #: app/behavior/utils.php:913 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:916 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:919 free/utils.php:715
166
  msgid "monthly"
167
  msgstr ""
168
 
211
  msgstr ""
212
 
213
  #: app/behavior/utils.php:178 app/behavior/utils.php:187
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:896 free/utils.php:692
240
  msgid "Please upgrade to 5.3 or later"
241
  msgstr ""
242
 
244
  msgid "Dashboard"
245
  msgstr ""
246
 
247
+ #: app/controller/dashboard.php:324 app/controller/gdpr.php:16
248
+ #: app/controller/requirement.php:69 app/module/ip-lockout/view/locked.php:75
249
  msgid "Defender"
250
  msgstr ""
251
 
281
  msgid "Debug"
282
  msgstr ""
283
 
284
+ #: app/controller/gdpr.php:17
285
+ msgid "Plugin: %s"
286
+ msgstr ""
287
+
288
+ #: app/controller/gdpr.php:18
289
+ msgid "Third parties"
290
+ msgstr ""
291
+
292
+ #: app/controller/gdpr.php:19
293
+ msgid ""
294
+ "This site may be using WPMU DEV third-party cloud storage to store backups "
295
+ "of its audit logs where personal information is collected."
296
+ msgstr ""
297
+
298
+ #: app/controller/gdpr.php:20
299
+ msgid "Additional data"
300
+ msgstr ""
301
+
302
+ #: app/controller/gdpr.php:21
303
+ msgid ""
304
+ "This site creates and stores an activity log that capture the IP address, "
305
+ "username, email address and tracks user activity (like when a user makes a "
306
+ "comment). Information will be stored locally for 30 days and remotely for 1 "
307
+ "year. Information on remote logs cannot be cleared for security purposes."
308
+ msgstr ""
309
+
310
  #: app/controller/requirement.php:37
311
  msgid "Required Modules"
312
  msgstr ""
340
  msgstr ""
341
 
342
  #: app/module/advanced-tools/behavior/at-widget.php:18
343
+ #: app/module/advanced-tools/controller/main.php:479
344
  #: app/module/advanced-tools/view/layouts/layout.php:5
345
  msgid "Advanced Tools"
346
  msgstr ""
421
  msgid "Masking is currently active at <strong>%s</strong>"
422
  msgstr ""
423
 
424
+ #: app/module/advanced-tools/component/mask-api.php:88
425
  msgid "The URL is invalid"
426
  msgstr ""
427
 
428
+ #: app/module/advanced-tools/component/mask-api.php:93
429
+ #: app/module/advanced-tools/component/mask-api.php:104
430
  msgid ""
431
  "A page already exists at this URL, please pick a unique page for your new "
432
  "login area."
433
  msgstr ""
434
 
435
+ #: app/module/advanced-tools/controller/main.php:60
436
  #: app/module/advanced-tools/controller/mask-login.php:47
437
  msgid ""
438
  "We’ve detected a conflict with Jetpack’s Wordpress.com Log In feature. "
439
  "Please disable it and return to this page to continue setup."
440
  msgstr ""
441
 
442
+ #: app/module/advanced-tools/controller/main.php:63
443
  #: app/module/advanced-tools/controller/mask-login.php:50
444
  msgid ""
445
  "We’ve detected a conflict with Theme my login. Please disable it and return "
446
  "to this page to continue setup."
447
  msgstr ""
448
 
449
+ #: app/module/advanced-tools/controller/main.php:205
450
  msgid "Two Factor"
451
  msgstr ""
452
 
453
+ #: app/module/advanced-tools/controller/main.php:228
454
  msgid "Your token is invalid"
455
  msgstr ""
456
 
457
+ #: app/module/advanced-tools/controller/main.php:239
458
+ #: app/module/advanced-tools/controller/main.php:574
459
+ #: app/module/advanced-tools/controller/main.php:618
460
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:3
461
+ msgid "Your OTP code"
462
+ msgstr ""
463
+
464
+ #: app/module/advanced-tools/controller/main.php:256
465
  msgid "Your code has been sent to your email."
466
  msgstr ""
467
 
468
+ #: app/module/advanced-tools/controller/main.php:300
469
  msgid "Please input a valid OTP code"
470
  msgstr ""
471
 
472
+ #: app/module/advanced-tools/controller/main.php:315
473
  msgid "Your OTP code is incorrect. Please try again."
474
  msgstr ""
475
 
476
+ #: app/module/advanced-tools/controller/main.php:376
477
  msgid "Some error happen"
478
  msgstr ""
479
 
480
+ #: app/module/advanced-tools/controller/main.php:413
481
  msgid "Whoops, the passcode you entered was incorrect or expired."
482
  msgstr ""
483
 
484
+ #: app/module/advanced-tools/controller/main.php:527
485
+ msgid "Edit Email"
486
+ msgstr ""
487
+
488
+ #: app/module/advanced-tools/controller/main.php:554
489
  #: app/module/advanced-tools/controller/mask-login.php:191
490
  #: app/module/audit/controller/main.php:197
491
+ #: app/module/ip-lockout/controller/main.php:738
492
  #: app/module/scan/controller/main.php:306
493
  msgid "Your settings have been updated."
494
  msgstr ""
495
 
496
+ #: app/module/advanced-tools/controller/main.php:580
497
+ #: app/module/advanced-tools/controller/main.php:624
498
+ msgid "%s variable was not found in mail body."
499
  msgstr ""
500
 
501
+ #: app/module/advanced-tools/controller/main.php:592
502
+ msgid "Email settings has been saved."
503
  msgstr ""
504
 
505
+ #: app/module/advanced-tools/controller/main.php:641
506
+ msgid "Test email has been sent to your email."
507
+ msgstr ""
508
+
509
+ #: app/module/advanced-tools/controller/main.php:645
510
+ msgid "Test email failed."
511
+ msgstr ""
512
+
513
+ #: app/module/advanced-tools/controller/mask-login.php:137
514
+ msgid "This feature is disabled"
515
  msgstr ""
516
 
517
  #: app/module/advanced-tools/controller/mask-login.php:183
518
  msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
519
  msgstr ""
520
 
521
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:10
522
+ msgid ""
523
+ "This email sends a temporary passcode when the user can't access their "
524
+ "phone."
525
+ msgstr ""
526
+
527
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:16
528
+ #: app/view/settings.php:275
529
+ msgid "Subject"
530
+ msgstr ""
531
+
532
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:20
533
+ msgid "Sender"
534
+ msgstr ""
535
+
536
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:26
537
+ msgid "Body"
538
+ msgstr ""
539
+
540
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:32
541
+ #: app/module/scan/view/setting.php:126 app/module/scan/view/setting.php:150
542
+ #: app/view/settings.php:229
543
+ msgid "Available variables"
544
+ msgstr ""
545
+
546
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:39
547
+ #: app/module/advanced-tools/view/login/disabled.php:31
548
+ #: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
549
+ #: app/module/scan/view/setting.php:158
550
+ msgid "Cancel"
551
+ msgstr ""
552
+
553
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:40
554
+ #: app/module/scan/view/setting.php:139 app/module/scan/view/setting.php:159
555
+ msgid "Save Template"
556
+ msgstr ""
557
+
558
+ #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:41
559
+ msgid "Send Test"
560
+ msgstr ""
561
+
562
  #: app/module/advanced-tools/view/disabled.php:4
563
  #: app/module/advanced-tools/view/layouts/layout.php:26
564
  #: app/module/advanced-tools/view/login/disabled.php:6
590
  msgid "Use the Google Authenticator app to sign in with a separate passcode."
591
  msgstr ""
592
 
 
 
 
 
 
 
593
  #: app/module/advanced-tools/view/login/disabled.php:35
594
  msgid "1. Install the Verification app"
595
  msgstr ""
782
 
783
  #: app/module/advanced-tools/view/main-free.php:147
784
  #: app/module/advanced-tools/view/main.php:157
785
+ msgid "Emails"
786
  msgstr ""
787
 
788
  #: app/module/advanced-tools/view/main-free.php:149
789
  #: app/module/advanced-tools/view/main.php:159
790
+ msgid "Customize the default copy for emails the two-factor feature sends to users."
791
+ msgstr ""
792
+
793
+ #: app/module/advanced-tools/view/main-free.php:155
794
+ #: app/module/advanced-tools/view/main.php:165
795
+ msgid "Email"
796
+ msgstr ""
797
+
798
+ #: app/module/advanced-tools/view/main-free.php:157
799
+ #: app/module/advanced-tools/view/main.php:167
800
+ msgid "Lost phone one time password"
801
+ msgstr ""
802
+
803
+ #: app/module/advanced-tools/view/main-free.php:164
804
+ #: app/module/advanced-tools/view/main.php:174
805
+ msgid "App Download"
806
+ msgstr ""
807
+
808
+ #: app/module/advanced-tools/view/main-free.php:166
809
+ #: app/module/advanced-tools/view/main.php:176
810
  msgid "Need the app? Here’s links to the official Google Authenticator apps."
811
  msgstr ""
812
 
813
+ #: app/module/advanced-tools/view/main-free.php:180
814
+ #: app/module/advanced-tools/view/main.php:190
815
  msgid "Active Users"
816
  msgstr ""
817
 
818
+ #: app/module/advanced-tools/view/main-free.php:182
819
+ #: app/module/advanced-tools/view/main.php:192
820
  msgid ""
821
  "Here’s a quick link to see which of your users have enabled two-factor "
822
  "verification."
823
  msgstr ""
824
 
825
+ #: app/module/advanced-tools/view/main-free.php:186
826
+ #: app/module/advanced-tools/view/main.php:196
827
  msgid "<a href=\"%s\">View users</a> who have enabled this feature."
828
  msgstr ""
829
 
830
+ #: app/module/advanced-tools/view/main-free.php:191
831
+ #: app/module/advanced-tools/view/main-free.php:198
832
+ #: app/module/advanced-tools/view/main.php:201
833
+ #: app/module/advanced-tools/view/main.php:208
834
  #: app/module/advanced-tools/view/mask-login/enabled.php:78
835
  #: app/module/advanced-tools/view/mask-login/enabled.php:82
836
  #: app/module/audit/view/settings.php:10
837
  msgid "Deactivate"
838
  msgstr ""
839
 
840
+ #: app/module/advanced-tools/view/main-free.php:193
841
+ #: app/module/advanced-tools/view/main.php:203
842
  msgid "Disable two-factor authentication on your website."
843
  msgstr ""
844
 
845
+ #: app/module/advanced-tools/view/main-free.php:206
846
+ #: app/module/advanced-tools/view/main.php:216
847
  msgid "SAVE SETTINGS"
848
  msgstr ""
849
 
941
  msgid "Please hold on, Defender will update Audit information soon..."
942
  msgstr ""
943
 
944
+ #: app/module/audit/component/audit-api.php:57
945
+ #: app/module/audit/component/audit-api.php:89
946
  msgid ""
947
  "Whoops, Defender had trouble loading up your event log. You can try a <a "
948
  "href='%s'class=''>​quick refresh</a>​ of this page or check back again "
949
  "later."
950
  msgstr ""
951
 
952
+ #: app/module/audit/component/audit-api.php:114
953
  msgid "trashed"
954
  msgstr ""
955
 
956
+ #: app/module/audit/component/audit-api.php:115
957
  msgid "updated"
958
  msgstr ""
959
 
960
+ #: app/module/audit/component/audit-api.php:116
961
  msgid "deleted"
962
  msgstr ""
963
 
964
+ #: app/module/audit/component/audit-api.php:117
965
  msgid "created"
966
  msgstr ""
967
 
968
+ #: app/module/audit/component/audit-api.php:118
969
  msgid "restored"
970
  msgstr ""
971
 
972
+ #: app/module/audit/component/audit-api.php:161
973
+ #: app/module/ip-lockout/component/login-protection-api.php:248
974
  msgid "year"
975
  msgstr ""
976
 
977
+ #: app/module/audit/component/audit-api.php:162
978
+ #: app/module/ip-lockout/component/login-protection-api.php:249
979
  msgid "month"
980
  msgstr ""
981
 
982
+ #: app/module/audit/component/audit-api.php:163
983
+ #: app/module/ip-lockout/component/login-protection-api.php:250
984
  msgid "week"
985
  msgstr ""
986
 
987
+ #: app/module/audit/component/audit-api.php:164
988
+ #: app/module/ip-lockout/component/login-protection-api.php:251
989
  msgid "day"
990
  msgstr ""
991
 
992
+ #: app/module/audit/component/audit-api.php:165
993
+ #: app/module/ip-lockout/component/login-protection-api.php:252
994
  msgid "hour"
995
  msgstr ""
996
 
997
+ #: app/module/audit/component/audit-api.php:166
998
+ #: app/module/ip-lockout/component/login-protection-api.php:253
999
  msgid "minute"
1000
  msgstr ""
1001
 
1002
+ #: app/module/audit/component/audit-api.php:167
1003
+ #: app/module/ip-lockout/component/login-protection-api.php:254
1004
  msgid "second"
1005
  msgstr ""
1006
 
1492
  #: app/module/scan/view/layouts/layout.php:132
1493
  #: app/module/scan/view/layouts/layout.php:149
1494
  #: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
1495
+ #: app/view/settings.php:6 free/main-activator.php:165 main-activator.php:103
1496
  msgid "Settings"
1497
  msgstr ""
1498
 
1602
  msgstr ""
1603
 
1604
  #: app/module/audit/controller/main-free.php:36
1605
+ #: app/module/audit/controller/main.php:513
1606
  #: app/module/audit/view/pro-feature.php:22
1607
  #: app/module/ip-lockout/view/pro-feature.php:22
1608
  #: app/module/scan/view/pro-feature.php:22 app/view/activator.php:33
1610
  msgid "Audit Logging"
1611
  msgstr ""
1612
 
1613
+ #: app/module/audit/controller/main.php:84
1614
  msgid "Summary"
1615
  msgstr ""
1616
 
1617
+ #: app/module/audit/controller/main.php:85 app/module/audit/view/table.php:50
1618
+ #: app/module/audit/view/table.php:146
1619
+ #: app/module/ip-lockout/controller/main.php:148
1620
  msgid "Date / Time"
1621
  msgstr ""
1622
 
1623
+ #: app/module/audit/controller/main.php:86 app/module/audit/view/table.php:46
1624
+ #: app/module/audit/view/table.php:96
1625
  msgid "Context"
1626
  msgstr ""
1627
 
1628
+ #: app/module/audit/controller/main.php:87 app/module/audit/view/table.php:47
1629
+ #: app/module/audit/view/table.php:107
1630
+ #: app/module/ip-lockout/component/logs-table.php:274
1631
+ #: app/module/ip-lockout/controller/main.php:149
1632
  msgid "Type"
1633
  msgstr ""
1634
 
1635
+ #: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:48
1636
+ #: app/module/audit/view/table.php:118
1637
+ #: app/module/ip-lockout/controller/main.php:150
1638
  msgid "IP address"
1639
  msgstr ""
1640
 
1641
+ #: app/module/audit/controller/main.php:89 app/module/audit/view/table.php:49
1642
+ #: app/module/audit/view/table.php:129
1643
  msgid "User"
1644
  msgstr ""
1645
 
1653
  msgid "%s at %s"
1654
  msgstr ""
1655
 
1656
+ #: app/module/audit/controller/main.php:353
1657
  msgid "Hi {USER_NAME},"
1658
  msgstr ""
1659
 
1660
+ #: app/module/audit/controller/main.php:355
1661
  msgid ""
1662
  "It’s WP Defender here, reporting from the frontline with a quick update on "
1663
  "what’s been happening at <a href=\"%s\">%s</a>."
1664
  msgstr ""
1665
 
1666
+ #: app/module/audit/controller/main.php:367
1667
  msgid "Event Type"
1668
  msgstr ""
1669
 
1670
+ #: app/module/audit/controller/main.php:371
1671
  msgid "Action Summaries"
1672
  msgstr ""
1673
 
1674
+ #: app/module/audit/controller/main.php:412
1675
  msgid "You can view the full audit report for your site here."
1676
  msgstr ""
1677
 
1678
+ #: app/module/audit/controller/main.php:445
1679
  msgid "There were no events logged for %s"
1680
  msgstr ""
1681
 
1682
+ #: app/module/audit/controller/main.php:450
1683
+ #: app/module/audit/controller/main.php:476
1684
  msgid "Here’s what’s been happening at %s"
1685
  msgstr ""
1686
 
1687
+ #: app/module/audit/controller/main.php:569 app/view/settings.php:209
1688
  msgid "Type a user’s name"
1689
  msgstr ""
1690
 
1691
+ #: app/module/audit/controller/main.php:570
1692
  msgid "We did not find an user with this name..."
1693
  msgstr ""
1694
 
1759
  msgid "<a href=\"%s\">Configure reporting preferences</a>"
1760
  msgstr ""
1761
 
1762
+ #: app/module/audit/view/free.php:9 free/main-activator.php:126
1763
+ #: free/main-activator.php:171
1764
  msgid "Upgrade"
1765
  msgstr ""
1766
 
1791
  msgid "EVENT LOGS"
1792
  msgstr ""
1793
 
1794
+ #: app/module/audit/view/main.php:5
1795
+ #: app/module/ip-lockout/view/logging/enabled.php:4
1796
  msgid "Export CSV"
1797
  msgstr ""
1798
 
1799
+ #: app/module/audit/view/main.php:8
1800
  msgid ""
1801
  "Here are your latest event logs showing what’s been happening behind the "
1802
  "scenes."
1803
  msgstr ""
1804
 
1805
+ #: app/module/audit/view/main.php:21 app/module/audit/view/main.php:27
1806
+ #: app/module/audit/view/main.php:78
1807
+ #: app/module/ip-lockout/component/logs-table.php:336
1808
  msgid "Filter"
1809
  msgstr ""
1810
 
1811
+ #: app/module/audit/view/main.php:36
1812
+ msgid "192.168.1.1"
1813
+ msgstr ""
1814
+
1815
+ #: app/module/audit/view/main.php:58
1816
+ #: app/module/ip-lockout/component/logs-table.php:189
1817
+ #: app/module/scan/component/result-table.php:207
1818
+ msgid "Apply"
1819
+ msgstr ""
1820
+
1821
+ #: app/module/audit/view/main.php:65
1822
  msgid "Loading events..."
1823
  msgstr ""
1824
 
1994
  msgid "UPDATE SETTINGS"
1995
  msgstr ""
1996
 
1997
+ #: app/module/audit/view/table.php:4
1998
  msgid "%d Results"
1999
  msgstr ""
2000
 
2001
+ #: app/module/audit/view/table.php:16
2002
+ msgid "Event Summary"
2003
  msgstr ""
2004
 
2005
+ #: app/module/audit/view/table.php:17
2006
+ msgid "Date"
2007
  msgstr ""
2008
 
2009
+ #: app/module/audit/view/table.php:29
2010
  msgid " ago"
2011
  msgstr ""
2012
 
2013
+ #: app/module/audit/view/table.php:41
2014
+ #: app/module/ip-lockout/component/logs-table.php:264
2015
  msgid "Description"
2016
  msgstr ""
2017
 
2018
+ #: app/module/audit/view/table.php:158
2019
  msgid ""
2020
  "You can ban this IP address from being able to access your site, just be "
2021
  "sure it’s not a legitimate operation of a plugin or service that needs "
2022
  "access."
2023
  msgstr ""
2024
 
2025
+ #: app/module/audit/view/table.php:183
 
 
 
 
2026
  msgid "There have been no events logged in the selected time period."
2027
  msgstr ""
2028
 
2797
  msgstr ""
2798
 
2799
  #: app/module/ip-lockout/component/login-protection-api.php:61
2800
+ #: app/module/ip-lockout/controller/main.php:633
2801
+ #: app/module/ip-lockout/controller/main.php:642
2802
  msgid ""
2803
  "You have been locked out by the administrator for attempting to login with "
2804
  "a banned username"
2820
  msgid "Lockout occurred: Too many 404 requests for %s"
2821
  msgstr ""
2822
 
2823
+ #: app/module/ip-lockout/component/login-protection-api.php:283
2824
+ msgid "Ban IP"
2825
  msgstr ""
2826
 
2827
+ #: app/module/ip-lockout/component/login-protection-api.php:285
2828
+ msgid "Unban IP"
2829
  msgstr ""
2830
 
2831
+ #: app/module/ip-lockout/component/login-protection-api.php:290
2832
+ msgid "Add Whitelist"
 
 
2833
  msgstr ""
2834
 
2835
+ #: app/module/ip-lockout/component/login-protection-api.php:292
2836
  msgid "Unwhitelist"
2837
  msgstr ""
2838
 
2839
+ #: app/module/ip-lockout/component/login-protection-api.php:568
2840
+ msgid "Is whitelisted"
2841
  msgstr ""
2842
 
2843
+ #: app/module/ip-lockout/component/login-protection-api.php:571
2844
+ msgid "Is blacklisted"
2845
  msgstr ""
2846
 
2847
+ #: app/module/ip-lockout/component/login-protection-api.php:578
2848
+ #: app/module/ip-lockout/component/login-protection-api.php:584
2849
+ msgid "Not banned"
2850
  msgstr ""
2851
 
2852
+ #: app/module/ip-lockout/component/login-protection-api.php:582
2853
+ msgid "Banned"
 
2854
  msgstr ""
2855
 
2856
+ #: app/module/ip-lockout/component/logs-table.php:40
2857
+ msgid "Details"
2858
  msgstr ""
2859
 
2860
+ #: app/module/ip-lockout/component/logs-table.php:41
2861
+ msgid "Time"
2862
  msgstr ""
2863
 
2864
+ #: app/module/ip-lockout/component/logs-table.php:143
2865
+ #: vendor/email-search.php:120 vendor/email-search.php:232
2866
+ msgid "You"
2867
  msgstr ""
2868
 
2869
+ #: app/module/ip-lockout/component/logs-table.php:164
2870
+ msgid "Lockout Type"
2871
+ msgstr ""
2872
+
2873
+ #: app/module/ip-lockout/component/logs-table.php:167
2874
  msgid "All"
2875
  msgstr ""
2876
 
2877
+ #: app/module/ip-lockout/component/logs-table.php:170
2878
  #: app/module/ip-lockout/model/log-model-legacy.php:111
2879
+ #: app/module/ip-lockout/model/log-model.php:70
2880
  msgid "Failed login attempts"
2881
  msgstr ""
2882
 
2883
+ #: app/module/ip-lockout/component/logs-table.php:172
2884
  #: app/module/ip-lockout/model/log-model-legacy.php:112
2885
+ #: app/module/ip-lockout/model/log-model.php:71
2886
  msgid "Login lockout"
2887
  msgstr ""
2888
 
2889
+ #: app/module/ip-lockout/component/logs-table.php:174
2890
+ #: app/module/ip-lockout/component/logs-table.php:276
2891
  #: app/module/ip-lockout/model/log-model-legacy.php:113
2892
  #: app/module/ip-lockout/model/log-model-legacy.php:114
2893
+ #: app/module/ip-lockout/model/log-model.php:72
2894
+ #: app/module/ip-lockout/model/log-model.php:73
2895
  msgid "404 error"
2896
  msgstr ""
2897
 
2898
+ #: app/module/ip-lockout/component/logs-table.php:176
2899
  #: app/module/ip-lockout/model/log-model-legacy.php:115
2900
+ #: app/module/ip-lockout/model/log-model.php:74
2901
  msgid "404 lockout"
2902
  msgstr ""
2903
 
2904
+ #: app/module/ip-lockout/component/logs-table.php:181
2905
+ msgid "Ip Address"
2906
+ msgstr ""
2907
+
2908
+ #: app/module/ip-lockout/component/logs-table.php:184
2909
+ msgid "Enter an IP address"
2910
+ msgstr ""
2911
+
2912
+ #: app/module/ip-lockout/component/logs-table.php:215
2913
  msgid "No lockout events have been logged within the selected time period."
2914
  msgstr ""
2915
 
2916
+ #: app/module/ip-lockout/component/logs-table.php:267
2917
+ msgid "%s tried to access file %s"
2918
+ msgstr ""
 
 
2919
 
2920
+ #: app/module/ip-lockout/component/logs-table.php:269
2921
+ msgid "%s tried to login with username %s"
2922
  msgstr ""
2923
 
2924
+ #: app/module/ip-lockout/component/logs-table.php:276
2925
+ msgid "Login failed"
2926
+ msgstr ""
2927
+
2928
+ #: app/module/ip-lockout/component/logs-table.php:282
2929
+ msgid "IP"
2930
+ msgstr ""
2931
+
2932
+ #: app/module/ip-lockout/component/logs-table.php:288
2933
+ msgid "Date/Time"
2934
+ msgstr ""
2935
+
2936
+ #: app/module/ip-lockout/component/logs-table.php:294
2937
+ msgid "Ban Status"
2938
+ msgstr ""
2939
+
2940
+ #: app/module/ip-lockout/component/logs-table.php:307
2941
+ msgid ""
2942
+ "Note: Make sure this IP is not a legitimate operation, banning the IP will "
2943
+ "result in being permanently locked out from accessing your website."
2944
+ msgstr ""
2945
+
2946
+ #: app/module/ip-lockout/component/logs-table.php:328
2947
  msgid "%s results"
2948
  msgstr ""
2949
 
2950
+ #: app/module/ip-lockout/component/logs-table.php:425
2951
  msgid "Select All"
2952
  msgstr ""
2953
 
2954
+ #: app/module/ip-lockout/controller/main.php:147
2955
+ msgid "Log"
2956
+ msgstr ""
2957
+
2958
  #: app/module/ip-lockout/controller/main.php:151
2959
+ msgid "Status"
2960
+ msgstr ""
2961
+
2962
+ #: app/module/ip-lockout/controller/main.php:186
2963
  msgid "Your logs have been successfully deleted."
2964
  msgstr ""
2965
 
2966
+ #: app/module/ip-lockout/controller/main.php:228
2967
  msgid ""
2968
  "IP %s has been added to your blacklist. You can control your blacklist in "
2969
  "<a href=\"%s\">IP Lockouts.</a>"
2970
  msgstr ""
2971
 
2972
+ #: app/module/ip-lockout/controller/main.php:234
2973
  msgid "No record found"
2974
  msgstr ""
2975
 
2976
+ #: app/module/ip-lockout/controller/main.php:259
2977
  msgid "Demo"
2978
  msgstr ""
2979
 
2980
+ #: app/module/ip-lockout/controller/main.php:447
2981
  msgid "404 lockout alert for %s"
2982
  msgstr ""
2983
 
2984
+ #: app/module/ip-lockout/controller/main.php:474
2985
  msgid "Login lockout alert for %s"
2986
  msgstr ""
2987
 
2988
+ #: app/module/ip-lockout/controller/main.php:572
2989
  msgid "Failed login attempt with username %s"
2990
  msgstr ""
2991
 
2992
+ #: app/module/ip-lockout/controller/main.php:635
2993
+ #: app/module/ip-lockout/controller/main.php:645
2994
  msgid "%d login attempts remaining"
2995
  msgstr ""
2996
 
2997
+ #: app/module/ip-lockout/controller/main.php:734
2998
  msgid ""
2999
  "Your settings have been updated, however some IPs were removed because "
3000
  "invalid format, or you blacklist yourself"
3001
  msgstr ""
3002
 
3003
+ #: app/module/ip-lockout/controller/main.php:745
3004
  msgid "Login Protection has been activated."
3005
  msgstr ""
3006
 
3007
+ #: app/module/ip-lockout/controller/main.php:747
3008
  msgid "Login Protection has been deactivated."
3009
  msgstr ""
3010
 
3011
+ #: app/module/ip-lockout/controller/main.php:752
3012
  msgid "404 Detection has been activated."
3013
  msgstr ""
3014
 
3015
+ #: app/module/ip-lockout/controller/main.php:754
3016
  msgid "404 Detection has been deactivated."
3017
  msgstr ""
3018
 
3019
+ #: app/module/ip-lockout/controller/main.php:784 app/module/ip-lockout.php:35
3020
  #: app/view/activator-free.php:33 app/view/activator.php:49
3021
  msgid "IP Lockouts"
3022
  msgstr ""
3023
 
3024
+ #: app/module/ip-lockout/controller/main.php:801
3025
+ #: app/module/ip-lockout/controller/main.php:807
3026
  msgid "Your file is invalid!"
3027
  msgstr ""
3028
 
3029
+ #: app/module/ip-lockout/controller/main.php:813
3030
  msgid "Your file content is invalid!"
3031
  msgstr ""
3032
 
3033
+ #: app/module/ip-lockout/controller/main.php:822
3034
  msgid "Your whitelist/blacklist has been successfully imported."
3035
  msgstr ""
3036
 
3037
+ #: app/module/ip-lockout/controller/main.php:1007
3038
  msgid "Thanks for your patience. All set."
3039
  msgstr ""
3040
 
3041
  #: app/module/ip-lockout/model/log-model-legacy.php:79
 
3042
  msgid ""
3043
  "Request for file <span class='log-text-table' tooltip='%s'>%s</span> which "
3044
  "doesn't exist"
3045
  msgstr ""
3046
 
3047
+ #: app/module/ip-lockout/model/log-model.php:40
3048
+ msgid "Request for file <span class='log-text-table'>%s</span> which doesn't exist"
3049
+ msgstr ""
3050
+
3051
  #: app/module/ip-lockout/view/blacklist/enabled.php:3
3052
  #: app/module/ip-lockout/view/layouts/layout.php:62
3053
  msgid "IP Banning"
3094
  "blacklist. See a quick preview <a href=\"%s\">here</a>."
3095
  msgstr ""
3096
 
3097
+ #: app/module/ip-lockout/view/blacklist/enabled.php:53
3098
+ #: app/module/ip-lockout/view/detect-404/enabled.php:93
3099
+ msgid "Whitelist"
3100
+ msgstr ""
3101
+
3102
  #: app/module/ip-lockout/view/blacklist/enabled.php:56
3103
  msgid ""
3104
  "Any IP addresses you list here will be exempt from the options you've "
3400
 
3401
  #: app/module/ip-lockout/view/layouts/layout.php:66
3402
  #: app/module/ip-lockout/view/layouts/layout.php:90
3403
+ #: app/module/ip-lockout/view/logging/enabled.php:3
3404
  msgid "Logs"
3405
  msgstr ""
3406
 
3428
  msgid "Powered by"
3429
  msgstr ""
3430
 
3431
+ #: app/module/ip-lockout/view/logging/enabled.php:6
3432
+ msgid "Sort by"
3433
+ msgstr ""
3434
+
3435
+ #: app/module/ip-lockout/view/logging/enabled.php:8
3436
+ msgid "Latest"
3437
+ msgstr ""
3438
+
3439
+ #: app/module/ip-lockout/view/logging/enabled.php:9
3440
+ msgid "Oldest"
3441
+ msgstr ""
3442
+
3443
+ #: app/module/ip-lockout/view/logging/enabled.php:10
3444
+ msgid "IP Address"
3445
  msgstr ""
3446
 
3447
  #: app/module/ip-lockout/view/login-lockouts/disabled.php:10
3721
  #: app/module/scan/behavior/core-result.php:75
3722
  #: app/module/scan/behavior/core-result.php:406
3723
  #: app/module/scan/behavior/core-result.php:411
3724
+ #: app/module/scan/behavior/pro/content-result.php:214
 
3725
  #: app/module/scan/behavior/pro/content-result.php:235
3726
+ #: app/module/scan/behavior/pro/content-result.php:240
3727
  msgid "Defender doesn't have enough permission to remove this file"
3728
  msgstr ""
3729
 
3846
  msgid "This will permanent delete this file, do you want to do this?"
3847
  msgstr ""
3848
 
3849
+ #: app/module/scan/behavior/pro/content-result.php:208
3850
  msgid "wp-config.php can't be removed. Please remove the suspicious code manually."
3851
  msgstr ""
3852
 
3990
  msgid "Fix Issue"
3991
  msgstr ""
3992
 
 
 
 
 
3993
  #: app/module/scan/component/result-table.php:211
3994
  msgid "%s Results"
3995
  msgstr ""
4002
  msgid "A scan is already in progress"
4003
  msgstr ""
4004
 
4005
+ #: app/module/scan/component/scan-api.php:195
4006
  msgid "No scan record exists"
4007
  msgstr ""
4008
 
4009
+ #: app/module/scan/component/scan-api.php:235
4010
  msgid "Analyzing WordPress Core..."
4011
  msgstr ""
4012
 
4013
+ #: app/module/scan/component/scan-api.php:238
4014
  msgid "Analyzing WordPress Content..."
4015
  msgstr ""
4016
 
4017
+ #: app/module/scan/component/scan-api.php:241
4018
  msgid "Checking for any published vulnerabilities your plugins & themes..."
4019
  msgstr ""
4020
 
4330
  msgid "All OK"
4331
  msgstr ""
4332
 
 
 
 
 
 
 
 
 
 
4333
  #: app/module/scan.php:20
4334
  msgid "Scans"
4335
  msgstr ""
4560
  msgid "A link back to the Scans tab of this website"
4561
  msgstr ""
4562
 
 
 
 
 
4563
  #: app/view/settings.php:290
4564
  msgid ""
4565
  "When an issue has been found during an automated scan, Defender will send "
4572
  "this email."
4573
  msgstr ""
4574
 
4575
+ #: free/main-activator.php:74
4576
  msgid "Get Members!"
4577
  msgstr ""
4578
 
4579
+ #: free/main-activator.php:82
4580
  msgid ""
4581
  "We're happy that you've chosen to install Defender! Are you interested in "
4582
  "how to make the most of this plugin? How would you like a quick 5 day email "
4584
  "bulletproof? Only the info you want, no subscription!"
4585
  msgstr ""
4586
 
4587
+ #: free/main-activator.php:124
4588
  msgid ""
4589
  "%s, you now have access to Defender's pro features but you still have the "
4590
  "free version installed. Let's upgrade Defender and unlock all those juicy "
4591
  "features! &nbsp; %s"
4592
  msgstr ""
4593
 
4594
+ #: free/main-activator.php:154
4595
  msgid "<br/>Something went wrong. Please try again later!"
4596
  msgstr ""
4597
 
4598
+ #: free/main-activator.php:170 main-activator.php:108
4599
  msgid "Docs"
4600
  msgstr ""
4601
 
4635
  msgid "Rate %s"
4636
  msgstr ""
4637
 
4638
+ #: main-activator.php:92
4639
  msgid ""
4640
  "We noticed you have both the free and pro versions of Defender installed, "
4641
  "so we've automatically deactivated the free version for you."
main-activator.php CHANGED
@@ -18,6 +18,10 @@ class WD_Main_Activator {
18
  * redirect to defender dahsboard after plugin activated
19
  */
20
  public function redirectToDefender( $plugin ) {
 
 
 
 
21
  if ( $plugin == wp_defender()->plugin_slug ) {
22
  exit( wp_redirect( network_admin_url( 'admin.php?page=wp-defender' ) ) );
23
  }
@@ -40,7 +44,10 @@ class WD_Main_Activator {
40
  update_site_option( 'wd_db_version', "1.7.1" );
41
  }
42
 
43
- add_filter( 'plugin_action_links_' . plugin_basename( wp_defender()->plugin_slug ), array( &$this, 'addSettingsLink' ) );
 
 
 
44
  add_action( 'admin_enqueue_scripts', array( &$this, 'register_styles' ) );
45
  if ( ! \WP_Defender\Behavior\Utils::instance()->checkRequirement() ) {
46
  } else {
@@ -53,6 +60,7 @@ class WD_Main_Activator {
53
  \Hammer\Base\Container::instance()->set( 'audit', new \WP_Defender\Module\Audit() );
54
  \Hammer\Base\Container::instance()->set( 'lockout', new \WP_Defender\Module\IP_Lockout() );
55
  \Hammer\Base\Container::instance()->set( 'advanced_tool', new \WP_Defender\Module\Advanced_Tools() );
 
56
  //no need to set debug
57
  require_once $this->wp_defender->getPluginPath() . 'free-dashboard/module.php';
58
  add_filter( 'wdev-email-message-' . plugin_basename( __FILE__ ), array( &$this, 'defenderAdsMessage' ) );
@@ -60,7 +68,7 @@ class WD_Main_Activator {
60
  'wdev-register-plugin',
61
  /* 1 Plugin ID */
62
  plugin_basename( __FILE__ ),
63
- 'WP Defender',
64
  '/plugins/defender-security/',
65
  /* 4 Email Button CTA */
66
  __( 'Get Members!', "defender-security" ),
@@ -112,7 +120,7 @@ class WD_Main_Activator {
112
  }
113
 
114
  public function showUpgradeNotification() {
115
- $class = 'notice notice-info is-dismissible wp-defender-notice';
116
  $message = sprintf( __( "%s, you now have access to Defender's pro features but you still have the free version installed. Let's upgrade Defender and unlock all those juicy features! &nbsp; %s", "defender-security" ),
117
  \WP_Defender\Behavior\Utils::instance()->getDisplayName(),
118
  '<button id="install-defender-pro" type="button" data-id="1081723" data-nonce="' . wp_create_nonce( 'installDefenderPro' ) . '" class="button button-small">' . __( "Upgrade", "defender-security" ) . '</button>'
@@ -160,8 +168,9 @@ class WD_Main_Activator {
160
  $mylinks = array_merge( $mylinks, $links );
161
  $mylinks = array_merge( $mylinks, array(
162
  '<a target="_blank" href="https://premium.wpmudev.org/docs/wpmu-dev-plugins/defender/">' . __( "Docs", "defender-security" ) . '</a>',
163
- '<a style="color: #1ABC9C" target="_blank" href="'.\WP_Defender\Behavior\Utils::instance()->campaignURL('defender_wppluginslist_upgrade').'">' . __( "Upgrade", "defender-security" ) . '</a>',
164
  ) );
 
165
  return $mylinks;
166
  }
167
 
@@ -193,4 +202,4 @@ class WD_Main_Activator {
193
  public function activationHook() {
194
 
195
  }
196
- }
18
  * redirect to defender dahsboard after plugin activated
19
  */
20
  public function redirectToDefender( $plugin ) {
21
+ if ( isset( $_POST['plugin_status'] ) && $_POST['plugin_status'] == 'all' ) {
22
+ //seem like a bulk action, do nothing
23
+ return;
24
+ }
25
  if ( $plugin == wp_defender()->plugin_slug ) {
26
  exit( wp_redirect( network_admin_url( 'admin.php?page=wp-defender' ) ) );
27
  }
44
  update_site_option( 'wd_db_version', "1.7.1" );
45
  }
46
 
47
+ add_filter( 'plugin_action_links_' . plugin_basename( wp_defender()->plugin_slug ), array(
48
+ &$this,
49
+ 'addSettingsLink'
50
+ ) );
51
  add_action( 'admin_enqueue_scripts', array( &$this, 'register_styles' ) );
52
  if ( ! \WP_Defender\Behavior\Utils::instance()->checkRequirement() ) {
53
  } else {
60
  \Hammer\Base\Container::instance()->set( 'audit', new \WP_Defender\Module\Audit() );
61
  \Hammer\Base\Container::instance()->set( 'lockout', new \WP_Defender\Module\IP_Lockout() );
62
  \Hammer\Base\Container::instance()->set( 'advanced_tool', new \WP_Defender\Module\Advanced_Tools() );
63
+ \Hammer\Base\Container::instance()->set( 'gdpr', new \WP_Defender\Controller\GDPR() );
64
  //no need to set debug
65
  require_once $this->wp_defender->getPluginPath() . 'free-dashboard/module.php';
66
  add_filter( 'wdev-email-message-' . plugin_basename( __FILE__ ), array( &$this, 'defenderAdsMessage' ) );
68
  'wdev-register-plugin',
69
  /* 1 Plugin ID */
70
  plugin_basename( __FILE__ ),
71
+ 'Defender',
72
  '/plugins/defender-security/',
73
  /* 4 Email Button CTA */
74
  __( 'Get Members!', "defender-security" ),
120
  }
121
 
122
  public function showUpgradeNotification() {
123
+ $class = 'notice notice-info is-dismissible wp-defender-notice';
124
  $message = sprintf( __( "%s, you now have access to Defender's pro features but you still have the free version installed. Let's upgrade Defender and unlock all those juicy features! &nbsp; %s", "defender-security" ),
125
  \WP_Defender\Behavior\Utils::instance()->getDisplayName(),
126
  '<button id="install-defender-pro" type="button" data-id="1081723" data-nonce="' . wp_create_nonce( 'installDefenderPro' ) . '" class="button button-small">' . __( "Upgrade", "defender-security" ) . '</button>'
168
  $mylinks = array_merge( $mylinks, $links );
169
  $mylinks = array_merge( $mylinks, array(
170
  '<a target="_blank" href="https://premium.wpmudev.org/docs/wpmu-dev-plugins/defender/">' . __( "Docs", "defender-security" ) . '</a>',
171
+ '<a style="color: #1ABC9C" target="_blank" href="' . \WP_Defender\Behavior\Utils::instance()->campaignURL( 'defender_wppluginslist_upgrade' ) . '">' . __( "Upgrade", "defender-security" ) . '</a>',
172
  ) );
173
+
174
  return $mylinks;
175
  }
176
 
202
  public function activationHook() {
203
 
204
  }
205
+ }
readme.txt CHANGED
@@ -1,13 +1,13 @@
1
  === Defender Security, Monitoring, and Hack Protection ===
2
  Plugin Name: Defender Security, Monitoring, and Hack Protection
3
- Version: 1.8
4
  Author: WPMU DEV
5
  Author URI: http://premium.wpmudev.org/
6
  Contributors: WPMUDEV
7
  Tags: Security, Security Tweaks, Hardening, IP lockout, Monitoring, Blacklist, Site Protection, Hacked, Security Scan
8
  Requires at least: 4.6
9
- Tested up to: 4.9.5
10
- Stable tag: 1.8
11
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12
 
13
  Protect WordPress from hackers with security tweaks, code scans, 2-Step Verification, IP lockouts, and monitoring.
@@ -122,6 +122,16 @@ Hackers and bot attacks are not the only threat to your site. No matter what se
122
 
123
  == Changelog ==
124
 
 
 
 
 
 
 
 
 
 
 
125
  = 1.8 =
126
  - New: Hide the default WordPress login URLs with the new Mask Login Area feature, giving you enhanced protection from hackers and bots.
127
  - New: Ability to force two-factor authentication for all users.
1
  === Defender Security, Monitoring, and Hack Protection ===
2
  Plugin Name: Defender Security, Monitoring, and Hack Protection
3
+ Version: 1.9
4
  Author: WPMU DEV
5
  Author URI: http://premium.wpmudev.org/
6
  Contributors: WPMUDEV
7
  Tags: Security, Security Tweaks, Hardening, IP lockout, Monitoring, Blacklist, Site Protection, Hacked, Security Scan
8
  Requires at least: 4.6
9
+ Tested up to: 4.9.7
10
+ Stable tag: 1.9
11
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12
 
13
  Protect WordPress from hackers with security tweaks, code scans, 2-Step Verification, IP lockouts, and monitoring.
122
 
123
  == Changelog ==
124
 
125
+ = 1.9 =
126
+ - New: Ability to edit default two-factor authentication email notifications
127
+ - New: Added Privacy Policy in privacy guideline page
128
+ - Improvements for lockout logs interface
129
+ - Improvement: Smarter report default time.
130
+ - Fix: Defender auto redirect issue when bulk activating plugins
131
+ - Fix: saving 404 redirect URL issue
132
+ - Fix: Some layouts are shifted on mobile devices
133
+ - Other minor enhancements and fixes
134
+
135
  = 1.8 =
136
  - New: Hide the default WordPress login URLs with the new Mask Login Area feature, giving you enhanced protection from hackers and bots.
137
  - New: Ability to force two-factor authentication for all users.
wp-defender.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Plugin Name: Defender
5
  * Plugin URI: https://premium.wpmudev.org/project/wp-defender/
6
- * Version: 1.8
7
  * Description: Get regular security scans, vulnerability reports, safety recommendations and customized hardening for your site in just a few clicks. Defender is the analyst and enforcer who never sleeps.
8
  * Author: WPMU DEV
9
  * Author URI: http://premium.wpmudev.org/
3
  /**
4
  * Plugin Name: Defender
5
  * Plugin URI: https://premium.wpmudev.org/project/wp-defender/
6
+ * Version: 1.9
7
  * Description: Get regular security scans, vulnerability reports, safety recommendations and customized hardening for your site in just a few clicks. Defender is the analyst and enforcer who never sleeps.
8
  * Author: WPMU DEV
9
  * Author URI: http://premium.wpmudev.org/