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