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

Version Description

  • Fix: permanent ban on 404 lockouts now sends correct email.
  • Fix: IP lockout logs not showing correct results/order on different pages.
  • Fix: IP lockout logs showing wrong badge for 404 lockouts.
  • Fix: 2FA not working properly when using Sensei plugin.
  • Other minor enhancements and fixes.
Download this release

Release Info

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

Code changes from version 2.0 to 2.0.1

app/module/advanced-tools/component/auth-api.php CHANGED
@@ -312,7 +312,7 @@ class Auth_API extends Component {
312
  if ( $isConflict === 0 ) {
313
  //no data, init
314
  global $wpdb;
315
- $sql = "SELECT blog_id FROM `{$wpdb->prefix}blogs`";
316
  $blogs = $wpdb->get_col( $sql );
317
  foreach ( $blogs as $id ) {
318
  $options = get_blog_option( $id, 'jetpack_active_modules', array() );
312
  if ( $isConflict === 0 ) {
313
  //no data, init
314
  global $wpdb;
315
+ $sql = "SELECT blog_id FROM `{$wpdb->base_prefix}blogs`";
316
  $blogs = $wpdb->get_col( $sql );
317
  foreach ( $blogs as $id ) {
318
  $options = get_blog_option( $id, 'jetpack_active_modules', array() );
app/module/advanced-tools/component/mask-api.php CHANGED
@@ -5,6 +5,7 @@
5
 
6
  namespace WP_Defender\Module\Advanced_Tools\Component;
7
 
 
8
  use Hammer\WP\Component;
9
  use WP_Defender\Behavior\Utils;
10
  use WP_Defender\Component\Error_Code;
@@ -160,4 +161,39 @@ class Mask_Api extends Component {
160
 
161
  return true;
162
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
5
 
6
  namespace WP_Defender\Module\Advanced_Tools\Component;
7
 
8
+ use Hammer\Helper\HTTP_Helper;
9
  use Hammer\WP\Component;
10
  use WP_Defender\Behavior\Utils;
11
  use WP_Defender\Component\Error_Code;
161
 
162
  return true;
163
  }
164
+
165
+ /**
166
+ * @return null|string
167
+ */
168
+ public static function createOTPKey() {
169
+ if ( ! is_user_logged_in() ) {
170
+ return null;
171
+ }
172
+
173
+ $secret = Auth_API::getUserSecret();
174
+ $otp = uniqid();
175
+ $key = md5( $otp . $secret );
176
+ set_site_transient( $key, $otp, 300 );
177
+
178
+ return $otp;
179
+ }
180
+
181
+ /**
182
+ * @param $otp
183
+ *
184
+ * @return bool
185
+ */
186
+ public static function verifyOTP( $otp ) {
187
+ $key = HTTP_Helper::retrieve_get( 'otp' );
188
+ $secret = Auth_API::getUserSecret();
189
+ $key = md5( $key . $secret );
190
+ $check = get_site_transient( $key );
191
+ if ( $check == $otp ) {
192
+ delete_site_transient( $key );
193
+
194
+ return true;
195
+ }
196
+
197
+ return false;
198
+ }
199
  }
app/module/advanced-tools/controller/main.php CHANGED
@@ -34,7 +34,7 @@ class Main extends Controller {
34
  }
35
 
36
  if ( $this->isInPage() || $this->isDashboard() ) {
37
- $this->add_action( 'defender_enqueue_assets', 'scripts', 11 );
38
  }
39
  $this->add_ajax_action( 'saveAdvancedSettings', 'saveSettings' );
40
  $this->add_ajax_action( 'saveTwoFactorOPTEmail', 'saveTwoFactorOPTEmail' );
@@ -49,7 +49,7 @@ class Main extends Controller {
49
  /**
50
  * hook into wordpress login, can't use authenticate hook as that badly conflict
51
  */
52
- $this->add_action( 'wp_login', 'maybeShowOTPLogin', 50, 2 );
53
  $this->add_action( 'login_form_defenderVerifyOTP', 'defenderVerifyOTP' );
54
  $this->add_action( 'set_logged_in_cookie', 'storeSessionKey' );
55
  /**
@@ -533,6 +533,9 @@ class Main extends Controller {
533
  $data = array(
534
  'edit_email_title' => __( 'Edit Email', "defender-security" ),
535
  );
 
 
 
536
  wp_localize_script( 'adtools', 'defender_adtools', $data );
537
  }
538
  }
34
  }
35
 
36
  if ( $this->isInPage() || $this->isDashboard() ) {
37
+ $this->add_action( 'defender_enqueue_assets', 'scripts', 12 );
38
  }
39
  $this->add_ajax_action( 'saveAdvancedSettings', 'saveSettings' );
40
  $this->add_ajax_action( 'saveTwoFactorOPTEmail', 'saveTwoFactorOPTEmail' );
49
  /**
50
  * hook into wordpress login, can't use authenticate hook as that badly conflict
51
  */
52
+ $this->add_action( 'wp_login', 'maybeShowOTPLogin', 9, 2 );
53
  $this->add_action( 'login_form_defenderVerifyOTP', 'defenderVerifyOTP' );
54
  $this->add_action( 'set_logged_in_cookie', 'storeSessionKey' );
55
  /**
533
  $data = array(
534
  'edit_email_title' => __( 'Edit Email', "defender-security" ),
535
  );
536
+ if ( $this->isInPage() ) {
537
+ remove_filter( 'admin_body_class', array( 'WDEV_Plugin_Ui', 'admin_body_class' ) );
538
+ }
539
  wp_localize_script( 'adtools', 'defender_adtools', $data );
540
  }
541
  }
app/module/advanced-tools/controller/mask-login.php CHANGED
@@ -164,6 +164,14 @@ class Mask_Login extends Controller {
164
  return Mask_Api::getNewLoginUrl( $subDomain );
165
  }
166
  }
 
 
 
 
 
 
 
 
167
  }
168
  }
169
 
@@ -197,6 +205,11 @@ class Mask_Login extends Controller {
197
  return;
198
  }
199
 
 
 
 
 
 
200
  $this->_maybeLock();
201
  }
202
 
164
  return Mask_Api::getNewLoginUrl( $subDomain );
165
  }
166
  }
167
+ } elseif ( $screen->id == 'my-sites' ) {
168
+ //case inside my sites page, sometime the login session does not share between sites and we get block
169
+ //we will add an OTP key for redirect to wp-admin without get block
170
+ $otp = Mask_Api::createOTPKey();
171
+
172
+ return add_query_arg( array(
173
+ 'otp' => $otp
174
+ ), $currentUrl );
175
  }
176
  }
177
 
205
  return;
206
  }
207
 
208
+ if ( ( $key = HTTP_Helper::retrieve_get( 'otp', false ) ) !== false
209
+ && Mask_Api::verifyOTP( $key ) ) {
210
+ return;
211
+ }
212
+
213
  $this->_maybeLock();
214
  }
215
 
app/module/advanced-tools/view/layouts/layout.php CHANGED
@@ -1,34 +1,36 @@
1
  <div class="wrap">
2
- <div id="wp-defender" class="wp-defender">
3
- <div class="advanced-tools">
4
- <h2 class="title">
5
- <?php _e( "Advanced Tools", "defender-security" ) ?>
6
- </h2>
7
- <div class="row">
8
- <div class="col-third">
9
- <ul class="inner-nav is-hidden-mobile">
10
- <li class="issues-nav">
11
- <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'active' : null ?>"
12
- href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>">
13
- <?php _e( "Two-Factor Authentication", "defender-security" ) ?>
14
- </a>
15
- </li>
16
- <li class="issues-nav">
17
- <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == 'mask-login' ? 'active' : null ?>"
18
- href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>">
19
- <?php _e( "Mask Login Area", "defender-security" ) ?>
20
- </a>
21
- </li>
22
- </ul>
23
- <div class="is-hidden-tablet mline">
24
- <select class="mobile-nav">
25
- <option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
26
- value="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>"><?php _e( "Two Factor Authentication", "defender-security" ) ?></option>
27
- </select>
 
 
 
 
 
28
  </div>
29
- </div>
30
- <div class="col-two-third">
31
- <?php echo $contents ?>
32
  </div>
33
  </div>
34
  </div>
1
  <div class="wrap">
2
+ <div class="wpmud">
3
+ <div id="wp-defender" class="wp-defender">
4
+ <div class="advanced-tools">
5
+ <h2 class="title">
6
+ <?php _e( "Advanced Tools", "defender-security" ) ?>
7
+ </h2>
8
+ <div class="row">
9
+ <div class="col-third">
10
+ <ul class="inner-nav is-hidden-mobile">
11
+ <li class="issues-nav">
12
+ <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == false ? 'active' : null ?>"
13
+ href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>">
14
+ <?php _e( "Two-Factor Authentication", "defender-security" ) ?>
15
+ </a>
16
+ </li>
17
+ <li class="issues-nav">
18
+ <a class="<?php echo \Hammer\Helper\HTTP_Helper::retrieve_get( 'view', false ) == 'mask-login' ? 'active' : null ?>"
19
+ href="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools&view=mask-login' ) ?>">
20
+ <?php _e( "Mask Login Area", "defender-security" ) ?>
21
+ </a>
22
+ </li>
23
+ </ul>
24
+ <div class="is-hidden-tablet mline">
25
+ <select class="mobile-nav">
26
+ <option <?php selected( '', \Hammer\Helper\HTTP_Helper::retrieve_get( 'view' ) ) ?>
27
+ value="<?php echo network_admin_url( 'admin.php?page=wdf-advanced-tools' ) ?>"><?php _e( "Two Factor Authentication", "defender-security" ) ?></option>
28
+ </select>
29
+ </div>
30
+ </div>
31
+ <div class="col-two-third">
32
+ <?php echo $contents ?>
33
  </div>
 
 
 
34
  </div>
35
  </div>
36
  </div>
app/module/advanced-tools/view/login/disabled.php CHANGED
@@ -1,80 +1,78 @@
1
- <div class="wrap">
2
- <h2><?php _e( "Security", "defender-security" ) ?></h2>
3
- <table class="form-table">
4
- <tbody>
5
- <tr class="user-sessions-wrap hide-if-no-js">
6
- <th><?php _e( "Two Factor Authentication", "defender-security" ) ?></th>
7
- <td aria-live="assertive">
8
- <?php
9
- $settings = \WP_Defender\Module\Advanced_Tools\Model\Auth_Settings::instance();
10
- if ( $settings->forceAuth ):
11
- ?>
12
- <div class="def-warning">
13
- <i class="dashicons dashicons-warning" aria-hidden="true"></i>
14
- <?php
15
- echo $settings->forceAuthMess
16
- ?>
17
- </div>
18
- <?php endif; ?>
19
- <?php
20
- $user = wp_get_current_user();
21
- $email = '';
22
- if ( is_object( $user ) ) {
23
- $email = $user->user_email;
24
- }
25
  ?>
26
- <div id="def2">
27
- <div class="destroy-sessions">
28
- <button type="button" class="button" id="show2AuthActivator">
29
- <?php _e( "Enable", "defender-security" ) ?>
30
- </button>
31
- </div>
32
- <p class="description">
33
- <?php _e( "Use the Google Authenticator app to sign in with a separate passcode.", "defender-security" ) ?>
34
- </p>
35
  </div>
36
- <div id="def2qr">
37
- <button type="button" id="hide2AuthActivator"
38
- class="button"><?php _e( "Cancel", "defender-security" ) ?></button>
39
- <p><?php _e( "Use the Google Authenticator app to sign in with a separate passcode.", "defender-security" ) ?></p>
40
- <div class="card">
41
- <p>
42
- <strong><?php _e( "1. Install the Verification app", "defender-security" ) ?></strong>
43
- </p>
44
- <p>
45
- <?php _e( "Download and install the Google Authenticator app on your device using the links below.", "defender-security" ) ?>
46
- </p>
47
- <a href="https://itunes.apple.com/vn/app/google-authenticator/id388497605?mt=8">
48
- <img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/ios-download.svg' ?>"/>
49
- </a>
50
- <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">
51
- <img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/android-download.svg' ?>"/>
52
- </a>
53
- <div class="line"></div>
54
- <p><strong><?php _e( "2. Scan the barcode", "defender-security" ) ?></strong></p>
55
- <p><?php _e( "Open the Google Authenticator app you just downloaded, tap the “+” symbol and then use your phone’s camera to scan the barcode below.", "defender-security" ) ?></p>
56
- <img class="barcode"
57
- src="<?php echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode( urlencode( get_bloginfo( 'name' ) ) . ':' . $email, $secretKey, 149, 149, urlencode( get_bloginfo( 'name' ) ) ) ?>"/>
58
- <div class="line"></div>
59
- <p><strong><?php _e( "3. Enter passcode", "defender-security" ) ?></strong></p>
60
- <p>
61
- <?php _e( "Enter the 6 digit passcode that is shown on your device into the input field below and hit “Verify”.", "defender-security" ) ?>
62
- </p>
63
- <div class="well">
64
- <p class="error"></p>
65
- <input type="text" id="otpCode" class="def-small-text">
66
- <button type="button" class="button button-primary" id="verifyOTP">
67
- <?php _e( "Verify", "defender-security" ) ?>
68
- </button>
69
- <input type="hidden" id="defNonce" value="<?php echo wp_create_nonce( 'defVerifyOTP' ) ?>"/>
70
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  </div>
72
  </div>
73
- </td>
74
- </tr>
75
- </tbody>
76
- </table>
77
- </div>
78
  <script type="text/javascript">
79
  jQuery(function ($) {
80
  $('#def2qr').hide();
1
+ <h2><?php _e( "Security", "defender-security" ) ?></h2>
2
+ <table class="form-table">
3
+ <tbody>
4
+ <tr class="user-sessions-wrap hide-if-no-js">
5
+ <th><?php _e( "Two Factor Authentication", "defender-security" ) ?></th>
6
+ <td aria-live="assertive">
7
+ <?php
8
+ $settings = \WP_Defender\Module\Advanced_Tools\Model\Auth_Settings::instance();
9
+ if ( $settings->forceAuth ):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  ?>
11
+ <div class="def-warning">
12
+ <i class="dashicons dashicons-warning" aria-hidden="true"></i>
13
+ <?php
14
+ echo $settings->forceAuthMess
15
+ ?>
 
 
 
 
16
  </div>
17
+ <?php endif; ?>
18
+ <?php
19
+ $user = wp_get_current_user();
20
+ $email = '';
21
+ if ( is_object( $user ) ) {
22
+ $email = $user->user_email;
23
+ }
24
+ ?>
25
+ <div id="def2">
26
+ <div class="destroy-sessions">
27
+ <button type="button" class="button" id="show2AuthActivator">
28
+ <?php _e( "Enable", "defender-security" ) ?>
29
+ </button>
30
+ </div>
31
+ <p class="description">
32
+ <?php _e( "Use the Google Authenticator app to sign in with a separate passcode.", "defender-security" ) ?>
33
+ </p>
34
+ </div>
35
+ <div id="def2qr">
36
+ <button type="button" id="hide2AuthActivator"
37
+ class="button"><?php _e( "Cancel", "defender-security" ) ?></button>
38
+ <p><?php _e( "Use the Google Authenticator app to sign in with a separate passcode.", "defender-security" ) ?></p>
39
+ <div class="card">
40
+ <p>
41
+ <strong><?php _e( "1. Install the Verification app", "defender-security" ) ?></strong>
42
+ </p>
43
+ <p>
44
+ <?php _e( "Download and install the Google Authenticator app on your device using the links below.", "defender-security" ) ?>
45
+ </p>
46
+ <a href="https://itunes.apple.com/vn/app/google-authenticator/id388497605?mt=8">
47
+ <img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/ios-download.svg' ?>"/>
48
+ </a>
49
+ <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">
50
+ <img src="<?php echo wp_defender()->getPluginUrl() . 'assets/img/android-download.svg' ?>"/>
51
+ </a>
52
+ <div class="line"></div>
53
+ <p><strong><?php _e( "2. Scan the barcode", "defender-security" ) ?></strong></p>
54
+ <p><?php _e( "Open the Google Authenticator app you just downloaded, tap the “+” symbol and then use your phone’s camera to scan the barcode below.", "defender-security" ) ?></p>
55
+ <img class="barcode"
56
+ src="<?php echo \WP_Defender\Module\Advanced_Tools\Component\Auth_API::generateQRCode( urlencode( get_bloginfo( 'name' ) ) . ':' . $email, $secretKey, 149, 149, urlencode( get_bloginfo( 'name' ) ) ) ?>"/>
57
+ <div class="line"></div>
58
+ <p><strong><?php _e( "3. Enter passcode", "defender-security" ) ?></strong></p>
59
+ <p>
60
+ <?php _e( "Enter the 6 digit passcode that is shown on your device into the input field below and hit “Verify”.", "defender-security" ) ?>
61
+ </p>
62
+ <div class="well">
63
+ <p class="error"></p>
64
+ <input type="text" id="otpCode" class="def-small-text">
65
+ <button type="button" class="button button-primary" id="verifyOTP">
66
+ <?php _e( "Verify", "defender-security" ) ?>
67
+ </button>
68
+ <input type="hidden" id="defNonce" value="<?php echo wp_create_nonce( 'defVerifyOTP' ) ?>"/>
69
  </div>
70
  </div>
71
+ </div>
72
+ </td>
73
+ </tr>
74
+ </tbody>
75
+ </table>
76
  <script type="text/javascript">
77
  jQuery(function ($) {
78
  $('#def2qr').hide();
app/module/advanced-tools/view/login/enabled.php CHANGED
@@ -1,30 +1,28 @@
1
- <div class="wrap">
2
- <h2><?php _e( "Security", "defender-security" ) ?></h2>
3
- <table class="form-table">
4
- <tbody>
5
- <tr class="user-sessions-wrap hide-if-no-js">
6
- <th><?php _e( "Two Factor Authentication", "defender-security" ) ?></th>
7
- <td aria-live="assertive">
8
- <div class="def-notification">
9
- <?php _e( "Two factor authentication is active.", "defender-security" ) ?>
10
- </div>
11
- <button type="button" class="button" id="disableOTP">
12
- <?php _e( "Disable", "defender-security" ) ?>
13
- </button>
14
- </td>
15
- </tr>
16
- <tr class="user-sessions-wrap hide-if-no-js">
17
- <th><?php _e( "Fallback email address", "defender-security" ) ?></th>
18
- <td aria-live="assertive">
19
- <input type="text" class="regular-text" name="def_backup_email" value="<?php echo $email ?>"/>
20
- <p class="description">
21
- <?php _e( "If you ever lose your device, you can send a fallback passcode to this email address.", "defender-security" ) ?>
22
- </p>
23
- </td>
24
- </tr>
25
- </tbody>
26
- </table>
27
- </div>
28
  <script type="text/javascript">
29
  jQuery(function ($) {
30
  $('#disableOTP').click(function () {
1
+ <h2><?php _e( "Security", "defender-security" ) ?></h2>
2
+ <table class="form-table">
3
+ <tbody>
4
+ <tr class="user-sessions-wrap hide-if-no-js">
5
+ <th><?php _e( "Two Factor Authentication", "defender-security" ) ?></th>
6
+ <td aria-live="assertive">
7
+ <div class="def-notification">
8
+ <?php _e( "Two factor authentication is active.", "defender-security" ) ?>
9
+ </div>
10
+ <button type="button" class="button" id="disableOTP">
11
+ <?php _e( "Disable", "defender-security" ) ?>
12
+ </button>
13
+ </td>
14
+ </tr>
15
+ <tr class="user-sessions-wrap hide-if-no-js">
16
+ <th><?php _e( "Fallback email address", "defender-security" ) ?></th>
17
+ <td aria-live="assertive">
18
+ <input type="text" class="regular-text" name="def_backup_email" value="<?php echo $email ?>"/>
19
+ <p class="description">
20
+ <?php _e( "If you ever lose your device, you can send a fallback passcode to this email address.", "defender-security" ) ?>
21
+ </p>
22
+ </td>
23
+ </tr>
24
+ </tbody>
25
+ </table>
 
 
26
  <script type="text/javascript">
27
  jQuery(function ($) {
28
  $('#disableOTP').click(function () {
app/module/ip-lockout/component/login-protection-api.php CHANGED
@@ -156,10 +156,12 @@ class Login_Protection_Api extends Component {
156
  $lock_log->log = sprintf( esc_html__( "Lockout occurred: Too many 404 requests for %s", "defender-security" ), $uri );
157
  $lock_log->save();
158
  //if fail2ban, we will add that IP to blacklist
 
159
  if ( $settings->detect_404_lockout_ban ) {
160
  $settings->addIpToList( $model->ip, 'blacklist' );
 
161
  }
162
- do_action( 'wd_404_lockout', $model, $uri );
163
  }
164
  }
165
 
156
  $lock_log->log = sprintf( esc_html__( "Lockout occurred: Too many 404 requests for %s", "defender-security" ), $uri );
157
  $lock_log->save();
158
  //if fail2ban, we will add that IP to blacklist
159
+ $isBlacklist = false;
160
  if ( $settings->detect_404_lockout_ban ) {
161
  $settings->addIpToList( $model->ip, 'blacklist' );
162
+ $isBlacklist = true;
163
  }
164
+ do_action( 'wd_404_lockout', $model, $uri, $isBlacklist );
165
  }
166
  }
167
 
app/module/ip-lockout/component/logs-table.php CHANGED
@@ -273,7 +273,11 @@ class Logs_Table extends \WP_List_Table {
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>
273
  <div class="column is-4">
274
  <p><strong><?php _e( "Type", "defender-security" ) ?></strong></p>
275
  <p>
276
+ <a href=""><?php echo in_array( $item->type, array(
277
+ Log_Model::ERROR_404,
278
+ Log_Model::ERROR_404_IGNORE,
279
+ Log_Model::LOCKOUT_404
280
+ ) ) ? __( "404 error", "defender-security" ) : __( "Login failed", "defender-security" ) ?></a>
281
  </p>
282
  </div>
283
  </div>
app/module/ip-lockout/controller/main.php CHANGED
@@ -403,7 +403,7 @@ class Main extends Controller {
403
  $this->add_action( 'wd_login_lockout', 'lockoutLoginNotification', 10, 3 );
404
  }
405
  if ( $settings->ip_lockout_notification ) {
406
- $this->add_action( 'wd_404_lockout', 'lockout404Notification', 10, 2 );
407
  }
408
  }
409
 
@@ -426,7 +426,7 @@ class Main extends Controller {
426
  * @param $model
427
  * @param $uri
428
  */
429
- public function lockout404Notification( $model, $uri ) {
430
  $settings = Settings::instance();
431
  if ( ! Login_Protection_Api::maybeSendNotification( '404', $model, $settings ) ) {
432
  return;
@@ -434,7 +434,7 @@ class Main extends Controller {
434
  foreach ( $settings->receipts as $user_id ) {
435
  $user = get_user_by( 'id', $user_id );
436
  if ( is_object( $user ) ) {
437
- $content = $this->renderPartial( 'emails/404-lockout', array(
438
  'admin' => $user->display_name,
439
  'ip' => $model->ip,
440
  'uri' => $uri
403
  $this->add_action( 'wd_login_lockout', 'lockoutLoginNotification', 10, 3 );
404
  }
405
  if ( $settings->ip_lockout_notification ) {
406
+ $this->add_action( 'wd_404_lockout', 'lockout404Notification', 10, 3 );
407
  }
408
  }
409
 
426
  * @param $model
427
  * @param $uri
428
  */
429
+ public function lockout404Notification( $model, $uri, $isBlacklisted ) {
430
  $settings = Settings::instance();
431
  if ( ! Login_Protection_Api::maybeSendNotification( '404', $model, $settings ) ) {
432
  return;
434
  foreach ( $settings->receipts as $user_id ) {
435
  $user = get_user_by( 'id', $user_id );
436
  if ( is_object( $user ) ) {
437
+ $content = $this->renderPartial( $isBlacklisted == true ? 'emails/404-ban' : 'emails/404-lockout', array(
438
  'admin' => $user->display_name,
439
  'ip' => $model->ip,
440
  'uri' => $uri
app/module/ip-lockout/js/script.js CHANGED
@@ -25,7 +25,11 @@ jQuery(function ($) {
25
  return;
26
  }
27
  if (data.success == true) {
28
- location.reload();
 
 
 
 
29
  Defender.showNotification('success', data.data.message);
30
  } else {
31
  var progress = data.data.progress;
@@ -115,6 +119,9 @@ jQuery(function ($) {
115
  $('body').on('click', '.lockout-nav', function (e) {
116
  e.preventDefault();
117
  var query = WDIP.buildFilterQuery();
 
 
 
118
  query += '&paged=' + $(this).data('paged');
119
  WDIP.ajaxPull(query, function () {
120
 
@@ -164,18 +171,26 @@ jQuery(function ($) {
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
 
25
  return;
26
  }
27
  if (data.success == true) {
28
+ setTimeout(function () {
29
+ location.reload();
30
+ }, 1000)
31
+ $('.scan-progress-text span').text('100%');
32
+ $('.scan-progress-bar span').css('width', '100%');
33
  Defender.showNotification('success', data.data.message);
34
  } else {
35
  var progress = data.data.progress;
119
  $('body').on('click', '.lockout-nav', function (e) {
120
  e.preventDefault();
121
  var query = WDIP.buildFilterQuery();
122
+ if (order !== false && orderby !== false) {
123
+ query += '&order=' + order + '&orderby=' + orderby;
124
+ }
125
  query += '&paged=' + $(this).data('paged');
126
  WDIP.ajaxPull(query, function () {
127
 
171
  $('#bulk-select').on('click', function () {
172
  $('.single-select').prop('checked', $(this).prop('checked'))
173
  })
174
+ var order = false;
175
+ var orderby = false;
176
  $('#lockout-logs-sort').change(function () {
177
  var value = $(this).val();
178
  if (value === 'latest') {
179
  query = 'orderby=id&order=desc'
180
+ order = 'desc';
181
+ orderby = 'id';
182
  } else if (value === 'oldest') {
183
  query = 'orderby=id&order=asc'
184
+ order = 'asc';
185
+ orderby = 'id';
186
  } else if (value === 'ip') {
187
  query = 'orderby=ip&order=asc'
188
+ order = 'asc';
189
+ orderby = 'ip';
190
  }
191
+ WDIP.ajaxPull(query, function () {
192
+
193
+ });
194
  })
195
  });
196
 
app/module/ip-lockout/view/emails/404-ban.php ADDED
@@ -0,0 +1,693 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6
+ <meta name="viewport" content="width=device-width">
7
+ <title><?php _e( "New 404 Lockout", "defender-security" ) ?></title>
8
+ <style>
9
+ a.plugin-brand:hover {
10
+ color: #e23717 !important;
11
+ }
12
+
13
+ table.top-content td a:hover {
14
+ color: #ff5c28 !important;
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body
20
+ style="-moz-box-sizing: border-box; -ms-text-size-adjust: 100%; -webkit-box-sizing: border-box; -webkit-text-size-adjust: 100%; Margin: 0; background-color: #e9ebe7; box-sizing: border-box; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; min-width: 100%; padding: 0; text-align: left; width: 100% !important;">
21
+ <style>
22
+ @media only screen {
23
+ html {
24
+ min-height: 100%;
25
+ background: #f3f3f3;
26
+ }
27
+ }
28
+
29
+ @media only screen and (max-width: 596px) {
30
+ .small-float-center {
31
+ margin: 0 auto !important;
32
+ float: none !important;
33
+ text-align: center !important;
34
+ }
35
+
36
+ .small-text-center {
37
+ text-align: center !important;
38
+ }
39
+
40
+ .small-text-left {
41
+ text-align: left !important;
42
+ }
43
+
44
+ .small-text-right {
45
+ text-align: right !important;
46
+ }
47
+ }
48
+
49
+ @media only screen and (max-width: 596px) {
50
+ .hide-for-large {
51
+ display: block !important;
52
+ width: auto !important;
53
+ overflow: visible !important;
54
+ max-height: none !important;
55
+ font-size: inherit !important;
56
+ line-height: inherit !important;
57
+ }
58
+ }
59
+
60
+ @media only screen and (max-width: 596px) {
61
+ table.body table.container .hide-for-large,
62
+ table.body table.container .row.hide-for-large {
63
+ display: table !important;
64
+ width: 100% !important;
65
+ }
66
+ }
67
+
68
+ @media only screen and (max-width: 596px) {
69
+ table.body table.container .callout-inner.hide-for-large {
70
+ display: table-cell !important;
71
+ width: 100% !important;
72
+ }
73
+ }
74
+
75
+ @media only screen and (max-width: 596px) {
76
+ table.body table.container .show-for-large {
77
+ display: none !important;
78
+ width: 0;
79
+ mso-hide: all;
80
+ overflow: hidden;
81
+ }
82
+ }
83
+
84
+ @media only screen and (max-width: 596px) {
85
+ table.body img {
86
+ width: auto;
87
+ height: auto;
88
+ }
89
+
90
+ table.body center {
91
+ min-width: 0 !important;
92
+ }
93
+
94
+ table.body .container {
95
+ width: 95% !important;
96
+ }
97
+
98
+ table.body .columns,
99
+ table.body .column {
100
+ height: auto !important;
101
+ -moz-box-sizing: border-box;
102
+ -webkit-box-sizing: border-box;
103
+ box-sizing: border-box;
104
+ padding-left: 16px !important;
105
+ padding-right: 16px !important;
106
+ }
107
+
108
+ table.body .columns .column,
109
+ table.body .columns .columns,
110
+ table.body .column .column,
111
+ table.body .column .columns {
112
+ padding-left: 0 !important;
113
+ padding-right: 0 !important;
114
+ }
115
+
116
+ table.body .collapse .columns,
117
+ table.body .collapse .column {
118
+ padding-left: 0 !important;
119
+ padding-right: 0 !important;
120
+ }
121
+
122
+ td.small-1,
123
+ th.small-1 {
124
+ display: inline-block !important;
125
+ width: 8.33333% !important;
126
+ }
127
+
128
+ td.small-2,
129
+ th.small-2 {
130
+ display: inline-block !important;
131
+ width: 16.66667% !important;
132
+ }
133
+
134
+ td.small-3,
135
+ th.small-3 {
136
+ display: inline-block !important;
137
+ width: 25% !important;
138
+ }
139
+
140
+ td.small-4,
141
+ th.small-4 {
142
+ display: inline-block !important;
143
+ width: 33.33333% !important;
144
+ }
145
+
146
+ td.small-5,
147
+ th.small-5 {
148
+ display: inline-block !important;
149
+ width: 41.66667% !important;
150
+ }
151
+
152
+ td.small-6,
153
+ th.small-6 {
154
+ display: inline-block !important;
155
+ width: 50% !important;
156
+ }
157
+
158
+ td.small-7,
159
+ th.small-7 {
160
+ display: inline-block !important;
161
+ width: 58.33333% !important;
162
+ }
163
+
164
+ td.small-8,
165
+ th.small-8 {
166
+ display: inline-block !important;
167
+ width: 66.66667% !important;
168
+ }
169
+
170
+ td.small-9,
171
+ th.small-9 {
172
+ display: inline-block !important;
173
+ width: 75% !important;
174
+ }
175
+
176
+ td.small-10,
177
+ th.small-10 {
178
+ display: inline-block !important;
179
+ width: 83.33333% !important;
180
+ }
181
+
182
+ td.small-11,
183
+ th.small-11 {
184
+ display: inline-block !important;
185
+ width: 91.66667% !important;
186
+ }
187
+
188
+ td.small-12,
189
+ th.small-12 {
190
+ display: inline-block !important;
191
+ width: 100% !important;
192
+ }
193
+
194
+ .columns td.small-12,
195
+ .column td.small-12,
196
+ .columns th.small-12,
197
+ .column th.small-12 {
198
+ display: block !important;
199
+ width: 100% !important;
200
+ }
201
+
202
+ table.body td.small-offset-1,
203
+ table.body th.small-offset-1 {
204
+ margin-left: 8.33333% !important;
205
+ Margin-left: 8.33333% !important;
206
+ }
207
+
208
+ table.body td.small-offset-2,
209
+ table.body th.small-offset-2 {
210
+ margin-left: 16.66667% !important;
211
+ Margin-left: 16.66667% !important;
212
+ }
213
+
214
+ table.body td.small-offset-3,
215
+ table.body th.small-offset-3 {
216
+ margin-left: 25% !important;
217
+ Margin-left: 25% !important;
218
+ }
219
+
220
+ table.body td.small-offset-4,
221
+ table.body th.small-offset-4 {
222
+ margin-left: 33.33333% !important;
223
+ Margin-left: 33.33333% !important;
224
+ }
225
+
226
+ table.body td.small-offset-5,
227
+ table.body th.small-offset-5 {
228
+ margin-left: 41.66667% !important;
229
+ Margin-left: 41.66667% !important;
230
+ }
231
+
232
+ table.body td.small-offset-6,
233
+ table.body th.small-offset-6 {
234
+ margin-left: 50% !important;
235
+ Margin-left: 50% !important;
236
+ }
237
+
238
+ table.body td.small-offset-7,
239
+ table.body th.small-offset-7 {
240
+ margin-left: 58.33333% !important;
241
+ Margin-left: 58.33333% !important;
242
+ }
243
+
244
+ table.body td.small-offset-8,
245
+ table.body th.small-offset-8 {
246
+ margin-left: 66.66667% !important;
247
+ Margin-left: 66.66667% !important;
248
+ }
249
+
250
+ table.body td.small-offset-9,
251
+ table.body th.small-offset-9 {
252
+ margin-left: 75% !important;
253
+ Margin-left: 75% !important;
254
+ }
255
+
256
+ table.body td.small-offset-10,
257
+ table.body th.small-offset-10 {
258
+ margin-left: 83.33333% !important;
259
+ Margin-left: 83.33333% !important;
260
+ }
261
+
262
+ table.body td.small-offset-11,
263
+ table.body th.small-offset-11 {
264
+ margin-left: 91.66667% !important;
265
+ Margin-left: 91.66667% !important;
266
+ }
267
+
268
+ table.body table.columns td.expander,
269
+ table.body table.columns th.expander {
270
+ display: none !important;
271
+ }
272
+
273
+ table.body .right-text-pad,
274
+ table.body .text-pad-right {
275
+ padding-left: 10px !important;
276
+ }
277
+
278
+ table.body .left-text-pad,
279
+ table.body .text-pad-left {
280
+ padding-right: 10px !important;
281
+ }
282
+
283
+ table.menu {
284
+ width: 100% !important;
285
+ }
286
+
287
+ table.menu td,
288
+ table.menu th {
289
+ width: auto !important;
290
+ display: inline-block !important;
291
+ }
292
+
293
+ table.menu.vertical td,
294
+ table.menu.vertical th,
295
+ table.menu.small-vertical td,
296
+ table.menu.small-vertical th {
297
+ display: block !important;
298
+ }
299
+
300
+ table.menu[align="center"] {
301
+ width: auto !important;
302
+ }
303
+
304
+ table.button.small-expand,
305
+ table.button.small-expanded {
306
+ width: 100% !important;
307
+ }
308
+
309
+ table.button.small-expand table,
310
+ table.button.small-expanded table {
311
+ width: 100%;
312
+ }
313
+
314
+ table.button.small-expand table a,
315
+ table.button.small-expanded table a {
316
+ text-align: center !important;
317
+ width: 100% !important;
318
+ padding-left: 0 !important;
319
+ padding-right: 0 !important;
320
+ }
321
+
322
+ table.button.small-expand center,
323
+ table.button.small-expanded center {
324
+ min-width: 0;
325
+ }
326
+ }
327
+
328
+ @media screen and (max-width: 596px) {
329
+ /* results list */
330
+ table.results-list thead th {
331
+ line-height: 34px !important;
332
+ }
333
+
334
+ /* top */
335
+ table.top-content td {
336
+ text-align: center !important;
337
+ }
338
+
339
+ /* related */
340
+ table.related table.related-items .columns {
341
+ padding-right: 0 !important;
342
+ padding-bottom: 15px !important;
343
+ padding-left: 0 !important;
344
+ }
345
+
346
+ table.related table.related-items .columns.last {
347
+ padding-bottom: 0 !important;
348
+ }
349
+
350
+ table.related a.related-item .plugin-info {
351
+ vertical-align: middle !important;
352
+ }
353
+
354
+ /* company info */
355
+ table.company-info .columns {
356
+ padding-right: 0 !important;
357
+ padding-left: 0 !important;
358
+ }
359
+
360
+ table.company-info .columns.last {
361
+ padding: 15px 0 0 !important;
362
+ }
363
+
364
+ table.company-info .logo,
365
+ table.company-info .logo-link,
366
+ table.company-info .logo img {
367
+ text-align: left !important;
368
+ }
369
+ }
370
+
371
+ @media screen and (max-width: 540px) {
372
+ /* hero */
373
+ table.hero table.hero-content {
374
+ width: 100%;
375
+ }
376
+
377
+ table.hero td.hero-title h1,
378
+ table.hero td.hero-title h2 {
379
+ padding: 0 !important;
380
+ text-align: center !important;
381
+ }
382
+
383
+ table.hero td.hero-image {
384
+ display: none;
385
+ }
386
+ }
387
+ </style>
388
+
389
+ <table class="body"
390
+ style="Margin: 0; background: #f3f3f3; background-color: #e9ebe7; border-collapse: collapse; border-spacing: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; height: 100%; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
391
+ <tbody>
392
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
393
+ <td class="center" align="center" valign="top"
394
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; word-wrap: break-word;">
395
+
396
+ <center style="min-width: 600px; width: 100%;">
397
+
398
+ <table class="container"
399
+ style="Margin: 0 auto; background: #fefefe; background-color: #fff; border-collapse: collapse; border-spacing: 0; margin: 0 auto; padding: 0; text-align: inherit; vertical-align: top; width: 600px;">
400
+ <tbody>
401
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
402
+ <td style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; word-wrap: break-word;">
403
+ <table class="wrapper hero" align="left"
404
+ style="background-color: #e9ebe7; border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
405
+ <tbody>
406
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
407
+ <td class="wrapper-inner hero-inner"
408
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 20px 0 0; text-align: left; vertical-align: top; word-wrap: break-word;">
409
+
410
+ <table class="hero-content" align="left"
411
+ style="border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top;">
412
+ <tbody>
413
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
414
+ <td class="hero-title"
415
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; padding-bottom: 18px; text-align: left; vertical-align: bottom; word-wrap: break-word;">
416
+ <h2 style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 30px; font-weight: 700; line-height: 1em; margin: 0; margin-bottom: 0; padding: 0; padding-left: 9px; text-align: left; text-transform: uppercase; word-wrap: normal;">
417
+ <?php esc_html_e( "Protected By", "defender-security" ) ?></h2>
418
+ <h1 class="plugin-brand"
419
+ style="Margin: 0; Margin-bottom: 0; color: #ff5c28; font-family: Helvetica, Arial, sans-serif; font-size: 60px; font-weight: 700; line-height: 1em; margin: 0; margin-bottom: 0; padding: 0; padding-left: 6px; text-align: left; text-transform: uppercase; word-wrap: normal;">
420
+ <?php esc_html_e( "Defender!", "defender-security" ) ?></h1>
421
+ </td>
422
+ <td class="hero-image"
423
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; word-wrap: break-word;">
424
+ <a href="https://premium.wpmudev.org/"
425
+ style="Margin: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 1.3; margin: 0; padding: 0; text-align: left; text-decoration: none;"><img
426
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/hero-defender.png"
427
+ alt="Defender"
428
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: block; max-width: 100%; outline: none; text-decoration: none; width: auto;"></a>
429
+ </td>
430
+ </tr>
431
+ </tbody>
432
+ </table>
433
+ <!-- end hero-content -->
434
+
435
+ </td>
436
+ </tr>
437
+ </tbody>
438
+ </table>
439
+ <!-- end hero -->
440
+
441
+ <table class="wrapper main" align="center"
442
+ style="border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
443
+ <tbody>
444
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
445
+ <td class="wrapper-inner main-inner"
446
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 40px; text-align: left; vertical-align: top; word-wrap: break-word;">
447
+
448
+ <table class="main-intro"
449
+ style="border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top;">
450
+ <tbody>
451
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
452
+ <td class="main-intro-content"
453
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; word-wrap: break-word;">
454
+ <h3 style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 32px; font-weight: normal; line-height: 32px; margin: 0; margin-bottom: 0; padding: 0 0 28px; text-align: left; word-wrap: normal;">
455
+ <?php printf( __( "Hi %s", "defender-security" ), $admin ) ?>
456
+ ,</h3>
457
+ <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
458
+ <?php $utils = \WP_Defender\Behavior\Utils::instance() ?>
459
+ <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
460
+ <?php printf( __( "We've just locked out the host <strong>%s</strong> from %s due to more than <strong>%s</strong> 404 requests for the file <strong>%s</strong>. They have been banned permanently.", "defender-security" ), $ip, network_site_url(), $setting->detect_404_threshold, $uri, $setting->detect_404_lockout_duration ) ?>
461
+ </p>
462
+ <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
463
+ <?php printf( __( "You can view the full lockout logs <a href=\"%s\">here</a>", "defender-security" ), network_admin_url( "admin.php?page=wdf-ip-lockout&view=logs" ) ) ?>
464
+ .</p>
465
+ </td>
466
+ </tr>
467
+ </tbody>
468
+ </table>
469
+ <!-- end main-intro -->
470
+
471
+ <table class="main-signature"
472
+ style="border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top;">
473
+ <tbody>
474
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
475
+ <td class="main-signature-content"
476
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; word-wrap: break-word;">
477
+ <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
478
+ <?php esc_html_e( "Stay vigilant.", "defender-security" ) ?></p>
479
+ <p class="last-item"
480
+ style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0; text-align: left;">
481
+ <strong><?php esc_html_e( "WP Defender", "defender-security" ) ?></strong>
482
+ <br>
483
+ <?php esc_html_e( "Security Hero", "defender-security" ) ?>
484
+ <br/>
485
+ <?php esc_html_e( "WPMU DEV", "defender-security" ) ?>
486
+ </p>
487
+ </td>
488
+ </tr>
489
+ </tbody>
490
+ </table>
491
+ <!-- end main-signature -->
492
+
493
+ </td>
494
+ </tr>
495
+ </tbody>
496
+ </table>
497
+ <!-- end main -->
498
+
499
+ <table class="related" align="center"
500
+ style="border-collapse: collapse; border-spacing: 0; margin: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
501
+ <tbody>
502
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
503
+ <td class="related-inner"
504
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; border-top: 2px solid #e9ebe7; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 15px 30px 15px 40px; text-align: left; vertical-align: top; word-wrap: break-word;">
505
+ <table
506
+ style="border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top;">
507
+ <tbody>
508
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
509
+ <td class="related-items-title brand" align="left"
510
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #3eb4e4; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; padding-bottom: 10px; text-align: left; vertical-align: top; word-wrap: break-word;">
511
+ <?php esc_html_e( "Related plugins worth giving a try", "defender-security" ) ?>
512
+ </td>
513
+ </tr>
514
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
515
+ <td style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: left; vertical-align: top; word-wrap: break-word;">
516
+ <table class="related-items row collapse" align="center"
517
+ style="border-collapse: collapse; border-spacing: 0; display: table; padding: 0; position: relative; text-align: left; vertical-align: top; width: 100%;">
518
+ <tbody>
519
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
520
+ <th class="small-12 large-6 columns first" align="left"
521
+ valign="top"
522
+ style="Margin: 0 auto; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0 auto; padding: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; text-align: left; width: 298px;">
523
+ <a class="related-item plugin-link"
524
+ href="https://premium.wpmudev.org/project/wp-hummingbird/"
525
+ style="Margin: 0; color: #555555; display: table; font-family: Helvetica, Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 20px; margin: 0; padding: 0; text-align: left; text-decoration: none;">
526
+ <img
527
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/plugin-hummingbird.png"
528
+ alt="Hummingbird" class="plugin-image"
529
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: table-cell; max-width: 100%; outline: none; text-decoration: none; width: auto;">
530
+ <span class="plugin-info"
531
+ style="display: table-cell; padding-left: 10px; vertical-align: bottom;">
532
+ <span><?php esc_html_e( "Optimize your site with", "defender-security" ) ?></span>
533
+ <span class="plugin-title hummingbird"
534
+ style="color: #febd30; display: block;"><strong><?php esc_html_e( "Hummingbird", "defender-security" ) ?></strong></span>
535
+ </span>
536
+ </a>
537
+ </th>
538
+ <th class="small-12 large-6 columns last" align="left"
539
+ valign="top"
540
+ style="Margin: 0 auto; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0 auto; padding: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; text-align: left; width: 298px;">
541
+ <a class="related-item plugin-link"
542
+ href="https://premium.wpmudev.org/project/snapshot/"
543
+ style="Margin: 0; color: #555555; display: table; font-family: Helvetica, Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 20px; margin: 0; padding: 0; text-align: left; text-decoration: none;">
544
+ <img
545
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/plugin-snapshot.png"
546
+ alt="Snapshot"
547
+ class="plugin-image"
548
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: table-cell; max-width: 100%; outline: none; text-decoration: none; width: auto;">
549
+ <span class="plugin-info"
550
+ style="display: table-cell; padding-left: 10px; vertical-align: bottom;">
551
+ <span><?php esc_html_e( "Back up your hard work with", "defender-security" ) ?></span>
552
+ <span class="plugin-title snapshot"
553
+ style="color: #642486; display: block;"><strong><?php _e( "Snapshot", "defender-security" ) ?></strong></span>
554
+ </span>
555
+ </a>
556
+ </th>
557
+ <th class="expander"
558
+ style="Margin: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; padding: 0 !important; text-align: left; visibility: hidden; width: 0;"></th>
559
+ </tr>
560
+ </tbody>
561
+ </table>
562
+ </td>
563
+ </tr>
564
+ </tbody>
565
+ </table>
566
+ <!-- end related-inner -->
567
+ </td>
568
+ </tr>
569
+ </tbody>
570
+ </table>
571
+ <!-- end related -->
572
+
573
+ <!-- Preferences -->
574
+ <table class="email-preferences" align="center" valign="middle"
575
+ style="border-collapse: collapse; border-spacing: 0; margin: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
576
+ <tbody>
577
+ <tr style="padding: 0; text-align: center; vertical-align: top;">
578
+ <td class="email-preferences-inner"
579
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; border-top: 2px solid #e9ebe7; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 40px; text-align: left; vertical-align: top; word-wrap: break-word;">
580
+ <table class="email-preferences-content row collapse" align="center" valign="top"
581
+ style="border-collapse: collapse; border-spacing: 0; display: table; padding: 0; position: relative; text-align: center; vertical-align: top; width: 100%;">
582
+ <tbody>
583
+ <tr style="padding: 0; text-align: center; vertical-align: top;">
584
+ <th class="small-12 large-8 columns first copy" align="center"
585
+ style="Margin: 0 auto; color: #707070; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 20px; margin: 0 auto; padding: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; text-align: left; width: 394.66667px;">
586
+ <p style="Margin: 0; Margin-bottom: 0; color: #707070; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 20px; margin: 0; margin-bottom: 0; padding: 0; text-align: center;">
587
+ <?php printf( __( "<a href=\"%s\">Configure reporting preferences</a>", "defender-security" ), network_admin_url( "admin.php?page=wdf-ip-lockout&view=reporting" ) ) ?>
588
+ </p>
589
+ </th>
590
+ </tr>
591
+ </tbody>
592
+ </table>
593
+ </td>
594
+ </tr>
595
+ </tbody>
596
+ </table>
597
+ <!-- End Preferences -->
598
+
599
+ <table class="company-info" align="left" valign="middle"
600
+ style="border-collapse: collapse; border-spacing: 0; margin: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
601
+ <tbody>
602
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
603
+ <td class="company-info-inner"
604
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; border-top: 2px solid #e9ebe7; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 40px; text-align: left; vertical-align: top; word-wrap: break-word;">
605
+ <table class="company-info-content row collapse" align="left" valign="top"
606
+ style="border-collapse: collapse; border-spacing: 0; display: table; padding: 0; position: relative; text-align: left; vertical-align: top; width: 100%;">
607
+ <tbody>
608
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
609
+ <th class="small-12 large-8 columns first copy" align="left"
610
+ style="Margin: 0 auto; color: #707070; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 20px; margin: 0 auto; padding: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; text-align: left; width: 394.66667px;">
611
+ <p style="Margin: 0; Margin-bottom: 0; color: #707070; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 20px; margin: 0; margin-bottom: 0; padding: 0; text-align: left;">
612
+ Copyright © Incsub, All rights reserved.</p>
613
+ <p style="Margin: 0; Margin-bottom: 0; color: #707070; font-family: Helvetica, Arial, sans-serif; font-size: 12px; font-weight: normal; line-height: 20px; margin: 0; margin-bottom: 0; padding: 0; text-align: left;">
614
+ Incsub PO box 163 Albert Park, Victoria 3206 Australia</p>
615
+ </th>
616
+ <th class="small-12 large-4 columns last logo" align="right"
617
+ style="Margin: 0 auto; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0 auto; padding: 0; padding-bottom: 0; padding-left: 0; padding-right: 0; text-align: right; width: 201.33333px;">
618
+ <a href="https://premium.wpmudev.org" class="logo-link"
619
+ style="Margin: 0; color: #555555; display: inline-block; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 1.3; margin: 0; padding: 0; text-align: right; text-decoration: none;">
620
+ <img
621
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/wpmudev-logo.png"
622
+ alt="WPMU DEV"
623
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: inline-block; max-width: 100%; outline: none; text-align: right; text-decoration: none; width: auto;">
624
+ </a>
625
+ </th>
626
+ <th class="expander"
627
+ style="Margin: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; padding: 0 !important; text-align: left; visibility: hidden; width: 0;"></th>
628
+ </tr>
629
+ </tbody>
630
+ </table>
631
+ </td>
632
+ </tr>
633
+ </tbody>
634
+ </table>
635
+ <!-- end company-info -->
636
+
637
+ <table class="wrapper social" align="center"
638
+ style="background-color: #e9ebe7; border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top; width: 100%;">
639
+ <tbody>
640
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
641
+ <td class="wrapper-inner social-inner"
642
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 40px 60px 20px; text-align: left; vertical-align: top; word-wrap: break-word;">
643
+
644
+ <table class="social-content" align="center"
645
+ style="border-collapse: collapse; border-spacing: 0; padding: 0; text-align: left; vertical-align: top;">
646
+ <tbody>
647
+ <tr style="padding: 0; text-align: left; vertical-align: top;">
648
+ <td class="social-content-inner"
649
+ style="-moz-hyphens: auto; -webkit-hyphens: auto; Margin: 0; border-collapse: collapse !important; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; hyphens: auto; line-height: 26px; margin: 0; padding: 0; text-align: center; vertical-align: top; word-wrap: break-word;">
650
+ <a href="https://plus.google.com/+wpmuorg/" target="_blank"
651
+ class="gplus"
652
+ style="Margin: 0; color: #555555; display: inline-block; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 1.3; margin: 0; margin-right: 4px; padding: 0; text-align: left; text-decoration: none;"><img
653
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/icon-gplus.png"
654
+ alt="WPMU DEV on Google+"
655
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: block; max-width: 100%; outline: none; text-decoration: none; width: auto;"></a>
656
+ <a href="https://twitter.com/wpmudev" target="_blank"
657
+ class="twitter"
658
+ style="Margin: 0; color: #555555; display: inline-block; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 1.3; margin: 0; margin-right: 4px; padding: 0; text-align: left; text-decoration: none;"><img
659
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/icon-twitter.png"
660
+ alt="WPMU DEV on Twitter"
661
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: block; max-width: 100%; outline: none; text-decoration: none; width: auto;"></a>
662
+ <a href="https://www.facebook.com/wpmudev" target="_blank"
663
+ class="facebook"
664
+ style="Margin: 0; color: #555555; display: inline-block; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 1.3; margin: 0; margin-right: 0; padding: 0; text-align: left; text-decoration: none;"><img
665
+ src="<?php echo wp_defender()->getPluginUrl() ?>assets/email-images/icon-facebook.png"
666
+ alt="WPMU DEV on Facebook"
667
+ style="-ms-interpolation-mode: bicubic; border: none; clear: both; display: block; max-width: 100%; outline: none; text-decoration: none; width: auto;"></a>
668
+ </td>
669
+ </tr>
670
+ </tbody>
671
+ </table>
672
+ <!-- end social-content -->
673
+
674
+ </td>
675
+ </tr>
676
+ </tbody>
677
+ </table>
678
+ <!-- end top -->
679
+ </td>
680
+ </tr>
681
+ </tbody>
682
+ </table>
683
+ <!-- end main container -->
684
+
685
+ </center>
686
+
687
+ </td>
688
+ </tr>
689
+ </tbody>
690
+ </table>
691
+ <!-- end body -->
692
+ </body>
693
+ </html>
changelog.txt CHANGED
@@ -4,16 +4,25 @@ Tested up to: 4.7.4
4
 
5
  Change Log:
6
 
 
 
 
 
 
 
 
 
7
  2.0 - 2018-04-09
8
  ----------------------------------------------------------------------
9
  - New: added tweak “Disable XML-RPC”
10
  - Improvement: Two factor authentication can now be force enabled by role.
11
- - Improvement: better clarification on Mask Login Area page
12
- - Fix: Compatibility with Appointments login when Mask Login enabled.
13
- - Fix: /login/ will be blocked instead of redirect to right login URL
14
- - Fix: new site registration emails login URL now show right Login URL instead of the original one if Mask URL enabled.
15
- - Fix: Accessibility fix for factor authentication
16
- - Changes: Show Admin Pointer when first activate Defender and remove the redirect behavior
 
17
 
18
  1.9.1 - 2018-09-07
19
  ----------------------------------------------------------------------
4
 
5
  Change Log:
6
 
7
+ 2.0.1 - 2018-19-11
8
+ ----------------------------------------------------------------------
9
+ - Fix: permanently ban 404 lockouts now send correct email
10
+ - Fix: IP lockout logs sorting show wrong results when pagination
11
+ - Fix: IP lockout logs show wrong badge for 404 lockout
12
+ - Fix: Conflict issue with sensei plugin make 2FA does not work properly
13
+ - Other minor enhancements and fixes
14
+
15
  2.0 - 2018-04-09
16
  ----------------------------------------------------------------------
17
  - New: added tweak “Disable XML-RPC”
18
  - Improvement: Two factor authentication can now be force enabled by role.
19
+ - Improvement: Masking URL description.
20
+ - Fix: Compatibility with Appointments+ login when Mask Login is enabled.
21
+ - Fix: /login/ will be blocked instead of redirecting to right login URL
22
+ - Fix: new site registration email login URL will now show right Login URL instead of the original one when Mask URL is enabled.
23
+ - Fix: Accessibility issue when activating 2FA.
24
+ - Changes: Show Admin Pointer on initial Defender activation, and removing the redirect behavior.
25
+ - Other minor enhancements and fixes
26
 
27
  1.9.1 - 2018-09-07
28
  ----------------------------------------------------------------------
free-dashboard/README.md CHANGED
@@ -14,7 +14,7 @@ It will display a welcome message upon plugin activation that offers the user a
14
  4. Done!
15
 
16
 
17
- ## Code Example (from Membership 2) ##
18
 
19
  ```
20
  #!php
@@ -27,10 +27,10 @@ include_once 'lib/wdev-frash/module.php';
27
  do_action(
28
  'wdev-register-plugin',
29
  /* 1 Plugin ID */ plugin_basename( __FILE__ ),
30
- /* 2 Plugin Title */ 'Membership 2',
31
- /* 3 https://wordpress.org */ '/plugins/membership/',
32
- /* 4 Email Button CTA */ __( 'Get Members!', MYD_TEXT_DOMAIN ),
33
- /* 5 getdrip Plugin param */ 'Membership'
34
  );
35
  // All done!
36
  ```
@@ -39,7 +39,7 @@ do_action(
39
  2. The plugin title, same as in the plugin header (no translation!)
40
  3. The wordpress.org plugin-URL
41
  4. Optional: Title of the Email-subscription button. If empty no email message is displayed.
42
- 5. Optional: getdrip plugin name (defined in the getdrip rule). If empty no email message is displayed
43
 
44
 
45
  ## Optional: Customize the messages via filters ##
14
  4. Done!
15
 
16
 
17
+ ## Code Example (from Smush ) ##
18
 
19
  ```
20
  #!php
27
  do_action(
28
  'wdev-register-plugin',
29
  /* 1 Plugin ID */ plugin_basename( __FILE__ ),
30
+ /* 2 Plugin Title */ 'Smush',
31
+ /* 3 https://wordpress.org */ '/plugins/wp-smushit/',
32
+ /* 4 Email Button CTA */ __( 'Get Fast!', MYD_TEXT_DOMAIN ),
33
+ /* 5 Mailchimp List id for the plugin - e.g. 4b14b58816 is list id for Smush */ '4b14b58816'
34
  );
35
  // All done!
36
  ```
39
  2. The plugin title, same as in the plugin header (no translation!)
40
  3. The wordpress.org plugin-URL
41
  4. Optional: Title of the Email-subscription button. If empty no email message is displayed.
42
+ 5. Optional: Mailchimp List id for the plugin. If empty no email message is displayed
43
 
44
 
45
  ## Optional: Customize the messages via filters ##
free-dashboard/admin.js CHANGED
@@ -3,10 +3,9 @@ jQuery(function() {
3
  type = el_notice.find( "input[name=type]" ).val(),
4
  plugin_id = el_notice.find( "input[name=plugin_id]" ).val(),
5
  url_wp = el_notice.find( "input[name=url_wp]" ).val(),
6
- drip_plugin = el_notice.find( "input[name=drip_plugin]" ).val(),
7
- inp_email = el_notice.find( "input[name=email]" )
8
  btn_act = el_notice.find( ".frash-notice-act" ),
9
- btn_dismiss = el_notice.find( ".frash-notice-dismiss" )
10
  ajax_data = {};
11
 
12
  ajax_data.plugin_id = plugin_id;
@@ -65,22 +64,22 @@ jQuery(function() {
65
  }
66
 
67
  // Submit the user to our email list.
68
- function act_email() {
69
- var email = inp_email.val();
70
-
71
- // First create a new subscriber.
72
- _dcq.push([
73
- "identify",
74
- { email: email }
75
- ]);
76
-
77
- // Then trigger the specified rule.
78
- _dcq.push([
79
- "track",
80
- "Free plugin email course",
81
- {"Plugin": drip_plugin}
82
- ]);
83
- }
84
 
85
  // Notify WordPress about the users choice and close the message.
86
  function notify_wordpress( action, message ) {
@@ -100,6 +99,12 @@ jQuery(function() {
100
  btn_act.click(function( ev ) {
101
  ev.preventDefault();
102
 
 
 
 
 
 
 
103
  switch ( type ) {
104
  case 'rate': act_rate(); break;
105
  case 'email': act_email(); break;
@@ -116,16 +121,4 @@ jQuery(function() {
116
  });
117
 
118
  window.setTimeout( initialize, 500 );
119
- });
120
-
121
- // Drip integration
122
- var _dcq = _dcq || [];
123
- var _dcs = _dcs || {};
124
-
125
- _dcs.account = '6994213';
126
- var dc = document.createElement( 'script' );
127
- dc.type = 'text/javascript'; dc.async = true;
128
- dc.src = '//tag.getdrip.com/6994213.js';
129
- var s = document.getElementsByTagName('script')[0];
130
- s.parentNode.insertBefore(dc, s);
131
- // End of drip integration
3
  type = el_notice.find( "input[name=type]" ).val(),
4
  plugin_id = el_notice.find( "input[name=plugin_id]" ).val(),
5
  url_wp = el_notice.find( "input[name=url_wp]" ).val(),
6
+ inp_email = el_notice.find( "input[name=EMAIL]" ),
 
7
  btn_act = el_notice.find( ".frash-notice-act" ),
8
+ btn_dismiss = el_notice.find( ".frash-notice-dismiss" ),
9
  ajax_data = {};
10
 
11
  ajax_data.plugin_id = plugin_id;
64
  }
65
 
66
  // Submit the user to our email list.
67
+ function act_email() {
68
+
69
+ var form = inp_email.parent('form');
70
+ //Submit email to mailing list
71
+ jQuery.ajax({
72
+ type: form.attr('method'),
73
+ url: form.attr('action'),
74
+ data: form.serialize(),
75
+ cache: false,
76
+ dataType: 'json',
77
+ contentType: 'application/json; charset=utf-8',
78
+ success: function (data) {
79
+ console.log(data.msg);
80
+ }
81
+ });
82
+ }
83
 
84
  // Notify WordPress about the users choice and close the message.
85
  function notify_wordpress( action, message ) {
99
  btn_act.click(function( ev ) {
100
  ev.preventDefault();
101
 
102
+ //Do not submit form if the value is not set
103
+ var email_inpt = btn_act.parent().find('input[type="email"]');
104
+ if( !email_inpt.length || !email_inpt.val() ) {
105
+ return;
106
+ }
107
+
108
  switch ( type ) {
109
  case 'rate': act_rate(); break;
110
  case 'email': act_email(); break;
121
  });
122
 
123
  window.setTimeout( initialize, 500 );
124
+ });
 
 
 
 
 
 
 
 
 
 
 
 
free-dashboard/module.php CHANGED
@@ -3,7 +3,7 @@
3
  * WPMUDEV Frash - Free Dashboard Notification module.
4
  * Used by wordpress.org hosted plugins.
5
  *
6
- * @version 1.1.0
7
  * @author Incsub (Philipp Stracker)
8
  */
9
  if ( ! class_exists( 'WDev_Frash' ) ) {
@@ -28,6 +28,16 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
28
  */
29
  protected $stored = array();
30
 
 
 
 
 
 
 
 
 
 
 
31
  /**
32
  * Initializes and returns the singleton instance.
33
  *
@@ -106,9 +116,9 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
106
  * @param string $title Plugin name for display.
107
  * @param string $url_wp URL to the plugin on wp.org (domain not needed)
108
  * @param string $cta_email Title of the Email CTA button.
109
- * @param string $drip_plugin Optional. Plugin-param for the getdrip rule.
110
  */
111
- public function wdev_register_plugin( $plugin_id, $title, $url_wp, $cta_email = '', $drip_plugin = '' ) {
112
  // Ignore incorrectly registered plugins to avoid errors later.
113
  if ( empty( $plugin_id ) ) { return; }
114
  if ( empty( $title ) ) { return; }
@@ -123,7 +133,7 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
123
  'title' => $title,
124
  'url_wp' => $url_wp,
125
  'cta_email' => $cta_email,
126
- 'drip_plugin' => $drip_plugin,
127
  );
128
 
129
  /*
@@ -257,7 +267,8 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
257
  }
258
  }
259
  if ( 'email' == $item['type'] ) {
260
- if ( ! $plugin->drip_plugin || ! $plugin->cta_email ) {
 
261
  // Do not display email message with missing email params.
262
  $can_display = false;
263
  }
@@ -350,7 +361,6 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
350
  <input type="hidden" name="type" value="<?php echo esc_attr( $info->type ); ?>" />
351
  <input type="hidden" name="plugin_id" value="<?php echo esc_attr( $info->plugin ); ?>" />
352
  <input type="hidden" name="url_wp" value="<?php echo esc_attr( $plugin->url_wp ); ?>" />
353
- <input type="hidden" name="drip_plugin" value="<?php echo esc_attr( $plugin->drip_plugin ); ?>" />
354
  <?php
355
  if ( 'email' == $info->type ) {
356
  $this->render_email_message( $plugin );
@@ -370,9 +380,8 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
370
  * @since 1.0.0
371
  */
372
  protected function render_email_message( $plugin ) {
373
- $user = wp_get_current_user();
374
- $user_name = $user->display_name;
375
  $admin_email = get_site_option( 'admin_email' );
 
376
 
377
  $msg = __( "We're happy that you've chosen to install %s! Are you interested in how to make the most of this plugin? How would you like a quick 5 day email crash course with actionable advice on building your membership site? Only the info you want, no subscription!", 'wdev_frash' );
378
  $msg = apply_filters( 'wdev-email-message-' . $plugin->id, $msg );
@@ -388,13 +397,15 @@ if ( ! class_exists( 'WDev_Frash' ) ) {
388
  ?>
389
  </div>
390
  <div class="frash-notice-cta">
391
- <input type="email" name="email" value="<?php echo esc_attr( $admin_email ); ?>" />
392
- <button class="frash-notice-act button-primary" data-msg="<?php _e( 'Thanks :)', 'wdev_frash' ); ?>">
393
- <?php echo esc_html( $plugin->cta_email ); ?>
394
- </button>
395
- <button class="frash-notice-dismiss" data-msg="<?php _e( 'Saving', 'wdev_frash' ); ?>">
396
- <?php _e( 'No thanks', 'wdev_frash' ); ?>
397
- </button>
 
 
398
  </div>
399
  <?php
400
  }
3
  * WPMUDEV Frash - Free Dashboard Notification module.
4
  * Used by wordpress.org hosted plugins.
5
  *
6
+ * @version 1.2
7
  * @author Incsub (Philipp Stracker)
8
  */
9
  if ( ! class_exists( 'WDev_Frash' ) ) {
28
  */
29
  protected $stored = array();
30
 
31
+ /**
32
+ * User id /API Key for Mailchimp subscriber list
33
+ *
34
+ * @since 1.2
35
+ *
36
+ * @var string
37
+ *
38
+ */
39
+ private $mc_user_id = '53a1e972a043d1264ed082a5b';
40
+
41
  /**
42
  * Initializes and returns the singleton instance.
43
  *
116
  * @param string $title Plugin name for display.
117
  * @param string $url_wp URL to the plugin on wp.org (domain not needed)
118
  * @param string $cta_email Title of the Email CTA button.
119
+ * @param string $mc_list_id required. Mailchimp mailing list id for the plugin.
120
  */
121
+ public function wdev_register_plugin( $plugin_id, $title, $url_wp, $cta_email = '', $mc_list_id = '' ) {
122
  // Ignore incorrectly registered plugins to avoid errors later.
123
  if ( empty( $plugin_id ) ) { return; }
124
  if ( empty( $title ) ) { return; }
133
  'title' => $title,
134
  'url_wp' => $url_wp,
135
  'cta_email' => $cta_email,
136
+ 'mc_list_id' => $mc_list_id,
137
  );
138
 
139
  /*
267
  }
268
  }
269
  if ( 'email' == $item['type'] ) {
270
+ //If we don't have mailchimp list id
271
+ if ( ! $plugin->mc_list_id || ! $plugin->cta_email ) {
272
  // Do not display email message with missing email params.
273
  $can_display = false;
274
  }
361
  <input type="hidden" name="type" value="<?php echo esc_attr( $info->type ); ?>" />
362
  <input type="hidden" name="plugin_id" value="<?php echo esc_attr( $info->plugin ); ?>" />
363
  <input type="hidden" name="url_wp" value="<?php echo esc_attr( $plugin->url_wp ); ?>" />
 
364
  <?php
365
  if ( 'email' == $info->type ) {
366
  $this->render_email_message( $plugin );
380
  * @since 1.0.0
381
  */
382
  protected function render_email_message( $plugin ) {
 
 
383
  $admin_email = get_site_option( 'admin_email' );
384
+ $action = "https://edublogs.us1.list-manage.com/subscribe/post?u={$this->mc_user_id}&id={$plugin->mc_list_id}";
385
 
386
  $msg = __( "We're happy that you've chosen to install %s! Are you interested in how to make the most of this plugin? How would you like a quick 5 day email crash course with actionable advice on building your membership site? Only the info you want, no subscription!", 'wdev_frash' );
387
  $msg = apply_filters( 'wdev-email-message-' . $plugin->id, $msg );
397
  ?>
398
  </div>
399
  <div class="frash-notice-cta">
400
+ <form action="<?php echo $action; ?>" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
401
+ <input type="email" name="EMAIL" class="email" id="mce-EMAIL" value="<?php echo esc_attr( $admin_email ); ?>" required="required"/>
402
+ <button class="frash-notice-act button-primary" data-msg="<?php _e( 'Thanks :)', 'wdev_frash' ); ?>" type="submit">
403
+ <?php echo esc_html( $plugin->cta_email ); ?>
404
+ </button>
405
+ <button class="frash-notice-dismiss" data-msg="<?php _e( 'Saving', 'wdev_frash' ); ?>">
406
+ <?php _e( 'No thanks', 'wdev_frash' ); ?>
407
+ </button>
408
+ </form>
409
  </div>
410
  <?php
411
  }
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 2.0\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
- "POT-Creation-Date: 2018-09-04 10:26:31+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:916 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:919 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:922 free/utils.php:715
166
  msgid "monthly"
167
  msgstr ""
168
 
@@ -216,27 +216,27 @@ msgstr ""
216
  msgid "Guest"
217
  msgstr ""
218
 
219
- #: app/behavior/utils.php:740
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
- #: app/behavior/utils.php:741
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
- #: app/behavior/utils.php:742 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:771 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:899 free/utils.php:692
240
  msgid "Please upgrade to 5.3 or later"
241
  msgstr ""
242
 
@@ -351,7 +351,7 @@ msgstr ""
351
 
352
  #: app/module/advanced-tools/behavior/at-widget.php:18
353
  #: app/module/advanced-tools/controller/main.php:486
354
- #: app/module/advanced-tools/view/layouts/layout.php:5
355
  msgid "Advanced Tools"
356
  msgstr ""
357
 
@@ -362,7 +362,7 @@ msgid ""
362
  msgstr ""
363
 
364
  #: app/module/advanced-tools/behavior/at-widget.php:28
365
- #: app/module/advanced-tools/view/layouts/layout.php:13
366
  #: app/module/advanced-tools/view/main-free.php:4
367
  #: app/module/advanced-tools/view/main.php:4
368
  msgid "Two-Factor Authentication"
@@ -410,7 +410,7 @@ msgid "Activate"
410
  msgstr ""
411
 
412
  #: app/module/advanced-tools/behavior/at-widget.php:75
413
- #: app/module/advanced-tools/view/layouts/layout.php:19
414
  #: app/module/advanced-tools/view/mask-login/disabled.php:4
415
  #: app/module/advanced-tools/view/mask-login/enabled.php:4
416
  msgid "Mask Login Area"
@@ -431,12 +431,12 @@ msgstr ""
431
  msgid "Masking is currently active at <strong>%s</strong>"
432
  msgstr ""
433
 
434
- #: app/module/advanced-tools/component/mask-api.php:141
435
  msgid "The URL is invalid"
436
  msgstr ""
437
 
438
- #: app/module/advanced-tools/component/mask-api.php:146
439
- #: app/module/advanced-tools/component/mask-api.php:157
440
  msgid ""
441
  "A page already exists at this URL, please pick a unique page for your new "
442
  "login area."
@@ -465,8 +465,8 @@ msgid "Your token is invalid"
465
  msgstr ""
466
 
467
  #: app/module/advanced-tools/controller/main.php:246
468
- #: app/module/advanced-tools/controller/main.php:585
469
- #: app/module/advanced-tools/controller/main.php:629
470
  #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:3
471
  msgid "Your OTP code"
472
  msgstr ""
@@ -495,36 +495,36 @@ msgstr ""
495
  msgid "Edit Email"
496
  msgstr ""
497
 
498
- #: app/module/advanced-tools/controller/main.php:565
499
- #: app/module/advanced-tools/controller/mask-login.php:272
500
  #: app/module/audit/controller/main.php:197
501
- #: app/module/ip-lockout/controller/main.php:739
502
  #: app/module/scan/controller/main.php:306
503
  msgid "Your settings have been updated."
504
  msgstr ""
505
 
506
- #: app/module/advanced-tools/controller/main.php:591
507
- #: app/module/advanced-tools/controller/main.php:635
508
  msgid "%s variable was not found in mail body."
509
  msgstr ""
510
 
511
- #: app/module/advanced-tools/controller/main.php:603
512
  msgid "Email settings has been saved."
513
  msgstr ""
514
 
515
- #: app/module/advanced-tools/controller/main.php:652
516
  msgid "Test email has been sent to your email."
517
  msgstr ""
518
 
519
- #: app/module/advanced-tools/controller/main.php:656
520
  msgid "Test email failed."
521
  msgstr ""
522
 
523
- #: app/module/advanced-tools/controller/mask-login.php:219
524
  msgid "This feature is disabled"
525
  msgstr ""
526
 
527
- #: app/module/advanced-tools/controller/mask-login.php:265
528
  msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
529
  msgstr ""
530
 
@@ -554,7 +554,7 @@ msgid "Available variables"
554
  msgstr ""
555
 
556
  #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:39
557
- #: app/module/advanced-tools/view/login/disabled.php:38
558
  #: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
559
  #: app/module/scan/view/setting.php:158
560
  msgid "Cancel"
@@ -570,9 +570,9 @@ msgid "Send Test"
570
  msgstr ""
571
 
572
  #: app/module/advanced-tools/view/disabled.php:4
573
- #: app/module/advanced-tools/view/layouts/layout.php:26
574
- #: app/module/advanced-tools/view/login/disabled.php:6
575
- #: app/module/advanced-tools/view/login/enabled.php:6
576
  msgid "Two Factor Authentication"
577
  msgstr ""
578
 
@@ -584,69 +584,69 @@ msgid ""
584
  "protection against brute force attacks."
585
  msgstr ""
586
 
587
- #: app/module/advanced-tools/view/login/disabled.php:2
588
- #: app/module/advanced-tools/view/login/enabled.php:2
589
  msgid "Security"
590
  msgstr ""
591
 
592
- #: app/module/advanced-tools/view/login/disabled.php:29
593
  #: app/module/ip-lockout/view/detect-404/disabled.php:16
594
  #: app/module/ip-lockout/view/login-lockouts/disabled.php:18
595
  msgid "Enable"
596
  msgstr ""
597
 
598
- #: app/module/advanced-tools/view/login/disabled.php:33
599
- #: app/module/advanced-tools/view/login/disabled.php:39
600
  msgid "Use the Google Authenticator app to sign in with a separate passcode."
601
  msgstr ""
602
 
603
- #: app/module/advanced-tools/view/login/disabled.php:42
604
  msgid "1. Install the Verification app"
605
  msgstr ""
606
 
607
- #: app/module/advanced-tools/view/login/disabled.php:45
608
  msgid ""
609
  "Download and install the Google Authenticator app on your device using the "
610
  "links below."
611
  msgstr ""
612
 
613
- #: app/module/advanced-tools/view/login/disabled.php:54
614
  msgid "2. Scan the barcode"
615
  msgstr ""
616
 
617
- #: app/module/advanced-tools/view/login/disabled.php:55
618
  msgid ""
619
  "Open the Google Authenticator app you just downloaded, tap the “+” symbol "
620
  "and then use your phone’s camera to scan the barcode below."
621
  msgstr ""
622
 
623
- #: app/module/advanced-tools/view/login/disabled.php:59
624
  msgid "3. Enter passcode"
625
  msgstr ""
626
 
627
- #: app/module/advanced-tools/view/login/disabled.php:61
628
  msgid ""
629
  "Enter the 6 digit passcode that is shown on your device into the input "
630
  "field below and hit “Verify”."
631
  msgstr ""
632
 
633
- #: app/module/advanced-tools/view/login/disabled.php:67
634
  msgid "Verify"
635
  msgstr ""
636
 
637
- #: app/module/advanced-tools/view/login/enabled.php:9
638
  msgid "Two factor authentication is active."
639
  msgstr ""
640
 
641
- #: app/module/advanced-tools/view/login/enabled.php:12
642
  msgid "Disable"
643
  msgstr ""
644
 
645
- #: app/module/advanced-tools/view/login/enabled.php:17
646
  msgid "Fallback email address"
647
  msgstr ""
648
 
649
- #: app/module/advanced-tools/view/login/enabled.php:21
650
  msgid ""
651
  "If you ever lose your device, you can send a fallback passcode to this "
652
  "email address."
@@ -990,37 +990,37 @@ msgid "restored"
990
  msgstr ""
991
 
992
  #: app/module/audit/component/audit-api.php:205
993
- #: app/module/ip-lockout/component/login-protection-api.php:248
994
  msgid "year"
995
  msgstr ""
996
 
997
  #: app/module/audit/component/audit-api.php:206
998
- #: app/module/ip-lockout/component/login-protection-api.php:249
999
  msgid "month"
1000
  msgstr ""
1001
 
1002
  #: app/module/audit/component/audit-api.php:207
1003
- #: app/module/ip-lockout/component/login-protection-api.php:250
1004
  msgid "week"
1005
  msgstr ""
1006
 
1007
  #: app/module/audit/component/audit-api.php:208
1008
- #: app/module/ip-lockout/component/login-protection-api.php:251
1009
  msgid "day"
1010
  msgstr ""
1011
 
1012
  #: app/module/audit/component/audit-api.php:209
1013
- #: app/module/ip-lockout/component/login-protection-api.php:252
1014
  msgid "hour"
1015
  msgstr ""
1016
 
1017
  #: app/module/audit/component/audit-api.php:210
1018
- #: app/module/ip-lockout/component/login-protection-api.php:253
1019
  msgid "minute"
1020
  msgstr ""
1021
 
1022
  #: app/module/audit/component/audit-api.php:211
1023
- #: app/module/ip-lockout/component/login-protection-api.php:254
1024
  msgid "second"
1025
  msgstr ""
1026
 
@@ -1717,6 +1717,7 @@ msgid "Audit Update From"
1717
  msgstr ""
1718
 
1719
  #: app/module/audit/view/email_template.php:419
 
1720
  #: app/module/ip-lockout/view/emails/404-lockout.php:420
1721
  #: app/module/ip-lockout/view/emails/login-lockout.php:420
1722
  #: app/module/ip-lockout/view/emails/login-username-ban.php:420
@@ -1726,6 +1727,7 @@ msgid "Defender!"
1726
  msgstr ""
1727
 
1728
  #: app/module/audit/view/email_template.php:454
 
1729
  #: app/module/ip-lockout/view/emails/404-lockout.php:511
1730
  #: app/module/ip-lockout/view/emails/login-lockout.php:513
1731
  #: app/module/ip-lockout/view/emails/login-username-ban.php:512
@@ -1735,6 +1737,7 @@ msgid "Related plugins worth giving a try"
1735
  msgstr ""
1736
 
1737
  #: app/module/audit/view/email_template.php:475
 
1738
  #: app/module/ip-lockout/view/emails/404-lockout.php:532
1739
  #: app/module/ip-lockout/view/emails/login-lockout.php:534
1740
  #: app/module/ip-lockout/view/emails/login-username-ban.php:533
@@ -1744,6 +1747,7 @@ msgid "Optimize your site with"
1744
  msgstr ""
1745
 
1746
  #: app/module/audit/view/email_template.php:477
 
1747
  #: app/module/ip-lockout/view/emails/404-lockout.php:534
1748
  #: app/module/ip-lockout/view/emails/login-lockout.php:536
1749
  #: app/module/ip-lockout/view/emails/login-username-ban.php:535
@@ -1753,6 +1757,7 @@ msgid "Hummingbird"
1753
  msgstr ""
1754
 
1755
  #: app/module/audit/view/email_template.php:494
 
1756
  #: app/module/ip-lockout/view/emails/404-lockout.php:551
1757
  #: app/module/ip-lockout/view/emails/login-lockout.php:553
1758
  #: app/module/ip-lockout/view/emails/login-username-ban.php:552
@@ -1762,6 +1767,7 @@ msgid "Back up your hard work with"
1762
  msgstr ""
1763
 
1764
  #: app/module/audit/view/email_template.php:496
 
1765
  #: app/module/ip-lockout/view/emails/404-lockout.php:553
1766
  #: app/module/ip-lockout/view/emails/login-lockout.php:555
1767
  #: app/module/ip-lockout/view/emails/login-username-ban.php:554
@@ -1771,6 +1777,7 @@ msgid "Snapshot"
1771
  msgstr ""
1772
 
1773
  #: app/module/audit/view/email_template.php:530
 
1774
  #: app/module/ip-lockout/view/emails/404-lockout.php:587
1775
  #: app/module/ip-lockout/view/emails/login-lockout.php:589
1776
  #: app/module/ip-lockout/view/emails/login-username-ban.php:588
@@ -1824,7 +1831,7 @@ msgstr ""
1824
 
1825
  #: app/module/audit/view/main.php:21 app/module/audit/view/main.php:27
1826
  #: app/module/audit/view/main.php:78
1827
- #: app/module/ip-lockout/component/logs-table.php:336
1828
  msgid "Filter"
1829
  msgstr ""
1830
 
@@ -2852,8 +2859,8 @@ msgid "Lockout notifications are disabled"
2852
  msgstr ""
2853
 
2854
  #: app/module/ip-lockout/component/login-protection-api.php:61
2855
- #: app/module/ip-lockout/controller/main.php:634
2856
- #: app/module/ip-lockout/controller/main.php:643
2857
  msgid ""
2858
  "You have been locked out by the administrator for attempting to login with "
2859
  "a banned username"
@@ -2875,36 +2882,36 @@ msgstr ""
2875
  msgid "Lockout occurred: Too many 404 requests for %s"
2876
  msgstr ""
2877
 
2878
- #: app/module/ip-lockout/component/login-protection-api.php:283
2879
  msgid "Ban IP"
2880
  msgstr ""
2881
 
2882
- #: app/module/ip-lockout/component/login-protection-api.php:285
2883
  msgid "Unban IP"
2884
  msgstr ""
2885
 
2886
- #: app/module/ip-lockout/component/login-protection-api.php:290
2887
  msgid "Add Whitelist"
2888
  msgstr ""
2889
 
2890
- #: app/module/ip-lockout/component/login-protection-api.php:292
2891
  msgid "Unwhitelist"
2892
  msgstr ""
2893
 
2894
- #: app/module/ip-lockout/component/login-protection-api.php:568
2895
  msgid "Is whitelisted"
2896
  msgstr ""
2897
 
2898
- #: app/module/ip-lockout/component/login-protection-api.php:571
2899
  msgid "Is blacklisted"
2900
  msgstr ""
2901
 
2902
- #: app/module/ip-lockout/component/login-protection-api.php:578
2903
- #: app/module/ip-lockout/component/login-protection-api.php:584
2904
  msgid "Not banned"
2905
  msgstr ""
2906
 
2907
- #: app/module/ip-lockout/component/login-protection-api.php:582
2908
  msgid "Banned"
2909
  msgstr ""
2910
 
@@ -2942,7 +2949,7 @@ msgid "Login lockout"
2942
  msgstr ""
2943
 
2944
  #: app/module/ip-lockout/component/logs-table.php:174
2945
- #: app/module/ip-lockout/component/logs-table.php:276
2946
  #: app/module/ip-lockout/model/log-model-legacy.php:113
2947
  #: app/module/ip-lockout/model/log-model-legacy.php:114
2948
  #: app/module/ip-lockout/model/log-model.php:72
@@ -2977,33 +2984,33 @@ msgstr ""
2977
  msgid "%s tried to login with username %s"
2978
  msgstr ""
2979
 
2980
- #: app/module/ip-lockout/component/logs-table.php:276
2981
  msgid "Login failed"
2982
  msgstr ""
2983
 
2984
- #: app/module/ip-lockout/component/logs-table.php:282
2985
  msgid "IP"
2986
  msgstr ""
2987
 
2988
- #: app/module/ip-lockout/component/logs-table.php:288
2989
  msgid "Date/Time"
2990
  msgstr ""
2991
 
2992
- #: app/module/ip-lockout/component/logs-table.php:294
2993
  msgid "Ban Status"
2994
  msgstr ""
2995
 
2996
- #: app/module/ip-lockout/component/logs-table.php:307
2997
  msgid ""
2998
  "Note: Make sure this IP is not a legitimate operation, banning the IP will "
2999
  "result in being permanently locked out from accessing your website."
3000
  msgstr ""
3001
 
3002
- #: app/module/ip-lockout/component/logs-table.php:328
3003
  msgid "%s results"
3004
  msgstr ""
3005
 
3006
- #: app/module/ip-lockout/component/logs-table.php:425
3007
  msgid "Select All"
3008
  msgstr ""
3009
 
@@ -3033,64 +3040,64 @@ msgstr ""
3033
  msgid "Demo"
3034
  msgstr ""
3035
 
3036
- #: app/module/ip-lockout/controller/main.php:448
3037
  msgid "404 lockout alert for %s"
3038
  msgstr ""
3039
 
3040
- #: app/module/ip-lockout/controller/main.php:475
3041
  msgid "Login lockout alert for %s"
3042
  msgstr ""
3043
 
3044
- #: app/module/ip-lockout/controller/main.php:573
3045
  msgid "Failed login attempt with username %s"
3046
  msgstr ""
3047
 
3048
- #: app/module/ip-lockout/controller/main.php:636
3049
- #: app/module/ip-lockout/controller/main.php:646
3050
  msgid "%d login attempts remaining"
3051
  msgstr ""
3052
 
3053
- #: app/module/ip-lockout/controller/main.php:735
3054
  msgid ""
3055
  "Your settings have been updated, however some IPs were removed because "
3056
  "invalid format, or you blacklist yourself"
3057
  msgstr ""
3058
 
3059
- #: app/module/ip-lockout/controller/main.php:746
3060
  msgid "Login Protection has been activated."
3061
  msgstr ""
3062
 
3063
- #: app/module/ip-lockout/controller/main.php:748
3064
  msgid "Login Protection has been deactivated."
3065
  msgstr ""
3066
 
3067
- #: app/module/ip-lockout/controller/main.php:753
3068
  msgid "404 Detection has been activated."
3069
  msgstr ""
3070
 
3071
- #: app/module/ip-lockout/controller/main.php:755
3072
  msgid "404 Detection has been deactivated."
3073
  msgstr ""
3074
 
3075
- #: app/module/ip-lockout/controller/main.php:785 app/module/ip-lockout.php:35
3076
  #: app/view/activator-free.php:33 app/view/activator.php:49
3077
  msgid "IP Lockouts"
3078
  msgstr ""
3079
 
3080
- #: app/module/ip-lockout/controller/main.php:802
3081
- #: app/module/ip-lockout/controller/main.php:808
3082
  msgid "Your file is invalid!"
3083
  msgstr ""
3084
 
3085
- #: app/module/ip-lockout/controller/main.php:814
3086
  msgid "Your file content is invalid!"
3087
  msgstr ""
3088
 
3089
- #: app/module/ip-lockout/controller/main.php:823
3090
  msgid "Your whitelist/blacklist has been successfully imported."
3091
  msgstr ""
3092
 
3093
- #: app/module/ip-lockout/controller/main.php:1008
3094
  msgid "Thanks for your patience. All set."
3095
  msgstr ""
3096
 
@@ -3301,10 +3308,12 @@ msgstr ""
3301
  msgid "Monitor 404s from logged in users"
3302
  msgstr ""
3303
 
 
3304
  #: app/module/ip-lockout/view/emails/404-lockout.php:7
3305
  msgid "New 404 Lockout"
3306
  msgstr ""
3307
 
 
3308
  #: app/module/ip-lockout/view/emails/404-lockout.php:417
3309
  #: app/module/ip-lockout/view/emails/login-lockout.php:417
3310
  #: app/module/ip-lockout/view/emails/login-username-ban.php:417
@@ -3313,17 +3322,19 @@ msgstr ""
3313
  msgid "Protected By"
3314
  msgstr ""
3315
 
 
3316
  #: app/module/ip-lockout/view/emails/404-lockout.php:455
3317
  msgid "Hi %s"
3318
  msgstr ""
3319
 
3320
- #: app/module/ip-lockout/view/emails/404-lockout.php:460
3321
  msgid ""
3322
  "We've just locked out the host <strong>%s</strong> from %s due to more than "
3323
  "<strong>%s</strong> 404 requests for the file <strong>%s</strong>. They "
3324
- "have been locked out for <strong>%s seconds.</strong>"
3325
  msgstr ""
3326
 
 
3327
  #: app/module/ip-lockout/view/emails/404-lockout.php:463
3328
  #: app/module/ip-lockout/view/emails/login-lockout.php:465
3329
  #: app/module/ip-lockout/view/emails/login-username-ban.php:464
@@ -3331,6 +3342,7 @@ msgstr ""
3331
  msgid "You can view the full lockout logs <a href=\"%s\">here</a>"
3332
  msgstr ""
3333
 
 
3334
  #: app/module/ip-lockout/view/emails/404-lockout.php:478
3335
  #: app/module/ip-lockout/view/emails/login-lockout.php:480
3336
  #: app/module/ip-lockout/view/emails/login-username-ban.php:479
@@ -3338,6 +3350,7 @@ msgstr ""
3338
  msgid "Stay vigilant."
3339
  msgstr ""
3340
 
 
3341
  #: app/module/ip-lockout/view/emails/404-lockout.php:481
3342
  #: app/module/ip-lockout/view/emails/login-lockout.php:483
3343
  #: app/module/ip-lockout/view/emails/login-username-ban.php:482
@@ -3345,6 +3358,7 @@ msgstr ""
3345
  msgid "WP Defender"
3346
  msgstr ""
3347
 
 
3348
  #: app/module/ip-lockout/view/emails/404-lockout.php:483
3349
  #: app/module/ip-lockout/view/emails/login-lockout.php:485
3350
  #: app/module/ip-lockout/view/emails/login-username-ban.php:484
@@ -3356,6 +3370,13 @@ msgstr ""
3356
  msgid "WPMU DEV"
3357
  msgstr ""
3358
 
 
 
 
 
 
 
 
3359
  #: app/module/ip-lockout/view/emails/login-lockout.php:7
3360
  #: app/module/ip-lockout/view/emails/login-username-ban.php:7
3361
  msgid "New Login Lockout"
@@ -4648,15 +4669,14 @@ msgid ""
4648
  msgstr ""
4649
 
4650
  #: free/main-activator.php:70
4651
- msgid "Get Members!"
4652
  msgstr ""
4653
 
4654
  #: free/main-activator.php:78
4655
  msgid ""
4656
- "We're happy that you've chosen to install Defender! Are you interested in "
4657
- "how to make the most of this plugin? How would you like a quick 5 day email "
4658
- "crash course with actionable advice on making your website security "
4659
- "bulletproof? Only the info you want, no subscription!"
4660
  msgstr ""
4661
 
4662
  #: free/main-activator.php:120
@@ -4674,7 +4694,7 @@ msgstr ""
4674
  msgid "Docs"
4675
  msgstr ""
4676
 
4677
- #: free-dashboard/module.php:377
4678
  msgid ""
4679
  "We're happy that you've chosen to install %s! Are you interested in how to "
4680
  "make the most of this plugin? How would you like a quick 5 day email crash "
@@ -4682,31 +4702,31 @@ msgid ""
4682
  "info you want, no subscription!"
4683
  msgstr ""
4684
 
4685
- #: free-dashboard/module.php:392 free-dashboard/module.php:427
4686
  msgid "Thanks :)"
4687
  msgstr ""
4688
 
4689
- #: free-dashboard/module.php:395 free-dashboard/module.php:434
4690
  msgid "Saving"
4691
  msgstr ""
4692
 
4693
- #: free-dashboard/module.php:396 free-dashboard/module.php:435
4694
  msgid "No thanks"
4695
  msgstr ""
4696
 
4697
- #: free-dashboard/module.php:412
4698
  msgid ""
4699
  "Hey %s, you've been using %s for a while now, and we hope you're happy with "
4700
  "it."
4701
  msgstr ""
4702
 
4703
- #: free-dashboard/module.php:412
4704
  msgid ""
4705
  "We've spent countless hours developing this free plugin for you, and we "
4706
  "would really appreciate it if you dropped us a quick rating!"
4707
  msgstr ""
4708
 
4709
- #: free-dashboard/module.php:430
4710
  msgid "Rate %s"
4711
  msgstr ""
4712
 
2
  # This file is distributed under the GNU General Public License (Version 2 - GPLv2).
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Defender Pro 2.0.1-beta2\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
+ "POT-Creation-Date: 2018-10-08 10:52:02+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
152
  msgstr ""
153
 
154
  #: app/behavior/report-free.php:129 app/behavior/report.php:224
155
+ #: app/behavior/utils.php:917 free/utils.php:709
156
  msgid "daily"
157
  msgstr ""
158
 
159
  #: app/behavior/report-free.php:132 app/behavior/report.php:227
160
+ #: app/behavior/utils.php:920 free/utils.php:712
161
  msgid "weekly"
162
  msgstr ""
163
 
164
  #: app/behavior/report-free.php:135 app/behavior/report.php:230
165
+ #: app/behavior/utils.php:923 free/utils.php:715
166
  msgid "monthly"
167
  msgstr ""
168
 
216
  msgid "Guest"
217
  msgstr ""
218
 
219
+ #: app/behavior/utils.php:741
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
+ #: app/behavior/utils.php:742
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
+ #: app/behavior/utils.php:743 app/module/scan/behavior/scan.php:145
228
  #: app/module/scan/view/layouts/layout.php:70
229
  #: app/module/scan/view/setting-free.php:50 app/module/scan/view/setting.php:43
230
  #: app/view/settings.php:98
231
  msgid "Suspicious Code"
232
  msgstr ""
233
 
234
+ #: app/behavior/utils.php:772 app/module/audit/controller/main.php:144
235
  #: app/module/ip-lockout/controller/main.php:93
236
  msgid "Never"
237
  msgstr ""
238
 
239
+ #: app/behavior/utils.php:900 free/utils.php:692
240
  msgid "Please upgrade to 5.3 or later"
241
  msgstr ""
242
 
351
 
352
  #: app/module/advanced-tools/behavior/at-widget.php:18
353
  #: app/module/advanced-tools/controller/main.php:486
354
+ #: app/module/advanced-tools/view/layouts/layout.php:6
355
  msgid "Advanced Tools"
356
  msgstr ""
357
 
362
  msgstr ""
363
 
364
  #: app/module/advanced-tools/behavior/at-widget.php:28
365
+ #: app/module/advanced-tools/view/layouts/layout.php:14
366
  #: app/module/advanced-tools/view/main-free.php:4
367
  #: app/module/advanced-tools/view/main.php:4
368
  msgid "Two-Factor Authentication"
410
  msgstr ""
411
 
412
  #: app/module/advanced-tools/behavior/at-widget.php:75
413
+ #: app/module/advanced-tools/view/layouts/layout.php:20
414
  #: app/module/advanced-tools/view/mask-login/disabled.php:4
415
  #: app/module/advanced-tools/view/mask-login/enabled.php:4
416
  msgid "Mask Login Area"
431
  msgid "Masking is currently active at <strong>%s</strong>"
432
  msgstr ""
433
 
434
+ #: app/module/advanced-tools/component/mask-api.php:142
435
  msgid "The URL is invalid"
436
  msgstr ""
437
 
438
+ #: app/module/advanced-tools/component/mask-api.php:147
439
+ #: app/module/advanced-tools/component/mask-api.php:158
440
  msgid ""
441
  "A page already exists at this URL, please pick a unique page for your new "
442
  "login area."
465
  msgstr ""
466
 
467
  #: app/module/advanced-tools/controller/main.php:246
468
+ #: app/module/advanced-tools/controller/main.php:588
469
+ #: app/module/advanced-tools/controller/main.php:632
470
  #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:3
471
  msgid "Your OTP code"
472
  msgstr ""
495
  msgid "Edit Email"
496
  msgstr ""
497
 
498
+ #: app/module/advanced-tools/controller/main.php:568
499
+ #: app/module/advanced-tools/controller/mask-login.php:285
500
  #: app/module/audit/controller/main.php:197
501
+ #: app/module/ip-lockout/controller/main.php:740
502
  #: app/module/scan/controller/main.php:306
503
  msgid "Your settings have been updated."
504
  msgstr ""
505
 
506
+ #: app/module/advanced-tools/controller/main.php:594
507
+ #: app/module/advanced-tools/controller/main.php:638
508
  msgid "%s variable was not found in mail body."
509
  msgstr ""
510
 
511
+ #: app/module/advanced-tools/controller/main.php:606
512
  msgid "Email settings has been saved."
513
  msgstr ""
514
 
515
+ #: app/module/advanced-tools/controller/main.php:655
516
  msgid "Test email has been sent to your email."
517
  msgstr ""
518
 
519
+ #: app/module/advanced-tools/controller/main.php:659
520
  msgid "Test email failed."
521
  msgstr ""
522
 
523
+ #: app/module/advanced-tools/controller/mask-login.php:232
524
  msgid "This feature is disabled"
525
  msgstr ""
526
 
527
+ #: app/module/advanced-tools/controller/mask-login.php:278
528
  msgid "Login and 404 redirect URLs can't be the same. Please use different URLs."
529
  msgstr ""
530
 
554
  msgstr ""
555
 
556
  #: app/module/advanced-tools/view/2factor-otp-email-edit-from.php:39
557
+ #: app/module/advanced-tools/view/login/disabled.php:37
558
  #: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
559
  #: app/module/scan/view/setting.php:158
560
  msgid "Cancel"
570
  msgstr ""
571
 
572
  #: app/module/advanced-tools/view/disabled.php:4
573
+ #: app/module/advanced-tools/view/layouts/layout.php:27
574
+ #: app/module/advanced-tools/view/login/disabled.php:5
575
+ #: app/module/advanced-tools/view/login/enabled.php:5
576
  msgid "Two Factor Authentication"
577
  msgstr ""
578
 
584
  "protection against brute force attacks."
585
  msgstr ""
586
 
587
+ #: app/module/advanced-tools/view/login/disabled.php:1
588
+ #: app/module/advanced-tools/view/login/enabled.php:1
589
  msgid "Security"
590
  msgstr ""
591
 
592
+ #: app/module/advanced-tools/view/login/disabled.php:28
593
  #: app/module/ip-lockout/view/detect-404/disabled.php:16
594
  #: app/module/ip-lockout/view/login-lockouts/disabled.php:18
595
  msgid "Enable"
596
  msgstr ""
597
 
598
+ #: app/module/advanced-tools/view/login/disabled.php:32
599
+ #: app/module/advanced-tools/view/login/disabled.php:38
600
  msgid "Use the Google Authenticator app to sign in with a separate passcode."
601
  msgstr ""
602
 
603
+ #: app/module/advanced-tools/view/login/disabled.php:41
604
  msgid "1. Install the Verification app"
605
  msgstr ""
606
 
607
+ #: app/module/advanced-tools/view/login/disabled.php:44
608
  msgid ""
609
  "Download and install the Google Authenticator app on your device using the "
610
  "links below."
611
  msgstr ""
612
 
613
+ #: app/module/advanced-tools/view/login/disabled.php:53
614
  msgid "2. Scan the barcode"
615
  msgstr ""
616
 
617
+ #: app/module/advanced-tools/view/login/disabled.php:54
618
  msgid ""
619
  "Open the Google Authenticator app you just downloaded, tap the “+” symbol "
620
  "and then use your phone’s camera to scan the barcode below."
621
  msgstr ""
622
 
623
+ #: app/module/advanced-tools/view/login/disabled.php:58
624
  msgid "3. Enter passcode"
625
  msgstr ""
626
 
627
+ #: app/module/advanced-tools/view/login/disabled.php:60
628
  msgid ""
629
  "Enter the 6 digit passcode that is shown on your device into the input "
630
  "field below and hit “Verify”."
631
  msgstr ""
632
 
633
+ #: app/module/advanced-tools/view/login/disabled.php:66
634
  msgid "Verify"
635
  msgstr ""
636
 
637
+ #: app/module/advanced-tools/view/login/enabled.php:8
638
  msgid "Two factor authentication is active."
639
  msgstr ""
640
 
641
+ #: app/module/advanced-tools/view/login/enabled.php:11
642
  msgid "Disable"
643
  msgstr ""
644
 
645
+ #: app/module/advanced-tools/view/login/enabled.php:16
646
  msgid "Fallback email address"
647
  msgstr ""
648
 
649
+ #: app/module/advanced-tools/view/login/enabled.php:20
650
  msgid ""
651
  "If you ever lose your device, you can send a fallback passcode to this "
652
  "email address."
990
  msgstr ""
991
 
992
  #: app/module/audit/component/audit-api.php:205
993
+ #: app/module/ip-lockout/component/login-protection-api.php:250
994
  msgid "year"
995
  msgstr ""
996
 
997
  #: app/module/audit/component/audit-api.php:206
998
+ #: app/module/ip-lockout/component/login-protection-api.php:251
999
  msgid "month"
1000
  msgstr ""
1001
 
1002
  #: app/module/audit/component/audit-api.php:207
1003
+ #: app/module/ip-lockout/component/login-protection-api.php:252
1004
  msgid "week"
1005
  msgstr ""
1006
 
1007
  #: app/module/audit/component/audit-api.php:208
1008
+ #: app/module/ip-lockout/component/login-protection-api.php:253
1009
  msgid "day"
1010
  msgstr ""
1011
 
1012
  #: app/module/audit/component/audit-api.php:209
1013
+ #: app/module/ip-lockout/component/login-protection-api.php:254
1014
  msgid "hour"
1015
  msgstr ""
1016
 
1017
  #: app/module/audit/component/audit-api.php:210
1018
+ #: app/module/ip-lockout/component/login-protection-api.php:255
1019
  msgid "minute"
1020
  msgstr ""
1021
 
1022
  #: app/module/audit/component/audit-api.php:211
1023
+ #: app/module/ip-lockout/component/login-protection-api.php:256
1024
  msgid "second"
1025
  msgstr ""
1026
 
1717
  msgstr ""
1718
 
1719
  #: app/module/audit/view/email_template.php:419
1720
+ #: app/module/ip-lockout/view/emails/404-ban.php:420
1721
  #: app/module/ip-lockout/view/emails/404-lockout.php:420
1722
  #: app/module/ip-lockout/view/emails/login-lockout.php:420
1723
  #: app/module/ip-lockout/view/emails/login-username-ban.php:420
1727
  msgstr ""
1728
 
1729
  #: app/module/audit/view/email_template.php:454
1730
+ #: app/module/ip-lockout/view/emails/404-ban.php:511
1731
  #: app/module/ip-lockout/view/emails/404-lockout.php:511
1732
  #: app/module/ip-lockout/view/emails/login-lockout.php:513
1733
  #: app/module/ip-lockout/view/emails/login-username-ban.php:512
1737
  msgstr ""
1738
 
1739
  #: app/module/audit/view/email_template.php:475
1740
+ #: app/module/ip-lockout/view/emails/404-ban.php:532
1741
  #: app/module/ip-lockout/view/emails/404-lockout.php:532
1742
  #: app/module/ip-lockout/view/emails/login-lockout.php:534
1743
  #: app/module/ip-lockout/view/emails/login-username-ban.php:533
1747
  msgstr ""
1748
 
1749
  #: app/module/audit/view/email_template.php:477
1750
+ #: app/module/ip-lockout/view/emails/404-ban.php:534
1751
  #: app/module/ip-lockout/view/emails/404-lockout.php:534
1752
  #: app/module/ip-lockout/view/emails/login-lockout.php:536
1753
  #: app/module/ip-lockout/view/emails/login-username-ban.php:535
1757
  msgstr ""
1758
 
1759
  #: app/module/audit/view/email_template.php:494
1760
+ #: app/module/ip-lockout/view/emails/404-ban.php:551
1761
  #: app/module/ip-lockout/view/emails/404-lockout.php:551
1762
  #: app/module/ip-lockout/view/emails/login-lockout.php:553
1763
  #: app/module/ip-lockout/view/emails/login-username-ban.php:552
1767
  msgstr ""
1768
 
1769
  #: app/module/audit/view/email_template.php:496
1770
+ #: app/module/ip-lockout/view/emails/404-ban.php:553
1771
  #: app/module/ip-lockout/view/emails/404-lockout.php:553
1772
  #: app/module/ip-lockout/view/emails/login-lockout.php:555
1773
  #: app/module/ip-lockout/view/emails/login-username-ban.php:554
1777
  msgstr ""
1778
 
1779
  #: app/module/audit/view/email_template.php:530
1780
+ #: app/module/ip-lockout/view/emails/404-ban.php:587
1781
  #: app/module/ip-lockout/view/emails/404-lockout.php:587
1782
  #: app/module/ip-lockout/view/emails/login-lockout.php:589
1783
  #: app/module/ip-lockout/view/emails/login-username-ban.php:588
1831
 
1832
  #: app/module/audit/view/main.php:21 app/module/audit/view/main.php:27
1833
  #: app/module/audit/view/main.php:78
1834
+ #: app/module/ip-lockout/component/logs-table.php:340
1835
  msgid "Filter"
1836
  msgstr ""
1837
 
2859
  msgstr ""
2860
 
2861
  #: app/module/ip-lockout/component/login-protection-api.php:61
2862
+ #: app/module/ip-lockout/controller/main.php:635
2863
+ #: app/module/ip-lockout/controller/main.php:644
2864
  msgid ""
2865
  "You have been locked out by the administrator for attempting to login with "
2866
  "a banned username"
2882
  msgid "Lockout occurred: Too many 404 requests for %s"
2883
  msgstr ""
2884
 
2885
+ #: app/module/ip-lockout/component/login-protection-api.php:285
2886
  msgid "Ban IP"
2887
  msgstr ""
2888
 
2889
+ #: app/module/ip-lockout/component/login-protection-api.php:287
2890
  msgid "Unban IP"
2891
  msgstr ""
2892
 
2893
+ #: app/module/ip-lockout/component/login-protection-api.php:292
2894
  msgid "Add Whitelist"
2895
  msgstr ""
2896
 
2897
+ #: app/module/ip-lockout/component/login-protection-api.php:294
2898
  msgid "Unwhitelist"
2899
  msgstr ""
2900
 
2901
+ #: app/module/ip-lockout/component/login-protection-api.php:570
2902
  msgid "Is whitelisted"
2903
  msgstr ""
2904
 
2905
+ #: app/module/ip-lockout/component/login-protection-api.php:573
2906
  msgid "Is blacklisted"
2907
  msgstr ""
2908
 
2909
+ #: app/module/ip-lockout/component/login-protection-api.php:580
2910
+ #: app/module/ip-lockout/component/login-protection-api.php:586
2911
  msgid "Not banned"
2912
  msgstr ""
2913
 
2914
+ #: app/module/ip-lockout/component/login-protection-api.php:584
2915
  msgid "Banned"
2916
  msgstr ""
2917
 
2949
  msgstr ""
2950
 
2951
  #: app/module/ip-lockout/component/logs-table.php:174
2952
+ #: app/module/ip-lockout/component/logs-table.php:280
2953
  #: app/module/ip-lockout/model/log-model-legacy.php:113
2954
  #: app/module/ip-lockout/model/log-model-legacy.php:114
2955
  #: app/module/ip-lockout/model/log-model.php:72
2984
  msgid "%s tried to login with username %s"
2985
  msgstr ""
2986
 
2987
+ #: app/module/ip-lockout/component/logs-table.php:280
2988
  msgid "Login failed"
2989
  msgstr ""
2990
 
2991
+ #: app/module/ip-lockout/component/logs-table.php:286
2992
  msgid "IP"
2993
  msgstr ""
2994
 
2995
+ #: app/module/ip-lockout/component/logs-table.php:292
2996
  msgid "Date/Time"
2997
  msgstr ""
2998
 
2999
+ #: app/module/ip-lockout/component/logs-table.php:298
3000
  msgid "Ban Status"
3001
  msgstr ""
3002
 
3003
+ #: app/module/ip-lockout/component/logs-table.php:311
3004
  msgid ""
3005
  "Note: Make sure this IP is not a legitimate operation, banning the IP will "
3006
  "result in being permanently locked out from accessing your website."
3007
  msgstr ""
3008
 
3009
+ #: app/module/ip-lockout/component/logs-table.php:332
3010
  msgid "%s results"
3011
  msgstr ""
3012
 
3013
+ #: app/module/ip-lockout/component/logs-table.php:429
3014
  msgid "Select All"
3015
  msgstr ""
3016
 
3040
  msgid "Demo"
3041
  msgstr ""
3042
 
3043
+ #: app/module/ip-lockout/controller/main.php:449
3044
  msgid "404 lockout alert for %s"
3045
  msgstr ""
3046
 
3047
+ #: app/module/ip-lockout/controller/main.php:476
3048
  msgid "Login lockout alert for %s"
3049
  msgstr ""
3050
 
3051
+ #: app/module/ip-lockout/controller/main.php:574
3052
  msgid "Failed login attempt with username %s"
3053
  msgstr ""
3054
 
3055
+ #: app/module/ip-lockout/controller/main.php:637
3056
+ #: app/module/ip-lockout/controller/main.php:647
3057
  msgid "%d login attempts remaining"
3058
  msgstr ""
3059
 
3060
+ #: app/module/ip-lockout/controller/main.php:736
3061
  msgid ""
3062
  "Your settings have been updated, however some IPs were removed because "
3063
  "invalid format, or you blacklist yourself"
3064
  msgstr ""
3065
 
3066
+ #: app/module/ip-lockout/controller/main.php:747
3067
  msgid "Login Protection has been activated."
3068
  msgstr ""
3069
 
3070
+ #: app/module/ip-lockout/controller/main.php:749
3071
  msgid "Login Protection has been deactivated."
3072
  msgstr ""
3073
 
3074
+ #: app/module/ip-lockout/controller/main.php:754
3075
  msgid "404 Detection has been activated."
3076
  msgstr ""
3077
 
3078
+ #: app/module/ip-lockout/controller/main.php:756
3079
  msgid "404 Detection has been deactivated."
3080
  msgstr ""
3081
 
3082
+ #: app/module/ip-lockout/controller/main.php:786 app/module/ip-lockout.php:35
3083
  #: app/view/activator-free.php:33 app/view/activator.php:49
3084
  msgid "IP Lockouts"
3085
  msgstr ""
3086
 
3087
+ #: app/module/ip-lockout/controller/main.php:803
3088
+ #: app/module/ip-lockout/controller/main.php:809
3089
  msgid "Your file is invalid!"
3090
  msgstr ""
3091
 
3092
+ #: app/module/ip-lockout/controller/main.php:815
3093
  msgid "Your file content is invalid!"
3094
  msgstr ""
3095
 
3096
+ #: app/module/ip-lockout/controller/main.php:824
3097
  msgid "Your whitelist/blacklist has been successfully imported."
3098
  msgstr ""
3099
 
3100
+ #: app/module/ip-lockout/controller/main.php:1009
3101
  msgid "Thanks for your patience. All set."
3102
  msgstr ""
3103
 
3308
  msgid "Monitor 404s from logged in users"
3309
  msgstr ""
3310
 
3311
+ #: app/module/ip-lockout/view/emails/404-ban.php:7
3312
  #: app/module/ip-lockout/view/emails/404-lockout.php:7
3313
  msgid "New 404 Lockout"
3314
  msgstr ""
3315
 
3316
+ #: app/module/ip-lockout/view/emails/404-ban.php:417
3317
  #: app/module/ip-lockout/view/emails/404-lockout.php:417
3318
  #: app/module/ip-lockout/view/emails/login-lockout.php:417
3319
  #: app/module/ip-lockout/view/emails/login-username-ban.php:417
3322
  msgid "Protected By"
3323
  msgstr ""
3324
 
3325
+ #: app/module/ip-lockout/view/emails/404-ban.php:455
3326
  #: app/module/ip-lockout/view/emails/404-lockout.php:455
3327
  msgid "Hi %s"
3328
  msgstr ""
3329
 
3330
+ #: app/module/ip-lockout/view/emails/404-ban.php:460
3331
  msgid ""
3332
  "We've just locked out the host <strong>%s</strong> from %s due to more than "
3333
  "<strong>%s</strong> 404 requests for the file <strong>%s</strong>. They "
3334
+ "have been banned permanently."
3335
  msgstr ""
3336
 
3337
+ #: app/module/ip-lockout/view/emails/404-ban.php:463
3338
  #: app/module/ip-lockout/view/emails/404-lockout.php:463
3339
  #: app/module/ip-lockout/view/emails/login-lockout.php:465
3340
  #: app/module/ip-lockout/view/emails/login-username-ban.php:464
3342
  msgid "You can view the full lockout logs <a href=\"%s\">here</a>"
3343
  msgstr ""
3344
 
3345
+ #: app/module/ip-lockout/view/emails/404-ban.php:478
3346
  #: app/module/ip-lockout/view/emails/404-lockout.php:478
3347
  #: app/module/ip-lockout/view/emails/login-lockout.php:480
3348
  #: app/module/ip-lockout/view/emails/login-username-ban.php:479
3350
  msgid "Stay vigilant."
3351
  msgstr ""
3352
 
3353
+ #: app/module/ip-lockout/view/emails/404-ban.php:481
3354
  #: app/module/ip-lockout/view/emails/404-lockout.php:481
3355
  #: app/module/ip-lockout/view/emails/login-lockout.php:483
3356
  #: app/module/ip-lockout/view/emails/login-username-ban.php:482
3358
  msgid "WP Defender"
3359
  msgstr ""
3360
 
3361
+ #: app/module/ip-lockout/view/emails/404-ban.php:483
3362
  #: app/module/ip-lockout/view/emails/404-lockout.php:483
3363
  #: app/module/ip-lockout/view/emails/login-lockout.php:485
3364
  #: app/module/ip-lockout/view/emails/login-username-ban.php:484
3370
  msgid "WPMU DEV"
3371
  msgstr ""
3372
 
3373
+ #: app/module/ip-lockout/view/emails/404-lockout.php:460
3374
+ msgid ""
3375
+ "We've just locked out the host <strong>%s</strong> from %s due to more than "
3376
+ "<strong>%s</strong> 404 requests for the file <strong>%s</strong>. They "
3377
+ "have been locked out for <strong>%s seconds.</strong>"
3378
+ msgstr ""
3379
+
3380
  #: app/module/ip-lockout/view/emails/login-lockout.php:7
3381
  #: app/module/ip-lockout/view/emails/login-username-ban.php:7
3382
  msgid "New Login Lockout"
4669
  msgstr ""
4670
 
4671
  #: free/main-activator.php:70
4672
+ msgid "Get Secure!"
4673
  msgstr ""
4674
 
4675
  #: free/main-activator.php:78
4676
  msgid ""
4677
+ "You're awesome for installing Defender! Are you interested in how to make "
4678
+ "the most of this plugin? We've collected all the best security resources we "
4679
+ "know in a single email - just for users of Defender!"
 
4680
  msgstr ""
4681
 
4682
  #: free/main-activator.php:120
4694
  msgid "Docs"
4695
  msgstr ""
4696
 
4697
+ #: free-dashboard/module.php:386
4698
  msgid ""
4699
  "We're happy that you've chosen to install %s! Are you interested in how to "
4700
  "make the most of this plugin? How would you like a quick 5 day email crash "
4702
  "info you want, no subscription!"
4703
  msgstr ""
4704
 
4705
+ #: free-dashboard/module.php:402 free-dashboard/module.php:438
4706
  msgid "Thanks :)"
4707
  msgstr ""
4708
 
4709
+ #: free-dashboard/module.php:405 free-dashboard/module.php:445
4710
  msgid "Saving"
4711
  msgstr ""
4712
 
4713
+ #: free-dashboard/module.php:406 free-dashboard/module.php:446
4714
  msgid "No thanks"
4715
  msgstr ""
4716
 
4717
+ #: free-dashboard/module.php:423
4718
  msgid ""
4719
  "Hey %s, you've been using %s for a while now, and we hope you're happy with "
4720
  "it."
4721
  msgstr ""
4722
 
4723
+ #: free-dashboard/module.php:423
4724
  msgid ""
4725
  "We've spent countless hours developing this free plugin for you, and we "
4726
  "would really appreciate it if you dropped us a quick rating!"
4727
  msgstr ""
4728
 
4729
+ #: free-dashboard/module.php:441
4730
  msgid "Rate %s"
4731
  msgstr ""
4732
 
main-activator.php CHANGED
@@ -67,15 +67,15 @@ class WD_Main_Activator {
67
  'Defender',
68
  '/plugins/defender-security/',
69
  /* 4 Email Button CTA */
70
- __( 'Get Members!', "defender-security" ),
71
  /* 5 getdrip Plugin param */
72
- 'WP Defender'
73
  );
74
  }
75
  }
76
 
77
  public function defenderAdsMessage( $message ) {
78
- $message = __( "We're happy that you've chosen to install Defender! Are you interested in how to make the most of this plugin? How would you like a quick 5 day email crash course with actionable advice on making your website security bulletproof? Only the info you want, no subscription!", "defender-security" );
79
 
80
  return $message;
81
  }
67
  'Defender',
68
  '/plugins/defender-security/',
69
  /* 4 Email Button CTA */
70
+ __( 'Get Secure!', "defender-security" ),
71
  /* 5 getdrip Plugin param */
72
+ '0cecf2890e'
73
  );
74
  }
75
  }
76
 
77
  public function defenderAdsMessage( $message ) {
78
+ $message = __( "You're awesome for installing Defender! Are you interested in how to make the most of this plugin? We've collected all the best security resources we know in a single email - just for users of Defender!", "defender-security" );
79
 
80
  return $message;
81
  }
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: 2.0
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: 2.0
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,13 @@ Hackers and bot attacks are not the only threat to your site. No matter what se
122
 
123
  == Changelog ==
124
 
 
 
 
 
 
 
 
125
  = 2.0 =
126
  - New: added tweak “Disable XML-RPC”
127
  - Improvement: Two factor authentication can now be force enabled by role.
1
  === Defender Security, Monitoring, and Hack Protection ===
2
  Plugin Name: Defender Security, Monitoring, and Hack Protection
3
+ Version: 2.0.1
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: 5.1
10
+ Stable tag: 2.0.1
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
+ = 2.0.1 =
126
+ - Fix: permanent ban on 404 lockouts now sends correct email.
127
+ - Fix: IP lockout logs not showing correct results/order on different pages.
128
+ - Fix: IP lockout logs showing wrong badge for 404 lockouts.
129
+ - Fix: 2FA not working properly when using Sensei plugin.
130
+ - Other minor enhancements and fixes.
131
+
132
  = 2.0 =
133
  - New: added tweak “Disable XML-RPC”
134
  - Improvement: Two factor authentication can now be force enabled by role.
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: 2.0
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: 2.0.1
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/