Version Description
- Google Authenticator - Two factor Authentication (2FA, OTP) :
- Vulnerability fixes
- Removed Network Security for new users
- Updated Pricing page UI
Download this release
Release Info
Developer | abhishek99rana |
Plugin | Google Authenticator – WordPress Two Factor Authentication (2FA) |
Version | 5.6.2 |
Comparing to | |
See all releases |
Code changes from version 5.6.1 to 5.6.2
- api/class-customer-common-setup.php +38 -16
- changelog.txt +9 -3
- controllers/backup/backup.php +0 -2
- controllers/backup/backup_ajax.php +0 -157
- controllers/backup/backup_controller.php +0 -2
- controllers/backup/backup_created_report.php +0 -2
- controllers/backup/backup_created_result.php +0 -14
- controllers/backup/backup_schdule.php +0 -22
- controllers/dashboard_ajax.php +0 -27
- controllers/main_controller.php +1 -2
- controllers/malware_scanner/malware_scan_ajax.php +14 -6
- controllers/navbar.php +1 -6
- controllers/twofa/mo2fa_common_login.php +22 -31
- controllers/twofa/two_factor_ajax.php +2 -2
- controllers/waf.php +0 -2
- database/database_functions.php +64 -102
- database/database_functions_2fa.php +24 -30
- database/mo2f_db_options.php +0 -11
- handler/WAF/Includes/CrawlerIPs.php +12 -0
- handler/WAF/database/mo-waf-plugin-db.php +6 -6
- handler/WAF/mo-waf-plugin.php +18 -7
- handler/WAF/mo-waf.php +27 -8
- handler/WAF/waf-include.php +196 -40
- handler/backup.php +0 -322
- handler/mo-waf-plugin.php +25 -47
- handler/mo-waf.php +2 -25
- handler/twofa/encryption.php +1 -5
- handler/twofa/gaonprem.php +1 -1
- handler/twofa/setup_twofa.php +1 -1
- handler/twofa/two_fa_pass2login.php +15 -25
- handler/twofa/two_fa_settings.php +0 -45
- handler/twofa/two_fa_utility.php +13 -38
- helper/constants.php +5 -3
- helper/dashboard_security_notification.php +3 -66
- helper/pluginUtility.php +1 -1
- helper/utility.php +15 -10
- includes/css/style_settings.css +5 -0
- includes/css/upgrade.css +613 -900
- includes/js/settings_page.js +0 -6
- miniorange_2_factor_settings.php +10 -7
- readme.txt +16 -14
- uninstall.php +0 -27
- views/backup/backup.php +0 -66
- views/backup/backup_created_report.php +0 -81
- views/backup/backup_schdule.php +0 -192
- views/backup/backup_setting_view.php +0 -165
- views/common-elements.php +0 -2
- views/dashboard.php +0 -18
- views/malware_scanner/scan_summary_view.php +17 -6
- views/navbar.php +26 -20
- views/upgrade.php +532 -582
api/class-customer-common-setup.php
CHANGED
@@ -310,44 +310,66 @@ class Customer_Cloud_Setup {
|
|
310 |
}
|
311 |
|
312 |
public function mo_2f_generate_backup_codes($mo2f_user_email,$site_url){
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
$postdata = array('mo2f_email'=> $mo2f_user_email,
|
319 |
'mo2f_domain' =>$site_url,
|
320 |
-
'
|
321 |
'mo2f_generate_backup_codes'=>'initiated_backup_codes');
|
322 |
|
323 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
'method' => 'POST',
|
325 |
'timeout' => 45,
|
326 |
'sslverify' => false,
|
327 |
'headers' => array(),
|
328 |
'body' => $postdata,
|
|
|
329 |
);
|
330 |
|
331 |
$mo2f_api=new Mo2f_Api();
|
332 |
$data = $mo2f_api->mo2f_wp_remote_post($url,$args);
|
333 |
$status_code = wp_remote_retrieve_response_code(wp_remote_post($url,$args));
|
334 |
-
|
335 |
$data1 = json_decode($data, true);
|
336 |
if( is_array($data1) && $data1['status'] == "ERROR" || $status_code != '200'){
|
337 |
-
|
338 |
}else
|
339 |
-
return $data;
|
340 |
}
|
341 |
|
342 |
public function mo2f_validate_backup_codes($mo2f_backup_code,$mo2f_user_email){
|
343 |
-
$url =
|
|
|
|
|
344 |
|
345 |
-
|
346 |
-
$headers = array('header' => "Authorization:Basic" . base64_encode("$mo2f_user_email:$site_url") );
|
347 |
-
|
348 |
$postdata = array('mo2f_otp_token' => $mo2f_backup_code,
|
349 |
'mo2f_user_email'=> $mo2f_user_email,
|
350 |
-
'
|
351 |
'mo2f_site_url' => $site_url);
|
352 |
|
353 |
$args = array(
|
310 |
}
|
311 |
|
312 |
public function mo_2f_generate_backup_codes($mo2f_user_email,$site_url){
|
313 |
+
$url = MoWpnsConstants::GENERATE_BACK_CODE;
|
314 |
+
|
315 |
+
$data = $this->mo_2f_autnetication_backup_code_request($mo2f_user_email,$site_url);
|
316 |
+
|
317 |
+
$postdata = array('mo2f_email'=> $mo2f_user_email,
|
|
|
318 |
'mo2f_domain' =>$site_url,
|
319 |
+
'HTTP_AUTHORIZATION'=>'Bearer|'.$data,
|
320 |
'mo2f_generate_backup_codes'=>'initiated_backup_codes');
|
321 |
|
322 |
+
|
323 |
+
|
324 |
+
return $this->mo_2f_remote_call_function($url,$postdata);
|
325 |
+
|
326 |
+
}
|
327 |
+
|
328 |
+
public function mo_2f_autnetication_backup_code_request($mo2f_user_email,$site_url){
|
329 |
+
|
330 |
+
$url = MoWpnsConstants::AUTHENTICATE_REQUEST;
|
331 |
+
|
332 |
+
$postdata = array('mo2f_email'=> $mo2f_user_email,
|
333 |
+
'mo2f_domain' =>$site_url,
|
334 |
+
'mo2f_cKey'=>MoWpnsConstants::DEFAULT_CUSTOMER_KEY,
|
335 |
+
'mo2f_cSecret'=>MoWpnsConstants::DEFAULT_API_KEY
|
336 |
+
);
|
337 |
+
|
338 |
+
return $this->mo_2f_remote_call_function($url,$postdata,);
|
339 |
+
}
|
340 |
+
|
341 |
+
public function mo_2f_remote_call_function($url,$postdata){
|
342 |
+
|
343 |
+
|
344 |
+
$args = array(
|
345 |
'method' => 'POST',
|
346 |
'timeout' => 45,
|
347 |
'sslverify' => false,
|
348 |
'headers' => array(),
|
349 |
'body' => $postdata,
|
350 |
+
|
351 |
);
|
352 |
|
353 |
$mo2f_api=new Mo2f_Api();
|
354 |
$data = $mo2f_api->mo2f_wp_remote_post($url,$args);
|
355 |
$status_code = wp_remote_retrieve_response_code(wp_remote_post($url,$args));
|
356 |
+
|
357 |
$data1 = json_decode($data, true);
|
358 |
if( is_array($data1) && $data1['status'] == "ERROR" || $status_code != '200'){
|
359 |
+
return 'InternetConnectivityError';
|
360 |
}else
|
361 |
+
return $data;
|
362 |
}
|
363 |
|
364 |
public function mo2f_validate_backup_codes($mo2f_backup_code,$mo2f_user_email){
|
365 |
+
$url = MoWpnsConstants::VALIDATE_BACKUP_CODE;
|
366 |
+
$site_url = site_url();
|
367 |
+
$data = $this->mo_2f_autnetication_backup_code_request($mo2f_user_email,$site_url);
|
368 |
|
369 |
+
|
|
|
|
|
370 |
$postdata = array('mo2f_otp_token' => $mo2f_backup_code,
|
371 |
'mo2f_user_email'=> $mo2f_user_email,
|
372 |
+
'HTTP_AUTHORIZATION'=>'Bearer|'.$data,
|
373 |
'mo2f_site_url' => $site_url);
|
374 |
|
375 |
$args = array(
|
changelog.txt
CHANGED
@@ -5,9 +5,15 @@
|
|
5 |
This file contains older changelog entries, so we can keep the size of the standard WordPress readme.txt file reasonable.
|
6 |
For the latest changes, please refer to the "Changelog" section in the [readme.txt file](https://plugins.svn.wordpress.org/miniorange-2-factor-authentication/trunk/readme.txt).
|
7 |
|
8 |
-
= 5.
|
9 |
-
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
10 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
= 5.5.82 =
|
13 |
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
5 |
This file contains older changelog entries, so we can keep the size of the standard WordPress readme.txt file reasonable.
|
6 |
For the latest changes, please refer to the "Changelog" section in the [readme.txt file](https://plugins.svn.wordpress.org/miniorange-2-factor-authentication/trunk/readme.txt).
|
7 |
|
8 |
+
= 5.6.0 =
|
9 |
+
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
10 |
+
* Added new feature - the grace period for users
|
11 |
+
* Updated setup wizard UI - Included user-based settings in the wizard
|
12 |
+
* Added dashboard to check 2fa status of users
|
13 |
+
* Login report of users available even when Network Security is disabled
|
14 |
+
* Handled backup codes flow when sitestats is unreachable
|
15 |
+
* Added access control and nonce checks in some flows - Malware scan, plugin enable/disable
|
16 |
+
* Fixed warning issues - fetching location details using geoplugin API
|
17 |
|
18 |
= 5.5.82 =
|
19 |
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
controllers/backup/backup.php
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
include $mo2f_dirName. 'views'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup.php';
|
|
|
|
controllers/backup/backup_ajax.php
DELETED
@@ -1,157 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class Mo_wpns_file_db_backup{
|
3 |
-
|
4 |
-
function __construct(){
|
5 |
-
add_action( 'admin_init' , array( $this, 'mo_wpns_file_db_backup_functions' ) );
|
6 |
-
}
|
7 |
-
|
8 |
-
public function mo_wpns_file_db_backup_functions(){
|
9 |
-
add_action('wp_ajax_mo_wpns_backup_redirect', array( $this, 'mo_wpns_backup_redirect' ));
|
10 |
-
}
|
11 |
-
|
12 |
-
public function mo_wpns_backup_redirect(){
|
13 |
-
|
14 |
-
switch(sanitize_text_field(wp_unslash($_POST['call_type'])))
|
15 |
-
{
|
16 |
-
case "submit_backup_settings_form":
|
17 |
-
$this->mo_wpns_save_backup_config_form($_POST);
|
18 |
-
break;
|
19 |
-
case "submit_schedule_settings_form":
|
20 |
-
$this->mo_wpns_save_schedule_backup_config_form($_POST);
|
21 |
-
break;
|
22 |
-
case "delete_backup":
|
23 |
-
$this->delete_backup($_POST);
|
24 |
-
break;
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
public function mo_wpns_save_backup_config_form($postData){
|
29 |
-
$nonce = sanitize_text_field($postData['nonce']);
|
30 |
-
if ( ! wp_verify_nonce( $nonce, 'wpns-backup-settings' ) ){
|
31 |
-
wp_send_json('ERROR');
|
32 |
-
}
|
33 |
-
|
34 |
-
if(! isset($postData['backup_plugin']) && ! isset($postData['backup_themes']) && ! isset($postData['backup_wp_files']) && ! isset($postData['database'])){
|
35 |
-
wp_send_json('folder_error');
|
36 |
-
}
|
37 |
-
|
38 |
-
isset($postData['backup_plugin']) ? update_site_option( 'mo_file_manual_backup_plugins', sanitize_text_field($postData['backup_plugin'])) : update_site_option( 'mo_file_manual_backup_plugins', 0);
|
39 |
-
|
40 |
-
isset($postData['backup_themes']) ? update_site_option( 'mo_file_manual_backup_themes', sanitize_text_field($postData['backup_themes'])) : update_site_option( 'mo_file_manual_backup_themes', 0);
|
41 |
-
|
42 |
-
isset($postData['backup_wp_files']) ? update_site_option( 'mo_file_manual_backup_wp_files', sanitize_text_field($postData['backup_wp_files'])) : update_site_option( 'mo_file_manual_backup_wp_files', 0);
|
43 |
-
|
44 |
-
isset($postData['database']) ? update_site_option( 'mo_database_backup', sanitize_text_field($postData['database'])) : update_site_option( 'mo_database_backup', 0);
|
45 |
-
|
46 |
-
if(isset($postData['backup_plugin']) || isset($postData['backup_themes']) || isset($postData['backup_wp_files'])){
|
47 |
-
$handler_obj = new MoBackupSite();
|
48 |
-
update_site_option('file_backup_created_time',date("l").' , '.date("d-m-Y") .' '.date("h:i"));
|
49 |
-
$handler_obj->file_manual_backup();
|
50 |
-
}
|
51 |
-
if(isset($postData['database'])) {
|
52 |
-
$handler_obj = new MoBackupSite();
|
53 |
-
update_site_option('db_backup_created_time',date("l").' , '.date("d-m-Y") .' '.date("h:i"));
|
54 |
-
$handler_obj->backupDB();
|
55 |
-
}
|
56 |
-
wp_send_json('created_backup');
|
57 |
-
}
|
58 |
-
|
59 |
-
function mo_wpns_save_schedule_backup_config_form($postData){
|
60 |
-
$nonce = sanitize_text_field($postData['nonce']);
|
61 |
-
if ( ! wp_verify_nonce( $nonce, 'wpns-schedule-backup' ) ){
|
62 |
-
wp_send_json('ERROR');
|
63 |
-
|
64 |
-
}
|
65 |
-
|
66 |
-
$handler_obj = new MoBackupSite;
|
67 |
-
if(!isset($postData['backup_plugin']) && ! isset($postData['backup_themes']) && ! isset($postData['backup_wp_files']) && ! isset($postData['database']))
|
68 |
-
{
|
69 |
-
wp_send_json('folder_error');
|
70 |
-
|
71 |
-
}
|
72 |
-
|
73 |
-
isset($postData['backup_plugin']) ? update_site_option( 'mo_file_backup_plugins', sanitize_text_field($postData['backup_plugin'])) : update_site_option( 'mo_file_backup_plugins', 0);
|
74 |
-
|
75 |
-
isset($postData['backup_themes']) ? update_site_option( 'mo_file_backup_themes', sanitize_text_field($postData['backup_themes'])) : update_site_option( 'mo_file_backup_themes', 0);
|
76 |
-
|
77 |
-
isset($postData['backup_wp_files']) ? update_site_option( 'mo_file_backup_wp_files', sanitize_text_field($postData['backup_wp_files'])) : update_site_option( 'mo_file_backup_wp_files', 0);
|
78 |
-
|
79 |
-
isset($postData['database']) ? update_site_option( 'mo_schedule_database_backup', sanitize_text_field($postData['database'])) : update_site_option( 'mo_schedule_database_backup', 0);
|
80 |
-
|
81 |
-
if($postData['backup_time']==='12'||$postData['backup_time']==='24'||$postData['backup_time']==='168'||$postData['backup_time']==='360'||$postData['backup_time']==='720')
|
82 |
-
{
|
83 |
-
isset($postData['backup_time']) ? update_site_option( 'mo_wpns_backup_time', sanitize_text_field($postData['backup_time'])) : update_site_option( 'mo_wpns_backup_time', 0);
|
84 |
-
}else{
|
85 |
-
wp_send_json('invalid_hours');
|
86 |
-
|
87 |
-
}
|
88 |
-
|
89 |
-
isset($postData['enable_backup_schedule']) ? update_site_option( 'enable_backup_schedule', sanitize_text_field($postData['enable_backup_schedule'])) : update_site_option( 'enable_backup_schedule', 0);
|
90 |
-
|
91 |
-
isset($postData['local_storage']) ? update_site_option( 'storage_type', sanitize_text_field($postData['local_storage'])) : update_site_option( 'storage_type', 0);
|
92 |
-
|
93 |
-
if(get_site_option('enable_backup_schedule') === '1'){
|
94 |
-
|
95 |
-
if(isset($postData['backup_plugin']) || isset($postData['backup_themes']) || isset($postData['backup_wp_files'])){
|
96 |
-
$handler_obj-> file_backup_deactivate();
|
97 |
-
if (!wp_next_scheduled( 'mo_eb_file_cron_hook')) {
|
98 |
-
wp_schedule_event( time(), 'file_eb_backup_time', 'mo_eb_file_cron_hook' );
|
99 |
-
}
|
100 |
-
update_site_option('file_backup_created_time',date("l").' , '.date("d-m-Y") .' '.date("h:i"));
|
101 |
-
update_site_option('scheduled_file_backup',1);
|
102 |
-
}
|
103 |
-
else
|
104 |
-
$handler_obj-> file_backup_deactivate();
|
105 |
-
|
106 |
-
if(MoWpnsUtility::get_mo2f_db_option('mo_schedule_database_backup', 'site_option') === '1'){
|
107 |
-
$handler_obj->bl_deactivate();
|
108 |
-
if ( ! wp_next_scheduled( 'mo_eb_bl_cron_hook' ) ) {
|
109 |
-
wp_schedule_event( time(), 'db_eb_backup_time', 'mo_eb_bl_cron_hook' );
|
110 |
-
}
|
111 |
-
update_site_option('db_backup_created_time',date("l").' , '.date("d-m-Y") .' '.date("h:i"));
|
112 |
-
update_site_option('scheduled_db_backup',1);
|
113 |
-
}
|
114 |
-
else
|
115 |
-
$handler_obj->bl_deactivate();
|
116 |
-
|
117 |
-
wp_send_json('success');
|
118 |
-
|
119 |
-
}else{
|
120 |
-
$handler_obj-> file_backup_deactivate();
|
121 |
-
$handler_obj->bl_deactivate();
|
122 |
-
update_site_option('scheduled_db_backup',0);
|
123 |
-
update_site_option('scheduled_file_backup',0);
|
124 |
-
wp_send_json('disable');
|
125 |
-
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
function delete_backup($postData){
|
132 |
-
|
133 |
-
$nonce = sanitize_text_field($postData['nonce']);
|
134 |
-
if ( ! wp_verify_nonce( $nonce, 'delete_entry' ) ){
|
135 |
-
wp_send_json('ERROR');
|
136 |
-
|
137 |
-
}
|
138 |
-
|
139 |
-
if(current_user_can('administrator')){
|
140 |
-
global $wpnsDbQueries;
|
141 |
-
$id = $postData['id'];
|
142 |
-
$row_exist = (int)$wpnsDbQueries->row_exist($id);
|
143 |
-
$status = file_exists($postData["folder_name"].DIRECTORY_SEPARATOR. $postData['file_name']);
|
144 |
-
if($status){
|
145 |
-
unlink($postData["folder_name"].DIRECTORY_SEPARATOR. $postData['file_name']);
|
146 |
-
if($row_exist)
|
147 |
-
$wpnsDbQueries->delete_file($id);
|
148 |
-
wp_send_json('success');
|
149 |
-
|
150 |
-
}else{
|
151 |
-
$wpnsDbQueries->delete_file($id);
|
152 |
-
wp_send_json('notexist');
|
153 |
-
}
|
154 |
-
}
|
155 |
-
}
|
156 |
-
}new Mo_wpns_file_db_backup();
|
157 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/backup/backup_controller.php
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_setting_view.php';
|
|
|
|
controllers/backup/backup_created_report.php
DELETED
@@ -1,2 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_created_report.php';
|
|
|
|
controllers/backup/backup_created_result.php
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
function showBackupResults(){
|
3 |
-
global $wpnsDbQueries;
|
4 |
-
$array = $wpnsDbQueries->get_table_content();
|
5 |
-
$array_size = sizeof($array);
|
6 |
-
for($i=0; $i<(int)$array_size; $i++){
|
7 |
-
$backup_file_path = $array[$i]->plugin_path.DIRECTORY_SEPARATOR.$array[$i]->file_name;
|
8 |
-
if(file_exists($backup_file_path))
|
9 |
-
show_backup_report($array[$i]->plugin_path, $array[$i]->file_name, $array[$i]->created_timestamp,$array[$i]->id);
|
10 |
-
else
|
11 |
-
$wpnsDbQueries->delete_file($array[$i]->id);
|
12 |
-
}
|
13 |
-
}
|
14 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/backup/backup_schdule.php
DELETED
@@ -1,22 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$file_backup_time = MoWpnsUtility::get_mo2f_db_option('file_backup_created_time', 'site_option');
|
4 |
-
$db_eb_backup_time = MoWpnsUtility::get_mo2f_db_option('db_backup_created_time', 'site_option');
|
5 |
-
$file_schedule_status = MoWpnsUtility::get_mo2f_db_option('scheduled_file_backup', 'site_option');
|
6 |
-
$db_backup_status = MoWpnsUtility::get_mo2f_db_option('scheduled_db_backup', 'site_option');
|
7 |
-
$next_file_backup_hours = MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option');
|
8 |
-
$next_db_backup_hours = MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option');
|
9 |
-
$img_loader_url = plugins_url('backup-wordpress'.DIRECTORY_SEPARATOR .'includes'.DIRECTORY_SEPARATOR .'images'.DIRECTORY_SEPARATOR .'loader.gif');
|
10 |
-
$page_url = "";
|
11 |
-
$file_next_backup_timestamp = wp_next_scheduled( 'mo_eb_file_cron_hook' );
|
12 |
-
$db_next_backup_timestamp = wp_next_scheduled( 'mo_eb_bl_cron_hook' );
|
13 |
-
|
14 |
-
$file_date = date('d-m-Y', $file_next_backup_timestamp);
|
15 |
-
$file_time = date('H:i', $file_next_backup_timestamp);
|
16 |
-
$file_day = date('l',$file_next_backup_timestamp);
|
17 |
-
|
18 |
-
$db_date = date('d-m-Y', $db_next_backup_timestamp);
|
19 |
-
$db_time = date('H:i', $db_next_backup_timestamp);
|
20 |
-
$db_day = date('l',$db_next_backup_timestamp);
|
21 |
-
|
22 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_schdule.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/dashboard_ajax.php
CHANGED
@@ -27,9 +27,6 @@ class Mo2f_ajax_dashboard
|
|
27 |
case "tab_login_switch":
|
28 |
$this->mo2f_handle_login_enable($santizied_post);
|
29 |
break;
|
30 |
-
case "tab_backup_switch":
|
31 |
-
$this->mo2f_handle_backup_enable($santizied_post);
|
32 |
-
break;
|
33 |
case "tab_malware_switch":
|
34 |
$this->mo2f_handle_malware_enable($santizied_post);
|
35 |
break;
|
@@ -44,7 +41,6 @@ class Mo2f_ajax_dashboard
|
|
44 |
public function mo2f_handle_all_enable($POSTED){
|
45 |
$this->mo2f_handle_waf_enable($POSTED);
|
46 |
$this->mo2f_handle_login_enable($POSTED);
|
47 |
-
$this->mo2f_handle_backup_enable($POSTED);
|
48 |
$this->mo2f_handle_malware_enable($POSTED);
|
49 |
$this->mo2f_handle_block_enable($POSTED);
|
50 |
if($POSTED){
|
@@ -142,29 +138,6 @@ class Mo2f_ajax_dashboard
|
|
142 |
}
|
143 |
}
|
144 |
|
145 |
-
public function mo2f_handle_backup_enable($POSTED){
|
146 |
-
if($POSTED){
|
147 |
-
update_site_option('mo_2f_switch_backup', 1);
|
148 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
149 |
-
if (isset($_POST['option'] ))
|
150 |
-
{
|
151 |
-
if(sanitize_text_field($_POST['option']) == 'tab_backup_switch')
|
152 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('BACKUP_ENABLE'),'SUCCESS');
|
153 |
-
}
|
154 |
-
}
|
155 |
-
else{
|
156 |
-
update_site_option('mo_2f_switch_backup', 0);
|
157 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
158 |
-
$handler_obj = new MoBackupSite;
|
159 |
-
$handler_obj->bl_deactivate();
|
160 |
-
update_site_option('mo2f_enable_cron_backup', 0);
|
161 |
-
$handler_obj->file_backup_deactivate();
|
162 |
-
update_site_option('mo2f_enable_cron_file_backup', 0);
|
163 |
-
if(sanitize_text_field($_POST['option']) == 'tab_backup_switch')
|
164 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('BACKUP_DISABLE'),'ERROR');
|
165 |
-
}
|
166 |
-
}
|
167 |
-
|
168 |
public function mo2f_handle_malware_enable($POSTED){
|
169 |
if($POSTED){
|
170 |
update_site_option('mo_2f_switch_malware', 1);
|
27 |
case "tab_login_switch":
|
28 |
$this->mo2f_handle_login_enable($santizied_post);
|
29 |
break;
|
|
|
|
|
|
|
30 |
case "tab_malware_switch":
|
31 |
$this->mo2f_handle_malware_enable($santizied_post);
|
32 |
break;
|
41 |
public function mo2f_handle_all_enable($POSTED){
|
42 |
$this->mo2f_handle_waf_enable($POSTED);
|
43 |
$this->mo2f_handle_login_enable($POSTED);
|
|
|
44 |
$this->mo2f_handle_malware_enable($POSTED);
|
45 |
$this->mo2f_handle_block_enable($POSTED);
|
46 |
if($POSTED){
|
138 |
}
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
public function mo2f_handle_malware_enable($POSTED){
|
142 |
if($POSTED){
|
143 |
update_site_option('mo_2f_switch_malware', 1);
|
controllers/main_controller.php
CHANGED
@@ -22,8 +22,7 @@ if(current_user_can('administrator'))
|
|
22 |
include_once $controller . 'login-security.php'; break;
|
23 |
case 'mo_2fa_account':
|
24 |
include_once $controller . 'account.php'; break;
|
25 |
-
|
26 |
-
include_once $controller . 'backup'.DIRECTORY_SEPARATOR.'backup.php'; break;
|
27 |
case 'mo_2fa_upgrade':
|
28 |
include_once $controller . 'upgrade.php'; break;
|
29 |
case 'mo_2fa_waf':
|
22 |
include_once $controller . 'login-security.php'; break;
|
23 |
case 'mo_2fa_account':
|
24 |
include_once $controller . 'account.php'; break;
|
25 |
+
|
|
|
26 |
case 'mo_2fa_upgrade':
|
27 |
include_once $controller . 'upgrade.php'; break;
|
28 |
case 'mo_2fa_waf':
|
controllers/malware_scanner/malware_scan_ajax.php
CHANGED
@@ -22,10 +22,10 @@ class Mo_wpns_scan_malware
|
|
22 |
$this->mo_wpns_start_malware_scan($_POST);
|
23 |
break;
|
24 |
case "malware_progress_bar":
|
25 |
-
$this->mo_wpns_get_progress();
|
26 |
break;
|
27 |
case "malware_scan_terminate":
|
28 |
-
$this->mo_wpns_stop_scan();
|
29 |
break;
|
30 |
}
|
31 |
}
|
@@ -112,7 +112,6 @@ class Mo_wpns_scan_malware
|
|
112 |
wp_send_json('scanning_already');
|
113 |
}
|
114 |
global $moWpnsUtility, $mo2f_dirName;
|
115 |
-
|
116 |
$mo_wpns_scan_handler = new Mo_wpns_Scan_Handler_Cron();
|
117 |
$mo2f_malware_db_handler = new MoWpnsDB();
|
118 |
|
@@ -253,8 +252,12 @@ class Mo_wpns_scan_malware
|
|
253 |
}
|
254 |
|
255 |
|
256 |
-
public function mo_wpns_get_progress(){
|
257 |
-
|
|
|
|
|
|
|
|
|
258 |
$decoded_scan_status=json_decode(get_site_option('mo_wpns_scan_status'));
|
259 |
$status= $decoded_scan_status->scan_progress;
|
260 |
$files_scanned= $decoded_scan_status->files_scanned;
|
@@ -340,7 +343,12 @@ class Mo_wpns_scan_malware
|
|
340 |
}
|
341 |
}
|
342 |
|
343 |
-
function mo_wpns_stop_scan(){
|
|
|
|
|
|
|
|
|
|
|
344 |
update_site_option('mo_stop_scan','1');
|
345 |
$mo2f_malware_db_handler = new MoWpnsDB();
|
346 |
$mo2f_malware_db_handler->delete_files_parts();
|
22 |
$this->mo_wpns_start_malware_scan($_POST);
|
23 |
break;
|
24 |
case "malware_progress_bar":
|
25 |
+
$this->mo_wpns_get_progress($_POST);
|
26 |
break;
|
27 |
case "malware_scan_terminate":
|
28 |
+
$this->mo_wpns_stop_scan($_POST);
|
29 |
break;
|
30 |
}
|
31 |
}
|
112 |
wp_send_json('scanning_already');
|
113 |
}
|
114 |
global $moWpnsUtility, $mo2f_dirName;
|
|
|
115 |
$mo_wpns_scan_handler = new Mo_wpns_Scan_Handler_Cron();
|
116 |
$mo2f_malware_db_handler = new MoWpnsDB();
|
117 |
|
252 |
}
|
253 |
|
254 |
|
255 |
+
public function mo_wpns_get_progress($POSTED){
|
256 |
+
$nonce = isset($POSTED['nonce'])?sanitize_text_field($POSTED['nonce']):'';
|
257 |
+
if ( ! wp_verify_nonce( $nonce, 'wpns-scan-nonce' ) ){
|
258 |
+
wp_send_json('NONCE_ERROR');
|
259 |
+
return;
|
260 |
+
}
|
261 |
$decoded_scan_status=json_decode(get_site_option('mo_wpns_scan_status'));
|
262 |
$status= $decoded_scan_status->scan_progress;
|
263 |
$files_scanned= $decoded_scan_status->files_scanned;
|
343 |
}
|
344 |
}
|
345 |
|
346 |
+
function mo_wpns_stop_scan($POSTED){
|
347 |
+
$nonce = isset($POSTED['nonce'])?sanitize_text_field($POSTED['nonce']):'';
|
348 |
+
if ( ! wp_verify_nonce( $nonce, 'wpns-scan-nonce' ) ){
|
349 |
+
wp_send_json('NONCE_ERROR');
|
350 |
+
return;
|
351 |
+
}
|
352 |
update_site_option('mo_stop_scan','1');
|
353 |
$mo2f_malware_db_handler = new MoWpnsDB();
|
354 |
$mo2f_malware_db_handler->delete_files_parts();
|
controllers/navbar.php
CHANGED
@@ -25,11 +25,6 @@
|
|
25 |
if($tab_count < 5 && !get_site_option('mo_2f_switch_loginspam'))
|
26 |
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
27 |
break;
|
28 |
-
case 'mo_2fa_backup':
|
29 |
-
update_option('mo_2f_switch_backup', 1);
|
30 |
-
if($tab_count < 5 && !get_site_option('mo_2f_switch_backup'))
|
31 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
32 |
-
break;
|
33 |
case 'mo_2fa_waf':
|
34 |
update_option('mo_2f_switch_waf', 1);
|
35 |
if($tab_count < 5 && !get_site_option('mo_2f_switch_waf'))
|
@@ -61,7 +56,7 @@
|
|
61 |
$help_url = esc_url(add_query_arg( array('page' => 'mo_2fa_troubleshooting' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
62 |
$addons_url = esc_url(add_query_arg( array('page' => 'mo_2fa_addons' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
63 |
$content_protect= esc_url(add_query_arg( array('page' => 'content_protect' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
64 |
-
|
65 |
$scan_url = esc_url(add_query_arg( array('page' => 'mo_2fa_malwarescan' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
66 |
$two_fa = esc_url(add_query_arg( array('page' => 'mo_2fa_two_fa' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
67 |
//Added for new design
|
25 |
if($tab_count < 5 && !get_site_option('mo_2f_switch_loginspam'))
|
26 |
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
27 |
break;
|
|
|
|
|
|
|
|
|
|
|
28 |
case 'mo_2fa_waf':
|
29 |
update_option('mo_2f_switch_waf', 1);
|
30 |
if($tab_count < 5 && !get_site_option('mo_2f_switch_waf'))
|
56 |
$help_url = esc_url(add_query_arg( array('page' => 'mo_2fa_troubleshooting' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
57 |
$addons_url = esc_url(add_query_arg( array('page' => 'mo_2fa_addons' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
58 |
$content_protect= esc_url(add_query_arg( array('page' => 'content_protect' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
59 |
+
|
60 |
$scan_url = esc_url(add_query_arg( array('page' => 'mo_2fa_malwarescan' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
61 |
$two_fa = esc_url(add_query_arg( array('page' => 'mo_2fa_two_fa' ), sanitize_text_field($_SERVER['REQUEST_URI'] )));
|
62 |
//Added for new design
|
controllers/twofa/mo2fa_common_login.php
CHANGED
@@ -1510,39 +1510,30 @@ function echo_js_css_files() {
|
|
1510 |
wp_print_scripts( 'mo2f_bootstrap_js');
|
1511 |
}
|
1512 |
|
1513 |
-
function mo2f_backup_codes_generate($
|
1514 |
-
|
1515 |
-
|
1516 |
-
$code_generated = 'code_generation_failed';
|
1517 |
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
else{
|
1529 |
-
$mo2f_user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $id );
|
1530 |
-
if(empty($mo2f_user_email)){
|
1531 |
-
$currentuser = get_user_by( 'id', $id );
|
1532 |
-
$mo2f_user_email = $currentuser->user_email;
|
1533 |
-
}
|
1534 |
-
$generate_backup_code = new Customer_Cloud_Setup();
|
1535 |
-
$codes = $generate_backup_code->mo_2f_generate_backup_codes($mo2f_user_email, site_url());
|
1536 |
-
|
1537 |
-
$codes = explode(' ', $codes);
|
1538 |
-
$result = MO2f_Utility::mo2f_email_backup_codes($codes, $mo2f_user_email);
|
1539 |
-
update_user_meta($id, 'mo_backup_code_generated', 1);
|
1540 |
-
$code_generated = 'code_generation_successful';
|
1541 |
-
|
1542 |
-
}
|
1543 |
|
1544 |
-
|
1545 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1546 |
<html>
|
1547 |
<head> <meta charset="utf-8"/>
|
1548 |
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
1510 |
wp_print_scripts( 'mo2f_bootstrap_js');
|
1511 |
}
|
1512 |
|
1513 |
+
function mo2f_backup_codes_generate($redirect_to, $session_id_encrypt){
|
1514 |
+
global $Mo2fdbQueries;
|
1515 |
+
$id = MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
|
|
|
1516 |
|
1517 |
+
update_site_option('mo2f_is_inline_used','1');
|
1518 |
+
$code_generated = 'code_generation_failed';
|
1519 |
+
|
1520 |
+
$mo2f_user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $id );
|
1521 |
+
if(empty($mo2f_user_email)){
|
1522 |
+
$currentuser = get_user_by( 'id', $id );
|
1523 |
+
$mo2f_user_email = $currentuser->user_email;
|
1524 |
+
}
|
1525 |
+
$generate_backup_code = new Customer_Cloud_Setup();
|
1526 |
+
$codes = $generate_backup_code->mo_2f_generate_backup_codes($mo2f_user_email, site_url());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1527 |
|
1528 |
+
$codes = explode(' ', $codes);
|
1529 |
+
$result = MO2f_Utility::mo2f_email_backup_codes($codes, $mo2f_user_email);
|
1530 |
+
update_user_meta($id, 'mo_backup_code_generated', 1);
|
1531 |
+
$code_generated = 'code_generation_successful';
|
1532 |
+
|
1533 |
+
|
1534 |
+
|
1535 |
+
update_user_meta($id, 'mo_backup_code_screen_shown', 1);
|
1536 |
+
?>
|
1537 |
<html>
|
1538 |
<head> <meta charset="utf-8"/>
|
1539 |
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
controllers/twofa/two_factor_ajax.php
CHANGED
@@ -874,7 +874,7 @@ class mo_2f_ajax
|
|
874 |
if ( ! wp_verify_nonce( $nonce, 'mo2f-nonce-save-form-settings' ) ) {
|
875 |
$error = new WP_Error();
|
876 |
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
877 |
-
|
878 |
}
|
879 |
if(!current_user_can( 'administrator' ))
|
880 |
wp_send_json('error');
|
@@ -1064,7 +1064,7 @@ function mo2f_shift_to_onprem(){
|
|
1064 |
if ( ! wp_verify_nonce( $nonce, 'mo2f-nonce-enable-2FA' ) ) {
|
1065 |
$error = new WP_Error();
|
1066 |
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
1067 |
-
|
1068 |
}
|
1069 |
if(!current_user_can( 'administrator' ))
|
1070 |
wp_send_json('error');
|
874 |
if ( ! wp_verify_nonce( $nonce, 'mo2f-nonce-save-form-settings' ) ) {
|
875 |
$error = new WP_Error();
|
876 |
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
877 |
+
wp_send_json('error');
|
878 |
}
|
879 |
if(!current_user_can( 'administrator' ))
|
880 |
wp_send_json('error');
|
1064 |
if ( ! wp_verify_nonce( $nonce, 'mo2f-nonce-enable-2FA' ) ) {
|
1065 |
$error = new WP_Error();
|
1066 |
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
1067 |
+
wp_send_json("error");
|
1068 |
}
|
1069 |
if(!current_user_can( 'administrator' ))
|
1070 |
wp_send_json('error');
|
controllers/waf.php
CHANGED
@@ -13,8 +13,6 @@
|
|
13 |
$IPblockedByWAF = $mo_wpns_handler->get_blocked_ip_waf();
|
14 |
$totalIPBlocked = $manualBlocks+$realTime+$IPblockedByWAF;
|
15 |
$mo_waf = get_option('WAFEnabled');
|
16 |
-
if(!get_option('mo2f_tour_firewall'))
|
17 |
-
update_option('mo2f_tour_firewall',1);
|
18 |
if($mo_waf)
|
19 |
{
|
20 |
$mo_waf = false;
|
13 |
$IPblockedByWAF = $mo_wpns_handler->get_blocked_ip_waf();
|
14 |
$totalIPBlocked = $manualBlocks+$realTime+$IPblockedByWAF;
|
15 |
$mo_waf = get_option('WAFEnabled');
|
|
|
|
|
16 |
if($mo_waf)
|
17 |
{
|
18 |
$mo_waf = false;
|
database/database_functions.php
CHANGED
@@ -22,12 +22,10 @@
|
|
22 |
$this->whitelistIPsTable = $wpdb->base_prefix.'mo2f_network_whitelisted_ips';
|
23 |
$this->emailAuditTable = $wpdb->base_prefix.'mo2f_network_email_sent_audit';
|
24 |
$this->IPrateDetails = $wpdb->base_prefix.'wpns_ip_rate_details';
|
25 |
-
$this->attackLogs = $wpdb->base_prefix.'wpns_attack_logs';
|
26 |
$this->malwarereportTable = $wpdb->base_prefix.'wpns_malware_scan_report';
|
27 |
$this->scanreportdetails = $wpdb->base_prefix.'wpns_malware_scan_report_details';
|
28 |
$this->skipfiles = $wpdb->base_prefix.'wpns_malware_skip_files';
|
29 |
$this->hashfile = $wpdb->base_prefix.'wpns_malware_hash_file';
|
30 |
-
$this->backupdetails = $wpdb->base_prefix.'wpns_backup_report';
|
31 |
$this->filescan = $wpdb->base_prefix.'wpns_files_scan';
|
32 |
}
|
33 |
|
@@ -76,13 +74,6 @@
|
|
76 |
dbDelta($sql);
|
77 |
}
|
78 |
|
79 |
-
$tableName = $this->backupdetails;
|
80 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
81 |
-
{
|
82 |
-
$sql = "CREATE TABLE " . $tableName . " (`id` int NOT NULL AUTO_INCREMENT,
|
83 |
-
`backup_id` mediumtext NOT NULL, `file_name` mediumtext NOT NULL , `created_timestamp` bigint, `plugin_path` mediumtext, UNIQUE KEY id (id) );";
|
84 |
-
dbDelta($sql);
|
85 |
-
}
|
86 |
$result= $wpdb->get_var("SHOW COLUMNS FROM `$tableName` LIKE 'plugin_path'");
|
87 |
if(is_null($result)){
|
88 |
$sql = "ALTER TABLE `$tableName` ADD `plugin_path` mediumtext AFTER `created_timestamp` ;";
|
@@ -104,7 +95,7 @@
|
|
104 |
dbDelta($sql);
|
105 |
}
|
106 |
|
107 |
-
$tableName = $this->
|
108 |
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
109 |
{
|
110 |
$sql = "create table ". $tableName ." (
|
@@ -203,55 +194,13 @@
|
|
203 |
}
|
204 |
}
|
205 |
|
206 |
-
|
207 |
-
global $wpdb;
|
208 |
-
$wpdb->insert(
|
209 |
-
$this->backupdetails,
|
210 |
-
array(
|
211 |
-
'backup_id' =>$backup_id,
|
212 |
-
'file_name' =>$file_name,
|
213 |
-
'created_timestamp'=> $backup_created_timestamp,
|
214 |
-
'plugin_path' => $plugin_path
|
215 |
-
));
|
216 |
-
}
|
217 |
-
|
218 |
-
function get_table_content(){
|
219 |
-
global $wpdb;
|
220 |
-
return $wpdb->get_results("SELECT plugin_path,file_name,created_timestamp,id FROM ".$this->backupdetails);
|
221 |
-
}
|
222 |
-
|
223 |
-
function get_number_of_plugin_backup(){
|
224 |
-
global $wpdb;
|
225 |
-
|
226 |
-
$plugin_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'plugin'");
|
227 |
-
$themes_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'themes'");
|
228 |
-
$wp_files_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'wpfiles'");
|
229 |
-
$db_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'db'");
|
230 |
-
$total_backup = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails);
|
231 |
-
$array = array('plugin_count'=>$plugin_count,'themes_count'=>$themes_count,'wp_files_count'=>$wp_files_count,'db_count'=>$db_count,'total_backup'=>$total_backup);
|
232 |
-
|
233 |
-
return $array;
|
234 |
-
}
|
235 |
-
|
236 |
-
function delete_file($id){
|
237 |
-
global $wpdb;
|
238 |
-
$wpdb->query(
|
239 |
-
"DELETE FROM ".$this->backupdetails."
|
240 |
-
WHERE id = ".$id
|
241 |
-
);
|
242 |
-
return;
|
243 |
-
}
|
244 |
|
245 |
-
function row_exist($id){
|
246 |
-
global $wpdb;
|
247 |
-
$is_exist = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE id =".$id );
|
248 |
-
return $is_exist;
|
249 |
-
}
|
250 |
|
251 |
function get_ip_blocked_count($ipAddress)
|
252 |
{
|
253 |
global $wpdb;
|
254 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE ip_address = '
|
255 |
}
|
256 |
function get_total_blocked_ips()
|
257 |
{
|
@@ -272,19 +221,19 @@
|
|
272 |
function get_blocked_attack_count($attack)
|
273 |
{
|
274 |
global $wpdb;
|
275 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->attackList." WHERE type = '
|
276 |
}
|
277 |
|
278 |
function get_count_of_blocked_ips(){
|
279 |
global $wpdb;
|
280 |
-
return $wpdb->get_var("SELECT COUNT(*) FROM ".$this->blockedIPsTable
|
281 |
}
|
282 |
|
283 |
|
284 |
function get_blocked_ip($entryid)
|
285 |
{
|
286 |
global $wpdb;
|
287 |
-
return $wpdb->get_results( "SELECT ip_address FROM ".$this->blockedIPsTable." WHERE id="
|
288 |
}
|
289 |
|
290 |
function get_blocked_ip_list()
|
@@ -298,11 +247,10 @@
|
|
298 |
global $wpdb;
|
299 |
return $wpdb->get_results("SELECT ip_address FROM ".$this->blockedIPsTable);
|
300 |
}
|
301 |
-
function get_blocked_attack_list(
|
302 |
{
|
303 |
global $wpdb;
|
304 |
-
|
305 |
-
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$tableName);
|
306 |
}
|
307 |
|
308 |
function get_blocked_sqli_list()
|
@@ -341,7 +289,8 @@
|
|
341 |
'reason' => $reason,
|
342 |
'blocked_for_time' => $blocked_for_time,
|
343 |
'created_timestamp' => current_time( 'timestamp' )
|
344 |
-
)
|
|
|
345 |
);
|
346 |
return;
|
347 |
}
|
@@ -350,8 +299,7 @@
|
|
350 |
{
|
351 |
global $wpdb;
|
352 |
$wpdb->query(
|
353 |
-
"DELETE FROM ".$this->blockedIPsTable."
|
354 |
-
WHERE id = ".$entryid
|
355 |
);
|
356 |
return;
|
357 |
}
|
@@ -359,7 +307,7 @@
|
|
359 |
function get_whitelisted_ip_count($ipAddress)
|
360 |
{
|
361 |
global $wpdb;
|
362 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->whitelistIPsTable." WHERE ip_address =
|
363 |
}
|
364 |
|
365 |
function insert_whitelisted_ip($ipAddress)
|
@@ -370,7 +318,8 @@
|
|
370 |
array(
|
371 |
'ip_address' => $ipAddress,
|
372 |
'created_timestamp' => current_time( 'timestamp' )
|
373 |
-
)
|
|
|
374 |
);
|
375 |
}
|
376 |
|
@@ -383,8 +332,7 @@
|
|
383 |
{
|
384 |
global $wpdb;
|
385 |
$wpdb->query(
|
386 |
-
"DELETE FROM ".$this->whitelistIPsTable."
|
387 |
-
WHERE id = ".$entryid
|
388 |
);
|
389 |
return;
|
390 |
}
|
@@ -398,8 +346,7 @@
|
|
398 |
function get_email_audit_count($ipAddress,$username)
|
399 |
{
|
400 |
global $wpdb;
|
401 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->emailAuditTable." WHERE ip_address = '
|
402 |
-
username='".$username."'" );
|
403 |
}
|
404 |
|
405 |
function insert_email_audit($ipAddress,$username,$reason)
|
@@ -412,7 +359,8 @@
|
|
412 |
'username' => $username,
|
413 |
'reason' => $reason,
|
414 |
'created_timestamp' => current_time( 'timestamp' )
|
415 |
-
)
|
|
|
416 |
);
|
417 |
return;
|
418 |
}
|
@@ -427,9 +375,10 @@
|
|
427 |
'status' => $status,
|
428 |
'created_timestamp' => current_time( 'timestamp' )
|
429 |
);
|
|
|
430 |
$data['url'] = is_null($url) ? '' : $url;
|
431 |
$url = sanitize_url($url);
|
432 |
-
$wpdb->insert( $this->transactionTable, $data);
|
433 |
return;
|
434 |
}
|
435 |
|
@@ -461,7 +410,11 @@
|
|
461 |
{
|
462 |
if($i%2!=0)
|
463 |
$sql .= ' , ';
|
464 |
-
$
|
|
|
|
|
|
|
|
|
465 |
$i++;
|
466 |
}
|
467 |
$sql .= " WHERE ";
|
@@ -470,7 +423,11 @@
|
|
470 |
{
|
471 |
if($i%2!=0)
|
472 |
$sql .= ' AND ';
|
473 |
-
|
|
|
|
|
|
|
|
|
474 |
$i++;
|
475 |
}
|
476 |
|
@@ -486,16 +443,14 @@
|
|
486 |
function get_failed_transaction_count($ipAddress)
|
487 |
{
|
488 |
global $wpdb;
|
489 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->transactionTable." WHERE ip_address = '"
|
490 |
-
AND status = '".MoWpnsConstants::FAILED."'" );
|
491 |
}
|
492 |
|
493 |
function delete_transaction($ipAddress)
|
494 |
{
|
495 |
global $wpdb;
|
496 |
$wpdb->query(
|
497 |
-
"DELETE FROM ".$this->transactionTable."
|
498 |
-
WHERE ip_address = '".$ipAddress."' AND status='".MoWpnsConstants::FAILED."'"
|
499 |
);
|
500 |
return;
|
501 |
}
|
@@ -512,7 +467,8 @@
|
|
512 |
'malware_count' => 0,
|
513 |
'repo_issues' => $repo_check_status_code,
|
514 |
'malicious_links' => 0
|
515 |
-
)
|
|
|
516 |
);
|
517 |
$result = $wpdb->get_results( "SELECT * FROM ".$this->malwarereportTable." order by id DESC LIMIT 1");
|
518 |
if($result){
|
@@ -530,7 +486,9 @@
|
|
530 |
),
|
531 |
array(
|
532 |
'id' => $reportid
|
533 |
-
)
|
|
|
|
|
534 |
);
|
535 |
}
|
536 |
|
@@ -543,7 +501,9 @@
|
|
543 |
),
|
544 |
array(
|
545 |
'id' => $reportid
|
546 |
-
)
|
|
|
|
|
547 |
);
|
548 |
}
|
549 |
|
@@ -556,14 +516,15 @@
|
|
556 |
'filename' => $filename,
|
557 |
'report' => serialize($report),
|
558 |
'created_timestamp' => current_time('timestamp')
|
559 |
-
)
|
|
|
560 |
);
|
561 |
}
|
562 |
|
563 |
function scan_report_complete($recordId, $no_of_scanned_files, $malware_count, $repo_issues, $malicious_links){
|
564 |
global $wpdb;
|
565 |
$wpdb->query(
|
566 |
-
"UPDATE ".$this->malwarereportTable." set completed_timestamp = ".current_time('timestamp').", scanned_files=
|
567 |
);
|
568 |
}
|
569 |
|
@@ -581,19 +542,19 @@
|
|
581 |
|
582 |
function count_files_last_scan($reportid){
|
583 |
global $wpdb;
|
584 |
-
$sql= $wpdb->get_results('SELECT * FROM '.$this->malwarereportTable.' WHERE `id`=
|
585 |
return $sql[0]->scanned_files;
|
586 |
}
|
587 |
|
588 |
function count_malicious_last_scan($reportid){
|
589 |
global $wpdb;
|
590 |
-
$sql= $wpdb->get_results('SELECT COUNT(*) AS mal_file FROM '.$this->scanreportdetails.' WHERE `report_id`=
|
591 |
return $sql[0]->mal_file;
|
592 |
}
|
593 |
|
594 |
function check_hash($hash_of_file){
|
595 |
global $wpdb;
|
596 |
-
$sql=
|
597 |
$result=$wpdb->get_results( $sql );
|
598 |
return $result;
|
599 |
}
|
@@ -601,27 +562,27 @@
|
|
601 |
function insert_hash($source_file_path,$hash_of_file, $scan_data){
|
602 |
global $wpdb;
|
603 |
$source_file_path = addslashes($source_file_path);
|
604 |
-
$query= "INSERT INTO ".$this->hashfile."(`file name`,`file hash`,`scan_data`) VALUES('
|
605 |
$res=$wpdb->query( $query );
|
606 |
}
|
607 |
|
608 |
function update_hash($source_file_path, $hash_of_file, $scan_data){
|
609 |
global $wpdb;
|
610 |
$source_file_path = addslashes($source_file_path);
|
611 |
-
$query= "UPDATE ".$this->hashfile." SET `file hash`='
|
612 |
$res=$wpdb->query( $query );
|
613 |
}
|
614 |
|
615 |
function delete_hash($source_file_path){
|
616 |
global $wpdb;
|
617 |
-
$query= "DELETE FROM ".$this->hashfile." WHERE `file name` = '"
|
618 |
$res=$wpdb->query( $query );
|
619 |
}
|
620 |
|
621 |
function get_infected_file($filename){
|
622 |
global $wpdb;
|
623 |
$filename = addslashes($filename);
|
624 |
-
$result = $wpdb->get_results( "SELECT * FROM ".$this->scanreportdetails." where filename="
|
625 |
return $result;
|
626 |
}
|
627 |
|
@@ -637,7 +598,7 @@
|
|
637 |
$file_path = addslashes($file_path);
|
638 |
$hash_value= md5($file_path);
|
639 |
$repo_key = $value['key'];
|
640 |
-
$query.= "('
|
641 |
if($i < $size){
|
642 |
$query.= ",";
|
643 |
}
|
@@ -670,7 +631,7 @@
|
|
670 |
$value= $file_path_array[$i]->path;
|
671 |
$value = addslashes($value);
|
672 |
$value = md5($value);
|
673 |
-
$query.= "('
|
674 |
if($i < $file_count-1){
|
675 |
$query.= ",";
|
676 |
}
|
@@ -686,7 +647,7 @@
|
|
686 |
$value= $file_path_array[$i]->path;
|
687 |
$value = addslashes($value);
|
688 |
$value = md5($value);
|
689 |
-
$query.= "('
|
690 |
if($i < $file_count-1){
|
691 |
$query.= ",";
|
692 |
}
|
@@ -711,7 +672,7 @@
|
|
711 |
|
712 |
function get_files_for_repo($repo_key){
|
713 |
global $wpdb;
|
714 |
-
$sql= 'SELECT * FROM '.$this->filescan.' WHERE `repo_check`= 0 AND `repo_key`= "
|
715 |
$result=$wpdb->get_results($sql);
|
716 |
return $result;
|
717 |
}
|
@@ -730,14 +691,14 @@
|
|
730 |
|
731 |
function get_report_with_id($reportid){
|
732 |
global $wpdb;
|
733 |
-
$result = $wpdb->get_results( "SELECT * FROM ".$this->malwarereportTable." where id="
|
734 |
return $result;
|
735 |
}
|
736 |
|
737 |
function delete_report($reportid){
|
738 |
global $wpdb;
|
739 |
$wpdb->query(
|
740 |
-
"DELETE FROM ".$this->malwarereportTable." WHERE id =
|
741 |
);
|
742 |
$warning_count=0;
|
743 |
$malware_count=0;
|
@@ -769,17 +730,17 @@
|
|
769 |
|
770 |
function get_vulnerable_files_count_for_reportid($reportid){
|
771 |
global $wpdb;
|
772 |
-
$result = $wpdb->get_results( "SELECT count(*) as count FROM ".$this->scanreportdetails." where report_id="
|
773 |
return $result;
|
774 |
}
|
775 |
|
776 |
function ignorefile($filename){
|
777 |
$signature = md5_file($filename);
|
778 |
global $wpdb;
|
779 |
-
$result = $wpdb->get_results( "SELECT * FROM ".$this->skipfiles." where path = '"
|
780 |
if($result){
|
781 |
$wpdb->query(
|
782 |
-
"UPDATE ".$this->skipfiles." SET signature = '
|
783 |
);
|
784 |
} else {
|
785 |
$wpdb->insert(
|
@@ -788,19 +749,20 @@
|
|
788 |
'path' => $filename,
|
789 |
'signature' => $signature,
|
790 |
'created_timestamp' => current_time('timestamp')
|
791 |
-
)
|
|
|
792 |
);
|
793 |
}
|
794 |
}
|
795 |
|
796 |
function ignorechangedfile($recordId){
|
797 |
global $wpdb;
|
798 |
-
$result = $wpdb->get_results( "SELECT * FROM ".$this->skipfiles." where id = "
|
799 |
if($result){
|
800 |
$record = $result[0];
|
801 |
$signature = md5_file($record->path);
|
802 |
$wpdb->query(
|
803 |
-
"UPDATE ".$this->skipfiles." set signature = '
|
804 |
);
|
805 |
}
|
806 |
}
|
@@ -813,7 +775,7 @@
|
|
813 |
|
814 |
function get_detail_report_with_id($reportid){
|
815 |
global $wpdb;
|
816 |
-
$result = $wpdb->get_results( "SELECT * FROM ".$this->scanreportdetails." where report_id="
|
817 |
return $result;
|
818 |
}
|
819 |
|
22 |
$this->whitelistIPsTable = $wpdb->base_prefix.'mo2f_network_whitelisted_ips';
|
23 |
$this->emailAuditTable = $wpdb->base_prefix.'mo2f_network_email_sent_audit';
|
24 |
$this->IPrateDetails = $wpdb->base_prefix.'wpns_ip_rate_details';
|
|
|
25 |
$this->malwarereportTable = $wpdb->base_prefix.'wpns_malware_scan_report';
|
26 |
$this->scanreportdetails = $wpdb->base_prefix.'wpns_malware_scan_report_details';
|
27 |
$this->skipfiles = $wpdb->base_prefix.'wpns_malware_skip_files';
|
28 |
$this->hashfile = $wpdb->base_prefix.'wpns_malware_hash_file';
|
|
|
29 |
$this->filescan = $wpdb->base_prefix.'wpns_files_scan';
|
30 |
}
|
31 |
|
74 |
dbDelta($sql);
|
75 |
}
|
76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
$result= $wpdb->get_var("SHOW COLUMNS FROM `$tableName` LIKE 'plugin_path'");
|
78 |
if(is_null($result)){
|
79 |
$sql = "ALTER TABLE `$tableName` ADD `plugin_path` mediumtext AFTER `created_timestamp` ;";
|
95 |
dbDelta($sql);
|
96 |
}
|
97 |
|
98 |
+
$tableName = $this->attackList;
|
99 |
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
100 |
{
|
101 |
$sql = "create table ". $tableName ." (
|
194 |
}
|
195 |
}
|
196 |
|
197 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
|
|
|
|
|
|
|
|
|
|
|
199 |
|
200 |
function get_ip_blocked_count($ipAddress)
|
201 |
{
|
202 |
global $wpdb;
|
203 |
+
return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE ip_address = '%s'", array($ipAddress)) );
|
204 |
}
|
205 |
function get_total_blocked_ips()
|
206 |
{
|
221 |
function get_blocked_attack_count($attack)
|
222 |
{
|
223 |
global $wpdb;
|
224 |
+
return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM ".$this->attackList." WHERE type = '%s'" ,array($attack)));
|
225 |
}
|
226 |
|
227 |
function get_count_of_blocked_ips(){
|
228 |
global $wpdb;
|
229 |
+
return $wpdb->get_var("SELECT COUNT(*) FROM ".$this->blockedIPsTable);
|
230 |
}
|
231 |
|
232 |
|
233 |
function get_blocked_ip($entryid)
|
234 |
{
|
235 |
global $wpdb;
|
236 |
+
return $wpdb->get_results( $wpdb->prepare("SELECT ip_address FROM ".$this->blockedIPsTable." WHERE id= %d" , array($entryid)) );
|
237 |
}
|
238 |
|
239 |
function get_blocked_ip_list()
|
247 |
global $wpdb;
|
248 |
return $wpdb->get_results("SELECT ip_address FROM ".$this->blockedIPsTable);
|
249 |
}
|
250 |
+
function get_blocked_attack_list()
|
251 |
{
|
252 |
global $wpdb;
|
253 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$this->attackList);
|
|
|
254 |
}
|
255 |
|
256 |
function get_blocked_sqli_list()
|
289 |
'reason' => $reason,
|
290 |
'blocked_for_time' => $blocked_for_time,
|
291 |
'created_timestamp' => current_time( 'timestamp' )
|
292 |
+
),
|
293 |
+
array('%s','%s','%d','%d')
|
294 |
);
|
295 |
return;
|
296 |
}
|
299 |
{
|
300 |
global $wpdb;
|
301 |
$wpdb->query(
|
302 |
+
$wpdb->prepare("DELETE FROM ".$this->blockedIPsTable." WHERE id = %d",array($entryid))
|
|
|
303 |
);
|
304 |
return;
|
305 |
}
|
307 |
function get_whitelisted_ip_count($ipAddress)
|
308 |
{
|
309 |
global $wpdb;
|
310 |
+
return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM ".$this->whitelistIPsTable." WHERE ip_address = %s",array($ipAddress)) );
|
311 |
}
|
312 |
|
313 |
function insert_whitelisted_ip($ipAddress)
|
318 |
array(
|
319 |
'ip_address' => $ipAddress,
|
320 |
'created_timestamp' => current_time( 'timestamp' )
|
321 |
+
),
|
322 |
+
array('%s','%d')
|
323 |
);
|
324 |
}
|
325 |
|
332 |
{
|
333 |
global $wpdb;
|
334 |
$wpdb->query(
|
335 |
+
$wpdb->prepare("DELETE FROM ".$this->whitelistIPsTable." WHERE id = %d",array($entryid))
|
|
|
336 |
);
|
337 |
return;
|
338 |
}
|
346 |
function get_email_audit_count($ipAddress,$username)
|
347 |
{
|
348 |
global $wpdb;
|
349 |
+
return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM ".$this->emailAuditTable." WHERE ip_address = '%s' AND username= '%s'",array($ipAddress,$username)) );
|
|
|
350 |
}
|
351 |
|
352 |
function insert_email_audit($ipAddress,$username,$reason)
|
359 |
'username' => $username,
|
360 |
'reason' => $reason,
|
361 |
'created_timestamp' => current_time( 'timestamp' )
|
362 |
+
),
|
363 |
+
array('%s','%s','%s','%d')
|
364 |
);
|
365 |
return;
|
366 |
}
|
375 |
'status' => $status,
|
376 |
'created_timestamp' => current_time( 'timestamp' )
|
377 |
);
|
378 |
+
$format = array('%s','%s','%s','%s','%d');
|
379 |
$data['url'] = is_null($url) ? '' : $url;
|
380 |
$url = sanitize_url($url);
|
381 |
+
$wpdb->insert( $this->transactionTable, $data , $format );
|
382 |
return;
|
383 |
}
|
384 |
|
410 |
{
|
411 |
if($i%2!=0)
|
412 |
$sql .= ' , ';
|
413 |
+
if($key == 'created_timestamp' || $key == 'id'){
|
414 |
+
$sql .= $wpdb->prepare("%1s = '%d'",array($key,$value));
|
415 |
+
}else{
|
416 |
+
$sql .= $wpdb->prepare("%1s = '%s'",array($key,$value));
|
417 |
+
}
|
418 |
$i++;
|
419 |
}
|
420 |
$sql .= " WHERE ";
|
423 |
{
|
424 |
if($i%2!=0)
|
425 |
$sql .= ' AND ';
|
426 |
+
if($key == 'created_timestamp' || $key == 'id'){
|
427 |
+
$sql .= $wpdb->prepare("%1s = '%d'",array($key,$value));
|
428 |
+
}else{
|
429 |
+
$sql .= $wpdb->prepare("%1s = '%s'",array($key,$value));
|
430 |
+
}
|
431 |
$i++;
|
432 |
}
|
433 |
|
443 |
function get_failed_transaction_count($ipAddress)
|
444 |
{
|
445 |
global $wpdb;
|
446 |
+
return $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM ".$this->transactionTable." WHERE ip_address = '%s' AND status = '".MoWpnsConstants::FAILED."'", array($ipAddress)) );
|
|
|
447 |
}
|
448 |
|
449 |
function delete_transaction($ipAddress)
|
450 |
{
|
451 |
global $wpdb;
|
452 |
$wpdb->query(
|
453 |
+
$wpdb->prepare("DELETE FROM ".$this->transactionTable." WHERE ip_address = '%s' AND status='".MoWpnsConstants::FAILED."'",array($ipAddress))
|
|
|
454 |
);
|
455 |
return;
|
456 |
}
|
467 |
'malware_count' => 0,
|
468 |
'repo_issues' => $repo_check_status_code,
|
469 |
'malicious_links' => 0
|
470 |
+
),
|
471 |
+
array('%s','%s','%d','%d','%d','%d','%d')
|
472 |
);
|
473 |
$result = $wpdb->get_results( "SELECT * FROM ".$this->malwarereportTable." order by id DESC LIMIT 1");
|
474 |
if($result){
|
486 |
),
|
487 |
array(
|
488 |
'id' => $reportid
|
489 |
+
),
|
490 |
+
array('%d'),
|
491 |
+
array('%d')
|
492 |
);
|
493 |
}
|
494 |
|
501 |
),
|
502 |
array(
|
503 |
'id' => $reportid
|
504 |
+
),
|
505 |
+
array('%s'),
|
506 |
+
array('%d')
|
507 |
);
|
508 |
}
|
509 |
|
516 |
'filename' => $filename,
|
517 |
'report' => serialize($report),
|
518 |
'created_timestamp' => current_time('timestamp')
|
519 |
+
),
|
520 |
+
array('%d','%s','%s','%d')
|
521 |
);
|
522 |
}
|
523 |
|
524 |
function scan_report_complete($recordId, $no_of_scanned_files, $malware_count, $repo_issues, $malicious_links){
|
525 |
global $wpdb;
|
526 |
$wpdb->query(
|
527 |
+
$wpdb->prepare("UPDATE ".$this->malwarereportTable." set completed_timestamp = ".current_time('timestamp').", scanned_files= %d , malware_count= %d , repo_issues= %d , malicious_links= %d WHERE id = %d",array($no_of_scanned_files,$malware_count,$repo_issues,$malicious_links,$recordId))
|
528 |
);
|
529 |
}
|
530 |
|
542 |
|
543 |
function count_files_last_scan($reportid){
|
544 |
global $wpdb;
|
545 |
+
$sql= $wpdb->get_results($wpdb->prepare('SELECT * FROM '.$this->malwarereportTable.' WHERE `id`= %d',array($reportid)));
|
546 |
return $sql[0]->scanned_files;
|
547 |
}
|
548 |
|
549 |
function count_malicious_last_scan($reportid){
|
550 |
global $wpdb;
|
551 |
+
$sql= $wpdb->get_results($wpdb->prepare('SELECT COUNT(*) AS mal_file FROM '.$this->scanreportdetails.' WHERE `report_id`= %d',array($reportid)));
|
552 |
return $sql[0]->mal_file;
|
553 |
}
|
554 |
|
555 |
function check_hash($hash_of_file){
|
556 |
global $wpdb;
|
557 |
+
$sql= $wpdb->prepare("SELECT * FROM ".$this->hashfile." WHERE `file hash`= '%s'",array($hash_of_file));
|
558 |
$result=$wpdb->get_results( $sql );
|
559 |
return $result;
|
560 |
}
|
562 |
function insert_hash($source_file_path,$hash_of_file, $scan_data){
|
563 |
global $wpdb;
|
564 |
$source_file_path = addslashes($source_file_path);
|
565 |
+
$query= $wpdb->prepare("INSERT INTO ".$this->hashfile."(`file name`,`file hash`,`scan_data`) VALUES('%s', '%s', '%s') ON DUPLICATE KEY UPDATE `file hash`='%s' AND `scan_data`='%s'",array($source_file_path,$hash_of_file,serialize($scan_data),$hashfile,serialize($scan_data)));
|
566 |
$res=$wpdb->query( $query );
|
567 |
}
|
568 |
|
569 |
function update_hash($source_file_path, $hash_of_file, $scan_data){
|
570 |
global $wpdb;
|
571 |
$source_file_path = addslashes($source_file_path);
|
572 |
+
$query= $wpdb->prepare("UPDATE ".$this->hashfile." SET `file hash`='%s',`scan_data`='%s' WHERE `file name`='%s'",array($hash_of_file,serialize($scan_data),$source_file_path));
|
573 |
$res=$wpdb->query( $query );
|
574 |
}
|
575 |
|
576 |
function delete_hash($source_file_path){
|
577 |
global $wpdb;
|
578 |
+
$query= $wpdb->prepare("DELETE FROM ".$this->hashfile." WHERE `file name` = '%s'",array($source_file_path));
|
579 |
$res=$wpdb->query( $query );
|
580 |
}
|
581 |
|
582 |
function get_infected_file($filename){
|
583 |
global $wpdb;
|
584 |
$filename = addslashes($filename);
|
585 |
+
$result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$this->scanreportdetails." where filename= %s",array($filename)) );
|
586 |
return $result;
|
587 |
}
|
588 |
|
598 |
$file_path = addslashes($file_path);
|
599 |
$hash_value= md5($file_path);
|
600 |
$repo_key = $value['key'];
|
601 |
+
$query.= $wpdb->prepare("('%s', '%s', '%d', '%d', '%d', '%s')",array($file_path,$hash_value,$default,$default,$default,$repo_key));
|
602 |
if($i < $size){
|
603 |
$query.= ",";
|
604 |
}
|
631 |
$value= $file_path_array[$i]->path;
|
632 |
$value = addslashes($value);
|
633 |
$value = md5($value);
|
634 |
+
$query.= $wpdb->prepare("('%s', 1)",array($value));
|
635 |
if($i < $file_count-1){
|
636 |
$query.= ",";
|
637 |
}
|
647 |
$value= $file_path_array[$i]->path;
|
648 |
$value = addslashes($value);
|
649 |
$value = md5($value);
|
650 |
+
$query.= $wpdb->prepare("('%s', 1)",array($value));
|
651 |
if($i < $file_count-1){
|
652 |
$query.= ",";
|
653 |
}
|
672 |
|
673 |
function get_files_for_repo($repo_key){
|
674 |
global $wpdb;
|
675 |
+
$sql= $wpdb->prepare('SELECT * FROM '.$this->filescan.' WHERE `repo_check`= 0 AND `repo_key`= "%s" LIMIT 100',array($repo_key));
|
676 |
$result=$wpdb->get_results($sql);
|
677 |
return $result;
|
678 |
}
|
691 |
|
692 |
function get_report_with_id($reportid){
|
693 |
global $wpdb;
|
694 |
+
$result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$this->malwarereportTable." where id= %d",array($reportid)) );
|
695 |
return $result;
|
696 |
}
|
697 |
|
698 |
function delete_report($reportid){
|
699 |
global $wpdb;
|
700 |
$wpdb->query(
|
701 |
+
$wpdb->prepare("DELETE FROM ".$this->malwarereportTable." WHERE id = %d",array($reportid))
|
702 |
);
|
703 |
$warning_count=0;
|
704 |
$malware_count=0;
|
730 |
|
731 |
function get_vulnerable_files_count_for_reportid($reportid){
|
732 |
global $wpdb;
|
733 |
+
$result = $wpdb->get_results( $wpdb->prepare("SELECT count(*) as count FROM ".$this->scanreportdetails." where report_id= %d", array($reportid)) );
|
734 |
return $result;
|
735 |
}
|
736 |
|
737 |
function ignorefile($filename){
|
738 |
$signature = md5_file($filename);
|
739 |
global $wpdb;
|
740 |
+
$result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$this->skipfiles." where path = '%s'",array($filename)) );
|
741 |
if($result){
|
742 |
$wpdb->query(
|
743 |
+
$wpdb->prepare("UPDATE ".$this->skipfiles." SET signature = '%s' WHERE path = '%s'",array($signature,$filename))
|
744 |
);
|
745 |
} else {
|
746 |
$wpdb->insert(
|
749 |
'path' => $filename,
|
750 |
'signature' => $signature,
|
751 |
'created_timestamp' => current_time('timestamp')
|
752 |
+
),
|
753 |
+
array('%s','%s','%d')
|
754 |
);
|
755 |
}
|
756 |
}
|
757 |
|
758 |
function ignorechangedfile($recordId){
|
759 |
global $wpdb;
|
760 |
+
$result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$this->skipfiles." where id = %d ",array($recordId)) );
|
761 |
if($result){
|
762 |
$record = $result[0];
|
763 |
$signature = md5_file($record->path);
|
764 |
$wpdb->query(
|
765 |
+
$wpdb->prepare("UPDATE ".$this->skipfiles." set signature = '%s' WHERE id = %d",array($signature,$recordId))
|
766 |
);
|
767 |
}
|
768 |
}
|
775 |
|
776 |
function get_detail_report_with_id($reportid){
|
777 |
global $wpdb;
|
778 |
+
$result = $wpdb->get_results( $wpdb->prepare("SELECT * FROM ".$this->scanreportdetails." where report_id= %d" ,array($reportid)) );
|
779 |
return $result;
|
780 |
}
|
781 |
|
database/database_functions_2fa.php
CHANGED
@@ -139,7 +139,7 @@ class Mo2fDB {
|
|
139 |
function get_current_user_email($id)
|
140 |
{
|
141 |
global $wpdb;
|
142 |
-
$sql =
|
143 |
return $wpdb->get_var($sql);
|
144 |
}
|
145 |
function database_table_issue(){
|
@@ -176,30 +176,21 @@ class Mo2fDB {
|
|
176 |
|
177 |
function insert_user( $user_id ) {
|
178 |
global $wpdb;
|
179 |
-
$sql = "INSERT INTO $this->userDetailsTable (user_id) VALUES(
|
180 |
$wpdb->query( $sql );
|
181 |
}
|
182 |
|
183 |
-
function drop_table( $table_name ) {
|
184 |
-
global $wpdb;
|
185 |
-
$sql = "DROP TABLE $table_name";
|
186 |
-
$wpdb->query( $sql );
|
187 |
-
}
|
188 |
-
|
189 |
-
|
190 |
function get_user_detail( $column_name, $user_id ) {
|
191 |
global $wpdb;
|
192 |
-
$user_column_detail = $wpdb->get_results( "SELECT
|
193 |
$value = empty( $user_column_detail ) ? '' : get_object_vars( $user_column_detail[0] );
|
194 |
-
|
195 |
return $value == '' ? '' : $value[ $column_name ];
|
196 |
}
|
197 |
|
198 |
function delete_user_details( $user_id ) {
|
199 |
global $wpdb;
|
200 |
$wpdb->query(
|
201 |
-
"DELETE FROM " . $this->userDetailsTable . "
|
202 |
-
WHERE user_id = " . $user_id
|
203 |
);
|
204 |
|
205 |
return;
|
@@ -235,8 +226,7 @@ class Mo2fDB {
|
|
235 |
function check_if_user_column_exists($user_id){
|
236 |
global $wpdb;
|
237 |
$value = $wpdb->query(
|
238 |
-
"SELECT * FROM " . $this->userDetailsTable . "
|
239 |
-
WHERE user_id = " . $user_id
|
240 |
);
|
241 |
|
242 |
return $value;
|
@@ -250,8 +240,7 @@ class Mo2fDB {
|
|
250 |
else if($table_type == "mo2f_user_details")
|
251 |
$table = $this->userDetailsTable;
|
252 |
global $wpdb;
|
253 |
-
$sql
|
254 |
-
LIKE '" . $column_name . "'";
|
255 |
$value = $wpdb->query($sql);
|
256 |
|
257 |
return $value;
|
@@ -264,14 +253,17 @@ class Mo2fDB {
|
|
264 |
$sql = "UPDATE " . $this->userDetailsTable . " SET ";
|
265 |
$i = 1;
|
266 |
foreach ( $update as $key => $value ) {
|
|
|
|
|
|
|
|
|
267 |
|
268 |
-
$sql .= $key . "='" . $value . "'";
|
269 |
if ( $i < $count ) {
|
270 |
$sql .= ' , ';
|
271 |
}
|
272 |
$i ++;
|
273 |
}
|
274 |
-
$sql .= " WHERE user_id="
|
275 |
$wpdb->query( $sql );
|
276 |
|
277 |
return;
|
@@ -280,7 +272,7 @@ class Mo2fDB {
|
|
280 |
|
281 |
function insert_user_login_session( $session_id ) {
|
282 |
global $wpdb;
|
283 |
-
$sql = "INSERT INTO $this->userLoginInfoTable (session_id) VALUES('$session_id') ON DUPLICATE KEY UPDATE session_id=
|
284 |
|
285 |
$wpdb->query( $sql );
|
286 |
$sql = "DELETE FROM $this->userLoginInfoTable WHERE ts_created < DATE_ADD(NOW(),INTERVAL - 2 MINUTE);";
|
@@ -293,14 +285,16 @@ class Mo2fDB {
|
|
293 |
$sql = "UPDATE " . $this->userLoginInfoTable . " SET ";
|
294 |
$i = 1;
|
295 |
foreach ( $user_values as $key => $value ) {
|
296 |
-
|
297 |
-
$sql .= $
|
|
|
|
|
298 |
if ( $i < $count ) {
|
299 |
$sql .= ' , ';
|
300 |
}
|
301 |
$i ++;
|
302 |
}
|
303 |
-
$sql .= " WHERE session_id='"
|
304 |
$wpdb->query( $sql );
|
305 |
|
306 |
return;
|
@@ -316,22 +310,21 @@ class Mo2fDB {
|
|
316 |
|
317 |
function get_user_login_details( $column_name, $session_id ) {
|
318 |
global $wpdb;
|
319 |
-
$user_column_detail = $wpdb->get_results( "SELECT
|
320 |
$value = empty( $user_column_detail ) ? '' : get_object_vars( $user_column_detail[0] );
|
321 |
|
322 |
return $value == '' ? '' : $value[ $column_name ];
|
323 |
}
|
324 |
function get_user_configured_methods( $user_id ) {
|
325 |
global $wpdb;
|
326 |
-
$user_methods_detail = $wpdb->get_results( "SELECT * FROM " . $this->userDetailsTable . " WHERE user_id = "
|
327 |
return $user_methods_detail;
|
328 |
}
|
329 |
|
330 |
function delete_user_login_sessions($session_id ) {
|
331 |
global $wpdb;
|
332 |
$wpdb->query(
|
333 |
-
"DELETE FROM " . $this->userLoginInfoTable . "
|
334 |
-
WHERE session_id='$session_id';"
|
335 |
);
|
336 |
|
337 |
return;
|
@@ -345,8 +338,8 @@ class Mo2fDB {
|
|
345 |
);
|
346 |
|
347 |
$user_already_configured = $wpdb->query(
|
348 |
-
"SELECT meta_key FROM ".$wpdb->base_prefix ."usermeta
|
349 |
-
|
350 |
|
351 |
if($value < 3 || $user_already_configured){
|
352 |
return false;
|
@@ -362,7 +355,8 @@ class Mo2fDB {
|
|
362 |
"SELECT * FROM ".$this->userDetailsTable
|
363 |
);
|
364 |
$user_already_configured = $wpdb->query(
|
365 |
-
"SELECT * FROM ".$this->userDetailsTable ." WHERE user_id ="
|
|
|
366 |
|
367 |
if($value < 3 || $user_already_configured){
|
368 |
return false;
|
139 |
function get_current_user_email($id)
|
140 |
{
|
141 |
global $wpdb;
|
142 |
+
$sql = $wpdb->prepare("select user_email from wp_users where ID='%d'",array($id));
|
143 |
return $wpdb->get_var($sql);
|
144 |
}
|
145 |
function database_table_issue(){
|
176 |
|
177 |
function insert_user( $user_id ) {
|
178 |
global $wpdb;
|
179 |
+
$sql = $wpdb->prepare("INSERT INTO $this->userDetailsTable (user_id) VALUES(%d) ON DUPLICATE KEY UPDATE user_id=%d",array($user_id,$user_id));
|
180 |
$wpdb->query( $sql );
|
181 |
}
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
function get_user_detail( $column_name, $user_id ) {
|
184 |
global $wpdb;
|
185 |
+
$user_column_detail = $wpdb->get_results( $wpdb->prepare("SELECT %1s FROM %1s WHERE user_id = %d;",array($column_name, $this->userDetailsTable,$user_id)) );
|
186 |
$value = empty( $user_column_detail ) ? '' : get_object_vars( $user_column_detail[0] );
|
|
|
187 |
return $value == '' ? '' : $value[ $column_name ];
|
188 |
}
|
189 |
|
190 |
function delete_user_details( $user_id ) {
|
191 |
global $wpdb;
|
192 |
$wpdb->query(
|
193 |
+
$wpdb->prepare("DELETE FROM " . $this->userDetailsTable . " WHERE user_id = %d",array($user_id))
|
|
|
194 |
);
|
195 |
|
196 |
return;
|
226 |
function check_if_user_column_exists($user_id){
|
227 |
global $wpdb;
|
228 |
$value = $wpdb->query(
|
229 |
+
$wpdb->prepare("SELECT * FROM " . $this->userDetailsTable . " WHERE user_id = %d",array($user_id))
|
|
|
230 |
);
|
231 |
|
232 |
return $value;
|
240 |
else if($table_type == "mo2f_user_details")
|
241 |
$table = $this->userDetailsTable;
|
242 |
global $wpdb;
|
243 |
+
$sql=$wpdb->prepare("SHOW COLUMNS FROM " . $table . " LIKE '%s'",array($column_name)) ;
|
|
|
244 |
$value = $wpdb->query($sql);
|
245 |
|
246 |
return $value;
|
253 |
$sql = "UPDATE " . $this->userDetailsTable . " SET ";
|
254 |
$i = 1;
|
255 |
foreach ( $update as $key => $value ) {
|
256 |
+
if($key == 'mo2f_configured_2FA_method' || $key == 'mo2f_user_phone' || $key == 'mo2f_user_email' || $key == 'user_registration_with_miniorange' || $key == 'mo_2factor_user_registration_status' )
|
257 |
+
$sql .= $wpdb->prepare(" %1s ='%s'",array($key,$value));
|
258 |
+
else
|
259 |
+
$sql .= $wpdb->prepare(" %1s ='%d'",array($key,$value));
|
260 |
|
|
|
261 |
if ( $i < $count ) {
|
262 |
$sql .= ' , ';
|
263 |
}
|
264 |
$i ++;
|
265 |
}
|
266 |
+
$sql .= $wpdb->prepare(" WHERE user_id= %d;",array($user_id));
|
267 |
$wpdb->query( $sql );
|
268 |
|
269 |
return;
|
272 |
|
273 |
function insert_user_login_session( $session_id ) {
|
274 |
global $wpdb;
|
275 |
+
$sql = $wpdb->prepare("INSERT INTO $this->userLoginInfoTable (session_id) VALUES('$session_id') ON DUPLICATE KEY UPDATE session_id= %s",array($session_id));
|
276 |
|
277 |
$wpdb->query( $sql );
|
278 |
$sql = "DELETE FROM $this->userLoginInfoTable WHERE ts_created < DATE_ADD(NOW(),INTERVAL - 2 MINUTE);";
|
285 |
$sql = "UPDATE " . $this->userLoginInfoTable . " SET ";
|
286 |
$i = 1;
|
287 |
foreach ( $user_values as $key => $value ) {
|
288 |
+
if($key == 'session_id' || $key == 'ts_created')
|
289 |
+
$sql .= $wpdb->prepare(" %1s ='%d'",array($key,$value));
|
290 |
+
else
|
291 |
+
$sql .= $wpdb->prepare(" %1s ='%s'",array($key,$value));
|
292 |
if ( $i < $count ) {
|
293 |
$sql .= ' , ';
|
294 |
}
|
295 |
$i ++;
|
296 |
}
|
297 |
+
$sql .= $wpdb->prepare(" WHERE session_id='%s';",array($session_id));
|
298 |
$wpdb->query( $sql );
|
299 |
|
300 |
return;
|
310 |
|
311 |
function get_user_login_details( $column_name, $session_id ) {
|
312 |
global $wpdb;
|
313 |
+
$user_column_detail = $wpdb->get_results( $wpdb->prepare("SELECT %1s FROM " . $this->userLoginInfoTable . " WHERE session_id = '%s';",array($column_name,$session_id)) );
|
314 |
$value = empty( $user_column_detail ) ? '' : get_object_vars( $user_column_detail[0] );
|
315 |
|
316 |
return $value == '' ? '' : $value[ $column_name ];
|
317 |
}
|
318 |
function get_user_configured_methods( $user_id ) {
|
319 |
global $wpdb;
|
320 |
+
$user_methods_detail = $wpdb->get_results( $wpdb->prepare("SELECT * FROM " . $this->userDetailsTable . " WHERE user_id = %d;",array($user_id)) );
|
321 |
return $user_methods_detail;
|
322 |
}
|
323 |
|
324 |
function delete_user_login_sessions($session_id ) {
|
325 |
global $wpdb;
|
326 |
$wpdb->query(
|
327 |
+
$wpdb->prepare("DELETE FROM " . $this->userLoginInfoTable . " WHERE session_id=%s;",array($session_id))
|
|
|
328 |
);
|
329 |
|
330 |
return;
|
338 |
);
|
339 |
|
340 |
$user_already_configured = $wpdb->query(
|
341 |
+
$wpdb->prepare("SELECT meta_key FROM ".$wpdb->base_prefix ."usermeta WHERE meta_key = 'currentMethod' and user_id =%d",array($user_id))
|
342 |
+
);
|
343 |
|
344 |
if($value < 3 || $user_already_configured){
|
345 |
return false;
|
355 |
"SELECT * FROM ".$this->userDetailsTable
|
356 |
);
|
357 |
$user_already_configured = $wpdb->query(
|
358 |
+
$wpdb->prepare("SELECT * FROM ".$this->userDetailsTable ." WHERE user_id = %d",array($user_id))
|
359 |
+
);
|
360 |
|
361 |
if($value < 3 || $user_already_configured){
|
362 |
return false;
|
database/mo2f_db_options.php
CHANGED
@@ -13,20 +13,9 @@ $GLOBALS['mo2f_enable_xmlrpc'] = 0;
|
|
13 |
$GLOBALS['mo2f_custom_plugin_name'] = 'miniOrange 2-Factor';
|
14 |
$GLOBALS['mo2f_show_sms_transaction_message'] = 0;
|
15 |
$GLOBALS['mo2f_enforce_strong_passswords_for_accounts'] = 'all';
|
16 |
-
$GLOBALS['mo_file_backup_plugins'] = 1;
|
17 |
-
$GLOBALS['mo_file_backup_themes'] = 1;
|
18 |
-
$GLOBALS['mo_wpns_backup_time'] = 12;
|
19 |
-
$GLOBALS['scheduled_file_backup'] = 0;
|
20 |
-
$GLOBALS['scheduled_db_backup'] = 0;
|
21 |
-
$GLOBALS['file_backup_created_time'] = 0;
|
22 |
-
$GLOBALS['db_backup_created_time'] = 0;
|
23 |
$GLOBALS['mo2f_inline_registration'] = 1;
|
24 |
$GLOBALS['mo2f_nonce_enable_configured_methods'] = true;
|
25 |
-
$GLOBALS['mo_database_backup'] = 1;
|
26 |
$GLOBALS['mo_wpns_scan_initialize'] = 1;
|
27 |
-
$GLOBALS['mo_file_manual_backup_plugins'] = 1;
|
28 |
-
$GLOBALS['mo_file_manual_backup_themes'] = 1;
|
29 |
-
$GLOBALS['mo_schedule_database_backup'] = 1;
|
30 |
$GLOBALS['mo_wpns_2fa_with_network_security'] = 0;
|
31 |
$GLOBALS['mo_wpns_2fa_with_network_security_popup_visible'] = 1;
|
32 |
$GLOBALS['mo2f_two_factor_tour'] = -1;
|
13 |
$GLOBALS['mo2f_custom_plugin_name'] = 'miniOrange 2-Factor';
|
14 |
$GLOBALS['mo2f_show_sms_transaction_message'] = 0;
|
15 |
$GLOBALS['mo2f_enforce_strong_passswords_for_accounts'] = 'all';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
$GLOBALS['mo2f_inline_registration'] = 1;
|
17 |
$GLOBALS['mo2f_nonce_enable_configured_methods'] = true;
|
|
|
18 |
$GLOBALS['mo_wpns_scan_initialize'] = 1;
|
|
|
|
|
|
|
19 |
$GLOBALS['mo_wpns_2fa_with_network_security'] = 0;
|
20 |
$GLOBALS['mo_wpns_2fa_with_network_security_popup_visible'] = 1;
|
21 |
$GLOBALS['mo2f_two_factor_tour'] = -1;
|
handler/WAF/Includes/CrawlerIPs.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$googleBot = array('64.233.160.0 - 64.233.191.255','66.102.0.0 - 66.102.15.255','66.249.80.0 - 66.249.95.255','72.14.192.0 - 72.14.255.255','74.125.0.0 - 74.125.255.255','108.177.8.0 - 108.177.15.255','172.217.0.0 - 172.217.31.255','173.194.0.0 - 173.194.255.255','207.126.144.0 - 207.126.159.255','209.85.128.0 - 209.85.255.255','216.58.192.0 - 216.58.223.255','216.239.32.0 - 216.239.63.255');
|
3 |
+
|
4 |
+
$googleBotV6 = array('2001:4860:4000:0:0:0:0:0 - 2001:4860:4fff:ffff:ffff:ffff:ffff:ffff','2404:6800:4000:0:0:0:0:0 - 2404:6800:4fff:ffff:ffff:ffff:ffff:ffff','2607:f8b0:4000:0:0:0:0:0 - 2607:f8b0:4fff:ffff:ffff:ffff:ffff:ffff','2800:3f0:4000:0:0:0:0:0 - 2800:3f0:4fff:ffff:ffff:ffff:ffff:ffff','2a00:1450:4000:0:0:0:0:0 - 2a00:1450:4fff:ffff:ffff:ffff:ffff:ffff','2c0f:fb50:4000:0:0:0:0:0 - 2c0f:fb50:4fff:ffff:ffff:ffff:ffff:ffff');
|
5 |
+
|
6 |
+
$facebookBot = array('69.63.176.1 - 69.63.183.254','69.63.184.1 - 69.63.191.254','66.220.144.1 - 66.220.159.254','69.63.176.1 - 69.63.191.254');
|
7 |
+
|
8 |
+
$facebookBotV6 = array('2620:0000:1c00:0000:0000:0000:0000:0000 - 2620:0000:1cff:ffff:ffff:ffff:ffff:ffff' , '2a03:2880:0000:0000:0000:0000:0000:0000 - 2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff','2a03:2880:fffe:0000:0000:0000:0000:0000 - 2a03:2880:fffe:ffff:ffff:ffff:ffff:ffff','2a03:2880:ffff:0000:0000:0000:0000:0000 - 2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff','2620:0000:1cff:0000:0000:0000:0000:0000 - 2620:0000:1cff:ffff:ffff:ffff:ffff:ffff');
|
9 |
+
|
10 |
+
$bingBot = array('65.52.104.1 - 65.52.104.254','65.52.108.1 - 65.52.108.254','65.55.24.1 - 65.55.24.254','65.55.52.1 - 65.55.52.254','65.55.55.1 - 65.55.55.254','65.55.213.1 - 65.55.213.254','65.55.217.1 - 65.55.217.254','131.253.24.1 - 131.253.27.254','131.253.46.1 - 131.253.47.254','40.77.167.1 - 40.77.167.254','199.30.27.1 - 199.30.27.254','157.55.16.1 - 157.55.17.254','157.55.18.1 - 157.55.18.254','157.55.32.1 - 157.55.35.254','157.55.36.1 - 157.55.36.254','157.55.48.1 - 157.55.48.254','157.55.109.1 - 157.55.109.254','157.55.110.41 - 157.55.110.46','157.55.110.49 - 157.55.110.62','157.56.92.1 - 157.56.92.254' ,'157.56.93.1 - 157.56.93.254','157.56.94.1 - 157.56.95.254','157.56.229.1 - 157.56.229.254','199.30.16.1 - 199.30.16.254' , '207.46.12.1 - 207.46.13.254','207.46.192.1 - 207.46.192.254' ,'207.46.195.1 - 207.46.195.254','207.46.199.1 - 207.46.199.254','207.46.204.1 - 207.46.204.254','157.55.39.1 - 157.55.39.254');
|
11 |
+
|
12 |
+
$statusCake = array("103.194.112.70","104.131.247.151","104.131.248.65","104.131.248.78","104.156.229.24","104.156.255.184","104.206.168.26","104.238.164.105","107.150.1.135","107.155.104.182","107.155.108.234","107.155.125.29","107.161.28.219","107.170.197.248","107.170.219.46","107.170.227.23","107.170.227.24","107.170.240.141","107.170.53.191","107.191.47.131","107.191.57.237","108.61.119.153","108.61.162.214","108.61.205.201","108.61.212.141","108.61.215.179","125.63.48.239","128.199.222.65","138.197.130.232","138.197.130.235","138.197.140.243","138.204.171.136","138.68.24.115","138.68.24.136","138.68.24.207","138.68.24.60","138.68.80.10","138.68.80.173","139.59.15.79","139.59.155.26","139.59.190.241","139.59.22.109","139.59.26.85","139.59.29.167","149.154.157.61","149.255.59.100","151.236.10.238","151.236.18.80","151.80.175.223","151.80.175.226","154.127.60.23","154.127.60.59","158.255.208.76","159.203.182.22","159.203.182.60","159.203.186.225","159.203.31.18","162.243.247.163","162.243.71.56","162.248.97.72","162.253.64.104","162.253.64.87","176.56.230.110","178.62.101.57","178.62.104.137","178.62.106.84","178.62.109.7","178.62.40.233","178.62.41.44","178.62.41.49","178.62.41.52","178.62.65.162","178.62.71.227","178.62.78.199","178.62.80.93","178.62.86.69","178.73.210.99","181.41.201.117","181.41.214.137","185.112.157.185","185.12.45.70","185.47.129.168","185.60.135.86","188.166.158.224","188.166.253.148","188.226.139.158","188.226.158.160","188.226.169.228","188.226.171.58","188.226.184.152","188.226.185.106","188.226.186.199","188.226.203.84","188.226.247.184","188.68.238.79","192.241.221.11","193.124.178.54","193.124.178.61","193.182.144.105","193.182.144.147","199.167.128.80","209.222.30.242","213.183.56.107","217.148.43.188","217.148.43.202","31.220.7.237","37.157.246.146","37.235.48.42","37.235.52.25","37.235.53.240","37.235.55.205","37.97.188.103","45.32.128.80","45.32.145.79","45.32.151.21","45.32.160.172","45.32.166.195","45.32.171.24","45.32.192.198","45.32.195.186","45.32.195.93","45.32.212.56","45.32.36.158","45.32.7.22","45.63.121.159","45.63.26.78","45.63.51.63","45.63.61.213","45.63.76.68","45.63.78.84","45.63.86.120","45.63.88.213","45.76.1.44","45.76.192.50","45.76.3.112","46.101.0.24","46.101.110.32","46.101.110.43","46.101.110.45","46.101.20.96","46.101.238.182","46.101.238.189","46.101.240.208","46.101.27.186","46.101.61.83","46.101.74.251","5.45.179.103","50.2.139.16","82.221.95.161","91.236.116.163");
|
handler/WAF/database/mo-waf-plugin-db.php
CHANGED
@@ -43,7 +43,7 @@
|
|
43 |
function mo_wpns_getRLEAttack($ipaddress)
|
44 |
{
|
45 |
global $wpdb;
|
46 |
-
$query = "select time from ".$wpdb->base_prefix."wpns_attack_logs where ip ='
|
47 |
$results = $wpdb->get_results($query);
|
48 |
return $results[0]->time;
|
49 |
}
|
@@ -51,9 +51,9 @@
|
|
51 |
{
|
52 |
global $wpdb;
|
53 |
$value = htmlspecialchars($value);
|
54 |
-
$query = 'insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("
|
55 |
$results = $wpdb->get_results($query);
|
56 |
-
$query = "select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='
|
57 |
$results = $wpdb->get_results($query);
|
58 |
return $results[0]->count;
|
59 |
}
|
@@ -65,7 +65,7 @@
|
|
65 |
$time = 60;
|
66 |
mo_wpns_clearRate($time);
|
67 |
mo_wpns_insertRate($ipaddress);
|
68 |
-
$query = "select count(*) as count from ".$wpdb->base_prefix."wpns_ip_rate_details where ip='
|
69 |
$results = $wpdb->get_results($query);
|
70 |
|
71 |
if(isset($results[0]->count))
|
@@ -78,13 +78,13 @@
|
|
78 |
function mo_wpns_clearRate($time)
|
79 |
{
|
80 |
global $wpdb;
|
81 |
-
$query = "delete from ".$wpdb->base_prefix."wpns_ip_rate_details where time<"
|
82 |
$results = $wpdb->get_results($query);
|
83 |
}
|
84 |
function mo_wpns_insertRate($ipaddress)
|
85 |
{
|
86 |
global $wpdb;
|
87 |
-
$query = "insert into ".$wpdb->base_prefix."wpns_ip_rate_details values('"
|
88 |
$results = $wpdb->get_results($query);
|
89 |
}
|
90 |
|
43 |
function mo_wpns_getRLEAttack($ipaddress)
|
44 |
{
|
45 |
global $wpdb;
|
46 |
+
$query = $wpdb->prepare("select time from ".$wpdb->base_prefix."wpns_attack_logs where ip ='%s' ORDER BY time DESC LIMIT 1;",array($ipaddress));
|
47 |
$results = $wpdb->get_results($query);
|
48 |
return $results[0]->time;
|
49 |
}
|
51 |
{
|
52 |
global $wpdb;
|
53 |
$value = htmlspecialchars($value);
|
54 |
+
$query = $wpdb->prepare('insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("%s","%s",%d,"%s");',array($ipaddress,$value1,time(),$value));
|
55 |
$results = $wpdb->get_results($query);
|
56 |
+
$query = $wpdb->prepare("select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='%s' and input != 'RLE';",array($ipaddress));
|
57 |
$results = $wpdb->get_results($query);
|
58 |
return $results[0]->count;
|
59 |
}
|
65 |
$time = 60;
|
66 |
mo_wpns_clearRate($time);
|
67 |
mo_wpns_insertRate($ipaddress);
|
68 |
+
$query = $wpdb->prepare("select count(*) as count from ".$wpdb->base_prefix."wpns_ip_rate_details where ip='%s';",array($ipaddress));
|
69 |
$results = $wpdb->get_results($query);
|
70 |
|
71 |
if(isset($results[0]->count))
|
78 |
function mo_wpns_clearRate($time)
|
79 |
{
|
80 |
global $wpdb;
|
81 |
+
$query = $wpdb->prepare("delete from ".$wpdb->base_prefix."wpns_ip_rate_details where time< %d",array(time()-$time));
|
82 |
$results = $wpdb->get_results($query);
|
83 |
}
|
84 |
function mo_wpns_insertRate($ipaddress)
|
85 |
{
|
86 |
global $wpdb;
|
87 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."wpns_ip_rate_details values('%s',%d);",array($ipaddress,time()));
|
88 |
$results = $wpdb->get_results($query);
|
89 |
}
|
90 |
|
handler/WAF/mo-waf-plugin.php
CHANGED
@@ -14,9 +14,9 @@
|
|
14 |
include_once($wafDB);
|
15 |
|
16 |
|
17 |
-
global $wpdb,$mowpnshandle;
|
18 |
$mowpnshandle = new MoWpnsHandler();
|
19 |
-
|
20 |
$ipaddress = sanitize_text_field($ipaddress);
|
21 |
if($mowpnshandle->mo_wpns_is_ip_blocked($ipaddress))
|
22 |
{
|
@@ -34,7 +34,8 @@
|
|
34 |
}
|
35 |
if(isset($RateLimiting) and $RateLimiting == 1)
|
36 |
{
|
37 |
-
|
|
|
38 |
{
|
39 |
mo_wpns_apply_RateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
40 |
}
|
@@ -43,9 +44,9 @@
|
|
43 |
{
|
44 |
if($RateLimitingCrawler == 1)
|
45 |
{
|
46 |
-
if(
|
47 |
{
|
48 |
-
if(
|
49 |
{
|
50 |
header('HTTP/1.1 403 Forbidden');
|
51 |
include_once($errorPage);
|
@@ -59,6 +60,16 @@
|
|
59 |
}
|
60 |
}
|
61 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
$attack = array();
|
63 |
if(isset($SQL) )
|
64 |
{
|
@@ -170,7 +181,7 @@
|
|
170 |
include($filename);
|
171 |
}
|
172 |
global $wpdb,$mowpnshandle;
|
173 |
-
$
|
174 |
if(isset($RateLimitingCrawler))
|
175 |
{
|
176 |
if($RateLimitingCrawler=='1')
|
@@ -186,7 +197,7 @@
|
|
186 |
$current_time = time();
|
187 |
if($current_time>$lastAttack && sanitize_text_field($_SERVER['HTTP_USER_AGENT'])!='')
|
188 |
{
|
189 |
-
mo_wpns_log_attack($ipaddress,'RLECrawler',$
|
190 |
}
|
191 |
if($action != 'ThrottleIP')
|
192 |
{
|
14 |
include_once($wafDB);
|
15 |
|
16 |
|
17 |
+
global $wpdb,$mowpnshandle,$moWpnsUtility;
|
18 |
$mowpnshandle = new MoWpnsHandler();
|
19 |
+
$ipaddress = $moWpnsUtility->get_client_ip();
|
20 |
$ipaddress = sanitize_text_field($ipaddress);
|
21 |
if($mowpnshandle->mo_wpns_is_ip_blocked($ipaddress))
|
22 |
{
|
34 |
}
|
35 |
if(isset($RateLimiting) and $RateLimiting == 1)
|
36 |
{
|
37 |
+
|
38 |
+
if(!mo2f_is_crawler())
|
39 |
{
|
40 |
mo_wpns_apply_RateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
41 |
}
|
44 |
{
|
45 |
if($RateLimitingCrawler == 1)
|
46 |
{
|
47 |
+
if(mo2f_is_crawler())
|
48 |
{
|
49 |
+
if(mo2f_is_fake_googlebot($ipaddress))
|
50 |
{
|
51 |
header('HTTP/1.1 403 Forbidden');
|
52 |
include_once($errorPage);
|
60 |
}
|
61 |
}
|
62 |
}
|
63 |
+
if(mo2f_is_crawler())
|
64 |
+
{
|
65 |
+
if(mo2f_is_fake_bot($ipaddress))
|
66 |
+
{
|
67 |
+
header('HTTP/1.1 403 Forbidden');
|
68 |
+
include_once($errorPage);
|
69 |
+
exit;
|
70 |
+
}
|
71 |
+
|
72 |
+
}
|
73 |
$attack = array();
|
74 |
if(isset($SQL) )
|
75 |
{
|
181 |
include($filename);
|
182 |
}
|
183 |
global $wpdb,$mowpnshandle;
|
184 |
+
$user_agent = isset($_SERVER['HTTP_USER_AGENT'])?sanitize_text_field($_SERVER['HTTP_USER_AGENT']):'';
|
185 |
if(isset($RateLimitingCrawler))
|
186 |
{
|
187 |
if($RateLimitingCrawler=='1')
|
197 |
$current_time = time();
|
198 |
if($current_time>$lastAttack && sanitize_text_field($_SERVER['HTTP_USER_AGENT'])!='')
|
199 |
{
|
200 |
+
mo_wpns_log_attack($ipaddress,'RLECrawler',$user_agent);
|
201 |
}
|
202 |
if($action != 'ThrottleIP')
|
203 |
{
|
handler/WAF/mo-waf.php
CHANGED
@@ -10,14 +10,19 @@
|
|
10 |
include_once($wafInclude);
|
11 |
include_once($wafdb);
|
12 |
|
13 |
-
global $dbcon,$prefix;
|
14 |
$connection = mo_wpns_dbconnection();
|
15 |
if($connection)
|
16 |
{
|
17 |
$wafLevel = mo_wpns_get_option_value('WAF');
|
18 |
if($wafLevel=='HtaccessLevel')
|
19 |
{
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
21 |
if(mo_wpns_is_ip_blocked($ipaddress))
|
22 |
{
|
23 |
if(!mo_wpns_is_ip_whitelisted($ipaddress))
|
@@ -35,7 +40,7 @@
|
|
35 |
}
|
36 |
if(isset($RateLimiting) && $RateLimiting == 1)
|
37 |
{
|
38 |
-
if(!
|
39 |
{
|
40 |
if(isset($RequestsPMin) && isset($actionRateL))
|
41 |
mo_wpns_applyRateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
@@ -43,9 +48,9 @@
|
|
43 |
}
|
44 |
if(isset($RateLimitingCrawler) && $RateLimitingCrawler == 1)
|
45 |
{
|
46 |
-
if(
|
47 |
{
|
48 |
-
if(
|
49 |
{
|
50 |
header('HTTP/1.1 403 Forbidden');
|
51 |
include_once($errorPage);
|
@@ -135,7 +140,20 @@
|
|
135 |
}
|
136 |
}
|
137 |
|
138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
139 |
function mo_wpns_applyRateLimiting($reqLimit,$action,$ipaddress,$errorPage)
|
140 |
{
|
141 |
global $dbcon, $prefix;
|
@@ -168,7 +186,8 @@
|
|
168 |
include($filename);
|
169 |
}
|
170 |
global $dbcon,$prefix;
|
171 |
-
|
|
|
172 |
if(isset($RateLimitingCrawler))
|
173 |
{
|
174 |
if(isset($RateLimitingCrawler) && $RateLimitingCrawler=='1')
|
@@ -184,7 +203,7 @@
|
|
184 |
$current_time = time();
|
185 |
if($current_time>$lastAttack)
|
186 |
{
|
187 |
-
mo_wpns_log_attack($ipaddress,'RLECrawler',$
|
188 |
}
|
189 |
if($action != 'ThrottleIP')
|
190 |
{
|
10 |
include_once($wafInclude);
|
11 |
include_once($wafdb);
|
12 |
|
13 |
+
global $dbcon,$prefix,$moWpnsUtility;
|
14 |
$connection = mo_wpns_dbconnection();
|
15 |
if($connection)
|
16 |
{
|
17 |
$wafLevel = mo_wpns_get_option_value('WAF');
|
18 |
if($wafLevel=='HtaccessLevel')
|
19 |
{
|
20 |
+
if((isset($_SERVER['REMOTE_ADDR']) && is_string($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']) && mo2f_isValidIP($_SERVER['REMOTE_ADDR'])))
|
21 |
+
{
|
22 |
+
$ipaddress = get_unique_ip($_SERVER['REMOTE_ADDR']);
|
23 |
+
}else{
|
24 |
+
$ipaddress = 'UNKNOWN';
|
25 |
+
}
|
26 |
if(mo_wpns_is_ip_blocked($ipaddress))
|
27 |
{
|
28 |
if(!mo_wpns_is_ip_whitelisted($ipaddress))
|
40 |
}
|
41 |
if(isset($RateLimiting) && $RateLimiting == 1)
|
42 |
{
|
43 |
+
if(!mo2f_is_crawler())
|
44 |
{
|
45 |
if(isset($RequestsPMin) && isset($actionRateL))
|
46 |
mo_wpns_applyRateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
48 |
}
|
49 |
if(isset($RateLimitingCrawler) && $RateLimitingCrawler == 1)
|
50 |
{
|
51 |
+
if(mo2f_is_crawler())
|
52 |
{
|
53 |
+
if(mo2f_is_fake_googlebot($ipaddress))
|
54 |
{
|
55 |
header('HTTP/1.1 403 Forbidden');
|
56 |
include_once($errorPage);
|
140 |
}
|
141 |
}
|
142 |
|
143 |
+
function get_unique_ip($IP){
|
144 |
+
$IP = explode(',',$IP);
|
145 |
+
if(is_array($IP))
|
146 |
+
return filter_var($IP[0], FILTER_VALIDATE_IP);
|
147 |
+
return filter_var($IP, FILTER_VALIDATE_IP);
|
148 |
+
}
|
149 |
+
|
150 |
+
function mo2f_isValidIP($IP){
|
151 |
+
$new_ip = explode(',',$IP);
|
152 |
+
if(is_array($new_ip))
|
153 |
+
$IP = $new_ip[0];
|
154 |
+
return filter_var(get_unique_ip($IP), FILTER_VALIDATE_IP) !== false;
|
155 |
+
}
|
156 |
+
|
157 |
function mo_wpns_applyRateLimiting($reqLimit,$action,$ipaddress,$errorPage)
|
158 |
{
|
159 |
global $dbcon, $prefix;
|
186 |
include($filename);
|
187 |
}
|
188 |
global $dbcon,$prefix;
|
189 |
+
|
190 |
+
$user_agent = isset($_SERVER['HTTP_USER_AGENT'])?filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_STRING):'';
|
191 |
if(isset($RateLimitingCrawler))
|
192 |
{
|
193 |
if(isset($RateLimitingCrawler) && $RateLimitingCrawler=='1')
|
203 |
$current_time = time();
|
204 |
if($current_time>$lastAttack)
|
205 |
{
|
206 |
+
mo_wpns_log_attack($ipaddress,'RLECrawler',$user_agent);
|
207 |
}
|
208 |
if($action != 'ThrottleIP')
|
209 |
{
|
handler/WAF/waf-include.php
CHANGED
@@ -22,62 +22,218 @@
|
|
22 |
include_once($xssFile);
|
23 |
include_once($lfiFile);
|
24 |
|
25 |
-
function
|
26 |
-
|
27 |
-
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
{
|
32 |
-
$
|
33 |
-
if
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
else
|
49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
}
|
53 |
-
|
|
|
54 |
{
|
55 |
-
$
|
56 |
-
$
|
57 |
-
|
|
|
58 |
{
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
{
|
61 |
return true;
|
62 |
}
|
63 |
-
|
|
|
64 |
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
}
|
66 |
-
|
|
|
67 |
{
|
68 |
-
$
|
69 |
-
if(
|
70 |
{
|
71 |
-
|
|
|
|
|
72 |
{
|
73 |
-
|
74 |
-
include_once("mo-error.html");
|
75 |
-
exit;
|
76 |
}
|
|
|
77 |
}
|
78 |
-
|
79 |
-
function is_fake($crawler,$USER_AGENT,$ipaddress)
|
80 |
-
{
|
81 |
-
|
82 |
}
|
83 |
?>
|
22 |
include_once($xssFile);
|
23 |
include_once($lfiFile);
|
24 |
|
25 |
+
function mo2f_is_crawler()
|
26 |
+
{
|
27 |
+
|
28 |
+
$user_agent = isset($_SERVER['HTTP_USER_AGENT'])?filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_STRING):'';
|
29 |
+
$Botsign = array('bot','apache','crawler','elinks','http', 'java', 'spider','link','fetcher','scanner','grabber','collector','capture','seo','.com');
|
30 |
+
foreach ($Botsign as $key => $value)
|
31 |
+
{
|
32 |
+
if(isset($user_agent) && preg_match('/'.$value.'/', $user_agent))
|
33 |
+
{
|
34 |
+
return true;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
return false;
|
38 |
+
}
|
39 |
+
function mo2f_is_fake_bot($ipaddress)
|
40 |
+
{
|
41 |
+
$bing = false;
|
42 |
+
$fb = false;
|
43 |
+
$google = false;
|
44 |
+
$status = false;
|
45 |
|
46 |
+
$bing = mo2f_is_fake_bing_bot($ipaddress);
|
47 |
+
$fb = mo2f_is_fake_FB_crawler($ipaddress);
|
48 |
+
$google = mo2f_is_fake_googlebot($ipaddress);
|
49 |
+
$status = mo2f_is_fake_statusCake($ipaddress);
|
50 |
+
|
51 |
+
return $google or $fb or $bing or $status;
|
52 |
+
|
53 |
+
}
|
54 |
+
function mo2f_is_fake_statusCake($ipaddress)
|
55 |
+
{
|
56 |
+
$user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']);
|
57 |
+
if(preg_match('/StatusCake/', $user_agent))
|
58 |
+
{
|
59 |
+
return mo2f_is_fake_status($ipaddress);
|
60 |
+
}
|
61 |
+
return false;
|
62 |
+
}
|
63 |
+
function mo2f_is_fake_googlebot($ipaddress)
|
64 |
+
{
|
65 |
+
|
66 |
+
$user_agent = isset($_SERVER['HTTP_USER_AGENT'])?filter_var($_SERVER['HTTP_USER_AGENT'], FILTER_SANITIZE_STRING):'';
|
67 |
+
if(preg_match('/Googlebot/', $user_agent))
|
68 |
+
{
|
69 |
+
return mo2f_is_fake_google('Googlebot',$user_agent,$ipaddress);
|
70 |
+
}
|
71 |
+
return false;
|
72 |
+
}
|
73 |
+
function mo2f_is_fake_FB_crawler($ipaddress)
|
74 |
{
|
75 |
+
$user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']);
|
76 |
+
if(preg_match('/Facebot/', $user_agent))
|
77 |
+
{
|
78 |
+
return mo2f_is_fake_fb('Facebot',$user_agent,$ipaddress);
|
79 |
+
}
|
80 |
+
else if(preg_match('/facebookexternalhit/', $user_agent))
|
81 |
+
{
|
82 |
+
return mo2f_is_fake_fb('facebookexternalhit',$user_agent,$ipaddress);
|
83 |
+
}
|
84 |
+
return false;
|
85 |
+
}
|
86 |
+
function mo2f_is_fake_bing_bot($ipaddress)
|
87 |
+
{
|
88 |
+
$user_agent = sanitize_text_field($_SERVER['HTTP_USER_AGENT']);
|
89 |
+
if(preg_match('/bingbot/', $user_agent))
|
90 |
+
{
|
91 |
+
return mo2f_is_fake_bing('bingbot',$user_agent,$ipaddress);
|
92 |
+
}
|
93 |
+
return false;
|
94 |
+
}
|
95 |
+
function mo2f_is_fake_status($ipaddress)
|
96 |
+
{
|
97 |
+
$dir = dirname(dirname(__FILE__));
|
98 |
+
$IPList = $dir.DIRECTORY_SEPARATOR.'WAF'.DIRECTORY_SEPARATOR.'Includes'.DIRECTORY_SEPARATOR.'CrawlerIPs.php';
|
99 |
+
include($IPList);
|
100 |
+
$currentIP = '';
|
101 |
+
if(strlen(inet_pton($ipaddress)) == 16)
|
102 |
+
{
|
103 |
+
$currentIP = mo2f_ipaddress_to_ipnumber(trim($ipaddress));
|
104 |
+
}
|
105 |
else
|
106 |
+
{
|
107 |
+
$currentIP = ip2long(trim($ipaddress));
|
108 |
+
}
|
109 |
+
foreach ($statusCake as $index => $IP)
|
110 |
+
{
|
111 |
+
$ip = ip2long(trim($IP));
|
112 |
+
if($ip == $currentIP)
|
113 |
+
{
|
114 |
+
return false;
|
115 |
+
}
|
116 |
+
}
|
117 |
+
return true;
|
118 |
+
}
|
119 |
+
|
120 |
+
function mo2f_is_fake_google($crawler,$user_agent,$ipaddress)
|
121 |
+
{
|
122 |
+
$dir = dirname(dirname(__FILE__));
|
123 |
+
$IPList = $dir.DIRECTORY_SEPARATOR.'WAF'.DIRECTORY_SEPARATOR.'Includes'.DIRECTORY_SEPARATOR.'CrawlerIPs.php';
|
124 |
+
include($IPList);
|
125 |
+
if(strlen(inet_pton($ipaddress)) == 4)
|
126 |
+
{
|
127 |
+
foreach ($googleBot as $index => $range)
|
128 |
+
{
|
129 |
+
if(mo2f_check_current_IP_in_range($range,$ipaddress))
|
130 |
+
{
|
131 |
+
return false;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
else if(strlen(inet_pton($ipaddress)) == 16)
|
136 |
+
{
|
137 |
+
foreach ($googleBotV6 as $index => $range)
|
138 |
+
{
|
139 |
+
if(mo2f_check_current_IP_in_rangeV6($range,$ipaddress))
|
140 |
+
{
|
141 |
+
return false;
|
142 |
+
}
|
143 |
+
}
|
144 |
+
}
|
145 |
+
return true;
|
146 |
+
}
|
147 |
|
148 |
+
function mo2f_is_fake_bing($crawler,$user_agent,$ipaddress)
|
149 |
+
{
|
150 |
+
$dir = dirname(dirname(__FILE__));
|
151 |
+
$IPList = $dir.DIRECTORY_SEPARATOR.'WAF'.DIRECTORY_SEPARATOR.'Includes'.DIRECTORY_SEPARATOR.'CrawlerIPs.php';
|
152 |
+
include($IPList);
|
153 |
+
if(strlen(inet_pton($ipaddress)) == 4)
|
154 |
+
{
|
155 |
+
foreach ($bingBot as $index => $range)
|
156 |
+
{
|
157 |
+
if(mo2f_check_current_IP_in_range($range,$ipaddress))
|
158 |
+
{
|
159 |
+
return false;
|
160 |
+
}
|
161 |
+
}
|
162 |
+
}
|
163 |
+
return true;
|
164 |
}
|
165 |
+
|
166 |
+
function mo2f_is_fake_fb($crawler,$user_agent,$ipaddress)
|
167 |
{
|
168 |
+
$dir = dirname(dirname(__FILE__));
|
169 |
+
$IPList = $dir.DIRECTORY_SEPARATOR.'WAF'.DIRECTORY_SEPARATOR.'Includes'.DIRECTORY_SEPARATOR.'CrawlerIPs.php';
|
170 |
+
include($IPList);
|
171 |
+
if(strlen(inet_pton($ipaddress)) == 4)
|
172 |
{
|
173 |
+
foreach ($facebookBot as $index => $range)
|
174 |
+
{
|
175 |
+
if(mo2f_check_current_IP_in_range($range,$ipaddress))
|
176 |
+
{
|
177 |
+
return false;
|
178 |
+
}
|
179 |
+
}
|
180 |
+
}
|
181 |
+
else if(strlen(inet_pton($ipaddress)) == 16)
|
182 |
+
{
|
183 |
+
foreach ($facebookBotV6 as $index => $range)
|
184 |
+
{
|
185 |
+
if(mo2f_check_current_IP_in_rangeV6($range,$ipaddress))
|
186 |
+
{
|
187 |
+
return false;
|
188 |
+
}
|
189 |
+
}
|
190 |
+
}
|
191 |
+
return true;
|
192 |
+
}
|
193 |
+
|
194 |
+
function mo2f_check_current_IP_in_rangeV6($range , $ipaddress)
|
195 |
+
{
|
196 |
+
$rangearray = explode(" - ",$range);
|
197 |
+
if(sizeof($rangearray)==2)
|
198 |
+
{
|
199 |
+
$lowip = mo2f_ipaddress_to_ipnumber(trim($rangearray[0]));
|
200 |
+
$highip = mo2f_ipaddress_to_ipnumber(trim($rangearray[1]));
|
201 |
+
$currentIP = mo2f_ipaddress_to_ipnumber(trim($ipaddress));
|
202 |
+
|
203 |
+
if($currentIP>=$lowip && $currentIP<=$highip)
|
204 |
{
|
205 |
return true;
|
206 |
}
|
207 |
+
return false;
|
208 |
+
}
|
209 |
return false;
|
210 |
+
|
211 |
+
}
|
212 |
+
|
213 |
+
function mo2f_ipaddress_to_ipnumber($ipaddress)
|
214 |
+
{
|
215 |
+
$pton = @inet_pton($ipaddress);
|
216 |
+
if (!$pton) { return false; }
|
217 |
+
$number = '';
|
218 |
+
foreach (unpack('C*', $pton) as $byte) {
|
219 |
+
$number .= str_pad(decbin($byte), 8, '0', STR_PAD_LEFT);
|
220 |
+
}
|
221 |
+
return base_convert(ltrim($number, '0'), 2, 10);
|
222 |
}
|
223 |
+
|
224 |
+
function mo2f_check_current_IP_in_range($range, $ipaddress)
|
225 |
{
|
226 |
+
$rangearray = explode(" - ",$range);
|
227 |
+
if(sizeof($rangearray)==2)
|
228 |
{
|
229 |
+
$lowip = ip2long(trim($rangearray[0]));
|
230 |
+
$highip = ip2long(trim($rangearray[1]));
|
231 |
+
if(ip2long(trim($ipaddress))>=$lowip && ip2long(trim($ipaddress))<=$highip)
|
232 |
{
|
233 |
+
return true;
|
|
|
|
|
234 |
}
|
235 |
+
return false;
|
236 |
}
|
237 |
+
return false;
|
|
|
|
|
|
|
238 |
}
|
239 |
?>
|
handler/backup.php
DELETED
@@ -1,322 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class MoBackupSite{
|
4 |
-
|
5 |
-
function __construct()
|
6 |
-
{
|
7 |
-
add_filter( 'cron_schedules', array($this,'db_eb_backup_interval'));
|
8 |
-
add_action( 'mo_eb_bl_cron_hook', array($this,'db_cron_backup') );
|
9 |
-
add_filter( 'cron_schedules', array($this,'file_eb_backup_interval'));
|
10 |
-
add_action( 'mo_eb_file_cron_hook', array($this,'file_cron_backup') );
|
11 |
-
}
|
12 |
-
|
13 |
-
function db_cron_backup(){
|
14 |
-
|
15 |
-
$obj = new MoBackupSite;
|
16 |
-
$obj->backupDB();
|
17 |
-
|
18 |
-
}
|
19 |
-
|
20 |
-
function db_eb_backup_interval($schedules){
|
21 |
-
$mo2f_cron_hours = MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option')*3600;
|
22 |
-
$schedules['db_eb_backup_time'] = array(
|
23 |
-
'interval' => $mo2f_cron_hours,
|
24 |
-
'display' => esc_html__( 'Cron Activated' ),
|
25 |
-
);
|
26 |
-
return $schedules;
|
27 |
-
}
|
28 |
-
|
29 |
-
function bl_deactivate() {
|
30 |
-
$timestamp = wp_next_scheduled( 'mo_eb_bl_cron_hook' );
|
31 |
-
wp_unschedule_event( $timestamp, 'mo_eb_bl_cron_hook' );
|
32 |
-
}
|
33 |
-
|
34 |
-
function file_cron_backup(){
|
35 |
-
$backup_store_path = wp_upload_dir();
|
36 |
-
$backup_store_path = $backup_store_path['basedir'].DIRECTORY_SEPARATOR;
|
37 |
-
$time = time();
|
38 |
-
update_site_option('backup_created_time',$time);
|
39 |
-
|
40 |
-
if(MoWpnsUtility::get_mo2f_db_option('mo_file_backup_plugins', 'site_option') =='1'){
|
41 |
-
$this->plugin_backup($backup_store_path, $time);
|
42 |
-
}
|
43 |
-
if(MoWpnsUtility::get_mo2f_db_option('mo_file_backup_themes','site_option') =='1'){
|
44 |
-
$this->themes_backup($backup_store_path ,$time);
|
45 |
-
}
|
46 |
-
|
47 |
-
if(get_site_option('mo_file_backup_wp_files') == '1'){
|
48 |
-
$this->wpfiles_backup($backup_store_path, $time);
|
49 |
-
}
|
50 |
-
update_site_option('backup_notification_option',1);
|
51 |
-
}
|
52 |
-
|
53 |
-
function file_manual_backup(){
|
54 |
-
$backup_store_path = wp_upload_dir();
|
55 |
-
$backup_store_path = $backup_store_path['basedir'].DIRECTORY_SEPARATOR;
|
56 |
-
$time = time();
|
57 |
-
update_site_option('backup_created_time',$time);
|
58 |
-
|
59 |
-
if(MoWpnsUtility::get_mo2f_db_option('mo_file_manual_backup_plugins', 'site_option') =='1'){
|
60 |
-
// if(get_option('mo_file_manual_backup_plugins') =='1'){
|
61 |
-
$this->plugin_backup($backup_store_path, $time);
|
62 |
-
}
|
63 |
-
if(MoWpnsUtility::get_mo2f_db_option('mo_file_manual_backup_themes', 'site_option') =='1'){
|
64 |
-
// if(get_option('mo_file_manual_backup_themes') =='1'){
|
65 |
-
$this->themes_backup($backup_store_path ,$time);
|
66 |
-
}
|
67 |
-
|
68 |
-
if(get_site_option('mo_file_manual_backup_wp_files') == '1'){
|
69 |
-
$this->wpfiles_backup($backup_store_path, $time);
|
70 |
-
}
|
71 |
-
update_site_option('backup_notification_option',1);
|
72 |
-
}
|
73 |
-
|
74 |
-
function file_eb_backup_interval($schedules){
|
75 |
-
$mo2f_cron_file_backup_hours = MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option')*3600;
|
76 |
-
$schedules['file_eb_backup_time'] = array(
|
77 |
-
'interval' => $mo2f_cron_file_backup_hours,
|
78 |
-
'display' => esc_html__( 'Cron Activated' ),
|
79 |
-
);
|
80 |
-
return $schedules;
|
81 |
-
}
|
82 |
-
|
83 |
-
function file_backup_deactivate(){
|
84 |
-
$timestamp = wp_next_scheduled( 'mo_eb_file_cron_hook' );
|
85 |
-
wp_unschedule_event( $timestamp, 'mo_eb_file_cron_hook' );
|
86 |
-
}
|
87 |
-
|
88 |
-
function plugin_backup($backup_store_path, $time){
|
89 |
-
global $wpnsDbQueries;
|
90 |
-
$this->mkdirectory('plugins');
|
91 |
-
$real_path= WP_PLUGIN_DIR;
|
92 |
-
$backup_path =$backup_store_path.'miniorangebackup'.DIRECTORY_SEPARATOR.'file-backups'.DIRECTORY_SEPARATOR.'plugins';
|
93 |
-
$filename = 'miniorange-plugins-backup-'.$time.'.zip';
|
94 |
-
$this->file_backup($real_path,$filename,'plugins');
|
95 |
-
$wpnsDbQueries->insert_backup_detail(MoWpnsConstants::PLUGIN,$filename,$time,$backup_path);
|
96 |
-
}
|
97 |
-
|
98 |
-
function themes_backup($backup_store_path ,$time){
|
99 |
-
global $wpnsDbQueries;
|
100 |
-
$this->mkdirectory('themes');
|
101 |
-
$real_path= get_theme_root();
|
102 |
-
$backup_path =$backup_store_path.'miniorangebackup'.DIRECTORY_SEPARATOR.'file-backups'.DIRECTORY_SEPARATOR.'themes';
|
103 |
-
$filename = 'miniorange-themes-backup-'.$time.'.zip';
|
104 |
-
$this->file_backup($real_path,$filename,'themes');
|
105 |
-
$wpnsDbQueries->insert_backup_detail(MoWpnsConstants::THEMES,$filename,$time,$backup_path);
|
106 |
-
|
107 |
-
}
|
108 |
-
|
109 |
-
function wpfiles_backup($backup_store_path, $time){
|
110 |
-
global $wpnsDbQueries;
|
111 |
-
$this->mkdirectory('wp_files');
|
112 |
-
$homepath = get_home_path();
|
113 |
-
$real_path= $homepath;
|
114 |
-
$backup_path =$backup_store_path.'miniorangebackup'.DIRECTORY_SEPARATOR.'file-backups'.DIRECTORY_SEPARATOR.'wp_files';
|
115 |
-
$filename = 'miniorange-wpfiles-backup-'.$time.'.zip';
|
116 |
-
$this->file_backup($real_path,$filename, 'wp_files');
|
117 |
-
$wpnsDbQueries->insert_backup_detail(MoWpnsConstants::WPFILES,$filename,$time,$backup_path);
|
118 |
-
}
|
119 |
-
|
120 |
-
function mkdirectory($foldername){
|
121 |
-
|
122 |
-
$homepath = wp_upload_dir();
|
123 |
-
$homepath = $homepath['basedir'].DIRECTORY_SEPARATOR;
|
124 |
-
if(!is_writable($homepath)){
|
125 |
-
wp_send_json('not_writable');
|
126 |
-
return;
|
127 |
-
}
|
128 |
-
|
129 |
-
|
130 |
-
$basepath = $homepath;
|
131 |
-
if(!file_exists($basepath."miniorangebackup")){
|
132 |
-
mkdir($basepath."miniorangebackup");
|
133 |
-
}
|
134 |
-
|
135 |
-
$basepath = $homepath.'miniorangebackup'.DIRECTORY_SEPARATOR;
|
136 |
-
$this-> create_index_file($basepath);
|
137 |
-
|
138 |
-
if(!file_exists($basepath.'file-backups')){
|
139 |
-
mkdir($basepath.'file-backups');
|
140 |
-
}
|
141 |
-
|
142 |
-
$basepath = $homepath.'miniorangebackup'.DIRECTORY_SEPARATOR.'file-backups'.DIRECTORY_SEPARATOR;
|
143 |
-
if(!file_exists($basepath.$foldername)){
|
144 |
-
mkdir($basepath.$foldername);
|
145 |
-
}
|
146 |
-
|
147 |
-
}
|
148 |
-
|
149 |
-
function create_index_file($folder_path){
|
150 |
-
|
151 |
-
$html_path=$folder_path."index.html";
|
152 |
-
$htaccess_path= $folder_path.".htaccess";
|
153 |
-
|
154 |
-
if(!file_exists($html_path)){
|
155 |
-
$f = fopen($html_path, "a");
|
156 |
-
fwrite($f, '<html><body><a href="https://security.miniorange.com/" target="_blank">WordPress backups by miniorange</a></body></html>');
|
157 |
-
fclose($f);
|
158 |
-
}
|
159 |
-
if(!file_exists($htaccess_path)){
|
160 |
-
$f = fopen($htaccess_path, "a");
|
161 |
-
fwrite($f, "deny from all");
|
162 |
-
fclose($f);
|
163 |
-
}
|
164 |
-
}
|
165 |
-
|
166 |
-
|
167 |
-
function file_backup($real_path, $filename, $foldername){
|
168 |
-
ini_set('max_execution_time', 0);
|
169 |
-
$backup_store_path = wp_upload_dir();
|
170 |
-
$backup_store_path = $backup_store_path['basedir'].DIRECTORY_SEPARATOR.'miniorangebackup'.DIRECTORY_SEPARATOR.'file-backups'.DIRECTORY_SEPARATOR;
|
171 |
-
$rootPath = realpath($real_path);
|
172 |
-
$zip = new ZipArchive();
|
173 |
-
$res = $zip->open($backup_store_path.$foldername.DIRECTORY_SEPARATOR.$filename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
174 |
-
|
175 |
-
$files = new RecursiveIteratorIterator(
|
176 |
-
new RecursiveDirectoryIterator($rootPath),
|
177 |
-
RecursiveIteratorIterator::LEAVES_ONLY
|
178 |
-
);
|
179 |
-
foreach ($files as $name => $file)
|
180 |
-
{
|
181 |
-
if (!$file->isDir())
|
182 |
-
{
|
183 |
-
$filePath = $file->getRealPath();
|
184 |
-
$relativePath = substr($filePath, strlen($rootPath) + 1);
|
185 |
-
if(strpos($relativePath, 'miniorangebackup')!== false ){}
|
186 |
-
else{
|
187 |
-
$zip->addFile($filePath, $relativePath);
|
188 |
-
}
|
189 |
-
}
|
190 |
-
}
|
191 |
-
$zip->close();
|
192 |
-
}
|
193 |
-
|
194 |
-
|
195 |
-
function backupDB(){
|
196 |
-
|
197 |
-
if ( function_exists('memory_get_usage') && ( (int) ini_get('memory_limit') < 128 ) ){
|
198 |
-
ini_set('memory_limit', '128M' );
|
199 |
-
do_action('mo_eb_show_message',MoBackupMessages::showMessage('DB_MEMORY_LIMIT'),'SUCCESS');
|
200 |
-
}
|
201 |
-
|
202 |
-
$backup_store_path = wp_upload_dir();
|
203 |
-
$backup_store_path = $backup_store_path['basedir'].DIRECTORY_SEPARATOR;
|
204 |
-
|
205 |
-
if(!is_writable($backup_store_path)){
|
206 |
-
wp_send_json('not_writable');
|
207 |
-
return;
|
208 |
-
}
|
209 |
-
global $wpdb;
|
210 |
-
$tables = $wpdb->get_results("SHOW TABLES", ARRAY_N);
|
211 |
-
$nooftables = count($tables);
|
212 |
-
$query = "";
|
213 |
-
$tableswithfk = array();
|
214 |
-
$tableswithoutfk= array();
|
215 |
-
|
216 |
-
foreach($tables as $table)
|
217 |
-
{
|
218 |
-
if(is_array($table))
|
219 |
-
$table = $table[0];
|
220 |
-
$createtable = $wpdb->get_results("SHOW CREATE TABLE $table", ARRAY_A);
|
221 |
-
if(!empty($createtable[0]))
|
222 |
-
{
|
223 |
-
$createquery = $createtable[0]['Create Table'];
|
224 |
-
if (strpos($createquery, 'FOREIGN KEY') !== false)
|
225 |
-
array_push($tableswithfk,$table);
|
226 |
-
else
|
227 |
-
array_push($tableswithoutfk, $table);
|
228 |
-
}
|
229 |
-
}
|
230 |
-
|
231 |
-
$query .= $this->get_table_query($query,$tableswithoutfk);
|
232 |
-
|
233 |
-
$query .= $this->get_table_query($query,$tableswithfk);
|
234 |
-
|
235 |
-
$fileName = $this->create_db_backup_file($query);
|
236 |
-
wp_send_json('created_backup');
|
237 |
-
}
|
238 |
-
|
239 |
-
function get_table_query($query,$tables)
|
240 |
-
{
|
241 |
-
|
242 |
-
global $wpdb;
|
243 |
-
foreach($tables as $table)
|
244 |
-
{
|
245 |
-
$createtable = $wpdb->get_results("SHOW CREATE TABLE $table", ARRAY_A);
|
246 |
-
if(!empty($createtable[0]))
|
247 |
-
{
|
248 |
-
$createquery = $createtable[0]['Create Table'];
|
249 |
-
$query .= 'DROP TABLE IF EXISTS '.$table.";\n";
|
250 |
-
$query .= $createquery.";\n\n";
|
251 |
-
$data = $wpdb->get_results("SELECT * FROM $table", ARRAY_A);
|
252 |
-
foreach($data as $record)
|
253 |
-
{
|
254 |
-
if(count($record)>0)
|
255 |
-
{
|
256 |
-
$query.= 'INSERT INTO '.$table.' VALUES(';
|
257 |
-
$i=0;
|
258 |
-
foreach($record as $key=>$value)
|
259 |
-
{
|
260 |
-
$value = addslashes($value);
|
261 |
-
if (isset($value))
|
262 |
-
$query.= '"'.$value.'"' ;
|
263 |
-
else
|
264 |
-
$query.= '""';
|
265 |
-
if ($i < (count($record)-1)) { $query.= ','; }
|
266 |
-
$i++;
|
267 |
-
}
|
268 |
-
$query.= ");\n";
|
269 |
-
}
|
270 |
-
}
|
271 |
-
$query.="\n\n";
|
272 |
-
}
|
273 |
-
}
|
274 |
-
return $query;
|
275 |
-
}
|
276 |
-
|
277 |
-
function create_db_backup_file($data)
|
278 |
-
{
|
279 |
-
|
280 |
-
global $wpnsDbQueries;
|
281 |
-
$time = time();
|
282 |
-
$backup_store_path = wp_upload_dir();
|
283 |
-
$backup_store_path = $backup_store_path['basedir'].DIRECTORY_SEPARATOR;
|
284 |
-
if(!file_exists($backup_store_path."miniorangebackup")){
|
285 |
-
mkdir($backup_store_path."miniorangebackup");
|
286 |
-
}
|
287 |
-
$basepath = $backup_store_path.'miniorangebackup'.DIRECTORY_SEPARATOR;
|
288 |
-
$handler_obj = new MoBackupSite;
|
289 |
-
$handler_obj->create_index_file($basepath);
|
290 |
-
if(!file_exists($basepath.'db-backups')){
|
291 |
-
mkdir($basepath.'db-backups');
|
292 |
-
}
|
293 |
-
|
294 |
-
$backup_path = $basepath.'db-backups';
|
295 |
-
$filename = 'miniorange-db-backup-'.$time.'.sql';
|
296 |
-
$basepath = $basepath.'db-backups';
|
297 |
-
$handle = fopen($basepath.DIRECTORY_SEPARATOR.$filename,'w+');
|
298 |
-
fwrite($handle,$data);
|
299 |
-
fclose($handle);
|
300 |
-
$filezipname = $this->barfw_create_database_backup_zip_file($filename,$time);
|
301 |
-
$zip_path = $basepath.DIRECTORY_SEPARATOR.$filename;
|
302 |
-
unlink($zip_path);
|
303 |
-
$wpnsDbQueries->insert_backup_detail(MoWpnsConstants::DATABASE,$filezipname,$time,$backup_path);
|
304 |
-
return $filename;
|
305 |
-
}
|
306 |
-
|
307 |
-
function barfw_create_database_backup_zip_file($filename,$time){
|
308 |
-
$backup_store_path = wp_upload_dir();
|
309 |
-
$backup_store_path = $backup_store_path['basedir'].DIRECTORY_SEPARATOR.'miniorangebackup'.DIRECTORY_SEPARATOR.'db-backups'.DIRECTORY_SEPARATOR;
|
310 |
-
|
311 |
-
$filezipname = 'miniorange-db-backup-'.$time.'.zip';
|
312 |
-
$zip = new ZipArchive();
|
313 |
-
$res = $zip->open($backup_store_path.DIRECTORY_SEPARATOR.$filezipname, ZipArchive::CREATE | ZipArchive::OVERWRITE);
|
314 |
-
$filePath = $backup_store_path.$filename;
|
315 |
-
$relativePath = $filename;
|
316 |
-
$zip->addFile($filePath, $relativePath);
|
317 |
-
|
318 |
-
$zip->close();
|
319 |
-
return $filezipname;
|
320 |
-
}
|
321 |
-
|
322 |
-
}new MoBackupSite;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
handler/mo-waf-plugin.php
CHANGED
@@ -1,9 +1,5 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
function mo2f_isValidIP($IP){
|
4 |
-
return filter_var($IP, FILTER_VALIDATE_IP) !== false;
|
5 |
-
}
|
6 |
-
|
7 |
$dir =dirname(__FILE__);
|
8 |
$dir = str_replace('\\', "/", $dir);
|
9 |
$sqlInjectionFile = $dir.'/signature/APSQLI.php';
|
@@ -27,32 +23,14 @@
|
|
27 |
include_once($lfiFile);
|
28 |
|
29 |
|
30 |
-
global $wpdb;
|
31 |
-
$ipaddress =
|
32 |
-
|
33 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_CLIENT_IP']);
|
34 |
-
elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && mo2f_isValidIP($_SERVER['HTTP_X_FORWARDED_FOR']))
|
35 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_X_FORWARDED_FOR']);
|
36 |
-
elseif(isset($_SERVER['HTTP_X_FORWARDED']) && mo2f_isValidIP($_SERVER['HTTP_X_FORWARDED']))
|
37 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_X_FORWARDED']);
|
38 |
-
elseif(isset($_SERVER['HTTP_FORWARDED_FOR']) && mo2f_isValidIP($_SERVER['HTTP_FORWARDED_FOR']))
|
39 |
-
{
|
40 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_FORWARDED_FOR']);
|
41 |
-
$ipaddress = explode(",", $ipaddress)[0];
|
42 |
-
}
|
43 |
-
elseif(isset($_SERVER['HTTP_FORWARDED']) && mo2f_isValidIP($_SERVER['HTTP_FORWARDED']))
|
44 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_FORWARDED']);
|
45 |
-
elseif(isset($_SERVER['REMOTE_ADDR']) && mo2f_isValidIP($_SERVER['REMOTE_ADDR']))
|
46 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['REMOTE_ADDR']);
|
47 |
-
else
|
48 |
-
$ipaddress = 'UNKNOWN';
|
49 |
-
|
50 |
-
$query = 'select * from '.$wpdb->base_prefix.'mo2f_network_blocked_ips where ip_address="'.$ipaddress.'";';
|
51 |
$results = $wpdb->get_results($query);
|
52 |
|
53 |
if(sizeof($results)!=0)
|
54 |
{
|
55 |
-
$query = 'select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="
|
56 |
$results1 = $wpdb->get_results($query);
|
57 |
if(sizeof($results1)!=0)
|
58 |
{
|
@@ -105,13 +83,13 @@
|
|
105 |
$time = 60;
|
106 |
$reqLimit = $RequestsPMin;
|
107 |
|
108 |
-
$query = "delete from ".$wpdb->base_prefix."wpns_ip_rate_details where time<"
|
109 |
$results = $wpdb->get_results($query);
|
110 |
|
111 |
-
$query = "insert into ".$wpdb->base_prefix."wpns_ip_rate_details values('"
|
112 |
$results = $wpdb->get_results($query);
|
113 |
|
114 |
-
$query = "select count(*) as count from ".$wpdb->base_prefix."wpns_ip_rate_details where ip='
|
115 |
$results = $wpdb->get_results($query);
|
116 |
|
117 |
if($results[0]->count>=$reqLimit)
|
@@ -119,12 +97,12 @@
|
|
119 |
$action = $actionRateL;
|
120 |
if($action == 'ThrottleIP')
|
121 |
{
|
122 |
-
$query = "select time from ".$wpdb->base_prefix."wpns_attack_logs where ip ='
|
123 |
$results = $wpdb->get_results($query);
|
124 |
$current_time = time();
|
125 |
if($results[0]->time < $current_time-60)
|
126 |
{
|
127 |
-
$query = "insert into ".$wpdb->base_prefix."wpns_attack_logs values('
|
128 |
$results = $wpdb->get_results($query);
|
129 |
}
|
130 |
header('HTTP/1.1 403 Forbidden');
|
@@ -133,15 +111,15 @@
|
|
133 |
}
|
134 |
else
|
135 |
{
|
136 |
-
$query = "select time from ".$wpdb->base_prefix."wpns_attack_logs where ip ='
|
137 |
$results = $wpdb->get_results($query);
|
138 |
$current_time = time();
|
139 |
if($results[0]->time < $current_time-60)
|
140 |
{
|
141 |
-
$query = "insert into ".$wpdb->base_prefix."wpns_attack_logs values('
|
142 |
$results = $wpdb->get_results($query);
|
143 |
}
|
144 |
-
$query = 'select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="
|
145 |
$results1 = $wpdb->get_results($query);
|
146 |
if(sizeof($results1)!=0)
|
147 |
{
|
@@ -149,7 +127,7 @@
|
|
149 |
}
|
150 |
else
|
151 |
{
|
152 |
-
$query ="insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'
|
153 |
$results =$wpdb->get_results($query);
|
154 |
}
|
155 |
header('HTTP/1.1 403 Forbidden');
|
@@ -234,13 +212,13 @@
|
|
234 |
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
235 |
{
|
236 |
$value = htmlspecialchars($value);
|
237 |
-
$query = 'insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("
|
238 |
$results = $wpdb->get_results($query);
|
239 |
-
$query = "select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='
|
240 |
$results = $wpdb->get_results($query);
|
241 |
if($results[0]->count>$limitAttack)
|
242 |
{
|
243 |
-
$query = 'select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="
|
244 |
$results = $wpdb->get_results($query);
|
245 |
if(sizeof($results)!=0)
|
246 |
{
|
@@ -248,7 +226,7 @@
|
|
248 |
}
|
249 |
else
|
250 |
{
|
251 |
-
$query ="insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'
|
252 |
$results =$wpdb->get_results($query);
|
253 |
}
|
254 |
}
|
@@ -303,14 +281,14 @@
|
|
303 |
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
304 |
{
|
305 |
$value = htmlspecialchars($value);
|
306 |
-
$query = 'insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("
|
307 |
$results = $wpdb->get_results($query);
|
308 |
-
$query = "select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='
|
309 |
$results = $wpdb->get_results($query);
|
310 |
|
311 |
if($results[0]->count>$limitAttack)
|
312 |
{
|
313 |
-
$query = 'select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="
|
314 |
$results = $wpdb->get_results($query);
|
315 |
if(sizeof($results)!=0)
|
316 |
{
|
@@ -318,7 +296,7 @@
|
|
318 |
}
|
319 |
else
|
320 |
{
|
321 |
-
$query
|
322 |
$results =$wpdb->get_results($query);
|
323 |
}
|
324 |
}
|
@@ -373,14 +351,14 @@
|
|
373 |
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
374 |
{
|
375 |
$value = htmlspecialchars($value);
|
376 |
-
$query = 'insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("
|
377 |
$results = $wpdb->get_results($query);
|
378 |
-
$query = "select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='
|
379 |
$results = $wpdb->get_results($query);
|
380 |
|
381 |
if($results[0]->count>$limitAttack)
|
382 |
{
|
383 |
-
$query = 'select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="
|
384 |
$results = $wpdb->get_results($query);
|
385 |
if(sizeof($results)!=0)
|
386 |
{
|
@@ -388,7 +366,7 @@
|
|
388 |
}
|
389 |
else
|
390 |
{
|
391 |
-
$query ="insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'
|
392 |
$results =$wpdb->get_results($query);
|
393 |
}
|
394 |
}
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
3 |
$dir =dirname(__FILE__);
|
4 |
$dir = str_replace('\\', "/", $dir);
|
5 |
$sqlInjectionFile = $dir.'/signature/APSQLI.php';
|
23 |
include_once($lfiFile);
|
24 |
|
25 |
|
26 |
+
global $wpdb,$moWpnsUtility;
|
27 |
+
$ipaddress = $moWpnsUtility->get_client_ip();
|
28 |
+
$query = $wpdb->prepare('select * from '.$wpdb->base_prefix.'mo2f_network_blocked_ips where ip_address="%s";',array($ipaddress));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
$results = $wpdb->get_results($query);
|
30 |
|
31 |
if(sizeof($results)!=0)
|
32 |
{
|
33 |
+
$query = $wpdb->prepare('select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="%s";',array($ipaddress));
|
34 |
$results1 = $wpdb->get_results($query);
|
35 |
if(sizeof($results1)!=0)
|
36 |
{
|
83 |
$time = 60;
|
84 |
$reqLimit = $RequestsPMin;
|
85 |
|
86 |
+
$query = $wpdb->prepare("delete from ".$wpdb->base_prefix."wpns_ip_rate_details where time< %d",array((time()-$time)));
|
87 |
$results = $wpdb->get_results($query);
|
88 |
|
89 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."wpns_ip_rate_details values('%s',%d);",array($ipaddress,time()));
|
90 |
$results = $wpdb->get_results($query);
|
91 |
|
92 |
+
$query = $wpdb->prepare("select count(*) as count from ".$wpdb->base_prefix."wpns_ip_rate_details where ip='%s';",array($ipaddress));
|
93 |
$results = $wpdb->get_results($query);
|
94 |
|
95 |
if($results[0]->count>=$reqLimit)
|
97 |
$action = $actionRateL;
|
98 |
if($action == 'ThrottleIP')
|
99 |
{
|
100 |
+
$query = $wpdb->prepare("select time from ".$wpdb->base_prefix."wpns_attack_logs where ip ='%s' ORDER BY time DESC LIMIT 1;",array($ipaddress));
|
101 |
$results = $wpdb->get_results($query);
|
102 |
$current_time = time();
|
103 |
if($results[0]->time < $current_time-60)
|
104 |
{
|
105 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."wpns_attack_logs values('%s','Rate Limit',%d,'".MoWpnsConstants::RATE_LIMIT_EXCEEDED."');",array($ipaddress,time()));
|
106 |
$results = $wpdb->get_results($query);
|
107 |
}
|
108 |
header('HTTP/1.1 403 Forbidden');
|
111 |
}
|
112 |
else
|
113 |
{
|
114 |
+
$query = $wpdb->prepare("select time from ".$wpdb->base_prefix."wpns_attack_logs where ip ='%s' ORDER BY time DESC LIMIT 1;",array($ipaddress));
|
115 |
$results = $wpdb->get_results($query);
|
116 |
$current_time = time();
|
117 |
if($results[0]->time < $current_time-60)
|
118 |
{
|
119 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."wpns_attack_logs values('%s','Rate Limit',%d,'".MoWpnsConstants::RATE_LIMIT_EXCEEDED."');",array($ipaddress,time()));
|
120 |
$results = $wpdb->get_results($query);
|
121 |
}
|
122 |
+
$query = $wpdb->prepare('select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="%s";',array($ipaddress));
|
123 |
$results1 = $wpdb->get_results($query);
|
124 |
if(sizeof($results1)!=0)
|
125 |
{
|
127 |
}
|
128 |
else
|
129 |
{
|
130 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'%s','Rate limit exceed',NULL,".current_time( 'timestamp' ).");",array($ipaddress));
|
131 |
$results =$wpdb->get_results($query);
|
132 |
}
|
133 |
header('HTTP/1.1 403 Forbidden');
|
212 |
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
213 |
{
|
214 |
$value = htmlspecialchars($value);
|
215 |
+
$query = $wpdb->prepare('insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("%s","%s",%d,"%s");',array($ipaddress,$value1,time(),$value));
|
216 |
$results = $wpdb->get_results($query);
|
217 |
+
$query = $wpdb->prepare("select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='%s' and input != '".MoWpnsConstants::RATE_LIMIT_EXCEEDED."';",array($ipaddress));
|
218 |
$results = $wpdb->get_results($query);
|
219 |
if($results[0]->count>$limitAttack)
|
220 |
{
|
221 |
+
$query = $wpdb->prepare('select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="%s";',array($ipaddress));
|
222 |
$results = $wpdb->get_results($query);
|
223 |
if(sizeof($results)!=0)
|
224 |
{
|
226 |
}
|
227 |
else
|
228 |
{
|
229 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'%s','attack limit exceed',NULL,%d);",array($ipaddress,current_time('timestamp')));
|
230 |
$results =$wpdb->get_results($query);
|
231 |
}
|
232 |
}
|
281 |
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
282 |
{
|
283 |
$value = htmlspecialchars($value);
|
284 |
+
$query = $wpdb->prepare('insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("%s","%s",%d,"%s");',array($ipaddress,$value1,time(),$value));
|
285 |
$results = $wpdb->get_results($query);
|
286 |
+
$query = $wpdb->prepare("select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='%s' and input != '".MoWpnsConstants::RATE_LIMIT_EXCEEDED."';",array($ipaddress));
|
287 |
$results = $wpdb->get_results($query);
|
288 |
|
289 |
if($results[0]->count>$limitAttack)
|
290 |
{
|
291 |
+
$query = $wpdb->prepare('select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="%s";',array($ipaddress));
|
292 |
$results = $wpdb->get_results($query);
|
293 |
if(sizeof($results)!=0)
|
294 |
{
|
296 |
}
|
297 |
else
|
298 |
{
|
299 |
+
$query =$wpdb->prepare("insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'%s','attack limit exceed',NULL,%d);",array($ipaddress,current_time( 'timestamp' )));
|
300 |
$results =$wpdb->get_results($query);
|
301 |
}
|
302 |
}
|
351 |
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
352 |
{
|
353 |
$value = htmlspecialchars($value);
|
354 |
+
$query = $wpdb->prepare('insert into '.$wpdb->base_prefix.'wpns_attack_logs values ("%s","%s",%d,"%s");',array($ipaddress,$value1,time(),$value));
|
355 |
$results = $wpdb->get_results($query);
|
356 |
+
$query = $wpdb->prepare("select count(*) as count from ".$wpdb->base_prefix."wpns_attack_logs where ip='%s' and input != '".MoWpnsConstants::RATE_LIMIT_EXCEEDED."';",array($ipaddress));
|
357 |
$results = $wpdb->get_results($query);
|
358 |
|
359 |
if($results[0]->count>$limitAttack)
|
360 |
{
|
361 |
+
$query = $wpdb->prepare('select * from '.$wpdb->base_prefix.'mo2f_network_whitelisted_ips where ip_address="%s";',$ipaddress);
|
362 |
$results = $wpdb->get_results($query);
|
363 |
if(sizeof($results)!=0)
|
364 |
{
|
366 |
}
|
367 |
else
|
368 |
{
|
369 |
+
$query = $wpdb->prepare("insert into ".$wpdb->base_prefix."mo2f_network_blocked_ips values(NULL,'%s','attack limit exceed',NULL,%d);",array($ipaddress,current_time( 'timestamp' )));
|
370 |
$results =$wpdb->get_results($query);
|
371 |
}
|
372 |
}
|
handler/mo-waf.php
CHANGED
@@ -1,9 +1,5 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
function mo2f_isValidIP($IP){
|
4 |
-
return filter_var($IP, FILTER_VALIDATE_IP) !== false;
|
5 |
-
}
|
6 |
-
|
7 |
$dir =dirname(__FILE__);
|
8 |
$dir = str_replace('\\', "/", $dir);
|
9 |
$sqlInjectionFile = $dir.'/signature/APSQLI.php';
|
@@ -102,27 +98,8 @@
|
|
102 |
$results1 = mysqli_query($dbcon,$query);
|
103 |
$row = mysqli_fetch_array($results1);
|
104 |
if(isset($row['option_value']) && $row['option_value']=='HtaccessLevel'){
|
105 |
-
$
|
106 |
-
|
107 |
-
if (isset($_SERVER['HTTP_CLIENT_IP']) && mo2f_isValidIP($_SERVER['HTTP_CLIENT_IP']))
|
108 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_CLIENT_IP']);
|
109 |
-
elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && mo2f_isValidIP($_SERVER['HTTP_X_FORWARDED_FOR']))
|
110 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_X_FORWARDED_FOR']);
|
111 |
-
elseif(isset($_SERVER['HTTP_X_FORWARDED']) && mo2f_isValidIP($_SERVER['HTTP_X_FORWARDED']))
|
112 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_X_FORWARDED']);
|
113 |
-
elseif(isset($_SERVER['HTTP_FORWARDED_FOR']) && mo2f_isValidIP($_SERVER['HTTP_FORWARDED_FOR']))
|
114 |
-
{
|
115 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_FORWARDED_FOR']);
|
116 |
-
$ipaddress = explode(",", $ipaddress)[0];
|
117 |
-
}
|
118 |
-
elseif(isset($_SERVER['HTTP_FORWARDED']) && mo2f_isValidIP($_SERVER['HTTP_FORWARDED']))
|
119 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['HTTP_FORWARDED']);
|
120 |
-
elseif(isset($_SERVER['REMOTE_ADDR']) && mo2f_isValidIP($_SERVER['REMOTE_ADDR']))
|
121 |
-
$ipaddress = filter_input(INPUT_SERVER,$_SERVER['REMOTE_ADDR']);
|
122 |
-
else
|
123 |
-
$ipaddress = 'UNKNOWN';
|
124 |
-
|
125 |
-
|
126 |
$ipaddress = filter_var($ipaddress, FILTER_VALIDATE_IP) ? $ipaddress : 'UNKNOWN';
|
127 |
|
128 |
$query = 'select * from '.$prefix.'mo2f_network_blocked_ips where ip_address="'.$ipaddress.'";';
|
1 |
<?php
|
2 |
|
|
|
|
|
|
|
|
|
3 |
$dir =dirname(__FILE__);
|
4 |
$dir = str_replace('\\', "/", $dir);
|
5 |
$sqlInjectionFile = $dir.'/signature/APSQLI.php';
|
98 |
$results1 = mysqli_query($dbcon,$query);
|
99 |
$row = mysqli_fetch_array($results1);
|
100 |
if(isset($row['option_value']) && $row['option_value']=='HtaccessLevel'){
|
101 |
+
global $wpdb,$moWpnsUtility;
|
102 |
+
$ipaddress = $moWpnsUtility->get_client_ip();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
$ipaddress = filter_var($ipaddress, FILTER_VALIDATE_IP) ? $ipaddress : 'UNKNOWN';
|
104 |
|
105 |
$query = 'select * from '.$prefix.'mo2f_network_blocked_ips where ip_address="'.$ipaddress.'";';
|
handler/twofa/encryption.php
CHANGED
@@ -33,12 +33,8 @@ class mo2f_GAuth_AESEncryption {
|
|
33 |
$c = base64_decode($data);
|
34 |
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
|
35 |
$iv = substr($c, 0, $ivlen);
|
36 |
-
$
|
37 |
-
$ciphertext_raw = substr($c, $ivlen+$sha2len);
|
38 |
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
|
39 |
-
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
|
40 |
-
|
41 |
-
|
42 |
return $original_plaintext;
|
43 |
}
|
44 |
|
33 |
$c = base64_decode($data);
|
34 |
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
|
35 |
$iv = substr($c, 0, $ivlen);
|
36 |
+
$ciphertext_raw = substr($c, $ivlen+32);
|
|
|
37 |
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
|
|
|
|
|
|
|
38 |
return $original_plaintext;
|
39 |
}
|
40 |
|
handler/twofa/gaonprem.php
CHANGED
@@ -62,7 +62,7 @@ class Google_auth_onpremise{
|
|
62 |
$randomString = '';
|
63 |
$charactersLength = strlen($keyspace);
|
64 |
for ($i = 0; $i < $length; $i++) {
|
65 |
-
$randomString .= $keyspace[
|
66 |
}
|
67 |
return $randomString;
|
68 |
|
62 |
$randomString = '';
|
63 |
$charactersLength = strlen($keyspace);
|
64 |
for ($i = 0; $i < $length; $i++) {
|
65 |
+
$randomString .= $keyspace[random_int(0, $charactersLength - 1)];
|
66 |
}
|
67 |
return $randomString;
|
68 |
|
handler/twofa/setup_twofa.php
CHANGED
@@ -637,7 +637,7 @@ function mo2f_update_and_sync_user_two_factor( $user_id, $userinfo ) {
|
|
637 |
if ( $mo2f_second_factor == 'OUT OF BAND EMAIL' ) {
|
638 |
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_EmailVerification_config_status' => true ) );
|
639 |
} else if ( $mo2f_second_factor == 'SMS' and !MO2F_IS_ONPREM) {
|
640 |
-
$phone_num = $userinfo['phone'];
|
641 |
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_OTPOverSMS_config_status' => true ) );
|
642 |
$_SESSION['user_phone'] = $phone_num;
|
643 |
} else if ( in_array( $mo2f_second_factor, array(
|
637 |
if ( $mo2f_second_factor == 'OUT OF BAND EMAIL' ) {
|
638 |
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_EmailVerification_config_status' => true ) );
|
639 |
} else if ( $mo2f_second_factor == 'SMS' and !MO2F_IS_ONPREM) {
|
640 |
+
$phone_num = isset($userinfo['phone'])?sanitize_text_field($userinfo['phone']):'';
|
641 |
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_OTPOverSMS_config_status' => true ) );
|
642 |
$_SESSION['user_phone'] = $phone_num;
|
643 |
} else if ( in_array( $mo2f_second_factor, array(
|
handler/twofa/two_fa_pass2login.php
CHANGED
@@ -116,10 +116,7 @@ class Miniorange_Password_2Factor_Login {
|
|
116 |
$codes=explode(",", $backups);
|
117 |
$session_id = sanitize_text_field($_POST['session_id']);
|
118 |
$id = $this->mo2f_userID ? $this->mo2f_userID : MO2f_Utility::mo2f_get_transient($session_id, 'mo2f_current_user_id');
|
119 |
-
|
120 |
-
|
121 |
-
update_user_meta($id, 'mo_backup_code_downloaded', 1);
|
122 |
-
delete_user_meta($id, 'chqwetcsdvnvd');
|
123 |
MO2f_Utility::mo2f_download_backup_codes($id, $codes);
|
124 |
}
|
125 |
}
|
@@ -215,6 +212,10 @@ class Miniorange_Password_2Factor_Login {
|
|
215 |
$mo2fa_login_message = __('Backup code has not generated for you.','miniorange-2-factor-authentication');
|
216 |
$mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_BACKUP';
|
217 |
$this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to, null, $session_id_encrypt);
|
|
|
|
|
|
|
|
|
218 |
}else if($data == 'DBConnectionerror'){
|
219 |
$mo2fa_login_message = __('Error occurred while establising connection.','miniorange-2-factor-authentication');
|
220 |
$mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_BACKUP';
|
@@ -295,19 +296,6 @@ class Miniorange_Password_2Factor_Login {
|
|
295 |
$this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to, null ,$session_id);
|
296 |
}
|
297 |
$codes = explode(' ', $codes);
|
298 |
-
$codes_hash=MO2f_Utility::mo2f_get_codes_hash($codes);
|
299 |
-
$str1="";
|
300 |
-
for ($x = 0; $x < sizeof($codes); $x++) {
|
301 |
-
$str = $codes[$x];
|
302 |
-
$str1.=$str;
|
303 |
-
if($x != 4){
|
304 |
-
$str1.=',';
|
305 |
-
}
|
306 |
-
}
|
307 |
-
|
308 |
-
$key = get_option( 'mo2f_encryption_key' );
|
309 |
-
$codes_encrypt = MO2f_Utility::encrypt_data($str1, $key);
|
310 |
-
update_user_meta($id,'chqwetcsdvnvd', $codes_encrypt);
|
311 |
|
312 |
$mo2f_user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $id );
|
313 |
if(empty($mo2f_user_email)){
|
@@ -315,12 +303,13 @@ class Miniorange_Password_2Factor_Login {
|
|
315 |
$mo2f_user_email = $currentuser->user_email;
|
316 |
}
|
317 |
$result = MO2f_Utility::mo2f_email_backup_codes($codes, $mo2f_user_email);
|
|
|
318 |
if($result){
|
319 |
$mo2fa_login_message = "An email containing the backup codes has been sent. Please click on Use backup codes to login using the backup codes.";
|
320 |
-
|
321 |
}else{
|
322 |
$mo2fa_login_message = " If you haven\'t configured SMTP, please set your SMTP to get the backup codes on email.";
|
323 |
-
update_user_meta($id, 'mo_backup_code_generated',
|
324 |
}
|
325 |
|
326 |
$mo2fa_login_status = sanitize_text_field($_POST['login_status']);
|
@@ -2422,7 +2411,8 @@ function check_miniorange_duo_push_validation_failed($POSTED){
|
|
2422 |
MO2f_Utility::unset_cookie_variables( $cookie_variables );
|
2423 |
$key = get_option( 'mo2f_encryption_key' );
|
2424 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
2425 |
-
$
|
|
|
2426 |
|
2427 |
'mo2f_current_user_id' => '',
|
2428 |
'mo2f_login_message' => '',
|
@@ -2609,9 +2599,8 @@ function check_miniorange_duo_push_validation_failed($POSTED){
|
|
2609 |
break;
|
2610 |
|
2611 |
case 'MO_2_FACTOR_GENERATE_BACKUP_CODES':
|
2612 |
-
$current_user_id = $this->mo2f_userID ? $this->mo2f_userID : MO2f_Utility::mo2f_get_transient( $session_id_encrypt, 'mo2f_current_user_id' );
|
2613 |
|
2614 |
-
mo2f_backup_codes_generate($
|
2615 |
exit;
|
2616 |
|
2617 |
case 'MO_2_FACTOR_CHALLENGE_BACKUP':
|
@@ -3099,9 +3088,10 @@ function check_miniorange_duo_push_validation_failed($POSTED){
|
|
3099 |
function create_session(){
|
3100 |
global $Mo2fdbQueries;
|
3101 |
$session_id = MO2f_Utility::random_str(20);
|
3102 |
-
|
3103 |
-
|
3104 |
-
|
|
|
3105 |
return $session_id_encrypt;
|
3106 |
}
|
3107 |
|
116 |
$codes=explode(",", $backups);
|
117 |
$session_id = sanitize_text_field($_POST['session_id']);
|
118 |
$id = $this->mo2f_userID ? $this->mo2f_userID : MO2f_Utility::mo2f_get_transient($session_id, 'mo2f_current_user_id');
|
119 |
+
|
|
|
|
|
|
|
120 |
MO2f_Utility::mo2f_download_backup_codes($id, $codes);
|
121 |
}
|
122 |
}
|
212 |
$mo2fa_login_message = __('Backup code has not generated for you.','miniorange-2-factor-authentication');
|
213 |
$mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_BACKUP';
|
214 |
$this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to, null, $session_id_encrypt);
|
215 |
+
}else if($data =='TokenNotFound'){
|
216 |
+
$mo2fa_login_message = __('Validation request authentication failed');
|
217 |
+
$mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_BACKUP';
|
218 |
+
$this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to, null, $session_id_encrypt);
|
219 |
}else if($data == 'DBConnectionerror'){
|
220 |
$mo2fa_login_message = __('Error occurred while establising connection.','miniorange-2-factor-authentication');
|
221 |
$mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_BACKUP';
|
296 |
$this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to, null ,$session_id);
|
297 |
}
|
298 |
$codes = explode(' ', $codes);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
|
300 |
$mo2f_user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $id );
|
301 |
if(empty($mo2f_user_email)){
|
303 |
$mo2f_user_email = $currentuser->user_email;
|
304 |
}
|
305 |
$result = MO2f_Utility::mo2f_email_backup_codes($codes, $mo2f_user_email);
|
306 |
+
|
307 |
if($result){
|
308 |
$mo2fa_login_message = "An email containing the backup codes has been sent. Please click on Use backup codes to login using the backup codes.";
|
309 |
+
update_user_meta($id, 'mo_backup_code_generated', 1);
|
310 |
}else{
|
311 |
$mo2fa_login_message = " If you haven\'t configured SMTP, please set your SMTP to get the backup codes on email.";
|
312 |
+
update_user_meta($id, 'mo_backup_code_generated', 0);
|
313 |
}
|
314 |
|
315 |
$mo2fa_login_status = sanitize_text_field($_POST['login_status']);
|
2411 |
MO2f_Utility::unset_cookie_variables( $cookie_variables );
|
2412 |
$key = get_option( 'mo2f_encryption_key' );
|
2413 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
2414 |
+
$session_id_hash = md5($session_id);
|
2415 |
+
$Mo2fdbQueries->save_user_login_details( $session_id_hash, array(
|
2416 |
|
2417 |
'mo2f_current_user_id' => '',
|
2418 |
'mo2f_login_message' => '',
|
2599 |
break;
|
2600 |
|
2601 |
case 'MO_2_FACTOR_GENERATE_BACKUP_CODES':
|
|
|
2602 |
|
2603 |
+
mo2f_backup_codes_generate($redirect_to, $session_id_encrypt);
|
2604 |
exit;
|
2605 |
|
2606 |
case 'MO_2_FACTOR_CHALLENGE_BACKUP':
|
3088 |
function create_session(){
|
3089 |
global $Mo2fdbQueries;
|
3090 |
$session_id = MO2f_Utility::random_str(20);
|
3091 |
+
$session_id_hash = md5($session_id);
|
3092 |
+
$Mo2fdbQueries->insert_user_login_session($session_id_hash);
|
3093 |
+
$key = get_option('mo2f_encryption_key');
|
3094 |
+
$session_id_encrypt = MO2f_Utility::encrypt_data($session_id, $key);
|
3095 |
return $session_id_encrypt;
|
3096 |
}
|
3097 |
|
handler/twofa/two_fa_settings.php
CHANGED
@@ -1351,51 +1351,6 @@ private function settings_error_page( $id = 'mo2f-setup-vue-site-settings', $foo
|
|
1351 |
wp_logout();
|
1352 |
wp_redirect(admin_url());
|
1353 |
}
|
1354 |
-
}else if(isset($_POST['option']) and sanitize_text_field($_POST['option']) == 'restart_plugin_tour'){
|
1355 |
-
$nonce = sanitize_text_field($_POST['_wpnonce']);
|
1356 |
-
if ( ! wp_verify_nonce( $nonce, 'restart_plugin_tour' ) ) {
|
1357 |
-
$error = new WP_Error();
|
1358 |
-
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
1359 |
-
return $error;
|
1360 |
-
} else {
|
1361 |
-
$page = isset($_POST['page'])? sanitize_text_field($_POST['page']) : '';
|
1362 |
-
$page = sanitize_text_field($page);
|
1363 |
-
update_option('mo2f_two_factor_tour',0);
|
1364 |
-
update_option('mo2f_tour_firewall',0);
|
1365 |
-
update_option('mo2f_tour_loginSpam',0);
|
1366 |
-
update_option('mo2f_tour_backup',0);
|
1367 |
-
update_option('mo2f_tour_malware_scan',0);
|
1368 |
-
update_option('mo2f_tour_advance_blocking',0);
|
1369 |
-
switch (sanitize_text_field($_REQUEST['page'])) {
|
1370 |
-
case 'mo_2fa_two_fa':
|
1371 |
-
update_option('mo2f_two_factor_tour',1);
|
1372 |
-
break;
|
1373 |
-
case 'mo_2fa_waf':
|
1374 |
-
update_option('mo2f_tour_firewall',1);
|
1375 |
-
break;
|
1376 |
-
case 'mo_2fa_login_and_spam':
|
1377 |
-
update_option('mo2f_tour_loginSpam',1);
|
1378 |
-
break;
|
1379 |
-
case 'mo_2fa_backup':
|
1380 |
-
update_option('mo2f_tour_backup',1);
|
1381 |
-
break;
|
1382 |
-
case 'mo_2fa_malwarescan':
|
1383 |
-
update_option('mo2f_tour_malware_scan',1);
|
1384 |
-
break;
|
1385 |
-
case 'mo_2fa_advancedblocking':
|
1386 |
-
update_option('mo2f_tour_advance_blocking',1);
|
1387 |
-
break;
|
1388 |
-
}
|
1389 |
-
if($page != '')
|
1390 |
-
{
|
1391 |
-
$url = get_option('siteurl').'/wp-admin/admin.php?page='.$page;
|
1392 |
-
wp_redirect($url);
|
1393 |
-
exit;
|
1394 |
-
}
|
1395 |
-
$redirect=explode('&',htmlentities($_SERVER['REQUEST_URI']))[0];
|
1396 |
-
header("Location: ".$redirect);
|
1397 |
-
return;
|
1398 |
-
}
|
1399 |
}else if ( isset( $_POST['option'] ) and sanitize_text_field($_POST['option']) == "mo2f_save_proxy_settings" ) {
|
1400 |
$nonce = sanitize_text_field($_POST['mo2f_save_proxy_settings_nonce']);
|
1401 |
if ( ! wp_verify_nonce( $nonce, 'mo2f-save-proxy-settings-nonce' ) ) {
|
1351 |
wp_logout();
|
1352 |
wp_redirect(admin_url());
|
1353 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1354 |
}else if ( isset( $_POST['option'] ) and sanitize_text_field($_POST['option']) == "mo2f_save_proxy_settings" ) {
|
1355 |
$nonce = sanitize_text_field($_POST['mo2f_save_proxy_settings_nonce']);
|
1356 |
if ( ! wp_verify_nonce( $nonce, 'mo2f-save-proxy-settings-nonce' ) ) {
|
handler/twofa/two_fa_utility.php
CHANGED
@@ -137,11 +137,12 @@ class MO2f_Utility {
|
|
137 |
|
138 |
// setting values in database
|
139 |
$user_session_id = MO2f_Utility::decrypt_data( $user_session_id, $key );
|
|
|
140 |
if ( is_array( $value ) ) {
|
141 |
$string_value = serialize( $value );
|
142 |
-
$Mo2fdbQueries->save_user_login_details( $
|
143 |
} else {
|
144 |
-
$Mo2fdbQueries->save_user_login_details( $
|
145 |
}
|
146 |
} else if (!empty($data_option) && $data_option=="sessions"){
|
147 |
|
@@ -163,35 +164,16 @@ class MO2f_Utility {
|
|
163 |
}
|
164 |
} else if (!empty($data_option) && $data_option=="tables"){
|
165 |
$user_session_id = MO2f_Utility::decrypt_data( $user_session_id, $key );
|
|
|
166 |
if ( is_array( $value ) ) {
|
167 |
$string_value = serialize( $value );
|
168 |
-
$Mo2fdbQueries->save_user_login_details( $
|
169 |
} else {
|
170 |
-
$Mo2fdbQueries->save_user_login_details( $
|
171 |
}
|
172 |
}
|
173 |
}
|
174 |
|
175 |
-
function mo2f_isValidIP($IP)
|
176 |
-
{
|
177 |
-
return filter_var($IP, FILTER_VALIDATE_IP) !== false;
|
178 |
-
}
|
179 |
-
|
180 |
-
public static function get_client_ipaddress(){
|
181 |
-
|
182 |
-
$ip = null;
|
183 |
-
if (!empty($_SERVER['HTTP_CLIENT_IP']) && mo2f_isValidIP($_SERVER['HTTP_CLIENT_IP'])) {
|
184 |
-
$ip = filter_input(INPUT_SERVER,$_SERVER['HTTP_CLIENT_IP']);
|
185 |
-
|
186 |
-
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && mo2f_isValidIP($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
187 |
-
$ip = filter_input(INPUT_SERVER,$_SERVER['HTTP_X_FORWARDED_FOR']);
|
188 |
-
$ip = explode(",",$ip)[0];
|
189 |
-
|
190 |
-
} else {
|
191 |
-
$ip = mo2f_isValidIP($_SERVER['REMOTE_ADDR']) ? filter_input(INPUT_SERVER,$_SERVER['REMOTE_ADDR']) : 'UNKNOWN';
|
192 |
-
}
|
193 |
-
return $ip;
|
194 |
-
}
|
195 |
/*
|
196 |
|
197 |
Returns Random string with length provided in parameter.
|
@@ -326,7 +308,8 @@ class MO2f_Utility {
|
|
326 |
return $cookie_value;
|
327 |
} else {
|
328 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
329 |
-
$
|
|
|
330 |
if ( in_array( $variable, array( "mo2f_rba_status", "mo_2_factor_kba_questions" ) ) ) {
|
331 |
$db_value = unserialize( $db_value );
|
332 |
}
|
@@ -374,7 +357,8 @@ class MO2f_Utility {
|
|
374 |
}else if (!empty($data_option) && $data_option=="tables"){
|
375 |
$key = get_option( 'mo2f_encryption_key' );
|
376 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
377 |
-
$
|
|
|
378 |
if ( in_array( $variable, array( "mo2f_rba_status", "mo_2_factor_kba_questions" ) ) ) {
|
379 |
$db_value = unserialize( $db_value );
|
380 |
}
|
@@ -521,10 +505,11 @@ class MO2f_Utility {
|
|
521 |
global $Mo2fdbQueries;
|
522 |
$key = get_option( 'mo2f_encryption_key' );
|
523 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
|
|
524 |
if($command == "destroy"){
|
525 |
-
$Mo2fdbQueries->delete_user_login_sessions( $
|
526 |
}else{
|
527 |
-
$Mo2fdbQueries->save_user_login_details( $
|
528 |
}
|
529 |
}
|
530 |
|
@@ -710,15 +695,6 @@ class MO2f_Utility {
|
|
710 |
return $message;
|
711 |
}
|
712 |
|
713 |
-
public static function mo2f_get_codes_hash($codes){
|
714 |
-
$codes_hash=array();
|
715 |
-
for ($x = 0; $x < sizeof($codes); $x++) {
|
716 |
-
$str = $codes[$x];
|
717 |
-
array_push($codes_hash,md5($str));
|
718 |
-
}
|
719 |
-
return $codes_hash;
|
720 |
-
}
|
721 |
-
|
722 |
public static function mo2f_email_backup_codes($codes, $mo2f_user_email){
|
723 |
$subject = '2-Factor Authentication(Backup Codes)';
|
724 |
$headers = array('Content-Type: text/html; charset=UTF-8');
|
@@ -769,7 +745,6 @@ class MO2f_Utility {
|
|
769 |
return $codes;
|
770 |
|
771 |
$codes = explode(' ', $codes);
|
772 |
-
$codes_hash=MO2f_Utility::mo2f_get_codes_hash($codes);
|
773 |
$result = MO2f_Utility::mo2f_email_backup_codes($codes, $mo2f_user_email);
|
774 |
update_user_meta($id, 'mo_backup_code_generated', 1);
|
775 |
update_user_meta($id, 'mo_backup_code_downloaded', 1);
|
137 |
|
138 |
// setting values in database
|
139 |
$user_session_id = MO2f_Utility::decrypt_data( $user_session_id, $key );
|
140 |
+
$session_id_hash = md5($user_session_id);
|
141 |
if ( is_array( $value ) ) {
|
142 |
$string_value = serialize( $value );
|
143 |
+
$Mo2fdbQueries->save_user_login_details( $session_id_hash, array( $variable => $string_value ) );
|
144 |
} else {
|
145 |
+
$Mo2fdbQueries->save_user_login_details( $session_id_hash, array( $variable => $value ) );
|
146 |
}
|
147 |
} else if (!empty($data_option) && $data_option=="sessions"){
|
148 |
|
164 |
}
|
165 |
} else if (!empty($data_option) && $data_option=="tables"){
|
166 |
$user_session_id = MO2f_Utility::decrypt_data( $user_session_id, $key );
|
167 |
+
$session_id_hash = md5($user_session_id);
|
168 |
if ( is_array( $value ) ) {
|
169 |
$string_value = serialize( $value );
|
170 |
+
$Mo2fdbQueries->save_user_login_details( $session_id_hash, array( $variable => $string_value ) );
|
171 |
} else {
|
172 |
+
$Mo2fdbQueries->save_user_login_details( $session_id_hash, array( $variable => $value ) );
|
173 |
}
|
174 |
}
|
175 |
}
|
176 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
/*
|
178 |
|
179 |
Returns Random string with length provided in parameter.
|
308 |
return $cookie_value;
|
309 |
} else {
|
310 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
311 |
+
$session_id_hash = md5($session_id);
|
312 |
+
$db_value = $Mo2fdbQueries->get_user_login_details( $variable, $session_id_hash );
|
313 |
if ( in_array( $variable, array( "mo2f_rba_status", "mo_2_factor_kba_questions" ) ) ) {
|
314 |
$db_value = unserialize( $db_value );
|
315 |
}
|
357 |
}else if (!empty($data_option) && $data_option=="tables"){
|
358 |
$key = get_option( 'mo2f_encryption_key' );
|
359 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
360 |
+
$session_id_hash = md5($session_id);
|
361 |
+
$db_value = $Mo2fdbQueries->get_user_login_details( $variable, $session_id_hash );
|
362 |
if ( in_array( $variable, array( "mo2f_rba_status", "mo_2_factor_kba_questions" ) ) ) {
|
363 |
$db_value = unserialize( $db_value );
|
364 |
}
|
505 |
global $Mo2fdbQueries;
|
506 |
$key = get_option( 'mo2f_encryption_key' );
|
507 |
$session_id = MO2f_Utility::decrypt_data( $session_id, $key );
|
508 |
+
$session_id_hash = md5($session_id);
|
509 |
if($command == "destroy"){
|
510 |
+
$Mo2fdbQueries->delete_user_login_sessions( $session_id_hash );
|
511 |
}else{
|
512 |
+
$Mo2fdbQueries->save_user_login_details( $session_id_hash, array($variables => ''));
|
513 |
}
|
514 |
}
|
515 |
|
695 |
return $message;
|
696 |
}
|
697 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
698 |
public static function mo2f_email_backup_codes($codes, $mo2f_user_email){
|
699 |
$subject = '2-Factor Authentication(Backup Codes)';
|
700 |
$headers = array('Content-Type: text/html; charset=UTF-8');
|
745 |
return $codes;
|
746 |
|
747 |
$codes = explode(' ', $codes);
|
|
|
748 |
$result = MO2f_Utility::mo2f_email_backup_codes($codes, $mo2f_user_email);
|
749 |
update_user_meta($id, 'mo_backup_code_generated', 1);
|
750 |
update_user_meta($id, 'mo_backup_code_downloaded', 1);
|
helper/constants.php
CHANGED
@@ -13,8 +13,12 @@
|
|
13 |
const DEFAULT_API_KEY = "fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq";
|
14 |
const DB_VERSION = 155;
|
15 |
const DB_FEATURE_MAIL = 3;
|
|
|
16 |
const SUPPORT_EMAIL = 'info@xecurify.com';
|
17 |
const REAL_TIME_IP_HOST = 'https://firewall.xecurify.com/';
|
|
|
|
|
|
|
18 |
const IP_LOOKUP_TEMPLATE = '<span style="font-size:14px;font-weight:bold">GENERAL INFORMATION</span><table style="margin-left:2%;"><tr><td style="width:100px;">Response</td><td >:</td><td>{{status}}</td></tr><tr><td style="width:100px;">IP Address</td><td>:</td><td>{{ip}}</td></tr><tr><td>HostName</td><td>:</td><td>{{hostname}}</td></tr><tr><td>TimeZone</td><td>:</td><td>{{timezone}}</td></tr><tr><td>Time Difference</td><td>:</td><td>{{offset}}</td></tr></table><hr><span style="font-size:14px;font-weight:bold">LOCATION INFORMATION</span><table style="margin-left:2%;"><tr><td>Latitude</td><td>:</td><td>{{latitude}}</td></tr><tr><td>Longitude</td><td>:</td><td>{{longitude}}</td></tr><tr><td>Region</td><td>:</td><td>{{region}}</td></tr><tr><td>Country</td><td>:</td><td>{{country}}</td></tr><tr><td>City</td><td>:</td><td>{{city}}</td></tr><tr><td>Continent</td><td>:</td><td>{{continent}}</td></tr><tr><td>Curreny Code</td><td>:</td><td>{{curreny_code}}</td></tr><tr><td>Curreny Symbol</td><td>:</td><td>{{curreny_symbol}}</td></tr><tr><td>Per Dollar Value</td><td>:</td><td>{{per_dollar_value}}</td></tr></table>';
|
19 |
const CURRENT_BROWSER = '<span style="font-size:10px;color:red;">( Current Browser )</span>';
|
20 |
|
@@ -43,9 +47,7 @@
|
|
43 |
const ATTACK_LIMIT_EXCEEDED = "ale";
|
44 |
const RATE_LIMIT_EXCEEDED = "rle";
|
45 |
const RATE_LIMIT_EXCEEDED_CRAWLER_ATTACK= "rlecrawler";
|
46 |
-
|
47 |
-
const THEMES = 'themes';
|
48 |
-
const WPFILES = 'wpfiles';
|
49 |
const DATABASE = 'db';
|
50 |
const CloudLockedOut ='https://faq.miniorange.com/knowledgebase/how-to-gain-access-to-my-website-if-i-get-locked-out/';
|
51 |
const OnPremiseLockedOut ='https://faq.miniorange.com/knowledgebase/i-am-locked-cant-access-my-account-what-do-i-do/';
|
13 |
const DEFAULT_API_KEY = "fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq";
|
14 |
const DB_VERSION = 155;
|
15 |
const DB_FEATURE_MAIL = 3;
|
16 |
+
const SMS_EMAIL_TRANSACTION ="https://plugins.miniorange.com/sms-and-email-transaction-pricing-2fa";
|
17 |
const SUPPORT_EMAIL = 'info@xecurify.com';
|
18 |
const REAL_TIME_IP_HOST = 'https://firewall.xecurify.com/';
|
19 |
+
const GENERATE_BACK_CODE = 'https://sitestats.xecurify.com/backupcodeserviceauthentication';
|
20 |
+
const AUTHENTICATE_REQUEST = 'https://sitestats.xecurify.com/backupcodeserviceauthentication/authenticate.php';
|
21 |
+
const VALIDATE_BACKUP_CODE = 'https://sitestats.xecurify.com/backupcodeserviceauthentication/backup_code_validation.php';
|
22 |
const IP_LOOKUP_TEMPLATE = '<span style="font-size:14px;font-weight:bold">GENERAL INFORMATION</span><table style="margin-left:2%;"><tr><td style="width:100px;">Response</td><td >:</td><td>{{status}}</td></tr><tr><td style="width:100px;">IP Address</td><td>:</td><td>{{ip}}</td></tr><tr><td>HostName</td><td>:</td><td>{{hostname}}</td></tr><tr><td>TimeZone</td><td>:</td><td>{{timezone}}</td></tr><tr><td>Time Difference</td><td>:</td><td>{{offset}}</td></tr></table><hr><span style="font-size:14px;font-weight:bold">LOCATION INFORMATION</span><table style="margin-left:2%;"><tr><td>Latitude</td><td>:</td><td>{{latitude}}</td></tr><tr><td>Longitude</td><td>:</td><td>{{longitude}}</td></tr><tr><td>Region</td><td>:</td><td>{{region}}</td></tr><tr><td>Country</td><td>:</td><td>{{country}}</td></tr><tr><td>City</td><td>:</td><td>{{city}}</td></tr><tr><td>Continent</td><td>:</td><td>{{continent}}</td></tr><tr><td>Curreny Code</td><td>:</td><td>{{curreny_code}}</td></tr><tr><td>Curreny Symbol</td><td>:</td><td>{{curreny_symbol}}</td></tr><tr><td>Per Dollar Value</td><td>:</td><td>{{per_dollar_value}}</td></tr></table>';
|
23 |
const CURRENT_BROWSER = '<span style="font-size:10px;color:red;">( Current Browser )</span>';
|
24 |
|
47 |
const ATTACK_LIMIT_EXCEEDED = "ale";
|
48 |
const RATE_LIMIT_EXCEEDED = "rle";
|
49 |
const RATE_LIMIT_EXCEEDED_CRAWLER_ATTACK= "rlecrawler";
|
50 |
+
|
|
|
|
|
51 |
const DATABASE = 'db';
|
52 |
const CloudLockedOut ='https://faq.miniorange.com/knowledgebase/how-to-gain-access-to-my-website-if-i-get-locked-out/';
|
53 |
const OnPremiseLockedOut ='https://faq.miniorange.com/knowledgebase/i-am-locked-cant-access-my-account-what-do-i-do/';
|
helper/dashboard_security_notification.php
CHANGED
@@ -29,12 +29,12 @@ class miniorange_security_notification{
|
|
29 |
|
30 |
$latest_id = (int)$array[0]->id;
|
31 |
|
32 |
-
$last_scan_malicious_count = $wpdb->get_results("SELECT COUNT(*) as total FROM ".$wpdb->base_prefix."wpns_malware_scan_report_details where report_id
|
33 |
|
34 |
|
35 |
$total_malicious_count = $wpdb->get_results("SELECT COUNT(*) as total FROM ".$wpdb->base_prefix."wpns_malware_scan_report_details");
|
36 |
|
37 |
-
$table_content = $wpdb->get_results("SELECT * FROM ".$wpdb->base_prefix."wpns_malware_scan_report where id
|
38 |
if(sizeof($table_content)>0){
|
39 |
$type_of_scan = $table_content[0]->scan_mode;
|
40 |
$total_scanned_files = $table_content[0]->scanned_files;
|
@@ -45,23 +45,6 @@ class miniorange_security_notification{
|
|
45 |
|
46 |
if($total_scanned_files === null)
|
47 |
$total_scanned_files = '0';
|
48 |
-
// -------------------------------------------------------------------------------------------------------->
|
49 |
-
$array = $wpnsDbQueries->get_number_of_plugin_backup();
|
50 |
-
$last_backup_create_time = get_option('backup_created_time');
|
51 |
-
$last_backup = 'No Backup Util';
|
52 |
-
if($array['total_backup'] !=0){
|
53 |
-
$timestamp = time()-$last_backup_create_time;
|
54 |
-
$days = $timestamp/(60*60*24);
|
55 |
-
$day = (int)$days;
|
56 |
-
if($day == 0){
|
57 |
-
$last_backup ='Last Backup Create Today';
|
58 |
-
}else{
|
59 |
-
$last_backup= 'Last backup'.' '.$day.' '.'day ago';
|
60 |
-
}
|
61 |
-
}else{
|
62 |
-
$last_backup = 'No Backup Until Now';
|
63 |
-
}
|
64 |
-
|
65 |
|
66 |
if(current_user_can('administrator'))
|
67 |
{
|
@@ -211,53 +194,7 @@ class miniorange_security_notification{
|
|
211 |
|
212 |
echo '<br><br>';
|
213 |
|
214 |
-
|
215 |
-
<div style='font-size:20px;color:white;text-align:center'>
|
216 |
-
<strong style='font-weight:300;'>Backup <span style='color:orange;'>[".esc_html($last_backup)." ]</span></strong>
|
217 |
-
</div>
|
218 |
-
<hr>
|
219 |
-
<div>
|
220 |
-
<table>
|
221 |
-
<tbody>
|
222 |
-
|
223 |
-
<tr>
|
224 |
-
<td style='border-collapse:collapse!important;color:#0a0a0a;line-height:1.3;margin:0;padding:0;text-align:left;vertical-align:top;word-wrap:normal'>
|
225 |
-
<table dir='ltr' style='table-layout:fixed;margin:10px 0 20px 0;padding:0;vertical-align:top;width:100%'>
|
226 |
-
<tbody>
|
227 |
-
<tr>
|
228 |
-
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400' ><strong>" .esc_attr($array['plugin_count'])."</strong></td>
|
229 |
-
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>" .esc_attr($array['themes_count'])."</strong></td>
|
230 |
-
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>" .esc_attr($array['wp_files_count'])."</strong></td>
|
231 |
-
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>" .esc_attr($array['db_count'])."</strong></td>
|
232 |
-
|
233 |
-
</tr>
|
234 |
-
|
235 |
-
<tr>
|
236 |
-
<td>
|
237 |
-
</td>
|
238 |
-
<td>
|
239 |
-
</td>
|
240 |
-
</tr>
|
241 |
-
<tr>
|
242 |
-
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Plugin Backup</strong></td>
|
243 |
-
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Themes Backup</strong></td>
|
244 |
-
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>WP File Backup</strong></td>
|
245 |
-
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Database Backup</strong></td>
|
246 |
-
|
247 |
-
</tr>
|
248 |
-
</tbody>
|
249 |
-
</table>
|
250 |
-
|
251 |
-
</tr>
|
252 |
-
</tbody>
|
253 |
-
</table>
|
254 |
-
</div>
|
255 |
-
|
256 |
-
<a class='button button-primary' style='background-color:#f0a702;width:100%;text-align:center' href='admin.php?page=mo_2fa_backup'><h3 style='background-color:#f0a702'>Take Backup</h3></a>
|
257 |
-
</div>";
|
258 |
-
|
259 |
-
|
260 |
-
}
|
261 |
|
262 |
}
|
263 |
|
29 |
|
30 |
$latest_id = (int)$array[0]->id;
|
31 |
|
32 |
+
$last_scan_malicious_count = $wpdb->get_results($wpdb->prepare("SELECT COUNT(*) as total FROM ".$wpdb->base_prefix."wpns_malware_scan_report_details where report_id=%d",array($latest_id)));
|
33 |
|
34 |
|
35 |
$total_malicious_count = $wpdb->get_results("SELECT COUNT(*) as total FROM ".$wpdb->base_prefix."wpns_malware_scan_report_details");
|
36 |
|
37 |
+
$table_content = $wpdb->get_results($wpdb->prepare("SELECT * FROM ".$wpdb->base_prefix."wpns_malware_scan_report where id=%d",array($latest_id)));
|
38 |
if(sizeof($table_content)>0){
|
39 |
$type_of_scan = $table_content[0]->scan_mode;
|
40 |
$total_scanned_files = $table_content[0]->scanned_files;
|
45 |
|
46 |
if($total_scanned_files === null)
|
47 |
$total_scanned_files = '0';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
|
49 |
if(current_user_can('administrator'))
|
50 |
{
|
194 |
|
195 |
echo '<br><br>';
|
196 |
|
197 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
|
199 |
}
|
200 |
|
helper/pluginUtility.php
CHANGED
@@ -73,7 +73,7 @@ class MoWpnsHandler
|
|
73 |
function get_blocked_attacks()
|
74 |
{
|
75 |
global $wpnsDbQueries;
|
76 |
-
return $wpnsDbQueries->get_blocked_attack_list(
|
77 |
}
|
78 |
function get_blocked_ips()
|
79 |
{
|
73 |
function get_blocked_attacks()
|
74 |
{
|
75 |
global $wpnsDbQueries;
|
76 |
+
return $wpnsDbQueries->get_blocked_attack_list();
|
77 |
}
|
78 |
function get_blocked_ips()
|
79 |
{
|
helper/utility.php
CHANGED
@@ -67,19 +67,26 @@ class MoWpnsUtility
|
|
67 |
}
|
68 |
|
69 |
static function mo2f_isValidIP($IP){
|
70 |
-
|
|
|
|
|
|
|
71 |
}
|
72 |
|
73 |
public static function get_client_ip()
|
74 |
{
|
75 |
-
if (!empty($_SERVER['
|
76 |
-
return self::
|
77 |
-
}
|
78 |
-
return
|
79 |
-
} else {
|
80 |
-
return self::mo2f_isValidIP($_SERVER['REMOTE_ADDR']) ? sanitize_text_field($_SERVER['REMOTE_ADDR']) : '';
|
81 |
}
|
82 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
public static function check_if_valid_email($email)
|
@@ -314,8 +321,6 @@ class MoWpnsUtility
|
|
314 |
$status.="LS1";
|
315 |
if(get_site_option('mo2f_visit_malware'))
|
316 |
$status.="M1";
|
317 |
-
if(get_site_option('mo2f_visit_backup'))
|
318 |
-
$status.="B1";
|
319 |
if(get_site_option('mo2f_two_factor'))
|
320 |
$status.="TF1";
|
321 |
if(time()-get_site_option("mo_2fa_pnp")<2592000)
|
67 |
}
|
68 |
|
69 |
static function mo2f_isValidIP($IP){
|
70 |
+
$new_ip = explode(',',$IP);
|
71 |
+
if(is_array($new_ip))
|
72 |
+
$IP = $new_ip[0];
|
73 |
+
return filter_var(self::get_unique_ip($IP), FILTER_VALIDATE_IP) !== false;
|
74 |
}
|
75 |
|
76 |
public static function get_client_ip()
|
77 |
{
|
78 |
+
if((isset($_SERVER['REMOTE_ADDR']) && is_string($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']) && self::mo2f_isValidIP($_SERVER['REMOTE_ADDR']))){
|
79 |
+
return self::get_unique_ip($_SERVER['REMOTE_ADDR']);
|
80 |
+
}else{
|
81 |
+
return 'UNKNOWN';
|
|
|
|
|
82 |
}
|
83 |
+
}
|
84 |
+
|
85 |
+
public static function get_unique_ip($IP){
|
86 |
+
$IP = explode(',',$IP);
|
87 |
+
if(is_array($IP))
|
88 |
+
return sanitize_text_field($IP[0]);
|
89 |
+
return sanitize_text_field($IP);
|
90 |
}
|
91 |
|
92 |
public static function check_if_valid_email($email)
|
321 |
$status.="LS1";
|
322 |
if(get_site_option('mo2f_visit_malware'))
|
323 |
$status.="M1";
|
|
|
|
|
324 |
if(get_site_option('mo2f_two_factor'))
|
325 |
$status.="TF1";
|
326 |
if(time()-get_site_option("mo_2fa_pnp")<2592000)
|
includes/css/style_settings.css
CHANGED
@@ -572,6 +572,11 @@ input[name="miniOrangeAuthenticator"]:checked + .mo2f_miniAuthApp {
|
|
572 |
min-height: 62px;
|
573 |
border-radius: 1em 1em 0 0;
|
574 |
}
|
|
|
|
|
|
|
|
|
|
|
575 |
.mo_wpns_upgrade_page_2fa_plan_name {
|
576 |
margin-top: 0%;
|
577 |
padding: 6% 0% 0% 0%;
|
572 |
min-height: 62px;
|
573 |
border-radius: 1em 1em 0 0;
|
574 |
}
|
575 |
+
@media only screen and (max-width: 1024px){
|
576 |
+
.mo_wpns_upgrade_page_title_name {
|
577 |
+
height:100px;
|
578 |
+
}
|
579 |
+
}
|
580 |
.mo_wpns_upgrade_page_2fa_plan_name {
|
581 |
margin-top: 0%;
|
582 |
padding: 6% 0% 0% 0%;
|
includes/css/upgrade.css
CHANGED
@@ -1,304 +1,9 @@
|
|
1 |
-
.mo2fa_pricing_head_blue {
|
2 |
-
background-color: #1f3668;
|
3 |
-
border-radius: 1em 1em 50% 50%;
|
4 |
-
padding: 1em 1em 2em 0em;
|
5 |
-
color: white;
|
6 |
-
margin-top: -10%;
|
7 |
-
}
|
8 |
-
.mo2fa_per_tooltip_methodlist {
|
9 |
-
position: relative;
|
10 |
-
display: inline-block;
|
11 |
-
}
|
12 |
-
.mo2fa_per_tooltip_methodlist .mo2fa_methodlist {
|
13 |
-
visibility: hidden;
|
14 |
-
width: 13em;
|
15 |
-
background-color: #000000b8;
|
16 |
-
color: #fff;
|
17 |
-
text-align: left;
|
18 |
-
border-radius: 6px;
|
19 |
-
padding: 12px 2px 12px 28px;
|
20 |
-
position: absolute;
|
21 |
-
z-index: 1;
|
22 |
-
top: -2em;
|
23 |
-
left: 107%;
|
24 |
-
}
|
25 |
-
.mo2fa_per_tooltip_methodlist:hover .mo2fa_methodlist {
|
26 |
-
visibility: visible;
|
27 |
-
}
|
28 |
-
.mo2fa_per_tooltip_methodlist .mo2fa_methodlist::after {
|
29 |
-
content: "";
|
30 |
-
position: absolute;
|
31 |
-
top: 50%;
|
32 |
-
right: 100%;
|
33 |
-
margin-top: -5px;
|
34 |
-
border-width: 5px;
|
35 |
-
border-style: solid;
|
36 |
-
border-color: transparent black transparent transparent;
|
37 |
-
}
|
38 |
-
.mo2fa_on_per_tooltip_methodlist {
|
39 |
-
position: relative;
|
40 |
-
display: inline-block;
|
41 |
-
}
|
42 |
-
.mo2fa_on_per_tooltip_methodlist .mo2fa_methodlist {
|
43 |
-
visibility: hidden;
|
44 |
-
width: 14em;
|
45 |
-
background-color: #000000b8;
|
46 |
-
color: #fff;
|
47 |
-
text-align: left;
|
48 |
-
border-radius: 6px;
|
49 |
-
padding: 12px 2px 12px 28px;
|
50 |
-
position: absolute;
|
51 |
-
z-index: 1;
|
52 |
-
top: -1.6em;
|
53 |
-
left: 90%;
|
54 |
-
}
|
55 |
-
.mo2fa_on_per_tooltip_methodlist:hover .mo2fa_methodlist {
|
56 |
-
visibility: visible;
|
57 |
-
}
|
58 |
-
.mo2fa_on_per_tooltip_methodlist .mo2fa_methodlist::after {
|
59 |
-
content: "";
|
60 |
-
position: absolute;
|
61 |
-
top: 50%;
|
62 |
-
right: 100%;
|
63 |
-
margin-top: -5px;
|
64 |
-
border-width: 5px;
|
65 |
-
border-style: solid;
|
66 |
-
border-color: transparent black transparent transparent;
|
67 |
-
}
|
68 |
-
|
69 |
-
.mo2fa_cloud_per_tooltip_methodlist {
|
70 |
-
position: relative;
|
71 |
-
display: inline-block;
|
72 |
-
}
|
73 |
-
.mo2fa_cloud_per_tooltip_methodlist .mo2fa_methodlist {
|
74 |
-
visibility: hidden;
|
75 |
-
width: 14em;
|
76 |
-
background-color: #000000b8;
|
77 |
-
color: #fff;
|
78 |
-
text-align: left;
|
79 |
-
border-radius: 6px;
|
80 |
-
padding: 11px 1px 11px 43px;
|
81 |
-
position: absolute;
|
82 |
-
z-index: 1;
|
83 |
-
top: -15px;
|
84 |
-
right: 110%;
|
85 |
-
}
|
86 |
-
.mo2fa_cloud_per_tooltip_methodlist:hover .mo2fa_methodlist {
|
87 |
-
visibility: visible;
|
88 |
-
}
|
89 |
-
.mo2fa_cloud_per_tooltip_methodlist .mo2fa_methodlist::after {
|
90 |
-
content: "";
|
91 |
-
position: absolute;
|
92 |
-
top: 50%;
|
93 |
-
left: 100%;
|
94 |
-
margin-top: -5px;
|
95 |
-
border-width: 5px;
|
96 |
-
border-style: solid;
|
97 |
-
border-color: transparent transparent transparent black;
|
98 |
-
}
|
99 |
-
|
100 |
-
.mo2fa_fido_tooltip_methodlist {
|
101 |
-
position: relative;
|
102 |
-
display: inline-block;
|
103 |
-
}
|
104 |
-
.mo2fa_fido_tooltip_methodlist .mo2fa_methodlist {
|
105 |
-
visibility: hidden;
|
106 |
-
width: 16em;
|
107 |
-
background-color: #000000b8;
|
108 |
-
color: #fff;
|
109 |
-
text-align: left;
|
110 |
-
border-radius: 6px;
|
111 |
-
padding: 12px 2px 12px 28px;
|
112 |
-
position: absolute;
|
113 |
-
z-index: 1;
|
114 |
-
top: -1.9em;
|
115 |
-
left: 91%;
|
116 |
-
}
|
117 |
-
.mo2fa_fido_tooltip_methodlist:hover .mo2fa_methodlist {
|
118 |
-
visibility: visible;
|
119 |
-
}
|
120 |
-
.mo2fa_fido_tooltip_methodlist .mo2fa_methodlist::after {
|
121 |
-
content: "";
|
122 |
-
position: absolute;
|
123 |
-
top: 50%;
|
124 |
-
right: 100%;
|
125 |
-
margin-top: -5px;
|
126 |
-
border-width: 5px;
|
127 |
-
border-style: solid;
|
128 |
-
border-color: transparent black transparent transparent;
|
129 |
-
}
|
130 |
|
131 |
-
.mo2fa_shortcode_tooltip_methodlist {
|
132 |
-
position: relative;
|
133 |
-
display: inline-block;
|
134 |
-
}
|
135 |
-
.mo2fa_shortcode_tooltip_methodlist .mo2fa_methodlist {
|
136 |
-
visibility: hidden;
|
137 |
-
width: auto;
|
138 |
-
min-width: 26em;
|
139 |
-
background-color: #000000b8;
|
140 |
-
color: #fff;
|
141 |
-
text-align: left;
|
142 |
-
border-radius: 6px;
|
143 |
-
padding: 7px 0px 8px 8px;
|
144 |
-
position: absolute;
|
145 |
-
z-index: 1;
|
146 |
-
top: -1.1em;
|
147 |
-
left: 107%;
|
148 |
-
}
|
149 |
-
.mo2fa_shortcode_tooltip_methodlist:hover .mo2fa_methodlist {
|
150 |
-
visibility: visible;
|
151 |
-
}
|
152 |
-
.mo2fa_shortcode_tooltip_methodlist .mo2fa_methodlist::after {
|
153 |
-
content: "";
|
154 |
-
position: absolute;
|
155 |
-
top: 50%;
|
156 |
-
right: 100%;
|
157 |
-
margin-top: -5px;
|
158 |
-
border-width: 5px;
|
159 |
-
border-style: solid;
|
160 |
-
border-color: transparent black transparent transparent;
|
161 |
-
}
|
162 |
-
.mo2fa_shortcode_ent_tooltip_methodlist {
|
163 |
-
position: relative;
|
164 |
-
display: inline-block;
|
165 |
-
}
|
166 |
-
.mo2fa_shortcode_ent_tooltip_methodlist .mo2fa_methodlist {
|
167 |
-
visibility: hidden;
|
168 |
-
width: auto;
|
169 |
-
min-width: 26em;
|
170 |
-
background-color: #000000b8;
|
171 |
-
color: #fff;
|
172 |
-
text-align: left;
|
173 |
-
border-radius: 6px;
|
174 |
-
padding: 7px 0px 8px 8px;
|
175 |
-
position: absolute;
|
176 |
-
z-index: 1;
|
177 |
-
top: -15px;
|
178 |
-
right: 110%;
|
179 |
-
}
|
180 |
-
.mo2fa_shortcode_ent_tooltip_methodlist:hover .mo2fa_methodlist {
|
181 |
-
visibility: visible;
|
182 |
-
}
|
183 |
-
.mo2fa_shortcode_ent_tooltip_methodlist .mo2fa_methodlist::after {
|
184 |
-
content: "";
|
185 |
-
position: absolute;
|
186 |
-
top: 50%;
|
187 |
-
left: 100%;
|
188 |
-
margin-top: -5px;
|
189 |
-
border-width: 5px;
|
190 |
-
border-style: solid;
|
191 |
-
border-color: transparent transparent transparent black;
|
192 |
-
}
|
193 |
-
#mo2f_upgrade_main_div:hover > #mo2fa-ribbon {
|
194 |
-
margin-top: 0%;
|
195 |
-
transition: 1s;
|
196 |
-
}
|
197 |
-
.mo2fa_per_year {
|
198 |
-
color: white;
|
199 |
-
font-size: small;
|
200 |
-
}
|
201 |
-
.mo2fa_tooltip {
|
202 |
-
position: relative;
|
203 |
-
border-bottom: 1px dotted black;
|
204 |
-
}
|
205 |
-
.mo2fa_tooltip .mo2fa_tooltiptext {
|
206 |
-
visibility: hidden;
|
207 |
-
line-height: 1.6;
|
208 |
-
font-family: "Times New Roman", Times, serif;
|
209 |
-
width: 248px;
|
210 |
-
background-color: white;
|
211 |
-
color: cadetblue;
|
212 |
-
border: 1px solid cadetblue;
|
213 |
-
text-align: center;
|
214 |
-
border-radius: 6px;
|
215 |
-
padding: 10px 0;
|
216 |
-
position: absolute;
|
217 |
-
z-index: 1;
|
218 |
-
top: -5px;
|
219 |
-
left: 105%;
|
220 |
-
}
|
221 |
-
.mo2fa_tooltip_basic .mo2fa_tooltiptext_basic{
|
222 |
-
right: 105%;
|
223 |
-
left: unset;
|
224 |
-
}
|
225 |
-
.mo2fa_tooltip:hover .mo2fa_tooltiptext {
|
226 |
-
visibility: visible;
|
227 |
-
}
|
228 |
-
.mo2fa-ribbon span {
|
229 |
-
position: absolute;
|
230 |
-
width: 154px;
|
231 |
-
padding: 19px 0px 15px 68px;
|
232 |
-
background-color: #3498db;
|
233 |
-
box-shadow: 0 5px 10px rgb(0 0 0 / 10%);
|
234 |
-
color: #fff;
|
235 |
-
font: 700 14px/1 Lato, sans-serif;
|
236 |
-
text-shadow: 0 1px 1px rgb(0 0 0 / 20%);
|
237 |
-
}
|
238 |
-
.mo2fa-ribbon-top-right span {
|
239 |
-
left: 0;
|
240 |
-
top: 19px;
|
241 |
-
transform: rotate(45deg);
|
242 |
-
z-index: 1;
|
243 |
-
}
|
244 |
-
.mo2fa-ribbon {
|
245 |
-
width: 160px;
|
246 |
-
height: 160px;
|
247 |
-
overflow: hidden;
|
248 |
-
position: absolute;
|
249 |
-
z-index: 0;
|
250 |
-
}
|
251 |
-
.mo2fa-ribbon-top-right {
|
252 |
-
top: 154px;
|
253 |
-
right: 486px;
|
254 |
-
}
|
255 |
-
.mo2fa-ribbon::before {
|
256 |
-
position: absolute;
|
257 |
-
content: "";
|
258 |
-
border: 5px solid #2980b9;
|
259 |
-
}
|
260 |
-
.mo2fa-ribbon-top-right::before {
|
261 |
-
top: -2px;
|
262 |
-
left: 34px;
|
263 |
-
}
|
264 |
-
.mo2fa-ribbon::after,
|
265 |
-
.mo2fa-ribbon::before {
|
266 |
-
position: absolute;
|
267 |
-
content: "";
|
268 |
-
border: 5px solid #2980b9;
|
269 |
-
}
|
270 |
-
.mo2fa-ribbon-top-right::after {
|
271 |
-
bottom: 34px;
|
272 |
-
right: 0;
|
273 |
-
}
|
274 |
-
.mo2fa_pricing_head_sky {
|
275 |
-
background-color: #327a86;
|
276 |
-
border-radius: 1em 1em 50% 50%;
|
277 |
-
padding: 1em 1em 2em 0em;
|
278 |
-
color: white;
|
279 |
-
margin-top: -10%;
|
280 |
-
height: 15.5em;
|
281 |
-
}
|
282 |
.wp-core-ui select {
|
283 |
padding: 4px 24px 4px 8px;
|
284 |
margin-left: 1em;
|
285 |
}
|
286 |
-
|
287 |
-
text-align: center;
|
288 |
-
color: #1f3668;
|
289 |
-
font-size: 28px;
|
290 |
-
}
|
291 |
-
.mo2fa_ul li {
|
292 |
-
margin-bottom: 0%;
|
293 |
-
}
|
294 |
-
.mo2fa_pricing_feature_collection_supporter {
|
295 |
-
height: 32em;
|
296 |
-
}
|
297 |
-
.mo2fa_pricing_head_supporter {
|
298 |
-
height: 4em;
|
299 |
-
padding: 2px 1px 1px 1px;
|
300 |
-
margin-bottom: 1em;
|
301 |
-
}
|
302 |
i.fa-check {
|
303 |
color: black;
|
304 |
margin-left: 2em;
|
@@ -320,56 +25,7 @@ i.fa-times {
|
|
320 |
margin-top: 1em;
|
321 |
color: #b6abab;
|
322 |
}
|
323 |
-
.mo2fa_pricing_feature_collection {
|
324 |
-
height: 31em;
|
325 |
-
}
|
326 |
-
.mo2fa_limit_pricing_feature_mo_2fa {
|
327 |
-
color: #b6abab;
|
328 |
-
font-weight: 500;
|
329 |
-
}
|
330 |
-
.mo2fa_unltimate_feature {
|
331 |
-
text-align: center;
|
332 |
-
color: #000000;
|
333 |
-
font-family: Open Sans;
|
334 |
-
letter-spacing: 0.3px;
|
335 |
-
padding: 0.5em;
|
336 |
-
font-family: Open Sans;
|
337 |
-
}
|
338 |
-
.mo2fa_sec {
|
339 |
-
width: 27em;
|
340 |
-
border-radius: 4px;
|
341 |
-
box-shadow: 1px 0px 11px 0px #ccc;
|
342 |
-
height: 70em;
|
343 |
-
border: 1px solid #ccc;
|
344 |
-
padding-top: 2em;
|
345 |
-
}
|
346 |
-
.mo2f-installation-steps strong{
|
347 |
-
font-size: 1.1em;
|
348 |
-
}
|
349 |
-
.mo2fa_upgrade_my_plan_ent {
|
350 |
-
border: none;
|
351 |
-
top: 50%;
|
352 |
-
left: 50%;
|
353 |
-
color: white;
|
354 |
-
padding: 15px 32px;
|
355 |
-
width: auto;
|
356 |
-
min-width: 50%;
|
357 |
-
border-radius: 26px;
|
358 |
-
text-align: center;
|
359 |
-
text-decoration: none;
|
360 |
-
display: inline-block;
|
361 |
-
background: #327a86;
|
362 |
-
font-size: 16px;
|
363 |
-
height: auto;
|
364 |
-
margin-top: 24px;
|
365 |
-
margin-bottom: 0.7em;
|
366 |
-
cursor: pointer;
|
367 |
-
}
|
368 |
-
.mo2fa_upgrade_my_plan_ent:hover {
|
369 |
-
border: none;
|
370 |
|
371 |
-
background: #114b56;
|
372 |
-
}
|
373 |
.mo2fa_upgrade_my_plan {
|
374 |
border: none;
|
375 |
top: 50%;
|
@@ -396,15 +52,7 @@ i.fa-times {
|
|
396 |
.mo2fa_plugins {
|
397 |
width: 12%;
|
398 |
}
|
399 |
-
|
400 |
-
background: #fff;
|
401 |
-
width: auto;
|
402 |
-
border-radius: 4px;
|
403 |
-
height: 84.5em;
|
404 |
-
border: 1px solid #ccc;
|
405 |
-
padding-top: 2em;
|
406 |
-
box-shadow: 0 1px 2px 0 rgb(60 64 67 / 30%), 0 1px 3px 1px rgb(60 64 67 / 15%);
|
407 |
-
}
|
408 |
.mo2fa_make_my_plan_mo {
|
409 |
border: none;
|
410 |
color: white;
|
@@ -426,42 +74,7 @@ i.fa-times {
|
|
426 |
.mo2fa_web_sec {
|
427 |
padding: 20px 0;
|
428 |
}
|
429 |
-
|
430 |
-
font-size: 20px;
|
431 |
-
color: white;
|
432 |
-
line-height: 1.6;
|
433 |
-
margin-bottom: 3%;
|
434 |
-
font-family: unset;
|
435 |
-
}
|
436 |
-
.mo2fa_method-list-size {
|
437 |
-
font-size: 11px;
|
438 |
-
margin-bottom: -3px !important;
|
439 |
-
list-style: none !important;
|
440 |
-
margin-left: 2em;
|
441 |
-
font-weight: 450;
|
442 |
-
}
|
443 |
-
.mo2fa_method-list-mo-size-cross {
|
444 |
-
font-size: 11px;
|
445 |
-
color: #b6abab;
|
446 |
-
margin-bottom: -3px !important;
|
447 |
-
list-style: none !important;
|
448 |
-
margin-left: 2em;
|
449 |
-
}
|
450 |
-
.mo2fa_price_mo_2fa {
|
451 |
-
font-size: 35px;
|
452 |
-
font-weight: bold;
|
453 |
-
color: black;
|
454 |
-
}
|
455 |
-
.mo2fa_purchase_user_limit_mo {
|
456 |
-
margin-top: 22px !important;
|
457 |
-
margin-bottom: 0px !important;
|
458 |
-
color: black;
|
459 |
-
}
|
460 |
-
.mo2fa_purchase_otp_limit {
|
461 |
-
margin-top: 10px !important;
|
462 |
-
margin-bottom: 4px !important;
|
463 |
-
color: black;
|
464 |
-
}
|
465 |
.mo2fa_increase_my_limit {
|
466 |
width: 40%;
|
467 |
color: black;
|
@@ -472,22 +85,7 @@ i.fa-times {
|
|
472 |
margin-left: -10px;
|
473 |
margin-right: 3px;
|
474 |
}
|
475 |
-
.mo2fa_feature {
|
476 |
-
margin-top: -0.5em;
|
477 |
-
margin-bottom: 0.5em;
|
478 |
-
font-size: 16px;
|
479 |
-
}
|
480 |
-
.mo2fa_ul {
|
481 |
-
font-size: 15px;
|
482 |
-
}
|
483 |
-
.mo2fa_ul li {
|
484 |
-
font-size: 14px;
|
485 |
-
font-family: system-ui;
|
486 |
-
}
|
487 |
|
488 |
-
.mo2fa_ul li:nth-of-type(2n + 1) {
|
489 |
-
background-color: rgba(23, 61, 80, 0.06);
|
490 |
-
}
|
491 |
.mo2fa_more_details_p,
|
492 |
.mo2fa_more_details_p1 {
|
493 |
font-size: 13px;
|
@@ -497,28 +95,7 @@ i.fa-times {
|
|
497 |
color: #4545ff;
|
498 |
text-align: center;
|
499 |
}
|
500 |
-
|
501 |
-
background: aliceblue;
|
502 |
-
width: 85%;
|
503 |
-
}
|
504 |
-
.mo2fa_pricing {
|
505 |
-
padding: 16px 55px 12px 41px;
|
506 |
-
height: 10em;
|
507 |
-
}
|
508 |
-
.mo2fa_pricing_p {
|
509 |
-
font-size: 10px;
|
510 |
-
margin-bottom: -21px;
|
511 |
-
}
|
512 |
-
.mo2fa_dollar {
|
513 |
-
font-size: 46px;
|
514 |
-
font-weight: 600;
|
515 |
-
padding: 5px 5px 5px 5px;
|
516 |
-
margin-top: 35px;
|
517 |
-
color: white;
|
518 |
-
}
|
519 |
-
.mo2fa_country {
|
520 |
-
margin-top: 2px;
|
521 |
-
}
|
522 |
.mo2fa_payment_p {
|
523 |
font-size: 110%;
|
524 |
}
|
@@ -538,80 +115,30 @@ i.fa-times {
|
|
538 |
border-radius: 5px;
|
539 |
width: 70%;
|
540 |
}
|
541 |
-
|
542 |
-
|
543 |
-
|
|
|
544 |
}
|
545 |
-
|
546 |
-
|
|
|
|
|
|
|
547 |
}
|
548 |
-
.
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
.
|
553 |
-
background: ffffffad;
|
554 |
-
border: none;
|
555 |
-
box-shadow: 12px;
|
556 |
-
}
|
557 |
-
.mo2fa_pricing_tabs_mo_enterprise {
|
558 |
-
background: ffffffad;
|
559 |
-
border: none !important;
|
560 |
-
}
|
561 |
-
.mo2f_upgrade_super_div {
|
562 |
-
display: flex;
|
563 |
-
justify-content: center;
|
564 |
-
align-content: center;
|
565 |
-
}
|
566 |
-
.mo2fa_recommended {
|
567 |
-
width: 100%;
|
568 |
-
background: #2a80caa6;
|
569 |
-
color: white;
|
570 |
-
height: 3em;
|
571 |
-
margin-left: 0px;
|
572 |
-
margin-top: -2em;
|
573 |
-
font-size: 16px;
|
574 |
-
margin-bottom: 2em;
|
575 |
-
padding: 10px 1px 1px 1px;
|
576 |
-
}
|
577 |
-
.mo2fa_purchase_limit_mo {
|
578 |
-
font-size: 16px;
|
579 |
-
}
|
580 |
-
.mo2fa_pricing_head_h5 {
|
581 |
-
margin: 0.67em;
|
582 |
-
}
|
583 |
-
.mo2fa_h4 {
|
584 |
-
font-size: 1.5em;
|
585 |
-
margin: 0.33em 0;
|
586 |
-
font-weight: 400;
|
587 |
-
}
|
588 |
-
.mo2fa_note_color {
|
589 |
-
color: red;
|
590 |
-
}
|
591 |
-
.mo2fa_note {
|
592 |
-
font-size: 17px;
|
593 |
-
}
|
594 |
-
.mo2fa_setting_layout {
|
595 |
-
width: 81.5%;
|
596 |
-
margin-left: 8%;
|
597 |
-
margin-top: 1%;
|
598 |
-
box-shadow: 0px 2px 25px 0px #ccc;
|
599 |
-
}
|
600 |
-
.mo2fa_bank_transfer {
|
601 |
-
height: 28px;
|
602 |
-
width: auto;
|
603 |
-
}
|
604 |
-
.mo2fa_category_feature {
|
605 |
-
font-size: 16px;
|
606 |
-
font-weight: 600;
|
607 |
-
padding-bottom: 0.3em;
|
608 |
-
padding-top: 0.3em;
|
609 |
}
|
|
|
610 |
.mo2fa_main_category_header {
|
611 |
background: #d5d5d5 !important;
|
612 |
margin-top: 0.3em;
|
613 |
margin-bottom: 0.3em;
|
614 |
}
|
|
|
615 |
.mo2fa_bg_category_main {
|
616 |
font-size: 17px;
|
617 |
border: 0.5px solid #c1c1c1;
|
@@ -644,6 +171,7 @@ table.mo2fa_table_features tr:nth-child(odd) {
|
|
644 |
table.mo2fa_table_features tr:last-child {
|
645 |
border-bottom: 1px solid #c1c1c1;
|
646 |
}
|
|
|
647 |
.mo2fa_hide {
|
648 |
display: none !important;
|
649 |
}
|
@@ -651,309 +179,350 @@ table.mo2fa_table_features tr:last-child {
|
|
651 |
.mo2fa_hide1 {
|
652 |
display: none;
|
653 |
}
|
|
|
654 |
.mo2fa_comparison {
|
655 |
font-size: 18px;
|
656 |
width: 20%;
|
657 |
}
|
|
|
|
|
658 |
.mo2fa_compare1 {
|
659 |
min-width: 22% !important;
|
660 |
width: 10%;
|
661 |
}
|
662 |
-
.mo2fa_tooltip_sms_info {
|
663 |
-
position: relative;
|
664 |
-
display: inline-block;
|
665 |
-
}
|
666 |
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
text-align: left;
|
673 |
-
border-radius: 6px;
|
674 |
-
padding: 7px 6px 8px 10px;
|
675 |
-
position: absolute;
|
676 |
-
z-index: 1;
|
677 |
-
top: 0px;
|
678 |
-
left: 107%;
|
679 |
-
}
|
680 |
-
.mo2fa_tooltip_sms_info .mo2fa_sms_info::after {
|
681 |
-
content: "";
|
682 |
-
position: absolute;
|
683 |
-
top: 50%;
|
684 |
-
right: 100%;
|
685 |
-
margin-top: -5px;
|
686 |
-
border-width: 5px;
|
687 |
-
border-style: solid;
|
688 |
-
border-color: transparent black transparent transparent;
|
689 |
}
|
690 |
-
.
|
691 |
-
|
692 |
}
|
693 |
-
|
694 |
-
|
695 |
-
|
|
|
|
|
|
|
|
|
696 |
}
|
697 |
-
|
698 |
-
|
699 |
-
width:
|
700 |
-
|
701 |
-
color:
|
702 |
-
|
703 |
-
border
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
left: 95%;
|
709 |
}
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
719 |
}
|
720 |
-
|
721 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
722 |
}
|
723 |
|
724 |
-
.
|
725 |
-
|
726 |
-
|
|
|
|
|
|
|
|
|
|
|
727 |
}
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
|
|
|
|
740 |
}
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
|
|
|
|
|
|
750 |
}
|
751 |
-
|
752 |
-
|
|
|
|
|
753 |
}
|
754 |
-
|
755 |
-
|
756 |
-
|
|
|
|
|
|
|
|
|
|
|
757 |
}
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
background-color: #000000b8;
|
762 |
-
color: #fff;
|
763 |
-
text-align: left;
|
764 |
-
border-radius: 6px;
|
765 |
-
padding: 7px 0px 8px 11px;
|
766 |
-
position: absolute;
|
767 |
-
z-index: 1;
|
768 |
-
top: -2.6em;
|
769 |
-
left: 93%;
|
770 |
}
|
771 |
-
.
|
772 |
-
|
773 |
-
position: absolute;
|
774 |
-
top: 50%;
|
775 |
-
right: 100%;
|
776 |
-
margin-top: -5px;
|
777 |
-
border-width: 5px;
|
778 |
-
border-style: solid;
|
779 |
-
border-color: transparent black transparent transparent;
|
780 |
}
|
781 |
-
|
782 |
-
|
|
|
|
|
|
|
|
|
783 |
}
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
}
|
788 |
-
|
789 |
-
|
790 |
-
width:
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
right: 108%;
|
801 |
}
|
802 |
-
|
803 |
-
|
804 |
-
position:
|
805 |
-
|
806 |
-
|
807 |
-
margin-top: -5px;
|
808 |
-
border-width: 5px;
|
809 |
-
border-style: solid;
|
810 |
-
border-color: transparent transparent transparent black;
|
811 |
}
|
812 |
-
.
|
813 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
814 |
}
|
815 |
-
.
|
816 |
-
|
817 |
-
display:
|
|
|
|
|
|
|
|
|
818 |
}
|
819 |
-
.
|
820 |
-
visibility: hidden;
|
821 |
-
width: 17em;
|
822 |
-
background-color: #000000b8;
|
823 |
-
color: #fff;
|
824 |
text-align: left;
|
825 |
-
|
826 |
-
padding: 10px 3px 10px 34px;
|
827 |
-
position: absolute;
|
828 |
-
z-index: 1;
|
829 |
-
top: -2.1em;
|
830 |
-
left: 93%;
|
831 |
}
|
832 |
-
.
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
}
|
842 |
-
|
843 |
-
|
|
|
|
|
844 |
}
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
}
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
z-index: 1;
|
860 |
-
top: -28px;
|
861 |
-
right: 105%;
|
862 |
}
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
left: 100%;
|
868 |
-
margin-top: -5px;
|
869 |
-
border-width: 5px;
|
870 |
-
border-style: solid;
|
871 |
-
border-color: transparent transparent transparent black;
|
872 |
}
|
873 |
-
.
|
874 |
-
|
|
|
|
|
875 |
}
|
876 |
-
.
|
|
|
877 |
position: relative;
|
878 |
-
|
|
|
|
|
879 |
}
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
z-index: 1;
|
891 |
-
top: -1.1em;
|
892 |
-
left: 90%;
|
893 |
}
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
903 |
}
|
904 |
-
|
905 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
906 |
}
|
907 |
-
|
908 |
-
|
|
|
909 |
display: inline-block;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
910 |
}
|
911 |
-
|
912 |
-
|
913 |
-
width: auto;
|
914 |
-
min-width: 10em;
|
915 |
-
background-color: #000000b8;
|
916 |
-
color: #fff;
|
917 |
-
text-align: left;
|
918 |
-
border-radius: 6px;
|
919 |
-
padding: 6px 7px 8px 17px;
|
920 |
-
position: absolute;
|
921 |
-
z-index: 1;
|
922 |
-
top: -17px;
|
923 |
-
right: 110%;
|
924 |
-
}
|
925 |
-
.mo2fa_ent_role_tooltip_methodlist .mo2fa_methodlist::after {
|
926 |
-
content: "";
|
927 |
-
position: absolute;
|
928 |
-
top: 50%;
|
929 |
-
left: 100%;
|
930 |
-
margin-top: -5px;
|
931 |
-
border-width: 5px;
|
932 |
-
border-style: solid;
|
933 |
-
border-color: transparent transparent transparent black;
|
934 |
-
}
|
935 |
-
.mo2fa_ent_role_tooltip_methodlist:hover .mo2fa_methodlist {
|
936 |
-
visibility: visible;
|
937 |
-
}
|
938 |
-
.mo2fa_custom_sms_tooltip_methodlist {
|
939 |
position: relative;
|
940 |
display: inline-block;
|
941 |
}
|
942 |
-
.
|
943 |
visibility: hidden;
|
944 |
-
width:
|
945 |
-
min-width: 16em;
|
946 |
background-color: #000000b8;
|
947 |
color: #fff;
|
948 |
text-align: left;
|
949 |
border-radius: 6px;
|
950 |
-
padding:
|
951 |
position: absolute;
|
952 |
z-index: 1;
|
953 |
-
top: -
|
954 |
-
left:
|
|
|
|
|
955 |
}
|
956 |
-
.
|
957 |
content: "";
|
958 |
position: absolute;
|
959 |
top: 50%;
|
@@ -963,198 +532,342 @@ table.mo2fa_table_features tr:last-child {
|
|
963 |
border-style: solid;
|
964 |
border-color: transparent black transparent transparent;
|
965 |
}
|
966 |
-
.
|
967 |
visibility: visible;
|
968 |
}
|
969 |
-
|
970 |
-
|
971 |
-
|
|
|
|
|
|
|
|
|
|
|
972 |
}
|
973 |
-
.
|
974 |
-
|
975 |
-
width: auto;
|
976 |
-
min-width: 16em;
|
977 |
-
background-color: #000000b8;
|
978 |
-
color: #fff;
|
979 |
-
text-align: left;
|
980 |
-
border-radius: 6px;
|
981 |
-
padding: 7px 0px 8px 21px;
|
982 |
-
position: absolute;
|
983 |
-
z-index: 1;
|
984 |
-
top: -17px;
|
985 |
-
right: 106%;
|
986 |
}
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
}
|
997 |
-
|
998 |
-
|
|
|
|
|
999 |
}
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
|
|
1003 |
}
|
1004 |
-
|
1005 |
-
|
1006 |
-
width:
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
z-index:
|
1014 |
-
|
1015 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1016 |
}
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
border-color: transparent black transparent transparent;
|
1026 |
}
|
1027 |
-
.
|
1028 |
-
|
1029 |
}
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
}
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
border-radius: 6px;
|
1041 |
-
padding: 11px 1px 11px 43px;
|
1042 |
-
position: absolute;
|
1043 |
-
z-index: 1;
|
1044 |
-
top: -26px;
|
1045 |
-
right: 110%;
|
1046 |
}
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
top:
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
border-color: transparent transparent transparent black;
|
1056 |
}
|
1057 |
-
|
1058 |
-
|
|
|
|
|
1059 |
}
|
1060 |
-
|
1061 |
-
|
|
|
|
|
|
|
1062 |
}
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
height: 50%;
|
1067 |
}
|
1068 |
-
|
1069 |
-
|
|
|
1070 |
}
|
1071 |
-
.
|
1072 |
-
margin-
|
1073 |
-
padding: 10% 0% 0% 0%;
|
1074 |
-
color: white;
|
1075 |
-
font-size: 200%;
|
1076 |
}
|
1077 |
-
|
1078 |
-
.
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
box-shadow: 0 1px 2px 0 rgb(60 64 67 / 30%), 0 1px 3px 1px rgb(60 64 67 / 15%);
|
1088 |
}
|
1089 |
|
1090 |
-
@media only screen and (
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
.mo2f_upgrade_main_div {
|
1095 |
-
width: 96%;
|
1096 |
-
margin-bottom: 6em;
|
1097 |
-
height: 93em;
|
1098 |
}
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
|
|
1105 |
}
|
1106 |
-
|
1107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1108 |
}
|
1109 |
-
|
1110 |
-
|
|
|
|
|
|
|
|
|
|
|
1111 |
}
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
|
|
|
|
|
|
|
|
1115 |
}
|
1116 |
-
|
1117 |
-
|
|
|
|
|
|
|
|
|
|
|
1118 |
}
|
1119 |
-
|
1120 |
-
|
|
|
|
|
|
|
|
|
|
|
1121 |
}
|
|
|
|
|
1122 |
}
|
1123 |
-
@media only screen and (min-width:
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
padding: 1em 1em 2em 0em;
|
1128 |
-
margin-top: -13%;
|
1129 |
}
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
|
|
1136 |
}
|
1137 |
-
|
1138 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1139 |
}
|
1140 |
-
|
1141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1142 |
}
|
1143 |
-
|
1144 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1145 |
}
|
1146 |
-
|
1147 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1148 |
}
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
}
|
1160 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
.wp-core-ui select {
|
3 |
padding: 4px 24px 4px 8px;
|
4 |
margin-left: 1em;
|
5 |
}
|
6 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
i.fa-check {
|
8 |
color: black;
|
9 |
margin-left: 2em;
|
25 |
margin-top: 1em;
|
26 |
color: #b6abab;
|
27 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
|
|
|
|
29 |
.mo2fa_upgrade_my_plan {
|
30 |
border: none;
|
31 |
top: 50%;
|
52 |
.mo2fa_plugins {
|
53 |
width: 12%;
|
54 |
}
|
55 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
.mo2fa_make_my_plan_mo {
|
57 |
border: none;
|
58 |
color: white;
|
74 |
.mo2fa_web_sec {
|
75 |
padding: 20px 0;
|
76 |
}
|
77 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
.mo2fa_increase_my_limit {
|
79 |
width: 40%;
|
80 |
color: black;
|
85 |
margin-left: -10px;
|
86 |
margin-right: 3px;
|
87 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
|
|
|
|
|
|
89 |
.mo2fa_more_details_p,
|
90 |
.mo2fa_more_details_p1 {
|
91 |
font-size: 13px;
|
95 |
color: #4545ff;
|
96 |
text-align: center;
|
97 |
}
|
98 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
.mo2fa_payment_p {
|
100 |
font-size: 110%;
|
101 |
}
|
115 |
border-radius: 5px;
|
116 |
width: 70%;
|
117 |
}
|
118 |
+
|
119 |
+
|
120 |
+
.mo2fa_note {
|
121 |
+
font-size: 17px;
|
122 |
}
|
123 |
+
|
124 |
+
|
125 |
+
.mo2fa_bank_transfer {
|
126 |
+
height: 28px;
|
127 |
+
width: auto;
|
128 |
}
|
129 |
+
.mo2fa_category_feature {
|
130 |
+
font-size: 16px;
|
131 |
+
font-weight: 600;
|
132 |
+
padding-bottom: 0.3em;
|
133 |
+
padding-top: 0.3em;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
}
|
135 |
+
|
136 |
.mo2fa_main_category_header {
|
137 |
background: #d5d5d5 !important;
|
138 |
margin-top: 0.3em;
|
139 |
margin-bottom: 0.3em;
|
140 |
}
|
141 |
+
|
142 |
.mo2fa_bg_category_main {
|
143 |
font-size: 17px;
|
144 |
border: 0.5px solid #c1c1c1;
|
171 |
table.mo2fa_table_features tr:last-child {
|
172 |
border-bottom: 1px solid #c1c1c1;
|
173 |
}
|
174 |
+
|
175 |
.mo2fa_hide {
|
176 |
display: none !important;
|
177 |
}
|
179 |
.mo2fa_hide1 {
|
180 |
display: none;
|
181 |
}
|
182 |
+
|
183 |
.mo2fa_comparison {
|
184 |
font-size: 18px;
|
185 |
width: 20%;
|
186 |
}
|
187 |
+
|
188 |
+
|
189 |
.mo2fa_compare1 {
|
190 |
min-width: 22% !important;
|
191 |
width: 10%;
|
192 |
}
|
|
|
|
|
|
|
|
|
193 |
|
194 |
+
|
195 |
+
.mo2fa_table-scrollbar {
|
196 |
+
overflow-y: scroll;
|
197 |
+
overflow-x: scroll;
|
198 |
+
height: 50%;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
}
|
200 |
+
.mo2fa_fa-check {
|
201 |
+
color: #fff !important;
|
202 |
}
|
203 |
+
|
204 |
+
.mo_wpns_upgrade_page_header {
|
205 |
+
margin-top: 0%;
|
206 |
+
padding: 10% 0% 0% 0%;
|
207 |
+
color: white;
|
208 |
+
font-size: 200%;
|
209 |
+
line-height:1.5em;
|
210 |
}
|
211 |
+
|
212 |
+
.mo_wpns_upgrade_security_title {
|
213 |
+
width: 23%;
|
214 |
+
min-height: 480px;
|
215 |
+
background-color: white;
|
216 |
+
float: left;
|
217 |
+
border: none;
|
218 |
+
border-top: none;
|
219 |
+
margin-bottom: 1em;
|
220 |
+
border-radius: 1em 1em 0.5em 0.5em;
|
221 |
+
box-shadow: 0 1px 2px 0 rgb(60 64 67 / 30%), 0 1px 3px 1px rgb(60 64 67 / 15%);
|
|
|
222 |
}
|
223 |
+
|
224 |
+
@media only screen and (max-width: 600px) {
|
225 |
+
|
226 |
+
|
227 |
+
.mo2fa_compare1 {
|
228 |
+
width: 101%;
|
229 |
+
margin-top: -2em;
|
230 |
+
}
|
231 |
+
|
232 |
+
.mo_2fa_card-deck {
|
233 |
+
display: block;
|
234 |
+
}
|
235 |
+
.mo_2fa_card {
|
236 |
+
width: 98%;
|
237 |
+
}
|
238 |
+
.mo2f_upgrade_toggle_lable {
|
239 |
+
font-size: 1em;
|
240 |
+
width: 12em;
|
241 |
+
}
|
242 |
+
.mo_wpns_upgrade_security_title {
|
243 |
+
width: 97%;
|
244 |
+
}
|
245 |
+
.mo_ns_features_only {
|
246 |
+
display: grid;
|
247 |
+
}
|
248 |
}
|
249 |
+
@media only screen and (min-width: 768px) and (max-width: 1024px) {
|
250 |
+
|
251 |
+
|
252 |
+
.mo2fa_increase_my_limit {
|
253 |
+
width: 6em;
|
254 |
+
}
|
255 |
+
|
256 |
+
|
257 |
+
.mo2fa_upgrade_my_plan {
|
258 |
+
border: none;
|
259 |
+
color: white;
|
260 |
+
padding: 15px 32px;
|
261 |
+
width: auto;
|
262 |
+
min-width: 50%;
|
263 |
+
border-radius: 26px;
|
264 |
+
text-align: center;
|
265 |
+
text-decoration: none;
|
266 |
+
display: inline-block;
|
267 |
+
}
|
268 |
}
|
269 |
|
270 |
+
.mo2f-cloud-onprem-solution {
|
271 |
+
text-align: center;
|
272 |
+
color: black;
|
273 |
+
padding: 0.4167em;
|
274 |
+
border-radius: 1em;
|
275 |
+
z-index: 1;
|
276 |
+
margin-right: 0.5em;
|
277 |
+
margin-left: 0.5em;
|
278 |
}
|
279 |
+
|
280 |
+
.mo2f-ribbon-title{
|
281 |
+
font-size:1.6667em;
|
282 |
+
padding-top: 0.4em;
|
283 |
+
}
|
284 |
+
.mo2f-cloud-solution-ribbon{
|
285 |
+
background-color: #c7e8f1;
|
286 |
+
background-color: #1d66ff2e;
|
287 |
+
border-radius: 0.7500em;
|
288 |
+
width: 49.5%;
|
289 |
+
box-shadow: rgba(0, 0, 0, 0.18) 0px 2px 4px;
|
290 |
+
padding-top:1.2500em;
|
291 |
+
float: left;
|
292 |
+
|
293 |
}
|
294 |
+
|
295 |
+
.mo2f-on-prem-ribbon{
|
296 |
+
background-color:#c7e8f1;
|
297 |
+
background-color: #1d66ff2e;
|
298 |
+
border-radius:0.7500em;
|
299 |
+
width: 48.5%;
|
300 |
+
margin-left: 1em;
|
301 |
+
box-shadow: rgba(0, 0, 0, 0.18) 0px 2px 4px;
|
302 |
+
|
303 |
+
padding-top:1.2500em;
|
304 |
+
float: left;
|
305 |
+
|
306 |
}
|
307 |
+
|
308 |
+
.mo2f-upper-row {
|
309 |
+
margin-left: 1em;
|
310 |
+
margin-right: 1em;
|
311 |
}
|
312 |
+
|
313 |
+
.mo2f-cloud-onprem-solution {
|
314 |
+
text-align: center;
|
315 |
+
color: black;
|
316 |
+
padding: 0.4167em;
|
317 |
+
border-radius: 1em;
|
318 |
+
z-index: 1;
|
319 |
+
|
320 |
}
|
321 |
+
|
322 |
+
.mo2f-text-center {
|
323 |
+
text-align: center;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
324 |
}
|
325 |
+
.mo2f-single-site-rot {
|
326 |
+
transform: rotateY(0deg);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
327 |
}
|
328 |
+
|
329 |
+
.mo2f-single-site {
|
330 |
+
width: 100%;
|
331 |
+
display: flex;
|
332 |
+
justify-content: center;
|
333 |
+
|
334 |
}
|
335 |
+
|
336 |
+
.mo2f-single-site {
|
337 |
+
flex-direction: row;
|
338 |
}
|
339 |
+
|
340 |
+
.mo2f-hover-2fa {
|
341 |
+
width: 25%;
|
342 |
+
border-radius: 0.8333em;
|
343 |
+
margin: 0.3em;
|
344 |
+
background:rgb(255, 255, 255); ;
|
345 |
+
padding-right: 1.25em;
|
346 |
+
padding-left: 1.25em;
|
347 |
+
float:left;
|
348 |
+
font-family:'Poppins', sans-serif;
|
349 |
+
font-size: 1em;
|
350 |
+
box-shadow: rgb(0 0 0 / 20%) 0px 0.75em 1.75em 0em, rgb(0 0 0 / 10%) 0em 0.125em 0.25em 0em, rgb(255 255 255 / 5%) 0em 0em 0em 0.0625em inset;
|
|
|
351 |
}
|
352 |
+
|
353 |
+
.mo2f-col-me-4{
|
354 |
+
position: relative;
|
355 |
+
min-height: 0.0625em;
|
356 |
+
|
|
|
|
|
|
|
|
|
357 |
}
|
358 |
+
.mo2f-hover-2fa h3{
|
359 |
+
font-family:Arial, Helvetica, sans-serif;
|
360 |
+
font-weight: 700;
|
361 |
+
font-size:2.1666em;
|
362 |
+
text-transform: none;
|
363 |
+
letter-spacing: 0.2px;
|
364 |
+
color: #585858;
|
365 |
+
text-rendering: optimizeLegibility;
|
366 |
+
margin-block-start: 1em;
|
367 |
+
margin-block-end: 1em;
|
368 |
+
margin-inline-start: 0px;
|
369 |
+
margin-inline-end: 0px;
|
370 |
+
margin-bottom:0.8em;
|
371 |
+
margin-top: 0.8em;
|
372 |
+
}
|
373 |
+
.mo2f-price-list1 {
|
374 |
+
|
375 |
+
border-top: 0.0625em solid #fff;
|
376 |
+
border-bottom: 0.0625em solid #fff;
|
377 |
+
font-size: 1.2em;
|
378 |
+
background: white;
|
379 |
+
|
380 |
}
|
381 |
+
.mo2f-price-list1 .mo2f-choose-plan-2fa {
|
382 |
+
|
383 |
+
display: block;
|
384 |
+
font-family:'Open sans', sans-serif !important;
|
385 |
+
font-weight: 300;
|
386 |
+
color: rgb(105, 100, 100);
|
387 |
+
|
388 |
}
|
389 |
+
.mo2f-text-left {
|
|
|
|
|
|
|
|
|
390 |
text-align: left;
|
391 |
+
|
|
|
|
|
|
|
|
|
|
|
392 |
}
|
393 |
+
.mo2f-hover-2fa.fas {
|
394 |
+
font-weight: 900;
|
395 |
+
font-family:'Open sans', sans-serif !important;
|
396 |
+
-webkit-font-smoothing: antialiased;
|
397 |
+
display: inline-block;
|
398 |
+
font-style: normal;
|
399 |
+
font-variant: normal;
|
400 |
+
text-rendering: auto;
|
401 |
+
line-height: 1;
|
402 |
}
|
403 |
+
|
404 |
+
|
405 |
+
.mo2f-text-success {
|
406 |
+
color: #1d66ff;
|
407 |
}
|
408 |
+
|
409 |
+
.mo2f-hover-2fa .fa-xs {
|
410 |
+
font-size: .75em;
|
411 |
}
|
412 |
+
|
413 |
+
.mo2f-mt {
|
414 |
+
margin-top: 0.5em;
|
415 |
+
margin-bottom: 2em;
|
416 |
+
margin: 0 0 0.625em;
|
417 |
+
display: block;
|
418 |
+
margin-block-start: 1em;
|
419 |
+
margin-block-end: 1em;
|
420 |
+
margin-inline-start: 0px;
|
421 |
+
margin-inline-end: 0px;
|
|
|
|
|
|
|
422 |
}
|
423 |
+
|
424 |
+
.mo2f-display-1 {
|
425 |
+
font-size: 2.0em;
|
426 |
+
font-weight: 200;
|
|
|
|
|
|
|
|
|
|
|
427 |
}
|
428 |
+
.mo2f-year {
|
429 |
+
font-size: 12px;
|
430 |
+
font-weight: 500;
|
431 |
+
color: black;
|
432 |
}
|
433 |
+
.mo2f-hover-2fa sub {
|
434 |
+
bottom: -0.25em;
|
435 |
position: relative;
|
436 |
+
|
437 |
+
line-height: 0;
|
438 |
+
vertical-align: baseline;
|
439 |
}
|
440 |
+
|
441 |
+
.mo2f-inst-btn2 {
|
442 |
+
background-color: #fff;
|
443 |
+
padding: 3%;
|
444 |
+
border-radius: 8%;
|
445 |
+
height: 1%;
|
446 |
+
min-height: 2.0625em;
|
447 |
+
width: fit-content;
|
448 |
+
margin:5%;
|
449 |
+
|
|
|
|
|
|
|
450 |
}
|
451 |
+
|
452 |
+
.mo2f-mt select{
|
453 |
+
font-family: inherit;
|
454 |
+
font-size: inherit;
|
455 |
+
line-height: inherit;
|
456 |
+
text-transform: none;
|
457 |
+
margin: 0;
|
458 |
+
font: inherit;
|
459 |
+
color: inherit;
|
460 |
+
outline: 0;
|
461 |
+
text-align: left;
|
462 |
+
vertical-align: top;
|
463 |
+
box-shadow: none!important;
|
464 |
+
border: 1px solid #E9E9E9;
|
465 |
+
background: #f5f5f5;
|
466 |
+
writing-mode: horizontal-tb !important;
|
467 |
+
text-rendering: auto;
|
468 |
+
letter-spacing: normal;
|
469 |
+
word-spacing: normal;
|
470 |
+
text-indent: 0px;
|
471 |
+
text-shadow: none;
|
472 |
+
display: inline-block;
|
473 |
+
appearance: auto;
|
474 |
+
align-items: center;
|
475 |
+
white-space: pre;
|
476 |
+
-webkit-rtl-ordering: logical;
|
477 |
+
cursor: default;
|
478 |
+
|
479 |
}
|
480 |
+
|
481 |
+
.mo2f-license-btn-2fa {
|
482 |
+
color: #1d66ff!important;
|
483 |
+
font-size: 1.2em;
|
484 |
+
padding:0.625em 1.875em 0.625em 1.875em;
|
485 |
+
border-radius: 0.5625em;
|
486 |
+
background: #e3ecfe;
|
487 |
+
font-weight: 600;
|
488 |
+
box-shadow: rgb(50 50 105 / 15%) 0em 0.125em 0.3125em 0em, rgb(0 0 0 / 5%) 0em 0.0625em 0.0625em 0em;
|
489 |
}
|
490 |
+
|
491 |
+
.mo2f-license-btn {
|
492 |
+
|
493 |
display: inline-block;
|
494 |
+
margin-bottom:2em;
|
495 |
+
line-height: 1.42857143;
|
496 |
+
text-align: center;
|
497 |
+
white-space: nowrap;
|
498 |
+
vertical-align: middle;
|
499 |
+
touch-action: manipulation;
|
500 |
+
cursor: pointer;
|
501 |
+
user-select: none;
|
502 |
+
border:0.0625em solid transparent;
|
503 |
+
|
504 |
}
|
505 |
+
|
506 |
+
.mo2fa_15_tooltip_methodlist {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
position: relative;
|
508 |
display: inline-block;
|
509 |
}
|
510 |
+
.mo2fa_15_tooltip_methodlist .mo2fa_methodlist {
|
511 |
visibility: hidden;
|
512 |
+
width: 12em;
|
|
|
513 |
background-color: #000000b8;
|
514 |
color: #fff;
|
515 |
text-align: left;
|
516 |
border-radius: 6px;
|
517 |
+
padding: 11px 12px 11px 23px;
|
518 |
position: absolute;
|
519 |
z-index: 1;
|
520 |
+
top: -2em;
|
521 |
+
left: 100%;
|
522 |
+
margin-left:-6em;
|
523 |
+
|
524 |
}
|
525 |
+
.mo2fa_15_tooltip_methodlist .mo2fa_methodlist::after {
|
526 |
content: "";
|
527 |
position: absolute;
|
528 |
top: 50%;
|
532 |
border-style: solid;
|
533 |
border-color: transparent black transparent transparent;
|
534 |
}
|
535 |
+
.mo2fa_15_tooltip_methodlist:hover .mo2fa_methodlist {
|
536 |
visibility: visible;
|
537 |
}
|
538 |
+
|
539 |
+
.mo2f-license-btn-2fa:hover{
|
540 |
+
box-shadow: rgba(136, 165, 191, 0.48) 0.375em 0.125em 1em 0em, rgba(255, 255, 255, 0.8) -0.375em -0.125em 1em 0em;
|
541 |
+
}
|
542 |
+
.mo2f-container-dropdown{
|
543 |
+
align-items:left;
|
544 |
+
margin-top: -1.5em;
|
545 |
+
|
546 |
}
|
547 |
+
.mo2f-dropdown-width{
|
548 |
+
width:8em;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
549 |
}
|
550 |
+
|
551 |
+
.mo2f-price-list .mo2f-choose-plan-2fa {
|
552 |
+
display: block;
|
553 |
+
font-family:'Open sans', sans-serif !important;
|
554 |
+
font-style:normal;
|
555 |
+
font-variant: normal;
|
556 |
+
font-weight: 300;
|
557 |
+
color: rgb(105, 100, 100);
|
558 |
+
|
559 |
}
|
560 |
+
|
561 |
+
.mo2f-premium-color {
|
562 |
+
color: #96df8a!important;
|
563 |
+
font-weight: bold!important;
|
564 |
}
|
565 |
+
|
566 |
+
.mo2f-basic-color {
|
567 |
+
color: #ffc06d!important;
|
568 |
+
font-weight: bold!important;
|
569 |
}
|
570 |
+
|
571 |
+
.mo2f-price-tag {
|
572 |
+
width: 9em;
|
573 |
+
display: flex;
|
574 |
+
justify-content: center;
|
575 |
+
align-items: center;
|
576 |
+
height: 2.9375em;
|
577 |
+
border-radius: 0.5em 0.5em 0 0.5em;
|
578 |
+
background: #46a9f4;
|
579 |
+
z-index: 99;
|
580 |
+
position: absolute;
|
581 |
+
top: -1.8em;
|
582 |
+
left: 68%;
|
583 |
+
}
|
584 |
+
.mo2f-price {
|
585 |
+
color: #fff;
|
586 |
+
font-size: 1.2em;
|
587 |
+
list-style-type: none;
|
588 |
+
margin: 0;
|
589 |
+
padding: 0;
|
590 |
+
transition: .3s;
|
591 |
}
|
592 |
+
|
593 |
+
.mo2f-price-list {
|
594 |
+
|
595 |
+
border-top: 0.0625em solid #fff;
|
596 |
+
border-bottom: 0.0625em solid #fff;
|
597 |
+
font-size: 1.2em;
|
598 |
+
background: white;
|
599 |
+
|
|
|
600 |
}
|
601 |
+
.mo2f-price-list li{
|
602 |
+
margin-bottom:0.1875em;
|
603 |
}
|
604 |
+
|
605 |
+
.mo2f-plan-head-2fa {
|
606 |
+
text-align: center;
|
607 |
}
|
608 |
+
|
609 |
+
.mo2f-plan-head-2fa {
|
610 |
+
color: #000000;
|
611 |
+
font-weight: unset;
|
612 |
+
margin-bottom: 0.7em;
|
613 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
614 |
}
|
615 |
+
|
616 |
+
#mo2f_twofa_plans h2{
|
617 |
+
font-family:'Open sans', sans-serif !important;
|
618 |
+
margin-top:0.75em;
|
619 |
+
font-size: 2.5em;
|
620 |
+
line-height: 2.1875em;
|
621 |
+
text-transform: none;
|
622 |
+
letter-spacing: 0.0125em;
|
|
|
623 |
}
|
624 |
+
|
625 |
+
.mo2f-pp-row {
|
626 |
+
margin-right: 0.9375em;
|
627 |
+
margin-left: 0.9375em;
|
628 |
}
|
629 |
+
|
630 |
+
|
631 |
+
|
632 |
+
.mo2f-price-list-incl {
|
633 |
+
background: linear-gradient(145deg, #fafbfe,#e3ecfe);
|
634 |
}
|
635 |
+
|
636 |
+
#mo2f-list-margin li span{
|
637 |
+
margin-left: -0.625em;
|
|
|
638 |
}
|
639 |
+
|
640 |
+
#mo2fa-plan-name h3{
|
641 |
+
font-size:1.75em;
|
642 |
}
|
643 |
+
#mo2f-list-margin li .mo2fa_15_tooltip_methodlist span{
|
644 |
+
margin-left:-0.925em;
|
|
|
|
|
|
|
645 |
}
|
646 |
+
.mo2f_price_list_border{
|
647 |
+
box-shadow: rgb(3 102 214 / 30%) 0em 0em 0em 0.1875em;
|
648 |
+
border-radius: 0.625em;
|
649 |
+
padding-left: 0.625em;
|
650 |
+
padding-right:0.625em;
|
651 |
+
padding-bottom:0.1em;
|
652 |
+
|
653 |
+
}
|
654 |
+
.mo2f-reg-plans-2fa{
|
655 |
+
letter-spacing: 0.3px;
|
|
|
656 |
}
|
657 |
|
658 |
+
@media only screen and (min-width: 2350px)
|
659 |
+
{
|
660 |
+
.mo2f_price_list_border{
|
661 |
+
height:18em;
|
|
|
|
|
|
|
|
|
662 |
}
|
663 |
+
|
664 |
+
|
665 |
+
}
|
666 |
+
@media only screen and (min-width: 2150px)and (max-width:2350px)
|
667 |
+
{
|
668 |
+
.mo2f_price_list_border{
|
669 |
+
height:19.5em;
|
670 |
}
|
671 |
+
|
672 |
+
|
673 |
+
}
|
674 |
+
|
675 |
+
@media only screen and (min-width: 1950px)and (max-width:2150px)
|
676 |
+
{
|
677 |
+
.mo2f_price_list_border{
|
678 |
+
height:20.8em;
|
679 |
}
|
680 |
+
|
681 |
+
|
682 |
+
}
|
683 |
+
@media only screen and (min-width: 1750px)and (max-width:1950px)
|
684 |
+
{
|
685 |
+
.mo2f_price_list_border{
|
686 |
+
height:21em;
|
687 |
}
|
688 |
+
|
689 |
+
|
690 |
+
}
|
691 |
+
@media only screen and (min-width: 1550px)and (max-width:1750px)
|
692 |
+
{
|
693 |
+
.mo2f_price_list_border{
|
694 |
+
height:22em;
|
695 |
}
|
696 |
+
|
697 |
+
|
698 |
+
}
|
699 |
+
@media only screen and (min-width: 1400px)and (max-width:1550px)
|
700 |
+
{
|
701 |
+
.mo2f_price_list_border{
|
702 |
+
height:24.5em;
|
703 |
}
|
704 |
+
|
705 |
+
|
706 |
+
}
|
707 |
+
@media only screen and (min-width: 1300px)and (max-width:1400px)
|
708 |
+
{
|
709 |
+
.mo2f_price_list_border{
|
710 |
+
height:25.5em;
|
711 |
}
|
712 |
+
|
713 |
+
|
714 |
}
|
715 |
+
@media only screen and (min-width: 1200px)and (max-width:1300px)
|
716 |
+
{
|
717 |
+
.mo2f_price_list_border{
|
718 |
+
height:28.5em;
|
|
|
|
|
719 |
}
|
720 |
+
|
721 |
+
|
722 |
+
}
|
723 |
+
@media only screen and (min-width: 1000px)and (max-width:1200px)
|
724 |
+
{
|
725 |
+
.mo2f_price_list_border{
|
726 |
+
height:31em;
|
727 |
}
|
728 |
+
|
729 |
+
|
730 |
+
}
|
731 |
+
|
732 |
+
@media only screen and (min-width:769px)and (max-width:1000px)
|
733 |
+
{
|
734 |
+
.mo2f_price_list_border{
|
735 |
+
height:31.5em;
|
736 |
}
|
737 |
+
|
738 |
+
|
739 |
+
}
|
740 |
+
|
741 |
+
@media screen and (max-width: 550px){
|
742 |
+
.mo2f-cloud-solution-ribbon-rpn {
|
743 |
+
text-align: center;
|
744 |
+
color: black;
|
745 |
+
padding: 5px;
|
746 |
+
border-radius: 1em;
|
747 |
+
margin-bottom: 0.5em;
|
748 |
+
z-index: 1;
|
749 |
+
background-color: #ebf1fa;
|
750 |
+
border-radius: 9px;
|
751 |
+
width: 100%;
|
752 |
+
box-shadow: rgb(0 0 0 / 18%) 0px 2px 4px;
|
753 |
+
display: block;
|
754 |
+
}
|
755 |
+
|
756 |
+
}
|
757 |
+
@media screen and (min-width:550px){
|
758 |
+
.mo2f-cloud-solution-ribbon-rpn{
|
759 |
+
display: none;
|
760 |
}
|
761 |
+
}
|
762 |
+
@media screen and (max-width: 550px){
|
763 |
+
.mo2f-ribbon-title {
|
764 |
+
font-size: 20px;
|
765 |
+
padding-top: 0.4em;
|
766 |
+
}
|
767 |
+
|
768 |
+
.mo2f-single-site {
|
769 |
+
flex-direction: column;
|
770 |
+
}
|
771 |
+
}
|
772 |
+
|
773 |
+
@media screen and (max-width: 550px){
|
774 |
+
.mo2f-cloud-solution-ribbon {
|
775 |
+
display: none;
|
776 |
+
}
|
777 |
+
}
|
778 |
+
|
779 |
+
.mo2f-col-md-4{
|
780 |
+
|
781 |
+
position: relative;
|
782 |
+
|
783 |
+
|
784 |
+
}
|
785 |
+
@media screen and (max-width: 550px){
|
786 |
+
.mo2f-on-prem-ribbon {
|
787 |
+
display: none;
|
788 |
+
}
|
789 |
+
.mo2f-price-tag{
|
790 |
+
left:75%;
|
791 |
+
}
|
792 |
+
}
|
793 |
+
@media screen and (max-width: 550px){
|
794 |
+
.mo2f-hover-2fa {
|
795 |
+
width: 90%;
|
796 |
+
border-radius: 10px;
|
797 |
+
height: auto;
|
798 |
+
border: 5px solid white;
|
799 |
+
font-family: 'Poppins', sans-serif;
|
800 |
+
margin-bottom: 1em;
|
801 |
+
margin-top: 1em;
|
802 |
+
box-shadow: rgb(0 0 0 / 20%) 0px 12px 28px 0px, rgb(0 0 0 / 10%) 0px 2px 4px 0px, rgb(255 255 255 / 5%) 0px 0px 0px 1px inset;
|
803 |
+
}
|
804 |
+
}
|
805 |
+
|
806 |
+
@media screen and (max-width: 550px){
|
807 |
+
.mo2f-price-list {
|
808 |
+
border-top: 1px solid #fff;
|
809 |
+
border-bottom: 1px solid #fff;
|
810 |
+
font-size: 1.4em;
|
811 |
+
background: white;
|
812 |
+
border-radius: 10px;
|
813 |
+
height: auto;
|
814 |
+
box-shadow: rgb(3 102 214 / 30%) 0px 0px 0px 3px;
|
815 |
+
|
816 |
+
}
|
817 |
+
}
|
818 |
+
|
819 |
+
@media screen and (max-width: 550px){
|
820 |
+
.mo2f-on-prem-ribbon-rpn {
|
821 |
+
text-align: center;
|
822 |
+
color: black;
|
823 |
+
padding: 5px;
|
824 |
+
border-radius: 1em;
|
825 |
+
margin-bottom: 0.5em;
|
826 |
+
z-index: 1;
|
827 |
+
background-color: #ebf1fa;
|
828 |
+
border-radius: 9px;
|
829 |
+
width: 94%;
|
830 |
+
margin-left:8px;
|
831 |
+
box-shadow: rgb(0 0 0 / 18%) 0px 2px 4px;
|
832 |
+
display: block;
|
833 |
+
}
|
834 |
+
}
|
835 |
+
@media screen and (min-width:550px){
|
836 |
+
.mo2f-on-prem-ribbon-rpn{
|
837 |
+
display: none;
|
838 |
}
|
839 |
+
|
840 |
+
}
|
841 |
+
@media screen and (max-width:550px){
|
842 |
+
.mo2fa_15_tooltip_methodlist .mo2fa_methodlist {
|
843 |
+
visibility: hidden;
|
844 |
+
width: 12em;
|
845 |
+
background-color: #000000b8;
|
846 |
+
color: #fff;
|
847 |
+
text-align: left;
|
848 |
+
border-radius: 0.375em;
|
849 |
+
padding: 0.6875em 0.75em 0.6875em 1.4375em;
|
850 |
+
position: absolute;
|
851 |
+
z-index: 1;
|
852 |
+
top: 4em;
|
853 |
+
left:2%;
|
854 |
+
line-height:1.4em;
|
855 |
+
|
856 |
}
|
857 |
+
|
858 |
+
.mo2fa_15_tooltip_methodlist .mo2fa_methodlist::after {
|
859 |
+
content: "";
|
860 |
+
position: absolute;
|
861 |
+
top: -3%;
|
862 |
+
left: 50%;
|
863 |
+
margin-left: -0.3125em;
|
864 |
+
border-width: 0.3125em;
|
865 |
+
border-style: solid;
|
866 |
+
border-color: transparent transparent black transparent;
|
867 |
}
|
868 |
}
|
869 |
+
|
870 |
+
|
871 |
+
.mo2fa-top-auth-unbold {
|
872 |
+
font-weight:400;
|
873 |
+
}
|
includes/js/settings_page.js
CHANGED
@@ -101,12 +101,6 @@ jQuery(document).ready(function () {
|
|
101 |
ajaxCall("dismissplugin",".plugin_warning_hide-notice",true);
|
102 |
});
|
103 |
|
104 |
-
|
105 |
-
|
106 |
-
$(".dismiss_website_backup_notice").click(function(){
|
107 |
-
ajaxCall("dismissbackup",".plugin_warning_hide-notice",true);
|
108 |
-
});
|
109 |
-
|
110 |
|
111 |
$(".dismiss_brute_force_notice").click(function(){
|
112 |
ajaxCall("dismissbruteforce",".plugin_warning_hide-notice",true);
|
101 |
ajaxCall("dismissplugin",".plugin_warning_hide-notice",true);
|
102 |
});
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
|
105 |
$(".dismiss_brute_force_notice").click(function(){
|
106 |
ajaxCall("dismissbruteforce",".plugin_warning_hide-notice",true);
|
miniorange_2_factor_settings.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: miniOrange 2 Factor Authentication
|
4 |
* Plugin URI: https://miniorange.com
|
5 |
* Description: This TFA plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 3 User in the free version of the plugin.
|
6 |
-
* Version: 5.6.
|
7 |
* Author: miniOrange
|
8 |
* Author URI: https://miniorange.com
|
9 |
* Text Domain: miniorange-2-factor-authentication
|
@@ -14,7 +14,7 @@
|
|
14 |
require dirname(__FILE__).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'email-IPaddress.php';
|
15 |
|
16 |
define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
|
17 |
-
define( 'MO2F_VERSION', '5.6.
|
18 |
define( 'MO2F_PLUGIN_URL', (plugin_dir_url(__FILE__)));
|
19 |
define( 'MO2F_TEST_MODE', false );
|
20 |
define( 'MO2F_IS_ONPREM', get_option('is_onprem'));
|
@@ -298,7 +298,7 @@
|
|
298 |
{
|
299 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'Firewall' ,'administrator','mo_2fa_waf' , array( $this, 'mo_wpns'),3);
|
300 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'Login and Spam' ,'administrator','mo_2fa_login_and_spam' , array( $this, 'mo_wpns'),4);
|
301 |
-
|
302 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'Malware Scan' ,'administrator','mo_2fa_malwarescan' , array( $this, 'mo_wpns'),6);
|
303 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'IP Blocking' ,'administrator','mo_2fa_advancedblocking' , array( $this, 'mo_wpns'),7);
|
304 |
|
@@ -352,7 +352,7 @@
|
|
352 |
function mo_wpns_activate()
|
353 |
{
|
354 |
|
355 |
-
global $wpnsDbQueries,$Mo2fdbQueries;
|
356 |
$userid = wp_get_current_user()->ID;
|
357 |
$wpnsDbQueries->mo_plugin_activate();
|
358 |
$Mo2fdbQueries->mo_plugin_activate();
|
@@ -378,6 +378,11 @@
|
|
378 |
if(is_multisite()){
|
379 |
add_site_option('mo2fa_superadmin',1);
|
380 |
}
|
|
|
|
|
|
|
|
|
|
|
381 |
MO2f_Utility::mo2f_debug_file('Plugin activated');
|
382 |
|
383 |
|
@@ -550,8 +555,7 @@
|
|
550 |
require('api/class-customer-onprem-setup.php');
|
551 |
require('api/class-rba-attributes.php');
|
552 |
require('api/class-two-factor-setup.php');
|
553 |
-
|
554 |
-
require('handler/backup.php');
|
555 |
require('handler/WAF/mo-waf-real-time.php');
|
556 |
require('handler/security_features.php');
|
557 |
require('handler/feedback_form.php');
|
@@ -575,7 +579,6 @@
|
|
575 |
require('controllers/wpns-loginsecurity-ajax.php');
|
576 |
require('controllers/malware_scanner/malware_scan_ajax.php');
|
577 |
require('controllers/duo_authenticator/duo_authenticator_ajax.php');
|
578 |
-
require('controllers/backup/backup_ajax.php');
|
579 |
|
580 |
require('controllers/twofa/two_factor_ajax.php');
|
581 |
require('controllers/dashboard_ajax.php');
|
3 |
* Plugin Name: miniOrange 2 Factor Authentication
|
4 |
* Plugin URI: https://miniorange.com
|
5 |
* Description: This TFA plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 3 User in the free version of the plugin.
|
6 |
+
* Version: 5.6.2
|
7 |
* Author: miniOrange
|
8 |
* Author URI: https://miniorange.com
|
9 |
* Text Domain: miniorange-2-factor-authentication
|
14 |
require dirname(__FILE__).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'email-IPaddress.php';
|
15 |
|
16 |
define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
|
17 |
+
define( 'MO2F_VERSION', '5.6.2' );
|
18 |
define( 'MO2F_PLUGIN_URL', (plugin_dir_url(__FILE__)));
|
19 |
define( 'MO2F_TEST_MODE', false );
|
20 |
define( 'MO2F_IS_ONPREM', get_option('is_onprem'));
|
298 |
{
|
299 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'Firewall' ,'administrator','mo_2fa_waf' , array( $this, 'mo_wpns'),3);
|
300 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'Login and Spam' ,'administrator','mo_2fa_login_and_spam' , array( $this, 'mo_wpns'),4);
|
301 |
+
|
302 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'Malware Scan' ,'administrator','mo_2fa_malwarescan' , array( $this, 'mo_wpns'),6);
|
303 |
add_submenu_page( $menu_slug ,'miniOrange 2-Factor' ,'IP Blocking' ,'administrator','mo_2fa_advancedblocking' , array( $this, 'mo_wpns'),7);
|
304 |
|
352 |
function mo_wpns_activate()
|
353 |
{
|
354 |
|
355 |
+
global $wpnsDbQueries,$Mo2fdbQueries,$wp_roles;
|
356 |
$userid = wp_get_current_user()->ID;
|
357 |
$wpnsDbQueries->mo_plugin_activate();
|
358 |
$Mo2fdbQueries->mo_plugin_activate();
|
378 |
if(is_multisite()){
|
379 |
add_site_option('mo2fa_superadmin',1);
|
380 |
}
|
381 |
+
if (isset($wp_roles)){
|
382 |
+
foreach($wp_roles->role_names as $role => $name) {
|
383 |
+
update_option('mo2fa_'.$role, 1);
|
384 |
+
}
|
385 |
+
}
|
386 |
MO2f_Utility::mo2f_debug_file('Plugin activated');
|
387 |
|
388 |
|
555 |
require('api/class-customer-onprem-setup.php');
|
556 |
require('api/class-rba-attributes.php');
|
557 |
require('api/class-two-factor-setup.php');
|
558 |
+
|
|
|
559 |
require('handler/WAF/mo-waf-real-time.php');
|
560 |
require('handler/security_features.php');
|
561 |
require('handler/feedback_form.php');
|
579 |
require('controllers/wpns-loginsecurity-ajax.php');
|
580 |
require('controllers/malware_scanner/malware_scan_ajax.php');
|
581 |
require('controllers/duo_authenticator/duo_authenticator_ajax.php');
|
|
|
582 |
|
583 |
require('controllers/twofa/two_factor_ajax.php');
|
584 |
require('controllers/dashboard_ajax.php');
|
readme.txt
CHANGED
@@ -6,7 +6,7 @@ Donate link: https://miniorange.com/
|
|
6 |
Requires at least: 3.0.1
|
7 |
Tested up to: 6.0.2
|
8 |
Requires PHP: 5.3.0
|
9 |
-
Stable tag: 5.6.
|
10 |
License: GPLv2 or later
|
11 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
12 |
|
@@ -20,7 +20,7 @@ USERS DON'T REQUIRE ACCESS TO THE WORDPRESS DASHBOARD TO SET UP 2FA making it ex
|
|
20 |
|
21 |
Check out following video to configure google authenticator as a 2fa:
|
22 |
|
23 |
-
[youtube https://youtu.be/
|
24 |
|
25 |
[Features](https://plugins.miniorange.com/2-factor-authentication-for-wordpress-wp-2fa?utm_source=wordpress&utm_medium=readme+link&utm_campaign=last+June#key-features) | [7 day Premium trial](https://plugins.miniorange.com/wordpress-2fa-free-trial-request)
|
26 |
|
@@ -60,9 +60,9 @@ Users will receive an OTP at the time of registration which will be used to veri
|
|
60 |
= Plugin Integrations and Support for all methods of two-factor authentication/two step verification ( WP 2FA/TFA/OTP Authentication ) =
|
61 |
Our plugin is integrated with [popular Plugins](https://plugins.miniorange.com/2-factor-authentication-for-wordpress-wp-2fa#integrations) such as [WooCommerce](https://developers.miniorange.com/docs/security/wordpress/wp-security/2fa_on_woocomerce_login), [Ultimate member](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-ultimate-member-login-form), [User Registration](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-user-registration-login-form), [Restrict Content Pro](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-restrict-content-pro-login-form), [Login Press](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-login-press-login-form), [Registration Magic](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-registrationmagic-form), [Admin Custom Login](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-admin-custom-login-form), [Buddy Press](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-buddypress-login-form), [Theme My Login](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-theme-my-login-form), [Elementor Pro](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-elementor-pro-login-form), [Profile Builder](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-profile-builder-login-form), [Login With Ajax](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-login-with-ajax-form) and many more.
|
62 |
|
63 |
-
=
|
64 |
The premium plugin supports any third-party **custom SMS Gateway**. If you don't have your SMS gateway you can use miniOrange gateway and send SMS(OTP over SMS) all over the world for OTP authentication.
|
65 |
-
[Here](https://plugins.miniorange.com/
|
66 |
[Test your Gateway](https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig)
|
67 |
|
68 |
= Why do you need to register for google authenticator? =
|
@@ -219,25 +219,27 @@ You should go to <b>Setup Two-Factor (2FA) </b> Tab and click on <b>Reconfigure<
|
|
219 |
|
220 |
== Changelog ==
|
221 |
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
= 5.6.1 =
|
223 |
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
224 |
* Bug fix- Headers already sent
|
225 |
* Added SMTP check for sending backup codes on 2fa prompt
|
226 |
|
227 |
-
= 5.6.0 =
|
228 |
-
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
229 |
-
* Added new feature - the grace period for users
|
230 |
-
* Updated setup wizard UI - Included user-based settings in the wizard
|
231 |
-
* Added dashboard to check 2fa status of users
|
232 |
-
* Login report of users available even when Network Security is disabled
|
233 |
-
* Handled backup codes flow when sitestats is unreachable
|
234 |
-
* Added access control and nonce checks in some flows - Malware scan, plugin enable/disable
|
235 |
-
* Fixed warning issues - fetching location details using geoplugin API
|
236 |
-
|
237 |
For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/miniorange-2-factor-authentication/trunk/changelog.txt) provided with the plugin.
|
238 |
|
239 |
== Upgrade Notice ==
|
240 |
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
= 5.6.1 =
|
242 |
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
243 |
* Bug fix- Headers already sent
|
6 |
Requires at least: 3.0.1
|
7 |
Tested up to: 6.0.2
|
8 |
Requires PHP: 5.3.0
|
9 |
+
Stable tag: 5.6.2
|
10 |
License: GPLv2 or later
|
11 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
12 |
|
20 |
|
21 |
Check out following video to configure google authenticator as a 2fa:
|
22 |
|
23 |
+
[youtube https://youtu.be/6je2iARqrcs]
|
24 |
|
25 |
[Features](https://plugins.miniorange.com/2-factor-authentication-for-wordpress-wp-2fa?utm_source=wordpress&utm_medium=readme+link&utm_campaign=last+June#key-features) | [7 day Premium trial](https://plugins.miniorange.com/wordpress-2fa-free-trial-request)
|
26 |
|
60 |
= Plugin Integrations and Support for all methods of two-factor authentication/two step verification ( WP 2FA/TFA/OTP Authentication ) =
|
61 |
Our plugin is integrated with [popular Plugins](https://plugins.miniorange.com/2-factor-authentication-for-wordpress-wp-2fa#integrations) such as [WooCommerce](https://developers.miniorange.com/docs/security/wordpress/wp-security/2fa_on_woocomerce_login), [Ultimate member](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-ultimate-member-login-form), [User Registration](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-user-registration-login-form), [Restrict Content Pro](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-restrict-content-pro-login-form), [Login Press](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-login-press-login-form), [Registration Magic](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-registrationmagic-form), [Admin Custom Login](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-admin-custom-login-form), [Buddy Press](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-buddypress-login-form), [Theme My Login](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-theme-my-login-form), [Elementor Pro](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-elementor-pro-login-form), [Profile Builder](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-profile-builder-login-form), [Login With Ajax](https://plugins.miniorange.com/two-factor-authentication-2fa-mfa-for-login-with-ajax-form) and many more.
|
62 |
|
63 |
+
= Third Party Custom SMS Gateway for OTP Over SMS( OTP Login/two-factor authentication / 2FA ) =
|
64 |
The premium plugin supports any third-party **custom SMS Gateway**. If you don't have your SMS gateway you can use miniOrange gateway and send SMS(OTP over SMS) all over the world for OTP authentication.
|
65 |
+
[Here](https://plugins.miniorange.com/sms-email-gateways-supported-by-2fa-plugin) are some famous gateways supported for two-factor (WP 2FA/TFA/OTP).
|
66 |
[Test your Gateway](https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig)
|
67 |
|
68 |
= Why do you need to register for google authenticator? =
|
219 |
|
220 |
== Changelog ==
|
221 |
|
222 |
+
= 5.6.2 =
|
223 |
+
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
224 |
+
* Vulnerability fixes
|
225 |
+
* Removed Network Security for new users
|
226 |
+
* Updated Pricing page UI
|
227 |
+
|
228 |
= 5.6.1 =
|
229 |
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
230 |
* Bug fix- Headers already sent
|
231 |
* Added SMTP check for sending backup codes on 2fa prompt
|
232 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
233 |
For older changelog entries, please see the [additional changelog.txt file](https://plugins.svn.wordpress.org/miniorange-2-factor-authentication/trunk/changelog.txt) provided with the plugin.
|
234 |
|
235 |
== Upgrade Notice ==
|
236 |
|
237 |
+
= 5.6.2 =
|
238 |
+
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
239 |
+
* Vulnerability fixes
|
240 |
+
* Removed Network Security for new users
|
241 |
+
* Updated Pricing page UI
|
242 |
+
|
243 |
= 5.6.1 =
|
244 |
* Google Authenticator - Two factor Authentication (2FA, OTP) :
|
245 |
* Bug fix- Headers already sent
|
uninstall.php
CHANGED
@@ -84,11 +84,6 @@
|
|
84 |
delete_option( 'mo2f_scan_nonce');
|
85 |
delete_option( 'mo2f_onprem_admin');
|
86 |
delete_option( 'mo2f_two_factor_tour');
|
87 |
-
delete_option( 'mo2f_tour_firewall');
|
88 |
-
delete_option( 'mo2f_tour_malware_scan');
|
89 |
-
delete_option( 'mo2f_tour_advance_blocking');
|
90 |
-
delete_option( 'mo2f_tour_backup');
|
91 |
-
delete_option( 'mo2f_tour_loginSpam');
|
92 |
delete_option( 'mo2f_tab_count');
|
93 |
delete_option( 'mo2f_attempts_before_redirect');
|
94 |
delete_option( 'mo2f_register_with_another_email');
|
@@ -142,32 +137,11 @@
|
|
142 |
|
143 |
delete_option('mo_wpns_dbversion');
|
144 |
|
145 |
-
|
146 |
-
delete_option('mo_file_backup_plugins');
|
147 |
-
delete_option('mo_file_backup_themes');
|
148 |
-
delete_option('mo_file_backup_wp_files');
|
149 |
-
delete_option('mo2f_cron_file_backup_hours');
|
150 |
-
delete_option('mo2f_cron_hours');
|
151 |
-
|
152 |
-
delete_option('scheduled_file_backup');
|
153 |
-
delete_option('scheduled_db_backup');
|
154 |
-
delete_option('file_backup_created_time');
|
155 |
-
delete_option('db_backup_created_time');
|
156 |
-
|
157 |
-
delete_option('mo_database_backup');
|
158 |
-
delete_option('mo_wpns_backup_time');
|
159 |
-
delete_site_option('enable_backup_schedule');
|
160 |
-
delete_option('backup_created_time');
|
161 |
-
|
162 |
delete_site_option('mo2fa_superadmin');
|
163 |
delete_site_option('mo2f_visit_waf');
|
164 |
delete_site_option('mo2f_visit_login_and_spam');
|
165 |
delete_site_option('mo2f_visit_malware');
|
166 |
-
delete_site_option('mo2f_visit_backup');
|
167 |
delete_site_option('mo2f_two_factor');
|
168 |
-
delete_site_option('mo_file_manual_backup_plugins');
|
169 |
-
delete_site_option('mo_file_manual_backup_themes');
|
170 |
-
delete_site_option('mo_schedule_database_backup');
|
171 |
delete_site_option('mo2f_enable_debug_log');
|
172 |
delete_site_option('duo_credentials_save_successfully');
|
173 |
delete_site_option('mo2f_d_integration_key');
|
@@ -366,7 +340,6 @@
|
|
366 |
|
367 |
delete_option( 'mo_2f_switch_waf');
|
368 |
delete_option( 'mo_2f_switch_loginspam');
|
369 |
-
delete_option( 'mo_2f_switch_backup');
|
370 |
delete_option( 'mo_2f_switch_malware');
|
371 |
delete_option( 'mo_2f_switch_adv_block');
|
372 |
|
84 |
delete_option( 'mo2f_scan_nonce');
|
85 |
delete_option( 'mo2f_onprem_admin');
|
86 |
delete_option( 'mo2f_two_factor_tour');
|
|
|
|
|
|
|
|
|
|
|
87 |
delete_option( 'mo2f_tab_count');
|
88 |
delete_option( 'mo2f_attempts_before_redirect');
|
89 |
delete_option( 'mo2f_register_with_another_email');
|
137 |
|
138 |
delete_option('mo_wpns_dbversion');
|
139 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
delete_site_option('mo2fa_superadmin');
|
141 |
delete_site_option('mo2f_visit_waf');
|
142 |
delete_site_option('mo2f_visit_login_and_spam');
|
143 |
delete_site_option('mo2f_visit_malware');
|
|
|
144 |
delete_site_option('mo2f_two_factor');
|
|
|
|
|
|
|
145 |
delete_site_option('mo2f_enable_debug_log');
|
146 |
delete_site_option('duo_credentials_save_successfully');
|
147 |
delete_site_option('mo2f_d_integration_key');
|
340 |
|
341 |
delete_option( 'mo_2f_switch_waf');
|
342 |
delete_option( 'mo_2f_switch_loginspam');
|
|
|
343 |
delete_option( 'mo_2f_switch_malware');
|
344 |
delete_option( 'mo_2f_switch_adv_block');
|
345 |
|
views/backup/backup.php
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
|
2 |
-
<div class="nav-tab-wrapper">
|
3 |
-
<button class="nav-tab" onclick="mo2f_wpns_openTabbackup(this)" id="mo2f_setting_backup">Manual Backup</button>
|
4 |
-
<button class="nav-tab" onclick="mo2f_wpns_openTabbackup(this)" id="mo2f_schedule_view">Scheduled Backup</button>
|
5 |
-
<button class="nav-tab" onclick="mo2f_wpns_openTabbackup(this)" id="mo2f_report_view">Report</button>
|
6 |
-
|
7 |
-
</div>
|
8 |
-
|
9 |
-
<div class="tabcontent" id="mo2f_setting_backup_div">
|
10 |
-
<div class="mo_wpns_divided_layout">
|
11 |
-
<table style="width: 100%;">
|
12 |
-
<tr>
|
13 |
-
<td style="width:100%;vertical-align:top;" id="configurationForm2">
|
14 |
-
<?php include_once $mo2f_dirName . 'controllers'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_controller.php'; ?>
|
15 |
-
</tr>
|
16 |
-
</table>
|
17 |
-
</div>
|
18 |
-
</div>
|
19 |
-
<div class="tabcontent" id="mo2f_schedule_view_div">
|
20 |
-
<div class="mo_wpns_divided_layout">
|
21 |
-
<table style="width: 100%;">
|
22 |
-
<tr>
|
23 |
-
<td style="width:100%;vertical-align:top;" id="configurationForm3">
|
24 |
-
<?php include_once $mo2f_dirName . 'controllers'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_schdule.php'; ?>
|
25 |
-
</tr>
|
26 |
-
</table>
|
27 |
-
</div>
|
28 |
-
</div>
|
29 |
-
<div class="tabcontent" id="mo2f_report_view_div">
|
30 |
-
<div class="mo_wpns_divided_layout">
|
31 |
-
<table style="width: 100%;">
|
32 |
-
<tr>
|
33 |
-
<td style="width:100%;vertical-align:top;" id="configurationForm4">
|
34 |
-
<?php include_once $mo2f_dirName . 'controllers'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_created_report.php'; ?>
|
35 |
-
</tr>
|
36 |
-
</table>
|
37 |
-
</div>
|
38 |
-
</div>
|
39 |
-
|
40 |
-
<script>
|
41 |
-
jQuery('#backup_tab').addClass('nav-tab-active');
|
42 |
-
|
43 |
-
function mo2f_wpns_openTabbackup(elmt){
|
44 |
-
var tabname = elmt.id;
|
45 |
-
var tabarray = ["mo2f_setting_backup","mo2f_schedule_view","mo2f_report_view"];
|
46 |
-
for (var i = 0; i < tabarray.length; i++) {
|
47 |
-
if(tabarray[i] == tabname){
|
48 |
-
jQuery("#"+tabarray[i]).addClass("nav-tab-active");
|
49 |
-
jQuery("#"+tabarray[i]+"_div").css("display", "block");
|
50 |
-
}else{
|
51 |
-
jQuery("#"+tabarray[i]).removeClass("nav-tab-active");
|
52 |
-
jQuery("#"+tabarray[i]+"_div").css("display", "none");
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
localStorage.setItem("backup_last_tab", tabname);
|
57 |
-
}
|
58 |
-
|
59 |
-
var tab = localStorage.getItem("backup_last_tab");
|
60 |
-
|
61 |
-
if(tab)
|
62 |
-
document.getElementById(tab).click();
|
63 |
-
else{
|
64 |
-
document.getElementById("mo2f_setting_backup").click();
|
65 |
-
}
|
66 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
views/backup/backup_created_report.php
DELETED
@@ -1,81 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
?>
|
3 |
-
|
4 |
-
|
5 |
-
<div class="mo_wpns_setting_layout" id="backup_report_table">
|
6 |
-
<?php if(! isset($_GET['view']))?>
|
7 |
-
<h2>Backup Created Report</h2>
|
8 |
-
|
9 |
-
<hr>
|
10 |
-
<div id="backupdata">
|
11 |
-
<table id="reports_table" class="display" cellspacing="0" width="100%">
|
12 |
-
<thead><tr><th style="text-align:center">Created Time</th><th style="text-align:center">Backup Folders</th><th style="text-align:center">Storage</th><th style="text-align:center">Download</th><th style="text-align:center">Delete</th></tr></thead>
|
13 |
-
<tbody>
|
14 |
-
<br>
|
15 |
-
<?php
|
16 |
-
include_once $mo2f_dirName. 'controllers'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_created_result.php';
|
17 |
-
echo showBackupResults();
|
18 |
-
|
19 |
-
?></tbody>
|
20 |
-
</table>
|
21 |
-
</div>
|
22 |
-
</div>
|
23 |
-
|
24 |
-
<?php
|
25 |
-
function show_backup_report($file_path,$file_name,$timestamp,$id) {
|
26 |
-
$time = date('m/d/Y H:i:s', $timestamp);
|
27 |
-
$nonce = wp_create_nonce('mo-wpns-download-nonce');
|
28 |
-
echo "<tr><td style=text-align:center>".esc_attr($time)."</td>";
|
29 |
-
echo "<td style=text-align:center>".esc_attr($file_name)."</td>";
|
30 |
-
echo "<td style=text-align:center>Local</td>";
|
31 |
-
echo "<td><form action='' method='POST' enctype='multipart/form-data'>
|
32 |
-
<input type='hidden' value='mo_wpns_backup_download' name='option' />
|
33 |
-
<input type='hidden' value=".esc_html($file_name)."/".esc_html($id)." name='file_name' />
|
34 |
-
<input type='hidden' value=".esc_html($file_path)." name='file_path' />
|
35 |
-
<input type='hidden' value=".esc_html($nonce)." name='download_nonce'/>
|
36 |
-
<input type='submit' value='Download' name='download' class='upload btn btn-info btn-xs'>
|
37 |
-
</form>
|
38 |
-
</td>";
|
39 |
-
echo "<td><button type='button' onclick=\"backup_delete(this, '".addslashes($file_path)."','".esc_attr($file_name)."',".esc_attr($id).")\" name='delete' id='delete' class='btn btn-info btn-xs delete'>Delete</button></td>";
|
40 |
-
echo "</tr>";
|
41 |
-
} ?>
|
42 |
-
<script>
|
43 |
-
function backup_delete(elmt, file_path,file_name,id){
|
44 |
-
|
45 |
-
jQuery(document).ready(function(){
|
46 |
-
|
47 |
-
if(confirm("Are you sure you want to delete it?"))
|
48 |
-
{
|
49 |
-
var data={
|
50 |
-
'action':'mo_wpns_backup_redirect',
|
51 |
-
'call_type':'delete_backup',
|
52 |
-
'file_name':file_name,
|
53 |
-
'folder_name':file_path,
|
54 |
-
'id' :id,
|
55 |
-
'nonce' : '<?php echo esc_html(wp_create_nonce("delete_entry"));?>',
|
56 |
-
|
57 |
-
};
|
58 |
-
|
59 |
-
jQuery.post(ajaxurl, data, function(response){
|
60 |
-
|
61 |
-
if(response=="success"){
|
62 |
-
success_msg("Backup delete successfully.");
|
63 |
-
var row = elmt.parentNode.parentNode;
|
64 |
-
row.parentNode.removeChild(row);
|
65 |
-
}else if(response ==="notexist"){
|
66 |
-
error_msg("Someone has deleted the backup by going to directory please refreash the page");
|
67 |
-
}
|
68 |
-
});
|
69 |
-
}
|
70 |
-
|
71 |
-
});
|
72 |
-
|
73 |
-
}
|
74 |
-
|
75 |
-
jQuery("#reports_table").DataTable({
|
76 |
-
"order": [[ 1, "desc" ]],
|
77 |
-
retrieve: true,
|
78 |
-
paging: false
|
79 |
-
});
|
80 |
-
|
81 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
views/backup/backup_schdule.php
DELETED
@@ -1,192 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
global $mo2f_dirName;
|
3 |
-
$setup_dirName = $mo2f_dirName.'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'link_tracer.php';
|
4 |
-
include $setup_dirName;
|
5 |
-
add_action('admin_footer','mo_wpns_schedule_backup');
|
6 |
-
?>
|
7 |
-
|
8 |
-
|
9 |
-
<div class="mo_wpns_setting_layout" id = "mo2f_schedule_backup_status">
|
10 |
-
<br>
|
11 |
-
<table class="mo_wpns_settings_table font_class">
|
12 |
-
<tr>
|
13 |
-
<th>Scheduled file backup </th>
|
14 |
-
<th>Scheduled database backup </th>
|
15 |
-
<th><a href='<?php echo esc_url($two_factor_premium_doc['Scheduled database']);?>' target="_blank"><span class="dashicons dashicons-text-page" style="font-size:23px;color:#413c69;margin-top: 0.5em;float: right;"></span></a></th>
|
16 |
-
</tr>
|
17 |
-
<tr><td> </td><td></td></tr>
|
18 |
-
<tr>
|
19 |
-
|
20 |
-
<td><b>Scheduled Status :</b><?php
|
21 |
-
if(MoWpnsUtility::get_mo2f_db_option('scheduled_file_backup', 'site_option')){
|
22 |
-
?><span class="mo_green" >Enabled</span><?php
|
23 |
-
} else{
|
24 |
-
?><span class="mo_green">Disabled</span><?php
|
25 |
-
}
|
26 |
-
?></td>
|
27 |
-
<td><b>Scheduled Status :</b><?php
|
28 |
-
if(MoWpnsUtility::get_mo2f_db_option('scheduled_db_backup', 'site_option')){
|
29 |
-
?><span class="mo_green" >Enabled</span><?php
|
30 |
-
} else{
|
31 |
-
?><span class="mo_green">Disabled</span>
|
32 |
-
<?php }
|
33 |
-
?></td>
|
34 |
-
|
35 |
-
</tr>
|
36 |
-
|
37 |
-
<tr>
|
38 |
-
<td><b>Last Backup :</b><?php
|
39 |
-
if($file_backup_time !== 0) echo esc_attr($file_backup_time) ;
|
40 |
-
?></td>
|
41 |
-
<td><b>Last Backup :</b><?php
|
42 |
-
if($db_eb_backup_time !== 0) echo esc_attr($db_eb_backup_time) ;
|
43 |
-
?></td>
|
44 |
-
|
45 |
-
</tr>
|
46 |
-
<tr>
|
47 |
-
<td><b>Next Backup :</b><?php
|
48 |
-
if($file_schedule_status == 0){ echo 'N/A';
|
49 |
-
} else{ echo esc_attr($file_day).' '.esc_attr($file_date).' '.esc_attr($file_time) ;
|
50 |
-
}
|
51 |
-
?></td>
|
52 |
-
<td><b>Next Backup :</b>
|
53 |
-
<?php if($db_backup_status == 0){ echo 'N/A';
|
54 |
-
} else{ echo esc_attr($db_day).' '.esc_attr($db_date).' '.esc_attr($db_time) ;
|
55 |
-
}
|
56 |
-
?></td>
|
57 |
-
|
58 |
-
</tr>
|
59 |
-
</table>
|
60 |
-
|
61 |
-
</div>
|
62 |
-
<div class="mo_wpns_setting_layout text_size" id= "mo2f_auto_dbbackup">
|
63 |
-
|
64 |
-
<form id="" method="post" action="">
|
65 |
-
<br>
|
66 |
-
<p class="text_size"><b>To automatically create a backup select the following option and save the settings</b></p>
|
67 |
-
<input type="checkbox" name="enable_backup_schedule" id="enable_backup_schedule" value="1"<?php checked(get_site_option('enable_backup_schedule') == 1);?>> Enable Backup Schedule<br><br>
|
68 |
-
|
69 |
-
<br>
|
70 |
-
<p class="text_size"><b>Create a backup after every</b></p>
|
71 |
-
<table class="mo_wpns_settings_table " >
|
72 |
-
<tr>
|
73 |
-
<td>
|
74 |
-
<input type="radio" name="backup_time" value="12" id="hours"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option') === '12')?>>12 Hours
|
75 |
-
</td>
|
76 |
-
<td>
|
77 |
-
<input type="radio" name="backup_time" value="24" id="daily"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option') === '24')?>> Day
|
78 |
-
</td>
|
79 |
-
<td>
|
80 |
-
<input type="radio" name="backup_time" value="168" id="weekly"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option') === '168')?>>Week
|
81 |
-
</td>
|
82 |
-
</tr>
|
83 |
-
<tr>
|
84 |
-
<td>
|
85 |
-
<input type="radio" name="backup_time" value="360" id="fortnight"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option') === '360')?>> Fortnight
|
86 |
-
</td>
|
87 |
-
<td>
|
88 |
-
<input type="radio" name="backup_time" value="720" id="month"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_wpns_backup_time', 'site_option') === '720')?>> Month
|
89 |
-
</td>
|
90 |
-
</tr>
|
91 |
-
</table>
|
92 |
-
<br>
|
93 |
-
<p class="text_size"><b>Choose the following folder to backup</b></p>
|
94 |
-
<table class="mo_wpns_settings_table ">
|
95 |
-
<tr>
|
96 |
-
<td>
|
97 |
-
<input type="checkbox" name="mo_schedule_file_backup_plugins" id="mo_schedule_plugins" value="1"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_file_backup_plugins', 'site_option') == 1);?>> WordPress Plugins folder
|
98 |
-
</td>
|
99 |
-
<td>
|
100 |
-
<input type="checkbox" name="mo_schedule_file_backup_themes" id="mo_schedule_themes" value="1"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_file_backup_themes','site_option') == 1);?>> WordPress Themes folder
|
101 |
-
</td>
|
102 |
-
</tr>
|
103 |
-
<tr>
|
104 |
-
<td>
|
105 |
-
<input type="checkbox" name="mo_schedule_file_backup_wp_files" onclick="check1()" value="1"<?php checked(get_site_option('mo_file_backup_wp_files') == 1);?>> WordPress Files
|
106 |
-
</td>
|
107 |
-
<td>
|
108 |
-
<input type="checkbox" name="mo_schedule_database_backup" id="mo_database_backup" value="1"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_schedule_database_backup', 'site_option') == 1);?>> Database
|
109 |
-
|
110 |
-
</td>
|
111 |
-
</tr>
|
112 |
-
</table>
|
113 |
-
|
114 |
-
|
115 |
-
<br>
|
116 |
-
<p class="text_size">After checking the <b>enable backup schedule</b> checkbox, a backup will be created once you click on save setting and another backup will be created automatically after the scheduled time you select.</p>
|
117 |
-
<input type = "hidden" id = "wpns_schedule_backup_url" value="<?php echo esc_html(wp_create_nonce('wpns-schedule-backup')) ?>" >
|
118 |
-
<input type="button" class="mo_wpns_scan_button" name="save_schedule_settings" id="save_schedule_settings" value ="Save Settings" style="width:120px;" />
|
119 |
-
|
120 |
-
|
121 |
-
</div>
|
122 |
-
</form>
|
123 |
-
|
124 |
-
<?php
|
125 |
-
function mo_wpns_schedule_backup(){
|
126 |
-
?><script type="text/javascript">
|
127 |
-
|
128 |
-
jQuery(document).ready(function(){
|
129 |
-
jQuery('#save_schedule_settings').click(function(){
|
130 |
-
var data={
|
131 |
-
'action':'mo_wpns_backup_redirect',
|
132 |
-
'call_type':'submit_schedule_settings_form',
|
133 |
-
'backup_plugin':jQuery('input[name= "mo_schedule_file_backup_plugins"]:checked').val(),
|
134 |
-
'backup_themes':jQuery('input[name= "mo_schedule_file_backup_themes"]:checked').val(),
|
135 |
-
'backup_wp_files':jQuery('input[name= "mo_schedule_file_backup_wp_files"]:checked').val(),
|
136 |
-
'database':jQuery('input[name= "mo_schedule_database_backup"]:checked').val(),
|
137 |
-
'backup_time':jQuery('input[name= "backup_time"]:checked').val(),
|
138 |
-
'local_storage':jQuery('input[name= "local_storage"]:checked').val(),
|
139 |
-
'enable_backup_schedule':jQuery('input[name= "enable_backup_schedule"]:checked').val(),
|
140 |
-
'nonce' : jQuery('#wpns_schedule_backup_url').val(),
|
141 |
-
|
142 |
-
};
|
143 |
-
|
144 |
-
|
145 |
-
jQuery.post(ajaxurl, data, function(response){
|
146 |
-
|
147 |
-
if (response == "folder_error"){
|
148 |
-
error_msg(" Please select at least one folder to backup");
|
149 |
-
}else if(response=="success"){
|
150 |
-
success_msg(" Backup Configuration Saved Successfully");
|
151 |
-
}
|
152 |
-
else if(response=="disable"){
|
153 |
-
jQuery(".add_remove_disable").attr("disabled","disabled");
|
154 |
-
error_msg(" Automatic Backup Disabled");
|
155 |
-
}else if(response==="invalid_hours"){
|
156 |
-
error_msg(" Please select valid hours");
|
157 |
-
}else if(response==="ERROR"){
|
158 |
-
error_msg("There was an error in procession your request");
|
159 |
-
}
|
160 |
-
});
|
161 |
-
|
162 |
-
});
|
163 |
-
});
|
164 |
-
|
165 |
-
function check1() {
|
166 |
-
if(jQuery('input[name= "mo_schedule_file_backup_wp_files"]:checked').val()){
|
167 |
-
disable_checkbox();
|
168 |
-
}else{
|
169 |
-
enable_checkbox();
|
170 |
-
}
|
171 |
-
}
|
172 |
-
if(jQuery('input[name= "mo_schedule_file_backup_wp_files"]:checked').val()){
|
173 |
-
disable_checkbox();
|
174 |
-
}else{
|
175 |
-
enable_checkbox();
|
176 |
-
}
|
177 |
-
|
178 |
-
function disable_checkbox(){
|
179 |
-
jQuery('input[name="mo_schedule_file_backup_plugins"]').attr('disabled', true);
|
180 |
-
jQuery('input[name="mo_schedule_file_backup_themes"]').attr('disabled', true);
|
181 |
-
jQuery('#mo_schedule_plugins').prop('checked', false); // Unchecks it
|
182 |
-
jQuery('#mo_schedule_themes').prop('checked', false); // Unchecks it
|
183 |
-
}
|
184 |
-
|
185 |
-
function enable_checkbox(){
|
186 |
-
jQuery('input[name="mo_schedule_file_backup_plugins"]').removeAttr('disabled');
|
187 |
-
jQuery('input[name="mo_schedule_file_backup_themes"]').removeAttr('disabled');
|
188 |
-
}
|
189 |
-
|
190 |
-
</script>
|
191 |
-
<?php }
|
192 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
views/backup/backup_setting_view.php
DELETED
@@ -1,165 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
add_action('admin_footer','mo_backup_config_page_submit');
|
3 |
-
?>
|
4 |
-
|
5 |
-
|
6 |
-
<div class="mo_wpns_setting_layout" id="mo2f_select_files_backup">
|
7 |
-
<div class="mo_wpns_subheading"></div>
|
8 |
-
<br>
|
9 |
-
<form id="abc" method="post" action="">
|
10 |
-
<input type="hidden" name="option" value="mo_wpns_backup_configuration">
|
11 |
-
<table class="mo_wpns_settings_table">
|
12 |
-
<tr>
|
13 |
-
<td style="width:30%"><b>Select Folders to Backup : </b></td>
|
14 |
-
<td>
|
15 |
-
<input type="checkbox" name="mo_file_backup_wp_files" onclick="check()" id="mo__manual_file_wp_files"
|
16 |
-
value="1"<?php checked(get_site_option('mo_file_manual_backup_wp_files') == 1);?>> WordPress Files<br>
|
17 |
-
|
18 |
-
<input type="checkbox" name="mo_file_backup_plugins" id="mo_file_manual_backup_plugins" value="1"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_file_manual_backup_plugins', 'site_option') == 1);?>> WordPress Plugins folder<br>
|
19 |
-
<input type="checkbox" name="mo_file_backup_themes" id="mo_file_manual_backup_themes" value="1"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_file_manual_backup_themes', 'site_option') == 1);?>> WordPress Themes folder<br>
|
20 |
-
<input type="checkbox" name="mo_database_backup" value="1"<?php checked(MoWpnsUtility::get_mo2f_db_option('mo_database_backup', 'site_option') == 1);?>> Database
|
21 |
-
</td>
|
22 |
-
</tr>
|
23 |
-
|
24 |
-
<tr><td> </td><td></td></tr>
|
25 |
-
|
26 |
-
<tr>
|
27 |
-
<td style="width: 30%"></td>
|
28 |
-
<td>
|
29 |
-
<input type = "hidden" id = "wpns_backup_settings_url" value="<?php echo esc_html(wp_create_nonce('wpns-backup-settings')) ?>" >
|
30 |
-
<input type="button" name="save_backup_settings" id="save_backup_settings" value ="Take Backup" style="width:120px;" class="mo_wpns_scan_button" />
|
31 |
-
|
32 |
-
</td>
|
33 |
-
</tr>
|
34 |
-
</table>
|
35 |
-
|
36 |
-
</form>
|
37 |
-
<div class="file_backup_desc" hidden></div>
|
38 |
-
</div>
|
39 |
-
|
40 |
-
<?php
|
41 |
-
function mo_backup_config_page_submit(){
|
42 |
-
$backup='';
|
43 |
-
if(get_site_option('mo_file_manual_backup_wp_files')|| get_site_option('mo_file_manual_backup_plugins') || get_site_option('mo_file_manual_backup_themes') )
|
44 |
-
$backup = 'files';
|
45 |
-
elseif(get_site_option('mo_database_backup'))
|
46 |
-
$backup = 'database';
|
47 |
-
if($backup =='files' && (get_site_option('mo_database_backup')))
|
48 |
-
$backup = 'files and database';
|
49 |
-
$img_loader_url = plugins_url('miniorange-2-factor-authentication'.DIRECTORY_SEPARATOR .'includes'.DIRECTORY_SEPARATOR .'images'.DIRECTORY_SEPARATOR .'loader.gif');
|
50 |
-
$filemessage = '<div id=\'filebackupmessage\'><h2>DO NOT :</h2><ol><li>Close this browser</li><li>Reload this page</li><li>Click the Stop or Back button.</li></ol><h2 id=\'mo_backup_message\'></h2></div><br/><div class=\'filebackupmessage\'><h2><div id=\'backupinprogress\'> BACKUP IN PROGRESS</div></h2></div><div id=\'fileloader\' ><img src=\"'.esc_url_raw($img_loader_url).'\"></div>';
|
51 |
-
$filemessage2a = 'Backup is Completed. Check ';
|
52 |
-
$filemessage2b = ' file in <b>uploads/miniorangebackup</b> folder.';
|
53 |
-
$backup_store_path = wp_upload_dir();
|
54 |
-
$backup_store_path_=str_replace("\\","\\\\",$backup_store_path["basedir"]);
|
55 |
-
?>
|
56 |
-
<script>
|
57 |
-
|
58 |
-
jQuery(document).ready(function(){
|
59 |
-
jQuery('#save_backup_settings').click(function(){
|
60 |
-
|
61 |
-
var message = "<?php echo $filemessage; ?>";
|
62 |
-
jQuery(".file_backup_desc").empty();
|
63 |
-
jQuery(".file_backup_desc").append(message);
|
64 |
-
jQuery(".file_backup_desc").slideDown(400);
|
65 |
-
setInterval(function(){ jQuery("#backupinprogress").fadeOut(700); }, 1000);
|
66 |
-
setInterval(function(){ jQuery("#backupinprogress").fadeIn(700); }, 1000);
|
67 |
-
document.getElementById("save_backup_settings").value = "Taking Backup...";
|
68 |
-
jQuery('input[name="save_backup_settings"]').attr('disabled', true);
|
69 |
-
document.getElementById('save_backup_settings').style.backgroundColor = '#2271b1';
|
70 |
-
|
71 |
-
var data={
|
72 |
-
'action':'mo_wpns_backup_redirect',
|
73 |
-
'call_type':'submit_backup_settings_form',
|
74 |
-
'backup_plugin':jQuery('input[name= "mo_file_backup_plugins"]:checked').val(),
|
75 |
-
'backup_themes':jQuery('input[name= "mo_file_backup_themes"]:checked').val(),
|
76 |
-
'backup_wp_files':jQuery('input[name= "mo_file_backup_wp_files"]:checked').val(),
|
77 |
-
'database':jQuery('input[name= "mo_database_backup"]:checked').val(),
|
78 |
-
'nonce' :jQuery('#wpns_backup_settings_url').val(),
|
79 |
-
};
|
80 |
-
|
81 |
-
if(data['backup_plugin']|| data['backup_themes'] || data['backup_wp_files'] )
|
82 |
-
var backup = 'files';
|
83 |
-
else if(data['database'])
|
84 |
-
var backup = 'database';
|
85 |
-
if(backup =='files' && (data['database']))
|
86 |
-
var backup = 'files and database';
|
87 |
-
jQuery('#mo_backup_message').html('Until your '+backup+' backup is Completed');
|
88 |
-
|
89 |
-
|
90 |
-
jQuery.post(ajaxurl, data, function(response){
|
91 |
-
|
92 |
-
if (response == "ERROR"){
|
93 |
-
error_msg("There is an error in processing request");
|
94 |
-
window.onload = barfw_response_handler('NONCE_ERROR','Nonce did not match');
|
95 |
-
|
96 |
-
}else if(response == "not_writable"){
|
97 |
-
jQuery('#mo_backup_message').empty();
|
98 |
-
error_msg("We don't have write permission. Please give the permission to create folder in uploads");
|
99 |
-
window.onload = barfw_response_handler('We do not have write permission. Please give the permission to create folder in uploads','Permission Denied');
|
100 |
-
|
101 |
-
}
|
102 |
-
else if(response == "folder_error")
|
103 |
-
{
|
104 |
-
error_msg("Please select atleast one file folder from manual backup.");
|
105 |
-
window.onload = barfw_response_handler('NO FILES TO BACKUP.PLEASE CHANGE MANUAL SETTINGS','Please select at least one folder to backup');
|
106 |
-
|
107 |
-
}
|
108 |
-
else
|
109 |
-
{
|
110 |
-
var backup_store_path = '<?php echo esc_attr($backup_store_path_);?>';
|
111 |
-
var success_message = 'Your backup is created and stored at this location: '+backup_store_path+'/miniorangebackup';
|
112 |
-
window.onload = barfw_response_handler('BACKUP COMPLETED', success_message);
|
113 |
-
|
114 |
-
}
|
115 |
-
});
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
});
|
120 |
-
|
121 |
-
});
|
122 |
-
|
123 |
-
|
124 |
-
function barfw_response_handler(para1, para2){
|
125 |
-
jQuery(".filebackupmessage h2").empty();
|
126 |
-
jQuery(".filebackupmessage h2").append(para1);
|
127 |
-
|
128 |
-
jQuery("#fileloader").empty();
|
129 |
-
|
130 |
-
jQuery("#fileloader").append(para2);
|
131 |
-
jQuery(".filebackupmessage").css("background-color","#1EC11E");
|
132 |
-
|
133 |
-
jQuery('input[name="save_backup_settings"]').removeAttr('disabled');
|
134 |
-
document.getElementById('save_backup_settings').style.backgroundColor = '#2271b1';
|
135 |
-
document.getElementById("save_backup_settings").value = "Take Backup";
|
136 |
-
}
|
137 |
-
|
138 |
-
function check() {
|
139 |
-
if(jQuery('input[name= "mo_file_backup_wp_files"]:checked').val()){
|
140 |
-
mo2f_disable_box();
|
141 |
-
}else{
|
142 |
-
mo2f_enable_box();
|
143 |
-
}
|
144 |
-
}
|
145 |
-
if(jQuery('input[name= "mo_file_backup_wp_files"]:checked').val()){
|
146 |
-
mo2f_disable_box();
|
147 |
-
}else{
|
148 |
-
mo2f_enable_box();
|
149 |
-
}
|
150 |
-
|
151 |
-
function mo2f_enable_box(){
|
152 |
-
jQuery('input[name="mo_file_backup_plugins"]').removeAttr('disabled');
|
153 |
-
jQuery('input[name="mo_file_backup_themes"]').removeAttr('disabled');
|
154 |
-
}
|
155 |
-
|
156 |
-
function mo2f_disable_box(){
|
157 |
-
jQuery('input[name="mo_file_backup_plugins"]').attr('disabled', true);
|
158 |
-
jQuery('input[name="mo_file_backup_themes"]').attr('disabled', true);
|
159 |
-
jQuery('#mo_file_manual_backup_plugins').prop('checked', false); // Unchecks it
|
160 |
-
jQuery('#mo_file_manual_backup_themes').prop('checked', false); // Unchecks it
|
161 |
-
}
|
162 |
-
|
163 |
-
|
164 |
-
</script>
|
165 |
-
<?php }?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
views/common-elements.php
CHANGED
@@ -103,8 +103,6 @@
|
|
103 |
}
|
104 |
}
|
105 |
}
|
106 |
-
|
107 |
-
|
108 |
//Function to show google recaptcha v3 upon login
|
109 |
|
110 |
function show_google_recaptcha_form_v3_login()
|
103 |
}
|
104 |
}
|
105 |
}
|
|
|
|
|
106 |
//Function to show google recaptcha v3 upon login
|
107 |
|
108 |
function show_google_recaptcha_form_v3_login()
|
views/dashboard.php
CHANGED
@@ -7,7 +7,6 @@ $two_fa_on= get_site_option("mo_2f_switch_2fa")?"checked":"";
|
|
7 |
$all_on= get_site_option("mo_2f_switch_all")?"checked":"";
|
8 |
$waf_on= get_site_option("mo_2f_switch_waf")?"checked":"";
|
9 |
$login_spam_on= get_site_option("mo_2f_switch_loginspam")?"checked":"";
|
10 |
-
$backup_on= get_site_option("mo_2f_switch_backup")?"checked":"";
|
11 |
$malware_on= get_site_option("mo_2f_switch_malware")?"checked":"";
|
12 |
$adv_block_on= get_site_option("mo_2f_switch_adv_block")?"checked":"";
|
13 |
echo '<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
@@ -110,23 +109,6 @@ echo '<meta name="viewport" content="width=device-width, initial-scale=1, maximu
|
|
110 |
</div>
|
111 |
</div>
|
112 |
<div style="display:flex;justify-content:center">
|
113 |
-
<div class="mo_wpns_small_layout">
|
114 |
-
<form name="tab_backup" id="tab_backup" method="post">
|
115 |
-
<h3>Encrypted Backup
|
116 |
-
<label class="mo_wpns_switch" style="float: right">
|
117 |
-
<input type="hidden" name="option" value="tab_backup_switch"/>
|
118 |
-
<input type=checkbox id="switch_backup" name="switch_val" value="1" ' .esc_html($backup_on). '/>
|
119 |
-
<span class="mo_wpns_slider mo_wpns_round"></span>
|
120 |
-
</label>
|
121 |
-
</h3>
|
122 |
-
</form>
|
123 |
-
<br>
|
124 |
-
<div style="text-align:justify;">
|
125 |
-
Creating regular backups for your website is essential. By Creating backup you can <b>restore your website back to normal</b> within a few minutes. miniOrange creates <b>database and file Backup</b> which is stored locally in your system.
|
126 |
-
<br><br>
|
127 |
-
</div>
|
128 |
-
<a class="button button-primary button-large" href="'.esc_url($backup).'">Settings</a>
|
129 |
-
</div>
|
130 |
<div class="mo_wpns_small_layout">
|
131 |
<form name="tab_malware" id="tab_malware" method="post">
|
132 |
<h3>Malware Scan
|
7 |
$all_on= get_site_option("mo_2f_switch_all")?"checked":"";
|
8 |
$waf_on= get_site_option("mo_2f_switch_waf")?"checked":"";
|
9 |
$login_spam_on= get_site_option("mo_2f_switch_loginspam")?"checked":"";
|
|
|
10 |
$malware_on= get_site_option("mo_2f_switch_malware")?"checked":"";
|
11 |
$adv_block_on= get_site_option("mo_2f_switch_adv_block")?"checked":"";
|
12 |
echo '<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
109 |
</div>
|
110 |
</div>
|
111 |
<div style="display:flex;justify-content:center">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
<div class="mo_wpns_small_layout">
|
113 |
<form name="tab_malware" id="tab_malware" method="post">
|
114 |
<h3>Malware Scan
|
views/malware_scanner/scan_summary_view.php
CHANGED
@@ -286,15 +286,22 @@ function mo_wpns_start_scan(){
|
|
286 |
|
287 |
jQuery('input[name="mo_stop_button"]').val("Stop Scanning...");
|
288 |
document.getElementById('mo_stop_button').style.backgroundColor = disabled;
|
|
|
289 |
var data={
|
290 |
'action':'mo_wpns_malware_redirect',
|
291 |
-
'call_type':'malware_scan_terminate'
|
|
|
292 |
};
|
293 |
jQuery("#mo_scan_message").removeClass(removeClass);
|
294 |
jQuery.post(ajaxurl, data, function(response){
|
295 |
-
|
296 |
-
|
297 |
-
|
|
|
|
|
|
|
|
|
|
|
298 |
});
|
299 |
}else{
|
300 |
document.getElementById("mo_progress").style.display="none";
|
@@ -419,16 +426,20 @@ function mo_wpns_start_scan(){
|
|
419 |
clearInterval(progress_bar);
|
420 |
}
|
421 |
function status_progress(){
|
422 |
-
|
423 |
var data={
|
424 |
'action':'mo_wpns_malware_redirect',
|
425 |
-
'call_type':'malware_progress_bar'
|
|
|
426 |
};
|
427 |
jQuery.post(ajaxurl, data, function(response){
|
428 |
var scanset = new Map();
|
429 |
|
430 |
jQuery("#mo_scan_message").removeClass(removeClass);
|
431 |
var bar= document.getElementById("mo_wpns_progress_bar");
|
|
|
|
|
|
|
432 |
if(response['status']=="COMPLETE"){
|
433 |
|
434 |
scanset.set("progress_message", "Scan completed");
|
286 |
|
287 |
jQuery('input[name="mo_stop_button"]').val("Stop Scanning...");
|
288 |
document.getElementById('mo_stop_button').style.backgroundColor = disabled;
|
289 |
+
nonce = jQuery('#wpns_scan_nonce').val();
|
290 |
var data={
|
291 |
'action':'mo_wpns_malware_redirect',
|
292 |
+
'call_type':'malware_scan_terminate',
|
293 |
+
'nonce':nonce,
|
294 |
};
|
295 |
jQuery("#mo_scan_message").removeClass(removeClass);
|
296 |
jQuery.post(ajaxurl, data, function(response){
|
297 |
+
if(response=="NONCE_ERROR"){
|
298 |
+
showMessageWithscroll(errorClass,nonceMessage);
|
299 |
+
}else{
|
300 |
+
|
301 |
+
jQuery('#mo_scan_message').show();
|
302 |
+
jQuery('#mo_scan_message').empty();
|
303 |
+
showMessageWithscroll(successClass,"Scan is stopping...");
|
304 |
+
}
|
305 |
});
|
306 |
}else{
|
307 |
document.getElementById("mo_progress").style.display="none";
|
426 |
clearInterval(progress_bar);
|
427 |
}
|
428 |
function status_progress(){
|
429 |
+
nonce = jQuery('#wpns_scan_nonce').val();
|
430 |
var data={
|
431 |
'action':'mo_wpns_malware_redirect',
|
432 |
+
'call_type':'malware_progress_bar',
|
433 |
+
'nonce':nonce,
|
434 |
};
|
435 |
jQuery.post(ajaxurl, data, function(response){
|
436 |
var scanset = new Map();
|
437 |
|
438 |
jQuery("#mo_scan_message").removeClass(removeClass);
|
439 |
var bar= document.getElementById("mo_wpns_progress_bar");
|
440 |
+
if(response=="NONCE_ERROR"){
|
441 |
+
showMessageWithscroll(errorClass,nonceMessage);
|
442 |
+
}
|
443 |
if(response['status']=="COMPLETE"){
|
444 |
|
445 |
scanset.set("progress_message", "Scan completed");
|
views/navbar.php
CHANGED
@@ -77,26 +77,32 @@ if( isset( $_GET[ 'page' ]) && sanitize_text_field($_GET['page']) != 'mo_2fa_upg
|
|
77 |
id ="mo_2fa_upgrade_tour" href="'.esc_url($upgrade_url).'">See Plans and Pricing</a>
|
78 |
|
79 |
</div>';
|
80 |
-
echo' <form id="mo_wpns_2fa_with_network_security" method="post" action="">
|
81 |
-
<div class="mo2f-security-toggle">
|
82 |
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
|
101 |
echo'</div></div>';
|
102 |
echo '<div id = "wpns_nav_message"></div>';
|
@@ -117,7 +123,7 @@ if( isset( $_GET[ 'page' ]) && sanitize_text_field($_GET['page']) != 'mo_2fa_upg
|
|
117 |
|
118 |
echo '<a id="login_spam_tab" class="nav-tab" href="'.esc_url($login_and_spam).'" >Login and Spam</a>';
|
119 |
|
120 |
-
|
121 |
|
122 |
echo '<a id="malware_tab" class="nav-tab" href="'.esc_url($scan_url).'">Malware Scan</a>';
|
123 |
|
77 |
id ="mo_2fa_upgrade_tour" href="'.esc_url($upgrade_url).'">See Plans and Pricing</a>
|
78 |
|
79 |
</div>';
|
|
|
|
|
80 |
|
81 |
+
if(get_site_option("mo_wpns_2fa_with_network_security") || get_site_option("mo2f_is_old_customer"))
|
82 |
+
{
|
83 |
+
update_site_option("mo2f_is_old_customer",1);
|
84 |
+
|
85 |
+
echo' <form id="mo_wpns_2fa_with_network_security" method="post" action="">
|
86 |
+
<div class="mo2f-security-toggle">
|
87 |
+
|
88 |
+
|
89 |
+
<input type="hidden" name="mo_security_features_nonce" value="'.esc_html($security_features_nonce).'"/>
|
90 |
+
|
91 |
+
<input type="hidden" name="option" value="mo_wpns_2fa_with_network_security">
|
92 |
+
<div>2FA + Website Security
|
93 |
+
<span>
|
94 |
+
<label class="mo_wpns_switch">
|
95 |
+
<input type="checkbox" name="mo_wpns_2fa_with_network_security" '.esc_html($network_security_features).' onchange="document.getElementById(\'mo_wpns_2fa_with_network_security\').submit();">
|
96 |
+
<span class="mo_wpns_slider mo_wpns_round"></span>
|
97 |
+
</label>
|
98 |
+
</span>
|
99 |
+
</div>
|
100 |
+
|
101 |
+
|
102 |
+
</div>
|
103 |
+
</form>';
|
104 |
+
}
|
105 |
+
}
|
106 |
|
107 |
echo'</div></div>';
|
108 |
echo '<div id = "wpns_nav_message"></div>';
|
123 |
|
124 |
echo '<a id="login_spam_tab" class="nav-tab" href="'.esc_url($login_and_spam).'" >Login and Spam</a>';
|
125 |
|
126 |
+
|
127 |
|
128 |
echo '<a id="malware_tab" class="nav-tab" href="'.esc_url($scan_url).'">Malware Scan</a>';
|
129 |
|
views/upgrade.php
CHANGED
@@ -72,513 +72,364 @@ echo '
|
|
72 |
<span class="cd-switch"></span>
|
73 |
|
74 |
|
75 |
-
<br><br>
|
76 |
-
|
77 |
-
<div class="mo2f_upgrade_super_div" id="mo2f_twofa_plans">
|
78 |
-
<div class="mo2f_upgrade_main_div" id="mo2f_upgrade_main_div">
|
79 |
|
80 |
-
|
81 |
-
<div class="mo2fa_pricing_head_blue">
|
82 |
|
83 |
-
<div id="mo2fa_pricing_head_all_inclusive" class="mo2fa_pricing_head_supporter"><center><h3 class="mo2fa_pricing_head_mo_2fa">Unlimited Users<br> Advanced 2FA <i class="mo2fa_tooltip fa fa-info-circle" aria-hidden="true"><span class="mo2fa_tooltiptext">
|
84 |
-
Essential 2FA<br>
|
85 |
-
Security Features<br>
|
86 |
-
Addons
|
87 |
-
</span></i><br>Website Security</h3></center></div><br><br>
|
88 |
|
89 |
-
<div class="mo2fa_dollar"> <center><span>$</span><span id="mo2fa_display_my_all_inclusive_pricing"></span><span class="mo2fa_per_year">/Year</span></center></div>
|
90 |
-
<br>
|
91 |
-
</div>
|
92 |
-
<h3 class="mo2fa_plan-type"><b>PREMIUM</b></h3>
|
93 |
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
<center>
|
98 |
-
<select id="mo2fa_all_inclusive_price_mo" onclick="mo2fa_update_site_limit_all_inclusive()" onchange="mo2fa_update_site_limit_all_inclusive()" class="mo2fa_increase_my_limit">
|
99 |
-
<option value="199">1 SITE</option>
|
100 |
-
<option value="299">2 SITES</option>
|
101 |
-
<option value="499">5 SITES</option>
|
102 |
-
<option value="799">10 SITES</option>
|
103 |
-
<option value="1099">25 SITES</option>
|
104 |
-
|
105 |
-
</select>
|
106 |
-
</center>
|
107 |
-
</div>
|
108 |
-
|
109 |
-
|
110 |
-
<center>
|
111 |
-
<div id="mo2fa_custom_my_plan_2fa_mo">
|
112 |
-
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
113 |
-
<a onclick="mo2f_upgradeform('wp_security_two_factor_all_inclusive_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Upgrade</button></a>
|
114 |
-
<?php }else{ ?>
|
115 |
-
<a onclick="mo2f_register_and_upgradeform('wp_security_two_factor_all_inclusive_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Upgrade</button></a>
|
116 |
-
<?php }?>
|
117 |
-
</div>
|
118 |
-
<a href="https://plugins.miniorange.com/how-to-download-2fa-premium-plugin-wordpress" target="blank" class="mo2f-installation-steps"><strong>Installation Steps</strong></a>
|
119 |
-
</center>
|
120 |
-
</div>
|
121 |
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_on_per_tooltip_methodlist">On-Premise Solution <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Users' data is stored on their end.</span></span></li>
|
127 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature" title="Only 3 sub-sites supported">Multisite Support (Only 3 subsites)</li>
|
128 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Configure for Unlimited Users</li>
|
129 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Unlimited Email Transactions</li>
|
130 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_tooltip_methodlist">10+ Authentication Methods <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i>
|
131 |
-
<span class="mo2fa_methodlist"t>
|
132 |
-
<ul class="methods-list-mo2fa" style="margin-left: -43px;">
|
133 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Google Authenticator</li>
|
134 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over SMS</li>
|
135 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over Email</li>
|
136 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Email Verification</li>
|
137 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Security Questions</li>
|
138 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over Whatsapp</li>
|
139 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Authy Authenticator</li>
|
140 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Microsoft Authenticator</li>
|
141 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">LastPass Authenticator</li>
|
142 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">FreeOTP Authenticator</li>
|
143 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Duo Mobile Authenticator</li>
|
144 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over Telegram</li>
|
145 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">miniOrange QR Code Authenticator</li>
|
146 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">miniOrange Soft Token</li>
|
147 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">miniOrange Push Notification</li>
|
148 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">OTP Over SMS and Email</li>
|
149 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">Hardware Token</li>
|
150 |
-
</ul>
|
151 |
-
</span>
|
152 |
-
</span></li>
|
153 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_enforce_2fa_tooltip_methodlist">Enforce 2FA Set-up For Users <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Enforce users to set their 2FA after installing the plugin</span></span></li>
|
154 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_role_tooltip_methodlist">Role-Based 2FA <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>You can enable 2FA for specific user role</span></span></li>
|
155 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> 3+ Backup Login Methods</li>
|
156 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_redirect_tooltip_methodlist">Custom Redirection URL <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Redirects users to the specific Url after login(can be configured according to user role)</span></span></li>
|
157 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_rba_tooltip_methodlist">Remember Device <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i> <span class="mo2fa_methodlist"t> It give users the option to rememeber device.Skip 2FA for trusted device</span></span></li>
|
158 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Passwordless Login </li>
|
159 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_custom_sms_tooltip_methodlist">Custom SMS Gateway <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>You can integrate your own SMS gateway with miniOrange</span></span></li>
|
160 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_shortcode_tooltip_methodlist">Shortcode Addon <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i> <span class="mo2fa_methodlist"t>
|
161 |
-
1. 2FA Shortcode - Use to add 2FA on any page.<br>
|
162 |
-
2. Reconfigure 2FA Addon - Add on to reconfiigure 2FA.
|
163 |
-
</span></span></li>
|
164 |
-
<li class="mo2fa_per_feature_collect_mo-2fa mo2fa_unltimate_feature">
|
165 |
-
<span class="mo2fa_per_tooltip_methodlist">Personalisation Addon <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>
|
166 |
-
<ul class="methods-list-mo2fa" style="margin-left: -43px;">
|
167 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Customize 2FA Login Screen</li>
|
168 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Customize Email Template</li>
|
169 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Customize Security Questions </li>
|
170 |
-
</ul>
|
171 |
-
</span>
|
172 |
-
</span>
|
173 |
-
</li>
|
174 |
-
|
175 |
-
|
176 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Page Restriction Addon</li>
|
177 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_fido_tooltip_methodlist">FIDO2/WebAuthn <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Allows you to login to any site using device credentials.</span></span></li>
|
178 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Concurrent Session Restriction </li>
|
179 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Skip 2FA For Specified IP </li>
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
|
184 |
-
|
|
|
|
|
|
|
185 |
|
186 |
-
|
|
|
|
|
|
|
|
|
187 |
</div>
|
188 |
-
|
189 |
-
</div>
|
190 |
-
<script>
|
191 |
-
|
192 |
-
var base_price_site_all_inclusive =0;
|
193 |
-
var display_my_all_inclusive_price = parseInt(base_price_site_all_inclusive)+parseInt(0)+parseInt(0)+parseInt(0);
|
194 |
-
document.getElementById("mo2fa_display_my_all_inclusive_pricing").innerHTML = + display_my_all_inclusive_price;
|
195 |
-
jQuery('#mo2fa_all_inclusive_price_mo').click();
|
196 |
-
function mo2fa_update_site_limit_all_inclusive() {
|
197 |
-
var sites_all_inclusive = document.getElementById("mo2fa_all_inclusive_price_mo").value;
|
198 |
-
var total_inclusive = parseInt(base_price_site_all_inclusive)+parseInt(sites_all_inclusive);
|
199 |
-
|
200 |
-
document.getElementById("mo2fa_display_my_all_inclusive_pricing").innerHTML = + total_inclusive;
|
201 |
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
|
204 |
-
</script>
|
205 |
-
</div>
|
206 |
-
|
207 |
-
<div class="mo2f_upgrade_main_div">
|
208 |
-
|
209 |
-
<div id="mofa_pricing_tabs_mo" class="mo2fa_pricing_tabs_mo mo2fa_pricing_tabs_mo_premium_lite">
|
210 |
-
<div class="mo2fa_pricing_head_blue">
|
211 |
-
<div id="mo2fa_pricing_head" class="mo2fa_pricing_head_supporter"><center><h3 class="mo2fa_pricing_head_mo_2fa">Unlimited Users<br> Essential 2FA <i class="mo2fa_tooltip fa fa-info-circle" aria-hidden="true"><span class="mo2fa_tooltiptext">
|
212 |
-
Enforce 2FA for all users<br>
|
213 |
-
Role-Based Authentication
|
214 |
-
</span></i></h3></center></div><br><br>
|
215 |
-
|
216 |
-
<div class="mo2fa_dollar"><center><span>$</span><span id="mo2fa_pricing_adder_site_based"></span><span class="mo2fa_per_year">/Year</span></center></div>
|
217 |
-
|
218 |
-
<br>
|
219 |
-
</div>
|
220 |
-
<h3 class="mo2fa_plan-type"><b>PREMIUM LITE</b></h3>
|
221 |
-
<div id="mo2fa_pricing_addons_site_based" class="mo2fa_pricing">
|
222 |
-
<center>
|
223 |
-
<div id="mo2fa_purchase_user_limit">
|
224 |
-
|
225 |
-
<center>
|
226 |
-
<select id="mo2fa_site_price" onchange="mo2fa_update_site_limit()" onclick="mo2fa_update_site_limit()" class="mo2fa_increase_my_limit">
|
227 |
-
<option value="99">1 SITE</option>
|
228 |
-
<option value="179">2 SITES</option>
|
229 |
-
<option value="299">5 SITES </option>
|
230 |
-
<option value="449">10 SITES</option>
|
231 |
-
<option value="599">25 SITES</option>
|
232 |
-
|
233 |
-
</select>
|
234 |
-
</div>
|
235 |
-
|
236 |
-
<div id="mo2fa_custom_my_plan_2fa_mo">
|
237 |
-
<center>
|
238 |
-
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
239 |
-
<a onclick="mo2f_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Upgrade</button></a>
|
240 |
-
<?php }else{ ?>
|
241 |
-
<a onclick="mo2f_register_and_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Upgrade</button></a>
|
242 |
-
<?php }?>
|
243 |
-
</center>
|
244 |
-
</div>
|
245 |
-
<a href="https://developers.miniorange.com/docs/security/wordpress/wp-security/miniorange-2fa-premium-plugin-installation-guide" target="blank" class="mo2f-installation-steps"><strong>Installation Steps</strong></a>
|
246 |
-
</center>
|
247 |
-
|
248 |
-
</div>
|
249 |
-
<div id="mo2fa_pricing_feature_collection_supporter" class="mo2fa_pricing_feature_collection_supporter">
|
250 |
-
<div id="mo2fa_pricing_feature_collection" class="mo2fa_pricing_feature_collection">
|
251 |
-
<ul class="mo2fa_ul">
|
252 |
-
<center><p class="mo2fa_feature"><strong>Features</strong></p></center>
|
253 |
-
|
254 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
|
256 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_on_per_tooltip_methodlist">
|
257 |
-
On-Premise Solution <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i> <span class="mo2fa_methodlist"t>Users' data is stored on their end.</span></span>
|
258 |
-
</li>
|
259 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Single Site Support</li>
|
260 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Configure for Unlimited Users</li>
|
261 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Unlimited Email Transactions</li>
|
262 |
-
|
263 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">
|
264 |
-
<span class="mo2fa_tooltip_methodlist">10+ Authentication Methods <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i>
|
265 |
-
<span class="mo2fa_methodlist"t>
|
266 |
-
<ul class="methods-list-mo2fa" style="margin-left: -43px; ">
|
267 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Google Authenticator</li>
|
268 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over SMS</li>
|
269 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over Email</li>
|
270 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Email Verification</li>
|
271 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Security Questions</li>
|
272 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Authy Authenticator</li>
|
273 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Microsoft Authenticator</li>
|
274 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">LastPass Authenticator</li>
|
275 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">FreeOTP Authenticator</li>
|
276 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Duo Mobile Authenticator</li>
|
277 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">miniOrange QR Code Authenticator</li>
|
278 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">miniOrange Soft Token</li>
|
279 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">miniOrange Push Notification</li>
|
280 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">OTP Over SMS and Email</li>
|
281 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">Hardware Token</li>
|
282 |
-
|
283 |
-
</ul>
|
284 |
-
</span>
|
285 |
-
</span>
|
286 |
-
</li>
|
287 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_enforce_2fa_tooltip_methodlist">Enforce 2FA Set-up For Users <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Enforce users to set their 2FA after installing the plugin</span></span> </li>
|
288 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_role_tooltip_methodlist"> Role-Based 2FA <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i> <span class="mo2fa_methodlist"t>You can enable 2FA for specific user role</span></span></li>
|
289 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> 2+ Backup Login Methods</li>
|
290 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_redirect_tooltip_methodlist"> Custom Redirection URL <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Redirects users to the specific Url after login(can be configured according to user role)</span></span></li>
|
291 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_rba_tooltip_methodlist"> Silently Remember Device <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>It allows option to silently remember your devices. 2FA will be skipped for trusted device. </span></span></li>
|
292 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
293 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
294 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
295 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
296 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
297 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
298 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
299 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
300 |
-
|
301 |
-
|
302 |
-
</ul>
|
303 |
|
304 |
-
</div>
|
305 |
-
</div>
|
306 |
|
307 |
-
</div>
|
308 |
-
<script>
|
309 |
-
var base_price_site_based =0;
|
310 |
-
var display_my_site_based_price = parseInt(base_price_site_based)+parseInt(0)+parseInt(0)+parseInt(0);
|
311 |
-
document.getElementById("mo2fa_pricing_adder_site_based").innerHTML = + display_my_site_based_price;
|
312 |
-
jQuery('#mo2fa_site_price').click();
|
313 |
-
function mo2fa_update_site_limit() {
|
314 |
-
var users = document.getElementById("mo2fa_site_price").value;
|
315 |
-
var sms_user_selection= 0;
|
316 |
-
var users_addion = parseInt(base_price_site_based)+parseInt(users)+parseInt(sms_user_selection);
|
317 |
-
|
318 |
-
document.getElementById("mo2fa_pricing_adder_site_based").innerHTML = + users_addion;
|
319 |
-
|
320 |
-
}
|
321 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
322 |
|
323 |
-
</script>
|
324 |
-
</div>
|
325 |
|
326 |
|
327 |
-
<
|
|
|
|
|
328 |
|
329 |
-
<div id="mofa_pricing_tabs_mo" class="mo2fa_pricing_tabs_mo mo2fa_pricing_tabs_mo_enterprise">
|
330 |
-
<div class="mo2fa_pricing_head_sky">
|
331 |
-
<div id="mo2fa_pricing_head" class="mo2fa_pricing_head_supporter">
|
332 |
-
<center><h3 class="mo2fa_pricing_head_mo_2fa">Unlimited Sites<br> Advanced 2FA <i class="mo2fa_tooltip fa fa-info-circle" aria-hidden="true"><span class="mo2fa_tooltiptext">
|
333 |
-
Essential 2FA<br>
|
334 |
-
Security Features<br>
|
335 |
-
Addons
|
336 |
-
</span></i><br>Website Security</h3></center>
|
337 |
-
</div><br><br>
|
338 |
-
<div id="mo2fa_pricing_head_cost" class="mo2fa_pricing_head_supporter">
|
339 |
-
<div class="mo2fa_dollar"> <center><span>$</span><span id="mo2fa_pricing_adder"></span><span class="mo2fa_per_year">/Year</span></center></div>
|
340 |
|
341 |
-
</div>
|
342 |
-
</div>
|
343 |
-
<h3 class="mo2fa_plan-type"><b>ENTERPRISE</b></h3>
|
344 |
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
</
|
361 |
-
</
|
362 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
|
|
|
|
|
|
|
|
|
|
|
364 |
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
<
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
377 |
|
378 |
|
379 |
-
|
380 |
-
|
|
|
|
|
|
|
|
|
381 |
|
382 |
-
<div id="mo2fa_pricing_feature_collection" class="mo2fa_pricing_feature_collection">
|
383 |
-
<ul class="mo2fa_ul">
|
384 |
-
<center><p class="mo2fa_feature"><strong>Features</strong></p></center>
|
385 |
-
|
386 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_cloud_per_tooltip_methodlist">Cloud Solution <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Users data is stored on the miniOrange Cloud</span></span></li>
|
387 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Multisite Support</li>
|
388 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Install on Unlimited Websites</li>
|
389 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Email Transactions Extra</li>
|
390 |
-
|
391 |
-
<li class="mo2fa_ent_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_tooltip_methodlist">15+ Authentication Methods <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i>
|
392 |
-
<span class="mo2fa_methodlist"t>
|
393 |
-
<ul class="methods-list-mo2fa" style="margin-left: -43px;">
|
394 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Google Authenticator</li>
|
395 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over SMS</li>
|
396 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over Email</li>
|
397 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Email Verification</li>
|
398 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over SMS and Email</li>
|
399 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Security Questions</li>
|
400 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Authy Authenticator</li>
|
401 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Microsoft Authenticator</li>
|
402 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">LastPass Authenticator</li>
|
403 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">FreeOTP Authenticator</li>
|
404 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Duo Mobile Authenticator</li>
|
405 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">miniOrange QR Code Authentication</li>
|
406 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">miniOrange Soft Token</li>
|
407 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">miniOrange Push Notification</li>
|
408 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Hardware Token</li>
|
409 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">OTP Over Whatsapp</li>
|
410 |
-
</ul>
|
411 |
-
</span>
|
412 |
-
</span></li>
|
413 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_enforce_2fa_tooltip_methodlist">Enforce 2FA Set-up For Users <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Enforce users to set their 2FA after installing the plugin</span></span></li>
|
414 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_role_tooltip_methodlist">Role-Based 2FA <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>You can enable 2FA for specific user role</span></span></li>
|
415 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> 3+ Backup Login Methods</li>
|
416 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_redirect_tooltip_methodlist">Custom Redirection URL <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Redirects users to the specific Url after login(can be configured according to user role)</span></span></li>
|
417 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_rba_tooltip_methodlist">Remember Device <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t> It give users the option to rememeber device.Skip 2FA for trusted device</span></span></li>
|
418 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Passwordless login </li>
|
419 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_custom_sms_tooltip_methodlist">Custom SMS Gateway <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>
|
420 |
-
You can integrate your own SMS gateway with miniOrange</span><span></li>
|
421 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_shortcode_ent_tooltip_methodlist">Shortcode Addon <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i> <span class="mo2fa_methodlist"t>
|
422 |
-
1. 2FA Shortcode - Use to add 2FA on any page.<br>
|
423 |
-
2. Reconfigure 2FA Addon - Addon to reconfiigure 2FA.</span>
|
424 |
-
</li>
|
425 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
426 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
427 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
428 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
429 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
430 |
-
|
431 |
-
|
432 |
-
</ul>
|
433 |
|
434 |
-
|
435 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
436 |
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
452 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
|
454 |
-
|
|
|
|
|
|
|
|
|
|
|
455 |
|
456 |
-
|
457 |
|
458 |
-
|
|
|
|
|
|
|
|
|
|
|
459 |
|
460 |
-
<div id="mofa_pricing_tabs_mo" class="mo2fa_pricing_tabs_mo mo2fa_pricing_tabs_mo_standard">
|
461 |
-
<div class="mo2fa_pricing_head_sky">
|
462 |
-
<div id="mo2fa_pricing_head" class="mo2fa_pricing_head_supporter"><center><h3 class="mo2fa_pricing_head_mo_2fa">Unlimited Sites<br> Essential 2FA <i class="mo2fa_tooltip mo2fa_tooltip_basic fa fa-info-circle" aria-hidden="true"><span class="mo2fa_tooltiptext mo2fa_tooltiptext_basic">
|
463 |
-
Enforce 2FA for all users<br>
|
464 |
-
Role-Based Authentication
|
465 |
-
</span></i></h3></center></div><br><br>
|
466 |
-
<div id="mo2fa_pricing_head_cost" class="mo2fa_pricing_head_supporter">
|
467 |
-
<div class="mo2fa_dollar"> <center><span>$</span><span id="mo2fa_pricing_adder_standard"></span><span class="mo2fa_per_year">/Year</span></center></div>
|
468 |
|
469 |
-
</div>
|
470 |
-
</div>
|
471 |
-
<h3 class="mo2fa_plan-type"><b>BASIC</b></h3>
|
472 |
|
473 |
-
|
474 |
-
<center>
|
475 |
-
<div id="mo2fa_purchase_user_limit">
|
476 |
-
|
477 |
-
<center>
|
478 |
-
<select id="mo2fa_user_price_standard" onclick="mo2fa_update_user_limit_standard()" onchange="mo2fa_update_user_limit_standard()" class="mo2fa_increase_my_limit">
|
479 |
-
<option value="30" selected>5 USERS</option>
|
480 |
-
<option value="99" >50 USERS</option>
|
481 |
-
<option value="199">100 USERS</option>
|
482 |
-
<option value="349">500 USERS</option>
|
483 |
-
<option value="499">1K USERS</option>
|
484 |
-
<option value="799">5K USERS</option>
|
485 |
-
<option value="999">10K USERS</option>
|
486 |
-
<option value="1449">20K USERS</option>
|
487 |
-
|
488 |
-
</select>
|
489 |
-
</center>
|
490 |
-
</div>
|
491 |
-
|
492 |
|
493 |
-
|
494 |
-
<center>
|
495 |
-
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
496 |
-
<a onclick="mo2f_upgradeform('wp_2fa_premium_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan_ent">Upgrade</button></a>
|
497 |
-
<?php }else{ ?>
|
498 |
-
<a onclick="mo2f_register_and_upgradeform('wp_2fa_premium_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan_ent">Upgrade</button></a>
|
499 |
-
<?php }?>
|
500 |
-
</center>
|
501 |
-
</div>
|
502 |
-
<a href="https://plugins.miniorange.com/how-to-download-2fa-premium-plugin-wordpress" target="blank" class="mo2f-installation-steps"><strong>Installation Steps</strong></a>
|
503 |
-
</center>
|
504 |
-
</div>
|
505 |
|
|
|
|
|
|
|
|
|
|
|
|
|
506 |
|
507 |
-
<div id="mo2fa_pricing_feature_collection_supporter" class="mo2fa_pricing_feature_collection_supporter">
|
508 |
-
|
509 |
|
510 |
-
|
511 |
-
<ul class="mo2fa_ul">
|
512 |
-
<center><p class="mo2fa_feature"><strong>Features</strong></p></center>
|
513 |
-
|
514 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_cloud_per_tooltip_methodlist">Cloud Solution <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Users data is stored on the miniOrange Cloud</span></span></li>
|
515 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Multisite Support</li>
|
516 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Install on Unlimited Websites</li>
|
517 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">Email Transactions Extra</li>
|
518 |
-
|
519 |
-
<li class="mo2fa_ent_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_tooltip_methodlist">5+ Authentication Methods <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i>
|
520 |
-
<span class="mo2fa_methodlist"t>
|
521 |
-
<ul class="methods-list-mo2fa" style="margin-left: -43px;">
|
522 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Google Authenticator</li>
|
523 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over SMS</li>
|
524 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over Email</li>
|
525 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Email Verification</li>
|
526 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">OTP Over SMS and Email</li>
|
527 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">Security Questions</li>
|
528 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">Authy Authenticator</li>
|
529 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">Microsoft Authenticator</li>
|
530 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">LastPass Authenticator</li>
|
531 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">FreeOTP Authenticator</li>
|
532 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">Duo Mobile Authenticator</li>
|
533 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">miniOrange QR Code Authentication</li>
|
534 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">miniOrange Soft Token</li>
|
535 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-size">miniOrange Push Notification</li>
|
536 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">Hardware Token</li>
|
537 |
-
<li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross">OTP Over Whatsapp</li>
|
538 |
-
</ul>
|
539 |
-
</span>
|
540 |
-
</span></li>
|
541 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_enforce_2fa_tooltip_methodlist">Enforce 2FA Set-up For Users <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Enforce users to set their 2FA after installing the plugin</span></span></li>
|
542 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_role_tooltip_methodlist">Role-Based 2FA <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>You can enable 2FA for specific user role</span></span></li>
|
543 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> Backup Login Method</li>
|
544 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><span class="mo2fa_ent_redirect_tooltip_methodlist">Custom Redirection URL <i class="fa fa-info-circle fa-xs" aria-hidden="true"></i><span class="mo2fa_methodlist"t>Redirects users to the specific Url after login(can be configured according to user role)</span></span></li>
|
545 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
546 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
547 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
548 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
549 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
550 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
551 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
552 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
553 |
-
<li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"> <br></li>
|
554 |
-
|
555 |
-
|
556 |
-
</ul>
|
557 |
|
558 |
-
</div>
|
559 |
-
</div>
|
560 |
-
|
561 |
-
</div>
|
562 |
|
563 |
-
|
564 |
-
var base_price =0;
|
565 |
-
var display_me = parseInt(base_price)+parseInt(0)+parseInt(0)+parseInt(0);
|
566 |
-
document.getElementById("mo2fa_pricing_adder_standard").innerHTML = + display_me;
|
567 |
-
jQuery('#mo2fa_user_price_standard').click();
|
568 |
-
function mo2fa_update_user_limit_standard() {
|
569 |
-
var users = document.getElementById("mo2fa_user_price_standard").value;
|
570 |
|
571 |
-
|
572 |
-
|
573 |
-
document.getElementById("mo2fa_pricing_adder_standard").innerHTML = + users_addion;
|
574 |
-
|
575 |
-
}
|
576 |
-
|
577 |
-
|
578 |
-
</script>
|
579 |
|
580 |
-
|
581 |
-
|
|
|
|
|
582 |
<div id="mo2fa_compare">
|
583 |
<center>
|
584 |
<div class=""><a href="#mo2fa_more_deails" onclick="mo2fa_show_details()"><button class="mo2fa_upgrade_my_plan mo2fa_compare1">Click here to Compare Features</button></a></div>
|
@@ -635,7 +486,9 @@ Role-Based Authentication
|
|
635 |
<div class="mo_wpns_upgrade_security_title" >
|
636 |
<div class="mo_wpns_upgrade_page_title_name">
|
637 |
<h1 class="mo_wpns_upgrade_page_header">
|
638 |
-
Login and Spam</h1
|
|
|
|
|
639 |
|
640 |
<div class="mo_wpns_upgrade_page_ns_background">
|
641 |
<center>
|
@@ -717,7 +570,7 @@ Role-Based Authentication
|
|
717 |
<div class="mo_wpns_upgrade_page_space_in_div"></div>
|
718 |
<div class="mo_wpns_upgrade_security_title" >
|
719 |
<div class="mo_wpns_upgrade_page_title_name">
|
720 |
-
<h1
|
721 |
Encrypted Backup</h1><hr class="mo_wpns_upgrade_page_hr"></div>
|
722 |
|
723 |
<div class="mo_wpns_upgrade_page_ns_background">
|
@@ -765,27 +618,30 @@ Role-Based Authentication
|
|
765 |
<thead>
|
766 |
<tr class="mo2fa_main_category_header" style="font-size: 20px;">
|
767 |
<th scope="col">Features</th>
|
768 |
-
|
769 |
-
|
770 |
<th scope="col" class="mo2fa_plugins"><center>Enterprise</center></th>
|
771 |
-
<th scope="col" class="mo2fa_plugins"><center>
|
|
|
772 |
</tr>
|
773 |
</thead>
|
774 |
<tbody>
|
775 |
<tr>
|
776 |
<th scope="row">Unlimited Sites</th>
|
777 |
-
|
778 |
-
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
779 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
780 |
<td><center><i class="fas fa-check"></i></center></td>
|
|
|
|
|
|
|
781 |
</tr>
|
782 |
|
783 |
<tr>
|
784 |
<th scope="row">Unlimited Users</th>
|
785 |
-
|
786 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
787 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
788 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
|
|
789 |
|
790 |
</tr>
|
791 |
<tr class="mo2fa_bg_category_main">
|
@@ -796,37 +652,28 @@ Role-Based Authentication
|
|
796 |
<td></td>
|
797 |
</tr>
|
798 |
<tr>
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
</tr>
|
805 |
-
<tr>
|
806 |
-
<th scope="row" class="mo2fa_category_feature">Security Questions</th>
|
807 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
808 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
809 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
810 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
811 |
|
812 |
-
</tr>
|
813 |
-
<tr>
|
814 |
-
<th scope="row" class="mo2fa_category_feature">TOTP Based Authenticator</th>
|
815 |
<td><center><i class="fas fa-check"></i></center></td>
|
816 |
<td><center><i class="fas fa-check"></i></center></td>
|
817 |
<td><center><i class="fas fa-check"></i></center></td>
|
818 |
<td><center><i class="fas fa-check"></i></center></td>
|
819 |
|
820 |
</tr>
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
|
|
825 |
<td><center><i class="fas fa-check"></i></center></td>
|
826 |
<td><center><i class="fas fa-check"></i></center></td>
|
827 |
|
828 |
-
</tr>
|
829 |
-
|
830 |
<th scope="row" class="mo2fa_category_feature">Email Verification</th>
|
831 |
<td><center><i class="fas fa-check"></i></center></td>
|
832 |
<td><center><i class="fas fa-check"></i></center></td>
|
@@ -834,74 +681,91 @@ Role-Based Authentication
|
|
834 |
<td><center><i class="fas fa-check"></i></center></td>
|
835 |
|
836 |
</tr>
|
837 |
-
<tr>
|
838 |
-
<th scope="row" class="mo2fa_category_feature">OTP Over Email (Email Charges apply)</th>
|
839 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
840 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
841 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
842 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
843 |
|
|
|
844 |
|
845 |
-
|
846 |
-
|
847 |
-
<
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
|
853 |
-
</tr>
|
854 |
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
863 |
<th scope="row" class="mo2fa_category_feature">miniOrange Soft Token</th>
|
864 |
-
|
865 |
-
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
866 |
<td><center><i class="fas fa-check"></i></center></td>
|
867 |
<td><center><i class="fas fa-check"></i></center></td>
|
|
|
|
|
868 |
</tr>
|
869 |
<tr>
|
870 |
<th scope="row" class="mo2fa_category_feature">miniOrange Push Notification</th>
|
871 |
-
|
872 |
-
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
873 |
<td><center><i class="fas fa-check"></i></center></td>
|
874 |
<td><center><i class="fas fa-check"></i></center></td>
|
875 |
-
|
876 |
-
<tr>
|
877 |
-
<th scope="row" class="mo2fa_category_feature">OTP Over SMS and Email (SMS and Email Charges apply)</th>
|
878 |
-
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
879 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
880 |
-
|
881 |
-
<
|
882 |
|
883 |
-
|
884 |
-
<tr>
|
885 |
-
<th scope="row" class="mo2fa_category_feature">Hardware Token</th>
|
886 |
-
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
887 |
-
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
888 |
<td><center><i class="fas fa-check"></i></center></td>
|
889 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
890 |
-
|
891 |
-
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
892 |
<tr>
|
893 |
<th scope="row" class="mo2fa_category_feature">OTP Over Whatsapp (Add-on)</th>
|
894 |
-
|
895 |
<td><center></center></td>
|
896 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
897 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
898 |
</tr>
|
899 |
<tr>
|
900 |
<th scope="row" class="mo2fa_category_feature">OTP Over Telegram</th>
|
901 |
-
|
902 |
<td><center></center></td>
|
903 |
<td><center></center></td>
|
904 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
905 |
</tr>
|
906 |
<tr class="mo2fa_bg_category_main">
|
907 |
<th scope="row">Backup Login Methods</th>
|
@@ -919,17 +783,20 @@ Role-Based Authentication
|
|
919 |
</tr>
|
920 |
<tr>
|
921 |
<th scope="row" class="mo2fa_category_feature">OTP Over Email</th>
|
922 |
-
|
923 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
924 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
925 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
|
|
926 |
</tr>
|
927 |
<tr>
|
928 |
<th scope="row" class="mo2fa_category_feature">Backup Codes</th>
|
|
|
929 |
<td><center><i class="fas fa-check"></i></center></td>
|
930 |
<td><center><i class="fas fa-check"></i></center></td>
|
931 |
<td><center><i class="fas fa-check"></i></center></td>
|
932 |
-
|
933 |
</tr>
|
934 |
<tr class="mo2fa_bg_category_main">
|
935 |
<th scope="row">Password Policy</th>
|
@@ -941,17 +808,17 @@ Role-Based Authentication
|
|
941 |
</tr>
|
942 |
<tr>
|
943 |
<th scope="row" class="mo2fa_category_feature">Passwordless Login</th>
|
|
|
944 |
<td><center><i class="fas fa-check"></i></center></td>
|
945 |
-
|
946 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
947 |
<td><center><i class="fas fa-check"></i></center></td>
|
948 |
</tr>
|
949 |
|
950 |
<tr>
|
951 |
-
<th scope="row">Custom Gateway</th>
|
952 |
-
<td><center
|
953 |
<td><center><i class="fas fa-check"></i></center></td>
|
954 |
-
<td><center
|
955 |
<td><center><i class="fas fa-check"></i></center></td>
|
956 |
|
957 |
</tr>
|
@@ -965,33 +832,48 @@ Role-Based Authentication
|
|
965 |
</tr>
|
966 |
<tr>
|
967 |
<th scope="row" class="mo2fa_category_feature">Remember Device Add-on</br><p class="mo2fa_description">You can save your device using the Remember device addon and you will get a two-factor authentication </br>prompt to check your identity if you try to login from different devices.</p></th>
|
968 |
-
|
969 |
-
<td><center
|
970 |
-
<td><center><
|
971 |
-
<td><center
|
|
|
972 |
</tr>
|
973 |
<tr>
|
974 |
<th scope="row" class="mo2fa_category_feature">Personalization Add-on<p class="mo2fa_description">You'll get many more customization options in Personalization, such as </br>ustom Email and SMS Template, Custom Login Popup, Custom Security Questions, and many more.</p></th>
|
975 |
-
|
976 |
-
<td><center
|
977 |
-
<td><center><
|
978 |
-
<td><center
|
|
|
979 |
</tr>
|
980 |
<tr>
|
981 |
<th scope="row" class="mo2fa_category_feature">Short Codes Add-on<p class="mo2fa_description">Shortcode Add-ons mostly include Allow 2fa shortcode (you can use this this to add 2fa on any page), </br>Reconfigure 2fa add-on (you can use this add-on to reconfigure your 2fa if you have lost your 2fa verification ability), remember device shortcode.</p></th>
|
982 |
-
|
983 |
-
<td><center
|
984 |
-
<td><center><
|
985 |
-
<td><center
|
|
|
986 |
</tr>
|
987 |
<tr>
|
988 |
<th scope="row" class="mo2fa_category_feature">Session Management<p class="mo2fa_description">Session Management prevents account sharing and limits number of simultaneous sessions. It also supports session control, login limit, idle session logout feature.</th>
|
989 |
|
990 |
-
|
991 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
992 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
993 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
994 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
995 |
<tr class="mo2fa_bg_category_main">
|
996 |
<th scope="row">Advance WordPress Login Settings</th>
|
997 |
<td></td>
|
@@ -1016,21 +898,23 @@ Role-Based Authentication
|
|
1016 |
</tr>
|
1017 |
<tr>
|
1018 |
<th scope="row" class="mo2fa_category_feature">Email Verification during Two-Factor Registration</th>
|
|
|
1019 |
<td><center><i class="fas fa-check"></i></center></td>
|
1020 |
<td><center><i class="fas fa-check"></i></center></td>
|
1021 |
<td><center><i class="fas fa-check"></i></center></td>
|
1022 |
-
|
1023 |
|
1024 |
</tr>
|
1025 |
<tr>
|
1026 |
<th scope="row" class="mo2fa_category_feature">Custom Redirect URL</th>
|
|
|
1027 |
<td><center><i class="fas fa-check"></i></center></td>
|
1028 |
<td><center><i class="fas fa-check"></i></center></td>
|
1029 |
<td><center><i class="fas fa-check"></i></center></td>
|
1030 |
-
|
1031 |
|
1032 |
</tr><tr>
|
1033 |
-
<th scope="row" class="mo2fa_category_feature">Inline Registration</th>
|
1034 |
<td><center><i class="fas fa-check"></i></center></td>
|
1035 |
<td><center><i class="fas fa-check"></i></center></td>
|
1036 |
<td><center><i class="fas fa-check"></i></center></td>
|
@@ -1038,24 +922,27 @@ Role-Based Authentication
|
|
1038 |
|
1039 |
</tr><tr>
|
1040 |
<th scope="row" class="mo2fa_category_feature">Mobile Support</th>
|
|
|
1041 |
<td><center><i class="fas fa-check"></i></center></td>
|
1042 |
<td><center><i class="fas fa-check"></i></center></td>
|
1043 |
<td><center><i class="fas fa-check"></i></center></td>
|
1044 |
-
|
1045 |
|
1046 |
</tr><tr>
|
1047 |
<th scope="row" class="mo2fa_category_feature">Privacy Policy Settings</th>
|
|
|
1048 |
<td><center><i class="fas fa-check"></i></center></td>
|
1049 |
<td><center><i class="fas fa-check"></i></center></td>
|
1050 |
<td><center><i class="fas fa-check"></i></center></td>
|
1051 |
-
|
1052 |
|
1053 |
</tr><tr>
|
1054 |
<th scope="row" class="mo2fa_category_feature">XML-RPC </th>
|
|
|
1055 |
<td><center><i class="fas fa-check"></i></center></td>
|
1056 |
<td><center><i class="fas fa-check"></i></center></td>
|
1057 |
<td><center><i class="fas fa-check"></i></center></td>
|
1058 |
-
|
1059 |
|
1060 |
</tr>
|
1061 |
<tr class="mo2fa_bg_category_main">
|
@@ -1068,98 +955,128 @@ Role-Based Authentication
|
|
1068 |
</tr>
|
1069 |
<tr>
|
1070 |
<th scope="row" class="mo2fa_category_feature">Brute Force Protection</th>
|
1071 |
-
<td><center><i class="fas fa-check"></i></center></td>
|
1072 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1073 |
<td><center><i class="fas fa-check"></i></center></td>
|
|
|
1074 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1075 |
|
1076 |
</tr>
|
1077 |
<tr>
|
1078 |
<th scope="row" class="mo2fa_category_feature">IP Blocking </th>
|
1079 |
-
|
|
|
|
|
1080 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1081 |
<td><center><i class="fas fa-check"></i></center></td>
|
1082 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1083 |
|
1084 |
</tr>
|
1085 |
<tr>
|
1086 |
<th scope="row" class="mo2fa_category_feature">Monitoring</th>
|
1087 |
-
|
|
|
|
|
1088 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1089 |
<td><center><i class="fas fa-check"></i></center></td>
|
1090 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1091 |
|
1092 |
</tr> <tr>
|
1093 |
<th scope="row" class="mo2fa_category_feature">File Protection</th>
|
1094 |
-
|
1095 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1096 |
<td><center><i class="fas fa-check"></i></center></td>
|
1097 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1098 |
|
1099 |
</tr>
|
1100 |
<tr>
|
1101 |
<th scope="row" class="mo2fa_category_feature">Country Blocking </th>
|
1102 |
-
|
1103 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1104 |
<td><center><i class="fas fa-check"></i></center></td>
|
1105 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1106 |
|
1107 |
</tr>
|
1108 |
<tr>
|
1109 |
<th scope="row" class="mo2fa_category_feature">HTACCESS Level Blocking </th>
|
1110 |
-
|
1111 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1112 |
<td><center><i class="fas fa-check"></i></center></td>
|
1113 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1114 |
|
1115 |
</tr>
|
1116 |
<tr>
|
1117 |
<th scope="row" class="mo2fa_category_feature">Browser Blocking </th>
|
1118 |
-
|
1119 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1120 |
<td><center><i class="fas fa-check"></i></center></td>
|
1121 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1122 |
|
1123 |
</tr>
|
1124 |
<tr>
|
1125 |
<th scope="row" class="mo2fa_category_feature">Block Global Blacklisted Email Domains</th>
|
1126 |
-
|
1127 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1128 |
<td><center><i class="fas fa-check"></i></center></td>
|
1129 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1130 |
|
1131 |
</tr>
|
1132 |
<tr>
|
1133 |
<th scope="row" class="mo2fa_category_feature">Manual Block Email Domains</th>
|
1134 |
-
|
1135 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1136 |
<td><center><i class="fas fa-check"></i></center></td>
|
1137 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1138 |
|
1139 |
</tr>
|
1140 |
<tr>
|
1141 |
<th scope="row" class="mo2fa_category_feature">DB Backup</th>
|
1142 |
-
|
1143 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1144 |
<td><center><i class="fas fa-check"></i></center></td>
|
1145 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
1146 |
|
1147 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1148 |
<tr>
|
1149 |
-
<th scope="row">Multi-Site Support</th>
|
1150 |
<td><center><i class="fas fa-check"></i></center></td>
|
1151 |
-
|
1152 |
<td><center><i class="fas fa-check"></i></center></td>
|
|
|
1153 |
<td><center><i class="fas fa-check"></i></center></td>
|
1154 |
-
</tr
|
1155 |
-
|
1156 |
-
|
|
|
1157 |
<td><center></center></td>
|
1158 |
<td><center></center></td>
|
1159 |
<td><center></center></td>
|
|
|
1160 |
|
1161 |
</tr><tr>
|
1162 |
-
<th scope="row">Get online support with GoTo/Zoom meeting</th>
|
1163 |
<td><center><i class="fas fa-check"></i></center></td>
|
1164 |
<td><center><i class="fas fa-check"></i></center></td>
|
1165 |
<td><center><i class="fas fa-check"></i></center></td>
|
@@ -1343,9 +1260,9 @@ function mo2f_scanner_yearly_standard_pricing() {
|
|
1343 |
function mo2f_get_binary_equivalent_2fa_lite( $mo2f_var ) {
|
1344 |
switch ( $mo2f_var ) {
|
1345 |
case 1:
|
1346 |
-
return "<div style='color: #20b2aa;font-size: x-large;float:left;margin:0px 5px;'
|
1347 |
case 0:
|
1348 |
-
return "<div style='color: red;font-size: x-large;float:left;margin:0px 5px;'
|
1349 |
default:
|
1350 |
return $mo2f_var;
|
1351 |
}
|
@@ -1405,7 +1322,7 @@ function mo2f_feature_on_hover_2fa_upgrade( $mo2f_var ) {
|
|
1405 |
function show_2fa_plans()
|
1406 |
{
|
1407 |
document.getElementById('mo2fa_ns_features_only').style.display = "none";
|
1408 |
-
document.getElementById('mo2f_twofa_plans').style.display = "
|
1409 |
document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "none";
|
1410 |
document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "block";
|
1411 |
document.getElementById('mo2f_ns_licensing_plans_title').style.display = "block";
|
@@ -1421,6 +1338,16 @@ function mo2f_feature_on_hover_2fa_upgrade( $mo2f_var ) {
|
|
1421 |
document.getElementById('mo2f_ns_licensing_plans_title').style.display = "none";
|
1422 |
document.getElementById('mo_ns_licensing_plans_title1').style.display = "block";
|
1423 |
document.getElementById('mo2fa_compare').style.display = "none";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1424 |
}
|
1425 |
|
1426 |
function wpns_pricing()
|
@@ -1436,4 +1363,27 @@ function mo2f_feature_on_hover_2fa_upgrade( $mo2f_var ) {
|
|
1436 |
jQuery('.mo2fa_compare1').toggle();
|
1437 |
}
|
1438 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1439 |
</script>
|
72 |
<span class="cd-switch"></span>
|
73 |
|
74 |
|
|
|
|
|
|
|
|
|
75 |
|
76 |
+
<div class="mo2f-pp-row" id="mo2f_twofa_plans">
|
|
|
77 |
|
|
|
|
|
|
|
|
|
|
|
78 |
|
|
|
|
|
|
|
|
|
79 |
|
80 |
+
<div class="mo2f-text-center mo2f-upper-row">
|
81 |
+
<div class="mo2f-cloud-onprem-solution">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
82 |
|
83 |
+
<div class="mo2f-col-md-6 mo2f-cloud-solution-ribbon">
|
84 |
+
<div class="mo2f-ribbon-title">Cloud Solution Plans</div>
|
85 |
+
<p>Synchronize and use same 2FA method across multiple websites.</p>
|
86 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
88 |
+
<div class="mo2f-col-md-6 mo2f-on-prem-ribbon">
|
89 |
+
<div class="mo2f-ribbon-title">On Premise Solution Plans</div>
|
90 |
+
<p>Users' data is stored on your organization's premises.</p>
|
91 |
+
</div>
|
92 |
|
93 |
+
</div>
|
94 |
+
<div class="mo2f-cloud-solution-ribbon-rpn">
|
95 |
+
<div class="mo2f-ribbon-title">Cloud Solution Plans</div>
|
96 |
+
<p>Synchronize and use same 2FA method across multiple websites.</p>
|
97 |
+
</div>
|
98 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
|
100 |
+
<div class="mo2f-text-center mo2f-reg-plans-2fa mo2f-single-site mo2f-single-site-rot" id="mo2fa-plan-name">
|
101 |
+
<div id="mo2f-hover-2fa-1" class="mo2f-col-md-4 mo2f-hover-2fa mo2f-hover-2fa1">
|
102 |
+
<h3>BASIC </h3>
|
103 |
+
|
104 |
+
<div class="mo2f-price-list" class="mo2f-list-border" id="mo2f-list-margin">
|
105 |
+
<div id="mo2f-basic-plan-div" class="mo2f_price_list_border">
|
106 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
107 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Install On Unlimited Websites</span>
|
108 |
+
</li>
|
109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
|
111 |
+
|
112 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
113 |
+
<div class="mo2fa_15_tooltip_methodlist">
|
114 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i>
|
115 |
+
<span>TOTP Based Methods (2FA code via mobile app)</span>
|
116 |
+
<i class="fa fa-info-circle fa-xs" aria-hidden="true"></i>
|
117 |
+
<span class="mo2fa_methodlist">
|
118 |
+
|
119 |
+
Google Authenticator <br>
|
120 |
+
Authy Authenticator <br>
|
121 |
+
Microsoft Authenticato <br>
|
122 |
+
LastPass Authenticator<br>
|
123 |
+
FreeOTP Authenticator<br>
|
124 |
+
Duo Mobile Authenticator <br>
|
125 |
+
|
126 |
+
|
127 |
+
</span>
|
128 |
+
</div>
|
129 |
+
</li>
|
130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
|
|
|
|
|
132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
|
134 |
+
|
135 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span >2FA Code Over Email/Email Verification (Charges Apply)</span></li>
|
136 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span >2FA Code Via SMS (Charges Apply) </span></li>
|
137 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span >Enforce 2FA For Users</span></li>
|
138 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span >Redirection To Custom Url After 2FA</span></li>
|
139 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span >Role-Based 2FA</span></li>
|
140 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span >Backup Login Method</span></li>
|
141 |
+
|
142 |
+
</div>
|
143 |
+
</div>
|
144 |
+
<p class="mo2f-mt"><span class="mo2f-display-1"><span>$</span><span class="mo_basic_price">30</span><sub class="mo2f-year">/year</sub><br></span></p>
|
145 |
+
|
146 |
+
|
147 |
+
<div class="mo2f-container-dropdown mo2f-discount-price">
|
148 |
+
<div class="mo2f-select-dropdown">
|
149 |
+
<select class="mo2f-dropdown-width mo2f-inst-btn2" id="mo_basic_select" onchange="mo2f_change_instance_value('mo_enterprise_select','mo_basic_select',this);">
|
150 |
+
<option value="1" data-price="30"> 5 USERS </option>
|
151 |
+
<option value="2" data-price="49">10 USERS </option>
|
152 |
+
<option value="3" data-price="69">25 USERS </option>
|
153 |
+
<option value="4" data-price="99">50 USERS</option>
|
154 |
+
<option value="5" data-price="199">100 USERS</option>
|
155 |
+
<option value="6" data-price="349">500 USERS</option>
|
156 |
+
<option value="7" data-price="499">1000 USERS</option>
|
157 |
+
<option value="8" data-price="799">5000 USERS</option>
|
158 |
+
<option value="9" data-price="999">10000 USERS</option>
|
159 |
+
<option value="10" data-price="1449">20000 USERS</option>
|
160 |
+
|
161 |
+
|
162 |
+
</select>
|
163 |
+
</div>
|
164 |
+
</div>
|
165 |
+
|
166 |
+
<center>
|
167 |
+
<div id="mo2fa_custom_my_plan_2fa_mo">
|
168 |
+
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
169 |
+
<a onclick="mo2f_upgradeform('wp_2fa_premium_plan','2fa_plan')" target="blank" class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
170 |
+
<?php }else{ ?>
|
171 |
+
<a onclick="mo2f_register_and_upgradeform('wp_2fa_premium_plan','2fa_plan')" target="blank"class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
172 |
+
<?php }?>
|
173 |
+
</div>
|
174 |
+
|
175 |
+
</center>
|
176 |
+
|
177 |
+
</div>
|
178 |
+
|
179 |
+
|
180 |
+
|
181 |
+
|
182 |
+
<div class="mo2f-col-md-4 mo2f-hover-2fa" style="background: rgb(255, 255, 255);">
|
183 |
+
<h3>ENTERPRISE</h3>
|
184 |
+
|
185 |
+
<div class="mo2f-price-list" id="mo2f-list-margin">
|
186 |
+
<div id="mo2f-enterprise-plan-div" class="mo2f_price_list_border">
|
187 |
+
|
188 |
|
|
|
|
|
189 |
|
190 |
|
191 |
+
<li id="mo2f-enterprise-first-element" class="mo2f-choose-plan-2fa mo2f-text-left mo2f-basic-color"><i class="fas fa-arrow-circle-right mo2f-basic-color"></i><span>Everything In Basic</span> </li>
|
192 |
+
|
193 |
+
|
194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
|
|
|
|
|
|
|
196 |
|
197 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
198 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>White labelling (logo, text and color)</span>
|
199 |
+
</li>
|
200 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
201 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Passwordless Login</span>
|
202 |
+
</li>
|
203 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
204 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Configurable 2FA Code Length And Expiration Time.</span></li>
|
205 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
206 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Remember Device(skip 2FA for trusted devices.)</span></li>
|
207 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
208 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Custom SMS Gateway</span></li>
|
209 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
210 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>QR Code Authentication, OTP Over call, Push Notification, Yubikey Hardware Token</span></li>
|
211 |
+
</div>
|
212 |
+
</div>
|
213 |
+
<p class="mo2f-mt"><span class="mo2f-display-1"><span>$</span><span class="mo_enterprise_price">59</span><sub class="mo2f-year">/year</sub><br></span></p>
|
214 |
+
|
215 |
+
<div class="mo2f-container-dropdown mo2f-discount-price">
|
216 |
+
<div class="mo2f-select-dropdown">
|
217 |
+
<select class="mo2f-dropdown-width mo2f-inst-btn2" id="mo_enterprise_select" onchange="mo2f_change_instance_value('mo_enterprise_select','mo_basic_select',this);">
|
218 |
+
<option value="1" selected="" data-price="59"> 5 USERS </option>
|
219 |
+
<option value="2" data-price="78"> 10 USERS </option>
|
220 |
+
<option value="3" data-price="98"> 25 USERS </option>
|
221 |
+
<option value="4" data-price="128"> 50 USERS</option>
|
222 |
+
<option value="5" data-price="228"> 100 USERS</option>
|
223 |
+
<option value="6" data-price="378"> 500 USERS</option>
|
224 |
+
<option value="7" data-price="528"> 1000 USERS</option>
|
225 |
+
<option value="8" data-price="878"> 5000 USERS</option>
|
226 |
+
<option value="9" data-price="1028"> 10000 USERS</option>
|
227 |
+
<option value="10" data-price="1478"> 20000 USERS</option>
|
228 |
+
|
229 |
+
</select>
|
230 |
+
</div>
|
231 |
+
</div>
|
232 |
+
|
233 |
+
<center>
|
234 |
+
<div id="mo2fa_custom_my_plan_2fa_mo">
|
235 |
+
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
236 |
+
<a onclick="mo2f_upgradeform('wp_2fa_enterprise_plan','2fa_plan')" target="blank" class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
237 |
+
<?php }else{ ?>
|
238 |
+
<a onclick="mo2f_register_and_upgradeform('wp_2fa_enterprise_plan','2fa_plan')" target="blank"class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
239 |
+
<?php }?>
|
240 |
+
</div>
|
241 |
+
|
242 |
+
</center>
|
243 |
+
</div>
|
244 |
|
245 |
+
<div class="mo2f-on-prem-ribbon-rpn"><div class="mo2f-ribbon-title">On Premise Solution Plans</div>
|
246 |
+
<p>Users' data is stored on your organization's premises.</p>
|
247 |
+
</div>
|
248 |
+
|
249 |
+
<div id="mo2f-hover-2fa-2" class="mo2f-col-md-4 mo2f-hover-2fa mo2f-hover-2fa2">
|
250 |
|
251 |
+
<h3>PREMIUM LITE</h3>
|
252 |
+
|
253 |
+
<div class="mo2f-price-list" id="mo2f-list-margin">
|
254 |
+
<div id="mo2f-premium-lite-plan-div" class="mo2f_price_list_border">
|
255 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
256 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Unlimited Users And Single-Site Compatible</span>
|
257 |
+
</li>
|
258 |
+
|
259 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left">
|
260 |
+
<div class="mo2fa_15_tooltip_methodlist">
|
261 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i>
|
262 |
+
<span>TOTP Based Methods (2FA code via mobile app)</span>
|
263 |
+
<i class="fa fa-info-circle fa-xs" aria-hidden="true"></i>
|
264 |
+
<span class="mo2fa_methodlist">
|
265 |
+
|
266 |
+
Google Authenticator <br>
|
267 |
+
Authy Authenticator <br>
|
268 |
+
Microsoft Authenticato <br>
|
269 |
+
LastPass Authenticator<br>
|
270 |
+
FreeOTP Authenticator<br>
|
271 |
+
Duo Mobile Authenticator <br>
|
272 |
+
|
273 |
+
|
274 |
+
</span>
|
275 |
+
</div>
|
276 |
+
</li>
|
277 |
|
278 |
|
279 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>2FA Code Over Email/Email Verification (Unlimited Transcations)</span></li>
|
280 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>2FA Code Via SMS (Charges Apply)</span></li>
|
281 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Enforce 2FA For Users</span></li>
|
282 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Redirection To Custom Url After 2FA</span></li>
|
283 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Role-Based 2FA</span></li>
|
284 |
+
<li class="mo2f-choose-plan-2fa mo2f-text-left"><i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Backup Login Method</span></li>
|
285 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
286 |
|
287 |
+
|
288 |
+
|
289 |
+
|
290 |
+
</div>
|
291 |
+
</div>
|
292 |
+
<p class="mo2f-mt"><span class="mo2f-display-1 "><span>$</span><span class="mo_premium_lite_price">99</span><sub class="mo2f-year">/year</sub></span><br></p>
|
293 |
+
|
294 |
+
<div class="mo2f-container-dropdown mo2f-discount-price">
|
295 |
+
<div class="mo2f-select-dropdown">
|
296 |
+
<select class="mo2f-dropdown-width mo2f-inst-btn2" id="mo_premium_lite_select" onchange="mo2f_change_instance_value('mo_premium_select','mo_premium_lite_select',this);">
|
297 |
+
<option value="1" data-price="99"> 1 SITE </option>
|
298 |
+
<option value="2" data-price="179"> 2 SITES</option>
|
299 |
+
<option value="3" data-price="299"> 5 SITES</option>
|
300 |
+
<option value="4" data-price="449"> 10 SITES</option>
|
301 |
+
<option value="5" data-price="599"> 25 SITES</option>
|
302 |
+
</select>
|
303 |
+
|
304 |
+
</div>
|
305 |
+
</div>
|
306 |
+
<center>
|
307 |
+
<div id="mo2fa_custom_my_plan_2fa_mo">
|
308 |
+
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
309 |
+
<a onclick="mo2f_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" target="blank" class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
310 |
+
<?php }else{ ?>
|
311 |
+
<a onclick="mo2f_register_and_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" target="blank"class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
312 |
+
<?php }?>
|
313 |
+
</div>
|
314 |
+
|
315 |
+
</center>
|
316 |
+
|
317 |
+
</div>
|
318 |
+
|
319 |
|
320 |
+
<div class="mo2f-col-md-4 mo2f-hover-2fa mo2f-incl-plan-2fa">
|
321 |
+
|
322 |
+
|
323 |
+
<div class="mo2f-product">
|
324 |
+
<div class="mo2f-price-tag">
|
325 |
+
<p class="mo2f-price">Best Value</p>
|
326 |
+
</div>
|
327 |
+
|
328 |
+
<h3 >ALL-INCLUSIVE</h3>
|
329 |
+
|
330 |
+
<div class="mo2f-price-list mo2f-text-left mo2f-price-list-incl" id="mo2f-list-margin">
|
331 |
+
<div id="mo2f-all-inclusive-plan-div" class="mo2f_price_list_border">
|
332 |
+
<li id="mo2f-all-inclusive-first-element" class="mo2f-choose-plan-2fa mo2f-text-left mo2f-premium-color"><i class="fas fa-arrow-circle-right mo2f-premium-color"></i><span>Everything In Premium Lite </span>
|
333 |
+
|
334 |
+
</li>
|
335 |
+
|
336 |
+
|
337 |
+
<li class="mo2f-choose-plan-2fa">
|
338 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>2FA Code Via Telegram</span>
|
339 |
+
</li>
|
340 |
+
<li class="mo2f-choose-plan-2fa">
|
341 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Remember Device (Skip 2FA for trusted device)</span>
|
342 |
+
</li>
|
343 |
+
<li class="mo2f-choose-plan-2fa">
|
344 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>White labelling (logo, text and color)</span>
|
345 |
+
</li>
|
346 |
+
<li class="mo2f-choose-plan-2fa">
|
347 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Page Restriction (2FA to access specific pages)</span>
|
348 |
+
</li>
|
349 |
+
<li class="mo2f-choose-plan-2fa">
|
350 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Concurrent Session Restriction</span>
|
351 |
+
</li>
|
352 |
+
<li class="mo2f-choose-plan-2fa">
|
353 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>WebAuthn (Login using device credentials)</span>
|
354 |
+
</li>
|
355 |
+
<li class="mo2f-choose-plan-2fa">
|
356 |
+
<i class="fas fa-arrow-circle-right mo2f-text-success"></i><span>Skip 2FA For Specified IPs.</span>
|
357 |
+
</li>
|
358 |
+
</div>
|
359 |
+
</div>
|
360 |
+
<p class="mo2f-mt"><span class="mo2f-display-1"><span>$</span><span class="mo_premium_price">199</span><sub class="mo2f-year">/year</sub></span><br></p>
|
361 |
|
362 |
+
|
363 |
+
<div class="mo2f-container-dropdown mo2f-discount-price">
|
364 |
+
<div class="mo2f-select-dropdown">
|
365 |
+
<select class="mo2f-dropdown-width mo2f-inst-btn2" id="mo_premium_select" onchange="mo2f_change_instance_value('mo_premium_select','mo_premium_lite_select',this);">
|
366 |
+
<option value="1" data-price="199"> 1 SITE </option>
|
367 |
+
<option value="2" data-price="299"> 2 SITES</option>
|
368 |
+
<option value="3" data-price="499"> 5 SITES</option>
|
369 |
+
<option value="4" data-price="799"> 10 SITES</option>
|
370 |
+
<option value="5" data-price="1099"> 25 SITES</option>
|
371 |
+
</select>
|
372 |
+
|
373 |
+
</div>
|
374 |
+
</div>
|
375 |
+
<center>
|
376 |
+
<div id="mo2fa_custom_my_plan_2fa_mo">
|
377 |
+
<?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
|
378 |
+
<a onclick="mo2f_upgradeform('wp_security_two_factor_all_inclusive_plan','2fa_plan')" target="blank" class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
379 |
+
<?php }else{ ?>
|
380 |
+
<a onclick="mo2f_register_and_upgradeform('wp_security_two_factor_all_inclusive_plan','2fa_plan')" target="blank"class="mo2f-license-btn mo2f-license-btn-2fa">UPGRADE NOW</a>
|
381 |
+
<?php }?>
|
382 |
+
</div>
|
383 |
+
|
384 |
+
</center>
|
385 |
+
</div>
|
386 |
+
|
387 |
+
|
388 |
+
</div>
|
389 |
+
</div>
|
390 |
|
391 |
+
<br>
|
392 |
+
<br><br>
|
393 |
+
</div>
|
394 |
+
|
395 |
+
<script>
|
396 |
+
document.getElementById("mo2f-enterprise-first-element").addEventListener("mouseover", mouseOver);
|
397 |
|
398 |
+
document.getElementById("mo2f-enterprise-first-element").addEventListener("mouseout", mouseOut);
|
399 |
|
400 |
+
function mouseOver() {
|
401 |
+
document.getElementById("mo2f-hover-2fa-1").style.background = "linear-gradient(145deg, #fafbfe,#ffe9cc,#e3ecfe)";
|
402 |
+
}
|
403 |
+
function mouseOut() {
|
404 |
+
document.getElementById("mo2f-hover-2fa-1").style.background = "#fff";
|
405 |
+
}
|
406 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
|
|
|
|
|
|
|
408 |
|
409 |
+
document.getElementById("mo2f-all-inclusive-first-element").addEventListener("mouseover", premium_mouseOver);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
410 |
|
411 |
+
document.getElementById("mo2f-all-inclusive-first-element").addEventListener("mouseout", premium_mouseOut);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
412 |
|
413 |
+
function premium_mouseOver() {
|
414 |
+
document.getElementById("mo2f-hover-2fa-2").style.background = "linear-gradient(145deg,#fafbfe,#d5f6d3 ,#d4f1d3,#e3ecfe)";
|
415 |
+
}
|
416 |
+
function premium_mouseOut() {
|
417 |
+
document.getElementById("mo2f-hover-2fa-2").style.background = "#fff";
|
418 |
+
}
|
419 |
|
|
|
|
|
420 |
|
421 |
+
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
|
|
|
|
|
|
|
|
|
423 |
|
424 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
425 |
|
426 |
+
|
427 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
428 |
|
429 |
+
|
430 |
+
|
431 |
+
|
432 |
+
|
433 |
<div id="mo2fa_compare">
|
434 |
<center>
|
435 |
<div class=""><a href="#mo2fa_more_deails" onclick="mo2fa_show_details()"><button class="mo2fa_upgrade_my_plan mo2fa_compare1">Click here to Compare Features</button></a></div>
|
486 |
<div class="mo_wpns_upgrade_security_title" >
|
487 |
<div class="mo_wpns_upgrade_page_title_name">
|
488 |
<h1 class="mo_wpns_upgrade_page_header">
|
489 |
+
Login and Spam</h1>
|
490 |
+
<hr class="mo_wpns_upgrade_page_hr">
|
491 |
+
</div>
|
492 |
|
493 |
<div class="mo_wpns_upgrade_page_ns_background">
|
494 |
<center>
|
570 |
<div class="mo_wpns_upgrade_page_space_in_div"></div>
|
571 |
<div class="mo_wpns_upgrade_security_title" >
|
572 |
<div class="mo_wpns_upgrade_page_title_name">
|
573 |
+
<h1 class="mo_wpns_upgrade_page_header">
|
574 |
Encrypted Backup</h1><hr class="mo_wpns_upgrade_page_hr"></div>
|
575 |
|
576 |
<div class="mo_wpns_upgrade_page_ns_background">
|
618 |
<thead>
|
619 |
<tr class="mo2fa_main_category_header" style="font-size: 20px;">
|
620 |
<th scope="col">Features</th>
|
621 |
+
|
622 |
+
<th scope="col" class="mo2fa_plugins"><center>Basic</center></th>
|
623 |
<th scope="col" class="mo2fa_plugins"><center>Enterprise</center></th>
|
624 |
+
<th scope="col" class="mo2fa_plugins"><center>Premium Lite</center></th>
|
625 |
+
<th scope="col" class="mo2fa_plugins"><center>All Inclusive</center></th>
|
626 |
</tr>
|
627 |
</thead>
|
628 |
<tbody>
|
629 |
<tr>
|
630 |
<th scope="row">Unlimited Sites</th>
|
631 |
+
|
|
|
|
|
632 |
<td><center><i class="fas fa-check"></i></center></td>
|
633 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
634 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
635 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
636 |
</tr>
|
637 |
|
638 |
<tr>
|
639 |
<th scope="row">Unlimited Users</th>
|
640 |
+
|
|
|
641 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
642 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
643 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
644 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
645 |
|
646 |
</tr>
|
647 |
<tr class="mo2fa_bg_category_main">
|
652 |
<td></td>
|
653 |
</tr>
|
654 |
<tr>
|
655 |
+
<th scope="row" class="mo2fa_category_feature">
|
656 |
+
TOTP Based Authenticator
|
657 |
+
<br>
|
658 |
+
<div class="mo2fa-top-auth-unbold"> Google Authenticator<br>Microsoft Authenticator<br>Authy Authenticator<br>Last Pass Authenticator<br>Duo Authenticator</div>
|
659 |
+
</th>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
660 |
|
|
|
|
|
|
|
661 |
<td><center><i class="fas fa-check"></i></center></td>
|
662 |
<td><center><i class="fas fa-check"></i></center></td>
|
663 |
<td><center><i class="fas fa-check"></i></center></td>
|
664 |
<td><center><i class="fas fa-check"></i></center></td>
|
665 |
|
666 |
</tr>
|
667 |
+
|
668 |
+
<tr>
|
669 |
+
<th scope="row" class="mo2fa_category_feature">Security Questions</th>
|
670 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
671 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
672 |
<td><center><i class="fas fa-check"></i></center></td>
|
673 |
<td><center><i class="fas fa-check"></i></center></td>
|
674 |
|
675 |
+
</tr>
|
676 |
+
<tr>
|
677 |
<th scope="row" class="mo2fa_category_feature">Email Verification</th>
|
678 |
<td><center><i class="fas fa-check"></i></center></td>
|
679 |
<td><center><i class="fas fa-check"></i></center></td>
|
681 |
<td><center><i class="fas fa-check"></i></center></td>
|
682 |
|
683 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
684 |
|
685 |
+
|
686 |
|
687 |
+
<tr>
|
688 |
+
<th scope="row" class="mo2fa_category_feature">OTP Over Email</th>
|
689 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
690 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
691 |
+
<td><center>Unlimited</center></td>
|
692 |
+
<td><center>Unlimited</center></td>
|
693 |
+
</tr>
|
694 |
|
|
|
695 |
|
696 |
+
<tr>
|
697 |
+
<th scope="row" class="mo2fa_category_feature">OTP Over SMS</th>
|
698 |
+
|
699 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
700 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
701 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
702 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
703 |
+
|
704 |
+
|
705 |
+
</tr>
|
706 |
+
|
707 |
+
|
708 |
+
|
709 |
+
|
710 |
+
|
711 |
<th scope="row" class="mo2fa_category_feature">miniOrange Soft Token</th>
|
712 |
+
|
|
|
713 |
<td><center><i class="fas fa-check"></i></center></td>
|
714 |
<td><center><i class="fas fa-check"></i></center></td>
|
715 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
716 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
717 |
</tr>
|
718 |
<tr>
|
719 |
<th scope="row" class="mo2fa_category_feature">miniOrange Push Notification</th>
|
720 |
+
|
|
|
721 |
<td><center><i class="fas fa-check"></i></center></td>
|
722 |
<td><center><i class="fas fa-check"></i></center></td>
|
723 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
|
|
|
|
|
|
724 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
725 |
+
</tr>
|
726 |
+
<th scope="row" class="mo2fa_category_feature">miniOrange QR code authentication</th>
|
727 |
|
728 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
|
|
|
|
|
|
|
|
729 |
<td><center><i class="fas fa-check"></i></center></td>
|
730 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
731 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
732 |
+
</tr>
|
733 |
+
|
734 |
+
<tr>
|
735 |
+
<th scope="row" class="mo2fa_category_feature">OTP Over SMS and Email</th>
|
736 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
737 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
738 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
739 |
+
<td><center><a href="<?php echo esc_url(MoWpnsConstants::SMS_EMAIL_TRANSACTION) ?>" target="_blank">Charges Apply</a></center></td>
|
740 |
+
|
741 |
+
|
742 |
+
</tr>
|
743 |
+
|
744 |
+
|
745 |
+
<tr>
|
746 |
+
<th scope="row" class="mo2fa_category_feature">Yubikey Hardware Token</th>
|
747 |
+
<td></td>
|
748 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
749 |
+
<td></td>
|
750 |
+
<td></td>
|
751 |
+
|
752 |
+
|
753 |
+
</tr>
|
754 |
<tr>
|
755 |
<th scope="row" class="mo2fa_category_feature">OTP Over Whatsapp (Add-on)</th>
|
756 |
+
|
757 |
<td><center></center></td>
|
758 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
759 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
760 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
761 |
</tr>
|
762 |
<tr>
|
763 |
<th scope="row" class="mo2fa_category_feature">OTP Over Telegram</th>
|
764 |
+
|
765 |
<td><center></center></td>
|
766 |
<td><center></center></td>
|
767 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
768 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
769 |
</tr>
|
770 |
<tr class="mo2fa_bg_category_main">
|
771 |
<th scope="row">Backup Login Methods</th>
|
783 |
</tr>
|
784 |
<tr>
|
785 |
<th scope="row" class="mo2fa_category_feature">OTP Over Email</th>
|
786 |
+
|
|
|
787 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
788 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
789 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
790 |
+
|
791 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
792 |
</tr>
|
793 |
<tr>
|
794 |
<th scope="row" class="mo2fa_category_feature">Backup Codes</th>
|
795 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
796 |
<td><center><i class="fas fa-check"></i></center></td>
|
797 |
<td><center><i class="fas fa-check"></i></center></td>
|
798 |
<td><center><i class="fas fa-check"></i></center></td>
|
799 |
+
|
800 |
</tr>
|
801 |
<tr class="mo2fa_bg_category_main">
|
802 |
<th scope="row">Password Policy</th>
|
808 |
</tr>
|
809 |
<tr>
|
810 |
<th scope="row" class="mo2fa_category_feature">Passwordless Login</th>
|
811 |
+
<td><center></center></td>
|
812 |
<td><center><i class="fas fa-check"></i></center></td>
|
813 |
+
<td><center></center></td>
|
|
|
814 |
<td><center><i class="fas fa-check"></i></center></td>
|
815 |
</tr>
|
816 |
|
817 |
<tr>
|
818 |
+
<th scope="row" class="mo2fa_category_feature">Custom Gateway</th>
|
819 |
+
<td><center></center></td>
|
820 |
<td><center><i class="fas fa-check"></i></center></td>
|
821 |
+
<td><center></center></td>
|
822 |
<td><center><i class="fas fa-check"></i></center></td>
|
823 |
|
824 |
</tr>
|
832 |
</tr>
|
833 |
<tr>
|
834 |
<th scope="row" class="mo2fa_category_feature">Remember Device Add-on</br><p class="mo2fa_description">You can save your device using the Remember device addon and you will get a two-factor authentication </br>prompt to check your identity if you try to login from different devices.</p></th>
|
835 |
+
|
836 |
+
<td><center></center></td>
|
837 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
838 |
+
<td><center></center></td>
|
839 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
840 |
</tr>
|
841 |
<tr>
|
842 |
<th scope="row" class="mo2fa_category_feature">Personalization Add-on<p class="mo2fa_description">You'll get many more customization options in Personalization, such as </br>ustom Email and SMS Template, Custom Login Popup, Custom Security Questions, and many more.</p></th>
|
843 |
+
|
844 |
+
<td><center></center></td>
|
845 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
846 |
+
<td><center></center></td>
|
847 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
848 |
</tr>
|
849 |
<tr>
|
850 |
<th scope="row" class="mo2fa_category_feature">Short Codes Add-on<p class="mo2fa_description">Shortcode Add-ons mostly include Allow 2fa shortcode (you can use this this to add 2fa on any page), </br>Reconfigure 2fa add-on (you can use this add-on to reconfigure your 2fa if you have lost your 2fa verification ability), remember device shortcode.</p></th>
|
851 |
+
|
852 |
+
<td><center></center></td>
|
853 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
854 |
+
<td><center></center></td>
|
855 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
856 |
</tr>
|
857 |
<tr>
|
858 |
<th scope="row" class="mo2fa_category_feature">Session Management<p class="mo2fa_description">Session Management prevents account sharing and limits number of simultaneous sessions. It also supports session control, login limit, idle session logout feature.</th>
|
859 |
|
860 |
+
|
861 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
862 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
863 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
864 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
865 |
</tr>
|
866 |
+
|
867 |
+
<tr>
|
868 |
+
<th scope="row" class="mo2fa_category_feature">Page Restriction Add-On</th>
|
869 |
+
<td></td>
|
870 |
+
<td></td>
|
871 |
+
<td></td>
|
872 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
873 |
+
|
874 |
+
|
875 |
+
|
876 |
+
</tr>
|
877 |
<tr class="mo2fa_bg_category_main">
|
878 |
<th scope="row">Advance WordPress Login Settings</th>
|
879 |
<td></td>
|
898 |
</tr>
|
899 |
<tr>
|
900 |
<th scope="row" class="mo2fa_category_feature">Email Verification during Two-Factor Registration</th>
|
901 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
902 |
<td><center><i class="fas fa-check"></i></center></td>
|
903 |
<td><center><i class="fas fa-check"></i></center></td>
|
904 |
<td><center><i class="fas fa-check"></i></center></td>
|
905 |
+
|
906 |
|
907 |
</tr>
|
908 |
<tr>
|
909 |
<th scope="row" class="mo2fa_category_feature">Custom Redirect URL</th>
|
910 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
911 |
<td><center><i class="fas fa-check"></i></center></td>
|
912 |
<td><center><i class="fas fa-check"></i></center></td>
|
913 |
<td><center><i class="fas fa-check"></i></center></td>
|
914 |
+
|
915 |
|
916 |
</tr><tr>
|
917 |
+
<th scope="row" class="mo2fa_category_feature">Inline Registration (Set up 2FA after first login)</th>
|
918 |
<td><center><i class="fas fa-check"></i></center></td>
|
919 |
<td><center><i class="fas fa-check"></i></center></td>
|
920 |
<td><center><i class="fas fa-check"></i></center></td>
|
922 |
|
923 |
</tr><tr>
|
924 |
<th scope="row" class="mo2fa_category_feature">Mobile Support</th>
|
925 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
926 |
<td><center><i class="fas fa-check"></i></center></td>
|
927 |
<td><center><i class="fas fa-check"></i></center></td>
|
928 |
<td><center><i class="fas fa-check"></i></center></td>
|
929 |
+
|
930 |
|
931 |
</tr><tr>
|
932 |
<th scope="row" class="mo2fa_category_feature">Privacy Policy Settings</th>
|
933 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
934 |
<td><center><i class="fas fa-check"></i></center></td>
|
935 |
<td><center><i class="fas fa-check"></i></center></td>
|
936 |
<td><center><i class="fas fa-check"></i></center></td>
|
937 |
+
|
938 |
|
939 |
</tr><tr>
|
940 |
<th scope="row" class="mo2fa_category_feature">XML-RPC </th>
|
941 |
+
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
942 |
<td><center><i class="fas fa-check"></i></center></td>
|
943 |
<td><center><i class="fas fa-check"></i></center></td>
|
944 |
<td><center><i class="fas fa-check"></i></center></td>
|
945 |
+
|
946 |
|
947 |
</tr>
|
948 |
<tr class="mo2fa_bg_category_main">
|
955 |
</tr>
|
956 |
<tr>
|
957 |
<th scope="row" class="mo2fa_category_feature">Brute Force Protection</th>
|
|
|
958 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
959 |
+
|
960 |
<td><center><i class="fas fa-check"></i></center></td>
|
961 |
+
|
962 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
963 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
964 |
|
965 |
</tr>
|
966 |
<tr>
|
967 |
<th scope="row" class="mo2fa_category_feature">IP Blocking </th>
|
968 |
+
|
969 |
+
|
970 |
+
|
971 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
972 |
<td><center><i class="fas fa-check"></i></center></td>
|
973 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
974 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
975 |
|
976 |
</tr>
|
977 |
<tr>
|
978 |
<th scope="row" class="mo2fa_category_feature">Monitoring</th>
|
979 |
+
|
980 |
+
|
981 |
+
|
982 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
983 |
<td><center><i class="fas fa-check"></i></center></td>
|
984 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
985 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
986 |
|
987 |
</tr> <tr>
|
988 |
<th scope="row" class="mo2fa_category_feature">File Protection</th>
|
989 |
+
|
990 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
991 |
<td><center><i class="fas fa-check"></i></center></td>
|
992 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
993 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
994 |
|
995 |
</tr>
|
996 |
<tr>
|
997 |
<th scope="row" class="mo2fa_category_feature">Country Blocking </th>
|
998 |
+
|
999 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1000 |
<td><center><i class="fas fa-check"></i></center></td>
|
1001 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1002 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1003 |
|
1004 |
</tr>
|
1005 |
<tr>
|
1006 |
<th scope="row" class="mo2fa_category_feature">HTACCESS Level Blocking </th>
|
1007 |
+
|
1008 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1009 |
<td><center><i class="fas fa-check"></i></center></td>
|
1010 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1011 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1012 |
|
1013 |
</tr>
|
1014 |
<tr>
|
1015 |
<th scope="row" class="mo2fa_category_feature">Browser Blocking </th>
|
1016 |
+
|
1017 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1018 |
<td><center><i class="fas fa-check"></i></center></td>
|
1019 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1020 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1021 |
|
1022 |
</tr>
|
1023 |
<tr>
|
1024 |
<th scope="row" class="mo2fa_category_feature">Block Global Blacklisted Email Domains</th>
|
1025 |
+
|
1026 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1027 |
<td><center><i class="fas fa-check"></i></center></td>
|
1028 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1029 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1030 |
|
1031 |
</tr>
|
1032 |
<tr>
|
1033 |
<th scope="row" class="mo2fa_category_feature">Manual Block Email Domains</th>
|
1034 |
+
|
1035 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1036 |
<td><center><i class="fas fa-check"></i></center></td>
|
1037 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1038 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1039 |
|
1040 |
</tr>
|
1041 |
<tr>
|
1042 |
<th scope="row" class="mo2fa_category_feature">DB Backup</th>
|
1043 |
+
|
1044 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1045 |
<td><center><i class="fas fa-check"></i></center></td>
|
1046 |
<td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
|
1047 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1048 |
|
1049 |
</tr>
|
1050 |
+
|
1051 |
+
</tr>
|
1052 |
+
<tr class="mo2fa_bg_category_main">
|
1053 |
+
<th scope="row">Additional Features</th>
|
1054 |
+
<td></td>
|
1055 |
+
<td></td>
|
1056 |
+
<td></td>
|
1057 |
+
<td></td>
|
1058 |
+
|
1059 |
+
</tr>
|
1060 |
+
|
1061 |
+
|
1062 |
<tr>
|
1063 |
+
<th scope="row" class="mo2fa_category_feature">Multi-Site Support</th>
|
1064 |
<td><center><i class="fas fa-check"></i></center></td>
|
1065 |
+
|
1066 |
<td><center><i class="fas fa-check"></i></center></td>
|
1067 |
+
<td><center></center></td>
|
1068 |
<td><center><i class="fas fa-check"></i></center></td>
|
1069 |
+
</tr>
|
1070 |
+
<tr>
|
1071 |
+
<th scope="row" class="mo2fa_category_feature">Language Translation Support</th>
|
1072 |
+
|
1073 |
<td><center></center></td>
|
1074 |
<td><center></center></td>
|
1075 |
<td><center></center></td>
|
1076 |
+
<td><center><i class="fas fa-check"></i></center></td>
|
1077 |
|
1078 |
</tr><tr>
|
1079 |
+
<th scope="row" class="mo2fa_category_feature">Get online support with GoTo/Zoom meeting</th>
|
1080 |
<td><center><i class="fas fa-check"></i></center></td>
|
1081 |
<td><center><i class="fas fa-check"></i></center></td>
|
1082 |
<td><center><i class="fas fa-check"></i></center></td>
|
1260 |
function mo2f_get_binary_equivalent_2fa_lite( $mo2f_var ) {
|
1261 |
switch ( $mo2f_var ) {
|
1262 |
case 1:
|
1263 |
+
return "<div style='color: #20b2aa;font-size: x-large;float:left;margin:0px 5px;'>🗸</div>";
|
1264 |
case 0:
|
1265 |
+
return "<div style='color: red;font-size: x-large;float:left;margin:0px 5px;'>×</div>";
|
1266 |
default:
|
1267 |
return $mo2f_var;
|
1268 |
}
|
1322 |
function show_2fa_plans()
|
1323 |
{
|
1324 |
document.getElementById('mo2fa_ns_features_only').style.display = "none";
|
1325 |
+
document.getElementById('mo2f_twofa_plans').style.display = "block";
|
1326 |
document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "none";
|
1327 |
document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "block";
|
1328 |
document.getElementById('mo2f_ns_licensing_plans_title').style.display = "block";
|
1338 |
document.getElementById('mo2f_ns_licensing_plans_title').style.display = "none";
|
1339 |
document.getElementById('mo_ns_licensing_plans_title1').style.display = "block";
|
1340 |
document.getElementById('mo2fa_compare').style.display = "none";
|
1341 |
+
|
1342 |
+
if(document.getElementById('mo2fa_more_deails').style.display!="none")
|
1343 |
+
{
|
1344 |
+
jQuery('#mo2fa_more_deails').toggle();
|
1345 |
+
jQuery('.mo2fa_compare1').toggle();
|
1346 |
+
|
1347 |
+
|
1348 |
+
}
|
1349 |
+
|
1350 |
+
|
1351 |
}
|
1352 |
|
1353 |
function wpns_pricing()
|
1363 |
jQuery('.mo2fa_compare1').toggle();
|
1364 |
}
|
1365 |
|
1366 |
+
|
1367 |
+
var multisite = !1;
|
1368 |
+
|
1369 |
+
function mo2f_change_instance_value(e, r, o, s = !1) {
|
1370 |
+
let p = 0,
|
1371 |
+
u = 0,
|
1372 |
+
n = 0;
|
1373 |
+
if (s) p = jQuery(o).find(":selected").val(), jQuery("#number_of_subsites_premium,#number_of_subsites_all_inclusive").not(o).val(p);
|
1374 |
+
else if (u = jQuery(o).find(":selected").val(), jQuery("#" + r ).not(o).val(u), "" != e) {
|
1375 |
+
document.getElementById(e).value = u;
|
1376 |
+
var c = jQuery("#" + e).find(":selected").data("price");
|
1377 |
+
jQuery("." + e.replace("select", "price")).text(c)
|
1378 |
+
}
|
1379 |
+
multisite && (n = jQuery("#number_of_subsites_premium").find(":selected").data("price"));
|
1380 |
+
var l = jQuery("#" + r).find(":selected").data("price"),
|
1381 |
+
a = jQuery("#" + r).find(":selected").val();
|
1382 |
+
jQuery("." + r.replace("select", "price")).text(parseInt(l) + parseInt(n) * parseInt(a));
|
1383 |
+
}
|
1384 |
+
|
1385 |
+
|
1386 |
+
|
1387 |
+
|
1388 |
+
|
1389 |
</script>
|