Version Description
- Google Authenticator-Two Factor Authentication (2FA, OTP) :
- Theme My Login plugin Support
- Ultimate Memember Registration Support
- Woocommerce Registration Support
- Ultimate Memember Redirect
- Restrict Content Pro Login and Registration
Download this release
Release Info
Developer | cyberlord92 |
Plugin | Google Authenticator – WordPress Two Factor Authentication (2FA) |
Version | 5.4.15 |
Comparing to | |
See all releases |
Code changes from version 5.4.12 to 5.4.15
- api/Mo2f_OnPremRedirect.php +17 -6
- api/class-customer-common-setup.php +6 -6
- api/class-two-factor-setup.php +1 -1
- api/mo2f_api.php +71 -70
- controllers/account.php +5 -4
- controllers/advanced-blocking.php +186 -186
- controllers/backup/backup_ajax.php +1 -1
- controllers/backup/backup_created_report.php +1 -1
- controllers/backup/backup_schdule.php +21 -21
- controllers/content-protection.php +93 -93
- controllers/dashboard_ajax.php +210 -210
- controllers/feedback_footer.php +46 -46
- controllers/licensing.php +49 -49
- controllers/login-security.php +4 -4
- controllers/login-spam.php +9 -9
- controllers/main_controller.php +111 -111
- controllers/malware_scanner/malware_scan_result.php +40 -40
- controllers/malware_scanner/scan_malware.php +9 -10
- controllers/malware_scanner/scan_malware_report.php +4 -4
- controllers/malware_scanner/scan_malware_settings.php +2 -4
- controllers/malware_scanner/scan_malware_summary.php +4 -4
- controllers/navbar.php +83 -83
- controllers/newtork_security_features.php +1 -1
- controllers/notification-settings.php +100 -100
- controllers/pointers.php +2 -1
- controllers/registration-security.php +128 -128
- controllers/tour-model.php +1 -1
- controllers/tour/tour_ajax.php +1 -1
- controllers/two-fa-intro.php +222 -222
- controllers/twofa/mo2fa_common_login.php +132 -20
- controllers/twofa/mo2fa_inline_registration.php +16 -12
- controllers/twofa/setup_twofa.php +38 -35
- controllers/twofa/two_fa.php +3 -3
- controllers/twofa/two_fa_addon.php +5 -5
- controllers/twofa/two_fa_custom_form.php +8 -1
- controllers/twofa/two_fa_premium_feature.php +2 -2
- controllers/twofa/two_factor_ajax.php +121 -28
- controllers/upgrade.php +1 -1
- controllers/wpns-loginsecurity-ajax.php +1208 -1170
- database/database_functions.php +819 -813
- database/database_functions_2fa.php +4 -2
- database/mo2f_db_options.php +37 -0
- handler/WAF/database/mo-waf-db-common.php +25 -0
- handler/WAF/database/mo-waf-db.php +1 -1
- handler/WAF/database/mo-waf-plugin-db.php +4 -1
- handler/WAF/mo-waf-plugin.php +211 -210
- handler/WAF/mo-waf.php +206 -206
- handler/backup.php +321 -319
- handler/feedback_form.php +1 -1
- handler/logger.php +36 -36
- handler/login.php +6 -6
- handler/mo-block.html +9 -9
- handler/recaptcha.php +106 -106
- handler/security_features.php +3 -3
- handler/twofa/class_miniorange_2fa_strong_password.php +107 -110
- handler/twofa/setup_twofa.php +918 -877
- handler/twofa/two_fa_constants.php +1 -1
- handler/twofa/two_fa_get_details.php +0 -2
- handler/twofa/two_fa_login.php +8 -2
- handler/twofa/two_fa_pass2login.php +201 -63
- handler/twofa/two_fa_settings.php +83 -67
- handler/twofa/two_fa_short_call.php +43 -0
- handler/twofa/two_fa_short_custom.php +80 -0
- handler/twofa/two_fa_short_gateway.php +67 -0
- handler/twofa/two_fa_utility.php +17 -3
- helper/constants.php +96 -96
- helper/curl.php +285 -284
- helper/dashboard_security_notification.php +270 -264
- helper/mo_twofa_sessions.php +53 -0
- helper/pluginUtility.php +6 -1
- helper/plugins.php +102 -102
- helper/utility.php +22 -8
- includes/css/bootstrap.min.css +5734 -5734
- includes/css/front_end_login.css +618 -618
- includes/css/jquery.ui.css +743 -743
- includes/css/phone.css +35 -0
- includes/css/popup.css +82 -82
- includes/css/style_settings.css +131 -52
- includes/js/bootstrap.min.js +6 -6
- includes/js/custom-ajax-rcp.js +268 -0
- includes/js/custom-form-ajax.js +487 -0
- includes/js/custom-form.js +407 -0
- includes/js/dmajax.js +58 -0
- includes/js/jquery.dataTables.min.js +0 -17
api/Mo2f_OnPremRedirect.php
CHANGED
@@ -108,7 +108,6 @@ class Mo2f_OnPremRedirect {
|
|
108 |
function OnpremSendOTPEMail($current_user,$tokenName,$timeName,$email=null)
|
109 |
{
|
110 |
global $Mo2fdbQueries;
|
111 |
-
|
112 |
if(!isset($current_user) or is_null($current_user))
|
113 |
{
|
114 |
if(is_user_logged_in()){
|
@@ -117,10 +116,21 @@ class Mo2f_OnPremRedirect {
|
|
117 |
$current_user = unserialize($_SESSION['mo2f_current_user']);
|
118 |
}
|
119 |
}
|
120 |
-
//$email = get_user_meta($current_user->ID,'email',true);
|
121 |
|
122 |
if(is_null($email) or empty($email) or $email == '' or !isset($email) )
|
|
|
123 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $current_user->ID );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
$subject = '2-Factor Authentication';
|
125 |
$headers = array('Content-Type: text/html; charset=UTF-8');
|
126 |
$otpToken = '';
|
@@ -131,7 +141,6 @@ class Mo2f_OnPremRedirect {
|
|
131 |
update_user_meta($current_user->ID,$tokenName,$otpToken);
|
132 |
update_user_meta($current_user->ID,$timeName,time());
|
133 |
update_user_meta($current_user->ID,'tempRegEmail',$email);
|
134 |
-
//update_site_option('otpTokenEmailV',$otpTokenH);
|
135 |
$message = '<table cellpadding="25" style="margin:0px auto">
|
136 |
<tbody>
|
137 |
<tr>
|
@@ -218,11 +227,14 @@ class Mo2f_OnPremRedirect {
|
|
218 |
{
|
219 |
$arr = array('status' => 'SUCCESS','message'=>'Successfully validated.');
|
220 |
delete_user_meta( $user_id, $dtoken );
|
221 |
-
if($dtoken == 'mo2f_email_check_code')
|
222 |
{
|
223 |
$tempRegEmail = get_user_meta($user_id,'tempRegEmail',true);
|
224 |
if($tempRegEmail != '' or !is_null($tempRegEmail) or !$tempRegEmail)
|
225 |
-
$Mo2fdbQueries->update_user_details($user_id,array(
|
|
|
|
|
|
|
226 |
}
|
227 |
delete_user_meta( $user_id,'tempRegEmail');
|
228 |
}
|
@@ -231,7 +243,6 @@ class Mo2f_OnPremRedirect {
|
|
231 |
$arr = array('status' => 'FAILED','message'=>'TEST FAILED.');
|
232 |
}
|
233 |
|
234 |
-
//exit;
|
235 |
$content = json_encode($arr);
|
236 |
return $content;
|
237 |
|
108 |
function OnpremSendOTPEMail($current_user,$tokenName,$timeName,$email=null)
|
109 |
{
|
110 |
global $Mo2fdbQueries;
|
|
|
111 |
if(!isset($current_user) or is_null($current_user))
|
112 |
{
|
113 |
if(is_user_logged_in()){
|
116 |
$current_user = unserialize($_SESSION['mo2f_current_user']);
|
117 |
}
|
118 |
}
|
|
|
119 |
|
120 |
if(is_null($email) or empty($email) or $email == '' or !isset($email) )
|
121 |
+
{
|
122 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $current_user->ID );
|
123 |
+
if($email == '' or empty($email))
|
124 |
+
{
|
125 |
+
$email = get_user_meta($current_user->ID,'tempEmail',true);
|
126 |
+
|
127 |
+
}
|
128 |
+
|
129 |
+
}
|
130 |
+
if(is_null($email) or empty($email) or $email == '' or !isset($email) )
|
131 |
+
$email = $current_user->user_email;
|
132 |
+
|
133 |
+
delete_user_meta($current_user->ID,'tempEmail');
|
134 |
$subject = '2-Factor Authentication';
|
135 |
$headers = array('Content-Type: text/html; charset=UTF-8');
|
136 |
$otpToken = '';
|
141 |
update_user_meta($current_user->ID,$tokenName,$otpToken);
|
142 |
update_user_meta($current_user->ID,$timeName,time());
|
143 |
update_user_meta($current_user->ID,'tempRegEmail',$email);
|
|
|
144 |
$message = '<table cellpadding="25" style="margin:0px auto">
|
145 |
<tbody>
|
146 |
<tr>
|
227 |
{
|
228 |
$arr = array('status' => 'SUCCESS','message'=>'Successfully validated.');
|
229 |
delete_user_meta( $user_id, $dtoken );
|
230 |
+
if($dtoken == 'mo2f_email_check_code' or $dtoken == 'mo2f_otp_email_code')
|
231 |
{
|
232 |
$tempRegEmail = get_user_meta($user_id,'tempRegEmail',true);
|
233 |
if($tempRegEmail != '' or !is_null($tempRegEmail) or !$tempRegEmail)
|
234 |
+
$Mo2fdbQueries->update_user_details($user_id,array(
|
235 |
+
'mo2f_configured_2FA_method' => 'OTP Over Email',
|
236 |
+
'mo_2factor_user_registration_status' =>'MO_2_FACTOR_PLUGIN_SETTINGS',
|
237 |
+
'mo2f_user_email'=> $tempRegEmail));
|
238 |
}
|
239 |
delete_user_meta( $user_id,'tempRegEmail');
|
240 |
}
|
243 |
$arr = array('status' => 'FAILED','message'=>'TEST FAILED.');
|
244 |
}
|
245 |
|
|
|
246 |
$content = json_encode($arr);
|
247 |
return $content;
|
248 |
|
api/class-customer-common-setup.php
CHANGED
@@ -104,8 +104,8 @@ class Customer_Cloud_Setup {
|
|
104 |
|
105 |
global $user;
|
106 |
$user = wp_get_current_user();
|
107 |
-
$is_nc_with_1_user =
|
108 |
-
$is_ec_with_1_user = !
|
109 |
|
110 |
|
111 |
$customer_feature = "";
|
@@ -255,7 +255,7 @@ class Customer_Cloud_Setup {
|
|
255 |
$field_string = json_encode( $fields );
|
256 |
|
257 |
$content = $mo2fApi->make_curl_call( $url, $field_string, $headers );
|
258 |
-
|
259 |
return $content;
|
260 |
}
|
261 |
|
@@ -346,7 +346,7 @@ class Customer_Cloud_Setup {
|
|
346 |
}
|
347 |
$field_string = json_encode( $fields );
|
348 |
|
349 |
-
|
350 |
$content = $mo2fApi->make_curl_call( $url, $field_string, $headers );
|
351 |
|
352 |
return $content;
|
@@ -362,8 +362,8 @@ class Customer_Cloud_Setup {
|
|
362 |
$url = MO_HOST_NAME . "/moas/rest/customer/contact-us";
|
363 |
global $user;
|
364 |
$user = wp_get_current_user();
|
365 |
-
$is_nc_with_1_user =
|
366 |
-
$is_ec_with_1_user = !
|
367 |
|
368 |
$mo2fApi= new Mo2f_Api();
|
369 |
$customer_feature = "";
|
104 |
|
105 |
global $user;
|
106 |
$user = wp_get_current_user();
|
107 |
+
$is_nc_with_1_user = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NNC', 'get_option');
|
108 |
+
$is_ec_with_1_user = ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
109 |
|
110 |
|
111 |
$customer_feature = "";
|
255 |
$field_string = json_encode( $fields );
|
256 |
|
257 |
$content = $mo2fApi->make_curl_call( $url, $field_string, $headers );
|
258 |
+
|
259 |
return $content;
|
260 |
}
|
261 |
|
346 |
}
|
347 |
$field_string = json_encode( $fields );
|
348 |
|
349 |
+
|
350 |
$content = $mo2fApi->make_curl_call( $url, $field_string, $headers );
|
351 |
|
352 |
return $content;
|
362 |
$url = MO_HOST_NAME . "/moas/rest/customer/contact-us";
|
363 |
global $user;
|
364 |
$user = wp_get_current_user();
|
365 |
+
$is_nc_with_1_user = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NNC', 'get_option');
|
366 |
+
$is_ec_with_1_user = ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
367 |
|
368 |
$mo2fApi= new Mo2f_Api();
|
369 |
$customer_feature = "";
|
api/class-two-factor-setup.php
CHANGED
@@ -159,7 +159,7 @@ class Two_Factor_Setup {
|
|
159 |
|
160 |
$http_header_array = $mo2fApi->get_http_header_array();
|
161 |
|
162 |
-
$response= $mo2fApi->make_curl_call( $url, $fields, $http_header_array );
|
163 |
}
|
164 |
return $response;
|
165 |
}
|
159 |
|
160 |
$http_header_array = $mo2fApi->get_http_header_array();
|
161 |
|
162 |
+
$response = $mo2fApi->make_curl_call( $url, $fields, $http_header_array );
|
163 |
}
|
164 |
return $response;
|
165 |
}
|
api/mo2f_api.php
CHANGED
@@ -1,71 +1,72 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Mo2f_Api
|
4 |
-
{
|
5 |
-
|
6 |
-
public function mo2f_wp_remote_post($url, $args = array()){
|
7 |
-
$response = wp_remote_post($url, $args);
|
8 |
-
if(!is_wp_error($response)){
|
9 |
-
return $response['body'];
|
10 |
-
} else {
|
11 |
-
$message = 'Please enable curl extension. <a href="admin.php?page=mo_2fa_troubleshooting">Click here</a> for the steps to enable curl.';
|
12 |
-
|
13 |
-
return json_encode( array( "status" => 'ERROR', "message" => $message ) );
|
14 |
-
}
|
15 |
-
}
|
16 |
-
|
17 |
-
function get_timestamp() {
|
18 |
-
|
19 |
-
$currentTimeInMillis = round( microtime( true ) * 1000 );
|
20 |
-
$currentTimeInMillis = number_format( $currentTimeInMillis, 0, '', '' );
|
21 |
-
|
22 |
-
return $currentTimeInMillis ;
|
23 |
-
}
|
24 |
-
|
25 |
-
function make_curl_call( $url, $fields, $http_header_array =array("Content-Type"=>"application/json","charset"=>"UTF-8","Authorization"=>"Basic")) {
|
26 |
-
|
27 |
-
if ( gettype( $fields ) !== 'string' ) {
|
28 |
-
$fields = json_encode( $fields );
|
29 |
-
}
|
30 |
-
|
31 |
-
$args = array(
|
32 |
-
'method' => 'POST',
|
33 |
-
'body' => $fields,
|
34 |
-
'timeout' => '5',
|
35 |
-
'redirection' => '5',
|
36 |
-
'
|
37 |
-
'
|
38 |
-
'
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
//
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
$
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
$
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
"
|
64 |
-
"
|
65 |
-
"
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
|
|
71 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Mo2f_Api
|
4 |
+
{
|
5 |
+
|
6 |
+
public function mo2f_wp_remote_post($url, $args = array()){
|
7 |
+
$response = wp_remote_post($url, $args);
|
8 |
+
if(!is_wp_error($response)){
|
9 |
+
return $response['body'];
|
10 |
+
} else {
|
11 |
+
$message = 'Please enable curl extension. <a href="admin.php?page=mo_2fa_troubleshooting">Click here</a> for the steps to enable curl.';
|
12 |
+
|
13 |
+
return json_encode( array( "status" => 'ERROR', "message" => $message ) );
|
14 |
+
}
|
15 |
+
}
|
16 |
+
|
17 |
+
function get_timestamp() {
|
18 |
+
|
19 |
+
$currentTimeInMillis = round( microtime( true ) * 1000 );
|
20 |
+
$currentTimeInMillis = number_format( $currentTimeInMillis, 0, '', '' );
|
21 |
+
|
22 |
+
return $currentTimeInMillis ;
|
23 |
+
}
|
24 |
+
|
25 |
+
function make_curl_call( $url, $fields, $http_header_array =array("Content-Type"=>"application/json","charset"=>"UTF-8","Authorization"=>"Basic")) {
|
26 |
+
|
27 |
+
if ( gettype( $fields ) !== 'string' ) {
|
28 |
+
$fields = json_encode( $fields );
|
29 |
+
}
|
30 |
+
|
31 |
+
$args = array(
|
32 |
+
'method' => 'POST',
|
33 |
+
'body' => $fields,
|
34 |
+
'timeout' => '5',
|
35 |
+
'redirection' => '5',
|
36 |
+
'sslverify' =>true,
|
37 |
+
'httpversion' => '1.0',
|
38 |
+
'blocking' => true,
|
39 |
+
'headers' => $http_header_array
|
40 |
+
);
|
41 |
+
|
42 |
+
// 'sslverify' => true,//MO_TEST_MODE ? false: true
|
43 |
+
//wp_remote_retrieve_body
|
44 |
+
|
45 |
+
$response = Mo2f_Api::mo2f_wp_remote_post($url, $args);
|
46 |
+
return $response;
|
47 |
+
|
48 |
+
}
|
49 |
+
|
50 |
+
function get_http_header_array() {
|
51 |
+
|
52 |
+
$customerKey = get_option( 'mo2f_customerKey' );
|
53 |
+
$apiKey = get_option( 'mo2f_api_key' );
|
54 |
+
|
55 |
+
/* Current time in milliseconds since midnight, January 1, 1970 UTC. */
|
56 |
+
$currentTimeInMillis = Mo2f_Api::get_timestamp();
|
57 |
+
|
58 |
+
/* Creating the Hash using SHA-512 algorithm */
|
59 |
+
$stringToHash = $customerKey . $currentTimeInMillis . $apiKey;;
|
60 |
+
$hashValue = hash( "sha512", $stringToHash );
|
61 |
+
|
62 |
+
$headers = array(
|
63 |
+
"Content-Type" => "application/json",
|
64 |
+
"Customer-Key" => $customerKey,
|
65 |
+
"Timestamp" => $currentTimeInMillis,
|
66 |
+
"Authorization" => $hashValue
|
67 |
+
);
|
68 |
+
|
69 |
+
return $headers;
|
70 |
+
}
|
71 |
+
|
72 |
}
|
controllers/account.php
CHANGED
@@ -48,7 +48,8 @@
|
|
48 |
$key = get_option('mo2f_customerKey');
|
49 |
$api = get_option('mo2f_api_key');
|
50 |
$token = get_option('mo2f_customer_token');
|
51 |
-
$EmailTransactions
|
|
|
52 |
$SMSTransactions = get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')?get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z'):0;
|
53 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'account'.DIRECTORY_SEPARATOR.'profile.php';
|
54 |
}
|
@@ -231,7 +232,7 @@
|
|
231 |
$configured_2FA_method = 'NONE';
|
232 |
}else if ( $mo2f_second_factor != 'NONE' ) {
|
233 |
$configured_2FA_method = MO2f_Utility::mo2f_decode_2_factor( $mo2f_second_factor, "servertowpdb" );
|
234 |
-
if (
|
235 |
$auth_method_abr = str_replace( ' ', '', $configured_2FA_method );
|
236 |
} else {
|
237 |
if ( in_array( $configured_2FA_method, array(
|
@@ -245,7 +246,7 @@
|
|
245 |
}
|
246 |
|
247 |
$mo2f_message = Mo2fConstants:: langTranslate( "ACCOUNT_RETRIEVED_SUCCESSFULLY" );
|
248 |
-
if ( $configured_2FA_method != 'NONE' &&
|
249 |
$mo2f_message .= ' <b>' . $configured_2FA_method . '</b> ' . Mo2fConstants:: langTranslate( "DEFAULT_2ND_FACTOR" ) . '. ';
|
250 |
}
|
251 |
$mo2f_message .= '<a href=\"admin.php?page=mo_2fa_two_fa\" >' . Mo2fConstants:: langTranslate( "CLICK_HERE" ) . '</a> ' . Mo2fConstants:: langTranslate( "CONFIGURE_2FA" );
|
@@ -256,7 +257,7 @@
|
|
256 |
if ( ! empty( $mo2f_customer_selected_plan ) ) {
|
257 |
delete_option( 'mo2f_customer_selected_plan' );
|
258 |
|
259 |
-
if (
|
260 |
{
|
261 |
?><script>window.location.href="admin.php?page=mo_2fa_addons";</script><?php
|
262 |
}
|
48 |
$key = get_option('mo2f_customerKey');
|
49 |
$api = get_option('mo2f_api_key');
|
50 |
$token = get_option('mo2f_customer_token');
|
51 |
+
$EmailTransactions = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
52 |
+
$EmailTransactions = $EmailTransactions? $EmailTransactions : 0;
|
53 |
$SMSTransactions = get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')?get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z'):0;
|
54 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'account'.DIRECTORY_SEPARATOR.'profile.php';
|
55 |
}
|
232 |
$configured_2FA_method = 'NONE';
|
233 |
}else if ( $mo2f_second_factor != 'NONE' ) {
|
234 |
$configured_2FA_method = MO2f_Utility::mo2f_decode_2_factor( $mo2f_second_factor, "servertowpdb" );
|
235 |
+
if ( MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') == 0 ) {
|
236 |
$auth_method_abr = str_replace( ' ', '', $configured_2FA_method );
|
237 |
} else {
|
238 |
if ( in_array( $configured_2FA_method, array(
|
246 |
}
|
247 |
|
248 |
$mo2f_message = Mo2fConstants:: langTranslate( "ACCOUNT_RETRIEVED_SUCCESSFULLY" );
|
249 |
+
if ( $configured_2FA_method != 'NONE' && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') == 0 ) {
|
250 |
$mo2f_message .= ' <b>' . $configured_2FA_method . '</b> ' . Mo2fConstants:: langTranslate( "DEFAULT_2ND_FACTOR" ) . '. ';
|
251 |
}
|
252 |
$mo2f_message .= '<a href=\"admin.php?page=mo_2fa_two_fa\" >' . Mo2fConstants:: langTranslate( "CLICK_HERE" ) . '</a> ' . Mo2fConstants:: langTranslate( "CONFIGURE_2FA" );
|
257 |
if ( ! empty( $mo2f_customer_selected_plan ) ) {
|
258 |
delete_option( 'mo2f_customer_selected_plan' );
|
259 |
|
260 |
+
if (MoWpnsUtility::get_mo2f_db_option('mo2f_planname', 'get_option') == 'addon_plan')
|
261 |
{
|
262 |
?><script>window.location.href="admin.php?page=mo_2fa_addons";</script><?php
|
263 |
}
|
controllers/advanced-blocking.php
CHANGED
@@ -1,186 +1,186 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
|
5 |
-
if(current_user_can( 'manage_options' ) && isset($_POST['option']) )
|
6 |
-
{
|
7 |
-
switch($_POST['option'])
|
8 |
-
{
|
9 |
-
case "mo_wpns_block_ip_range":
|
10 |
-
wpns_handle_range_blocking($_POST); break;
|
11 |
-
case "mo_wpns_browser_blocking":
|
12 |
-
wpns_handle_browser_blocking($_POST); break;
|
13 |
-
case "mo_wpns_enable_htaccess_blocking":
|
14 |
-
wpns_handle_htaccess_blocking($_POST); break;
|
15 |
-
case "mo_wpns_enable_user_agent_blocking":
|
16 |
-
wpns_handle_user_agent_blocking($_POST); break;
|
17 |
-
case "mo_wpns_block_countries":
|
18 |
-
wpns_handle_country_block($_POST); break;
|
19 |
-
case "mo_wpns_block_referrer":
|
20 |
-
wpns_handle_block_referrer($_POST); break;
|
21 |
-
|
22 |
-
}
|
23 |
-
}
|
24 |
-
|
25 |
-
$range_count = is_numeric(get_option('mo_wpns_iprange_count'))
|
26 |
-
&& intval(get_option('mo_wpns_iprange_count')) !=0 ? intval(get_option('mo_wpns_iprange_count')) : 1;
|
27 |
-
$htaccess_block = get_option('mo_wpns_enable_htaccess_blocking') ? "checked" : "";
|
28 |
-
$user_agent = get_option('mo_wpns_enable_user_agent_blocking') ? "checked" : "";
|
29 |
-
$block_chrome = get_option('mo_wpns_block_chrome') ? "checked" : "";
|
30 |
-
$block_ie = get_option('mo_wpns_block_ie') ? "checked" : "";
|
31 |
-
$block_firefox = get_option('mo_wpns_block_firefox') ? "checked" : "";
|
32 |
-
$block_safari = get_option('mo_wpns_block_safari') ? "checked" : "";
|
33 |
-
$block_opera = get_option('mo_wpns_block_opera') ? "checked" : "";
|
34 |
-
$block_edge = get_option('mo_wpns_block_edge') ? "checked" : "";
|
35 |
-
$country = MoWpnsConstants::$country;
|
36 |
-
$codes = get_option( "mo_wpns_countrycodes");
|
37 |
-
$referrers = get_option( 'mo_wpns_referrers');
|
38 |
-
$referrers = explode(";",$referrers);
|
39 |
-
$current_browser= $moWpnsUtility->getCurrentBrowser();
|
40 |
-
$start = array();
|
41 |
-
$end = array();
|
42 |
-
for($i = 1 ; $i <= $range_count ; $i++){
|
43 |
-
$ip_range = get_option("mo_wpns_iprange_range_".$i);
|
44 |
-
if($ip_range){
|
45 |
-
$a = explode('-', $ip_range);
|
46 |
-
|
47 |
-
$start[$i] = $a[0];
|
48 |
-
$end[$i] = $a[1];
|
49 |
-
}
|
50 |
-
|
51 |
-
}
|
52 |
-
if(!isset($start[1])){
|
53 |
-
$start[1] = '';
|
54 |
-
}
|
55 |
-
if(!isset($end[1])){
|
56 |
-
$end[1] = '';
|
57 |
-
}
|
58 |
-
|
59 |
-
switch($current_browser)
|
60 |
-
{
|
61 |
-
case "chrome":
|
62 |
-
$block_chrome = 'disabled'; break;
|
63 |
-
case "ie":
|
64 |
-
$block_ie = 'disabled'; break;
|
65 |
-
case "firefox":
|
66 |
-
$block_firefox= 'disabled'; break;
|
67 |
-
case "safari":
|
68 |
-
$block_safari = 'disabled'; break;
|
69 |
-
case "edge":
|
70 |
-
$block_edge = 'disabled'; break;
|
71 |
-
case "opera":
|
72 |
-
$block_opera = 'disabled'; break;
|
73 |
-
}
|
74 |
-
|
75 |
-
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'advanced-blocking.php';
|
76 |
-
|
77 |
-
|
78 |
-
/* ADVANCD BLOCKING FUNCTIONS */
|
79 |
-
|
80 |
-
//Function to save range of ips
|
81 |
-
function wpns_handle_range_blocking($postedValue)
|
82 |
-
{
|
83 |
-
$flag=0;
|
84 |
-
$max_allowed_ranges = 100;
|
85 |
-
$added_mappings_ranges = 0 ;
|
86 |
-
for($i=1;$i<=$max_allowed_ranges;$i++){
|
87 |
-
if(isset($postedValue['start_'.$i]) && isset($postedValue['end_'.$i]) && !empty($postedValue['start_'.$i]) && !empty($postedValue['end_'.$i])){
|
88 |
-
|
89 |
-
$postedValue['start_'.$i] = sanitize_text_field($postedValue['start_'.$i]);
|
90 |
-
$postedValue['end_'.$i] = sanitize_text_field($postedValue['end_'.$i]);
|
91 |
-
|
92 |
-
if(filter_var($postedValue['start_'.$i] , FILTER_VALIDATE_IP ) && filter_var($postedValue['end_'.$i] , FILTER_VALIDATE_IP ) && (ip2long($postedValue['end_'.$i]) > ip2long($postedValue['start_'.$i])) ){
|
93 |
-
$range = '';
|
94 |
-
$range = $postedValue['start_'.$i];
|
95 |
-
$range .= '-';
|
96 |
-
$range .= $postedValue['end_'.$i];
|
97 |
-
$added_mappings_ranges++;
|
98 |
-
update_option( 'mo_wpns_iprange_range_'.$added_mappings_ranges, $range );
|
99 |
-
|
100 |
-
}
|
101 |
-
else{
|
102 |
-
$flag = 1;
|
103 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('INVALID_IP'),'ERROR');
|
104 |
-
return;
|
105 |
-
}
|
106 |
-
}
|
107 |
-
}
|
108 |
-
|
109 |
-
|
110 |
-
if($added_mappings_ranges==0)
|
111 |
-
update_option( 'mo_wpns_iprange_range_1','');
|
112 |
-
update_option( 'mo_wpns_iprange_count', $added_mappings_ranges);
|
113 |
-
if($flag == 0){
|
114 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('IP_PERMANENTLY_BLOCKED'),'SUCCESS');
|
115 |
-
}
|
116 |
-
}
|
117 |
-
|
118 |
-
//Function to handle browser blocking
|
119 |
-
function wpns_handle_browser_blocking($postedValue)
|
120 |
-
{
|
121 |
-
isset($postedValue['mo_wpns_block_chrome']) ? update_option( 'mo_wpns_block_chrome' , $postedValue['mo_wpns_block_chrome'] ) : update_option( 'mo_wpns_block_chrome' , false );
|
122 |
-
isset($postedValue['mo_wpns_block_firefox']) ? update_option( 'mo_wpns_block_firefox' , $postedValue['mo_wpns_block_firefox'] ) : update_option( 'mo_wpns_block_firefox' , false );
|
123 |
-
isset($postedValue['mo_wpns_block_ie']) ? update_option( 'mo_wpns_block_ie' , $postedValue['mo_wpns_block_ie'] ) : update_option( 'mo_wpns_block_ie' , false );
|
124 |
-
isset($postedValue['mo_wpns_block_safari']) ? update_option( 'mo_wpns_block_safari' , $postedValue['mo_wpns_block_safari'] ) : update_option( 'mo_wpns_block_safari' , false );
|
125 |
-
isset($postedValue['mo_wpns_block_opera']) ? update_option( 'mo_wpns_block_opera' , $postedValue['mo_wpns_block_opera'] ) : update_option( 'mo_wpns_block_opera' , false );
|
126 |
-
isset($postedValue['mo_wpns_block_edge']) ? update_option( 'mo_wpns_block_edge' , $postedValue['mo_wpns_block_edge'] ) : update_option( 'mo_wpns_block_edge' , false );
|
127 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONFIG_SAVED'),'SUCCESS');
|
128 |
-
}
|
129 |
-
|
130 |
-
|
131 |
-
//Function to handle Htaccess blocking
|
132 |
-
function wpns_handle_htaccess_blocking($postdata)
|
133 |
-
{
|
134 |
-
$htaccess = isset($postdata['mo_wpns_enable_htaccess_blocking']) ? true : false;
|
135 |
-
update_option( 'mo_wpns_enable_htaccess_blocking', $htaccess);
|
136 |
-
$mo_wpns_config = new MoWpnsHandler();
|
137 |
-
if($htaccess)
|
138 |
-
{
|
139 |
-
$mo_wpns_config->add_htaccess_ips();
|
140 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('HTACCESS_ENABLED'),'SUCCESS');
|
141 |
-
}
|
142 |
-
else
|
143 |
-
{
|
144 |
-
$mo_wpns_config->remove_htaccess_ips();
|
145 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('HTACCESS_DISABLED'),'ERROR');
|
146 |
-
}
|
147 |
-
}
|
148 |
-
|
149 |
-
|
150 |
-
//Function to handle user agent blocking
|
151 |
-
function wpns_handle_user_agent_blocking($postvalue)
|
152 |
-
{
|
153 |
-
$user_agent = isset($postvalue['mo_wpns_enable_user_agent_blocking']) ? true : false;
|
154 |
-
update_option( 'mo_wpns_enable_user_agent_blocking', $user_agent);
|
155 |
-
if($user_agent)
|
156 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('USER_AGENT_BLOCK_ENABLED'),'SUCCESS');
|
157 |
-
else
|
158 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('USER_AGENT_BLOCK_DISABLED'),'ERROR');
|
159 |
-
}
|
160 |
-
|
161 |
-
|
162 |
-
//Function to handle country block
|
163 |
-
function wpns_handle_country_block($post)
|
164 |
-
{
|
165 |
-
$countrycodes = "";
|
166 |
-
foreach($post as $countrycode=>$value){
|
167 |
-
if($countrycode!="option")
|
168 |
-
$countrycodes .= $countrycode.";";
|
169 |
-
}
|
170 |
-
update_option( 'mo_wpns_countrycodes', $countrycodes);
|
171 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONFIG_SAVED'),'SUCCESS');
|
172 |
-
}
|
173 |
-
|
174 |
-
|
175 |
-
//Function to handle block referrer
|
176 |
-
function wpns_handle_block_referrer($post)
|
177 |
-
{
|
178 |
-
$referrers = "";
|
179 |
-
foreach($post as $key => $value)
|
180 |
-
{
|
181 |
-
if(strpos($key, 'referrer_') !== false)
|
182 |
-
if(!empty($value))
|
183 |
-
$referrers .= $value.";";
|
184 |
-
}
|
185 |
-
update_option( 'mo_wpns_referrers', $referrers);
|
186 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
|
5 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']) )
|
6 |
+
{
|
7 |
+
switch($_POST['option'])
|
8 |
+
{
|
9 |
+
case "mo_wpns_block_ip_range":
|
10 |
+
wpns_handle_range_blocking($_POST); break;
|
11 |
+
case "mo_wpns_browser_blocking":
|
12 |
+
wpns_handle_browser_blocking($_POST); break;
|
13 |
+
case "mo_wpns_enable_htaccess_blocking":
|
14 |
+
wpns_handle_htaccess_blocking($_POST); break;
|
15 |
+
case "mo_wpns_enable_user_agent_blocking":
|
16 |
+
wpns_handle_user_agent_blocking($_POST); break;
|
17 |
+
case "mo_wpns_block_countries":
|
18 |
+
wpns_handle_country_block($_POST); break;
|
19 |
+
case "mo_wpns_block_referrer":
|
20 |
+
wpns_handle_block_referrer($_POST); break;
|
21 |
+
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
$range_count = is_numeric(get_option('mo_wpns_iprange_count'))
|
26 |
+
&& intval(get_option('mo_wpns_iprange_count')) !=0 ? intval(get_option('mo_wpns_iprange_count')) : 1;
|
27 |
+
$htaccess_block = get_option('mo_wpns_enable_htaccess_blocking') ? "checked" : "";
|
28 |
+
$user_agent = get_option('mo_wpns_enable_user_agent_blocking') ? "checked" : "";
|
29 |
+
$block_chrome = get_option('mo_wpns_block_chrome') ? "checked" : "";
|
30 |
+
$block_ie = get_option('mo_wpns_block_ie') ? "checked" : "";
|
31 |
+
$block_firefox = get_option('mo_wpns_block_firefox') ? "checked" : "";
|
32 |
+
$block_safari = get_option('mo_wpns_block_safari') ? "checked" : "";
|
33 |
+
$block_opera = get_option('mo_wpns_block_opera') ? "checked" : "";
|
34 |
+
$block_edge = get_option('mo_wpns_block_edge') ? "checked" : "";
|
35 |
+
$country = MoWpnsConstants::$country;
|
36 |
+
$codes = get_option( "mo_wpns_countrycodes");
|
37 |
+
$referrers = get_option( 'mo_wpns_referrers');
|
38 |
+
$referrers = explode(";",$referrers);
|
39 |
+
$current_browser= $moWpnsUtility->getCurrentBrowser();
|
40 |
+
$start = array();
|
41 |
+
$end = array();
|
42 |
+
for($i = 1 ; $i <= $range_count ; $i++){
|
43 |
+
$ip_range = get_option("mo_wpns_iprange_range_".$i);
|
44 |
+
if($ip_range){
|
45 |
+
$a = explode('-', $ip_range);
|
46 |
+
|
47 |
+
$start[$i] = $a[0];
|
48 |
+
$end[$i] = $a[1];
|
49 |
+
}
|
50 |
+
|
51 |
+
}
|
52 |
+
if(!isset($start[1])){
|
53 |
+
$start[1] = '';
|
54 |
+
}
|
55 |
+
if(!isset($end[1])){
|
56 |
+
$end[1] = '';
|
57 |
+
}
|
58 |
+
|
59 |
+
switch($current_browser)
|
60 |
+
{
|
61 |
+
case "chrome":
|
62 |
+
$block_chrome = 'disabled'; break;
|
63 |
+
case "ie":
|
64 |
+
$block_ie = 'disabled'; break;
|
65 |
+
case "firefox":
|
66 |
+
$block_firefox= 'disabled'; break;
|
67 |
+
case "safari":
|
68 |
+
$block_safari = 'disabled'; break;
|
69 |
+
case "edge":
|
70 |
+
$block_edge = 'disabled'; break;
|
71 |
+
case "opera":
|
72 |
+
$block_opera = 'disabled'; break;
|
73 |
+
}
|
74 |
+
|
75 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'advanced-blocking.php';
|
76 |
+
|
77 |
+
|
78 |
+
/* ADVANCD BLOCKING FUNCTIONS */
|
79 |
+
|
80 |
+
//Function to save range of ips
|
81 |
+
function wpns_handle_range_blocking($postedValue)
|
82 |
+
{
|
83 |
+
$flag=0;
|
84 |
+
$max_allowed_ranges = 100;
|
85 |
+
$added_mappings_ranges = 0 ;
|
86 |
+
for($i=1;$i<=$max_allowed_ranges;$i++){
|
87 |
+
if(isset($postedValue['start_'.$i]) && isset($postedValue['end_'.$i]) && !empty($postedValue['start_'.$i]) && !empty($postedValue['end_'.$i])){
|
88 |
+
|
89 |
+
$postedValue['start_'.$i] = sanitize_text_field($postedValue['start_'.$i]);
|
90 |
+
$postedValue['end_'.$i] = sanitize_text_field($postedValue['end_'.$i]);
|
91 |
+
|
92 |
+
if(filter_var($postedValue['start_'.$i] , FILTER_VALIDATE_IP ) && filter_var($postedValue['end_'.$i] , FILTER_VALIDATE_IP ) && (ip2long($postedValue['end_'.$i]) > ip2long($postedValue['start_'.$i])) ){
|
93 |
+
$range = '';
|
94 |
+
$range = $postedValue['start_'.$i];
|
95 |
+
$range .= '-';
|
96 |
+
$range .= $postedValue['end_'.$i];
|
97 |
+
$added_mappings_ranges++;
|
98 |
+
update_option( 'mo_wpns_iprange_range_'.$added_mappings_ranges, $range );
|
99 |
+
|
100 |
+
}
|
101 |
+
else{
|
102 |
+
$flag = 1;
|
103 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('INVALID_IP'),'ERROR');
|
104 |
+
return;
|
105 |
+
}
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
|
110 |
+
if($added_mappings_ranges==0)
|
111 |
+
update_option( 'mo_wpns_iprange_range_1','');
|
112 |
+
update_option( 'mo_wpns_iprange_count', $added_mappings_ranges);
|
113 |
+
if($flag == 0){
|
114 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('IP_PERMANENTLY_BLOCKED'),'SUCCESS');
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
//Function to handle browser blocking
|
119 |
+
function wpns_handle_browser_blocking($postedValue)
|
120 |
+
{
|
121 |
+
isset($postedValue['mo_wpns_block_chrome']) ? update_option( 'mo_wpns_block_chrome' , $postedValue['mo_wpns_block_chrome'] ) : update_option( 'mo_wpns_block_chrome' , false );
|
122 |
+
isset($postedValue['mo_wpns_block_firefox']) ? update_option( 'mo_wpns_block_firefox' , $postedValue['mo_wpns_block_firefox'] ) : update_option( 'mo_wpns_block_firefox' , false );
|
123 |
+
isset($postedValue['mo_wpns_block_ie']) ? update_option( 'mo_wpns_block_ie' , $postedValue['mo_wpns_block_ie'] ) : update_option( 'mo_wpns_block_ie' , false );
|
124 |
+
isset($postedValue['mo_wpns_block_safari']) ? update_option( 'mo_wpns_block_safari' , $postedValue['mo_wpns_block_safari'] ) : update_option( 'mo_wpns_block_safari' , false );
|
125 |
+
isset($postedValue['mo_wpns_block_opera']) ? update_option( 'mo_wpns_block_opera' , $postedValue['mo_wpns_block_opera'] ) : update_option( 'mo_wpns_block_opera' , false );
|
126 |
+
isset($postedValue['mo_wpns_block_edge']) ? update_option( 'mo_wpns_block_edge' , $postedValue['mo_wpns_block_edge'] ) : update_option( 'mo_wpns_block_edge' , false );
|
127 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONFIG_SAVED'),'SUCCESS');
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
//Function to handle Htaccess blocking
|
132 |
+
function wpns_handle_htaccess_blocking($postdata)
|
133 |
+
{
|
134 |
+
$htaccess = isset($postdata['mo_wpns_enable_htaccess_blocking']) ? true : false;
|
135 |
+
update_option( 'mo_wpns_enable_htaccess_blocking', $htaccess);
|
136 |
+
$mo_wpns_config = new MoWpnsHandler();
|
137 |
+
if($htaccess)
|
138 |
+
{
|
139 |
+
$mo_wpns_config->add_htaccess_ips();
|
140 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('HTACCESS_ENABLED'),'SUCCESS');
|
141 |
+
}
|
142 |
+
else
|
143 |
+
{
|
144 |
+
$mo_wpns_config->remove_htaccess_ips();
|
145 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('HTACCESS_DISABLED'),'ERROR');
|
146 |
+
}
|
147 |
+
}
|
148 |
+
|
149 |
+
|
150 |
+
//Function to handle user agent blocking
|
151 |
+
function wpns_handle_user_agent_blocking($postvalue)
|
152 |
+
{
|
153 |
+
$user_agent = isset($postvalue['mo_wpns_enable_user_agent_blocking']) ? true : false;
|
154 |
+
update_option( 'mo_wpns_enable_user_agent_blocking', $user_agent);
|
155 |
+
if($user_agent)
|
156 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('USER_AGENT_BLOCK_ENABLED'),'SUCCESS');
|
157 |
+
else
|
158 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('USER_AGENT_BLOCK_DISABLED'),'ERROR');
|
159 |
+
}
|
160 |
+
|
161 |
+
|
162 |
+
//Function to handle country block
|
163 |
+
function wpns_handle_country_block($post)
|
164 |
+
{
|
165 |
+
$countrycodes = "";
|
166 |
+
foreach($post as $countrycode=>$value){
|
167 |
+
if($countrycode!="option")
|
168 |
+
$countrycodes .= $countrycode.";";
|
169 |
+
}
|
170 |
+
update_option( 'mo_wpns_countrycodes', $countrycodes);
|
171 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONFIG_SAVED'),'SUCCESS');
|
172 |
+
}
|
173 |
+
|
174 |
+
|
175 |
+
//Function to handle block referrer
|
176 |
+
function wpns_handle_block_referrer($post)
|
177 |
+
{
|
178 |
+
$referrers = "";
|
179 |
+
foreach($post as $key => $value)
|
180 |
+
{
|
181 |
+
if(strpos($key, 'referrer_') !== false)
|
182 |
+
if(!empty($value))
|
183 |
+
$referrers .= $value.";";
|
184 |
+
}
|
185 |
+
update_option( 'mo_wpns_referrers', $referrers);
|
186 |
+
}
|
controllers/backup/backup_ajax.php
CHANGED
@@ -103,7 +103,7 @@ function mo_wpns_save_schedule_backup_config_form($postData){
|
|
103 |
else
|
104 |
$handler_obj-> file_backup_deactivate();
|
105 |
|
106 |
-
if(
|
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' );
|
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' );
|
controllers/backup/backup_created_report.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_created_report.php';
|
1 |
+
<?php
|
2 |
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'backup'.DIRECTORY_SEPARATOR.'backup_created_report.php';
|
controllers/backup/backup_schdule.php
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$file_backup_time =
|
4 |
-
$db_eb_backup_time =
|
5 |
-
$file_schedule_status =
|
6 |
-
$db_backup_status =
|
7 |
-
$next_file_backup_hours =
|
8 |
-
$next_db_backup_hours =
|
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';
|
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/content-protection.php
CHANGED
@@ -1,94 +1,94 @@
|
|
1 |
-
<?php
|
2 |
-
global $moWpnsUtility,$mo2f_dirName;
|
3 |
-
|
4 |
-
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
5 |
-
{
|
6 |
-
switch($_POST['option'])
|
7 |
-
{
|
8 |
-
case "mo_wpns_content_protection":
|
9 |
-
wpns_handle_content_protection($_POST); break;
|
10 |
-
case "mo_wpns_enable_comment_spam_blocking":
|
11 |
-
wpns_handle_comment_spam_blocking($_POST); break;
|
12 |
-
case "mo_wpns_enable_comment_recaptcha":
|
13 |
-
wpns_handle_comment_recaptcha($_POST); break;
|
14 |
-
case "mo_wpns_comment_recaptcha_settings":
|
15 |
-
wpns_save_comment_recaptcha($_POST); break;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
|
19 |
-
|
20 |
-
$protect_wp_config = get_option('mo2f_protect_wp_config') ? "checked" : "";
|
21 |
-
$protect_wp_uploads = get_option('mo2f_prevent_directory_browsing') ? "checked" : "";
|
22 |
-
$disable_file_editing = get_option('mo2f_disable_file_editing') ? "checked" : "";
|
23 |
-
$comment_spam_protect = get_option('mo_wpns_enable_comment_spam_blocking') ? "checked" : "";
|
24 |
-
$enable_recaptcha = get_option('mo_wpns_enable_comment_recaptcha') ? "checked" : "";
|
25 |
-
$htaccess_file = get_option('mo2f_htaccess_file') ? "checked" : "";
|
26 |
-
$restAPI = get_site_option('mo2f_restrict_restAPI') ? "checked" : "";
|
27 |
-
$test_recaptcha_url = "";
|
28 |
-
$wp_config = site_url().'/wp-config.php';
|
29 |
-
$wp_uploads = get_site_url().'/wp-content/uploads';
|
30 |
-
$plugin_editor = get_site_url().'/wp-admin/plugin-editor.php';
|
31 |
-
$restAPI_link = rest_url().'wp'.DIRECTORY_SEPARATOR.'v2'.DIRECTORY_SEPARATOR.'users';
|
32 |
-
$restApiPlugin = 'https:'.DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR.'www.wordpress.org'.DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.'wp-rest-api-authentication';
|
33 |
-
if($enable_recaptcha)
|
34 |
-
{
|
35 |
-
$test_recaptcha_url = add_query_arg( array('option'=>'testrecaptchaconfig'), $_SERVER['REQUEST_URI'] );
|
36 |
-
$captcha_site_key = get_option('mo_wpns_recaptcha_site_key' );
|
37 |
-
$captcha_secret_key = get_option('mo_wpns_recaptcha_secret_key');
|
38 |
-
}
|
39 |
-
|
40 |
-
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'content-protection.php';
|
41 |
-
|
42 |
-
/* CONTENT PROTECTION FUNCTIONS */
|
43 |
-
|
44 |
-
//Function to save content protection settings
|
45 |
-
function wpns_handle_content_protection()
|
46 |
-
{
|
47 |
-
isset($_POST['protect_wp_config']) ? update_option('mo2f_protect_wp_config' , $_POST['protect_wp_config']) : update_option('mo2f_protect_wp_config' ,0);
|
48 |
-
isset($_POST['prevent_directory_browsing']) ? update_option('mo2f_prevent_directory_browsing', $_POST['prevent_directory_browsing']): update_option('mo2f_prevent_directory_browsing',0);
|
49 |
-
isset($_POST['disable_file_editing']) ? update_option('mo2f_disable_file_editing' , $_POST['disable_file_editing']) : update_option('mo2f_disable_file_editing' ,0);
|
50 |
-
isset($_POST['mo2f_htaccess_file']) ? update_option('mo2f_htaccess_file' , $_POST['mo2f_htaccess_file']) : update_option('mo2f_htaccess_file',0);
|
51 |
-
if(isset($_POST['restrictAPI'])){
|
52 |
-
update_site_option('mo2f_restrict_restAPI', 1);
|
53 |
-
}
|
54 |
-
else{
|
55 |
-
update_site_option('mo2f_restrict_restAPI',0);
|
56 |
-
}
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
$mo_wpns_htaccess_handler = new MoWpnsHandler();
|
62 |
-
$mo_wpns_htaccess_handler->update_htaccess_configuration();
|
63 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_PROTECTION_ENABLED'),'SUCCESS');
|
64 |
-
}
|
65 |
-
|
66 |
-
|
67 |
-
//Function to handle comment spam blocking
|
68 |
-
function wpns_handle_comment_spam_blocking($postvalue)
|
69 |
-
{
|
70 |
-
$enable = isset($postvalue['mo_wpns_enable_comment_spam_blocking']) ? true : false;
|
71 |
-
update_option('mo_wpns_enable_comment_spam_blocking', $enable);
|
72 |
-
if($enable)
|
73 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_SPAM_BLOCKING'),'SUCCESS');
|
74 |
-
else
|
75 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_SPAM_BLOCKING_DISABLED'),'ERROR');
|
76 |
-
}
|
77 |
-
|
78 |
-
|
79 |
-
//Function to handle reCAPTCHA for comments
|
80 |
-
function wpns_handle_comment_recaptcha($postvalue)
|
81 |
-
{
|
82 |
-
$enable = isset($postvalue['mo_wpns_enable_comment_recaptcha']) ? true : false;
|
83 |
-
update_option('mo_wpns_enable_comment_recaptcha', $enable);
|
84 |
-
if($enable)
|
85 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_RECAPTCHA'),'SUCCESS');
|
86 |
-
else
|
87 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_RECAPTCHA_DISABLED'),'ERROR');
|
88 |
-
}
|
89 |
-
|
90 |
-
function wpns_save_comment_recaptcha($postvalue){
|
91 |
-
update_option('mo_wpns_recaptcha_site_key', $postvalue['mo_wpns_recaptcha_site_key']);
|
92 |
-
update_option('mo_wpns_recaptcha_secret_key', $postvalue['mo_wpns_recaptcha_secret_key']);
|
93 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('RECAPTCHA_ENABLED'),'SUCCESS');
|
94 |
}
|
1 |
+
<?php
|
2 |
+
global $moWpnsUtility,$mo2f_dirName;
|
3 |
+
|
4 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
5 |
+
{
|
6 |
+
switch($_POST['option'])
|
7 |
+
{
|
8 |
+
case "mo_wpns_content_protection":
|
9 |
+
wpns_handle_content_protection($_POST); break;
|
10 |
+
case "mo_wpns_enable_comment_spam_blocking":
|
11 |
+
wpns_handle_comment_spam_blocking($_POST); break;
|
12 |
+
case "mo_wpns_enable_comment_recaptcha":
|
13 |
+
wpns_handle_comment_recaptcha($_POST); break;
|
14 |
+
case "mo_wpns_comment_recaptcha_settings":
|
15 |
+
wpns_save_comment_recaptcha($_POST); break;
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
|
20 |
+
$protect_wp_config = get_option('mo2f_protect_wp_config') ? "checked" : "";
|
21 |
+
$protect_wp_uploads = get_option('mo2f_prevent_directory_browsing') ? "checked" : "";
|
22 |
+
$disable_file_editing = get_option('mo2f_disable_file_editing') ? "checked" : "";
|
23 |
+
$comment_spam_protect = get_option('mo_wpns_enable_comment_spam_blocking') ? "checked" : "";
|
24 |
+
$enable_recaptcha = get_option('mo_wpns_enable_comment_recaptcha') ? "checked" : "";
|
25 |
+
$htaccess_file = get_option('mo2f_htaccess_file') ? "checked" : "";
|
26 |
+
$restAPI = get_site_option('mo2f_restrict_restAPI') ? "checked" : "";
|
27 |
+
$test_recaptcha_url = "";
|
28 |
+
$wp_config = site_url().'/wp-config.php';
|
29 |
+
$wp_uploads = get_site_url().'/wp-content/uploads';
|
30 |
+
$plugin_editor = get_site_url().'/wp-admin/plugin-editor.php';
|
31 |
+
$restAPI_link = rest_url().'wp'.DIRECTORY_SEPARATOR.'v2'.DIRECTORY_SEPARATOR.'users';
|
32 |
+
$restApiPlugin = 'https:'.DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR.'www.wordpress.org'.DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.'wp-rest-api-authentication';
|
33 |
+
if($enable_recaptcha)
|
34 |
+
{
|
35 |
+
$test_recaptcha_url = add_query_arg( array('option'=>'testrecaptchaconfig'), $_SERVER['REQUEST_URI'] );
|
36 |
+
$captcha_site_key = get_option('mo_wpns_recaptcha_site_key' );
|
37 |
+
$captcha_secret_key = get_option('mo_wpns_recaptcha_secret_key');
|
38 |
+
}
|
39 |
+
|
40 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'content-protection.php';
|
41 |
+
|
42 |
+
/* CONTENT PROTECTION FUNCTIONS */
|
43 |
+
|
44 |
+
//Function to save content protection settings
|
45 |
+
function wpns_handle_content_protection()
|
46 |
+
{
|
47 |
+
isset($_POST['protect_wp_config']) ? update_option('mo2f_protect_wp_config' , $_POST['protect_wp_config']) : update_option('mo2f_protect_wp_config' ,0);
|
48 |
+
isset($_POST['prevent_directory_browsing']) ? update_option('mo2f_prevent_directory_browsing', $_POST['prevent_directory_browsing']): update_option('mo2f_prevent_directory_browsing',0);
|
49 |
+
isset($_POST['disable_file_editing']) ? update_option('mo2f_disable_file_editing' , $_POST['disable_file_editing']) : update_option('mo2f_disable_file_editing' ,0);
|
50 |
+
isset($_POST['mo2f_htaccess_file']) ? update_option('mo2f_htaccess_file' , $_POST['mo2f_htaccess_file']) : update_option('mo2f_htaccess_file',0);
|
51 |
+
if(isset($_POST['restrictAPI'])){
|
52 |
+
update_site_option('mo2f_restrict_restAPI', 1);
|
53 |
+
}
|
54 |
+
else{
|
55 |
+
update_site_option('mo2f_restrict_restAPI',0);
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
|
60 |
+
|
61 |
+
$mo_wpns_htaccess_handler = new MoWpnsHandler();
|
62 |
+
$mo_wpns_htaccess_handler->update_htaccess_configuration();
|
63 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_PROTECTION_ENABLED'),'SUCCESS');
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
//Function to handle comment spam blocking
|
68 |
+
function wpns_handle_comment_spam_blocking($postvalue)
|
69 |
+
{
|
70 |
+
$enable = isset($postvalue['mo_wpns_enable_comment_spam_blocking']) ? true : false;
|
71 |
+
update_option('mo_wpns_enable_comment_spam_blocking', $enable);
|
72 |
+
if($enable)
|
73 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_SPAM_BLOCKING'),'SUCCESS');
|
74 |
+
else
|
75 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_SPAM_BLOCKING_DISABLED'),'ERROR');
|
76 |
+
}
|
77 |
+
|
78 |
+
|
79 |
+
//Function to handle reCAPTCHA for comments
|
80 |
+
function wpns_handle_comment_recaptcha($postvalue)
|
81 |
+
{
|
82 |
+
$enable = isset($postvalue['mo_wpns_enable_comment_recaptcha']) ? true : false;
|
83 |
+
update_option('mo_wpns_enable_comment_recaptcha', $enable);
|
84 |
+
if($enable)
|
85 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_RECAPTCHA'),'SUCCESS');
|
86 |
+
else
|
87 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('CONTENT_RECAPTCHA_DISABLED'),'ERROR');
|
88 |
+
}
|
89 |
+
|
90 |
+
function wpns_save_comment_recaptcha($postvalue){
|
91 |
+
update_option('mo_wpns_recaptcha_site_key', $postvalue['mo_wpns_recaptcha_site_key']);
|
92 |
+
update_option('mo_wpns_recaptcha_secret_key', $postvalue['mo_wpns_recaptcha_secret_key']);
|
93 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('RECAPTCHA_ENABLED'),'SUCCESS');
|
94 |
}
|
controllers/dashboard_ajax.php
CHANGED
@@ -1,211 +1,211 @@
|
|
1 |
-
<?php
|
2 |
-
class Mo2f_ajax_dashboard
|
3 |
-
{
|
4 |
-
function __construct(){
|
5 |
-
add_action( 'admin_init' , array( $this, 'mo2f_switch_functions' ) );
|
6 |
-
}
|
7 |
-
|
8 |
-
public function mo2f_switch_functions(){
|
9 |
-
if(isset($_POST) && isset($_POST['option'])){
|
10 |
-
$tab_count= get_site_option('mo2f_tab_count', 0);
|
11 |
-
if($tab_count == 5)
|
12 |
-
update_site_option('mo_2f_switch_all', 1);
|
13 |
-
else if($tab_count == 0)
|
14 |
-
update_site_option('mo_2f_switch_all', 0);
|
15 |
-
$santizied_post=isset($_POST['switch_val'])? sanitize_text_field($_POST['switch_val']):null;
|
16 |
-
switch($_POST['option'])
|
17 |
-
{
|
18 |
-
case "tab_all_switch":
|
19 |
-
$this->mo2f_handle_all_enable($santizied_post);
|
20 |
-
break;
|
21 |
-
case "tab_2fa_switch":
|
22 |
-
$this->mo2f_handle_2fa_enable($santizied_post);
|
23 |
-
break;
|
24 |
-
case "tab_waf_switch":
|
25 |
-
$this->mo2f_handle_waf_enable($santizied_post);
|
26 |
-
break;
|
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;
|
36 |
-
case "tab_block_switch":
|
37 |
-
$this->mo2f_handle_block_enable($santizied_post);
|
38 |
-
break;
|
39 |
-
|
40 |
-
}
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
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){
|
51 |
-
update_option('mo_2f_switch_all',1);
|
52 |
-
update_site_option('mo2f_tab_count', 5);
|
53 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('ALL_ENABLED'),'SUCCESS');
|
54 |
-
}
|
55 |
-
else{
|
56 |
-
update_option('mo_2f_switch_all', 0);
|
57 |
-
update_site_option('mo2f_tab_count', 0);
|
58 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('ALL_DISABLED'),'ERROR');
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
-
public function mo2f_handle_2fa_enable($POSTED){
|
63 |
-
global $Mo2fdbQueries;
|
64 |
-
$user= wp_get_current_user();
|
65 |
-
$user_id= $user->user_ID;
|
66 |
-
if($POSTED){
|
67 |
-
$Mo2fdbQueries->update_user_deails($user_id, array('mo_2factor_user_registration_status', 'MO_2_FACTOR_PLUGIN_SETTINGS'));
|
68 |
-
if($_POST['tab_2fa_switch'])
|
69 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FACTOR_ENABLE'),'SUCCESS');
|
70 |
-
}
|
71 |
-
else{
|
72 |
-
$Mo2fdbQueries->update_user_deails($user_id, array('mo_2factor_user_registration_status', 0));
|
73 |
-
if($_POST['tab_2fa_switch'])
|
74 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FACTOR_DISABLE'),'ERROR');
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
public function mo2f_handle_waf_enable($POSTED){
|
79 |
-
if($POSTED){
|
80 |
-
update_site_option('mo_2f_switch_waf', 1);
|
81 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
82 |
-
if (isset($_POST['option'] ))
|
83 |
-
{
|
84 |
-
if($_POST['option'] == 'tab_waf_switch')
|
85 |
-
{
|
86 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('WAF_ENABLE'),'SUCCESS');
|
87 |
-
}
|
88 |
-
}
|
89 |
-
}
|
90 |
-
else{
|
91 |
-
update_site_option('mo_2f_switch_waf', 0);
|
92 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
93 |
-
update_site_option('WAFEnabled', 0);
|
94 |
-
update_site_option('WAF','wafDisable');
|
95 |
-
update_site_option('Rate_limiting', 0);
|
96 |
-
$dir_name = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
|
97 |
-
$dir_name1 = $dir_name.DIRECTORY_SEPARATOR.'.htaccess';
|
98 |
-
$filePath = $dir_name.DIRECTORY_SEPARATOR.'mo-check.php';
|
99 |
-
$filePath = str_replace('\\', '/', $filePath);
|
100 |
-
$file = file_get_contents($dir_name1);
|
101 |
-
$cont = PHP_EOL.'# BEGIN miniOrange WAF'.PHP_EOL;
|
102 |
-
$cont .= 'php_value auto_prepend_file '.$filePath.PHP_EOL;
|
103 |
-
$cont .= '# END miniOrange WAF'.PHP_EOL;
|
104 |
-
$file =str_replace($cont,'',$file);
|
105 |
-
file_put_contents($dir_name1, $file);
|
106 |
-
if($_POST['option'] == 'tab_waf_switch')
|
107 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('WAF_DISABLE'),'ERROR');
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
public function mo2f_handle_login_enable($POSTED){
|
112 |
-
if($POSTED){
|
113 |
-
update_site_option('mo_2f_switch_loginspam', 1);
|
114 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
115 |
-
if (isset($_POST['option'] ))
|
116 |
-
{
|
117 |
-
if($_POST['option'] == 'tab_login_switch')
|
118 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('LOGIN_ENABLE'),'SUCCESS');
|
119 |
-
}
|
120 |
-
}
|
121 |
-
else{
|
122 |
-
update_site_option('mo_2f_switch_loginspam', 0);
|
123 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
124 |
-
update_site_option('mo2f_enable_brute_force', false);
|
125 |
-
update_site_option('mo_wpns_activate_recaptcha', false);
|
126 |
-
update_site_option('mo_wpns_activate_recaptcha_for_login', false);
|
127 |
-
update_site_option('mo_wpns_activate_recaptcha_for_woocommerce_login', false);
|
128 |
-
update_site_option('mo_wpns_activate_recaptcha_for_registration', false);
|
129 |
-
update_site_option('mo_wpns_activate_recaptcha_for_woocommerce_registration', false);
|
130 |
-
update_site_option('mo2f_enforce_strong_passswords', 0);
|
131 |
-
update_site_option('mo_wpns_enable_fake_domain_blocking', false);
|
132 |
-
update_site_option('mo_wpns_enable_advanced_user_verification', false);
|
133 |
-
update_site_option('mo_wpns_enable_social_integration', false);
|
134 |
-
update_site_option('mo2f_protect_wp_config', 0);
|
135 |
-
update_site_option('mo2f_prevent_directory_browsing', 0);
|
136 |
-
update_site_option('mo2f_disable_file_editing', 0);
|
137 |
-
update_site_option('mo_wpns_enable_comment_spam_blocking', false);
|
138 |
-
update_site_option('mo_wpns_enable_comment_recaptcha', false);
|
139 |
-
update_site_option('mo2f_htaccess_file', 0);
|
140 |
-
if($_POST['option'] == 'tab_login_switch')
|
141 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('LOGIN_DISABLE'),'ERROR');
|
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($_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($_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);
|
171 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
172 |
-
if (isset($_POST['option'] ))
|
173 |
-
{
|
174 |
-
if($_POST['option'] == 'tab_malware_switch')
|
175 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('MALWARE_ENABLE'),'SUCCESS');
|
176 |
-
}
|
177 |
-
}else{
|
178 |
-
update_site_option('mo_2f_switch_malware', 0);
|
179 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
180 |
-
if($_POST['option'] == 'tab_malware_switch')
|
181 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('MALWARE_DISABLE'),'ERROR');
|
182 |
-
}
|
183 |
-
}
|
184 |
-
|
185 |
-
public function mo2f_handle_block_enable($POSTED){
|
186 |
-
if($POSTED){
|
187 |
-
update_site_option('mo_2f_switch_adv_block', 1);
|
188 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
189 |
-
if (isset($_POST['option'] ))
|
190 |
-
{
|
191 |
-
if($_POST['option'] == 'tab_block_switch')
|
192 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('ADV_BLOCK_ENABLE'),'SUCCESS');
|
193 |
-
}
|
194 |
-
}
|
195 |
-
else{
|
196 |
-
update_site_option('mo_2f_switch_adv_block', 0);
|
197 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
198 |
-
update_site_option('mo_wpns_iprange_count', 0);
|
199 |
-
update_site_option('mo_wpns_enable_htaccess_blocking', 0);
|
200 |
-
update_site_option('mo_wpns_enable_user_agent_blocking', 0);
|
201 |
-
update_site_option('mo_wpns_referrers', false);
|
202 |
-
update_site_option('mo_wpns_countrycodes', false);
|
203 |
-
if($_POST['option'] == 'tab_block_switch')
|
204 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('ADV_BLOCK_DISABLE'),'ERROR');
|
205 |
-
}
|
206 |
-
}
|
207 |
-
|
208 |
-
|
209 |
-
}
|
210 |
-
new Mo2f_ajax_dashboard();
|
211 |
?>
|
1 |
+
<?php
|
2 |
+
class Mo2f_ajax_dashboard
|
3 |
+
{
|
4 |
+
function __construct(){
|
5 |
+
add_action( 'admin_init' , array( $this, 'mo2f_switch_functions' ) );
|
6 |
+
}
|
7 |
+
|
8 |
+
public function mo2f_switch_functions(){
|
9 |
+
if(isset($_POST) && isset($_POST['option'])){
|
10 |
+
$tab_count= get_site_option('mo2f_tab_count', 0);
|
11 |
+
if($tab_count == 5)
|
12 |
+
update_site_option('mo_2f_switch_all', 1);
|
13 |
+
else if($tab_count == 0)
|
14 |
+
update_site_option('mo_2f_switch_all', 0);
|
15 |
+
$santizied_post=isset($_POST['switch_val'])? sanitize_text_field($_POST['switch_val']):null;
|
16 |
+
switch($_POST['option'])
|
17 |
+
{
|
18 |
+
case "tab_all_switch":
|
19 |
+
$this->mo2f_handle_all_enable($santizied_post);
|
20 |
+
break;
|
21 |
+
case "tab_2fa_switch":
|
22 |
+
$this->mo2f_handle_2fa_enable($santizied_post);
|
23 |
+
break;
|
24 |
+
case "tab_waf_switch":
|
25 |
+
$this->mo2f_handle_waf_enable($santizied_post);
|
26 |
+
break;
|
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;
|
36 |
+
case "tab_block_switch":
|
37 |
+
$this->mo2f_handle_block_enable($santizied_post);
|
38 |
+
break;
|
39 |
+
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
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){
|
51 |
+
update_option('mo_2f_switch_all',1);
|
52 |
+
update_site_option('mo2f_tab_count', 5);
|
53 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('ALL_ENABLED'),'SUCCESS');
|
54 |
+
}
|
55 |
+
else{
|
56 |
+
update_option('mo_2f_switch_all', 0);
|
57 |
+
update_site_option('mo2f_tab_count', 0);
|
58 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('ALL_DISABLED'),'ERROR');
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
public function mo2f_handle_2fa_enable($POSTED){
|
63 |
+
global $Mo2fdbQueries;
|
64 |
+
$user= wp_get_current_user();
|
65 |
+
$user_id= $user->user_ID;
|
66 |
+
if($POSTED){
|
67 |
+
$Mo2fdbQueries->update_user_deails($user_id, array('mo_2factor_user_registration_status', 'MO_2_FACTOR_PLUGIN_SETTINGS'));
|
68 |
+
if($_POST['tab_2fa_switch'])
|
69 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FACTOR_ENABLE'),'SUCCESS');
|
70 |
+
}
|
71 |
+
else{
|
72 |
+
$Mo2fdbQueries->update_user_deails($user_id, array('mo_2factor_user_registration_status', 0));
|
73 |
+
if($_POST['tab_2fa_switch'])
|
74 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FACTOR_DISABLE'),'ERROR');
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
public function mo2f_handle_waf_enable($POSTED){
|
79 |
+
if($POSTED){
|
80 |
+
update_site_option('mo_2f_switch_waf', 1);
|
81 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
82 |
+
if (isset($_POST['option'] ))
|
83 |
+
{
|
84 |
+
if($_POST['option'] == 'tab_waf_switch')
|
85 |
+
{
|
86 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('WAF_ENABLE'),'SUCCESS');
|
87 |
+
}
|
88 |
+
}
|
89 |
+
}
|
90 |
+
else{
|
91 |
+
update_site_option('mo_2f_switch_waf', 0);
|
92 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
93 |
+
update_site_option('WAFEnabled', 0);
|
94 |
+
update_site_option('WAF','wafDisable');
|
95 |
+
update_site_option('Rate_limiting', 0);
|
96 |
+
$dir_name = dirname(dirname(dirname(dirname(dirname(__FILE__)))));
|
97 |
+
$dir_name1 = $dir_name.DIRECTORY_SEPARATOR.'.htaccess';
|
98 |
+
$filePath = $dir_name.DIRECTORY_SEPARATOR.'mo-check.php';
|
99 |
+
$filePath = str_replace('\\', '/', $filePath);
|
100 |
+
$file = file_get_contents($dir_name1);
|
101 |
+
$cont = PHP_EOL.'# BEGIN miniOrange WAF'.PHP_EOL;
|
102 |
+
$cont .= 'php_value auto_prepend_file '.$filePath.PHP_EOL;
|
103 |
+
$cont .= '# END miniOrange WAF'.PHP_EOL;
|
104 |
+
$file =str_replace($cont,'',$file);
|
105 |
+
file_put_contents($dir_name1, $file);
|
106 |
+
if($_POST['option'] == 'tab_waf_switch')
|
107 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('WAF_DISABLE'),'ERROR');
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
public function mo2f_handle_login_enable($POSTED){
|
112 |
+
if($POSTED){
|
113 |
+
update_site_option('mo_2f_switch_loginspam', 1);
|
114 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
115 |
+
if (isset($_POST['option'] ))
|
116 |
+
{
|
117 |
+
if($_POST['option'] == 'tab_login_switch')
|
118 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('LOGIN_ENABLE'),'SUCCESS');
|
119 |
+
}
|
120 |
+
}
|
121 |
+
else{
|
122 |
+
update_site_option('mo_2f_switch_loginspam', 0);
|
123 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
124 |
+
update_site_option('mo2f_enable_brute_force', false);
|
125 |
+
update_site_option('mo_wpns_activate_recaptcha', false);
|
126 |
+
update_site_option('mo_wpns_activate_recaptcha_for_login', false);
|
127 |
+
update_site_option('mo_wpns_activate_recaptcha_for_woocommerce_login', false);
|
128 |
+
update_site_option('mo_wpns_activate_recaptcha_for_registration', false);
|
129 |
+
update_site_option('mo_wpns_activate_recaptcha_for_woocommerce_registration', false);
|
130 |
+
update_site_option('mo2f_enforce_strong_passswords', 0);
|
131 |
+
update_site_option('mo_wpns_enable_fake_domain_blocking', false);
|
132 |
+
update_site_option('mo_wpns_enable_advanced_user_verification', false);
|
133 |
+
update_site_option('mo_wpns_enable_social_integration', false);
|
134 |
+
update_site_option('mo2f_protect_wp_config', 0);
|
135 |
+
update_site_option('mo2f_prevent_directory_browsing', 0);
|
136 |
+
update_site_option('mo2f_disable_file_editing', 0);
|
137 |
+
update_site_option('mo_wpns_enable_comment_spam_blocking', false);
|
138 |
+
update_site_option('mo_wpns_enable_comment_recaptcha', false);
|
139 |
+
update_site_option('mo2f_htaccess_file', 0);
|
140 |
+
if($_POST['option'] == 'tab_login_switch')
|
141 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('LOGIN_DISABLE'),'ERROR');
|
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($_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($_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);
|
171 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
172 |
+
if (isset($_POST['option'] ))
|
173 |
+
{
|
174 |
+
if($_POST['option'] == 'tab_malware_switch')
|
175 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('MALWARE_ENABLE'),'SUCCESS');
|
176 |
+
}
|
177 |
+
}else{
|
178 |
+
update_site_option('mo_2f_switch_malware', 0);
|
179 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
180 |
+
if($_POST['option'] == 'tab_malware_switch')
|
181 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('MALWARE_DISABLE'),'ERROR');
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
public function mo2f_handle_block_enable($POSTED){
|
186 |
+
if($POSTED){
|
187 |
+
update_site_option('mo_2f_switch_adv_block', 1);
|
188 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
189 |
+
if (isset($_POST['option'] ))
|
190 |
+
{
|
191 |
+
if($_POST['option'] == 'tab_block_switch')
|
192 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('ADV_BLOCK_ENABLE'),'SUCCESS');
|
193 |
+
}
|
194 |
+
}
|
195 |
+
else{
|
196 |
+
update_site_option('mo_2f_switch_adv_block', 0);
|
197 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')-1);
|
198 |
+
update_site_option('mo_wpns_iprange_count', 0);
|
199 |
+
update_site_option('mo_wpns_enable_htaccess_blocking', 0);
|
200 |
+
update_site_option('mo_wpns_enable_user_agent_blocking', 0);
|
201 |
+
update_site_option('mo_wpns_referrers', false);
|
202 |
+
update_site_option('mo_wpns_countrycodes', false);
|
203 |
+
if($_POST['option'] == 'tab_block_switch')
|
204 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('ADV_BLOCK_DISABLE'),'ERROR');
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
|
209 |
+
}
|
210 |
+
new Mo2f_ajax_dashboard();
|
211 |
?>
|
controllers/feedback_footer.php
CHANGED
@@ -1,47 +1,47 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
|
5 |
-
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
6 |
-
{
|
7 |
-
switch($_POST['option'])
|
8 |
-
{
|
9 |
-
case "mo_wpns_send_query":
|
10 |
-
wpns_handle_feedback_footer_form($_POST['query_email'],$_POST['query'],$_POST['query_phone']); break;
|
11 |
-
}
|
12 |
-
}
|
13 |
-
|
14 |
-
$current_user = wp_get_current_user();
|
15 |
-
$email = get_option("mo2f_email");
|
16 |
-
$phone = get_option("mo_wpns_admin_phone");
|
17 |
-
|
18 |
-
|
19 |
-
/* SUPPORT FORM RELATED FUNCTIONS */
|
20 |
-
|
21 |
-
//Function to handle support form submit
|
22 |
-
function wpns_handle_feedback_footer_form($email,$query,$phone)
|
23 |
-
{
|
24 |
-
|
25 |
-
if( empty($email) || empty($query) )
|
26 |
-
{
|
27 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('SUPPORT_FORM_VALUES'),'SUCCESS');
|
28 |
-
return;
|
29 |
-
}
|
30 |
-
|
31 |
-
|
32 |
-
$query = sanitize_text_field( $query );
|
33 |
-
$email = sanitize_text_field( $email );
|
34 |
-
$phone = sanitize_text_field( $phone );
|
35 |
-
$contact_us = new MocURL();
|
36 |
-
$submited = json_decode($contact_us->submit_contact_us($email, $phone, $query),true);
|
37 |
-
|
38 |
-
if(json_last_error() == JSON_ERROR_NONE && $submited)
|
39 |
-
{
|
40 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('SUPPORT_FORM_SENT'),'SUCCESS');
|
41 |
-
return;
|
42 |
-
}
|
43 |
-
|
44 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('SUPPORT_FORM_ERROR'),'ERROR');
|
45 |
-
}
|
46 |
-
|
47 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'feedback_footer.php';
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
|
5 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
6 |
+
{
|
7 |
+
switch($_POST['option'])
|
8 |
+
{
|
9 |
+
case "mo_wpns_send_query":
|
10 |
+
wpns_handle_feedback_footer_form($_POST['query_email'],$_POST['query'],$_POST['query_phone']); break;
|
11 |
+
}
|
12 |
+
}
|
13 |
+
|
14 |
+
$current_user = wp_get_current_user();
|
15 |
+
$email = get_option("mo2f_email");
|
16 |
+
$phone = get_option("mo_wpns_admin_phone");
|
17 |
+
|
18 |
+
|
19 |
+
/* SUPPORT FORM RELATED FUNCTIONS */
|
20 |
+
|
21 |
+
//Function to handle support form submit
|
22 |
+
function wpns_handle_feedback_footer_form($email,$query,$phone)
|
23 |
+
{
|
24 |
+
|
25 |
+
if( empty($email) || empty($query) )
|
26 |
+
{
|
27 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('SUPPORT_FORM_VALUES'),'SUCCESS');
|
28 |
+
return;
|
29 |
+
}
|
30 |
+
|
31 |
+
|
32 |
+
$query = sanitize_text_field( $query );
|
33 |
+
$email = sanitize_text_field( $email );
|
34 |
+
$phone = sanitize_text_field( $phone );
|
35 |
+
$contact_us = new MocURL();
|
36 |
+
$submited = json_decode($contact_us->submit_contact_us($email, $phone, $query),true);
|
37 |
+
|
38 |
+
if(json_last_error() == JSON_ERROR_NONE && $submited)
|
39 |
+
{
|
40 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('SUPPORT_FORM_SENT'),'SUCCESS');
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('SUPPORT_FORM_ERROR'),'ERROR');
|
45 |
+
}
|
46 |
+
|
47 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'feedback_footer.php';
|
controllers/licensing.php
CHANGED
@@ -1,50 +1,50 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
|
5 |
-
$default_url = add_query_arg( array('page' => 'default' ), $_SERVER['REQUEST_URI'] );
|
6 |
-
$form_action = MoWpnsConstants::HOST_NAME.'/moas/login';
|
7 |
-
$admin_email = get_option('mo2f_email');
|
8 |
-
$redirect_url = MoWpnsConstants::HOST_NAME .'/moas/initializepayment';
|
9 |
-
|
10 |
-
$basic_plan_price = '$9 / year';
|
11 |
-
$premium_plan_price = '$9 / year + One Time Setup Fees';
|
12 |
-
|
13 |
-
|
14 |
-
$basic_plan_features= array(
|
15 |
-
"Brute Force Protection ( Login Security and Monitoring - Limit Login Attempts and track user logins. )",
|
16 |
-
"User Registration Security - Disallow Disposable / Fake email addresses",
|
17 |
-
"IP Blocking:(manual and automatic) [Blaclisting and whitelisting included",
|
18 |
-
"Advanced Blocking based on: IP range",
|
19 |
-
"Protection for WP files",
|
20 |
-
"Security Log - Logs Blocked IPs, Spammers, Bots, HTTP 404,403 and 400 logging",
|
21 |
-
"Database Backup",
|
22 |
-
"Google reCAPTCHA",
|
23 |
-
"Password protection - Enforce Strong Password : Check Password strength for all users",
|
24 |
-
"Mobile authentication based on QR code, OTP over SMS and email, Push, Soft token (15+ methods to choose from)<br>For Unlimited Users",
|
25 |
-
"Advanced activity logs auditing and reporting",
|
26 |
-
"Risk based access - Contextual authentication based on device, location, time of access and user behavior",
|
27 |
-
"Advanced User Verification",
|
28 |
-
"Social Login Integration",
|
29 |
-
""
|
30 |
-
);
|
31 |
-
|
32 |
-
$premium_plan_features= array(
|
33 |
-
"Brute Force Protection ( Login Security and Monitoring - Limit Login Attempts and track user logins. )",
|
34 |
-
"User Registration Security - Disallow Disposable / Fake email addresses",
|
35 |
-
"IP Blocking:(manual and automatic) [Blaclisting and whitelisting included",
|
36 |
-
"Advanced Blocking based on: IP range",
|
37 |
-
"Protection for WP files",
|
38 |
-
"Security Log - Logs Blocked IPs, Spammers, Bots, HTTP 404,403 and 400 logging",
|
39 |
-
"Database Backup",
|
40 |
-
"Google reCAPTCHA",
|
41 |
-
"Password protection - Enforce Strong Password : Check Password strength for all users",
|
42 |
-
"Mobile authentication based on QR code, OTP over SMS and email, Push, Soft token (15+ methods to choose from)<br>For Unlimited Users",
|
43 |
-
"Advanced activity logs auditing and reporting",
|
44 |
-
"Risk based access - Contextual authentication based on device, location, time of access and user behavior",
|
45 |
-
"Advanced User Verification",
|
46 |
-
"Social Login Integration",
|
47 |
-
'End to End Integration Support'
|
48 |
-
);
|
49 |
-
|
50 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'licensing.php';
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
|
5 |
+
$default_url = add_query_arg( array('page' => 'default' ), $_SERVER['REQUEST_URI'] );
|
6 |
+
$form_action = MoWpnsConstants::HOST_NAME.'/moas/login';
|
7 |
+
$admin_email = get_option('mo2f_email');
|
8 |
+
$redirect_url = MoWpnsConstants::HOST_NAME .'/moas/initializepayment';
|
9 |
+
|
10 |
+
$basic_plan_price = '$9 / year';
|
11 |
+
$premium_plan_price = '$9 / year + One Time Setup Fees';
|
12 |
+
|
13 |
+
|
14 |
+
$basic_plan_features= array(
|
15 |
+
"Brute Force Protection ( Login Security and Monitoring - Limit Login Attempts and track user logins. )",
|
16 |
+
"User Registration Security - Disallow Disposable / Fake email addresses",
|
17 |
+
"IP Blocking:(manual and automatic) [Blaclisting and whitelisting included",
|
18 |
+
"Advanced Blocking based on: IP range",
|
19 |
+
"Protection for WP files",
|
20 |
+
"Security Log - Logs Blocked IPs, Spammers, Bots, HTTP 404,403 and 400 logging",
|
21 |
+
"Database Backup",
|
22 |
+
"Google reCAPTCHA",
|
23 |
+
"Password protection - Enforce Strong Password : Check Password strength for all users",
|
24 |
+
"Mobile authentication based on QR code, OTP over SMS and email, Push, Soft token (15+ methods to choose from)<br>For Unlimited Users",
|
25 |
+
"Advanced activity logs auditing and reporting",
|
26 |
+
"Risk based access - Contextual authentication based on device, location, time of access and user behavior",
|
27 |
+
"Advanced User Verification",
|
28 |
+
"Social Login Integration",
|
29 |
+
""
|
30 |
+
);
|
31 |
+
|
32 |
+
$premium_plan_features= array(
|
33 |
+
"Brute Force Protection ( Login Security and Monitoring - Limit Login Attempts and track user logins. )",
|
34 |
+
"User Registration Security - Disallow Disposable / Fake email addresses",
|
35 |
+
"IP Blocking:(manual and automatic) [Blaclisting and whitelisting included",
|
36 |
+
"Advanced Blocking based on: IP range",
|
37 |
+
"Protection for WP files",
|
38 |
+
"Security Log - Logs Blocked IPs, Spammers, Bots, HTTP 404,403 and 400 logging",
|
39 |
+
"Database Backup",
|
40 |
+
"Google reCAPTCHA",
|
41 |
+
"Password protection - Enforce Strong Password : Check Password strength for all users",
|
42 |
+
"Mobile authentication based on QR code, OTP over SMS and email, Push, Soft token (15+ methods to choose from)<br>For Unlimited Users",
|
43 |
+
"Advanced activity logs auditing and reporting",
|
44 |
+
"Risk based access - Contextual authentication based on device, location, time of access and user behavior",
|
45 |
+
"Advanced User Verification",
|
46 |
+
"Social Login Integration",
|
47 |
+
'End to End Integration Support'
|
48 |
+
);
|
49 |
+
|
50 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'licensing.php';
|
controllers/login-security.php
CHANGED
@@ -41,12 +41,12 @@
|
|
41 |
$allwed_login_attempts = get_option('mo2f_allwed_login_attempts') ? get_option('mo2f_allwed_login_attempts') : 10;
|
42 |
$time_of_blocking_type = get_option('mo2f_time_of_blocking_type') ? get_option('mo2f_time_of_blocking_type') : "permanent";
|
43 |
$time_of_blocking_val = get_option('mo2f_time_of_blocking_val') ? get_option('mo2f_time_of_blocking_val') : 3;
|
44 |
-
$brute_force_enabled =
|
45 |
-
$remaining_attempts =
|
46 |
$slow_down_attacks = get_option('mo_wpns_slow_down_attacks') ? "checked" : "";
|
47 |
$enable_2fa = get_option('mo_wpns_enable_2fa') ? "checked" : "";
|
48 |
|
49 |
-
$enforce_strong_password=
|
50 |
$attack_delay = get_option('mo_wpns_slow_down_attacks_delay') ? get_option('mo_wpns_slow_down_attacks_delay'): 2 ;
|
51 |
$google_recaptcha = get_option('mo_wpns_activate_recaptcha') ? "checked" : "";
|
52 |
$test_recaptcha_url = "";
|
@@ -58,7 +58,7 @@
|
|
58 |
$captcha_reg = get_option('mo_wpns_activate_recaptcha_for_registration') ? "checked" : "";
|
59 |
|
60 |
|
61 |
-
$strong_password_account=
|
62 |
|
63 |
|
64 |
$mo2FAPlugin = new TwoFAPlugin();
|
41 |
$allwed_login_attempts = get_option('mo2f_allwed_login_attempts') ? get_option('mo2f_allwed_login_attempts') : 10;
|
42 |
$time_of_blocking_type = get_option('mo2f_time_of_blocking_type') ? get_option('mo2f_time_of_blocking_type') : "permanent";
|
43 |
$time_of_blocking_val = get_option('mo2f_time_of_blocking_val') ? get_option('mo2f_time_of_blocking_val') : 3;
|
44 |
+
$brute_force_enabled = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_brute_force', 'get_option') ? "checked" : "";
|
45 |
+
$remaining_attempts = MoWpnsUtility::get_mo2f_db_option('mo2f_show_remaining_attempts', 'get_option') ? "checked" : "";
|
46 |
$slow_down_attacks = get_option('mo_wpns_slow_down_attacks') ? "checked" : "";
|
47 |
$enable_2fa = get_option('mo_wpns_enable_2fa') ? "checked" : "";
|
48 |
|
49 |
+
$enforce_strong_password= MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option') ? "checked" : "";
|
50 |
$attack_delay = get_option('mo_wpns_slow_down_attacks_delay') ? get_option('mo_wpns_slow_down_attacks_delay'): 2 ;
|
51 |
$google_recaptcha = get_option('mo_wpns_activate_recaptcha') ? "checked" : "";
|
52 |
$test_recaptcha_url = "";
|
58 |
$captcha_reg = get_option('mo_wpns_activate_recaptcha_for_registration') ? "checked" : "";
|
59 |
|
60 |
|
61 |
+
$strong_password_account= MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords_for_accounts', 'get_option') ? MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords_for_accounts', 'get_option') : "all";
|
62 |
|
63 |
|
64 |
$mo2FAPlugin = new TwoFAPlugin();
|
controllers/login-spam.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<?php
|
2 |
-
global $moWpnsUtility,$mo2f_dirName;
|
3 |
-
if( isset( $_GET[ 'tab' ] ) ) {
|
4 |
-
$active_tab = $_GET[ 'tab' ];
|
5 |
-
} else {
|
6 |
-
$active_tab = 'default';
|
7 |
-
}
|
8 |
-
update_site_option('mo2f_visit_login_and_spam',true);
|
9 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'login_spam.php';
|
10 |
?>
|
1 |
+
<?php
|
2 |
+
global $moWpnsUtility,$mo2f_dirName;
|
3 |
+
if( isset( $_GET[ 'tab' ] ) ) {
|
4 |
+
$active_tab = $_GET[ 'tab' ];
|
5 |
+
} else {
|
6 |
+
$active_tab = 'default';
|
7 |
+
}
|
8 |
+
update_site_option('mo2f_visit_login_and_spam',true);
|
9 |
+
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'login_spam.php';
|
10 |
?>
|
controllers/main_controller.php
CHANGED
@@ -1,111 +1,111 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
|
5 |
-
$controller = $mo2f_dirName . 'controllers'.DIRECTORY_SEPARATOR;
|
6 |
-
|
7 |
-
|
8 |
-
if(current_user_can('administrator'))
|
9 |
-
{
|
10 |
-
include $controller . 'navbar.php';
|
11 |
-
include $controller . 'newtork_security_features.php';
|
12 |
-
|
13 |
-
$tour_started=get_option('mo2f_tour_started',0);
|
14 |
-
|
15 |
-
|
16 |
-
if($tour_started<1)
|
17 |
-
include $controller . 'two-fa-intro.php';
|
18 |
-
else if($tour_started != 0)
|
19 |
-
include $controller . 'tour-model.php';
|
20 |
-
|
21 |
-
if( isset( $_GET[ 'page' ]))
|
22 |
-
{
|
23 |
-
switch($_GET['page'])
|
24 |
-
{
|
25 |
-
case 'mo_2fa_dashboard':
|
26 |
-
include $controller . 'dashboard.php'; break;
|
27 |
-
case 'mo_2fa_login_and_spam':
|
28 |
-
include $controller . 'login-spam.php'; break;
|
29 |
-
case 'default':
|
30 |
-
include $controller . 'login-security.php'; break;
|
31 |
-
case 'mo_2fa_account':
|
32 |
-
include $controller . 'account.php'; break;
|
33 |
-
case 'mo_2fa_backup':
|
34 |
-
include $controller . 'backup'.DIRECTORY_SEPARATOR.'backup.php'; break;
|
35 |
-
case 'mo_2fa_upgrade':
|
36 |
-
include $controller . 'upgrade.php'; break;
|
37 |
-
case 'mo_2fa_waf':
|
38 |
-
include $controller . 'waf.php'; break;
|
39 |
-
case 'mo_2fa_blockedips':
|
40 |
-
include $controller . 'ip-blocking.php'; break;
|
41 |
-
case 'mo_2fa_advancedblocking':
|
42 |
-
include $controller . 'advanced-blocking.php'; break;
|
43 |
-
case 'mo_2fa_notifications':
|
44 |
-
include $controller . 'notification-settings.php'; break;
|
45 |
-
case 'mo_2fa_reports':
|
46 |
-
include $controller . 'reports.php'; break;
|
47 |
-
case 'mo_2fa_licensing':
|
48 |
-
include $controller . 'licensing.php'; break;
|
49 |
-
case 'mo_2fa_troubleshooting':
|
50 |
-
include $controller . 'troubleshooting.php'; break;
|
51 |
-
case 'mo_2fa_addons':
|
52 |
-
include $controller . 'addons.php'; break;
|
53 |
-
case 'mo_2fa_malwarescan':
|
54 |
-
include $controller . 'malware_scanner'.DIRECTORY_SEPARATOR.'scan_malware.php'; break;
|
55 |
-
case 'mo_2fa_two_fa':
|
56 |
-
include $controller .'twofa'.DIRECTORY_SEPARATOR. 'two_fa.php'; break;
|
57 |
-
case 'mo_2fa_request_demo':
|
58 |
-
include $controller . 'request_demo.php';
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
-
}
|
63 |
-
else
|
64 |
-
{
|
65 |
-
if( isset( $_GET[ 'page' ]))
|
66 |
-
{
|
67 |
-
switch($_GET['page'])
|
68 |
-
{
|
69 |
-
case 'mo_2fa_two_fa':
|
70 |
-
include $controller .'twofa'.DIRECTORY_SEPARATOR. 'two_fa.php'; break;
|
71 |
-
|
72 |
-
}
|
73 |
-
|
74 |
-
}
|
75 |
-
|
76 |
-
}
|
77 |
-
if (isset( $_GET[ 'page' ])) {
|
78 |
-
|
79 |
-
if ($_GET[ 'page' ] == "mo_2fa_upgrade" || $_GET[ 'page' ] == "mo_2fa_addons")
|
80 |
-
{
|
81 |
-
include $controller . 'feedback_footer.php';
|
82 |
-
}
|
83 |
-
else
|
84 |
-
{
|
85 |
-
include $controller . 'support.php';
|
86 |
-
}
|
87 |
-
}
|
88 |
-
?>
|
89 |
-
|
90 |
-
<!-- <script>
|
91 |
-
jQuery(document).ready(function(){
|
92 |
-
var nonce = "<?php //echo wp_create_nonce('wpns-quick-scan');?>";
|
93 |
-
var data={
|
94 |
-
'action':'mo_wpns_malware_redirect',
|
95 |
-
'call_type':'malware_scan_initiate',
|
96 |
-
'scan':'scan_start',
|
97 |
-
'scantype':'quick_scan',
|
98 |
-
'nonce': nonce
|
99 |
-
};
|
100 |
-
jQuery.post(ajaxurl, data, function(response){
|
101 |
-
jQuery('input[name="quick_scan_button"]').removeAttr('disabled');
|
102 |
-
document.getElementById('quick_scan_button').style.backgroundColor = '#20b2aa';
|
103 |
-
jQuery('input[name="standard_scan_button"]').removeAttr('disabled');
|
104 |
-
document.getElementById('standard_scan_button').style.backgroundColor = '#20b2aa';
|
105 |
-
jQuery('input[name="custom_scan_button"]').removeAttr('disabled');
|
106 |
-
document.getElementById('custom_scan_button').style.backgroundColor = '#20b2aa';
|
107 |
-
document.getElementById("quick_scan_button").value = "Quick Scan";
|
108 |
-
});
|
109 |
-
});
|
110 |
-
</script> -->
|
111 |
-
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
|
5 |
+
$controller = $mo2f_dirName . 'controllers'.DIRECTORY_SEPARATOR;
|
6 |
+
|
7 |
+
|
8 |
+
if(current_user_can('administrator'))
|
9 |
+
{
|
10 |
+
include $controller . 'navbar.php';
|
11 |
+
include $controller . 'newtork_security_features.php';
|
12 |
+
|
13 |
+
$tour_started=get_option('mo2f_tour_started',0);
|
14 |
+
|
15 |
+
|
16 |
+
if($tour_started<1)
|
17 |
+
include $controller . 'two-fa-intro.php';
|
18 |
+
else if($tour_started != 0)
|
19 |
+
include $controller . 'tour-model.php';
|
20 |
+
|
21 |
+
if( isset( $_GET[ 'page' ]))
|
22 |
+
{
|
23 |
+
switch($_GET['page'])
|
24 |
+
{
|
25 |
+
case 'mo_2fa_dashboard':
|
26 |
+
include $controller . 'dashboard.php'; break;
|
27 |
+
case 'mo_2fa_login_and_spam':
|
28 |
+
include $controller . 'login-spam.php'; break;
|
29 |
+
case 'default':
|
30 |
+
include $controller . 'login-security.php'; break;
|
31 |
+
case 'mo_2fa_account':
|
32 |
+
include $controller . 'account.php'; break;
|
33 |
+
case 'mo_2fa_backup':
|
34 |
+
include $controller . 'backup'.DIRECTORY_SEPARATOR.'backup.php'; break;
|
35 |
+
case 'mo_2fa_upgrade':
|
36 |
+
include $controller . 'upgrade.php'; break;
|
37 |
+
case 'mo_2fa_waf':
|
38 |
+
include $controller . 'waf.php'; break;
|
39 |
+
case 'mo_2fa_blockedips':
|
40 |
+
include $controller . 'ip-blocking.php'; break;
|
41 |
+
case 'mo_2fa_advancedblocking':
|
42 |
+
include $controller . 'advanced-blocking.php'; break;
|
43 |
+
case 'mo_2fa_notifications':
|
44 |
+
include $controller . 'notification-settings.php'; break;
|
45 |
+
case 'mo_2fa_reports':
|
46 |
+
include $controller . 'reports.php'; break;
|
47 |
+
case 'mo_2fa_licensing':
|
48 |
+
include $controller . 'licensing.php'; break;
|
49 |
+
case 'mo_2fa_troubleshooting':
|
50 |
+
include $controller . 'troubleshooting.php'; break;
|
51 |
+
case 'mo_2fa_addons':
|
52 |
+
include $controller . 'addons.php'; break;
|
53 |
+
case 'mo_2fa_malwarescan':
|
54 |
+
include $controller . 'malware_scanner'.DIRECTORY_SEPARATOR.'scan_malware.php'; break;
|
55 |
+
case 'mo_2fa_two_fa':
|
56 |
+
include $controller .'twofa'.DIRECTORY_SEPARATOR. 'two_fa.php'; break;
|
57 |
+
case 'mo_2fa_request_demo':
|
58 |
+
include $controller . 'request_demo.php';
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
}
|
63 |
+
else
|
64 |
+
{
|
65 |
+
if( isset( $_GET[ 'page' ]))
|
66 |
+
{
|
67 |
+
switch($_GET['page'])
|
68 |
+
{
|
69 |
+
case 'mo_2fa_two_fa':
|
70 |
+
include $controller .'twofa'.DIRECTORY_SEPARATOR. 'two_fa.php'; break;
|
71 |
+
|
72 |
+
}
|
73 |
+
|
74 |
+
}
|
75 |
+
|
76 |
+
}
|
77 |
+
if (isset( $_GET[ 'page' ])) {
|
78 |
+
|
79 |
+
if ($_GET[ 'page' ] == "mo_2fa_upgrade" || $_GET[ 'page' ] == "mo_2fa_addons")
|
80 |
+
{
|
81 |
+
include $controller . 'feedback_footer.php';
|
82 |
+
}
|
83 |
+
else
|
84 |
+
{
|
85 |
+
include $controller . 'support.php';
|
86 |
+
}
|
87 |
+
}
|
88 |
+
?>
|
89 |
+
|
90 |
+
<!-- <script>
|
91 |
+
jQuery(document).ready(function(){
|
92 |
+
var nonce = "<?php //echo wp_create_nonce('wpns-quick-scan');?>";
|
93 |
+
var data={
|
94 |
+
'action':'mo_wpns_malware_redirect',
|
95 |
+
'call_type':'malware_scan_initiate',
|
96 |
+
'scan':'scan_start',
|
97 |
+
'scantype':'quick_scan',
|
98 |
+
'nonce': nonce
|
99 |
+
};
|
100 |
+
jQuery.post(ajaxurl, data, function(response){
|
101 |
+
jQuery('input[name="quick_scan_button"]').removeAttr('disabled');
|
102 |
+
document.getElementById('quick_scan_button').style.backgroundColor = '#20b2aa';
|
103 |
+
jQuery('input[name="standard_scan_button"]').removeAttr('disabled');
|
104 |
+
document.getElementById('standard_scan_button').style.backgroundColor = '#20b2aa';
|
105 |
+
jQuery('input[name="custom_scan_button"]').removeAttr('disabled');
|
106 |
+
document.getElementById('custom_scan_button').style.backgroundColor = '#20b2aa';
|
107 |
+
document.getElementById("quick_scan_button").value = "Quick Scan";
|
108 |
+
});
|
109 |
+
});
|
110 |
+
</script> -->
|
111 |
+
|
controllers/malware_scanner/malware_scan_result.php
CHANGED
@@ -1,41 +1,41 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
function showScanResults(){
|
4 |
-
$mo_wpns_db_handler = new MoWpnsDB();
|
5 |
-
if(isset($_GET['view'])){
|
6 |
-
if(isset($_GET['trust'])){
|
7 |
-
$mo_wpns_db_handler->ignorefile(base64_decode($_GET['trust']));
|
8 |
-
}
|
9 |
-
else if(isset($_GET['trustchanged'])){
|
10 |
-
$mo_wpns_db_handler->ignorechangedfile($_GET['trustchanged']);
|
11 |
-
}
|
12 |
-
$last_id=$mo_wpns_db_handler->get_last_id();
|
13 |
-
$send_id=$last_id[0]->max;
|
14 |
-
$last_scan=$mo_wpns_db_handler->count_files_last_scan($send_id);
|
15 |
-
$listofignorefiles = $mo_wpns_db_handler->getlistofignorefiles();
|
16 |
-
$ignorefiles = array();
|
17 |
-
foreach($listofignorefiles as $row)
|
18 |
-
$ignorefiles[$row->path] = array('signature'=>$row->signature,"id"=>$row->id);
|
19 |
-
|
20 |
-
$result = $mo_wpns_db_handler->get_report_with_id($_GET['view']);
|
21 |
-
if(sizeof($result)>0){
|
22 |
-
$detailreport = $mo_wpns_db_handler->get_detail_report_with_id($_GET['view']);
|
23 |
-
show_scan_details($detailreport, $result, $ignorefiles, $last_scan);
|
24 |
-
}
|
25 |
-
}
|
26 |
-
else{
|
27 |
-
$str1= $_SERVER['REQUEST_URI'];
|
28 |
-
$str1= str_replace("admin-ajax.php", "admin.php?page=mo_2fa_malwarescan", $str1);
|
29 |
-
$currenturl = remove_query_arg('delete',$str1);
|
30 |
-
$currenturl = remove_query_arg('view',$currenturl);
|
31 |
-
$currenturl = remove_query_arg('trust',$currenturl);
|
32 |
-
$currenturl = remove_query_arg('trustchanged',$currenturl);
|
33 |
-
if(isset($_GET['delete'])){
|
34 |
-
$mo_wpns_db_handler->delete_report($_GET['delete']);
|
35 |
-
}
|
36 |
-
$result = $mo_wpns_db_handler->get_report();
|
37 |
-
show_scan_report($currenturl, $result);
|
38 |
-
}
|
39 |
-
}
|
40 |
-
|
41 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
function showScanResults(){
|
4 |
+
$mo_wpns_db_handler = new MoWpnsDB();
|
5 |
+
if(isset($_GET['view'])){
|
6 |
+
if(isset($_GET['trust'])){
|
7 |
+
$mo_wpns_db_handler->ignorefile(base64_decode($_GET['trust']));
|
8 |
+
}
|
9 |
+
else if(isset($_GET['trustchanged'])){
|
10 |
+
$mo_wpns_db_handler->ignorechangedfile($_GET['trustchanged']);
|
11 |
+
}
|
12 |
+
$last_id=$mo_wpns_db_handler->get_last_id();
|
13 |
+
$send_id=$last_id[0]->max;
|
14 |
+
$last_scan=$mo_wpns_db_handler->count_files_last_scan($send_id);
|
15 |
+
$listofignorefiles = $mo_wpns_db_handler->getlistofignorefiles();
|
16 |
+
$ignorefiles = array();
|
17 |
+
foreach($listofignorefiles as $row)
|
18 |
+
$ignorefiles[$row->path] = array('signature'=>$row->signature,"id"=>$row->id);
|
19 |
+
|
20 |
+
$result = $mo_wpns_db_handler->get_report_with_id($_GET['view']);
|
21 |
+
if(sizeof($result)>0){
|
22 |
+
$detailreport = $mo_wpns_db_handler->get_detail_report_with_id($_GET['view']);
|
23 |
+
show_scan_details($detailreport, $result, $ignorefiles, $last_scan);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
else{
|
27 |
+
$str1= $_SERVER['REQUEST_URI'];
|
28 |
+
$str1= str_replace("admin-ajax.php", "admin.php?page=mo_2fa_malwarescan", $str1);
|
29 |
+
$currenturl = remove_query_arg('delete',$str1);
|
30 |
+
$currenturl = remove_query_arg('view',$currenturl);
|
31 |
+
$currenturl = remove_query_arg('trust',$currenturl);
|
32 |
+
$currenturl = remove_query_arg('trustchanged',$currenturl);
|
33 |
+
if(isset($_GET['delete'])){
|
34 |
+
$mo_wpns_db_handler->delete_report($_GET['delete']);
|
35 |
+
}
|
36 |
+
$result = $mo_wpns_db_handler->get_report();
|
37 |
+
show_scan_report($currenturl, $result);
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
?>
|
controllers/malware_scanner/scan_malware.php
CHANGED
@@ -1,10 +1,9 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
|
5 |
+
update_site_option('mo2f_visit_malware',true);
|
6 |
+
|
7 |
+
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'malware_scanner'.DIRECTORY_SEPARATOR.'malware_scan.php';
|
8 |
+
?>
|
9 |
+
|
|
controllers/malware_scanner/scan_malware_report.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'malware_scanner'.DIRECTORY_SEPARATOR.'scan_report_view.php';
|
4 |
-
|
5 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'malware_scanner'.DIRECTORY_SEPARATOR.'scan_report_view.php';
|
4 |
+
|
5 |
?>
|
controllers/malware_scanner/scan_malware_settings.php
CHANGED
@@ -24,23 +24,21 @@ if(is_null($scan_configuration)){
|
|
24 |
$mo_wpns_check_extl = $scan_configuration->ext_link_check;
|
25 |
$mo_wpns_check_repo = $scan_configuration->check_repo;
|
26 |
}
|
27 |
-
//$mo_wpns_scan_files_extensions = get_option('mo_wpns_scan_files_extensions');
|
28 |
$mo_wpns_check_rfi = 0;
|
29 |
$mo_wpns_adv_sign = 0;
|
30 |
$mo_wpns_check_domain = 0;
|
31 |
$mo_wpns_check_trojan = 0;
|
32 |
$mo_wpns_check_backdoor = 0;
|
33 |
-
//$mo_wpns_skip_folders = get_option('mo_wpns_skip_folders');
|
34 |
$mo_wpns_skip_folders_array = array();
|
35 |
if(!empty($mo_wpns_skip_folders)){
|
36 |
$mo_wpns_skip_folders_array = explode(";",$mo_wpns_skip_folders);
|
37 |
}
|
38 |
-
$mo_wpns_white_url = ""
|
39 |
$mo_wpns_white_urls_array = array();
|
40 |
if(!empty($mo_wpns_white_url)){
|
41 |
$mo_wpns_white_urls_array = explode(";",$mo_wpns_white_url);
|
42 |
}
|
43 |
-
$mo_wpns_custom_sign = ""
|
44 |
$mo_wpns_custom_sign_array = array();
|
45 |
if(!empty($mo_wpns_custom_sign)){
|
46 |
$mo_wpns_custom_sign_array = explode(";",$mo_wpns_custom_sign);
|
24 |
$mo_wpns_check_extl = $scan_configuration->ext_link_check;
|
25 |
$mo_wpns_check_repo = $scan_configuration->check_repo;
|
26 |
}
|
|
|
27 |
$mo_wpns_check_rfi = 0;
|
28 |
$mo_wpns_adv_sign = 0;
|
29 |
$mo_wpns_check_domain = 0;
|
30 |
$mo_wpns_check_trojan = 0;
|
31 |
$mo_wpns_check_backdoor = 0;
|
|
|
32 |
$mo_wpns_skip_folders_array = array();
|
33 |
if(!empty($mo_wpns_skip_folders)){
|
34 |
$mo_wpns_skip_folders_array = explode(";",$mo_wpns_skip_folders);
|
35 |
}
|
36 |
+
$mo_wpns_white_url = "";
|
37 |
$mo_wpns_white_urls_array = array();
|
38 |
if(!empty($mo_wpns_white_url)){
|
39 |
$mo_wpns_white_urls_array = explode(";",$mo_wpns_white_url);
|
40 |
}
|
41 |
+
$mo_wpns_custom_sign = "";
|
42 |
$mo_wpns_custom_sign_array = array();
|
43 |
if(!empty($mo_wpns_custom_sign)){
|
44 |
$mo_wpns_custom_sign_array = explode(";",$mo_wpns_custom_sign);
|
controllers/malware_scanner/scan_malware_summary.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'malware_scanner'.DIRECTORY_SEPARATOR.'scan_summary_view.php';
|
4 |
-
|
5 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'malware_scanner'.DIRECTORY_SEPARATOR.'scan_summary_view.php';
|
4 |
+
|
5 |
?>
|
controllers/navbar.php
CHANGED
@@ -1,83 +1,83 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
5 |
-
{
|
6 |
-
switch(sanitize_text_field(wp_unslash($_POST['option'])))
|
7 |
-
{
|
8 |
-
case "mo_wpns_2fa_with_network_security":
|
9 |
-
$security_features = new Mo_2fa_security_features();
|
10 |
-
$security_features->wpns_2fa_with_network_security($_POST); break;
|
11 |
-
}
|
12 |
-
}
|
13 |
-
$network_security_features=
|
14 |
-
|
15 |
-
if( isset( $_GET[ 'page' ])){
|
16 |
-
$tab_count= get_site_option('mo2f_tab_count', 0);
|
17 |
-
if($tab_count == 5)
|
18 |
-
update_site_option('mo_2f_switch_all', 1);
|
19 |
-
else
|
20 |
-
update_site_option('mo_2f_switch_all', 0);
|
21 |
-
switch($_GET['page'])
|
22 |
-
{
|
23 |
-
case 'mo_2fa_login_and_spam':
|
24 |
-
update_option('mo_2f_switch_loginspam', 1);
|
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'))
|
36 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
37 |
-
break;
|
38 |
-
case 'mo_2fa_advancedblocking':
|
39 |
-
update_option('mo_2f_switch_adv_block', 1);
|
40 |
-
if($tab_count < 5 && !get_site_option('mo_2f_switch_adv_block'))
|
41 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
42 |
-
break;
|
43 |
-
|
44 |
-
case 'mo_2fa_malwarescan':
|
45 |
-
update_option('mo_2f_switch_malware', 1);
|
46 |
-
if($tab_count < 5 && !get_site_option('mo_2f_switch_malware'))
|
47 |
-
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
48 |
-
break;
|
49 |
-
}
|
50 |
-
}
|
51 |
-
$profile_url = add_query_arg( array('page' => 'mo_2fa_account' ), $_SERVER['REQUEST_URI'] );
|
52 |
-
$login_security = add_query_arg( array('page' => 'default' ), $_SERVER['REQUEST_URI'] );
|
53 |
-
$waf = add_query_arg( array('page' => 'mo_2fa_waf' ), $_SERVER['REQUEST_URI'] );
|
54 |
-
$login_and_spam = add_query_arg( array('page' => 'mo_2fa_login_and_spam' ), $_SERVER['REQUEST_URI'] );
|
55 |
-
$register_url = add_query_arg( array('page' => 'registration' ), $_SERVER['REQUEST_URI'] );
|
56 |
-
$blocked_ips = add_query_arg( array('page' => 'mo_2fa_blockedips' ), $_SERVER['REQUEST_URI'] );
|
57 |
-
$advance_block = add_query_arg( array('page' => 'mo_2fa_advancedblocking' ), $_SERVER['REQUEST_URI'] );
|
58 |
-
$notif_url = add_query_arg( array('page' => 'mo_2fa_notifications' ), $_SERVER['REQUEST_URI'] );
|
59 |
-
$reports_url = add_query_arg( array('page' => 'mo_2fa_reports' ), $_SERVER['REQUEST_URI'] );
|
60 |
-
$license_url = add_query_arg( array('page' => 'mo_2fa_upgrade' ), $_SERVER['REQUEST_URI'] );
|
61 |
-
$help_url = add_query_arg( array('page' => 'mo_2fa_troubleshooting' ), $_SERVER['REQUEST_URI'] );
|
62 |
-
$addons_url = add_query_arg( array('page' => 'mo_2fa_addons' ), $_SERVER['REQUEST_URI'] );
|
63 |
-
$content_protect= add_query_arg( array('page' => 'content_protect' ), $_SERVER['REQUEST_URI'] );
|
64 |
-
$backup = add_query_arg( array('page' => 'mo_2fa_backup' ), $_SERVER['REQUEST_URI'] );
|
65 |
-
$scan_url = add_query_arg( array('page' => 'mo_2fa_malwarescan' ), $_SERVER['REQUEST_URI'] );
|
66 |
-
$two_fa = add_query_arg( array('page' => 'mo_2fa_two_fa' ), $_SERVER['REQUEST_URI'] );
|
67 |
-
//Added for new design
|
68 |
-
$dashboard_url = add_query_arg(array('page' => 'mo_2fa_dashboard' ), $_SERVER['REQUEST_URI']);
|
69 |
-
$upgrade_url = add_query_arg(array('page' => 'mo_2fa_upgrade' ), $_SERVER['REQUEST_URI']);
|
70 |
-
$request_demo_url = add_query_arg(array('page' => 'mo_2fa_request_demo' ), $_SERVER['REQUEST_URI']);
|
71 |
-
//dynamic
|
72 |
-
$logo_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/miniorange_logo.png';
|
73 |
-
$login_with_usename_only_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/login-with-password-and-2fa.png';
|
74 |
-
$hide_login_form_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/hide_login_form.png';
|
75 |
-
$new_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/new.png';
|
76 |
-
$shw_feedback = get_option('donot_show_feedback_message') ? false: true;
|
77 |
-
|
78 |
-
$moPluginHandler= new MoWpnsHandler();
|
79 |
-
$safe = $moPluginHandler->is_whitelisted($moWpnsUtility->get_client_ip());
|
80 |
-
|
81 |
-
$active_tab = $_GET['page'];
|
82 |
-
|
83 |
-
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'navbar.php';
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
5 |
+
{
|
6 |
+
switch(sanitize_text_field(wp_unslash($_POST['option'])))
|
7 |
+
{
|
8 |
+
case "mo_wpns_2fa_with_network_security":
|
9 |
+
$security_features = new Mo_2fa_security_features();
|
10 |
+
$security_features->wpns_2fa_with_network_security($_POST); break;
|
11 |
+
}
|
12 |
+
}
|
13 |
+
$network_security_features= MoWpnsUtility::get_mo2f_db_option('mo_wpns_2fa_with_network_security', 'get_option') ? "checked" : "";
|
14 |
+
|
15 |
+
if( isset( $_GET[ 'page' ])){
|
16 |
+
$tab_count= get_site_option('mo2f_tab_count', 0);
|
17 |
+
if($tab_count == 5)
|
18 |
+
update_site_option('mo_2f_switch_all', 1);
|
19 |
+
else
|
20 |
+
update_site_option('mo_2f_switch_all', 0);
|
21 |
+
switch($_GET['page'])
|
22 |
+
{
|
23 |
+
case 'mo_2fa_login_and_spam':
|
24 |
+
update_option('mo_2f_switch_loginspam', 1);
|
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'))
|
36 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
37 |
+
break;
|
38 |
+
case 'mo_2fa_advancedblocking':
|
39 |
+
update_option('mo_2f_switch_adv_block', 1);
|
40 |
+
if($tab_count < 5 && !get_site_option('mo_2f_switch_adv_block'))
|
41 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
42 |
+
break;
|
43 |
+
|
44 |
+
case 'mo_2fa_malwarescan':
|
45 |
+
update_option('mo_2f_switch_malware', 1);
|
46 |
+
if($tab_count < 5 && !get_site_option('mo_2f_switch_malware'))
|
47 |
+
update_site_option('mo2f_tab_count', get_site_option('mo2f_tab_count')+1);
|
48 |
+
break;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
$profile_url = add_query_arg( array('page' => 'mo_2fa_account' ), $_SERVER['REQUEST_URI'] );
|
52 |
+
$login_security = add_query_arg( array('page' => 'default' ), $_SERVER['REQUEST_URI'] );
|
53 |
+
$waf = add_query_arg( array('page' => 'mo_2fa_waf' ), $_SERVER['REQUEST_URI'] );
|
54 |
+
$login_and_spam = add_query_arg( array('page' => 'mo_2fa_login_and_spam' ), $_SERVER['REQUEST_URI'] );
|
55 |
+
$register_url = add_query_arg( array('page' => 'registration' ), $_SERVER['REQUEST_URI'] );
|
56 |
+
$blocked_ips = add_query_arg( array('page' => 'mo_2fa_blockedips' ), $_SERVER['REQUEST_URI'] );
|
57 |
+
$advance_block = add_query_arg( array('page' => 'mo_2fa_advancedblocking' ), $_SERVER['REQUEST_URI'] );
|
58 |
+
$notif_url = add_query_arg( array('page' => 'mo_2fa_notifications' ), $_SERVER['REQUEST_URI'] );
|
59 |
+
$reports_url = add_query_arg( array('page' => 'mo_2fa_reports' ), $_SERVER['REQUEST_URI'] );
|
60 |
+
$license_url = add_query_arg( array('page' => 'mo_2fa_upgrade' ), $_SERVER['REQUEST_URI'] );
|
61 |
+
$help_url = add_query_arg( array('page' => 'mo_2fa_troubleshooting' ), $_SERVER['REQUEST_URI'] );
|
62 |
+
$addons_url = add_query_arg( array('page' => 'mo_2fa_addons' ), $_SERVER['REQUEST_URI'] );
|
63 |
+
$content_protect= add_query_arg( array('page' => 'content_protect' ), $_SERVER['REQUEST_URI'] );
|
64 |
+
$backup = add_query_arg( array('page' => 'mo_2fa_backup' ), $_SERVER['REQUEST_URI'] );
|
65 |
+
$scan_url = add_query_arg( array('page' => 'mo_2fa_malwarescan' ), $_SERVER['REQUEST_URI'] );
|
66 |
+
$two_fa = add_query_arg( array('page' => 'mo_2fa_two_fa' ), $_SERVER['REQUEST_URI'] );
|
67 |
+
//Added for new design
|
68 |
+
$dashboard_url = add_query_arg(array('page' => 'mo_2fa_dashboard' ), $_SERVER['REQUEST_URI']);
|
69 |
+
$upgrade_url = add_query_arg(array('page' => 'mo_2fa_upgrade' ), $_SERVER['REQUEST_URI']);
|
70 |
+
$request_demo_url = add_query_arg(array('page' => 'mo_2fa_request_demo' ), $_SERVER['REQUEST_URI']);
|
71 |
+
//dynamic
|
72 |
+
$logo_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/miniorange_logo.png';
|
73 |
+
$login_with_usename_only_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/login-with-password-and-2fa.png';
|
74 |
+
$hide_login_form_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/hide_login_form.png';
|
75 |
+
$new_url = plugin_dir_url(dirname(__FILE__)) . 'includes/images/new.png';
|
76 |
+
$shw_feedback = get_option('donot_show_feedback_message') ? false: true;
|
77 |
+
|
78 |
+
$moPluginHandler= new MoWpnsHandler();
|
79 |
+
$safe = $moPluginHandler->is_whitelisted($moWpnsUtility->get_client_ip());
|
80 |
+
|
81 |
+
$active_tab = $_GET['page'];
|
82 |
+
|
83 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'navbar.php';
|
controllers/newtork_security_features.php
CHANGED
@@ -17,7 +17,7 @@
|
|
17 |
}
|
18 |
|
19 |
|
20 |
-
$network_security_features=
|
21 |
|
22 |
|
23 |
|
17 |
}
|
18 |
|
19 |
|
20 |
+
$network_security_features= MoWpnsUtility::get_mo2f_db_option('mo_wpns_2fa_with_network_security', 'get_option') ? "checked" : "";
|
21 |
|
22 |
|
23 |
|
controllers/notification-settings.php
CHANGED
@@ -1,101 +1,101 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility,$mo2f_dirName;
|
4 |
-
|
5 |
-
$template1 = "Hello,<br><br>The user with IP Address <b>##ipaddress##</b> has exceeded allowed trasaction limit on your website <b>".get_bloginfo()."</b> and we have blocked his IP address for further access to website.<br><br>You can login to your WordPress dashaboard to check more details.<br><br>Thanks,<br>miniOrange";
|
6 |
-
$template2 = "Hello ##username##,<br><br>Your account was logged in from new IP Address <b>##ipaddress##</b> on website <b>".get_bloginfo()."</b>. Please <a href='mailto:".MoWpnsConstants::SUPPORT_EMAIL."'>contact us</a> if you don't recognise this activity.<br><br>Thanks,<br>".get_bloginfo();
|
7 |
-
|
8 |
-
if(current_user_can( 'manage_options' ) && isset($_POST['option']) )
|
9 |
-
{
|
10 |
-
switch($_POST['option'])
|
11 |
-
{
|
12 |
-
case "mo_wpns_enable_ip_blocked_email_to_admin":
|
13 |
-
wpns_handle_notify_admin_on_ip_block($_POST); break;
|
14 |
-
case "mo_wpns_enable_unusual_activity_email_to_user":
|
15 |
-
wpns_handle_notify_unusual_activity($_POST); break;
|
16 |
-
case "custom_user_template":
|
17 |
-
wpns_handle_custom_template($_POST['custom_user_template']); break;
|
18 |
-
case "mo_wpns_get_manual_email" :
|
19 |
-
wpns_handle_admin_email($_POST); break;
|
20 |
-
case "custom_admin_template":
|
21 |
-
wpns_handle_custom_template(null,$_POST['custom_admin_template']); break;
|
22 |
-
}
|
23 |
-
}
|
24 |
-
if(!get_option("admin_email_address_status")|| get_option("admin_email_address") ==''){
|
25 |
-
update_option('mo_wpns_enable_ip_blocked_email_to_admin','0');
|
26 |
-
$notify_admin_on_ip_block =
|
27 |
-
}
|
28 |
-
$notify_admin_on_ip_block =
|
29 |
-
$notify_admin_unusual_activity = get_option('mo_wpns_enable_unusual_activity_email_to_user') ? "checked" : "";
|
30 |
-
|
31 |
-
$template1 = get_option('custom_admin_template') ? get_option('custom_admin_template') : $template1;
|
32 |
-
$template_type1 = 'custom_admin_template';
|
33 |
-
$ip_blocking_template = array(
|
34 |
-
'textarea_name' => 'custom_admin_template',
|
35 |
-
'wpautop' => false
|
36 |
-
);
|
37 |
-
$fromEmail = get_option('mo2f_email');
|
38 |
-
$template2 = get_option('custom_user_template') ? get_option('custom_user_template') : $template2;
|
39 |
-
$template_type2 = 'custom_user_template';
|
40 |
-
$user_activity_template = array(
|
41 |
-
'textarea_name' => 'custom_user_template',
|
42 |
-
'wpautop' => false
|
43 |
-
);
|
44 |
-
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'notification-settings.php';
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
/* ADMIN NOTIFICATION SETTINGS */
|
49 |
-
function wpns_handle_admin_email($postValue)
|
50 |
-
{
|
51 |
-
|
52 |
-
if(validate_email($_POST['admin_email_address'])){
|
53 |
-
$admin_email_address_status = isset($postValue['admin_email_address']) ? '1' :'0';
|
54 |
-
update_option('admin_email_address',$postValue['admin_email_address']);
|
55 |
-
update_option( 'admin_email_address_status', $admin_email_address_status);
|
56 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('EMAIL_SAVED'),'SUCCESS');
|
57 |
-
}else{
|
58 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('INVALID_EMAIL'),'ERROR');
|
59 |
-
}
|
60 |
-
}
|
61 |
-
function validate_email($str) {
|
62 |
-
return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
|
63 |
-
}
|
64 |
-
|
65 |
-
//Function to handle enabling and disabling of admin notification on ip blocking
|
66 |
-
function wpns_handle_notify_admin_on_ip_block($postValue)
|
67 |
-
{
|
68 |
-
$enable_ip_blocked_email_to_admin = isset($postValue['enable_ip_blocked_email_to_admin']) ? true : false;
|
69 |
-
update_option( 'mo_wpns_enable_ip_blocked_email_to_admin', $enable_ip_blocked_email_to_admin);
|
70 |
-
|
71 |
-
if($enable_ip_blocked_email_to_admin)
|
72 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('NOTIFY_ON_IP_BLOCKED'),'SUCCESS');
|
73 |
-
else
|
74 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('DONOT_NOTIFY_ON_IP_BLOCKED'),'ERROR');
|
75 |
-
}
|
76 |
-
|
77 |
-
|
78 |
-
//Function to handle enabling and disabling of admin notification on unusual activity
|
79 |
-
function wpns_handle_notify_unusual_activity($postValue)
|
80 |
-
{
|
81 |
-
$enable_unusual_activity_email_to_user = isset($postValue['enable_unusual_activity_email_to_user']) ? true : false;
|
82 |
-
update_option( 'mo_wpns_enable_unusual_activity_email_to_user', $enable_unusual_activity_email_to_user);
|
83 |
-
|
84 |
-
if($enable_unusual_activity_email_to_user)
|
85 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('NOTIFY_ON_UNUSUAL_ACTIVITY'),'SUCCESS');
|
86 |
-
else
|
87 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('DONOT_NOTIFY_ON_UNUSUAL_ACTIVITY'),'ERROR');
|
88 |
-
}
|
89 |
-
|
90 |
-
|
91 |
-
//Function to save unusual activity email template
|
92 |
-
function wpns_handle_custom_template($template1,$template2=null)
|
93 |
-
{
|
94 |
-
if(!is_null($template1))
|
95 |
-
update_option('custom_user_template', stripslashes($template1));
|
96 |
-
|
97 |
-
if(!is_null($template2))
|
98 |
-
update_option('custom_admin_template', stripslashes($template2));
|
99 |
-
|
100 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('TEMPLATE_SAVED'),'SUCCESS');
|
101 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility,$mo2f_dirName;
|
4 |
+
|
5 |
+
$template1 = "Hello,<br><br>The user with IP Address <b>##ipaddress##</b> has exceeded allowed trasaction limit on your website <b>".get_bloginfo()."</b> and we have blocked his IP address for further access to website.<br><br>You can login to your WordPress dashaboard to check more details.<br><br>Thanks,<br>miniOrange";
|
6 |
+
$template2 = "Hello ##username##,<br><br>Your account was logged in from new IP Address <b>##ipaddress##</b> on website <b>".get_bloginfo()."</b>. Please <a href='mailto:".MoWpnsConstants::SUPPORT_EMAIL."'>contact us</a> if you don't recognise this activity.<br><br>Thanks,<br>".get_bloginfo();
|
7 |
+
|
8 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']) )
|
9 |
+
{
|
10 |
+
switch($_POST['option'])
|
11 |
+
{
|
12 |
+
case "mo_wpns_enable_ip_blocked_email_to_admin":
|
13 |
+
wpns_handle_notify_admin_on_ip_block($_POST); break;
|
14 |
+
case "mo_wpns_enable_unusual_activity_email_to_user":
|
15 |
+
wpns_handle_notify_unusual_activity($_POST); break;
|
16 |
+
case "custom_user_template":
|
17 |
+
wpns_handle_custom_template($_POST['custom_user_template']); break;
|
18 |
+
case "mo_wpns_get_manual_email" :
|
19 |
+
wpns_handle_admin_email($_POST); break;
|
20 |
+
case "custom_admin_template":
|
21 |
+
wpns_handle_custom_template(null,$_POST['custom_admin_template']); break;
|
22 |
+
}
|
23 |
+
}
|
24 |
+
if(!get_option("admin_email_address_status")|| get_option("admin_email_address") ==''){
|
25 |
+
update_option('mo_wpns_enable_ip_blocked_email_to_admin','0');
|
26 |
+
$notify_admin_on_ip_block = MoWpnsUtility::get_mo2f_db_option('mo_wpns_enable_ip_blocked_email_to_admin', 'get_option') ? "" : "unchacked";
|
27 |
+
}
|
28 |
+
$notify_admin_on_ip_block = MoWpnsUtility::get_mo2f_db_option('mo_wpns_enable_ip_blocked_email_to_admin', 'get_option') ? "checked" : "";
|
29 |
+
$notify_admin_unusual_activity = get_option('mo_wpns_enable_unusual_activity_email_to_user') ? "checked" : "";
|
30 |
+
|
31 |
+
$template1 = get_option('custom_admin_template') ? get_option('custom_admin_template') : $template1;
|
32 |
+
$template_type1 = 'custom_admin_template';
|
33 |
+
$ip_blocking_template = array(
|
34 |
+
'textarea_name' => 'custom_admin_template',
|
35 |
+
'wpautop' => false
|
36 |
+
);
|
37 |
+
$fromEmail = get_option('mo2f_email');
|
38 |
+
$template2 = get_option('custom_user_template') ? get_option('custom_user_template') : $template2;
|
39 |
+
$template_type2 = 'custom_user_template';
|
40 |
+
$user_activity_template = array(
|
41 |
+
'textarea_name' => 'custom_user_template',
|
42 |
+
'wpautop' => false
|
43 |
+
);
|
44 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'notification-settings.php';
|
45 |
+
|
46 |
+
|
47 |
+
|
48 |
+
/* ADMIN NOTIFICATION SETTINGS */
|
49 |
+
function wpns_handle_admin_email($postValue)
|
50 |
+
{
|
51 |
+
|
52 |
+
if(validate_email($_POST['admin_email_address'])){
|
53 |
+
$admin_email_address_status = isset($postValue['admin_email_address']) ? '1' :'0';
|
54 |
+
update_option('admin_email_address',$postValue['admin_email_address']);
|
55 |
+
update_option( 'admin_email_address_status', $admin_email_address_status);
|
56 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('EMAIL_SAVED'),'SUCCESS');
|
57 |
+
}else{
|
58 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('INVALID_EMAIL'),'ERROR');
|
59 |
+
}
|
60 |
+
}
|
61 |
+
function validate_email($str) {
|
62 |
+
return (!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
|
63 |
+
}
|
64 |
+
|
65 |
+
//Function to handle enabling and disabling of admin notification on ip blocking
|
66 |
+
function wpns_handle_notify_admin_on_ip_block($postValue)
|
67 |
+
{
|
68 |
+
$enable_ip_blocked_email_to_admin = isset($postValue['enable_ip_blocked_email_to_admin']) ? true : false;
|
69 |
+
update_option( 'mo_wpns_enable_ip_blocked_email_to_admin', $enable_ip_blocked_email_to_admin);
|
70 |
+
|
71 |
+
if($enable_ip_blocked_email_to_admin)
|
72 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('NOTIFY_ON_IP_BLOCKED'),'SUCCESS');
|
73 |
+
else
|
74 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('DONOT_NOTIFY_ON_IP_BLOCKED'),'ERROR');
|
75 |
+
}
|
76 |
+
|
77 |
+
|
78 |
+
//Function to handle enabling and disabling of admin notification on unusual activity
|
79 |
+
function wpns_handle_notify_unusual_activity($postValue)
|
80 |
+
{
|
81 |
+
$enable_unusual_activity_email_to_user = isset($postValue['enable_unusual_activity_email_to_user']) ? true : false;
|
82 |
+
update_option( 'mo_wpns_enable_unusual_activity_email_to_user', $enable_unusual_activity_email_to_user);
|
83 |
+
|
84 |
+
if($enable_unusual_activity_email_to_user)
|
85 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('NOTIFY_ON_UNUSUAL_ACTIVITY'),'SUCCESS');
|
86 |
+
else
|
87 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('DONOT_NOTIFY_ON_UNUSUAL_ACTIVITY'),'ERROR');
|
88 |
+
}
|
89 |
+
|
90 |
+
|
91 |
+
//Function to save unusual activity email template
|
92 |
+
function wpns_handle_custom_template($template1,$template2=null)
|
93 |
+
{
|
94 |
+
if(!is_null($template1))
|
95 |
+
update_option('custom_user_template', stripslashes($template1));
|
96 |
+
|
97 |
+
if(!is_null($template2))
|
98 |
+
update_option('custom_admin_template', stripslashes($template2));
|
99 |
+
|
100 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('TEMPLATE_SAVED'),'SUCCESS');
|
101 |
}
|
controllers/pointers.php
CHANGED
@@ -5,7 +5,8 @@ $tab= 'default';
|
|
5 |
if(array_key_exists('tab',$_GET))
|
6 |
$tab = $_GET['tab'];
|
7 |
|
8 |
-
if(
|
|
|
9 |
{
|
10 |
$pointers['default-miniorange-2fa-select-authentication'] = array(
|
11 |
'title' => sprintf( '<h3>%s</h3>', esc_html__( 'Select Authentication Method (Step 1 out of 9)' ) ),
|
5 |
if(array_key_exists('tab',$_GET))
|
6 |
$tab = $_GET['tab'];
|
7 |
|
8 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo2f_two_factor_tour', 'get_option') ==1)
|
9 |
+
|
10 |
{
|
11 |
$pointers['default-miniorange-2fa-select-authentication'] = array(
|
12 |
'title' => sprintf( '<h3>%s</h3>', esc_html__( 'Select Authentication Method (Step 1 out of 9)' ) ),
|
controllers/registration-security.php
CHANGED
@@ -1,129 +1,129 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $moWpnsUtility, $mo2f_dirName;
|
4 |
-
|
5 |
-
|
6 |
-
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
7 |
-
{
|
8 |
-
switch($_POST['option'])
|
9 |
-
{
|
10 |
-
case "mo_wpns_enable_fake_domain_blocking":
|
11 |
-
wpns_handle_domain_blocking($_POST); break;
|
12 |
-
case "mo_wpns_advanced_user_verification":
|
13 |
-
wpns_handle_advanced_user_verification($_POST); break;
|
14 |
-
case "mo_wpns_social_integration":
|
15 |
-
wpns_handle_enable_social_login($_POST); break;
|
16 |
-
|
17 |
-
}
|
18 |
-
}
|
19 |
-
|
20 |
-
$otpVerify_url = add_query_arg( array('page' => 'mosettings', 'tab'=>'settings'), $_SERVER['REQUEST_URI'] );
|
21 |
-
$openid_url = add_query_arg( array('page' => 'mo_openid_settings' ), $_SERVER['REQUEST_URI'] );
|
22 |
-
$domain_blocking= get_option('mo_wpns_enable_fake_domain_blocking') ? "checked" : "";
|
23 |
-
$user_verify = get_option('mo_wpns_enable_advanced_user_verification') ? "checked" : "";
|
24 |
-
$social_login = get_option('mo_wpns_enable_social_integration') ? "checked" : "";
|
25 |
-
|
26 |
-
if($user_verify)
|
27 |
-
{
|
28 |
-
$moOTPPlugin = new OTPPlugin();
|
29 |
-
$status = $moOTPPlugin->getstatus();
|
30 |
-
switch ($status)
|
31 |
-
{
|
32 |
-
case "ACTIVE":
|
33 |
-
$html1 = "<br><a href='".$otpVerify_url."'>Click here to configure.</a>";
|
34 |
-
$moOTPPlugin->updatePluginConfiguration();
|
35 |
-
break;
|
36 |
-
case "INSTALLED":
|
37 |
-
$path = "miniorange-otp-verification/miniorange_validation_settings.php";
|
38 |
-
$activateUrl = wp_nonce_url(admin_url('plugins.php?action=activate&plugin='.$path), 'activate-plugin_'.$path);
|
39 |
-
$html1 = '<br><span style="color:red">For Advanced User Verification you need to have miniOrange OTP Verification plugin activated.</span><br><a href="'.$activateUrl.'">Click here to activate OTP Verification Plugin</a>';
|
40 |
-
break;
|
41 |
-
default:
|
42 |
-
$action = 'install-plugin';
|
43 |
-
$slug = 'miniorange-otp-verification';
|
44 |
-
$install_link = wp_nonce_url(
|
45 |
-
add_query_arg( array( 'action' => $action, 'plugin' => $slug ), admin_url( 'update.php' ) ),
|
46 |
-
$action.'_'.$slug
|
47 |
-
);
|
48 |
-
$html1 = '<br><span style="color:red">For Advanced User Verification you need to have miniOrange OTP Verification plugin installed.</span><br><a href="'.$install_link.'">Install OTP Verification plugin</a>';
|
49 |
-
break;
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
|
54 |
-
if($social_login)
|
55 |
-
{
|
56 |
-
$moSocialLogin = new SocialPlugin();
|
57 |
-
$status = $moSocialLogin->getstatus();
|
58 |
-
switch ($status)
|
59 |
-
{
|
60 |
-
case "ACTIVE":
|
61 |
-
$html2 = "<br><a href='".$openid_url."'>Click here to configure.</a>";
|
62 |
-
break;
|
63 |
-
case "INSTALLED":
|
64 |
-
$path = "miniorange-login-openid/miniorange_openid_sso_settings.php";
|
65 |
-
$activateUrl = wp_nonce_url(admin_url('plugins.php?action=activate&plugin='.$path), 'activate-plugin_'.$path);
|
66 |
-
$html2 = '<br><span style="color:red">For Social Login Integration you need to have miniOrange Social Login, Sharing plugin activated.</span><br><a href="'.$activateUrl.'">Click here to activate Social Login, Sharing Plugin</a>';
|
67 |
-
break;
|
68 |
-
default:
|
69 |
-
$action = 'install-plugin';
|
70 |
-
$slug = 'miniorange-login-openid';
|
71 |
-
$install_link = wp_nonce_url(
|
72 |
-
add_query_arg( array( 'action' => $action, 'plugin' => $slug ), admin_url( 'update.php' ) ),
|
73 |
-
$action.'_'.$slug
|
74 |
-
);
|
75 |
-
$html2 = '<br><span style="color:red">For Social Login Integration you need to have miniOrange Social Login, Sharing plugin installed.</span><br><a href="'.$install_link.'">Install Social Login, Sharing plugin</a>';
|
76 |
-
break;
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'registration-security.php';
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
/* REGISTRATION SECURITY RELATED FUNCTIONS*/
|
86 |
-
|
87 |
-
//Function to handle enabling and disabling domain blocking
|
88 |
-
function wpns_handle_domain_blocking($postvalue)
|
89 |
-
{
|
90 |
-
$enable_fake_emails = isset($postvalue['mo_wpns_enable_fake_domain_blocking']) ? true : false;
|
91 |
-
update_option( 'mo_wpns_enable_fake_domain_blocking', $enable_fake_emails);
|
92 |
-
|
93 |
-
if($enable_fake_emails)
|
94 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('DOMAIN_BLOCKING_ENABLED'),'SUCCESS');
|
95 |
-
else
|
96 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('DOMAIN_BLOCKING_DISABLED'),'ERROR');
|
97 |
-
}
|
98 |
-
|
99 |
-
|
100 |
-
//Function to enable and disable User Verification for the Default Registration Page
|
101 |
-
function wpns_handle_advanced_user_verification($postvalue)
|
102 |
-
{
|
103 |
-
$enable_advanced_user_verification = isset($postvalue['mo_wpns_enable_advanced_user_verification']) ? true : false;
|
104 |
-
update_option( 'mo_wpns_enable_advanced_user_verification', $enable_advanced_user_verification);
|
105 |
-
|
106 |
-
if($enable_advanced_user_verification)
|
107 |
-
{
|
108 |
-
update_option('mo_customer_validation_wp_default_enable',1);
|
109 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('ENABLE_ADVANCED_USER_VERIFY'),'SUCCESS');
|
110 |
-
}
|
111 |
-
else
|
112 |
-
{
|
113 |
-
update_option('mo_customer_validation_wp_default_enable',0);
|
114 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('DISABLE_ADVANCED_USER_VERIFY'),'ERROR');
|
115 |
-
}
|
116 |
-
}
|
117 |
-
|
118 |
-
|
119 |
-
//Function to enable and disable Social Login
|
120 |
-
function wpns_handle_enable_social_login($postvalue)
|
121 |
-
{
|
122 |
-
$social_login = isset($postvalue['mo_wpns_enable_social_integration']) ? true : false;
|
123 |
-
update_option( 'mo_wpns_enable_social_integration', $social_login);
|
124 |
-
|
125 |
-
if($social_login)
|
126 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('ENABLE_SOCIAL_LOGIN'),'SUCCESS');
|
127 |
-
else
|
128 |
-
do_action('wpns_show_message',MoWpnsMessages::showMessage('DISABLE_SOCIAL_LOGIN'),'ERROR');
|
129 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $moWpnsUtility, $mo2f_dirName;
|
4 |
+
|
5 |
+
|
6 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
7 |
+
{
|
8 |
+
switch($_POST['option'])
|
9 |
+
{
|
10 |
+
case "mo_wpns_enable_fake_domain_blocking":
|
11 |
+
wpns_handle_domain_blocking($_POST); break;
|
12 |
+
case "mo_wpns_advanced_user_verification":
|
13 |
+
wpns_handle_advanced_user_verification($_POST); break;
|
14 |
+
case "mo_wpns_social_integration":
|
15 |
+
wpns_handle_enable_social_login($_POST); break;
|
16 |
+
|
17 |
+
}
|
18 |
+
}
|
19 |
+
|
20 |
+
$otpVerify_url = add_query_arg( array('page' => 'mosettings', 'tab'=>'settings'), $_SERVER['REQUEST_URI'] );
|
21 |
+
$openid_url = add_query_arg( array('page' => 'mo_openid_settings' ), $_SERVER['REQUEST_URI'] );
|
22 |
+
$domain_blocking= get_option('mo_wpns_enable_fake_domain_blocking') ? "checked" : "";
|
23 |
+
$user_verify = get_option('mo_wpns_enable_advanced_user_verification') ? "checked" : "";
|
24 |
+
$social_login = get_option('mo_wpns_enable_social_integration') ? "checked" : "";
|
25 |
+
|
26 |
+
if($user_verify)
|
27 |
+
{
|
28 |
+
$moOTPPlugin = new OTPPlugin();
|
29 |
+
$status = $moOTPPlugin->getstatus();
|
30 |
+
switch ($status)
|
31 |
+
{
|
32 |
+
case "ACTIVE":
|
33 |
+
$html1 = "<br><a href='".$otpVerify_url."'>Click here to configure.</a>";
|
34 |
+
$moOTPPlugin->updatePluginConfiguration();
|
35 |
+
break;
|
36 |
+
case "INSTALLED":
|
37 |
+
$path = "miniorange-otp-verification/miniorange_validation_settings.php";
|
38 |
+
$activateUrl = wp_nonce_url(admin_url('plugins.php?action=activate&plugin='.$path), 'activate-plugin_'.$path);
|
39 |
+
$html1 = '<br><span style="color:red">For Advanced User Verification you need to have miniOrange OTP Verification plugin activated.</span><br><a href="'.$activateUrl.'">Click here to activate OTP Verification Plugin</a>';
|
40 |
+
break;
|
41 |
+
default:
|
42 |
+
$action = 'install-plugin';
|
43 |
+
$slug = 'miniorange-otp-verification';
|
44 |
+
$install_link = wp_nonce_url(
|
45 |
+
add_query_arg( array( 'action' => $action, 'plugin' => $slug ), admin_url( 'update.php' ) ),
|
46 |
+
$action.'_'.$slug
|
47 |
+
);
|
48 |
+
$html1 = '<br><span style="color:red">For Advanced User Verification you need to have miniOrange OTP Verification plugin installed.</span><br><a href="'.$install_link.'">Install OTP Verification plugin</a>';
|
49 |
+
break;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
|
54 |
+
if($social_login)
|
55 |
+
{
|
56 |
+
$moSocialLogin = new SocialPlugin();
|
57 |
+
$status = $moSocialLogin->getstatus();
|
58 |
+
switch ($status)
|
59 |
+
{
|
60 |
+
case "ACTIVE":
|
61 |
+
$html2 = "<br><a href='".$openid_url."'>Click here to configure.</a>";
|
62 |
+
break;
|
63 |
+
case "INSTALLED":
|
64 |
+
$path = "miniorange-login-openid/miniorange_openid_sso_settings.php";
|
65 |
+
$activateUrl = wp_nonce_url(admin_url('plugins.php?action=activate&plugin='.$path), 'activate-plugin_'.$path);
|
66 |
+
$html2 = '<br><span style="color:red">For Social Login Integration you need to have miniOrange Social Login, Sharing plugin activated.</span><br><a href="'.$activateUrl.'">Click here to activate Social Login, Sharing Plugin</a>';
|
67 |
+
break;
|
68 |
+
default:
|
69 |
+
$action = 'install-plugin';
|
70 |
+
$slug = 'miniorange-login-openid';
|
71 |
+
$install_link = wp_nonce_url(
|
72 |
+
add_query_arg( array( 'action' => $action, 'plugin' => $slug ), admin_url( 'update.php' ) ),
|
73 |
+
$action.'_'.$slug
|
74 |
+
);
|
75 |
+
$html2 = '<br><span style="color:red">For Social Login Integration you need to have miniOrange Social Login, Sharing plugin installed.</span><br><a href="'.$install_link.'">Install Social Login, Sharing plugin</a>';
|
76 |
+
break;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'registration-security.php';
|
81 |
+
|
82 |
+
|
83 |
+
|
84 |
+
|
85 |
+
/* REGISTRATION SECURITY RELATED FUNCTIONS*/
|
86 |
+
|
87 |
+
//Function to handle enabling and disabling domain blocking
|
88 |
+
function wpns_handle_domain_blocking($postvalue)
|
89 |
+
{
|
90 |
+
$enable_fake_emails = isset($postvalue['mo_wpns_enable_fake_domain_blocking']) ? true : false;
|
91 |
+
update_option( 'mo_wpns_enable_fake_domain_blocking', $enable_fake_emails);
|
92 |
+
|
93 |
+
if($enable_fake_emails)
|
94 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('DOMAIN_BLOCKING_ENABLED'),'SUCCESS');
|
95 |
+
else
|
96 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('DOMAIN_BLOCKING_DISABLED'),'ERROR');
|
97 |
+
}
|
98 |
+
|
99 |
+
|
100 |
+
//Function to enable and disable User Verification for the Default Registration Page
|
101 |
+
function wpns_handle_advanced_user_verification($postvalue)
|
102 |
+
{
|
103 |
+
$enable_advanced_user_verification = isset($postvalue['mo_wpns_enable_advanced_user_verification']) ? true : false;
|
104 |
+
update_option( 'mo_wpns_enable_advanced_user_verification', $enable_advanced_user_verification);
|
105 |
+
|
106 |
+
if($enable_advanced_user_verification)
|
107 |
+
{
|
108 |
+
update_option('mo_customer_validation_wp_default_enable',1);
|
109 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('ENABLE_ADVANCED_USER_VERIFY'),'SUCCESS');
|
110 |
+
}
|
111 |
+
else
|
112 |
+
{
|
113 |
+
update_option('mo_customer_validation_wp_default_enable',0);
|
114 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('DISABLE_ADVANCED_USER_VERIFY'),'ERROR');
|
115 |
+
}
|
116 |
+
}
|
117 |
+
|
118 |
+
|
119 |
+
//Function to enable and disable Social Login
|
120 |
+
function wpns_handle_enable_social_login($postvalue)
|
121 |
+
{
|
122 |
+
$social_login = isset($postvalue['mo_wpns_enable_social_integration']) ? true : false;
|
123 |
+
update_option( 'mo_wpns_enable_social_integration', $social_login);
|
124 |
+
|
125 |
+
if($social_login)
|
126 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('ENABLE_SOCIAL_LOGIN'),'SUCCESS');
|
127 |
+
else
|
128 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('DISABLE_SOCIAL_LOGIN'),'ERROR');
|
129 |
}
|
controllers/tour-model.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
$email = get_option("mo2f_email");
|
6 |
$phone = get_option("mo_wpns_admin_phone");
|
7 |
$display = get_option('mo2f_tour_started') == 2?'block':'none';
|
8 |
-
$networkSEnable =
|
9 |
if(empty($email))
|
10 |
$email = $current_user->user_email;
|
11 |
$counter = 0;
|
5 |
$email = get_option("mo2f_email");
|
6 |
$phone = get_option("mo_wpns_admin_phone");
|
7 |
$display = get_option('mo2f_tour_started') == 2?'block':'none';
|
8 |
+
$networkSEnable = MoWpnsUtility::get_mo2f_db_option('mo_wpns_2fa_with_network_security', 'get_option');
|
9 |
if(empty($email))
|
10 |
$email = $current_user->user_email;
|
11 |
$counter = 0;
|
controllers/tour/tour_ajax.php
CHANGED
@@ -11,7 +11,7 @@ class Mo_wpns_Tour
|
|
11 |
{
|
12 |
switch ($_REQUEST['page']) {
|
13 |
case 'mo_2fa_two_fa':
|
14 |
-
if(!
|
15 |
update_option('mo2f_two_factor_tour',1);
|
16 |
|
17 |
break;
|
11 |
{
|
12 |
switch ($_REQUEST['page']) {
|
13 |
case 'mo_2fa_two_fa':
|
14 |
+
if(!MoWpnsUtility::get_mo2f_db_option('mo2f_two_factor_tour', 'get_option'))
|
15 |
update_option('mo2f_two_factor_tour',1);
|
16 |
|
17 |
break;
|
controllers/two-fa-intro.php
CHANGED
@@ -1,222 +1,222 @@
|
|
1 |
-
|
2 |
-
<div id="mo2f_2fa_intro" class = "modal" style="display: block;">
|
3 |
-
<div id="mo2f_2fa_intro_modal" class="modal-content" style="width: 40%;overflow: hidden;padding:50px;" >
|
4 |
-
|
5 |
-
<div class="modal-header" style="border-bottom: none;">
|
6 |
-
<h2 class="modal-title" style="text-align: center; font-size: 20px; color: #2980b9">
|
7 |
-
<span id="closeintromodal" class="close modal-span-close" onclick="skipintro();">X</span>
|
8 |
-
</h2>
|
9 |
-
</div>
|
10 |
-
|
11 |
-
<div class="modal-body" style="height: auto;">
|
12 |
-
<center>
|
13 |
-
<div class="checkmark-circle" >
|
14 |
-
<div class="background"></div>
|
15 |
-
<div class="checkmark draw"></div>
|
16 |
-
</div>
|
17 |
-
<h1>Awesome!!</h1>
|
18 |
-
<h2 style="color: black;font-size: 20px;">You are ready to use Two Factor.</h2>
|
19 |
-
</center>
|
20 |
-
<div >
|
21 |
-
<h3 style="color: black;display:none;" ><span style="color:red;">Logout</span> : You can logout and get the same experience as your users. </h3>
|
22 |
-
|
23 |
-
</div>
|
24 |
-
</div>
|
25 |
-
|
26 |
-
<div class="modal-footer" style="border: 0px;">
|
27 |
-
<button type="button" class="mo_wpns_button mo_wpns_button1 modal-button readytogo mo2f_advance_setting" onclick="skipintro();">Advance Settings</button>
|
28 |
-
<button type="button" class="mo_wpns_button mo_wpns_button1 modal-button " style="margin-left: 5%;width: 40%;background-color:#2EB150;float: left;min-height: 54px;border: 2px solid black;" title="Logout and check the user experience" onclick="mo2f_userlogout()">Logout and Configure</button>
|
29 |
-
<div class="mo2f_tooltip_addon logout mo_wpns_button mo_wpns_button1 modal-button " style="float: left;border: 2px solid black;border-left:none;width: 6%;box-shadow: none;text-decoration:none;background-color: #2EB150;margin-left: -5px;min-height: 50px;">
|
30 |
-
<span class="dashicons dashicons-info mo2f_info_tab" style="color: white;font-size: 27px;margin-top: 14px;margin-left: -12px;"></span>
|
31 |
-
<span class="mo2f_tooltiptext_addon mo2f_logout_and_configure_info" style="font-size: 20px;font-family: auto; text-align: justify;font-weight: lighter;background-color: #2EB150; font-size: 20px;">
|
32 |
-
<ul style="list-style-type:square;margin: 10px 18px 10px 18px;"><li>This will logout you and will ask you to set your 2FA on next login.</li><li> New and existing users can set their 2FA on next login.</li></ul>
|
33 |
-
</span>
|
34 |
-
<span class="mo2f_tooltiptext_addon" style="color: #2EB150;background: none; margin-left: -200px; margin-top: -38px;">
|
35 |
-
<span class="dashicons dashicons-arrow-down" style="font-size: 300%;"></span>
|
36 |
-
</span>
|
37 |
-
</div>
|
38 |
-
|
39 |
-
</div>
|
40 |
-
</div>
|
41 |
-
</div>
|
42 |
-
<form name="f" id="mo2f_skiploginform" method="post" action="">
|
43 |
-
<input type="hidden" name="mo2f_skiplogin_nonce" value="<?php echo wp_create_nonce( 'miniorange-2-factor-skiplogin-failed-nonce' ); ?>"/>
|
44 |
-
<input type="hidden" name="option" value="mo2f_skiplogin"/>
|
45 |
-
</form>
|
46 |
-
<form name="f" id="mo2f_userlogoutform" method="post" action="">
|
47 |
-
<input type="hidden" name="mo2f_userlogout_nonce" value="<?php echo wp_create_nonce( 'miniorange-2-factor-userlogout-failed-nonce' ); ?>"/>
|
48 |
-
<input type="hidden" name="option" value="mo2f_userlogout"/>
|
49 |
-
</form>
|
50 |
-
|
51 |
-
<script>
|
52 |
-
function mo2f_userlogout() {
|
53 |
-
jQuery("#mo2f_userlogoutform").submit();
|
54 |
-
}
|
55 |
-
|
56 |
-
function skipintro() {
|
57 |
-
jQuery("#mo2f_skiploginform").submit();
|
58 |
-
}
|
59 |
-
</script>
|
60 |
-
|
61 |
-
<style>
|
62 |
-
|
63 |
-
.modalhover:hover{
|
64 |
-
border:2px solid #2EB150;
|
65 |
-
background: #2EB150 !important;
|
66 |
-
color:white !important;
|
67 |
-
}
|
68 |
-
.checkmark-circle {
|
69 |
-
width: 150px;
|
70 |
-
height: 150px;
|
71 |
-
position: relative;
|
72 |
-
display: inline-block;
|
73 |
-
vertical-align: top;
|
74 |
-
}
|
75 |
-
.checkmark-circle .background {
|
76 |
-
width: 150px;
|
77 |
-
height: 150px;
|
78 |
-
border-radius: 50%;
|
79 |
-
background: #2EB150;
|
80 |
-
position: absolute;
|
81 |
-
}
|
82 |
-
.checkmark-circle .checkmark {
|
83 |
-
border-radius: 5px;
|
84 |
-
}
|
85 |
-
.checkmark-circle .checkmark.draw:after {
|
86 |
-
-webkit-animation-delay: 100ms;
|
87 |
-
-moz-animation-delay: 100ms;
|
88 |
-
animation-delay: 100ms;
|
89 |
-
-webkit-animation-duration: 1s;
|
90 |
-
-moz-animation-duration: 1s;
|
91 |
-
animation-duration: 1s;
|
92 |
-
-webkit-animation-timing-function: ease;
|
93 |
-
-moz-animation-timing-function: ease;
|
94 |
-
animation-timing-function: ease;
|
95 |
-
-webkit-animation-name: checkmark;
|
96 |
-
-moz-animation-name: checkmark;
|
97 |
-
animation-name: checkmark;
|
98 |
-
-webkit-transform: scaleX(-1) rotate(130deg);
|
99 |
-
-moz-transform: scaleX(-1) rotate(130deg);
|
100 |
-
-ms-transform: scaleX(-1) rotate(130deg);
|
101 |
-
-o-transform: scaleX(-1) rotate(130deg);
|
102 |
-
transform: scaleX(-1) rotate(130deg);
|
103 |
-
-webkit-animation-fill-mode: forwards;
|
104 |
-
-moz-animation-fill-mode: forwards;
|
105 |
-
animation-fill-mode: forwards;
|
106 |
-
}
|
107 |
-
.checkmark-circle .checkmark:after {
|
108 |
-
opacity: 1;
|
109 |
-
height: 75px;
|
110 |
-
width: 37.5px;
|
111 |
-
-webkit-transform-origin: left top;
|
112 |
-
-moz-transform-origin: left top;
|
113 |
-
-ms-transform-origin: left top;
|
114 |
-
-o-transform-origin: left top;
|
115 |
-
transform-origin: left top;
|
116 |
-
border-right: 15px solid white;
|
117 |
-
border-top: 15px solid white;
|
118 |
-
border-radius: 2.5px !important;
|
119 |
-
content: '';
|
120 |
-
left: 25px;
|
121 |
-
top: 75px;
|
122 |
-
position: absolute;
|
123 |
-
}
|
124 |
-
|
125 |
-
@-webkit-keyframes checkmark {
|
126 |
-
0% {
|
127 |
-
height: 0;
|
128 |
-
width: 0;
|
129 |
-
opacity: 1;
|
130 |
-
}
|
131 |
-
20% {
|
132 |
-
height: 0;
|
133 |
-
width: 37.5px;
|
134 |
-
opacity: 1;
|
135 |
-
}
|
136 |
-
40% {
|
137 |
-
height: 75px;
|
138 |
-
width: 37.5px;
|
139 |
-
opacity: 1;
|
140 |
-
}
|
141 |
-
100% {
|
142 |
-
height: 75px;
|
143 |
-
width: 37.5px;
|
144 |
-
opacity: 1;
|
145 |
-
}
|
146 |
-
}
|
147 |
-
@-moz-keyframes checkmark {
|
148 |
-
0% {
|
149 |
-
height: 0;
|
150 |
-
width: 0;
|
151 |
-
opacity: 1;
|
152 |
-
}
|
153 |
-
20% {
|
154 |
-
height: 0;
|
155 |
-
width: 37.5px;
|
156 |
-
opacity: 1;
|
157 |
-
}
|
158 |
-
40% {
|
159 |
-
height: 75px;
|
160 |
-
width: 37.5px;
|
161 |
-
opacity: 1;
|
162 |
-
}
|
163 |
-
100% {
|
164 |
-
height: 75px;
|
165 |
-
width: 37.5px;
|
166 |
-
opacity: 1;
|
167 |
-
}
|
168 |
-
}
|
169 |
-
@keyframes checkmark {
|
170 |
-
0% {
|
171 |
-
height: 0;
|
172 |
-
width: 0;
|
173 |
-
opacity: 1;
|
174 |
-
}
|
175 |
-
20% {
|
176 |
-
height: 0;
|
177 |
-
width: 37.5px;
|
178 |
-
opacity: 1;
|
179 |
-
}
|
180 |
-
40% {
|
181 |
-
height: 75px;
|
182 |
-
width: 37.5px;
|
183 |
-
opacity: 1;
|
184 |
-
}
|
185 |
-
100% {
|
186 |
-
height: 75px;
|
187 |
-
width: 37.5px;
|
188 |
-
opacity: 1;
|
189 |
-
}
|
190 |
-
}
|
191 |
-
body{
|
192 |
-
background-color: #e6e6e6;
|
193 |
-
width: 100%;
|
194 |
-
height: 100%;
|
195 |
-
}
|
196 |
-
#success_tic .page-body{
|
197 |
-
max-width:300px;
|
198 |
-
background-color:#FFFFFF;
|
199 |
-
margin:10% auto;
|
200 |
-
}
|
201 |
-
#success_tic .page-body .head{
|
202 |
-
text-align:center;
|
203 |
-
}
|
204 |
-
/* #success_tic .tic{
|
205 |
-
font-size:186px;
|
206 |
-
} */
|
207 |
-
.close{
|
208 |
-
opacity: 1;
|
209 |
-
position: absolute;
|
210 |
-
right: 0px;
|
211 |
-
font-size: 30px;
|
212 |
-
padding: 3px 15px;
|
213 |
-
margin-bottom: 10px;
|
214 |
-
float: right;
|
215 |
-
font-size: 21px;
|
216 |
-
font-weight: 700;
|
217 |
-
line-height: 1;
|
218 |
-
color: #000;
|
219 |
-
text-shadow: 0 1px 0 #fff;
|
220 |
-
}
|
221 |
-
|
222 |
-
</style>
|
1 |
+
|
2 |
+
<div id="mo2f_2fa_intro" class = "modal" style="display: block;">
|
3 |
+
<div id="mo2f_2fa_intro_modal" class="modal-content" style="width: 40%;overflow: hidden;padding:50px;" >
|
4 |
+
|
5 |
+
<div class="modal-header" style="border-bottom: none;">
|
6 |
+
<h2 class="modal-title" style="text-align: center; font-size: 20px; color: #2980b9">
|
7 |
+
<span id="closeintromodal" class="close modal-span-close" onclick="skipintro();">X</span>
|
8 |
+
</h2>
|
9 |
+
</div>
|
10 |
+
|
11 |
+
<div class="modal-body" style="height: auto;">
|
12 |
+
<center>
|
13 |
+
<div class="checkmark-circle" >
|
14 |
+
<div class="background"></div>
|
15 |
+
<div class="checkmark draw"></div>
|
16 |
+
</div>
|
17 |
+
<h1>Awesome!!</h1>
|
18 |
+
<h2 style="color: black;font-size: 20px;">You are ready to use Two Factor.</h2>
|
19 |
+
</center>
|
20 |
+
<div >
|
21 |
+
<h3 style="color: black;display:none;" ><span style="color:red;">Logout</span> : You can logout and get the same experience as your users. </h3>
|
22 |
+
|
23 |
+
</div>
|
24 |
+
</div>
|
25 |
+
|
26 |
+
<div class="modal-footer" style="border: 0px;">
|
27 |
+
<button type="button" class="mo_wpns_button mo_wpns_button1 modal-button readytogo mo2f_advance_setting" onclick="skipintro();">Advance Settings</button>
|
28 |
+
<button type="button" class="mo_wpns_button mo_wpns_button1 modal-button " style="margin-left: 5%;width: 40%;background-color:#2EB150;float: left;min-height: 54px;border: 2px solid black;" title="Logout and check the user experience" onclick="mo2f_userlogout()">Logout and Configure</button>
|
29 |
+
<div class="mo2f_tooltip_addon logout mo_wpns_button mo_wpns_button1 modal-button " style="float: left;border: 2px solid black;border-left:none;width: 6%;box-shadow: none;text-decoration:none;background-color: #2EB150;margin-left: -5px;min-height: 50px;">
|
30 |
+
<span class="dashicons dashicons-info mo2f_info_tab" style="color: white;font-size: 27px;margin-top: 14px;margin-left: -12px;"></span>
|
31 |
+
<span class="mo2f_tooltiptext_addon mo2f_logout_and_configure_info" style="font-size: 20px;font-family: auto; text-align: justify;font-weight: lighter;background-color: #2EB150; font-size: 20px;">
|
32 |
+
<ul style="list-style-type:square;margin: 10px 18px 10px 18px;"><li>This will logout you and will ask you to set your 2FA on next login.</li><li> New and existing users can set their 2FA on next login.</li></ul>
|
33 |
+
</span>
|
34 |
+
<span class="mo2f_tooltiptext_addon" style="color: #2EB150;background: none; margin-left: -200px; margin-top: -38px;">
|
35 |
+
<span class="dashicons dashicons-arrow-down" style="font-size: 300%;"></span>
|
36 |
+
</span>
|
37 |
+
</div>
|
38 |
+
|
39 |
+
</div>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
<form name="f" id="mo2f_skiploginform" method="post" action="">
|
43 |
+
<input type="hidden" name="mo2f_skiplogin_nonce" value="<?php echo wp_create_nonce( 'miniorange-2-factor-skiplogin-failed-nonce' ); ?>"/>
|
44 |
+
<input type="hidden" name="option" value="mo2f_skiplogin"/>
|
45 |
+
</form>
|
46 |
+
<form name="f" id="mo2f_userlogoutform" method="post" action="">
|
47 |
+
<input type="hidden" name="mo2f_userlogout_nonce" value="<?php echo wp_create_nonce( 'miniorange-2-factor-userlogout-failed-nonce' ); ?>"/>
|
48 |
+
<input type="hidden" name="option" value="mo2f_userlogout"/>
|
49 |
+
</form>
|
50 |
+
|
51 |
+
<script>
|
52 |
+
function mo2f_userlogout() {
|
53 |
+
jQuery("#mo2f_userlogoutform").submit();
|
54 |
+
}
|
55 |
+
|
56 |
+
function skipintro() {
|
57 |
+
jQuery("#mo2f_skiploginform").submit();
|
58 |
+
}
|
59 |
+
</script>
|
60 |
+
|
61 |
+
<style>
|
62 |
+
|
63 |
+
.modalhover:hover{
|
64 |
+
border:2px solid #2EB150;
|
65 |
+
background: #2EB150 !important;
|
66 |
+
color:white !important;
|
67 |
+
}
|
68 |
+
.checkmark-circle {
|
69 |
+
width: 150px;
|
70 |
+
height: 150px;
|
71 |
+
position: relative;
|
72 |
+
display: inline-block;
|
73 |
+
vertical-align: top;
|
74 |
+
}
|
75 |
+
.checkmark-circle .background {
|
76 |
+
width: 150px;
|
77 |
+
height: 150px;
|
78 |
+
border-radius: 50%;
|
79 |
+
background: #2EB150;
|
80 |
+
position: absolute;
|
81 |
+
}
|
82 |
+
.checkmark-circle .checkmark {
|
83 |
+
border-radius: 5px;
|
84 |
+
}
|
85 |
+
.checkmark-circle .checkmark.draw:after {
|
86 |
+
-webkit-animation-delay: 100ms;
|
87 |
+
-moz-animation-delay: 100ms;
|
88 |
+
animation-delay: 100ms;
|
89 |
+
-webkit-animation-duration: 1s;
|
90 |
+
-moz-animation-duration: 1s;
|
91 |
+
animation-duration: 1s;
|
92 |
+
-webkit-animation-timing-function: ease;
|
93 |
+
-moz-animation-timing-function: ease;
|
94 |
+
animation-timing-function: ease;
|
95 |
+
-webkit-animation-name: checkmark;
|
96 |
+
-moz-animation-name: checkmark;
|
97 |
+
animation-name: checkmark;
|
98 |
+
-webkit-transform: scaleX(-1) rotate(130deg);
|
99 |
+
-moz-transform: scaleX(-1) rotate(130deg);
|
100 |
+
-ms-transform: scaleX(-1) rotate(130deg);
|
101 |
+
-o-transform: scaleX(-1) rotate(130deg);
|
102 |
+
transform: scaleX(-1) rotate(130deg);
|
103 |
+
-webkit-animation-fill-mode: forwards;
|
104 |
+
-moz-animation-fill-mode: forwards;
|
105 |
+
animation-fill-mode: forwards;
|
106 |
+
}
|
107 |
+
.checkmark-circle .checkmark:after {
|
108 |
+
opacity: 1;
|
109 |
+
height: 75px;
|
110 |
+
width: 37.5px;
|
111 |
+
-webkit-transform-origin: left top;
|
112 |
+
-moz-transform-origin: left top;
|
113 |
+
-ms-transform-origin: left top;
|
114 |
+
-o-transform-origin: left top;
|
115 |
+
transform-origin: left top;
|
116 |
+
border-right: 15px solid white;
|
117 |
+
border-top: 15px solid white;
|
118 |
+
border-radius: 2.5px !important;
|
119 |
+
content: '';
|
120 |
+
left: 25px;
|
121 |
+
top: 75px;
|
122 |
+
position: absolute;
|
123 |
+
}
|
124 |
+
|
125 |
+
@-webkit-keyframes checkmark {
|
126 |
+
0% {
|
127 |
+
height: 0;
|
128 |
+
width: 0;
|
129 |
+
opacity: 1;
|
130 |
+
}
|
131 |
+
20% {
|
132 |
+
height: 0;
|
133 |
+
width: 37.5px;
|
134 |
+
opacity: 1;
|
135 |
+
}
|
136 |
+
40% {
|
137 |
+
height: 75px;
|
138 |
+
width: 37.5px;
|
139 |
+
opacity: 1;
|
140 |
+
}
|
141 |
+
100% {
|
142 |
+
height: 75px;
|
143 |
+
width: 37.5px;
|
144 |
+
opacity: 1;
|
145 |
+
}
|
146 |
+
}
|
147 |
+
@-moz-keyframes checkmark {
|
148 |
+
0% {
|
149 |
+
height: 0;
|
150 |
+
width: 0;
|
151 |
+
opacity: 1;
|
152 |
+
}
|
153 |
+
20% {
|
154 |
+
height: 0;
|
155 |
+
width: 37.5px;
|
156 |
+
opacity: 1;
|
157 |
+
}
|
158 |
+
40% {
|
159 |
+
height: 75px;
|
160 |
+
width: 37.5px;
|
161 |
+
opacity: 1;
|
162 |
+
}
|
163 |
+
100% {
|
164 |
+
height: 75px;
|
165 |
+
width: 37.5px;
|
166 |
+
opacity: 1;
|
167 |
+
}
|
168 |
+
}
|
169 |
+
@keyframes checkmark {
|
170 |
+
0% {
|
171 |
+
height: 0;
|
172 |
+
width: 0;
|
173 |
+
opacity: 1;
|
174 |
+
}
|
175 |
+
20% {
|
176 |
+
height: 0;
|
177 |
+
width: 37.5px;
|
178 |
+
opacity: 1;
|
179 |
+
}
|
180 |
+
40% {
|
181 |
+
height: 75px;
|
182 |
+
width: 37.5px;
|
183 |
+
opacity: 1;
|
184 |
+
}
|
185 |
+
100% {
|
186 |
+
height: 75px;
|
187 |
+
width: 37.5px;
|
188 |
+
opacity: 1;
|
189 |
+
}
|
190 |
+
}
|
191 |
+
body{
|
192 |
+
background-color: #e6e6e6;
|
193 |
+
width: 100%;
|
194 |
+
height: 100%;
|
195 |
+
}
|
196 |
+
#success_tic .page-body{
|
197 |
+
max-width:300px;
|
198 |
+
background-color:#FFFFFF;
|
199 |
+
margin:10% auto;
|
200 |
+
}
|
201 |
+
#success_tic .page-body .head{
|
202 |
+
text-align:center;
|
203 |
+
}
|
204 |
+
/* #success_tic .tic{
|
205 |
+
font-size:186px;
|
206 |
+
} */
|
207 |
+
.close{
|
208 |
+
opacity: 1;
|
209 |
+
position: absolute;
|
210 |
+
right: 0px;
|
211 |
+
font-size: 30px;
|
212 |
+
padding: 3px 15px;
|
213 |
+
margin-bottom: 10px;
|
214 |
+
float: right;
|
215 |
+
font-size: 21px;
|
216 |
+
font-weight: 700;
|
217 |
+
line-height: 1;
|
218 |
+
color: #000;
|
219 |
+
text-shadow: 0 1px 0 #fff;
|
220 |
+
}
|
221 |
+
|
222 |
+
</style>
|
controllers/twofa/mo2fa_common_login.php
CHANGED
@@ -51,13 +51,21 @@ function redirect_user_to( $user, $redirect_to ) {
|
|
51 |
$redirectUrl = isset( $redirect_to ) && ! empty( $redirect_to ) ? $redirect_to : null;
|
52 |
if ( $current_role == 'administrator' ) {
|
53 |
$redirectUrl = empty( $redirectUrl ) ? admin_url() : $redirectUrl;
|
54 |
-
wp_redirect( $redirectUrl );
|
55 |
} else {
|
56 |
$redirectUrl = empty( $redirectUrl ) ? home_url() : $redirectUrl;
|
57 |
-
wp_redirect( $redirectUrl );
|
58 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
}
|
60 |
|
|
|
61 |
// used in shortcode addon
|
62 |
|
63 |
function miniorange_check_if_2fa_enabled_for_roles( $current_roles ) {
|
@@ -163,7 +171,7 @@ function mo2f_get_user_2ndfactor( $user ) {
|
|
163 |
}
|
164 |
|
165 |
function mo2f_get_forgotphone_form( $login_status, $login_message, $redirect_to, $session_id_encrypt ) {
|
166 |
-
$mo2f_forgotphone_enabled =
|
167 |
$mo2f_email_as_backup_enabled = get_option( 'mo2f_enable_forgotphone_email' );
|
168 |
$mo2f_kba_as_backup_enabled = get_option( 'mo2f_enable_forgotphone_kba' );
|
169 |
?>
|
@@ -249,8 +257,7 @@ function mo2f_get_forgotphone_form( $login_status, $login_message, $redirect_to,
|
|
249 |
|
250 |
function mo2f_get_kba_authentication_prompt( $login_message, $redirect_to, $session_id_encrypt , $cookievalue) {
|
251 |
$mo_wpns_config = new MoWpnsHandler();
|
252 |
-
|
253 |
-
$mo2f_login_option = get_option( 'mo2f_login_option' );
|
254 |
$mo2f_remember_device_enabled = get_option( 'mo2f_remember_device' );
|
255 |
?>
|
256 |
<html>
|
@@ -342,6 +349,48 @@ function mo2f_get_kba_authentication_prompt( $login_message, $redirect_to, $sess
|
|
342 |
function mologinback() {
|
343 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
344 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
</script>
|
346 |
</body>
|
347 |
|
@@ -353,9 +402,9 @@ function mo2f_get_push_notification_oobemail_prompt( $id, $login_status, $login_
|
|
353 |
$mo_wpns_config = new MoWpnsHandler();
|
354 |
|
355 |
global $Mo2fdbQueries,$txid;
|
356 |
-
$mo2f_enable_forgotphone =
|
357 |
$mo2f_KBA_config_status = $Mo2fdbQueries->get_user_detail( 'mo2f_SecurityQuestions_config_status', $id );
|
358 |
-
$mo2f_is_new_customer =
|
359 |
$mo2f_EV_txid = get_user_meta($id,'mo2f_EV_txid',true);
|
360 |
if(!MO2F_IS_ONPREM)
|
361 |
$mo2f_EV_txid = $_SESSION['mo2f_transactionId'];
|
@@ -478,8 +527,9 @@ function mo2f_get_push_notification_oobemail_prompt( $id, $login_status, $login_
|
|
478 |
var timeout;
|
479 |
var login_status = '<?php echo $login_status;?>';
|
480 |
var calls = 0;
|
481 |
-
|
482 |
-
|
|
|
483 |
{
|
484 |
pollPushValidation();
|
485 |
function pollPushValidation()
|
@@ -565,9 +615,9 @@ function mo2f_get_push_notification_oobemail_prompt( $id, $login_status, $login_
|
|
565 |
}
|
566 |
|
567 |
function mo2f_get_qrcode_authentication_prompt( $login_status, $login_message, $redirect_to, $qrCode, $session_id_encrypt , $cookievalue) {
|
568 |
-
$mo2f_enable_forgotphone =
|
569 |
$mo_wpns_config = new MoWpnsHandler();
|
570 |
-
$mo2f_is_new_customer =
|
571 |
?>
|
572 |
<html>
|
573 |
<head>
|
@@ -712,10 +762,10 @@ function mo2f_get_qrcode_authentication_prompt( $login_status, $login_message, $
|
|
712 |
<?php
|
713 |
}
|
714 |
|
715 |
-
function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $redirect_to,$session_id_encrypt,$user_id ) {
|
716 |
-
$mo2f_enable_forgotphone =
|
717 |
$mo_wpns_config = new MoWpnsHandler();
|
718 |
-
$mo2f_is_new_customer =
|
719 |
$attempts = get_option('mo2f_attempts_before_redirect', 3);
|
720 |
?>
|
721 |
<html>
|
@@ -765,6 +815,17 @@ function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $red
|
|
765 |
<input type="submit" name="miniorange_otp_token_submit" id="miniorange_otp_token_submit"
|
766 |
class="miniorange_otp_token_submit"
|
767 |
value="<?php echo mo2f_lt( 'Validate' ); ?>"/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
768 |
<input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>"/>
|
769 |
<input type="hidden" name="miniorange_soft_token_nonce"
|
770 |
value="<?php echo wp_create_nonce( 'miniorange-2-factor-soft-token-nonce' ); ?>"/>
|
@@ -772,7 +833,7 @@ function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $red
|
|
772 |
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
773 |
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
774 |
</form>
|
775 |
-
|
776 |
$Kbaset = get_user_meta( $user_id ,'Security Questions' );
|
777 |
if ( ! $mo2f_is_new_customer ) { ?>
|
778 |
<?php if ( $mo2f_enable_forgotphone && isset( $login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL' && (sizeof($Kbaset) != 0 ) ) { ?>
|
@@ -792,13 +853,24 @@ function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $red
|
|
792 |
</div>
|
793 |
</div>
|
794 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
795 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>"
|
796 |
class="mo2f_display_none_forms">
|
797 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce"
|
798 |
value="<?php echo wp_create_nonce( 'miniorange-2-factor-mobile-validation-failed-nonce' ); ?>"/>
|
799 |
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
800 |
</form>
|
801 |
-
<?php if (
|
802 |
<form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" class="mo2f_display_none_forms">
|
803 |
<input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>"/>
|
804 |
<input type="hidden" name="miniorange_forgotphone"
|
@@ -807,9 +879,14 @@ function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $red
|
|
807 |
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
808 |
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
809 |
</form>
|
|
|
810 |
<?php } ?>
|
811 |
|
812 |
<script>
|
|
|
|
|
|
|
|
|
813 |
function mologinback() {
|
814 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
815 |
}
|
@@ -817,6 +894,41 @@ function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $red
|
|
817 |
function mologinforgotphone() {
|
818 |
jQuery('#mo2f_show_forgotphone_loginform').submit();
|
819 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
820 |
</script>
|
821 |
</body>
|
822 |
</html>
|
@@ -901,14 +1013,14 @@ function mo2f_get_device_form( $redirect_to, $session_id_encrypt ) {
|
|
901 |
}
|
902 |
|
903 |
function mo_check_device_confirm() {
|
904 |
-
jQuery('#mo2f_device_content').
|
905 |
-
jQuery('#showLoadingBar').
|
906 |
jQuery('#mo2f_trust_device_confirm_form').submit();
|
907 |
}
|
908 |
|
909 |
function mo_check_device_cancel() {
|
910 |
-
jQuery('#mo2f_device_content').
|
911 |
-
jQuery('#showLoadingBar').
|
912 |
jQuery('#mo2f_trust_device_cancel_form').submit();
|
913 |
}
|
914 |
</script>
|
51 |
$redirectUrl = isset( $redirect_to ) && ! empty( $redirect_to ) ? $redirect_to : null;
|
52 |
if ( $current_role == 'administrator' ) {
|
53 |
$redirectUrl = empty( $redirectUrl ) ? admin_url() : $redirectUrl;
|
|
|
54 |
} else {
|
55 |
$redirectUrl = empty( $redirectUrl ) ? home_url() : $redirectUrl;
|
|
|
56 |
}
|
57 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
58 |
+
$redirect = array(
|
59 |
+
'redirect' => $redirectUrl,
|
60 |
+
) ;
|
61 |
+
|
62 |
+
wp_send_json_success($redirect);
|
63 |
+
}
|
64 |
+
else
|
65 |
+
wp_redirect( $redirectUrl );
|
66 |
}
|
67 |
|
68 |
+
|
69 |
// used in shortcode addon
|
70 |
|
71 |
function miniorange_check_if_2fa_enabled_for_roles( $current_roles ) {
|
171 |
}
|
172 |
|
173 |
function mo2f_get_forgotphone_form( $login_status, $login_message, $redirect_to, $session_id_encrypt ) {
|
174 |
+
$mo2f_forgotphone_enabled = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_forgotphone', 'get_option');
|
175 |
$mo2f_email_as_backup_enabled = get_option( 'mo2f_enable_forgotphone_email' );
|
176 |
$mo2f_kba_as_backup_enabled = get_option( 'mo2f_enable_forgotphone_kba' );
|
177 |
?>
|
257 |
|
258 |
function mo2f_get_kba_authentication_prompt( $login_message, $redirect_to, $session_id_encrypt , $cookievalue) {
|
259 |
$mo_wpns_config = new MoWpnsHandler();
|
260 |
+
$mo2f_login_option = MoWpnsUtility::get_mo2f_db_option('mo2f_login_option', 'get_option');
|
|
|
261 |
$mo2f_remember_device_enabled = get_option( 'mo2f_remember_device' );
|
262 |
?>
|
263 |
<html>
|
349 |
function mologinback() {
|
350 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
351 |
}
|
352 |
+
var is_ajax = "<?php echo MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request');?>";
|
353 |
+
if(is_ajax){
|
354 |
+
jQuery('#mo2f_answer_1').keypress(function (e) {
|
355 |
+
if (e.which == 13) {//Enter key pressed
|
356 |
+
e.preventDefault();
|
357 |
+
mo2f_kba_ajax();
|
358 |
+
}
|
359 |
+
});
|
360 |
+
jQuery('#mo2f_answer_2').keypress(function (e) {
|
361 |
+
if (e.which == 13) {//Enter key pressed
|
362 |
+
e.preventDefault();
|
363 |
+
mo2f_kba_ajax();
|
364 |
+
}
|
365 |
+
});
|
366 |
+
jQuery("#miniorange_kba_validate").click(function(e){
|
367 |
+
e.preventDefault();
|
368 |
+
mo2f_kba_ajax();
|
369 |
+
});
|
370 |
+
|
371 |
+
function mo2f_kba_ajax(){
|
372 |
+
jQuery('#mo2f_answer_1').prop('disabled','true');
|
373 |
+
jQuery('#mo2f_answer_2').prop('disabled','true');
|
374 |
+
jQuery('#miniorange_kba_validate').prop('disabled','true');
|
375 |
+
var data = {
|
376 |
+
"action" : "mo2f_ajax",
|
377 |
+
"mo2f_ajax_option" : "mo2f_ajax_kba",
|
378 |
+
"mo2f_answer_1" : jQuery( "input[name=\'mo2f_answer_1\']" ).val(),
|
379 |
+
"mo2f_answer_2" : jQuery( "input[name=\'mo2f_answer_2\']" ).val(),
|
380 |
+
"miniorange_kba_nonce" : jQuery( "input[name=\'miniorange_kba_nonce\']" ).val(),
|
381 |
+
"session_id" : jQuery( "input[name=\'session_id\']" ).val(),
|
382 |
+
"redirect_to" : jQuery( "input[name=\'redirect_to\']" ).val(),
|
383 |
+
"mo2f_trust_device" : jQuery( "input[name=\'mo2f_trust_device\']" ).val(),
|
384 |
+
};
|
385 |
+
jQuery.post(my_ajax_object.ajax_url, data, function(response) {
|
386 |
+
if ( typeof response.data === "undefined") {
|
387 |
+
jQuery("html").html(response);
|
388 |
+
}
|
389 |
+
else
|
390 |
+
location.href = response.data.redirect;
|
391 |
+
});
|
392 |
+
}
|
393 |
+
}
|
394 |
</script>
|
395 |
</body>
|
396 |
|
402 |
$mo_wpns_config = new MoWpnsHandler();
|
403 |
|
404 |
global $Mo2fdbQueries,$txid;
|
405 |
+
$mo2f_enable_forgotphone = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_forgotphone', 'get_option');
|
406 |
$mo2f_KBA_config_status = $Mo2fdbQueries->get_user_detail( 'mo2f_SecurityQuestions_config_status', $id );
|
407 |
+
$mo2f_is_new_customer = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
408 |
$mo2f_EV_txid = get_user_meta($id,'mo2f_EV_txid',true);
|
409 |
if(!MO2F_IS_ONPREM)
|
410 |
$mo2f_EV_txid = $_SESSION['mo2f_transactionId'];
|
527 |
var timeout;
|
528 |
var login_status = '<?php echo $login_status;?>';
|
529 |
var calls = 0;
|
530 |
+
var onprem = '<?php echo MO2F_IS_ONPREM; ?>';
|
531 |
+
|
532 |
+
if(login_status != "MO_2_FACTOR_CHALLENGE_PUSH_NOTIFICATIONS" && onprem ==1)
|
533 |
{
|
534 |
pollPushValidation();
|
535 |
function pollPushValidation()
|
615 |
}
|
616 |
|
617 |
function mo2f_get_qrcode_authentication_prompt( $login_status, $login_message, $redirect_to, $qrCode, $session_id_encrypt , $cookievalue) {
|
618 |
+
$mo2f_enable_forgotphone = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_forgotphone', 'get_option');
|
619 |
$mo_wpns_config = new MoWpnsHandler();
|
620 |
+
$mo2f_is_new_customer = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
621 |
?>
|
622 |
<html>
|
623 |
<head>
|
762 |
<?php
|
763 |
}
|
764 |
|
765 |
+
function mo2f_get_otp_authentication_prompt( $login_status, $login_message, $redirect_to,$session_id_encrypt,$user_id,$show_back_button =null ) {
|
766 |
+
$mo2f_enable_forgotphone = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_forgotphone', 'get_option');
|
767 |
$mo_wpns_config = new MoWpnsHandler();
|
768 |
+
$mo2f_is_new_customer = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
769 |
$attempts = get_option('mo2f_attempts_before_redirect', 3);
|
770 |
?>
|
771 |
<html>
|
815 |
<input type="submit" name="miniorange_otp_token_submit" id="miniorange_otp_token_submit"
|
816 |
class="miniorange_otp_token_submit"
|
817 |
value="<?php echo mo2f_lt( 'Validate' ); ?>"/>
|
818 |
+
<?php
|
819 |
+
|
820 |
+
if($show_back_button == 1)
|
821 |
+
{
|
822 |
+
?>
|
823 |
+
<input type="button" name="miniorange_otp_token_back" id="miniorange_otp_token_back"
|
824 |
+
class="miniorange_otp_token_submit"
|
825 |
+
value="<?php echo mo2f_lt( 'Back' ); ?>"/>
|
826 |
+
<?php
|
827 |
+
}
|
828 |
+
?>
|
829 |
<input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>"/>
|
830 |
<input type="hidden" name="miniorange_soft_token_nonce"
|
831 |
value="<?php echo wp_create_nonce( 'miniorange-2-factor-soft-token-nonce' ); ?>"/>
|
833 |
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
834 |
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
835 |
</form>
|
836 |
+
<?php
|
837 |
$Kbaset = get_user_meta( $user_id ,'Security Questions' );
|
838 |
if ( ! $mo2f_is_new_customer ) { ?>
|
839 |
<?php if ( $mo2f_enable_forgotphone && isset( $login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL' && (sizeof($Kbaset) != 0 ) ) { ?>
|
853 |
</div>
|
854 |
</div>
|
855 |
</div>
|
856 |
+
|
857 |
+
<form name="f" id="mo2f_backto_inline_registration" method="post" action="<?php echo wp_login_url(); ?>"
|
858 |
+
class="mo2f_display_none_forms">
|
859 |
+
<input type="hidden" name="miniorange_back_inline_reg_nonce"
|
860 |
+
value="<?php echo wp_create_nonce( 'miniorange-2-factor-back-inline-reg-nonce' ); ?>"/>
|
861 |
+
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
862 |
+
<input type="hidden" name="option" value="miniorange2f_back_to_inline_registration">
|
863 |
+
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
864 |
+
|
865 |
+
</form>
|
866 |
+
|
867 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>"
|
868 |
class="mo2f_display_none_forms">
|
869 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce"
|
870 |
value="<?php echo wp_create_nonce( 'miniorange-2-factor-mobile-validation-failed-nonce' ); ?>"/>
|
871 |
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
872 |
</form>
|
873 |
+
<?php if ( MoWpnsUtility::get_mo2f_db_option('mo2f_enable_forgotphone', 'get_option') && isset( $login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL' ) { ?>
|
874 |
<form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" class="mo2f_display_none_forms">
|
875 |
<input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>"/>
|
876 |
<input type="hidden" name="miniorange_forgotphone"
|
879 |
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
880 |
<input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
|
881 |
</form>
|
882 |
+
|
883 |
<?php } ?>
|
884 |
|
885 |
<script>
|
886 |
+
jQuery('#miniorange_otp_token_back').click(function(){
|
887 |
+
jQuery('#mo2f_backto_inline_registration').submit();
|
888 |
+
});
|
889 |
+
|
890 |
function mologinback() {
|
891 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
892 |
}
|
894 |
function mologinforgotphone() {
|
895 |
jQuery('#mo2f_show_forgotphone_loginform').submit();
|
896 |
}
|
897 |
+
var is_ajax = '<?php echo MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request');?>';
|
898 |
+
if(is_ajax){
|
899 |
+
jQuery('#mo2fa_softtoken').keypress(function (e) {
|
900 |
+
if (e.which == 13) {//Enter key pressed
|
901 |
+
e.preventDefault();
|
902 |
+
mo2f_otp_ajax();
|
903 |
+
}
|
904 |
+
});
|
905 |
+
jQuery("#miniorange_otp_token_submit").click(function(e){
|
906 |
+
e.preventDefault();
|
907 |
+
mo2f_otp_ajax();
|
908 |
+
});
|
909 |
+
|
910 |
+
function mo2f_otp_ajax(){
|
911 |
+
jQuery('#mo2fa_softtoken').prop('disabled','true');
|
912 |
+
jQuery('#miniorange_otp_token_submit').prop('disabled','true');
|
913 |
+
var data = {
|
914 |
+
"action" : "mo2f_ajax",
|
915 |
+
"mo2f_ajax_option" : "mo2f_ajax_otp",
|
916 |
+
"mo2fa_softtoken" : jQuery( "input[name=\'mo2fa_softtoken\']" ).val(),
|
917 |
+
"miniorange_soft_token_nonce" : jQuery( "input[name=\'miniorange_soft_token_nonce\']" ).val(),
|
918 |
+
"session_id" : jQuery( "input[name=\'session_id\']" ).val(),
|
919 |
+
"redirect_to" : jQuery( "input[name=\'redirect_to\']" ).val(),
|
920 |
+
"request_origin_method" : jQuery( "input[name=\'request_origin_method\']" ).val(),
|
921 |
+
};
|
922 |
+
jQuery.post(my_ajax_object.ajax_url, data, function(response) {
|
923 |
+
if(typeof response.data === "undefined")
|
924 |
+
jQuery("html").html(response);
|
925 |
+
else if(response.data.reload)
|
926 |
+
location.reload( true );
|
927 |
+
else
|
928 |
+
location.href = response.data.redirect;
|
929 |
+
});
|
930 |
+
}
|
931 |
+
}
|
932 |
</script>
|
933 |
</body>
|
934 |
</html>
|
1013 |
}
|
1014 |
|
1015 |
function mo_check_device_confirm() {
|
1016 |
+
jQuery('#mo2f_device_content').css("display", "none");
|
1017 |
+
jQuery('#showLoadingBar').css("display", "block");
|
1018 |
jQuery('#mo2f_trust_device_confirm_form').submit();
|
1019 |
}
|
1020 |
|
1021 |
function mo_check_device_cancel() {
|
1022 |
+
jQuery('#mo2f_device_content').css("display", "none");
|
1023 |
+
jQuery('#showLoadingBar').css("display", "block");
|
1024 |
jQuery('#mo2f_trust_device_cancel_form').submit();
|
1025 |
}
|
1026 |
</script>
|
controllers/twofa/mo2fa_inline_registration.php
CHANGED
@@ -170,15 +170,13 @@ function prompt_user_to_select_2factor_mthod_inline($current_user_id, $login_sta
|
|
170 |
</label>
|
171 |
<br>
|
172 |
</span>
|
173 |
-
<span class="<?php if( !(in_array("OTP_OVER_EMAIL", $opt)) ){ echo "mo2f_td_hide"; }else { echo "
|
174 |
<label title="<?php echo __('You will receive a one time passcode on your email. You have to enter the otp on your screen to login. Supported in Smartphones, Feature Phones.', 'miniorange-2-factor-authentication'); ?>" >
|
175 |
<input type="radio" name="mo2f_selected_2factor_method" value="OTP OVER EMAIL" />
|
176 |
<?php echo __('OTP Over Email', 'miniorange-2-factor-authentication'); ?>
|
177 |
</label>
|
178 |
</span>
|
179 |
-
<?php //if(isset($login_message) && !empty($login_message)){ ?>
|
180 |
<br><a href="#skiptwofactor" style="color:#F4D03F ;font-weight:bold;margin-left:35%;"><?php echo __('Skip Two Factor', 'miniorange-2-factor-authentication'); ?></a>>>
|
181 |
-
<?php//} ?>
|
182 |
<br />
|
183 |
<?php mo2f_customize_logo() ?>
|
184 |
</div>
|
@@ -195,7 +193,7 @@ function prompt_user_to_select_2factor_mthod_inline($current_user_id, $login_sta
|
|
195 |
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
196 |
<input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
|
197 |
</form>
|
198 |
-
|
199 |
<form name="f" id="mo2f_skip_loginform" method="post" action="" style="display:none;">
|
200 |
<input type="hidden" name="option" value="mo2f_skip_2fa_setup" />
|
201 |
<input type="hidden" name="miniorange_skip_2fa_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-skip-nonce'); ?>" />
|
@@ -203,8 +201,7 @@ function prompt_user_to_select_2factor_mthod_inline($current_user_id, $login_sta
|
|
203 |
<input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
|
204 |
|
205 |
</form>
|
206 |
-
|
207 |
-
</body>
|
208 |
<script>
|
209 |
function mologinback(){
|
210 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
@@ -219,6 +216,7 @@ function prompt_user_to_select_2factor_mthod_inline($current_user_id, $login_sta
|
|
219 |
jQuery('#mo2f_skip_loginform').submit();
|
220 |
});
|
221 |
</script>
|
|
|
222 |
</html>
|
223 |
<?php
|
224 |
}
|
@@ -340,7 +338,7 @@ function mo2f_inline_email_form($email,$current_user_id)
|
|
340 |
<input type="hidden" name="miniorange_skip_2fa" value="<?php echo wp_create_nonce('miniorange-2-factor-skip-nonce'); ?>" />
|
341 |
</form>
|
342 |
<?php } ?>
|
343 |
-
|
344 |
<script type="text/javascript">
|
345 |
jQuery('#save_entered_email_inlinecloud1').click(function(){
|
346 |
var email = jQuery('#emailInlineCloud').val();
|
@@ -373,6 +371,7 @@ function mo2f_inline_email_form($email,$current_user_id)
|
|
373 |
|
374 |
|
375 |
</script>
|
|
|
376 |
|
377 |
<?php
|
378 |
}
|
@@ -625,7 +624,7 @@ function prompt_user_for_google_authenticator_setup($current_user_id, $login_sta
|
|
625 |
<input type="hidden" name="google_phone_type" />
|
626 |
<input type="hidden" name="mo2f_inline_ga_phone_type_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-ga-phone-type-nonce'); ?>" />
|
627 |
</form>
|
628 |
-
|
629 |
<script>
|
630 |
jQuery('#authenticator_type').change(function(){
|
631 |
var auth_type = jQuery(this).val();
|
@@ -675,6 +674,7 @@ function prompt_user_for_google_authenticator_setup($current_user_id, $login_sta
|
|
675 |
jQuery("#mo2f_scanbarcode_a").toggle();
|
676 |
});
|
677 |
</script>
|
|
|
678 |
<?php
|
679 |
echo '<head>';
|
680 |
echo '<script type="text/javascript" src="'.plugins_url( "/includes/jquery-qrcode/jquery-qrcode.js", dirname(dirname(__FILE__ ))).'"></script>';
|
@@ -827,7 +827,7 @@ function prompt_user_for_kba_setup($current_user_id, $login_status, $login_messa
|
|
827 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
|
828 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
|
829 |
</form>
|
830 |
-
|
831 |
<script>
|
832 |
|
833 |
|
@@ -843,6 +843,7 @@ function prompt_user_for_kba_setup($current_user_id, $login_status, $login_messa
|
|
843 |
jQuery('#mo2f_goto_two_factor_form').submit();
|
844 |
}
|
845 |
</script>
|
|
|
846 |
</html>
|
847 |
<?php
|
848 |
}function prompt_user_for_miniorange_register($current_user_id, $login_status, $login_message){
|
@@ -940,7 +941,7 @@ function prompt_user_for_kba_setup($current_user_id, $login_status, $login_messa
|
|
940 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
|
941 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
|
942 |
</form>
|
943 |
-
|
944 |
<script>
|
945 |
jQuery('#mo2f_inline_back_btn').click(function() {
|
946 |
jQuery('#mo2f_goto_two_factor_form').submit();
|
@@ -957,6 +958,7 @@ function prompt_user_for_kba_setup($current_user_id, $login_status, $login_messa
|
|
957 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
958 |
}
|
959 |
</script>
|
|
|
960 |
</html>
|
961 |
<?php
|
962 |
}
|
@@ -1073,12 +1075,13 @@ function prompt_user_for_setup_success($id, $login_status, $login_message){
|
|
1073 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
|
1074 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
|
1075 |
</form>
|
1076 |
-
|
1077 |
<script>
|
1078 |
function mologinback(){
|
1079 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
1080 |
}
|
1081 |
</script>
|
|
|
1082 |
</html>
|
1083 |
<?php
|
1084 |
}
|
@@ -1205,7 +1208,6 @@ $current_user = get_userdata($current_user_id);
|
|
1205 |
<input type="hidden" name="miniorange_inline_two_factor_setup" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-setup-nonce'); ?>" />
|
1206 |
</form>
|
1207 |
<?php } ?>
|
1208 |
-
</body>
|
1209 |
<script>
|
1210 |
jQuery("#phone").intlTelInput();
|
1211 |
function mologinback(){
|
@@ -1218,6 +1220,8 @@ $current_user = get_userdata($current_user_id);
|
|
1218 |
jQuery('#mo2fa_inline_resend_otp_form').submit();
|
1219 |
});
|
1220 |
</script>
|
|
|
|
|
1221 |
</html>
|
1222 |
<?php
|
1223 |
}
|
170 |
</label>
|
171 |
<br>
|
172 |
</span>
|
173 |
+
<span class="<?php if( !(in_array("OTP_OVER_EMAIL", $opt)) ){ echo "mo2f_td_hide"; }else { echo "mo2f_td_show"; }?>">
|
174 |
<label title="<?php echo __('You will receive a one time passcode on your email. You have to enter the otp on your screen to login. Supported in Smartphones, Feature Phones.', 'miniorange-2-factor-authentication'); ?>" >
|
175 |
<input type="radio" name="mo2f_selected_2factor_method" value="OTP OVER EMAIL" />
|
176 |
<?php echo __('OTP Over Email', 'miniorange-2-factor-authentication'); ?>
|
177 |
</label>
|
178 |
</span>
|
|
|
179 |
<br><a href="#skiptwofactor" style="color:#F4D03F ;font-weight:bold;margin-left:35%;"><?php echo __('Skip Two Factor', 'miniorange-2-factor-authentication'); ?></a>>>
|
|
|
180 |
<br />
|
181 |
<?php mo2f_customize_logo() ?>
|
182 |
</div>
|
193 |
<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
|
194 |
<input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
|
195 |
</form>
|
196 |
+
|
197 |
<form name="f" id="mo2f_skip_loginform" method="post" action="" style="display:none;">
|
198 |
<input type="hidden" name="option" value="mo2f_skip_2fa_setup" />
|
199 |
<input type="hidden" name="miniorange_skip_2fa_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-skip-nonce'); ?>" />
|
201 |
<input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
|
202 |
|
203 |
</form>
|
204 |
+
|
|
|
205 |
<script>
|
206 |
function mologinback(){
|
207 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
216 |
jQuery('#mo2f_skip_loginform').submit();
|
217 |
});
|
218 |
</script>
|
219 |
+
</body>
|
220 |
</html>
|
221 |
<?php
|
222 |
}
|
338 |
<input type="hidden" name="miniorange_skip_2fa" value="<?php echo wp_create_nonce('miniorange-2-factor-skip-nonce'); ?>" />
|
339 |
</form>
|
340 |
<?php } ?>
|
341 |
+
|
342 |
<script type="text/javascript">
|
343 |
jQuery('#save_entered_email_inlinecloud1').click(function(){
|
344 |
var email = jQuery('#emailInlineCloud').val();
|
371 |
|
372 |
|
373 |
</script>
|
374 |
+
</body>
|
375 |
|
376 |
<?php
|
377 |
}
|
624 |
<input type="hidden" name="google_phone_type" />
|
625 |
<input type="hidden" name="mo2f_inline_ga_phone_type_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-ga-phone-type-nonce'); ?>" />
|
626 |
</form>
|
627 |
+
|
628 |
<script>
|
629 |
jQuery('#authenticator_type').change(function(){
|
630 |
var auth_type = jQuery(this).val();
|
674 |
jQuery("#mo2f_scanbarcode_a").toggle();
|
675 |
});
|
676 |
</script>
|
677 |
+
</body>
|
678 |
<?php
|
679 |
echo '<head>';
|
680 |
echo '<script type="text/javascript" src="'.plugins_url( "/includes/jquery-qrcode/jquery-qrcode.js", dirname(dirname(__FILE__ ))).'"></script>';
|
827 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
|
828 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
|
829 |
</form>
|
830 |
+
|
831 |
<script>
|
832 |
|
833 |
|
843 |
jQuery('#mo2f_goto_two_factor_form').submit();
|
844 |
}
|
845 |
</script>
|
846 |
+
</body>
|
847 |
</html>
|
848 |
<?php
|
849 |
}function prompt_user_for_miniorange_register($current_user_id, $login_status, $login_message){
|
941 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
|
942 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
|
943 |
</form>
|
944 |
+
|
945 |
<script>
|
946 |
jQuery('#mo2f_inline_back_btn').click(function() {
|
947 |
jQuery('#mo2f_goto_two_factor_form').submit();
|
958 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
959 |
}
|
960 |
</script>
|
961 |
+
</body>
|
962 |
</html>
|
963 |
<?php
|
964 |
}
|
1075 |
<form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
|
1076 |
<input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
|
1077 |
</form>
|
1078 |
+
|
1079 |
<script>
|
1080 |
function mologinback(){
|
1081 |
jQuery('#mo2f_backto_mo_loginform').submit();
|
1082 |
}
|
1083 |
</script>
|
1084 |
+
</body>
|
1085 |
</html>
|
1086 |
<?php
|
1087 |
}
|
1208 |
<input type="hidden" name="miniorange_inline_two_factor_setup" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-setup-nonce'); ?>" />
|
1209 |
</form>
|
1210 |
<?php } ?>
|
|
|
1211 |
<script>
|
1212 |
jQuery("#phone").intlTelInput();
|
1213 |
function mologinback(){
|
1220 |
jQuery('#mo2fa_inline_resend_otp_form').submit();
|
1221 |
});
|
1222 |
</script>
|
1223 |
+
</body>
|
1224 |
+
|
1225 |
</html>
|
1226 |
<?php
|
1227 |
}
|
controllers/twofa/setup_twofa.php
CHANGED
@@ -1,35 +1,38 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$email_registered = 1;
|
4 |
-
global $Mo2fdbQueries;
|
5 |
-
$email =$Mo2fdbQueries->get_user_detail( 'mo2f_user_email', get_current_user_id() );
|
6 |
-
if(isset($email))
|
7 |
-
$
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$email_registered = 1;
|
4 |
+
global $Mo2fdbQueries;
|
5 |
+
$email =$Mo2fdbQueries->get_user_detail( 'mo2f_user_email', get_current_user_id() );
|
6 |
+
if($email == '' or !isset($email))
|
7 |
+
$email = wp_get_current_user()->user_email;
|
8 |
+
|
9 |
+
if(isset($email))
|
10 |
+
$email_registered = 1;
|
11 |
+
else
|
12 |
+
$email_registered = 0;
|
13 |
+
|
14 |
+
$upgrade_url = add_query_arg(array('page' => 'mo_2fa_upgrade' ), $_SERVER['REQUEST_URI']);
|
15 |
+
|
16 |
+
if(current_user_can( 'manage_options' ) && isset($_POST['option']))
|
17 |
+
{
|
18 |
+
switch($_POST['option'])
|
19 |
+
{
|
20 |
+
case "mo2f_enable_2FA_on_login_page_option":
|
21 |
+
wpns_handle_enable_2fa_login_prompt($_POST); break;
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'setup_twofa.php';
|
26 |
+
|
27 |
+
function wpns_handle_enable_2fa_login_prompt($postvalue)
|
28 |
+
{
|
29 |
+
if( MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_prompt_on_login_page', 'get_option') == 1 )
|
30 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FA_ON_LOGIN_PROMPT_ENABLED'),'SUCCESS');
|
31 |
+
else{
|
32 |
+
if(isset($postvalue['mo2f_enable_2fa_prompt_on_login_page'])){
|
33 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FA_PROMPT_LOGIN_PAGE'),'ERROR');
|
34 |
+
}else{
|
35 |
+
do_action('wpns_show_message',MoWpnsMessages::showMessage('TWO_FA_ON_LOGIN_PROMPT_DISABLED'),'ERROR');
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
controllers/twofa/two_fa.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa.php';
|
4 |
update_site_option('mo2f_two_factor',true);
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa.php';
|
4 |
update_site_option('mo2f_two_factor',true);
|
controllers/twofa/two_fa_addon.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
<?php
|
2 |
-
global $Mo2fdbQueries;
|
3 |
-
$current_user = wp_get_current_user();
|
4 |
-
$mo2f_user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $current_user->ID );
|
5 |
-
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_addon.php';
|
1 |
+
<?php
|
2 |
+
global $Mo2fdbQueries;
|
3 |
+
$current_user = wp_get_current_user();
|
4 |
+
$mo2f_user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $current_user->ID );
|
5 |
+
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_addon.php';
|
controllers/twofa/two_fa_custom_form.php
CHANGED
@@ -1,2 +1,9 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
+
|
3 |
+
$is_woocommerce = get_site_option('mo2f_custom_reg_wocommerce');
|
4 |
+
$is_bbpress = get_site_option('mo2f_custom_reg_bbpress');
|
5 |
+
$is_any_of_woo_bb = $is_woocommerce || $is_bbpress;
|
6 |
+
$is_custom = get_site_option('mo2f_custom_reg_custom');
|
7 |
+
$is_registered = get_site_option('mo2f_customerkey');
|
8 |
+
|
9 |
+
include_once $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_custom_form.php';
|
controllers/twofa/two_fa_premium_feature.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_premium_feature.php';
|
1 |
+
<?php
|
2 |
+
|
3 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_premium_feature.php';
|
controllers/twofa/two_factor_ajax.php
CHANGED
@@ -6,7 +6,7 @@ class mo_2f_ajax
|
|
6 |
add_action( 'admin_init' , array( $this, 'mo_2f_two_factor' ) );
|
7 |
}
|
8 |
|
9 |
-
function mo_2f_two_factor(){
|
10 |
add_action( 'wp_ajax_mo_two_factor_ajax', array($this,'mo_two_factor_ajax') );
|
11 |
}
|
12 |
|
@@ -25,13 +25,95 @@ class mo_2f_ajax
|
|
25 |
case 'mo2f_role_based_2_factor':
|
26 |
$this->mo2f_role_based_2_factor();break;
|
27 |
case 'mo2f_enable_disable_twofactor':
|
28 |
-
$this->mo2f_enable_disable_twofactor(); break;
|
29 |
case 'mo2f_enable_disable_inline':
|
30 |
$this->mo2f_enable_disable_inline(); break;
|
31 |
case 'mo2f_shift_to_onprem':
|
32 |
$this->mo2f_shift_to_onprem();break;
|
|
|
|
|
|
|
33 |
}
|
34 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
function mo2f_check_user_exist_miniOrange()
|
36 |
{
|
37 |
$nonce = sanitize_text_field($_POST['nonce']);
|
@@ -54,16 +136,16 @@ class mo_2f_ajax
|
|
54 |
$email = $user->user_email;
|
55 |
|
56 |
|
57 |
-
|
58 |
if(isset($_POST['email']))
|
59 |
{
|
60 |
$email = sanitize_text_field($_POST['email']);
|
61 |
}
|
62 |
-
|
63 |
$enduser = new Two_Factor_Setup();
|
64 |
$check_user = json_decode( $enduser->mo_check_user_already_exist( $email ), true );
|
65 |
-
|
66 |
-
|
67 |
if(strcasecmp($check_user['status'], 'USER_FOUND_UNDER_DIFFERENT_CUSTOMER') == 0 ){
|
68 |
echo "alreadyExist";
|
69 |
exit;
|
@@ -83,7 +165,7 @@ function mo2f_shift_to_onprem(){
|
|
83 |
$current_userID = $current_user->ID;
|
84 |
$miniorangeID = get_option( 'mo2f_miniorange_admin' );
|
85 |
if(is_null($miniorangeID) or $miniorangeID =='')
|
86 |
-
$is_customer_admin = true;
|
87 |
else
|
88 |
$is_customer_admin = $miniorangeID == $current_userID ? true : false;
|
89 |
if($is_customer_admin)
|
@@ -96,9 +178,9 @@ function mo2f_shift_to_onprem(){
|
|
96 |
{
|
97 |
$adminUser = get_user_by('id',$miniorangeID);
|
98 |
$email = $adminUser->user_email;
|
99 |
-
wp_send_json($email);
|
100 |
}
|
101 |
-
|
102 |
}
|
103 |
|
104 |
|
@@ -109,7 +191,6 @@ function mo2f_shift_to_onprem(){
|
|
109 |
$error = new WP_Error();
|
110 |
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
111 |
|
112 |
-
//return $error;
|
113 |
}
|
114 |
|
115 |
$enable = sanitize_text_field($_POST['mo2f_enable_2fa']);
|
@@ -119,7 +200,7 @@ function mo2f_shift_to_onprem(){
|
|
119 |
}
|
120 |
else{
|
121 |
update_site_option('mo2f_activate_plugin' , false);
|
122 |
-
wp_send_json('false');
|
123 |
}
|
124 |
}
|
125 |
|
@@ -136,7 +217,7 @@ function mo2f_shift_to_onprem(){
|
|
136 |
}
|
137 |
else{
|
138 |
update_site_option('mo2f_inline_registration' , 0);
|
139 |
-
wp_send_json('false');
|
140 |
}
|
141 |
}
|
142 |
|
@@ -159,7 +240,7 @@ function mo2f_shift_to_onprem(){
|
|
159 |
$enabledrole = array();
|
160 |
}
|
161 |
foreach($enabledrole as $role){
|
162 |
-
update_option($role, 1);
|
163 |
}
|
164 |
wp_send_json('true');
|
165 |
return;
|
@@ -177,10 +258,10 @@ function mo2f_shift_to_onprem(){
|
|
177 |
$current_userID = $current_user->ID;
|
178 |
$miniorangeID = get_option( 'mo2f_miniorange_admin' );
|
179 |
$is_customer_admin = $miniorangeID == $current_userID ? true : false;
|
180 |
-
|
181 |
if(is_null($miniorangeID) or $miniorangeID =='')
|
182 |
$is_customer_admin = true;
|
183 |
-
|
184 |
if($is_customer_admin)
|
185 |
{
|
186 |
update_option('is_onprem', 0);
|
@@ -190,14 +271,14 @@ function mo2f_shift_to_onprem(){
|
|
190 |
{
|
191 |
$adminUser = get_user_by('id',$miniorangeID);
|
192 |
$email = $adminUser->user_email;
|
193 |
-
wp_send_json($email);
|
194 |
}
|
195 |
-
|
196 |
}
|
197 |
}
|
198 |
|
199 |
function mo2f_unlimitted_user()
|
200 |
-
{
|
201 |
if(!wp_verify_nonce($_POST['nonce'],'unlimittedUserNonce'))
|
202 |
{
|
203 |
echo "NonceDidNotMatch";
|
@@ -224,13 +305,13 @@ function mo2f_shift_to_onprem(){
|
|
224 |
else
|
225 |
{
|
226 |
echo "OnPremiseDeactive";
|
227 |
-
exit;
|
228 |
}
|
229 |
}
|
230 |
}
|
231 |
function mo2f_save_email_verification()
|
232 |
-
{
|
233 |
-
|
234 |
if(!wp_verify_nonce($_POST['nonce'],'EmailVerificationSaveNonce'))
|
235 |
{
|
236 |
echo "NonceDidNotMatch";
|
@@ -247,25 +328,37 @@ function mo2f_shift_to_onprem(){
|
|
247 |
{
|
248 |
$twofactor_transactions = new Mo2fDB;
|
249 |
$exceeded = $twofactor_transactions->check_alluser_limit_exceeded($user_id);
|
250 |
-
|
251 |
if($exceeded){
|
252 |
echo "USER_LIMIT_EXCEEDED";
|
253 |
exit;
|
254 |
}
|
255 |
}
|
256 |
-
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
|
257 |
{
|
258 |
$error = true;
|
259 |
}
|
260 |
if($email!='' && !$error)
|
261 |
{
|
262 |
global $Mo2fdbQueries;
|
263 |
-
$
|
|
|
|
|
264 |
'mo2f_EmailVerification_config_status'=>true,
|
265 |
'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS',
|
266 |
'mo2f_configured_2FA_method'=>"Email Verification",
|
267 |
'mo2f_user_email' => $email
|
268 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
echo "settingsSaved";
|
270 |
exit;
|
271 |
}
|
@@ -276,14 +369,14 @@ function mo2f_shift_to_onprem(){
|
|
276 |
}
|
277 |
|
278 |
}
|
279 |
-
|
280 |
}
|
281 |
function CheckEVStatus()
|
282 |
{
|
283 |
if(isset($_POST['txid']))
|
284 |
{
|
285 |
$txid = sanitize_text_field($_POST['txid']);
|
286 |
-
$status = get_site_option($
|
287 |
if($status ==1 || $status ==0)
|
288 |
delete_site_option($_POST['txid']);
|
289 |
echo $status;
|
@@ -295,6 +388,6 @@ function mo2f_shift_to_onprem(){
|
|
295 |
|
296 |
|
297 |
}
|
298 |
-
|
299 |
new mo_2f_ajax;
|
300 |
?>
|
6 |
add_action( 'admin_init' , array( $this, 'mo_2f_two_factor' ) );
|
7 |
}
|
8 |
|
9 |
+
function mo_2f_two_factor(){
|
10 |
add_action( 'wp_ajax_mo_two_factor_ajax', array($this,'mo_two_factor_ajax') );
|
11 |
}
|
12 |
|
25 |
case 'mo2f_role_based_2_factor':
|
26 |
$this->mo2f_role_based_2_factor();break;
|
27 |
case 'mo2f_enable_disable_twofactor':
|
28 |
+
$this->mo2f_enable_disable_twofactor(); break;
|
29 |
case 'mo2f_enable_disable_inline':
|
30 |
$this->mo2f_enable_disable_inline(); break;
|
31 |
case 'mo2f_shift_to_onprem':
|
32 |
$this->mo2f_shift_to_onprem();break;
|
33 |
+
case 'mo2f_save_custom_form_settings':
|
34 |
+
$this ->mo2f_save_custom_form_settings();
|
35 |
+
break;
|
36 |
}
|
37 |
}
|
38 |
+
function mo2f_save_custom_form_settings()
|
39 |
+
{
|
40 |
+
|
41 |
+
$customForm = false;
|
42 |
+
$nonce = sanitize_text_field($_POST['mo2f_nonce_save_form_settings']);
|
43 |
+
|
44 |
+
if ( ! wp_verify_nonce( $nonce, 'mo2f-nonce-save-form-settings' ) ) {
|
45 |
+
$error = new WP_Error();
|
46 |
+
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
47 |
+
//return $error;
|
48 |
+
}
|
49 |
+
if(isset($_POST['submit_selector']) and
|
50 |
+
isset($_POST['email_selector']) and
|
51 |
+
isset($_POST['authType']) and
|
52 |
+
isset($_POST['customForm']) and
|
53 |
+
isset($_POST['form_selector']) and
|
54 |
+
|
55 |
+
$_POST['submit_selector']!="" and
|
56 |
+
$_POST['email_selector']!="" and
|
57 |
+
$_POST['customForm']!="" and
|
58 |
+
$_POST['form_selector']!="")
|
59 |
+
{
|
60 |
+
$submit_selector = sanitize_text_field($_POST['submit_selector']);
|
61 |
+
$form_selector = sanitize_text_field($_POST['form_selector']);
|
62 |
+
$email_selector = sanitize_text_field($_POST['email_selector']);
|
63 |
+
$phone_selector = sanitize_text_field($_POST['phone_selector']);
|
64 |
+
$authType = sanitize_text_field($_POST['authType']);
|
65 |
+
$customForm = sanitize_text_field( $_POST['customForm']);
|
66 |
+
$enableShortcode = sanitize_text_field($_POST['enableShortcode']);
|
67 |
+
|
68 |
+
switch ($form_selector)
|
69 |
+
{
|
70 |
+
case '.bbp-login-form':
|
71 |
+
update_site_option('mo2f_custom_reg_bbpress',true);
|
72 |
+
update_site_option('mo2f_custom_reg_wocommerce',false);
|
73 |
+
update_site_option('mo2f_custom_reg_custom',false);
|
74 |
+
break;
|
75 |
+
case '.woocommerce-form woocommerce-form-register':
|
76 |
+
update_site_option('mo2f_custom_reg_bbpress',false);
|
77 |
+
update_site_option('mo2f_custom_reg_wocommerce',true);
|
78 |
+
update_site_option('mo2f_custom_reg_custom',false);
|
79 |
+
break;
|
80 |
+
default:
|
81 |
+
update_site_option('mo2f_custom_reg_bbpress',false);
|
82 |
+
update_site_option('mo2f_custom_reg_wocommerce',false);
|
83 |
+
update_site_option('mo2f_custom_reg_custom',true);
|
84 |
+
}
|
85 |
+
|
86 |
+
update_site_option('mo2f_custom_form_name', $form_selector);
|
87 |
+
update_site_option('mo2f_custom_email_selector', $email_selector);
|
88 |
+
update_site_option('mo2f_custom_phone_selector', $phone_selector);
|
89 |
+
update_site_option('mo2f_custom_submit_selector', $submit_selector);
|
90 |
+
update_site_option('mo2f_custom_auth_type', $authType);
|
91 |
+
|
92 |
+
update_site_option('enable_form_shortcode',$enableShortcode);
|
93 |
+
$saved = true;
|
94 |
+
}
|
95 |
+
else
|
96 |
+
{
|
97 |
+
$submit_selector = 'NA';
|
98 |
+
$form_selector = 'NA';
|
99 |
+
$email_selector = 'NA';
|
100 |
+
$authType ='NA';
|
101 |
+
$saved = false;
|
102 |
+
}
|
103 |
+
$return = array(
|
104 |
+
'authType' => $authType,
|
105 |
+
'submit' => $submit_selector,
|
106 |
+
'emailSelector' => $email_selector,
|
107 |
+
'phone_selector' => $phone_selector,
|
108 |
+
'form' => $form_selector,
|
109 |
+
'saved' => $saved,
|
110 |
+
'customForm' => $customForm,
|
111 |
+
'enableShortcode' => $enableShortcode
|
112 |
+
);
|
113 |
+
|
114 |
+
return wp_send_json($return);
|
115 |
+
}
|
116 |
+
|
117 |
function mo2f_check_user_exist_miniOrange()
|
118 |
{
|
119 |
$nonce = sanitize_text_field($_POST['nonce']);
|
136 |
$email = $user->user_email;
|
137 |
|
138 |
|
139 |
+
|
140 |
if(isset($_POST['email']))
|
141 |
{
|
142 |
$email = sanitize_text_field($_POST['email']);
|
143 |
}
|
144 |
+
|
145 |
$enduser = new Two_Factor_Setup();
|
146 |
$check_user = json_decode( $enduser->mo_check_user_already_exist( $email ), true );
|
147 |
+
|
148 |
+
|
149 |
if(strcasecmp($check_user['status'], 'USER_FOUND_UNDER_DIFFERENT_CUSTOMER') == 0 ){
|
150 |
echo "alreadyExist";
|
151 |
exit;
|
165 |
$current_userID = $current_user->ID;
|
166 |
$miniorangeID = get_option( 'mo2f_miniorange_admin' );
|
167 |
if(is_null($miniorangeID) or $miniorangeID =='')
|
168 |
+
$is_customer_admin = true;
|
169 |
else
|
170 |
$is_customer_admin = $miniorangeID == $current_userID ? true : false;
|
171 |
if($is_customer_admin)
|
178 |
{
|
179 |
$adminUser = get_user_by('id',$miniorangeID);
|
180 |
$email = $adminUser->user_email;
|
181 |
+
wp_send_json($email);
|
182 |
}
|
183 |
+
|
184 |
}
|
185 |
|
186 |
|
191 |
$error = new WP_Error();
|
192 |
$error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
|
193 |
|
|
|
194 |
}
|
195 |
|
196 |
$enable = sanitize_text_field($_POST['mo2f_enable_2fa']);
|
200 |
}
|
201 |
else{
|
202 |
update_site_option('mo2f_activate_plugin' , false);
|
203 |
+
wp_send_json('false');
|
204 |
}
|
205 |
}
|
206 |
|
217 |
}
|
218 |
else{
|
219 |
update_site_option('mo2f_inline_registration' , 0);
|
220 |
+
wp_send_json('false');
|
221 |
}
|
222 |
}
|
223 |
|
240 |
$enabledrole = array();
|
241 |
}
|
242 |
foreach($enabledrole as $role){
|
243 |
+
update_option($role, 1);
|
244 |
}
|
245 |
wp_send_json('true');
|
246 |
return;
|
258 |
$current_userID = $current_user->ID;
|
259 |
$miniorangeID = get_option( 'mo2f_miniorange_admin' );
|
260 |
$is_customer_admin = $miniorangeID == $current_userID ? true : false;
|
261 |
+
|
262 |
if(is_null($miniorangeID) or $miniorangeID =='')
|
263 |
$is_customer_admin = true;
|
264 |
+
|
265 |
if($is_customer_admin)
|
266 |
{
|
267 |
update_option('is_onprem', 0);
|
271 |
{
|
272 |
$adminUser = get_user_by('id',$miniorangeID);
|
273 |
$email = $adminUser->user_email;
|
274 |
+
wp_send_json($email);
|
275 |
}
|
276 |
+
|
277 |
}
|
278 |
}
|
279 |
|
280 |
function mo2f_unlimitted_user()
|
281 |
+
{
|
282 |
if(!wp_verify_nonce($_POST['nonce'],'unlimittedUserNonce'))
|
283 |
{
|
284 |
echo "NonceDidNotMatch";
|
305 |
else
|
306 |
{
|
307 |
echo "OnPremiseDeactive";
|
308 |
+
exit;
|
309 |
}
|
310 |
}
|
311 |
}
|
312 |
function mo2f_save_email_verification()
|
313 |
+
{
|
314 |
+
|
315 |
if(!wp_verify_nonce($_POST['nonce'],'EmailVerificationSaveNonce'))
|
316 |
{
|
317 |
echo "NonceDidNotMatch";
|
328 |
{
|
329 |
$twofactor_transactions = new Mo2fDB;
|
330 |
$exceeded = $twofactor_transactions->check_alluser_limit_exceeded($user_id);
|
331 |
+
|
332 |
if($exceeded){
|
333 |
echo "USER_LIMIT_EXCEEDED";
|
334 |
exit;
|
335 |
}
|
336 |
}
|
337 |
+
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
|
338 |
{
|
339 |
$error = true;
|
340 |
}
|
341 |
if($email!='' && !$error)
|
342 |
{
|
343 |
global $Mo2fdbQueries;
|
344 |
+
if($currentMethod == 'EmailVerification')
|
345 |
+
{
|
346 |
+
$Mo2fdbQueries->update_user_details(get_current_user_id(),array(
|
347 |
'mo2f_EmailVerification_config_status'=>true,
|
348 |
'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS',
|
349 |
'mo2f_configured_2FA_method'=>"Email Verification",
|
350 |
'mo2f_user_email' => $email
|
351 |
+
));
|
352 |
+
}
|
353 |
+
else
|
354 |
+
{
|
355 |
+
$Mo2fdbQueries->update_user_details(get_current_user_id(),array(
|
356 |
+
'mo2f_EmailVerification_config_status'=>true,
|
357 |
+
'mo2f_user_email' => $email
|
358 |
+
));
|
359 |
+
|
360 |
+
}
|
361 |
+
update_user_meta($user_id,'tempEmail',$email);
|
362 |
echo "settingsSaved";
|
363 |
exit;
|
364 |
}
|
369 |
}
|
370 |
|
371 |
}
|
372 |
+
|
373 |
}
|
374 |
function CheckEVStatus()
|
375 |
{
|
376 |
if(isset($_POST['txid']))
|
377 |
{
|
378 |
$txid = sanitize_text_field($_POST['txid']);
|
379 |
+
$status = get_site_option($txid);
|
380 |
if($status ==1 || $status ==0)
|
381 |
delete_site_option($_POST['txid']);
|
382 |
echo $status;
|
388 |
|
389 |
|
390 |
}
|
391 |
+
|
392 |
new mo_2f_ajax;
|
393 |
?>
|
controllers/upgrade.php
CHANGED
@@ -1,2 +1,2 @@
|
|
1 |
-
<?php
|
2 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'upgrade.php';
|
1 |
+
<?php
|
2 |
include $mo2f_dirName . 'views'.DIRECTORY_SEPARATOR.'upgrade.php';
|
controllers/wpns-loginsecurity-ajax.php
CHANGED
@@ -1,1171 +1,1209 @@
|
|
1 |
-
<?php
|
2 |
-
class wpns_ajax
|
3 |
-
{
|
4 |
-
function __construct(){
|
5 |
-
//add comment here
|
6 |
-
add_action( 'admin_init' , array( $this, 'mo_login_security_ajax' ) );
|
7 |
-
}
|
8 |
-
|
9 |
-
function mo_login_security_ajax(){
|
10 |
-
|
11 |
-
add_action( 'wp_ajax_wpns_login_security', array($this,'wpns_login_security') );
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
case "
|
20 |
-
$this->
|
21 |
-
case "
|
22 |
-
$this->
|
23 |
-
|
24 |
-
$this->
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
case
|
32 |
-
$this->
|
33 |
-
case
|
34 |
-
$this->
|
35 |
-
case
|
36 |
-
$this->
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
}
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
$
|
198 |
-
$
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
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 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
}
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
$
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
$
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
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 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
$
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
$
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
$file
|
632 |
-
$file
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
$
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
$file = $
|
695 |
-
$file
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
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 |
-
if(
|
749 |
-
{
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
$
|
756 |
-
|
757 |
-
$file
|
758 |
-
$file
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
$file
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
}
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
$
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
$
|
819 |
-
$file
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
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 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
if(
|
873 |
-
{
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
$
|
880 |
-
|
881 |
-
$file
|
882 |
-
$file
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
$
|
961 |
-
$file
|
962 |
-
|
963 |
-
$
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
$
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
$
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
if(
|
1088 |
-
{
|
1089 |
-
$
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
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 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
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 |
-
|
1161 |
-
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1171 |
?>
|
1 |
+
<?php
|
2 |
+
class wpns_ajax
|
3 |
+
{
|
4 |
+
function __construct(){
|
5 |
+
//add comment here
|
6 |
+
add_action( 'admin_init' , array( $this, 'mo_login_security_ajax' ) );
|
7 |
+
}
|
8 |
+
|
9 |
+
function mo_login_security_ajax(){
|
10 |
+
|
11 |
+
add_action( 'wp_ajax_wpns_login_security', array($this,'wpns_login_security') );
|
12 |
+
add_action( 'wp_ajax_mo2f_ajax', array($this,'mo2f_ajax') );
|
13 |
+
add_action( 'wp_ajax_nopriv_mo2f_ajax', array($this,'mo2f_ajax') );
|
14 |
+
}
|
15 |
+
|
16 |
+
function mo2f_ajax(){
|
17 |
+
$GLOBALS['mo2f_is_ajax_request'] = true;
|
18 |
+
switch ($_POST['mo2f_ajax_option']) {
|
19 |
+
case "mo2f_ajax_kba":
|
20 |
+
$this->mo2f_ajax_kba();break;
|
21 |
+
case "mo2f_ajax_login":
|
22 |
+
$this->mo2f_ajax_login(); break;
|
23 |
+
case "mo2f_ajax_otp":
|
24 |
+
$this->mo2f_ajax_otp(); break;
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
function wpns_login_security(){
|
29 |
+
switch($_POST['wpns_loginsecurity_ajax'])
|
30 |
+
{
|
31 |
+
case "wpns_bruteforce_form":
|
32 |
+
$this->wpns_handle_bf_configuration_form(); break;
|
33 |
+
case "wpns_save_captcha":
|
34 |
+
$this->wpns_captcha_settings();break;
|
35 |
+
case "save_strong_password":
|
36 |
+
$this->wpns_strong_password_settings();break;
|
37 |
+
case 'wpns_ManualIPBlock_form':
|
38 |
+
$this->wpns_handle_IP_blocking();break;
|
39 |
+
case 'wpns_WhitelistIP_form':
|
40 |
+
$this->wpns_whitelist_ip(); break;
|
41 |
+
case 'wpns_waf_settings_form':
|
42 |
+
$this->wpns_waf_settings_form(); break;
|
43 |
+
case 'wpns_waf_rate_limiting_form':
|
44 |
+
$this->wpns_waf_rate_limiting_form(); break;
|
45 |
+
case 'wpns_ip_lookup':
|
46 |
+
$this->wpns_ip_lookup(); break;
|
47 |
+
case 'wpns_all_plans':
|
48 |
+
$this->wpns_all_plans(); break;
|
49 |
+
case 'wpns_logout_form':
|
50 |
+
$this->wpns_logout_form(); break;
|
51 |
+
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
|
56 |
+
function mo2f_ajax_otp(){
|
57 |
+
$obj = new Miniorange_Password_2Factor_Login();
|
58 |
+
$obj->check_miniorange_soft_token($_POST);
|
59 |
+
}
|
60 |
+
function mo2f_ajax_kba(){
|
61 |
+
$obj = new Miniorange_Password_2Factor_Login();
|
62 |
+
$obj->check_kba_validation($_POST);
|
63 |
+
}
|
64 |
+
function mo2f_ajax_login()
|
65 |
+
{
|
66 |
+
if(!wp_verify_nonce(sanitize_text_field($_POST['nonce']),'miniorange-2-factor-login-nonce'))
|
67 |
+
{
|
68 |
+
wp_send_json("ERROR");
|
69 |
+
exit;
|
70 |
+
}
|
71 |
+
else
|
72 |
+
{
|
73 |
+
$username = sanitize_text_field($_POST['username']);
|
74 |
+
$password = sanitize_text_field($_POST['password'] );
|
75 |
+
apply_filters( 'authenticate', null, $username, $password );
|
76 |
+
}
|
77 |
+
}
|
78 |
+
function wpns_logout_form()
|
79 |
+
{
|
80 |
+
global $moWpnsUtility;
|
81 |
+
if( !$moWpnsUtility->check_empty_or_null( get_option('mo_wpns_registration_status') ) ) {
|
82 |
+
delete_option('mo2f_email');
|
83 |
+
}
|
84 |
+
delete_option('mo2f_customerKey');
|
85 |
+
delete_option('mo2f_api_key');
|
86 |
+
delete_option('mo2f_customer_token');
|
87 |
+
delete_option('mo_wpns_transactionId');
|
88 |
+
delete_option('mo_wpns_registration_status');
|
89 |
+
delete_option( 'mo_2factor_admin_registration_status' );
|
90 |
+
|
91 |
+
$two_fa_settings = new Miniorange_Authentication();
|
92 |
+
$two_fa_settings->mo_auth_deactivate();
|
93 |
+
|
94 |
+
}
|
95 |
+
function wpns_all_plans()
|
96 |
+
{
|
97 |
+
$mo2f_all_plannames = $_POST['planname'];
|
98 |
+
update_option('mo2f_planname', $mo2f_all_plannames);
|
99 |
+
if ($mo2f_all_plannames == 'addon_plan')
|
100 |
+
{
|
101 |
+
update_option('mo2f_planname', 'addon_plan');
|
102 |
+
}
|
103 |
+
elseif ($mo2f_all_plannames == '2fa_plan')
|
104 |
+
{
|
105 |
+
update_option('mo2f_planname', '2fa_plan');
|
106 |
+
}
|
107 |
+
}
|
108 |
+
function wpns_handle_bf_configuration_form(){
|
109 |
+
|
110 |
+
$nonce = $_POST['nonce'];
|
111 |
+
if ( ! wp_verify_nonce( $nonce, 'wpns-brute-force' ) ){
|
112 |
+
wp_send_json('ERROR');
|
113 |
+
return;
|
114 |
+
}
|
115 |
+
$brute_force = $_POST['bf_enabled/disabled'];
|
116 |
+
if($brute_force == 'true'){$brute_force = "on";}else if($brute_force == 'false') {$brute_force = "";}
|
117 |
+
$login_attempts = $_POST['allwed_login_attempts'];
|
118 |
+
$blocking_type = $_POST['time_of_blocking_type'];
|
119 |
+
$blocking_value = isset($_POST['time_of_blocking_val']) ? $_POST['time_of_blocking_val'] : false;
|
120 |
+
$show_login_attempts= $_POST['show_remaining_attempts'];
|
121 |
+
if($show_login_attempts == 'true'){$show_login_attempts = "on";} else if($show_login_attempts == 'false') { $show_login_attempts = "";}
|
122 |
+
if($brute_force == 'on' && $login_attempts == "" ){
|
123 |
+
wp_send_json('empty');
|
124 |
+
return;
|
125 |
+
}
|
126 |
+
update_option( 'mo2f_enable_brute_force' , $brute_force );
|
127 |
+
update_option( 'mo2f_allwed_login_attempts' , $login_attempts );
|
128 |
+
update_option( 'mo_wpns_time_of_blocking_type' , $blocking_type );
|
129 |
+
update_option( 'mo_wpns_time_of_blocking_val' , $blocking_value );
|
130 |
+
update_option('mo2f_show_remaining_attempts' , $show_login_attempts );
|
131 |
+
if($brute_force == "on"){
|
132 |
+
wp_send_json('true');
|
133 |
+
}
|
134 |
+
else if($brute_force == ""){
|
135 |
+
wp_send_json('false');
|
136 |
+
}
|
137 |
+
|
138 |
+
}
|
139 |
+
function wpns_handle_IP_blocking()
|
140 |
+
{
|
141 |
+
|
142 |
+
global $mo2f_dirName;
|
143 |
+
if(!wp_verify_nonce($_POST['nonce'],'manualIPBlockingNonce'))
|
144 |
+
{
|
145 |
+
echo "NonceDidNotMatch";
|
146 |
+
exit;
|
147 |
+
}
|
148 |
+
else
|
149 |
+
{
|
150 |
+
include_once($mo2f_dirName.'controllers'.DIRECTORY_SEPARATOR.'ip-blocking.php');
|
151 |
+
}
|
152 |
+
}
|
153 |
+
function wpns_whitelist_ip()
|
154 |
+
{
|
155 |
+
global $mo2f_dirName;
|
156 |
+
if(!wp_verify_nonce($_POST['nonce'],'IPWhiteListingNonce'))
|
157 |
+
{
|
158 |
+
echo "NonceDidNotMatch";
|
159 |
+
exit;
|
160 |
+
}
|
161 |
+
else
|
162 |
+
{
|
163 |
+
include_once($mo2f_dirName.'controllers'.DIRECTORY_SEPARATOR.'ip-blocking.php');
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
function wpns_ip_lookup()
|
168 |
+
{
|
169 |
+
|
170 |
+
if(!wp_verify_nonce($_POST['nonce'],'IPLookUPNonce'))
|
171 |
+
{
|
172 |
+
echo "NonceDidNotMatch";
|
173 |
+
exit;
|
174 |
+
}
|
175 |
+
else
|
176 |
+
{
|
177 |
+
$ip = $_POST['IP'];
|
178 |
+
if(!preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/',$ip))
|
179 |
+
{
|
180 |
+
echo("INVALID_IP_FORMAT");
|
181 |
+
exit;
|
182 |
+
}
|
183 |
+
else if(! filter_var($ip, FILTER_VALIDATE_IP)){
|
184 |
+
echo("INVALID_IP");
|
185 |
+
exit;
|
186 |
+
}
|
187 |
+
$result=@json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip),true);
|
188 |
+
$hostname = gethostbyaddr($result["geoplugin_request"]);
|
189 |
+
try{
|
190 |
+
$timeoffset = timezone_offset_get(new DateTimeZone($result["geoplugin_timezone"]),new DateTime('now'));
|
191 |
+
$timeoffset = $timeoffset/3600;
|
192 |
+
|
193 |
+
}catch(Exception $e){
|
194 |
+
$result["geoplugin_timezone"]="";
|
195 |
+
$timeoffset="";
|
196 |
+
}
|
197 |
+
$ipLookUpTemplate = MoWpnsConstants::IP_LOOKUP_TEMPLATE;
|
198 |
+
if($result['geoplugin_request']==$ip) {
|
199 |
+
|
200 |
+
$ipLookUpTemplate = str_replace("{{status}}", $result["geoplugin_status"], $ipLookUpTemplate);
|
201 |
+
$ipLookUpTemplate = str_replace("{{ip}}", $result["geoplugin_request"], $ipLookUpTemplate);
|
202 |
+
$ipLookUpTemplate = str_replace("{{region}}", $result["geoplugin_region"], $ipLookUpTemplate);
|
203 |
+
$ipLookUpTemplate = str_replace("{{country}}", $result["geoplugin_countryName"], $ipLookUpTemplate);
|
204 |
+
$ipLookUpTemplate = str_replace("{{city}}", $result["geoplugin_city"], $ipLookUpTemplate);
|
205 |
+
$ipLookUpTemplate = str_replace("{{continent}}", $result["geoplugin_continentName"], $ipLookUpTemplate);
|
206 |
+
$ipLookUpTemplate = str_replace("{{latitude}}", $result["geoplugin_latitude"], $ipLookUpTemplate);
|
207 |
+
$ipLookUpTemplate = str_replace("{{longitude}}", $result["geoplugin_longitude"], $ipLookUpTemplate);
|
208 |
+
$ipLookUpTemplate = str_replace("{{timezone}}", $result["geoplugin_timezone"], $ipLookUpTemplate);
|
209 |
+
$ipLookUpTemplate = str_replace("{{curreny_code}}", $result["geoplugin_currencyCode"], $ipLookUpTemplate);
|
210 |
+
$ipLookUpTemplate = str_replace("{{curreny_symbol}}", $result["geoplugin_currencySymbol"], $ipLookUpTemplate);
|
211 |
+
$ipLookUpTemplate = str_replace("{{per_dollar_value}}", $result["geoplugin_currencyConverter"], $ipLookUpTemplate);
|
212 |
+
$ipLookUpTemplate = str_replace("{{hostname}}", $hostname, $ipLookUpTemplate);
|
213 |
+
$ipLookUpTemplate = str_replace("{{offset}}", $timeoffset, $ipLookUpTemplate);
|
214 |
+
|
215 |
+
$result['ipDetails'] = $ipLookUpTemplate;
|
216 |
+
}else{
|
217 |
+
$result["ipDetails"]["status"]="ERROR";
|
218 |
+
}
|
219 |
+
wp_send_json( $result );
|
220 |
+
}
|
221 |
+
}
|
222 |
+
function wpns_waf_settings_form()
|
223 |
+
{
|
224 |
+
$dir_name = dirname(__FILE__);
|
225 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
226 |
+
$dir_name = $dir_name1[0];
|
227 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
228 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
229 |
+
|
230 |
+
if(!file_exists($fileName))
|
231 |
+
{
|
232 |
+
$file = fopen($fileName, "a+");
|
233 |
+
$string = "<?php".PHP_EOL;
|
234 |
+
$string .= '$SQL=1;'.PHP_EOL;
|
235 |
+
$string .= '$XSS=1;'.PHP_EOL;
|
236 |
+
$string .= '$RCE=0;'.PHP_EOL;
|
237 |
+
$string .= '$LFI=0;'.PHP_EOL;
|
238 |
+
$string .= '$RFI=0;'.PHP_EOL;
|
239 |
+
$string .= '$RateLimiting=1;'.PHP_EOL;
|
240 |
+
$string .= '$RequestsPMin=120;'.PHP_EOL;
|
241 |
+
$string .= '$actionRateL="ThrottleIP";'.PHP_EOL;
|
242 |
+
$string .= '?>'.PHP_EOL;
|
243 |
+
|
244 |
+
fwrite($file, $string);
|
245 |
+
fclose($file);
|
246 |
+
}
|
247 |
+
else
|
248 |
+
{
|
249 |
+
if(!is_writable($fileName) or !is_readable($fileName))
|
250 |
+
{
|
251 |
+
echo "FilePermissionDenied";
|
252 |
+
exit;
|
253 |
+
}
|
254 |
+
}
|
255 |
+
|
256 |
+
if(!wp_verify_nonce($_POST['nonce'],'WAFsettingNonce'))
|
257 |
+
{
|
258 |
+
var_dump("NonceDidNotMatch");
|
259 |
+
exit;
|
260 |
+
}
|
261 |
+
else
|
262 |
+
{
|
263 |
+
switch ($_POST['optionValue']) {
|
264 |
+
case "SQL":
|
265 |
+
$this->savesql(); break;
|
266 |
+
case "XSS":
|
267 |
+
$this->savexss(); break;
|
268 |
+
case "RCE":
|
269 |
+
$this->saverce(); break;
|
270 |
+
case "RFI":
|
271 |
+
$this->saverfi(); break;
|
272 |
+
case "LFI":
|
273 |
+
$this->savelfi(); break;
|
274 |
+
case "WAF":
|
275 |
+
$this->saveWAF(); break;
|
276 |
+
case "HWAF":
|
277 |
+
$this->saveHWAF(); break;
|
278 |
+
case "backupHtaccess":
|
279 |
+
$this->backupHtaccess(); break;
|
280 |
+
case "limitAttack":
|
281 |
+
$this->limitAttack(); break;
|
282 |
+
default:
|
283 |
+
break;
|
284 |
+
}
|
285 |
+
|
286 |
+
}
|
287 |
+
|
288 |
+
}
|
289 |
+
function wpns_waf_rate_limiting_form()
|
290 |
+
{
|
291 |
+
if(!wp_verify_nonce($_POST['nonce'],'RateLimitingNonce'))
|
292 |
+
{
|
293 |
+
echo "NonceDidNotMatch";
|
294 |
+
exit;
|
295 |
+
}
|
296 |
+
else
|
297 |
+
{
|
298 |
+
if(get_site_option('WAFEnabled') != 1)
|
299 |
+
{
|
300 |
+
echo "WAFNotEnabled";
|
301 |
+
exit;
|
302 |
+
}
|
303 |
+
|
304 |
+
if($_POST['Requests']!='')
|
305 |
+
{
|
306 |
+
if(is_numeric($_POST['Requests']))
|
307 |
+
{
|
308 |
+
$dir_name = dirname(__FILE__);
|
309 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
310 |
+
$dir_name = $dir_name1[0];
|
311 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
312 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
313 |
+
|
314 |
+
$file = file_get_contents($fileName);
|
315 |
+
$data = $file;
|
316 |
+
|
317 |
+
$req = sanitize_text_field($_POST['Requests']);
|
318 |
+
if($req >1)
|
319 |
+
{
|
320 |
+
update_option('Rate_request',$req);
|
321 |
+
if(isset($_POST['rateCheck']))
|
322 |
+
{
|
323 |
+
if($_POST['rateCheck'] == 'on')
|
324 |
+
{
|
325 |
+
update_option('Rate_limiting','1');
|
326 |
+
echo "RateEnabled";
|
327 |
+
if(strpos($file, 'RateLimiting')!=false)
|
328 |
+
{
|
329 |
+
$file = str_replace('$RateLimiting=0;', '$RateLimiting=1;', $file);
|
330 |
+
$data = $file;
|
331 |
+
file_put_contents($fileName,$file);
|
332 |
+
|
333 |
+
}
|
334 |
+
else
|
335 |
+
{
|
336 |
+
$content = explode('?>', $file);
|
337 |
+
$file = $content[0];
|
338 |
+
$file .= PHP_EOL;
|
339 |
+
$file .= '$RateLimiting=1;'.PHP_EOL;
|
340 |
+
$file .='?>';
|
341 |
+
file_put_contents($fileName,$file);
|
342 |
+
$data = $file;
|
343 |
+
}
|
344 |
+
|
345 |
+
|
346 |
+
}
|
347 |
+
}
|
348 |
+
else
|
349 |
+
{
|
350 |
+
update_option('Rate_limiting','0');
|
351 |
+
echo "Ratedisabled";
|
352 |
+
if(strpos($file, 'RateLimiting')!=false)
|
353 |
+
{
|
354 |
+
$file = str_replace('$RateLimiting=1;', '$RateLimiting=0;', $file);
|
355 |
+
$data = $file;
|
356 |
+
file_put_contents($fileName,$file);
|
357 |
+
}
|
358 |
+
else
|
359 |
+
{
|
360 |
+
$content = explode('?>', $file);
|
361 |
+
$file = $content[0];
|
362 |
+
$file .= PHP_EOL;
|
363 |
+
$file .= '$RateLimiting=0;'.PHP_EOL;
|
364 |
+
$file .='?>';
|
365 |
+
file_put_contents($fileName,$file);
|
366 |
+
$data = $file;
|
367 |
+
}
|
368 |
+
|
369 |
+
}
|
370 |
+
|
371 |
+
|
372 |
+
$file = $data;
|
373 |
+
if(strpos($file, 'RequestsPMin')!=false)
|
374 |
+
{
|
375 |
+
$content = explode(PHP_EOL, $file);
|
376 |
+
$con = '';
|
377 |
+
$len = sizeof($content);
|
378 |
+
|
379 |
+
for($i=0;$i<$len;$i++)
|
380 |
+
{
|
381 |
+
if(strpos($content[$i], 'RequestsPMin')!=false)
|
382 |
+
{
|
383 |
+
$con.='$RequestsPMin='.$req.';'.PHP_EOL;
|
384 |
+
}
|
385 |
+
else
|
386 |
+
{
|
387 |
+
$con .= $content[$i].PHP_EOL;
|
388 |
+
}
|
389 |
+
}
|
390 |
+
|
391 |
+
file_put_contents($fileName,$con);
|
392 |
+
$data = $con;
|
393 |
+
|
394 |
+
}
|
395 |
+
|
396 |
+
else
|
397 |
+
{
|
398 |
+
$content = explode('?>', $file);
|
399 |
+
$file = $content[0];
|
400 |
+
$file .= PHP_EOL;
|
401 |
+
$file .= '$RequestsPMin='.$req.';'.PHP_EOL;
|
402 |
+
$file .='?>';
|
403 |
+
file_put_contents($fileName,$file);
|
404 |
+
$data = $file;
|
405 |
+
}
|
406 |
+
|
407 |
+
if($_POST['actionOnLimitE']=='BlockIP' || $_POST['actionOnLimitE'] == 1)
|
408 |
+
{
|
409 |
+
update_option('actionRateL',1);
|
410 |
+
|
411 |
+
$file = $data;
|
412 |
+
if(strpos($file, 'actionRateL')!=false)
|
413 |
+
{
|
414 |
+
$content = explode(PHP_EOL, $file);
|
415 |
+
$con = '';
|
416 |
+
foreach ($content as $line => $lineV) {
|
417 |
+
if(strpos($lineV, 'actionRateL')!=false)
|
418 |
+
{
|
419 |
+
$con.='$actionRateL="BlockIP";'.PHP_EOL;
|
420 |
+
}
|
421 |
+
else
|
422 |
+
{
|
423 |
+
$con .= $lineV.PHP_EOL;
|
424 |
+
}
|
425 |
+
}
|
426 |
+
file_put_contents($fileName,$con);
|
427 |
+
}
|
428 |
+
else
|
429 |
+
{
|
430 |
+
$content = explode('?>', $file);
|
431 |
+
$file = $content[0];
|
432 |
+
$file .= PHP_EOL;
|
433 |
+
$file .= '$actionRateL="BlockIP";'.PHP_EOL;
|
434 |
+
$file .='?>';
|
435 |
+
file_put_contents($fileName,$file);
|
436 |
+
$file = $data;
|
437 |
+
}
|
438 |
+
}
|
439 |
+
else if($_POST['actionOnLimitE']=='ThrottleIP' || $_POST['actionOnLimitE'] == 0)
|
440 |
+
{
|
441 |
+
|
442 |
+
$file = $data;
|
443 |
+
update_option('actionRateL',0);
|
444 |
+
if(strpos($file, 'actionRateL')!=false)
|
445 |
+
{
|
446 |
+
$content = explode(PHP_EOL, $file);
|
447 |
+
$con = '';
|
448 |
+
foreach ($content as $line => $lineV) {
|
449 |
+
if(strpos($lineV, 'actionRateL')!=false)
|
450 |
+
{
|
451 |
+
$con.='$actionRateL="ThrottleIP";'.PHP_EOL;
|
452 |
+
}
|
453 |
+
else
|
454 |
+
{
|
455 |
+
$con .= $lineV.PHP_EOL;
|
456 |
+
}
|
457 |
+
}
|
458 |
+
file_put_contents($fileName,$con);
|
459 |
+
}
|
460 |
+
else
|
461 |
+
{
|
462 |
+
$content = explode('?>', $file);
|
463 |
+
$file = $content[0];
|
464 |
+
$file .= PHP_EOL;
|
465 |
+
$file .= '$actionRateL="ThrottleIP";'.PHP_EOL;
|
466 |
+
$file .='?>';
|
467 |
+
file_put_contents($fileName,$file);
|
468 |
+
}
|
469 |
+
}
|
470 |
+
|
471 |
+
}
|
472 |
+
exit;
|
473 |
+
}
|
474 |
+
|
475 |
+
|
476 |
+
|
477 |
+
}
|
478 |
+
echo("Error");
|
479 |
+
exit;
|
480 |
+
}
|
481 |
+
|
482 |
+
|
483 |
+
}
|
484 |
+
|
485 |
+
private function saveWAF()
|
486 |
+
{
|
487 |
+
if(isset($_POST['pluginWAF']))
|
488 |
+
{
|
489 |
+
if($_POST['pluginWAF']=='on')
|
490 |
+
{
|
491 |
+
update_option('WAF','PluginLevel');
|
492 |
+
update_option('WAFEnabled','1');
|
493 |
+
echo("PWAFenabled");exit;
|
494 |
+
}
|
495 |
+
}
|
496 |
+
else
|
497 |
+
{
|
498 |
+
update_option('WAFEnabled','0');
|
499 |
+
update_option('WAF','wafDisable');
|
500 |
+
echo("PWAFdisabled");exit;
|
501 |
+
}
|
502 |
+
}
|
503 |
+
private function saveHWAF()
|
504 |
+
{
|
505 |
+
if(!function_exists('mysqli_connect'))
|
506 |
+
{
|
507 |
+
echo "mysqliDoesNotExit";
|
508 |
+
exit;
|
509 |
+
}
|
510 |
+
if(isset($_POST['htaccessWAF']))
|
511 |
+
{
|
512 |
+
if($_POST['htaccessWAF']=='on')
|
513 |
+
{
|
514 |
+
update_option('WAF','HtaccessLevel');
|
515 |
+
update_option('WAFEnabled','1');
|
516 |
+
$dir_name = dirname(__FILE__);
|
517 |
+
$dirN = $dir_name;
|
518 |
+
$dirN = str_replace('\\', '/', $dirN);
|
519 |
+
$dirN = str_replace('controllers', 'handler', $dirN);
|
520 |
+
|
521 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
522 |
+
$dir_name = $dir_name1[0];
|
523 |
+
$dir_name1 = str_replace('\\', '/', $dir_name1[0]);
|
524 |
+
$dir_name .='.htaccess';
|
525 |
+
$file = file_get_contents($dir_name);
|
526 |
+
if(strpos($file, 'php_value auto_prepend_file')!=false)
|
527 |
+
{
|
528 |
+
echo("WAFConflicts");
|
529 |
+
exit;
|
530 |
+
}
|
531 |
+
|
532 |
+
$cont = $file.PHP_EOL.'# BEGIN miniOrange WAF'.PHP_EOL;
|
533 |
+
$cont .= 'php_value auto_prepend_file '.$dir_name1.'mo-check.php'.PHP_EOL;
|
534 |
+
$cont .= '# END miniOrange WAF'.PHP_EOL;
|
535 |
+
file_put_contents($dir_name, $cont);
|
536 |
+
|
537 |
+
$filecontent = file_get_contents($dir_name);
|
538 |
+
|
539 |
+
$dir_name = dirname(__FILE__);
|
540 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
541 |
+
$dir_name = $dir_name1[0];
|
542 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
543 |
+
$fileName = $filepath.'mo-check.php';
|
544 |
+
$file = fopen($fileName, 'w+');
|
545 |
+
$dir_name = dirname(__FILE__);
|
546 |
+
$filepath = str_replace('\\', '/', $dir_name);
|
547 |
+
$filepath = explode('controllers', $filepath);
|
548 |
+
$filepath = $filepath[0].'handler'.DIRECTORY_SEPARATOR.'WAF'.DIRECTORY_SEPARATOR.'mo-waf.php';
|
549 |
+
|
550 |
+
$string = '<?php'.PHP_EOL;
|
551 |
+
$string .= 'if(file_exists("'.$filepath.'"))'.PHP_EOL;
|
552 |
+
$string .= 'include_once("'.$filepath.'");'.PHP_EOL;
|
553 |
+
$string .= '?>'.PHP_EOL;
|
554 |
+
|
555 |
+
fwrite($file, $string);
|
556 |
+
fclose($file);
|
557 |
+
|
558 |
+
if(strpos($filecontent,'mo-check.php')!=false)
|
559 |
+
{
|
560 |
+
echo "HWAFEnabled";
|
561 |
+
exit;
|
562 |
+
}
|
563 |
+
else
|
564 |
+
{
|
565 |
+
echo "HWAFEnabledFailed";
|
566 |
+
exit;
|
567 |
+
}
|
568 |
+
}
|
569 |
+
}
|
570 |
+
else
|
571 |
+
{
|
572 |
+
update_option('WAF','wafDisable');
|
573 |
+
if(isset($_POST['pluginWAF']))
|
574 |
+
{
|
575 |
+
if($_POST['pluginWAF'] == 'on')
|
576 |
+
{
|
577 |
+
update_option('WAFEnabled',1);
|
578 |
+
update_option('WAF','PluginLevel');
|
579 |
+
}
|
580 |
+
}
|
581 |
+
else
|
582 |
+
update_option('WAFEnabled',0);
|
583 |
+
$dir_name = dirname(__FILE__);
|
584 |
+
$dirN = $dir_name;
|
585 |
+
$dirN = str_replace('\\', '/', $dirN);
|
586 |
+
$dirN = explode('wp-content', $dirN);
|
587 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
588 |
+
$dir_name = $dir_name1[0];
|
589 |
+
$dir_name1 = str_replace('\\', '/', $dir_name1[0]);
|
590 |
+
$dir_name00 = $dir_name1;
|
591 |
+
$dir_name1 .='.htaccess';
|
592 |
+
$file = file_get_contents($dir_name1);
|
593 |
+
|
594 |
+
$cont = PHP_EOL.'# BEGIN miniOrange WAF'.PHP_EOL;
|
595 |
+
$cont .= 'php_value auto_prepend_file '.$dir_name00.'mo-check.php'.PHP_EOL;
|
596 |
+
$cont .= '# END miniOrange WAF'.PHP_EOL;
|
597 |
+
$file =str_replace($cont,'',$file);
|
598 |
+
file_put_contents($dir_name1, $file);
|
599 |
+
|
600 |
+
$filecontent = file_get_contents($dir_name1);
|
601 |
+
if(strpos($filecontent,'mo-check.php')==false)
|
602 |
+
{
|
603 |
+
echo "HWAFdisabled";
|
604 |
+
exit;
|
605 |
+
}
|
606 |
+
else
|
607 |
+
{
|
608 |
+
echo "HWAFdisabledFailed";
|
609 |
+
exit;
|
610 |
+
}
|
611 |
+
}
|
612 |
+
|
613 |
+
|
614 |
+
}
|
615 |
+
private function savesql()
|
616 |
+
{
|
617 |
+
if(isset($_POST['SQL']))
|
618 |
+
{
|
619 |
+
if($_POST['SQL']=='on')
|
620 |
+
{
|
621 |
+
update_option('SQLInjection',1);
|
622 |
+
$dir_name = dirname(__FILE__);
|
623 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
624 |
+
$dir_name = $dir_name1[0];
|
625 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
626 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
627 |
+
|
628 |
+
$file = file_get_contents($fileName);
|
629 |
+
if(strpos($file, 'SQL')!=false)
|
630 |
+
{
|
631 |
+
$file = str_replace('$SQL=0;', '$SQL=1;', $file);
|
632 |
+
file_put_contents($fileName,$file);
|
633 |
+
}
|
634 |
+
else
|
635 |
+
{
|
636 |
+
$content = explode('?>', $file);
|
637 |
+
$file = $content[0];
|
638 |
+
$file .= PHP_EOL;
|
639 |
+
$file .= '$SQL=1;'.PHP_EOL;
|
640 |
+
$file .='?>';
|
641 |
+
file_put_contents($fileName,$file);
|
642 |
+
}
|
643 |
+
echo("SQLenable");
|
644 |
+
exit;
|
645 |
+
|
646 |
+
}
|
647 |
+
}
|
648 |
+
else
|
649 |
+
{
|
650 |
+
update_option('SQLInjection',0);
|
651 |
+
|
652 |
+
$dir_name = dirname(__FILE__);
|
653 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
654 |
+
$dir_name = $dir_name1[0];
|
655 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
656 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
657 |
+
|
658 |
+
$file = file_get_contents($fileName);
|
659 |
+
if(strpos($file, '$SQL')!=false)
|
660 |
+
{
|
661 |
+
$file = str_replace('$SQL=1;', '$SQL=0;', $file);
|
662 |
+
file_put_contents($fileName,$file);
|
663 |
+
}
|
664 |
+
else
|
665 |
+
{
|
666 |
+
$content = explode('?>', $file);
|
667 |
+
$file = $content[0];
|
668 |
+
$file .= PHP_EOL;
|
669 |
+
$file .= '$SQL=0;'.PHP_EOL;
|
670 |
+
$file .='?>';
|
671 |
+
file_put_contents($fileName,$file);
|
672 |
+
}
|
673 |
+
|
674 |
+
echo("SQLdisable");
|
675 |
+
exit;
|
676 |
+
|
677 |
+
}
|
678 |
+
|
679 |
+
}
|
680 |
+
private function saverce()
|
681 |
+
{
|
682 |
+
if(isset($_POST['RCE']))
|
683 |
+
{
|
684 |
+
if($_POST['RCE']=='on')
|
685 |
+
{
|
686 |
+
update_option('RCEAttack',1);
|
687 |
+
|
688 |
+
$dir_name = dirname(__FILE__);
|
689 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
690 |
+
$dir_name = $dir_name1[0];
|
691 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
692 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
693 |
+
|
694 |
+
$file = file_get_contents($fileName);
|
695 |
+
if(strpos($file, 'RCE')!=false)
|
696 |
+
{
|
697 |
+
$file = str_replace('$RCE=0;', '$RCE=1;', $file);
|
698 |
+
file_put_contents($fileName,$file);
|
699 |
+
}
|
700 |
+
else
|
701 |
+
{
|
702 |
+
$content = explode('?>', $file);
|
703 |
+
$file = $content[0];
|
704 |
+
$file .= PHP_EOL;
|
705 |
+
$file .= '$RCE=1;'.PHP_EOL;
|
706 |
+
$file .='?>';
|
707 |
+
file_put_contents($fileName,$file);
|
708 |
+
}
|
709 |
+
echo("RCEenable");
|
710 |
+
exit;
|
711 |
+
}
|
712 |
+
}
|
713 |
+
else
|
714 |
+
{
|
715 |
+
update_option('RCEAttack',0);
|
716 |
+
|
717 |
+
$dir_name = dirname(__FILE__);
|
718 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
719 |
+
$dir_name = $dir_name1[0];
|
720 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
721 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
722 |
+
|
723 |
+
$file = file_get_contents($fileName);
|
724 |
+
if(strpos($file, '$RCE')!=false)
|
725 |
+
{
|
726 |
+
$file = str_replace('$RCE=1;', '$RCE=0;', $file);
|
727 |
+
file_put_contents($fileName,$file);
|
728 |
+
}
|
729 |
+
else
|
730 |
+
{
|
731 |
+
$content = explode('?>', $file);
|
732 |
+
$file = $content[0];
|
733 |
+
$file .= PHP_EOL;
|
734 |
+
$file .= '$RCE=0;'.PHP_EOL;
|
735 |
+
$file .='?>';
|
736 |
+
file_put_contents($fileName,$file);
|
737 |
+
}
|
738 |
+
echo("RCEdisable");
|
739 |
+
exit;
|
740 |
+
|
741 |
+
}
|
742 |
+
|
743 |
+
}
|
744 |
+
private function savexss()
|
745 |
+
{
|
746 |
+
if(isset($_POST['XSS']))
|
747 |
+
{
|
748 |
+
if($_POST['XSS']=='on')
|
749 |
+
{
|
750 |
+
update_option('XSSAttack',1);
|
751 |
+
$dir_name = dirname(__FILE__);
|
752 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
753 |
+
$dir_name = $dir_name1[0];
|
754 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
755 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
756 |
+
|
757 |
+
$file = file_get_contents($fileName);
|
758 |
+
if(strpos($file, 'XSS')!=false)
|
759 |
+
{
|
760 |
+
$file = str_replace('$XSS=0;', '$XSS=1;', $file);
|
761 |
+
file_put_contents($fileName,$file);
|
762 |
+
}
|
763 |
+
else
|
764 |
+
{
|
765 |
+
$content = explode('?>', $file);
|
766 |
+
$file = $content[0];
|
767 |
+
$file .= PHP_EOL;
|
768 |
+
$file .= '$XSS=1;'.PHP_EOL;
|
769 |
+
$file .='?>';
|
770 |
+
file_put_contents($fileName,$file);
|
771 |
+
}
|
772 |
+
echo("XSSenable");
|
773 |
+
exit;
|
774 |
+
}
|
775 |
+
}
|
776 |
+
else
|
777 |
+
{
|
778 |
+
update_option('XSSAttack',0);
|
779 |
+
$dir_name = dirname(__FILE__);
|
780 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
781 |
+
$dir_name = $dir_name1[0];
|
782 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
783 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
784 |
+
|
785 |
+
$file = file_get_contents($fileName);
|
786 |
+
if(strpos($file, '$XSS')!=false)
|
787 |
+
{
|
788 |
+
$file = str_replace('$XSS=1;', '$XSS=0;', $file);
|
789 |
+
file_put_contents($fileName,$file);
|
790 |
+
}
|
791 |
+
else
|
792 |
+
{
|
793 |
+
$content = explode('?>', $file);
|
794 |
+
$file = $content[0];
|
795 |
+
$file .= PHP_EOL;
|
796 |
+
$file .= '$XSS=0;'.PHP_EOL;
|
797 |
+
$file .='?>';
|
798 |
+
file_put_contents($fileName,$file);
|
799 |
+
}
|
800 |
+
echo("XSSdisable");
|
801 |
+
exit;
|
802 |
+
}
|
803 |
+
|
804 |
+
}
|
805 |
+
private function savelfi()
|
806 |
+
{
|
807 |
+
if(isset($_POST['LFI']))
|
808 |
+
{
|
809 |
+
if($_POST['LFI']=='on')
|
810 |
+
{
|
811 |
+
update_option('LFIAttack',1);
|
812 |
+
$dir_name = dirname(__FILE__);
|
813 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
814 |
+
$dir_name = $dir_name1[0];
|
815 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
816 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
817 |
+
|
818 |
+
$file = file_get_contents($fileName);
|
819 |
+
if(strpos($file, 'LFI')!=false)
|
820 |
+
{
|
821 |
+
$file = str_replace("LFI=0;", "LFI=1;", $file);
|
822 |
+
file_put_contents($fileName,$file);
|
823 |
+
}
|
824 |
+
else
|
825 |
+
{
|
826 |
+
$content = explode('?>', $file);
|
827 |
+
$file = $content[0];
|
828 |
+
$file .= PHP_EOL;
|
829 |
+
$file .= '$LFI=1;'.PHP_EOL;
|
830 |
+
$file .='?>';
|
831 |
+
file_put_contents($fileName,$file);
|
832 |
+
}
|
833 |
+
$file = file_get_contents($fileName);
|
834 |
+
|
835 |
+
echo("LFIenable");
|
836 |
+
exit;
|
837 |
+
}
|
838 |
+
}
|
839 |
+
else
|
840 |
+
{
|
841 |
+
update_option('LFIAttack',0);
|
842 |
+
$dir_name = dirname(__FILE__);
|
843 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
844 |
+
$dir_name = $dir_name1[0];
|
845 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
846 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
847 |
+
|
848 |
+
$file = file_get_contents($fileName);
|
849 |
+
if(strpos($file, '$LFI')!=false)
|
850 |
+
{
|
851 |
+
$file = str_replace('$LFI=1;', '$LFI=0;', $file);
|
852 |
+
file_put_contents($fileName,$file);
|
853 |
+
}
|
854 |
+
else
|
855 |
+
{
|
856 |
+
$content = explode('?>', $file);
|
857 |
+
$file = $content[0];
|
858 |
+
$file .= PHP_EOL;
|
859 |
+
$file .= '$LFI=0;'.PHP_EOL;
|
860 |
+
$file .='?>';
|
861 |
+
file_put_contents($fileName,$file);
|
862 |
+
}
|
863 |
+
echo("LFIdisable");
|
864 |
+
exit;
|
865 |
+
}
|
866 |
+
|
867 |
+
}
|
868 |
+
private function saverfi()
|
869 |
+
{
|
870 |
+
if(isset($_POST['RFI']))
|
871 |
+
{
|
872 |
+
if($_POST['RFI']=='on')
|
873 |
+
{
|
874 |
+
update_option('RFIAttack',1);
|
875 |
+
$dir_name = dirname(__FILE__);
|
876 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
877 |
+
$dir_name = $dir_name1[0];
|
878 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
879 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
880 |
+
|
881 |
+
$file = file_get_contents($fileName);
|
882 |
+
if(strpos($file, 'RFI')!=false)
|
883 |
+
{
|
884 |
+
$file = str_replace('$RFI=0;', '$RFI=1;', $file);
|
885 |
+
file_put_contents($fileName,$file);
|
886 |
+
}
|
887 |
+
else
|
888 |
+
{
|
889 |
+
$content = explode('?>', $file);
|
890 |
+
$file = $content[0];
|
891 |
+
$file .= PHP_EOL;
|
892 |
+
$file .= '$RFI=1;'.PHP_EOL;
|
893 |
+
$file .='?>';
|
894 |
+
file_put_contents($fileName,$file);
|
895 |
+
}
|
896 |
+
echo("RFIenable");
|
897 |
+
exit;
|
898 |
+
}
|
899 |
+
}
|
900 |
+
else
|
901 |
+
{
|
902 |
+
update_option('RFIAttack',0);
|
903 |
+
$dir_name = dirname(__FILE__);
|
904 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
905 |
+
$dir_name = $dir_name1[0];
|
906 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
907 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
908 |
+
|
909 |
+
$file = file_get_contents($fileName);
|
910 |
+
if(strpos($file, '$RFI')!=false)
|
911 |
+
{
|
912 |
+
$file = str_replace('$RFI=1;', '$RFI=0;', $file);
|
913 |
+
file_put_contents($fileName,$file);
|
914 |
+
}
|
915 |
+
else
|
916 |
+
{
|
917 |
+
$content = explode('?>', $file);
|
918 |
+
$file = $content[0];
|
919 |
+
$file .= PHP_EOL;
|
920 |
+
$file .= '$RFI=0;'.PHP_EOL;
|
921 |
+
$file .='?>';
|
922 |
+
file_put_contents($fileName,$file);
|
923 |
+
}
|
924 |
+
echo("RFIdisable");
|
925 |
+
exit;
|
926 |
+
}
|
927 |
+
|
928 |
+
}
|
929 |
+
private function saveRateL()
|
930 |
+
{
|
931 |
+
|
932 |
+
if($_POST['time']!='' && $_POST['req']!='')
|
933 |
+
{
|
934 |
+
if(is_numeric($_POST['time']) && is_numeric($_POST['req']))
|
935 |
+
{
|
936 |
+
$dir_name = dirname(__FILE__);
|
937 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
938 |
+
$dir_name = $dir_name1[0];
|
939 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
940 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
941 |
+
|
942 |
+
$file = file_get_contents($fileName);
|
943 |
+
$data = $file;
|
944 |
+
$time = sanitize_text_field($_POST['time']);
|
945 |
+
$req = sanitize_text_field($_POST['req']);
|
946 |
+
if($time>0 && $req >0)
|
947 |
+
{
|
948 |
+
update_option('Rate_time',$time);
|
949 |
+
update_option('Rate_request',$req);
|
950 |
+
update_option('Rate_limiting','1');
|
951 |
+
|
952 |
+
if(strpos($file, 'RateLimiting')!=false)
|
953 |
+
{
|
954 |
+
$file = str_replace('$RateLimiting=0;', '$RateLimiting=1;', $file);
|
955 |
+
$data = $file;
|
956 |
+
file_put_contents($fileName,$file);
|
957 |
+
}
|
958 |
+
else
|
959 |
+
{
|
960 |
+
$content = explode('?>', $file);
|
961 |
+
$file = $content[0];
|
962 |
+
$file .= PHP_EOL;
|
963 |
+
$file .= '$RateLimiting=1;'.PHP_EOL;
|
964 |
+
$file .='?>';
|
965 |
+
file_put_contents($fileName,$file);
|
966 |
+
$data = $file;
|
967 |
+
}
|
968 |
+
|
969 |
+
$file = $data;
|
970 |
+
if(strpos($file, 'RequestsPMin')!=false)
|
971 |
+
{
|
972 |
+
$content = explode(PHP_EOL, $file);
|
973 |
+
$con = '';
|
974 |
+
$len = sizeof($content);
|
975 |
+
|
976 |
+
for($i=0;$i<$len;$i++)
|
977 |
+
{
|
978 |
+
if(strpos($content[$i], 'RequestsPMin')!=false)
|
979 |
+
{
|
980 |
+
$con.='$RequestsPMin='.$req.';'.PHP_EOL;
|
981 |
+
}
|
982 |
+
else
|
983 |
+
{
|
984 |
+
$con .= $content[$i].PHP_EOL;
|
985 |
+
}
|
986 |
+
}
|
987 |
+
|
988 |
+
file_put_contents($fileName,$con);
|
989 |
+
$data = $con;
|
990 |
+
|
991 |
+
}
|
992 |
+
|
993 |
+
else
|
994 |
+
{
|
995 |
+
$content = explode('?>', $file);
|
996 |
+
$file = $content[0];
|
997 |
+
$file .= PHP_EOL;
|
998 |
+
$file .= '$RequestsPMin='.$req.';'.PHP_EOL;
|
999 |
+
$file .='?>';
|
1000 |
+
file_put_contents($fileName,$file);
|
1001 |
+
$data = $file;
|
1002 |
+
}
|
1003 |
+
|
1004 |
+
|
1005 |
+
|
1006 |
+
if($_POST['action']=='BlockIP')
|
1007 |
+
{
|
1008 |
+
update_option('actionRateL',1);
|
1009 |
+
|
1010 |
+
$file = $data;
|
1011 |
+
if(strpos($file, 'actionRateL')!=false)
|
1012 |
+
{
|
1013 |
+
$content = explode(PHP_EOL, $file);
|
1014 |
+
$con = '';
|
1015 |
+
foreach ($content as $line => $lineV) {
|
1016 |
+
if(strpos($lineV, 'actionRateL')!=false)
|
1017 |
+
{
|
1018 |
+
$con.='$actionRateL="BlockIP";'.PHP_EOL;
|
1019 |
+
}
|
1020 |
+
else
|
1021 |
+
{
|
1022 |
+
$con .= $lineV.PHP_EOL;
|
1023 |
+
}
|
1024 |
+
}
|
1025 |
+
file_put_contents($fileName,$con);
|
1026 |
+
}
|
1027 |
+
else
|
1028 |
+
{
|
1029 |
+
$content = explode('?>', $file);
|
1030 |
+
$file = $content[0];
|
1031 |
+
$file .= PHP_EOL;
|
1032 |
+
$file .= '$actionRateL="BlockIP";'.PHP_EOL;
|
1033 |
+
$file .='?>';
|
1034 |
+
file_put_contents($fileName,$file);
|
1035 |
+
$file = $data;
|
1036 |
+
}
|
1037 |
+
}
|
1038 |
+
elseif($_POST['action']=='ThrottleIP')
|
1039 |
+
{
|
1040 |
+
$file = $data;
|
1041 |
+
update_option('actionRateL',0);
|
1042 |
+
if(strpos($file, 'actionRateL')!=false)
|
1043 |
+
{
|
1044 |
+
$content = explode(PHP_EOL, $file);
|
1045 |
+
$con = '';
|
1046 |
+
foreach ($content as $line => $lineV) {
|
1047 |
+
if(strpos($lineV, 'actionRateL')!=false)
|
1048 |
+
{
|
1049 |
+
$con.='$actionRateL="ThrottleIP";'.PHP_EOL;
|
1050 |
+
}
|
1051 |
+
else
|
1052 |
+
{
|
1053 |
+
$con .= $lineV.PHP_EOL;
|
1054 |
+
}
|
1055 |
+
}
|
1056 |
+
file_put_contents($fileName,$con);
|
1057 |
+
}
|
1058 |
+
else
|
1059 |
+
{
|
1060 |
+
$content = explode('?>', $file);
|
1061 |
+
$file = $content[0];
|
1062 |
+
$file .= PHP_EOL;
|
1063 |
+
$file .= '$actionRateL="ThrottleIP";'.PHP_EOL;
|
1064 |
+
$file .='?>';
|
1065 |
+
file_put_contents($fileName,$file);
|
1066 |
+
}
|
1067 |
+
}
|
1068 |
+
|
1069 |
+
}
|
1070 |
+
|
1071 |
+
}
|
1072 |
+
|
1073 |
+
}
|
1074 |
+
|
1075 |
+
}
|
1076 |
+
private function disableRL()
|
1077 |
+
{
|
1078 |
+
update_option('Rate_limiting',0);
|
1079 |
+
|
1080 |
+
$dir_name = dirname(__FILE__);
|
1081 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
1082 |
+
$dir_name = $dir_name1[0];
|
1083 |
+
$filepath = str_replace('\\', '/', $dir_name1[0]);
|
1084 |
+
$fileName = $filepath.'/wp-includes/mo-waf-config.php';
|
1085 |
+
$file = file_get_contents($fileName);
|
1086 |
+
|
1087 |
+
if(strpos($file, 'RateLimiting')!=false)
|
1088 |
+
{
|
1089 |
+
$file = str_replace('$RateLimiting=1;', '$RateLimiting=0;', $file);
|
1090 |
+
file_put_contents($fileName,$file);
|
1091 |
+
}
|
1092 |
+
else
|
1093 |
+
{
|
1094 |
+
$content = explode('?>', $file);
|
1095 |
+
$file = $content[0];
|
1096 |
+
$file .= PHP_EOL;
|
1097 |
+
$file .= '$RateLimiting=0;'.PHP_EOL;
|
1098 |
+
$file .='?>';
|
1099 |
+
file_put_contents($fileName,$file);
|
1100 |
+
}
|
1101 |
+
|
1102 |
+
}
|
1103 |
+
private function backupHtaccess()
|
1104 |
+
{
|
1105 |
+
if(isset($_POST['htaccessWAF']))
|
1106 |
+
{
|
1107 |
+
if($_POST['htaccessWAF']=='on')
|
1108 |
+
{
|
1109 |
+
$dir_name = dirname(__FILE__);
|
1110 |
+
$dirN = $dir_name;
|
1111 |
+
$dirN = str_replace('\\', '/', $dirN);
|
1112 |
+
$dir_name1 = explode('wp-content', $dir_name);
|
1113 |
+
$dir_name = $dir_name1[0];
|
1114 |
+
$dir_name1 = str_replace('\\', '/', $dir_name1[0]);
|
1115 |
+
$dir_name =$dir_name1.'.htaccess';
|
1116 |
+
$file = file_get_contents($dir_name);
|
1117 |
+
$dir_backup = $dir_name1.'htaccess';
|
1118 |
+
$handle = fopen($dir_backup, 'c+');
|
1119 |
+
fwrite($handle,$file);
|
1120 |
+
}
|
1121 |
+
}
|
1122 |
+
}
|
1123 |
+
private function limitAttack()
|
1124 |
+
{
|
1125 |
+
if(isset($_POST['limitAttack']))
|
1126 |
+
{
|
1127 |
+
$value = sanitize_text_field($_POST['limitAttack']);
|
1128 |
+
if($value>1)
|
1129 |
+
{
|
1130 |
+
update_option('limitAttack',$value);
|
1131 |
+
echo "limitSaved";
|
1132 |
+
exit;
|
1133 |
+
}
|
1134 |
+
else
|
1135 |
+
{
|
1136 |
+
echo "limitIsLT1";
|
1137 |
+
exit;
|
1138 |
+
}
|
1139 |
+
|
1140 |
+
}
|
1141 |
+
}
|
1142 |
+
|
1143 |
+
|
1144 |
+
|
1145 |
+
function wpns_captcha_settings(){
|
1146 |
+
$nonce = $_POST['nonce'];
|
1147 |
+
if ( ! wp_verify_nonce( $nonce, 'wpns-captcha' ) ){
|
1148 |
+
wp_send_json('ERROR');
|
1149 |
+
return;
|
1150 |
+
}
|
1151 |
+
$site_key = sanitize_text_field($_POST['site_key']);
|
1152 |
+
$secret_key = sanitize_text_field($_POST['secret_key']);
|
1153 |
+
$enable_captcha = $_POST['enable_captcha'];
|
1154 |
+
if($enable_captcha == 'true'){$enable_captcha = "on";}else if($enable_captcha == 'false') {$enable_captcha = "";}
|
1155 |
+
$login_form_captcha = $_POST['login_form'];
|
1156 |
+
if($login_form_captcha == 'true'){$login_form_captcha = "on";}else if($login_form_captcha == 'false') {$login_form_captcha = "";}
|
1157 |
+
$reg_form_captcha = $_POST['registeration_form'];
|
1158 |
+
if($reg_form_captcha == 'true'){$reg_form_captcha = "on";}else if($reg_form_captcha == 'false') {$reg_form_captcha = "";}
|
1159 |
+
|
1160 |
+
if(($site_key == "" || $secret_key == "") and $enable_captcha == 'true'){
|
1161 |
+
wp_send_json('empty');
|
1162 |
+
return;
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
update_option( 'mo_wpns_recaptcha_site_key' , $site_key );
|
1166 |
+
update_option( 'mo_wpns_recaptcha_secret_key' , $secret_key );
|
1167 |
+
update_option( 'mo_wpns_activate_recaptcha' , $enable_captcha );
|
1168 |
+
|
1169 |
+
if($enable_captcha == "on"){
|
1170 |
+
update_option( 'mo_wpns_activate_recaptcha_for_login' , $login_form_captcha );
|
1171 |
+
update_option( 'mo_wpns_activate_recaptcha_for_woocommerce_login', $login_form_captcha );
|
1172 |
+
update_option('mo_wpns_activate_recaptcha_for_registration', $reg_form_captcha );
|
1173 |
+
update_option( 'mo_wpns_activate_recaptcha_for_woocommerce_registration',$reg_form_captcha );
|
1174 |
+
wp_send_json('true');
|
1175 |
+
}
|
1176 |
+
else if($enable_captcha == ""){
|
1177 |
+
update_option( 'mo_wpns_activate_recaptcha_for_login' , '' );
|
1178 |
+
update_option( 'mo_wpns_activate_recaptcha_for_woocommerce_login', '' );
|
1179 |
+
update_option('mo_wpns_activate_recaptcha_for_registration', '' );
|
1180 |
+
update_option( 'mo_wpns_activate_recaptcha_for_woocommerce_registration','' );
|
1181 |
+
wp_send_json('false');
|
1182 |
+
}
|
1183 |
+
|
1184 |
+
}
|
1185 |
+
|
1186 |
+
function wpns_strong_password_settings(){
|
1187 |
+
$nonce = $_POST['nonce'];
|
1188 |
+
if ( ! wp_verify_nonce( $nonce, 'wpns-strn-pass' ) ){
|
1189 |
+
wp_send_json('ERROR');
|
1190 |
+
return;
|
1191 |
+
}
|
1192 |
+
$enable_strong_pass = $_POST['enable_strong_pass'];
|
1193 |
+
if($enable_strong_pass == 'true'){$enable_strong_pass = 1;}else if($enable_strong_pass == 'false') {$enable_strong_pass = 0;}
|
1194 |
+
$strong_pass_accounts = $_POST['accounts_strong_pass'];
|
1195 |
+
update_option('mo2f_enforce_strong_passswords_for_accounts',$strong_pass_accounts);
|
1196 |
+
update_option('mo2f_enforce_strong_passswords' , $enable_strong_pass);
|
1197 |
+
if($enable_strong_pass){
|
1198 |
+
update_option('mo_wpns_enable_rename_login_url',"");
|
1199 |
+
wp_send_json('true');
|
1200 |
+
}
|
1201 |
+
else{
|
1202 |
+
wp_send_json('false');
|
1203 |
+
}
|
1204 |
+
}
|
1205 |
+
|
1206 |
+
}
|
1207 |
+
new wpns_ajax;
|
1208 |
+
|
1209 |
?>
|
database/database_functions.php
CHANGED
@@ -1,814 +1,820 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
4 |
-
|
5 |
-
class MoWpnsDB
|
6 |
-
{
|
7 |
-
private $transactionTable;
|
8 |
-
private $blockedIPsTable;
|
9 |
-
private $whitelistIPsTable;
|
10 |
-
private $emailAuditTable;
|
11 |
-
private $malwarereportTable;
|
12 |
-
private $scanreportdetails;
|
13 |
-
private $skipfiles;
|
14 |
-
private $hashfile;
|
15 |
-
|
16 |
-
function __construct()
|
17 |
-
{
|
18 |
-
global $wpdb;
|
19 |
-
$this->transactionTable = $wpdb->base_prefix.'mo2f_network_transactions';
|
20 |
-
$this->blockedIPsTable = $wpdb->base_prefix.'mo2f_network_blocked_ips';
|
21 |
-
$this->attackList = $wpdb->base_prefix.'wpns_attack_logs';
|
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 |
-
|
34 |
-
function mo_plugin_activate()
|
35 |
-
{
|
36 |
-
global $wpdb;
|
37 |
-
if(!get_option('mo_wpns_dbversion')||get_option('mo_wpns_dbversion')<MoWpnsConstants::DB_VERSION){
|
38 |
-
update_option('mo_wpns_dbversion', MoWpnsConstants::DB_VERSION );
|
39 |
-
$this->generate_tables();
|
40 |
-
} else {
|
41 |
-
$current_db_version = get_option('mo_wpns_dbversion');
|
42 |
-
if($current_db_version < MoWpnsConstants::DB_VERSION){
|
43 |
-
update_option('mo_wpns_dbversion', MoWpnsConstants::DB_VERSION );
|
44 |
-
|
45 |
-
}
|
46 |
-
}
|
47 |
-
}
|
48 |
-
|
49 |
-
function generate_tables(){
|
50 |
-
global $wpdb;
|
51 |
-
|
52 |
-
$tableName = $this->transactionTable;
|
53 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
54 |
-
{
|
55 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
56 |
-
`id` bigint NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `username` mediumtext NOT NULL ,
|
57 |
-
`type` mediumtext NOT NULL , `url` mediumtext NOT NULL , `status` mediumtext NOT NULL , `created_timestamp` int, UNIQUE KEY id (id) );";
|
58 |
-
dbDelta($sql);
|
59 |
-
}
|
60 |
-
|
61 |
-
$tableName = $this->blockedIPsTable;
|
62 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
63 |
-
{
|
64 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
65 |
-
`id` int NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `reason` mediumtext, `blocked_for_time` int,
|
66 |
-
`created_timestamp` int, UNIQUE KEY id (id) );";
|
67 |
-
dbDelta($sql);
|
68 |
-
}
|
69 |
-
|
70 |
-
|
71 |
-
$tableName = $this->whitelistIPsTable;
|
72 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
73 |
-
{
|
74 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
75 |
-
`id` int NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `created_timestamp` int, UNIQUE KEY id (id) );";
|
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` ;";
|
89 |
-
$results1 = $wpdb->query($sql);
|
90 |
-
}
|
91 |
-
|
92 |
-
$tableName = $this->emailAuditTable;
|
93 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
94 |
-
{
|
95 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
96 |
-
`id` int NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `username` mediumtext NOT NULL, `reason` mediumtext, `created_timestamp` int, UNIQUE KEY id (id) );";
|
97 |
-
dbDelta($sql);
|
98 |
-
}
|
99 |
-
$tableName = $this->IPrateDetails;
|
100 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
101 |
-
{
|
102 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
103 |
-
ip varchar(20) , time bigint );";
|
104 |
-
dbDelta($sql);
|
105 |
-
}
|
106 |
-
|
107 |
-
$tableName = $this->attackLogs;
|
108 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
109 |
-
{
|
110 |
-
$sql = "create table ". $tableName ." (
|
111 |
-
ip varchar(20),
|
112 |
-
type varchar(20),
|
113 |
-
time bigint,
|
114 |
-
input mediumtext );";
|
115 |
-
//dbDelta($sql);
|
116 |
-
$results = $wpdb->get_results($sql);
|
117 |
-
|
118 |
-
}
|
119 |
-
$tableName = $this->malwarereportTable;
|
120 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
121 |
-
{
|
122 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
123 |
-
`id` bigint NOT NULL AUTO_INCREMENT, `scan_mode` mediumtext NOT NULL, `scanned_folders` mediumtext NOT NULL, `scanned_files` int NOT NULL, `malware_count` int NOT NULL DEFAULT 0, `repo_issues` int NOT NULL DEFAULT 0, `malicious_links` int NOT NULL DEFAULT 0, `start_timestamp` int, `completed_timestamp` int, UNIQUE KEY id (id) );";
|
124 |
-
dbDelta($sql);
|
125 |
-
}
|
126 |
-
$result= $wpdb->get_var("SHOW COLUMNS FROM `$tableName` LIKE 'scan_mode'");
|
127 |
-
if(is_null($result)){
|
128 |
-
$sql = "ALTER TABLE `$tableName` ADD `scan_mode` mediumtext AFTER `id` ;";
|
129 |
-
$results1 = $wpdb->query($sql);
|
130 |
-
$sql1= "UPDATE $this->malwarereportTable SET `scan_mode`='Custom Scan';";
|
131 |
-
$resluts = $wpdb->query($sql1);
|
132 |
-
}
|
133 |
-
|
134 |
-
$tableName = $this->scanreportdetails;
|
135 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
136 |
-
{
|
137 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
138 |
-
`id` bigint NOT NULL AUTO_INCREMENT, `report_id` bigint, `filename` mediumtext NOT NULL, `report` mediumtext NOT NULL , `created_timestamp` int, UNIQUE KEY id (id) );";
|
139 |
-
dbDelta($sql);
|
140 |
-
}
|
141 |
-
|
142 |
-
$tableName = $this->skipfiles;
|
143 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
144 |
-
{
|
145 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
146 |
-
`id` bigint NOT NULL AUTO_INCREMENT, `path` mediumtext NOT NULL , `signature` mediumtext, `created_timestamp` int, UNIQUE KEY id (id) );";
|
147 |
-
dbDelta($sql);
|
148 |
-
}
|
149 |
-
|
150 |
-
$tableName = $this->filescan;
|
151 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
152 |
-
{
|
153 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
154 |
-
`id` bigint NOT NULL AUTO_INCREMENT, `path` mediumtext NOT NULL, `name_hash` varchar(45) NOT NULL, `malware_service` int NOT NULL, `repo_check` int NOT NULL, `link_check` int NOT NULL, PRIMARY KEY id (id), UNIQUE KEY name_hash (name_hash) );";
|
155 |
-
dbDelta($sql);
|
156 |
-
}
|
157 |
-
|
158 |
-
$tableName = $this->hashfile;
|
159 |
-
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
160 |
-
{
|
161 |
-
$sql = "CREATE TABLE " . $tableName . " (
|
162 |
-
`id` bigint(20) NOT NULL AUTO_INCREMENT,`file name` varchar(500) NOT NULL,`file hash` mediumtext NOT NULL, `scan_data` mediumtext NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`), UNIQUE KEY `file name` (`file name`), UNIQUE KEY `id_2`(`id`));";
|
163 |
-
dbDelta($sql);
|
164 |
-
}
|
165 |
-
|
166 |
-
$row1 = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->malwarereportTable." LIKE 'malware_count'" );
|
167 |
-
$row2 = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->malwarereportTable." LIKE 'repo_issues'" );
|
168 |
-
$row3 = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->malwarereportTable." LIKE 'malicious_links'" );
|
169 |
-
if(empty($row1) && empty($row1) && empty($row1)){
|
170 |
-
$result = $wpdb->query("ALTER TABLE $this->malwarereportTable ADD COLUMN `malware_count` INT NOT NULL DEFAULT 0 AFTER `scanned_files`, ADD COLUMN `repo_issues` INT NOT NULL DEFAULT 0 AFTER `malware_count`, ADD COLUMN `malicious_links` INT NOT NULL DEFAULT 0 AFTER `repo_issues`");
|
171 |
-
if($result){
|
172 |
-
$report_ids = $wpdb->get_results("SELECT id FROM $this->malwarereportTable");
|
173 |
-
foreach ($report_ids as $key => $value) {
|
174 |
-
$scan_detail = $wpdb->get_results("SELECT report FROM $this->scanreportdetails WHERE report_id='".$report_ids[$key]->id."'");
|
175 |
-
$result = $this->mo_wpns_get_scan_count($scan_detail);
|
176 |
-
$wpdb->query("UPDATE $this->malwarereportTable SET `malware_count`= '".$result['scan']."', `repo_issues`='".$result['repo']."', `malicious_links`='".$result['extl']."' WHERE id='".$report_ids[$key]->id."'");
|
177 |
-
}
|
178 |
-
}
|
179 |
-
}
|
180 |
-
$rowhash = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->hashfile." LIKE 'scan_data'" );
|
181 |
-
if(empty($rowhash)){
|
182 |
-
$result = $wpdb->query("ALTER TABLE $this->hashfile ADD COLUMN `scan_data` mediumtext NOT NULL");
|
183 |
-
}
|
184 |
-
}
|
185 |
-
|
186 |
-
function insert_backup_detail($backup_id,$file_name,$backup_created_timestamp,$plugin_path){
|
187 |
-
global $wpdb;
|
188 |
-
$wpdb->insert(
|
189 |
-
$this->backupdetails,
|
190 |
-
array(
|
191 |
-
'backup_id' =>$backup_id,
|
192 |
-
'file_name' =>$file_name,
|
193 |
-
'created_timestamp'=> $backup_created_timestamp,
|
194 |
-
'plugin_path' => $plugin_path
|
195 |
-
));
|
196 |
-
}
|
197 |
-
|
198 |
-
function get_table_content(){
|
199 |
-
global $wpdb;
|
200 |
-
return $wpdb->get_results("SELECT plugin_path,file_name,created_timestamp,id FROM ".$this->backupdetails);
|
201 |
-
}
|
202 |
-
|
203 |
-
function get_number_of_plugin_backup(){
|
204 |
-
global $wpdb;
|
205 |
-
|
206 |
-
$plugin_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'plugin'");
|
207 |
-
$themes_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'themes'");
|
208 |
-
$wp_files_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'wpfiles'");
|
209 |
-
$db_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'db'");
|
210 |
-
$total_backup = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails);
|
211 |
-
$array = array('plugin_count'=>$plugin_count,'themes_count'=>$themes_count,'wp_files_count'=>$wp_files_count,'db_count'=>$db_count,'total_backup'=>$total_backup);
|
212 |
-
|
213 |
-
return $array;
|
214 |
-
}
|
215 |
-
|
216 |
-
function delete_file($id){
|
217 |
-
global $wpdb;
|
218 |
-
$wpdb->query(
|
219 |
-
"DELETE FROM ".$this->backupdetails."
|
220 |
-
WHERE id = ".$id
|
221 |
-
);
|
222 |
-
return;
|
223 |
-
}
|
224 |
-
|
225 |
-
function row_exist($id){
|
226 |
-
global $wpdb;
|
227 |
-
$is_exist = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE id =".$id );
|
228 |
-
return $is_exist;
|
229 |
-
}
|
230 |
-
|
231 |
-
function get_ip_blocked_count($ipAddress)
|
232 |
-
{
|
233 |
-
global $wpdb;
|
234 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE ip_address = '".$ipAddress."'" );
|
235 |
-
}
|
236 |
-
function get_total_blocked_ips()
|
237 |
-
{
|
238 |
-
global $wpdb;
|
239 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable);
|
240 |
-
}
|
241 |
-
function get_total_manual_blocked_ips()
|
242 |
-
{
|
243 |
-
global $wpdb;
|
244 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE reason = 'Blocked by Admin';");
|
245 |
-
}
|
246 |
-
function get_total_blocked_ips_waf()
|
247 |
-
{
|
248 |
-
global $wpdb;
|
249 |
-
$totalIPBlocked = $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable);
|
250 |
-
return $totalIPBlocked - $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE reason = 'Blocked by Admin';");
|
251 |
-
}
|
252 |
-
function get_blocked_attack_count($attack)
|
253 |
-
{
|
254 |
-
global $wpdb;
|
255 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->attackList." WHERE type = '".$attack."'" );
|
256 |
-
}
|
257 |
-
|
258 |
-
function get_count_of_blocked_ips(){
|
259 |
-
global $wpdb;
|
260 |
-
return $wpdb->get_var("SELECT COUNT(*) FROM ".$this->blockedIPsTable."");
|
261 |
-
}
|
262 |
-
|
263 |
-
|
264 |
-
function get_blocked_ip($entryid)
|
265 |
-
{
|
266 |
-
global $wpdb;
|
267 |
-
return $wpdb->get_results( "SELECT ip_address FROM ".$this->blockedIPsTable." WHERE id=".$entryid );
|
268 |
-
}
|
269 |
-
|
270 |
-
function get_blocked_ip_list()
|
271 |
-
{
|
272 |
-
global $wpdb;
|
273 |
-
return $wpdb->get_results("SELECT id, reason, ip_address, created_timestamp FROM ".$this->blockedIPsTable);
|
274 |
-
}
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$
|
281 |
-
}
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
function
|
304 |
-
{
|
305 |
-
global $wpdb;
|
306 |
-
$wpdb->
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
return
|
332 |
-
}
|
333 |
-
|
334 |
-
function
|
335 |
-
{
|
336 |
-
global $wpdb;
|
337 |
-
$wpdb->
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
{
|
353 |
-
global $wpdb;
|
354 |
-
$wpdb->
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
return
|
365 |
-
}
|
366 |
-
|
367 |
-
function
|
368 |
-
{
|
369 |
-
global $wpdb;
|
370 |
-
return $wpdb->
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
return
|
408 |
-
}
|
409 |
-
|
410 |
-
function
|
411 |
-
{
|
412 |
-
global $wpdb;
|
413 |
-
return $wpdb->get_results( "SELECT ip_address, username, status, created_timestamp FROM ".$this->transactionTable."
|
414 |
-
}
|
415 |
-
|
416 |
-
function
|
417 |
-
{
|
418 |
-
global $wpdb;
|
419 |
-
return $wpdb->get_results( "SELECT ip_address, username,
|
420 |
-
}
|
421 |
-
|
422 |
-
function
|
423 |
-
{
|
424 |
-
global $wpdb;
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
{
|
456 |
-
global $wpdb;
|
457 |
-
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->transactionTable." WHERE
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
'
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
}
|
517 |
-
|
518 |
-
function
|
519 |
-
global $wpdb;
|
520 |
-
$sql= $wpdb->get_results("SELECT
|
521 |
-
return $sql[0]->
|
522 |
-
}
|
523 |
-
|
524 |
-
function
|
525 |
-
global $wpdb;
|
526 |
-
$sql= $wpdb->get_results(
|
527 |
-
return $sql[0]->
|
528 |
-
}
|
529 |
-
|
530 |
-
function
|
531 |
-
global $wpdb;
|
532 |
-
$sql= $wpdb->get_results('SELECT
|
533 |
-
return $sql[0]->
|
534 |
-
}
|
535 |
-
|
536 |
-
function
|
537 |
-
global $wpdb;
|
538 |
-
$sql= 'SELECT * FROM '.$this->
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
$
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
$source_file_path
|
553 |
-
$query
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
$query= "
|
560 |
-
$res=$wpdb->query( $query );
|
561 |
-
}
|
562 |
-
|
563 |
-
function
|
564 |
-
global $wpdb;
|
565 |
-
$
|
566 |
-
$
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
$query
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
$query
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
$
|
641 |
-
$
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
$sql
|
648 |
-
$result
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
$sql
|
655 |
-
$result
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
$sql
|
662 |
-
$
|
663 |
-
}
|
664 |
-
|
665 |
-
function
|
666 |
-
global $wpdb;
|
667 |
-
$
|
668 |
-
|
669 |
-
}
|
670 |
-
|
671 |
-
function
|
672 |
-
global $wpdb;
|
673 |
-
$result
|
674 |
-
return $result;
|
675 |
-
}
|
676 |
-
|
677 |
-
function
|
678 |
-
global $wpdb;
|
679 |
-
$wpdb->
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
$
|
685 |
-
$
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
}
|
709 |
-
|
710 |
-
function
|
711 |
-
global $wpdb;
|
712 |
-
$result = $wpdb->get_results( "SELECT
|
713 |
-
return $result;
|
714 |
-
}
|
715 |
-
|
716 |
-
function
|
717 |
-
|
718 |
-
|
719 |
-
$result
|
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 |
-
function
|
755 |
-
global $wpdb;
|
756 |
-
$result = $wpdb->get_results( "SELECT * FROM ".$this->
|
757 |
-
return $result;
|
758 |
-
}
|
759 |
-
|
760 |
-
function
|
761 |
-
$
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
$
|
800 |
-
$link_count++;
|
801 |
-
}else if(isset($temp['
|
802 |
-
$
|
803 |
-
$
|
804 |
-
}else if(isset($temp['scan'])){
|
805 |
-
$scan_count++;
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
$link_count++;
|
810 |
-
}
|
811 |
-
|
812 |
-
|
813 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
814 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
4 |
+
|
5 |
+
class MoWpnsDB
|
6 |
+
{
|
7 |
+
private $transactionTable;
|
8 |
+
private $blockedIPsTable;
|
9 |
+
private $whitelistIPsTable;
|
10 |
+
private $emailAuditTable;
|
11 |
+
private $malwarereportTable;
|
12 |
+
private $scanreportdetails;
|
13 |
+
private $skipfiles;
|
14 |
+
private $hashfile;
|
15 |
+
|
16 |
+
function __construct()
|
17 |
+
{
|
18 |
+
global $wpdb;
|
19 |
+
$this->transactionTable = $wpdb->base_prefix.'mo2f_network_transactions';
|
20 |
+
$this->blockedIPsTable = $wpdb->base_prefix.'mo2f_network_blocked_ips';
|
21 |
+
$this->attackList = $wpdb->base_prefix.'wpns_attack_logs';
|
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 |
+
|
34 |
+
function mo_plugin_activate()
|
35 |
+
{
|
36 |
+
global $wpdb;
|
37 |
+
if(!get_option('mo_wpns_dbversion')||get_option('mo_wpns_dbversion')<MoWpnsConstants::DB_VERSION){
|
38 |
+
update_option('mo_wpns_dbversion', MoWpnsConstants::DB_VERSION );
|
39 |
+
$this->generate_tables();
|
40 |
+
} else {
|
41 |
+
$current_db_version = get_option('mo_wpns_dbversion');
|
42 |
+
if($current_db_version < MoWpnsConstants::DB_VERSION){
|
43 |
+
update_option('mo_wpns_dbversion', MoWpnsConstants::DB_VERSION );
|
44 |
+
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
function generate_tables(){
|
50 |
+
global $wpdb;
|
51 |
+
|
52 |
+
$tableName = $this->transactionTable;
|
53 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
54 |
+
{
|
55 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
56 |
+
`id` bigint NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `username` mediumtext NOT NULL ,
|
57 |
+
`type` mediumtext NOT NULL , `url` mediumtext NOT NULL , `status` mediumtext NOT NULL , `created_timestamp` int, UNIQUE KEY id (id) );";
|
58 |
+
dbDelta($sql);
|
59 |
+
}
|
60 |
+
|
61 |
+
$tableName = $this->blockedIPsTable;
|
62 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
63 |
+
{
|
64 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
65 |
+
`id` int NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `reason` mediumtext, `blocked_for_time` int,
|
66 |
+
`created_timestamp` int, UNIQUE KEY id (id) );";
|
67 |
+
dbDelta($sql);
|
68 |
+
}
|
69 |
+
|
70 |
+
|
71 |
+
$tableName = $this->whitelistIPsTable;
|
72 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
73 |
+
{
|
74 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
75 |
+
`id` int NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `created_timestamp` int, UNIQUE KEY id (id) );";
|
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` ;";
|
89 |
+
$results1 = $wpdb->query($sql);
|
90 |
+
}
|
91 |
+
|
92 |
+
$tableName = $this->emailAuditTable;
|
93 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
94 |
+
{
|
95 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
96 |
+
`id` int NOT NULL AUTO_INCREMENT, `ip_address` mediumtext NOT NULL , `username` mediumtext NOT NULL, `reason` mediumtext, `created_timestamp` int, UNIQUE KEY id (id) );";
|
97 |
+
dbDelta($sql);
|
98 |
+
}
|
99 |
+
$tableName = $this->IPrateDetails;
|
100 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
101 |
+
{
|
102 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
103 |
+
ip varchar(20) , time bigint );";
|
104 |
+
dbDelta($sql);
|
105 |
+
}
|
106 |
+
|
107 |
+
$tableName = $this->attackLogs;
|
108 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
109 |
+
{
|
110 |
+
$sql = "create table ". $tableName ." (
|
111 |
+
ip varchar(20),
|
112 |
+
type varchar(20),
|
113 |
+
time bigint,
|
114 |
+
input mediumtext );";
|
115 |
+
//dbDelta($sql);
|
116 |
+
$results = $wpdb->get_results($sql);
|
117 |
+
|
118 |
+
}
|
119 |
+
$tableName = $this->malwarereportTable;
|
120 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
121 |
+
{
|
122 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
123 |
+
`id` bigint NOT NULL AUTO_INCREMENT, `scan_mode` mediumtext NOT NULL, `scanned_folders` mediumtext NOT NULL, `scanned_files` int NOT NULL, `malware_count` int NOT NULL DEFAULT 0, `repo_issues` int NOT NULL DEFAULT 0, `malicious_links` int NOT NULL DEFAULT 0, `start_timestamp` int, `completed_timestamp` int, UNIQUE KEY id (id) );";
|
124 |
+
dbDelta($sql);
|
125 |
+
}
|
126 |
+
$result= $wpdb->get_var("SHOW COLUMNS FROM `$tableName` LIKE 'scan_mode'");
|
127 |
+
if(is_null($result)){
|
128 |
+
$sql = "ALTER TABLE `$tableName` ADD `scan_mode` mediumtext AFTER `id` ;";
|
129 |
+
$results1 = $wpdb->query($sql);
|
130 |
+
$sql1= "UPDATE $this->malwarereportTable SET `scan_mode`='Custom Scan';";
|
131 |
+
$resluts = $wpdb->query($sql1);
|
132 |
+
}
|
133 |
+
|
134 |
+
$tableName = $this->scanreportdetails;
|
135 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
136 |
+
{
|
137 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
138 |
+
`id` bigint NOT NULL AUTO_INCREMENT, `report_id` bigint, `filename` mediumtext NOT NULL, `report` mediumtext NOT NULL , `created_timestamp` int, UNIQUE KEY id (id) );";
|
139 |
+
dbDelta($sql);
|
140 |
+
}
|
141 |
+
|
142 |
+
$tableName = $this->skipfiles;
|
143 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
144 |
+
{
|
145 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
146 |
+
`id` bigint NOT NULL AUTO_INCREMENT, `path` mediumtext NOT NULL , `signature` mediumtext, `created_timestamp` int, UNIQUE KEY id (id) );";
|
147 |
+
dbDelta($sql);
|
148 |
+
}
|
149 |
+
|
150 |
+
$tableName = $this->filescan;
|
151 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
152 |
+
{
|
153 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
154 |
+
`id` bigint NOT NULL AUTO_INCREMENT, `path` mediumtext NOT NULL, `name_hash` varchar(45) NOT NULL, `malware_service` int NOT NULL, `repo_check` int NOT NULL, `link_check` int NOT NULL, PRIMARY KEY id (id), UNIQUE KEY name_hash (name_hash) );";
|
155 |
+
dbDelta($sql);
|
156 |
+
}
|
157 |
+
|
158 |
+
$tableName = $this->hashfile;
|
159 |
+
if($wpdb->get_var("show tables like '$tableName'") != $tableName)
|
160 |
+
{
|
161 |
+
$sql = "CREATE TABLE " . $tableName . " (
|
162 |
+
`id` bigint(20) NOT NULL AUTO_INCREMENT,`file name` varchar(500) NOT NULL,`file hash` mediumtext NOT NULL, `scan_data` mediumtext NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`), UNIQUE KEY `file name` (`file name`), UNIQUE KEY `id_2`(`id`));";
|
163 |
+
dbDelta($sql);
|
164 |
+
}
|
165 |
+
|
166 |
+
$row1 = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->malwarereportTable." LIKE 'malware_count'" );
|
167 |
+
$row2 = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->malwarereportTable." LIKE 'repo_issues'" );
|
168 |
+
$row3 = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->malwarereportTable." LIKE 'malicious_links'" );
|
169 |
+
if(empty($row1) && empty($row1) && empty($row1)){
|
170 |
+
$result = $wpdb->query("ALTER TABLE $this->malwarereportTable ADD COLUMN `malware_count` INT NOT NULL DEFAULT 0 AFTER `scanned_files`, ADD COLUMN `repo_issues` INT NOT NULL DEFAULT 0 AFTER `malware_count`, ADD COLUMN `malicious_links` INT NOT NULL DEFAULT 0 AFTER `repo_issues`");
|
171 |
+
if($result){
|
172 |
+
$report_ids = $wpdb->get_results("SELECT id FROM $this->malwarereportTable");
|
173 |
+
foreach ($report_ids as $key => $value) {
|
174 |
+
$scan_detail = $wpdb->get_results("SELECT report FROM $this->scanreportdetails WHERE report_id='".$report_ids[$key]->id."'");
|
175 |
+
$result = $this->mo_wpns_get_scan_count($scan_detail);
|
176 |
+
$wpdb->query("UPDATE $this->malwarereportTable SET `malware_count`= '".$result['scan']."', `repo_issues`='".$result['repo']."', `malicious_links`='".$result['extl']."' WHERE id='".$report_ids[$key]->id."'");
|
177 |
+
}
|
178 |
+
}
|
179 |
+
}
|
180 |
+
$rowhash = $wpdb->get_results( "SHOW COLUMNS FROM ".$this->hashfile." LIKE 'scan_data'" );
|
181 |
+
if(empty($rowhash)){
|
182 |
+
$result = $wpdb->query("ALTER TABLE $this->hashfile ADD COLUMN `scan_data` mediumtext NOT NULL");
|
183 |
+
}
|
184 |
+
}
|
185 |
+
|
186 |
+
function insert_backup_detail($backup_id,$file_name,$backup_created_timestamp,$plugin_path){
|
187 |
+
global $wpdb;
|
188 |
+
$wpdb->insert(
|
189 |
+
$this->backupdetails,
|
190 |
+
array(
|
191 |
+
'backup_id' =>$backup_id,
|
192 |
+
'file_name' =>$file_name,
|
193 |
+
'created_timestamp'=> $backup_created_timestamp,
|
194 |
+
'plugin_path' => $plugin_path
|
195 |
+
));
|
196 |
+
}
|
197 |
+
|
198 |
+
function get_table_content(){
|
199 |
+
global $wpdb;
|
200 |
+
return $wpdb->get_results("SELECT plugin_path,file_name,created_timestamp,id FROM ".$this->backupdetails);
|
201 |
+
}
|
202 |
+
|
203 |
+
function get_number_of_plugin_backup(){
|
204 |
+
global $wpdb;
|
205 |
+
|
206 |
+
$plugin_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'plugin'");
|
207 |
+
$themes_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'themes'");
|
208 |
+
$wp_files_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'wpfiles'");
|
209 |
+
$db_count = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE backup_id = 'db'");
|
210 |
+
$total_backup = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails);
|
211 |
+
$array = array('plugin_count'=>$plugin_count,'themes_count'=>$themes_count,'wp_files_count'=>$wp_files_count,'db_count'=>$db_count,'total_backup'=>$total_backup);
|
212 |
+
|
213 |
+
return $array;
|
214 |
+
}
|
215 |
+
|
216 |
+
function delete_file($id){
|
217 |
+
global $wpdb;
|
218 |
+
$wpdb->query(
|
219 |
+
"DELETE FROM ".$this->backupdetails."
|
220 |
+
WHERE id = ".$id
|
221 |
+
);
|
222 |
+
return;
|
223 |
+
}
|
224 |
+
|
225 |
+
function row_exist($id){
|
226 |
+
global $wpdb;
|
227 |
+
$is_exist = $wpdb->get_var("SELECT COUNT(*) FROM ".$this->backupdetails." WHERE id =".$id );
|
228 |
+
return $is_exist;
|
229 |
+
}
|
230 |
+
|
231 |
+
function get_ip_blocked_count($ipAddress)
|
232 |
+
{
|
233 |
+
global $wpdb;
|
234 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE ip_address = '".$ipAddress."'" );
|
235 |
+
}
|
236 |
+
function get_total_blocked_ips()
|
237 |
+
{
|
238 |
+
global $wpdb;
|
239 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable);
|
240 |
+
}
|
241 |
+
function get_total_manual_blocked_ips()
|
242 |
+
{
|
243 |
+
global $wpdb;
|
244 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE reason = 'Blocked by Admin';");
|
245 |
+
}
|
246 |
+
function get_total_blocked_ips_waf()
|
247 |
+
{
|
248 |
+
global $wpdb;
|
249 |
+
$totalIPBlocked = $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable);
|
250 |
+
return $totalIPBlocked - $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->blockedIPsTable." WHERE reason = 'Blocked by Admin';");
|
251 |
+
}
|
252 |
+
function get_blocked_attack_count($attack)
|
253 |
+
{
|
254 |
+
global $wpdb;
|
255 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->attackList." WHERE type = '".$attack."'" );
|
256 |
+
}
|
257 |
+
|
258 |
+
function get_count_of_blocked_ips(){
|
259 |
+
global $wpdb;
|
260 |
+
return $wpdb->get_var("SELECT COUNT(*) FROM ".$this->blockedIPsTable."");
|
261 |
+
}
|
262 |
+
|
263 |
+
|
264 |
+
function get_blocked_ip($entryid)
|
265 |
+
{
|
266 |
+
global $wpdb;
|
267 |
+
return $wpdb->get_results( "SELECT ip_address FROM ".$this->blockedIPsTable." WHERE id=".$entryid );
|
268 |
+
}
|
269 |
+
|
270 |
+
function get_blocked_ip_list()
|
271 |
+
{
|
272 |
+
global $wpdb;
|
273 |
+
return $wpdb->get_results("SELECT id, reason, ip_address, created_timestamp FROM ".$this->blockedIPsTable);
|
274 |
+
}
|
275 |
+
|
276 |
+
function get_blocked_attack_list($tableName)
|
277 |
+
{
|
278 |
+
global $wpdb;
|
279 |
+
$tableName = $wpdb->base_prefix.$tableName;
|
280 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$tableName);
|
281 |
+
}
|
282 |
+
|
283 |
+
function get_blocked_sqli_list()
|
284 |
+
{
|
285 |
+
global $wpdb;
|
286 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$this->attackList."WHERE type='SQL attack'");
|
287 |
+
}
|
288 |
+
function get_blocked_rfi_list()
|
289 |
+
{
|
290 |
+
global $wpdb;
|
291 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$this->attackList."WHERE type='RFI attack'");
|
292 |
+
}
|
293 |
+
function get_blocked_lfi_list()
|
294 |
+
{
|
295 |
+
global $wpdb;
|
296 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$this->attackList."WHERE type='LFI attack'");
|
297 |
+
}
|
298 |
+
function get_blocked_rce_list()
|
299 |
+
{
|
300 |
+
global $wpdb;
|
301 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$this->attackList."WHERE type='RCE attack'");
|
302 |
+
}
|
303 |
+
function get_blocked_xss_list()
|
304 |
+
{
|
305 |
+
global $wpdb;
|
306 |
+
return $wpdb->get_results("SELECT ip, type, time, input FROM ".$this->attackList."WHERE type='XSS attack'");
|
307 |
+
}
|
308 |
+
|
309 |
+
function insert_blocked_ip($ipAddress,$reason,$blocked_for_time)
|
310 |
+
{
|
311 |
+
global $wpdb;
|
312 |
+
$wpdb->insert(
|
313 |
+
$this->blockedIPsTable,
|
314 |
+
array(
|
315 |
+
'ip_address' => $ipAddress,
|
316 |
+
'reason' => $reason,
|
317 |
+
'blocked_for_time' => $blocked_for_time,
|
318 |
+
'created_timestamp' => current_time( 'timestamp' )
|
319 |
+
)
|
320 |
+
);
|
321 |
+
return;
|
322 |
+
}
|
323 |
+
|
324 |
+
function delete_blocked_ip($entryid)
|
325 |
+
{
|
326 |
+
global $wpdb;
|
327 |
+
$wpdb->query(
|
328 |
+
"DELETE FROM ".$this->blockedIPsTable."
|
329 |
+
WHERE id = ".$entryid
|
330 |
+
);
|
331 |
+
return;
|
332 |
+
}
|
333 |
+
|
334 |
+
function get_whitelisted_ip_count($ipAddress)
|
335 |
+
{
|
336 |
+
global $wpdb;
|
337 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->whitelistIPsTable." WHERE ip_address = '".$ipAddress."'" );
|
338 |
+
}
|
339 |
+
|
340 |
+
function insert_whitelisted_ip($ipAddress)
|
341 |
+
{
|
342 |
+
global $wpdb;
|
343 |
+
$wpdb->insert(
|
344 |
+
$this->whitelistIPsTable,
|
345 |
+
array(
|
346 |
+
'ip_address' => $ipAddress,
|
347 |
+
'created_timestamp' => current_time( 'timestamp' )
|
348 |
+
)
|
349 |
+
);
|
350 |
+
}
|
351 |
+
|
352 |
+
function get_number_of_whitelisted_ips(){
|
353 |
+
global $wpdb;
|
354 |
+
return $wpdb->get_var("SELECT COUNT(*) FROM ".$this->whitelistIPsTable."");
|
355 |
+
}
|
356 |
+
|
357 |
+
function delete_whitelisted_ip($entryid)
|
358 |
+
{
|
359 |
+
global $wpdb;
|
360 |
+
$wpdb->query(
|
361 |
+
"DELETE FROM ".$this->whitelistIPsTable."
|
362 |
+
WHERE id = ".$entryid
|
363 |
+
);
|
364 |
+
return;
|
365 |
+
}
|
366 |
+
|
367 |
+
function get_whitelisted_ips_list()
|
368 |
+
{
|
369 |
+
global $wpdb;
|
370 |
+
return $wpdb->get_results( "SELECT id, ip_address, created_timestamp FROM ".$this->whitelistIPsTable );
|
371 |
+
}
|
372 |
+
|
373 |
+
function get_email_audit_count($ipAddress,$username)
|
374 |
+
{
|
375 |
+
global $wpdb;
|
376 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->emailAuditTable." WHERE ip_address = '".$ipAddress."' AND
|
377 |
+
username='".$username."'" );
|
378 |
+
}
|
379 |
+
|
380 |
+
function insert_email_audit($ipAddress,$username,$reason)
|
381 |
+
{
|
382 |
+
global $wpdb;
|
383 |
+
$wpdb->insert(
|
384 |
+
$this->emailAuditTable,
|
385 |
+
array(
|
386 |
+
'ip_address' => $ipAddress,
|
387 |
+
'username' => $username,
|
388 |
+
'reason' => $reason,
|
389 |
+
'created_timestamp' => current_time( 'timestamp' )
|
390 |
+
)
|
391 |
+
);
|
392 |
+
return;
|
393 |
+
}
|
394 |
+
|
395 |
+
function insert_transaction_audit($ipAddress,$username,$type,$status,$url=null)
|
396 |
+
{
|
397 |
+
global $wpdb;
|
398 |
+
$data = array(
|
399 |
+
'ip_address' => $ipAddress,
|
400 |
+
'username' => $username,
|
401 |
+
'type' => $type,
|
402 |
+
'status' => $status,
|
403 |
+
'created_timestamp' => current_time( 'timestamp' )
|
404 |
+
);
|
405 |
+
$data['url'] = is_null($url) ? '' : $url;
|
406 |
+
$wpdb->insert( $this->transactionTable, $data);
|
407 |
+
return;
|
408 |
+
}
|
409 |
+
|
410 |
+
function get_transasction_list()
|
411 |
+
{
|
412 |
+
global $wpdb;
|
413 |
+
return $wpdb->get_results( "SELECT ip_address, username, type, status, created_timestamp FROM ".$this->transactionTable." order by id desc limit 5000" );
|
414 |
+
}
|
415 |
+
|
416 |
+
function get_login_transaction_report()
|
417 |
+
{
|
418 |
+
global $wpdb;
|
419 |
+
return $wpdb->get_results( "SELECT ip_address, username, status, created_timestamp FROM ".$this->transactionTable." WHERE type='User Login' order by id desc limit 5000" );
|
420 |
+
}
|
421 |
+
|
422 |
+
function get_error_transaction_report()
|
423 |
+
{
|
424 |
+
global $wpdb;
|
425 |
+
return $wpdb->get_results( "SELECT ip_address, username, url, type, created_timestamp FROM ".$this->transactionTable." WHERE type <> 'User Login' order by id desc limit 5000" );
|
426 |
+
}
|
427 |
+
|
428 |
+
function update_transaction_table($where,$update)
|
429 |
+
{
|
430 |
+
global $wpdb;
|
431 |
+
|
432 |
+
$sql = "UPDATE ".$this->transactionTable." SET ";
|
433 |
+
$i = 0;
|
434 |
+
foreach($update as $key=>$value)
|
435 |
+
{
|
436 |
+
if($i%2!=0)
|
437 |
+
$sql .= ' , ';
|
438 |
+
$sql .= $key."='".$value."'";
|
439 |
+
$i++;
|
440 |
+
}
|
441 |
+
$sql .= " WHERE ";
|
442 |
+
$i = 0;
|
443 |
+
foreach($where as $key=>$value)
|
444 |
+
{
|
445 |
+
if($i%2!=0)
|
446 |
+
$sql .= ' AND ';
|
447 |
+
$sql .= $key."='".$value."'";
|
448 |
+
$i++;
|
449 |
+
}
|
450 |
+
|
451 |
+
$wpdb->query($sql);
|
452 |
+
return;
|
453 |
+
}
|
454 |
+
|
455 |
+
function get_count_of_attacks_blocked(){
|
456 |
+
global $wpdb;
|
457 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->transactionTable." WHERE status = '".MoWpnsConstants::FAILED."' OR status = '".MoWpnsConstants::PAST_FAILED."'" );
|
458 |
+
}
|
459 |
+
|
460 |
+
function get_failed_transaction_count($ipAddress)
|
461 |
+
{
|
462 |
+
global $wpdb;
|
463 |
+
return $wpdb->get_var( "SELECT COUNT(*) FROM ".$this->transactionTable." WHERE ip_address = '".$ipAddress."'
|
464 |
+
AND status = '".MoWpnsConstants::FAILED."'" );
|
465 |
+
}
|
466 |
+
|
467 |
+
function delete_transaction($ipAddress)
|
468 |
+
{
|
469 |
+
global $wpdb;
|
470 |
+
$wpdb->query(
|
471 |
+
"DELETE FROM ".$this->transactionTable."
|
472 |
+
WHERE ip_address = '".$ipAddress."' AND status='".MoWpnsConstants::FAILED."'"
|
473 |
+
);
|
474 |
+
return;
|
475 |
+
}
|
476 |
+
|
477 |
+
function create_scan_report($folderNames, $scan_type, $start_timestamp, $repo_check_status_code){
|
478 |
+
global $wpdb;
|
479 |
+
$wpdb->insert(
|
480 |
+
$this->malwarereportTable,
|
481 |
+
array(
|
482 |
+
'scan_mode' => $scan_type,
|
483 |
+
'scanned_folders' => $folderNames,
|
484 |
+
'scanned_files' => 0,
|
485 |
+
'start_timestamp' => $start_timestamp,
|
486 |
+
'malware_count' => 0,
|
487 |
+
'repo_issues' => $repo_check_status_code,
|
488 |
+
'malicious_links' => 0
|
489 |
+
)
|
490 |
+
);
|
491 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->malwarereportTable." order by id DESC LIMIT 1");
|
492 |
+
if($result){
|
493 |
+
$record = $result[0];
|
494 |
+
return $record->id;
|
495 |
+
}
|
496 |
+
}
|
497 |
+
|
498 |
+
function add_report_details($reportid, $filename, $report){
|
499 |
+
global $wpdb;
|
500 |
+
$wpdb->insert(
|
501 |
+
$this->scanreportdetails,
|
502 |
+
array(
|
503 |
+
'report_id' => $reportid,
|
504 |
+
'filename' => $filename,
|
505 |
+
'report' => serialize($report),
|
506 |
+
'created_timestamp' => current_time('timestamp')
|
507 |
+
)
|
508 |
+
);
|
509 |
+
}
|
510 |
+
|
511 |
+
function scan_report_complete($recordId, $no_of_scanned_files, $malware_count, $repo_issues, $malicious_links){
|
512 |
+
global $wpdb;
|
513 |
+
$wpdb->query(
|
514 |
+
"UPDATE ".$this->malwarereportTable." set completed_timestamp = ".current_time('timestamp').", scanned_files=".$no_of_scanned_files.", malware_count= '".$malware_count."', repo_issues='".$repo_issues."', malicious_links='".$malicious_links."' WHERE id = ".$recordId
|
515 |
+
);
|
516 |
+
}
|
517 |
+
|
518 |
+
function count_files(){
|
519 |
+
global $wpdb;
|
520 |
+
$sql= $wpdb->get_results("SELECT SUM(`scanned_files`) AS scan_count FROM ".$this->malwarereportTable);
|
521 |
+
return $sql[0]->scan_count;
|
522 |
+
}
|
523 |
+
|
524 |
+
function count_malicious_files(){
|
525 |
+
global $wpdb;
|
526 |
+
$sql= $wpdb->get_results("SELECT COUNT(*) AS total_mal FROM ".$this->scanreportdetails);
|
527 |
+
return $sql[0]->total_mal;
|
528 |
+
}
|
529 |
+
|
530 |
+
function count_files_last_scan($reportid){
|
531 |
+
global $wpdb;
|
532 |
+
$sql= $wpdb->get_results('SELECT * FROM '.$this->malwarereportTable.' WHERE `id`="'.$reportid.'"');
|
533 |
+
return $sql[0]->scanned_files;
|
534 |
+
}
|
535 |
+
|
536 |
+
function count_malicious_last_scan($reportid){
|
537 |
+
global $wpdb;
|
538 |
+
$sql= $wpdb->get_results('SELECT COUNT(*) AS mal_file FROM '.$this->scanreportdetails.' WHERE `report_id`="'.$reportid.'"');
|
539 |
+
return $sql[0]->mal_file;
|
540 |
+
}
|
541 |
+
|
542 |
+
function check_hash($hash_of_file){
|
543 |
+
global $wpdb;
|
544 |
+
$sql= 'SELECT * FROM '.$this->hashfile.' WHERE `file hash`="'.$hash_of_file.'"';
|
545 |
+
$result=$wpdb->get_results( $sql );
|
546 |
+
return $result;
|
547 |
+
}
|
548 |
+
|
549 |
+
function insert_hash($source_file_path,$hash_of_file, $scan_data){
|
550 |
+
global $wpdb;
|
551 |
+
$source_file_path = addslashes($source_file_path);
|
552 |
+
$query= "INSERT INTO ".$this->hashfile."(`file name`,`file hash`,`scan_data`) VALUES('".$source_file_path."', '".$hash_of_file."', '".serialize($scan_data)."') ON DUPLICATE KEY UPDATE `file hash`='".$hash_of_file."' AND `scan_data`='".serialize($scan_data)."'";
|
553 |
+
$res=$wpdb->query( $query );
|
554 |
+
}
|
555 |
+
|
556 |
+
function update_hash($source_file_path, $hash_of_file, $scan_data){
|
557 |
+
global $wpdb;
|
558 |
+
$source_file_path = addslashes($source_file_path);
|
559 |
+
$query= "UPDATE ".$this->hashfile." SET `file hash`='".$hash_of_file."',`scan_data`='".serialize($scan_data)."' WHERE `file name`='".$source_file_path."'";
|
560 |
+
$res=$wpdb->query( $query );
|
561 |
+
}
|
562 |
+
|
563 |
+
function delete_hash($source_file_path){
|
564 |
+
global $wpdb;
|
565 |
+
$query= "DELETE FROM ".$this->hashfile." WHERE `file name` = '".$source_file_path."'";
|
566 |
+
$res=$wpdb->query( $query );
|
567 |
+
}
|
568 |
+
|
569 |
+
function get_infected_file($filename){
|
570 |
+
global $wpdb;
|
571 |
+
$filename = addslashes($filename);
|
572 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->scanreportdetails." where filename=".$filename );
|
573 |
+
return $result;
|
574 |
+
}
|
575 |
+
|
576 |
+
function insert_files_in_parts($file_path_array){
|
577 |
+
global $wpdb;
|
578 |
+
if(!empty($file_path_array)){
|
579 |
+
$size=sizeof($file_path_array);
|
580 |
+
$default=0;
|
581 |
+
$query="INSERT INTO ".$this->filescan."(`path`, `name_hash`, `malware_service`, `repo_check`, `link_check`) VALUES";
|
582 |
+
for ($i=1; $i <= $size ; $i++) {
|
583 |
+
$value= $file_path_array[$i];
|
584 |
+
$value = addslashes($value);
|
585 |
+
$hash_value= md5($value);
|
586 |
+
$query.= "('".$value."', '".$hash_value."', '".$default."', '".$default."', '".$default."')";
|
587 |
+
if($i < $size){
|
588 |
+
$query.= ",";
|
589 |
+
}
|
590 |
+
}
|
591 |
+
$query.=";";
|
592 |
+
$res=$wpdb->query( $query );
|
593 |
+
}
|
594 |
+
}
|
595 |
+
|
596 |
+
function update_files_scan($file_path_array, $file_count){
|
597 |
+
global $wpdb;
|
598 |
+
$query="INSERT INTO ".$this->filescan."(`name_hash`, `malware_service`) VALUES";
|
599 |
+
for ($i=0; $i < $file_count ; $i++) {
|
600 |
+
$value= $file_path_array[$i]->path;
|
601 |
+
$value = addslashes($value);
|
602 |
+
$value = md5($value);
|
603 |
+
$query.= "('".$value."', 1)";
|
604 |
+
if($i < $file_count-1){
|
605 |
+
$query.= ",";
|
606 |
+
}
|
607 |
+
}
|
608 |
+
$query.=" ON DUPLICATE KEY UPDATE `malware_service`= VALUES(malware_service);";
|
609 |
+
$res=$wpdb->query( $query );
|
610 |
+
}
|
611 |
+
|
612 |
+
function update_files_scan_ext_link($file_path_array, $file_count){
|
613 |
+
global $wpdb;
|
614 |
+
$query="INSERT INTO ".$this->filescan."(`name_hash`, `link_check`) VALUES";
|
615 |
+
for ($i=0; $i < $file_count ; $i++) {
|
616 |
+
$value= $file_path_array[$i]->path;
|
617 |
+
$value = addslashes($value);
|
618 |
+
$value = md5($value);
|
619 |
+
$query.= "('".$value."', 1)";
|
620 |
+
if($i < $file_count-1){
|
621 |
+
$query.= ",";
|
622 |
+
}
|
623 |
+
}
|
624 |
+
$query.=" ON DUPLICATE KEY UPDATE `link_check`= VALUES(link_check);";
|
625 |
+
$res=$wpdb->query( $query );
|
626 |
+
}
|
627 |
+
|
628 |
+
function update_files_scan_repo($file_path_array, $file_count){
|
629 |
+
global $wpdb;
|
630 |
+
$query="INSERT INTO ".$this->filescan."(`name_hash`, `repo_check`) VALUES";
|
631 |
+
for ($i=0; $i < $file_count ; $i++) {
|
632 |
+
$value= $file_path_array[$i]->path;
|
633 |
+
$value = addslashes($value);
|
634 |
+
$value = md5($value);
|
635 |
+
$query.= "('".$value."', 1)";
|
636 |
+
if($i < $file_count-1){
|
637 |
+
$query.= ",";
|
638 |
+
}
|
639 |
+
}
|
640 |
+
$query.=" ON DUPLICATE KEY UPDATE `repo_check`= VALUES(repo_check);";
|
641 |
+
$res=$wpdb->query( $query );
|
642 |
+
}
|
643 |
+
|
644 |
+
function get_files_in_parts(){
|
645 |
+
global $wpdb;
|
646 |
+
$sql= 'SELECT * FROM '.$this->filescan.' WHERE `malware_service`= 0 LIMIT 100';
|
647 |
+
$result=$wpdb->get_results($sql);
|
648 |
+
return $result;
|
649 |
+
}
|
650 |
+
|
651 |
+
function get_files_for_link(){
|
652 |
+
global $wpdb;
|
653 |
+
$sql= 'SELECT * FROM '.$this->filescan.' WHERE `link_check`= 0 LIMIT 100';
|
654 |
+
$result=$wpdb->get_results($sql);
|
655 |
+
return $result;
|
656 |
+
}
|
657 |
+
|
658 |
+
function get_files_for_repo(){
|
659 |
+
global $wpdb;
|
660 |
+
$sql= 'SELECT * FROM '.$this->filescan.' WHERE `repo_check`= 0 LIMIT 100';
|
661 |
+
$result=$wpdb->get_results($sql);
|
662 |
+
return $result;
|
663 |
+
}
|
664 |
+
|
665 |
+
function delete_files_parts(){
|
666 |
+
global $wpdb;
|
667 |
+
$sql= "TRUNCATE TABLE ".$this->filescan.";";
|
668 |
+
$res=$wpdb->query($sql);
|
669 |
+
}
|
670 |
+
|
671 |
+
function get_last_id(){
|
672 |
+
global $wpdb;
|
673 |
+
$result= $wpdb->get_results("SELECT MAX(Id) AS max FROM ".$this->malwarereportTable);
|
674 |
+
return $result;
|
675 |
+
}
|
676 |
+
|
677 |
+
function get_report_with_id($reportid){
|
678 |
+
global $wpdb;
|
679 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->malwarereportTable." where id=".$reportid );
|
680 |
+
return $result;
|
681 |
+
}
|
682 |
+
|
683 |
+
function delete_report($reportid){
|
684 |
+
global $wpdb;
|
685 |
+
$wpdb->query(
|
686 |
+
"DELETE FROM ".$this->malwarereportTable." WHERE id = ".$reportid
|
687 |
+
);
|
688 |
+
$warning_count=0;
|
689 |
+
$malware_count=0;
|
690 |
+
$last_id=$this->get_last_id();
|
691 |
+
$send_id=$last_id[0]->max;
|
692 |
+
if(!is_null($send_id)){
|
693 |
+
$res = $this->get_report_with_id($send_id);
|
694 |
+
$record = $res[0];
|
695 |
+
if($record->malware_count >= 0){
|
696 |
+
$malware_count = $record->malware_count;
|
697 |
+
}
|
698 |
+
if($record->repo_issues < 0){
|
699 |
+
$warning_count = $record->malicious_links;
|
700 |
+
}else{
|
701 |
+
$warning_count = $record->repo_issues + $record->malicious_links;
|
702 |
+
}
|
703 |
+
}
|
704 |
+
|
705 |
+
update_option('mo_wpns_infected_files', $malware_count);
|
706 |
+
update_option('mo_wpns_warning_files', $warning_count);
|
707 |
+
|
708 |
+
}
|
709 |
+
|
710 |
+
function get_report(){
|
711 |
+
global $wpdb;
|
712 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->malwarereportTable." order by id desc" );
|
713 |
+
return $result;
|
714 |
+
}
|
715 |
+
|
716 |
+
function get_vulnerable_files_count_for_reportid($reportid){
|
717 |
+
global $wpdb;
|
718 |
+
$result = $wpdb->get_results( "SELECT count(*) as count FROM ".$this->scanreportdetails." where report_id=".$reportid );
|
719 |
+
return $result;
|
720 |
+
}
|
721 |
+
|
722 |
+
function ignorefile($filename){
|
723 |
+
$signature = md5_file($filename);
|
724 |
+
global $wpdb;
|
725 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->skipfiles." where path = '".$filename."'" );
|
726 |
+
if($result){
|
727 |
+
$wpdb->query(
|
728 |
+
"UPDATE ".$this->skipfiles." SET signature = '".$signature."' WHERE path = '".$filename."'"
|
729 |
+
);
|
730 |
+
} else {
|
731 |
+
$wpdb->insert(
|
732 |
+
$this->skipfiles,
|
733 |
+
array(
|
734 |
+
'path' => $filename,
|
735 |
+
'signature' => $signature,
|
736 |
+
'created_timestamp' => current_time('timestamp')
|
737 |
+
)
|
738 |
+
);
|
739 |
+
}
|
740 |
+
}
|
741 |
+
|
742 |
+
function ignorechangedfile($recordId){
|
743 |
+
global $wpdb;
|
744 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->skipfiles." where id = ".$recordId );
|
745 |
+
if($result){
|
746 |
+
$record = $result[0];
|
747 |
+
$signature = md5_file($record->path);
|
748 |
+
$wpdb->query(
|
749 |
+
"UPDATE ".$this->skipfiles." set signature = '".$signature."' WHERE id = ".$recordId
|
750 |
+
);
|
751 |
+
}
|
752 |
+
}
|
753 |
+
|
754 |
+
function getlistofignorefiles(){
|
755 |
+
global $wpdb;
|
756 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->skipfiles."" );
|
757 |
+
return $result;
|
758 |
+
}
|
759 |
+
|
760 |
+
function get_detail_report_with_id($reportid){
|
761 |
+
global $wpdb;
|
762 |
+
$result = $wpdb->get_results( "SELECT * FROM ".$this->scanreportdetails." where report_id=".$reportid );
|
763 |
+
return $result;
|
764 |
+
}
|
765 |
+
|
766 |
+
function mo_wpns_upgrade_process_complete(){
|
767 |
+
$current_db_version = get_option('mo_wpns_dbversion');
|
768 |
+
if($current_db_version < MoWpnsConstants::DB_VERSION){
|
769 |
+
update_option('mo_wpns_dbversion', MoWpnsConstants::DB_VERSION );
|
770 |
+
$row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '".$this->malwarereportTable."' AND column_name = 'malware_count' AND column_name='repo_issues' AND column_name='malicious_links'" );
|
771 |
+
if(empty($row)){
|
772 |
+
$result = $wpdb->query("ALTER TABLE $this->malwarereportTable ADD COLUMN `malware_count` INT NOT NULL DEFAULT 0 AFTER `scanned_files`, ADD COLUMN `repo_issues` INT NOT NULL DEFAULT 0 AFTER `malware_count`, ADD COLUMN `malicious_links` INT NOT NULL DEFAULT 0 AFTER `repo_issues`");
|
773 |
+
if($result){
|
774 |
+
$report_ids = $wpdb->get_results("SELECT id FROM $this->malwarereportTable");
|
775 |
+
foreach ($report_ids as $key => $value) {
|
776 |
+
$scan_detail = $wpdb->get_results("SELECT report FROM $this->scanreportdetails WHERE report_id='".$report_ids[$key]->id."'");
|
777 |
+
$result = $this->mo_wpns_get_scan_count($scan_detail);
|
778 |
+
$wpdb->query("UPDATE $this->malwarereportTable SET 'malware_count'= '".$result['scan']."', `repo_issues`='".$result['repo']."', `malicious_links`='".$result['extl']."' WHERE id='".$report_ids[$key]->id."'");
|
779 |
+
}
|
780 |
+
}
|
781 |
+
}
|
782 |
+
$rowhash = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '".$this->hashfile."' AND column_name = 'scan_data'" );
|
783 |
+
if(empty($rowhash)){
|
784 |
+
$result = $wpdb->query("ALTER TABLE $this->hashfile ADD COLUMN `scan_data` mediumtext NOT NULL");
|
785 |
+
}
|
786 |
+
}
|
787 |
+
}
|
788 |
+
|
789 |
+
function mo_wpns_get_scan_count($result){
|
790 |
+
$scan_count = 0;
|
791 |
+
$repo_count = 0;
|
792 |
+
$link_count = 0;
|
793 |
+
$total = 0;
|
794 |
+
foreach ($result as $key => $value) {
|
795 |
+
$total+=1;
|
796 |
+
$temp = unserialize($result[$key]->report);
|
797 |
+
if(isset($temp['scan'])&&isset($temp['repo'])&&isset($temp['extl'])){
|
798 |
+
$scan_count++;
|
799 |
+
$repo_count++;
|
800 |
+
$link_count++;
|
801 |
+
}else if(isset($temp['scan'])&&isset($temp['repo'])){
|
802 |
+
$scan_count++;
|
803 |
+
$repo_count++;
|
804 |
+
}else if(isset($temp['scan'])&&isset($temp['extl'])){
|
805 |
+
$scan_count++;
|
806 |
+
$link_count++;
|
807 |
+
}else if(isset($temp['repo'])&&isset($temp['extl'])){
|
808 |
+
$repo_count++;
|
809 |
+
$link_count++;
|
810 |
+
}else if(isset($temp['scan'])){
|
811 |
+
$scan_count++;
|
812 |
+
}else if(isset($temp['repo'])){
|
813 |
+
$repo_count++;
|
814 |
+
}else if(isset($temp['extl'])){
|
815 |
+
$link_count++;
|
816 |
+
}
|
817 |
+
}
|
818 |
+
return array('scan'=>$scan_count, 'repo'=>$repo_count, 'extl'=>$link_count);
|
819 |
+
}
|
820 |
}
|
database/database_functions_2fa.php
CHANGED
@@ -60,8 +60,10 @@ class Mo2fDB {
|
|
60 |
add_site_option( 'cmVtYWluaW5nT1RQ' ,30);
|
61 |
add_site_option( 'bGltaXRSZWFjaGVk' ,0);
|
62 |
add_site_option( base64_encode('totalUsersCloud'),0);
|
63 |
-
|
64 |
-
|
|
|
|
|
65 |
$check_if_column_exists = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_OTPOverEmail_config_status" );
|
66 |
|
67 |
if ( ! $check_if_column_exists ) {
|
60 |
add_site_option( 'cmVtYWluaW5nT1RQ' ,30);
|
61 |
add_site_option( 'bGltaXRSZWFjaGVk' ,0);
|
62 |
add_site_option( base64_encode('totalUsersCloud'),0);
|
63 |
+
|
64 |
+
|
65 |
+
|
66 |
+
|
67 |
$check_if_column_exists = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_OTPOverEmail_config_status" );
|
68 |
|
69 |
if ( ! $check_if_column_exists ) {
|
database/mo2f_db_options.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$GLOBALS['mo2f_enable_brute_force'] = false;
|
3 |
+
$GLOBALS['mo2f_show_remaining_attempts'] = false;
|
4 |
+
$GLOBALS['mo_wpns_enable_ip_blocked_email_to_admin'] = false;
|
5 |
+
$GLOBALS['mo2f_activate_plugin'] = 1;
|
6 |
+
$GLOBALS['mo2f_login_option'] = 1;
|
7 |
+
$GLOBALS['mo2f_number_of_transactions'] = 1;
|
8 |
+
$GLOBALS['mo2f_set_transactions'] = 0;
|
9 |
+
$GLOBALS['mo2f_enable_forgotphone'] = 0;
|
10 |
+
$GLOBALS['mo2f_enable_2fa_for_users'] = 1;
|
11 |
+
$GLOBALS['mo2f_enable_2fa_prompt_on_login_page'] = 0;
|
12 |
+
$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['mo_database_backup'] = 1;
|
25 |
+
$GLOBALS['mo_wpns_scan_initialize'] = 1;
|
26 |
+
$GLOBALS['mo_file_manual_backup_plugins'] = 1;
|
27 |
+
$GLOBALS['mo_file_manual_backup_themes'] = 1;
|
28 |
+
$GLOBALS['mo_schedule_database_backup'] = 1;
|
29 |
+
$GLOBALS['mo_wpns_2fa_with_network_security'] = 0;
|
30 |
+
$GLOBALS['mo_wpns_2fa_with_network_security_popup_visible'] = 1;
|
31 |
+
$GLOBALS['mo2f_two_factor_tour'] = -1;
|
32 |
+
$GLOBALS['mo2f_planname'] = '';
|
33 |
+
$GLOBALS['cmVtYWluaW5nT1RQ'] = 30;
|
34 |
+
$GLOBALS['bGltaXRSZWFjaGVk'] = 0;
|
35 |
+
$GLOBALS['mo2f_is_NC'] = 1;
|
36 |
+
$GLOBALS['mo2f_is_NNC'] = 1;
|
37 |
+
$GLOBALS['mo2f_enforce_strong_passswords'] = false;
|
handler/WAF/database/mo-waf-db-common.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
function retrivefullname($name)
|
3 |
+
{
|
4 |
+
|
5 |
+
switch ($name) {
|
6 |
+
case 'XSS':
|
7 |
+
return 'Cross-site Scripting';
|
8 |
+
case 'SQL':
|
9 |
+
return 'SQL injection';
|
10 |
+
case 'RCE':
|
11 |
+
return 'Remote Code Execution';
|
12 |
+
case 'LFI':
|
13 |
+
return 'Local File Inclusion';
|
14 |
+
case 'RFI':
|
15 |
+
return 'Remote File Inclusion';
|
16 |
+
case 'RLE':
|
17 |
+
return 'Rate limiting Exceeded';
|
18 |
+
case 'RLECrawler':
|
19 |
+
return 'Rate limit Exceeded for crawler';
|
20 |
+
default:
|
21 |
+
return $name;
|
22 |
+
|
23 |
+
}
|
24 |
+
|
25 |
+
}
|
handler/WAF/database/mo-waf-db.php
CHANGED
@@ -1,5 +1,6 @@
|
|
1 |
<?php
|
2 |
global $dbcon,$prefix;
|
|
|
3 |
function log_attack($ipaddress,$value1,$value)
|
4 |
{
|
5 |
global $prefix,$dbcon;
|
@@ -11,7 +12,6 @@
|
|
11 |
$rows = mysqli_fetch_array($results);
|
12 |
return $rows['count(*)'];
|
13 |
}
|
14 |
-
|
15 |
function setting_file()
|
16 |
{
|
17 |
global $prefix,$dbcon;
|
1 |
<?php
|
2 |
global $dbcon,$prefix;
|
3 |
+
include_once('mo-waf-db-common.php');
|
4 |
function log_attack($ipaddress,$value1,$value)
|
5 |
{
|
6 |
global $prefix,$dbcon;
|
12 |
$rows = mysqli_fetch_array($results);
|
13 |
return $rows['count(*)'];
|
14 |
}
|
|
|
15 |
function setting_file()
|
16 |
{
|
17 |
global $prefix,$dbcon;
|
handler/WAF/database/mo-waf-plugin-db.php
CHANGED
@@ -1,4 +1,6 @@
|
|
1 |
<?php
|
|
|
|
|
2 |
function setting_file()
|
3 |
{
|
4 |
global $prefix,$dbcon;
|
@@ -55,7 +57,8 @@
|
|
55 |
$results = $wpdb->get_results($query);
|
56 |
return $results[0]->count;
|
57 |
}
|
58 |
-
|
|
|
59 |
function CheckRate($ipaddress)
|
60 |
{
|
61 |
global $wpdb;
|
1 |
<?php
|
2 |
+
|
3 |
+
include_once('mo-waf-db-common.php');
|
4 |
function setting_file()
|
5 |
{
|
6 |
global $prefix,$dbcon;
|
57 |
$results = $wpdb->get_results($query);
|
58 |
return $results[0]->count;
|
59 |
}
|
60 |
+
|
61 |
+
|
62 |
function CheckRate($ipaddress)
|
63 |
{
|
64 |
global $wpdb;
|
handler/WAF/mo-waf-plugin.php
CHANGED
@@ -1,211 +1,212 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$dir = dirname(__FILE__);
|
4 |
-
$dir = str_replace('\\', "/", $dir);
|
5 |
-
$dir = explode('handler', $dir);
|
6 |
-
$wafInclude = $dir[0].'/handler/WAF/waf-include.php';
|
7 |
-
$pluginU = $dir[0].'helper/pluginUtility.php';
|
8 |
-
$wafDB = $dir[0].'/handler/WAF/database/mo-waf-plugin-db.php';
|
9 |
-
$errorPage = $dir[0].'handler/mo-error.html';
|
10 |
-
$blockPage = $dir[0].'handler/mo-block.html';
|
11 |
-
|
12 |
-
include_once($wafInclude);
|
13 |
-
include_once($pluginU);
|
14 |
-
include_once($wafDB);
|
15 |
-
|
16 |
-
|
17 |
-
global $wpdb,$mowpnshandle;
|
18 |
-
$mowpnshandle = new MoWpnsHandler();
|
19 |
-
$ipaddress = get_ipaddress();
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
$
|
80 |
-
$
|
81 |
-
$
|
82 |
-
$
|
83 |
-
$
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
$
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
$
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
$
|
185 |
-
$
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
|
|
211 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$dir = dirname(__FILE__);
|
4 |
+
$dir = str_replace('\\', "/", $dir);
|
5 |
+
$dir = explode('handler', $dir);
|
6 |
+
$wafInclude = $dir[0].'/handler/WAF/waf-include.php';
|
7 |
+
$pluginU = $dir[0].'helper/pluginUtility.php';
|
8 |
+
$wafDB = $dir[0].'/handler/WAF/database/mo-waf-plugin-db.php';
|
9 |
+
$errorPage = $dir[0].'handler/mo-error.html';
|
10 |
+
$blockPage = $dir[0].'handler/mo-block.html';
|
11 |
+
|
12 |
+
include_once($wafInclude);
|
13 |
+
include_once($pluginU);
|
14 |
+
include_once($wafDB);
|
15 |
+
|
16 |
+
|
17 |
+
global $wpdb,$mowpnshandle;
|
18 |
+
$mowpnshandle = new MoWpnsHandler();
|
19 |
+
$ipaddress = get_ipaddress();
|
20 |
+
$ipaddress = sanitize_text_field($ipaddress);
|
21 |
+
if($mowpnshandle->is_ip_blocked($ipaddress))
|
22 |
+
{
|
23 |
+
if(!$mowpnshandle->is_whitelisted($ipaddress))
|
24 |
+
{
|
25 |
+
header('HTTP/1.1 403 Forbidden');
|
26 |
+
include_once($blockPage);
|
27 |
+
exit;
|
28 |
+
}
|
29 |
+
}
|
30 |
+
$fileName = setting_file();
|
31 |
+
if($fileName != "notMissing")
|
32 |
+
{
|
33 |
+
include_once($fileName);
|
34 |
+
}
|
35 |
+
if(isset($RateLimiting) and $RateLimiting == 1)
|
36 |
+
{
|
37 |
+
if(!is_crawler())
|
38 |
+
{
|
39 |
+
applyRateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
40 |
+
}
|
41 |
+
}
|
42 |
+
if(isset($RateLimitingCrawler))
|
43 |
+
{
|
44 |
+
if($RateLimitingCrawler == 1)
|
45 |
+
{
|
46 |
+
if(is_crawler())
|
47 |
+
{
|
48 |
+
if(is_fake_googlebot($ipaddress))
|
49 |
+
{
|
50 |
+
header('HTTP/1.1 403 Forbidden');
|
51 |
+
include_once($errorPage);
|
52 |
+
exit;
|
53 |
+
}
|
54 |
+
if($RateLimitingCrawler == '1')
|
55 |
+
{
|
56 |
+
applyRateLimitingCrawler($ipaddress,$fileName,$errorPage);
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
}
|
61 |
+
}
|
62 |
+
$attack = array();
|
63 |
+
if(isset($SQL) )
|
64 |
+
{
|
65 |
+
if($SQL==1)
|
66 |
+
array_push($attack,"SQL");
|
67 |
+
}
|
68 |
+
if(isset($XSS) )
|
69 |
+
{
|
70 |
+
if( $XSS==1)
|
71 |
+
array_push($attack,"XSS");
|
72 |
+
}
|
73 |
+
if(isset($LFI))
|
74 |
+
{
|
75 |
+
if($LFI==1)
|
76 |
+
array_push($attack,"LFI");
|
77 |
+
}
|
78 |
+
|
79 |
+
$attackC = $attack;
|
80 |
+
$ParanoiaLevel = 1;
|
81 |
+
$annomalyS = 0;
|
82 |
+
$SQLScore = 0;
|
83 |
+
$XSSScore = 0;
|
84 |
+
$limitAttack = get_option('limitAttack');
|
85 |
+
|
86 |
+
|
87 |
+
foreach ($attackC as $key1 => $value1)
|
88 |
+
{
|
89 |
+
for($lev=1;$lev<=$ParanoiaLevel;$lev++)
|
90 |
+
{
|
91 |
+
if(isset($regex[$value1][$lev]))
|
92 |
+
{ $ooo = 0;
|
93 |
+
for($i=0;$i<sizeof($regex[$value1][$lev]);$i++)
|
94 |
+
{
|
95 |
+
foreach ($_REQUEST as $key => $value) {
|
96 |
+
|
97 |
+
if($regex[$value1][$lev][$i] != "")
|
98 |
+
{
|
99 |
+
if(is_string($value))
|
100 |
+
{
|
101 |
+
if(preg_match($regex[$value1][$lev][$i], $value))
|
102 |
+
{
|
103 |
+
|
104 |
+
if($value1 == "SQL")
|
105 |
+
{
|
106 |
+
$SQLScore += $score[$value1][$lev][$i];
|
107 |
+
}
|
108 |
+
elseif ($value1 == "XSS")
|
109 |
+
{
|
110 |
+
$XSSScore += $score[$value1][$lev][$i];
|
111 |
+
}
|
112 |
+
else
|
113 |
+
{
|
114 |
+
$annomalyS += $score[$value1][$lev][$i];
|
115 |
+
}
|
116 |
+
|
117 |
+
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
118 |
+
{
|
119 |
+
$attackCount = log_attack($ipaddress,$value1,$value);
|
120 |
+
if($attackCount>$limitAttack)
|
121 |
+
{
|
122 |
+
if(!$mowpnshandle->is_whitelisted($ipaddress))
|
123 |
+
{
|
124 |
+
if(!$mowpnshandle->is_ip_blocked($ipaddress))
|
125 |
+
$mowpnshandle->block_ip($ipaddress,'Attack limit Exceeded',true); //Attack Limit Exceed
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
header('HTTP/1.1 403 Forbidden');
|
130 |
+
include_once($errorPage);
|
131 |
+
exit;
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
138 |
+
}
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
function applyRateLimiting($reqLimit,$action,$ipaddress,$errorPage)
|
143 |
+
{
|
144 |
+
global $wpdb,$mowpnshandle;
|
145 |
+
$rate = CheckRate($ipaddress);
|
146 |
+
if($rate>=$reqLimit)
|
147 |
+
{
|
148 |
+
$lastAttack = getRLEAttack($ipaddress)+60;
|
149 |
+
$current_time = time();
|
150 |
+
if($lastAttack < $current_time-60)
|
151 |
+
{
|
152 |
+
log_attack($ipaddress,'RLE','RLE');
|
153 |
+
}
|
154 |
+
if($action != 'ThrottleIP')
|
155 |
+
{
|
156 |
+
if(!$mowpnshandle->is_whitelisted($ipaddress))
|
157 |
+
{
|
158 |
+
$mowpnshandle->block_ip($ipaddress,'RLE',true);
|
159 |
+
}
|
160 |
+
}
|
161 |
+
header('HTTP/1.1 403 Forbidden');
|
162 |
+
include_once($errorPage);
|
163 |
+
exit;
|
164 |
+
}
|
165 |
+
}
|
166 |
+
function applyRateLimitingCrawler($ipaddress,$filename,$errorPage)
|
167 |
+
{
|
168 |
+
if(file_exists($filename))
|
169 |
+
{
|
170 |
+
include($filename);
|
171 |
+
}
|
172 |
+
global $wpdb,$mowpnshandle;
|
173 |
+
$USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
|
174 |
+
if(isset($RateLimitingCrawler))
|
175 |
+
{
|
176 |
+
if($RateLimitingCrawler=='1')
|
177 |
+
{
|
178 |
+
if(isset($RequestsPMinCrawler))
|
179 |
+
{
|
180 |
+
$reqLimit = $RequestsPMinCrawler;
|
181 |
+
$rate = CheckRate($ipaddress);
|
182 |
+
if($rate>=$reqLimit)
|
183 |
+
{
|
184 |
+
$action = $actionRateLCrawler;
|
185 |
+
$lastAttack = getRLEattack($ipaddress)+60;
|
186 |
+
$current_time = time();
|
187 |
+
if($current_time>$lastAttack)
|
188 |
+
{
|
189 |
+
log_attack($ipaddress,'RLECrawler',$USER_AGENT);
|
190 |
+
}
|
191 |
+
if($action != 'ThrottleIP')
|
192 |
+
{
|
193 |
+
if(!$mowpnshandle->is_whitelisted($ipaddress))
|
194 |
+
{
|
195 |
+
if(!$mowpnshandle->is_ip_blocked($ipaddress))
|
196 |
+
{
|
197 |
+
$mowpnshandle->block_ip($ipaddress,'RLECrawler',true);
|
198 |
+
}
|
199 |
+
}
|
200 |
+
}
|
201 |
+
header('HTTP/1.1 403 Forbidden');
|
202 |
+
include_once($errorPage);
|
203 |
+
exit;
|
204 |
+
}
|
205 |
+
}
|
206 |
+
}
|
207 |
+
}
|
208 |
+
}
|
209 |
+
|
210 |
+
|
211 |
+
|
212 |
?>
|
handler/WAF/mo-waf.php
CHANGED
@@ -1,207 +1,207 @@
|
|
1 |
-
<?php
|
2 |
-
$dir = dirname(__FILE__);
|
3 |
-
$dir = str_replace('\\', "/", $dir);
|
4 |
-
$dir = explode('WAF', $dir);
|
5 |
-
$wafInclude = $dir[0].'WAF/waf-include.php';
|
6 |
-
$wafdb = $dir[0].'WAF/database/mo-waf-db.php';
|
7 |
-
$errorPage = $dir[0].'mo-error.html';
|
8 |
-
$blockPage = $dir[0].'mo-block.html';
|
9 |
-
|
10 |
-
include_once($wafInclude);
|
11 |
-
include_once($wafdb);
|
12 |
-
|
13 |
-
global $dbcon,$prefix;
|
14 |
-
$connection = dbconnection();
|
15 |
-
if($connection)
|
16 |
-
{
|
17 |
-
$wafLevel = get_option_value('WAF');
|
18 |
-
if($wafLevel=='HtaccessLevel')
|
19 |
-
{
|
20 |
-
$ipaddress = get_ipaddress();
|
21 |
-
if(is_ip_blocked($ipaddress))
|
22 |
-
{
|
23 |
-
if(!is_ip_whitelisted($ipaddress))
|
24 |
-
{
|
25 |
-
header('HTTP/1.1 403 Forbidden');
|
26 |
-
include_once($blockPage);
|
27 |
-
exit;
|
28 |
-
}
|
29 |
-
}
|
30 |
-
$fileName = setting_file();
|
31 |
-
|
32 |
-
if($fileName != 'notMissing')
|
33 |
-
{
|
34 |
-
include_once($fileName);
|
35 |
-
}
|
36 |
-
if(isset($RateLimiting) && $RateLimiting == 1)
|
37 |
-
{
|
38 |
-
if(!is_crawler())
|
39 |
-
{
|
40 |
-
if(isset($RequestsPMin) && isset($actionRateL))
|
41 |
-
applyRateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
42 |
-
}
|
43 |
-
}
|
44 |
-
if(isset($RateLimitingCrawler) && $RateLimitingCrawler == 1)
|
45 |
-
{
|
46 |
-
if(is_crawler())
|
47 |
-
{
|
48 |
-
if(is_fake_googlebot($ipaddress))
|
49 |
-
{
|
50 |
-
header('HTTP/1.1 403 Forbidden');
|
51 |
-
include_once($errorPage);
|
52 |
-
exit;
|
53 |
-
}
|
54 |
-
if($RateLimitingCrawler == '1')
|
55 |
-
{
|
56 |
-
applyRateLimitingCrawler($ipaddress,$fileName,$errorPage);
|
57 |
-
}
|
58 |
-
|
59 |
-
}
|
60 |
-
}
|
61 |
-
$attack = array();
|
62 |
-
if(isset($SQL) && $SQL==1)
|
63 |
-
{
|
64 |
-
array_push($attack,"SQL");
|
65 |
-
}
|
66 |
-
if(isset($XSS) && $XSS==1)
|
67 |
-
{
|
68 |
-
array_push($attack,"XSS");
|
69 |
-
}
|
70 |
-
if(isset($LFI) && $LFI==1)
|
71 |
-
{
|
72 |
-
array_push($attack,"LFI");
|
73 |
-
}
|
74 |
-
|
75 |
-
$attackC = $attack;
|
76 |
-
$ParanoiaLevel = 1;
|
77 |
-
$annomalyS = 0;
|
78 |
-
$SQLScore = 0;
|
79 |
-
$XSSScore = 0;
|
80 |
-
$limitAttack = get_option_value("limitAttack");
|
81 |
-
|
82 |
-
foreach ($attackC as $key1 => $value1)
|
83 |
-
{
|
84 |
-
for($lev=1;$lev<=$ParanoiaLevel;$lev++)
|
85 |
-
{
|
86 |
-
if(isset($regex[$value1][$lev]))
|
87 |
-
{ $ooo = 0;
|
88 |
-
for($i=0;$i<sizeof($regex[$value1][$lev]);$i++)
|
89 |
-
{
|
90 |
-
foreach ($_REQUEST as $key => $value) {
|
91 |
-
|
92 |
-
if($regex[$value1][$lev][$i] != "")
|
93 |
-
{
|
94 |
-
if(is_string($value))
|
95 |
-
{
|
96 |
-
if(preg_match($regex[$value1][$lev][$i], $value))
|
97 |
-
{
|
98 |
-
|
99 |
-
if($value1 == "SQL")
|
100 |
-
{
|
101 |
-
$SQLScore += $score[$value1][$lev][$i];
|
102 |
-
}
|
103 |
-
elseif ($value1 == "XSS")
|
104 |
-
{
|
105 |
-
$XSSScore += $score[$value1][$lev][$i];
|
106 |
-
}
|
107 |
-
else
|
108 |
-
{
|
109 |
-
$annomalyS += $score[$value1][$lev][$i];
|
110 |
-
}
|
111 |
-
|
112 |
-
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
113 |
-
{
|
114 |
-
$attackCount = log_attack($ipaddress,$value1,$value);
|
115 |
-
if($attackCount>$limitAttack)
|
116 |
-
{
|
117 |
-
if(!is_ip_whitelisted($ipaddress))
|
118 |
-
{
|
119 |
-
block_ip($ipaddress,'
|
120 |
-
}
|
121 |
-
}
|
122 |
-
|
123 |
-
header('HTTP/1.1 403 Forbidden');
|
124 |
-
include_once($errorPage);
|
125 |
-
exit;
|
126 |
-
}
|
127 |
-
}
|
128 |
-
}
|
129 |
-
}
|
130 |
-
}
|
131 |
-
}
|
132 |
-
}
|
133 |
-
}
|
134 |
-
}
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
|
139 |
-
function applyRateLimiting($reqLimit,$action,$ipaddress,$errorPage)
|
140 |
-
{
|
141 |
-
global $dbcon, $prefix;
|
142 |
-
$rate = CheckRate($ipaddress);
|
143 |
-
if($rate>$reqLimit)
|
144 |
-
{
|
145 |
-
$lastAttack = getRLEattack($ipaddress)+60;
|
146 |
-
$current_time = time();
|
147 |
-
if($current_time > $lastAttack)
|
148 |
-
{
|
149 |
-
log_attack($ipaddress,'RLE','RLE');
|
150 |
-
}
|
151 |
-
if($action != 'ThrottleIP')
|
152 |
-
{
|
153 |
-
if(!is_ip_whitelisted($ipaddress))
|
154 |
-
{
|
155 |
-
block_ip($ipaddress,'RLE'); //Rate Limit Exceed
|
156 |
-
}
|
157 |
-
}
|
158 |
-
header('HTTP/1.1 403 Forbidden');
|
159 |
-
include_once($errorPage);
|
160 |
-
exit;
|
161 |
-
}
|
162 |
-
}
|
163 |
-
|
164 |
-
function applyRateLimitingCrawler($ipaddress,$filename,$errorPage)
|
165 |
-
{
|
166 |
-
if(file_exists($filename))
|
167 |
-
{
|
168 |
-
include($filename);
|
169 |
-
}
|
170 |
-
global $dbcon,$prefix;
|
171 |
-
$USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
|
172 |
-
if(isset($RateLimitingCrawler))
|
173 |
-
{
|
174 |
-
if(isset($RateLimitingCrawler) && $RateLimitingCrawler=='1')
|
175 |
-
{
|
176 |
-
if(isset($RequestsPMinCrawler) && isset($actionRateLCrawler) )
|
177 |
-
{
|
178 |
-
$reqLimit = $RequestsPMinCrawler;
|
179 |
-
$rate = CheckRate($ipaddress);
|
180 |
-
if($rate>=$reqLimit)
|
181 |
-
{
|
182 |
-
$action = $actionRateLCrawler;
|
183 |
-
$lastAttack = getRLEattack($ipaddress)+60;
|
184 |
-
$current_time = time();
|
185 |
-
if($current_time>$lastAttack)
|
186 |
-
{
|
187 |
-
log_attack($ipaddress,'RLECrawler',$USER_AGENT);
|
188 |
-
}
|
189 |
-
if($action != 'ThrottleIP')
|
190 |
-
{
|
191 |
-
if(!is_ip_whitelisted($ipaddress))
|
192 |
-
{
|
193 |
-
block_ip($ipaddress,'RLECrawler'); //Rate Limit Exceed for Crawler
|
194 |
-
}
|
195 |
-
}
|
196 |
-
header('HTTP/1.1 403 Forbidden');
|
197 |
-
include_once($errorPage);
|
198 |
-
exit;
|
199 |
-
}
|
200 |
-
}
|
201 |
-
}
|
202 |
-
}
|
203 |
-
}
|
204 |
-
|
205 |
-
|
206 |
-
$dbcon->close();
|
207 |
?>
|
1 |
+
<?php
|
2 |
+
$dir = dirname(__FILE__);
|
3 |
+
$dir = str_replace('\\', "/", $dir);
|
4 |
+
$dir = explode('WAF', $dir);
|
5 |
+
$wafInclude = $dir[0].'WAF/waf-include.php';
|
6 |
+
$wafdb = $dir[0].'WAF/database/mo-waf-db.php';
|
7 |
+
$errorPage = $dir[0].'mo-error.html';
|
8 |
+
$blockPage = $dir[0].'mo-block.html';
|
9 |
+
|
10 |
+
include_once($wafInclude);
|
11 |
+
include_once($wafdb);
|
12 |
+
|
13 |
+
global $dbcon,$prefix;
|
14 |
+
$connection = dbconnection();
|
15 |
+
if($connection)
|
16 |
+
{
|
17 |
+
$wafLevel = get_option_value('WAF');
|
18 |
+
if($wafLevel=='HtaccessLevel')
|
19 |
+
{
|
20 |
+
$ipaddress = get_ipaddress();
|
21 |
+
if(is_ip_blocked($ipaddress))
|
22 |
+
{
|
23 |
+
if(!is_ip_whitelisted($ipaddress))
|
24 |
+
{
|
25 |
+
header('HTTP/1.1 403 Forbidden');
|
26 |
+
include_once($blockPage);
|
27 |
+
exit;
|
28 |
+
}
|
29 |
+
}
|
30 |
+
$fileName = setting_file();
|
31 |
+
|
32 |
+
if($fileName != 'notMissing')
|
33 |
+
{
|
34 |
+
include_once($fileName);
|
35 |
+
}
|
36 |
+
if(isset($RateLimiting) && $RateLimiting == 1)
|
37 |
+
{
|
38 |
+
if(!is_crawler())
|
39 |
+
{
|
40 |
+
if(isset($RequestsPMin) && isset($actionRateL))
|
41 |
+
applyRateLimiting($RequestsPMin,$actionRateL,$ipaddress,$errorPage);
|
42 |
+
}
|
43 |
+
}
|
44 |
+
if(isset($RateLimitingCrawler) && $RateLimitingCrawler == 1)
|
45 |
+
{
|
46 |
+
if(is_crawler())
|
47 |
+
{
|
48 |
+
if(is_fake_googlebot($ipaddress))
|
49 |
+
{
|
50 |
+
header('HTTP/1.1 403 Forbidden');
|
51 |
+
include_once($errorPage);
|
52 |
+
exit;
|
53 |
+
}
|
54 |
+
if($RateLimitingCrawler == '1')
|
55 |
+
{
|
56 |
+
applyRateLimitingCrawler($ipaddress,$fileName,$errorPage);
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
}
|
61 |
+
$attack = array();
|
62 |
+
if(isset($SQL) && $SQL==1)
|
63 |
+
{
|
64 |
+
array_push($attack,"SQL");
|
65 |
+
}
|
66 |
+
if(isset($XSS) && $XSS==1)
|
67 |
+
{
|
68 |
+
array_push($attack,"XSS");
|
69 |
+
}
|
70 |
+
if(isset($LFI) && $LFI==1)
|
71 |
+
{
|
72 |
+
array_push($attack,"LFI");
|
73 |
+
}
|
74 |
+
|
75 |
+
$attackC = $attack;
|
76 |
+
$ParanoiaLevel = 1;
|
77 |
+
$annomalyS = 0;
|
78 |
+
$SQLScore = 0;
|
79 |
+
$XSSScore = 0;
|
80 |
+
$limitAttack = get_option_value("limitAttack");
|
81 |
+
|
82 |
+
foreach ($attackC as $key1 => $value1)
|
83 |
+
{
|
84 |
+
for($lev=1;$lev<=$ParanoiaLevel;$lev++)
|
85 |
+
{
|
86 |
+
if(isset($regex[$value1][$lev]))
|
87 |
+
{ $ooo = 0;
|
88 |
+
for($i=0;$i<sizeof($regex[$value1][$lev]);$i++)
|
89 |
+
{
|
90 |
+
foreach ($_REQUEST as $key => $value) {
|
91 |
+
|
92 |
+
if($regex[$value1][$lev][$i] != "")
|
93 |
+
{
|
94 |
+
if(is_string($value))
|
95 |
+
{
|
96 |
+
if(preg_match($regex[$value1][$lev][$i], $value))
|
97 |
+
{
|
98 |
+
|
99 |
+
if($value1 == "SQL")
|
100 |
+
{
|
101 |
+
$SQLScore += $score[$value1][$lev][$i];
|
102 |
+
}
|
103 |
+
elseif ($value1 == "XSS")
|
104 |
+
{
|
105 |
+
$XSSScore += $score[$value1][$lev][$i];
|
106 |
+
}
|
107 |
+
else
|
108 |
+
{
|
109 |
+
$annomalyS += $score[$value1][$lev][$i];
|
110 |
+
}
|
111 |
+
|
112 |
+
if($annomalyS>=5 || $SQLScore>=10 || $XSSScore >=10)
|
113 |
+
{
|
114 |
+
$attackCount = log_attack($ipaddress,$value1,$value);
|
115 |
+
if($attackCount>$limitAttack)
|
116 |
+
{
|
117 |
+
if(!is_ip_whitelisted($ipaddress))
|
118 |
+
{
|
119 |
+
block_ip($ipaddress,'Attack limit Exceeded'); //Attack Limit Exceed
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
header('HTTP/1.1 403 Forbidden');
|
124 |
+
include_once($errorPage);
|
125 |
+
exit;
|
126 |
+
}
|
127 |
+
}
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
131 |
+
}
|
132 |
+
}
|
133 |
+
}
|
134 |
+
}
|
135 |
+
}
|
136 |
+
}
|
137 |
+
|
138 |
+
|
139 |
+
function applyRateLimiting($reqLimit,$action,$ipaddress,$errorPage)
|
140 |
+
{
|
141 |
+
global $dbcon, $prefix;
|
142 |
+
$rate = CheckRate($ipaddress);
|
143 |
+
if($rate>$reqLimit)
|
144 |
+
{
|
145 |
+
$lastAttack = getRLEattack($ipaddress)+60;
|
146 |
+
$current_time = time();
|
147 |
+
if($current_time > $lastAttack)
|
148 |
+
{
|
149 |
+
log_attack($ipaddress,'RLE','RLE');
|
150 |
+
}
|
151 |
+
if($action != 'ThrottleIP')
|
152 |
+
{
|
153 |
+
if(!is_ip_whitelisted($ipaddress))
|
154 |
+
{
|
155 |
+
block_ip($ipaddress,'RLE'); //Rate Limit Exceed
|
156 |
+
}
|
157 |
+
}
|
158 |
+
header('HTTP/1.1 403 Forbidden');
|
159 |
+
include_once($errorPage);
|
160 |
+
exit;
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
+
function applyRateLimitingCrawler($ipaddress,$filename,$errorPage)
|
165 |
+
{
|
166 |
+
if(file_exists($filename))
|
167 |
+
{
|
168 |
+
include($filename);
|
169 |
+
}
|
170 |
+
global $dbcon,$prefix;
|
171 |
+
$USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
|
172 |
+
if(isset($RateLimitingCrawler))
|
173 |
+
{
|
174 |
+
if(isset($RateLimitingCrawler) && $RateLimitingCrawler=='1')
|
175 |
+
{
|
176 |
+
if(isset($RequestsPMinCrawler) && isset($actionRateLCrawler) )
|
177 |
+
{
|
178 |
+
$reqLimit = $RequestsPMinCrawler;
|
179 |
+
$rate = CheckRate($ipaddress);
|
180 |
+
if($rate>=$reqLimit)
|
181 |
+
{
|
182 |
+
$action = $actionRateLCrawler;
|
183 |
+
$lastAttack = getRLEattack($ipaddress)+60;
|
184 |
+
$current_time = time();
|
185 |
+
if($current_time>$lastAttack)
|
186 |
+
{
|
187 |
+
log_attack($ipaddress,'RLECrawler',$USER_AGENT);
|
188 |
+
}
|
189 |
+
if($action != 'ThrottleIP')
|
190 |
+
{
|
191 |
+
if(!is_ip_whitelisted($ipaddress))
|
192 |
+
{
|
193 |
+
block_ip($ipaddress,'RLECrawler'); //Rate Limit Exceed for Crawler
|
194 |
+
}
|
195 |
+
}
|
196 |
+
header('HTTP/1.1 403 Forbidden');
|
197 |
+
include_once($errorPage);
|
198 |
+
exit;
|
199 |
+
}
|
200 |
+
}
|
201 |
+
}
|
202 |
+
}
|
203 |
+
}
|
204 |
+
|
205 |
+
|
206 |
+
$dbcon->close();
|
207 |
?>
|
handler/backup.php
CHANGED
@@ -1,320 +1,322 @@
|
|
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 =
|
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(
|
41 |
-
$this->plugin_backup($backup_store_path, $time);
|
42 |
-
}
|
43 |
-
if(
|
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 |
-
|
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(
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
}
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
$
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
$
|
102 |
-
$
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
$
|
114 |
-
$
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
}
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
$
|
172 |
-
|
173 |
-
$
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
}
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
$
|
211 |
-
$
|
212 |
-
$
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
array_push($
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
$query .= $this->get_table_query($query,$
|
232 |
-
|
233 |
-
$
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
$
|
249 |
-
$
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
$query.= '""';
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
}
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
$
|
281 |
-
$
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
$
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
$
|
300 |
-
|
301 |
-
$
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
$
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
|
|
|
|
320 |
}new MoBackupSite;
|
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 |
+
|
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 |
+
|
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/feedback_form.php
CHANGED
@@ -72,7 +72,7 @@ class FeedbackHandler
|
|
72 |
$message ='[' ;
|
73 |
}
|
74 |
$message .= 'D:' . $days . ',';
|
75 |
-
if(
|
76 |
$message .= '2FA+NS]';
|
77 |
}
|
78 |
else{
|
72 |
$message ='[' ;
|
73 |
}
|
74 |
$message .= 'D:' . $days . ',';
|
75 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo_wpns_2fa_with_network_security', 'get_option')){
|
76 |
$message .= '2FA+NS]';
|
77 |
}
|
78 |
else{
|
handler/logger.php
CHANGED
@@ -1,37 +1,37 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class mo2f_Logger
|
4 |
-
{
|
5 |
-
function __construct()
|
6 |
-
{
|
7 |
-
add_action( 'log_403' , array( $this, 'log_403' ) );
|
8 |
-
add_action( 'template_redirect', array( $this, 'log_404' ) );
|
9 |
-
}
|
10 |
-
|
11 |
-
|
12 |
-
function log_403()
|
13 |
-
{
|
14 |
-
global $moWpnsUtility;
|
15 |
-
$mo_wpns_config = new MoWpnsHandler();
|
16 |
-
$userIp = $moWpnsUtility->get_client_ip();
|
17 |
-
$url = $moWpnsUtility->get_current_url();
|
18 |
-
$user = wp_get_current_user();
|
19 |
-
$username = is_user_logged_in() ? $user->user_login : 'GUEST';
|
20 |
-
$mo_wpns_config->add_transactions($userIp,$username,MoWpnsConstants::ERR_403, MoWpnsConstants::ACCESS_DENIED,$url);
|
21 |
-
}
|
22 |
-
|
23 |
-
function log_404()
|
24 |
-
{
|
25 |
-
global $moWpnsUtility;
|
26 |
-
|
27 |
-
if(!is_404())
|
28 |
-
return;
|
29 |
-
$mo_wpns_config = new MoWpnsHandler();
|
30 |
-
$userIp = $moWpnsUtility->get_client_ip();
|
31 |
-
$url = $moWpnsUtility->get_current_url();
|
32 |
-
$user = wp_get_current_user();
|
33 |
-
$username = is_user_logged_in() ? $user->user_login : 'GUEST';
|
34 |
-
$mo_wpns_config->add_transactions($userIp,$username,MoWpnsConstants::ERR_404, MoWpnsConstants::ACCESS_DENIED,$url);
|
35 |
-
}
|
36 |
-
}
|
37 |
new mo2f_Logger;
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class mo2f_Logger
|
4 |
+
{
|
5 |
+
function __construct()
|
6 |
+
{
|
7 |
+
add_action( 'log_403' , array( $this, 'log_403' ) );
|
8 |
+
add_action( 'template_redirect', array( $this, 'log_404' ) );
|
9 |
+
}
|
10 |
+
|
11 |
+
|
12 |
+
function log_403()
|
13 |
+
{
|
14 |
+
global $moWpnsUtility;
|
15 |
+
$mo_wpns_config = new MoWpnsHandler();
|
16 |
+
$userIp = $moWpnsUtility->get_client_ip();
|
17 |
+
$url = $moWpnsUtility->get_current_url();
|
18 |
+
$user = wp_get_current_user();
|
19 |
+
$username = is_user_logged_in() ? $user->user_login : 'GUEST';
|
20 |
+
$mo_wpns_config->add_transactions($userIp,$username,MoWpnsConstants::ERR_403, MoWpnsConstants::ACCESS_DENIED,$url);
|
21 |
+
}
|
22 |
+
|
23 |
+
function log_404()
|
24 |
+
{
|
25 |
+
global $moWpnsUtility;
|
26 |
+
|
27 |
+
if(!is_404())
|
28 |
+
return;
|
29 |
+
$mo_wpns_config = new MoWpnsHandler();
|
30 |
+
$userIp = $moWpnsUtility->get_client_ip();
|
31 |
+
$url = $moWpnsUtility->get_current_url();
|
32 |
+
$user = wp_get_current_user();
|
33 |
+
$username = is_user_logged_in() ? $user->user_login : 'GUEST';
|
34 |
+
$mo_wpns_config->add_transactions($userIp,$username,MoWpnsConstants::ERR_404, MoWpnsConstants::ACCESS_DENIED,$url);
|
35 |
+
}
|
36 |
+
}
|
37 |
new mo2f_Logger;
|
handler/login.php
CHANGED
@@ -7,7 +7,7 @@ class LoginHandler
|
|
7 |
if(get_site_option('mo2f_restrict_restAPI')){
|
8 |
add_action('rest_api_init' , array($this , 'mo_block_restAPI' ) );
|
9 |
}
|
10 |
-
if(
|
11 |
|| get_option('mo_wpns_activate_recaptcha_for_woocommerce_login'))
|
12 |
{
|
13 |
|
@@ -192,7 +192,7 @@ class LoginHandler
|
|
192 |
if(!empty($recaptchaError->errors))
|
193 |
$error = $recaptchaError;
|
194 |
if(empty($error->errors)){
|
195 |
-
if(!
|
196 |
{
|
197 |
$this->mo_wpns_login_success($username);
|
198 |
}
|
@@ -216,7 +216,7 @@ class LoginHandler
|
|
216 |
{
|
217 |
if($moWpnsUtility->check_user_password_strength($user,$password,"")=="success")
|
218 |
{
|
219 |
-
if(
|
220 |
$this->mo_wpns_login_success($user->data->user_login);
|
221 |
return $user;
|
222 |
}
|
@@ -251,7 +251,7 @@ class LoginHandler
|
|
251 |
$pass = $_POST['pwd'];
|
252 |
$user = get_user_by('login',$username);
|
253 |
|
254 |
-
if(!
|
255 |
if(!class_miniorange_2fa_strong_password::mo2f_isStrongPasswd($pass, $username)){
|
256 |
if(!get_user_meta($user->ID,'password_strong?')){
|
257 |
update_user_meta($user->ID,'password_strong?', true);
|
@@ -282,7 +282,7 @@ class LoginHandler
|
|
282 |
global $moWpnsUtility;
|
283 |
$userIp = $moWpnsUtility->get_client_ip();
|
284 |
|
285 |
-
if(empty($userIp) || empty($username) || !
|
286 |
return;
|
287 |
|
288 |
$mo_wpns_config = new MoWpnsHandler();
|
@@ -302,7 +302,7 @@ class LoginHandler
|
|
302 |
|
303 |
if($allowedLoginAttepts - $failedAttempts<=0)
|
304 |
$this->handle_login_attempt_exceeded($userIp);
|
305 |
-
else if(
|
306 |
$this->show_limit_login_left($allowedLoginAttepts,$failedAttempts);
|
307 |
}
|
308 |
|
7 |
if(get_site_option('mo2f_restrict_restAPI')){
|
8 |
add_action('rest_api_init' , array($this , 'mo_block_restAPI' ) );
|
9 |
}
|
10 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option') || get_option('mo_wpns_activate_recaptcha_for_login')
|
11 |
|| get_option('mo_wpns_activate_recaptcha_for_woocommerce_login'))
|
12 |
{
|
13 |
|
192 |
if(!empty($recaptchaError->errors))
|
193 |
$error = $recaptchaError;
|
194 |
if(empty($error->errors)){
|
195 |
+
if(!MoWpnsUtility::get_mo2f_db_option('mo2f_enable_brute_force', 'get_option'))
|
196 |
{
|
197 |
$this->mo_wpns_login_success($username);
|
198 |
}
|
216 |
{
|
217 |
if($moWpnsUtility->check_user_password_strength($user,$password,"")=="success")
|
218 |
{
|
219 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo2f_enable_brute_force', 'get_option'))
|
220 |
$this->mo_wpns_login_success($user->data->user_login);
|
221 |
return $user;
|
222 |
}
|
251 |
$pass = $_POST['pwd'];
|
252 |
$user = get_user_by('login',$username);
|
253 |
|
254 |
+
if(!MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option')){
|
255 |
if(!class_miniorange_2fa_strong_password::mo2f_isStrongPasswd($pass, $username)){
|
256 |
if(!get_user_meta($user->ID,'password_strong?')){
|
257 |
update_user_meta($user->ID,'password_strong?', true);
|
282 |
global $moWpnsUtility;
|
283 |
$userIp = $moWpnsUtility->get_client_ip();
|
284 |
|
285 |
+
if(empty($userIp) || empty($username) || !MoWpnsUtility::get_mo2f_db_option('mo2f_enable_brute_force', 'get_option'))
|
286 |
return;
|
287 |
|
288 |
$mo_wpns_config = new MoWpnsHandler();
|
302 |
|
303 |
if($allowedLoginAttepts - $failedAttempts<=0)
|
304 |
$this->handle_login_attempt_exceeded($userIp);
|
305 |
+
else if(MoWpnsUtility::get_mo2f_db_option('mo2f_show_remaining_attempts', 'get_option'))
|
306 |
$this->show_limit_login_left($allowedLoginAttepts,$failedAttempts);
|
307 |
}
|
308 |
|
handler/mo-block.html
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
<img src="data:image/jpeg;base64,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" style="margin-left: 5em;width: 12em;margin-top: 1px;">
|
2 |
-
<div>
|
3 |
-
<img src="data:image/jpeg;base64,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" style="width: 16em;margin-left: 52em;margin-top: 63px;">
|
4 |
-
<div><h1 style="font-size: 90px;margin-top: -2em;margin-left: 401PX;">403</h1></div>
|
5 |
-
<div><h2 style="font-size: 54px;margin-left: 557px;margin-top: -140px;" >Forbidden</h2></div>
|
6 |
-
<div><h6 style="font-size: 21px;margin-left: 19em;margin-top: 7em;color: red;">Your IP has been blocked. Please Contact your Administrator.<h6></div>
|
7 |
-
<h6 style="font-size: 21px;margin-left:20em;">For more information please contact miniorange <a href="https://faq.miniorange.com/">FAQ'S</h6>
|
8 |
-
</div>
|
9 |
-
</div>
|
1 |
+
<img src="data:image/jpeg;base64,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" style="margin-left: 5em;width: 12em;margin-top: 1px;">
|
2 |
+
<div>
|
3 |
+
<img src="data:image/jpeg;base64,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" style="width: 16em;margin-left: 52em;margin-top: 63px;">
|
4 |
+
<div><h1 style="font-size: 90px;margin-top: -2em;margin-left: 401PX;">403</h1></div>
|
5 |
+
<div><h2 style="font-size: 54px;margin-left: 557px;margin-top: -140px;" >Forbidden</h2></div>
|
6 |
+
<div><h6 style="font-size: 21px;margin-left: 19em;margin-top: 7em;color: red;">Your IP has been blocked. Please Contact your Administrator.<h6></div>
|
7 |
+
<h6 style="font-size: 21px;margin-left:20em;">For more information please contact miniorange <a href="https://faq.miniorange.com/">FAQ'S</h6>
|
8 |
+
</div>
|
9 |
+
</div>
|
handler/recaptcha.php
CHANGED
@@ -1,106 +1,106 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class mo2f_ReCaptcha
|
4 |
-
{
|
5 |
-
function __construct()
|
6 |
-
{
|
7 |
-
add_filter( 'admin_init' , array($this, 'handle_recaptcha' ), 11, 3 );
|
8 |
-
add_action( 'login_form' , array($this, 'custom_login_fields' ) );
|
9 |
-
add_action( 'register_form' , array($this, 'register_with_captcha') );
|
10 |
-
add_action( 'woocommerce_register_form' , array($this, 'woocommerce_register_with_captcha'));
|
11 |
-
add_action( 'woocommerce_login_form', array($this, 'woocommerce_login_with_captcha'));
|
12 |
-
add_action( 'woocommerce_review_order_before_submit', array($this, 'woocommerce_register_with_captcha_checkout'));
|
13 |
-
}
|
14 |
-
|
15 |
-
|
16 |
-
//Function to handle Testing reCaptcha
|
17 |
-
function handle_recaptcha()
|
18 |
-
{
|
19 |
-
global $moWpnsUtility,$mo2f_dirName;
|
20 |
-
if (current_user_can( 'manage_options' ))
|
21 |
-
{
|
22 |
-
if(isset($_REQUEST['option']) && $_REQUEST['option']=='testrecaptchaconfig')
|
23 |
-
{
|
24 |
-
if(array_key_exists('g-recaptcha-response',$_POST))
|
25 |
-
{
|
26 |
-
$userIp = $moWpnsUtility->get_client_ip();
|
27 |
-
$mocURL = new MocURL;
|
28 |
-
$response = $mocURL->validate_recaptcha($userIp,$_POST['g-recaptcha-response']);
|
29 |
-
$content = json_decode($response, true);
|
30 |
-
if(isset($content['error-codes']) && in_array("invalid-input-secret", $content['error-codes']))
|
31 |
-
echo "<br><br><h2 style=color:red;text-align:center>Invalid Secret Key.</h2>";
|
32 |
-
else if(isset($content['success']) && $content['success']==1)
|
33 |
-
echo "<br><br><h2 style=color:green;text-align:center>Test was successful and captcha verified.</h2>";
|
34 |
-
else
|
35 |
-
echo "<br><br><h2 style=color:red;text-align:center>Invalid captcha. Please try again.</h2>";
|
36 |
-
}
|
37 |
-
show_google_recaptcha_form();
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
|
43 |
-
function custom_login_fields()
|
44 |
-
{
|
45 |
-
if(get_option('mo_wpns_activate_recaptcha_for_login') &&
|
46 |
-
{
|
47 |
-
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
48 |
-
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
49 |
-
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#loginform{padding-bottom:20px;}</style>';
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
function register_with_captcha(){
|
54 |
-
if(get_option('mo_wpns_activate_recaptcha_for_registration'))
|
55 |
-
{
|
56 |
-
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
57 |
-
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
58 |
-
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#registerform{padding-bottom:20px;}</style>';
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
-
function woocommerce_register_with_captcha(){
|
63 |
-
if(get_option('mo_wpns_activate_recaptcha_for_woocommerce_registration'))
|
64 |
-
{
|
65 |
-
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
66 |
-
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
67 |
-
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#registerform{padding-bottom:20px;}</style>';
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
function woocommerce_login_with_captcha(){
|
72 |
-
if(get_option('mo_wpns_activate_recaptcha_for_woocommerce_login'))
|
73 |
-
{
|
74 |
-
|
75 |
-
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
76 |
-
|
77 |
-
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
78 |
-
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#loginform{padding-bottom:20px;}</style>';
|
79 |
-
}
|
80 |
-
}
|
81 |
-
|
82 |
-
function woocommerce_register_with_captcha_checkout(){
|
83 |
-
|
84 |
-
if (!is_user_logged_in()){
|
85 |
-
if(get_option('mo_wpns_activate_recaptcha_for_woocommerce_registration'))
|
86 |
-
{
|
87 |
-
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
88 |
-
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
89 |
-
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#registerform{padding-bottom:20px;}</style>';
|
90 |
-
}
|
91 |
-
}
|
92 |
-
}
|
93 |
-
|
94 |
-
public static function recaptcha_verify($response)
|
95 |
-
{
|
96 |
-
global $moWpnsUtility;
|
97 |
-
$userIp = $moWpnsUtility->get_client_ip();
|
98 |
-
$mocURL = new MocURL;
|
99 |
-
$response = $mocURL->validate_recaptcha($userIp,$response);
|
100 |
-
$content = json_decode($response, true);
|
101 |
-
$isvalid = isset($content['success']) && $content['success']==1 ? true : false;
|
102 |
-
return $isvalid;
|
103 |
-
}
|
104 |
-
|
105 |
-
}
|
106 |
-
new mo2f_ReCaptcha;
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class mo2f_ReCaptcha
|
4 |
+
{
|
5 |
+
function __construct()
|
6 |
+
{
|
7 |
+
add_filter( 'admin_init' , array($this, 'handle_recaptcha' ), 11, 3 );
|
8 |
+
add_action( 'login_form' , array($this, 'custom_login_fields' ) );
|
9 |
+
add_action( 'register_form' , array($this, 'register_with_captcha') );
|
10 |
+
add_action( 'woocommerce_register_form' , array($this, 'woocommerce_register_with_captcha'));
|
11 |
+
add_action( 'woocommerce_login_form', array($this, 'woocommerce_login_with_captcha'));
|
12 |
+
add_action( 'woocommerce_review_order_before_submit', array($this, 'woocommerce_register_with_captcha_checkout'));
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
//Function to handle Testing reCaptcha
|
17 |
+
function handle_recaptcha()
|
18 |
+
{
|
19 |
+
global $moWpnsUtility,$mo2f_dirName;
|
20 |
+
if (current_user_can( 'manage_options' ))
|
21 |
+
{
|
22 |
+
if(isset($_REQUEST['option']) && $_REQUEST['option']=='testrecaptchaconfig')
|
23 |
+
{
|
24 |
+
if(array_key_exists('g-recaptcha-response',$_POST))
|
25 |
+
{
|
26 |
+
$userIp = $moWpnsUtility->get_client_ip();
|
27 |
+
$mocURL = new MocURL;
|
28 |
+
$response = $mocURL->validate_recaptcha($userIp,$_POST['g-recaptcha-response']);
|
29 |
+
$content = json_decode($response, true);
|
30 |
+
if(isset($content['error-codes']) && in_array("invalid-input-secret", $content['error-codes']))
|
31 |
+
echo "<br><br><h2 style=color:red;text-align:center>Invalid Secret Key.</h2>";
|
32 |
+
else if(isset($content['success']) && $content['success']==1)
|
33 |
+
echo "<br><br><h2 style=color:green;text-align:center>Test was successful and captcha verified.</h2>";
|
34 |
+
else
|
35 |
+
echo "<br><br><h2 style=color:red;text-align:center>Invalid captcha. Please try again.</h2>";
|
36 |
+
}
|
37 |
+
show_google_recaptcha_form();
|
38 |
+
}
|
39 |
+
}
|
40 |
+
}
|
41 |
+
|
42 |
+
|
43 |
+
function custom_login_fields()
|
44 |
+
{
|
45 |
+
if(get_option('mo_wpns_activate_recaptcha_for_login') && MoWpnsUtility::get_mo2f_db_option('mo2f_login_option', 'get_option'))
|
46 |
+
{
|
47 |
+
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
48 |
+
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
49 |
+
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#loginform{padding-bottom:20px;}</style>';
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
function register_with_captcha(){
|
54 |
+
if(get_option('mo_wpns_activate_recaptcha_for_registration'))
|
55 |
+
{
|
56 |
+
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
57 |
+
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
58 |
+
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#registerform{padding-bottom:20px;}</style>';
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
function woocommerce_register_with_captcha(){
|
63 |
+
if(get_option('mo_wpns_activate_recaptcha_for_woocommerce_registration'))
|
64 |
+
{
|
65 |
+
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
66 |
+
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
67 |
+
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#registerform{padding-bottom:20px;}</style>';
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
function woocommerce_login_with_captcha(){
|
72 |
+
if(get_option('mo_wpns_activate_recaptcha_for_woocommerce_login'))
|
73 |
+
{
|
74 |
+
|
75 |
+
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
76 |
+
|
77 |
+
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
78 |
+
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#loginform{padding-bottom:20px;}</style>';
|
79 |
+
}
|
80 |
+
}
|
81 |
+
|
82 |
+
function woocommerce_register_with_captcha_checkout(){
|
83 |
+
|
84 |
+
if (!is_user_logged_in()){
|
85 |
+
if(get_option('mo_wpns_activate_recaptcha_for_woocommerce_registration'))
|
86 |
+
{
|
87 |
+
echo "<script src='".MoWpnsConstants::RECAPTCHA_URL."'></script>";
|
88 |
+
echo '<div class="g-recaptcha" data-sitekey="'.get_option("mo_wpns_recaptcha_site_key").'"></div>';
|
89 |
+
echo '<style>#login{ width:349px;padding:2% 0 0; }.g-recaptcha{margin-bottom:5%;}#registerform{padding-bottom:20px;}</style>';
|
90 |
+
}
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
public static function recaptcha_verify($response)
|
95 |
+
{
|
96 |
+
global $moWpnsUtility;
|
97 |
+
$userIp = $moWpnsUtility->get_client_ip();
|
98 |
+
$mocURL = new MocURL;
|
99 |
+
$response = $mocURL->validate_recaptcha($userIp,$response);
|
100 |
+
$content = json_decode($response, true);
|
101 |
+
$isvalid = isset($content['success']) && $content['success']==1 ? true : false;
|
102 |
+
return $isvalid;
|
103 |
+
}
|
104 |
+
|
105 |
+
}
|
106 |
+
new mo2f_ReCaptcha;
|
handler/security_features.php
CHANGED
@@ -12,7 +12,7 @@ class Mo_2fa_security_features
|
|
12 |
function wpns_2fa_with_network_security($postvalue)
|
13 |
{
|
14 |
$nonce= sanitize_text_field(wp_unslash($_POST['mo_security_features_nonce']));
|
15 |
-
|
16 |
if ( wp_verify_nonce( $nonce, 'mo_2fa_security_features_nonce' ) )
|
17 |
{
|
18 |
$enable_newtwork_security_features = isset($postvalue['mo_wpns_2fa_with_network_security']) ? true : false;
|
@@ -28,7 +28,7 @@ class Mo_2fa_security_features
|
|
28 |
|
29 |
|
30 |
update_option( 'mo_wpns_2fa_with_network_security_popup_visible', 0);
|
31 |
-
if(
|
32 |
{
|
33 |
?><script>window.location.href="admin.php?page=mo_2fa_dashboard";</script><?php
|
34 |
}
|
@@ -44,4 +44,4 @@ class Mo_2fa_security_features
|
|
44 |
|
45 |
}
|
46 |
}new Mo_2fa_security_features;
|
47 |
-
?>
|
12 |
function wpns_2fa_with_network_security($postvalue)
|
13 |
{
|
14 |
$nonce= sanitize_text_field(wp_unslash($_POST['mo_security_features_nonce']));
|
15 |
+
|
16 |
if ( wp_verify_nonce( $nonce, 'mo_2fa_security_features_nonce' ) )
|
17 |
{
|
18 |
$enable_newtwork_security_features = isset($postvalue['mo_wpns_2fa_with_network_security']) ? true : false;
|
28 |
|
29 |
|
30 |
update_option( 'mo_wpns_2fa_with_network_security_popup_visible', 0);
|
31 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo_wpns_2fa_with_network_security', 'get_option'))
|
32 |
{
|
33 |
?><script>window.location.href="admin.php?page=mo_2fa_dashboard";</script><?php
|
34 |
}
|
44 |
|
45 |
}
|
46 |
}new Mo_2fa_security_features;
|
47 |
+
?>
|
handler/twofa/class_miniorange_2fa_strong_password.php
CHANGED
@@ -1,111 +1,108 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class class_miniorange_2fa_strong_password {
|
4 |
-
|
5 |
-
function __construct(){
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
$
|
35 |
-
|
36 |
-
$
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
if ($
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
$
|
62 |
-
|
63 |
-
$username
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
if(
|
87 |
-
return false;
|
88 |
-
|
89 |
-
if(
|
90 |
-
return false;
|
91 |
-
|
92 |
-
if(
|
93 |
-
|
94 |
-
}
|
95 |
-
if(
|
96 |
-
$strength +=
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
}
|
106 |
-
|
107 |
-
|
108 |
-
}
|
109 |
-
}
|
110 |
-
}
|
111 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class class_miniorange_2fa_strong_password {
|
4 |
+
|
5 |
+
function __construct(){
|
6 |
+
}
|
7 |
+
|
8 |
+
public static function woocommerce_password_protection($errors, $username, $password, $email) {
|
9 |
+
if ($password == false) { return $errors; }
|
10 |
+
if ($errors->get_error_data("pass")) { return $errors; }
|
11 |
+
|
12 |
+
$enforceStrongPasswds = MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option');
|
13 |
+
|
14 |
+
if ($enforceStrongPasswds && !class_miniorange_2fa_strong_password::mo2f_isStrongPasswd($password, $username)) {
|
15 |
+
$errors->add('pass', __('Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words.'));
|
16 |
+
return $errors;
|
17 |
+
}
|
18 |
+
|
19 |
+
return $errors;
|
20 |
+
}
|
21 |
+
public static function validatePassword($errors, $update, $userData){
|
22 |
+
$Users = MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords_for_accounts', 'get_option');
|
23 |
+
$UserRole = $_POST['role'];
|
24 |
+
if(is_null($UserRole) and $Users == 'user')
|
25 |
+
{
|
26 |
+
return true;
|
27 |
+
}
|
28 |
+
|
29 |
+
if($Users == 'all' or ($Users == 'admin' and $UserRole == 'administrator') or ($Users == 'user' and $UserRole != 'administrator' ) or ($Users == 'admin' and is_null($UserRole)))
|
30 |
+
{
|
31 |
+
$password = (isset($_POST['pass1']) && trim($_POST['pass1'])) ? $_POST['pass1'] : false;
|
32 |
+
$password=($password==false)?(isset($_POST['password_1'])?$_POST['password_1']:false):$password ;
|
33 |
+
$user_id = isset($userData->ID) ? $userData->ID : false;
|
34 |
+
$username = isset($_POST["user_login"]) ? $_POST["user_login"] : (isset($userData->user_login)?$userData->user_login:$userData->user_email);
|
35 |
+
|
36 |
+
if ($password == false) { return $errors; }
|
37 |
+
if ($errors->get_error_data("pass")) { return $errors; }
|
38 |
+
|
39 |
+
$enforceStrongPasswds = MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option');
|
40 |
+
if ($enforceStrongPasswds && !class_miniorange_2fa_strong_password::mo2f_isStrongPasswd($password, $username)) {
|
41 |
+
$errors->add('pass', __('Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words.'));
|
42 |
+
return $errors;
|
43 |
+
}
|
44 |
+
|
45 |
+
return $errors;
|
46 |
+
}
|
47 |
+
|
48 |
+
return true;
|
49 |
+
}
|
50 |
+
public static function woocommerce_password_registration_protection($errors, $username, $email) {
|
51 |
+
if(get_option( 'woocommerce_registration_generate_password' )=='yes')
|
52 |
+
return $errors;
|
53 |
+
$password=$_POST['account_password'];
|
54 |
+
return class_miniorange_2fa_strong_password::is_validPassword($errors, $username, $password);
|
55 |
+
}
|
56 |
+
|
57 |
+
public static function woocommerce_password_edit_account($errors, $user) {
|
58 |
+
$password=$_POST['password_1'];
|
59 |
+
$user =get_userdata($user->ID);
|
60 |
+
$username=$user->user_login;
|
61 |
+
$enforceStrongPasswds = MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option');
|
62 |
+
|
63 |
+
if ($enforceStrongPasswds && !class_miniorange_2fa_strong_password::mo2f_isStrongPasswd($password, $username)) {
|
64 |
+
$errors->add('pass', __('Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words.'));
|
65 |
+
return $errors;
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
public static function is_validPassword($errors, $username, $password){
|
70 |
+
|
71 |
+
$enforceStrongPasswds = MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords', 'get_option');
|
72 |
+
if ($enforceStrongPasswds && !class_miniorange_2fa_strong_password::mo2f_isStrongPasswd($password, $username)) {
|
73 |
+
$errors->add('pass', __('Please choose a stronger password. Try including numbers, symbols, and a mix of upper and lowercase letters and remove common words.'));
|
74 |
+
return $errors;
|
75 |
+
}
|
76 |
+
|
77 |
+
return $errors;
|
78 |
+
|
79 |
+
}
|
80 |
+
public static function mo2f_isStrongPasswd($passwd, $username ) {
|
81 |
+
$strength = 0;
|
82 |
+
|
83 |
+
if(strlen( trim( $passwd ) ) < 5)
|
84 |
+
return false;
|
85 |
+
|
86 |
+
if(strtolower( $passwd ) == strtolower( $username ) )
|
87 |
+
return false;
|
88 |
+
|
89 |
+
if(preg_match('/(?:password|passwd|mypass|wordpress)/i', $passwd)){
|
90 |
+
return false;
|
91 |
+
}
|
92 |
+
if($num = preg_match_all( "/\d/", $passwd, $matches) ){
|
93 |
+
$strength += ((int)$num * 10);
|
94 |
+
}
|
95 |
+
if ( preg_match( "/[a-z]/", $passwd ) )
|
96 |
+
$strength += 26;
|
97 |
+
if ( preg_match( "/[A-Z]/", $passwd ) )
|
98 |
+
$strength += 26;
|
99 |
+
if ($num = preg_match_all( "/[^a-zA-Z0-9]/", $passwd, $matches)){
|
100 |
+
$strength += (31 * (int)$num);
|
101 |
+
|
102 |
+
}
|
103 |
+
if($strength > 60){
|
104 |
+
return true;
|
105 |
+
}
|
106 |
+
}
|
107 |
+
}
|
|
|
|
|
|
|
108 |
?>
|
handler/twofa/setup_twofa.php
CHANGED
@@ -1,877 +1,918 @@
|
|
1 |
-
<?php
|
2 |
-
$setup_dirName = dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'setup'.DIRECTORY_SEPARATOR;
|
3 |
-
$test_dirName = dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'test'.DIRECTORY_SEPARATOR;
|
4 |
-
include $setup_dirName.'setup_google_authenticator.php';
|
5 |
-
include $setup_dirName.'setup_google_authenticator_onpremise.php';
|
6 |
-
include $setup_dirName.'setup_authy_authenticator.php';
|
7 |
-
include $setup_dirName.'setup_kba_questions.php';
|
8 |
-
include $setup_dirName.'setup_miniorange_authenticator.php';
|
9 |
-
include $setup_dirName.'setup_otp_over_sms.php';
|
10 |
-
include $test_dirName.'test_twofa_email_verification.php';
|
11 |
-
include $test_dirName.'test_twofa_google_authy_authenticator.php';
|
12 |
-
include $test_dirName.'test_twofa_miniorange_qrcode_authentication.php';
|
13 |
-
include $test_dirName.'test_twofa_kba_questions.php';
|
14 |
-
include $test_dirName.'test_twofa_miniorange_push_notification.php';
|
15 |
-
include $test_dirName.'test_twofa_miniorange_soft_token.php';
|
16 |
-
include $test_dirName.'test_twofa_otp_over_sms.php';
|
17 |
-
|
18 |
-
function mo2f_decode_2_factor( $selected_2_factor_method, $decode_type ) {
|
19 |
-
|
20 |
-
if ( $selected_2_factor_method == 'NONE' ) {
|
21 |
-
return $selected_2_factor_method;
|
22 |
-
}else if($selected_2_factor_method == "OTP Over Email")
|
23 |
-
{
|
24 |
-
$selected_2_factor_method = "EMAIL";
|
25 |
-
}
|
26 |
-
|
27 |
-
$wpdb_2fa_methods = array(
|
28 |
-
"miniOrangeQRCodeAuthentication" => "miniOrange QR Code Authentication",
|
29 |
-
"miniOrangeSoftToken" => "miniOrange Soft Token",
|
30 |
-
"miniOrangePushNotification" => "miniOrange Push Notification",
|
31 |
-
"GoogleAuthenticator" => "Google Authenticator",
|
32 |
-
"AuthyAuthenticator" => "Authy Authenticator",
|
33 |
-
"SecurityQuestions" => "Security Questions",
|
34 |
-
"EmailVerification" => "Email Verification",
|
35 |
-
"OTPOverSMS" => "OTP Over SMS",
|
36 |
-
"OTPOverEmail" => "OTP Over Email",
|
37 |
-
"EMAIL" => "OTP Over Email",
|
38 |
-
);
|
39 |
-
|
40 |
-
$server_2fa_methods = array(
|
41 |
-
"miniOrange QR Code Authentication" => "MOBILE AUTHENTICATION",
|
42 |
-
"miniOrange Soft Token" => "SOFT TOKEN",
|
43 |
-
"miniOrange Push Notification" => "PUSH NOTIFICATIONS",
|
44 |
-
"Google Authenticator" => "GOOGLE AUTHENTICATOR",
|
45 |
-
"Authy Authenticator" => "GOOGLE AUTHENTICATOR",
|
46 |
-
"Security Questions" => "KBA",
|
47 |
-
"Email Verification" => "OUT OF BAND EMAIL",
|
48 |
-
"OTP Over SMS" => "SMS",
|
49 |
-
"EMAIL" => "OTP Over Email",
|
50 |
-
"OTPOverEmail" => "OTP Over Email"
|
51 |
-
);
|
52 |
-
|
53 |
-
$server_to_wpdb_2fa_methods = array(
|
54 |
-
"MOBILE AUTHENTICATION" => "miniOrange QR Code Authentication",
|
55 |
-
"SOFT TOKEN" => "miniOrange Soft Token",
|
56 |
-
"PUSH NOTIFICATIONS" => "miniOrange Push Notification",
|
57 |
-
"GOOGLE AUTHENTICATOR" => "Google Authenticator",
|
58 |
-
"KBA" => "Security Questions",
|
59 |
-
"OUT OF BAND EMAIL" => "Email Verification",
|
60 |
-
"SMS" => "OTP Over SMS",
|
61 |
-
"EMAIL" => "OTP Over Email",
|
62 |
-
"OTPOverEmail" => "OTP Over Email",
|
63 |
-
"OTP OVER EMAIL" => "OTP Over Email",
|
64 |
-
);
|
65 |
-
$methodname='';
|
66 |
-
if ( $decode_type == "wpdb" ) {
|
67 |
-
$methodname = isset($wpdb_2fa_methods[ $selected_2_factor_method ])?$wpdb_2fa_methods[ $selected_2_factor_method ]:$selected_2_factor_method;
|
68 |
-
} else if ( $decode_type == "server" ) {
|
69 |
-
$methodname = isset($server_2fa_methods[ $selected_2_factor_method ])?$server_2fa_methods[ $selected_2_factor_method ]:$selected_2_factor_method;
|
70 |
-
} else {
|
71 |
-
$methodname = isset($server_to_wpdb_2fa_methods[ $selected_2_factor_method ])?$server_to_wpdb_2fa_methods[ $selected_2_factor_method ]:$selected_2_factor_method;
|
72 |
-
}
|
73 |
-
return $methodname;
|
74 |
-
|
75 |
-
}
|
76 |
-
|
77 |
-
|
78 |
-
function mo2f_create_2fa_form( $user, $category, $auth_methods, $can_display_admin_features='' ) {
|
79 |
-
global $Mo2fdbQueries;
|
80 |
-
$all_two_factor_methods = array(
|
81 |
-
"miniOrange QR Code Authentication",
|
82 |
-
"miniOrange Soft Token",
|
83 |
-
"miniOrange Push Notification",
|
84 |
-
"Google Authenticator",
|
85 |
-
"Security Questions",
|
86 |
-
"OTP Over SMS",
|
87 |
-
"OTP Over Email",
|
88 |
-
"Authy Authenticator",
|
89 |
-
"Email Verification",
|
90 |
-
"OTP Over SMS and Email",
|
91 |
-
"Hardware Token"
|
92 |
-
);
|
93 |
-
$two_factor_methods_descriptions = array(
|
94 |
-
""=>"<b>All methods in the FREE Plan in addition to the following methods.</b>",
|
95 |
-
"miniOrange QR Code Authentication" => "Scan the QR code from the account in your miniOrange Authenticator App to login.",
|
96 |
-
"miniOrange Soft Token" => "Enter the soft token from the account in your miniOrange Authenticator App to login.",
|
97 |
-
"miniOrange Push Notification" => "Accept a push notification in your miniOrange Authenticator App to login.",
|
98 |
-
"Google Authenticator" => "Enter the soft token from the account in your <b>Google/Authy/LastPass Authenticator App</b> to login.",
|
99 |
-
"Security Questions" => "Answer the three security questions you had set, to login.",
|
100 |
-
"OTP Over SMS" => "Enter the One Time Passcode sent to your phone to login.",
|
101 |
-
"OTP Over Email" => "Enter the One Time Passcode sent to your email to login.",
|
102 |
-
"Authy Authenticator" => "Enter the soft token from the account in your Authy Authenticator App to login.",
|
103 |
-
"Email Verification" => "Accept the verification link sent to your email to login.",
|
104 |
-
"OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
|
105 |
-
"Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login."
|
106 |
-
);
|
107 |
-
$two_factor_methods_doc = array(
|
108 |
-
"Security Questions" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-security-question",
|
109 |
-
"Google Authenticator" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/google-authenticator",
|
110 |
-
"miniOrange QR Code Authentication" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-miniorange-QR-code",
|
111 |
-
"Email Verification" => "",
|
112 |
-
"miniOrange Soft Token" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-miniorange-soft-token",
|
113 |
-
"miniOrange Push Notification" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-miniorange-push-notification",
|
114 |
-
"Authy Authenticator" => "",
|
115 |
-
"OTP Over SMS" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-otp-over-sms",
|
116 |
-
"OTP Over Email" => "",
|
117 |
-
"OTP Over SMS and Email" => "",
|
118 |
-
"Hardware Token" => "",
|
119 |
-
"" => ""
|
120 |
-
);
|
121 |
-
$two_factor_methods_video = array(
|
122 |
-
"Security Questions" => "",
|
123 |
-
"Google Authenticator" => "https://www.youtube.com/watch?v=
|
124 |
-
"miniOrange QR Code Authentication" => "",
|
125 |
-
"Email Verification" => "",
|
126 |
-
"miniOrange Soft Token" => "",
|
127 |
-
"miniOrange Push Notification" => "",
|
128 |
-
"Authy Authenticator" => "",
|
129 |
-
"OTP Over SMS" => "",
|
130 |
-
"OTP Over Email" => "",
|
131 |
-
"OTP Over SMS and Email" => "",
|
132 |
-
"Hardware Token" => "",
|
133 |
-
"" => ""
|
134 |
-
);
|
135 |
-
|
136 |
-
$two_factor_methods_EC = array_slice( $all_two_factor_methods, 0, 9 );
|
137 |
-
$two_factor_methods_NC = array_slice( $all_two_factor_methods, 0, 7 );
|
138 |
-
if(MO2F_IS_ONPREM or $category != 'free_plan')
|
139 |
-
{
|
140 |
-
$all_two_factor_methods = array(
|
141 |
-
"Security Questions",
|
142 |
-
"Google Authenticator",
|
143 |
-
"Email Verification",
|
144 |
-
"miniOrange QR Code Authentication",
|
145 |
-
"miniOrange Soft Token",
|
146 |
-
"miniOrange Push Notification",
|
147 |
-
"Authy Authenticator",
|
148 |
-
"OTP Over SMS",
|
149 |
-
"OTP Over Email",
|
150 |
-
"OTP Over SMS and Email",
|
151 |
-
"Hardware Token"
|
152 |
-
);
|
153 |
-
$two_factor_methods_descriptions = array(
|
154 |
-
""=>"<b>All methods in the FREE Plan in addition to the following methods.</b>",
|
155 |
-
"Security Questions" => "Answer the three security questions you had set, to login.",
|
156 |
-
"Google Authenticator" => "Enter the soft token from the account in your <b>Google/Authy/LastPass Authenticator App</b> to login.",
|
157 |
-
"Email Verification" => "Accept the verification link sent to your email to login.",
|
158 |
-
"miniOrange QR Code Authentication" => "Scan the QR code from the account in your miniOrange Authenticator App to login.",
|
159 |
-
"miniOrange Soft Token" => "Enter the soft token from the account in your miniOrange Authenticator App to login.",
|
160 |
-
"miniOrange Push Notification" => "Accept a push notification in your miniOrange Authenticator App to login.",
|
161 |
-
"Authy Authenticator" => "Enter the soft token from the account in your Authy Authenticator App to login.",
|
162 |
-
"OTP Over SMS" => "Enter the One Time Passcode sent to your phone to login.",
|
163 |
-
"OTP Over Email" => "Enter the One Time Passcode sent to your email to login.",
|
164 |
-
"OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
|
165 |
-
"Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login."
|
166 |
-
);
|
167 |
-
}
|
168 |
-
|
169 |
-
$is_customer_registered = $Mo2fdbQueries->get_user_detail( 'user_registration_with_miniorange', $user->ID ) == 'SUCCESS' ? true : false;
|
170 |
-
$can_user_configure_2fa_method = $can_display_admin_features || ( !$can_display_admin_features && $is_customer_registered );
|
171 |
-
$is_NC =
|
172 |
-
$is_EC = ! $is_NC;
|
173 |
-
|
174 |
-
$form = '<div class="overlay1" id="overlay" hidden ></div>';
|
175 |
-
$form .= '<form name="f" method="post" action="" id="mo2f_save_' . $category . '_auth_methods_form">
|
176 |
-
<div id="mo2f_' . $category . '_auth_methods" >
|
177 |
-
<br>
|
178 |
-
<table class="mo2f_auth_methods_table">';
|
179 |
-
|
180 |
-
for ( $i = 0; $i < count( $auth_methods ); $i ++ ) {
|
181 |
-
|
182 |
-
$form .= '<tr>';
|
183 |
-
for ( $j = 0; $j < count( $auth_methods[ $i ] ); $j ++ ) {
|
184 |
-
$auth_method = $auth_methods[ $i ][ $j ];
|
185 |
-
if(MO2F_IS_ONPREM and $category =='free_plan')
|
186 |
-
{
|
187 |
-
|
188 |
-
if($auth_method != 'Email Verification' and $auth_method != 'Security Questions' and $auth_method != 'Google Authenticator' and $auth_method !='miniOrange QR Code Authentication' and $auth_method !='miniOrange Soft Token' and $auth_method != 'miniOrange Push Notification' and $auth_method != 'OTP Over SMS' and $auth_method != 'OTP Over Email')
|
189 |
-
{
|
190 |
-
//continue;
|
191 |
-
}
|
192 |
-
}
|
193 |
-
$auth_method_abr = str_replace( ' ', '', $auth_method );
|
194 |
-
$configured_auth_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
195 |
-
$is_auth_method_selected = ( $configured_auth_method == $auth_method ? true : false );
|
196 |
-
|
197 |
-
$is_auth_method_av = false;
|
198 |
-
if ( ( $is_EC && in_array( $auth_method, $two_factor_methods_EC ) ) ||
|
199 |
-
( $is_NC && in_array( $auth_method, $two_factor_methods_NC ) ) ) {
|
200 |
-
$is_auth_method_av = true;
|
201 |
-
}
|
202 |
-
|
203 |
-
$thumbnail_height = $is_auth_method_av && $category == 'free_plan' ? 190 : 160;
|
204 |
-
$is_image = $auth_method == "" ? 0 :1;
|
205 |
-
|
206 |
-
$form .= '<td style="width:33%;height: 203px;">
|
207 |
-
<div class="mo2f_thumbnail" id="'.$auth_method_abr.'_thumbnail_2_factor" style="height:' . $thumbnail_height . 'px;border:1px solid ';
|
208 |
-
if(MO2F_IS_ONPREM)
|
209 |
-
{
|
210 |
-
$iscurrentMethod = 0;
|
211 |
-
$currentMethod = $configured_auth_method;
|
212 |
-
if($currentMethod == $auth_method)
|
213 |
-
$iscurrentMethod = 1;
|
214 |
-
|
215 |
-
$form .= $iscurrentMethod ? '#48b74b' : '#20b2aa';
|
216 |
-
$form .= ';border-top:3px solid ';
|
217 |
-
$form .= $iscurrentMethod ? '#48b74b' : '#20b2aa';
|
218 |
-
$form .= ';">';
|
219 |
-
}
|
220 |
-
else
|
221 |
-
{
|
222 |
-
$form .= $is_auth_method_selected ? '#48b74b' : '#20b2aa';
|
223 |
-
$form .= ';border-top:3px solid ';
|
224 |
-
$form .= $is_auth_method_selected ? '#48b74b' : '#20b2aa';
|
225 |
-
$form .= ';">';
|
226 |
-
|
227 |
-
}
|
228 |
-
$form .= '<div>
|
229 |
-
<div class="mo2f_thumbnail_method" style="width:100%";>
|
230 |
-
<div style="width: 17%; float:left;padding-top:5px;padding-left:5px;">';
|
231 |
-
|
232 |
-
if($is_image){
|
233 |
-
$form .= '<img src="' . plugins_url( "includes/images/authmethods/" . $auth_method_abr . ".png", dirname(dirname(__FILE__ ))) . '" style="width: 40px;height: 40px !important; " line-height: 80px;" />';
|
234 |
-
}
|
235 |
-
|
236 |
-
$form .= '</div>
|
237 |
-
<div class="mo2f_thumbnail_method_desc" style="padding: 8px;width: 83%;">';
|
238 |
-
switch ($auth_method) {
|
239 |
-
case 'Google Authenticator':
|
240 |
-
$form .=' <span style="float:right">
|
241 |
-
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
242 |
-
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
243 |
-
|
244 |
-
</a>
|
245 |
-
|
246 |
-
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
247 |
-
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
248 |
-
</a>
|
249 |
-
</span>';
|
250 |
-
break;
|
251 |
-
|
252 |
-
case 'Security Questions':
|
253 |
-
$form .=' <span style="float:right">
|
254 |
-
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
255 |
-
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
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 |
-
|
383 |
-
$
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
$form .=
|
409 |
-
$form .=
|
410 |
-
$
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
$form .= '
|
415 |
-
|
416 |
-
|
417 |
-
$form .= '
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
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 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
'
|
520 |
-
|
521 |
-
|
522 |
-
) );
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
break;
|
666 |
-
case "
|
667 |
-
|
668 |
-
break;
|
669 |
-
case "
|
670 |
-
|
671 |
-
break;
|
672 |
-
case "
|
673 |
-
|
674 |
-
break;
|
675 |
-
case "OTP Over
|
676 |
-
|
677 |
-
break;
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
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 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
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 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$setup_dirName = dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'setup'.DIRECTORY_SEPARATOR;
|
3 |
+
$test_dirName = dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'test'.DIRECTORY_SEPARATOR;
|
4 |
+
include $setup_dirName.'setup_google_authenticator.php';
|
5 |
+
include $setup_dirName.'setup_google_authenticator_onpremise.php';
|
6 |
+
include $setup_dirName.'setup_authy_authenticator.php';
|
7 |
+
include $setup_dirName.'setup_kba_questions.php';
|
8 |
+
include $setup_dirName.'setup_miniorange_authenticator.php';
|
9 |
+
include $setup_dirName.'setup_otp_over_sms.php';
|
10 |
+
include $test_dirName.'test_twofa_email_verification.php';
|
11 |
+
include $test_dirName.'test_twofa_google_authy_authenticator.php';
|
12 |
+
include $test_dirName.'test_twofa_miniorange_qrcode_authentication.php';
|
13 |
+
include $test_dirName.'test_twofa_kba_questions.php';
|
14 |
+
include $test_dirName.'test_twofa_miniorange_push_notification.php';
|
15 |
+
include $test_dirName.'test_twofa_miniorange_soft_token.php';
|
16 |
+
include $test_dirName.'test_twofa_otp_over_sms.php';
|
17 |
+
|
18 |
+
function mo2f_decode_2_factor( $selected_2_factor_method, $decode_type ) {
|
19 |
+
|
20 |
+
if ( $selected_2_factor_method == 'NONE' ) {
|
21 |
+
return $selected_2_factor_method;
|
22 |
+
}else if($selected_2_factor_method == "OTP Over Email")
|
23 |
+
{
|
24 |
+
$selected_2_factor_method = "EMAIL";
|
25 |
+
}
|
26 |
+
|
27 |
+
$wpdb_2fa_methods = array(
|
28 |
+
"miniOrangeQRCodeAuthentication" => "miniOrange QR Code Authentication",
|
29 |
+
"miniOrangeSoftToken" => "miniOrange Soft Token",
|
30 |
+
"miniOrangePushNotification" => "miniOrange Push Notification",
|
31 |
+
"GoogleAuthenticator" => "Google Authenticator",
|
32 |
+
"AuthyAuthenticator" => "Authy Authenticator",
|
33 |
+
"SecurityQuestions" => "Security Questions",
|
34 |
+
"EmailVerification" => "Email Verification",
|
35 |
+
"OTPOverSMS" => "OTP Over SMS",
|
36 |
+
"OTPOverEmail" => "OTP Over Email",
|
37 |
+
"EMAIL" => "OTP Over Email",
|
38 |
+
);
|
39 |
+
|
40 |
+
$server_2fa_methods = array(
|
41 |
+
"miniOrange QR Code Authentication" => "MOBILE AUTHENTICATION",
|
42 |
+
"miniOrange Soft Token" => "SOFT TOKEN",
|
43 |
+
"miniOrange Push Notification" => "PUSH NOTIFICATIONS",
|
44 |
+
"Google Authenticator" => "GOOGLE AUTHENTICATOR",
|
45 |
+
"Authy Authenticator" => "GOOGLE AUTHENTICATOR",
|
46 |
+
"Security Questions" => "KBA",
|
47 |
+
"Email Verification" => "OUT OF BAND EMAIL",
|
48 |
+
"OTP Over SMS" => "SMS",
|
49 |
+
"EMAIL" => "OTP Over Email",
|
50 |
+
"OTPOverEmail" => "OTP Over Email"
|
51 |
+
);
|
52 |
+
|
53 |
+
$server_to_wpdb_2fa_methods = array(
|
54 |
+
"MOBILE AUTHENTICATION" => "miniOrange QR Code Authentication",
|
55 |
+
"SOFT TOKEN" => "miniOrange Soft Token",
|
56 |
+
"PUSH NOTIFICATIONS" => "miniOrange Push Notification",
|
57 |
+
"GOOGLE AUTHENTICATOR" => "Google Authenticator",
|
58 |
+
"KBA" => "Security Questions",
|
59 |
+
"OUT OF BAND EMAIL" => "Email Verification",
|
60 |
+
"SMS" => "OTP Over SMS",
|
61 |
+
"EMAIL" => "OTP Over Email",
|
62 |
+
"OTPOverEmail" => "OTP Over Email",
|
63 |
+
"OTP OVER EMAIL" => "OTP Over Email",
|
64 |
+
);
|
65 |
+
$methodname='';
|
66 |
+
if ( $decode_type == "wpdb" ) {
|
67 |
+
$methodname = isset($wpdb_2fa_methods[ $selected_2_factor_method ])?$wpdb_2fa_methods[ $selected_2_factor_method ]:$selected_2_factor_method;
|
68 |
+
} else if ( $decode_type == "server" ) {
|
69 |
+
$methodname = isset($server_2fa_methods[ $selected_2_factor_method ])?$server_2fa_methods[ $selected_2_factor_method ]:$selected_2_factor_method;
|
70 |
+
} else {
|
71 |
+
$methodname = isset($server_to_wpdb_2fa_methods[ $selected_2_factor_method ])?$server_to_wpdb_2fa_methods[ $selected_2_factor_method ]:$selected_2_factor_method;
|
72 |
+
}
|
73 |
+
return $methodname;
|
74 |
+
|
75 |
+
}
|
76 |
+
|
77 |
+
|
78 |
+
function mo2f_create_2fa_form( $user, $category, $auth_methods, $can_display_admin_features='' ) {
|
79 |
+
global $Mo2fdbQueries;
|
80 |
+
$all_two_factor_methods = array(
|
81 |
+
"miniOrange QR Code Authentication",
|
82 |
+
"miniOrange Soft Token",
|
83 |
+
"miniOrange Push Notification",
|
84 |
+
"Google Authenticator",
|
85 |
+
"Security Questions",
|
86 |
+
"OTP Over SMS",
|
87 |
+
"OTP Over Email",
|
88 |
+
"Authy Authenticator",
|
89 |
+
"Email Verification",
|
90 |
+
"OTP Over SMS and Email",
|
91 |
+
"Hardware Token"
|
92 |
+
);
|
93 |
+
$two_factor_methods_descriptions = array(
|
94 |
+
""=>"<b>All methods in the FREE Plan in addition to the following methods.</b>",
|
95 |
+
"miniOrange QR Code Authentication" => "Scan the QR code from the account in your miniOrange Authenticator App to login.",
|
96 |
+
"miniOrange Soft Token" => "Enter the soft token from the account in your miniOrange Authenticator App to login.",
|
97 |
+
"miniOrange Push Notification" => "Accept a push notification in your miniOrange Authenticator App to login.",
|
98 |
+
"Google Authenticator" => "Enter the soft token from the account in your <b>Google/Authy/LastPass Authenticator App</b> to login.",
|
99 |
+
"Security Questions" => "Answer the three security questions you had set, to login.",
|
100 |
+
"OTP Over SMS" => "Enter the One Time Passcode sent to your phone to login.",
|
101 |
+
"OTP Over Email" => "Enter the One Time Passcode sent to your email to login.",
|
102 |
+
"Authy Authenticator" => "Enter the soft token from the account in your Authy Authenticator App to login.",
|
103 |
+
"Email Verification" => "Accept the verification link sent to your email to login.",
|
104 |
+
"OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
|
105 |
+
"Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login."
|
106 |
+
);
|
107 |
+
$two_factor_methods_doc = array(
|
108 |
+
"Security Questions" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-security-question",
|
109 |
+
"Google Authenticator" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/google-authenticator",
|
110 |
+
"miniOrange QR Code Authentication" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-miniorange-QR-code",
|
111 |
+
"Email Verification" => "",
|
112 |
+
"miniOrange Soft Token" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-miniorange-soft-token",
|
113 |
+
"miniOrange Push Notification" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-miniorange-push-notification",
|
114 |
+
"Authy Authenticator" => "",
|
115 |
+
"OTP Over SMS" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-otp-over-sms",
|
116 |
+
"OTP Over Email" => "",
|
117 |
+
"OTP Over SMS and Email" => "",
|
118 |
+
"Hardware Token" => "",
|
119 |
+
"" => ""
|
120 |
+
);
|
121 |
+
$two_factor_methods_video = array(
|
122 |
+
"Security Questions" => "https://www.youtube.com/watch?v=pXPqQ047o-0",
|
123 |
+
"Google Authenticator" => "https://www.youtube.com/watch?v=BS6tY-Goa1Q",
|
124 |
+
"miniOrange QR Code Authentication" => "https://www.youtube.com/watch?v=IPYizmgzTd8",
|
125 |
+
"Email Verification" => "https://www.youtube.com/watch?v=OacJWBYx_AE",
|
126 |
+
"miniOrange Soft Token" => "https://www.youtube.com/watch?v=9HV8V4f80k8",
|
127 |
+
"miniOrange Push Notification" => "https://www.youtube.com/watch?v=it_dAhFcxvw",
|
128 |
+
"Authy Authenticator" => "https://www.youtube.com/watch?v=fV-VnC_5Q5c",
|
129 |
+
"OTP Over SMS" => "https://www.youtube.com/watch?v=ag_E1Bmen-c",
|
130 |
+
"OTP Over Email" => "",
|
131 |
+
"OTP Over SMS and Email" => "",
|
132 |
+
"Hardware Token" => "",
|
133 |
+
"" => ""
|
134 |
+
);
|
135 |
+
|
136 |
+
$two_factor_methods_EC = array_slice( $all_two_factor_methods, 0, 9 );
|
137 |
+
$two_factor_methods_NC = array_slice( $all_two_factor_methods, 0, 7 );
|
138 |
+
if(MO2F_IS_ONPREM or $category != 'free_plan')
|
139 |
+
{
|
140 |
+
$all_two_factor_methods = array(
|
141 |
+
"Security Questions",
|
142 |
+
"Google Authenticator",
|
143 |
+
"Email Verification",
|
144 |
+
"miniOrange QR Code Authentication",
|
145 |
+
"miniOrange Soft Token",
|
146 |
+
"miniOrange Push Notification",
|
147 |
+
"Authy Authenticator",
|
148 |
+
"OTP Over SMS",
|
149 |
+
"OTP Over Email",
|
150 |
+
"OTP Over SMS and Email",
|
151 |
+
"Hardware Token"
|
152 |
+
);
|
153 |
+
$two_factor_methods_descriptions = array(
|
154 |
+
""=>"<b>All methods in the FREE Plan in addition to the following methods.</b>",
|
155 |
+
"Security Questions" => "Answer the three security questions you had set, to login.",
|
156 |
+
"Google Authenticator" => "Enter the soft token from the account in your <b>Google/Authy/LastPass Authenticator App</b> to login.",
|
157 |
+
"Email Verification" => "Accept the verification link sent to your email to login.",
|
158 |
+
"miniOrange QR Code Authentication" => "Scan the QR code from the account in your miniOrange Authenticator App to login.",
|
159 |
+
"miniOrange Soft Token" => "Enter the soft token from the account in your miniOrange Authenticator App to login.",
|
160 |
+
"miniOrange Push Notification" => "Accept a push notification in your miniOrange Authenticator App to login.",
|
161 |
+
"Authy Authenticator" => "Enter the soft token from the account in your Authy Authenticator App to login.",
|
162 |
+
"OTP Over SMS" => "Enter the One Time Passcode sent to your phone to login.",
|
163 |
+
"OTP Over Email" => "Enter the One Time Passcode sent to your email to login.",
|
164 |
+
"OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
|
165 |
+
"Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login."
|
166 |
+
);
|
167 |
+
}
|
168 |
+
|
169 |
+
$is_customer_registered = $Mo2fdbQueries->get_user_detail( 'user_registration_with_miniorange', $user->ID ) == 'SUCCESS' ? true : false;
|
170 |
+
$can_user_configure_2fa_method = $can_display_admin_features || ( !$can_display_admin_features && $is_customer_registered );
|
171 |
+
$is_NC = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
172 |
+
$is_EC = ! $is_NC;
|
173 |
+
|
174 |
+
$form = '<div class="overlay1" id="overlay" hidden ></div>';
|
175 |
+
$form .= '<form name="f" method="post" action="" id="mo2f_save_' . $category . '_auth_methods_form">
|
176 |
+
<div id="mo2f_' . $category . '_auth_methods" >
|
177 |
+
<br>
|
178 |
+
<table class="mo2f_auth_methods_table">';
|
179 |
+
|
180 |
+
for ( $i = 0; $i < count( $auth_methods ); $i ++ ) {
|
181 |
+
|
182 |
+
$form .= '<tr>';
|
183 |
+
for ( $j = 0; $j < count( $auth_methods[ $i ] ); $j ++ ) {
|
184 |
+
$auth_method = $auth_methods[ $i ][ $j ];
|
185 |
+
if(MO2F_IS_ONPREM and $category =='free_plan')
|
186 |
+
{
|
187 |
+
|
188 |
+
if($auth_method != 'Email Verification' and $auth_method != 'Security Questions' and $auth_method != 'Google Authenticator' and $auth_method !='miniOrange QR Code Authentication' and $auth_method !='miniOrange Soft Token' and $auth_method != 'miniOrange Push Notification' and $auth_method != 'OTP Over SMS' and $auth_method != 'OTP Over Email')
|
189 |
+
{
|
190 |
+
//continue;
|
191 |
+
}
|
192 |
+
}
|
193 |
+
$auth_method_abr = str_replace( ' ', '', $auth_method );
|
194 |
+
$configured_auth_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
195 |
+
$is_auth_method_selected = ( $configured_auth_method == $auth_method ? true : false );
|
196 |
+
|
197 |
+
$is_auth_method_av = false;
|
198 |
+
if ( ( $is_EC && in_array( $auth_method, $two_factor_methods_EC ) ) ||
|
199 |
+
( $is_NC && in_array( $auth_method, $two_factor_methods_NC ) ) ) {
|
200 |
+
$is_auth_method_av = true;
|
201 |
+
}
|
202 |
+
|
203 |
+
$thumbnail_height = $is_auth_method_av && $category == 'free_plan' ? 190 : 160;
|
204 |
+
$is_image = $auth_method == "" ? 0 :1;
|
205 |
+
|
206 |
+
$form .= '<td style="width:33%;height: 203px;">
|
207 |
+
<div class="mo2f_thumbnail" id="'.$auth_method_abr.'_thumbnail_2_factor" style="height:' . $thumbnail_height . 'px;border:1px solid ';
|
208 |
+
if(MO2F_IS_ONPREM)
|
209 |
+
{
|
210 |
+
$iscurrentMethod = 0;
|
211 |
+
$currentMethod = $configured_auth_method;
|
212 |
+
if($currentMethod == $auth_method)
|
213 |
+
$iscurrentMethod = 1;
|
214 |
+
|
215 |
+
$form .= $iscurrentMethod ? '#48b74b' : '#20b2aa';
|
216 |
+
$form .= ';border-top:3px solid ';
|
217 |
+
$form .= $iscurrentMethod ? '#48b74b' : '#20b2aa';
|
218 |
+
$form .= ';">';
|
219 |
+
}
|
220 |
+
else
|
221 |
+
{
|
222 |
+
$form .= $is_auth_method_selected ? '#48b74b' : '#20b2aa';
|
223 |
+
$form .= ';border-top:3px solid ';
|
224 |
+
$form .= $is_auth_method_selected ? '#48b74b' : '#20b2aa';
|
225 |
+
$form .= ';">';
|
226 |
+
|
227 |
+
}
|
228 |
+
$form .= '<div>
|
229 |
+
<div class="mo2f_thumbnail_method" style="width:100%";>
|
230 |
+
<div style="width: 17%; float:left;padding-top:5px;padding-left:5px;">';
|
231 |
+
|
232 |
+
if($is_image){
|
233 |
+
$form .= '<img src="' . plugins_url( "includes/images/authmethods/" . $auth_method_abr . ".png", dirname(dirname(__FILE__ ))) . '" style="width: 40px;height: 40px !important; " line-height: 80px;" />';
|
234 |
+
}
|
235 |
+
|
236 |
+
$form .= '</div>
|
237 |
+
<div class="mo2f_thumbnail_method_desc" style="padding: 8px;width: 83%;">';
|
238 |
+
switch ($auth_method) {
|
239 |
+
case 'Google Authenticator':
|
240 |
+
$form .=' <span style="float:right">
|
241 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
242 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
243 |
+
|
244 |
+
</a>
|
245 |
+
|
246 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
247 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
248 |
+
</a>
|
249 |
+
</span>';
|
250 |
+
break;
|
251 |
+
|
252 |
+
case 'Security Questions':
|
253 |
+
$form .=' <span style="float:right">
|
254 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
255 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
256 |
+
</a>
|
257 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
258 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
259 |
+
</a>
|
260 |
+
|
261 |
+
|
262 |
+
</span>';
|
263 |
+
break;
|
264 |
+
|
265 |
+
case 'OTP Over SMS':
|
266 |
+
$form .=' <span style="float:right">
|
267 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
268 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
269 |
+
|
270 |
+
</a>
|
271 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
272 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
273 |
+
</a>
|
274 |
+
|
275 |
+
</span>';
|
276 |
+
break;
|
277 |
+
|
278 |
+
|
279 |
+
case 'miniOrange Soft Token':
|
280 |
+
$form .=' <span style="float:right">
|
281 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
282 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
283 |
+
|
284 |
+
</a>
|
285 |
+
|
286 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
287 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
288 |
+
</a>
|
289 |
+
</span>';
|
290 |
+
|
291 |
+
break;
|
292 |
+
|
293 |
+
case 'miniOrange QR Code Authentication':
|
294 |
+
$form .=' <span style="float:right">
|
295 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
296 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
297 |
+
|
298 |
+
</a>
|
299 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
300 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
301 |
+
</a>
|
302 |
+
|
303 |
+
</span>';
|
304 |
+
|
305 |
+
break;
|
306 |
+
|
307 |
+
case 'miniOrange Push Notification':
|
308 |
+
$form .=' <span style="float:right">
|
309 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
310 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
311 |
+
|
312 |
+
</a>
|
313 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
314 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
315 |
+
</a>
|
316 |
+
|
317 |
+
</span>';
|
318 |
+
break;
|
319 |
+
|
320 |
+
case 'Email Verification':
|
321 |
+
$form .=' <span style="float:right">
|
322 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
323 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
324 |
+
|
325 |
+
</a>
|
326 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
327 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
328 |
+
</a>
|
329 |
+
|
330 |
+
</span>';
|
331 |
+
break;
|
332 |
+
case 'Authy Authenticator':
|
333 |
+
$form .=' <span style="float:right">
|
334 |
+
<a href='.$two_factor_methods_doc[$auth_method].' target="_blank">
|
335 |
+
<span class="dashicons dashicons-text-page" style="font-size:19px;color:#269eb3;float: right;"></span>
|
336 |
+
|
337 |
+
</a>
|
338 |
+
<a href='.$two_factor_methods_video[$auth_method].' target="_blank">
|
339 |
+
<span class="dashicons dashicons-video-alt3" style="font-size:18px;color:red;float: right; margin-right: 5px;"></span>
|
340 |
+
</a>
|
341 |
+
|
342 |
+
</span>';
|
343 |
+
|
344 |
+
break;
|
345 |
+
|
346 |
+
default:
|
347 |
+
{$form .= "";}
|
348 |
+
break;
|
349 |
+
}
|
350 |
+
$form .=' <b>' . $auth_method .
|
351 |
+
'</b><br>
|
352 |
+
<p style="padding:0px; padding-left:0px;font-size: 14px;"> ' . $two_factor_methods_descriptions[ $auth_method ] . '</p>
|
353 |
+
|
354 |
+
</div>
|
355 |
+
</div>
|
356 |
+
</div>';
|
357 |
+
|
358 |
+
if ( $is_auth_method_av && $category == 'free_plan' ) {
|
359 |
+
|
360 |
+
$is_auth_method_configured = $Mo2fdbQueries->get_user_detail( 'mo2f_' . $auth_method_abr . '_config_status', $user->ID );
|
361 |
+
if(($auth_method == 'OUT OF BAND EMAIL' or $auth_method == 'OTP Over Email') and !MO2F_IS_ONPREM )
|
362 |
+
$is_auth_method_configured = 1;
|
363 |
+
$form .= '<div style="height:40px;width:100%;position: absolute;bottom: 0;background-color:';
|
364 |
+
$iscurrentMethod = 0;
|
365 |
+
if(MO2F_IS_ONPREM)
|
366 |
+
{
|
367 |
+
$currentMethod = $configured_auth_method;
|
368 |
+
if($currentMethod == $auth_method)
|
369 |
+
$iscurrentMethod = 1;
|
370 |
+
$form .= $iscurrentMethod ? '#48b74b' : '#20b2aa';
|
371 |
+
}
|
372 |
+
else
|
373 |
+
$form .= $is_auth_method_selected ? '#48b74b' : '#20b2aa';
|
374 |
+
if(MO2F_IS_ONPREM)
|
375 |
+
{
|
376 |
+
$twofactor_transactions = new Mo2fDB;
|
377 |
+
$exceeded = $twofactor_transactions->check_alluser_limit_exceeded($user->ID);
|
378 |
+
if($exceeded){
|
379 |
+
if(empty($configured_auth_method)){
|
380 |
+
$can_user_configure_2fa_method = false;
|
381 |
+
}
|
382 |
+
else{
|
383 |
+
$can_user_configure_2fa_method = true;
|
384 |
+
}
|
385 |
+
}
|
386 |
+
else{
|
387 |
+
$can_user_configure_2fa_method = true;
|
388 |
+
}
|
389 |
+
$is_customer_registered = true;
|
390 |
+
$user = wp_get_current_user();
|
391 |
+
$form .= ';color:white">';
|
392 |
+
|
393 |
+
$check = $is_customer_registered? true : false;
|
394 |
+
$show = 0;
|
395 |
+
|
396 |
+
|
397 |
+
|
398 |
+
$cloud_methods = array('miniOrange QR Code Authentication' , 'miniOrange Soft Token','miniOrange Push Notification');
|
399 |
+
|
400 |
+
if($auth_method == 'Email Verification' || $auth_method == 'Security Questions' || $auth_method == 'Google Authenticator' || $auth_method == 'miniOrange QR Code Authentication' || $auth_method =='miniOrange Soft Token' || $auth_method == 'miniOrange Push Notification' || $auth_method == 'OTP Over SMS' || $auth_method == 'OTP Over Email')
|
401 |
+
{
|
402 |
+
$show = 1;
|
403 |
+
}
|
404 |
+
|
405 |
+
if ( $check ) {
|
406 |
+
$form .= '<div class="mo2f_configure_2_factor">
|
407 |
+
<button type="button" id="'.$auth_method_abr.'_configuration" class="mo2f_configure_set_2_factor" onclick="configureOrSet2ndFactor_' . $category . '(\'' . $auth_method_abr . '\', \'configure2factor\');"';
|
408 |
+
$form .= $show==1 ? "" : " disabled ";
|
409 |
+
$form .= '>';
|
410 |
+
if($show)
|
411 |
+
$form .= $is_auth_method_configured? 'Reconfigure' : 'Configure';
|
412 |
+
else
|
413 |
+
$form .= 'Available in cloud solution';
|
414 |
+
$form .= '</button></div>';
|
415 |
+
}
|
416 |
+
if ( ($is_auth_method_configured && ! $is_auth_method_selected) or MO2F_IS_ONPREM) {
|
417 |
+
$form .= '<div class="mo2f_set_2_factor">
|
418 |
+
<button type="button" id="'.$auth_method_abr.'_set_2_factor" class="mo2f_configure_set_2_factor" onclick="configureOrSet2ndFactor_' . $category . '(\'' . $auth_method_abr . '\', \'select2factor\');"';
|
419 |
+
$form .= $can_user_configure_2fa_method ? "" : " disabled ";
|
420 |
+
$form .= $show==1 ? "" : " disabled ";
|
421 |
+
if($show == 1 and $is_auth_method_configured and $iscurrentMethod == 0)
|
422 |
+
$form .= '>Set as 2-factor</button>
|
423 |
+
</div>';
|
424 |
+
}
|
425 |
+
|
426 |
+
$form .= '</div>';
|
427 |
+
|
428 |
+
}
|
429 |
+
else
|
430 |
+
{
|
431 |
+
if(get_option('mo2f_miniorange_admin'))
|
432 |
+
$allowed = wp_get_current_user()->ID == get_option('mo2f_miniorange_admin');
|
433 |
+
else
|
434 |
+
$allowed = 1;
|
435 |
+
$cloudswitch = 0;
|
436 |
+
if(!$allowed)
|
437 |
+
$allowed = 2;
|
438 |
+
$form .= ';color:white">';
|
439 |
+
$check = !$is_customer_registered? true : ($auth_method != "Email Verification" and $auth_method != "OTP Over Email"? true : false);
|
440 |
+
$is_auth_method_configured = !$is_customer_registered ? 0 :1;
|
441 |
+
if(!MO2F_IS_ONPREM and ($auth_method == "Email Verification" or $auth_method == "OTP Over Email"))
|
442 |
+
$check = 0;
|
443 |
+
if ( $check ) {
|
444 |
+
$form .= '<div class="mo2f_configure_2_factor">
|
445 |
+
<button type="button" id="'.$auth_method_abr.'_configuration" class="mo2f_configure_set_2_factor" onclick="configureOrSet2ndFactor_' . $category . '(\'' . $auth_method_abr . '\', \'configure2factor\','.$cloudswitch.','.$allowed.');"';
|
446 |
+
$form .= $can_user_configure_2fa_method ? "" : " ";
|
447 |
+
$form .= '>';
|
448 |
+
$form .= $is_auth_method_configured ? 'Reconfigure' : 'Configure';
|
449 |
+
$form .= '</button></div>';
|
450 |
+
}
|
451 |
+
|
452 |
+
if ( ($is_auth_method_configured && ! $is_auth_method_selected) or MO2F_IS_ONPREM ) {
|
453 |
+
$form .= '<div class="mo2f_set_2_factor">
|
454 |
+
<button type="button" id="'.$auth_method_abr.'_set_2_factor" class="mo2f_configure_set_2_factor" onclick="configureOrSet2ndFactor_' . $category . '(\'' . $auth_method_abr . '\', \'select2factor\','.$cloudswitch.','.$allowed.');"';
|
455 |
+
$form .= $can_user_configure_2fa_method ? "" : " ";
|
456 |
+
$form .= '>Set as 2-factor</button>
|
457 |
+
</div>';
|
458 |
+
}
|
459 |
+
|
460 |
+
$form .= '</div>';
|
461 |
+
}
|
462 |
+
}
|
463 |
+
$form .= '</div></div></td>';
|
464 |
+
}
|
465 |
+
|
466 |
+
$form .= '</tr>';
|
467 |
+
}
|
468 |
+
|
469 |
+
|
470 |
+
$form .= '</table>';
|
471 |
+
if( $category!="free_plan")
|
472 |
+
if(current_user_can('administrator')){
|
473 |
+
$form .= '<div style="background-color: #f1f1f1;padding:10px">
|
474 |
+
<p style="font-size:16px;margin-left: 1%">In addition to these authentication methods, for other features in this plan, <a href="admin.php?page=mo_2fa_upgrade"><i>Click here.</i></a></p>
|
475 |
+
</div>';
|
476 |
+
}
|
477 |
+
|
478 |
+
$form .= '</div> <input type="hidden" name="miniorange_save_form_auth_methods_nonce"
|
479 |
+
value="'. wp_create_nonce( "miniorange-save-form-auth-methods-nonce" ) .'"/>
|
480 |
+
<input type="hidden" name="option" value="mo2f_save_' . $category . '_auth_methods" />
|
481 |
+
<input type="hidden" name="mo2f_configured_2FA_method_' . $category . '" id="mo2f_configured_2FA_method_' . $category . '" />
|
482 |
+
<input type="hidden" name="mo2f_selected_action_' . $category . '" id="mo2f_selected_action_' . $category . '" />
|
483 |
+
</form>';
|
484 |
+
|
485 |
+
return $form;
|
486 |
+
}
|
487 |
+
|
488 |
+
|
489 |
+
function mo2f_get_activated_second_factor( $user ) {
|
490 |
+
|
491 |
+
global $Mo2fdbQueries;
|
492 |
+
$user_registration_status = $Mo2fdbQueries->get_user_detail( 'mo_2factor_user_registration_status', $user->ID );
|
493 |
+
$is_customer_registered = $Mo2fdbQueries->get_user_detail( 'user_registration_with_miniorange', $user->ID ) == 'SUCCESS' ? true : false;
|
494 |
+
$useremail = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
495 |
+
|
496 |
+
if ( $user_registration_status == 'MO_2_FACTOR_SUCCESS' ) {
|
497 |
+
//checking this option for existing users
|
498 |
+
$Mo2fdbQueries->update_user_details( $user->ID, array( 'mobile_registration_status' => true ) );
|
499 |
+
$mo2f_second_factor = 'MOBILE AUTHENTICATION';
|
500 |
+
|
501 |
+
return $mo2f_second_factor;
|
502 |
+
} else if ( $user_registration_status == 'MO_2_FACTOR_INITIALIZE_TWO_FACTOR' ) {
|
503 |
+
return 'NONE';
|
504 |
+
} else {
|
505 |
+
//for new users
|
506 |
+
if ( $user_registration_status == 'MO_2_FACTOR_PLUGIN_SETTINGS' && $is_customer_registered ) {
|
507 |
+
$enduser = new Two_Factor_Setup();
|
508 |
+
$userinfo = json_decode( $enduser->mo2f_get_userinfo( $useremail ), true );
|
509 |
+
if ( json_last_error() == JSON_ERROR_NONE ) {
|
510 |
+
if ( $userinfo['status'] == 'ERROR' ) {
|
511 |
+
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( $userinfo['message'] ) );
|
512 |
+
$mo2f_second_factor = 'NONE';
|
513 |
+
} else if ( $userinfo['status'] == 'SUCCESS' ) {
|
514 |
+
$mo2f_second_factor = mo2f_update_and_sync_user_two_factor( $user->ID, $userinfo );
|
515 |
+
} else if ( $userinfo['status'] == 'FAILED' ) {
|
516 |
+
$mo2f_second_factor = 'NONE';
|
517 |
+
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "ACCOUNT_REMOVED" ) );
|
518 |
+
} else {
|
519 |
+
$mo2f_second_factor = 'NONE';
|
520 |
+
}
|
521 |
+
} else {
|
522 |
+
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "INVALID_REQ" ) );
|
523 |
+
$mo2f_second_factor = 'NONE';
|
524 |
+
}
|
525 |
+
} else {
|
526 |
+
$mo2f_second_factor = 'NONE';
|
527 |
+
}
|
528 |
+
|
529 |
+
return $mo2f_second_factor;
|
530 |
+
}
|
531 |
+
}
|
532 |
+
|
533 |
+
function mo2f_update_and_sync_user_two_factor( $user_id, $userinfo ) {
|
534 |
+
global $Mo2fdbQueries;
|
535 |
+
$mo2f_second_factor = isset( $userinfo['authType'] ) && ! empty( $userinfo['authType'] ) ? $userinfo['authType'] : 'NONE';
|
536 |
+
if(MO2F_IS_ONPREM)
|
537 |
+
{
|
538 |
+
$mo2f_second_factor = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user_id );
|
539 |
+
$mo2f_second_factor = $mo2f_second_factor ? $mo2f_second_factor : 'NONE';
|
540 |
+
return $mo2f_second_factor;
|
541 |
+
}
|
542 |
+
|
543 |
+
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_user_email' => $userinfo['email'] ) );
|
544 |
+
if ( $mo2f_second_factor == 'OUT OF BAND EMAIL' ) {
|
545 |
+
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_EmailVerification_config_status' => true ) );
|
546 |
+
} else if ( $mo2f_second_factor == 'SMS' and !MO2F_IS_ONPREM) {
|
547 |
+
$phone_num = $userinfo['phone'];
|
548 |
+
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_OTPOverSMS_config_status' => true ) );
|
549 |
+
$_SESSION['user_phone'] = $phone_num;
|
550 |
+
} else if ( in_array( $mo2f_second_factor, array(
|
551 |
+
'SOFT TOKEN',
|
552 |
+
'MOBILE AUTHENTICATION',
|
553 |
+
'PUSH NOTIFICATIONS'
|
554 |
+
) ) ) {
|
555 |
+
if(!MO2F_IS_ONPREM)
|
556 |
+
$Mo2fdbQueries->update_user_details( $user_id, array(
|
557 |
+
'mo2f_miniOrangeSoftToken_config_status' => true,
|
558 |
+
'mo2f_miniOrangeQRCodeAuthentication_config_status' => true,
|
559 |
+
'mo2f_miniOrangePushNotification_config_status' => true
|
560 |
+
) );
|
561 |
+
} else if ( $mo2f_second_factor == 'KBA' ) {
|
562 |
+
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_SecurityQuestions_config_status' => true ) );
|
563 |
+
} else if ( $mo2f_second_factor == 'GOOGLE AUTHENTICATOR' ) {
|
564 |
+
$app_type = get_user_meta( $user_id, 'mo2f_external_app_type', true );
|
565 |
+
|
566 |
+
if ( $app_type == 'Google Authenticator' ) {
|
567 |
+
$Mo2fdbQueries->update_user_details( $user_id, array(
|
568 |
+
'mo2f_GoogleAuthenticator_config_status' => true
|
569 |
+
) );
|
570 |
+
update_user_meta( $user_id, 'mo2f_external_app_type', 'Google Authenticator' );
|
571 |
+
} else if ( $app_type == 'Authy Authenticator' ) {
|
572 |
+
$Mo2fdbQueries->update_user_details( $user_id, array(
|
573 |
+
'mo2f_AuthyAuthenticator_config_status' => true
|
574 |
+
) );
|
575 |
+
update_user_meta( $user_id, 'mo2f_external_app_type', 'Authy Authenticator' );
|
576 |
+
} else {
|
577 |
+
$Mo2fdbQueries->update_user_details( $user_id, array(
|
578 |
+
'mo2f_GoogleAuthenticator_config_status' => true
|
579 |
+
) );
|
580 |
+
|
581 |
+
update_user_meta( $user_id, 'mo2f_external_app_type', 'Google Authenticator' );
|
582 |
+
}
|
583 |
+
}
|
584 |
+
|
585 |
+
return $mo2f_second_factor;
|
586 |
+
}
|
587 |
+
|
588 |
+
function display_customer_registration_forms($user){
|
589 |
+
|
590 |
+
global $Mo2fdbQueries;
|
591 |
+
$mo2f_current_registration_status = get_option( 'mo_2factor_user_registration_status');
|
592 |
+
$mo2f_message = get_option( 'mo2f_message' );
|
593 |
+
?>
|
594 |
+
|
595 |
+
<div id="smsAlertModal" class="modal" role="dialog" data-backdrop="static" data-keyboard="false" >
|
596 |
+
<div class="mo2f_modal-dialog" style="margin-left:30%;">
|
597 |
+
<!-- Modal content-->
|
598 |
+
<div class="modal-content">
|
599 |
+
<div class="mo2f_modal-header">
|
600 |
+
<h2 class="mo2f_modal-title">You are just one step away from setting up 2FA.</h2><span type="button" id="mo2f_registration_closed" class="modal-span-close" data-dismiss="modal">×</span>
|
601 |
+
</div>
|
602 |
+
<div class="mo2f_modal-body">
|
603 |
+
<span style="color:green;cursor: pointer;float:right;" onclick="show_content();">Why Register with miniOrange?</span><br>
|
604 |
+
<div id="mo2f_register" style="background-color:#f1f1f1;padding: 1px 4px 1px 14px;display: none;">
|
605 |
+
<p>miniOrange Two Factor plugin uses highly secure miniOrange APIs to communicate with the plugin. To keep this communication secure, we ask you to register and assign you API keys specific to your account. This way your account and users can be only accessed by API keys assigned to you. Also, you can use the same account on multiple applications and your users do not have to maintain multiple accounts or 2-factors.</p>
|
606 |
+
</div>
|
607 |
+
<?php if ( $mo2f_message ) { ?>
|
608 |
+
<div style="padding:5px;">
|
609 |
+
<div class="alert alert-info" style="margin-bottom:0px;padding:3px;">
|
610 |
+
<p style="font-size:15px;margin-left: 2%;"><?php echo $mo2f_message; ?></p>
|
611 |
+
</div>
|
612 |
+
</div>
|
613 |
+
<?php }
|
614 |
+
if(in_array($mo2f_current_registration_status, array("REGISTRATION_STARTED", "MO_2_FACTOR_OTP_DELIVERED_SUCCESS", "MO_2_FACTOR_OTP_DELIVERED_FAILURE", "MO_2_FACTOR_VERIFY_CUSTOMER")) ){
|
615 |
+
mo2f_show_registration_screen($user);
|
616 |
+
}
|
617 |
+
?>
|
618 |
+
</div>
|
619 |
+
</div>
|
620 |
+
</div>
|
621 |
+
<form name="f" method="post" action="" class="mo2f_registration_closed_form">
|
622 |
+
<input type="hidden" name="mo2f_registration_closed_nonce"
|
623 |
+
value="<?php echo wp_create_nonce( "mo2f-registration-closed-nonce" ) ?>"/>
|
624 |
+
<input type="hidden" name="option" value="mo2f_registration_closed"/>
|
625 |
+
</form>
|
626 |
+
</div>
|
627 |
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
|
628 |
+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
|
629 |
+
<script>
|
630 |
+
function show_content() {
|
631 |
+
jQuery('#mo2f_register').slideToggle();
|
632 |
+
}
|
633 |
+
jQuery(function () {
|
634 |
+
jQuery('#smsAlertModal').modal();
|
635 |
+
});
|
636 |
+
|
637 |
+
jQuery('#mo2f_registration_closed').click(function () {
|
638 |
+
jQuery('.mo2f_registration_closed_form').submit();
|
639 |
+
});
|
640 |
+
</script>
|
641 |
+
|
642 |
+
<?php
|
643 |
+
}
|
644 |
+
|
645 |
+
function mo2f_show_registration_screen($user){
|
646 |
+
global $mo2f_dirName;
|
647 |
+
|
648 |
+
include $mo2f_dirName . 'controllers'.DIRECTORY_SEPARATOR.'account.php';
|
649 |
+
|
650 |
+
}
|
651 |
+
|
652 |
+
function mo2f_show_2FA_configuration_screen( $user, $selected2FAmethod ) {
|
653 |
+
global $mo2f_dirName;
|
654 |
+
switch ( $selected2FAmethod ) {
|
655 |
+
case "Google Authenticator":
|
656 |
+
if(MO2F_IS_ONPREM){
|
657 |
+
include_once dirname( __FILE__ ) . DIRECTORY_SEPARATOR. 'gaonprem.php';
|
658 |
+
$obj = new Google_auth_onpremise();
|
659 |
+
$obj->mo_GAuth_get_details();
|
660 |
+
}
|
661 |
+
else{
|
662 |
+
Miniorange_Authentication::mo2f_get_GA_parameters($user);
|
663 |
+
mo2f_configure_google_authenticator( $user );
|
664 |
+
}
|
665 |
+
break;
|
666 |
+
case "Authy Authenticator":
|
667 |
+
mo2f_configure_authy_authenticator( $user );
|
668 |
+
break;
|
669 |
+
case "Security Questions":
|
670 |
+
mo2f_configure_for_mobile_suppport_kba( $user );
|
671 |
+
break;
|
672 |
+
case "Email Verification":
|
673 |
+
mo2f_configure_for_mobile_suppport_kba( $user );
|
674 |
+
break;
|
675 |
+
case "OTP Over SMS":
|
676 |
+
mo2f_configure_otp_over_sms( $user );
|
677 |
+
break;
|
678 |
+
case "miniOrange Soft Token":
|
679 |
+
mo2f_configure_miniorange_authenticator( $user );
|
680 |
+
break;
|
681 |
+
case "miniOrange QR Code Authentication":
|
682 |
+
mo2f_configure_miniorange_authenticator( $user );
|
683 |
+
break;
|
684 |
+
case "miniOrange Push Notification":
|
685 |
+
mo2f_configure_miniorange_authenticator( $user );
|
686 |
+
break;
|
687 |
+
case "OTP Over Email":
|
688 |
+
mo2f_test_otp_over_email($user,$selected2FAmethod);
|
689 |
+
break;
|
690 |
+
}
|
691 |
+
|
692 |
+
}
|
693 |
+
|
694 |
+
function mo2f_show_2FA_test_screen( $user, $selected2FAmethod ) {
|
695 |
+
|
696 |
+
|
697 |
+
switch ( $selected2FAmethod ) {
|
698 |
+
case "miniOrange QR Code Authentication":
|
699 |
+
mo2f_test_miniorange_qr_code_authentication( $user );
|
700 |
+
break;
|
701 |
+
case "miniOrange Push Notification":
|
702 |
+
mo2f_test_miniorange_push_notification( $user );
|
703 |
+
break;
|
704 |
+
case "miniOrange Soft Token":
|
705 |
+
mo2f_test_miniorange_soft_token( $user );
|
706 |
+
break;
|
707 |
+
case "Email Verification":
|
708 |
+
mo2f_test_email_verification();
|
709 |
+
break;
|
710 |
+
case "OTP Over SMS":
|
711 |
+
mo2f_test_otp_over_sms( $user );
|
712 |
+
break;
|
713 |
+
case "Security Questions":
|
714 |
+
mo2f_test_kba_security_questions( $user );
|
715 |
+
break;
|
716 |
+
case "OTP Over Email":
|
717 |
+
mo2f_test_otp_over_email($user,$selected2FAmethod);
|
718 |
+
break;
|
719 |
+
default:
|
720 |
+
mo2f_test_google_authy_authenticator( $user, $selected2FAmethod );
|
721 |
+
}
|
722 |
+
|
723 |
+
}
|
724 |
+
|
725 |
+
function mo2f_method_display_name($user,$mo2f_second_factor){
|
726 |
+
|
727 |
+
if ( $mo2f_second_factor == 'GOOGLE AUTHENTICATOR' ) {
|
728 |
+
$app_type = get_user_meta( $user->ID, 'mo2f_external_app_type', true );
|
729 |
+
|
730 |
+
if ( $app_type == 'Google Authenticator' ) {
|
731 |
+
$selectedMethod = 'Google Authenticator';
|
732 |
+
} else if ( $app_type == 'Authy Authenticator' ) {
|
733 |
+
$selectedMethod = 'Authy Authenticator';
|
734 |
+
} else {
|
735 |
+
$selectedMethod = 'Google Authenticator';
|
736 |
+
update_user_meta( $user->ID, 'mo2f_external_app_type', $selectedMethod );
|
737 |
+
}
|
738 |
+
} else {
|
739 |
+
$selectedMethod = MO2f_Utility::mo2f_decode_2_factor( $mo2f_second_factor, "servertowpdb" );
|
740 |
+
}
|
741 |
+
return $selectedMethod;
|
742 |
+
|
743 |
+
}
|
744 |
+
|
745 |
+
function mo2f_lt( $string ) {
|
746 |
+
return __($string ,'miniorange-2-factor-authentication' );
|
747 |
+
}
|
748 |
+
|
749 |
+
function mo2f_rba_description($mo2f_user_email) {?>
|
750 |
+
<div id="mo2f_rba_addon">
|
751 |
+
<?php if ( get_option( 'mo2f_rba_installed' ) ) { ?>
|
752 |
+
<a href="<?php echo admin_url(); ?>plugins.php" id="mo2f_activate_rba_addon"
|
753 |
+
class="mo_wpns_button mo_wpns_button1"
|
754 |
+
style="float:right; margin-top:2%;"><?php echo __( 'Activate Plugin', 'miniorange-2-factor-authentication' ); ?></a>
|
755 |
+
<?php } ?>
|
756 |
+
<?php if ( ! get_option( 'mo2f_rba_purchased' ) ) { ?>
|
757 |
+
<a onclick="mo2f_addonform('wp_2fa_addon_rba')" id="mo2f_purchase_rba_addon"
|
758 |
+
class="mo_wpns_button mo_wpns_button1"
|
759 |
+
style="float:right;"><?php echo __( 'Purchase', 'miniorange-2-factor-authentication' ); ?></a><?php } ?>
|
760 |
+
<div id="mo2f_rba_addon_hide">
|
761 |
+
|
762 |
+
<br>
|
763 |
+
<div id="mo2f_hide_rba_content">
|
764 |
+
|
765 |
+
<div class="mo2f_box">
|
766 |
+
<h3><?php echo __( 'Remember Device', 'miniorange-2-factor-authentication' ); ?></h3>
|
767 |
+
<hr>
|
768 |
+
<p id="mo2f_hide_rba_content"><?php echo __( 'With this feature, User would get an option to remember the personal device where Two Factor is not required. Every time the user logs in with the same device it detects the saved device so he will directly login without being prompted for the 2nd factor. If user logs in from new device he will be prompted with 2nd Factor.', 'miniorange-2-factor-authentication' ); ?>
|
769 |
+
|
770 |
+
</p>
|
771 |
+
</div>
|
772 |
+
<br><br>
|
773 |
+
<div class="mo2f_box">
|
774 |
+
<h3><?php echo __( 'Limit Number Of Device', 'miniorange-2-factor-authentication' ); ?></h3>
|
775 |
+
<hr>
|
776 |
+
<p><?php echo __( 'With this feature, the admin can restrict the number of devices from which the user can access the website. If the device limit is exceeded the admin can set three actions where it can allow the users to login, deny the access or challenge the user for authentication.', 'miniorange-2-factor-authentication' ); ?>
|
777 |
+
</p>
|
778 |
+
|
779 |
+
</div>
|
780 |
+
<br><br>
|
781 |
+
<div class="mo2f_box">
|
782 |
+
<h3><?php echo __( 'IP Restriction: Limit users to login from specific IPs', 'miniorange-2-factor-authentication' ); ?></h3>
|
783 |
+
<hr>
|
784 |
+
<p><?php echo __( 'The Admin can enable IP restrictions for the users. It will provide additional security to the accounts and perform different action to the accounts only from the listed IP Ranges. If user tries to access with a restricted IP, Admin can set three action: Allow, challenge or deny. Depending upon the action it will allow the user to login, challenge(prompt) for authentication or deny the access.', 'miniorange-2-factor-authentication' ); ?>
|
785 |
+
|
786 |
+
</div>
|
787 |
+
<br>
|
788 |
+
</div>
|
789 |
+
|
790 |
+
</div>
|
791 |
+
<div id="mo2f_rba_addon_show">
|
792 |
+
<?php $x = apply_filters( 'mo2f_rba', "rba" );?>
|
793 |
+
</div>
|
794 |
+
</div>
|
795 |
+
<form style="display:none;" id="mo2fa_loginform"
|
796 |
+
action="<?php echo MO_HOST_NAME . '/moas/login'; ?>"
|
797 |
+
target="_blank" method="post">
|
798 |
+
<input type="email" name="username" value="<?php echo $mo2f_user_email; ?>"/>
|
799 |
+
<input type="text" name="redirectUrl"
|
800 |
+
value="<?php echo MO_HOST_NAME . '/moas/initializepayment'; ?>"/>
|
801 |
+
<input type="text" name="requestOrigin" id="requestOrigin"/>
|
802 |
+
</form>
|
803 |
+
<script>
|
804 |
+
function mo2f_addonform(planType) {
|
805 |
+
jQuery('#requestOrigin').val(planType);
|
806 |
+
jQuery('#mo2fa_loginform').submit();
|
807 |
+
}
|
808 |
+
</script>
|
809 |
+
<?php
|
810 |
+
}
|
811 |
+
|
812 |
+
function mo2f_personalization_description($mo2f_user_email) {?>
|
813 |
+
<div id="mo2f_custom_addon">
|
814 |
+
<?php if ( get_option( 'mo2f_personalization_installed' ) ) { ?>
|
815 |
+
<a href="<?php echo admin_url(); ?>plugins.php" id="mo2f_activate_custom_addon"
|
816 |
+
class="mo_wpns_button mo_wpns_button1"
|
817 |
+
style="float:right; margin-top:2%;"><?php echo __( 'Activate Plugin', 'miniorange-2-factor-authentication' ); ?></a>
|
818 |
+
<?php } ?>
|
819 |
+
<?php if ( ! get_option( 'mo2f_personalization_purchased' ) ) { ?> <a
|
820 |
+
onclick="mo2f_addonform('wp_2fa_addon_shortcode')" id="mo2f_purchase_custom_addon"
|
821 |
+
class="mo_wpns_button mo_wpns_button1"
|
822 |
+
style="float:right;"><?php echo __( 'Purchase', 'miniorange-2-factor-authentication' ); ?></a>
|
823 |
+
<?php } ?>
|
824 |
+
<div id="mo2f_custom_addon_hide">
|
825 |
+
|
826 |
+
|
827 |
+
<br>
|
828 |
+
<div id="mo2f_hide_custom_content">
|
829 |
+
<div class="mo2f_box">
|
830 |
+
<h3><?php echo __( 'Customize Plugin Icon', 'miniorange-2-factor-authentication' ); ?></h3>
|
831 |
+
<hr>
|
832 |
+
<p>
|
833 |
+
<?php echo __( 'With this feature, you can customize the plugin icon in the dashboard which is useful when you want your custom logo to be displayed to the users.', 'miniorange-2-factor-authentication' ); ?>
|
834 |
+
</p>
|
835 |
+
<br>
|
836 |
+
<h3><?php echo __( 'Customize Plugin Name', 'miniorange-2-factor-authentication' ); ?></h3>
|
837 |
+
<hr>
|
838 |
+
<p>
|
839 |
+
<?php echo __( 'With this feature, you can customize the name of the plugin in the dashboard.', 'miniorange-2-factor-authentication' ); ?>
|
840 |
+
</p>
|
841 |
+
|
842 |
+
</div>
|
843 |
+
<br>
|
844 |
+
<div class="mo2f_box">
|
845 |
+
<h3><?php echo __( 'Customize UI of Login Pop up\'s', 'miniorange-2-factor-authentication' ); ?></h3>
|
846 |
+
<hr>
|
847 |
+
<p>
|
848 |
+
<?php echo __( 'With this feature, you can customize the login pop-ups during two factor authentication according to the theme of your website.', 'miniorange-2-factor-authentication' ); ?>
|
849 |
+
</p>
|
850 |
+
</div>
|
851 |
+
|
852 |
+
<br>
|
853 |
+
<div class="mo2f_box">
|
854 |
+
<h3><?php echo __( 'Custom Email and SMS Templates', 'miniorange-2-factor-authentication' ); ?></h3>
|
855 |
+
<hr>
|
856 |
+
|
857 |
+
<p><?php echo __( 'You can change the templates for Email and SMS which user receives during authentication.', 'miniorange-2-factor-authentication' ); ?></p>
|
858 |
+
|
859 |
+
</div>
|
860 |
+
</div>
|
861 |
+
</div>
|
862 |
+
<div id="mo2f_custom_addon_show"><?php $x = apply_filters( 'mo2f_custom', "custom"); ?></div>
|
863 |
+
</div>
|
864 |
+
|
865 |
+
<?php
|
866 |
+
}
|
867 |
+
|
868 |
+
function mo2f_shortcode_description($mo2f_user_email) { ?>
|
869 |
+
<div id="mo2f_Shortcode_addon_hide">
|
870 |
+
<?php if ( get_option( 'mo2f_shortcode_installed' ) ) { ?>
|
871 |
+
<a href="<?php echo admin_url(); ?>plugins.php" id="mo2f_activate_shortcode_addon"
|
872 |
+
class="mo_wpns_button mo_wpns_button1" style="float:right; margin-top:2%;"><?php echo __( 'Activate
|
873 |
+
Plugin', 'miniorange-2-factor-authentication' ); ?></a>
|
874 |
+
<?php } if ( ! get_option( 'mo2f_shortcode_purchased' ) ) { ?>
|
875 |
+
<a onclick="mo2f_addonform('wp_2fa_addon_personalization')" id="mo2f_purchase_shortcode_addon"
|
876 |
+
class="mo_wpns_button mo_wpns_button1"
|
877 |
+
style="float:right;"><?php echo __( 'Purchase', 'miniorange-2-factor-authentication' ); ?></a>
|
878 |
+
<?php } ?>
|
879 |
+
|
880 |
+
<div id="shortcode" class="description">
|
881 |
+
|
882 |
+
|
883 |
+
<br>
|
884 |
+
<div id="mo2f_hide_shortcode_content" class="mo2f_box">
|
885 |
+
<h3><?php echo __( 'List of Shortcodes', 'miniorange-2-factor-authentication' ); ?>:</h3>
|
886 |
+
<hr>
|
887 |
+
<ol style="margin-left:2%">
|
888 |
+
<li>
|
889 |
+
<b><?php echo __( 'Enable Two Factor: ', 'miniorange-2-factor-authentication' ); ?></b> <?php echo __( 'This shortcode provides an option to turn on/off 2-factor by user.', 'miniorange-2-factor-authentication' ); ?>
|
890 |
+
</li>
|
891 |
+
<li>
|
892 |
+
<b><?php echo __( 'Enable Reconfiguration: ', 'miniorange-2-factor-authentication' ); ?></b> <?php echo __( 'This shortcode provides an option to configure the Google Authenticator and Security Questions by user.', 'miniorange-2-factor-authentication' ); ?>
|
893 |
+
</li>
|
894 |
+
<li>
|
895 |
+
<b><?php echo __( 'Enable Remember Device: ', 'miniorange-2-factor-authentication' ); ?></b> <?php echo __( ' This shortcode provides\'Enable Remember Device\' from your custom login form.', 'miniorange-2-factor-authentication' ); ?>
|
896 |
+
</li>
|
897 |
+
</ol>
|
898 |
+
</div>
|
899 |
+
<div id="mo2f_Shortcode_addon_show"><?php $x = apply_filters( 'mo2f_shortcode', "shortcode" ); ?></div>
|
900 |
+
</div>
|
901 |
+
<br>
|
902 |
+
</div>
|
903 |
+
<form style="display:none;" id="mo2fa_loginform" action="<?php echo MO_HOST_NAME . '/moas/login'; ?>" target="_blank" method="post">
|
904 |
+
<input type="email" name="username" value="<?php echo $mo2f_user_email; ?>"/>
|
905 |
+
<input type="text" name="redirectUrl"
|
906 |
+
value="<?php echo MO_HOST_NAME . '/moas/initializepayment'; ?>"/>
|
907 |
+
<input type="text" name="requestOrigin" id="requestOrigin"/>
|
908 |
+
</form>
|
909 |
+
<script>
|
910 |
+
function mo2f_addonform(planType) {
|
911 |
+
jQuery('#requestOrigin').val(planType);
|
912 |
+
jQuery('#mo2fa_loginform').submit();
|
913 |
+
}
|
914 |
+
</script>
|
915 |
+
<?php
|
916 |
+
}
|
917 |
+
|
918 |
+
?>
|
handler/twofa/two_fa_constants.php
CHANGED
@@ -369,7 +369,7 @@ class Mo2fConstants {
|
|
369 |
break;
|
370 |
|
371 |
case 'SET_2FA_otp':
|
372 |
-
Return mo2f_lt( 'is set as your Two-Factor method.
|
373 |
break;
|
374 |
|
375 |
|
369 |
break;
|
370 |
|
371 |
case 'SET_2FA_otp':
|
372 |
+
Return mo2f_lt( 'is set as your Two-Factor method.' );
|
373 |
break;
|
374 |
|
375 |
|
handler/twofa/two_fa_get_details.php
CHANGED
@@ -8,13 +8,11 @@ class two_fa_get_details {
|
|
8 |
}
|
9 |
function setUserMethod($userid,$currentMethod){
|
10 |
$response= update_user_meta($userid,'currentMethod',$currentMethod);
|
11 |
-
//$userMethod = get_user_meta($userid,'currentMethod',true);
|
12 |
return $response;
|
13 |
}
|
14 |
|
15 |
function setUserEmail($userid,$email){
|
16 |
$response= update_user_meta($userid,'email',$email);
|
17 |
-
//$userMethod = get_user_meta($userid,'currentMethod',true);
|
18 |
return $response;
|
19 |
}
|
20 |
|
8 |
}
|
9 |
function setUserMethod($userid,$currentMethod){
|
10 |
$response= update_user_meta($userid,'currentMethod',$currentMethod);
|
|
|
11 |
return $response;
|
12 |
}
|
13 |
|
14 |
function setUserEmail($userid,$email){
|
15 |
$response= update_user_meta($userid,'email',$email);
|
|
|
16 |
return $response;
|
17 |
}
|
18 |
|
handler/twofa/two_fa_login.php
CHANGED
@@ -30,9 +30,15 @@ class Miniorange_Mobile_Login {
|
|
30 |
global $Mo2fdbQueries;
|
31 |
$currentuser = wp_authenticate_username_password( $user, $username, $password );
|
32 |
if ( is_wp_error( $currentuser ) ) {
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
} else {
|
35 |
-
if(MO2F_IS_ONPREM and (!
|
36 |
{
|
37 |
$attributes = isset( $_POST['miniorange_rba_attribures'] ) ? $_POST['miniorange_rba_attribures'] : null;
|
38 |
$session_id = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
30 |
global $Mo2fdbQueries;
|
31 |
$currentuser = wp_authenticate_username_password( $user, $username, $password );
|
32 |
if ( is_wp_error( $currentuser ) ) {
|
33 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
34 |
+
$data = array('notice' => '<div style="border-left:3px solid #dc3232;"> Invalid User Credentials', );
|
35 |
+
wp_send_json_success($data);
|
36 |
+
}
|
37 |
+
else{
|
38 |
+
return $currentuser;
|
39 |
+
}
|
40 |
} else {
|
41 |
+
if(MO2F_IS_ONPREM and (!MoWpnsUtility::get_mo2f_db_option('mo2f_login_option', 'get_option') or get_option('mo2f_enable_login_with_2nd_factor')))
|
42 |
{
|
43 |
$attributes = isset( $_POST['miniorange_rba_attribures'] ) ? $_POST['miniorange_rba_attribures'] : null;
|
44 |
$session_id = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
handler/twofa/two_fa_pass2login.php
CHANGED
@@ -39,8 +39,8 @@ class Miniorange_Password_2Factor_Login {
|
|
39 |
$redirect_to = isset( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : null;
|
40 |
if( $moWpnsUtility->check_empty_or_null( $email ) || $moWpnsUtility->check_empty_or_null( $password ) )
|
41 |
{
|
42 |
-
|
43 |
-
|
44 |
$this->miniorange_pass2login_form_fields($login_status, $login_message,$redirect_to,null,$session_id_encrypt);
|
45 |
return;
|
46 |
}
|
@@ -91,7 +91,7 @@ class Miniorange_Password_2Factor_Login {
|
|
91 |
|
92 |
if(strcasecmp($customerKey['status'], 'SUCCESS') == 0)
|
93 |
{
|
94 |
-
$this->inline_save_success_customer_config($email, $customerKey['id'], $customerKey['apiKey'], $customerKey['token'], $customerKey['appSecret']);
|
95 |
$this->inline_get_current_customer($user_id,$email,$password,$redirect_to,$session_id_encrypt);
|
96 |
}
|
97 |
|
@@ -103,34 +103,35 @@ class Miniorange_Password_2Factor_Login {
|
|
103 |
|
104 |
}
|
105 |
|
106 |
-
function inline_get_current_customer($
|
107 |
{
|
108 |
global $Mo2fdbQueries;
|
109 |
$customer = new MocURL();
|
|
|
110 |
$content = $customer->get_customer_key($email, $password);
|
111 |
$customerKey = json_decode($content, true);
|
112 |
if(json_last_error() == JSON_ERROR_NONE)
|
113 |
{
|
114 |
if(isset($customerKey['phone'])){
|
115 |
update_option( 'mo_wpns_admin_phone', $customerKey['phone'] );
|
116 |
-
$Mo2fdbQueries->update_user_details( $
|
117 |
}
|
118 |
update_option('mo2f_email',$email);
|
119 |
-
$this->inline_save_success_customer_config($email, $customerKey['id'], $customerKey['apiKey'], $customerKey['token'], $customerKey['appSecret']);
|
120 |
$login_message=MoWpnsMessages::showMessage('REG_SUCCESS');
|
121 |
$login_status="MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS";
|
122 |
$this->miniorange_pass2login_form_fields($login_status, $login_message,$redirect_to,null,$session_id_encrypt);
|
123 |
}
|
124 |
else
|
125 |
{
|
126 |
-
$Mo2fdbQueries->update_user_details( $
|
127 |
$login_message=MoWpnsMessages::showMessage('ACCOUNT_EXISTS');
|
128 |
$login_status="MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS";
|
129 |
$this->miniorange_pass2login_form_fields($login_status, $login_message,$redirect_to,null,$session_id_encrypt);
|
130 |
}
|
131 |
}
|
132 |
|
133 |
-
function inline_save_success_customer_config($email, $id, $apiKey, $token, $appSecret)
|
134 |
{
|
135 |
global $Mo2fdbQueries;
|
136 |
update_option( 'mo2f_customerKey' , $id );
|
@@ -141,6 +142,9 @@ class Miniorange_Password_2Factor_Login {
|
|
141 |
update_option( 'mo2f_miniorange_admin', $id );
|
142 |
update_option( 'mo_2factor_admin_registration_status', 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' );
|
143 |
update_option( 'mo_2factor_user_registration_status', 'MO_2_FACTOR_PLUGIN_SETTINGS' );
|
|
|
|
|
|
|
144 |
}
|
145 |
function mo2f_inline_validate_otp(){
|
146 |
if(isset($_POST['miniorange_inline_validate_otp_nonce'])){
|
@@ -432,7 +436,6 @@ class Miniorange_Password_2Factor_Login {
|
|
432 |
else if($selected_2factor_method == 'MOBILE AUTHENTICATION')
|
433 |
$selected_2factor_method_onprem = 'miniOrange QR Code Authentication';
|
434 |
|
435 |
-
// update_user_meta($user_id,'currentMethod',$selected_2factor_method_onprem);
|
436 |
$response = json_decode($enduser->mo2f_update_userinfo($email,$selected_2factor_method,null,null,null),true);
|
437 |
if(json_last_error() == JSON_ERROR_NONE) { /* Generate Qr code */
|
438 |
if($response['status'] == 'ERROR'){
|
@@ -709,7 +712,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
709 |
|
710 |
$Mo2fdbQueries->update_user_details( $user_id, array('mo2f_2factor_enable_2fa_byusers' => 0) );
|
711 |
|
712 |
-
$this->mo2fa_pass2login($redirect_to);
|
713 |
}
|
714 |
}
|
715 |
}
|
@@ -774,10 +777,10 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
774 |
$mo2fa_login_status = 'MO_2_FACTOR_SETUP_SUCCESS';
|
775 |
}
|
776 |
}else if($selected_method == 'OTP OVER EMAIL'){
|
|
|
777 |
if(!MO2F_IS_ONPREM)
|
778 |
{
|
779 |
$current_user = get_userdata($currentUserId);
|
780 |
-
$email = $current_user->user_email;
|
781 |
$response = $this->create_user_in_miniOrange($currentUserId,$email,$selected_method);
|
782 |
if($response['status']=='ERROR') {
|
783 |
$mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
|
@@ -785,31 +788,16 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
785 |
}
|
786 |
else
|
787 |
{
|
788 |
-
$
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
'mo2f_user_email' => $email,
|
794 |
-
'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS'
|
795 |
-
) );
|
796 |
-
$mo2fa_login_status = 'MO_2_FACTOR_SETUP_SUCCESS';
|
797 |
-
$response = json_decode($enduser->mo2f_update_userinfo($email,'EMAIL',null,null,null),true);
|
798 |
-
|
799 |
}
|
800 |
}
|
801 |
else
|
802 |
{
|
803 |
-
$
|
804 |
-
|
805 |
-
$Mo2fdbQueries->update_user_details( $currentUserId,
|
806 |
-
array('mo2f_OTPOverEmail_config_status'=>true,
|
807 |
-
'mo2f_configured_2FA_method' =>'OTP Over Email',
|
808 |
-
'mo2f_user_email' => $email,
|
809 |
-
'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS'
|
810 |
-
) );
|
811 |
-
$mo2fa_login_status = 'MO_2_FACTOR_SETUP_SUCCESS';
|
812 |
-
$response = json_decode($enduser->mo2f_update_userinfo($email,'EMAIL',null,null,null),true);
|
813 |
}
|
814 |
}else if($selected_method == "GOOGLE AUTHENTICATOR"){
|
815 |
$this->miniorange_pass2login_start_session();
|
@@ -932,7 +920,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
932 |
$mo2f_rba_status = MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_rba_status',$session_id_encrypt );
|
933 |
$kba_validate = new Customer_Setup();
|
934 |
$kba_validate_response = json_decode( $kba_validate->validate_otp_token( 'KBA', null, $mo2f_login_transaction_id, $otpToken, get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) ), true );
|
935 |
-
|
936 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user_id );
|
937 |
if ( strcasecmp( $kba_validate_response['status'], 'SUCCESS' ) == 0 ) {
|
938 |
if ( get_option( 'mo2f_remember_device' ) && $check_trust_device == 'on' ) {
|
@@ -994,6 +982,25 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
994 |
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
995 |
}
|
996 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
997 |
function check_miniorange_challenge_forgotphone($POSTED){/*check kba validation*/
|
998 |
$nonce = $_POST['miniorange_forgotphone'];
|
999 |
if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-forgotphone' ) ) {
|
@@ -1054,6 +1061,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1054 |
}
|
1055 |
function check_miniorange_mobile_validation($POSTED){
|
1056 |
/*check mobile validation */
|
|
|
1057 |
$nonce = $POSTED['miniorange_mobile_validation_nonce'];
|
1058 |
if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-mobile-validation-nonce' ) ) {
|
1059 |
$error = new WP_Error();
|
@@ -1218,10 +1226,16 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1218 |
$session_id_encrypt = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
1219 |
$this->remove_current_activity($session_id_encrypt);
|
1220 |
update_option('mo2f_attempts_before_redirect', 3);
|
|
|
|
|
|
|
|
|
|
|
1221 |
return new WP_Error( 'limit_exceeded', '<strong>ERROR</strong>: Number of attempts exceeded.');
|
1222 |
}
|
1223 |
}
|
1224 |
}
|
|
|
1225 |
global $Mo2fdbQueries;
|
1226 |
$user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user_id );
|
1227 |
if ( isset( $user_id ) ) {
|
@@ -1230,6 +1244,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1230 |
$current_user = get_userdata($user_id);
|
1231 |
//if the php session folder has insufficient permissions, cookies to be used
|
1232 |
$mo2f_login_transaction_id = MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_transactionId', $session_id_encrypt );
|
|
|
1233 |
if ( isset( $mo2fa_login_status ) && $mo2fa_login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL' ) {
|
1234 |
$content = json_decode( $customer->validate_otp_token( 'EMAIL', null, $mo2f_login_transaction_id, $softtoken, get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ),$current_user ), true );
|
1235 |
} else if ( isset( $mo2fa_login_status ) && $mo2fa_login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_SMS' ) {
|
@@ -1244,12 +1259,21 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1244 |
$this->remove_current_activity($session_id_encrypt);
|
1245 |
return new WP_Error( 'invalid_username', __( '<strong>ERROR</strong>: Invalid Request. Please try again.' ) );
|
1246 |
}
|
|
|
1247 |
if ( strcasecmp( $content['status'], 'SUCCESS' ) == 0 ) {
|
1248 |
update_option('mo2f_attempts_before_redirect', 3);
|
1249 |
if ( get_option( 'mo2f_remember_device' ) ) {
|
1250 |
$mo2fa_login_status = 'MO_2_FACTOR_REMEMBER_TRUSTED_DEVICE';
|
1251 |
$this->miniorange_pass2login_form_fields( $mo2fa_login_status, null, $redirect_to,null,$session_id_encrypt );
|
1252 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1253 |
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
1254 |
}
|
1255 |
} else {
|
@@ -1262,6 +1286,11 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1262 |
$session_id_encrypt = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
1263 |
$this->remove_current_activity($session_id_encrypt);
|
1264 |
update_option('mo2f_attempts_before_redirect', 3);
|
|
|
|
|
|
|
|
|
|
|
1265 |
return new WP_Error( 'limit_exceeded', '<strong>ERROR</strong>: Number of attempts exceeded.');
|
1266 |
}
|
1267 |
}
|
@@ -1296,7 +1325,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1296 |
do_action('mo2f_network_init');
|
1297 |
global $Mo2fdbQueries;
|
1298 |
|
1299 |
-
if ( !
|
1300 |
if ( isset( $_POST['miniorange_login_nonce'] ) ) {
|
1301 |
$nonce = $_POST['miniorange_login_nonce'];
|
1302 |
$session_id = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
@@ -1501,6 +1530,10 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1501 |
$this->check_miniorange_challenge_forgotphone($_POST);
|
1502 |
break;
|
1503 |
|
|
|
|
|
|
|
|
|
1504 |
case 'miniorange_alternate_login_kba':
|
1505 |
|
1506 |
$this->check_miniorange_alternate_login_kba($_POST);
|
@@ -1728,8 +1761,8 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1728 |
}
|
1729 |
}
|
1730 |
|
1731 |
-
function miniorange_pass2login_form_fields( $mo2fa_login_status = null, $mo2fa_login_message = null, $redirect_to = null, $qrCode = null, $session_id_encrypt ) {
|
1732 |
-
|
1733 |
$login_status = $mo2fa_login_status;
|
1734 |
$login_message = $mo2fa_login_message;
|
1735 |
switch ($login_status) {
|
@@ -1745,7 +1778,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1745 |
break;
|
1746 |
case 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL':
|
1747 |
$user_id = $this->mo2f_userID ? $this->mo2f_userID : MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_current_user_id',$session_id_encrypt );
|
1748 |
-
mo2f_get_otp_authentication_prompt( $login_status, $login_message, $redirect_to, $session_id_encrypt,$user_id
|
1749 |
exit;
|
1750 |
break;
|
1751 |
case 'MO_2_FACTOR_CHALLENGE_OTP_OVER_SMS':
|
@@ -1915,6 +1948,9 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1915 |
if(is_null($session_id_encrypt)) {
|
1916 |
$session_id_encrypt=$this->create_session();
|
1917 |
}
|
|
|
|
|
|
|
1918 |
?>
|
1919 |
<p><input type="hidden" name="miniorange_login_nonce"
|
1920 |
value="<?php echo wp_create_nonce( 'miniorange-2-factor-login-nonce' ); ?>"/>
|
@@ -1941,7 +1977,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
1941 |
}else{
|
1942 |
|
1943 |
|
1944 |
-
if(
|
1945 |
{
|
1946 |
echo "\t<p>\n";
|
1947 |
echo "\t\t<label class=\"mo2f_instuction1\" title=\"".__('If you don\'t have 2-factor authentication enabled for your WordPress account, leave this field empty.','google-authenticator')."\">".__('2 Factor Authentication code*','google-authenticator')."<span id=\"google-auth-info\"></span><br />\n";
|
@@ -2019,7 +2055,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2019 |
}else {
|
2020 |
$content = $challengeMobile->send_otp_token( $user_email, $mo2f_second_factor, get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) );
|
2021 |
}
|
2022 |
-
|
2023 |
if ( json_last_error() == JSON_ERROR_NONE ) { /* Generate Qr code */
|
2024 |
if ( $response['status'] == 'SUCCESS' ) {
|
2025 |
MO2f_Utility::set_user_values( $session_id, "mo2f_transactionId", $response['txId'] );
|
@@ -2053,11 +2089,10 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2053 |
if($mo2f_second_factor == 'EMAIL')
|
2054 |
{
|
2055 |
$mo2f_user_phone = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
2056 |
-
$wdewdeqdqq =
|
2057 |
-
|
2058 |
-
if($wdewdeqdqq >10 or get_option(base64_encode("limitReached")))
|
2059 |
{
|
2060 |
-
|
2061 |
}
|
2062 |
}
|
2063 |
else
|
@@ -2075,7 +2110,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2075 |
$content = '';
|
2076 |
$response = [];
|
2077 |
$otpLIMiTE = 0;
|
2078 |
-
if(
|
2079 |
{
|
2080 |
if($mo2f_second_factor == 'OTP Over SMS')
|
2081 |
$mo2f_second_factor = 'SMS';
|
@@ -2093,7 +2128,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2093 |
if ( $response['status'] == 'SUCCESS' ) {
|
2094 |
if($mo2f_second_factor == 'EMAIL')
|
2095 |
{
|
2096 |
-
$cmVtYWluaW5nT1RQ =
|
2097 |
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
2098 |
}
|
2099 |
elseif($mo2f_second_factor == 'SMS')
|
@@ -2103,7 +2138,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2103 |
if(!isset($response['phoneDelivery']['contact']))
|
2104 |
$response['phoneDelivery']['contact'] = '';
|
2105 |
$message = 'The OTP has been sent to ' . MO2f_Utility::get_hidden_phone( $response['phoneDelivery']['contact'] ) . '. Please enter the OTP you received to Validate.';
|
2106 |
-
update_option( 'mo2f_number_of_transactions',
|
2107 |
MO2f_Utility::set_user_values( $session_id, "mo2f_transactionId", $response['txId'] );
|
2108 |
$this->mo2f_transactionid=$response['txId'];
|
2109 |
$mo2fa_login_message = $message;
|
@@ -2187,6 +2222,32 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2187 |
$session_id_encrypt=$this->create_session();
|
2188 |
}
|
2189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2190 |
MO2f_Utility::set_user_values($session_id_encrypt, 'mo2f_current_user_id', $currentuser->ID);
|
2191 |
MO2f_Utility::set_user_values($session_id_encrypt, 'mo2f_1stfactor_status', 'VALIDATE_SUCCESS');
|
2192 |
|
@@ -2210,7 +2271,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2210 |
$mo_2factor_user_registration_status = $Mo2fdbQueries->get_user_detail( 'mo_2factor_user_registration_status', $currentuser->ID );
|
2211 |
$kba_configuration_status = $Mo2fdbQueries->get_user_detail( 'mo2f_SecurityQuestions_config_status', $currentuser->ID );
|
2212 |
|
2213 |
-
if(
|
2214 |
$mo2f_allwed_login_attempts=get_option('mo2f_allwed_login_attempts');
|
2215 |
}else{
|
2216 |
$mo2f_allwed_login_attempts= 'disabled';
|
@@ -2219,6 +2280,9 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2219 |
|
2220 |
$twofactor_transactions = new Mo2fDB;
|
2221 |
$exceeded = $twofactor_transactions->check_alluser_limit_exceeded($currentuser->ID);
|
|
|
|
|
|
|
2222 |
|
2223 |
if ( $mo_2factor_user_registration_status == 'MO_2_FACTOR_PLUGIN_SETTINGS' ) { //checking if user has configured any 2nd factor method
|
2224 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $currentuser->ID );
|
@@ -2263,7 +2327,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2263 |
else if($mo2f_second_factor == 'OTP Over Email' || $mo2f_second_factor == 'OTP OVER EMAIL' || $mo2f_second_factor == "EMAIL") {
|
2264 |
$mo2f_second_factor = "EMAIL";
|
2265 |
|
2266 |
-
if(
|
2267 |
{
|
2268 |
update_site_option("bGltaXRSZWFjaGVk",1);
|
2269 |
|
@@ -2271,8 +2335,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2271 |
}
|
2272 |
|
2273 |
|
2274 |
-
|
2275 |
-
if((($mo2f_second_factor == 'GOOGLE AUTHENTICATOR') || ($mo2f_second_factor =='SOFT TOKEN') || ($mo2f_second_factor =='AUTHY AUTHENTICATOR')) && get_option('mo2f_enable_2fa_prompt_on_login_page')&& !get_option('mo2f_remember_device') && !isset($_POST['mo_woocommerce_login_prompt']) )
|
2276 |
{
|
2277 |
$error=$this->mo2f_validate_soft_token($currentuser, $redirect_to, $mo2f_second_factor, $otp_token,$session_id_encrypt);
|
2278 |
if(is_wp_error( $error))
|
@@ -2295,26 +2358,41 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2295 |
} else if ( $mo2f_second_factor == 'KBA' or $mo2f_second_factor == 'Security Questions') {
|
2296 |
$this->mo2f_pass2login_kba_verification( $currentuser->ID, $redirect_to , $session_id_encrypt );
|
2297 |
} else if ( $mo2f_second_factor == 'NONE' ) {
|
2298 |
-
|
|
|
|
|
|
|
2299 |
} else {
|
2300 |
$this->remove_current_activity($session_id_encrypt);
|
2301 |
$error = new WP_Error();
|
2302 |
-
|
2303 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2304 |
}
|
2305 |
}
|
2306 |
}
|
2307 |
|
2308 |
}
|
2309 |
-
}else if(!$exceeded &&
|
2310 |
$this->mo2fa_inline( $currentuser, $redirect_to, $session_id_encrypt );
|
2311 |
|
2312 |
} else {
|
2313 |
-
|
|
|
|
|
|
|
2314 |
}
|
2315 |
|
2316 |
} else { //plugin is not activated for current role then logged him in without asking 2 factor
|
2317 |
-
|
|
|
|
|
|
|
2318 |
}
|
2319 |
|
2320 |
}
|
@@ -2352,10 +2430,55 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2352 |
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
2353 |
}
|
2354 |
} else {
|
2355 |
-
|
|
|
|
|
|
|
|
|
|
|
2356 |
}
|
2357 |
}
|
2358 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2359 |
function mo2f_restrict_access( $identity ) {
|
2360 |
apply_filters( 'mo2f_rba_addon', $identity );
|
2361 |
exit;
|
@@ -2379,12 +2502,16 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2379 |
|
2380 |
function mo2f_check_username_password( $user, $username, $password, $redirect_to = null ) {
|
2381 |
if ( is_a( $user, 'WP_Error' ) && ! empty( $user ) ) {
|
2382 |
-
|
|
|
|
|
|
|
|
|
|
|
2383 |
}
|
2384 |
if($GLOBALS['pagenow'] == 'wp-login.php' && isset($_POST['mo_woocommerce_login_prompt'])){
|
2385 |
return new WP_Error( 'Unauthorized Access.' , '<strong>ERROR</strong>: Access Denied.');
|
2386 |
}
|
2387 |
-
|
2388 |
// if an app password is enabled, this is an XMLRPC / APP login ?
|
2389 |
if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
|
2390 |
|
@@ -2400,8 +2527,14 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2400 |
} else {
|
2401 |
$currentuser = wp_authenticate_username_password( $user, $username, $password );
|
2402 |
if ( is_wp_error( $currentuser ) ) {
|
2403 |
-
|
2404 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2405 |
} else {
|
2406 |
global $Mo2fdbQueries;
|
2407 |
$session_id = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
@@ -2419,7 +2552,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2419 |
}
|
2420 |
else
|
2421 |
{
|
2422 |
-
if ( empty( $_POST['mo_softtoken'] ) &&
|
2423 |
{
|
2424 |
|
2425 |
|
@@ -2427,7 +2560,12 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
|
|
2427 |
|
2428 |
$this->miniorange_initiate_2nd_factor( $currentuser, "", "","");
|
2429 |
}
|
2430 |
-
|
|
|
|
|
|
|
|
|
|
|
2431 |
// Prevent PHP notices when using app password login
|
2432 |
|
2433 |
}
|
39 |
$redirect_to = isset( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : null;
|
40 |
if( $moWpnsUtility->check_empty_or_null( $email ) || $moWpnsUtility->check_empty_or_null( $password ) )
|
41 |
{
|
42 |
+
$login_message=MoWpnsMessages::showMessage('REQUIRED_FIELDS');
|
43 |
+
$login_status="MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS";
|
44 |
$this->miniorange_pass2login_form_fields($login_status, $login_message,$redirect_to,null,$session_id_encrypt);
|
45 |
return;
|
46 |
}
|
91 |
|
92 |
if(strcasecmp($customerKey['status'], 'SUCCESS') == 0)
|
93 |
{
|
94 |
+
$this->inline_save_success_customer_config($user_id,$email, $customerKey['id'], $customerKey['apiKey'], $customerKey['token'], $customerKey['appSecret']);
|
95 |
$this->inline_get_current_customer($user_id,$email,$password,$redirect_to,$session_id_encrypt);
|
96 |
}
|
97 |
|
103 |
|
104 |
}
|
105 |
|
106 |
+
function inline_get_current_customer($user_id,$email,$password,$redirect_to,$session_id_encrypt)
|
107 |
{
|
108 |
global $Mo2fdbQueries;
|
109 |
$customer = new MocURL();
|
110 |
+
|
111 |
$content = $customer->get_customer_key($email, $password);
|
112 |
$customerKey = json_decode($content, true);
|
113 |
if(json_last_error() == JSON_ERROR_NONE)
|
114 |
{
|
115 |
if(isset($customerKey['phone'])){
|
116 |
update_option( 'mo_wpns_admin_phone', $customerKey['phone'] );
|
117 |
+
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo2f_user_phone' => $customerKey['phone'] ) );
|
118 |
}
|
119 |
update_option('mo2f_email',$email);
|
120 |
+
$this->inline_save_success_customer_config($user_id,$email, $customerKey['id'], $customerKey['apiKey'], $customerKey['token'], $customerKey['appSecret']);
|
121 |
$login_message=MoWpnsMessages::showMessage('REG_SUCCESS');
|
122 |
$login_status="MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS";
|
123 |
$this->miniorange_pass2login_form_fields($login_status, $login_message,$redirect_to,null,$session_id_encrypt);
|
124 |
}
|
125 |
else
|
126 |
{
|
127 |
+
$Mo2fdbQueries->update_user_details( $user_id, array( 'mo_2factor_user_registration_status' => 'MO_2_FACTOR_VERIFY_CUSTOMER' ) );
|
128 |
$login_message=MoWpnsMessages::showMessage('ACCOUNT_EXISTS');
|
129 |
$login_status="MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS";
|
130 |
$this->miniorange_pass2login_form_fields($login_status, $login_message,$redirect_to,null,$session_id_encrypt);
|
131 |
}
|
132 |
}
|
133 |
|
134 |
+
function inline_save_success_customer_config($user_id,$email, $id, $apiKey, $token, $appSecret)
|
135 |
{
|
136 |
global $Mo2fdbQueries;
|
137 |
update_option( 'mo2f_customerKey' , $id );
|
142 |
update_option( 'mo2f_miniorange_admin', $id );
|
143 |
update_option( 'mo_2factor_admin_registration_status', 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' );
|
144 |
update_option( 'mo_2factor_user_registration_status', 'MO_2_FACTOR_PLUGIN_SETTINGS' );
|
145 |
+
$Mo2fdbQueries->update_user_details( $user_id, array(
|
146 |
+
'mo2f_user_email' =>$email
|
147 |
+
) );
|
148 |
}
|
149 |
function mo2f_inline_validate_otp(){
|
150 |
if(isset($_POST['miniorange_inline_validate_otp_nonce'])){
|
436 |
else if($selected_2factor_method == 'MOBILE AUTHENTICATION')
|
437 |
$selected_2factor_method_onprem = 'miniOrange QR Code Authentication';
|
438 |
|
|
|
439 |
$response = json_decode($enduser->mo2f_update_userinfo($email,$selected_2factor_method,null,null,null),true);
|
440 |
if(json_last_error() == JSON_ERROR_NONE) { /* Generate Qr code */
|
441 |
if($response['status'] == 'ERROR'){
|
712 |
|
713 |
$Mo2fdbQueries->update_user_details( $user_id, array('mo2f_2factor_enable_2fa_byusers' => 0) );
|
714 |
|
715 |
+
$this->mo2fa_pass2login($redirect_to,$session_id_encrypt);
|
716 |
}
|
717 |
}
|
718 |
}
|
777 |
$mo2fa_login_status = 'MO_2_FACTOR_SETUP_SUCCESS';
|
778 |
}
|
779 |
}else if($selected_method == 'OTP OVER EMAIL'){
|
780 |
+
$email = $current_user->user_email;
|
781 |
if(!MO2F_IS_ONPREM)
|
782 |
{
|
783 |
$current_user = get_userdata($currentUserId);
|
|
|
784 |
$response = $this->create_user_in_miniOrange($currentUserId,$email,$selected_method);
|
785 |
if($response['status']=='ERROR') {
|
786 |
$mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
|
788 |
}
|
789 |
else
|
790 |
{
|
791 |
+
$user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $current_user->ID );
|
792 |
+
if($user_email != '' and !is_null($user_email))
|
793 |
+
$email = $user_email;
|
794 |
+
$this->mo2f_otp_over_email_send($email,$redirect_to,$session_id_encrypt,$current_user);
|
795 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
796 |
}
|
797 |
}
|
798 |
else
|
799 |
{
|
800 |
+
$this->mo2f_otp_over_email_send($email,$redirect_to,$session_id_encrypt,$current_user);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
801 |
}
|
802 |
}else if($selected_method == "GOOGLE AUTHENTICATOR"){
|
803 |
$this->miniorange_pass2login_start_session();
|
920 |
$mo2f_rba_status = MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_rba_status',$session_id_encrypt );
|
921 |
$kba_validate = new Customer_Setup();
|
922 |
$kba_validate_response = json_decode( $kba_validate->validate_otp_token( 'KBA', null, $mo2f_login_transaction_id, $otpToken, get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) ), true );
|
923 |
+
global $Mo2fdbQueries;
|
924 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user_id );
|
925 |
if ( strcasecmp( $kba_validate_response['status'], 'SUCCESS' ) == 0 ) {
|
926 |
if ( get_option( 'mo2f_remember_device' ) && $check_trust_device == 'on' ) {
|
982 |
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
983 |
}
|
984 |
}
|
985 |
+
|
986 |
+
function miniorange2f_back_to_inline_registration($POSTED)
|
987 |
+
{
|
988 |
+
$nonce = $_POST['miniorange_back_inline_reg_nonce'];
|
989 |
+
if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-back-inline-reg-nonce' ) ) {
|
990 |
+
$error = new WP_Error();
|
991 |
+
$error->add( 'empty_username', __( '<strong>ERROR</strong>: Invalid Request.' ) );
|
992 |
+
return $error;
|
993 |
+
} else {
|
994 |
+
|
995 |
+
$session_id_encrypt = sanitize_text_field($POSTED['session_id']);
|
996 |
+
$redirect_to = sanitize_text_field($POSTED['redirect_to']);
|
997 |
+
$mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
|
998 |
+
$mo2fa_login_message = '';
|
999 |
+
$this->miniorange_pass2login_form_fields( $mo2fa_login_status, $mo2fa_login_message, $redirect_to,null, $session_id_encrypt );
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
}
|
1003 |
+
|
1004 |
function check_miniorange_challenge_forgotphone($POSTED){/*check kba validation*/
|
1005 |
$nonce = $_POST['miniorange_forgotphone'];
|
1006 |
if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-forgotphone' ) ) {
|
1061 |
}
|
1062 |
function check_miniorange_mobile_validation($POSTED){
|
1063 |
/*check mobile validation */
|
1064 |
+
|
1065 |
$nonce = $POSTED['miniorange_mobile_validation_nonce'];
|
1066 |
if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-mobile-validation-nonce' ) ) {
|
1067 |
$error = new WP_Error();
|
1226 |
$session_id_encrypt = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
1227 |
$this->remove_current_activity($session_id_encrypt);
|
1228 |
update_option('mo2f_attempts_before_redirect', 3);
|
1229 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
1230 |
+
$data = array('reload' => "reload", );
|
1231 |
+
wp_send_json_success($data);
|
1232 |
+
}
|
1233 |
+
else
|
1234 |
return new WP_Error( 'limit_exceeded', '<strong>ERROR</strong>: Number of attempts exceeded.');
|
1235 |
}
|
1236 |
}
|
1237 |
}
|
1238 |
+
|
1239 |
global $Mo2fdbQueries;
|
1240 |
$user_email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user_id );
|
1241 |
if ( isset( $user_id ) ) {
|
1244 |
$current_user = get_userdata($user_id);
|
1245 |
//if the php session folder has insufficient permissions, cookies to be used
|
1246 |
$mo2f_login_transaction_id = MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_transactionId', $session_id_encrypt );
|
1247 |
+
|
1248 |
if ( isset( $mo2fa_login_status ) && $mo2fa_login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL' ) {
|
1249 |
$content = json_decode( $customer->validate_otp_token( 'EMAIL', null, $mo2f_login_transaction_id, $softtoken, get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ),$current_user ), true );
|
1250 |
} else if ( isset( $mo2fa_login_status ) && $mo2fa_login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_SMS' ) {
|
1259 |
$this->remove_current_activity($session_id_encrypt);
|
1260 |
return new WP_Error( 'invalid_username', __( '<strong>ERROR</strong>: Invalid Request. Please try again.' ) );
|
1261 |
}
|
1262 |
+
|
1263 |
if ( strcasecmp( $content['status'], 'SUCCESS' ) == 0 ) {
|
1264 |
update_option('mo2f_attempts_before_redirect', 3);
|
1265 |
if ( get_option( 'mo2f_remember_device' ) ) {
|
1266 |
$mo2fa_login_status = 'MO_2_FACTOR_REMEMBER_TRUSTED_DEVICE';
|
1267 |
$this->miniorange_pass2login_form_fields( $mo2fa_login_status, null, $redirect_to,null,$session_id_encrypt );
|
1268 |
} else {
|
1269 |
+
if($mo2fa_login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL')
|
1270 |
+
{
|
1271 |
+
$Mo2fdbQueries->update_user_details( $user_id, array('mo2f_configured_2FA_method' =>'OTP Over Email','mo_2factor_user_registration_status' =>'MO_2_FACTOR_PLUGIN_SETTINGS') );
|
1272 |
+
$enduser = new Two_Factor_Setup();
|
1273 |
+
|
1274 |
+
$enduser->mo2f_update_userinfo( $user_email, 'OTP Over Email', null, null, null );
|
1275 |
+
|
1276 |
+
}
|
1277 |
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
1278 |
}
|
1279 |
} else {
|
1286 |
$session_id_encrypt = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
1287 |
$this->remove_current_activity($session_id_encrypt);
|
1288 |
update_option('mo2f_attempts_before_redirect', 3);
|
1289 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
1290 |
+
$data = array('reload' => "reload", );
|
1291 |
+
wp_send_json_success($data);
|
1292 |
+
}
|
1293 |
+
else
|
1294 |
return new WP_Error( 'limit_exceeded', '<strong>ERROR</strong>: Number of attempts exceeded.');
|
1295 |
}
|
1296 |
}
|
1325 |
do_action('mo2f_network_init');
|
1326 |
global $Mo2fdbQueries;
|
1327 |
|
1328 |
+
if ( ! MoWpnsUtility::get_mo2f_db_option('mo2f_login_option', 'get_option') ) {
|
1329 |
if ( isset( $_POST['miniorange_login_nonce'] ) ) {
|
1330 |
$nonce = $_POST['miniorange_login_nonce'];
|
1331 |
$session_id = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
1530 |
$this->check_miniorange_challenge_forgotphone($_POST);
|
1531 |
break;
|
1532 |
|
1533 |
+
case 'miniorange2f_back_to_inline_registration':
|
1534 |
+
$this->miniorange2f_back_to_inline_registration($_POST);
|
1535 |
+
exit;
|
1536 |
+
|
1537 |
case 'miniorange_alternate_login_kba':
|
1538 |
|
1539 |
$this->check_miniorange_alternate_login_kba($_POST);
|
1761 |
}
|
1762 |
}
|
1763 |
|
1764 |
+
function miniorange_pass2login_form_fields( $mo2fa_login_status = null, $mo2fa_login_message = null, $redirect_to = null, $qrCode = null, $session_id_encrypt,$show_back_button =null ) {
|
1765 |
+
|
1766 |
$login_status = $mo2fa_login_status;
|
1767 |
$login_message = $mo2fa_login_message;
|
1768 |
switch ($login_status) {
|
1778 |
break;
|
1779 |
case 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL':
|
1780 |
$user_id = $this->mo2f_userID ? $this->mo2f_userID : MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_current_user_id',$session_id_encrypt );
|
1781 |
+
mo2f_get_otp_authentication_prompt( $login_status, $login_message, $redirect_to, $session_id_encrypt,$user_id,$show_back_button );
|
1782 |
exit;
|
1783 |
break;
|
1784 |
case 'MO_2_FACTOR_CHALLENGE_OTP_OVER_SMS':
|
1948 |
if(is_null($session_id_encrypt)) {
|
1949 |
$session_id_encrypt=$this->create_session();
|
1950 |
}
|
1951 |
+
wp_enqueue_script( 'tmlajax_script', plugins_url( 'includes/js/tmlajax.js', dirname(dirname(__FILE__)) ) );
|
1952 |
+
wp_localize_script( 'tmlajax_script', 'my_ajax_object',
|
1953 |
+
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
|
1954 |
?>
|
1955 |
<p><input type="hidden" name="miniorange_login_nonce"
|
1956 |
value="<?php echo wp_create_nonce( 'miniorange-2-factor-login-nonce' ); ?>"/>
|
1977 |
}else{
|
1978 |
|
1979 |
|
1980 |
+
if( MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_prompt_on_login_page', 'get_option'))
|
1981 |
{
|
1982 |
echo "\t<p>\n";
|
1983 |
echo "\t\t<label class=\"mo2f_instuction1\" title=\"".__('If you don\'t have 2-factor authentication enabled for your WordPress account, leave this field empty.','google-authenticator')."\">".__('2 Factor Authentication code*','google-authenticator')."<span id=\"google-auth-info\"></span><br />\n";
|
2055 |
}else {
|
2056 |
$content = $challengeMobile->send_otp_token( $user_email, $mo2f_second_factor, get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) );
|
2057 |
}
|
2058 |
+
$response = json_decode( $content, true );
|
2059 |
if ( json_last_error() == JSON_ERROR_NONE ) { /* Generate Qr code */
|
2060 |
if ( $response['status'] == 'SUCCESS' ) {
|
2061 |
MO2f_Utility::set_user_values( $session_id, "mo2f_transactionId", $response['txId'] );
|
2089 |
if($mo2f_second_factor == 'EMAIL')
|
2090 |
{
|
2091 |
$mo2f_user_phone = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
2092 |
+
$wdewdeqdqq = get_site_option(base64_encode("remainingOTP"));
|
2093 |
+
if($wdewdeqdqq >30 or get_site_option(base64_encode("limitReached")))
|
|
|
2094 |
{
|
2095 |
+
update_site_option(base64_encode("remainingOTP"),0);
|
2096 |
}
|
2097 |
}
|
2098 |
else
|
2110 |
$content = '';
|
2111 |
$response = [];
|
2112 |
$otpLIMiTE = 0;
|
2113 |
+
if(MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option')>0 or $mo2f_second_factor != 'EMAIL')
|
2114 |
{
|
2115 |
if($mo2f_second_factor == 'OTP Over SMS')
|
2116 |
$mo2f_second_factor = 'SMS';
|
2128 |
if ( $response['status'] == 'SUCCESS' ) {
|
2129 |
if($mo2f_second_factor == 'EMAIL')
|
2130 |
{
|
2131 |
+
$cmVtYWluaW5nT1RQ = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
2132 |
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
2133 |
}
|
2134 |
elseif($mo2f_second_factor == 'SMS')
|
2138 |
if(!isset($response['phoneDelivery']['contact']))
|
2139 |
$response['phoneDelivery']['contact'] = '';
|
2140 |
$message = 'The OTP has been sent to ' . MO2f_Utility::get_hidden_phone( $response['phoneDelivery']['contact'] ) . '. Please enter the OTP you received to Validate.';
|
2141 |
+
update_option( 'mo2f_number_of_transactions', MoWpnsUtility::get_mo2f_db_option('mo2f_number_of_transactions', 'get_option') - 1 );
|
2142 |
MO2f_Utility::set_user_values( $session_id, "mo2f_transactionId", $response['txId'] );
|
2143 |
$this->mo2f_transactionid=$response['txId'];
|
2144 |
$mo2fa_login_message = $message;
|
2222 |
$session_id_encrypt=$this->create_session();
|
2223 |
}
|
2224 |
|
2225 |
+
if(class_exists('UM_Functions'))
|
2226 |
+
{
|
2227 |
+
if(!isset($_POST['wp-submit']) and isset($_POST['um_request']))
|
2228 |
+
{
|
2229 |
+
$meta = get_option('um_role_'.$currentuser->roles[0].'_meta');
|
2230 |
+
if(isset($meta) and $meta != '')
|
2231 |
+
{
|
2232 |
+
if(isset($meta['_um_login_redirect_url']))
|
2233 |
+
$redirect_to = $meta['_um_login_redirect_url'];
|
2234 |
+
if($redirect_to == '')
|
2235 |
+
{
|
2236 |
+
$redirect_to = get_site_url();
|
2237 |
+
}
|
2238 |
+
}
|
2239 |
+
$login_form_url = '';
|
2240 |
+
if(isset($_POST['redirect_to']))
|
2241 |
+
$login_form_url = sanitize_text_field($_POST['redirect_to']);
|
2242 |
+
|
2243 |
+
if($login_form_url != '' and !is_null($login_form_url))
|
2244 |
+
{
|
2245 |
+
$redirect_to = $login_form_url;
|
2246 |
+
}
|
2247 |
+
|
2248 |
+
}
|
2249 |
+
|
2250 |
+
}
|
2251 |
MO2f_Utility::set_user_values($session_id_encrypt, 'mo2f_current_user_id', $currentuser->ID);
|
2252 |
MO2f_Utility::set_user_values($session_id_encrypt, 'mo2f_1stfactor_status', 'VALIDATE_SUCCESS');
|
2253 |
|
2271 |
$mo_2factor_user_registration_status = $Mo2fdbQueries->get_user_detail( 'mo_2factor_user_registration_status', $currentuser->ID );
|
2272 |
$kba_configuration_status = $Mo2fdbQueries->get_user_detail( 'mo2f_SecurityQuestions_config_status', $currentuser->ID );
|
2273 |
|
2274 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo2f_enable_brute_force', 'get_option')){
|
2275 |
$mo2f_allwed_login_attempts=get_option('mo2f_allwed_login_attempts');
|
2276 |
}else{
|
2277 |
$mo2f_allwed_login_attempts= 'disabled';
|
2280 |
|
2281 |
$twofactor_transactions = new Mo2fDB;
|
2282 |
$exceeded = $twofactor_transactions->check_alluser_limit_exceeded($currentuser->ID);
|
2283 |
+
$tfa_enabled = $Mo2fdbQueries->get_user_detail( 'mo2f_2factor_enable_2fa_byusers', $currentuser->ID );
|
2284 |
+
if($tfa_enabled == 0 && ($mo_2factor_user_registration_status != 'MO_2_FACTOR_PLUGIN_SETTINGS') && $tfa_enabled != '')
|
2285 |
+
$exceeded =1;
|
2286 |
|
2287 |
if ( $mo_2factor_user_registration_status == 'MO_2_FACTOR_PLUGIN_SETTINGS' ) { //checking if user has configured any 2nd factor method
|
2288 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $currentuser->ID );
|
2327 |
else if($mo2f_second_factor == 'OTP Over Email' || $mo2f_second_factor == 'OTP OVER EMAIL' || $mo2f_second_factor == "EMAIL") {
|
2328 |
$mo2f_second_factor = "EMAIL";
|
2329 |
|
2330 |
+
if(MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option')<=0)
|
2331 |
{
|
2332 |
update_site_option("bGltaXRSZWFjaGVk",1);
|
2333 |
|
2335 |
}
|
2336 |
|
2337 |
|
2338 |
+
if((($mo2f_second_factor == 'GOOGLE AUTHENTICATOR') || ($mo2f_second_factor =='SOFT TOKEN') || ($mo2f_second_factor =='AUTHY AUTHENTICATOR')) && MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_prompt_on_login_page', 'get_option')&& !get_option('mo2f_remember_device') && !isset($_POST['mo_woocommerce_login_prompt']) )
|
|
|
2339 |
{
|
2340 |
$error=$this->mo2f_validate_soft_token($currentuser, $redirect_to, $mo2f_second_factor, $otp_token,$session_id_encrypt);
|
2341 |
if(is_wp_error( $error))
|
2358 |
} else if ( $mo2f_second_factor == 'KBA' or $mo2f_second_factor == 'Security Questions') {
|
2359 |
$this->mo2f_pass2login_kba_verification( $currentuser->ID, $redirect_to , $session_id_encrypt );
|
2360 |
} else if ( $mo2f_second_factor == 'NONE' ) {
|
2361 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request'))
|
2362 |
+
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
2363 |
+
else
|
2364 |
+
return $currentuser;
|
2365 |
} else {
|
2366 |
$this->remove_current_activity($session_id_encrypt);
|
2367 |
$error = new WP_Error();
|
2368 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
2369 |
+
$data = array('notice' => '<div style="border-left:3px solid #dc3232;"> Two Factor method has not been configured.', );
|
2370 |
+
wp_send_json_success($data);
|
2371 |
+
}
|
2372 |
+
else{
|
2373 |
+
$error->add( 'empty_username', __( '<strong>ERROR</strong>: Two Factor method has not been configured.' ) );
|
2374 |
+
return $error;
|
2375 |
+
}
|
2376 |
}
|
2377 |
}
|
2378 |
}
|
2379 |
|
2380 |
}
|
2381 |
+
}else if(!$exceeded && MoWpnsUtility::get_mo2f_db_option('mo2f_inline_registration', 'site_option')){
|
2382 |
$this->mo2fa_inline( $currentuser, $redirect_to, $session_id_encrypt );
|
2383 |
|
2384 |
} else {
|
2385 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request'))
|
2386 |
+
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
2387 |
+
else
|
2388 |
+
return $currentuser;
|
2389 |
}
|
2390 |
|
2391 |
} else { //plugin is not activated for current role then logged him in without asking 2 factor
|
2392 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request'))
|
2393 |
+
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
2394 |
+
else
|
2395 |
+
return $currentuser;
|
2396 |
}
|
2397 |
|
2398 |
}
|
2430 |
$this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
|
2431 |
}
|
2432 |
} else {
|
2433 |
+
if( MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
2434 |
+
$data = array('notice' => '<div style="border-left:3px solid #dc3232;"> Invalid One Time Passcode.', );
|
2435 |
+
wp_send_json_success($data);
|
2436 |
+
}
|
2437 |
+
else
|
2438 |
+
return new WP_Error( 'invalid_one_time_passcode', '<strong>ERROR</strong>: Invalid One Time Passcode.');
|
2439 |
}
|
2440 |
}
|
2441 |
|
2442 |
+
function mo2f_otp_over_email_send($email,$redirect_to,$session_id_encrypt,$current_user)
|
2443 |
+
{
|
2444 |
+
|
2445 |
+
$challengeMobile = new Customer_Setup();
|
2446 |
+
$content = '';
|
2447 |
+
$response = [];
|
2448 |
+
$otpLIMiTE = 0;
|
2449 |
+
if(get_site_option("cmVtYWluaW5nT1RQ")>0)
|
2450 |
+
{
|
2451 |
+
$content = $challengeMobile->send_otp_token( $email, 'EMAIL', get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) ,$current_user);
|
2452 |
+
$response = json_decode( $content, true );
|
2453 |
+
if(!MO2F_IS_ONPREM)
|
2454 |
+
{
|
2455 |
+
if(isset($response['txId']))
|
2456 |
+
MO2f_Utility::set_user_values( $session_id_encrypt, "mo2f_transactionId", $response['txId'] );
|
2457 |
+
}
|
2458 |
+
|
2459 |
+
}
|
2460 |
+
else
|
2461 |
+
{
|
2462 |
+
$response['status'] = 'FAILED';
|
2463 |
+
$response['message'] = '<p style = "color:red;">OTP limit has been exceeded</p>';
|
2464 |
+
$otpLIMiTE = 1;
|
2465 |
+
}
|
2466 |
+
if ( json_last_error() == JSON_ERROR_NONE ) {
|
2467 |
+
if ( $response['status'] == 'SUCCESS' ) {
|
2468 |
+
$cmVtYWluaW5nT1RQ = get_site_option("cmVtYWluaW5nT1RQ");
|
2469 |
+
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
2470 |
+
$mo2fa_login_message = 'An OTP has been sent to '.$email.' please verify to set the two-factor';
|
2471 |
+
$mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL';
|
2472 |
+
$this->miniorange_pass2login_form_fields( $mo2fa_login_status, $mo2fa_login_message, $redirect_to,null, $session_id_encrypt, 1 );
|
2473 |
+
}
|
2474 |
+
else
|
2475 |
+
{
|
2476 |
+
$mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
|
2477 |
+
$mo2fa_login_message = 'There was an issue while sending the OTP to '.$email.'. Please check your remaining transactions and try again.';
|
2478 |
+
$this->miniorange_pass2login_form_fields( $mo2fa_login_status, $mo2fa_login_message, $redirect_to,null, $session_id_encrypt );
|
2479 |
+
}
|
2480 |
+
}
|
2481 |
+
}
|
2482 |
function mo2f_restrict_access( $identity ) {
|
2483 |
apply_filters( 'mo2f_rba_addon', $identity );
|
2484 |
exit;
|
2502 |
|
2503 |
function mo2f_check_username_password( $user, $username, $password, $redirect_to = null ) {
|
2504 |
if ( is_a( $user, 'WP_Error' ) && ! empty( $user ) ) {
|
2505 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
2506 |
+
$data = array('notice' => '<div style="border-left:3px solid #dc3232;"> Invalid User Credentials', );
|
2507 |
+
wp_send_json_success($data);
|
2508 |
+
}
|
2509 |
+
else
|
2510 |
+
return $user;
|
2511 |
}
|
2512 |
if($GLOBALS['pagenow'] == 'wp-login.php' && isset($_POST['mo_woocommerce_login_prompt'])){
|
2513 |
return new WP_Error( 'Unauthorized Access.' , '<strong>ERROR</strong>: Access Denied.');
|
2514 |
}
|
|
|
2515 |
// if an app password is enabled, this is an XMLRPC / APP login ?
|
2516 |
if ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
|
2517 |
|
2527 |
} else {
|
2528 |
$currentuser = wp_authenticate_username_password( $user, $username, $password );
|
2529 |
if ( is_wp_error( $currentuser ) ) {
|
2530 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
2531 |
+
$data = array('notice' => '<div style="border-left:3px solid #dc3232;"> Invalid User Credentials', );
|
2532 |
+
wp_send_json_success($data);
|
2533 |
+
}
|
2534 |
+
else{
|
2535 |
+
$currentuser->add( 'invalid_username_password', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Username or password.' ) );
|
2536 |
+
return $currentuser;
|
2537 |
+
}
|
2538 |
} else {
|
2539 |
global $Mo2fdbQueries;
|
2540 |
$session_id = isset( $_POST['session_id'] ) ? $_POST['session_id'] : null;
|
2552 |
}
|
2553 |
else
|
2554 |
{
|
2555 |
+
if ( empty( $_POST['mo_softtoken'] ) && MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_prompt_on_login_page', 'get_option') && $mo2f_configured_2FA_method && !get_option('mo2f_remember_device') && (($mo2f_configured_2FA_method == 'Google Authenticator') ||($mo2f_configured_2FA_method == 'miniOrange Soft Token') || ($mo2f_configured_2FA_method =='Authy Authenticator')))
|
2556 |
{
|
2557 |
|
2558 |
|
2560 |
|
2561 |
$this->miniorange_initiate_2nd_factor( $currentuser, "", "","");
|
2562 |
}
|
2563 |
+
if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
|
2564 |
+
$data = array('notice' => '<div style="border-left:3px solid #dc3232;"> Please enter the One Time Passcode', );
|
2565 |
+
wp_send_json_success($data);
|
2566 |
+
}
|
2567 |
+
else
|
2568 |
+
return new WP_Error( 'one_time_passcode_empty', '<strong>ERROR</strong>: Please enter the One Time Passcode.');
|
2569 |
// Prevent PHP notices when using app password login
|
2570 |
|
2571 |
}
|
handler/twofa/two_fa_settings.php
CHANGED
@@ -18,7 +18,7 @@ class Miniorange_Authentication {
|
|
18 |
$wp_roles = new WP_Roles();
|
19 |
}
|
20 |
|
21 |
-
if (
|
22 |
$mo2f_rba_attributes = new Miniorange_Rba_Attributes();
|
23 |
$pass2fa_login = new Miniorange_Password_2Factor_Login();
|
24 |
$mo2f_2factor_setup = new Two_Factor_Setup();
|
@@ -45,7 +45,7 @@ class Miniorange_Authentication {
|
|
45 |
'miniorange_pass2login_form_fields'
|
46 |
), 10, 5 );
|
47 |
add_filter( 'mo2f_gauth_service', array( $mo2f_rba_attributes, 'mo2f_google_auth_service' ), 10, 1 );
|
48 |
-
if (
|
49 |
if ( get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' or MO2F_IS_ONPREM) {
|
50 |
|
51 |
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20 );
|
@@ -75,7 +75,7 @@ class Miniorange_Authentication {
|
|
75 |
'mo_2_factor_pass2login_show_wp_login_form'
|
76 |
) );
|
77 |
}
|
78 |
-
else if(!get_site_option('mo2f_woocommerce_login_prompt') &&
|
79 |
add_action('woocommerce_login_form_end' ,array(
|
80 |
$pass2fa_login,
|
81 |
'mo_2_factor_pass2login_woocommerce'
|
@@ -128,8 +128,8 @@ class Miniorange_Authentication {
|
|
128 |
$userid = wp_get_current_user()->ID;
|
129 |
add_option('mo2f_onprem_admin' , $userid );
|
130 |
// Deciding on On-Premise solution
|
131 |
-
$is_NC=
|
132 |
-
$is_NNC=
|
133 |
// Old users
|
134 |
if ( get_option( 'mo2f_customerKey' ) && ! $is_NC )
|
135 |
add_option( 'is_onprem', 0 );
|
@@ -173,13 +173,13 @@ class Miniorange_Authentication {
|
|
173 |
|
174 |
if ( ! get_option( 'mo2f_existing_user_values_updated' ) ) {
|
175 |
|
176 |
-
if ( get_option( 'mo2f_customerKey' ) && !
|
177 |
update_option( 'mo2f_is_NC', 0 );
|
178 |
}
|
179 |
|
180 |
$check_if_user_column_exists = false;
|
181 |
|
182 |
-
if ( $user_id && !
|
183 |
$does_table_exist = $Mo2fdbQueries->check_if_table_exists();
|
184 |
if ( $does_table_exist ) {
|
185 |
$check_if_user_column_exists = $Mo2fdbQueries->check_if_user_column_exists( $user_id );
|
@@ -268,14 +268,7 @@ class Miniorange_Authentication {
|
|
268 |
|
269 |
|
270 |
}
|
271 |
-
|
272 |
-
|
273 |
-
/**
|
274 |
-
* Function tells where to look for translations.
|
275 |
-
*/
|
276 |
-
function mo2fa_load_textdomain() {
|
277 |
-
load_plugin_textdomain( 'miniorange-2-factor-authentication', false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' );
|
278 |
-
}
|
279 |
|
280 |
function feedback_request() {
|
281 |
display_feedback_form();
|
@@ -283,8 +276,8 @@ class Miniorange_Authentication {
|
|
283 |
|
284 |
function get_customer_SMS_transactions() {
|
285 |
|
286 |
-
if ( get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' &&
|
287 |
-
if ( !
|
288 |
$customer = new Customer_Setup();
|
289 |
|
290 |
$content = json_decode( $customer->get_customer_transactions( get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) ), true );
|
@@ -301,7 +294,7 @@ class Miniorange_Authentication {
|
|
301 |
}
|
302 |
update_option( 'mo2f_number_of_transactions', $smsRemaining );
|
303 |
} else {
|
304 |
-
$smsRemaining =
|
305 |
}
|
306 |
|
307 |
$this->display_customer_transactions( $smsRemaining );
|
@@ -317,7 +310,7 @@ class Miniorange_Authentication {
|
|
317 |
$user = wp_get_current_user();
|
318 |
$selected_2_Factor_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
319 |
if ( $selected_2_Factor_method == 'NONE' ) {
|
320 |
-
if (
|
321 |
echo '<div class="is-dismissible notice notice-warning"><p><b>' . mo2f_lt( "miniOrange 2-Factor Plugin: " ) . '</b>' . mo2f_lt( 'You have not configured your 2-factor authentication method yet.' ) .
|
322 |
'<a href="admin.php?page=mo_2fa_two_fa">' . mo2f_lt( ' Click here' ) . '</a>' . mo2f_lt( ' to set it up.' ) .
|
323 |
'<button type="button" class="notice-dismiss"><span class="screen-reader-text">' . mo2f_lt( 'Dismiss this notice.' ) . '</span></button></div>';
|
@@ -356,9 +349,9 @@ class Miniorange_Authentication {
|
|
356 |
$roles = $user->roles;
|
357 |
$miniorange_role = array_shift( $roles );
|
358 |
|
359 |
-
$is_plugin_activated =
|
360 |
$is_customer_admin = get_option( 'mo2f_miniorange_admin' ) == $user->ID ? true : false;
|
361 |
-
$is_2fa_enabled_for_users =
|
362 |
$can_current_user_manage_options = current_user_can( 'manage_options' );
|
363 |
$admin_registration_status = get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS'
|
364 |
? true : false;
|
@@ -386,7 +379,7 @@ class Miniorange_Authentication {
|
|
386 |
else
|
387 |
$iconurl = site_url(). '/wp-content/uploads/miniorange/plugin_icon.png';
|
388 |
$menu_slug = 'miniOrange_2_factor_settings';
|
389 |
-
add_menu_page( 'miniOrange 2 Factor Auth',
|
390 |
}
|
391 |
|
392 |
function mo_auth_login_options() {
|
@@ -431,11 +424,10 @@ class Miniorange_Authentication {
|
|
431 |
}
|
432 |
|
433 |
function miniorange_auth_save_settings() {
|
434 |
-
if (
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
}
|
440 |
if ( array_key_exists( 'page', $_REQUEST ) && $_REQUEST['page'] == 'mo_2fa_two_fa' ) {
|
441 |
if ( ! session_id() || session_id() == '' || ! isset( $_SESSION ) ) {
|
@@ -722,7 +714,7 @@ class Miniorange_Authentication {
|
|
722 |
$Mo2fdbQueries->update_user_details( $user->ID, array( 'mo2f_user_phone' => $customerKey['phone'] ) );
|
723 |
update_option( 'mo2f_miniorange_admin', $user->ID );
|
724 |
|
725 |
-
$mo2f_emailVerification_config_status =
|
726 |
|
727 |
delete_option( 'mo2f_password' );
|
728 |
update_option( 'mo_2factor_admin_registration_status', 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' );
|
@@ -751,7 +743,7 @@ class Miniorange_Authentication {
|
|
751 |
if ( $mo2f_second_factor != 'NONE' ) {
|
752 |
$configured_2FA_method = MO2f_Utility::mo2f_decode_2_factor( $mo2f_second_factor, "servertowpdb" );
|
753 |
|
754 |
-
if (
|
755 |
|
756 |
$auth_method_abr = str_replace( ' ', '', $configured_2FA_method );
|
757 |
$Mo2fdbQueries->update_user_details( $user->ID, array(
|
@@ -773,7 +765,7 @@ class Miniorange_Authentication {
|
|
773 |
}
|
774 |
|
775 |
$mo2f_message = Mo2fConstants:: langTranslate( "ACCOUNT_RETRIEVED_SUCCESSFULLY" );
|
776 |
-
if ( $configured_2FA_method != 'NONE' &&
|
777 |
$mo2f_message .= ' <b>' . $configured_2FA_method . '</b> ' . Mo2fConstants:: langTranslate( "DEFAULT_2ND_FACTOR" ) . '.';
|
778 |
}
|
779 |
$mo2f_message .= ' ' . '<a href=\"admin.php?page=mo_2fa_two_fa\" >' . Mo2fConstants:: langTranslate( "CLICK_HERE" ) . '</a> ' . Mo2fConstants:: langTranslate( "CONFIGURE_2FA" );
|
@@ -1023,13 +1015,13 @@ class Miniorange_Authentication {
|
|
1023 |
$mo_2factor_user_registration_status = $Mo2fdbQueries->get_user_detail( 'mo_2factor_user_registration_status', $user->ID );
|
1024 |
if ( $mo_2factor_user_registration_status == 'MO_2_FACTOR_PLUGIN_SETTINGS' or MO2F_IS_ONPREM ) {
|
1025 |
|
1026 |
-
if($_POST['mo2f_login_option'] == 0 &&
|
1027 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "LOGIN_WITH_2ND_FACTOR" ) );
|
1028 |
$this->mo_auth_show_error_message();
|
1029 |
}else{
|
1030 |
update_option( 'mo2f_login_option', isset( $_POST['mo2f_login_option'] ) ? $_POST['mo2f_login_option'] : 0 );
|
1031 |
update_option( 'mo2f_remember_device', isset( $_POST['mo2f_remember_device'] ) ? $_POST['mo2f_remember_device'] : 0 );
|
1032 |
-
if (
|
1033 |
update_option( 'mo2f_remember_device', 0 );
|
1034 |
}
|
1035 |
if(isset($_POST['mo2f_enable_login_with_2nd_factor']))
|
@@ -1530,7 +1522,7 @@ class Miniorange_Authentication {
|
|
1530 |
$show = 1;
|
1531 |
if(MO2F_IS_ONPREM )
|
1532 |
{
|
1533 |
-
$txid = isset($_POST['TxidEmail'])?_POST['TxidEmail']:null;
|
1534 |
$status = get_option($txid);
|
1535 |
if($status != '')
|
1536 |
{
|
@@ -1544,6 +1536,9 @@ class Miniorange_Authentication {
|
|
1544 |
}
|
1545 |
}
|
1546 |
$mo2f_configured_2FA_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
|
|
|
|
|
|
1547 |
$mo2f_EmailVerification_config_status = $Mo2fdbQueries->get_user_detail( 'mo2f_EmailVerification_config_status', $user->ID );
|
1548 |
if ( ! current_user_can( 'manage_options' ) && $mo2f_configured_2FA_method == 'OUT OF BAND EMAIL' ) {
|
1549 |
if ( $mo2f_EmailVerification_config_status ) {
|
@@ -1661,6 +1656,8 @@ class Miniorange_Authentication {
|
|
1661 |
|
1662 |
if ( current_user_can( 'manage_options' ) ) {
|
1663 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "COMPLETED_TEST" ) );
|
|
|
|
|
1664 |
} else {
|
1665 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "COMPLETED_TEST" ) );
|
1666 |
}
|
@@ -2039,7 +2036,7 @@ class Miniorange_Authentication {
|
|
2039 |
$_SESSION['mo2f_transactionId'] = $content['txId'];
|
2040 |
update_option( 'mo2f_transactionId', $content['txId'] );
|
2041 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "OTP_SENT" ) . ' ' . $phone . ' .' . Mo2fConstants:: langTranslate( "ENTER_OTP" ) );
|
2042 |
-
update_option( 'mo2f_number_of_transactions',
|
2043 |
update_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z',get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')-1);
|
2044 |
$this->mo_auth_show_success_message();
|
2045 |
} else {
|
@@ -2213,8 +2210,8 @@ class Miniorange_Authentication {
|
|
2213 |
$allowed = false;
|
2214 |
if(get_option('mo2f_miniorange_admin'))
|
2215 |
$allowed = wp_get_current_user()->ID == get_option('mo2f_miniorange_admin');
|
2216 |
-
|
2217 |
-
|
2218 |
$enduser = new Two_Factor_Setup();
|
2219 |
$check_user = json_decode( $enduser->mo_check_user_already_exist( $email ), true );
|
2220 |
if(json_last_error() == JSON_ERROR_NONE){
|
@@ -2257,7 +2254,8 @@ class Miniorange_Authentication {
|
|
2257 |
}
|
2258 |
|
2259 |
}
|
2260 |
-
|
|
|
2261 |
if(MO2F_IS_ONPREM)
|
2262 |
{
|
2263 |
if($selected_2FA_method == 'EmailVerification')
|
@@ -2267,6 +2265,7 @@ class Miniorange_Authentication {
|
|
2267 |
if($selected_2FA_method == 'OTPOverSMS')
|
2268 |
$selected_2FA_method = 'OTP Over SMS';
|
2269 |
}
|
|
|
2270 |
if(MO2F_IS_ONPREM and ($selected_2FA_method =='Google Authenticator' or $selected_2FA_method == 'Security Questions' or $selected_2FA_method =='OTP Over Email' or $selected_2FA_method == 'Email Verification'))
|
2271 |
$is_customer_registered = 1;
|
2272 |
|
@@ -2290,28 +2289,48 @@ class Miniorange_Authentication {
|
|
2290 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
2291 |
$customer_key = get_option( 'mo2f_customerKey' );
|
2292 |
$api_key = get_option( 'mo2f_api_key' );
|
2293 |
-
|
2294 |
$cloud_method1 = array('miniOrange QR Code Authentication','miniOrange Push Notification','miniOrange Soft Token');
|
2295 |
-
|
2296 |
-
if($selected_2FA_method == "OTP Over Email" or in_array($selected_2FA_method,$cloud_method1))
|
2297 |
{
|
2298 |
-
$
|
2299 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2300 |
|
2301 |
-
if($
|
2302 |
-
$response = json_decode($
|
2303 |
else
|
2304 |
-
$response =
|
2305 |
-
|
|
|
|
|
|
|
|
|
2306 |
|
2307 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2308 |
}else if($selected_2FA_method == "Email Verification")
|
2309 |
{
|
2310 |
$enduser->send_otp_token($email,'OUT OF BAND EMAIL',$customer_key,$api_key);
|
2311 |
}
|
2312 |
|
2313 |
-
$Mo2fdbQueries->update_user_details( $user->ID, array( 'mo2f_configured_2FA_method' => $selected_2FA_method ) );
|
2314 |
|
|
|
|
|
2315 |
|
2316 |
// update the server
|
2317 |
if(!MO2F_IS_ONPREM)
|
@@ -2489,7 +2508,7 @@ class Miniorange_Authentication {
|
|
2489 |
if($selected_2FA_method == 'OTP Over Email')
|
2490 |
{
|
2491 |
$phone = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
2492 |
-
if(
|
2493 |
{
|
2494 |
update_site_option("bGltaXRSZWFjaGVk",1);
|
2495 |
$check = 0;
|
@@ -2505,15 +2524,15 @@ class Miniorange_Authentication {
|
|
2505 |
if ( strcasecmp( $response['status'], 'SUCCESS' ) == 0 ) {
|
2506 |
if($selected_2FA_method == 'OTP Over Email')
|
2507 |
{
|
2508 |
-
$cmVtYWluaW5nT1RQ =
|
2509 |
-
|
2510 |
}
|
2511 |
else if($selected_2FA_method == 'OTP Over SMS')
|
2512 |
{
|
2513 |
update_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z',get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')-1);
|
2514 |
}
|
2515 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "OTP_SENT" ) . ' <b>' . ( $phone ) . '</b>. ' . Mo2fConstants:: langTranslate( "ENTER_OTP" ) );
|
2516 |
-
update_option( 'mo2f_number_of_transactions',
|
2517 |
|
2518 |
$_SESSION['mo2f_transactionId'] = $response['txId'];
|
2519 |
update_option( 'mo2f_transactionId', $response['txId'] );
|
@@ -2603,8 +2622,8 @@ class Miniorange_Authentication {
|
|
2603 |
function mo_auth_deactivate() {
|
2604 |
global $Mo2fdbQueries;
|
2605 |
$mo2f_register_with_another_email = get_option( 'mo2f_register_with_another_email' );
|
2606 |
-
$is_EC = !
|
2607 |
-
$is_NNC =
|
2608 |
|
2609 |
if ( $mo2f_register_with_another_email || $is_EC || $is_NNC ) {
|
2610 |
update_option( 'mo2f_register_with_another_email', 0 );
|
@@ -2951,14 +2970,16 @@ class Miniorange_Authentication {
|
|
2951 |
$current_method = MO2f_Utility::mo2f_decode_2_factor( $mo2f_configured_2FA_method, "server" );
|
2952 |
|
2953 |
$response = json_decode( $enduser->mo2f_update_userinfo( $email, $current_method, $phone, null, null ), true );
|
2954 |
-
|
2955 |
if ( json_last_error() == JSON_ERROR_NONE ) {
|
2956 |
if ( $response['status'] == 'ERROR' ) {
|
2957 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( $response['message'] ) );
|
2958 |
$this->mo_auth_show_error_message();
|
2959 |
} else if ( $response['status'] == 'SUCCESS' ) {
|
2960 |
-
$configured_2fa_method =
|
2961 |
-
|
|
|
|
|
|
|
2962 |
if ( in_array( $configured_2fa_method, array( "Google Authenticator", "Authy Authenticator" ) ) ) {
|
2963 |
update_user_meta( $user->ID, 'mo2f_external_app_type', $configured_2fa_method );
|
2964 |
}
|
@@ -2969,8 +2990,9 @@ class Miniorange_Authentication {
|
|
2969 |
delete_user_meta( $user->ID, 'configure_2FA' );
|
2970 |
|
2971 |
if($configured_2fa_method == 'OTP Over Email' or $configured_2fa_method=='OTP Over SMS')
|
2972 |
-
|
2973 |
-
|
|
|
2974 |
else
|
2975 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( $configured_2fa_method ) . ' ' . Mo2fConstants:: langTranslate( "SET_2FA" ) );
|
2976 |
|
@@ -3052,13 +3074,7 @@ class Miniorange_Authentication {
|
|
3052 |
$currentTimeInMillis = round(microtime(true) * 1000);
|
3053 |
update_site_option($time,$currentTimeInMillis);
|
3054 |
update_site_option( 'mo2f_message', Mo2fConstants::langTranslate("VERIFICATION_EMAIL_SENT") .'<b> ' . $email . '</b>. ' . Mo2fConstants::langTranslate("ACCEPT_LINK_TO_VERIFY_EMAIL"));
|
3055 |
-
|
3056 |
-
update_user_meta($current_user->ID,'mo2f_configure_test_option','MO2F_TEST');
|
3057 |
-
$Mo2fdbQueries->update_user_details(
|
3058 |
-
$current_user->ID, array('mo2f_configured_2FA_method' => 'OUT OF BAND EMAIL',
|
3059 |
-
'mo2f_2factor_enable_2fa_byusers' => 1) );
|
3060 |
-
$this->mo_auth_show_success_message();
|
3061 |
-
}
|
3062 |
}else{
|
3063 |
update_site_option( 'mo2f_message', Mo2fConstants::langTranslate("ERROR_DURING_PROCESS_EMAIL"));
|
3064 |
$this->mo_auth_show_error_message();
|
@@ -3101,7 +3117,7 @@ class Miniorange_Authentication {
|
|
3101 |
$get_encryption_key = MO2f_Utility::random_str(16);
|
3102 |
update_option('mo2f_encryption_key',$get_encryption_key);
|
3103 |
|
3104 |
-
if ( get_option( 'mo2f_customerKey' ) && !
|
3105 |
update_option( 'mo2f_is_NC', 0 );
|
3106 |
} else {
|
3107 |
update_option( 'mo2f_is_NC', 1 );
|
18 |
$wp_roles = new WP_Roles();
|
19 |
}
|
20 |
|
21 |
+
if ( MoWpnsUtility::get_mo2f_db_option('mo2f_activate_plugin', 'get_option') == 1 ) {
|
22 |
$mo2f_rba_attributes = new Miniorange_Rba_Attributes();
|
23 |
$pass2fa_login = new Miniorange_Password_2Factor_Login();
|
24 |
$mo2f_2factor_setup = new Two_Factor_Setup();
|
45 |
'miniorange_pass2login_form_fields'
|
46 |
), 10, 5 );
|
47 |
add_filter( 'mo2f_gauth_service', array( $mo2f_rba_attributes, 'mo2f_google_auth_service' ), 10, 1 );
|
48 |
+
if ( MoWpnsUtility::get_mo2f_db_option('mo2f_login_option', 'get_option') ) { //password + 2nd factor enabled
|
49 |
if ( get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' or MO2F_IS_ONPREM) {
|
50 |
|
51 |
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20 );
|
75 |
'mo_2_factor_pass2login_show_wp_login_form'
|
76 |
) );
|
77 |
}
|
78 |
+
else if(!get_site_option('mo2f_woocommerce_login_prompt') && MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_prompt_on_login_page', 'site_option') ) {
|
79 |
add_action('woocommerce_login_form_end' ,array(
|
80 |
$pass2fa_login,
|
81 |
'mo_2_factor_pass2login_woocommerce'
|
128 |
$userid = wp_get_current_user()->ID;
|
129 |
add_option('mo2f_onprem_admin' , $userid );
|
130 |
// Deciding on On-Premise solution
|
131 |
+
$is_NC=MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
132 |
+
$is_NNC=MoWpnsUtility::get_mo2f_db_option('mo2f_is_NNC', 'get_option');
|
133 |
// Old users
|
134 |
if ( get_option( 'mo2f_customerKey' ) && ! $is_NC )
|
135 |
add_option( 'is_onprem', 0 );
|
173 |
|
174 |
if ( ! get_option( 'mo2f_existing_user_values_updated' ) ) {
|
175 |
|
176 |
+
if ( get_option( 'mo2f_customerKey' ) && ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option')) {
|
177 |
update_option( 'mo2f_is_NC', 0 );
|
178 |
}
|
179 |
|
180 |
$check_if_user_column_exists = false;
|
181 |
|
182 |
+
if ( $user_id && ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') ) {
|
183 |
$does_table_exist = $Mo2fdbQueries->check_if_table_exists();
|
184 |
if ( $does_table_exist ) {
|
185 |
$check_if_user_column_exists = $Mo2fdbQueries->check_if_user_column_exists( $user_id );
|
268 |
|
269 |
|
270 |
}
|
271 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
272 |
|
273 |
function feedback_request() {
|
274 |
display_feedback_form();
|
276 |
|
277 |
function get_customer_SMS_transactions() {
|
278 |
|
279 |
+
if ( get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' && MoWpnsUtility::get_mo2f_db_option('mo2f_show_sms_transaction_message', 'get_option') ) {
|
280 |
+
if ( ! MoWpnsUtility::get_mo2f_db_option('mo2f_set_transactions', 'get_option') ) {
|
281 |
$customer = new Customer_Setup();
|
282 |
|
283 |
$content = json_decode( $customer->get_customer_transactions( get_option( 'mo2f_customerKey' ), get_option( 'mo2f_api_key' ) ), true );
|
294 |
}
|
295 |
update_option( 'mo2f_number_of_transactions', $smsRemaining );
|
296 |
} else {
|
297 |
+
$smsRemaining = MoWpnsUtility::get_mo2f_db_option('mo2f_number_of_transactions', 'get_option');
|
298 |
}
|
299 |
|
300 |
$this->display_customer_transactions( $smsRemaining );
|
310 |
$user = wp_get_current_user();
|
311 |
$selected_2_Factor_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
312 |
if ( $selected_2_Factor_method == 'NONE' ) {
|
313 |
+
if ( MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_for_users', 'get_option') || ( current_user_can( 'manage_options' ) && get_option( 'mo2f_miniorange_admin' ) == $user->ID ) ) {
|
314 |
echo '<div class="is-dismissible notice notice-warning"><p><b>' . mo2f_lt( "miniOrange 2-Factor Plugin: " ) . '</b>' . mo2f_lt( 'You have not configured your 2-factor authentication method yet.' ) .
|
315 |
'<a href="admin.php?page=mo_2fa_two_fa">' . mo2f_lt( ' Click here' ) . '</a>' . mo2f_lt( ' to set it up.' ) .
|
316 |
'<button type="button" class="notice-dismiss"><span class="screen-reader-text">' . mo2f_lt( 'Dismiss this notice.' ) . '</span></button></div>';
|
349 |
$roles = $user->roles;
|
350 |
$miniorange_role = array_shift( $roles );
|
351 |
|
352 |
+
$is_plugin_activated = MoWpnsUtility::get_mo2f_db_option('mo2f_activate_plugin', 'get_option');
|
353 |
$is_customer_admin = get_option( 'mo2f_miniorange_admin' ) == $user->ID ? true : false;
|
354 |
+
$is_2fa_enabled_for_users = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_for_users', 'get_option');
|
355 |
$can_current_user_manage_options = current_user_can( 'manage_options' );
|
356 |
$admin_registration_status = get_option( 'mo_2factor_admin_registration_status' ) == 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS'
|
357 |
? true : false;
|
379 |
else
|
380 |
$iconurl = site_url(). '/wp-content/uploads/miniorange/plugin_icon.png';
|
381 |
$menu_slug = 'miniOrange_2_factor_settings';
|
382 |
+
add_menu_page( 'miniOrange 2 Factor Auth', MoWpnsUtility::get_mo2f_db_option('mo2f_custom_plugin_name', 'get_option'), 'read', $menu_slug, array($this,'mo_auth_login_options'), $iconurl );
|
383 |
}
|
384 |
|
385 |
function mo_auth_login_options() {
|
424 |
}
|
425 |
|
426 |
function miniorange_auth_save_settings() {
|
427 |
+
if (get_site_option('mo2f_plugin_redirect')) {
|
428 |
+
delete_site_option('mo2f_plugin_redirect');
|
429 |
+
wp_redirect(admin_url() . 'admin.php?page=mo_2fa_two_fa');
|
430 |
+
exit;
|
|
|
431 |
}
|
432 |
if ( array_key_exists( 'page', $_REQUEST ) && $_REQUEST['page'] == 'mo_2fa_two_fa' ) {
|
433 |
if ( ! session_id() || session_id() == '' || ! isset( $_SESSION ) ) {
|
714 |
$Mo2fdbQueries->update_user_details( $user->ID, array( 'mo2f_user_phone' => $customerKey['phone'] ) );
|
715 |
update_option( 'mo2f_miniorange_admin', $user->ID );
|
716 |
|
717 |
+
$mo2f_emailVerification_config_status = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') == 0 ? true : false;
|
718 |
|
719 |
delete_option( 'mo2f_password' );
|
720 |
update_option( 'mo_2factor_admin_registration_status', 'MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS' );
|
743 |
if ( $mo2f_second_factor != 'NONE' ) {
|
744 |
$configured_2FA_method = MO2f_Utility::mo2f_decode_2_factor( $mo2f_second_factor, "servertowpdb" );
|
745 |
|
746 |
+
if ( MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') == 0 ) {
|
747 |
|
748 |
$auth_method_abr = str_replace( ' ', '', $configured_2FA_method );
|
749 |
$Mo2fdbQueries->update_user_details( $user->ID, array(
|
765 |
}
|
766 |
|
767 |
$mo2f_message = Mo2fConstants:: langTranslate( "ACCOUNT_RETRIEVED_SUCCESSFULLY" );
|
768 |
+
if ( $configured_2FA_method != 'NONE' && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') == 0 ) {
|
769 |
$mo2f_message .= ' <b>' . $configured_2FA_method . '</b> ' . Mo2fConstants:: langTranslate( "DEFAULT_2ND_FACTOR" ) . '.';
|
770 |
}
|
771 |
$mo2f_message .= ' ' . '<a href=\"admin.php?page=mo_2fa_two_fa\" >' . Mo2fConstants:: langTranslate( "CLICK_HERE" ) . '</a> ' . Mo2fConstants:: langTranslate( "CONFIGURE_2FA" );
|
1015 |
$mo_2factor_user_registration_status = $Mo2fdbQueries->get_user_detail( 'mo_2factor_user_registration_status', $user->ID );
|
1016 |
if ( $mo_2factor_user_registration_status == 'MO_2_FACTOR_PLUGIN_SETTINGS' or MO2F_IS_ONPREM ) {
|
1017 |
|
1018 |
+
if($_POST['mo2f_login_option'] == 0 && MoWpnsUtility::get_mo2f_db_option('mo2f_enable_2fa_prompt_on_login_page', 'get_option')){
|
1019 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "LOGIN_WITH_2ND_FACTOR" ) );
|
1020 |
$this->mo_auth_show_error_message();
|
1021 |
}else{
|
1022 |
update_option( 'mo2f_login_option', isset( $_POST['mo2f_login_option'] ) ? $_POST['mo2f_login_option'] : 0 );
|
1023 |
update_option( 'mo2f_remember_device', isset( $_POST['mo2f_remember_device'] ) ? $_POST['mo2f_remember_device'] : 0 );
|
1024 |
+
if ( MoWpnsUtility::get_mo2f_db_option('mo2f_login_option', 'get_option') == 0 ) {
|
1025 |
update_option( 'mo2f_remember_device', 0 );
|
1026 |
}
|
1027 |
if(isset($_POST['mo2f_enable_login_with_2nd_factor']))
|
1522 |
$show = 1;
|
1523 |
if(MO2F_IS_ONPREM )
|
1524 |
{
|
1525 |
+
$txid = isset($_POST['TxidEmail'])? $_POST['TxidEmail']:null;
|
1526 |
$status = get_option($txid);
|
1527 |
if($status != '')
|
1528 |
{
|
1536 |
}
|
1537 |
}
|
1538 |
$mo2f_configured_2FA_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
1539 |
+
if(MO2F_IS_ONPREM and $mo2f_configured_2FA_method == 'OUT OF BAND EMAIL')
|
1540 |
+
$mo2f_configured_2FA_method = 'Email Verification';
|
1541 |
+
|
1542 |
$mo2f_EmailVerification_config_status = $Mo2fdbQueries->get_user_detail( 'mo2f_EmailVerification_config_status', $user->ID );
|
1543 |
if ( ! current_user_can( 'manage_options' ) && $mo2f_configured_2FA_method == 'OUT OF BAND EMAIL' ) {
|
1544 |
if ( $mo2f_EmailVerification_config_status ) {
|
1656 |
|
1657 |
if ( current_user_can( 'manage_options' ) ) {
|
1658 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "COMPLETED_TEST" ) );
|
1659 |
+
delete_user_meta( $user->ID, 'configure_2FA');
|
1660 |
+
$Mo2fdbQueries->update_user_details( $user->ID, array( 'mo2f_configured_2FA_method' => 'OTP Over Email' ) );
|
1661 |
} else {
|
1662 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "COMPLETED_TEST" ) );
|
1663 |
}
|
2036 |
$_SESSION['mo2f_transactionId'] = $content['txId'];
|
2037 |
update_option( 'mo2f_transactionId', $content['txId'] );
|
2038 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "OTP_SENT" ) . ' ' . $phone . ' .' . Mo2fConstants:: langTranslate( "ENTER_OTP" ) );
|
2039 |
+
update_option( 'mo2f_number_of_transactions', MoWpnsUtility::get_mo2f_db_option('mo2f_number_of_transactions', 'get_option') - 1 );
|
2040 |
update_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z',get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')-1);
|
2041 |
$this->mo_auth_show_success_message();
|
2042 |
} else {
|
2210 |
$allowed = false;
|
2211 |
if(get_option('mo2f_miniorange_admin'))
|
2212 |
$allowed = wp_get_current_user()->ID == get_option('mo2f_miniorange_admin');
|
2213 |
+
|
2214 |
+
if($is_customer_registered && !$is_end_user_registered and !$allowed){
|
2215 |
$enduser = new Two_Factor_Setup();
|
2216 |
$check_user = json_decode( $enduser->mo_check_user_already_exist( $email ), true );
|
2217 |
if(json_last_error() == JSON_ERROR_NONE){
|
2254 |
}
|
2255 |
|
2256 |
}
|
2257 |
+
|
2258 |
+
update_user_meta( $user->ID, 'mo2f_2FA_method_to_configure', $selected_2FA_method );
|
2259 |
if(MO2F_IS_ONPREM)
|
2260 |
{
|
2261 |
if($selected_2FA_method == 'EmailVerification')
|
2265 |
if($selected_2FA_method == 'OTPOverSMS')
|
2266 |
$selected_2FA_method = 'OTP Over SMS';
|
2267 |
}
|
2268 |
+
|
2269 |
if(MO2F_IS_ONPREM and ($selected_2FA_method =='Google Authenticator' or $selected_2FA_method == 'Security Questions' or $selected_2FA_method =='OTP Over Email' or $selected_2FA_method == 'Email Verification'))
|
2270 |
$is_customer_registered = 1;
|
2271 |
|
2289 |
$email = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
2290 |
$customer_key = get_option( 'mo2f_customerKey' );
|
2291 |
$api_key = get_option( 'mo2f_api_key' );
|
2292 |
+
$customer = new Customer_Setup();
|
2293 |
$cloud_method1 = array('miniOrange QR Code Authentication','miniOrange Push Notification','miniOrange Soft Token');
|
2294 |
+
if(($selected_2FA_method == "OTP Over Email") and MO2F_IS_ONPREM)
|
|
|
2295 |
{
|
2296 |
+
$check = 1;
|
2297 |
+
if(MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option')<=0)
|
2298 |
+
{
|
2299 |
+
update_site_option("bGltaXRSZWFjaGVk",1);
|
2300 |
+
$check = 0;
|
2301 |
+
|
2302 |
+
}
|
2303 |
+
|
2304 |
|
2305 |
+
if($check == 1)
|
2306 |
+
$response = json_decode( $customer->send_otp_token( $email, $selected_2FA_method, $customer_key, $api_key ), true );
|
2307 |
else
|
2308 |
+
$response['status'] = 'FAILED';
|
2309 |
+
if ( strcasecmp( $response['status'], 'SUCCESS' ) == 0) {
|
2310 |
+
$cmVtYWluaW5nT1RQ = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
2311 |
+
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
2312 |
+
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "OTP_SENT" ) . ' <b>' . ( $email ) . '</b>. ' . Mo2fConstants:: langTranslate( "ENTER_OTP" ) );
|
2313 |
+
update_option( 'mo2f_number_of_transactions', MoWpnsUtility::get_mo2f_db_option('mo2f_number_of_transactions', 'get_option') - 1 );
|
2314 |
|
2315 |
+
$_SESSION['mo2f_transactionId'] = $response['txId'];
|
2316 |
+
update_option( 'mo2f_transactionId', $response['txId'] );
|
2317 |
+
$this->mo_auth_show_success_message();
|
2318 |
+
|
2319 |
+
} else {
|
2320 |
+
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "ERROR_IN_SENDING_OTP_ONPREM" ) );
|
2321 |
+
$this->mo_auth_show_error_message();
|
2322 |
+
|
2323 |
+
}
|
2324 |
+
update_user_meta( $user->ID, 'configure_2FA', 1 );
|
2325 |
+
|
2326 |
}else if($selected_2FA_method == "Email Verification")
|
2327 |
{
|
2328 |
$enduser->send_otp_token($email,'OUT OF BAND EMAIL',$customer_key,$api_key);
|
2329 |
}
|
2330 |
|
|
|
2331 |
|
2332 |
+
if($selected_2FA_method != 'OTP Over Email')
|
2333 |
+
$Mo2fdbQueries->update_user_details( $user->ID, array( 'mo2f_configured_2FA_method' => $selected_2FA_method ) );
|
2334 |
|
2335 |
// update the server
|
2336 |
if(!MO2F_IS_ONPREM)
|
2508 |
if($selected_2FA_method == 'OTP Over Email')
|
2509 |
{
|
2510 |
$phone = $Mo2fdbQueries->get_user_detail( 'mo2f_user_email', $user->ID );
|
2511 |
+
if(MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option')<=0)
|
2512 |
{
|
2513 |
update_site_option("bGltaXRSZWFjaGVk",1);
|
2514 |
$check = 0;
|
2524 |
if ( strcasecmp( $response['status'], 'SUCCESS' ) == 0 ) {
|
2525 |
if($selected_2FA_method == 'OTP Over Email')
|
2526 |
{
|
2527 |
+
$cmVtYWluaW5nT1RQ = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
2528 |
+
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
2529 |
}
|
2530 |
else if($selected_2FA_method == 'OTP Over SMS')
|
2531 |
{
|
2532 |
update_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z',get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')-1);
|
2533 |
}
|
2534 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "OTP_SENT" ) . ' <b>' . ( $phone ) . '</b>. ' . Mo2fConstants:: langTranslate( "ENTER_OTP" ) );
|
2535 |
+
update_option( 'mo2f_number_of_transactions', MoWpnsUtility::get_mo2f_db_option('mo2f_number_of_transactions', 'get_option') - 1 );
|
2536 |
|
2537 |
$_SESSION['mo2f_transactionId'] = $response['txId'];
|
2538 |
update_option( 'mo2f_transactionId', $response['txId'] );
|
2622 |
function mo_auth_deactivate() {
|
2623 |
global $Mo2fdbQueries;
|
2624 |
$mo2f_register_with_another_email = get_option( 'mo2f_register_with_another_email' );
|
2625 |
+
$is_EC = ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') ? 1 : 0;
|
2626 |
+
$is_NNC = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NNC', 'get_option') ? 1 : 0;
|
2627 |
|
2628 |
if ( $mo2f_register_with_another_email || $is_EC || $is_NNC ) {
|
2629 |
update_option( 'mo2f_register_with_another_email', 0 );
|
2970 |
$current_method = MO2f_Utility::mo2f_decode_2_factor( $mo2f_configured_2FA_method, "server" );
|
2971 |
|
2972 |
$response = json_decode( $enduser->mo2f_update_userinfo( $email, $current_method, $phone, null, null ), true );
|
|
|
2973 |
if ( json_last_error() == JSON_ERROR_NONE ) {
|
2974 |
if ( $response['status'] == 'ERROR' ) {
|
2975 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( $response['message'] ) );
|
2976 |
$this->mo_auth_show_error_message();
|
2977 |
} else if ( $response['status'] == 'SUCCESS' ) {
|
2978 |
+
$configured_2fa_method = '';
|
2979 |
+
if($mo2f_configured_2FA_method =='')
|
2980 |
+
$configured_2fa_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $user->ID );
|
2981 |
+
else
|
2982 |
+
$configured_2fa_method = $mo2f_configured_2FA_method;
|
2983 |
if ( in_array( $configured_2fa_method, array( "Google Authenticator", "Authy Authenticator" ) ) ) {
|
2984 |
update_user_meta( $user->ID, 'mo2f_external_app_type', $configured_2fa_method );
|
2985 |
}
|
2990 |
delete_user_meta( $user->ID, 'configure_2FA' );
|
2991 |
|
2992 |
if($configured_2fa_method == 'OTP Over Email' or $configured_2fa_method=='OTP Over SMS')
|
2993 |
+
{
|
2994 |
+
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( $configured_2fa_method ) . ' ' . Mo2fConstants:: langTranslate( "SET_2FA_otp" ) );
|
2995 |
+
}
|
2996 |
else
|
2997 |
update_option( 'mo2f_message', Mo2fConstants:: langTranslate( $configured_2fa_method ) . ' ' . Mo2fConstants:: langTranslate( "SET_2FA" ) );
|
2998 |
|
3074 |
$currentTimeInMillis = round(microtime(true) * 1000);
|
3075 |
update_site_option($time,$currentTimeInMillis);
|
3076 |
update_site_option( 'mo2f_message', Mo2fConstants::langTranslate("VERIFICATION_EMAIL_SENT") .'<b> ' . $email . '</b>. ' . Mo2fConstants::langTranslate("ACCEPT_LINK_TO_VERIFY_EMAIL"));
|
3077 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
3078 |
}else{
|
3079 |
update_site_option( 'mo2f_message', Mo2fConstants::langTranslate("ERROR_DURING_PROCESS_EMAIL"));
|
3080 |
$this->mo_auth_show_error_message();
|
3117 |
$get_encryption_key = MO2f_Utility::random_str(16);
|
3118 |
update_option('mo2f_encryption_key',$get_encryption_key);
|
3119 |
|
3120 |
+
if ( get_option( 'mo2f_customerKey' ) && ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') ) {
|
3121 |
update_option( 'mo2f_is_NC', 0 );
|
3122 |
} else {
|
3123 |
update_option( 'mo2f_is_NC', 1 );
|
handler/twofa/two_fa_short_call.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include_once('two_fa_short_gateway.php');
|
4 |
+
|
5 |
+
class TwoFACustomRegFormAPI
|
6 |
+
{
|
7 |
+
public function __construct()
|
8 |
+
{
|
9 |
+
|
10 |
+
}
|
11 |
+
|
12 |
+
public static function challenge($phone_number,$email,$authTypeSend)
|
13 |
+
{
|
14 |
+
|
15 |
+
|
16 |
+
if($authTypeSend == 'email')
|
17 |
+
{
|
18 |
+
$auierpyasdcRy = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
19 |
+
$cmVtYWluaW5nT1RQ = $auierpyasdcRy? $auierpyasdcRy : 0;
|
20 |
+
if($cmVtYWluaW5nT1RQ > 0)
|
21 |
+
{
|
22 |
+
$response = TwoFAMOGateway:: mo_send_otp_token('EMAIL', '', $email);
|
23 |
+
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
24 |
+
}
|
25 |
+
else
|
26 |
+
{
|
27 |
+
$response = ['status'=>'ERROR','message'=>'Email Transaction Limit Exceeded'];
|
28 |
+
wp_send_json($response);
|
29 |
+
}
|
30 |
+
}
|
31 |
+
else
|
32 |
+
{
|
33 |
+
$response = TwoFAMOGateway:: mo_send_otp_token('SMS', $phone_number, $email);
|
34 |
+
}
|
35 |
+
wp_send_json($response);
|
36 |
+
|
37 |
+
}
|
38 |
+
|
39 |
+
public static function validate($txId, $otp)
|
40 |
+
{
|
41 |
+
wp_send_json(TwoFAMOGateway :: mo_validate_otp_token('OTP',$txId, $otp));
|
42 |
+
}
|
43 |
+
}
|
handler/twofa/two_fa_short_custom.php
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include_once('two_fa_short_call.php');
|
4 |
+
|
5 |
+
class TwoFACustomRegFormShortcode
|
6 |
+
|
7 |
+
{
|
8 |
+
public function __construct()
|
9 |
+
{
|
10 |
+
add_action('woocommerce_created_customer',array($this,'wc_post_registration'), 1, 3);
|
11 |
+
}
|
12 |
+
|
13 |
+
public function mo_enqueue_shortcode()
|
14 |
+
{
|
15 |
+
add_action("wp_ajax_mo_shortcode",array( $this, 'mo_shortcode' ));
|
16 |
+
add_action("wp_ajax_nopriv_mo_shortcode",array($this,'mo_shortcode'));
|
17 |
+
add_action("wp_ajax_mo_ajax_register",array( $this, 'mo_ajax_register' ));
|
18 |
+
add_action("wp_ajax_nopriv_mo_ajax_register",array($this,'mo_ajax_register'));
|
19 |
+
}
|
20 |
+
|
21 |
+
public function mo_shortcode()
|
22 |
+
{
|
23 |
+
switch($_POST['mo_action'])
|
24 |
+
{
|
25 |
+
case "challenge":
|
26 |
+
$email = sanitize_text_field($_POST['email']);
|
27 |
+
$phone = sanitize_text_field($_POST['phone']);
|
28 |
+
$authTypeSend = sanitize_text_field($_POST['authTypeSend']);
|
29 |
+
|
30 |
+
TwoFACustomRegFormAPI::challenge($phone,$email,$authTypeSend);
|
31 |
+
break;
|
32 |
+
|
33 |
+
case "validate":
|
34 |
+
$otp = sanitize_text_field($_POST['otp']);
|
35 |
+
$txId = sanitize_text_field($_POST['txId']);
|
36 |
+
TwoFACustomRegFormAPI::validate($txId,$otp);
|
37 |
+
break;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
public function mo_ajax_register(){
|
42 |
+
switch ($_POST['mo_action']) {
|
43 |
+
case 'send_otp_over_email':
|
44 |
+
$email = isset($_POST['email'])? $_POST['email']: "";
|
45 |
+
$phone = isset($_POST['phone'])? $_POST['phone']: "";
|
46 |
+
$email = sanitize_text_field($email);
|
47 |
+
$phone = sanitize_text_field($phone);
|
48 |
+
$authTypeSend = sanitize_text_field($_POST['authTypeSend']);
|
49 |
+
TwoFACustomRegFormAPI :: challenge($phone,$email,$authTypeSend);
|
50 |
+
# code...
|
51 |
+
break;
|
52 |
+
case 'send_otp_over_sms' :
|
53 |
+
$email = isset($_POST['email'])? $_POST['email']: "";
|
54 |
+
$phone = isset($_POST['phone'])? $_POST['phone']: "";
|
55 |
+
$email = sanitize_text_field($email);
|
56 |
+
$phone = sanitize_text_field($phone);
|
57 |
+
$authTypeSend = sanitize_text_field($_POST['authTypeSend']);
|
58 |
+
TwoFACustomRegFormAPI :: challenge($phone,$email,$authTypeSend);
|
59 |
+
break;
|
60 |
+
|
61 |
+
default:
|
62 |
+
$otp = sanitize_text_field($_POST['otp']);
|
63 |
+
$txId = sanitize_text_field($_POST['txId']);
|
64 |
+
TwoFACustomRegFormAPI :: validate($txId,$otp);
|
65 |
+
# code...
|
66 |
+
break;
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
function wc_post_registration( $user_id, $new_customer_data, $password_generated) {
|
71 |
+
if ( isset( $_POST['phone'] ))
|
72 |
+
update_user_meta($user_id, 'billing_phone', $_POST['phone']);
|
73 |
+
}
|
74 |
+
|
75 |
+
|
76 |
+
|
77 |
+
|
78 |
+
}
|
79 |
+
|
80 |
+
|
handler/twofa/two_fa_short_gateway.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
global $mo2f_dirName;
|
4 |
+
|
5 |
+
require_once $mo2f_dirName.'helper'.DIRECTORY_SEPARATOR.'mo_twofa_sessions.php';
|
6 |
+
|
7 |
+
if(! defined( 'ABSPATH' )) exit;
|
8 |
+
define('MO2F_DEFAULT_APIKEY',"fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq");
|
9 |
+
define('MO2F_FAIL_MODE', false);
|
10 |
+
define('MO2F_SESSION_TYPE', "TRANSIENT");
|
11 |
+
|
12 |
+
class TwoFAMOGateway
|
13 |
+
{
|
14 |
+
public static function mo_send_otp_token($authType, $phone, $email)
|
15 |
+
{
|
16 |
+
if(MO2F_TEST_MODE)
|
17 |
+
{
|
18 |
+
return ['message'=>'OTP Sent Successfully','status'=>'SUCCESS','txId'=> rand(1000,9999)];
|
19 |
+
}
|
20 |
+
else
|
21 |
+
{
|
22 |
+
$customerKey = get_site_option('mo2f_customerKey');
|
23 |
+
$apiKey = get_site_option('mo2f_api_key');
|
24 |
+
TwoFAMoSessions::addSessionVar('mo2f_transactionId',true);
|
25 |
+
TwoFAMoSessions::addSessionVar('sent_on',time());
|
26 |
+
|
27 |
+
if($authType == 'EMAIL')
|
28 |
+
{
|
29 |
+
$cmVtYWluaW5nT1RQ = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
30 |
+
update_site_option("cmVtYWluaW5nT1RQ",$cmVtYWluaW5nT1RQ-1);
|
31 |
+
$content = (new Customer_Cloud_Setup)->send_otp_token($email,$authType,$customerKey,$apiKey);
|
32 |
+
}
|
33 |
+
|
34 |
+
else
|
35 |
+
{
|
36 |
+
update_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z',get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')-1);
|
37 |
+
$content = (new Customer_Cloud_Setup)->send_otp_token($phone,$authType,$customerKey,$apiKey);
|
38 |
+
}
|
39 |
+
return json_decode($content,TRUE);
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
public static function mo_validate_otp_token($authType,$txId, $otp_token)
|
44 |
+
{
|
45 |
+
if(MO2F_TEST_MODE)
|
46 |
+
{
|
47 |
+
TwoFAMoSessions::unsetSession('mo2f_transactionId');
|
48 |
+
return MO2F_FAIL_MODE ? ['status'=>"FAILED","message"=>"OTP is Invalid"]:['status'=>"SUCCESS","message"=>"Successfully Validated"];
|
49 |
+
}
|
50 |
+
else
|
51 |
+
{
|
52 |
+
$content = "";
|
53 |
+
if(TwoFAMoSessions :: getSessionVar('mo2f_transactionId'))
|
54 |
+
{
|
55 |
+
$customerKey = get_site_option('mo2f_customerKey');
|
56 |
+
$apiKey = get_site_option('mo2f_api_key');
|
57 |
+
$content = (new Customer_Cloud_Setup)->validate_otp_token($authType,null,$txId,$otp_token,$customerKey,$apiKey);
|
58 |
+
$content = json_decode($content, TRUE);
|
59 |
+
if($content["status"] == "SUCCESS")
|
60 |
+
{
|
61 |
+
TwoFAMoSessions :: unsetSession('mo2f_transactionId');
|
62 |
+
}
|
63 |
+
}
|
64 |
+
return $content;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
handler/twofa/two_fa_utility.php
CHANGED
@@ -115,6 +115,7 @@ class MO2f_Utility {
|
|
115 |
global $Mo2fdbQueries;
|
116 |
$key = get_option( 'mo2f_encryption_key' );
|
117 |
$data_option=NULL;
|
|
|
118 |
if(empty($data_option)){
|
119 |
|
120 |
//setting session
|
@@ -261,8 +262,9 @@ class MO2f_Utility {
|
|
261 |
}
|
262 |
} else if ( $variable == 'mo_2_factor_kba_questions' ) {
|
263 |
if ( isset( $_COOKIE['kba_question1'] ) && ! empty( $_COOKIE['kba_question1'] ) ) {
|
264 |
-
|
265 |
-
$
|
|
|
266 |
$cookie_value = array( $kba_question1, $kba_question2 );
|
267 |
}
|
268 |
} else {
|
@@ -547,6 +549,18 @@ class MO2f_Utility {
|
|
547 |
return FALSE;
|
548 |
}
|
549 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
550 |
}
|
551 |
|
552 |
-
?>
|
115 |
global $Mo2fdbQueries;
|
116 |
$key = get_option( 'mo2f_encryption_key' );
|
117 |
$data_option=NULL;
|
118 |
+
|
119 |
if(empty($data_option)){
|
120 |
|
121 |
//setting session
|
262 |
}
|
263 |
} else if ( $variable == 'mo_2_factor_kba_questions' ) {
|
264 |
if ( isset( $_COOKIE['kba_question1'] ) && ! empty( $_COOKIE['kba_question1'] ) ) {
|
265 |
+
|
266 |
+
$kba_question1['question'] = MO2f_Utility::mo2f_get_cookie_values( 'kba_question1' );
|
267 |
+
$kba_question2['question'] = MO2f_Utility::mo2f_get_cookie_values( 'kba_question2' );
|
268 |
$cookie_value = array( $kba_question1, $kba_question2 );
|
269 |
}
|
270 |
} else {
|
549 |
return FALSE;
|
550 |
}
|
551 |
|
552 |
+
public static function get_index_value($var,$index){
|
553 |
+
switch ($var) {
|
554 |
+
case 'GLOBALS':
|
555 |
+
return isset($GLOBALS[$index])?$GLOBALS[$index]:false;
|
556 |
+
break;
|
557 |
+
|
558 |
+
default:
|
559 |
+
return false;
|
560 |
+
break;
|
561 |
+
}
|
562 |
+
}
|
563 |
+
|
564 |
}
|
565 |
|
566 |
+
?>
|
helper/constants.php
CHANGED
@@ -1,97 +1,97 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class MoWpnsConstants
|
4 |
-
{
|
5 |
-
const SUCCESS = "success";
|
6 |
-
const FAILED = "failed";
|
7 |
-
const PAST_FAILED = "pastfailed";
|
8 |
-
const ACCESS_DENIED = "accessDenied";
|
9 |
-
const LOGIN_TRANSACTION = "User Login";
|
10 |
-
const ERR_404 = "404";
|
11 |
-
const ERR_403 = "403";
|
12 |
-
const DEFAULT_CUSTOMER_KEY = "16555";
|
13 |
-
const DEFAULT_API_KEY = "fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq";
|
14 |
-
const DB_VERSION = 150;
|
15 |
-
const SUPPORT_EMAIL = 'info@xecurify.com';
|
16 |
-
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>';
|
17 |
-
const CURRENT_BROWSER = '<span style="font-size:10px;color:red;">( Current Browser )</span>';
|
18 |
-
|
19 |
-
//urls
|
20 |
-
const RECAPTCHA_URL = 'https://www.google.com/recaptcha/api.js';
|
21 |
-
const HOST_NAME = "https://login.xecurify.com";
|
22 |
-
|
23 |
-
//plugins
|
24 |
-
const TWO_FACTOR_SETTINGS = 'miniorange-2-factor-authentication/miniorange_2_factor_settings.php';
|
25 |
-
const OTP_VERIFICATION_SETTINGS = 'miniorange-otp-verification/miniorange_validation_settings.php';
|
26 |
-
const SOCIAL_LOGIN_SETTINGS = 'miniorange-login-openid/miniorange_openid_sso_settings.php';
|
27 |
-
|
28 |
-
//arrays
|
29 |
-
public static $domains = array('0-mail.com','20email.eu','0815.ru','0815.su','0clickemail.com','0sg.net','0wnd.net','0wnd.org','10mail.org','10minutemail.cf','10minutemail.com','10minutemail.de','10minutemail.ga','10minutemail.gq','10minutemail.ml','123-m.com','12hourmail.com','12minutemail.com','1ce.us','1chuan.com','1mail.ml','1pad.de','1zhuan.com','20mail.in','20mail.it','20minutemail.com','21cn.com','24hourmail.com','2prong.com','30minutemail.com','30minutesmail.com','3126.com','33mail.com','3d-painting.com','3mail.ga','4mail.cf','4mail.ga','4warding.com','4warding.net','4warding.org','50e.info','5mail.cf','5mail.ga','60minutemail.com','675hosting.com','675hosting.net','675hosting.org','6ip.us','6mail.cf','6mail.ga','6mail.ml','6paq.com','6url.com','75hosting.com','75hosting.net','75hosting.org','7days-printing.com','7mail.ga','7mail.ml','7tags.com','8mail.cf','8mail.ga','8mail.ml','99experts.com','9mail.cf','9ox.net','BeefMilk.com','DingBone.com','FudgeRub.com','LookUgly.com','MailScrap.com','SmellFear.com','TempEmail.net','a-bc.net','a45.in','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com','abusemail.de','abwesend.de','abyssmail.com','ac20mail.in','acentri.com','addcom.de','advantimo.com','afrobacon.com','ag.us.to','agedmail.com','agnitumhost.net','ahk.jp','ajaxapp.net','alivance.com','alpenjodel.de','alphafrau.de','amail.com','amilegit.com','amiri.net','amiriindustries.com','amorki.pl','anappthat.com','ano-mail.net','anonbox.net','anonymail.dk','anonymbox.com','antichef.com','antichef.net','antispam.de','antispam24.de','appixie.com','armyspy.com','asdasd.nl','autosfromus.com','aver.com','azmeil.tk','baldmama.de','baldpapa.de','ballyfinance.com','baxomale.ht.cx','beddly.com','beefmilk.com','betriebsdirektor.de','big1.us','bigmir.net','bigprofessor.so','bigstring.com','bin-wieder-da.de','binkmail.com','bio-muesli.info','bio-muesli.net','bladesmail.net','bleib-bei-mir.de','blockfilter.com','blogmyway.org','bluebottle.com','bobmail.info','bodhi.lawlita.com','bofthew.com','bonbon.net','bootybay.de','boun.cr','bouncr.com','boxformail.in','boxtemp.com.br','brefmail.com','brennendesreich.de','briefemail.com','broadbandninja.com','brokenvalve.com','brokenvalve.org','bsnow.net','bspamfree.org','bu.mintemail.com','buerotiger.de','buffemail.com','bugmenot.com','bumpymail.com','bund.us','bundes-li.ga','burnthespam.info','burstmail.info','buy-24h.net.ru','buyusedlibrarybooks.org','c2.hu','cachedot.net','cashette.com','casualdx.com','cbair.com','ce.mintemail.com','cellurl.com','center-mail.de','centermail.at','centermail.ch','centermail.com','centermail.de','centermail.info','centermail.net','cghost.s-a-d.de','chammy.info','cheatmail.de','chogmail.com','choicemail1.com','chong-mail.com','chong-mail.net','chong-mail.org','chongsoft.org','clixser.com','cmail.com','cmail.net','cmail.org','coldemail.info','consumerriot.com','cool.fr.nf','coole-files.de','correo.blogos.net','cosmorph.com','courriel.fr.nf','courrieltemporaire.com','crapmail.org','crazespaces.pw','crazymailing.com','cubiclink.com','curryworld.de','cust.in','cuvox.de','cyber-matrix.com','dacoolest.com','daintly.com','dandikmail.com','dating4best.net','dayrep.com','dbunker.com','dcemail.com','deadaddress.com','deadchildren.org','deadfake.cf','deadfake.ga','deadfake.ml','deadfake.tk','deadspam.com','deagot.com','dealja.com','despam.it','despammed.com','devnullmail.com','dfgh.net','dharmatel.net','die-besten-bilder.de','die-genossen.de','die-optimisten.de','die-optimisten.net','dieMailbox.de','digital-filestore.de','digitalsanctuary.com','dingbone.com','directbox.com','discard.cf','discard.email','discard.ga','discard.gq','discard.ml','discard.tk','discardmail.*','discardmail.com','discardmail.de','discartmail.com','disposable-email.ml','disposable.cf','disposable.ga','disposable.ml','disposableaddress.com','disposableemailaddresses.com','disposableemailaddresses.emailmiser.com','disposableinbox.com','dispose.it','disposeamail.com','disposemail.com','dispostable.com','divermail.com','dm.w3internet.co.uk','example.com','docmail.cz','dodgeit.com','dodgit.com','dodgit.org','dogit.com','doiea.com','domozmail.com','donemail.ru','dontreg.com','dontsendmespam.de','dontsentmespam.de','dotmsg.com','download-privat.de','drdrb.com','drdrb.net','droplar.com','dropmail.me','duam.net','dudmail.com','dump-email.info','dumpandjunk.com','dumpmail.com','dumpmail.de','dumpyemail.com','duskmail.com','dyndns.org','e-mail.com','e-mail.org','e4ward.com','easytrashmail.com','ee2.pl','eelmail.com','einrot.com','einrot.de','eintagsmail.de','email-fake.cf','email-fake.ga','email-fake.gq','email-fake.ml','email-fake.tk','email.org','email4u.info','email60.com','emailage.cf','emailage.ga','emailage.gq','emailage.ml','emailage.tk','emaildienst.de','emailgo.de','emailias.com','emailigo.de','emailinfive.com','emailisvalid.com','emaillime.com','emailmiser.com','emailproxsy.com','emails.ga','emailsensei.com','emailspam.cf','emailspam.ga','emailspam.gq','emailspam.ml','emailspam.tk','emailtaxi.de','emailtemporanea.net','emailtemporar.ro','emailtemporario.com.br','emailthe.net','emailtmp.com','emailto.de','emailwarden.com','emailx.at.hm','emailxfer.com','emailz.cf','emailz.ga','emailz.gq','emailz.ml','emeil.in','emeil.ir','emil.com','emkei.cf','emkei.ga','emkei.gq','emkei.ml','emkei.tk','emz.net','enterto.com','ephemail.net','etranquil.com','etranquil.net','etranquil.org','evopo.com','example.com','explodemail.com','eyepaste.com','facebook-email.cf','facebook-email.ga','facebook-email.ml','facebookmail.gq','facebookmail.ml','fahr-zur-hoelle.org','fake-mail.cf','fake-mail.ga','fake-mail.ml','fakeinbox.cf','fakeinbox.com','fakeinbox.ga','fakeinbox.ml','fakeinbox.tk','fakeinformation.com','fakemail.fr','fakemailgenerator.com','fakemailz.com','falseaddress.com','fammix.com','fansworldwide.de','fantasymail.de','farifluset.mailexpire.com','fastacura.com','fastchevy.com','fastchrysler.com','fastkawasaki.com','fastmazda.com','fastmitsubishi.com','fastnissan.com','fastsubaru.com','fastsuzuki.com','fasttoyota.com','fastyamaha.com','fatflap.com','fdfdsfds.com','feinripptraeger.de','fettabernett.de','fightallspam.com','fiifke.de','filzmail.com','fishfuse.com','fixmail.tk','fizmail.com','fleckens.hu','flurred.com','flyspam.com','footard.com','forgetmail.com','fornow.eu','fr33mail.info','frapmail.com','free-email.cf','free-email.ga','freemail.ms','freemails.cf','freemails.ga','freemails.ml','freemeilaadressforall.net','freudenkinder.de','freundin.ru','friendlymail.co.uk','fromru.com','front14.org','fuckingduh.com','fudgerub.com','fux0ringduh.com','garliclife.com','gawab.com','gelitik.in','gentlemansclub.de','get-mail.cf','get-mail.ga','get-mail.ml','get-mail.tk','get1mail.com','get2mail.fr','getairmail.cf','getairmail.com','getairmail.ga','getairmail.gq','getairmail.ml','getairmail.tk','getmails.eu','getonemail.com','getonemail.net','ghosttexter.de','girlsundertheinfluence.com','gishpuppy.com','goemailgo.com','gold-profits.info','goldtoolbox.com','golfilla.info','gorillaswithdirtyarmpits.com','gotmail.com','gotmail.net','gotmail.org','gotti.otherinbox.com','gowikibooks.com','gowikicampus.com','gowikicars.com','gowikifilms.com','gowikigames.com','gowikimusic.com','gowikinetwork.com','gowikitravel.com','gowikitv.com','grandmamail.com','grandmasmail.com','great-host.in','greensloth.com','grr.la','gsrv.co.uk','guerillamail.biz','guerillamail.com','guerillamail.net','guerillamail.org','guerrillamail.biz','guerrillamail.com','guerrillamail.de','guerrillamail.info','guerrillamail.net','guerrillamail.org','guerrillamailblock.com','gustr.com','h.mintemail.com','h8s.org','hab-verschlafen.de','habmalnefrage.de','hacccc.com','haltospam.com','harakirimail.com','hartbot.de','hatespam.org','hellodream.mobi','herp.in','herr-der-mails.de','hidemail.de','hidzz.com','hmamail.com','hochsitze.com','home.de','hopemail.biz','hot-mail.cf','hot-mail.ga','hot-mail.gq','hot-mail.ml','hot-mail.tk','hotpop.com','hulapla.de','humn.ws.gy','hush.com','hushmail.com','ich-bin-verrueckt-nach-dir.de','ich-will-net.de','ieatspam.eu','ieatspam.info','ieh-mail.de','ihateyoualot.info','iheartspam.org','ikbenspamvrij.nl','imails.info','imgof.com','imstations.com','inbax.tk','inbox.si','inbox2.info','inboxalias.com','inboxclean.com','inboxclean.org','inboxproxy.com','incognitomail.com','incognitomail.net','incognitomail.org','inerted.com','inmail24.com','insorg-mail.info','instant-mail.de','instantemailaddress.com','ipoo.org','irish2me.com','iroid.com','ist-allein.info','ist-einmalig.de','ist-ganz-allein.de','ist-willig.de','iwi.net','izmail.net','jetable.com','jetable.de','jetable.fr.nf','jetable.net','jetable.org','jetfix.ee','jetzt-bin-ich-dran.com','jn-club.de','jnxjn.com','jobbikszimpatizans.hu','jourrapide.com','jsrsolutions.com','junk1e.com','junkmail.com','junkmail.ga','junkmail.gq','kaffeeschluerfer.com','kaffeeschluerfer.de','kasmail.com','kaspop.com','keepmymail.com','killmail.com','killmail.net','kimsdisk.com','kinglibrary.net','kingsq.ga','kir.ch.tc','klassmaster.com','klassmaster.net','klzlk.com','kommespaeter.de','kook.ml','koszmail.pl','krim.ws','kuh.mu','kulturbetrieb.info','kurzepost.de','l33r.eu','labetteraverouge.at','lackmail.net','lags.us','landmail.co','lass-es-geschehen.de','lastmail.co','lastmail.com','lazyinbox.com','letthemeatspam.com','lhsdv.com','liebt-dich.info','lifebyfood.com','link2mail.net','listomail.com','litedrop.com','loadby.us','login-email.cf','login-email.ga','login-email.ml','login-email.tk','lol.ovpn.to','lookugly.com','lopl.co.cc','lortemail.dk','lovemeleaveme.com','loveyouforever.de','lr7.us','lr78.com','lroid.com','luv2.us','m4ilweb.info','maboard.com','maennerversteherin.com','maennerversteherin.de','mail-filter.com','mail-temporaire.fr','mail.by','mail.htl22.at','mail.mezimages.net','mail.misterpinball.de','mail.svenz.eu','mail114.net','mail15.com','mail2rss.org','mail333.com','mail4days.com','mail4trash.com','mail4u.info','mailbidon.com','mailblocks.com','mailbucket.org','mailcat.biz','mailcatch.*','mailcatch.com','maildrop.cc','maildrop.cf','maildrop.ga','maildrop.gq','maildrop.ml','maildx.com','maileater.com','mailexpire.com','mailfa.tk','mailforspam.com','mailfree.ga','mailfree.gq','mailfree.ml','mailfreeonline.com','mailfs.com','mailguard.me','mailimate.com','mailin8r.com','mailinater.com','mailinator.com','mailinator.gq','mailinator.net','mailinator.org','mailinator.us','mailinator2.com','mailinblack.com','mailincubator.com','mailismagic.com','mailjunk.cf','mailjunk.ga','mailjunk.gq','mailjunk.ml','mailjunk.tk','mailmate.com','mailme.gq','mailme.ir','mailme.lv','mailme24.com','mailmetrash.com','mailmoat.com','mailnator.com','mailnesia.com','mailnull.com','mailpick.biz','mailproxsy.com','mailquack.com','mailrock.biz','mailsac.com','mailscrap.com','mailseal.de','mailshell.com','mailsiphon.com','mailslapping.com','mailslite.com','mailtemp.info','mailtothis.com','mailtrash.net','mailueberfall.de','mailzilla.com','mailzilla.org','mailzilla.orgmbx.cc','makemetheking.com','mamber.net','manifestgenerator.com','manybrain.com','mbx.cc','mciek.com','mega.zik.dj','meine-dateien.info','meine-diashow.de','meine-fotos.info','meine-urlaubsfotos.de','meinspamschutz.de','meltmail.com','messagebeamer.de','metaping.com','mezimages.net','mfsa.ru','mierdamail.com','migumail.com','mintemail.com','mjukglass.nu','mns.ru','moakt.com','mobi.web.id','mobileninja.co.uk','moburl.com','mohmal.com','moncourrier.fr.nf','monemail.fr.nf','monmail.fr.nf','monumentmail.com','ms9.mailslite.com','msa.minsmail.com','msh.mailslite.com','mt2009.com','mt2014.com','mufmail.com','muskelshirt.de','mx0.wwwnew.eu','my-mail.ch','my10minutemail.com','myadult.info','mycleaninbox.net','myemailboxy.com','mymail-in.net','mymailoasis.com','mynetstore.de','mypacks.net','mypartyclip.de','myphantomemail.com','myspaceinc.com','myspaceinc.net','myspaceinc.org','myspacepimpedup.com','myspamless.com','mytemp.email','mytempemail.com','mytop-in.net','mytrashmail.com','mytrashmail.compookmail.com','neomailbox.com','nepwk.com','nervmich.net','nervtmich.net','netmails.com','netmails.net','netterchef.de','netzidiot.de','neue-dateien.de','neverbox.com','nice-4u.com','nmail.cf','no-spam.ws','nobulk.com','noclickemail.com','nogmailspam.info','nomail.xl.cx','nomail2me.com','nomorespamemails.com','nonspam.eu','nonspammer.de','noref.in','nospam.wins.com.br','nospam.ze.tc','nospam4.us','nospamfor.us','nospammail.net','nospamthanks.info','notmailinator.com','notsharingmy.info','nowhere.org','nowmymail.com','ntlhelp.net','nullbox.info','nur-fuer-spam.de','nurfuerspam.de','nus.edu.sg','nwldx.com','nybella.com','objectmail.com','obobbo.com','odaymail.com','office-dateien.de','oikrach.com','one-time.email','oneoffemail.com','oneoffmail.com','onewaymail.com','online.ms','oopi.org','opayq.com','orangatango.com','ordinaryamerican.net','otherinbox.com','ourklips.com','outlawspam.com','ovpn.to','owlpic.com','pancakemail.com','paplease.com','partybombe.de','partyheld.de','pcusers.otherinbox.com','pepbot.com','pfui.ru','phreaker.net','pimpedupmyspace.com','pisem.net','pjjkp.com','pleasedontsendmespam.de','plexolan.de','poczta.onet.pl','politikerclub.de','polizisten-duzer.de','poofy.org','pookmail.com','pornobilder-mal-gratis.com','portsaid.cc','postacin.com','postfach.cc','privacy.net','privy-mail.com','privymail.de','proxymail.eu','prtnx.com','prtz.eu','prydirect.info','pryworld.info','public-files.de','punkass.com','put2.net','putthisinyourspamdatabase.com','pwrby.com','qasti.com','qisdo.com','qisoa.com','qq.com','quantentunnel.de','quickinbox.com','quickmail.nl','qv7.info','radiku.ye.vc','ralib.com','raubtierbaendiger.de','rcpt.at','reallymymail.com','receiveee.chickenkiller.com','receiveee.com','recode.me','reconmail.com','record.me','recursor.net','recyclemail.dk','regbypass.com','regbypass.comsafe-mail.net','rejectmail.com','remail.cf','remail.ga','rhyta.com','rk9.chickenkiller.com','rklips.com','rmqkr.net','rootprompt.org','royal.net','rppkn.com','rtrtr.com','ruffrey.com','s0ny.net','saeuferleber.de','safe-mail.net','safersignup.de','safetymail.info','safetypost.de','sags-per-mail.de','sandelf.de','satka.net','saynotospams.com','scatmail.com','schafmail.de','schmusemail.de','schreib-doch-mal-wieder.de','selfdestructingmail.com','selfdestructingmail.org','sendspamhere.com','senseless-entertainment.com','shared-files.de','sharedmailbox.org','sharklasers.com','shieldedmail.com','shiftmail.com','shinedyoureyes.com','shitmail.me','shitmail.org','shitware.nl','shortmail.net','showslow.de','sibmail.com','sinnlos-mail.de','siria.cc','siteposter.net','skeefmail.com','skeefmail.net','slaskpost.se','slave-auctions.net','slopsbox.com','slushmail.com','smashmail.de','smellfear.com','smellrear.com','sms.at','snakemail.com','sneakemail.com','snkmail.com','sofimail.com','sofort-mail.de','sofortmail.de','softpls.asia','sogetthis.com','sohu.com','soisz.com','solvemail.info','sonnenkinder.org','soodomail.com','soodonims.com','spam-be-gone.com','spam.la','spam.su','spam4.me','spamavert.com','spambob.com','spambob.net','spambob.org','spambog.*','spambog.com','spambog.de','spambog.net','spambog.ru','spambooger.com','spambox.info','spambox.irishspringrealty.com','spambox.us','spamcannon.com','spamcannon.net','spamcero.com','spamcon.org','spamcorptastic.com','spamcowboy.com','spamcowboy.net','spamcowboy.org','spamday.com','spamdecoy.net','spameater.com','spameater.org','spamex.com','spamfighter.cf','spamfighter.ga','spamfighter.gq','spamfighter.ml','spamfighter.tk','spamfree.eu','spamfree24.com','spamfree24.de','spamfree24.eu','spamfree24.info','spamfree24.net','spamfree24.org','spamgoes.in','spamgourmet.com','spamgourmet.net','spamgourmet.org','spamgrube.net','spamherelots.com','spamhereplease.com','spamhole.com','spamify.com','spaminator.de','spamkill.info','spaml.com','spaml.de','spammote.com','spammotel.com','spammuffel.de','spamobox.com','spamoff.de','spamreturn.com','spamsalad.in','spamslicer.com','spamspot.com','spamstack.net','spamthis.co.uk','spamthisplease.com','spamtrail.com','spamtroll.net','speed.1s.fr','sperke.net','spikio.com','spoofmail.de','squizzy.de','sriaus.com','ssoia.com','startkeys.com','stinkefinger.net','stop-my-spam.cf','stop-my-spam.com','stop-my-spam.ga','stop-my-spam.ml','stop-my-spam.tk','streber24.de','streetwisemail.com','stuffmail.de','super-auswahl.de','supergreatmail.com','supermailer.jp','superrito.com','superstachel.de','suremail.info','svk.jp','sweetville.net','sweetxxx.de','tafmail.com','tagesmail.eu','tagyourself.com','talkinator.com','tapchicuoihoi.com','teewars.org','teleworm.com','teleworm.us','temp-mail.com','temp-mail.org','temp.emeraldwebmail.com','temp.headstrong.de','tempail.com','tempalias.com','tempe-mail.com','tempemail.biz','tempemail.co.za','tempemail.com','tempemail.net','tempinbox.co.uk','tempinbox.com','tempmail.it','tempmail2.com','tempmaildemo.com','tempmailer.com','tempomail.fr','temporarily.de','temporarioemail.com.br','temporaryemail.net','temporaryemail.us','temporaryforwarding.com','temporaryinbox.com','tempsky.com','tempthe.net','tempymail.com','terminverpennt.de','test.com','test.de','thanksnospam.info','thankyou2010.com','thecloudindex.com','thepryam.info','thisisnotmyrealemail.com','throam.com','throwawayemailaddress.com','throwawaymail.com','tilien.com','tittbit.in','tmail.ws','tmailinator.com','toiea.com','toomail.biz','topmail-files.de','tortenboxer.de','totalmail.de','tradermail.info','trash-amil.com','trash-mail.at','trash-mail.cf','trash-mail.com','trash-mail.de','trash-mail.ga','trash-mail.gq','trash-mail.ml','trash-mail.tk','trash2009.com','trash2010.com','trash2011.com','trashbox.eu','trashdevil.com','trashdevil.de','trashemail.de','trashmail.at','trashmail.com','trashmail.de','trashmail.me','trashmail.net','trashmail.org','trashmail.ws','trashmailer.com','trashymail.com','trashymail.net','trayna.com','trbvm.com','trickmail.net','trillianpro.com','trimix.cn','tryalert.com','turboprinz.de','turboprinzessin.de','turual.com','twinmail.de','twoweirdtricks.com','tyldd.com','ubismail.net','uggsrock.com','uk2.net','ukr.net','umail.net','unmail.ru','unterderbruecke.de','upliftnow.com','uplipht.com','uroid.com','username.e4ward.com','valemail.net','venompen.com','verlass-mich-nicht.de','veryrealemail.com','vidchart.com','viditag.com','viewcastmedia.com','viewcastmedia.net','viewcastmedia.org','vinbazar.com','vollbio.de','volloeko.de','vomoto.com','vorsicht-bissig.de','vorsicht-scharf.de','vubby.com','walala.org','walkmail.net','war-im-urlaub.de','wbb3.de','webemail.me','webm4il.info','webmail4u.eu','webuser.in','wee.my','weg-werf-email.de','wegwerf-email-addressen.de','wegwerf-emails.de','wegwerfadresse.de','wegwerfemail.com','wegwerfemail.de','wegwerfmail.de','wegwerfmail.info','wegwerfmail.net','wegwerfmail.org','wegwerpmailadres.nl','weibsvolk.de','weibsvolk.org','weinenvorglueck.de','wetrainbayarea.com','wetrainbayarea.org','wh4f.org','whatiaas.com','whatpaas.com','whatsaas.com','whopy.com','whtjddn.33mail.com','whyspam.me','wickmail.net','wilemail.com','will-hier-weg.de','willhackforfood.biz','willselfdestruct.com','winemaven.info','wir-haben-nachwuchs.de','wir-sind-cool.org','wirsindcool.de','wmail.cf','wolke7.net','wollan.info','women-at-work.org','wormseo.cn','wronghead.com','wuzup.net','wuzupmail.net','www.e4ward.com','www.gishpuppy.com','www.mailinator.com','wwwnew.eu','xagloo.com','xemaps.com','xents.com','xmail.com','xmaily.com','xoxox.cc','xoxy.net','xsecurity.org','xyzfree.net','yapped.net','yeah.net','yep.it','yert.ye.vc','yesey.net','yogamaven.com','yomail.info','yopmail.com','yopmail.fr','yopmail.gq','yopmail.net','yopweb.com','youmail.ga','youmailr.com','ypmail.webarnak.fr.eu.org','ystea.org','yuurok.com','yzbid.com','za.com','zehnminutenmail.de','zetmail.com','zippymail.info','zoaxe.com','zoemail.com','zoemail.net','zoemail.org','zomg.info','zweb.in','zxcv.com','zxcvbnm.com','zzz.com');
|
30 |
-
public static $country = array('A1' =>'ANONYMOUS PROXY','A2' =>'SATELLITE PROVIDER','O1' =>'OTHER COUNTRY','AF' => 'AFGHANISTAN','AL' => 'ALBANIA','DZ' => 'ALGERIA','AS' => 'AMERICAN SAMOA','AD' => 'ANDORRA','AO' => 'ANGOLA','AI' => 'ANGUILLA','AQ' => 'ANTARCTICA','AG' => 'ANTIGUA AND BARBUDA','AR' => 'ARGENTINA','AM' => 'ARMENIA','AW' => 'ARUBA','AU' => 'AUSTRALIA','AT' => 'AUSTRIA','AZ' => 'AZERBAIJAN','BS' => 'BAHAMAS','BH' => 'BAHRAIN','BD' => 'BANGLADESH','BB' => 'BARBADOS','BY' => 'BELARUS','BE' => 'BELGIUM','BZ' => 'BELIZE','BJ' => 'BENIN','BM' => 'BERMUDA','BT' => 'BHUTAN','BO' => 'BOLIVIA','BA' => 'BOSNIA AND HERZEGOVINA','BW' => 'BOTSWANA','BV' => 'BOUVET ISLAND','BR' => 'BRAZIL','IO' => 'BRITISH INDIAN OCEAN TERRITORY','BN' => 'BRUNEI DARUSSALAM','BG' => 'BULGARIA','BF' => 'BURKINA FASO','BI' => 'BURUNDI','KH' => 'CAMBODIA','CM' => 'CAMEROON','CA' => 'CANADA','CV' => 'CAPE VERDE','KY' => 'CAYMAN ISLANDS','CF' => 'CENTRAL AFRICAN REPUBLIC','TD' => 'CHAD','CL' => 'CHILE','CN' => 'CHINA','CX' => 'CHRISTMAS ISLAND','CC' => 'COCOS (KEELING) ISLANDS','CO' => 'COLOMBIA','KM' => 'COMOROS','CG' => 'CONGO','CD' => 'CONGO, THE DEMOCRATIC REPUBLIC OF THE','CK' => 'COOK ISLANDS','CR' => 'COSTA RICA','CI' => 'COTE D IVOIRE','HR' => 'CROATIA','CU' => 'CUBA','CY' => 'CYPRUS','CZ' => 'CZECH REPUBLIC','DK' => 'DENMARK','DJ' => 'DJIBOUTI','DM' => 'DOMINICA','DO' => 'DOMINICAN REPUBLIC','TP' => 'EAST TIMOR','EC' => 'ECUADOR','EG' => 'EGYPT','SV' => 'EL SALVADOR','GQ' => 'EQUATORIAL GUINEA','ER' => 'ERITREA','EE' => 'ESTONIA','ET' => 'ETHIOPIA','FK' => 'FALKLAND ISLANDS (MALVINAS)','FO' => 'FAROE ISLANDS','FJ' => 'FIJI','FI' => 'FINLAND','FR' => 'FRANCE','GF' => 'FRENCH GUIANA','PF' => 'FRENCH POLYNESIA','TF' => 'FRENCH SOUTHERN TERRITORIES','GA' => 'GABON','GM' => 'GAMBIA','GE' => 'GEORGIA','DE' => 'GERMANY','GH' => 'GHANA','GI' => 'GIBRALTAR','GR' => 'GREECE','GL' => 'GREENLAND','GD' => 'GRENADA','GP' => 'GUADELOUPE','GU' => 'GUAM','GT' => 'GUATEMALA','GN' => 'GUINEA','GW' => 'GUINEA-BISSAU','GY' => 'GUYANA','HT' => 'HAITI','HM' => 'HEARD ISLAND AND MCDONALD ISLANDS','VA' => 'HOLY SEE (VATICAN CITY STATE)','HN' => 'HONDURAS','HK' => 'HONG KONG','HU' => 'HUNGARY','IS' => 'ICELAND','IN' => 'INDIA','ID' => 'INDONESIA','IR' => 'IRAN, ISLAMIC REPUBLIC OF','IQ' => 'IRAQ','IE' => 'IRELAND','IL' => 'ISRAEL','IT' => 'ITALY','JM' => 'JAMAICA','JP' => 'JAPAN','JO' => 'JORDAN','KZ' => 'KAZAKSTAN','KE' => 'KENYA','KI' => 'KIRIBATI','KP' => 'KOREA DEMOCRATIC PEOPLES REPUBLIC OF','KR' => 'KOREA REPUBLIC OF','KW' => 'KUWAIT','KG' => 'KYRGYZSTAN','LA' => 'LAO PEOPLES DEMOCRATIC REPUBLIC','LV' => 'LATVIA','LB' => 'LEBANON','LS' => 'LESOTHO','LR' => 'LIBERIA','LY' => 'LIBYAN ARAB JAMAHIRIYA','LI' => 'LIECHTENSTEIN','LT' => 'LITHUANIA','LU' => 'LUXEMBOURG','MO' => 'MACAU','MK' => 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF','MG' => 'MADAGASCAR','MW' => 'MALAWI','MY' => 'MALAYSIA','MV' => 'MALDIVES','ML' => 'MALI','MT' => 'MALTA','MH' => 'MARSHALL ISLANDS','MQ' => 'MARTINIQUE','MR' => 'MAURITANIA','MU' => 'MAURITIUS','YT' => 'MAYOTTE','MX' => 'MEXICO','FM' => 'MICRONESIA, FEDERATED STATES OF','MD' => 'MOLDOVA, REPUBLIC OF','MC' => 'MONACO','MN' => 'MONGOLIA','MS' => 'MONTSERRAT','MA' => 'MOROCCO','MZ' => 'MOZAMBIQUE','MM' => 'MYANMAR','NA' => 'NAMIBIA','NR' => 'NAURU','NP' => 'NEPAL','NL' => 'NETHERLANDS','AN' => 'NETHERLANDS ANTILLES','NC' => 'NEW CALEDONIA','NZ' => 'NEW ZEALAND','NI' => 'NICARAGUA','NE' => 'NIGER','NG' => 'NIGERIA','NU' => 'NIUE','NF' => 'NORFOLK ISLAND','MP' => 'NORTHERN MARIANA ISLANDS','NO' => 'NORWAY','OM' => 'OMAN','PK' => 'PAKISTAN','PW' => 'PALAU','PS' => 'PALESTINIAN TERRITORY, OCCUPIED','PA' => 'PANAMA','PG' => 'PAPUA NEW GUINEA','PY' => 'PARAGUAY','PE' => 'PERU','PH' => 'PHILIPPINES','PN' => 'PITCAIRN','PL' => 'POLAND','PT' => 'PORTUGAL','PR' => 'PUERTO RICO','QA' => 'QATAR','RE' => 'REUNION','RO' => 'ROMANIA','RU' => 'RUSSIAN FEDERATION','RW' => 'RWANDA','SH' => 'SAINT HELENA','KN' => 'SAINT KITTS AND NEVIS','LC' => 'SAINT LUCIA','PM' => 'SAINT PIERRE AND MIQUELON','VC' => 'SAINT VINCENT AND THE GRENADINES','WS' => 'SAMOA','SM' => 'SAN MARINO','ST' => 'SAO TOME AND PRINCIPE','SA' => 'SAUDI ARABIA','SN' => 'SENEGAL','SC' => 'SEYCHELLES','SL' => 'SIERRA LEONE','SG' => 'SINGAPORE','SK' => 'SLOVAKIA','SI' => 'SLOVENIA','SB' => 'SOLOMON ISLANDS','SO' => 'SOMALIA','ZA' => 'SOUTH AFRICA','GS' => 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS','ES' => 'SPAIN','LK' => 'SRI LANKA','SD' => 'SUDAN','SR' => 'SURINAME','SJ' => 'SVALBARD AND JAN MAYEN','SZ' => 'SWAZILAND','SE' => 'SWEDEN','CH' => 'SWITZERLAND','SY' => 'SYRIAN ARAB REPUBLIC','TW' => 'TAIWAN, PROVINCE OF CHINA','TJ' => 'TAJIKISTAN','TZ' => 'TANZANIA, UNITED REPUBLIC OF','TH' => 'THAILAND','TG' => 'TOGO','TK' => 'TOKELAU','TO' => 'TONGA','TT' => 'TRINIDAD AND TOBAGO','TN' => 'TUNISIA','TR' => 'TURKEY','TM' => 'TURKMENISTAN','TC' => 'TURKS AND CAICOS ISLANDS','TV' => 'TUVALU','UG' => 'UGANDA','UA' => 'UKRAINE','AE' => 'UNITED ARAB EMIRATES','GB' => 'UNITED KINGDOM','US' => 'UNITED STATES','UM' => 'UNITED STATES MINOR OUTLYING ISLANDS','UY' => 'URUGUAY','UZ' => 'UZBEKISTAN','VU' => 'VANUATU','VE' => 'VENEZUELA','VN' => 'VIET NAM','VG' => 'VIRGIN ISLANDS, BRITISH','VI' => 'VIRGIN ISLANDS, U.S.','WF' => 'WALLIS AND FUTUNA','EH' => 'WESTERN SAHARA','YE' => 'YEMEN','YU' => 'YUGOSLAVIA','ZM' => 'ZAMBIA','ZW' => 'ZIMBABWE');
|
31 |
-
|
32 |
-
const RECAPTCHA_VERIFY = 'https://www.google.com/recaptcha/api/siteverify';
|
33 |
-
const FAQ_PAYMENT_URL = 'https://faq.miniorange.com/knowledgebase/all-i-want-to-do-is-upgrade-to-a-premium-licence/';
|
34 |
-
const LOGIN_ATTEMPTS_EXCEEDED = "User exceeded allowed login attempts.";
|
35 |
-
const BLOCKED_BY_ADMIN = "Blocked by Admin";
|
36 |
-
const IP_RANGE_BLOCKING = "IP Range Blocking";
|
37 |
-
const FAILED_LOGIN_ATTEMPTS_FROM_NEW_IP = "Failed login attempts from new IP.";
|
38 |
-
const LOGGED_IN_FROM_NEW_IP = "Logged in from new IP.";
|
39 |
-
const ATTACK_LIMIT_EXCEEDED = "ale";
|
40 |
-
const RATE_LIMIT_EXCEEDED = "rle";
|
41 |
-
const RATE_LIMIT_EXCEEDED_CRAWLER_ATTACK= "rlecrawler";
|
42 |
-
const PLUGIN = 'plugin';
|
43 |
-
const THEMES = 'themes';
|
44 |
-
const WPFILES = 'wpfiles';
|
45 |
-
const DATABASE = 'db';
|
46 |
-
const CloudLockedOut ='https://faq.miniorange.com/knowledgebase/how-to-gain-access-to-my-website-if-i-get-locked-out/';
|
47 |
-
const OnPremiseLockedOut ='https://faq.miniorange.com/knowledgebase/i-am-locked-cant-access-my-account-what-do-i-do/';
|
48 |
-
|
49 |
-
public static $repo_status_code = array(-96 => 'Maximum execution time exceeded while downloading files from repository. Please contact miniOrange.', -97 => '<i>Uploads Folder</i> permission denied', -98 => '2 Factor authentication plugin unable to reach wordpress repository files. Please contact miniOrange.', -99 => 'Unable to download Wordpress, plugins and themes from Repository', -100 => 'Unable to unzip the Wordpress, plugins and themes');
|
50 |
-
|
51 |
-
public static $host = 'http://scanner.api.xecurify.com/malwareservice/rest/file/upload';
|
52 |
-
|
53 |
-
public static $hostname = 'scanner.api.xecurify.com';
|
54 |
-
|
55 |
-
public static $quick_scan_configuration = array('plugin_scan' => 1 ,
|
56 |
-
'theme_scan' => 1,
|
57 |
-
'core_scan' => 0,
|
58 |
-
'file_extension' => "",
|
59 |
-
'check_vulnerable' => 1,
|
60 |
-
'check_sql' => 1,
|
61 |
-
'check_rfi' => 1,
|
62 |
-
'ext_link_check' => 0,
|
63 |
-
'check_repo' => 0,
|
64 |
-
'path_skip' => "",
|
65 |
-
'type_scan' => "Quick Scan"
|
66 |
-
);
|
67 |
-
public static $standard_scan_configuration = array('plugin_scan' => 1 ,
|
68 |
-
'theme_scan' => 1,
|
69 |
-
'core_scan' => 0,
|
70 |
-
'file_extension' => "",
|
71 |
-
'check_vulnerable' => 1,
|
72 |
-
'check_sql' => 1,
|
73 |
-
'check_rfi' => 1,
|
74 |
-
'ext_link_check' => 1,
|
75 |
-
'check_repo' => 1,
|
76 |
-
'path_skip' => "",
|
77 |
-
'type_scan' => "Standard Scan"
|
78 |
-
);
|
79 |
-
|
80 |
-
function __construct()
|
81 |
-
{
|
82 |
-
$this->define_global();
|
83 |
-
}
|
84 |
-
|
85 |
-
function define_global()
|
86 |
-
{
|
87 |
-
global $wpnsDbQueries,$moWpnsUtility,$mo2f_dirName,$Mo2fdbQueries;
|
88 |
-
$wpnsDbQueries = new MoWpnsDB();
|
89 |
-
$moWpnsUtility = new MoWpnsUtility();
|
90 |
-
$mo2f_dirName = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR;
|
91 |
-
$Mo2fdbQueries = new Mo2fDB();
|
92 |
-
}
|
93 |
-
|
94 |
-
}
|
95 |
-
new MoWpnsConstants;
|
96 |
-
|
97 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class MoWpnsConstants
|
4 |
+
{
|
5 |
+
const SUCCESS = "success";
|
6 |
+
const FAILED = "failed";
|
7 |
+
const PAST_FAILED = "pastfailed";
|
8 |
+
const ACCESS_DENIED = "accessDenied";
|
9 |
+
const LOGIN_TRANSACTION = "User Login";
|
10 |
+
const ERR_404 = "404";
|
11 |
+
const ERR_403 = "403";
|
12 |
+
const DEFAULT_CUSTOMER_KEY = "16555";
|
13 |
+
const DEFAULT_API_KEY = "fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq";
|
14 |
+
const DB_VERSION = 150;
|
15 |
+
const SUPPORT_EMAIL = 'info@xecurify.com';
|
16 |
+
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>';
|
17 |
+
const CURRENT_BROWSER = '<span style="font-size:10px;color:red;">( Current Browser )</span>';
|
18 |
+
|
19 |
+
//urls
|
20 |
+
const RECAPTCHA_URL = 'https://www.google.com/recaptcha/api.js';
|
21 |
+
const HOST_NAME = "https://login.xecurify.com";
|
22 |
+
|
23 |
+
//plugins
|
24 |
+
const TWO_FACTOR_SETTINGS = 'miniorange-2-factor-authentication/miniorange_2_factor_settings.php';
|
25 |
+
const OTP_VERIFICATION_SETTINGS = 'miniorange-otp-verification/miniorange_validation_settings.php';
|
26 |
+
const SOCIAL_LOGIN_SETTINGS = 'miniorange-login-openid/miniorange_openid_sso_settings.php';
|
27 |
+
|
28 |
+
//arrays
|
29 |
+
public static $domains = array('0-mail.com','20email.eu','0815.ru','0815.su','0clickemail.com','0sg.net','0wnd.net','0wnd.org','10mail.org','10minutemail.cf','10minutemail.com','10minutemail.de','10minutemail.ga','10minutemail.gq','10minutemail.ml','123-m.com','12hourmail.com','12minutemail.com','1ce.us','1chuan.com','1mail.ml','1pad.de','1zhuan.com','20mail.in','20mail.it','20minutemail.com','21cn.com','24hourmail.com','2prong.com','30minutemail.com','30minutesmail.com','3126.com','33mail.com','3d-painting.com','3mail.ga','4mail.cf','4mail.ga','4warding.com','4warding.net','4warding.org','50e.info','5mail.cf','5mail.ga','60minutemail.com','675hosting.com','675hosting.net','675hosting.org','6ip.us','6mail.cf','6mail.ga','6mail.ml','6paq.com','6url.com','75hosting.com','75hosting.net','75hosting.org','7days-printing.com','7mail.ga','7mail.ml','7tags.com','8mail.cf','8mail.ga','8mail.ml','99experts.com','9mail.cf','9ox.net','BeefMilk.com','DingBone.com','FudgeRub.com','LookUgly.com','MailScrap.com','SmellFear.com','TempEmail.net','a-bc.net','a45.in','abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com','abusemail.de','abwesend.de','abyssmail.com','ac20mail.in','acentri.com','addcom.de','advantimo.com','afrobacon.com','ag.us.to','agedmail.com','agnitumhost.net','ahk.jp','ajaxapp.net','alivance.com','alpenjodel.de','alphafrau.de','amail.com','amilegit.com','amiri.net','amiriindustries.com','amorki.pl','anappthat.com','ano-mail.net','anonbox.net','anonymail.dk','anonymbox.com','antichef.com','antichef.net','antispam.de','antispam24.de','appixie.com','armyspy.com','asdasd.nl','autosfromus.com','aver.com','azmeil.tk','baldmama.de','baldpapa.de','ballyfinance.com','baxomale.ht.cx','beddly.com','beefmilk.com','betriebsdirektor.de','big1.us','bigmir.net','bigprofessor.so','bigstring.com','bin-wieder-da.de','binkmail.com','bio-muesli.info','bio-muesli.net','bladesmail.net','bleib-bei-mir.de','blockfilter.com','blogmyway.org','bluebottle.com','bobmail.info','bodhi.lawlita.com','bofthew.com','bonbon.net','bootybay.de','boun.cr','bouncr.com','boxformail.in','boxtemp.com.br','brefmail.com','brennendesreich.de','briefemail.com','broadbandninja.com','brokenvalve.com','brokenvalve.org','bsnow.net','bspamfree.org','bu.mintemail.com','buerotiger.de','buffemail.com','bugmenot.com','bumpymail.com','bund.us','bundes-li.ga','burnthespam.info','burstmail.info','buy-24h.net.ru','buyusedlibrarybooks.org','c2.hu','cachedot.net','cashette.com','casualdx.com','cbair.com','ce.mintemail.com','cellurl.com','center-mail.de','centermail.at','centermail.ch','centermail.com','centermail.de','centermail.info','centermail.net','cghost.s-a-d.de','chammy.info','cheatmail.de','chogmail.com','choicemail1.com','chong-mail.com','chong-mail.net','chong-mail.org','chongsoft.org','clixser.com','cmail.com','cmail.net','cmail.org','coldemail.info','consumerriot.com','cool.fr.nf','coole-files.de','correo.blogos.net','cosmorph.com','courriel.fr.nf','courrieltemporaire.com','crapmail.org','crazespaces.pw','crazymailing.com','cubiclink.com','curryworld.de','cust.in','cuvox.de','cyber-matrix.com','dacoolest.com','daintly.com','dandikmail.com','dating4best.net','dayrep.com','dbunker.com','dcemail.com','deadaddress.com','deadchildren.org','deadfake.cf','deadfake.ga','deadfake.ml','deadfake.tk','deadspam.com','deagot.com','dealja.com','despam.it','despammed.com','devnullmail.com','dfgh.net','dharmatel.net','die-besten-bilder.de','die-genossen.de','die-optimisten.de','die-optimisten.net','dieMailbox.de','digital-filestore.de','digitalsanctuary.com','dingbone.com','directbox.com','discard.cf','discard.email','discard.ga','discard.gq','discard.ml','discard.tk','discardmail.*','discardmail.com','discardmail.de','discartmail.com','disposable-email.ml','disposable.cf','disposable.ga','disposable.ml','disposableaddress.com','disposableemailaddresses.com','disposableemailaddresses.emailmiser.com','disposableinbox.com','dispose.it','disposeamail.com','disposemail.com','dispostable.com','divermail.com','dm.w3internet.co.uk','example.com','docmail.cz','dodgeit.com','dodgit.com','dodgit.org','dogit.com','doiea.com','domozmail.com','donemail.ru','dontreg.com','dontsendmespam.de','dontsentmespam.de','dotmsg.com','download-privat.de','drdrb.com','drdrb.net','droplar.com','dropmail.me','duam.net','dudmail.com','dump-email.info','dumpandjunk.com','dumpmail.com','dumpmail.de','dumpyemail.com','duskmail.com','dyndns.org','e-mail.com','e-mail.org','e4ward.com','easytrashmail.com','ee2.pl','eelmail.com','einrot.com','einrot.de','eintagsmail.de','email-fake.cf','email-fake.ga','email-fake.gq','email-fake.ml','email-fake.tk','email.org','email4u.info','email60.com','emailage.cf','emailage.ga','emailage.gq','emailage.ml','emailage.tk','emaildienst.de','emailgo.de','emailias.com','emailigo.de','emailinfive.com','emailisvalid.com','emaillime.com','emailmiser.com','emailproxsy.com','emails.ga','emailsensei.com','emailspam.cf','emailspam.ga','emailspam.gq','emailspam.ml','emailspam.tk','emailtaxi.de','emailtemporanea.net','emailtemporar.ro','emailtemporario.com.br','emailthe.net','emailtmp.com','emailto.de','emailwarden.com','emailx.at.hm','emailxfer.com','emailz.cf','emailz.ga','emailz.gq','emailz.ml','emeil.in','emeil.ir','emil.com','emkei.cf','emkei.ga','emkei.gq','emkei.ml','emkei.tk','emz.net','enterto.com','ephemail.net','etranquil.com','etranquil.net','etranquil.org','evopo.com','example.com','explodemail.com','eyepaste.com','facebook-email.cf','facebook-email.ga','facebook-email.ml','facebookmail.gq','facebookmail.ml','fahr-zur-hoelle.org','fake-mail.cf','fake-mail.ga','fake-mail.ml','fakeinbox.cf','fakeinbox.com','fakeinbox.ga','fakeinbox.ml','fakeinbox.tk','fakeinformation.com','fakemail.fr','fakemailgenerator.com','fakemailz.com','falseaddress.com','fammix.com','fansworldwide.de','fantasymail.de','farifluset.mailexpire.com','fastacura.com','fastchevy.com','fastchrysler.com','fastkawasaki.com','fastmazda.com','fastmitsubishi.com','fastnissan.com','fastsubaru.com','fastsuzuki.com','fasttoyota.com','fastyamaha.com','fatflap.com','fdfdsfds.com','feinripptraeger.de','fettabernett.de','fightallspam.com','fiifke.de','filzmail.com','fishfuse.com','fixmail.tk','fizmail.com','fleckens.hu','flurred.com','flyspam.com','footard.com','forgetmail.com','fornow.eu','fr33mail.info','frapmail.com','free-email.cf','free-email.ga','freemail.ms','freemails.cf','freemails.ga','freemails.ml','freemeilaadressforall.net','freudenkinder.de','freundin.ru','friendlymail.co.uk','fromru.com','front14.org','fuckingduh.com','fudgerub.com','fux0ringduh.com','garliclife.com','gawab.com','gelitik.in','gentlemansclub.de','get-mail.cf','get-mail.ga','get-mail.ml','get-mail.tk','get1mail.com','get2mail.fr','getairmail.cf','getairmail.com','getairmail.ga','getairmail.gq','getairmail.ml','getairmail.tk','getmails.eu','getonemail.com','getonemail.net','ghosttexter.de','girlsundertheinfluence.com','gishpuppy.com','goemailgo.com','gold-profits.info','goldtoolbox.com','golfilla.info','gorillaswithdirtyarmpits.com','gotmail.com','gotmail.net','gotmail.org','gotti.otherinbox.com','gowikibooks.com','gowikicampus.com','gowikicars.com','gowikifilms.com','gowikigames.com','gowikimusic.com','gowikinetwork.com','gowikitravel.com','gowikitv.com','grandmamail.com','grandmasmail.com','great-host.in','greensloth.com','grr.la','gsrv.co.uk','guerillamail.biz','guerillamail.com','guerillamail.net','guerillamail.org','guerrillamail.biz','guerrillamail.com','guerrillamail.de','guerrillamail.info','guerrillamail.net','guerrillamail.org','guerrillamailblock.com','gustr.com','h.mintemail.com','h8s.org','hab-verschlafen.de','habmalnefrage.de','hacccc.com','haltospam.com','harakirimail.com','hartbot.de','hatespam.org','hellodream.mobi','herp.in','herr-der-mails.de','hidemail.de','hidzz.com','hmamail.com','hochsitze.com','home.de','hopemail.biz','hot-mail.cf','hot-mail.ga','hot-mail.gq','hot-mail.ml','hot-mail.tk','hotpop.com','hulapla.de','humn.ws.gy','hush.com','hushmail.com','ich-bin-verrueckt-nach-dir.de','ich-will-net.de','ieatspam.eu','ieatspam.info','ieh-mail.de','ihateyoualot.info','iheartspam.org','ikbenspamvrij.nl','imails.info','imgof.com','imstations.com','inbax.tk','inbox.si','inbox2.info','inboxalias.com','inboxclean.com','inboxclean.org','inboxproxy.com','incognitomail.com','incognitomail.net','incognitomail.org','inerted.com','inmail24.com','insorg-mail.info','instant-mail.de','instantemailaddress.com','ipoo.org','irish2me.com','iroid.com','ist-allein.info','ist-einmalig.de','ist-ganz-allein.de','ist-willig.de','iwi.net','izmail.net','jetable.com','jetable.de','jetable.fr.nf','jetable.net','jetable.org','jetfix.ee','jetzt-bin-ich-dran.com','jn-club.de','jnxjn.com','jobbikszimpatizans.hu','jourrapide.com','jsrsolutions.com','junk1e.com','junkmail.com','junkmail.ga','junkmail.gq','kaffeeschluerfer.com','kaffeeschluerfer.de','kasmail.com','kaspop.com','keepmymail.com','killmail.com','killmail.net','kimsdisk.com','kinglibrary.net','kingsq.ga','kir.ch.tc','klassmaster.com','klassmaster.net','klzlk.com','kommespaeter.de','kook.ml','koszmail.pl','krim.ws','kuh.mu','kulturbetrieb.info','kurzepost.de','l33r.eu','labetteraverouge.at','lackmail.net','lags.us','landmail.co','lass-es-geschehen.de','lastmail.co','lastmail.com','lazyinbox.com','letthemeatspam.com','lhsdv.com','liebt-dich.info','lifebyfood.com','link2mail.net','listomail.com','litedrop.com','loadby.us','login-email.cf','login-email.ga','login-email.ml','login-email.tk','lol.ovpn.to','lookugly.com','lopl.co.cc','lortemail.dk','lovemeleaveme.com','loveyouforever.de','lr7.us','lr78.com','lroid.com','luv2.us','m4ilweb.info','maboard.com','maennerversteherin.com','maennerversteherin.de','mail-filter.com','mail-temporaire.fr','mail.by','mail.htl22.at','mail.mezimages.net','mail.misterpinball.de','mail.svenz.eu','mail114.net','mail15.com','mail2rss.org','mail333.com','mail4days.com','mail4trash.com','mail4u.info','mailbidon.com','mailblocks.com','mailbucket.org','mailcat.biz','mailcatch.*','mailcatch.com','maildrop.cc','maildrop.cf','maildrop.ga','maildrop.gq','maildrop.ml','maildx.com','maileater.com','mailexpire.com','mailfa.tk','mailforspam.com','mailfree.ga','mailfree.gq','mailfree.ml','mailfreeonline.com','mailfs.com','mailguard.me','mailimate.com','mailin8r.com','mailinater.com','mailinator.com','mailinator.gq','mailinator.net','mailinator.org','mailinator.us','mailinator2.com','mailinblack.com','mailincubator.com','mailismagic.com','mailjunk.cf','mailjunk.ga','mailjunk.gq','mailjunk.ml','mailjunk.tk','mailmate.com','mailme.gq','mailme.ir','mailme.lv','mailme24.com','mailmetrash.com','mailmoat.com','mailnator.com','mailnesia.com','mailnull.com','mailpick.biz','mailproxsy.com','mailquack.com','mailrock.biz','mailsac.com','mailscrap.com','mailseal.de','mailshell.com','mailsiphon.com','mailslapping.com','mailslite.com','mailtemp.info','mailtothis.com','mailtrash.net','mailueberfall.de','mailzilla.com','mailzilla.org','mailzilla.orgmbx.cc','makemetheking.com','mamber.net','manifestgenerator.com','manybrain.com','mbx.cc','mciek.com','mega.zik.dj','meine-dateien.info','meine-diashow.de','meine-fotos.info','meine-urlaubsfotos.de','meinspamschutz.de','meltmail.com','messagebeamer.de','metaping.com','mezimages.net','mfsa.ru','mierdamail.com','migumail.com','mintemail.com','mjukglass.nu','mns.ru','moakt.com','mobi.web.id','mobileninja.co.uk','moburl.com','mohmal.com','moncourrier.fr.nf','monemail.fr.nf','monmail.fr.nf','monumentmail.com','ms9.mailslite.com','msa.minsmail.com','msh.mailslite.com','mt2009.com','mt2014.com','mufmail.com','muskelshirt.de','mx0.wwwnew.eu','my-mail.ch','my10minutemail.com','myadult.info','mycleaninbox.net','myemailboxy.com','mymail-in.net','mymailoasis.com','mynetstore.de','mypacks.net','mypartyclip.de','myphantomemail.com','myspaceinc.com','myspaceinc.net','myspaceinc.org','myspacepimpedup.com','myspamless.com','mytemp.email','mytempemail.com','mytop-in.net','mytrashmail.com','mytrashmail.compookmail.com','neomailbox.com','nepwk.com','nervmich.net','nervtmich.net','netmails.com','netmails.net','netterchef.de','netzidiot.de','neue-dateien.de','neverbox.com','nice-4u.com','nmail.cf','no-spam.ws','nobulk.com','noclickemail.com','nogmailspam.info','nomail.xl.cx','nomail2me.com','nomorespamemails.com','nonspam.eu','nonspammer.de','noref.in','nospam.wins.com.br','nospam.ze.tc','nospam4.us','nospamfor.us','nospammail.net','nospamthanks.info','notmailinator.com','notsharingmy.info','nowhere.org','nowmymail.com','ntlhelp.net','nullbox.info','nur-fuer-spam.de','nurfuerspam.de','nus.edu.sg','nwldx.com','nybella.com','objectmail.com','obobbo.com','odaymail.com','office-dateien.de','oikrach.com','one-time.email','oneoffemail.com','oneoffmail.com','onewaymail.com','online.ms','oopi.org','opayq.com','orangatango.com','ordinaryamerican.net','otherinbox.com','ourklips.com','outlawspam.com','ovpn.to','owlpic.com','pancakemail.com','paplease.com','partybombe.de','partyheld.de','pcusers.otherinbox.com','pepbot.com','pfui.ru','phreaker.net','pimpedupmyspace.com','pisem.net','pjjkp.com','pleasedontsendmespam.de','plexolan.de','poczta.onet.pl','politikerclub.de','polizisten-duzer.de','poofy.org','pookmail.com','pornobilder-mal-gratis.com','portsaid.cc','postacin.com','postfach.cc','privacy.net','privy-mail.com','privymail.de','proxymail.eu','prtnx.com','prtz.eu','prydirect.info','pryworld.info','public-files.de','punkass.com','put2.net','putthisinyourspamdatabase.com','pwrby.com','qasti.com','qisdo.com','qisoa.com','qq.com','quantentunnel.de','quickinbox.com','quickmail.nl','qv7.info','radiku.ye.vc','ralib.com','raubtierbaendiger.de','rcpt.at','reallymymail.com','receiveee.chickenkiller.com','receiveee.com','recode.me','reconmail.com','record.me','recursor.net','recyclemail.dk','regbypass.com','regbypass.comsafe-mail.net','rejectmail.com','remail.cf','remail.ga','rhyta.com','rk9.chickenkiller.com','rklips.com','rmqkr.net','rootprompt.org','royal.net','rppkn.com','rtrtr.com','ruffrey.com','s0ny.net','saeuferleber.de','safe-mail.net','safersignup.de','safetymail.info','safetypost.de','sags-per-mail.de','sandelf.de','satka.net','saynotospams.com','scatmail.com','schafmail.de','schmusemail.de','schreib-doch-mal-wieder.de','selfdestructingmail.com','selfdestructingmail.org','sendspamhere.com','senseless-entertainment.com','shared-files.de','sharedmailbox.org','sharklasers.com','shieldedmail.com','shiftmail.com','shinedyoureyes.com','shitmail.me','shitmail.org','shitware.nl','shortmail.net','showslow.de','sibmail.com','sinnlos-mail.de','siria.cc','siteposter.net','skeefmail.com','skeefmail.net','slaskpost.se','slave-auctions.net','slopsbox.com','slushmail.com','smashmail.de','smellfear.com','smellrear.com','sms.at','snakemail.com','sneakemail.com','snkmail.com','sofimail.com','sofort-mail.de','sofortmail.de','softpls.asia','sogetthis.com','sohu.com','soisz.com','solvemail.info','sonnenkinder.org','soodomail.com','soodonims.com','spam-be-gone.com','spam.la','spam.su','spam4.me','spamavert.com','spambob.com','spambob.net','spambob.org','spambog.*','spambog.com','spambog.de','spambog.net','spambog.ru','spambooger.com','spambox.info','spambox.irishspringrealty.com','spambox.us','spamcannon.com','spamcannon.net','spamcero.com','spamcon.org','spamcorptastic.com','spamcowboy.com','spamcowboy.net','spamcowboy.org','spamday.com','spamdecoy.net','spameater.com','spameater.org','spamex.com','spamfighter.cf','spamfighter.ga','spamfighter.gq','spamfighter.ml','spamfighter.tk','spamfree.eu','spamfree24.com','spamfree24.de','spamfree24.eu','spamfree24.info','spamfree24.net','spamfree24.org','spamgoes.in','spamgourmet.com','spamgourmet.net','spamgourmet.org','spamgrube.net','spamherelots.com','spamhereplease.com','spamhole.com','spamify.com','spaminator.de','spamkill.info','spaml.com','spaml.de','spammote.com','spammotel.com','spammuffel.de','spamobox.com','spamoff.de','spamreturn.com','spamsalad.in','spamslicer.com','spamspot.com','spamstack.net','spamthis.co.uk','spamthisplease.com','spamtrail.com','spamtroll.net','speed.1s.fr','sperke.net','spikio.com','spoofmail.de','squizzy.de','sriaus.com','ssoia.com','startkeys.com','stinkefinger.net','stop-my-spam.cf','stop-my-spam.com','stop-my-spam.ga','stop-my-spam.ml','stop-my-spam.tk','streber24.de','streetwisemail.com','stuffmail.de','super-auswahl.de','supergreatmail.com','supermailer.jp','superrito.com','superstachel.de','suremail.info','svk.jp','sweetville.net','sweetxxx.de','tafmail.com','tagesmail.eu','tagyourself.com','talkinator.com','tapchicuoihoi.com','teewars.org','teleworm.com','teleworm.us','temp-mail.com','temp-mail.org','temp.emeraldwebmail.com','temp.headstrong.de','tempail.com','tempalias.com','tempe-mail.com','tempemail.biz','tempemail.co.za','tempemail.com','tempemail.net','tempinbox.co.uk','tempinbox.com','tempmail.it','tempmail2.com','tempmaildemo.com','tempmailer.com','tempomail.fr','temporarily.de','temporarioemail.com.br','temporaryemail.net','temporaryemail.us','temporaryforwarding.com','temporaryinbox.com','tempsky.com','tempthe.net','tempymail.com','terminverpennt.de','test.com','test.de','thanksnospam.info','thankyou2010.com','thecloudindex.com','thepryam.info','thisisnotmyrealemail.com','throam.com','throwawayemailaddress.com','throwawaymail.com','tilien.com','tittbit.in','tmail.ws','tmailinator.com','toiea.com','toomail.biz','topmail-files.de','tortenboxer.de','totalmail.de','tradermail.info','trash-amil.com','trash-mail.at','trash-mail.cf','trash-mail.com','trash-mail.de','trash-mail.ga','trash-mail.gq','trash-mail.ml','trash-mail.tk','trash2009.com','trash2010.com','trash2011.com','trashbox.eu','trashdevil.com','trashdevil.de','trashemail.de','trashmail.at','trashmail.com','trashmail.de','trashmail.me','trashmail.net','trashmail.org','trashmail.ws','trashmailer.com','trashymail.com','trashymail.net','trayna.com','trbvm.com','trickmail.net','trillianpro.com','trimix.cn','tryalert.com','turboprinz.de','turboprinzessin.de','turual.com','twinmail.de','twoweirdtricks.com','tyldd.com','ubismail.net','uggsrock.com','uk2.net','ukr.net','umail.net','unmail.ru','unterderbruecke.de','upliftnow.com','uplipht.com','uroid.com','username.e4ward.com','valemail.net','venompen.com','verlass-mich-nicht.de','veryrealemail.com','vidchart.com','viditag.com','viewcastmedia.com','viewcastmedia.net','viewcastmedia.org','vinbazar.com','vollbio.de','volloeko.de','vomoto.com','vorsicht-bissig.de','vorsicht-scharf.de','vubby.com','walala.org','walkmail.net','war-im-urlaub.de','wbb3.de','webemail.me','webm4il.info','webmail4u.eu','webuser.in','wee.my','weg-werf-email.de','wegwerf-email-addressen.de','wegwerf-emails.de','wegwerfadresse.de','wegwerfemail.com','wegwerfemail.de','wegwerfmail.de','wegwerfmail.info','wegwerfmail.net','wegwerfmail.org','wegwerpmailadres.nl','weibsvolk.de','weibsvolk.org','weinenvorglueck.de','wetrainbayarea.com','wetrainbayarea.org','wh4f.org','whatiaas.com','whatpaas.com','whatsaas.com','whopy.com','whtjddn.33mail.com','whyspam.me','wickmail.net','wilemail.com','will-hier-weg.de','willhackforfood.biz','willselfdestruct.com','winemaven.info','wir-haben-nachwuchs.de','wir-sind-cool.org','wirsindcool.de','wmail.cf','wolke7.net','wollan.info','women-at-work.org','wormseo.cn','wronghead.com','wuzup.net','wuzupmail.net','www.e4ward.com','www.gishpuppy.com','www.mailinator.com','wwwnew.eu','xagloo.com','xemaps.com','xents.com','xmail.com','xmaily.com','xoxox.cc','xoxy.net','xsecurity.org','xyzfree.net','yapped.net','yeah.net','yep.it','yert.ye.vc','yesey.net','yogamaven.com','yomail.info','yopmail.com','yopmail.fr','yopmail.gq','yopmail.net','yopweb.com','youmail.ga','youmailr.com','ypmail.webarnak.fr.eu.org','ystea.org','yuurok.com','yzbid.com','za.com','zehnminutenmail.de','zetmail.com','zippymail.info','zoaxe.com','zoemail.com','zoemail.net','zoemail.org','zomg.info','zweb.in','zxcv.com','zxcvbnm.com','zzz.com');
|
30 |
+
public static $country = array('A1' =>'ANONYMOUS PROXY','A2' =>'SATELLITE PROVIDER','O1' =>'OTHER COUNTRY','AF' => 'AFGHANISTAN','AL' => 'ALBANIA','DZ' => 'ALGERIA','AS' => 'AMERICAN SAMOA','AD' => 'ANDORRA','AO' => 'ANGOLA','AI' => 'ANGUILLA','AQ' => 'ANTARCTICA','AG' => 'ANTIGUA AND BARBUDA','AR' => 'ARGENTINA','AM' => 'ARMENIA','AW' => 'ARUBA','AU' => 'AUSTRALIA','AT' => 'AUSTRIA','AZ' => 'AZERBAIJAN','BS' => 'BAHAMAS','BH' => 'BAHRAIN','BD' => 'BANGLADESH','BB' => 'BARBADOS','BY' => 'BELARUS','BE' => 'BELGIUM','BZ' => 'BELIZE','BJ' => 'BENIN','BM' => 'BERMUDA','BT' => 'BHUTAN','BO' => 'BOLIVIA','BA' => 'BOSNIA AND HERZEGOVINA','BW' => 'BOTSWANA','BV' => 'BOUVET ISLAND','BR' => 'BRAZIL','IO' => 'BRITISH INDIAN OCEAN TERRITORY','BN' => 'BRUNEI DARUSSALAM','BG' => 'BULGARIA','BF' => 'BURKINA FASO','BI' => 'BURUNDI','KH' => 'CAMBODIA','CM' => 'CAMEROON','CA' => 'CANADA','CV' => 'CAPE VERDE','KY' => 'CAYMAN ISLANDS','CF' => 'CENTRAL AFRICAN REPUBLIC','TD' => 'CHAD','CL' => 'CHILE','CN' => 'CHINA','CX' => 'CHRISTMAS ISLAND','CC' => 'COCOS (KEELING) ISLANDS','CO' => 'COLOMBIA','KM' => 'COMOROS','CG' => 'CONGO','CD' => 'CONGO, THE DEMOCRATIC REPUBLIC OF THE','CK' => 'COOK ISLANDS','CR' => 'COSTA RICA','CI' => 'COTE D IVOIRE','HR' => 'CROATIA','CU' => 'CUBA','CY' => 'CYPRUS','CZ' => 'CZECH REPUBLIC','DK' => 'DENMARK','DJ' => 'DJIBOUTI','DM' => 'DOMINICA','DO' => 'DOMINICAN REPUBLIC','TP' => 'EAST TIMOR','EC' => 'ECUADOR','EG' => 'EGYPT','SV' => 'EL SALVADOR','GQ' => 'EQUATORIAL GUINEA','ER' => 'ERITREA','EE' => 'ESTONIA','ET' => 'ETHIOPIA','FK' => 'FALKLAND ISLANDS (MALVINAS)','FO' => 'FAROE ISLANDS','FJ' => 'FIJI','FI' => 'FINLAND','FR' => 'FRANCE','GF' => 'FRENCH GUIANA','PF' => 'FRENCH POLYNESIA','TF' => 'FRENCH SOUTHERN TERRITORIES','GA' => 'GABON','GM' => 'GAMBIA','GE' => 'GEORGIA','DE' => 'GERMANY','GH' => 'GHANA','GI' => 'GIBRALTAR','GR' => 'GREECE','GL' => 'GREENLAND','GD' => 'GRENADA','GP' => 'GUADELOUPE','GU' => 'GUAM','GT' => 'GUATEMALA','GN' => 'GUINEA','GW' => 'GUINEA-BISSAU','GY' => 'GUYANA','HT' => 'HAITI','HM' => 'HEARD ISLAND AND MCDONALD ISLANDS','VA' => 'HOLY SEE (VATICAN CITY STATE)','HN' => 'HONDURAS','HK' => 'HONG KONG','HU' => 'HUNGARY','IS' => 'ICELAND','IN' => 'INDIA','ID' => 'INDONESIA','IR' => 'IRAN, ISLAMIC REPUBLIC OF','IQ' => 'IRAQ','IE' => 'IRELAND','IL' => 'ISRAEL','IT' => 'ITALY','JM' => 'JAMAICA','JP' => 'JAPAN','JO' => 'JORDAN','KZ' => 'KAZAKSTAN','KE' => 'KENYA','KI' => 'KIRIBATI','KP' => 'KOREA DEMOCRATIC PEOPLES REPUBLIC OF','KR' => 'KOREA REPUBLIC OF','KW' => 'KUWAIT','KG' => 'KYRGYZSTAN','LA' => 'LAO PEOPLES DEMOCRATIC REPUBLIC','LV' => 'LATVIA','LB' => 'LEBANON','LS' => 'LESOTHO','LR' => 'LIBERIA','LY' => 'LIBYAN ARAB JAMAHIRIYA','LI' => 'LIECHTENSTEIN','LT' => 'LITHUANIA','LU' => 'LUXEMBOURG','MO' => 'MACAU','MK' => 'MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF','MG' => 'MADAGASCAR','MW' => 'MALAWI','MY' => 'MALAYSIA','MV' => 'MALDIVES','ML' => 'MALI','MT' => 'MALTA','MH' => 'MARSHALL ISLANDS','MQ' => 'MARTINIQUE','MR' => 'MAURITANIA','MU' => 'MAURITIUS','YT' => 'MAYOTTE','MX' => 'MEXICO','FM' => 'MICRONESIA, FEDERATED STATES OF','MD' => 'MOLDOVA, REPUBLIC OF','MC' => 'MONACO','MN' => 'MONGOLIA','MS' => 'MONTSERRAT','MA' => 'MOROCCO','MZ' => 'MOZAMBIQUE','MM' => 'MYANMAR','NA' => 'NAMIBIA','NR' => 'NAURU','NP' => 'NEPAL','NL' => 'NETHERLANDS','AN' => 'NETHERLANDS ANTILLES','NC' => 'NEW CALEDONIA','NZ' => 'NEW ZEALAND','NI' => 'NICARAGUA','NE' => 'NIGER','NG' => 'NIGERIA','NU' => 'NIUE','NF' => 'NORFOLK ISLAND','MP' => 'NORTHERN MARIANA ISLANDS','NO' => 'NORWAY','OM' => 'OMAN','PK' => 'PAKISTAN','PW' => 'PALAU','PS' => 'PALESTINIAN TERRITORY, OCCUPIED','PA' => 'PANAMA','PG' => 'PAPUA NEW GUINEA','PY' => 'PARAGUAY','PE' => 'PERU','PH' => 'PHILIPPINES','PN' => 'PITCAIRN','PL' => 'POLAND','PT' => 'PORTUGAL','PR' => 'PUERTO RICO','QA' => 'QATAR','RE' => 'REUNION','RO' => 'ROMANIA','RU' => 'RUSSIAN FEDERATION','RW' => 'RWANDA','SH' => 'SAINT HELENA','KN' => 'SAINT KITTS AND NEVIS','LC' => 'SAINT LUCIA','PM' => 'SAINT PIERRE AND MIQUELON','VC' => 'SAINT VINCENT AND THE GRENADINES','WS' => 'SAMOA','SM' => 'SAN MARINO','ST' => 'SAO TOME AND PRINCIPE','SA' => 'SAUDI ARABIA','SN' => 'SENEGAL','SC' => 'SEYCHELLES','SL' => 'SIERRA LEONE','SG' => 'SINGAPORE','SK' => 'SLOVAKIA','SI' => 'SLOVENIA','SB' => 'SOLOMON ISLANDS','SO' => 'SOMALIA','ZA' => 'SOUTH AFRICA','GS' => 'SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS','ES' => 'SPAIN','LK' => 'SRI LANKA','SD' => 'SUDAN','SR' => 'SURINAME','SJ' => 'SVALBARD AND JAN MAYEN','SZ' => 'SWAZILAND','SE' => 'SWEDEN','CH' => 'SWITZERLAND','SY' => 'SYRIAN ARAB REPUBLIC','TW' => 'TAIWAN, PROVINCE OF CHINA','TJ' => 'TAJIKISTAN','TZ' => 'TANZANIA, UNITED REPUBLIC OF','TH' => 'THAILAND','TG' => 'TOGO','TK' => 'TOKELAU','TO' => 'TONGA','TT' => 'TRINIDAD AND TOBAGO','TN' => 'TUNISIA','TR' => 'TURKEY','TM' => 'TURKMENISTAN','TC' => 'TURKS AND CAICOS ISLANDS','TV' => 'TUVALU','UG' => 'UGANDA','UA' => 'UKRAINE','AE' => 'UNITED ARAB EMIRATES','GB' => 'UNITED KINGDOM','US' => 'UNITED STATES','UM' => 'UNITED STATES MINOR OUTLYING ISLANDS','UY' => 'URUGUAY','UZ' => 'UZBEKISTAN','VU' => 'VANUATU','VE' => 'VENEZUELA','VN' => 'VIET NAM','VG' => 'VIRGIN ISLANDS, BRITISH','VI' => 'VIRGIN ISLANDS, U.S.','WF' => 'WALLIS AND FUTUNA','EH' => 'WESTERN SAHARA','YE' => 'YEMEN','YU' => 'YUGOSLAVIA','ZM' => 'ZAMBIA','ZW' => 'ZIMBABWE');
|
31 |
+
|
32 |
+
const RECAPTCHA_VERIFY = 'https://www.google.com/recaptcha/api/siteverify';
|
33 |
+
const FAQ_PAYMENT_URL = 'https://faq.miniorange.com/knowledgebase/all-i-want-to-do-is-upgrade-to-a-premium-licence/';
|
34 |
+
const LOGIN_ATTEMPTS_EXCEEDED = "User exceeded allowed login attempts.";
|
35 |
+
const BLOCKED_BY_ADMIN = "Blocked by Admin";
|
36 |
+
const IP_RANGE_BLOCKING = "IP Range Blocking";
|
37 |
+
const FAILED_LOGIN_ATTEMPTS_FROM_NEW_IP = "Failed login attempts from new IP.";
|
38 |
+
const LOGGED_IN_FROM_NEW_IP = "Logged in from new IP.";
|
39 |
+
const ATTACK_LIMIT_EXCEEDED = "ale";
|
40 |
+
const RATE_LIMIT_EXCEEDED = "rle";
|
41 |
+
const RATE_LIMIT_EXCEEDED_CRAWLER_ATTACK= "rlecrawler";
|
42 |
+
const PLUGIN = 'plugin';
|
43 |
+
const THEMES = 'themes';
|
44 |
+
const WPFILES = 'wpfiles';
|
45 |
+
const DATABASE = 'db';
|
46 |
+
const CloudLockedOut ='https://faq.miniorange.com/knowledgebase/how-to-gain-access-to-my-website-if-i-get-locked-out/';
|
47 |
+
const OnPremiseLockedOut ='https://faq.miniorange.com/knowledgebase/i-am-locked-cant-access-my-account-what-do-i-do/';
|
48 |
+
|
49 |
+
public static $repo_status_code = array(-96 => 'Maximum execution time exceeded while downloading files from repository. Please contact miniOrange.', -97 => '<i>Uploads Folder</i> permission denied', -98 => '2 Factor authentication plugin unable to reach wordpress repository files. Please contact miniOrange.', -99 => 'Unable to download Wordpress, plugins and themes from Repository', -100 => 'Unable to unzip the Wordpress, plugins and themes');
|
50 |
+
|
51 |
+
public static $host = 'http://scanner.api.xecurify.com/malwareservice/rest/file/upload';
|
52 |
+
|
53 |
+
public static $hostname = 'scanner.api.xecurify.com';
|
54 |
+
|
55 |
+
public static $quick_scan_configuration = array('plugin_scan' => 1 ,
|
56 |
+
'theme_scan' => 1,
|
57 |
+
'core_scan' => 0,
|
58 |
+
'file_extension' => "",
|
59 |
+
'check_vulnerable' => 1,
|
60 |
+
'check_sql' => 1,
|
61 |
+
'check_rfi' => 1,
|
62 |
+
'ext_link_check' => 0,
|
63 |
+
'check_repo' => 0,
|
64 |
+
'path_skip' => "",
|
65 |
+
'type_scan' => "Quick Scan"
|
66 |
+
);
|
67 |
+
public static $standard_scan_configuration = array('plugin_scan' => 1 ,
|
68 |
+
'theme_scan' => 1,
|
69 |
+
'core_scan' => 0,
|
70 |
+
'file_extension' => "",
|
71 |
+
'check_vulnerable' => 1,
|
72 |
+
'check_sql' => 1,
|
73 |
+
'check_rfi' => 1,
|
74 |
+
'ext_link_check' => 1,
|
75 |
+
'check_repo' => 1,
|
76 |
+
'path_skip' => "",
|
77 |
+
'type_scan' => "Standard Scan"
|
78 |
+
);
|
79 |
+
|
80 |
+
function __construct()
|
81 |
+
{
|
82 |
+
$this->define_global();
|
83 |
+
}
|
84 |
+
|
85 |
+
function define_global()
|
86 |
+
{
|
87 |
+
global $wpnsDbQueries,$moWpnsUtility,$mo2f_dirName,$Mo2fdbQueries;
|
88 |
+
$wpnsDbQueries = new MoWpnsDB();
|
89 |
+
$moWpnsUtility = new MoWpnsUtility();
|
90 |
+
$mo2f_dirName = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR;
|
91 |
+
$Mo2fdbQueries = new Mo2fDB();
|
92 |
+
}
|
93 |
+
|
94 |
+
}
|
95 |
+
new MoWpnsConstants;
|
96 |
+
|
97 |
?>
|
helper/curl.php
CHANGED
@@ -1,284 +1,285 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class MocURL
|
4 |
-
{
|
5 |
-
|
6 |
-
public static function create_customer($email, $company, $password, $phone = '', $first_name = '', $last_name = '')
|
7 |
-
{
|
8 |
-
$url = MoWpnsConstants::HOST_NAME . '/moas/rest/customer/add';
|
9 |
-
$fields = array (
|
10 |
-
'companyName' => $company,
|
11 |
-
'areaOfInterest' => 'WordPress 2 Factor Authentication Plugin',
|
12 |
-
'productInterest' => 'API_2FA',
|
13 |
-
'firstname' => $first_name,
|
14 |
-
'lastname' => $last_name,
|
15 |
-
'email' => $email,
|
16 |
-
'phone' => $phone,
|
17 |
-
'password' => $password
|
18 |
-
);
|
19 |
-
$json = json_encode($fields);
|
20 |
-
$response = self::callAPI($url, $json);
|
21 |
-
return $response;
|
22 |
-
}
|
23 |
-
|
24 |
-
public static function get_customer_key($email, $password)
|
25 |
-
{
|
26 |
-
$url = MoWpnsConstants::HOST_NAME. "/moas/rest/customer/key";
|
27 |
-
$fields = array (
|
28 |
-
'email' => $email,
|
29 |
-
'password' => $password
|
30 |
-
);
|
31 |
-
$json = json_encode($fields);
|
32 |
-
$response = self::callAPI($url, $json);
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
$
|
40 |
-
|
41 |
-
|
42 |
-
$
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
$
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
'
|
58 |
-
'
|
59 |
-
'
|
60 |
-
'
|
61 |
-
'
|
62 |
-
'
|
63 |
-
|
64 |
-
|
65 |
-
$
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
$
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
$
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
$
|
86 |
-
$
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
'
|
91 |
-
'
|
92 |
-
'
|
93 |
-
'
|
94 |
-
|
95 |
-
|
96 |
-
$
|
97 |
-
$
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
$
|
105 |
-
$
|
106 |
-
|
107 |
-
'
|
108 |
-
'
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
$
|
120 |
-
$
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
'
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
$
|
129 |
-
$
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
$
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
$
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
$
|
149 |
-
$
|
150 |
-
$
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
$
|
158 |
-
$
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
$headers
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
$
|
181 |
-
$
|
182 |
-
$
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
$
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
'
|
220 |
-
'
|
221 |
-
|
222 |
-
'
|
223 |
-
'
|
224 |
-
'
|
225 |
-
'
|
226 |
-
'
|
227 |
-
'
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
$
|
232 |
-
$
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
$currentTimestampInMillis =
|
241 |
-
|
242 |
-
|
243 |
-
$
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
"
|
248 |
-
"
|
249 |
-
"
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
//For
|
258 |
-
|
259 |
-
|
260 |
-
$
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
curl_setopt($ch,
|
265 |
-
curl_setopt($ch,
|
266 |
-
curl_setopt($ch,
|
267 |
-
curl_setopt(
|
268 |
-
|
269 |
-
|
270 |
-
curl_setopt($ch,
|
271 |
-
|
272 |
-
curl_setopt($ch,
|
273 |
-
curl_setopt($ch,
|
274 |
-
$
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
}
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class MocURL
|
4 |
+
{
|
5 |
+
|
6 |
+
public static function create_customer($email, $company, $password, $phone = '', $first_name = '', $last_name = '')
|
7 |
+
{
|
8 |
+
$url = MoWpnsConstants::HOST_NAME . '/moas/rest/customer/add';
|
9 |
+
$fields = array (
|
10 |
+
'companyName' => $company,
|
11 |
+
'areaOfInterest' => 'WordPress 2 Factor Authentication Plugin',
|
12 |
+
'productInterest' => 'API_2FA',
|
13 |
+
'firstname' => $first_name,
|
14 |
+
'lastname' => $last_name,
|
15 |
+
'email' => $email,
|
16 |
+
'phone' => $phone,
|
17 |
+
'password' => $password
|
18 |
+
);
|
19 |
+
$json = json_encode($fields);
|
20 |
+
$response = self::callAPI($url, $json);
|
21 |
+
return $response;
|
22 |
+
}
|
23 |
+
|
24 |
+
public static function get_customer_key($email, $password)
|
25 |
+
{
|
26 |
+
$url = MoWpnsConstants::HOST_NAME. "/moas/rest/customer/key";
|
27 |
+
$fields = array (
|
28 |
+
'email' => $email,
|
29 |
+
'password' => $password
|
30 |
+
);
|
31 |
+
$json = json_encode($fields);
|
32 |
+
$response = self::callAPI($url, $json);
|
33 |
+
|
34 |
+
return $response;
|
35 |
+
}
|
36 |
+
|
37 |
+
function submit_contact_us( $q_email, $q_phone, $query )
|
38 |
+
{
|
39 |
+
$current_user = wp_get_current_user();
|
40 |
+
$url = MoWpnsConstants::HOST_NAME . "/moas/rest/customer/contact-us";
|
41 |
+
|
42 |
+
$is_nc_with_1_user = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NNC', 'get_option');
|
43 |
+
$is_ec_with_1_user = ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
44 |
+
$onprem = MO2F_IS_ONPREM ?'O':'C';
|
45 |
+
|
46 |
+
$customer_feature = "";
|
47 |
+
|
48 |
+
if ( $is_ec_with_1_user ) {
|
49 |
+
$customer_feature = "V1";
|
50 |
+
}else if ( $is_nc_with_1_user ) {
|
51 |
+
$customer_feature = "V3";
|
52 |
+
}
|
53 |
+
global $moWpnsUtility;
|
54 |
+
$query = '[WordPress 2 Factor Authentication Plugin: ' .$onprem.$customer_feature . ' - V '.MO2F_VERSION.'- Ticket Id:'.$moWpnsUtility->getFeatureStatus().']: ' . $query;
|
55 |
+
|
56 |
+
$fields = array(
|
57 |
+
'firstName' => $current_user->user_firstname,
|
58 |
+
'lastName' => $current_user->user_lastname,
|
59 |
+
'company' => $_SERVER['SERVER_NAME'],
|
60 |
+
'email' => $q_email,
|
61 |
+
'ccEmail' => '2fasupport@xecurify.com',
|
62 |
+
'phone' => $q_phone,
|
63 |
+
'query' => $query
|
64 |
+
);
|
65 |
+
$field_string = json_encode( $fields );
|
66 |
+
$response = self::callAPI($url, $field_string);
|
67 |
+
|
68 |
+
return true;
|
69 |
+
}
|
70 |
+
|
71 |
+
function lookupIP($ip)
|
72 |
+
{
|
73 |
+
$url = MoWpnsConstants::HOST_NAME. "/moas/rest/security/iplookup";
|
74 |
+
$fields = array (
|
75 |
+
'ip' => $ip
|
76 |
+
);
|
77 |
+
$json = json_encode($fields);
|
78 |
+
$response = self::callAPI($url, $json);
|
79 |
+
return $response;
|
80 |
+
}
|
81 |
+
//CHECK
|
82 |
+
function send_otp_token($auth_type, $phone, $email)
|
83 |
+
{
|
84 |
+
|
85 |
+
$url = MoWpnsConstants::HOST_NAME . '/moas/api/auth/challenge';
|
86 |
+
$customerKey = MoWpnsConstants::DEFAULT_CUSTOMER_KEY;
|
87 |
+
$apiKey = MoWpnsConstants::DEFAULT_API_KEY;
|
88 |
+
|
89 |
+
$fields = array(
|
90 |
+
'customerKey' => $customerKey,
|
91 |
+
'email' => $email,
|
92 |
+
'phone' => $phone,
|
93 |
+
'authType' => $auth_type,
|
94 |
+
'transactionName' => 'miniOrange 2-Factor'
|
95 |
+
);
|
96 |
+
$json = json_encode($fields);
|
97 |
+
$authHeader = $this->createAuthHeader($customerKey,$apiKey);
|
98 |
+
$response = self::callAPI($url, $json, $authHeader);
|
99 |
+
return $response;
|
100 |
+
}
|
101 |
+
|
102 |
+
function validate_recaptcha($ip,$response)
|
103 |
+
{
|
104 |
+
$url = MoWpnsConstants::RECAPTCHA_VERIFY;
|
105 |
+
$json = "";
|
106 |
+
$fields = array(
|
107 |
+
'response' => $response,
|
108 |
+
'secret' => get_option('mo_wpns_recaptcha_secret_key'),
|
109 |
+
'remoteip' => $ip
|
110 |
+
);
|
111 |
+
foreach($fields as $key=>$value) { $json .= $key.'='.$value.'&'; }
|
112 |
+
rtrim($json, '&');
|
113 |
+
$response = self::callAPI($url, $json, null);
|
114 |
+
return $response;
|
115 |
+
}
|
116 |
+
|
117 |
+
function validate_otp_token($transactionId,$otpToken)
|
118 |
+
{
|
119 |
+
$url = MoWpnsConstants::HOST_NAME . '/moas/api/auth/validate';
|
120 |
+
$customerKey = MoWpnsConstants::DEFAULT_CUSTOMER_KEY;
|
121 |
+
$apiKey = MoWpnsConstants::DEFAULT_API_KEY;
|
122 |
+
|
123 |
+
$fields = array(
|
124 |
+
'txId' => $transactionId,
|
125 |
+
'token' => $otpToken,
|
126 |
+
);
|
127 |
+
|
128 |
+
$json = json_encode($fields);
|
129 |
+
$authHeader = $this->createAuthHeader($customerKey,$apiKey);
|
130 |
+
$response = self::callAPI($url, $json, $authHeader);
|
131 |
+
return $response;
|
132 |
+
}
|
133 |
+
|
134 |
+
function check_customer($email)
|
135 |
+
{
|
136 |
+
$url = MoWpnsConstants::HOST_NAME . "/moas/rest/customer/check-if-exists";
|
137 |
+
$fields = array(
|
138 |
+
'email' => $email,
|
139 |
+
);
|
140 |
+
$json = json_encode($fields);
|
141 |
+
$response = self::callAPI($url, $json);
|
142 |
+
return $response;
|
143 |
+
}
|
144 |
+
|
145 |
+
function mo_wpns_forgot_password()
|
146 |
+
{
|
147 |
+
|
148 |
+
$url = MoWpnsConstants::HOST_NAME . '/moas/rest/customer/password-reset';
|
149 |
+
$email = get_option('mo2f_email');
|
150 |
+
$customerKey = get_option('mo2f_customerKey');
|
151 |
+
$apiKey = get_option('mo2f_api_key');
|
152 |
+
|
153 |
+
$fields = array(
|
154 |
+
'email' => $email
|
155 |
+
);
|
156 |
+
|
157 |
+
$json = json_encode($fields);
|
158 |
+
$authHeader = $this->createAuthHeader($customerKey,$apiKey);
|
159 |
+
$response = self::callAPI($url, $json, $authHeader);
|
160 |
+
return $response;
|
161 |
+
}
|
162 |
+
|
163 |
+
function send_notification($toEmail,$subject,$content,$fromEmail,$fromName,$toName)
|
164 |
+
{
|
165 |
+
$headers = "MIME-Version: 1.0" . "\r\n";
|
166 |
+
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
|
167 |
+
|
168 |
+
$headers .= 'From: '.$fromName.'<'.$fromEmail.'>' . "\r\n";
|
169 |
+
|
170 |
+
mail($toEmail,$subject,$content,$headers);
|
171 |
+
|
172 |
+
return json_encode(array("status"=>'SUCCESS','statusMessage'=>'SUCCESS'));
|
173 |
+
}
|
174 |
+
|
175 |
+
//added for feedback
|
176 |
+
|
177 |
+
function send_email_alert($email,$phone,$message,$feedback_option){
|
178 |
+
global $moWpnsUtility;
|
179 |
+
global $user;
|
180 |
+
$url = MoWpnsConstants::HOST_NAME . '/moas/api/notify/send';
|
181 |
+
$customerKey = MoWpnsConstants::DEFAULT_CUSTOMER_KEY;
|
182 |
+
$apiKey = MoWpnsConstants::DEFAULT_API_KEY;
|
183 |
+
$fromEmail = 'no-reply@xecurify.com';
|
184 |
+
if ($feedback_option == 'mo_wpns_skip_feedback')
|
185 |
+
{
|
186 |
+
$subject = "Deactivate [Feedback Skipped]: WordPress miniOrange 2-Factor Plugin";
|
187 |
+
}
|
188 |
+
elseif ($feedback_option == 'mo_wpns_feedback')
|
189 |
+
{
|
190 |
+
$subject = "Feedback: WordPress miniOrange 2-Factor Plugin - ". $email;;
|
191 |
+
}
|
192 |
+
elseif ($feedback_option == 'mo_wpns_rating')
|
193 |
+
{
|
194 |
+
$subject = "Feedback: WordPress miniOrange 2-Factor Plugin - ". $email;;
|
195 |
+
}
|
196 |
+
|
197 |
+
$user = wp_get_current_user();
|
198 |
+
|
199 |
+
$is_nc_with_1_user = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option') && MoWpnsUtility::get_mo2f_db_option('mo2f_is_NNC', 'get_option');
|
200 |
+
$is_ec_with_1_user = ! MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
|
201 |
+
$onprem = MO2F_IS_ONPREM ? 'O':'C';
|
202 |
+
|
203 |
+
$customer_feature = "";
|
204 |
+
|
205 |
+
|
206 |
+
if ( $is_ec_with_1_user ) {
|
207 |
+
$customer_feature = "V1";
|
208 |
+
}else if ( $is_nc_with_1_user ) {
|
209 |
+
$customer_feature = "V3";
|
210 |
+
}
|
211 |
+
|
212 |
+
$query = '[WordPress 2 Factor Authentication Plugin: ' .$onprem.$customer_feature . ' - V '.MO2F_VERSION.']: ' . $message;
|
213 |
+
|
214 |
+
|
215 |
+
$content='<div >Hello, <br><br>Ticket ID:'.$moWpnsUtility->getFeatureStatus().'<br><br>First Name :'.$user->user_firstname.'<br><br>Last Name :'.$user->user_lastname.' <br><br>Company :<a href="'.$_SERVER['SERVER_NAME'].'" target="_blank" >'.$_SERVER['SERVER_NAME'].'</a><br><br>Phone Number :'.$phone.'<br><br>Email :<a href="mailto:'.$email.'" target="_blank">'.$email.'</a><br><br>Query :'.$query.'</div>';
|
216 |
+
|
217 |
+
|
218 |
+
$fields = array(
|
219 |
+
'customerKey' => $customerKey,
|
220 |
+
'sendEmail' => true,
|
221 |
+
'email' => array(
|
222 |
+
'customerKey' => $customerKey,
|
223 |
+
'fromEmail' => $fromEmail,
|
224 |
+
'fromName' => 'Xecurify',
|
225 |
+
'toEmail' => '2fasupport@xecurify.com',
|
226 |
+
'toName' => '2fasupport@xecurify.com',
|
227 |
+
'subject' => $subject,
|
228 |
+
'content' => $content
|
229 |
+
),
|
230 |
+
);
|
231 |
+
$field_string = json_encode($fields);
|
232 |
+
$authHeader = $this->createAuthHeader($customerKey,$apiKey);
|
233 |
+
$response = self::callAPI($url, $field_string,$authHeader);
|
234 |
+
return $response;
|
235 |
+
|
236 |
+
}
|
237 |
+
|
238 |
+
|
239 |
+
private static function createAuthHeader($customerKey, $apiKey) {
|
240 |
+
$currentTimestampInMillis = round(microtime(true) * 1000);
|
241 |
+
$currentTimestampInMillis = number_format($currentTimestampInMillis, 0, '', '');
|
242 |
+
|
243 |
+
$stringToHash = $customerKey . $currentTimestampInMillis . $apiKey;
|
244 |
+
$authHeader = hash("sha512", $stringToHash);
|
245 |
+
|
246 |
+
$header = array (
|
247 |
+
"Content-Type: application/json",
|
248 |
+
"Customer-Key: $customerKey",
|
249 |
+
"Timestamp: $currentTimestampInMillis",
|
250 |
+
"Authorization: $authHeader"
|
251 |
+
);
|
252 |
+
return $header;
|
253 |
+
}
|
254 |
+
|
255 |
+
|
256 |
+
private static function callAPI($url, $json_string, $headers = array("Content-Type: application/json")) {
|
257 |
+
//For testing (0, false)
|
258 |
+
//For Production (2, true)
|
259 |
+
|
260 |
+
$sslhost=2;
|
261 |
+
$sslpeer=true;
|
262 |
+
|
263 |
+
$ch = curl_init($url);
|
264 |
+
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
265 |
+
curl_setopt($ch, CURLOPT_ENCODING, "");
|
266 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
267 |
+
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
|
268 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, $sslhost );
|
269 |
+
|
270 |
+
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, $sslpeer );
|
271 |
+
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
|
272 |
+
if(!is_null($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
273 |
+
curl_setopt($ch, CURLOPT_POST, true);
|
274 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_string);
|
275 |
+
$content = curl_exec($ch);
|
276 |
+
|
277 |
+
if (curl_errno($ch)) {
|
278 |
+
echo 'Request Error:' . curl_error($ch);
|
279 |
+
exit();
|
280 |
+
}
|
281 |
+
|
282 |
+
curl_close($ch);
|
283 |
+
return $content;
|
284 |
+
}
|
285 |
+
}
|
helper/dashboard_security_notification.php
CHANGED
@@ -1,264 +1,270 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class miniorange_security_notification{
|
4 |
-
|
5 |
-
|
6 |
-
function my_custom_dashboard_widgets() {
|
7 |
-
global $wp_meta_boxes;
|
8 |
-
|
9 |
-
wp_add_dashboard_widget('custom_help_widget', 'MiniOrange Website Security',array($this, 'custom_dashboard_help'));
|
10 |
-
}
|
11 |
-
|
12 |
-
function custom_dashboard_help() {
|
13 |
-
|
14 |
-
global $wpdb,$type_of_scan,$total_scanned_files, $wpnsDbQueries;
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
$fake_domains = get_site_option('number_of_fake_reg');
|
19 |
-
if($fake_domains == false){
|
20 |
-
$fake_domains = 0;
|
21 |
-
}
|
22 |
-
$failed_transaction = $wpnsDbQueries->get_count_of_attacks_blocked();
|
23 |
-
$weakPass = get_site_option('users_with_weak_pass');
|
24 |
-
if($weakPass == false){
|
25 |
-
$weakPass = 0;
|
26 |
-
}
|
27 |
-
|
28 |
-
$array = $wpdb->get_results("SELECT MAX(id) as id FROM ".$wpdb->base_prefix.'wpns_malware_scan_report');
|
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=".$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("SELECT * FROM ".$wpdb->base_prefix."wpns_malware_scan_report where id=".$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;
|
41 |
-
}
|
42 |
-
if($type_of_scan === null)
|
43 |
-
$type_of_scan ='Not Scanned Yet';
|
44 |
-
|
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 |
-
{
|
68 |
-
echo "<html>
|
69 |
-
<head>
|
70 |
-
<style>
|
71 |
-
|
72 |
-
|
73 |
-
p{
|
74 |
-
margin:0px;
|
75 |
-
|
76 |
-
</style>
|
77 |
-
</head>
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
$
|
90 |
-
$
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
<td style="
|
99 |
-
|
100 |
-
</tr>
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
</
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
<
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
</
|
188 |
-
|
189 |
-
<tr>
|
190 |
-
<td
|
191 |
-
|
192 |
-
<td
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
<
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
</
|
234 |
-
|
235 |
-
<tr>
|
236 |
-
<td
|
237 |
-
|
238 |
-
<td
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
}
|
261 |
-
|
262 |
-
}
|
263 |
-
|
264 |
-
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class miniorange_security_notification{
|
4 |
+
|
5 |
+
|
6 |
+
function my_custom_dashboard_widgets() {
|
7 |
+
global $wp_meta_boxes;
|
8 |
+
|
9 |
+
wp_add_dashboard_widget('custom_help_widget', 'MiniOrange Website Security',array($this, 'custom_dashboard_help'));
|
10 |
+
}
|
11 |
+
|
12 |
+
function custom_dashboard_help() {
|
13 |
+
|
14 |
+
global $wpdb,$type_of_scan,$total_scanned_files, $wpnsDbQueries;
|
15 |
+
|
16 |
+
|
17 |
+
|
18 |
+
$fake_domains = get_site_option('number_of_fake_reg');
|
19 |
+
if($fake_domains == false){
|
20 |
+
$fake_domains = 0;
|
21 |
+
}
|
22 |
+
$failed_transaction = $wpnsDbQueries->get_count_of_attacks_blocked();
|
23 |
+
$weakPass = get_site_option('users_with_weak_pass');
|
24 |
+
if($weakPass == false){
|
25 |
+
$weakPass = 0;
|
26 |
+
}
|
27 |
+
|
28 |
+
$array = $wpdb->get_results("SELECT MAX(id) as id FROM ".$wpdb->base_prefix.'wpns_malware_scan_report');
|
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=".$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("SELECT * FROM ".$wpdb->base_prefix."wpns_malware_scan_report where id=".$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;
|
41 |
+
}
|
42 |
+
if($type_of_scan === null)
|
43 |
+
$type_of_scan ='Not Scanned Yet';
|
44 |
+
|
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 |
+
{
|
68 |
+
echo "<html>
|
69 |
+
<head>
|
70 |
+
<style>
|
71 |
+
|
72 |
+
|
73 |
+
p{
|
74 |
+
margin:0px;
|
75 |
+
|
76 |
+
</style>
|
77 |
+
</head>
|
78 |
+
|
79 |
+
<div style='width:100%;background-color:#555f5f;padding-top:10px;''>
|
80 |
+
<div style='font-size:25px;color:white;text-align:center'>
|
81 |
+
<strong style='font-weight:300;''>Remaining Transactions <span style='color:orange;'>[OTPs]</strong>
|
82 |
+
|
83 |
+
</div>
|
84 |
+
<hr>
|
85 |
+
|
86 |
+
";
|
87 |
+
|
88 |
+
$EmailTransactions = MoWpnsUtility::get_mo2f_db_option('cmVtYWluaW5nT1RQ', 'site_option');
|
89 |
+
$EmailTransactions = $EmailTransactions? $EmailTransactions : 0;
|
90 |
+
$SMSTransactions = get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z')?get_site_option('cmVtYWluaW5nT1RQVHJhbnNhY3Rpb25z'):0;
|
91 |
+
|
92 |
+
$color_tras_sms = 'white';
|
93 |
+
$color_tras_email = 'white';
|
94 |
+
|
95 |
+
echo '<table style="solid #CCCCCC; border-collapse: collapse; padding:0px 0px 0px 10px; margin:2px; width:99%">
|
96 |
+
<tr>
|
97 |
+
<td style="font-size:18px;color:#ffffff;padding: 10px;"><strong style="font-weight:300;">Remaining SMS transactions </strong></td>
|
98 |
+
<td style="text-align:center;font-size:36px;color:#ffffff;font-weight:400" ><strong>'.$SMSTransactions.'</strong></td>
|
99 |
+
|
100 |
+
</tr>
|
101 |
+
<tr>
|
102 |
+
<td style="font-size:18px;color:#ffffff;padding: 10px;"><strong style="font-weight:300;">Remaining Email transactions </strong></td>
|
103 |
+
<td style="text-align:center;font-size:36px;color:#ffffff;font-weight:400" ><strong>'.$EmailTransactions.'</strong></td>
|
104 |
+
|
105 |
+
|
106 |
+
</tr>
|
107 |
+
|
108 |
+
</table><br>';
|
109 |
+
|
110 |
+
|
111 |
+
|
112 |
+
echo "</div>
|
113 |
+
|
114 |
+
<br><br>
|
115 |
+
";
|
116 |
+
|
117 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo_wpns_2fa_with_network_security', 'get_option'))
|
118 |
+
{
|
119 |
+
|
120 |
+
echo "
|
121 |
+
|
122 |
+
<div style='width:100%;background-color:#555f5f;padding-top:10px;''>
|
123 |
+
<div style='font-size:25px;color:white;text-align:center'>
|
124 |
+
<strong style='font-weight:300;''>Last Scan Result <span style='color:orange;'>[". $type_of_scan."]</span></strong>
|
125 |
+
</div>
|
126 |
+
<hr>
|
127 |
+
<div>
|
128 |
+
<table>
|
129 |
+
<tbody>
|
130 |
+
|
131 |
+
<tr>
|
132 |
+
<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'>
|
133 |
+
<table dir='ltr' style='table-layout:fixed;margin:10px 0 20px 0;padding:0;vertical-align:top;width:100%'>
|
134 |
+
<tbody>
|
135 |
+
|
136 |
+
|
137 |
+
<tr>
|
138 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400' ><strong>".$last_scan_malicious_count[0]->total."</strong></td>
|
139 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$total_malicious_count[0]->total."</strong></td>
|
140 |
+
|
141 |
+
|
142 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$total_scanned_files."</strong></td>
|
143 |
+
|
144 |
+
|
145 |
+
</tr>
|
146 |
+
|
147 |
+
<tr><td> </td><td></td></tr>
|
148 |
+
<tr>
|
149 |
+
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Current Infected Files </strong></td>
|
150 |
+
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Total Infected Files Found</strong></td>
|
151 |
+
|
152 |
+
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Total Files Scanned</strong></td>
|
153 |
+
|
154 |
+
</tr>
|
155 |
+
</tbody>
|
156 |
+
</table>
|
157 |
+
</tr>
|
158 |
+
</tbody>
|
159 |
+
</table>
|
160 |
+
</div>
|
161 |
+
</div>
|
162 |
+
|
163 |
+
";
|
164 |
+
|
165 |
+
echo '<a class="button button-primary" style="background-color:#f0a702;width:100%;text-align:center;" href="admin.php?page=mo_2fa_malwarescan&tab=default&view='.$latest_id.'"><h3 style="background-color:#f0a702">View Details</h3></a>';
|
166 |
+
|
167 |
+
echo "<br><br><br>";
|
168 |
+
|
169 |
+
echo "<div style='width:100%;background-color:#555f5f;padding-top:10px;'>
|
170 |
+
<div style='font-size:25px;color:white;text-align:center'>
|
171 |
+
<strong style='font-weight:300;'>Login and Spam<span style='color:orange;'>[ On your Website ]</span></strong>
|
172 |
+
</div>
|
173 |
+
<div>
|
174 |
+
<table>
|
175 |
+
<tbody>
|
176 |
+
|
177 |
+
<tr>
|
178 |
+
<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'>
|
179 |
+
<table dir='ltr' style='table-layout:fixed;margin:10px 0 20px 0;padding:0;vertical-align:top;width:100%'>
|
180 |
+
<tbody>
|
181 |
+
<tr>
|
182 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400' ><strong>".$failed_transaction."</strong></td>
|
183 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$weakPass."</strong></td>
|
184 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$fake_domains."</strong></td>
|
185 |
+
|
186 |
+
|
187 |
+
</tr>
|
188 |
+
|
189 |
+
<tr>
|
190 |
+
<td>
|
191 |
+
</td>
|
192 |
+
<td>
|
193 |
+
</td>
|
194 |
+
</tr>
|
195 |
+
<tr>
|
196 |
+
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Login Attempts Failed</strong></td>
|
197 |
+
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Users with weak passwords</strong></td>
|
198 |
+
<td style='font-size:18px;color:#ffffff;text-align:center'><strong style='font-weight:300;'>Fake Domain Registerations</strong></td>
|
199 |
+
|
200 |
+
|
201 |
+
</tr>
|
202 |
+
</tbody>
|
203 |
+
</table>
|
204 |
+
|
205 |
+
</tr>
|
206 |
+
</tbody>
|
207 |
+
</table>
|
208 |
+
</div>
|
209 |
+
<a class='button button-primary' style='background-color:#f0a702;width:100%;text-align:center' href='admin.php?page=mo_2fa_login_and_spam&tab=default&view==".$latest_id."'><h3 style='background-color:#f0a702'>View Details</h3></a>
|
210 |
+
</div>";
|
211 |
+
|
212 |
+
echo '<br><br>';
|
213 |
+
|
214 |
+
echo "<div style='width:100%;background-color:#555f5f;padding-top:10px;'>
|
215 |
+
<div style='font-size:20px;color:white;text-align:center'>
|
216 |
+
<strong style='font-weight:300;'>Backup <span style='color:orange;'>[".$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>".$array['plugin_count']."</strong></td>
|
229 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$array['themes_count']."</strong></td>
|
230 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$array['wp_files_count']."</strong></td>
|
231 |
+
<td style='text-align:center;font-size:36px;color:#ffffff;font-weight:400'><strong>".$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 |
+
|
264 |
+
|
265 |
+
|
266 |
+
}
|
267 |
+
|
268 |
+
}
|
269 |
+
|
270 |
+
?>
|
helper/mo_twofa_sessions.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if(! defined( 'ABSPATH' )) exit;
|
4 |
+
|
5 |
+
class TwoFAMoSessions
|
6 |
+
{
|
7 |
+
static function addSessionVar($key, $val)
|
8 |
+
{
|
9 |
+
switch (MO2F_SESSION_TYPE) {
|
10 |
+
case 'TRANSIENT':
|
11 |
+
if (!isset($_COOKIE["transient_key"])) {
|
12 |
+
if (!wp_cache_get("transient_key")) {
|
13 |
+
$transient_key = MoWpnsUtility::rand();
|
14 |
+
if (ob_get_contents()) ob_clean();
|
15 |
+
setcookie('transient_key', $transient_key, time() + 12 * HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN);
|
16 |
+
wp_cache_add('transient_key', $transient_key);
|
17 |
+
} else {
|
18 |
+
$transient_key = wp_cache_get("transient_key");
|
19 |
+
}
|
20 |
+
} else {
|
21 |
+
$transient_key = $_COOKIE["transient_key"];
|
22 |
+
}
|
23 |
+
set_site_transient($transient_key . $key, $val, 12 * HOUR_IN_SECONDS);
|
24 |
+
break;
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
static function getSessionVar($key)
|
29 |
+
{
|
30 |
+
switch(MO2F_SESSION_TYPE)
|
31 |
+
{
|
32 |
+
case 'TRANSIENT':
|
33 |
+
$transient_key = isset($_COOKIE["transient_key"])
|
34 |
+
? $_COOKIE["transient_key"] : wp_cache_get("transient_key");
|
35 |
+
return get_site_transient( $transient_key.$key );
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
static function unsetSession($key)
|
40 |
+
{
|
41 |
+
switch(MO2F_SESSION_TYPE)
|
42 |
+
{
|
43 |
+
case 'TRANSIENT':
|
44 |
+
$transient_key = isset($_COOKIE["transient_key"])
|
45 |
+
? $_COOKIE["transient_key"] : wp_cache_get("transient_key");
|
46 |
+
if(!MoWpnsUtility::check_empty_or_null($transient_key)) {
|
47 |
+
delete_site_transient($transient_key . $key);
|
48 |
+
}
|
49 |
+
break;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
helper/pluginUtility.php
CHANGED
@@ -70,6 +70,11 @@ class MoWpnsHandler
|
|
70 |
|
71 |
return $ip_count;
|
72 |
}
|
|
|
|
|
|
|
|
|
|
|
73 |
function get_blocked_ips()
|
74 |
{
|
75 |
global $wpnsDbQueries;
|
@@ -135,7 +140,7 @@ class MoWpnsHandler
|
|
135 |
|
136 |
//send notification
|
137 |
global $moWpnsUtility;
|
138 |
-
if(
|
139 |
$moWpnsUtility->sendIpBlockedNotification($ipAddress,MoWpnsConstants::LOGIN_ATTEMPTS_EXCEEDED);
|
140 |
|
141 |
}
|
70 |
|
71 |
return $ip_count;
|
72 |
}
|
73 |
+
function get_blocked_attacks()
|
74 |
+
{
|
75 |
+
global $wpnsDbQueries;
|
76 |
+
return $wpnsDbQueries->get_blocked_attack_list('wpns_attack_logs');
|
77 |
+
}
|
78 |
function get_blocked_ips()
|
79 |
{
|
80 |
global $wpnsDbQueries;
|
140 |
|
141 |
//send notification
|
142 |
global $moWpnsUtility;
|
143 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo_wpns_enable_ip_blocked_email_to_admin', 'get_option'))
|
144 |
$moWpnsUtility->sendIpBlockedNotification($ipAddress,MoWpnsConstants::LOGIN_ATTEMPTS_EXCEEDED);
|
145 |
|
146 |
}
|
helper/plugins.php
CHANGED
@@ -1,103 +1,103 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class FeaturePluginInterface
|
4 |
-
{
|
5 |
-
function __construct()
|
6 |
-
{
|
7 |
-
if ( ! function_exists( 'get_plugins' ) )
|
8 |
-
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
9 |
-
}
|
10 |
-
}
|
11 |
-
|
12 |
-
|
13 |
-
class TwoFAPlugin extends FeaturePluginInterface
|
14 |
-
{
|
15 |
-
|
16 |
-
function getstatus()
|
17 |
-
{
|
18 |
-
$all_plugins = get_plugins();
|
19 |
-
$status = 'NOT_INSTALLED';
|
20 |
-
if(isset($all_plugins[MoWpnsConstants::TWO_FACTOR_SETTINGS]))
|
21 |
-
$status = is_plugin_active(MoWpnsConstants::TWO_FACTOR_SETTINGS) ? 'ACTIVE' : 'INSTALLED';
|
22 |
-
return $status;
|
23 |
-
}
|
24 |
-
|
25 |
-
|
26 |
-
function updatePluginConfiguration()
|
27 |
-
{
|
28 |
-
if(!get_option('mo_wpns_enable_2fa'))
|
29 |
-
return;
|
30 |
-
|
31 |
-
if(!get_option( 'mo2f_customerKey') || !get_option( 'mo2f_api_key') || !get_option( 'mo2f_customer_token') || !get_option( 'mo2f_app_secret'))
|
32 |
-
{
|
33 |
-
global $mo2f_dirName;
|
34 |
-
$current_user = wp_get_current_user();
|
35 |
-
$mo2fa = new Two_Factor_Setup();
|
36 |
-
update_option( 'mo2f_email' ,get_option( 'mo2f_email'));
|
37 |
-
update_option( 'mo2f_host_name' ,MoWpnsConstants::HOST_NAME);
|
38 |
-
update_option( 'mo2f_phone' ,get_option( 'mo_wpns_admin_phone'));
|
39 |
-
update_option( 'mo2f_customerKey' ,get_option( 'mo2f_customerKey'));
|
40 |
-
update_option( 'mo2f_api_key' ,get_option( 'mo2f_api_key'));
|
41 |
-
update_option( 'mo2f_customer_token' ,get_option( 'mo2f_customer_token'));
|
42 |
-
update_option( 'mo2f_app_secret' ,get_option( 'mo2f_app_secret'));
|
43 |
-
update_option( 'mo2f_miniorange_admin' ,$current_user->ID);
|
44 |
-
update_option( 'mo2f_new_customer' ,true);
|
45 |
-
|
46 |
-
update_option( 'mo_2factor_admin_registration_status','MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS');
|
47 |
-
update_user_meta($current_user->ID,'mo_2factor_user_registration_with_miniorange','SUCCESS');
|
48 |
-
update_user_meta($current_user->ID,'mo_2factor_map_id_with_email',get_option( 'mo2f_email'));
|
49 |
-
update_user_meta($current_user->ID,'mo_2factor_user_registration_status','MO_2_FACTOR_PLUGIN_SETTINGS');
|
50 |
-
$mo2fa->mo2f_update_userinfo(get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true), 'OUT OF BAND EMAIL',null,'API_2FA',true);
|
51 |
-
update_user_meta($current_user->ID,'mo2f_email_verification_status',true);
|
52 |
-
}
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
|
57 |
-
class OTPPlugin extends FeaturePluginInterface
|
58 |
-
{
|
59 |
-
function getstatus()
|
60 |
-
{
|
61 |
-
$all_plugins = get_plugins();
|
62 |
-
$status = 'NOT_INSTALLED';
|
63 |
-
if(isset($all_plugins[MoWpnsConstants::OTP_VERIFICATION_SETTINGS]))
|
64 |
-
$status = is_plugin_active(MoWpnsConstants::OTP_VERIFICATION_SETTINGS) ? 'ACTIVE' : 'INSTALLED';
|
65 |
-
return $status;
|
66 |
-
}
|
67 |
-
|
68 |
-
function updatePluginConfiguration()
|
69 |
-
{
|
70 |
-
if(!get_option('mo_wpns_enable_advanced_user_verification'))
|
71 |
-
return;
|
72 |
-
|
73 |
-
if(!get_option( 'mo_customer_validation_admin_email') || !get_option( 'mo_customer_validation_admin_customer_key') || !get_option( 'mo_customer_validation_admin_api_key') || !get_option( 'mo_customer_validation_customer_token'))
|
74 |
-
{
|
75 |
-
update_option( 'mo_customer_validation_wp_default_enable' ,1);
|
76 |
-
update_option( 'mo_customer_validation_admin_email' ,get_option( 'mo2f_email'));
|
77 |
-
update_option( 'mo_customer_validation_admin_phone' ,get_option( 'mo_wpns_admin_phone'));
|
78 |
-
update_option( 'mo_customer_validation_admin_customer_key' ,get_option( 'mo2f_customerKey') );
|
79 |
-
update_option( 'mo_customer_validation_admin_api_key' ,get_option( 'mo2f_api_key') );
|
80 |
-
update_option( 'mo_customer_validation_customer_token' ,get_option( 'mo2f_customer_token') );
|
81 |
-
update_option( 'mo_customer_validation_admin_password' ,'');
|
82 |
-
update_option( 'mo_customer_validation_message' ,'Registration complete!');
|
83 |
-
update_option( 'mo_customer_validation_registration_status' ,'MO_CUSTOMER_VALIDATION_REGISTRATION_COMPLETE');
|
84 |
-
update_option( 'mo_customer_email_transactions_remaining' ,10);
|
85 |
-
update_option( 'mo_customer_phone_transactions_remaining' ,10);
|
86 |
-
update_option( 'mo_otp_plugin_version' ,1.8);
|
87 |
-
}
|
88 |
-
}
|
89 |
-
|
90 |
-
}
|
91 |
-
|
92 |
-
|
93 |
-
class SocialPlugin extends FeaturePluginInterface
|
94 |
-
{
|
95 |
-
function getstatus()
|
96 |
-
{
|
97 |
-
$all_plugins = get_plugins();
|
98 |
-
$status = 'NOT_INSTALLED';
|
99 |
-
if(isset($all_plugins[MoWpnsConstants::SOCIAL_LOGIN_SETTINGS]))
|
100 |
-
$status = is_plugin_active(MoWpnsConstants::SOCIAL_LOGIN_SETTINGS) ? 'ACTIVE' : 'INSTALLED';
|
101 |
-
return $status;
|
102 |
-
}
|
103 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class FeaturePluginInterface
|
4 |
+
{
|
5 |
+
function __construct()
|
6 |
+
{
|
7 |
+
if ( ! function_exists( 'get_plugins' ) )
|
8 |
+
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
9 |
+
}
|
10 |
+
}
|
11 |
+
|
12 |
+
|
13 |
+
class TwoFAPlugin extends FeaturePluginInterface
|
14 |
+
{
|
15 |
+
|
16 |
+
function getstatus()
|
17 |
+
{
|
18 |
+
$all_plugins = get_plugins();
|
19 |
+
$status = 'NOT_INSTALLED';
|
20 |
+
if(isset($all_plugins[MoWpnsConstants::TWO_FACTOR_SETTINGS]))
|
21 |
+
$status = is_plugin_active(MoWpnsConstants::TWO_FACTOR_SETTINGS) ? 'ACTIVE' : 'INSTALLED';
|
22 |
+
return $status;
|
23 |
+
}
|
24 |
+
|
25 |
+
|
26 |
+
function updatePluginConfiguration()
|
27 |
+
{
|
28 |
+
if(!get_option('mo_wpns_enable_2fa'))
|
29 |
+
return;
|
30 |
+
|
31 |
+
if(!get_option( 'mo2f_customerKey') || !get_option( 'mo2f_api_key') || !get_option( 'mo2f_customer_token') || !get_option( 'mo2f_app_secret'))
|
32 |
+
{
|
33 |
+
global $mo2f_dirName;
|
34 |
+
$current_user = wp_get_current_user();
|
35 |
+
$mo2fa = new Two_Factor_Setup();
|
36 |
+
update_option( 'mo2f_email' ,get_option( 'mo2f_email'));
|
37 |
+
update_option( 'mo2f_host_name' ,MoWpnsConstants::HOST_NAME);
|
38 |
+
update_option( 'mo2f_phone' ,get_option( 'mo_wpns_admin_phone'));
|
39 |
+
update_option( 'mo2f_customerKey' ,get_option( 'mo2f_customerKey'));
|
40 |
+
update_option( 'mo2f_api_key' ,get_option( 'mo2f_api_key'));
|
41 |
+
update_option( 'mo2f_customer_token' ,get_option( 'mo2f_customer_token'));
|
42 |
+
update_option( 'mo2f_app_secret' ,get_option( 'mo2f_app_secret'));
|
43 |
+
update_option( 'mo2f_miniorange_admin' ,$current_user->ID);
|
44 |
+
update_option( 'mo2f_new_customer' ,true);
|
45 |
+
|
46 |
+
update_option( 'mo_2factor_admin_registration_status','MO_2_FACTOR_CUSTOMER_REGISTERED_SUCCESS');
|
47 |
+
update_user_meta($current_user->ID,'mo_2factor_user_registration_with_miniorange','SUCCESS');
|
48 |
+
update_user_meta($current_user->ID,'mo_2factor_map_id_with_email',get_option( 'mo2f_email'));
|
49 |
+
update_user_meta($current_user->ID,'mo_2factor_user_registration_status','MO_2_FACTOR_PLUGIN_SETTINGS');
|
50 |
+
$mo2fa->mo2f_update_userinfo(get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true), 'OUT OF BAND EMAIL',null,'API_2FA',true);
|
51 |
+
update_user_meta($current_user->ID,'mo2f_email_verification_status',true);
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
|
57 |
+
class OTPPlugin extends FeaturePluginInterface
|
58 |
+
{
|
59 |
+
function getstatus()
|
60 |
+
{
|
61 |
+
$all_plugins = get_plugins();
|
62 |
+
$status = 'NOT_INSTALLED';
|
63 |
+
if(isset($all_plugins[MoWpnsConstants::OTP_VERIFICATION_SETTINGS]))
|
64 |
+
$status = is_plugin_active(MoWpnsConstants::OTP_VERIFICATION_SETTINGS) ? 'ACTIVE' : 'INSTALLED';
|
65 |
+
return $status;
|
66 |
+
}
|
67 |
+
|
68 |
+
function updatePluginConfiguration()
|
69 |
+
{
|
70 |
+
if(!get_option('mo_wpns_enable_advanced_user_verification'))
|
71 |
+
return;
|
72 |
+
|
73 |
+
if(!get_option( 'mo_customer_validation_admin_email') || !get_option( 'mo_customer_validation_admin_customer_key') || !get_option( 'mo_customer_validation_admin_api_key') || !get_option( 'mo_customer_validation_customer_token'))
|
74 |
+
{
|
75 |
+
update_option( 'mo_customer_validation_wp_default_enable' ,1);
|
76 |
+
update_option( 'mo_customer_validation_admin_email' ,get_option( 'mo2f_email'));
|
77 |
+
update_option( 'mo_customer_validation_admin_phone' ,get_option( 'mo_wpns_admin_phone'));
|
78 |
+
update_option( 'mo_customer_validation_admin_customer_key' ,get_option( 'mo2f_customerKey') );
|
79 |
+
update_option( 'mo_customer_validation_admin_api_key' ,get_option( 'mo2f_api_key') );
|
80 |
+
update_option( 'mo_customer_validation_customer_token' ,get_option( 'mo2f_customer_token') );
|
81 |
+
update_option( 'mo_customer_validation_admin_password' ,'');
|
82 |
+
update_option( 'mo_customer_validation_message' ,'Registration complete!');
|
83 |
+
update_option( 'mo_customer_validation_registration_status' ,'MO_CUSTOMER_VALIDATION_REGISTRATION_COMPLETE');
|
84 |
+
update_option( 'mo_customer_email_transactions_remaining' ,10);
|
85 |
+
update_option( 'mo_customer_phone_transactions_remaining' ,10);
|
86 |
+
update_option( 'mo_otp_plugin_version' ,1.8);
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
}
|
91 |
+
|
92 |
+
|
93 |
+
class SocialPlugin extends FeaturePluginInterface
|
94 |
+
{
|
95 |
+
function getstatus()
|
96 |
+
{
|
97 |
+
$all_plugins = get_plugins();
|
98 |
+
$status = 'NOT_INSTALLED';
|
99 |
+
if(isset($all_plugins[MoWpnsConstants::SOCIAL_LOGIN_SETTINGS]))
|
100 |
+
$status = is_plugin_active(MoWpnsConstants::SOCIAL_LOGIN_SETTINGS) ? 'ACTIVE' : 'INSTALLED';
|
101 |
+
return $status;
|
102 |
+
}
|
103 |
}
|
helper/utility.php
CHANGED
@@ -38,6 +38,17 @@ class MoWpnsUtility
|
|
38 |
return true;
|
39 |
return false;
|
40 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
|
42 |
public static function is_curl_installed()
|
43 |
{
|
@@ -91,7 +102,7 @@ class MoWpnsUtility
|
|
91 |
|
92 |
public static function check_if_strong_password_enabled_for_user_role($userroles)
|
93 |
{
|
94 |
-
$enforce_strong_pass =
|
95 |
|
96 |
switch($enforce_strong_pass)
|
97 |
{
|
@@ -148,11 +159,8 @@ class MoWpnsUtility
|
|
148 |
else
|
149 |
$content = $this->getMessageContent($reason,$ipAddress);
|
150 |
|
151 |
-
// $mocURL = new MocURL();
|
152 |
-
|
153 |
if(isset($content))
|
154 |
return $this->wp_mail_send_notification($toEmail,$subject,$content);
|
155 |
-
// return $mocURL->send_notification($toEmail,$subject,$content,MoWpnsConstants::SUPPORT_EMAIL,'miniOrange','Admin');
|
156 |
}
|
157 |
|
158 |
function wp_mail_send_notification($toEmail,$subject,$content){
|
@@ -194,9 +202,6 @@ class MoWpnsUtility
|
|
194 |
else
|
195 |
$content = $this->getMessageContent($reason,$ipAddress,$username,$fromEmail);
|
196 |
|
197 |
-
// $mocURL = new MocURL();
|
198 |
-
// return $mocURL->send_notification($toEmail,$subject,$content,$fromEmail,get_bloginfo(),$username);
|
199 |
-
|
200 |
$mo_wpns_config->audit_email_notification_sent_to_user($username,$ipAddress,$reason);
|
201 |
$status = $this->wp_mail_send_notification($toEmail,$subject,$content,$fromEmail);
|
202 |
return $status;
|
@@ -284,7 +289,7 @@ class MoWpnsUtility
|
|
284 |
$status.="F1";
|
285 |
if(get_site_option('mo2f_visit_login_and_spam'))
|
286 |
$status.="LS1";
|
287 |
-
if(
|
288 |
$status.="BF1";
|
289 |
if(get_site_option('mo2f_visit_malware'))
|
290 |
$status.="M1";
|
@@ -314,5 +319,14 @@ class MoWpnsUtility
|
|
314 |
return $installed;
|
315 |
|
316 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
317 |
|
318 |
}
|
38 |
return true;
|
39 |
return false;
|
40 |
}
|
41 |
+
|
42 |
+
public static function rand()
|
43 |
+
{
|
44 |
+
$length = wp_rand(0, 15);
|
45 |
+
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
46 |
+
$randomString = '';
|
47 |
+
for ($i = 0; $i < $length; $i++) {
|
48 |
+
$randomString .= $characters[wp_rand(0, strlen($characters) - 1)];
|
49 |
+
}
|
50 |
+
return $randomString;
|
51 |
+
}
|
52 |
|
53 |
public static function is_curl_installed()
|
54 |
{
|
102 |
|
103 |
public static function check_if_strong_password_enabled_for_user_role($userroles)
|
104 |
{
|
105 |
+
$enforce_strong_pass = MoWpnsUtility::get_mo2f_db_option('mo2f_enforce_strong_passswords_for_accounts', 'get_option');
|
106 |
|
107 |
switch($enforce_strong_pass)
|
108 |
{
|
159 |
else
|
160 |
$content = $this->getMessageContent($reason,$ipAddress);
|
161 |
|
|
|
|
|
162 |
if(isset($content))
|
163 |
return $this->wp_mail_send_notification($toEmail,$subject,$content);
|
|
|
164 |
}
|
165 |
|
166 |
function wp_mail_send_notification($toEmail,$subject,$content){
|
202 |
else
|
203 |
$content = $this->getMessageContent($reason,$ipAddress,$username,$fromEmail);
|
204 |
|
|
|
|
|
|
|
205 |
$mo_wpns_config->audit_email_notification_sent_to_user($username,$ipAddress,$reason);
|
206 |
$status = $this->wp_mail_send_notification($toEmail,$subject,$content,$fromEmail);
|
207 |
return $status;
|
289 |
$status.="F1";
|
290 |
if(get_site_option('mo2f_visit_login_and_spam'))
|
291 |
$status.="LS1";
|
292 |
+
if(MoWpnsUtility::get_mo2f_db_option('mo2f_enable_brute_force', 'get_option'))
|
293 |
$status.="BF1";
|
294 |
if(get_site_option('mo2f_visit_malware'))
|
295 |
$status.="M1";
|
319 |
return $installed;
|
320 |
|
321 |
}
|
322 |
+
|
323 |
+
public static function get_mo2f_db_option($value, $type){
|
324 |
+
if($type == 'site_option'){
|
325 |
+
$db_value = get_site_option($value, $GLOBALS[$value]);
|
326 |
+
}else{
|
327 |
+
$db_value = get_option($value, $GLOBALS[$value]);
|
328 |
+
}
|
329 |
+
return $db_value;
|
330 |
+
}
|
331 |
|
332 |
}
|
includes/css/bootstrap.min.css
CHANGED
@@ -1,5735 +1,5735 @@
|
|
1 |
-
.mo2f_carousel {
|
2 |
-
|
3 |
-
|
4 |
-
position: relative;
|
5 |
-
|
6 |
-
|
7 |
-
padding-bottom: 18px !important;
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
}
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
.mo2f_carousel-inner {
|
20 |
-
|
21 |
-
|
22 |
-
position: relative;
|
23 |
-
|
24 |
-
|
25 |
-
width: 100%;
|
26 |
-
|
27 |
-
|
28 |
-
overflow: hidden;
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
}
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
.mo2f_carousel-inner > .item {
|
41 |
-
|
42 |
-
|
43 |
-
position: relative;
|
44 |
-
|
45 |
-
|
46 |
-
display: none;
|
47 |
-
|
48 |
-
|
49 |
-
-webkit-transition: .6s ease-in-out left;
|
50 |
-
|
51 |
-
|
52 |
-
-o-transition: .6s ease-in-out left;
|
53 |
-
|
54 |
-
|
55 |
-
transition: .6s ease-in-out left;
|
56 |
-
|
57 |
-
|
58 |
-
height: 300px !important;
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
}
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
.mo2f_carousel-inner > .item > img, .mo2f_carousel-inner > .item > a > img {
|
71 |
-
|
72 |
-
|
73 |
-
line-height: 1;
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
max-height: 300px !important;
|
80 |
-
|
81 |
-
|
82 |
-
max-width: 600px !important;
|
83 |
-
|
84 |
-
|
85 |
-
}
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
@media all and (transform-3d) , ( -webkit-transform-3d ) {
|
92 |
-
|
93 |
-
|
94 |
-
.mo2f_carousel-inner > .item {
|
95 |
-
|
96 |
-
|
97 |
-
-webkit-transition: -webkit-transform .6s ease-in-out;
|
98 |
-
|
99 |
-
|
100 |
-
-o-transition: -o-transform .6s ease-in-out;
|
101 |
-
|
102 |
-
|
103 |
-
transition: transform .6s ease-in-out;
|
104 |
-
|
105 |
-
|
106 |
-
-webkit-backface-visibility: hidden;
|
107 |
-
|
108 |
-
|
109 |
-
backface-visibility: hidden;
|
110 |
-
|
111 |
-
|
112 |
-
-webkit-perspective: 1000;
|
113 |
-
|
114 |
-
|
115 |
-
perspective: 1000
|
116 |
-
|
117 |
-
|
118 |
-
}
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
.mo2f_carousel-inner > .item.next, .mo2f_carousel-inner > .item.active.right {
|
125 |
-
|
126 |
-
|
127 |
-
left: 0;
|
128 |
-
|
129 |
-
|
130 |
-
-webkit-transform: translate3d(100%, 0, 0);
|
131 |
-
|
132 |
-
|
133 |
-
transform: translate3d(100%, 0, 0)
|
134 |
-
|
135 |
-
|
136 |
-
}
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
.mo2f_carousel-inner > .item.prev, .mo2f_carousel-inner > .item.active.left {
|
143 |
-
|
144 |
-
|
145 |
-
left: 0;
|
146 |
-
|
147 |
-
|
148 |
-
-webkit-transform: translate3d(-100%, 0, 0);
|
149 |
-
|
150 |
-
|
151 |
-
transform: translate3d(-100%, 0, 0)
|
152 |
-
|
153 |
-
|
154 |
-
}
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
.mo2f_carousel-inner > .item.next.left, .mo2f_carousel-inner > .item.prev.right, .mo2f_carousel-inner > .item.active {
|
161 |
-
|
162 |
-
|
163 |
-
left: 0;
|
164 |
-
|
165 |
-
|
166 |
-
-webkit-transform: translate3d(0, 0, 0);
|
167 |
-
|
168 |
-
|
169 |
-
transform: translate3d(0, 0, 0)
|
170 |
-
|
171 |
-
|
172 |
-
}
|
173 |
-
|
174 |
-
|
175 |
-
}
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
.mo2f_carousel-inner > .active, .mo2f_carousel-inner > .next, .mo2f_carousel-inner > .prev {
|
182 |
-
|
183 |
-
|
184 |
-
display: block
|
185 |
-
|
186 |
-
|
187 |
-
}
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
.mo2f_carousel-inner > .active {
|
194 |
-
|
195 |
-
|
196 |
-
left: 0
|
197 |
-
|
198 |
-
|
199 |
-
}
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
.mo2f_carousel-inner > .next, .mo2f_carousel-inner > .prev {
|
206 |
-
|
207 |
-
|
208 |
-
position: absolute;
|
209 |
-
|
210 |
-
|
211 |
-
top: 0;
|
212 |
-
|
213 |
-
|
214 |
-
width: 100%
|
215 |
-
|
216 |
-
|
217 |
-
}
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
.mo2f_carousel-inner > .next {
|
224 |
-
|
225 |
-
|
226 |
-
left: 100%
|
227 |
-
|
228 |
-
|
229 |
-
}
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
.mo2f_carousel-inner > .prev {
|
236 |
-
|
237 |
-
|
238 |
-
left: -100%
|
239 |
-
|
240 |
-
|
241 |
-
}
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
.mo2f_carousel-inner > .next.left, .mo2f_carousel-inner > .prev.right {
|
248 |
-
|
249 |
-
|
250 |
-
left: 0
|
251 |
-
|
252 |
-
|
253 |
-
}
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
.mo2f_carousel-inner > .active.left {
|
260 |
-
|
261 |
-
|
262 |
-
left: -100%
|
263 |
-
|
264 |
-
|
265 |
-
}
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
.mo2f_carousel-inner > .active.right {
|
272 |
-
|
273 |
-
|
274 |
-
left: 100%
|
275 |
-
|
276 |
-
|
277 |
-
}
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
.mo2f_carousel-control {
|
284 |
-
|
285 |
-
|
286 |
-
position: absolute;
|
287 |
-
|
288 |
-
|
289 |
-
top: 0;
|
290 |
-
|
291 |
-
|
292 |
-
bottom: 0;
|
293 |
-
|
294 |
-
|
295 |
-
left: 0;
|
296 |
-
|
297 |
-
|
298 |
-
width: 15%;
|
299 |
-
|
300 |
-
|
301 |
-
font-size: 20px;
|
302 |
-
|
303 |
-
|
304 |
-
color: #fff;
|
305 |
-
|
306 |
-
|
307 |
-
text-align: center;
|
308 |
-
|
309 |
-
|
310 |
-
text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
|
311 |
-
|
312 |
-
|
313 |
-
filter: alpha(opacity=50);
|
314 |
-
|
315 |
-
|
316 |
-
opacity: .5
|
317 |
-
|
318 |
-
|
319 |
-
}
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
.mo2f_carousel-control.left {
|
326 |
-
|
327 |
-
|
328 |
-
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0,
|
329 |
-
|
330 |
-
|
331 |
-
rgba(0, 0, 0, .0001) 100%);
|
332 |
-
|
333 |
-
|
334 |
-
background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0,
|
335 |
-
|
336 |
-
|
337 |
-
rgba(0, 0, 0, .0001) 100%);
|
338 |
-
|
339 |
-
|
340 |
-
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)),
|
341 |
-
|
342 |
-
|
343 |
-
to(rgba(0, 0, 0, .0001)));
|
344 |
-
|
345 |
-
|
346 |
-
background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0,
|
347 |
-
|
348 |
-
|
349 |
-
rgba(0, 0, 0, .0001) 100%);
|
350 |
-
|
351 |
-
|
352 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',
|
353 |
-
|
354 |
-
|
355 |
-
endColorstr='#00000000', GradientType=1);
|
356 |
-
|
357 |
-
|
358 |
-
background-repeat: repeat-x
|
359 |
-
|
360 |
-
|
361 |
-
}
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
.mo2f_carousel-control.right {
|
368 |
-
|
369 |
-
|
370 |
-
right: 0;
|
371 |
-
|
372 |
-
|
373 |
-
left: auto;
|
374 |
-
|
375 |
-
|
376 |
-
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0,
|
377 |
-
|
378 |
-
|
379 |
-
rgba(0, 0, 0, .5) 100%);
|
380 |
-
|
381 |
-
|
382 |
-
background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0,
|
383 |
-
|
384 |
-
|
385 |
-
rgba(0, 0, 0, .5) 100%);
|
386 |
-
|
387 |
-
|
388 |
-
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)),
|
389 |
-
|
390 |
-
|
391 |
-
to(rgba(0, 0, 0, .5)));
|
392 |
-
|
393 |
-
|
394 |
-
background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0,
|
395 |
-
|
396 |
-
|
397 |
-
rgba(0, 0, 0, .5) 100%);
|
398 |
-
|
399 |
-
|
400 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',
|
401 |
-
|
402 |
-
|
403 |
-
endColorstr='#80000000', GradientType=1);
|
404 |
-
|
405 |
-
|
406 |
-
background-repeat: repeat-x
|
407 |
-
|
408 |
-
|
409 |
-
}
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
.mo2f_carousel-control:hover, .mo2f_carousel-control:focus {
|
416 |
-
|
417 |
-
|
418 |
-
color: #fff;
|
419 |
-
|
420 |
-
|
421 |
-
text-decoration: none;
|
422 |
-
|
423 |
-
|
424 |
-
filter: alpha(opacity=90);
|
425 |
-
|
426 |
-
|
427 |
-
outline: 0;
|
428 |
-
|
429 |
-
|
430 |
-
opacity: .9
|
431 |
-
|
432 |
-
|
433 |
-
}
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
.mo2f_carousel-control .icon-prev, .mo2f_carousel-control .icon-next, .mo2f_carousel-control .glyphicon-chevron-left, .mo2f_carousel-control .glyphicon-chevron-right {
|
440 |
-
|
441 |
-
|
442 |
-
position: absolute;
|
443 |
-
|
444 |
-
|
445 |
-
top: 50%;
|
446 |
-
|
447 |
-
|
448 |
-
z-index: 5;
|
449 |
-
|
450 |
-
|
451 |
-
display: inline-block
|
452 |
-
|
453 |
-
|
454 |
-
}
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
.mo2f_carousel-control .icon-prev, .mo2f_carousel-control .glyphicon-chevron-left {
|
461 |
-
|
462 |
-
|
463 |
-
left: 50%;
|
464 |
-
|
465 |
-
|
466 |
-
margin-left: -10px
|
467 |
-
|
468 |
-
|
469 |
-
}
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
.mo2f_carousel-control .icon-next, .mo2f_carousel-control .glyphicon-chevron-right {
|
476 |
-
|
477 |
-
|
478 |
-
right: 50%;
|
479 |
-
|
480 |
-
|
481 |
-
margin-right: -10px
|
482 |
-
|
483 |
-
|
484 |
-
}
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
.mo2f_carousel-control .icon-prev, .mo2f_carousel-control .icon-next {
|
491 |
-
|
492 |
-
|
493 |
-
width: 20px;
|
494 |
-
|
495 |
-
|
496 |
-
height: 20px;
|
497 |
-
|
498 |
-
|
499 |
-
margin-top: -10px;
|
500 |
-
|
501 |
-
|
502 |
-
font-family: serif
|
503 |
-
|
504 |
-
|
505 |
-
}
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
.mo2f_carousel-control .icon-prev:before {
|
512 |
-
|
513 |
-
|
514 |
-
content: '\2039'
|
515 |
-
|
516 |
-
|
517 |
-
}
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
.mo2f_carousel-control .icon-next:before {
|
524 |
-
|
525 |
-
|
526 |
-
content: '\203a'
|
527 |
-
|
528 |
-
|
529 |
-
}
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
.mo2f_carousel-indicators {
|
536 |
-
|
537 |
-
|
538 |
-
position: absolute;
|
539 |
-
|
540 |
-
|
541 |
-
bottom: -25px;
|
542 |
-
|
543 |
-
|
544 |
-
left: 50%;
|
545 |
-
|
546 |
-
|
547 |
-
z-index: 15;
|
548 |
-
|
549 |
-
|
550 |
-
width: 60%;
|
551 |
-
|
552 |
-
|
553 |
-
padding-left: 0;
|
554 |
-
|
555 |
-
|
556 |
-
margin-left: -30%;
|
557 |
-
|
558 |
-
|
559 |
-
text-align: center;
|
560 |
-
|
561 |
-
|
562 |
-
list-style: none
|
563 |
-
|
564 |
-
|
565 |
-
}
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
.mo2f_carousel-indicators li {
|
572 |
-
|
573 |
-
|
574 |
-
display: inline-block;
|
575 |
-
|
576 |
-
|
577 |
-
width: 10px;
|
578 |
-
|
579 |
-
|
580 |
-
height: 10px;
|
581 |
-
|
582 |
-
|
583 |
-
margin: 1px;
|
584 |
-
|
585 |
-
|
586 |
-
text-indent: -999px;
|
587 |
-
|
588 |
-
|
589 |
-
cursor: pointer;
|
590 |
-
|
591 |
-
|
592 |
-
background-color: #0 \9;
|
593 |
-
|
594 |
-
|
595 |
-
background-color: rgba(0, 0, 0, 0);
|
596 |
-
|
597 |
-
|
598 |
-
border: 1px solid #0073aa;
|
599 |
-
|
600 |
-
|
601 |
-
border-radius: 10px
|
602 |
-
|
603 |
-
|
604 |
-
}
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
.mo2f_carousel-indicators .active {
|
611 |
-
|
612 |
-
|
613 |
-
width: 12px;
|
614 |
-
|
615 |
-
|
616 |
-
height: 12px;
|
617 |
-
|
618 |
-
|
619 |
-
margin: 0;
|
620 |
-
|
621 |
-
|
622 |
-
background-color: #0073aa;
|
623 |
-
|
624 |
-
|
625 |
-
}
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
.mo2f_carousel-caption {
|
632 |
-
|
633 |
-
|
634 |
-
position: absolute;
|
635 |
-
|
636 |
-
|
637 |
-
right: 15%;
|
638 |
-
|
639 |
-
|
640 |
-
bottom: 20px;
|
641 |
-
|
642 |
-
|
643 |
-
left: 15%;
|
644 |
-
|
645 |
-
|
646 |
-
z-index: 10;
|
647 |
-
|
648 |
-
|
649 |
-
padding-top: 20px;
|
650 |
-
|
651 |
-
|
652 |
-
padding-bottom: 20px;
|
653 |
-
|
654 |
-
|
655 |
-
color: #fff;
|
656 |
-
|
657 |
-
|
658 |
-
text-align: center;
|
659 |
-
|
660 |
-
|
661 |
-
text-shadow: 0 1px 2px rgba(0, 0, 0, .6)
|
662 |
-
|
663 |
-
|
664 |
-
}
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
.mo2f_carousel-caption .btn {
|
671 |
-
|
672 |
-
|
673 |
-
text-shadow: none
|
674 |
-
|
675 |
-
|
676 |
-
}
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
@media screen and (min-width: 768px) {
|
683 |
-
|
684 |
-
|
685 |
-
.mo2f_carousel-control .glyphicon-chevron-left, .mo2f_carousel-control .glyphicon-chevron-right, .mo2f_carousel-control .icon-prev, .mo2f_carousel-control .icon-next {
|
686 |
-
|
687 |
-
|
688 |
-
width: 30px;
|
689 |
-
|
690 |
-
|
691 |
-
height: 30px;
|
692 |
-
|
693 |
-
|
694 |
-
margin-top: -15px;
|
695 |
-
|
696 |
-
|
697 |
-
font-size: 30px
|
698 |
-
|
699 |
-
|
700 |
-
}
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
.mo2f_carousel-control .glyphicon-chevron-left, .mo2f_carousel-control .icon-prev {
|
707 |
-
|
708 |
-
|
709 |
-
margin-left: -15px
|
710 |
-
|
711 |
-
|
712 |
-
}
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
.mo2f_carousel-control .glyphicon-chevron-right, .mo2f_carousel-control .icon-next {
|
719 |
-
|
720 |
-
|
721 |
-
margin-right: -15px
|
722 |
-
|
723 |
-
|
724 |
-
}
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
.mo2f_carousel-caption {
|
731 |
-
|
732 |
-
|
733 |
-
right: 20%;
|
734 |
-
|
735 |
-
|
736 |
-
left: 20%;
|
737 |
-
|
738 |
-
|
739 |
-
padding-bottom: 30px
|
740 |
-
|
741 |
-
|
742 |
-
}
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
.mo2f_carousel-indicators {
|
749 |
-
|
750 |
-
|
751 |
-
bottom: -14px
|
752 |
-
|
753 |
-
|
754 |
-
}
|
755 |
-
|
756 |
-
|
757 |
-
}
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
.hidden {
|
764 |
-
|
765 |
-
|
766 |
-
display: none;
|
767 |
-
|
768 |
-
|
769 |
-
}
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
.float-right {
|
776 |
-
|
777 |
-
|
778 |
-
text-align: right;
|
779 |
-
|
780 |
-
|
781 |
-
}
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
.mo2f_collapse {
|
788 |
-
|
789 |
-
|
790 |
-
display: none;
|
791 |
-
|
792 |
-
|
793 |
-
/ / visibility: hidden;
|
794 |
-
|
795 |
-
|
796 |
-
font-size: 14px !important;
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
}
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
.mo2f_collapse.in {
|
809 |
-
|
810 |
-
|
811 |
-
display: block;
|
812 |
-
|
813 |
-
|
814 |
-
visibility: visible;
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
}
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
.mo2f_collapsing {
|
827 |
-
|
828 |
-
|
829 |
-
position: relative;
|
830 |
-
|
831 |
-
|
832 |
-
font-size: 14px !important;
|
833 |
-
|
834 |
-
|
835 |
-
height: 0;
|
836 |
-
|
837 |
-
|
838 |
-
overflow: hidden;
|
839 |
-
|
840 |
-
|
841 |
-
-webkit-transition-timing-function: ease;
|
842 |
-
|
843 |
-
|
844 |
-
-o-transition-timing-function: ease;
|
845 |
-
|
846 |
-
|
847 |
-
transition-timing-function: ease;
|
848 |
-
|
849 |
-
|
850 |
-
-webkit-transition-duration: .20s;
|
851 |
-
|
852 |
-
|
853 |
-
-o-transition-duration: .20s;
|
854 |
-
|
855 |
-
|
856 |
-
transition-duration: .20s;
|
857 |
-
|
858 |
-
|
859 |
-
-webkit-transition-property: height, visibility;
|
860 |
-
|
861 |
-
|
862 |
-
-o-transition-property: height, visibility;
|
863 |
-
|
864 |
-
|
865 |
-
transition-property: height, visibility
|
866 |
-
|
867 |
-
|
868 |
-
}
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
.mo2f_thumbnail {
|
875 |
-
|
876 |
-
|
877 |
-
width: 315px;
|
878 |
-
|
879 |
-
|
880 |
-
margin-bottom: 10px;
|
881 |
-
|
882 |
-
|
883 |
-
position: relative;
|
884 |
-
|
885 |
-
|
886 |
-
background-color: #fff;
|
887 |
-
|
888 |
-
|
889 |
-
border: 1px solid #ddd;
|
890 |
-
|
891 |
-
|
892 |
-
-webkit-transition: border .2s ease-in-out;
|
893 |
-
|
894 |
-
|
895 |
-
-o-transition: border .2s ease-in-out;
|
896 |
-
|
897 |
-
|
898 |
-
transition: border .2s ease-in-out
|
899 |
-
|
900 |
-
|
901 |
-
}
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
.mo2f_thumbnail > img, .mo2f_thumbnail a > img {
|
908 |
-
|
909 |
-
|
910 |
-
margin-right: auto;
|
911 |
-
|
912 |
-
|
913 |
-
margin-left: auto
|
914 |
-
|
915 |
-
|
916 |
-
}
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
a.mo2f_thumbnail:hover, a.mo2f_thumbnail:focus, a.mo2f_thumbnail.active {
|
923 |
-
|
924 |
-
|
925 |
-
border-color: #337ab7
|
926 |
-
|
927 |
-
|
928 |
-
}
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
.mo2f_thumbnail .caption {
|
935 |
-
|
936 |
-
|
937 |
-
padding: 9px;
|
938 |
-
|
939 |
-
|
940 |
-
color: #333
|
941 |
-
|
942 |
-
|
943 |
-
}
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
.mo2f_thumbnail label {
|
950 |
-
|
951 |
-
|
952 |
-
font-weight: bold;
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
}
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
.mo2f_close {
|
965 |
-
|
966 |
-
|
967 |
-
float: right;
|
968 |
-
|
969 |
-
|
970 |
-
font-size: 21px;
|
971 |
-
|
972 |
-
|
973 |
-
font-weight: 700;
|
974 |
-
|
975 |
-
|
976 |
-
line-height: 1;
|
977 |
-
|
978 |
-
|
979 |
-
color: #000;
|
980 |
-
|
981 |
-
|
982 |
-
text-shadow: 0 1px 0 #fff;
|
983 |
-
|
984 |
-
|
985 |
-
filter: alpha(opacity=20);
|
986 |
-
|
987 |
-
|
988 |
-
opacity: .2
|
989 |
-
|
990 |
-
|
991 |
-
}
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
.mo2f_close:hover, .mo2f_close:focus {
|
998 |
-
|
999 |
-
|
1000 |
-
color: #000;
|
1001 |
-
|
1002 |
-
|
1003 |
-
text-decoration: none;
|
1004 |
-
|
1005 |
-
|
1006 |
-
cursor: pointer;
|
1007 |
-
|
1008 |
-
|
1009 |
-
filter: alpha(opacity=50);
|
1010 |
-
|
1011 |
-
|
1012 |
-
opacity: .5
|
1013 |
-
|
1014 |
-
|
1015 |
-
}
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
button.mo2f_close {
|
1022 |
-
|
1023 |
-
|
1024 |
-
-webkit-appearance: none;
|
1025 |
-
|
1026 |
-
|
1027 |
-
padding: 0;
|
1028 |
-
|
1029 |
-
|
1030 |
-
cursor: pointer;
|
1031 |
-
|
1032 |
-
|
1033 |
-
background: 0 0;
|
1034 |
-
|
1035 |
-
|
1036 |
-
border: 0
|
1037 |
-
|
1038 |
-
|
1039 |
-
}
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
.mo2f_modal-open {
|
1046 |
-
|
1047 |
-
|
1048 |
-
overflow: hidden !important;
|
1049 |
-
|
1050 |
-
|
1051 |
-
position: fixed !important;
|
1052 |
-
|
1053 |
-
|
1054 |
-
width: 100% !important;
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
}
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
.mo2f_modal {
|
1067 |
-
|
1068 |
-
|
1069 |
-
position: fixed !important;
|
1070 |
-
|
1071 |
-
|
1072 |
-
top: 0;
|
1073 |
-
|
1074 |
-
|
1075 |
-
right: 0;
|
1076 |
-
|
1077 |
-
|
1078 |
-
bottom: 0;
|
1079 |
-
|
1080 |
-
|
1081 |
-
left: 0;
|
1082 |
-
|
1083 |
-
|
1084 |
-
z-index: 100000 !important;
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
overflow: hidden !important;
|
1091 |
-
|
1092 |
-
|
1093 |
-
-webkit-overflow-scrolling: touch;
|
1094 |
-
|
1095 |
-
|
1096 |
-
outline: 0;
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
}
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
.mo2f_modal_inner {
|
1109 |
-
|
1110 |
-
|
1111 |
-
display: none;
|
1112 |
-
|
1113 |
-
|
1114 |
-
}
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
.mo2f_modal.fade .mo2f_modal-dialog {
|
1121 |
-
|
1122 |
-
|
1123 |
-
-webkit-transition: -webkit-transform .3s ease-out;
|
1124 |
-
|
1125 |
-
|
1126 |
-
-o-transition: -o-transform .3s ease-out;
|
1127 |
-
|
1128 |
-
|
1129 |
-
transition: transform .3s ease-out;
|
1130 |
-
|
1131 |
-
|
1132 |
-
-webkit-transform: translate(0, -25%);
|
1133 |
-
|
1134 |
-
|
1135 |
-
-ms-transform: translate(0, -25%);
|
1136 |
-
|
1137 |
-
|
1138 |
-
-o-transform: translate(0, -25%);
|
1139 |
-
|
1140 |
-
|
1141 |
-
transform: translate(0, -25%)
|
1142 |
-
|
1143 |
-
|
1144 |
-
}
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
.mo2f_modal.in .mo2f_modal-dialog {
|
1151 |
-
|
1152 |
-
|
1153 |
-
-webkit-transform: translate(0, 80px) !important;
|
1154 |
-
|
1155 |
-
|
1156 |
-
-ms-transform: translate(0, 80px) !important;
|
1157 |
-
|
1158 |
-
|
1159 |
-
-o-transform: translate(0, 80px) !important;
|
1160 |
-
|
1161 |
-
|
1162 |
-
transform: translate(0, 80px) !important;
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
|
1167 |
-
|
1168 |
-
}
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
|
1173 |
-
|
1174 |
-
.mo2f_modal-open .mo2f_modal {
|
1175 |
-
|
1176 |
-
|
1177 |
-
overflow-x: hidden;
|
1178 |
-
|
1179 |
-
|
1180 |
-
overflow-y: hidden;
|
1181 |
-
|
1182 |
-
|
1183 |
-
}
|
1184 |
-
|
1185 |
-
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
.mo2f_modal-dialog {
|
1190 |
-
|
1191 |
-
|
1192 |
-
position: relative;
|
1193 |
-
|
1194 |
-
|
1195 |
-
width: auto;
|
1196 |
-
|
1197 |
-
|
1198 |
-
margin: 10px;
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
}
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
.login mo_customer_validation-modal-content {
|
1211 |
-
|
1212 |
-
|
1213 |
-
position: relative !important;
|
1214 |
-
|
1215 |
-
|
1216 |
-
background-color: #fff !important;
|
1217 |
-
|
1218 |
-
|
1219 |
-
-webkit-background-clip: padding-box !important;
|
1220 |
-
|
1221 |
-
|
1222 |
-
background-clip: padding-box !important;
|
1223 |
-
|
1224 |
-
|
1225 |
-
border: 1px solid #999 !important;
|
1226 |
-
|
1227 |
-
|
1228 |
-
border: 1px solid rgba(0, 0, 0, .2) !important;
|
1229 |
-
|
1230 |
-
|
1231 |
-
border-radius: 6px !important;
|
1232 |
-
|
1233 |
-
|
1234 |
-
outline: 0 !important;
|
1235 |
-
|
1236 |
-
|
1237 |
-
|
1238 |
-
|
1239 |
-
|
1240 |
-
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5) !important;
|
1241 |
-
|
1242 |
-
|
1243 |
-
box-shadow: 0 3px 9px rgba(0, 0, 0, .5) !important;
|
1244 |
-
|
1245 |
-
|
1246 |
-
}
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
.mo2f-modal-backdrop {
|
1253 |
-
|
1254 |
-
|
1255 |
-
position: absolute;
|
1256 |
-
|
1257 |
-
|
1258 |
-
top: 0;
|
1259 |
-
|
1260 |
-
|
1261 |
-
right: 0;
|
1262 |
-
|
1263 |
-
|
1264 |
-
left: 0;
|
1265 |
-
|
1266 |
-
|
1267 |
-
background-color: #f1f1f1 !important;
|
1268 |
-
|
1269 |
-
|
1270 |
-
filter: alpha(opacity=50) !important;
|
1271 |
-
|
1272 |
-
|
1273 |
-
opacity: 0.8 !important;
|
1274 |
-
|
1275 |
-
|
1276 |
-
height: 100% !important;
|
1277 |
-
|
1278 |
-
|
1279 |
-
}
|
1280 |
-
|
1281 |
-
|
1282 |
-
|
1283 |
-
|
1284 |
-
|
1285 |
-
#smsAlertModal {
|
1286 |
-
|
1287 |
-
|
1288 |
-
background-color: black !important;
|
1289 |
-
|
1290 |
-
|
1291 |
-
opacity: 0.8 !important;
|
1292 |
-
|
1293 |
-
|
1294 |
-
filter: alpha(opacity=50) !important;
|
1295 |
-
|
1296 |
-
|
1297 |
-
}
|
1298 |
-
|
1299 |
-
|
1300 |
-
|
1301 |
-
|
1302 |
-
|
1303 |
-
.mo2f_modal-header {
|
1304 |
-
|
1305 |
-
|
1306 |
-
min-height: 14px;
|
1307 |
-
|
1308 |
-
|
1309 |
-
padding: 10px;
|
1310 |
-
|
1311 |
-
|
1312 |
-
border-bottom: 1px solid #e5e5e5
|
1313 |
-
|
1314 |
-
|
1315 |
-
}
|
1316 |
-
|
1317 |
-
|
1318 |
-
|
1319 |
-
|
1320 |
-
|
1321 |
-
.mo2f_modal-title {
|
1322 |
-
|
1323 |
-
|
1324 |
-
margin: 0 !important;
|
1325 |
-
|
1326 |
-
|
1327 |
-
line-height: 1.0 !important;
|
1328 |
-
|
1329 |
-
|
1330 |
-
}
|
1331 |
-
|
1332 |
-
|
1333 |
-
|
1334 |
-
|
1335 |
-
|
1336 |
-
.mo2f_modal-body {
|
1337 |
-
|
1338 |
-
|
1339 |
-
/ / width: 96 % !important;
|
1340 |
-
|
1341 |
-
|
1342 |
-
position: relative !important;
|
1343 |
-
|
1344 |
-
|
1345 |
-
padding: 15px !important;
|
1346 |
-
|
1347 |
-
|
1348 |
-
overflow-y: auto !important;
|
1349 |
-
|
1350 |
-
|
1351 |
-
max-height: 550px !important;
|
1352 |
-
|
1353 |
-
|
1354 |
-
}
|
1355 |
-
|
1356 |
-
|
1357 |
-
|
1358 |
-
|
1359 |
-
|
1360 |
-
.mo2f_modal-footer {
|
1361 |
-
|
1362 |
-
|
1363 |
-
padding: 15px;
|
1364 |
-
|
1365 |
-
|
1366 |
-
text-align: right;
|
1367 |
-
|
1368 |
-
|
1369 |
-
border-top: 1px solid #e5e5e5
|
1370 |
-
|
1371 |
-
|
1372 |
-
}
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
-
|
1377 |
-
|
1378 |
-
.mo2f_modal-footer .btn + .btn {
|
1379 |
-
|
1380 |
-
|
1381 |
-
margin-bottom: 0;
|
1382 |
-
|
1383 |
-
|
1384 |
-
margin-left: 5px
|
1385 |
-
|
1386 |
-
|
1387 |
-
}
|
1388 |
-
|
1389 |
-
|
1390 |
-
|
1391 |
-
|
1392 |
-
|
1393 |
-
.mo2f_modal-footer .btn-group .btn + .btn {
|
1394 |
-
|
1395 |
-
|
1396 |
-
margin-left: -1px
|
1397 |
-
|
1398 |
-
|
1399 |
-
}
|
1400 |
-
|
1401 |
-
|
1402 |
-
|
1403 |
-
|
1404 |
-
|
1405 |
-
.mo2f_modal-footer .btn-block + .btn-block {
|
1406 |
-
|
1407 |
-
|
1408 |
-
margin-left: 0
|
1409 |
-
|
1410 |
-
|
1411 |
-
}
|
1412 |
-
|
1413 |
-
|
1414 |
-
|
1415 |
-
|
1416 |
-
|
1417 |
-
.mo2f_modal-scrollbar-measure {
|
1418 |
-
|
1419 |
-
|
1420 |
-
position: absolute;
|
1421 |
-
|
1422 |
-
|
1423 |
-
top: -9999px;
|
1424 |
-
|
1425 |
-
|
1426 |
-
width: 50px;
|
1427 |
-
|
1428 |
-
|
1429 |
-
height: 50px;
|
1430 |
-
|
1431 |
-
|
1432 |
-
overflow: scroll
|
1433 |
-
|
1434 |
-
|
1435 |
-
}
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
@media ( min-width: 768px) {
|
1442 |
-
|
1443 |
-
|
1444 |
-
.mo2f_modal-dialog {
|
1445 |
-
|
1446 |
-
width: auto;
|
1447 |
-
margin: 0px auto
|
1448 |
-
|
1449 |
-
|
1450 |
-
}
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
.login mo_customer_validation-modal-content {
|
1457 |
-
|
1458 |
-
|
1459 |
-
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
|
1460 |
-
|
1461 |
-
|
1462 |
-
box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
|
1463 |
-
|
1464 |
-
|
1465 |
-
}
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
1469 |
-
|
1470 |
-
|
1471 |
-
.mo2f_modal-sm {
|
1472 |
-
|
1473 |
-
|
1474 |
-
width: 300px
|
1475 |
-
|
1476 |
-
|
1477 |
-
}
|
1478 |
-
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
.mo2f_modal-md {
|
1484 |
-
|
1485 |
-
|
1486 |
-
width: 550px
|
1487 |
-
|
1488 |
-
|
1489 |
-
}
|
1490 |
-
|
1491 |
-
|
1492 |
-
}
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
@media ( min-width: 992px) {
|
1499 |
-
|
1500 |
-
|
1501 |
-
.mo2f_modal-lg {
|
1502 |
-
|
1503 |
-
|
1504 |
-
width: 900px;
|
1505 |
-
|
1506 |
-
|
1507 |
-
}
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
.mo2f_modal-md {
|
1514 |
-
|
1515 |
-
|
1516 |
-
width: 550px
|
1517 |
-
|
1518 |
-
|
1519 |
-
}
|
1520 |
-
|
1521 |
-
|
1522 |
-
}
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
.center{
|
1529 |
-
|
1530 |
-
|
1531 |
-
|
1532 |
-
|
1533 |
-
|
1534 |
-
text-align: center !important;
|
1535 |
-
|
1536 |
-
|
1537 |
-
}
|
1538 |
-
|
1539 |
-
|
1540 |
-
|
1541 |
-
|
1542 |
-
|
1543 |
-
#otpMessage {
|
1544 |
-
|
1545 |
-
|
1546 |
-
border-radius: 1px;
|
1547 |
-
|
1548 |
-
|
1549 |
-
padding: 1px 5px;
|
1550 |
-
|
1551 |
-
|
1552 |
-
background: #f1f1f1;
|
1553 |
-
|
1554 |
-
|
1555 |
-
}
|
1556 |
-
|
1557 |
-
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
.mo2f_carousel-indicators {
|
1562 |
-
|
1563 |
-
|
1564 |
-
position: absolute;
|
1565 |
-
|
1566 |
-
|
1567 |
-
bottom: -20px;
|
1568 |
-
|
1569 |
-
|
1570 |
-
z-index: 15;
|
1571 |
-
|
1572 |
-
|
1573 |
-
width: 60%;
|
1574 |
-
|
1575 |
-
|
1576 |
-
list-style: none;
|
1577 |
-
|
1578 |
-
|
1579 |
-
text-align: center;
|
1580 |
-
|
1581 |
-
|
1582 |
-
}
|
1583 |
-
|
1584 |
-
|
1585 |
-
|
1586 |
-
|
1587 |
-
|
1588 |
-
.miniorange_kba_validate:hover, .miniorange_validate_otp:hover, .miniorange_login_forgotphone:hover,
|
1589 |
-
|
1590 |
-
|
1591 |
-
.miniorange_login_offline:hover, .miniorange_login_forgotphone:hover, .miniorange_otp_token_submit:hover, .miniorange_button:hover
|
1592 |
-
|
1593 |
-
|
1594 |
-
{
|
1595 |
-
|
1596 |
-
|
1597 |
-
background-color:#0073AA!important
|
1598 |
-
|
1599 |
-
|
1600 |
-
}
|
1601 |
-
|
1602 |
-
|
1603 |
-
|
1604 |
-
|
1605 |
-
|
1606 |
-
.miniorange_kba_validate, .miniorange_validate_otp, .miniorange_login_forgotphone,
|
1607 |
-
|
1608 |
-
|
1609 |
-
.miniorange_login_offline, .miniorange_login_forgotphone , .miniorange_otp_token_submit,
|
1610 |
-
|
1611 |
-
|
1612 |
-
.miniorange_button
|
1613 |
-
|
1614 |
-
|
1615 |
-
{
|
1616 |
-
|
1617 |
-
|
1618 |
-
background:#00A0D2!important;
|
1619 |
-
|
1620 |
-
|
1621 |
-
border-color:#0073AA!important;
|
1622 |
-
|
1623 |
-
|
1624 |
-
box-shadow:0 1px 0 rgba(120,200,230,.5) inset,0 1px 0 rgba(0,0,0,.15)!important;
|
1625 |
-
|
1626 |
-
|
1627 |
-
color:#FFF!important;
|
1628 |
-
|
1629 |
-
|
1630 |
-
text-decoration:none!important;
|
1631 |
-
|
1632 |
-
|
1633 |
-
cursor:pointer!important;
|
1634 |
-
|
1635 |
-
|
1636 |
-
border-width:1px!important;
|
1637 |
-
|
1638 |
-
|
1639 |
-
border-style:solid!important;
|
1640 |
-
|
1641 |
-
|
1642 |
-
border-radius:3px!important;
|
1643 |
-
|
1644 |
-
|
1645 |
-
white-space:nowrap!important;
|
1646 |
-
|
1647 |
-
|
1648 |
-
box-sizing:border-box!important;
|
1649 |
-
|
1650 |
-
|
1651 |
-
line-height:28px!important;
|
1652 |
-
|
1653 |
-
|
1654 |
-
padding:0 12px!important;
|
1655 |
-
|
1656 |
-
|
1657 |
-
font-size:13px!important;
|
1658 |
-
|
1659 |
-
|
1660 |
-
}
|
1661 |
-
|
1662 |
-
|
1663 |
-
|
1664 |
-
|
1665 |
-
|
1666 |
-
.mo_customer_validation-modal.fade .mo_customer_validation-modal-dialog {
|
1667 |
-
|
1668 |
-
|
1669 |
-
-webkit-transition: -webkit-transform .3s ease-out;
|
1670 |
-
|
1671 |
-
|
1672 |
-
-o-transition: -o-transform .3s ease-out;
|
1673 |
-
|
1674 |
-
|
1675 |
-
transition: transform .3s ease-out;
|
1676 |
-
|
1677 |
-
|
1678 |
-
-webkit-transform: translate(0, -25%);
|
1679 |
-
|
1680 |
-
|
1681 |
-
-ms-transform: translate(0, -25%);
|
1682 |
-
|
1683 |
-
|
1684 |
-
-o-transform: translate(0, -25%);
|
1685 |
-
|
1686 |
-
|
1687 |
-
transform: translate(0, -25%)
|
1688 |
-
|
1689 |
-
|
1690 |
-
}
|
1691 |
-
|
1692 |
-
|
1693 |
-
|
1694 |
-
|
1695 |
-
|
1696 |
-
.mo_customer_validation-modal.in .mo_customer_validation-modal-dialog {
|
1697 |
-
|
1698 |
-
|
1699 |
-
-webkit-transform: translate(0, 80px) !important;
|
1700 |
-
|
1701 |
-
|
1702 |
-
-ms-transform: translate(0, 80px) !important;
|
1703 |
-
|
1704 |
-
|
1705 |
-
-o-transform: translate(0, 80px) !important;
|
1706 |
-
|
1707 |
-
|
1708 |
-
transform: translate(0, 80px) !important
|
1709 |
-
|
1710 |
-
|
1711 |
-
}
|
1712 |
-
|
1713 |
-
|
1714 |
-
|
1715 |
-
|
1716 |
-
|
1717 |
-
.mo_customer_validation-modal-open .mo_customer_validation-modal {
|
1718 |
-
|
1719 |
-
|
1720 |
-
overflow-x: hidden;
|
1721 |
-
|
1722 |
-
|
1723 |
-
overflow-y: hidden
|
1724 |
-
|
1725 |
-
|
1726 |
-
}
|
1727 |
-
|
1728 |
-
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
.mo_customer_validation-modal-dialog {
|
1733 |
-
|
1734 |
-
|
1735 |
-
position: relative;
|
1736 |
-
|
1737 |
-
|
1738 |
-
width: auto;
|
1739 |
-
|
1740 |
-
|
1741 |
-
margin: 10px
|
1742 |
-
|
1743 |
-
|
1744 |
-
}
|
1745 |
-
|
1746 |
-
|
1747 |
-
|
1748 |
-
|
1749 |
-
|
1750 |
-
.mo_customer_validation-modal-content {
|
1751 |
-
|
1752 |
-
|
1753 |
-
position: relative;
|
1754 |
-
|
1755 |
-
|
1756 |
-
-webkit-background-clip: padding-box;
|
1757 |
-
|
1758 |
-
|
1759 |
-
border: 1px solid #999;
|
1760 |
-
|
1761 |
-
|
1762 |
-
border: 1px solid rgba(0, 0, 0, .2);
|
1763 |
-
|
1764 |
-
|
1765 |
-
outline: 0;
|
1766 |
-
|
1767 |
-
|
1768 |
-
margin-top: 8%;
|
1769 |
-
|
1770 |
-
|
1771 |
-
margin-left: 0;
|
1772 |
-
|
1773 |
-
|
1774 |
-
padding: 15px 20px 0;
|
1775 |
-
|
1776 |
-
|
1777 |
-
font-family: "Open Sans", sans-serif;
|
1778 |
-
|
1779 |
-
|
1780 |
-
|
1781 |
-
font-size: 14px;
|
1782 |
-
|
1783 |
-
|
1784 |
-
line-height: 1.4em;
|
1785 |
-
|
1786 |
-
|
1787 |
-
background: #FFF;
|
1788 |
-
|
1789 |
-
|
1790 |
-
box-shadow: 0 1px 3px rgba(0, 0, 0, .13)
|
1791 |
-
|
1792 |
-
|
1793 |
-
}
|
1794 |
-
|
1795 |
-
|
1796 |
-
|
1797 |
-
|
1798 |
-
|
1799 |
-
.mo_customer_validation-modal-backdrop {
|
1800 |
-
|
1801 |
-
|
1802 |
-
position: absolute;
|
1803 |
-
|
1804 |
-
|
1805 |
-
top: 0;
|
1806 |
-
|
1807 |
-
|
1808 |
-
right: 0;
|
1809 |
-
|
1810 |
-
|
1811 |
-
left: 0;
|
1812 |
-
|
1813 |
-
|
1814 |
-
background-color: #000 !important;
|
1815 |
-
|
1816 |
-
|
1817 |
-
filter: alpha(opacity=50) !important;
|
1818 |
-
|
1819 |
-
|
1820 |
-
opacity: .9 !important;
|
1821 |
-
|
1822 |
-
|
1823 |
-
height: 100% !important
|
1824 |
-
|
1825 |
-
|
1826 |
-
}
|
1827 |
-
|
1828 |
-
|
1829 |
-
|
1830 |
-
|
1831 |
-
|
1832 |
-
.mo_customer_validation-modal-header {
|
1833 |
-
|
1834 |
-
|
1835 |
-
min-height: 14px;
|
1836 |
-
|
1837 |
-
|
1838 |
-
padding: 10px 10px 20px;
|
1839 |
-
|
1840 |
-
|
1841 |
-
border-bottom: 1px solid #e5e5e5
|
1842 |
-
|
1843 |
-
|
1844 |
-
}
|
1845 |
-
|
1846 |
-
|
1847 |
-
|
1848 |
-
|
1849 |
-
|
1850 |
-
.mo_customer_validation-modal-title {
|
1851 |
-
|
1852 |
-
|
1853 |
-
margin: 0 !important;
|
1854 |
-
|
1855 |
-
|
1856 |
-
line-height: 1 !important
|
1857 |
-
|
1858 |
-
|
1859 |
-
}
|
1860 |
-
|
1861 |
-
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
.mo_customer_validation-modal-body {
|
1866 |
-
|
1867 |
-
|
1868 |
-
position: relative;
|
1869 |
-
|
1870 |
-
|
1871 |
-
padding: 5%;
|
1872 |
-
|
1873 |
-
|
1874 |
-
overflow: hidden !important;
|
1875 |
-
|
1876 |
-
|
1877 |
-
max-height: 550px !important
|
1878 |
-
|
1879 |
-
|
1880 |
-
}
|
1881 |
-
|
1882 |
-
|
1883 |
-
|
1884 |
-
|
1885 |
-
|
1886 |
-
.mo_customer_validation-modal-footer {
|
1887 |
-
|
1888 |
-
|
1889 |
-
padding: 15px;
|
1890 |
-
|
1891 |
-
|
1892 |
-
text-align: right;
|
1893 |
-
|
1894 |
-
|
1895 |
-
border-top: 1px solid #e5e5e5
|
1896 |
-
|
1897 |
-
|
1898 |
-
}
|
1899 |
-
|
1900 |
-
|
1901 |
-
|
1902 |
-
|
1903 |
-
|
1904 |
-
.mo_customer_validation-modal-footer .btn + .btn {
|
1905 |
-
|
1906 |
-
|
1907 |
-
margin-bottom: 0;
|
1908 |
-
|
1909 |
-
|
1910 |
-
margin-left: 5px
|
1911 |
-
|
1912 |
-
|
1913 |
-
}
|
1914 |
-
|
1915 |
-
|
1916 |
-
|
1917 |
-
|
1918 |
-
|
1919 |
-
.mo_customer_validation-modal-footer .btn-group .btn + .btn {
|
1920 |
-
|
1921 |
-
|
1922 |
-
margin-left: -1px
|
1923 |
-
|
1924 |
-
|
1925 |
-
}
|
1926 |
-
|
1927 |
-
|
1928 |
-
|
1929 |
-
|
1930 |
-
|
1931 |
-
.mo_customer_validation-modal-footer .btn-block + .btn-block {
|
1932 |
-
|
1933 |
-
|
1934 |
-
margin-left: 0
|
1935 |
-
|
1936 |
-
|
1937 |
-
}
|
1938 |
-
|
1939 |
-
|
1940 |
-
|
1941 |
-
|
1942 |
-
|
1943 |
-
.mo_customer_validation-modal-scrollbar-measure {
|
1944 |
-
|
1945 |
-
|
1946 |
-
position: absolute;
|
1947 |
-
|
1948 |
-
|
1949 |
-
top: -9999px;
|
1950 |
-
|
1951 |
-
|
1952 |
-
width: 50px;
|
1953 |
-
|
1954 |
-
|
1955 |
-
height: 50px;
|
1956 |
-
|
1957 |
-
|
1958 |
-
overflow: scroll
|
1959 |
-
|
1960 |
-
|
1961 |
-
}
|
1962 |
-
|
1963 |
-
|
1964 |
-
|
1965 |
-
|
1966 |
-
|
1967 |
-
@media (min-width: 768px) {
|
1968 |
-
|
1969 |
-
|
1970 |
-
.mo_customer_validation-modal-dialog {
|
1971 |
-
|
1972 |
-
|
1973 |
-
width: auto;
|
1974 |
-
|
1975 |
-
|
1976 |
-
margin: 0 auto
|
1977 |
-
|
1978 |
-
|
1979 |
-
}
|
1980 |
-
|
1981 |
-
|
1982 |
-
|
1983 |
-
|
1984 |
-
|
1985 |
-
.mo_customer_validation-modal-content {
|
1986 |
-
|
1987 |
-
|
1988 |
-
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
|
1989 |
-
|
1990 |
-
|
1991 |
-
box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
|
1992 |
-
|
1993 |
-
|
1994 |
-
}
|
1995 |
-
|
1996 |
-
|
1997 |
-
|
1998 |
-
|
1999 |
-
|
2000 |
-
.mo_customer_validation-modal-sm {
|
2001 |
-
|
2002 |
-
|
2003 |
-
width: 300px
|
2004 |
-
|
2005 |
-
|
2006 |
-
}
|
2007 |
-
|
2008 |
-
|
2009 |
-
|
2010 |
-
|
2011 |
-
|
2012 |
-
.mo_customer_validation-modal-md {
|
2013 |
-
|
2014 |
-
|
2015 |
-
width: 532px
|
2016 |
-
|
2017 |
-
|
2018 |
-
}
|
2019 |
-
|
2020 |
-
|
2021 |
-
|
2022 |
-
|
2023 |
-
|
2024 |
-
.mo_customer_validation-modal-lg {
|
2025 |
-
|
2026 |
-
|
2027 |
-
width: 50%
|
2028 |
-
|
2029 |
-
|
2030 |
-
}
|
2031 |
-
|
2032 |
-
|
2033 |
-
}
|
2034 |
-
|
2035 |
-
|
2036 |
-
|
2037 |
-
|
2038 |
-
|
2039 |
-
@media (min-width: 992px) {
|
2040 |
-
|
2041 |
-
|
2042 |
-
.mo_customer_validation-modal-dialog {
|
2043 |
-
|
2044 |
-
|
2045 |
-
width: auto;
|
2046 |
-
|
2047 |
-
|
2048 |
-
margin: 0 auto
|
2049 |
-
|
2050 |
-
|
2051 |
-
}
|
2052 |
-
|
2053 |
-
|
2054 |
-
|
2055 |
-
|
2056 |
-
|
2057 |
-
.mo_customer_validation-modal-lg {
|
2058 |
-
|
2059 |
-
|
2060 |
-
width: 490px
|
2061 |
-
|
2062 |
-
|
2063 |
-
}
|
2064 |
-
|
2065 |
-
|
2066 |
-
|
2067 |
-
|
2068 |
-
|
2069 |
-
.mo_customer_validation-modal-md {
|
2070 |
-
|
2071 |
-
|
2072 |
-
width: 532px
|
2073 |
-
|
2074 |
-
|
2075 |
-
}
|
2076 |
-
|
2077 |
-
|
2078 |
-
}
|
2079 |
-
|
2080 |
-
|
2081 |
-
|
2082 |
-
|
2083 |
-
|
2084 |
-
.mo_customer_validation-textbox {
|
2085 |
-
|
2086 |
-
|
2087 |
-
background: #FBFBFB;
|
2088 |
-
|
2089 |
-
|
2090 |
-
font-family: "Open Sans", sans-serif;
|
2091 |
-
|
2092 |
-
|
2093 |
-
font-size: 24px;
|
2094 |
-
|
2095 |
-
|
2096 |
-
width: 100%;
|
2097 |
-
|
2098 |
-
|
2099 |
-
border: 1px solid #DDD;
|
2100 |
-
|
2101 |
-
|
2102 |
-
padding: 3px;
|
2103 |
-
|
2104 |
-
|
2105 |
-
margin: 2px 6px 16px 0
|
2106 |
-
|
2107 |
-
|
2108 |
-
}
|
2109 |
-
|
2110 |
-
|
2111 |
-
|
2112 |
-
|
2113 |
-
|
2114 |
-
.mo_customer_validation-textbox:focus {
|
2115 |
-
|
2116 |
-
|
2117 |
-
border-color: #5B9DD9;
|
2118 |
-
|
2119 |
-
|
2120 |
-
box-shadow: 0 0 2px rgba(30, 140, 190, .8)
|
2121 |
-
|
2122 |
-
|
2123 |
-
}
|
2124 |
-
|
2125 |
-
|
2126 |
-
|
2127 |
-
|
2128 |
-
|
2129 |
-
.button-primary,
|
2130 |
-
|
2131 |
-
|
2132 |
-
.button-secondary {
|
2133 |
-
|
2134 |
-
|
2135 |
-
background: #00A0D2;
|
2136 |
-
|
2137 |
-
|
2138 |
-
border-color: #0073AA;
|
2139 |
-
|
2140 |
-
|
2141 |
-
box-shadow: 0 1px 0 rgba(120, 200, 230, .5) inset, 0 1px 0 rgba(0, 0, 0, .15);
|
2142 |
-
|
2143 |
-
|
2144 |
-
color: #FFF;
|
2145 |
-
|
2146 |
-
|
2147 |
-
text-decoration: none;
|
2148 |
-
|
2149 |
-
|
2150 |
-
cursor: pointer;
|
2151 |
-
|
2152 |
-
|
2153 |
-
border-width: 1px;
|
2154 |
-
|
2155 |
-
|
2156 |
-
border-style: solid;
|
2157 |
-
|
2158 |
-
|
2159 |
-
border-radius: 3px;
|
2160 |
-
|
2161 |
-
|
2162 |
-
white-space: nowrap;
|
2163 |
-
|
2164 |
-
|
2165 |
-
box-sizing: border-box;
|
2166 |
-
|
2167 |
-
|
2168 |
-
line-height: 28px;
|
2169 |
-
|
2170 |
-
|
2171 |
-
padding: 0 12px;
|
2172 |
-
|
2173 |
-
|
2174 |
-
font-size: 13px
|
2175 |
-
|
2176 |
-
|
2177 |
-
}
|
2178 |
-
|
2179 |
-
|
2180 |
-
|
2181 |
-
|
2182 |
-
|
2183 |
-
.button:hover {
|
2184 |
-
|
2185 |
-
|
2186 |
-
background-color: #0073AA
|
2187 |
-
|
2188 |
-
|
2189 |
-
}
|
2190 |
-
|
2191 |
-
|
2192 |
-
|
2193 |
-
|
2194 |
-
|
2195 |
-
.close {
|
2196 |
-
|
2197 |
-
|
2198 |
-
float: right;
|
2199 |
-
|
2200 |
-
|
2201 |
-
transition: color .1s ease-in-out, background .1s ease-in-out;
|
2202 |
-
|
2203 |
-
|
2204 |
-
text-decoration: none;
|
2205 |
-
|
2206 |
-
|
2207 |
-
color: #999;
|
2208 |
-
|
2209 |
-
|
2210 |
-
font-size: 13px
|
2211 |
-
|
2212 |
-
|
2213 |
-
}
|
2214 |
-
|
2215 |
-
|
2216 |
-
|
2217 |
-
|
2218 |
-
|
2219 |
-
.mo_validate_close:focus,
|
2220 |
-
|
2221 |
-
|
2222 |
-
.mo_validate_close:hover {
|
2223 |
-
|
2224 |
-
|
2225 |
-
color: #0085ba
|
2226 |
-
|
2227 |
-
|
2228 |
-
}
|
2229 |
-
|
2230 |
-
|
2231 |
-
|
2232 |
-
|
2233 |
-
|
2234 |
-
.mo_registration_pricing_text {
|
2235 |
-
|
2236 |
-
|
2237 |
-
font-size: 13px;
|
2238 |
-
|
2239 |
-
|
2240 |
-
color: darkblue;
|
2241 |
-
|
2242 |
-
|
2243 |
-
}
|
2244 |
-
|
2245 |
-
|
2246 |
-
|
2247 |
-
|
2248 |
-
|
2249 |
-
.mo_otp_token {
|
2250 |
-
|
2251 |
-
|
2252 |
-
font-size: 15px;
|
2253 |
-
|
2254 |
-
|
2255 |
-
color: #212F3C;
|
2256 |
-
|
2257 |
-
|
2258 |
-
border: none;
|
2259 |
-
|
2260 |
-
|
2261 |
-
display: block;
|
2262 |
-
|
2263 |
-
|
2264 |
-
border-bottom-style: solid;
|
2265 |
-
|
2266 |
-
|
2267 |
-
border-width: 2px;
|
2268 |
-
|
2269 |
-
|
2270 |
-
border-color: #D0D3D4;
|
2271 |
-
|
2272 |
-
|
2273 |
-
border-radius: 0px;
|
2274 |
-
|
2275 |
-
|
2276 |
-
outline: none;
|
2277 |
-
|
2278 |
-
|
2279 |
-
width: 140px;
|
2280 |
-
|
2281 |
-
|
2282 |
-
text-align: center;
|
2283 |
-
|
2284 |
-
|
2285 |
-
}
|
2286 |
-
|
2287 |
-
|
2288 |
-
|
2289 |
-
|
2290 |
-
|
2291 |
-
.container {
|
2292 |
-
|
2293 |
-
|
2294 |
-
max-width: 960px
|
2295 |
-
|
2296 |
-
|
2297 |
-
}
|
2298 |
-
|
2299 |
-
|
2300 |
-
|
2301 |
-
|
2302 |
-
|
2303 |
-
}
|
2304 |
-
|
2305 |
-
|
2306 |
-
@media (min-width: 1200px) {
|
2307 |
-
|
2308 |
-
|
2309 |
-
.container {
|
2310 |
-
|
2311 |
-
|
2312 |
-
max-width: 1140px
|
2313 |
-
|
2314 |
-
|
2315 |
-
}
|
2316 |
-
|
2317 |
-
|
2318 |
-
}
|
2319 |
-
|
2320 |
-
|
2321 |
-
|
2322 |
-
|
2323 |
-
|
2324 |
-
.container-fluid {
|
2325 |
-
|
2326 |
-
|
2327 |
-
width: 100%;
|
2328 |
-
|
2329 |
-
|
2330 |
-
padding-right: 15px;
|
2331 |
-
|
2332 |
-
|
2333 |
-
padding-left: 15px;
|
2334 |
-
|
2335 |
-
|
2336 |
-
margin-right: auto;
|
2337 |
-
|
2338 |
-
|
2339 |
-
margin-left: auto
|
2340 |
-
|
2341 |
-
|
2342 |
-
}
|
2343 |
-
|
2344 |
-
|
2345 |
-
|
2346 |
-
|
2347 |
-
|
2348 |
-
.row {
|
2349 |
-
|
2350 |
-
|
2351 |
-
display: -webkit-box;
|
2352 |
-
|
2353 |
-
|
2354 |
-
display: -ms-flexbox;
|
2355 |
-
|
2356 |
-
|
2357 |
-
display: flex;
|
2358 |
-
|
2359 |
-
|
2360 |
-
-ms-flex-wrap: wrap;
|
2361 |
-
|
2362 |
-
|
2363 |
-
flex-wrap: wrap;
|
2364 |
-
|
2365 |
-
|
2366 |
-
margin-right: -15px;
|
2367 |
-
|
2368 |
-
|
2369 |
-
margin-left: -15px
|
2370 |
-
|
2371 |
-
|
2372 |
-
}
|
2373 |
-
|
2374 |
-
|
2375 |
-
|
2376 |
-
|
2377 |
-
|
2378 |
-
|
2379 |
-
|
2380 |
-
|
2381 |
-
.no-gutters {
|
2382 |
-
|
2383 |
-
|
2384 |
-
margin-right: 0;
|
2385 |
-
|
2386 |
-
|
2387 |
-
margin-left: 0
|
2388 |
-
|
2389 |
-
|
2390 |
-
}
|
2391 |
-
|
2392 |
-
|
2393 |
-
|
2394 |
-
|
2395 |
-
|
2396 |
-
.no-gutters > .col, .no-gutters > [class*=col-] {
|
2397 |
-
|
2398 |
-
|
2399 |
-
padding-right: 0;
|
2400 |
-
|
2401 |
-
|
2402 |
-
padding-left: 0
|
2403 |
-
|
2404 |
-
|
2405 |
-
}
|
2406 |
-
|
2407 |
-
|
2408 |
-
|
2409 |
-
|
2410 |
-
|
2411 |
-
.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {
|
2412 |
-
|
2413 |
-
|
2414 |
-
position: relative;
|
2415 |
-
|
2416 |
-
|
2417 |
-
width: 100%;
|
2418 |
-
|
2419 |
-
|
2420 |
-
min-height: 1px;
|
2421 |
-
|
2422 |
-
|
2423 |
-
padding-right: 15px;
|
2424 |
-
|
2425 |
-
|
2426 |
-
padding-left: 15px
|
2427 |
-
|
2428 |
-
|
2429 |
-
}
|
2430 |
-
|
2431 |
-
|
2432 |
-
|
2433 |
-
|
2434 |
-
|
2435 |
-
.col {
|
2436 |
-
|
2437 |
-
|
2438 |
-
-ms-flex-preferred-size: 0;
|
2439 |
-
|
2440 |
-
|
2441 |
-
flex-basis: 0;
|
2442 |
-
|
2443 |
-
|
2444 |
-
-webkit-box-flex: 1;
|
2445 |
-
|
2446 |
-
|
2447 |
-
-ms-flex-positive: 1;
|
2448 |
-
|
2449 |
-
|
2450 |
-
flex-grow: 1;
|
2451 |
-
|
2452 |
-
|
2453 |
-
max-width: 100%
|
2454 |
-
|
2455 |
-
|
2456 |
-
}
|
2457 |
-
|
2458 |
-
|
2459 |
-
|
2460 |
-
|
2461 |
-
|
2462 |
-
.col-auto {
|
2463 |
-
|
2464 |
-
|
2465 |
-
-webkit-box-flex: 0;
|
2466 |
-
|
2467 |
-
|
2468 |
-
-ms-flex: 0 0 auto;
|
2469 |
-
|
2470 |
-
|
2471 |
-
flex: 0 0 auto;
|
2472 |
-
|
2473 |
-
|
2474 |
-
width: auto;
|
2475 |
-
|
2476 |
-
|
2477 |
-
max-width: none
|
2478 |
-
|
2479 |
-
|
2480 |
-
}
|
2481 |
-
|
2482 |
-
|
2483 |
-
|
2484 |
-
|
2485 |
-
|
2486 |
-
.col-1 {
|
2487 |
-
|
2488 |
-
|
2489 |
-
-webkit-box-flex: 0;
|
2490 |
-
|
2491 |
-
|
2492 |
-
-ms-flex: 0 0 8.333333%;
|
2493 |
-
|
2494 |
-
|
2495 |
-
flex: 0 0 8.333333%;
|
2496 |
-
|
2497 |
-
|
2498 |
-
max-width: 8.333333%
|
2499 |
-
|
2500 |
-
|
2501 |
-
}
|
2502 |
-
|
2503 |
-
|
2504 |
-
|
2505 |
-
|
2506 |
-
|
2507 |
-
.col-2 {
|
2508 |
-
|
2509 |
-
|
2510 |
-
-webkit-box-flex: 0;
|
2511 |
-
|
2512 |
-
|
2513 |
-
-ms-flex: 0 0 16.666667%;
|
2514 |
-
|
2515 |
-
|
2516 |
-
flex: 0 0 16.666667%;
|
2517 |
-
|
2518 |
-
|
2519 |
-
max-width: 16.666667%
|
2520 |
-
|
2521 |
-
|
2522 |
-
}
|
2523 |
-
|
2524 |
-
|
2525 |
-
|
2526 |
-
|
2527 |
-
|
2528 |
-
.col-3 {
|
2529 |
-
|
2530 |
-
|
2531 |
-
-webkit-box-flex: 0;
|
2532 |
-
|
2533 |
-
|
2534 |
-
-ms-flex: 0 0 25%;
|
2535 |
-
|
2536 |
-
|
2537 |
-
flex: 0 0 25%;
|
2538 |
-
|
2539 |
-
|
2540 |
-
max-width: 25%
|
2541 |
-
|
2542 |
-
|
2543 |
-
}
|
2544 |
-
|
2545 |
-
|
2546 |
-
|
2547 |
-
|
2548 |
-
|
2549 |
-
.col-4 {
|
2550 |
-
|
2551 |
-
|
2552 |
-
-webkit-box-flex: 0;
|
2553 |
-
|
2554 |
-
|
2555 |
-
-ms-flex: 0 0 33.333333%;
|
2556 |
-
|
2557 |
-
|
2558 |
-
flex: 0 0 33.333333%;
|
2559 |
-
|
2560 |
-
|
2561 |
-
max-width: 33.333333%
|
2562 |
-
|
2563 |
-
|
2564 |
-
}
|
2565 |
-
|
2566 |
-
|
2567 |
-
|
2568 |
-
|
2569 |
-
|
2570 |
-
.col-5 {
|
2571 |
-
|
2572 |
-
|
2573 |
-
-webkit-box-flex: 0;
|
2574 |
-
|
2575 |
-
|
2576 |
-
-ms-flex: 0 0 41.666667%;
|
2577 |
-
|
2578 |
-
|
2579 |
-
flex: 0 0 41.666667%;
|
2580 |
-
|
2581 |
-
|
2582 |
-
max-width: 41.666667%
|
2583 |
-
|
2584 |
-
|
2585 |
-
}
|
2586 |
-
|
2587 |
-
|
2588 |
-
|
2589 |
-
|
2590 |
-
|
2591 |
-
.col-6 {
|
2592 |
-
|
2593 |
-
|
2594 |
-
-webkit-box-flex: 0;
|
2595 |
-
|
2596 |
-
|
2597 |
-
-ms-flex: 0 0 50%;
|
2598 |
-
|
2599 |
-
|
2600 |
-
flex: 0 0 50%;
|
2601 |
-
|
2602 |
-
|
2603 |
-
max-width: 50%
|
2604 |
-
|
2605 |
-
|
2606 |
-
}
|
2607 |
-
|
2608 |
-
|
2609 |
-
|
2610 |
-
|
2611 |
-
|
2612 |
-
.col-7 {
|
2613 |
-
|
2614 |
-
|
2615 |
-
-webkit-box-flex: 0;
|
2616 |
-
|
2617 |
-
|
2618 |
-
-ms-flex: 0 0 58.333333%;
|
2619 |
-
|
2620 |
-
|
2621 |
-
flex: 0 0 58.333333%;
|
2622 |
-
|
2623 |
-
|
2624 |
-
max-width: 58.333333%
|
2625 |
-
|
2626 |
-
|
2627 |
-
}
|
2628 |
-
|
2629 |
-
|
2630 |
-
|
2631 |
-
|
2632 |
-
|
2633 |
-
.col-8 {
|
2634 |
-
|
2635 |
-
|
2636 |
-
-webkit-box-flex: 0;
|
2637 |
-
|
2638 |
-
|
2639 |
-
-ms-flex: 0 0 66.666667%;
|
2640 |
-
|
2641 |
-
|
2642 |
-
flex: 0 0 66.666667%;
|
2643 |
-
|
2644 |
-
|
2645 |
-
max-width: 66.666667%
|
2646 |
-
|
2647 |
-
|
2648 |
-
}
|
2649 |
-
|
2650 |
-
|
2651 |
-
|
2652 |
-
|
2653 |
-
|
2654 |
-
.col-9 {
|
2655 |
-
|
2656 |
-
|
2657 |
-
-webkit-box-flex: 0;
|
2658 |
-
|
2659 |
-
|
2660 |
-
-ms-flex: 0 0 75%;
|
2661 |
-
|
2662 |
-
|
2663 |
-
flex: 0 0 75%;
|
2664 |
-
|
2665 |
-
|
2666 |
-
max-width: 75%
|
2667 |
-
|
2668 |
-
|
2669 |
-
}
|
2670 |
-
|
2671 |
-
|
2672 |
-
|
2673 |
-
|
2674 |
-
|
2675 |
-
.col-10 {
|
2676 |
-
|
2677 |
-
|
2678 |
-
-webkit-box-flex: 0;
|
2679 |
-
|
2680 |
-
|
2681 |
-
-ms-flex: 0 0 83.333333%;
|
2682 |
-
|
2683 |
-
|
2684 |
-
flex: 0 0 83.333333%;
|
2685 |
-
|
2686 |
-
|
2687 |
-
max-width: 83.333333%
|
2688 |
-
|
2689 |
-
|
2690 |
-
}
|
2691 |
-
|
2692 |
-
|
2693 |
-
|
2694 |
-
|
2695 |
-
|
2696 |
-
.col-11 {
|
2697 |
-
|
2698 |
-
|
2699 |
-
-webkit-box-flex: 0;
|
2700 |
-
|
2701 |
-
|
2702 |
-
-ms-flex: 0 0 91.666667%;
|
2703 |
-
|
2704 |
-
|
2705 |
-
flex: 0 0 91.666667%;
|
2706 |
-
|
2707 |
-
|
2708 |
-
max-width: 91.666667%
|
2709 |
-
|
2710 |
-
|
2711 |
-
}
|
2712 |
-
|
2713 |
-
|
2714 |
-
|
2715 |
-
|
2716 |
-
|
2717 |
-
.col-12 {
|
2718 |
-
|
2719 |
-
|
2720 |
-
-webkit-box-flex: 0;
|
2721 |
-
|
2722 |
-
|
2723 |
-
-ms-flex: 0 0 100%;
|
2724 |
-
|
2725 |
-
|
2726 |
-
flex: 0 0 100%;
|
2727 |
-
|
2728 |
-
|
2729 |
-
max-width: 100%
|
2730 |
-
|
2731 |
-
|
2732 |
-
}
|
2733 |
-
|
2734 |
-
|
2735 |
-
|
2736 |
-
|
2737 |
-
|
2738 |
-
.order-first {
|
2739 |
-
|
2740 |
-
|
2741 |
-
-webkit-box-ordinal-group: 0;
|
2742 |
-
|
2743 |
-
|
2744 |
-
-ms-flex-order: -1;
|
2745 |
-
|
2746 |
-
|
2747 |
-
order: -1
|
2748 |
-
|
2749 |
-
|
2750 |
-
}
|
2751 |
-
|
2752 |
-
|
2753 |
-
|
2754 |
-
|
2755 |
-
|
2756 |
-
.order-last {
|
2757 |
-
|
2758 |
-
|
2759 |
-
-webkit-box-ordinal-group: 14;
|
2760 |
-
|
2761 |
-
|
2762 |
-
-ms-flex-order: 13;
|
2763 |
-
|
2764 |
-
|
2765 |
-
order: 13
|
2766 |
-
|
2767 |
-
|
2768 |
-
}
|
2769 |
-
|
2770 |
-
|
2771 |
-
|
2772 |
-
|
2773 |
-
|
2774 |
-
.order-0 {
|
2775 |
-
|
2776 |
-
|
2777 |
-
-webkit-box-ordinal-group: 1;
|
2778 |
-
|
2779 |
-
|
2780 |
-
-ms-flex-order: 0;
|
2781 |
-
|
2782 |
-
|
2783 |
-
order: 0
|
2784 |
-
|
2785 |
-
|
2786 |
-
}
|
2787 |
-
|
2788 |
-
|
2789 |
-
|
2790 |
-
|
2791 |
-
|
2792 |
-
.order-1 {
|
2793 |
-
|
2794 |
-
|
2795 |
-
-webkit-box-ordinal-group: 2;
|
2796 |
-
|
2797 |
-
|
2798 |
-
-ms-flex-order: 1;
|
2799 |
-
|
2800 |
-
|
2801 |
-
order: 1
|
2802 |
-
|
2803 |
-
|
2804 |
-
}
|
2805 |
-
|
2806 |
-
|
2807 |
-
|
2808 |
-
|
2809 |
-
|
2810 |
-
.order-2 {
|
2811 |
-
|
2812 |
-
|
2813 |
-
-webkit-box-ordinal-group: 3;
|
2814 |
-
|
2815 |
-
|
2816 |
-
-ms-flex-order: 2;
|
2817 |
-
|
2818 |
-
|
2819 |
-
order: 2
|
2820 |
-
|
2821 |
-
|
2822 |
-
}
|
2823 |
-
|
2824 |
-
|
2825 |
-
|
2826 |
-
|
2827 |
-
|
2828 |
-
.order-3 {
|
2829 |
-
|
2830 |
-
|
2831 |
-
-webkit-box-ordinal-group: 4;
|
2832 |
-
|
2833 |
-
|
2834 |
-
-ms-flex-order: 3;
|
2835 |
-
|
2836 |
-
|
2837 |
-
order: 3
|
2838 |
-
|
2839 |
-
|
2840 |
-
}
|
2841 |
-
|
2842 |
-
|
2843 |
-
|
2844 |
-
|
2845 |
-
|
2846 |
-
.order-4 {
|
2847 |
-
|
2848 |
-
|
2849 |
-
-webkit-box-ordinal-group: 5;
|
2850 |
-
|
2851 |
-
|
2852 |
-
-ms-flex-order: 4;
|
2853 |
-
|
2854 |
-
|
2855 |
-
order: 4
|
2856 |
-
|
2857 |
-
|
2858 |
-
}
|
2859 |
-
|
2860 |
-
|
2861 |
-
|
2862 |
-
|
2863 |
-
|
2864 |
-
.order-5 {
|
2865 |
-
|
2866 |
-
|
2867 |
-
-webkit-box-ordinal-group: 6;
|
2868 |
-
|
2869 |
-
|
2870 |
-
-ms-flex-order: 5;
|
2871 |
-
|
2872 |
-
|
2873 |
-
order: 5
|
2874 |
-
|
2875 |
-
|
2876 |
-
}
|
2877 |
-
|
2878 |
-
|
2879 |
-
|
2880 |
-
|
2881 |
-
|
2882 |
-
.order-6 {
|
2883 |
-
|
2884 |
-
|
2885 |
-
-webkit-box-ordinal-group: 7;
|
2886 |
-
|
2887 |
-
|
2888 |
-
-ms-flex-order: 6;
|
2889 |
-
|
2890 |
-
|
2891 |
-
order: 6
|
2892 |
-
|
2893 |
-
|
2894 |
-
}
|
2895 |
-
|
2896 |
-
|
2897 |
-
|
2898 |
-
|
2899 |
-
|
2900 |
-
.order-7 {
|
2901 |
-
|
2902 |
-
|
2903 |
-
-webkit-box-ordinal-group: 8;
|
2904 |
-
|
2905 |
-
|
2906 |
-
-ms-flex-order: 7;
|
2907 |
-
|
2908 |
-
|
2909 |
-
order: 7
|
2910 |
-
|
2911 |
-
|
2912 |
-
}
|
2913 |
-
|
2914 |
-
|
2915 |
-
|
2916 |
-
|
2917 |
-
|
2918 |
-
.order-8 {
|
2919 |
-
|
2920 |
-
|
2921 |
-
-webkit-box-ordinal-group: 9;
|
2922 |
-
|
2923 |
-
|
2924 |
-
-ms-flex-order: 8;
|
2925 |
-
|
2926 |
-
|
2927 |
-
order: 8
|
2928 |
-
|
2929 |
-
|
2930 |
-
}
|
2931 |
-
|
2932 |
-
|
2933 |
-
|
2934 |
-
|
2935 |
-
|
2936 |
-
.order-9 {
|
2937 |
-
|
2938 |
-
|
2939 |
-
-webkit-box-ordinal-group: 10;
|
2940 |
-
|
2941 |
-
|
2942 |
-
-ms-flex-order: 9;
|
2943 |
-
|
2944 |
-
|
2945 |
-
order: 9
|
2946 |
-
|
2947 |
-
|
2948 |
-
}
|
2949 |
-
|
2950 |
-
|
2951 |
-
|
2952 |
-
|
2953 |
-
|
2954 |
-
.order-10 {
|
2955 |
-
|
2956 |
-
|
2957 |
-
-webkit-box-ordinal-group: 11;
|
2958 |
-
|
2959 |
-
|
2960 |
-
-ms-flex-order: 10;
|
2961 |
-
|
2962 |
-
|
2963 |
-
order: 10
|
2964 |
-
|
2965 |
-
|
2966 |
-
}
|
2967 |
-
|
2968 |
-
|
2969 |
-
|
2970 |
-
|
2971 |
-
|
2972 |
-
.order-11 {
|
2973 |
-
|
2974 |
-
|
2975 |
-
-webkit-box-ordinal-group: 12;
|
2976 |
-
|
2977 |
-
|
2978 |
-
-ms-flex-order: 11;
|
2979 |
-
|
2980 |
-
|
2981 |
-
order: 11
|
2982 |
-
|
2983 |
-
|
2984 |
-
}
|
2985 |
-
|
2986 |
-
|
2987 |
-
|
2988 |
-
|
2989 |
-
|
2990 |
-
.order-12 {
|
2991 |
-
|
2992 |
-
|
2993 |
-
-webkit-box-ordinal-group: 13;
|
2994 |
-
|
2995 |
-
|
2996 |
-
-ms-flex-order: 12;
|
2997 |
-
|
2998 |
-
|
2999 |
-
order: 12
|
3000 |
-
|
3001 |
-
|
3002 |
-
}
|
3003 |
-
|
3004 |
-
|
3005 |
-
|
3006 |
-
|
3007 |
-
|
3008 |
-
.offset-1 {
|
3009 |
-
|
3010 |
-
|
3011 |
-
margin-left: 8.333333%
|
3012 |
-
|
3013 |
-
|
3014 |
-
}
|
3015 |
-
|
3016 |
-
|
3017 |
-
|
3018 |
-
|
3019 |
-
|
3020 |
-
.offset-2 {
|
3021 |
-
|
3022 |
-
|
3023 |
-
margin-left: 16.666667%
|
3024 |
-
|
3025 |
-
|
3026 |
-
}
|
3027 |
-
|
3028 |
-
|
3029 |
-
|
3030 |
-
|
3031 |
-
|
3032 |
-
.offset-3 {
|
3033 |
-
|
3034 |
-
|
3035 |
-
margin-left: 25%
|
3036 |
-
|
3037 |
-
|
3038 |
-
}
|
3039 |
-
|
3040 |
-
|
3041 |
-
|
3042 |
-
|
3043 |
-
|
3044 |
-
.offset-4 {
|
3045 |
-
|
3046 |
-
|
3047 |
-
margin-left: 33.333333%
|
3048 |
-
|
3049 |
-
|
3050 |
-
}
|
3051 |
-
|
3052 |
-
|
3053 |
-
|
3054 |
-
|
3055 |
-
|
3056 |
-
.offset-5 {
|
3057 |
-
|
3058 |
-
|
3059 |
-
margin-left: 41.666667%
|
3060 |
-
|
3061 |
-
|
3062 |
-
}
|
3063 |
-
|
3064 |
-
|
3065 |
-
|
3066 |
-
|
3067 |
-
|
3068 |
-
.offset-6 {
|
3069 |
-
|
3070 |
-
|
3071 |
-
margin-left: 50%
|
3072 |
-
|
3073 |
-
|
3074 |
-
}
|
3075 |
-
|
3076 |
-
|
3077 |
-
|
3078 |
-
|
3079 |
-
|
3080 |
-
.offset-7 {
|
3081 |
-
|
3082 |
-
|
3083 |
-
margin-left: 58.333333%
|
3084 |
-
|
3085 |
-
|
3086 |
-
}
|
3087 |
-
|
3088 |
-
|
3089 |
-
|
3090 |
-
|
3091 |
-
|
3092 |
-
.offset-8 {
|
3093 |
-
|
3094 |
-
|
3095 |
-
margin-left: 66.666667%
|
3096 |
-
|
3097 |
-
|
3098 |
-
}
|
3099 |
-
|
3100 |
-
|
3101 |
-
|
3102 |
-
|
3103 |
-
|
3104 |
-
.offset-9 {
|
3105 |
-
|
3106 |
-
|
3107 |
-
margin-left: 75%
|
3108 |
-
|
3109 |
-
|
3110 |
-
}
|
3111 |
-
|
3112 |
-
|
3113 |
-
|
3114 |
-
|
3115 |
-
|
3116 |
-
.offset-10 {
|
3117 |
-
|
3118 |
-
|
3119 |
-
margin-left: 83.333333%
|
3120 |
-
|
3121 |
-
|
3122 |
-
}
|
3123 |
-
|
3124 |
-
|
3125 |
-
|
3126 |
-
|
3127 |
-
|
3128 |
-
.offset-11 {
|
3129 |
-
|
3130 |
-
|
3131 |
-
margin-left: 91.666667%
|
3132 |
-
|
3133 |
-
|
3134 |
-
}
|
3135 |
-
|
3136 |
-
|
3137 |
-
|
3138 |
-
|
3139 |
-
|
3140 |
-
@media (min-width: 576px) {
|
3141 |
-
|
3142 |
-
|
3143 |
-
.col-sm {
|
3144 |
-
|
3145 |
-
|
3146 |
-
-ms-flex-preferred-size: 0;
|
3147 |
-
|
3148 |
-
|
3149 |
-
flex-basis: 0;
|
3150 |
-
|
3151 |
-
|
3152 |
-
-webkit-box-flex: 1;
|
3153 |
-
|
3154 |
-
|
3155 |
-
-ms-flex-positive: 1;
|
3156 |
-
|
3157 |
-
|
3158 |
-
flex-grow: 1;
|
3159 |
-
|
3160 |
-
|
3161 |
-
max-width: 100%
|
3162 |
-
|
3163 |
-
|
3164 |
-
}
|
3165 |
-
|
3166 |
-
|
3167 |
-
|
3168 |
-
|
3169 |
-
|
3170 |
-
.col-sm-auto {
|
3171 |
-
|
3172 |
-
|
3173 |
-
-webkit-box-flex: 0;
|
3174 |
-
|
3175 |
-
|
3176 |
-
-ms-flex: 0 0 auto;
|
3177 |
-
|
3178 |
-
|
3179 |
-
flex: 0 0 auto;
|
3180 |
-
|
3181 |
-
|
3182 |
-
width: auto;
|
3183 |
-
|
3184 |
-
|
3185 |
-
max-width: none
|
3186 |
-
|
3187 |
-
|
3188 |
-
}
|
3189 |
-
|
3190 |
-
|
3191 |
-
|
3192 |
-
|
3193 |
-
|
3194 |
-
.col-sm-1 {
|
3195 |
-
|
3196 |
-
|
3197 |
-
-webkit-box-flex: 0;
|
3198 |
-
|
3199 |
-
|
3200 |
-
-ms-flex: 0 0 8.333333%;
|
3201 |
-
|
3202 |
-
|
3203 |
-
flex: 0 0 8.333333%;
|
3204 |
-
|
3205 |
-
|
3206 |
-
max-width: 8.333333%
|
3207 |
-
|
3208 |
-
|
3209 |
-
}
|
3210 |
-
|
3211 |
-
|
3212 |
-
|
3213 |
-
|
3214 |
-
|
3215 |
-
.col-sm-2 {
|
3216 |
-
|
3217 |
-
|
3218 |
-
-webkit-box-flex: 0;
|
3219 |
-
|
3220 |
-
|
3221 |
-
-ms-flex: 0 0 16.666667%;
|
3222 |
-
|
3223 |
-
|
3224 |
-
flex: 0 0 16.666667%;
|
3225 |
-
|
3226 |
-
|
3227 |
-
max-width: 16.666667%
|
3228 |
-
|
3229 |
-
|
3230 |
-
}
|
3231 |
-
|
3232 |
-
|
3233 |
-
|
3234 |
-
|
3235 |
-
|
3236 |
-
.col-sm-3 {
|
3237 |
-
|
3238 |
-
|
3239 |
-
-webkit-box-flex: 0;
|
3240 |
-
|
3241 |
-
|
3242 |
-
-ms-flex: 0 0 25%;
|
3243 |
-
|
3244 |
-
|
3245 |
-
flex: 0 0 25%;
|
3246 |
-
|
3247 |
-
|
3248 |
-
max-width: 25%
|
3249 |
-
|
3250 |
-
|
3251 |
-
}
|
3252 |
-
|
3253 |
-
|
3254 |
-
|
3255 |
-
|
3256 |
-
|
3257 |
-
.col-sm-4 {
|
3258 |
-
|
3259 |
-
|
3260 |
-
-webkit-box-flex: 0;
|
3261 |
-
|
3262 |
-
|
3263 |
-
-ms-flex: 0 0 33.333333%;
|
3264 |
-
|
3265 |
-
|
3266 |
-
flex: 0 0 33.333333%;
|
3267 |
-
|
3268 |
-
|
3269 |
-
max-width: 33.333333%
|
3270 |
-
|
3271 |
-
|
3272 |
-
}
|
3273 |
-
|
3274 |
-
|
3275 |
-
|
3276 |
-
|
3277 |
-
|
3278 |
-
.col-sm-5 {
|
3279 |
-
|
3280 |
-
|
3281 |
-
-webkit-box-flex: 0;
|
3282 |
-
|
3283 |
-
|
3284 |
-
-ms-flex: 0 0 41.666667%;
|
3285 |
-
|
3286 |
-
|
3287 |
-
flex: 0 0 41.666667%;
|
3288 |
-
|
3289 |
-
|
3290 |
-
max-width: 41.666667%
|
3291 |
-
|
3292 |
-
|
3293 |
-
}
|
3294 |
-
|
3295 |
-
|
3296 |
-
|
3297 |
-
|
3298 |
-
|
3299 |
-
.col-sm-6 {
|
3300 |
-
|
3301 |
-
|
3302 |
-
-webkit-box-flex: 0;
|
3303 |
-
|
3304 |
-
|
3305 |
-
-ms-flex: 0 0 50%;
|
3306 |
-
|
3307 |
-
|
3308 |
-
flex: 0 0 50%;
|
3309 |
-
|
3310 |
-
|
3311 |
-
max-width: 50%
|
3312 |
-
|
3313 |
-
|
3314 |
-
}
|
3315 |
-
|
3316 |
-
|
3317 |
-
|
3318 |
-
|
3319 |
-
|
3320 |
-
.col-sm-7 {
|
3321 |
-
|
3322 |
-
|
3323 |
-
-webkit-box-flex: 0;
|
3324 |
-
|
3325 |
-
|
3326 |
-
-ms-flex: 0 0 58.333333%;
|
3327 |
-
|
3328 |
-
|
3329 |
-
flex: 0 0 58.333333%;
|
3330 |
-
|
3331 |
-
|
3332 |
-
max-width: 58.333333%
|
3333 |
-
|
3334 |
-
|
3335 |
-
}
|
3336 |
-
|
3337 |
-
|
3338 |
-
|
3339 |
-
|
3340 |
-
|
3341 |
-
.col-sm-8 {
|
3342 |
-
|
3343 |
-
|
3344 |
-
-webkit-box-flex: 0;
|
3345 |
-
|
3346 |
-
|
3347 |
-
-ms-flex: 0 0 66.666667%;
|
3348 |
-
|
3349 |
-
|
3350 |
-
flex: 0 0 66.666667%;
|
3351 |
-
|
3352 |
-
|
3353 |
-
max-width: 66.666667%
|
3354 |
-
|
3355 |
-
|
3356 |
-
}
|
3357 |
-
|
3358 |
-
|
3359 |
-
|
3360 |
-
|
3361 |
-
|
3362 |
-
.col-sm-9 {
|
3363 |
-
|
3364 |
-
|
3365 |
-
-webkit-box-flex: 0;
|
3366 |
-
|
3367 |
-
|
3368 |
-
-ms-flex: 0 0 75%;
|
3369 |
-
|
3370 |
-
|
3371 |
-
flex: 0 0 75%;
|
3372 |
-
|
3373 |
-
|
3374 |
-
max-width: 75%
|
3375 |
-
|
3376 |
-
|
3377 |
-
}
|
3378 |
-
|
3379 |
-
|
3380 |
-
|
3381 |
-
|
3382 |
-
|
3383 |
-
.col-sm-10 {
|
3384 |
-
|
3385 |
-
|
3386 |
-
-webkit-box-flex: 0;
|
3387 |
-
|
3388 |
-
|
3389 |
-
-ms-flex: 0 0 83.333333%;
|
3390 |
-
|
3391 |
-
|
3392 |
-
flex: 0 0 83.333333%;
|
3393 |
-
|
3394 |
-
|
3395 |
-
max-width: 83.333333%
|
3396 |
-
|
3397 |
-
|
3398 |
-
}
|
3399 |
-
|
3400 |
-
|
3401 |
-
|
3402 |
-
|
3403 |
-
|
3404 |
-
.col-sm-11 {
|
3405 |
-
|
3406 |
-
|
3407 |
-
-webkit-box-flex: 0;
|
3408 |
-
|
3409 |
-
|
3410 |
-
-ms-flex: 0 0 91.666667%;
|
3411 |
-
|
3412 |
-
|
3413 |
-
flex: 0 0 91.666667%;
|
3414 |
-
|
3415 |
-
|
3416 |
-
max-width: 91.666667%
|
3417 |
-
|
3418 |
-
|
3419 |
-
}
|
3420 |
-
|
3421 |
-
|
3422 |
-
|
3423 |
-
|
3424 |
-
|
3425 |
-
.col-sm-12 {
|
3426 |
-
|
3427 |
-
|
3428 |
-
-webkit-box-flex: 0;
|
3429 |
-
|
3430 |
-
|
3431 |
-
-ms-flex: 0 0 100%;
|
3432 |
-
|
3433 |
-
|
3434 |
-
flex: 0 0 100%;
|
3435 |
-
|
3436 |
-
|
3437 |
-
max-width: 100%
|
3438 |
-
|
3439 |
-
|
3440 |
-
}
|
3441 |
-
|
3442 |
-
|
3443 |
-
|
3444 |
-
|
3445 |
-
|
3446 |
-
.order-sm-first {
|
3447 |
-
|
3448 |
-
|
3449 |
-
-webkit-box-ordinal-group: 0;
|
3450 |
-
|
3451 |
-
|
3452 |
-
-ms-flex-order: -1;
|
3453 |
-
|
3454 |
-
|
3455 |
-
order: -1
|
3456 |
-
|
3457 |
-
|
3458 |
-
}
|
3459 |
-
|
3460 |
-
|
3461 |
-
|
3462 |
-
|
3463 |
-
|
3464 |
-
.order-sm-last {
|
3465 |
-
|
3466 |
-
|
3467 |
-
-webkit-box-ordinal-group: 14;
|
3468 |
-
|
3469 |
-
|
3470 |
-
-ms-flex-order: 13;
|
3471 |
-
|
3472 |
-
|
3473 |
-
order: 13
|
3474 |
-
|
3475 |
-
|
3476 |
-
}
|
3477 |
-
|
3478 |
-
|
3479 |
-
|
3480 |
-
|
3481 |
-
|
3482 |
-
.order-sm-0 {
|
3483 |
-
|
3484 |
-
|
3485 |
-
-webkit-box-ordinal-group: 1;
|
3486 |
-
|
3487 |
-
|
3488 |
-
-ms-flex-order: 0;
|
3489 |
-
|
3490 |
-
|
3491 |
-
order: 0
|
3492 |
-
|
3493 |
-
|
3494 |
-
}
|
3495 |
-
|
3496 |
-
|
3497 |
-
|
3498 |
-
|
3499 |
-
|
3500 |
-
.order-sm-1 {
|
3501 |
-
|
3502 |
-
|
3503 |
-
-webkit-box-ordinal-group: 2;
|
3504 |
-
|
3505 |
-
|
3506 |
-
-ms-flex-order: 1;
|
3507 |
-
|
3508 |
-
|
3509 |
-
order: 1
|
3510 |
-
|
3511 |
-
|
3512 |
-
}
|
3513 |
-
|
3514 |
-
|
3515 |
-
|
3516 |
-
|
3517 |
-
|
3518 |
-
.order-sm-2 {
|
3519 |
-
|
3520 |
-
|
3521 |
-
-webkit-box-ordinal-group: 3;
|
3522 |
-
|
3523 |
-
|
3524 |
-
-ms-flex-order: 2;
|
3525 |
-
|
3526 |
-
|
3527 |
-
order: 2
|
3528 |
-
|
3529 |
-
|
3530 |
-
}
|
3531 |
-
|
3532 |
-
|
3533 |
-
|
3534 |
-
|
3535 |
-
|
3536 |
-
.order-sm-3 {
|
3537 |
-
|
3538 |
-
|
3539 |
-
-webkit-box-ordinal-group: 4;
|
3540 |
-
|
3541 |
-
|
3542 |
-
-ms-flex-order: 3;
|
3543 |
-
|
3544 |
-
|
3545 |
-
order: 3
|
3546 |
-
|
3547 |
-
|
3548 |
-
}
|
3549 |
-
|
3550 |
-
|
3551 |
-
|
3552 |
-
|
3553 |
-
|
3554 |
-
.order-sm-4 {
|
3555 |
-
|
3556 |
-
|
3557 |
-
-webkit-box-ordinal-group: 5;
|
3558 |
-
|
3559 |
-
|
3560 |
-
-ms-flex-order: 4;
|
3561 |
-
|
3562 |
-
|
3563 |
-
order: 4
|
3564 |
-
|
3565 |
-
|
3566 |
-
}
|
3567 |
-
|
3568 |
-
|
3569 |
-
|
3570 |
-
|
3571 |
-
|
3572 |
-
.order-sm-5 {
|
3573 |
-
|
3574 |
-
|
3575 |
-
-webkit-box-ordinal-group: 6;
|
3576 |
-
|
3577 |
-
|
3578 |
-
-ms-flex-order: 5;
|
3579 |
-
|
3580 |
-
|
3581 |
-
order: 5
|
3582 |
-
|
3583 |
-
|
3584 |
-
}
|
3585 |
-
|
3586 |
-
|
3587 |
-
|
3588 |
-
|
3589 |
-
|
3590 |
-
.order-sm-6 {
|
3591 |
-
|
3592 |
-
|
3593 |
-
-webkit-box-ordinal-group: 7;
|
3594 |
-
|
3595 |
-
|
3596 |
-
-ms-flex-order: 6;
|
3597 |
-
|
3598 |
-
|
3599 |
-
order: 6
|
3600 |
-
|
3601 |
-
|
3602 |
-
}
|
3603 |
-
|
3604 |
-
|
3605 |
-
|
3606 |
-
|
3607 |
-
|
3608 |
-
.order-sm-7 {
|
3609 |
-
|
3610 |
-
|
3611 |
-
-webkit-box-ordinal-group: 8;
|
3612 |
-
|
3613 |
-
|
3614 |
-
-ms-flex-order: 7;
|
3615 |
-
|
3616 |
-
|
3617 |
-
order: 7
|
3618 |
-
|
3619 |
-
|
3620 |
-
}
|
3621 |
-
|
3622 |
-
|
3623 |
-
|
3624 |
-
|
3625 |
-
|
3626 |
-
.order-sm-8 {
|
3627 |
-
|
3628 |
-
|
3629 |
-
-webkit-box-ordinal-group: 9;
|
3630 |
-
|
3631 |
-
|
3632 |
-
-ms-flex-order: 8;
|
3633 |
-
|
3634 |
-
|
3635 |
-
order: 8
|
3636 |
-
|
3637 |
-
|
3638 |
-
}
|
3639 |
-
|
3640 |
-
|
3641 |
-
|
3642 |
-
|
3643 |
-
|
3644 |
-
.order-sm-9 {
|
3645 |
-
|
3646 |
-
|
3647 |
-
-webkit-box-ordinal-group: 10;
|
3648 |
-
|
3649 |
-
|
3650 |
-
-ms-flex-order: 9;
|
3651 |
-
|
3652 |
-
|
3653 |
-
order: 9
|
3654 |
-
|
3655 |
-
|
3656 |
-
}
|
3657 |
-
|
3658 |
-
|
3659 |
-
|
3660 |
-
|
3661 |
-
|
3662 |
-
.order-sm-10 {
|
3663 |
-
|
3664 |
-
|
3665 |
-
-webkit-box-ordinal-group: 11;
|
3666 |
-
|
3667 |
-
|
3668 |
-
-ms-flex-order: 10;
|
3669 |
-
|
3670 |
-
|
3671 |
-
order: 10
|
3672 |
-
|
3673 |
-
|
3674 |
-
}
|
3675 |
-
|
3676 |
-
|
3677 |
-
|
3678 |
-
|
3679 |
-
|
3680 |
-
.order-sm-11 {
|
3681 |
-
|
3682 |
-
|
3683 |
-
-webkit-box-ordinal-group: 12;
|
3684 |
-
|
3685 |
-
|
3686 |
-
-ms-flex-order: 11;
|
3687 |
-
|
3688 |
-
|
3689 |
-
order: 11
|
3690 |
-
|
3691 |
-
|
3692 |
-
}
|
3693 |
-
|
3694 |
-
|
3695 |
-
|
3696 |
-
|
3697 |
-
|
3698 |
-
.order-sm-12 {
|
3699 |
-
|
3700 |
-
|
3701 |
-
-webkit-box-ordinal-group: 13;
|
3702 |
-
|
3703 |
-
|
3704 |
-
-ms-flex-order: 12;
|
3705 |
-
|
3706 |
-
|
3707 |
-
order: 12
|
3708 |
-
|
3709 |
-
|
3710 |
-
}
|
3711 |
-
|
3712 |
-
|
3713 |
-
|
3714 |
-
|
3715 |
-
|
3716 |
-
.offset-sm-0 {
|
3717 |
-
|
3718 |
-
|
3719 |
-
margin-left: 0
|
3720 |
-
|
3721 |
-
|
3722 |
-
}
|
3723 |
-
|
3724 |
-
|
3725 |
-
|
3726 |
-
|
3727 |
-
|
3728 |
-
.offset-sm-1 {
|
3729 |
-
|
3730 |
-
|
3731 |
-
margin-left: 8.333333%
|
3732 |
-
|
3733 |
-
|
3734 |
-
}
|
3735 |
-
|
3736 |
-
|
3737 |
-
|
3738 |
-
|
3739 |
-
|
3740 |
-
.offset-sm-2 {
|
3741 |
-
|
3742 |
-
|
3743 |
-
margin-left: 16.666667%
|
3744 |
-
|
3745 |
-
|
3746 |
-
}
|
3747 |
-
|
3748 |
-
|
3749 |
-
|
3750 |
-
|
3751 |
-
|
3752 |
-
.offset-sm-3 {
|
3753 |
-
|
3754 |
-
|
3755 |
-
margin-left: 25%
|
3756 |
-
|
3757 |
-
|
3758 |
-
}
|
3759 |
-
|
3760 |
-
|
3761 |
-
|
3762 |
-
|
3763 |
-
|
3764 |
-
.offset-sm-4 {
|
3765 |
-
|
3766 |
-
|
3767 |
-
margin-left: 33.333333%
|
3768 |
-
|
3769 |
-
|
3770 |
-
}
|
3771 |
-
|
3772 |
-
|
3773 |
-
|
3774 |
-
|
3775 |
-
|
3776 |
-
.offset-sm-5 {
|
3777 |
-
|
3778 |
-
|
3779 |
-
margin-left: 41.666667%
|
3780 |
-
|
3781 |
-
|
3782 |
-
}
|
3783 |
-
|
3784 |
-
|
3785 |
-
|
3786 |
-
|
3787 |
-
|
3788 |
-
.offset-sm-6 {
|
3789 |
-
|
3790 |
-
|
3791 |
-
margin-left: 50%
|
3792 |
-
|
3793 |
-
|
3794 |
-
}
|
3795 |
-
|
3796 |
-
|
3797 |
-
|
3798 |
-
|
3799 |
-
|
3800 |
-
.offset-sm-7 {
|
3801 |
-
|
3802 |
-
|
3803 |
-
margin-left: 58.333333%
|
3804 |
-
|
3805 |
-
|
3806 |
-
}
|
3807 |
-
|
3808 |
-
|
3809 |
-
|
3810 |
-
|
3811 |
-
|
3812 |
-
.offset-sm-8 {
|
3813 |
-
|
3814 |
-
|
3815 |
-
margin-left: 66.666667%
|
3816 |
-
|
3817 |
-
|
3818 |
-
}
|
3819 |
-
|
3820 |
-
|
3821 |
-
|
3822 |
-
|
3823 |
-
|
3824 |
-
.offset-sm-9 {
|
3825 |
-
|
3826 |
-
|
3827 |
-
margin-left: 75%
|
3828 |
-
|
3829 |
-
|
3830 |
-
}
|
3831 |
-
|
3832 |
-
|
3833 |
-
|
3834 |
-
|
3835 |
-
|
3836 |
-
.offset-sm-10 {
|
3837 |
-
|
3838 |
-
|
3839 |
-
margin-left: 83.333333%
|
3840 |
-
|
3841 |
-
|
3842 |
-
}
|
3843 |
-
|
3844 |
-
|
3845 |
-
|
3846 |
-
|
3847 |
-
|
3848 |
-
.offset-sm-11 {
|
3849 |
-
|
3850 |
-
|
3851 |
-
margin-left: 91.666667%
|
3852 |
-
|
3853 |
-
|
3854 |
-
}
|
3855 |
-
|
3856 |
-
|
3857 |
-
}
|
3858 |
-
|
3859 |
-
|
3860 |
-
|
3861 |
-
|
3862 |
-
|
3863 |
-
@media (min-width: 768px) {
|
3864 |
-
|
3865 |
-
|
3866 |
-
.col-md {
|
3867 |
-
|
3868 |
-
|
3869 |
-
-ms-flex-preferred-size: 0;
|
3870 |
-
|
3871 |
-
|
3872 |
-
flex-basis: 0;
|
3873 |
-
|
3874 |
-
|
3875 |
-
-webkit-box-flex: 1;
|
3876 |
-
|
3877 |
-
|
3878 |
-
-ms-flex-positive: 1;
|
3879 |
-
|
3880 |
-
|
3881 |
-
flex-grow: 1;
|
3882 |
-
|
3883 |
-
|
3884 |
-
max-width: 100%
|
3885 |
-
|
3886 |
-
|
3887 |
-
}
|
3888 |
-
|
3889 |
-
|
3890 |
-
|
3891 |
-
|
3892 |
-
|
3893 |
-
.col-md-auto {
|
3894 |
-
|
3895 |
-
|
3896 |
-
-webkit-box-flex: 0;
|
3897 |
-
|
3898 |
-
|
3899 |
-
-ms-flex: 0 0 auto;
|
3900 |
-
|
3901 |
-
|
3902 |
-
flex: 0 0 auto;
|
3903 |
-
|
3904 |
-
|
3905 |
-
width: auto;
|
3906 |
-
|
3907 |
-
|
3908 |
-
max-width: none
|
3909 |
-
|
3910 |
-
|
3911 |
-
}
|
3912 |
-
|
3913 |
-
|
3914 |
-
|
3915 |
-
|
3916 |
-
|
3917 |
-
.col-md-1 {
|
3918 |
-
|
3919 |
-
|
3920 |
-
-webkit-box-flex: 0;
|
3921 |
-
|
3922 |
-
|
3923 |
-
-ms-flex: 0 0 8.333333%;
|
3924 |
-
|
3925 |
-
|
3926 |
-
flex: 0 0 8.333333%;
|
3927 |
-
|
3928 |
-
|
3929 |
-
max-width: 8.333333%
|
3930 |
-
|
3931 |
-
|
3932 |
-
}
|
3933 |
-
|
3934 |
-
|
3935 |
-
|
3936 |
-
|
3937 |
-
|
3938 |
-
.col-md-2 {
|
3939 |
-
|
3940 |
-
|
3941 |
-
-webkit-box-flex: 0;
|
3942 |
-
|
3943 |
-
|
3944 |
-
-ms-flex: 0 0 16.666667%;
|
3945 |
-
|
3946 |
-
|
3947 |
-
flex: 0 0 16.666667%;
|
3948 |
-
|
3949 |
-
|
3950 |
-
max-width: 16.666667%
|
3951 |
-
|
3952 |
-
|
3953 |
-
}
|
3954 |
-
|
3955 |
-
|
3956 |
-
|
3957 |
-
|
3958 |
-
|
3959 |
-
.col-md-3 {
|
3960 |
-
|
3961 |
-
|
3962 |
-
-webkit-box-flex: 0;
|
3963 |
-
|
3964 |
-
|
3965 |
-
-ms-flex: 0 0 25%;
|
3966 |
-
|
3967 |
-
|
3968 |
-
flex: 0 0 25%;
|
3969 |
-
|
3970 |
-
|
3971 |
-
max-width: 25%
|
3972 |
-
|
3973 |
-
|
3974 |
-
}
|
3975 |
-
|
3976 |
-
|
3977 |
-
|
3978 |
-
|
3979 |
-
|
3980 |
-
.col-md-4 {
|
3981 |
-
|
3982 |
-
|
3983 |
-
-webkit-box-flex: 0;
|
3984 |
-
|
3985 |
-
|
3986 |
-
-ms-flex: 0 0 33.333333%;
|
3987 |
-
|
3988 |
-
|
3989 |
-
flex: 0 0 33.333333%;
|
3990 |
-
|
3991 |
-
|
3992 |
-
max-width: 33.333333%
|
3993 |
-
|
3994 |
-
|
3995 |
-
}
|
3996 |
-
|
3997 |
-
|
3998 |
-
|
3999 |
-
|
4000 |
-
|
4001 |
-
.col-md-5 {
|
4002 |
-
|
4003 |
-
|
4004 |
-
-webkit-box-flex: 0;
|
4005 |
-
|
4006 |
-
|
4007 |
-
-ms-flex: 0 0 41.666667%;
|
4008 |
-
|
4009 |
-
|
4010 |
-
flex: 0 0 41.666667%;
|
4011 |
-
|
4012 |
-
|
4013 |
-
max-width: 41.666667%
|
4014 |
-
|
4015 |
-
|
4016 |
-
}
|
4017 |
-
|
4018 |
-
|
4019 |
-
|
4020 |
-
|
4021 |
-
|
4022 |
-
.col-md-6 {
|
4023 |
-
|
4024 |
-
|
4025 |
-
-webkit-box-flex: 0;
|
4026 |
-
|
4027 |
-
|
4028 |
-
-ms-flex: 0 0 50%;
|
4029 |
-
|
4030 |
-
|
4031 |
-
flex: 0 0 50%;
|
4032 |
-
|
4033 |
-
|
4034 |
-
max-width: 50%
|
4035 |
-
|
4036 |
-
|
4037 |
-
}
|
4038 |
-
|
4039 |
-
|
4040 |
-
|
4041 |
-
|
4042 |
-
|
4043 |
-
.col-md-7 {
|
4044 |
-
|
4045 |
-
|
4046 |
-
-webkit-box-flex: 0;
|
4047 |
-
|
4048 |
-
|
4049 |
-
-ms-flex: 0 0 58.333333%;
|
4050 |
-
|
4051 |
-
|
4052 |
-
flex: 0 0 58.333333%;
|
4053 |
-
|
4054 |
-
|
4055 |
-
max-width: 58.333333%
|
4056 |
-
|
4057 |
-
|
4058 |
-
}
|
4059 |
-
|
4060 |
-
|
4061 |
-
|
4062 |
-
|
4063 |
-
|
4064 |
-
.col-md-8 {
|
4065 |
-
|
4066 |
-
|
4067 |
-
-webkit-box-flex: 0;
|
4068 |
-
|
4069 |
-
|
4070 |
-
-ms-flex: 0 0 66.666667%;
|
4071 |
-
|
4072 |
-
|
4073 |
-
flex: 0 0 66.666667%;
|
4074 |
-
|
4075 |
-
|
4076 |
-
max-width: 66.666667%
|
4077 |
-
|
4078 |
-
|
4079 |
-
}
|
4080 |
-
|
4081 |
-
|
4082 |
-
|
4083 |
-
|
4084 |
-
|
4085 |
-
.col-md-9 {
|
4086 |
-
|
4087 |
-
|
4088 |
-
-webkit-box-flex: 0;
|
4089 |
-
|
4090 |
-
|
4091 |
-
-ms-flex: 0 0 75%;
|
4092 |
-
|
4093 |
-
|
4094 |
-
flex: 0 0 75%;
|
4095 |
-
|
4096 |
-
|
4097 |
-
max-width: 75%
|
4098 |
-
|
4099 |
-
|
4100 |
-
}
|
4101 |
-
|
4102 |
-
|
4103 |
-
|
4104 |
-
|
4105 |
-
|
4106 |
-
.col-md-10 {
|
4107 |
-
|
4108 |
-
|
4109 |
-
-webkit-box-flex: 0;
|
4110 |
-
|
4111 |
-
|
4112 |
-
-ms-flex: 0 0 83.333333%;
|
4113 |
-
|
4114 |
-
|
4115 |
-
flex: 0 0 83.333333%;
|
4116 |
-
|
4117 |
-
|
4118 |
-
max-width: 83.333333%
|
4119 |
-
|
4120 |
-
|
4121 |
-
}
|
4122 |
-
|
4123 |
-
|
4124 |
-
|
4125 |
-
|
4126 |
-
|
4127 |
-
.col-md-11 {
|
4128 |
-
|
4129 |
-
|
4130 |
-
-webkit-box-flex: 0;
|
4131 |
-
|
4132 |
-
|
4133 |
-
-ms-flex: 0 0 91.666667%;
|
4134 |
-
|
4135 |
-
|
4136 |
-
flex: 0 0 91.666667%;
|
4137 |
-
|
4138 |
-
|
4139 |
-
max-width: 91.666667%
|
4140 |
-
|
4141 |
-
|
4142 |
-
}
|
4143 |
-
|
4144 |
-
|
4145 |
-
|
4146 |
-
|
4147 |
-
|
4148 |
-
.col-md-12 {
|
4149 |
-
|
4150 |
-
|
4151 |
-
-webkit-box-flex: 0;
|
4152 |
-
|
4153 |
-
|
4154 |
-
-ms-flex: 0 0 100%;
|
4155 |
-
|
4156 |
-
|
4157 |
-
flex: 0 0 100%;
|
4158 |
-
|
4159 |
-
|
4160 |
-
max-width: 100%
|
4161 |
-
|
4162 |
-
|
4163 |
-
}
|
4164 |
-
|
4165 |
-
|
4166 |
-
|
4167 |
-
|
4168 |
-
|
4169 |
-
.order-md-first {
|
4170 |
-
|
4171 |
-
|
4172 |
-
-webkit-box-ordinal-group: 0;
|
4173 |
-
|
4174 |
-
|
4175 |
-
-ms-flex-order: -1;
|
4176 |
-
|
4177 |
-
|
4178 |
-
order: -1
|
4179 |
-
|
4180 |
-
|
4181 |
-
}
|
4182 |
-
|
4183 |
-
|
4184 |
-
|
4185 |
-
|
4186 |
-
|
4187 |
-
.order-md-last {
|
4188 |
-
|
4189 |
-
|
4190 |
-
-webkit-box-ordinal-group: 14;
|
4191 |
-
|
4192 |
-
|
4193 |
-
-ms-flex-order: 13;
|
4194 |
-
|
4195 |
-
|
4196 |
-
order: 13
|
4197 |
-
|
4198 |
-
|
4199 |
-
}
|
4200 |
-
|
4201 |
-
|
4202 |
-
|
4203 |
-
|
4204 |
-
|
4205 |
-
.order-md-0 {
|
4206 |
-
|
4207 |
-
|
4208 |
-
-webkit-box-ordinal-group: 1;
|
4209 |
-
|
4210 |
-
|
4211 |
-
-ms-flex-order: 0;
|
4212 |
-
|
4213 |
-
|
4214 |
-
order: 0
|
4215 |
-
|
4216 |
-
|
4217 |
-
}
|
4218 |
-
|
4219 |
-
|
4220 |
-
|
4221 |
-
|
4222 |
-
|
4223 |
-
.order-md-1 {
|
4224 |
-
|
4225 |
-
|
4226 |
-
-webkit-box-ordinal-group: 2;
|
4227 |
-
|
4228 |
-
|
4229 |
-
-ms-flex-order: 1;
|
4230 |
-
|
4231 |
-
|
4232 |
-
order: 1
|
4233 |
-
|
4234 |
-
|
4235 |
-
}
|
4236 |
-
|
4237 |
-
|
4238 |
-
|
4239 |
-
|
4240 |
-
|
4241 |
-
.order-md-2 {
|
4242 |
-
|
4243 |
-
|
4244 |
-
-webkit-box-ordinal-group: 3;
|
4245 |
-
|
4246 |
-
|
4247 |
-
-ms-flex-order: 2;
|
4248 |
-
|
4249 |
-
|
4250 |
-
order: 2
|
4251 |
-
|
4252 |
-
|
4253 |
-
}
|
4254 |
-
|
4255 |
-
|
4256 |
-
|
4257 |
-
|
4258 |
-
|
4259 |
-
.order-md-3 {
|
4260 |
-
|
4261 |
-
|
4262 |
-
-webkit-box-ordinal-group: 4;
|
4263 |
-
|
4264 |
-
|
4265 |
-
-ms-flex-order: 3;
|
4266 |
-
|
4267 |
-
|
4268 |
-
order: 3
|
4269 |
-
|
4270 |
-
|
4271 |
-
}
|
4272 |
-
|
4273 |
-
|
4274 |
-
|
4275 |
-
|
4276 |
-
|
4277 |
-
.order-md-4 {
|
4278 |
-
|
4279 |
-
|
4280 |
-
-webkit-box-ordinal-group: 5;
|
4281 |
-
|
4282 |
-
|
4283 |
-
-ms-flex-order: 4;
|
4284 |
-
|
4285 |
-
|
4286 |
-
order: 4
|
4287 |
-
|
4288 |
-
|
4289 |
-
}
|
4290 |
-
|
4291 |
-
|
4292 |
-
|
4293 |
-
|
4294 |
-
|
4295 |
-
.order-md-5 {
|
4296 |
-
|
4297 |
-
|
4298 |
-
-webkit-box-ordinal-group: 6;
|
4299 |
-
|
4300 |
-
|
4301 |
-
-ms-flex-order: 5;
|
4302 |
-
|
4303 |
-
|
4304 |
-
order: 5
|
4305 |
-
|
4306 |
-
|
4307 |
-
}
|
4308 |
-
|
4309 |
-
|
4310 |
-
|
4311 |
-
|
4312 |
-
|
4313 |
-
.order-md-6 {
|
4314 |
-
|
4315 |
-
|
4316 |
-
-webkit-box-ordinal-group: 7;
|
4317 |
-
|
4318 |
-
|
4319 |
-
-ms-flex-order: 6;
|
4320 |
-
|
4321 |
-
|
4322 |
-
order: 6
|
4323 |
-
|
4324 |
-
|
4325 |
-
}
|
4326 |
-
|
4327 |
-
|
4328 |
-
|
4329 |
-
|
4330 |
-
|
4331 |
-
.order-md-7 {
|
4332 |
-
|
4333 |
-
|
4334 |
-
-webkit-box-ordinal-group: 8;
|
4335 |
-
|
4336 |
-
|
4337 |
-
-ms-flex-order: 7;
|
4338 |
-
|
4339 |
-
|
4340 |
-
order: 7
|
4341 |
-
|
4342 |
-
|
4343 |
-
}
|
4344 |
-
|
4345 |
-
|
4346 |
-
|
4347 |
-
|
4348 |
-
|
4349 |
-
.order-md-8 {
|
4350 |
-
|
4351 |
-
|
4352 |
-
-webkit-box-ordinal-group: 9;
|
4353 |
-
|
4354 |
-
|
4355 |
-
-ms-flex-order: 8;
|
4356 |
-
|
4357 |
-
|
4358 |
-
order: 8
|
4359 |
-
|
4360 |
-
|
4361 |
-
}
|
4362 |
-
|
4363 |
-
|
4364 |
-
|
4365 |
-
|
4366 |
-
|
4367 |
-
.order-md-9 {
|
4368 |
-
|
4369 |
-
|
4370 |
-
-webkit-box-ordinal-group: 10;
|
4371 |
-
|
4372 |
-
|
4373 |
-
-ms-flex-order: 9;
|
4374 |
-
|
4375 |
-
|
4376 |
-
order: 9
|
4377 |
-
|
4378 |
-
|
4379 |
-
}
|
4380 |
-
|
4381 |
-
|
4382 |
-
|
4383 |
-
|
4384 |
-
|
4385 |
-
.order-md-10 {
|
4386 |
-
|
4387 |
-
|
4388 |
-
-webkit-box-ordinal-group: 11;
|
4389 |
-
|
4390 |
-
|
4391 |
-
-ms-flex-order: 10;
|
4392 |
-
|
4393 |
-
|
4394 |
-
order: 10
|
4395 |
-
|
4396 |
-
|
4397 |
-
}
|
4398 |
-
|
4399 |
-
|
4400 |
-
|
4401 |
-
|
4402 |
-
|
4403 |
-
.order-md-11 {
|
4404 |
-
|
4405 |
-
|
4406 |
-
-webkit-box-ordinal-group: 12;
|
4407 |
-
|
4408 |
-
|
4409 |
-
-ms-flex-order: 11;
|
4410 |
-
|
4411 |
-
|
4412 |
-
order: 11
|
4413 |
-
|
4414 |
-
|
4415 |
-
}
|
4416 |
-
|
4417 |
-
|
4418 |
-
|
4419 |
-
|
4420 |
-
|
4421 |
-
.order-md-12 {
|
4422 |
-
|
4423 |
-
|
4424 |
-
-webkit-box-ordinal-group: 13;
|
4425 |
-
|
4426 |
-
|
4427 |
-
-ms-flex-order: 12;
|
4428 |
-
|
4429 |
-
|
4430 |
-
order: 12
|
4431 |
-
|
4432 |
-
|
4433 |
-
}
|
4434 |
-
|
4435 |
-
|
4436 |
-
|
4437 |
-
|
4438 |
-
|
4439 |
-
.offset-md-0 {
|
4440 |
-
|
4441 |
-
|
4442 |
-
margin-left: 0
|
4443 |
-
|
4444 |
-
|
4445 |
-
}
|
4446 |
-
|
4447 |
-
|
4448 |
-
|
4449 |
-
|
4450 |
-
|
4451 |
-
.offset-md-1 {
|
4452 |
-
|
4453 |
-
|
4454 |
-
margin-left: 8.333333%
|
4455 |
-
|
4456 |
-
|
4457 |
-
}
|
4458 |
-
|
4459 |
-
|
4460 |
-
|
4461 |
-
|
4462 |
-
|
4463 |
-
.offset-md-2 {
|
4464 |
-
|
4465 |
-
|
4466 |
-
margin-left: 16.666667%
|
4467 |
-
|
4468 |
-
|
4469 |
-
}
|
4470 |
-
|
4471 |
-
|
4472 |
-
|
4473 |
-
|
4474 |
-
|
4475 |
-
.offset-md-3 {
|
4476 |
-
|
4477 |
-
|
4478 |
-
margin-left: 25%
|
4479 |
-
|
4480 |
-
|
4481 |
-
}
|
4482 |
-
|
4483 |
-
|
4484 |
-
|
4485 |
-
|
4486 |
-
|
4487 |
-
.offset-md-4 {
|
4488 |
-
|
4489 |
-
|
4490 |
-
margin-left: 33.333333%
|
4491 |
-
|
4492 |
-
|
4493 |
-
}
|
4494 |
-
|
4495 |
-
|
4496 |
-
|
4497 |
-
|
4498 |
-
|
4499 |
-
.offset-md-5 {
|
4500 |
-
|
4501 |
-
|
4502 |
-
margin-left: 41.666667%
|
4503 |
-
|
4504 |
-
|
4505 |
-
}
|
4506 |
-
|
4507 |
-
|
4508 |
-
|
4509 |
-
|
4510 |
-
|
4511 |
-
.offset-md-6 {
|
4512 |
-
|
4513 |
-
|
4514 |
-
margin-left: 50%
|
4515 |
-
|
4516 |
-
|
4517 |
-
}
|
4518 |
-
|
4519 |
-
|
4520 |
-
|
4521 |
-
|
4522 |
-
|
4523 |
-
.offset-md-7 {
|
4524 |
-
|
4525 |
-
|
4526 |
-
margin-left: 58.333333%
|
4527 |
-
|
4528 |
-
|
4529 |
-
}
|
4530 |
-
|
4531 |
-
|
4532 |
-
|
4533 |
-
|
4534 |
-
|
4535 |
-
.offset-md-8 {
|
4536 |
-
|
4537 |
-
|
4538 |
-
margin-left: 66.666667%
|
4539 |
-
|
4540 |
-
|
4541 |
-
}
|
4542 |
-
|
4543 |
-
|
4544 |
-
|
4545 |
-
|
4546 |
-
|
4547 |
-
.offset-md-9 {
|
4548 |
-
|
4549 |
-
|
4550 |
-
margin-left: 75%
|
4551 |
-
|
4552 |
-
|
4553 |
-
}
|
4554 |
-
|
4555 |
-
|
4556 |
-
|
4557 |
-
|
4558 |
-
|
4559 |
-
.offset-md-10 {
|
4560 |
-
|
4561 |
-
|
4562 |
-
margin-left: 83.333333%
|
4563 |
-
|
4564 |
-
|
4565 |
-
}
|
4566 |
-
|
4567 |
-
|
4568 |
-
|
4569 |
-
|
4570 |
-
|
4571 |
-
.offset-md-11 {
|
4572 |
-
|
4573 |
-
|
4574 |
-
margin-left: 91.666667%
|
4575 |
-
|
4576 |
-
|
4577 |
-
}
|
4578 |
-
|
4579 |
-
|
4580 |
-
}
|
4581 |
-
|
4582 |
-
|
4583 |
-
|
4584 |
-
|
4585 |
-
|
4586 |
-
@media (min-width: 992px) {
|
4587 |
-
|
4588 |
-
|
4589 |
-
.col-lg {
|
4590 |
-
|
4591 |
-
|
4592 |
-
-ms-flex-preferred-size: 0;
|
4593 |
-
|
4594 |
-
|
4595 |
-
flex-basis: 0;
|
4596 |
-
|
4597 |
-
|
4598 |
-
-webkit-box-flex: 1;
|
4599 |
-
|
4600 |
-
|
4601 |
-
-ms-flex-positive: 1;
|
4602 |
-
|
4603 |
-
|
4604 |
-
flex-grow: 1;
|
4605 |
-
|
4606 |
-
|
4607 |
-
max-width: 100%
|
4608 |
-
|
4609 |
-
|
4610 |
-
}
|
4611 |
-
|
4612 |
-
|
4613 |
-
|
4614 |
-
|
4615 |
-
|
4616 |
-
.col-lg-auto {
|
4617 |
-
|
4618 |
-
|
4619 |
-
-webkit-box-flex: 0;
|
4620 |
-
|
4621 |
-
|
4622 |
-
-ms-flex: 0 0 auto;
|
4623 |
-
|
4624 |
-
|
4625 |
-
flex: 0 0 auto;
|
4626 |
-
|
4627 |
-
|
4628 |
-
width: auto;
|
4629 |
-
|
4630 |
-
|
4631 |
-
max-width: none
|
4632 |
-
|
4633 |
-
|
4634 |
-
}
|
4635 |
-
|
4636 |
-
|
4637 |
-
|
4638 |
-
|
4639 |
-
|
4640 |
-
.col-lg-1 {
|
4641 |
-
|
4642 |
-
|
4643 |
-
-webkit-box-flex: 0;
|
4644 |
-
|
4645 |
-
|
4646 |
-
-ms-flex: 0 0 8.333333%;
|
4647 |
-
|
4648 |
-
|
4649 |
-
flex: 0 0 8.333333%;
|
4650 |
-
|
4651 |
-
|
4652 |
-
max-width: 8.333333%
|
4653 |
-
|
4654 |
-
|
4655 |
-
}
|
4656 |
-
|
4657 |
-
|
4658 |
-
|
4659 |
-
|
4660 |
-
|
4661 |
-
.col-lg-2 {
|
4662 |
-
|
4663 |
-
|
4664 |
-
-webkit-box-flex: 0;
|
4665 |
-
|
4666 |
-
|
4667 |
-
-ms-flex: 0 0 16.666667%;
|
4668 |
-
|
4669 |
-
|
4670 |
-
flex: 0 0 16.666667%;
|
4671 |
-
|
4672 |
-
|
4673 |
-
max-width: 16.666667%
|
4674 |
-
|
4675 |
-
|
4676 |
-
}
|
4677 |
-
|
4678 |
-
|
4679 |
-
|
4680 |
-
|
4681 |
-
|
4682 |
-
.col-lg-3 {
|
4683 |
-
|
4684 |
-
|
4685 |
-
-webkit-box-flex: 0;
|
4686 |
-
|
4687 |
-
|
4688 |
-
-ms-flex: 0 0 25%;
|
4689 |
-
|
4690 |
-
|
4691 |
-
flex: 0 0 25%;
|
4692 |
-
|
4693 |
-
|
4694 |
-
max-width: 25%
|
4695 |
-
|
4696 |
-
|
4697 |
-
}
|
4698 |
-
|
4699 |
-
|
4700 |
-
|
4701 |
-
|
4702 |
-
|
4703 |
-
.col-lg-4 {
|
4704 |
-
|
4705 |
-
|
4706 |
-
-webkit-box-flex: 0;
|
4707 |
-
|
4708 |
-
|
4709 |
-
-ms-flex: 0 0 33.333333%;
|
4710 |
-
|
4711 |
-
|
4712 |
-
flex: 0 0 33.333333%;
|
4713 |
-
|
4714 |
-
|
4715 |
-
max-width: 33.333333%
|
4716 |
-
|
4717 |
-
|
4718 |
-
}
|
4719 |
-
|
4720 |
-
|
4721 |
-
|
4722 |
-
|
4723 |
-
|
4724 |
-
.col-lg-5 {
|
4725 |
-
|
4726 |
-
|
4727 |
-
-webkit-box-flex: 0;
|
4728 |
-
|
4729 |
-
|
4730 |
-
-ms-flex: 0 0 41.666667%;
|
4731 |
-
|
4732 |
-
|
4733 |
-
flex: 0 0 41.666667%;
|
4734 |
-
|
4735 |
-
|
4736 |
-
max-width: 41.666667%
|
4737 |
-
|
4738 |
-
|
4739 |
-
}
|
4740 |
-
|
4741 |
-
|
4742 |
-
|
4743 |
-
|
4744 |
-
|
4745 |
-
.col-lg-6 {
|
4746 |
-
|
4747 |
-
|
4748 |
-
-webkit-box-flex: 0;
|
4749 |
-
|
4750 |
-
|
4751 |
-
-ms-flex: 0 0 50%;
|
4752 |
-
|
4753 |
-
|
4754 |
-
flex: 0 0 50%;
|
4755 |
-
|
4756 |
-
|
4757 |
-
max-width: 50%
|
4758 |
-
|
4759 |
-
|
4760 |
-
}
|
4761 |
-
|
4762 |
-
|
4763 |
-
|
4764 |
-
|
4765 |
-
|
4766 |
-
.col-lg-7 {
|
4767 |
-
|
4768 |
-
|
4769 |
-
-webkit-box-flex: 0;
|
4770 |
-
|
4771 |
-
|
4772 |
-
-ms-flex: 0 0 58.333333%;
|
4773 |
-
|
4774 |
-
|
4775 |
-
flex: 0 0 58.333333%;
|
4776 |
-
|
4777 |
-
|
4778 |
-
max-width: 58.333333%
|
4779 |
-
|
4780 |
-
|
4781 |
-
}
|
4782 |
-
|
4783 |
-
|
4784 |
-
|
4785 |
-
|
4786 |
-
|
4787 |
-
.col-lg-8 {
|
4788 |
-
|
4789 |
-
|
4790 |
-
-webkit-box-flex: 0;
|
4791 |
-
|
4792 |
-
|
4793 |
-
-ms-flex: 0 0 66.666667%;
|
4794 |
-
|
4795 |
-
|
4796 |
-
flex: 0 0 66.666667%;
|
4797 |
-
|
4798 |
-
|
4799 |
-
max-width: 66.666667%
|
4800 |
-
|
4801 |
-
|
4802 |
-
}
|
4803 |
-
|
4804 |
-
|
4805 |
-
|
4806 |
-
|
4807 |
-
|
4808 |
-
.col-lg-9 {
|
4809 |
-
|
4810 |
-
|
4811 |
-
-webkit-box-flex: 0;
|
4812 |
-
|
4813 |
-
|
4814 |
-
-ms-flex: 0 0 75%;
|
4815 |
-
|
4816 |
-
|
4817 |
-
flex: 0 0 75%;
|
4818 |
-
|
4819 |
-
|
4820 |
-
max-width: 75%
|
4821 |
-
|
4822 |
-
|
4823 |
-
}
|
4824 |
-
|
4825 |
-
|
4826 |
-
|
4827 |
-
|
4828 |
-
|
4829 |
-
.col-lg-10 {
|
4830 |
-
|
4831 |
-
|
4832 |
-
-webkit-box-flex: 0;
|
4833 |
-
|
4834 |
-
|
4835 |
-
-ms-flex: 0 0 83.333333%;
|
4836 |
-
|
4837 |
-
|
4838 |
-
flex: 0 0 83.333333%;
|
4839 |
-
|
4840 |
-
|
4841 |
-
max-width: 83.333333%
|
4842 |
-
|
4843 |
-
|
4844 |
-
}
|
4845 |
-
|
4846 |
-
|
4847 |
-
|
4848 |
-
|
4849 |
-
|
4850 |
-
.col-lg-11 {
|
4851 |
-
|
4852 |
-
|
4853 |
-
-webkit-box-flex: 0;
|
4854 |
-
|
4855 |
-
|
4856 |
-
-ms-flex: 0 0 91.666667%;
|
4857 |
-
|
4858 |
-
|
4859 |
-
flex: 0 0 91.666667%;
|
4860 |
-
|
4861 |
-
|
4862 |
-
max-width: 91.666667%
|
4863 |
-
|
4864 |
-
|
4865 |
-
}
|
4866 |
-
|
4867 |
-
|
4868 |
-
|
4869 |
-
|
4870 |
-
|
4871 |
-
.col-lg-12 {
|
4872 |
-
|
4873 |
-
|
4874 |
-
-webkit-box-flex: 0;
|
4875 |
-
|
4876 |
-
|
4877 |
-
-ms-flex: 0 0 100%;
|
4878 |
-
|
4879 |
-
|
4880 |
-
flex: 0 0 100%;
|
4881 |
-
|
4882 |
-
|
4883 |
-
max-width: 100%
|
4884 |
-
|
4885 |
-
|
4886 |
-
}
|
4887 |
-
|
4888 |
-
|
4889 |
-
|
4890 |
-
|
4891 |
-
|
4892 |
-
.order-lg-first {
|
4893 |
-
|
4894 |
-
|
4895 |
-
-webkit-box-ordinal-group: 0;
|
4896 |
-
|
4897 |
-
|
4898 |
-
-ms-flex-order: -1;
|
4899 |
-
|
4900 |
-
|
4901 |
-
order: -1
|
4902 |
-
|
4903 |
-
|
4904 |
-
}
|
4905 |
-
|
4906 |
-
|
4907 |
-
|
4908 |
-
|
4909 |
-
|
4910 |
-
.order-lg-last {
|
4911 |
-
|
4912 |
-
|
4913 |
-
-webkit-box-ordinal-group: 14;
|
4914 |
-
|
4915 |
-
|
4916 |
-
-ms-flex-order: 13;
|
4917 |
-
|
4918 |
-
|
4919 |
-
order: 13
|
4920 |
-
|
4921 |
-
|
4922 |
-
}
|
4923 |
-
|
4924 |
-
|
4925 |
-
|
4926 |
-
|
4927 |
-
|
4928 |
-
.order-lg-0 {
|
4929 |
-
|
4930 |
-
|
4931 |
-
-webkit-box-ordinal-group: 1;
|
4932 |
-
|
4933 |
-
|
4934 |
-
-ms-flex-order: 0;
|
4935 |
-
|
4936 |
-
|
4937 |
-
order: 0
|
4938 |
-
|
4939 |
-
|
4940 |
-
}
|
4941 |
-
|
4942 |
-
|
4943 |
-
|
4944 |
-
|
4945 |
-
|
4946 |
-
.order-lg-1 {
|
4947 |
-
|
4948 |
-
|
4949 |
-
-webkit-box-ordinal-group: 2;
|
4950 |
-
|
4951 |
-
|
4952 |
-
-ms-flex-order: 1;
|
4953 |
-
|
4954 |
-
|
4955 |
-
order: 1
|
4956 |
-
|
4957 |
-
|
4958 |
-
}
|
4959 |
-
|
4960 |
-
|
4961 |
-
|
4962 |
-
|
4963 |
-
|
4964 |
-
.order-lg-2 {
|
4965 |
-
|
4966 |
-
|
4967 |
-
-webkit-box-ordinal-group: 3;
|
4968 |
-
|
4969 |
-
|
4970 |
-
-ms-flex-order: 2;
|
4971 |
-
|
4972 |
-
|
4973 |
-
order: 2
|
4974 |
-
|
4975 |
-
|
4976 |
-
}
|
4977 |
-
|
4978 |
-
|
4979 |
-
|
4980 |
-
|
4981 |
-
|
4982 |
-
.order-lg-3 {
|
4983 |
-
|
4984 |
-
|
4985 |
-
-webkit-box-ordinal-group: 4;
|
4986 |
-
|
4987 |
-
|
4988 |
-
-ms-flex-order: 3;
|
4989 |
-
|
4990 |
-
|
4991 |
-
order: 3
|
4992 |
-
|
4993 |
-
|
4994 |
-
}
|
4995 |
-
|
4996 |
-
|
4997 |
-
|
4998 |
-
|
4999 |
-
|
5000 |
-
.order-lg-4 {
|
5001 |
-
|
5002 |
-
|
5003 |
-
-webkit-box-ordinal-group: 5;
|
5004 |
-
|
5005 |
-
|
5006 |
-
-ms-flex-order: 4;
|
5007 |
-
|
5008 |
-
|
5009 |
-
order: 4
|
5010 |
-
|
5011 |
-
|
5012 |
-
}
|
5013 |
-
|
5014 |
-
|
5015 |
-
|
5016 |
-
|
5017 |
-
|
5018 |
-
.order-lg-5 {
|
5019 |
-
|
5020 |
-
|
5021 |
-
-webkit-box-ordinal-group: 6;
|
5022 |
-
|
5023 |
-
|
5024 |
-
-ms-flex-order: 5;
|
5025 |
-
|
5026 |
-
|
5027 |
-
order: 5
|
5028 |
-
|
5029 |
-
|
5030 |
-
}
|
5031 |
-
|
5032 |
-
|
5033 |
-
|
5034 |
-
|
5035 |
-
|
5036 |
-
.order-lg-6 {
|
5037 |
-
|
5038 |
-
|
5039 |
-
-webkit-box-ordinal-group: 7;
|
5040 |
-
|
5041 |
-
|
5042 |
-
-ms-flex-order: 6;
|
5043 |
-
|
5044 |
-
|
5045 |
-
order: 6
|
5046 |
-
|
5047 |
-
|
5048 |
-
}
|
5049 |
-
|
5050 |
-
|
5051 |
-
|
5052 |
-
|
5053 |
-
|
5054 |
-
.order-lg-7 {
|
5055 |
-
|
5056 |
-
|
5057 |
-
-webkit-box-ordinal-group: 8;
|
5058 |
-
|
5059 |
-
|
5060 |
-
-ms-flex-order: 7;
|
5061 |
-
|
5062 |
-
|
5063 |
-
order: 7
|
5064 |
-
|
5065 |
-
|
5066 |
-
}
|
5067 |
-
|
5068 |
-
|
5069 |
-
|
5070 |
-
|
5071 |
-
|
5072 |
-
.order-lg-8 {
|
5073 |
-
|
5074 |
-
|
5075 |
-
-webkit-box-ordinal-group: 9;
|
5076 |
-
|
5077 |
-
|
5078 |
-
-ms-flex-order: 8;
|
5079 |
-
|
5080 |
-
|
5081 |
-
order: 8
|
5082 |
-
|
5083 |
-
|
5084 |
-
}
|
5085 |
-
|
5086 |
-
|
5087 |
-
|
5088 |
-
|
5089 |
-
|
5090 |
-
.order-lg-9 {
|
5091 |
-
|
5092 |
-
|
5093 |
-
-webkit-box-ordinal-group: 10;
|
5094 |
-
|
5095 |
-
|
5096 |
-
-ms-flex-order: 9;
|
5097 |
-
|
5098 |
-
|
5099 |
-
order: 9
|
5100 |
-
|
5101 |
-
|
5102 |
-
}
|
5103 |
-
|
5104 |
-
|
5105 |
-
|
5106 |
-
|
5107 |
-
|
5108 |
-
.order-lg-10 {
|
5109 |
-
|
5110 |
-
|
5111 |
-
-webkit-box-ordinal-group: 11;
|
5112 |
-
|
5113 |
-
|
5114 |
-
-ms-flex-order: 10;
|
5115 |
-
|
5116 |
-
|
5117 |
-
order: 10
|
5118 |
-
|
5119 |
-
|
5120 |
-
}
|
5121 |
-
|
5122 |
-
|
5123 |
-
|
5124 |
-
|
5125 |
-
|
5126 |
-
.order-lg-11 {
|
5127 |
-
|
5128 |
-
|
5129 |
-
-webkit-box-ordinal-group: 12;
|
5130 |
-
|
5131 |
-
|
5132 |
-
-ms-flex-order: 11;
|
5133 |
-
|
5134 |
-
|
5135 |
-
order: 11
|
5136 |
-
|
5137 |
-
|
5138 |
-
}
|
5139 |
-
|
5140 |
-
|
5141 |
-
|
5142 |
-
|
5143 |
-
|
5144 |
-
.order-lg-12 {
|
5145 |
-
|
5146 |
-
|
5147 |
-
-webkit-box-ordinal-group: 13;
|
5148 |
-
|
5149 |
-
|
5150 |
-
-ms-flex-order: 12;
|
5151 |
-
|
5152 |
-
|
5153 |
-
order: 12
|
5154 |
-
|
5155 |
-
|
5156 |
-
}
|
5157 |
-
|
5158 |
-
|
5159 |
-
|
5160 |
-
|
5161 |
-
|
5162 |
-
.offset-lg-0 {
|
5163 |
-
|
5164 |
-
|
5165 |
-
margin-left: 0
|
5166 |
-
|
5167 |
-
|
5168 |
-
}
|
5169 |
-
|
5170 |
-
|
5171 |
-
|
5172 |
-
|
5173 |
-
|
5174 |
-
.offset-lg-1 {
|
5175 |
-
|
5176 |
-
|
5177 |
-
margin-left: 8.333333%
|
5178 |
-
|
5179 |
-
|
5180 |
-
}
|
5181 |
-
|
5182 |
-
|
5183 |
-
|
5184 |
-
|
5185 |
-
|
5186 |
-
.offset-lg-2 {
|
5187 |
-
|
5188 |
-
|
5189 |
-
margin-left: 16.666667%
|
5190 |
-
|
5191 |
-
|
5192 |
-
}
|
5193 |
-
|
5194 |
-
|
5195 |
-
|
5196 |
-
|
5197 |
-
|
5198 |
-
.offset-lg-3 {
|
5199 |
-
|
5200 |
-
|
5201 |
-
margin-left: 25%
|
5202 |
-
|
5203 |
-
|
5204 |
-
}
|
5205 |
-
|
5206 |
-
|
5207 |
-
|
5208 |
-
|
5209 |
-
|
5210 |
-
.offset-lg-4 {
|
5211 |
-
|
5212 |
-
|
5213 |
-
margin-left: 33.333333%
|
5214 |
-
|
5215 |
-
|
5216 |
-
}
|
5217 |
-
|
5218 |
-
|
5219 |
-
|
5220 |
-
|
5221 |
-
|
5222 |
-
.offset-lg-5 {
|
5223 |
-
|
5224 |
-
|
5225 |
-
margin-left: 41.666667%
|
5226 |
-
|
5227 |
-
|
5228 |
-
}
|
5229 |
-
|
5230 |
-
|
5231 |
-
|
5232 |
-
|
5233 |
-
|
5234 |
-
.offset-lg-6 {
|
5235 |
-
|
5236 |
-
|
5237 |
-
margin-left: 50%
|
5238 |
-
|
5239 |
-
|
5240 |
-
}
|
5241 |
-
|
5242 |
-
|
5243 |
-
|
5244 |
-
|
5245 |
-
|
5246 |
-
.offset-lg-7 {
|
5247 |
-
|
5248 |
-
|
5249 |
-
margin-left: 58.333333%
|
5250 |
-
|
5251 |
-
|
5252 |
-
}
|
5253 |
-
|
5254 |
-
|
5255 |
-
|
5256 |
-
|
5257 |
-
|
5258 |
-
.offset-lg-8 {
|
5259 |
-
|
5260 |
-
|
5261 |
-
margin-left: 66.666667%
|
5262 |
-
|
5263 |
-
|
5264 |
-
}
|
5265 |
-
|
5266 |
-
|
5267 |
-
|
5268 |
-
|
5269 |
-
|
5270 |
-
.offset-lg-9 {
|
5271 |
-
|
5272 |
-
|
5273 |
-
margin-left: 75%
|
5274 |
-
|
5275 |
-
|
5276 |
-
}
|
5277 |
-
|
5278 |
-
|
5279 |
-
|
5280 |
-
|
5281 |
-
|
5282 |
-
.offset-lg-10 {
|
5283 |
-
|
5284 |
-
|
5285 |
-
margin-left: 83.333333%
|
5286 |
-
|
5287 |
-
|
5288 |
-
}
|
5289 |
-
|
5290 |
-
|
5291 |
-
|
5292 |
-
|
5293 |
-
|
5294 |
-
.offset-lg-11 {
|
5295 |
-
|
5296 |
-
|
5297 |
-
margin-left: 91.666667%
|
5298 |
-
|
5299 |
-
|
5300 |
-
}
|
5301 |
-
|
5302 |
-
|
5303 |
-
}
|
5304 |
-
|
5305 |
-
|
5306 |
-
|
5307 |
-
|
5308 |
-
|
5309 |
-
@media (min-width: 1200px) {
|
5310 |
-
|
5311 |
-
|
5312 |
-
.col-xl {
|
5313 |
-
|
5314 |
-
|
5315 |
-
-ms-flex-preferred-size: 0;
|
5316 |
-
|
5317 |
-
|
5318 |
-
flex-basis: 0;
|
5319 |
-
|
5320 |
-
|
5321 |
-
-webkit-box-flex: 1;
|
5322 |
-
|
5323 |
-
|
5324 |
-
-ms-flex-positive: 1;
|
5325 |
-
|
5326 |
-
|
5327 |
-
flex-grow: 1;
|
5328 |
-
|
5329 |
-
|
5330 |
-
max-width: 100%
|
5331 |
-
|
5332 |
-
|
5333 |
-
}
|
5334 |
-
|
5335 |
-
|
5336 |
-
|
5337 |
-
|
5338 |
-
|
5339 |
-
.col-xl-auto {
|
5340 |
-
|
5341 |
-
|
5342 |
-
-webkit-box-flex: 0;
|
5343 |
-
|
5344 |
-
|
5345 |
-
-ms-flex: 0 0 auto;
|
5346 |
-
|
5347 |
-
|
5348 |
-
flex: 0 0 auto;
|
5349 |
-
|
5350 |
-
|
5351 |
-
width: auto;
|
5352 |
-
|
5353 |
-
|
5354 |
-
max-width: none
|
5355 |
-
|
5356 |
-
|
5357 |
-
}
|
5358 |
-
|
5359 |
-
|
5360 |
-
|
5361 |
-
|
5362 |
-
|
5363 |
-
.col-xl-1 {
|
5364 |
-
|
5365 |
-
|
5366 |
-
-webkit-box-flex: 0;
|
5367 |
-
|
5368 |
-
|
5369 |
-
-ms-flex: 0 0 8.333333%;
|
5370 |
-
|
5371 |
-
|
5372 |
-
flex: 0 0 8.333333%;
|
5373 |
-
|
5374 |
-
|
5375 |
-
max-width: 8.333333%
|
5376 |
-
|
5377 |
-
|
5378 |
-
}
|
5379 |
-
|
5380 |
-
|
5381 |
-
|
5382 |
-
|
5383 |
-
|
5384 |
-
.col-xl-2 {
|
5385 |
-
|
5386 |
-
|
5387 |
-
-webkit-box-flex: 0;
|
5388 |
-
|
5389 |
-
|
5390 |
-
-ms-flex: 0 0 16.666667%;
|
5391 |
-
|
5392 |
-
|
5393 |
-
flex: 0 0 16.666667%;
|
5394 |
-
|
5395 |
-
|
5396 |
-
max-width: 16.666667%
|
5397 |
-
|
5398 |
-
|
5399 |
-
}
|
5400 |
-
|
5401 |
-
|
5402 |
-
|
5403 |
-
|
5404 |
-
|
5405 |
-
.col-xl-3 {
|
5406 |
-
|
5407 |
-
|
5408 |
-
-webkit-box-flex: 0;
|
5409 |
-
|
5410 |
-
|
5411 |
-
-ms-flex: 0 0 25%;
|
5412 |
-
|
5413 |
-
|
5414 |
-
flex: 0 0 25%;
|
5415 |
-
|
5416 |
-
|
5417 |
-
max-width: 25%
|
5418 |
-
|
5419 |
-
|
5420 |
-
}
|
5421 |
-
|
5422 |
-
|
5423 |
-
|
5424 |
-
|
5425 |
-
|
5426 |
-
.col-xl-4 {
|
5427 |
-
|
5428 |
-
|
5429 |
-
-webkit-box-flex: 0;
|
5430 |
-
|
5431 |
-
|
5432 |
-
-ms-flex: 0 0 33.333333%;
|
5433 |
-
|
5434 |
-
|
5435 |
-
flex: 0 0 33.333333%;
|
5436 |
-
|
5437 |
-
|
5438 |
-
max-width: 33.333333%
|
5439 |
-
|
5440 |
-
|
5441 |
-
}
|
5442 |
-
|
5443 |
-
|
5444 |
-
|
5445 |
-
|
5446 |
-
|
5447 |
-
.col-xl-5 {
|
5448 |
-
|
5449 |
-
|
5450 |
-
-webkit-box-flex: 0;
|
5451 |
-
|
5452 |
-
|
5453 |
-
-ms-flex: 0 0 41.666667%;
|
5454 |
-
|
5455 |
-
|
5456 |
-
flex: 0 0 41.666667%;
|
5457 |
-
|
5458 |
-
|
5459 |
-
max-width: 41.666667%
|
5460 |
-
|
5461 |
-
|
5462 |
-
}
|
5463 |
-
|
5464 |
-
|
5465 |
-
|
5466 |
-
|
5467 |
-
|
5468 |
-
.col-xl-6 {
|
5469 |
-
|
5470 |
-
|
5471 |
-
-webkit-box-flex: 0;
|
5472 |
-
|
5473 |
-
|
5474 |
-
-ms-flex: 0 0 50%;
|
5475 |
-
|
5476 |
-
|
5477 |
-
flex: 0 0 50%;
|
5478 |
-
|
5479 |
-
|
5480 |
-
max-width: 50%
|
5481 |
-
|
5482 |
-
|
5483 |
-
}
|
5484 |
-
|
5485 |
-
|
5486 |
-
|
5487 |
-
|
5488 |
-
|
5489 |
-
.col-xl-7 {
|
5490 |
-
|
5491 |
-
|
5492 |
-
-webkit-box-flex: 0;
|
5493 |
-
|
5494 |
-
|
5495 |
-
-ms-flex: 0 0 58.333333%;
|
5496 |
-
|
5497 |
-
|
5498 |
-
flex: 0 0 58.333333%;
|
5499 |
-
|
5500 |
-
|
5501 |
-
max-width: 58.333333%
|
5502 |
-
|
5503 |
-
|
5504 |
-
}
|
5505 |
-
|
5506 |
-
|
5507 |
-
|
5508 |
-
|
5509 |
-
|
5510 |
-
.col-xl-8 {
|
5511 |
-
|
5512 |
-
|
5513 |
-
-webkit-box-flex: 0;
|
5514 |
-
|
5515 |
-
|
5516 |
-
-ms-flex: 0 0 66.666667%;
|
5517 |
-
|
5518 |
-
|
5519 |
-
flex: 0 0 66.666667%;
|
5520 |
-
|
5521 |
-
|
5522 |
-
max-width: 66.666667%
|
5523 |
-
|
5524 |
-
|
5525 |
-
}
|
5526 |
-
|
5527 |
-
|
5528 |
-
|
5529 |
-
|
5530 |
-
|
5531 |
-
.col-xl-9 {
|
5532 |
-
|
5533 |
-
|
5534 |
-
-webkit-box-flex: 0;
|
5535 |
-
|
5536 |
-
|
5537 |
-
-ms-flex: 0 0 75%;
|
5538 |
-
|
5539 |
-
|
5540 |
-
flex: 0 0 75%;
|
5541 |
-
|
5542 |
-
|
5543 |
-
max-width: 75%
|
5544 |
-
|
5545 |
-
|
5546 |
-
}
|
5547 |
-
|
5548 |
-
|
5549 |
-
|
5550 |
-
|
5551 |
-
|
5552 |
-
.col-xl-10 {
|
5553 |
-
|
5554 |
-
|
5555 |
-
-webkit-box-flex: 0;
|
5556 |
-
|
5557 |
-
|
5558 |
-
-ms-flex: 0 0 83.333333%;
|
5559 |
-
|
5560 |
-
|
5561 |
-
flex: 0 0 83.333333%;
|
5562 |
-
|
5563 |
-
|
5564 |
-
max-width: 83.333333%
|
5565 |
-
|
5566 |
-
|
5567 |
-
}
|
5568 |
-
|
5569 |
-
|
5570 |
-
|
5571 |
-
|
5572 |
-
|
5573 |
-
.col-xl-11 {
|
5574 |
-
|
5575 |
-
|
5576 |
-
-webkit-box-flex: 0;
|
5577 |
-
|
5578 |
-
|
5579 |
-
-ms-flex: 0 0 91.666667%;
|
5580 |
-
|
5581 |
-
|
5582 |
-
flex: 0 0 91.666667%;
|
5583 |
-
|
5584 |
-
|
5585 |
-
max-width: 91.666667%
|
5586 |
-
|
5587 |
-
|
5588 |
-
}
|
5589 |
-
|
5590 |
-
|
5591 |
-
|
5592 |
-
|
5593 |
-
|
5594 |
-
.col-xl-12 {
|
5595 |
-
|
5596 |
-
|
5597 |
-
-webkit-box-flex: 0;
|
5598 |
-
|
5599 |
-
|
5600 |
-
-ms-flex: 0 0 100%;
|
5601 |
-
|
5602 |
-
|
5603 |
-
flex: 0 0 100%;
|
5604 |
-
|
5605 |
-
|
5606 |
-
max-width: 100%
|
5607 |
-
|
5608 |
-
|
5609 |
-
}
|
5610 |
-
|
5611 |
-
|
5612 |
-
}
|
5613 |
-
|
5614 |
-
|
5615 |
-
|
5616 |
-
|
5617 |
-
|
5618 |
-
|
5619 |
-
|
5620 |
-
|
5621 |
-
.mo_otp_token, .mo2f_user_email, .mo2f_IR_phone,
|
5622 |
-
|
5623 |
-
|
5624 |
-
.mo_IR_otp_token, .mo2f_IR_GA_token, .mo2f_IR_phone_OTP {
|
5625 |
-
|
5626 |
-
|
5627 |
-
color:#212F3C;
|
5628 |
-
|
5629 |
-
|
5630 |
-
border:none;
|
5631 |
-
|
5632 |
-
|
5633 |
-
display:block;
|
5634 |
-
|
5635 |
-
|
5636 |
-
border-bottom-style: solid;
|
5637 |
-
|
5638 |
-
|
5639 |
-
border-width: 2px;
|
5640 |
-
|
5641 |
-
|
5642 |
-
border-color:#D0D3D4;
|
5643 |
-
|
5644 |
-
|
5645 |
-
border-radius:0px;
|
5646 |
-
|
5647 |
-
|
5648 |
-
outline:none;
|
5649 |
-
|
5650 |
-
|
5651 |
-
padding:5px;
|
5652 |
-
|
5653 |
-
|
5654 |
-
}
|
5655 |
-
|
5656 |
-
|
5657 |
-
|
5658 |
-
|
5659 |
-
|
5660 |
-
.mo_otp_token {
|
5661 |
-
|
5662 |
-
|
5663 |
-
font-size:15px;
|
5664 |
-
|
5665 |
-
|
5666 |
-
width:130px;
|
5667 |
-
|
5668 |
-
|
5669 |
-
text-align:center;
|
5670 |
-
|
5671 |
-
|
5672 |
-
}
|
5673 |
-
|
5674 |
-
|
5675 |
-
|
5676 |
-
|
5677 |
-
|
5678 |
-
.mo2f_user_email{
|
5679 |
-
|
5680 |
-
|
5681 |
-
font-size:16px;
|
5682 |
-
|
5683 |
-
|
5684 |
-
width:220px;
|
5685 |
-
|
5686 |
-
|
5687 |
-
text-align:center;
|
5688 |
-
|
5689 |
-
|
5690 |
-
}
|
5691 |
-
|
5692 |
-
|
5693 |
-
|
5694 |
-
|
5695 |
-
|
5696 |
-
.mo2f_IR_phone{
|
5697 |
-
|
5698 |
-
|
5699 |
-
font-size:14px;
|
5700 |
-
|
5701 |
-
|
5702 |
-
width:170px !important;
|
5703 |
-
|
5704 |
-
|
5705 |
-
}
|
5706 |
-
|
5707 |
-
|
5708 |
-
|
5709 |
-
|
5710 |
-
|
5711 |
-
.mo2f_IR_GA_token{
|
5712 |
-
|
5713 |
-
|
5714 |
-
font-size:15px;
|
5715 |
-
|
5716 |
-
|
5717 |
-
width:100px !important;
|
5718 |
-
|
5719 |
-
|
5720 |
-
}
|
5721 |
-
|
5722 |
-
|
5723 |
-
|
5724 |
-
|
5725 |
-
|
5726 |
-
.mo2f_IR_phone_OTP{
|
5727 |
-
|
5728 |
-
|
5729 |
-
font-size:15px;
|
5730 |
-
|
5731 |
-
|
5732 |
-
width:150px !important;
|
5733 |
-
|
5734 |
-
|
5735 |
}
|
1 |
+
.mo2f_carousel {
|
2 |
+
|
3 |
+
|
4 |
+
position: relative;
|
5 |
+
|
6 |
+
|
7 |
+
padding-bottom: 18px !important;
|
8 |
+
|
9 |
+
|
10 |
+
|
11 |
+
|
12 |
+
|
13 |
+
}
|
14 |
+
|
15 |
+
|
16 |
+
|
17 |
+
|
18 |
+
|
19 |
+
.mo2f_carousel-inner {
|
20 |
+
|
21 |
+
|
22 |
+
position: relative;
|
23 |
+
|
24 |
+
|
25 |
+
width: 100%;
|
26 |
+
|
27 |
+
|
28 |
+
overflow: hidden;
|
29 |
+
|
30 |
+
|
31 |
+
|
32 |
+
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
|
39 |
+
|
40 |
+
.mo2f_carousel-inner > .item {
|
41 |
+
|
42 |
+
|
43 |
+
position: relative;
|
44 |
+
|
45 |
+
|
46 |
+
display: none;
|
47 |
+
|
48 |
+
|
49 |
+
-webkit-transition: .6s ease-in-out left;
|
50 |
+
|
51 |
+
|
52 |
+
-o-transition: .6s ease-in-out left;
|
53 |
+
|
54 |
+
|
55 |
+
transition: .6s ease-in-out left;
|
56 |
+
|
57 |
+
|
58 |
+
height: 300px !important;
|
59 |
+
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
+
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
|
68 |
+
|
69 |
+
|
70 |
+
.mo2f_carousel-inner > .item > img, .mo2f_carousel-inner > .item > a > img {
|
71 |
+
|
72 |
+
|
73 |
+
line-height: 1;
|
74 |
+
|
75 |
+
|
76 |
+
|
77 |
+
|
78 |
+
|
79 |
+
max-height: 300px !important;
|
80 |
+
|
81 |
+
|
82 |
+
max-width: 600px !important;
|
83 |
+
|
84 |
+
|
85 |
+
}
|
86 |
+
|
87 |
+
|
88 |
+
|
89 |
+
|
90 |
+
|
91 |
+
@media all and (transform-3d) , ( -webkit-transform-3d ) {
|
92 |
+
|
93 |
+
|
94 |
+
.mo2f_carousel-inner > .item {
|
95 |
+
|
96 |
+
|
97 |
+
-webkit-transition: -webkit-transform .6s ease-in-out;
|
98 |
+
|
99 |
+
|
100 |
+
-o-transition: -o-transform .6s ease-in-out;
|
101 |
+
|
102 |
+
|
103 |
+
transition: transform .6s ease-in-out;
|
104 |
+
|
105 |
+
|
106 |
+
-webkit-backface-visibility: hidden;
|
107 |
+
|
108 |
+
|
109 |
+
backface-visibility: hidden;
|
110 |
+
|
111 |
+
|
112 |
+
-webkit-perspective: 1000;
|
113 |
+
|
114 |
+
|
115 |
+
perspective: 1000
|
116 |
+
|
117 |
+
|
118 |
+
}
|
119 |
+
|
120 |
+
|
121 |
+
|
122 |
+
|
123 |
+
|
124 |
+
.mo2f_carousel-inner > .item.next, .mo2f_carousel-inner > .item.active.right {
|
125 |
+
|
126 |
+
|
127 |
+
left: 0;
|
128 |
+
|
129 |
+
|
130 |
+
-webkit-transform: translate3d(100%, 0, 0);
|
131 |
+
|
132 |
+
|
133 |
+
transform: translate3d(100%, 0, 0)
|
134 |
+
|
135 |
+
|
136 |
+
}
|
137 |
+
|
138 |
+
|
139 |
+
|
140 |
+
|
141 |
+
|
142 |
+
.mo2f_carousel-inner > .item.prev, .mo2f_carousel-inner > .item.active.left {
|
143 |
+
|
144 |
+
|
145 |
+
left: 0;
|
146 |
+
|
147 |
+
|
148 |
+
-webkit-transform: translate3d(-100%, 0, 0);
|
149 |
+
|
150 |
+
|
151 |
+
transform: translate3d(-100%, 0, 0)
|
152 |
+
|
153 |
+
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
|
158 |
+
|
159 |
+
|
160 |
+
.mo2f_carousel-inner > .item.next.left, .mo2f_carousel-inner > .item.prev.right, .mo2f_carousel-inner > .item.active {
|
161 |
+
|
162 |
+
|
163 |
+
left: 0;
|
164 |
+
|
165 |
+
|
166 |
+
-webkit-transform: translate3d(0, 0, 0);
|
167 |
+
|
168 |
+
|
169 |
+
transform: translate3d(0, 0, 0)
|
170 |
+
|
171 |
+
|
172 |
+
}
|
173 |
+
|
174 |
+
|
175 |
+
}
|
176 |
+
|
177 |
+
|
178 |
+
|
179 |
+
|
180 |
+
|
181 |
+
.mo2f_carousel-inner > .active, .mo2f_carousel-inner > .next, .mo2f_carousel-inner > .prev {
|
182 |
+
|
183 |
+
|
184 |
+
display: block
|
185 |
+
|
186 |
+
|
187 |
+
}
|
188 |
+
|
189 |
+
|
190 |
+
|
191 |
+
|
192 |
+
|
193 |
+
.mo2f_carousel-inner > .active {
|
194 |
+
|
195 |
+
|
196 |
+
left: 0
|
197 |
+
|
198 |
+
|
199 |
+
}
|
200 |
+
|
201 |
+
|
202 |
+
|
203 |
+
|
204 |
+
|
205 |
+
.mo2f_carousel-inner > .next, .mo2f_carousel-inner > .prev {
|
206 |
+
|
207 |
+
|
208 |
+
position: absolute;
|
209 |
+
|
210 |
+
|
211 |
+
top: 0;
|
212 |
+
|
213 |
+
|
214 |
+
width: 100%
|
215 |
+
|
216 |
+
|
217 |
+
}
|
218 |
+
|
219 |
+
|
220 |
+
|
221 |
+
|
222 |
+
|
223 |
+
.mo2f_carousel-inner > .next {
|
224 |
+
|
225 |
+
|
226 |
+
left: 100%
|
227 |
+
|
228 |
+
|
229 |
+
}
|
230 |
+
|
231 |
+
|
232 |
+
|
233 |
+
|
234 |
+
|
235 |
+
.mo2f_carousel-inner > .prev {
|
236 |
+
|
237 |
+
|
238 |
+
left: -100%
|
239 |
+
|
240 |
+
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
|
245 |
+
|
246 |
+
|
247 |
+
.mo2f_carousel-inner > .next.left, .mo2f_carousel-inner > .prev.right {
|
248 |
+
|
249 |
+
|
250 |
+
left: 0
|
251 |
+
|
252 |
+
|
253 |
+
}
|
254 |
+
|
255 |
+
|
256 |
+
|
257 |
+
|
258 |
+
|
259 |
+
.mo2f_carousel-inner > .active.left {
|
260 |
+
|
261 |
+
|
262 |
+
left: -100%
|
263 |
+
|
264 |
+
|
265 |
+
}
|
266 |
+
|
267 |
+
|
268 |
+
|
269 |
+
|
270 |
+
|
271 |
+
.mo2f_carousel-inner > .active.right {
|
272 |
+
|
273 |
+
|
274 |
+
left: 100%
|
275 |
+
|
276 |
+
|
277 |
+
}
|
278 |
+
|
279 |
+
|
280 |
+
|
281 |
+
|
282 |
+
|
283 |
+
.mo2f_carousel-control {
|
284 |
+
|
285 |
+
|
286 |
+
position: absolute;
|
287 |
+
|
288 |
+
|
289 |
+
top: 0;
|
290 |
+
|
291 |
+
|
292 |
+
bottom: 0;
|
293 |
+
|
294 |
+
|
295 |
+
left: 0;
|
296 |
+
|
297 |
+
|
298 |
+
width: 15%;
|
299 |
+
|
300 |
+
|
301 |
+
font-size: 20px;
|
302 |
+
|
303 |
+
|
304 |
+
color: #fff;
|
305 |
+
|
306 |
+
|
307 |
+
text-align: center;
|
308 |
+
|
309 |
+
|
310 |
+
text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
|
311 |
+
|
312 |
+
|
313 |
+
filter: alpha(opacity=50);
|
314 |
+
|
315 |
+
|
316 |
+
opacity: .5
|
317 |
+
|
318 |
+
|
319 |
+
}
|
320 |
+
|
321 |
+
|
322 |
+
|
323 |
+
|
324 |
+
|
325 |
+
.mo2f_carousel-control.left {
|
326 |
+
|
327 |
+
|
328 |
+
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0,
|
329 |
+
|
330 |
+
|
331 |
+
rgba(0, 0, 0, .0001) 100%);
|
332 |
+
|
333 |
+
|
334 |
+
background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0,
|
335 |
+
|
336 |
+
|
337 |
+
rgba(0, 0, 0, .0001) 100%);
|
338 |
+
|
339 |
+
|
340 |
+
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)),
|
341 |
+
|
342 |
+
|
343 |
+
to(rgba(0, 0, 0, .0001)));
|
344 |
+
|
345 |
+
|
346 |
+
background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0,
|
347 |
+
|
348 |
+
|
349 |
+
rgba(0, 0, 0, .0001) 100%);
|
350 |
+
|
351 |
+
|
352 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',
|
353 |
+
|
354 |
+
|
355 |
+
endColorstr='#00000000', GradientType=1);
|
356 |
+
|
357 |
+
|
358 |
+
background-repeat: repeat-x
|
359 |
+
|
360 |
+
|
361 |
+
}
|
362 |
+
|
363 |
+
|
364 |
+
|
365 |
+
|
366 |
+
|
367 |
+
.mo2f_carousel-control.right {
|
368 |
+
|
369 |
+
|
370 |
+
right: 0;
|
371 |
+
|
372 |
+
|
373 |
+
left: auto;
|
374 |
+
|
375 |
+
|
376 |
+
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0,
|
377 |
+
|
378 |
+
|
379 |
+
rgba(0, 0, 0, .5) 100%);
|
380 |
+
|
381 |
+
|
382 |
+
background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0,
|
383 |
+
|
384 |
+
|
385 |
+
rgba(0, 0, 0, .5) 100%);
|
386 |
+
|
387 |
+
|
388 |
+
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)),
|
389 |
+
|
390 |
+
|
391 |
+
to(rgba(0, 0, 0, .5)));
|
392 |
+
|
393 |
+
|
394 |
+
background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0,
|
395 |
+
|
396 |
+
|
397 |
+
rgba(0, 0, 0, .5) 100%);
|
398 |
+
|
399 |
+
|
400 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',
|
401 |
+
|
402 |
+
|
403 |
+
endColorstr='#80000000', GradientType=1);
|
404 |
+
|
405 |
+
|
406 |
+
background-repeat: repeat-x
|
407 |
+
|
408 |
+
|
409 |
+
}
|
410 |
+
|
411 |
+
|
412 |
+
|
413 |
+
|
414 |
+
|
415 |
+
.mo2f_carousel-control:hover, .mo2f_carousel-control:focus {
|
416 |
+
|
417 |
+
|
418 |
+
color: #fff;
|
419 |
+
|
420 |
+
|
421 |
+
text-decoration: none;
|
422 |
+
|
423 |
+
|
424 |
+
filter: alpha(opacity=90);
|
425 |
+
|
426 |
+
|
427 |
+
outline: 0;
|
428 |
+
|
429 |
+
|
430 |
+
opacity: .9
|
431 |
+
|
432 |
+
|
433 |
+
}
|
434 |
+
|
435 |
+
|
436 |
+
|
437 |
+
|
438 |
+
|
439 |
+
.mo2f_carousel-control .icon-prev, .mo2f_carousel-control .icon-next, .mo2f_carousel-control .glyphicon-chevron-left, .mo2f_carousel-control .glyphicon-chevron-right {
|
440 |
+
|
441 |
+
|
442 |
+
position: absolute;
|
443 |
+
|
444 |
+
|
445 |
+
top: 50%;
|
446 |
+
|
447 |
+
|
448 |
+
z-index: 5;
|
449 |
+
|
450 |
+
|
451 |
+
display: inline-block
|
452 |
+
|
453 |
+
|
454 |
+
}
|
455 |
+
|
456 |
+
|
457 |
+
|
458 |
+
|
459 |
+
|
460 |
+
.mo2f_carousel-control .icon-prev, .mo2f_carousel-control .glyphicon-chevron-left {
|
461 |
+
|
462 |
+
|
463 |
+
left: 50%;
|
464 |
+
|
465 |
+
|
466 |
+
margin-left: -10px
|
467 |
+
|
468 |
+
|
469 |
+
}
|
470 |
+
|
471 |
+
|
472 |
+
|
473 |
+
|
474 |
+
|
475 |
+
.mo2f_carousel-control .icon-next, .mo2f_carousel-control .glyphicon-chevron-right {
|
476 |
+
|
477 |
+
|
478 |
+
right: 50%;
|
479 |
+
|
480 |
+
|
481 |
+
margin-right: -10px
|
482 |
+
|
483 |
+
|
484 |
+
}
|
485 |
+
|
486 |
+
|
487 |
+
|
488 |
+
|
489 |
+
|
490 |
+
.mo2f_carousel-control .icon-prev, .mo2f_carousel-control .icon-next {
|
491 |
+
|
492 |
+
|
493 |
+
width: 20px;
|
494 |
+
|
495 |
+
|
496 |
+
height: 20px;
|
497 |
+
|
498 |
+
|
499 |
+
margin-top: -10px;
|
500 |
+
|
501 |
+
|
502 |
+
font-family: serif
|
503 |
+
|
504 |
+
|
505 |
+
}
|
506 |
+
|
507 |
+
|
508 |
+
|
509 |
+
|
510 |
+
|
511 |
+
.mo2f_carousel-control .icon-prev:before {
|
512 |
+
|
513 |
+
|
514 |
+
content: '\2039'
|
515 |
+
|
516 |
+
|
517 |
+
}
|
518 |
+
|
519 |
+
|
520 |
+
|
521 |
+
|
522 |
+
|
523 |
+
.mo2f_carousel-control .icon-next:before {
|
524 |
+
|
525 |
+
|
526 |
+
content: '\203a'
|
527 |
+
|
528 |
+
|
529 |
+
}
|
530 |
+
|
531 |
+
|
532 |
+
|
533 |
+
|
534 |
+
|
535 |
+
.mo2f_carousel-indicators {
|
536 |
+
|
537 |
+
|
538 |
+
position: absolute;
|
539 |
+
|
540 |
+
|
541 |
+
bottom: -25px;
|
542 |
+
|
543 |
+
|
544 |
+
left: 50%;
|
545 |
+
|
546 |
+
|
547 |
+
z-index: 15;
|
548 |
+
|
549 |
+
|
550 |
+
width: 60%;
|
551 |
+
|
552 |
+
|
553 |
+
padding-left: 0;
|
554 |
+
|
555 |
+
|
556 |
+
margin-left: -30%;
|
557 |
+
|
558 |
+
|
559 |
+
text-align: center;
|
560 |
+
|
561 |
+
|
562 |
+
list-style: none
|
563 |
+
|
564 |
+
|
565 |
+
}
|
566 |
+
|
567 |
+
|
568 |
+
|
569 |
+
|
570 |
+
|
571 |
+
.mo2f_carousel-indicators li {
|
572 |
+
|
573 |
+
|
574 |
+
display: inline-block;
|
575 |
+
|
576 |
+
|
577 |
+
width: 10px;
|
578 |
+
|
579 |
+
|
580 |
+
height: 10px;
|
581 |
+
|
582 |
+
|
583 |
+
margin: 1px;
|
584 |
+
|
585 |
+
|
586 |
+
text-indent: -999px;
|
587 |
+
|
588 |
+
|
589 |
+
cursor: pointer;
|
590 |
+
|
591 |
+
|
592 |
+
background-color: #0 \9;
|
593 |
+
|
594 |
+
|
595 |
+
background-color: rgba(0, 0, 0, 0);
|
596 |
+
|
597 |
+
|
598 |
+
border: 1px solid #0073aa;
|
599 |
+
|
600 |
+
|
601 |
+
border-radius: 10px
|
602 |
+
|
603 |
+
|
604 |
+
}
|
605 |
+
|
606 |
+
|
607 |
+
|
608 |
+
|
609 |
+
|
610 |
+
.mo2f_carousel-indicators .active {
|
611 |
+
|
612 |
+
|
613 |
+
width: 12px;
|
614 |
+
|
615 |
+
|
616 |
+
height: 12px;
|
617 |
+
|
618 |
+
|
619 |
+
margin: 0;
|
620 |
+
|
621 |
+
|
622 |
+
background-color: #0073aa;
|
623 |
+
|
624 |
+
|
625 |
+
}
|
626 |
+
|
627 |
+
|
628 |
+
|
629 |
+
|
630 |
+
|
631 |
+
.mo2f_carousel-caption {
|
632 |
+
|
633 |
+
|
634 |
+
position: absolute;
|
635 |
+
|
636 |
+
|
637 |
+
right: 15%;
|
638 |
+
|
639 |
+
|
640 |
+
bottom: 20px;
|
641 |
+
|
642 |
+
|
643 |
+
left: 15%;
|
644 |
+
|
645 |
+
|
646 |
+
z-index: 10;
|
647 |
+
|
648 |
+
|
649 |
+
padding-top: 20px;
|
650 |
+
|
651 |
+
|
652 |
+
padding-bottom: 20px;
|
653 |
+
|
654 |
+
|
655 |
+
color: #fff;
|
656 |
+
|
657 |
+
|
658 |
+
text-align: center;
|
659 |
+
|
660 |
+
|
661 |
+
text-shadow: 0 1px 2px rgba(0, 0, 0, .6)
|
662 |
+
|
663 |
+
|
664 |
+
}
|
665 |
+
|
666 |
+
|
667 |
+
|
668 |
+
|
669 |
+
|
670 |
+
.mo2f_carousel-caption .btn {
|
671 |
+
|
672 |
+
|
673 |
+
text-shadow: none
|
674 |
+
|
675 |
+
|
676 |
+
}
|
677 |
+
|
678 |
+
|
679 |
+
|
680 |
+
|
681 |
+
|
682 |
+
@media screen and (min-width: 768px) {
|
683 |
+
|
684 |
+
|
685 |
+
.mo2f_carousel-control .glyphicon-chevron-left, .mo2f_carousel-control .glyphicon-chevron-right, .mo2f_carousel-control .icon-prev, .mo2f_carousel-control .icon-next {
|
686 |
+
|
687 |
+
|
688 |
+
width: 30px;
|
689 |
+
|
690 |
+
|
691 |
+
height: 30px;
|
692 |
+
|
693 |
+
|
694 |
+
margin-top: -15px;
|
695 |
+
|
696 |
+
|
697 |
+
font-size: 30px
|
698 |
+
|
699 |
+
|
700 |
+
}
|
701 |
+
|
702 |
+
|
703 |
+
|
704 |
+
|
705 |
+
|
706 |
+
.mo2f_carousel-control .glyphicon-chevron-left, .mo2f_carousel-control .icon-prev {
|
707 |
+
|
708 |
+
|
709 |
+
margin-left: -15px
|
710 |
+
|
711 |
+
|
712 |
+
}
|
713 |
+
|
714 |
+
|
715 |
+
|
716 |
+
|
717 |
+
|
718 |
+
.mo2f_carousel-control .glyphicon-chevron-right, .mo2f_carousel-control .icon-next {
|
719 |
+
|
720 |
+
|
721 |
+
margin-right: -15px
|
722 |
+
|
723 |
+
|
724 |
+
}
|
725 |
+
|
726 |
+
|
727 |
+
|
728 |
+
|
729 |
+
|
730 |
+
.mo2f_carousel-caption {
|
731 |
+
|
732 |
+
|
733 |
+
right: 20%;
|
734 |
+
|
735 |
+
|
736 |
+
left: 20%;
|
737 |
+
|
738 |
+
|
739 |
+
padding-bottom: 30px
|
740 |
+
|
741 |
+
|
742 |
+
}
|
743 |
+
|
744 |
+
|
745 |
+
|
746 |
+
|
747 |
+
|
748 |
+
.mo2f_carousel-indicators {
|
749 |
+
|
750 |
+
|
751 |
+
bottom: -14px
|
752 |
+
|
753 |
+
|
754 |
+
}
|
755 |
+
|
756 |
+
|
757 |
+
}
|
758 |
+
|
759 |
+
|
760 |
+
|
761 |
+
|
762 |
+
|
763 |
+
.hidden {
|
764 |
+
|
765 |
+
|
766 |
+
display: none;
|
767 |
+
|
768 |
+
|
769 |
+
}
|
770 |
+
|
771 |
+
|
772 |
+
|
773 |
+
|
774 |
+
|
775 |
+
.float-right {
|
776 |
+
|
777 |
+
|
778 |
+
text-align: right;
|
779 |
+
|
780 |
+
|
781 |
+
}
|
782 |
+
|
783 |
+
|
784 |
+
|
785 |
+
|
786 |
+
|
787 |
+
.mo2f_collapse {
|
788 |
+
|
789 |
+
|
790 |
+
display: none;
|
791 |
+
|
792 |
+
|
793 |
+
/ / visibility: hidden;
|
794 |
+
|
795 |
+
|
796 |
+
font-size: 14px !important;
|
797 |
+
|
798 |
+
|
799 |
+
|
800 |
+
|
801 |
+
|
802 |
+
}
|
803 |
+
|
804 |
+
|
805 |
+
|
806 |
+
|
807 |
+
|
808 |
+
.mo2f_collapse.in {
|
809 |
+
|
810 |
+
|
811 |
+
display: block;
|
812 |
+
|
813 |
+
|
814 |
+
visibility: visible;
|
815 |
+
|
816 |
+
|
817 |
+
|
818 |
+
|
819 |
+
|
820 |
+
}
|
821 |
+
|
822 |
+
|
823 |
+
|
824 |
+
|
825 |
+
|
826 |
+
.mo2f_collapsing {
|
827 |
+
|
828 |
+
|
829 |
+
position: relative;
|
830 |
+
|
831 |
+
|
832 |
+
font-size: 14px !important;
|
833 |
+
|
834 |
+
|
835 |
+
height: 0;
|
836 |
+
|
837 |
+
|
838 |
+
overflow: hidden;
|
839 |
+
|
840 |
+
|
841 |
+
-webkit-transition-timing-function: ease;
|
842 |
+
|
843 |
+
|
844 |
+
-o-transition-timing-function: ease;
|
845 |
+
|
846 |
+
|
847 |
+
transition-timing-function: ease;
|
848 |
+
|
849 |
+
|
850 |
+
-webkit-transition-duration: .20s;
|
851 |
+
|
852 |
+
|
853 |
+
-o-transition-duration: .20s;
|
854 |
+
|
855 |
+
|
856 |
+
transition-duration: .20s;
|
857 |
+
|
858 |
+
|
859 |
+
-webkit-transition-property: height, visibility;
|
860 |
+
|
861 |
+
|
862 |
+
-o-transition-property: height, visibility;
|
863 |
+
|
864 |
+
|
865 |
+
transition-property: height, visibility
|
866 |
+
|
867 |
+
|
868 |
+
}
|
869 |
+
|
870 |
+
|
871 |
+
|
872 |
+
|
873 |
+
|
874 |
+
.mo2f_thumbnail {
|
875 |
+
|
876 |
+
|
877 |
+
width: 315px;
|
878 |
+
|
879 |
+
|
880 |
+
margin-bottom: 10px;
|
881 |
+
|
882 |
+
|
883 |
+
position: relative;
|
884 |
+
|
885 |
+
|
886 |
+
background-color: #fff;
|
887 |
+
|
888 |
+
|
889 |
+
border: 1px solid #ddd;
|
890 |
+
|
891 |
+
|
892 |
+
-webkit-transition: border .2s ease-in-out;
|
893 |
+
|
894 |
+
|
895 |
+
-o-transition: border .2s ease-in-out;
|
896 |
+
|
897 |
+
|
898 |
+
transition: border .2s ease-in-out
|
899 |
+
|
900 |
+
|
901 |
+
}
|
902 |
+
|
903 |
+
|
904 |
+
|
905 |
+
|
906 |
+
|
907 |
+
.mo2f_thumbnail > img, .mo2f_thumbnail a > img {
|
908 |
+
|
909 |
+
|
910 |
+
margin-right: auto;
|
911 |
+
|
912 |
+
|
913 |
+
margin-left: auto
|
914 |
+
|
915 |
+
|
916 |
+
}
|
917 |
+
|
918 |
+
|
919 |
+
|
920 |
+
|
921 |
+
|
922 |
+
a.mo2f_thumbnail:hover, a.mo2f_thumbnail:focus, a.mo2f_thumbnail.active {
|
923 |
+
|
924 |
+
|
925 |
+
border-color: #337ab7
|
926 |
+
|
927 |
+
|
928 |
+
}
|
929 |
+
|
930 |
+
|
931 |
+
|
932 |
+
|
933 |
+
|
934 |
+
.mo2f_thumbnail .caption {
|
935 |
+
|
936 |
+
|
937 |
+
padding: 9px;
|
938 |
+
|
939 |
+
|
940 |
+
color: #333
|
941 |
+
|
942 |
+
|
943 |
+
}
|
944 |
+
|
945 |
+
|
946 |
+
|
947 |
+
|
948 |
+
|
949 |
+
.mo2f_thumbnail label {
|
950 |
+
|
951 |
+
|
952 |
+
font-weight: bold;
|
953 |
+
|
954 |
+
|
955 |
+
|
956 |
+
|
957 |
+
|
958 |
+
}
|
959 |
+
|
960 |
+
|
961 |
+
|
962 |
+
|
963 |
+
|
964 |
+
.mo2f_close {
|
965 |
+
|
966 |
+
|
967 |
+
float: right;
|
968 |
+
|
969 |
+
|
970 |
+
font-size: 21px;
|
971 |
+
|
972 |
+
|
973 |
+
font-weight: 700;
|
974 |
+
|
975 |
+
|
976 |
+
line-height: 1;
|
977 |
+
|
978 |
+
|
979 |
+
color: #000;
|
980 |
+
|
981 |
+
|
982 |
+
text-shadow: 0 1px 0 #fff;
|
983 |
+
|
984 |
+
|
985 |
+
filter: alpha(opacity=20);
|
986 |
+
|
987 |
+
|
988 |
+
opacity: .2
|
989 |
+
|
990 |
+
|
991 |
+
}
|
992 |
+
|
993 |
+
|
994 |
+
|
995 |
+
|
996 |
+
|
997 |
+
.mo2f_close:hover, .mo2f_close:focus {
|
998 |
+
|
999 |
+
|
1000 |
+
color: #000;
|
1001 |
+
|
1002 |
+
|
1003 |
+
text-decoration: none;
|
1004 |
+
|
1005 |
+
|
1006 |
+
cursor: pointer;
|
1007 |
+
|
1008 |
+
|
1009 |
+
filter: alpha(opacity=50);
|
1010 |
+
|
1011 |
+
|
1012 |
+
opacity: .5
|
1013 |
+
|
1014 |
+
|
1015 |
+
}
|
1016 |
+
|
1017 |
+
|
1018 |
+
|
1019 |
+
|
1020 |
+
|
1021 |
+
button.mo2f_close {
|
1022 |
+
|
1023 |
+
|
1024 |
+
-webkit-appearance: none;
|
1025 |
+
|
1026 |
+
|
1027 |
+
padding: 0;
|
1028 |
+
|
1029 |
+
|
1030 |
+
cursor: pointer;
|
1031 |
+
|
1032 |
+
|
1033 |
+
background: 0 0;
|
1034 |
+
|
1035 |
+
|
1036 |
+
border: 0
|
1037 |
+
|
1038 |
+
|
1039 |
+
}
|
1040 |
+
|
1041 |
+
|
1042 |
+
|
1043 |
+
|
1044 |
+
|
1045 |
+
.mo2f_modal-open {
|
1046 |
+
|
1047 |
+
|
1048 |
+
overflow: hidden !important;
|
1049 |
+
|
1050 |
+
|
1051 |
+
position: fixed !important;
|
1052 |
+
|
1053 |
+
|
1054 |
+
width: 100% !important;
|
1055 |
+
|
1056 |
+
|
1057 |
+
|
1058 |
+
|
1059 |
+
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
|
1063 |
+
|
1064 |
+
|
1065 |
+
|
1066 |
+
.mo2f_modal {
|
1067 |
+
|
1068 |
+
|
1069 |
+
position: fixed !important;
|
1070 |
+
|
1071 |
+
|
1072 |
+
top: 0;
|
1073 |
+
|
1074 |
+
|
1075 |
+
right: 0;
|
1076 |
+
|
1077 |
+
|
1078 |
+
bottom: 0;
|
1079 |
+
|
1080 |
+
|
1081 |
+
left: 0;
|
1082 |
+
|
1083 |
+
|
1084 |
+
z-index: 100000 !important;
|
1085 |
+
|
1086 |
+
|
1087 |
+
|
1088 |
+
|
1089 |
+
|
1090 |
+
overflow: hidden !important;
|
1091 |
+
|
1092 |
+
|
1093 |
+
-webkit-overflow-scrolling: touch;
|
1094 |
+
|
1095 |
+
|
1096 |
+
outline: 0;
|
1097 |
+
|
1098 |
+
|
1099 |
+
|
1100 |
+
|
1101 |
+
|
1102 |
+
}
|
1103 |
+
|
1104 |
+
|
1105 |
+
|
1106 |
+
|
1107 |
+
|
1108 |
+
.mo2f_modal_inner {
|
1109 |
+
|
1110 |
+
|
1111 |
+
display: none;
|
1112 |
+
|
1113 |
+
|
1114 |
+
}
|
1115 |
+
|
1116 |
+
|
1117 |
+
|
1118 |
+
|
1119 |
+
|
1120 |
+
.mo2f_modal.fade .mo2f_modal-dialog {
|
1121 |
+
|
1122 |
+
|
1123 |
+
-webkit-transition: -webkit-transform .3s ease-out;
|
1124 |
+
|
1125 |
+
|
1126 |
+
-o-transition: -o-transform .3s ease-out;
|
1127 |
+
|
1128 |
+
|
1129 |
+
transition: transform .3s ease-out;
|
1130 |
+
|
1131 |
+
|
1132 |
+
-webkit-transform: translate(0, -25%);
|
1133 |
+
|
1134 |
+
|
1135 |
+
-ms-transform: translate(0, -25%);
|
1136 |
+
|
1137 |
+
|
1138 |
+
-o-transform: translate(0, -25%);
|
1139 |
+
|
1140 |
+
|
1141 |
+
transform: translate(0, -25%)
|
1142 |
+
|
1143 |
+
|
1144 |
+
}
|
1145 |
+
|
1146 |
+
|
1147 |
+
|
1148 |
+
|
1149 |
+
|
1150 |
+
.mo2f_modal.in .mo2f_modal-dialog {
|
1151 |
+
|
1152 |
+
|
1153 |
+
-webkit-transform: translate(0, 80px) !important;
|
1154 |
+
|
1155 |
+
|
1156 |
+
-ms-transform: translate(0, 80px) !important;
|
1157 |
+
|
1158 |
+
|
1159 |
+
-o-transform: translate(0, 80px) !important;
|
1160 |
+
|
1161 |
+
|
1162 |
+
transform: translate(0, 80px) !important;
|
1163 |
+
|
1164 |
+
|
1165 |
+
|
1166 |
+
|
1167 |
+
|
1168 |
+
}
|
1169 |
+
|
1170 |
+
|
1171 |
+
|
1172 |
+
|
1173 |
+
|
1174 |
+
.mo2f_modal-open .mo2f_modal {
|
1175 |
+
|
1176 |
+
|
1177 |
+
overflow-x: hidden;
|
1178 |
+
|
1179 |
+
|
1180 |
+
overflow-y: hidden;
|
1181 |
+
|
1182 |
+
|
1183 |
+
}
|
1184 |
+
|
1185 |
+
|
1186 |
+
|
1187 |
+
|
1188 |
+
|
1189 |
+
.mo2f_modal-dialog {
|
1190 |
+
|
1191 |
+
|
1192 |
+
position: relative;
|
1193 |
+
|
1194 |
+
|
1195 |
+
width: auto;
|
1196 |
+
|
1197 |
+
|
1198 |
+
margin: 10px;
|
1199 |
+
|
1200 |
+
|
1201 |
+
|
1202 |
+
|
1203 |
+
|
1204 |
+
}
|
1205 |
+
|
1206 |
+
|
1207 |
+
|
1208 |
+
|
1209 |
+
|
1210 |
+
.login mo_customer_validation-modal-content {
|
1211 |
+
|
1212 |
+
|
1213 |
+
position: relative !important;
|
1214 |
+
|
1215 |
+
|
1216 |
+
background-color: #fff !important;
|
1217 |
+
|
1218 |
+
|
1219 |
+
-webkit-background-clip: padding-box !important;
|
1220 |
+
|
1221 |
+
|
1222 |
+
background-clip: padding-box !important;
|
1223 |
+
|
1224 |
+
|
1225 |
+
border: 1px solid #999 !important;
|
1226 |
+
|
1227 |
+
|
1228 |
+
border: 1px solid rgba(0, 0, 0, .2) !important;
|
1229 |
+
|
1230 |
+
|
1231 |
+
border-radius: 6px !important;
|
1232 |
+
|
1233 |
+
|
1234 |
+
outline: 0 !important;
|
1235 |
+
|
1236 |
+
|
1237 |
+
|
1238 |
+
|
1239 |
+
|
1240 |
+
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5) !important;
|
1241 |
+
|
1242 |
+
|
1243 |
+
box-shadow: 0 3px 9px rgba(0, 0, 0, .5) !important;
|
1244 |
+
|
1245 |
+
|
1246 |
+
}
|
1247 |
+
|
1248 |
+
|
1249 |
+
|
1250 |
+
|
1251 |
+
|
1252 |
+
.mo2f-modal-backdrop {
|
1253 |
+
|
1254 |
+
|
1255 |
+
position: absolute;
|
1256 |
+
|
1257 |
+
|
1258 |
+
top: 0;
|
1259 |
+
|
1260 |
+
|
1261 |
+
right: 0;
|
1262 |
+
|
1263 |
+
|
1264 |
+
left: 0;
|
1265 |
+
|
1266 |
+
|
1267 |
+
background-color: #f1f1f1 !important;
|
1268 |
+
|
1269 |
+
|
1270 |
+
filter: alpha(opacity=50) !important;
|
1271 |
+
|
1272 |
+
|
1273 |
+
opacity: 0.8 !important;
|
1274 |
+
|
1275 |
+
|
1276 |
+
height: 100% !important;
|
1277 |
+
|
1278 |
+
|
1279 |
+
}
|
1280 |
+
|
1281 |
+
|
1282 |
+
|
1283 |
+
|
1284 |
+
|
1285 |
+
#smsAlertModal {
|
1286 |
+
|
1287 |
+
|
1288 |
+
background-color: black !important;
|
1289 |
+
|
1290 |
+
|
1291 |
+
opacity: 0.8 !important;
|
1292 |
+
|
1293 |
+
|
1294 |
+
filter: alpha(opacity=50) !important;
|
1295 |
+
|
1296 |
+
|
1297 |
+
}
|
1298 |
+
|
1299 |
+
|
1300 |
+
|
1301 |
+
|
1302 |
+
|
1303 |
+
.mo2f_modal-header {
|
1304 |
+
|
1305 |
+
|
1306 |
+
min-height: 14px;
|
1307 |
+
|
1308 |
+
|
1309 |
+
padding: 10px;
|
1310 |
+
|
1311 |
+
|
1312 |
+
border-bottom: 1px solid #e5e5e5
|
1313 |
+
|
1314 |
+
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
|
1318 |
+
|
1319 |
+
|
1320 |
+
|
1321 |
+
.mo2f_modal-title {
|
1322 |
+
|
1323 |
+
|
1324 |
+
margin: 0 !important;
|
1325 |
+
|
1326 |
+
|
1327 |
+
line-height: 1.0 !important;
|
1328 |
+
|
1329 |
+
|
1330 |
+
}
|
1331 |
+
|
1332 |
+
|
1333 |
+
|
1334 |
+
|
1335 |
+
|
1336 |
+
.mo2f_modal-body {
|
1337 |
+
|
1338 |
+
|
1339 |
+
/ / width: 96 % !important;
|
1340 |
+
|
1341 |
+
|
1342 |
+
position: relative !important;
|
1343 |
+
|
1344 |
+
|
1345 |
+
padding: 15px !important;
|
1346 |
+
|
1347 |
+
|
1348 |
+
overflow-y: auto !important;
|
1349 |
+
|
1350 |
+
|
1351 |
+
max-height: 550px !important;
|
1352 |
+
|
1353 |
+
|
1354 |
+
}
|
1355 |
+
|
1356 |
+
|
1357 |
+
|
1358 |
+
|
1359 |
+
|
1360 |
+
.mo2f_modal-footer {
|
1361 |
+
|
1362 |
+
|
1363 |
+
padding: 15px;
|
1364 |
+
|
1365 |
+
|
1366 |
+
text-align: right;
|
1367 |
+
|
1368 |
+
|
1369 |
+
border-top: 1px solid #e5e5e5
|
1370 |
+
|
1371 |
+
|
1372 |
+
}
|
1373 |
+
|
1374 |
+
|
1375 |
+
|
1376 |
+
|
1377 |
+
|
1378 |
+
.mo2f_modal-footer .btn + .btn {
|
1379 |
+
|
1380 |
+
|
1381 |
+
margin-bottom: 0;
|
1382 |
+
|
1383 |
+
|
1384 |
+
margin-left: 5px
|
1385 |
+
|
1386 |
+
|
1387 |
+
}
|
1388 |
+
|
1389 |
+
|
1390 |
+
|
1391 |
+
|
1392 |
+
|
1393 |
+
.mo2f_modal-footer .btn-group .btn + .btn {
|
1394 |
+
|
1395 |
+
|
1396 |
+
margin-left: -1px
|
1397 |
+
|
1398 |
+
|
1399 |
+
}
|
1400 |
+
|
1401 |
+
|
1402 |
+
|
1403 |
+
|
1404 |
+
|
1405 |
+
.mo2f_modal-footer .btn-block + .btn-block {
|
1406 |
+
|
1407 |
+
|
1408 |
+
margin-left: 0
|
1409 |
+
|
1410 |
+
|
1411 |
+
}
|
1412 |
+
|
1413 |
+
|
1414 |
+
|
1415 |
+
|
1416 |
+
|
1417 |
+
.mo2f_modal-scrollbar-measure {
|
1418 |
+
|
1419 |
+
|
1420 |
+
position: absolute;
|
1421 |
+
|
1422 |
+
|
1423 |
+
top: -9999px;
|
1424 |
+
|
1425 |
+
|
1426 |
+
width: 50px;
|
1427 |
+
|
1428 |
+
|
1429 |
+
height: 50px;
|
1430 |
+
|
1431 |
+
|
1432 |
+
overflow: scroll
|
1433 |
+
|
1434 |
+
|
1435 |
+
}
|
1436 |
+
|
1437 |
+
|
1438 |
+
|
1439 |
+
|
1440 |
+
|
1441 |
+
@media ( min-width: 768px) {
|
1442 |
+
|
1443 |
+
|
1444 |
+
.mo2f_modal-dialog {
|
1445 |
+
|
1446 |
+
width: auto;
|
1447 |
+
margin: 0px auto
|
1448 |
+
|
1449 |
+
|
1450 |
+
}
|
1451 |
+
|
1452 |
+
|
1453 |
+
|
1454 |
+
|
1455 |
+
|
1456 |
+
.login mo_customer_validation-modal-content {
|
1457 |
+
|
1458 |
+
|
1459 |
+
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
|
1460 |
+
|
1461 |
+
|
1462 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
|
1463 |
+
|
1464 |
+
|
1465 |
+
}
|
1466 |
+
|
1467 |
+
|
1468 |
+
|
1469 |
+
|
1470 |
+
|
1471 |
+
.mo2f_modal-sm {
|
1472 |
+
|
1473 |
+
|
1474 |
+
width: 300px
|
1475 |
+
|
1476 |
+
|
1477 |
+
}
|
1478 |
+
|
1479 |
+
|
1480 |
+
|
1481 |
+
|
1482 |
+
|
1483 |
+
.mo2f_modal-md {
|
1484 |
+
|
1485 |
+
|
1486 |
+
width: 550px
|
1487 |
+
|
1488 |
+
|
1489 |
+
}
|
1490 |
+
|
1491 |
+
|
1492 |
+
}
|
1493 |
+
|
1494 |
+
|
1495 |
+
|
1496 |
+
|
1497 |
+
|
1498 |
+
@media ( min-width: 992px) {
|
1499 |
+
|
1500 |
+
|
1501 |
+
.mo2f_modal-lg {
|
1502 |
+
|
1503 |
+
|
1504 |
+
width: 900px;
|
1505 |
+
|
1506 |
+
|
1507 |
+
}
|
1508 |
+
|
1509 |
+
|
1510 |
+
|
1511 |
+
|
1512 |
+
|
1513 |
+
.mo2f_modal-md {
|
1514 |
+
|
1515 |
+
|
1516 |
+
width: 550px
|
1517 |
+
|
1518 |
+
|
1519 |
+
}
|
1520 |
+
|
1521 |
+
|
1522 |
+
}
|
1523 |
+
|
1524 |
+
|
1525 |
+
|
1526 |
+
|
1527 |
+
|
1528 |
+
.center{
|
1529 |
+
|
1530 |
+
|
1531 |
+
|
1532 |
+
|
1533 |
+
|
1534 |
+
text-align: center !important;
|
1535 |
+
|
1536 |
+
|
1537 |
+
}
|
1538 |
+
|
1539 |
+
|
1540 |
+
|
1541 |
+
|
1542 |
+
|
1543 |
+
#otpMessage {
|
1544 |
+
|
1545 |
+
|
1546 |
+
border-radius: 1px;
|
1547 |
+
|
1548 |
+
|
1549 |
+
padding: 1px 5px;
|
1550 |
+
|
1551 |
+
|
1552 |
+
background: #f1f1f1;
|
1553 |
+
|
1554 |
+
|
1555 |
+
}
|
1556 |
+
|
1557 |
+
|
1558 |
+
|
1559 |
+
|
1560 |
+
|
1561 |
+
.mo2f_carousel-indicators {
|
1562 |
+
|
1563 |
+
|
1564 |
+
position: absolute;
|
1565 |
+
|
1566 |
+
|
1567 |
+
bottom: -20px;
|
1568 |
+
|
1569 |
+
|
1570 |
+
z-index: 15;
|
1571 |
+
|
1572 |
+
|
1573 |
+
width: 60%;
|
1574 |
+
|
1575 |
+
|
1576 |
+
list-style: none;
|
1577 |
+
|
1578 |
+
|
1579 |
+
text-align: center;
|
1580 |
+
|
1581 |
+
|
1582 |
+
}
|
1583 |
+
|
1584 |
+
|
1585 |
+
|
1586 |
+
|
1587 |
+
|
1588 |
+
.miniorange_kba_validate:hover, .miniorange_validate_otp:hover, .miniorange_login_forgotphone:hover,
|
1589 |
+
|
1590 |
+
|
1591 |
+
.miniorange_login_offline:hover, .miniorange_login_forgotphone:hover, .miniorange_otp_token_submit:hover, .miniorange_button:hover
|
1592 |
+
|
1593 |
+
|
1594 |
+
{
|
1595 |
+
|
1596 |
+
|
1597 |
+
background-color:#0073AA!important
|
1598 |
+
|
1599 |
+
|
1600 |
+
}
|
1601 |
+
|
1602 |
+
|
1603 |
+
|
1604 |
+
|
1605 |
+
|
1606 |
+
.miniorange_kba_validate, .miniorange_validate_otp, .miniorange_login_forgotphone,
|
1607 |
+
|
1608 |
+
|
1609 |
+
.miniorange_login_offline, .miniorange_login_forgotphone , .miniorange_otp_token_submit,
|
1610 |
+
|
1611 |
+
|
1612 |
+
.miniorange_button
|
1613 |
+
|
1614 |
+
|
1615 |
+
{
|
1616 |
+
|
1617 |
+
|
1618 |
+
background:#00A0D2!important;
|
1619 |
+
|
1620 |
+
|
1621 |
+
border-color:#0073AA!important;
|
1622 |
+
|
1623 |
+
|
1624 |
+
box-shadow:0 1px 0 rgba(120,200,230,.5) inset,0 1px 0 rgba(0,0,0,.15)!important;
|
1625 |
+
|
1626 |
+
|
1627 |
+
color:#FFF!important;
|
1628 |
+
|
1629 |
+
|
1630 |
+
text-decoration:none!important;
|
1631 |
+
|
1632 |
+
|
1633 |
+
cursor:pointer!important;
|
1634 |
+
|
1635 |
+
|
1636 |
+
border-width:1px!important;
|
1637 |
+
|
1638 |
+
|
1639 |
+
border-style:solid!important;
|
1640 |
+
|
1641 |
+
|
1642 |
+
border-radius:3px!important;
|
1643 |
+
|
1644 |
+
|
1645 |
+
white-space:nowrap!important;
|
1646 |
+
|
1647 |
+
|
1648 |
+
box-sizing:border-box!important;
|
1649 |
+
|
1650 |
+
|
1651 |
+
line-height:28px!important;
|
1652 |
+
|
1653 |
+
|
1654 |
+
padding:0 12px!important;
|
1655 |
+
|
1656 |
+
|
1657 |
+
font-size:13px!important;
|
1658 |
+
|
1659 |
+
|
1660 |
+
}
|
1661 |
+
|
1662 |
+
|
1663 |
+
|
1664 |
+
|
1665 |
+
|
1666 |
+
.mo_customer_validation-modal.fade .mo_customer_validation-modal-dialog {
|
1667 |
+
|
1668 |
+
|
1669 |
+
-webkit-transition: -webkit-transform .3s ease-out;
|
1670 |
+
|
1671 |
+
|
1672 |
+
-o-transition: -o-transform .3s ease-out;
|
1673 |
+
|
1674 |
+
|
1675 |
+
transition: transform .3s ease-out;
|
1676 |
+
|
1677 |
+
|
1678 |
+
-webkit-transform: translate(0, -25%);
|
1679 |
+
|
1680 |
+
|
1681 |
+
-ms-transform: translate(0, -25%);
|
1682 |
+
|
1683 |
+
|
1684 |
+
-o-transform: translate(0, -25%);
|
1685 |
+
|
1686 |
+
|
1687 |
+
transform: translate(0, -25%)
|
1688 |
+
|
1689 |
+
|
1690 |
+
}
|
1691 |
+
|
1692 |
+
|
1693 |
+
|
1694 |
+
|
1695 |
+
|
1696 |
+
.mo_customer_validation-modal.in .mo_customer_validation-modal-dialog {
|
1697 |
+
|
1698 |
+
|
1699 |
+
-webkit-transform: translate(0, 80px) !important;
|
1700 |
+
|
1701 |
+
|
1702 |
+
-ms-transform: translate(0, 80px) !important;
|
1703 |
+
|
1704 |
+
|
1705 |
+
-o-transform: translate(0, 80px) !important;
|
1706 |
+
|
1707 |
+
|
1708 |
+
transform: translate(0, 80px) !important
|
1709 |
+
|
1710 |
+
|
1711 |
+
}
|
1712 |
+
|
1713 |
+
|
1714 |
+
|
1715 |
+
|
1716 |
+
|
1717 |
+
.mo_customer_validation-modal-open .mo_customer_validation-modal {
|
1718 |
+
|
1719 |
+
|
1720 |
+
overflow-x: hidden;
|
1721 |
+
|
1722 |
+
|
1723 |
+
overflow-y: hidden
|
1724 |
+
|
1725 |
+
|
1726 |
+
}
|
1727 |
+
|
1728 |
+
|
1729 |
+
|
1730 |
+
|
1731 |
+
|
1732 |
+
.mo_customer_validation-modal-dialog {
|
1733 |
+
|
1734 |
+
|
1735 |
+
position: relative;
|
1736 |
+
|
1737 |
+
|
1738 |
+
width: auto;
|
1739 |
+
|
1740 |
+
|
1741 |
+
margin: 10px
|
1742 |
+
|
1743 |
+
|
1744 |
+
}
|
1745 |
+
|
1746 |
+
|
1747 |
+
|
1748 |
+
|
1749 |
+
|
1750 |
+
.mo_customer_validation-modal-content {
|
1751 |
+
|
1752 |
+
|
1753 |
+
position: relative;
|
1754 |
+
|
1755 |
+
|
1756 |
+
-webkit-background-clip: padding-box;
|
1757 |
+
|
1758 |
+
|
1759 |
+
border: 1px solid #999;
|
1760 |
+
|
1761 |
+
|
1762 |
+
border: 1px solid rgba(0, 0, 0, .2);
|
1763 |
+
|
1764 |
+
|
1765 |
+
outline: 0;
|
1766 |
+
|
1767 |
+
|
1768 |
+
margin-top: 8%;
|
1769 |
+
|
1770 |
+
|
1771 |
+
margin-left: 0;
|
1772 |
+
|
1773 |
+
|
1774 |
+
padding: 15px 20px 0;
|
1775 |
+
|
1776 |
+
|
1777 |
+
font-family: "Open Sans", sans-serif;
|
1778 |
+
|
1779 |
+
|
1780 |
+
|
1781 |
+
font-size: 14px;
|
1782 |
+
|
1783 |
+
|
1784 |
+
line-height: 1.4em;
|
1785 |
+
|
1786 |
+
|
1787 |
+
background: #FFF;
|
1788 |
+
|
1789 |
+
|
1790 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, .13)
|
1791 |
+
|
1792 |
+
|
1793 |
+
}
|
1794 |
+
|
1795 |
+
|
1796 |
+
|
1797 |
+
|
1798 |
+
|
1799 |
+
.mo_customer_validation-modal-backdrop {
|
1800 |
+
|
1801 |
+
|
1802 |
+
position: absolute;
|
1803 |
+
|
1804 |
+
|
1805 |
+
top: 0;
|
1806 |
+
|
1807 |
+
|
1808 |
+
right: 0;
|
1809 |
+
|
1810 |
+
|
1811 |
+
left: 0;
|
1812 |
+
|
1813 |
+
|
1814 |
+
background-color: #000 !important;
|
1815 |
+
|
1816 |
+
|
1817 |
+
filter: alpha(opacity=50) !important;
|
1818 |
+
|
1819 |
+
|
1820 |
+
opacity: .9 !important;
|
1821 |
+
|
1822 |
+
|
1823 |
+
height: 100% !important
|
1824 |
+
|
1825 |
+
|
1826 |
+
}
|
1827 |
+
|
1828 |
+
|
1829 |
+
|
1830 |
+
|
1831 |
+
|
1832 |
+
.mo_customer_validation-modal-header {
|
1833 |
+
|
1834 |
+
|
1835 |
+
min-height: 14px;
|
1836 |
+
|
1837 |
+
|
1838 |
+
padding: 10px 10px 20px;
|
1839 |
+
|
1840 |
+
|
1841 |
+
border-bottom: 1px solid #e5e5e5
|
1842 |
+
|
1843 |
+
|
1844 |
+
}
|
1845 |
+
|
1846 |
+
|
1847 |
+
|
1848 |
+
|
1849 |
+
|
1850 |
+
.mo_customer_validation-modal-title {
|
1851 |
+
|
1852 |
+
|
1853 |
+
margin: 0 !important;
|
1854 |
+
|
1855 |
+
|
1856 |
+
line-height: 1 !important
|
1857 |
+
|
1858 |
+
|
1859 |
+
}
|
1860 |
+
|
1861 |
+
|
1862 |
+
|
1863 |
+
|
1864 |
+
|
1865 |
+
.mo_customer_validation-modal-body {
|
1866 |
+
|
1867 |
+
|
1868 |
+
position: relative;
|
1869 |
+
|
1870 |
+
|
1871 |
+
padding: 5%;
|
1872 |
+
|
1873 |
+
|
1874 |
+
overflow: hidden !important;
|
1875 |
+
|
1876 |
+
|
1877 |
+
max-height: 550px !important
|
1878 |
+
|
1879 |
+
|
1880 |
+
}
|
1881 |
+
|
1882 |
+
|
1883 |
+
|
1884 |
+
|
1885 |
+
|
1886 |
+
.mo_customer_validation-modal-footer {
|
1887 |
+
|
1888 |
+
|
1889 |
+
padding: 15px;
|
1890 |
+
|
1891 |
+
|
1892 |
+
text-align: right;
|
1893 |
+
|
1894 |
+
|
1895 |
+
border-top: 1px solid #e5e5e5
|
1896 |
+
|
1897 |
+
|
1898 |
+
}
|
1899 |
+
|
1900 |
+
|
1901 |
+
|
1902 |
+
|
1903 |
+
|
1904 |
+
.mo_customer_validation-modal-footer .btn + .btn {
|
1905 |
+
|
1906 |
+
|
1907 |
+
margin-bottom: 0;
|
1908 |
+
|
1909 |
+
|
1910 |
+
margin-left: 5px
|
1911 |
+
|
1912 |
+
|
1913 |
+
}
|
1914 |
+
|
1915 |
+
|
1916 |
+
|
1917 |
+
|
1918 |
+
|
1919 |
+
.mo_customer_validation-modal-footer .btn-group .btn + .btn {
|
1920 |
+
|
1921 |
+
|
1922 |
+
margin-left: -1px
|
1923 |
+
|
1924 |
+
|
1925 |
+
}
|
1926 |
+
|
1927 |
+
|
1928 |
+
|
1929 |
+
|
1930 |
+
|
1931 |
+
.mo_customer_validation-modal-footer .btn-block + .btn-block {
|
1932 |
+
|
1933 |
+
|
1934 |
+
margin-left: 0
|
1935 |
+
|
1936 |
+
|
1937 |
+
}
|
1938 |
+
|
1939 |
+
|
1940 |
+
|
1941 |
+
|
1942 |
+
|
1943 |
+
.mo_customer_validation-modal-scrollbar-measure {
|
1944 |
+
|
1945 |
+
|
1946 |
+
position: absolute;
|
1947 |
+
|
1948 |
+
|
1949 |
+
top: -9999px;
|
1950 |
+
|
1951 |
+
|
1952 |
+
width: 50px;
|
1953 |
+
|
1954 |
+
|
1955 |
+
height: 50px;
|
1956 |
+
|
1957 |
+
|
1958 |
+
overflow: scroll
|
1959 |
+
|
1960 |
+
|
1961 |
+
}
|
1962 |
+
|
1963 |
+
|
1964 |
+
|
1965 |
+
|
1966 |
+
|
1967 |
+
@media (min-width: 768px) {
|
1968 |
+
|
1969 |
+
|
1970 |
+
.mo_customer_validation-modal-dialog {
|
1971 |
+
|
1972 |
+
|
1973 |
+
width: auto;
|
1974 |
+
|
1975 |
+
|
1976 |
+
margin: 0 auto
|
1977 |
+
|
1978 |
+
|
1979 |
+
}
|
1980 |
+
|
1981 |
+
|
1982 |
+
|
1983 |
+
|
1984 |
+
|
1985 |
+
.mo_customer_validation-modal-content {
|
1986 |
+
|
1987 |
+
|
1988 |
+
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
|
1989 |
+
|
1990 |
+
|
1991 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
|
1992 |
+
|
1993 |
+
|
1994 |
+
}
|
1995 |
+
|
1996 |
+
|
1997 |
+
|
1998 |
+
|
1999 |
+
|
2000 |
+
.mo_customer_validation-modal-sm {
|
2001 |
+
|
2002 |
+
|
2003 |
+
width: 300px
|
2004 |
+
|
2005 |
+
|
2006 |
+
}
|
2007 |
+
|
2008 |
+
|
2009 |
+
|
2010 |
+
|
2011 |
+
|
2012 |
+
.mo_customer_validation-modal-md {
|
2013 |
+
|
2014 |
+
|
2015 |
+
width: 532px
|
2016 |
+
|
2017 |
+
|
2018 |
+
}
|
2019 |
+
|
2020 |
+
|
2021 |
+
|
2022 |
+
|
2023 |
+
|
2024 |
+
.mo_customer_validation-modal-lg {
|
2025 |
+
|
2026 |
+
|
2027 |
+
width: 50%
|
2028 |
+
|
2029 |
+
|
2030 |
+
}
|
2031 |
+
|
2032 |
+
|
2033 |
+
}
|
2034 |
+
|
2035 |
+
|
2036 |
+
|
2037 |
+
|
2038 |
+
|
2039 |
+
@media (min-width: 992px) {
|
2040 |
+
|
2041 |
+
|
2042 |
+
.mo_customer_validation-modal-dialog {
|
2043 |
+
|
2044 |
+
|
2045 |
+
width: auto;
|
2046 |
+
|
2047 |
+
|
2048 |
+
margin: 0 auto
|
2049 |
+
|
2050 |
+
|
2051 |
+
}
|
2052 |
+
|
2053 |
+
|
2054 |
+
|
2055 |
+
|
2056 |
+
|
2057 |
+
.mo_customer_validation-modal-lg {
|
2058 |
+
|
2059 |
+
|
2060 |
+
width: 490px
|
2061 |
+
|
2062 |
+
|
2063 |
+
}
|
2064 |
+
|
2065 |
+
|
2066 |
+
|
2067 |
+
|
2068 |
+
|
2069 |
+
.mo_customer_validation-modal-md {
|
2070 |
+
|
2071 |
+
|
2072 |
+
width: 532px
|
2073 |
+
|
2074 |
+
|
2075 |
+
}
|
2076 |
+
|
2077 |
+
|
2078 |
+
}
|
2079 |
+
|
2080 |
+
|
2081 |
+
|
2082 |
+
|
2083 |
+
|
2084 |
+
.mo_customer_validation-textbox {
|
2085 |
+
|
2086 |
+
|
2087 |
+
background: #FBFBFB;
|
2088 |
+
|
2089 |
+
|
2090 |
+
font-family: "Open Sans", sans-serif;
|
2091 |
+
|
2092 |
+
|
2093 |
+
font-size: 24px;
|
2094 |
+
|
2095 |
+
|
2096 |
+
width: 100%;
|
2097 |
+
|
2098 |
+
|
2099 |
+
border: 1px solid #DDD;
|
2100 |
+
|
2101 |
+
|
2102 |
+
padding: 3px;
|
2103 |
+
|
2104 |
+
|
2105 |
+
margin: 2px 6px 16px 0
|
2106 |
+
|
2107 |
+
|
2108 |
+
}
|
2109 |
+
|
2110 |
+
|
2111 |
+
|
2112 |
+
|
2113 |
+
|
2114 |
+
.mo_customer_validation-textbox:focus {
|
2115 |
+
|
2116 |
+
|
2117 |
+
border-color: #5B9DD9;
|
2118 |
+
|
2119 |
+
|
2120 |
+
box-shadow: 0 0 2px rgba(30, 140, 190, .8)
|
2121 |
+
|
2122 |
+
|
2123 |
+
}
|
2124 |
+
|
2125 |
+
|
2126 |
+
|
2127 |
+
|
2128 |
+
|
2129 |
+
.button-primary,
|
2130 |
+
|
2131 |
+
|
2132 |
+
.button-secondary {
|
2133 |
+
|
2134 |
+
|
2135 |
+
background: #00A0D2;
|
2136 |
+
|
2137 |
+
|
2138 |
+
border-color: #0073AA;
|
2139 |
+
|
2140 |
+
|
2141 |
+
box-shadow: 0 1px 0 rgba(120, 200, 230, .5) inset, 0 1px 0 rgba(0, 0, 0, .15);
|
2142 |
+
|
2143 |
+
|
2144 |
+
color: #FFF;
|
2145 |
+
|
2146 |
+
|
2147 |
+
text-decoration: none;
|
2148 |
+
|
2149 |
+
|
2150 |
+
cursor: pointer;
|
2151 |
+
|
2152 |
+
|
2153 |
+
border-width: 1px;
|
2154 |
+
|
2155 |
+
|
2156 |
+
border-style: solid;
|
2157 |
+
|
2158 |
+
|
2159 |
+
border-radius: 3px;
|
2160 |
+
|
2161 |
+
|
2162 |
+
white-space: nowrap;
|
2163 |
+
|
2164 |
+
|
2165 |
+
box-sizing: border-box;
|
2166 |
+
|
2167 |
+
|
2168 |
+
line-height: 28px;
|
2169 |
+
|
2170 |
+
|
2171 |
+
padding: 0 12px;
|
2172 |
+
|
2173 |
+
|
2174 |
+
font-size: 13px
|
2175 |
+
|
2176 |
+
|
2177 |
+
}
|
2178 |
+
|
2179 |
+
|
2180 |
+
|
2181 |
+
|
2182 |
+
|
2183 |
+
.button:hover {
|
2184 |
+
|
2185 |
+
|
2186 |
+
background-color: #0073AA
|
2187 |
+
|
2188 |
+
|
2189 |
+
}
|
2190 |
+
|
2191 |
+
|
2192 |
+
|
2193 |
+
|
2194 |
+
|
2195 |
+
.close {
|
2196 |
+
|
2197 |
+
|
2198 |
+
float: right;
|
2199 |
+
|
2200 |
+
|
2201 |
+
transition: color .1s ease-in-out, background .1s ease-in-out;
|
2202 |
+
|
2203 |
+
|
2204 |
+
text-decoration: none;
|
2205 |
+
|
2206 |
+
|
2207 |
+
color: #999;
|
2208 |
+
|
2209 |
+
|
2210 |
+
font-size: 13px
|
2211 |
+
|
2212 |
+
|
2213 |
+
}
|
2214 |
+
|
2215 |
+
|
2216 |
+
|
2217 |
+
|
2218 |
+
|
2219 |
+
.mo_validate_close:focus,
|
2220 |
+
|
2221 |
+
|
2222 |
+
.mo_validate_close:hover {
|
2223 |
+
|
2224 |
+
|
2225 |
+
color: #0085ba
|
2226 |
+
|
2227 |
+
|
2228 |
+
}
|
2229 |
+
|
2230 |
+
|
2231 |
+
|
2232 |
+
|
2233 |
+
|
2234 |
+
.mo_registration_pricing_text {
|
2235 |
+
|
2236 |
+
|
2237 |
+
font-size: 13px;
|
2238 |
+
|
2239 |
+
|
2240 |
+
color: darkblue;
|
2241 |
+
|
2242 |
+
|
2243 |
+
}
|
2244 |
+
|
2245 |
+
|
2246 |
+
|
2247 |
+
|
2248 |
+
|
2249 |
+
.mo_otp_token {
|
2250 |
+
|
2251 |
+
|
2252 |
+
font-size: 15px;
|
2253 |
+
|
2254 |
+
|
2255 |
+
color: #212F3C;
|
2256 |
+
|
2257 |
+
|
2258 |
+
border: none;
|
2259 |
+
|
2260 |
+
|
2261 |
+
display: block;
|
2262 |
+
|
2263 |
+
|
2264 |
+
border-bottom-style: solid;
|
2265 |
+
|
2266 |
+
|
2267 |
+
border-width: 2px;
|
2268 |
+
|
2269 |
+
|
2270 |
+
border-color: #D0D3D4;
|
2271 |
+
|
2272 |
+
|
2273 |
+
border-radius: 0px;
|
2274 |
+
|
2275 |
+
|
2276 |
+
outline: none;
|
2277 |
+
|
2278 |
+
|
2279 |
+
width: 140px;
|
2280 |
+
|
2281 |
+
|
2282 |
+
text-align: center;
|
2283 |
+
|
2284 |
+
|
2285 |
+
}
|
2286 |
+
|
2287 |
+
|
2288 |
+
|
2289 |
+
|
2290 |
+
|
2291 |
+
.container {
|
2292 |
+
|
2293 |
+
|
2294 |
+
max-width: 960px
|
2295 |
+
|
2296 |
+
|
2297 |
+
}
|
2298 |
+
|
2299 |
+
|
2300 |
+
|
2301 |
+
|
2302 |
+
|
2303 |
+
}
|
2304 |
+
|
2305 |
+
|
2306 |
+
@media (min-width: 1200px) {
|
2307 |
+
|
2308 |
+
|
2309 |
+
.container {
|
2310 |
+
|
2311 |
+
|
2312 |
+
max-width: 1140px
|
2313 |
+
|
2314 |
+
|
2315 |
+
}
|
2316 |
+
|
2317 |
+
|
2318 |
+
}
|
2319 |
+
|
2320 |
+
|
2321 |
+
|
2322 |
+
|
2323 |
+
|
2324 |
+
.container-fluid {
|
2325 |
+
|
2326 |
+
|
2327 |
+
width: 100%;
|
2328 |
+
|
2329 |
+
|
2330 |
+
padding-right: 15px;
|
2331 |
+
|
2332 |
+
|
2333 |
+
padding-left: 15px;
|
2334 |
+
|
2335 |
+
|
2336 |
+
margin-right: auto;
|
2337 |
+
|
2338 |
+
|
2339 |
+
margin-left: auto
|
2340 |
+
|
2341 |
+
|
2342 |
+
}
|
2343 |
+
|
2344 |
+
|
2345 |
+
|
2346 |
+
|
2347 |
+
|
2348 |
+
.row {
|
2349 |
+
|
2350 |
+
|
2351 |
+
display: -webkit-box;
|
2352 |
+
|
2353 |
+
|
2354 |
+
display: -ms-flexbox;
|
2355 |
+
|
2356 |
+
|
2357 |
+
display: flex;
|
2358 |
+
|
2359 |
+
|
2360 |
+
-ms-flex-wrap: wrap;
|
2361 |
+
|
2362 |
+
|
2363 |
+
flex-wrap: wrap;
|
2364 |
+
|
2365 |
+
|
2366 |
+
margin-right: -15px;
|
2367 |
+
|
2368 |
+
|
2369 |
+
margin-left: -15px
|
2370 |
+
|
2371 |
+
|
2372 |
+
}
|
2373 |
+
|
2374 |
+
|
2375 |
+
|
2376 |
+
|
2377 |
+
|
2378 |
+
|
2379 |
+
|
2380 |
+
|
2381 |
+
.no-gutters {
|
2382 |
+
|
2383 |
+
|
2384 |
+
margin-right: 0;
|
2385 |
+
|
2386 |
+
|
2387 |
+
margin-left: 0
|
2388 |
+
|
2389 |
+
|
2390 |
+
}
|
2391 |
+
|
2392 |
+
|
2393 |
+
|
2394 |
+
|
2395 |
+
|
2396 |
+
.no-gutters > .col, .no-gutters > [class*=col-] {
|
2397 |
+
|
2398 |
+
|
2399 |
+
padding-right: 0;
|
2400 |
+
|
2401 |
+
|
2402 |
+
padding-left: 0
|
2403 |
+
|
2404 |
+
|
2405 |
+
}
|
2406 |
+
|
2407 |
+
|
2408 |
+
|
2409 |
+
|
2410 |
+
|
2411 |
+
.col, .col-1, .col-10, .col-11, .col-12, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-auto, .col-lg, .col-lg-1, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-auto, .col-md, .col-md-1, .col-md-10, .col-md-11, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-auto, .col-sm, .col-sm-1, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-auto, .col-xl, .col-xl-1, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-auto {
|
2412 |
+
|
2413 |
+
|
2414 |
+
position: relative;
|
2415 |
+
|
2416 |
+
|
2417 |
+
width: 100%;
|
2418 |
+
|
2419 |
+
|
2420 |
+
min-height: 1px;
|
2421 |
+
|
2422 |
+
|
2423 |
+
padding-right: 15px;
|
2424 |
+
|
2425 |
+
|
2426 |
+
padding-left: 15px
|
2427 |
+
|
2428 |
+
|
2429 |
+
}
|
2430 |
+
|
2431 |
+
|
2432 |
+
|
2433 |
+
|
2434 |
+
|
2435 |
+
.col {
|
2436 |
+
|
2437 |
+
|
2438 |
+
-ms-flex-preferred-size: 0;
|
2439 |
+
|
2440 |
+
|
2441 |
+
flex-basis: 0;
|
2442 |
+
|
2443 |
+
|
2444 |
+
-webkit-box-flex: 1;
|
2445 |
+
|
2446 |
+
|
2447 |
+
-ms-flex-positive: 1;
|
2448 |
+
|
2449 |
+
|
2450 |
+
flex-grow: 1;
|
2451 |
+
|
2452 |
+
|
2453 |
+
max-width: 100%
|
2454 |
+
|
2455 |
+
|
2456 |
+
}
|
2457 |
+
|
2458 |
+
|
2459 |
+
|
2460 |
+
|
2461 |
+
|
2462 |
+
.col-auto {
|
2463 |
+
|
2464 |
+
|
2465 |
+
-webkit-box-flex: 0;
|
2466 |
+
|
2467 |
+
|
2468 |
+
-ms-flex: 0 0 auto;
|
2469 |
+
|
2470 |
+
|
2471 |
+
flex: 0 0 auto;
|
2472 |
+
|
2473 |
+
|
2474 |
+
width: auto;
|
2475 |
+
|
2476 |
+
|
2477 |
+
max-width: none
|
2478 |
+
|
2479 |
+
|
2480 |
+
}
|
2481 |
+
|
2482 |
+
|
2483 |
+
|
2484 |
+
|
2485 |
+
|
2486 |
+
.col-1 {
|
2487 |
+
|
2488 |
+
|
2489 |
+
-webkit-box-flex: 0;
|
2490 |
+
|
2491 |
+
|
2492 |
+
-ms-flex: 0 0 8.333333%;
|
2493 |
+
|
2494 |
+
|
2495 |
+
flex: 0 0 8.333333%;
|
2496 |
+
|
2497 |
+
|
2498 |
+
max-width: 8.333333%
|
2499 |
+
|
2500 |
+
|
2501 |
+
}
|
2502 |
+
|
2503 |
+
|
2504 |
+
|
2505 |
+
|
2506 |
+
|
2507 |
+
.col-2 {
|
2508 |
+
|
2509 |
+
|
2510 |
+
-webkit-box-flex: 0;
|
2511 |
+
|
2512 |
+
|
2513 |
+
-ms-flex: 0 0 16.666667%;
|
2514 |
+
|
2515 |
+
|
2516 |
+
flex: 0 0 16.666667%;
|
2517 |
+
|
2518 |
+
|
2519 |
+
max-width: 16.666667%
|
2520 |
+
|
2521 |
+
|
2522 |
+
}
|
2523 |
+
|
2524 |
+
|
2525 |
+
|
2526 |
+
|
2527 |
+
|
2528 |
+
.col-3 {
|
2529 |
+
|
2530 |
+
|
2531 |
+
-webkit-box-flex: 0;
|
2532 |
+
|
2533 |
+
|
2534 |
+
-ms-flex: 0 0 25%;
|
2535 |
+
|
2536 |
+
|
2537 |
+
flex: 0 0 25%;
|
2538 |
+
|
2539 |
+
|
2540 |
+
max-width: 25%
|
2541 |
+
|
2542 |
+
|
2543 |
+
}
|
2544 |
+
|
2545 |
+
|
2546 |
+
|
2547 |
+
|
2548 |
+
|
2549 |
+
.col-4 {
|
2550 |
+
|
2551 |
+
|
2552 |
+
-webkit-box-flex: 0;
|
2553 |
+
|
2554 |
+
|
2555 |
+
-ms-flex: 0 0 33.333333%;
|
2556 |
+
|
2557 |
+
|
2558 |
+
flex: 0 0 33.333333%;
|
2559 |
+
|
2560 |
+
|
2561 |
+
max-width: 33.333333%
|
2562 |
+
|
2563 |
+
|
2564 |
+
}
|
2565 |
+
|
2566 |
+
|
2567 |
+
|
2568 |
+
|
2569 |
+
|
2570 |
+
.col-5 {
|
2571 |
+
|
2572 |
+
|
2573 |
+
-webkit-box-flex: 0;
|
2574 |
+
|
2575 |
+
|
2576 |
+
-ms-flex: 0 0 41.666667%;
|
2577 |
+
|
2578 |
+
|
2579 |
+
flex: 0 0 41.666667%;
|
2580 |
+
|
2581 |
+
|
2582 |
+
max-width: 41.666667%
|
2583 |
+
|
2584 |
+
|
2585 |
+
}
|
2586 |
+
|
2587 |
+
|
2588 |
+
|
2589 |
+
|
2590 |
+
|
2591 |
+
.col-6 {
|
2592 |
+
|
2593 |
+
|
2594 |
+
-webkit-box-flex: 0;
|
2595 |
+
|
2596 |
+
|
2597 |
+
-ms-flex: 0 0 50%;
|
2598 |
+
|
2599 |
+
|
2600 |
+
flex: 0 0 50%;
|
2601 |
+
|
2602 |
+
|
2603 |
+
max-width: 50%
|
2604 |
+
|
2605 |
+
|
2606 |
+
}
|
2607 |
+
|
2608 |
+
|
2609 |
+
|
2610 |
+
|
2611 |
+
|
2612 |
+
.col-7 {
|
2613 |
+
|
2614 |
+
|
2615 |
+
-webkit-box-flex: 0;
|
2616 |
+
|
2617 |
+
|
2618 |
+
-ms-flex: 0 0 58.333333%;
|
2619 |
+
|
2620 |
+
|
2621 |
+
flex: 0 0 58.333333%;
|
2622 |
+
|
2623 |
+
|
2624 |
+
max-width: 58.333333%
|
2625 |
+
|
2626 |
+
|
2627 |
+
}
|
2628 |
+
|
2629 |
+
|
2630 |
+
|
2631 |
+
|
2632 |
+
|
2633 |
+
.col-8 {
|
2634 |
+
|
2635 |
+
|
2636 |
+
-webkit-box-flex: 0;
|
2637 |
+
|
2638 |
+
|
2639 |
+
-ms-flex: 0 0 66.666667%;
|
2640 |
+
|
2641 |
+
|
2642 |
+
flex: 0 0 66.666667%;
|
2643 |
+
|
2644 |
+
|
2645 |
+
max-width: 66.666667%
|
2646 |
+
|
2647 |
+
|
2648 |
+
}
|
2649 |
+
|
2650 |
+
|
2651 |
+
|
2652 |
+
|
2653 |
+
|
2654 |
+
.col-9 {
|
2655 |
+
|
2656 |
+
|
2657 |
+
-webkit-box-flex: 0;
|
2658 |
+
|
2659 |
+
|
2660 |
+
-ms-flex: 0 0 75%;
|
2661 |
+
|
2662 |
+
|
2663 |
+
flex: 0 0 75%;
|
2664 |
+
|
2665 |
+
|
2666 |
+
max-width: 75%
|
2667 |
+
|
2668 |
+
|
2669 |
+
}
|
2670 |
+
|
2671 |
+
|
2672 |
+
|
2673 |
+
|
2674 |
+
|
2675 |
+
.col-10 {
|
2676 |
+
|
2677 |
+
|
2678 |
+
-webkit-box-flex: 0;
|
2679 |
+
|
2680 |
+
|
2681 |
+
-ms-flex: 0 0 83.333333%;
|
2682 |
+
|
2683 |
+
|
2684 |
+
flex: 0 0 83.333333%;
|
2685 |
+
|
2686 |
+
|
2687 |
+
max-width: 83.333333%
|
2688 |
+
|
2689 |
+
|
2690 |
+
}
|
2691 |
+
|
2692 |
+
|
2693 |
+
|
2694 |
+
|
2695 |
+
|
2696 |
+
.col-11 {
|
2697 |
+
|
2698 |
+
|
2699 |
+
-webkit-box-flex: 0;
|
2700 |
+
|
2701 |
+
|
2702 |
+
-ms-flex: 0 0 91.666667%;
|
2703 |
+
|
2704 |
+
|
2705 |
+
flex: 0 0 91.666667%;
|
2706 |
+
|
2707 |
+
|
2708 |
+
max-width: 91.666667%
|
2709 |
+
|
2710 |
+
|
2711 |
+
}
|
2712 |
+
|
2713 |
+
|
2714 |
+
|
2715 |
+
|
2716 |
+
|
2717 |
+
.col-12 {
|
2718 |
+
|
2719 |
+
|
2720 |
+
-webkit-box-flex: 0;
|
2721 |
+
|
2722 |
+
|
2723 |
+
-ms-flex: 0 0 100%;
|
2724 |
+
|
2725 |
+
|
2726 |
+
flex: 0 0 100%;
|
2727 |
+
|
2728 |
+
|
2729 |
+
max-width: 100%
|
2730 |
+
|
2731 |
+
|
2732 |
+
}
|
2733 |
+
|
2734 |
+
|
2735 |
+
|
2736 |
+
|
2737 |
+
|
2738 |
+
.order-first {
|
2739 |
+
|
2740 |
+
|
2741 |
+
-webkit-box-ordinal-group: 0;
|
2742 |
+
|
2743 |
+
|
2744 |
+
-ms-flex-order: -1;
|
2745 |
+
|
2746 |
+
|
2747 |
+
order: -1
|
2748 |
+
|
2749 |
+
|
2750 |
+
}
|
2751 |
+
|
2752 |
+
|
2753 |
+
|
2754 |
+
|
2755 |
+
|
2756 |
+
.order-last {
|
2757 |
+
|
2758 |
+
|
2759 |
+
-webkit-box-ordinal-group: 14;
|
2760 |
+
|
2761 |
+
|
2762 |
+
-ms-flex-order: 13;
|
2763 |
+
|
2764 |
+
|
2765 |
+
order: 13
|
2766 |
+
|
2767 |
+
|
2768 |
+
}
|
2769 |
+
|
2770 |
+
|
2771 |
+
|
2772 |
+
|
2773 |
+
|
2774 |
+
.order-0 {
|
2775 |
+
|
2776 |
+
|
2777 |
+
-webkit-box-ordinal-group: 1;
|
2778 |
+
|
2779 |
+
|
2780 |
+
-ms-flex-order: 0;
|
2781 |
+
|
2782 |
+
|
2783 |
+
order: 0
|
2784 |
+
|
2785 |
+
|
2786 |
+
}
|
2787 |
+
|
2788 |
+
|
2789 |
+
|
2790 |
+
|
2791 |
+
|
2792 |
+
.order-1 {
|
2793 |
+
|
2794 |
+
|
2795 |
+
-webkit-box-ordinal-group: 2;
|
2796 |
+
|
2797 |
+
|
2798 |
+
-ms-flex-order: 1;
|
2799 |
+
|
2800 |
+
|
2801 |
+
order: 1
|
2802 |
+
|
2803 |
+
|
2804 |
+
}
|
2805 |
+
|
2806 |
+
|
2807 |
+
|
2808 |
+
|
2809 |
+
|
2810 |
+
.order-2 {
|
2811 |
+
|
2812 |
+
|
2813 |
+
-webkit-box-ordinal-group: 3;
|
2814 |
+
|
2815 |
+
|
2816 |
+
-ms-flex-order: 2;
|
2817 |
+
|
2818 |
+
|
2819 |
+
order: 2
|
2820 |
+
|
2821 |
+
|
2822 |
+
}
|
2823 |
+
|
2824 |
+
|
2825 |
+
|
2826 |
+
|
2827 |
+
|
2828 |
+
.order-3 {
|
2829 |
+
|
2830 |
+
|
2831 |
+
-webkit-box-ordinal-group: 4;
|
2832 |
+
|
2833 |
+
|
2834 |
+
-ms-flex-order: 3;
|
2835 |
+
|
2836 |
+
|
2837 |
+
order: 3
|
2838 |
+
|
2839 |
+
|
2840 |
+
}
|
2841 |
+
|
2842 |
+
|
2843 |
+
|
2844 |
+
|
2845 |
+
|
2846 |
+
.order-4 {
|
2847 |
+
|
2848 |
+
|
2849 |
+
-webkit-box-ordinal-group: 5;
|
2850 |
+
|
2851 |
+
|
2852 |
+
-ms-flex-order: 4;
|
2853 |
+
|
2854 |
+
|
2855 |
+
order: 4
|
2856 |
+
|
2857 |
+
|
2858 |
+
}
|
2859 |
+
|
2860 |
+
|
2861 |
+
|
2862 |
+
|
2863 |
+
|
2864 |
+
.order-5 {
|
2865 |
+
|
2866 |
+
|
2867 |
+
-webkit-box-ordinal-group: 6;
|
2868 |
+
|
2869 |
+
|
2870 |
+
-ms-flex-order: 5;
|
2871 |
+
|
2872 |
+
|
2873 |
+
order: 5
|
2874 |
+
|
2875 |
+
|
2876 |
+
}
|
2877 |
+
|
2878 |
+
|
2879 |
+
|
2880 |
+
|
2881 |
+
|
2882 |
+
.order-6 {
|
2883 |
+
|
2884 |
+
|
2885 |
+
-webkit-box-ordinal-group: 7;
|
2886 |
+
|
2887 |
+
|
2888 |
+
-ms-flex-order: 6;
|
2889 |
+
|
2890 |
+
|
2891 |
+
order: 6
|
2892 |
+
|
2893 |
+
|
2894 |
+
}
|
2895 |
+
|
2896 |
+
|
2897 |
+
|
2898 |
+
|
2899 |
+
|
2900 |
+
.order-7 {
|
2901 |
+
|
2902 |
+
|
2903 |
+
-webkit-box-ordinal-group: 8;
|
2904 |
+
|
2905 |
+
|
2906 |
+
-ms-flex-order: 7;
|
2907 |
+
|
2908 |
+
|
2909 |
+
order: 7
|
2910 |
+
|
2911 |
+
|
2912 |
+
}
|
2913 |
+
|
2914 |
+
|
2915 |
+
|
2916 |
+
|
2917 |
+
|
2918 |
+
.order-8 {
|
2919 |
+
|
2920 |
+
|
2921 |
+
-webkit-box-ordinal-group: 9;
|
2922 |
+
|
2923 |
+
|
2924 |
+
-ms-flex-order: 8;
|
2925 |
+
|
2926 |
+
|
2927 |
+
order: 8
|
2928 |
+
|
2929 |
+
|
2930 |
+
}
|
2931 |
+
|
2932 |
+
|
2933 |
+
|
2934 |
+
|
2935 |
+
|
2936 |
+
.order-9 {
|
2937 |
+
|
2938 |
+
|
2939 |
+
-webkit-box-ordinal-group: 10;
|
2940 |
+
|
2941 |
+
|
2942 |
+
-ms-flex-order: 9;
|
2943 |
+
|
2944 |
+
|
2945 |
+
order: 9
|
2946 |
+
|
2947 |
+
|
2948 |
+
}
|
2949 |
+
|
2950 |
+
|
2951 |
+
|
2952 |
+
|
2953 |
+
|
2954 |
+
.order-10 {
|
2955 |
+
|
2956 |
+
|
2957 |
+
-webkit-box-ordinal-group: 11;
|
2958 |
+
|
2959 |
+
|
2960 |
+
-ms-flex-order: 10;
|
2961 |
+
|
2962 |
+
|
2963 |
+
order: 10
|
2964 |
+
|
2965 |
+
|
2966 |
+
}
|
2967 |
+
|
2968 |
+
|
2969 |
+
|
2970 |
+
|
2971 |
+
|
2972 |
+
.order-11 {
|
2973 |
+
|
2974 |
+
|
2975 |
+
-webkit-box-ordinal-group: 12;
|
2976 |
+
|
2977 |
+
|
2978 |
+
-ms-flex-order: 11;
|
2979 |
+
|
2980 |
+
|
2981 |
+
order: 11
|
2982 |
+
|
2983 |
+
|
2984 |
+
}
|
2985 |
+
|
2986 |
+
|
2987 |
+
|
2988 |
+
|
2989 |
+
|
2990 |
+
.order-12 {
|
2991 |
+
|
2992 |
+
|
2993 |
+
-webkit-box-ordinal-group: 13;
|
2994 |
+
|
2995 |
+
|
2996 |
+
-ms-flex-order: 12;
|
2997 |
+
|
2998 |
+
|
2999 |
+
order: 12
|
3000 |
+
|
3001 |
+
|
3002 |
+
}
|
3003 |
+
|
3004 |
+
|
3005 |
+
|
3006 |
+
|
3007 |
+
|
3008 |
+
.offset-1 {
|
3009 |
+
|
3010 |
+
|
3011 |
+
margin-left: 8.333333%
|
3012 |
+
|
3013 |
+
|
3014 |
+
}
|
3015 |
+
|
3016 |
+
|
3017 |
+
|
3018 |
+
|
3019 |
+
|
3020 |
+
.offset-2 {
|
3021 |
+
|
3022 |
+
|
3023 |
+
margin-left: 16.666667%
|
3024 |
+
|
3025 |
+
|
3026 |
+
}
|
3027 |
+
|
3028 |
+
|
3029 |
+
|
3030 |
+
|
3031 |
+
|
3032 |
+
.offset-3 {
|
3033 |
+
|
3034 |
+
|
3035 |
+
margin-left: 25%
|
3036 |
+
|
3037 |
+
|
3038 |
+
}
|
3039 |
+
|
3040 |
+
|
3041 |
+
|
3042 |
+
|
3043 |
+
|
3044 |
+
.offset-4 {
|
3045 |
+
|
3046 |
+
|
3047 |
+
margin-left: 33.333333%
|
3048 |
+
|
3049 |
+
|
3050 |
+
}
|
3051 |
+
|
3052 |
+
|
3053 |
+
|
3054 |
+
|
3055 |
+
|
3056 |
+
.offset-5 {
|
3057 |
+
|
3058 |
+
|
3059 |
+
margin-left: 41.666667%
|
3060 |
+
|
3061 |
+
|
3062 |
+
}
|
3063 |
+
|
3064 |
+
|
3065 |
+
|
3066 |
+
|
3067 |
+
|
3068 |
+
.offset-6 {
|
3069 |
+
|
3070 |
+
|
3071 |
+
margin-left: 50%
|
3072 |
+
|
3073 |
+
|
3074 |
+
}
|
3075 |
+
|
3076 |
+
|
3077 |
+
|
3078 |
+
|
3079 |
+
|
3080 |
+
.offset-7 {
|
3081 |
+
|
3082 |
+
|
3083 |
+
margin-left: 58.333333%
|
3084 |
+
|
3085 |
+
|
3086 |
+
}
|
3087 |
+
|
3088 |
+
|
3089 |
+
|
3090 |
+
|
3091 |
+
|
3092 |
+
.offset-8 {
|
3093 |
+
|
3094 |
+
|
3095 |
+
margin-left: 66.666667%
|
3096 |
+
|
3097 |
+
|
3098 |
+
}
|
3099 |
+
|
3100 |
+
|
3101 |
+
|
3102 |
+
|
3103 |
+
|
3104 |
+
.offset-9 {
|
3105 |
+
|
3106 |
+
|
3107 |
+
margin-left: 75%
|
3108 |
+
|
3109 |
+
|
3110 |
+
}
|
3111 |
+
|
3112 |
+
|
3113 |
+
|
3114 |
+
|
3115 |
+
|
3116 |
+
.offset-10 {
|
3117 |
+
|
3118 |
+
|
3119 |
+
margin-left: 83.333333%
|
3120 |
+
|
3121 |
+
|
3122 |
+
}
|
3123 |
+
|
3124 |
+
|
3125 |
+
|
3126 |
+
|
3127 |
+
|
3128 |
+
.offset-11 {
|
3129 |
+
|
3130 |
+
|
3131 |
+
margin-left: 91.666667%
|
3132 |
+
|
3133 |
+
|
3134 |
+
}
|
3135 |
+
|
3136 |
+
|
3137 |
+
|
3138 |
+
|
3139 |
+
|
3140 |
+
@media (min-width: 576px) {
|
3141 |
+
|
3142 |
+
|
3143 |
+
.col-sm {
|
3144 |
+
|
3145 |
+
|
3146 |
+
-ms-flex-preferred-size: 0;
|
3147 |
+
|
3148 |
+
|
3149 |
+
flex-basis: 0;
|
3150 |
+
|
3151 |
+
|
3152 |
+
-webkit-box-flex: 1;
|
3153 |
+
|
3154 |
+
|
3155 |
+
-ms-flex-positive: 1;
|
3156 |
+
|
3157 |
+
|
3158 |
+
flex-grow: 1;
|
3159 |
+
|
3160 |
+
|
3161 |
+
max-width: 100%
|
3162 |
+
|
3163 |
+
|
3164 |
+
}
|
3165 |
+
|
3166 |
+
|
3167 |
+
|
3168 |
+
|
3169 |
+
|
3170 |
+
.col-sm-auto {
|
3171 |
+
|
3172 |
+
|
3173 |
+
-webkit-box-flex: 0;
|
3174 |
+
|
3175 |
+
|
3176 |
+
-ms-flex: 0 0 auto;
|
3177 |
+
|
3178 |
+
|
3179 |
+
flex: 0 0 auto;
|
3180 |
+
|
3181 |
+
|
3182 |
+
width: auto;
|
3183 |
+
|
3184 |
+
|
3185 |
+
max-width: none
|
3186 |
+
|
3187 |
+
|
3188 |
+
}
|
3189 |
+
|
3190 |
+
|
3191 |
+
|
3192 |
+
|
3193 |
+
|
3194 |
+
.col-sm-1 {
|
3195 |
+
|
3196 |
+
|
3197 |
+
-webkit-box-flex: 0;
|
3198 |
+
|
3199 |
+
|
3200 |
+
-ms-flex: 0 0 8.333333%;
|
3201 |
+
|
3202 |
+
|
3203 |
+
flex: 0 0 8.333333%;
|
3204 |
+
|
3205 |
+
|
3206 |
+
max-width: 8.333333%
|
3207 |
+
|
3208 |
+
|
3209 |
+
}
|
3210 |
+
|
3211 |
+
|
3212 |
+
|
3213 |
+
|
3214 |
+
|
3215 |
+
.col-sm-2 {
|
3216 |
+
|
3217 |
+
|
3218 |
+
-webkit-box-flex: 0;
|
3219 |
+
|
3220 |
+
|
3221 |
+
-ms-flex: 0 0 16.666667%;
|
3222 |
+
|
3223 |
+
|
3224 |
+
flex: 0 0 16.666667%;
|
3225 |
+
|
3226 |
+
|
3227 |
+
max-width: 16.666667%
|
3228 |
+
|
3229 |
+
|
3230 |
+
}
|
3231 |
+
|
3232 |
+
|
3233 |
+
|
3234 |
+
|
3235 |
+
|
3236 |
+
.col-sm-3 {
|
3237 |
+
|
3238 |
+
|
3239 |
+
-webkit-box-flex: 0;
|
3240 |
+
|
3241 |
+
|
3242 |
+
-ms-flex: 0 0 25%;
|
3243 |
+
|
3244 |
+
|
3245 |
+
flex: 0 0 25%;
|
3246 |
+
|
3247 |
+
|
3248 |
+
max-width: 25%
|
3249 |
+
|
3250 |
+
|
3251 |
+
}
|
3252 |
+
|
3253 |
+
|
3254 |
+
|
3255 |
+
|
3256 |
+
|
3257 |
+
.col-sm-4 {
|
3258 |
+
|
3259 |
+
|
3260 |
+
-webkit-box-flex: 0;
|
3261 |
+
|
3262 |
+
|
3263 |
+
-ms-flex: 0 0 33.333333%;
|
3264 |
+
|
3265 |
+
|
3266 |
+
flex: 0 0 33.333333%;
|
3267 |
+
|
3268 |
+
|
3269 |
+
max-width: 33.333333%
|
3270 |
+
|
3271 |
+
|
3272 |
+
}
|
3273 |
+
|
3274 |
+
|
3275 |
+
|
3276 |
+
|
3277 |
+
|
3278 |
+
.col-sm-5 {
|
3279 |
+
|
3280 |
+
|
3281 |
+
-webkit-box-flex: 0;
|
3282 |
+
|
3283 |
+
|
3284 |
+
-ms-flex: 0 0 41.666667%;
|
3285 |
+
|
3286 |
+
|
3287 |
+
flex: 0 0 41.666667%;
|
3288 |
+
|
3289 |
+
|
3290 |
+
max-width: 41.666667%
|
3291 |
+
|
3292 |
+
|
3293 |
+
}
|
3294 |
+
|
3295 |
+
|
3296 |
+
|
3297 |
+
|
3298 |
+
|
3299 |
+
.col-sm-6 {
|
3300 |
+
|
3301 |
+
|
3302 |
+
-webkit-box-flex: 0;
|
3303 |
+
|
3304 |
+
|
3305 |
+
-ms-flex: 0 0 50%;
|
3306 |
+
|
3307 |
+
|
3308 |
+
flex: 0 0 50%;
|
3309 |
+
|
3310 |
+
|
3311 |
+
max-width: 50%
|
3312 |
+
|
3313 |
+
|
3314 |
+
}
|
3315 |
+
|
3316 |
+
|
3317 |
+
|
3318 |
+
|
3319 |
+
|
3320 |
+
.col-sm-7 {
|
3321 |
+
|
3322 |
+
|
3323 |
+
-webkit-box-flex: 0;
|
3324 |
+
|
3325 |
+
|
3326 |
+
-ms-flex: 0 0 58.333333%;
|
3327 |
+
|
3328 |
+
|
3329 |
+
flex: 0 0 58.333333%;
|
3330 |
+
|
3331 |
+
|
3332 |
+
max-width: 58.333333%
|
3333 |
+
|
3334 |
+
|
3335 |
+
}
|
3336 |
+
|
3337 |
+
|
3338 |
+
|
3339 |
+
|
3340 |
+
|
3341 |
+
.col-sm-8 {
|
3342 |
+
|
3343 |
+
|
3344 |
+
-webkit-box-flex: 0;
|
3345 |
+
|
3346 |
+
|
3347 |
+
-ms-flex: 0 0 66.666667%;
|
3348 |
+
|
3349 |
+
|
3350 |
+
flex: 0 0 66.666667%;
|
3351 |
+
|
3352 |
+
|
3353 |
+
max-width: 66.666667%
|
3354 |
+
|
3355 |
+
|
3356 |
+
}
|
3357 |
+
|
3358 |
+
|
3359 |
+
|
3360 |
+
|
3361 |
+
|
3362 |
+
.col-sm-9 {
|
3363 |
+
|
3364 |
+
|
3365 |
+
-webkit-box-flex: 0;
|
3366 |
+
|
3367 |
+
|
3368 |
+
-ms-flex: 0 0 75%;
|
3369 |
+
|
3370 |
+
|
3371 |
+
flex: 0 0 75%;
|
3372 |
+
|
3373 |
+
|
3374 |
+
max-width: 75%
|
3375 |
+
|
3376 |
+
|
3377 |
+
}
|
3378 |
+
|
3379 |
+
|
3380 |
+
|
3381 |
+
|
3382 |
+
|
3383 |
+
.col-sm-10 {
|
3384 |
+
|
3385 |
+
|
3386 |
+
-webkit-box-flex: 0;
|
3387 |
+
|
3388 |
+
|
3389 |
+
-ms-flex: 0 0 83.333333%;
|
3390 |
+
|
3391 |
+
|
3392 |
+
flex: 0 0 83.333333%;
|
3393 |
+
|
3394 |
+
|
3395 |
+
max-width: 83.333333%
|
3396 |
+
|
3397 |
+
|
3398 |
+
}
|
3399 |
+
|
3400 |
+
|
3401 |
+
|
3402 |
+
|
3403 |
+
|
3404 |
+
.col-sm-11 {
|
3405 |
+
|
3406 |
+
|
3407 |
+
-webkit-box-flex: 0;
|
3408 |
+
|
3409 |
+
|
3410 |
+
-ms-flex: 0 0 91.666667%;
|
3411 |
+
|
3412 |
+
|
3413 |
+
flex: 0 0 91.666667%;
|
3414 |
+
|
3415 |
+
|
3416 |
+
max-width: 91.666667%
|
3417 |
+
|
3418 |
+
|
3419 |
+
}
|
3420 |
+
|
3421 |
+
|
3422 |
+
|
3423 |
+
|
3424 |
+
|
3425 |
+
.col-sm-12 {
|
3426 |
+
|
3427 |
+
|
3428 |
+
-webkit-box-flex: 0;
|
3429 |
+
|
3430 |
+
|
3431 |
+
-ms-flex: 0 0 100%;
|
3432 |
+
|
3433 |
+
|
3434 |
+
flex: 0 0 100%;
|
3435 |
+
|
3436 |
+
|
3437 |
+
max-width: 100%
|
3438 |
+
|
3439 |
+
|
3440 |
+
}
|
3441 |
+
|
3442 |
+
|
3443 |
+
|
3444 |
+
|
3445 |
+
|
3446 |
+
.order-sm-first {
|
3447 |
+
|
3448 |
+
|
3449 |
+
-webkit-box-ordinal-group: 0;
|
3450 |
+
|
3451 |
+
|
3452 |
+
-ms-flex-order: -1;
|
3453 |
+
|
3454 |
+
|
3455 |
+
order: -1
|
3456 |
+
|
3457 |
+
|
3458 |
+
}
|
3459 |
+
|
3460 |
+
|
3461 |
+
|
3462 |
+
|
3463 |
+
|
3464 |
+
.order-sm-last {
|
3465 |
+
|
3466 |
+
|
3467 |
+
-webkit-box-ordinal-group: 14;
|
3468 |
+
|
3469 |
+
|
3470 |
+
-ms-flex-order: 13;
|
3471 |
+
|
3472 |
+
|
3473 |
+
order: 13
|
3474 |
+
|
3475 |
+
|
3476 |
+
}
|
3477 |
+
|
3478 |
+
|
3479 |
+
|
3480 |
+
|
3481 |
+
|
3482 |
+
.order-sm-0 {
|
3483 |
+
|
3484 |
+
|
3485 |
+
-webkit-box-ordinal-group: 1;
|
3486 |
+
|
3487 |
+
|
3488 |
+
-ms-flex-order: 0;
|
3489 |
+
|
3490 |
+
|
3491 |
+
order: 0
|
3492 |
+
|
3493 |
+
|
3494 |
+
}
|
3495 |
+
|
3496 |
+
|
3497 |
+
|
3498 |
+
|
3499 |
+
|
3500 |
+
.order-sm-1 {
|
3501 |
+
|
3502 |
+
|
3503 |
+
-webkit-box-ordinal-group: 2;
|
3504 |
+
|
3505 |
+
|
3506 |
+
-ms-flex-order: 1;
|
3507 |
+
|
3508 |
+
|
3509 |
+
order: 1
|
3510 |
+
|
3511 |
+
|
3512 |
+
}
|
3513 |
+
|
3514 |
+
|
3515 |
+
|
3516 |
+
|
3517 |
+
|
3518 |
+
.order-sm-2 {
|
3519 |
+
|
3520 |
+
|
3521 |
+
-webkit-box-ordinal-group: 3;
|
3522 |
+
|
3523 |
+
|
3524 |
+
-ms-flex-order: 2;
|
3525 |
+
|
3526 |
+
|
3527 |
+
order: 2
|
3528 |
+
|
3529 |
+
|
3530 |
+
}
|
3531 |
+
|
3532 |
+
|
3533 |
+
|
3534 |
+
|
3535 |
+
|
3536 |
+
.order-sm-3 {
|
3537 |
+
|
3538 |
+
|
3539 |
+
-webkit-box-ordinal-group: 4;
|
3540 |
+
|
3541 |
+
|
3542 |
+
-ms-flex-order: 3;
|
3543 |
+
|
3544 |
+
|
3545 |
+
order: 3
|
3546 |
+
|
3547 |
+
|
3548 |
+
}
|
3549 |
+
|
3550 |
+
|
3551 |
+
|
3552 |
+
|
3553 |
+
|
3554 |
+
.order-sm-4 {
|
3555 |
+
|
3556 |
+
|
3557 |
+
-webkit-box-ordinal-group: 5;
|
3558 |
+
|
3559 |
+
|
3560 |
+
-ms-flex-order: 4;
|
3561 |
+
|
3562 |
+
|
3563 |
+
order: 4
|
3564 |
+
|
3565 |
+
|
3566 |
+
}
|
3567 |
+
|
3568 |
+
|
3569 |
+
|
3570 |
+
|
3571 |
+
|
3572 |
+
.order-sm-5 {
|
3573 |
+
|
3574 |
+
|
3575 |
+
-webkit-box-ordinal-group: 6;
|
3576 |
+
|
3577 |
+
|
3578 |
+
-ms-flex-order: 5;
|
3579 |
+
|
3580 |
+
|
3581 |
+
order: 5
|
3582 |
+
|
3583 |
+
|
3584 |
+
}
|
3585 |
+
|
3586 |
+
|
3587 |
+
|
3588 |
+
|
3589 |
+
|
3590 |
+
.order-sm-6 {
|
3591 |
+
|
3592 |
+
|
3593 |
+
-webkit-box-ordinal-group: 7;
|
3594 |
+
|
3595 |
+
|
3596 |
+
-ms-flex-order: 6;
|
3597 |
+
|
3598 |
+
|
3599 |
+
order: 6
|
3600 |
+
|
3601 |
+
|
3602 |
+
}
|
3603 |
+
|
3604 |
+
|
3605 |
+
|
3606 |
+
|
3607 |
+
|
3608 |
+
.order-sm-7 {
|
3609 |
+
|
3610 |
+
|
3611 |
+
-webkit-box-ordinal-group: 8;
|
3612 |
+
|
3613 |
+
|
3614 |
+
-ms-flex-order: 7;
|
3615 |
+
|
3616 |
+
|
3617 |
+
order: 7
|
3618 |
+
|
3619 |
+
|
3620 |
+
}
|
3621 |
+
|
3622 |
+
|
3623 |
+
|
3624 |
+
|
3625 |
+
|
3626 |
+
.order-sm-8 {
|
3627 |
+
|
3628 |
+
|
3629 |
+
-webkit-box-ordinal-group: 9;
|
3630 |
+
|
3631 |
+
|
3632 |
+
-ms-flex-order: 8;
|
3633 |
+
|
3634 |
+
|
3635 |
+
order: 8
|
3636 |
+
|
3637 |
+
|
3638 |
+
}
|
3639 |
+
|
3640 |
+
|
3641 |
+
|
3642 |
+
|
3643 |
+
|
3644 |
+
.order-sm-9 {
|
3645 |
+
|
3646 |
+
|
3647 |
+
-webkit-box-ordinal-group: 10;
|
3648 |
+
|
3649 |
+
|
3650 |
+
-ms-flex-order: 9;
|
3651 |
+
|
3652 |
+
|
3653 |
+
order: 9
|
3654 |
+
|
3655 |
+
|
3656 |
+
}
|
3657 |
+
|
3658 |
+
|
3659 |
+
|
3660 |
+
|
3661 |
+
|
3662 |
+
.order-sm-10 {
|
3663 |
+
|
3664 |
+
|
3665 |
+
-webkit-box-ordinal-group: 11;
|
3666 |
+
|
3667 |
+
|
3668 |
+
-ms-flex-order: 10;
|
3669 |
+
|
3670 |
+
|
3671 |
+
order: 10
|
3672 |
+
|
3673 |
+
|
3674 |
+
}
|
3675 |
+
|
3676 |
+
|
3677 |
+
|
3678 |
+
|
3679 |
+
|
3680 |
+
.order-sm-11 {
|
3681 |
+
|
3682 |
+
|
3683 |
+
-webkit-box-ordinal-group: 12;
|
3684 |
+
|
3685 |
+
|
3686 |
+
-ms-flex-order: 11;
|
3687 |
+
|
3688 |
+
|
3689 |
+
order: 11
|
3690 |
+
|
3691 |
+
|
3692 |
+
}
|
3693 |
+
|
3694 |
+
|
3695 |
+
|
3696 |
+
|
3697 |
+
|
3698 |
+
.order-sm-12 {
|
3699 |
+
|
3700 |
+
|
3701 |
+
-webkit-box-ordinal-group: 13;
|
3702 |
+
|
3703 |
+
|
3704 |
+
-ms-flex-order: 12;
|
3705 |
+
|
3706 |
+
|
3707 |
+
order: 12
|
3708 |
+
|
3709 |
+
|
3710 |
+
}
|
3711 |
+
|
3712 |
+
|
3713 |
+
|
3714 |
+
|
3715 |
+
|
3716 |
+
.offset-sm-0 {
|
3717 |
+
|
3718 |
+
|
3719 |
+
margin-left: 0
|
3720 |
+
|
3721 |
+
|
3722 |
+
}
|
3723 |
+
|
3724 |
+
|
3725 |
+
|
3726 |
+
|
3727 |
+
|
3728 |
+
.offset-sm-1 {
|
3729 |
+
|
3730 |
+
|
3731 |
+
margin-left: 8.333333%
|
3732 |
+
|
3733 |
+
|
3734 |
+
}
|
3735 |
+
|
3736 |
+
|
3737 |
+
|
3738 |
+
|
3739 |
+
|
3740 |
+
.offset-sm-2 {
|
3741 |
+
|
3742 |
+
|
3743 |
+
margin-left: 16.666667%
|
3744 |
+
|
3745 |
+
|
3746 |
+
}
|
3747 |
+
|
3748 |
+
|
3749 |
+
|
3750 |
+
|
3751 |
+
|
3752 |
+
.offset-sm-3 {
|
3753 |
+
|
3754 |
+
|
3755 |
+
margin-left: 25%
|
3756 |
+
|
3757 |
+
|
3758 |
+
}
|
3759 |
+
|
3760 |
+
|
3761 |
+
|
3762 |
+
|
3763 |
+
|
3764 |
+
.offset-sm-4 {
|
3765 |
+
|
3766 |
+
|
3767 |
+
margin-left: 33.333333%
|
3768 |
+
|
3769 |
+
|
3770 |
+
}
|
3771 |
+
|
3772 |
+
|
3773 |
+
|
3774 |
+
|
3775 |
+
|
3776 |
+
.offset-sm-5 {
|
3777 |
+
|
3778 |
+
|
3779 |
+
margin-left: 41.666667%
|
3780 |
+
|
3781 |
+
|
3782 |
+
}
|
3783 |
+
|
3784 |
+
|
3785 |
+
|
3786 |
+
|
3787 |
+
|
3788 |
+
.offset-sm-6 {
|
3789 |
+
|
3790 |
+
|
3791 |
+
margin-left: 50%
|
3792 |
+
|
3793 |
+
|
3794 |
+
}
|
3795 |
+
|
3796 |
+
|
3797 |
+
|
3798 |
+
|
3799 |
+
|
3800 |
+
.offset-sm-7 {
|
3801 |
+
|
3802 |
+
|
3803 |
+
margin-left: 58.333333%
|
3804 |
+
|
3805 |
+
|
3806 |
+
}
|
3807 |
+
|
3808 |
+
|
3809 |
+
|
3810 |
+
|
3811 |
+
|
3812 |
+
.offset-sm-8 {
|
3813 |
+
|
3814 |
+
|
3815 |
+
margin-left: 66.666667%
|
3816 |
+
|
3817 |
+
|
3818 |
+
}
|
3819 |
+
|
3820 |
+
|
3821 |
+
|
3822 |
+
|
3823 |
+
|
3824 |
+
.offset-sm-9 {
|
3825 |
+
|
3826 |
+
|
3827 |
+
margin-left: 75%
|
3828 |
+
|
3829 |
+
|
3830 |
+
}
|
3831 |
+
|
3832 |
+
|
3833 |
+
|
3834 |
+
|
3835 |
+
|
3836 |
+
.offset-sm-10 {
|
3837 |
+
|
3838 |
+
|
3839 |
+
margin-left: 83.333333%
|
3840 |
+
|
3841 |
+
|
3842 |
+
}
|
3843 |
+
|
3844 |
+
|
3845 |
+
|
3846 |
+
|
3847 |
+
|
3848 |
+
.offset-sm-11 {
|
3849 |
+
|
3850 |
+
|
3851 |
+
margin-left: 91.666667%
|
3852 |
+
|
3853 |
+
|
3854 |
+
}
|
3855 |
+
|
3856 |
+
|
3857 |
+
}
|
3858 |
+
|
3859 |
+
|
3860 |
+
|
3861 |
+
|
3862 |
+
|
3863 |
+
@media (min-width: 768px) {
|
3864 |
+
|
3865 |
+
|
3866 |
+
.col-md {
|
3867 |
+
|
3868 |
+
|
3869 |
+
-ms-flex-preferred-size: 0;
|
3870 |
+
|
3871 |
+
|
3872 |
+
flex-basis: 0;
|
3873 |
+
|
3874 |
+
|
3875 |
+
-webkit-box-flex: 1;
|
3876 |
+
|
3877 |
+
|
3878 |
+
-ms-flex-positive: 1;
|
3879 |
+
|
3880 |
+
|
3881 |
+
flex-grow: 1;
|
3882 |
+
|
3883 |
+
|
3884 |
+
max-width: 100%
|
3885 |
+
|
3886 |
+
|
3887 |
+
}
|
3888 |
+
|
3889 |
+
|
3890 |
+
|
3891 |
+
|
3892 |
+
|
3893 |
+
.col-md-auto {
|
3894 |
+
|
3895 |
+
|
3896 |
+
-webkit-box-flex: 0;
|
3897 |
+
|
3898 |
+
|
3899 |
+
-ms-flex: 0 0 auto;
|
3900 |
+
|
3901 |
+
|
3902 |
+
flex: 0 0 auto;
|
3903 |
+
|
3904 |
+
|
3905 |
+
width: auto;
|
3906 |
+
|
3907 |
+
|
3908 |
+
max-width: none
|
3909 |
+
|
3910 |
+
|
3911 |
+
}
|
3912 |
+
|
3913 |
+
|
3914 |
+
|
3915 |
+
|
3916 |
+
|
3917 |
+
.col-md-1 {
|
3918 |
+
|
3919 |
+
|
3920 |
+
-webkit-box-flex: 0;
|
3921 |
+
|
3922 |
+
|
3923 |
+
-ms-flex: 0 0 8.333333%;
|
3924 |
+
|
3925 |
+
|
3926 |
+
flex: 0 0 8.333333%;
|
3927 |
+
|
3928 |
+
|
3929 |
+
max-width: 8.333333%
|
3930 |
+
|
3931 |
+
|
3932 |
+
}
|
3933 |
+
|
3934 |
+
|
3935 |
+
|
3936 |
+
|
3937 |
+
|
3938 |
+
.col-md-2 {
|
3939 |
+
|
3940 |
+
|
3941 |
+
-webkit-box-flex: 0;
|
3942 |
+
|
3943 |
+
|
3944 |
+
-ms-flex: 0 0 16.666667%;
|
3945 |
+
|
3946 |
+
|
3947 |
+
flex: 0 0 16.666667%;
|
3948 |
+
|
3949 |
+
|
3950 |
+
max-width: 16.666667%
|
3951 |
+
|
3952 |
+
|
3953 |
+
}
|
3954 |
+
|
3955 |
+
|
3956 |
+
|
3957 |
+
|
3958 |
+
|
3959 |
+
.col-md-3 {
|
3960 |
+
|
3961 |
+
|
3962 |
+
-webkit-box-flex: 0;
|
3963 |
+
|
3964 |
+
|
3965 |
+
-ms-flex: 0 0 25%;
|
3966 |
+
|
3967 |
+
|
3968 |
+
flex: 0 0 25%;
|
3969 |
+
|
3970 |
+
|
3971 |
+
max-width: 25%
|
3972 |
+
|
3973 |
+
|
3974 |
+
}
|
3975 |
+
|
3976 |
+
|
3977 |
+
|
3978 |
+
|
3979 |
+
|
3980 |
+
.col-md-4 {
|
3981 |
+
|
3982 |
+
|
3983 |
+
-webkit-box-flex: 0;
|
3984 |
+
|
3985 |
+
|
3986 |
+
-ms-flex: 0 0 33.333333%;
|
3987 |
+
|
3988 |
+
|
3989 |
+
flex: 0 0 33.333333%;
|
3990 |
+
|
3991 |
+
|
3992 |
+
max-width: 33.333333%
|
3993 |
+
|
3994 |
+
|
3995 |
+
}
|
3996 |
+
|
3997 |
+
|
3998 |
+
|
3999 |
+
|
4000 |
+
|
4001 |
+
.col-md-5 {
|
4002 |
+
|
4003 |
+
|
4004 |
+
-webkit-box-flex: 0;
|
4005 |
+
|
4006 |
+
|
4007 |
+
-ms-flex: 0 0 41.666667%;
|
4008 |
+
|
4009 |
+
|
4010 |
+
flex: 0 0 41.666667%;
|
4011 |
+
|
4012 |
+
|
4013 |
+
max-width: 41.666667%
|
4014 |
+
|
4015 |
+
|
4016 |
+
}
|
4017 |
+
|
4018 |
+
|
4019 |
+
|
4020 |
+
|
4021 |
+
|
4022 |
+
.col-md-6 {
|
4023 |
+
|
4024 |
+
|
4025 |
+
-webkit-box-flex: 0;
|
4026 |
+
|
4027 |
+
|
4028 |
+
-ms-flex: 0 0 50%;
|
4029 |
+
|
4030 |
+
|
4031 |
+
flex: 0 0 50%;
|
4032 |
+
|
4033 |
+
|
4034 |
+
max-width: 50%
|
4035 |
+
|
4036 |
+
|
4037 |
+
}
|
4038 |
+
|
4039 |
+
|
4040 |
+
|
4041 |
+
|
4042 |
+
|
4043 |
+
.col-md-7 {
|
4044 |
+
|
4045 |
+
|
4046 |
+
-webkit-box-flex: 0;
|
4047 |
+
|
4048 |
+
|
4049 |
+
-ms-flex: 0 0 58.333333%;
|
4050 |
+
|
4051 |
+
|
4052 |
+
flex: 0 0 58.333333%;
|
4053 |
+
|
4054 |
+
|
4055 |
+
max-width: 58.333333%
|
4056 |
+
|
4057 |
+
|
4058 |
+
}
|
4059 |
+
|
4060 |
+
|
4061 |
+
|
4062 |
+
|
4063 |
+
|
4064 |
+
.col-md-8 {
|
4065 |
+
|
4066 |
+
|
4067 |
+
-webkit-box-flex: 0;
|
4068 |
+
|
4069 |
+
|
4070 |
+
-ms-flex: 0 0 66.666667%;
|
4071 |
+
|
4072 |
+
|
4073 |
+
flex: 0 0 66.666667%;
|
4074 |
+
|
4075 |
+
|
4076 |
+
max-width: 66.666667%
|
4077 |
+
|
4078 |
+
|
4079 |
+
}
|
4080 |
+
|
4081 |
+
|
4082 |
+
|
4083 |
+
|
4084 |
+
|
4085 |
+
.col-md-9 {
|
4086 |
+
|
4087 |
+
|
4088 |
+
-webkit-box-flex: 0;
|
4089 |
+
|
4090 |
+
|
4091 |
+
-ms-flex: 0 0 75%;
|
4092 |
+
|
4093 |
+
|
4094 |
+
flex: 0 0 75%;
|
4095 |
+
|
4096 |
+
|
4097 |
+
max-width: 75%
|
4098 |
+
|
4099 |
+
|
4100 |
+
}
|
4101 |
+
|
4102 |
+
|
4103 |
+
|
4104 |
+
|
4105 |
+
|
4106 |
+
.col-md-10 {
|
4107 |
+
|
4108 |
+
|
4109 |
+
-webkit-box-flex: 0;
|
4110 |
+
|
4111 |
+
|
4112 |
+
-ms-flex: 0 0 83.333333%;
|
4113 |
+
|
4114 |
+
|
4115 |
+
flex: 0 0 83.333333%;
|
4116 |
+
|
4117 |
+
|
4118 |
+
max-width: 83.333333%
|
4119 |
+
|
4120 |
+
|
4121 |
+
}
|
4122 |
+
|
4123 |
+
|
4124 |
+
|
4125 |
+
|
4126 |
+
|
4127 |
+
.col-md-11 {
|
4128 |
+
|
4129 |
+
|
4130 |
+
-webkit-box-flex: 0;
|
4131 |
+
|
4132 |
+
|
4133 |
+
-ms-flex: 0 0 91.666667%;
|
4134 |
+
|
4135 |
+
|
4136 |
+
flex: 0 0 91.666667%;
|
4137 |
+
|
4138 |
+
|
4139 |
+
max-width: 91.666667%
|
4140 |
+
|
4141 |
+
|
4142 |
+
}
|
4143 |
+
|
4144 |
+
|
4145 |
+
|
4146 |
+
|
4147 |
+
|
4148 |
+
.col-md-12 {
|
4149 |
+
|
4150 |
+
|
4151 |
+
-webkit-box-flex: 0;
|
4152 |
+
|
4153 |
+
|
4154 |
+
-ms-flex: 0 0 100%;
|
4155 |
+
|
4156 |
+
|
4157 |
+
flex: 0 0 100%;
|
4158 |
+
|
4159 |
+
|
4160 |
+
max-width: 100%
|
4161 |
+
|
4162 |
+
|
4163 |
+
}
|
4164 |
+
|
4165 |
+
|
4166 |
+
|
4167 |
+
|
4168 |
+
|
4169 |
+
.order-md-first {
|
4170 |
+
|
4171 |
+
|
4172 |
+
-webkit-box-ordinal-group: 0;
|
4173 |
+
|
4174 |
+
|
4175 |
+
-ms-flex-order: -1;
|
4176 |
+
|
4177 |
+
|
4178 |
+
order: -1
|
4179 |
+
|
4180 |
+
|
4181 |
+
}
|
4182 |
+
|
4183 |
+
|
4184 |
+
|
4185 |
+
|
4186 |
+
|
4187 |
+
.order-md-last {
|
4188 |
+
|
4189 |
+
|
4190 |
+
-webkit-box-ordinal-group: 14;
|
4191 |
+
|
4192 |
+
|
4193 |
+
-ms-flex-order: 13;
|
4194 |
+
|
4195 |
+
|
4196 |
+
order: 13
|
4197 |
+
|
4198 |
+
|
4199 |
+
}
|
4200 |
+
|
4201 |
+
|
4202 |
+
|
4203 |
+
|
4204 |
+
|
4205 |
+
.order-md-0 {
|
4206 |
+
|
4207 |
+
|
4208 |
+
-webkit-box-ordinal-group: 1;
|
4209 |
+
|
4210 |
+
|
4211 |
+
-ms-flex-order: 0;
|
4212 |
+
|
4213 |
+
|
4214 |
+
order: 0
|
4215 |
+
|
4216 |
+
|
4217 |
+
}
|
4218 |
+
|
4219 |
+
|
4220 |
+
|
4221 |
+
|
4222 |
+
|
4223 |
+
.order-md-1 {
|
4224 |
+
|
4225 |
+
|
4226 |
+
-webkit-box-ordinal-group: 2;
|
4227 |
+
|
4228 |
+
|
4229 |
+
-ms-flex-order: 1;
|
4230 |
+
|
4231 |
+
|
4232 |
+
order: 1
|
4233 |
+
|
4234 |
+
|
4235 |
+
}
|
4236 |
+
|
4237 |
+
|
4238 |
+
|
4239 |
+
|
4240 |
+
|
4241 |
+
.order-md-2 {
|
4242 |
+
|
4243 |
+
|
4244 |
+
-webkit-box-ordinal-group: 3;
|
4245 |
+
|
4246 |
+
|
4247 |
+
-ms-flex-order: 2;
|
4248 |
+
|
4249 |
+
|
4250 |
+
order: 2
|
4251 |
+
|
4252 |
+
|
4253 |
+
}
|
4254 |
+
|
4255 |
+
|
4256 |
+
|
4257 |
+
|
4258 |
+
|
4259 |
+
.order-md-3 {
|
4260 |
+
|
4261 |
+
|
4262 |
+
-webkit-box-ordinal-group: 4;
|
4263 |
+
|
4264 |
+
|
4265 |
+
-ms-flex-order: 3;
|
4266 |
+
|
4267 |
+
|
4268 |
+
order: 3
|
4269 |
+
|
4270 |
+
|
4271 |
+
}
|
4272 |
+
|
4273 |
+
|
4274 |
+
|
4275 |
+
|
4276 |
+
|
4277 |
+
.order-md-4 {
|
4278 |
+
|
4279 |
+
|
4280 |
+
-webkit-box-ordinal-group: 5;
|
4281 |
+
|
4282 |
+
|
4283 |
+
-ms-flex-order: 4;
|
4284 |
+
|
4285 |
+
|
4286 |
+
order: 4
|
4287 |
+
|
4288 |
+
|
4289 |
+
}
|
4290 |
+
|
4291 |
+
|
4292 |
+
|
4293 |
+
|
4294 |
+
|
4295 |
+
.order-md-5 {
|
4296 |
+
|
4297 |
+
|
4298 |
+
-webkit-box-ordinal-group: 6;
|
4299 |
+
|
4300 |
+
|
4301 |
+
-ms-flex-order: 5;
|
4302 |
+
|
4303 |
+
|
4304 |
+
order: 5
|
4305 |
+
|
4306 |
+
|
4307 |
+
}
|
4308 |
+
|
4309 |
+
|
4310 |
+
|
4311 |
+
|
4312 |
+
|
4313 |
+
.order-md-6 {
|
4314 |
+
|
4315 |
+
|
4316 |
+
-webkit-box-ordinal-group: 7;
|
4317 |
+
|
4318 |
+
|
4319 |
+
-ms-flex-order: 6;
|
4320 |
+
|
4321 |
+
|
4322 |
+
order: 6
|
4323 |
+
|
4324 |
+
|
4325 |
+
}
|
4326 |
+
|
4327 |
+
|
4328 |
+
|
4329 |
+
|
4330 |
+
|
4331 |
+
.order-md-7 {
|
4332 |
+
|
4333 |
+
|
4334 |
+
-webkit-box-ordinal-group: 8;
|
4335 |
+
|
4336 |
+
|
4337 |
+
-ms-flex-order: 7;
|
4338 |
+
|
4339 |
+
|
4340 |
+
order: 7
|
4341 |
+
|
4342 |
+
|
4343 |
+
}
|
4344 |
+
|
4345 |
+
|
4346 |
+
|
4347 |
+
|
4348 |
+
|
4349 |
+
.order-md-8 {
|
4350 |
+
|
4351 |
+
|
4352 |
+
-webkit-box-ordinal-group: 9;
|
4353 |
+
|
4354 |
+
|
4355 |
+
-ms-flex-order: 8;
|
4356 |
+
|
4357 |
+
|
4358 |
+
order: 8
|
4359 |
+
|
4360 |
+
|
4361 |
+
}
|
4362 |
+
|
4363 |
+
|
4364 |
+
|
4365 |
+
|
4366 |
+
|
4367 |
+
.order-md-9 {
|
4368 |
+
|
4369 |
+
|
4370 |
+
-webkit-box-ordinal-group: 10;
|
4371 |
+
|
4372 |
+
|
4373 |
+
-ms-flex-order: 9;
|
4374 |
+
|
4375 |
+
|
4376 |
+
order: 9
|
4377 |
+
|
4378 |
+
|
4379 |
+
}
|
4380 |
+
|
4381 |
+
|
4382 |
+
|
4383 |
+
|
4384 |
+
|
4385 |
+
.order-md-10 {
|
4386 |
+
|
4387 |
+
|
4388 |
+
-webkit-box-ordinal-group: 11;
|
4389 |
+
|
4390 |
+
|
4391 |
+
-ms-flex-order: 10;
|
4392 |
+
|
4393 |
+
|
4394 |
+
order: 10
|
4395 |
+
|
4396 |
+
|
4397 |
+
}
|
4398 |
+
|
4399 |
+
|
4400 |
+
|
4401 |
+
|
4402 |
+
|
4403 |
+
.order-md-11 {
|
4404 |
+
|
4405 |
+
|
4406 |
+
-webkit-box-ordinal-group: 12;
|
4407 |
+
|
4408 |
+
|
4409 |
+
-ms-flex-order: 11;
|
4410 |
+
|
4411 |
+
|
4412 |
+
order: 11
|
4413 |
+
|
4414 |
+
|
4415 |
+
}
|
4416 |
+
|
4417 |
+
|
4418 |
+
|
4419 |
+
|
4420 |
+
|
4421 |
+
.order-md-12 {
|
4422 |
+
|
4423 |
+
|
4424 |
+
-webkit-box-ordinal-group: 13;
|
4425 |
+
|
4426 |
+
|
4427 |
+
-ms-flex-order: 12;
|
4428 |
+
|
4429 |
+
|
4430 |
+
order: 12
|
4431 |
+
|
4432 |
+
|
4433 |
+
}
|
4434 |
+
|
4435 |
+
|
4436 |
+
|
4437 |
+
|
4438 |
+
|
4439 |
+
.offset-md-0 {
|
4440 |
+
|
4441 |
+
|
4442 |
+
margin-left: 0
|
4443 |
+
|
4444 |
+
|
4445 |
+
}
|
4446 |
+
|
4447 |
+
|
4448 |
+
|
4449 |
+
|
4450 |
+
|
4451 |
+
.offset-md-1 {
|
4452 |
+
|
4453 |
+
|
4454 |
+
margin-left: 8.333333%
|
4455 |
+
|
4456 |
+
|
4457 |
+
}
|
4458 |
+
|
4459 |
+
|
4460 |
+
|
4461 |
+
|
4462 |
+
|
4463 |
+
.offset-md-2 {
|
4464 |
+
|
4465 |
+
|
4466 |
+
margin-left: 16.666667%
|
4467 |
+
|
4468 |
+
|
4469 |
+
}
|
4470 |
+
|
4471 |
+
|
4472 |
+
|
4473 |
+
|
4474 |
+
|
4475 |
+
.offset-md-3 {
|
4476 |
+
|
4477 |
+
|
4478 |
+
margin-left: 25%
|
4479 |
+
|
4480 |
+
|
4481 |
+
}
|
4482 |
+
|
4483 |
+
|
4484 |
+
|
4485 |
+
|
4486 |
+
|
4487 |
+
.offset-md-4 {
|
4488 |
+
|
4489 |
+
|
4490 |
+
margin-left: 33.333333%
|
4491 |
+
|
4492 |
+
|
4493 |
+
}
|
4494 |
+
|
4495 |
+
|
4496 |
+
|
4497 |
+
|
4498 |
+
|
4499 |
+
.offset-md-5 {
|
4500 |
+
|
4501 |
+
|
4502 |
+
margin-left: 41.666667%
|
4503 |
+
|
4504 |
+
|
4505 |
+
}
|
4506 |
+
|
4507 |
+
|
4508 |
+
|
4509 |
+
|
4510 |
+
|
4511 |
+
.offset-md-6 {
|
4512 |
+
|
4513 |
+
|
4514 |
+
margin-left: 50%
|
4515 |
+
|
4516 |
+
|
4517 |
+
}
|
4518 |
+
|
4519 |
+
|
4520 |
+
|
4521 |
+
|
4522 |
+
|
4523 |
+
.offset-md-7 {
|
4524 |
+
|
4525 |
+
|
4526 |
+
margin-left: 58.333333%
|
4527 |
+
|
4528 |
+
|
4529 |
+
}
|
4530 |
+
|
4531 |
+
|
4532 |
+
|
4533 |
+
|
4534 |
+
|
4535 |
+
.offset-md-8 {
|
4536 |
+
|
4537 |
+
|
4538 |
+
margin-left: 66.666667%
|
4539 |
+
|
4540 |
+
|
4541 |
+
}
|
4542 |
+
|
4543 |
+
|
4544 |
+
|
4545 |
+
|
4546 |
+
|
4547 |
+
.offset-md-9 {
|
4548 |
+
|
4549 |
+
|
4550 |
+
margin-left: 75%
|
4551 |
+
|
4552 |
+
|
4553 |
+
}
|
4554 |
+
|
4555 |
+
|
4556 |
+
|
4557 |
+
|
4558 |
+
|
4559 |
+
.offset-md-10 {
|
4560 |
+
|
4561 |
+
|
4562 |
+
margin-left: 83.333333%
|
4563 |
+
|
4564 |
+
|
4565 |
+
}
|
4566 |
+
|
4567 |
+
|
4568 |
+
|
4569 |
+
|
4570 |
+
|
4571 |
+
.offset-md-11 {
|
4572 |
+
|
4573 |
+
|
4574 |
+
margin-left: 91.666667%
|
4575 |
+
|
4576 |
+
|
4577 |
+
}
|
4578 |
+
|
4579 |
+
|
4580 |
+
}
|
4581 |
+
|
4582 |
+
|
4583 |
+
|
4584 |
+
|
4585 |
+
|
4586 |
+
@media (min-width: 992px) {
|
4587 |
+
|
4588 |
+
|
4589 |
+
.col-lg {
|
4590 |
+
|
4591 |
+
|
4592 |
+
-ms-flex-preferred-size: 0;
|
4593 |
+
|
4594 |
+
|
4595 |
+
flex-basis: 0;
|
4596 |
+
|
4597 |
+
|
4598 |
+
-webkit-box-flex: 1;
|
4599 |
+
|
4600 |
+
|
4601 |
+
-ms-flex-positive: 1;
|
4602 |
+
|
4603 |
+
|
4604 |
+
flex-grow: 1;
|
4605 |
+
|
4606 |
+
|
4607 |
+
max-width: 100%
|
4608 |
+
|
4609 |
+
|
4610 |
+
}
|
4611 |
+
|
4612 |
+
|
4613 |
+
|
4614 |
+
|
4615 |
+
|
4616 |
+
.col-lg-auto {
|
4617 |
+
|
4618 |
+
|
4619 |
+
-webkit-box-flex: 0;
|
4620 |
+
|
4621 |
+
|
4622 |
+
-ms-flex: 0 0 auto;
|
4623 |
+
|
4624 |
+
|
4625 |
+
flex: 0 0 auto;
|
4626 |
+
|
4627 |
+
|
4628 |
+
width: auto;
|
4629 |
+
|
4630 |
+
|
4631 |
+
max-width: none
|
4632 |
+
|
4633 |
+
|
4634 |
+
}
|
4635 |
+
|
4636 |
+
|
4637 |
+
|
4638 |
+
|
4639 |
+
|
4640 |
+
.col-lg-1 {
|
4641 |
+
|
4642 |
+
|
4643 |
+
-webkit-box-flex: 0;
|
4644 |
+
|
4645 |
+
|
4646 |
+
-ms-flex: 0 0 8.333333%;
|
4647 |
+
|
4648 |
+
|
4649 |
+
flex: 0 0 8.333333%;
|
4650 |
+
|
4651 |
+
|
4652 |
+
max-width: 8.333333%
|
4653 |
+
|
4654 |
+
|
4655 |
+
}
|
4656 |
+
|
4657 |
+
|
4658 |
+
|
4659 |
+
|
4660 |
+
|
4661 |
+
.col-lg-2 {
|
4662 |
+
|
4663 |
+
|
4664 |
+
-webkit-box-flex: 0;
|
4665 |
+
|
4666 |
+
|
4667 |
+
-ms-flex: 0 0 16.666667%;
|
4668 |
+
|
4669 |
+
|
4670 |
+
flex: 0 0 16.666667%;
|
4671 |
+
|
4672 |
+
|
4673 |
+
max-width: 16.666667%
|
4674 |
+
|
4675 |
+
|
4676 |
+
}
|
4677 |
+
|
4678 |
+
|
4679 |
+
|
4680 |
+
|
4681 |
+
|
4682 |
+
.col-lg-3 {
|
4683 |
+
|
4684 |
+
|
4685 |
+
-webkit-box-flex: 0;
|
4686 |
+
|
4687 |
+
|
4688 |
+
-ms-flex: 0 0 25%;
|
4689 |
+
|
4690 |
+
|
4691 |
+
flex: 0 0 25%;
|
4692 |
+
|
4693 |
+
|
4694 |
+
max-width: 25%
|
4695 |
+
|
4696 |
+
|
4697 |
+
}
|
4698 |
+
|
4699 |
+
|
4700 |
+
|
4701 |
+
|
4702 |
+
|
4703 |
+
.col-lg-4 {
|
4704 |
+
|
4705 |
+
|
4706 |
+
-webkit-box-flex: 0;
|
4707 |
+
|
4708 |
+
|
4709 |
+
-ms-flex: 0 0 33.333333%;
|
4710 |
+
|
4711 |
+
|
4712 |
+
flex: 0 0 33.333333%;
|
4713 |
+
|
4714 |
+
|
4715 |
+
max-width: 33.333333%
|
4716 |
+
|
4717 |
+
|
4718 |
+
}
|
4719 |
+
|
4720 |
+
|
4721 |
+
|
4722 |
+
|
4723 |
+
|
4724 |
+
.col-lg-5 {
|
4725 |
+
|
4726 |
+
|
4727 |
+
-webkit-box-flex: 0;
|
4728 |
+
|
4729 |
+
|
4730 |
+
-ms-flex: 0 0 41.666667%;
|
4731 |
+
|
4732 |
+
|
4733 |
+
flex: 0 0 41.666667%;
|
4734 |
+
|
4735 |
+
|
4736 |
+
max-width: 41.666667%
|
4737 |
+
|
4738 |
+
|
4739 |
+
}
|
4740 |
+
|
4741 |
+
|
4742 |
+
|
4743 |
+
|
4744 |
+
|
4745 |
+
.col-lg-6 {
|
4746 |
+
|
4747 |
+
|
4748 |
+
-webkit-box-flex: 0;
|
4749 |
+
|
4750 |
+
|
4751 |
+
-ms-flex: 0 0 50%;
|
4752 |
+
|
4753 |
+
|
4754 |
+
flex: 0 0 50%;
|
4755 |
+
|
4756 |
+
|
4757 |
+
max-width: 50%
|
4758 |
+
|
4759 |
+
|
4760 |
+
}
|
4761 |
+
|
4762 |
+
|
4763 |
+
|
4764 |
+
|
4765 |
+
|
4766 |
+
.col-lg-7 {
|
4767 |
+
|
4768 |
+
|
4769 |
+
-webkit-box-flex: 0;
|
4770 |
+
|
4771 |
+
|
4772 |
+
-ms-flex: 0 0 58.333333%;
|
4773 |
+
|
4774 |
+
|
4775 |
+
flex: 0 0 58.333333%;
|
4776 |
+
|
4777 |
+
|
4778 |
+
max-width: 58.333333%
|
4779 |
+
|
4780 |
+
|
4781 |
+
}
|
4782 |
+
|
4783 |
+
|
4784 |
+
|
4785 |
+
|
4786 |
+
|
4787 |
+
.col-lg-8 {
|
4788 |
+
|
4789 |
+
|
4790 |
+
-webkit-box-flex: 0;
|
4791 |
+
|
4792 |
+
|
4793 |
+
-ms-flex: 0 0 66.666667%;
|
4794 |
+
|
4795 |
+
|
4796 |
+
flex: 0 0 66.666667%;
|
4797 |
+
|
4798 |
+
|
4799 |
+
max-width: 66.666667%
|
4800 |
+
|
4801 |
+
|
4802 |
+
}
|
4803 |
+
|
4804 |
+
|
4805 |
+
|
4806 |
+
|
4807 |
+
|
4808 |
+
.col-lg-9 {
|
4809 |
+
|
4810 |
+
|
4811 |
+
-webkit-box-flex: 0;
|
4812 |
+
|
4813 |
+
|
4814 |
+
-ms-flex: 0 0 75%;
|
4815 |
+
|
4816 |
+
|
4817 |
+
flex: 0 0 75%;
|
4818 |
+
|
4819 |
+
|
4820 |
+
max-width: 75%
|
4821 |
+
|
4822 |
+
|
4823 |
+
}
|
4824 |
+
|
4825 |
+
|
4826 |
+
|
4827 |
+
|
4828 |
+
|
4829 |
+
.col-lg-10 {
|
4830 |
+
|
4831 |
+
|
4832 |
+
-webkit-box-flex: 0;
|
4833 |
+
|
4834 |
+
|
4835 |
+
-ms-flex: 0 0 83.333333%;
|
4836 |
+
|
4837 |
+
|
4838 |
+
flex: 0 0 83.333333%;
|
4839 |
+
|
4840 |
+
|
4841 |
+
max-width: 83.333333%
|
4842 |
+
|
4843 |
+
|
4844 |
+
}
|
4845 |
+
|
4846 |
+
|
4847 |
+
|
4848 |
+
|
4849 |
+
|
4850 |
+
.col-lg-11 {
|
4851 |
+
|
4852 |
+
|
4853 |
+
-webkit-box-flex: 0;
|
4854 |
+
|
4855 |
+
|
4856 |
+
-ms-flex: 0 0 91.666667%;
|
4857 |
+
|
4858 |
+
|
4859 |
+
flex: 0 0 91.666667%;
|
4860 |
+
|
4861 |
+
|
4862 |
+
max-width: 91.666667%
|
4863 |
+
|
4864 |
+
|
4865 |
+
}
|
4866 |
+
|
4867 |
+
|
4868 |
+
|
4869 |
+
|
4870 |
+
|
4871 |
+
.col-lg-12 {
|
4872 |
+
|
4873 |
+
|
4874 |
+
-webkit-box-flex: 0;
|
4875 |
+
|
4876 |
+
|
4877 |
+
-ms-flex: 0 0 100%;
|
4878 |
+
|
4879 |
+
|
4880 |
+
flex: 0 0 100%;
|
4881 |
+
|
4882 |
+
|
4883 |
+
max-width: 100%
|
4884 |
+
|
4885 |
+
|
4886 |
+
}
|
4887 |
+
|
4888 |
+
|
4889 |
+
|
4890 |
+
|
4891 |
+
|
4892 |
+
.order-lg-first {
|
4893 |
+
|
4894 |
+
|
4895 |
+
-webkit-box-ordinal-group: 0;
|
4896 |
+
|
4897 |
+
|
4898 |
+
-ms-flex-order: -1;
|
4899 |
+
|
4900 |
+
|
4901 |
+
order: -1
|
4902 |
+
|
4903 |
+
|
4904 |
+
}
|
4905 |
+
|
4906 |
+
|
4907 |
+
|
4908 |
+
|
4909 |
+
|
4910 |
+
.order-lg-last {
|
4911 |
+
|
4912 |
+
|
4913 |
+
-webkit-box-ordinal-group: 14;
|
4914 |
+
|
4915 |
+
|
4916 |
+
-ms-flex-order: 13;
|
4917 |
+
|
4918 |
+
|
4919 |
+
order: 13
|
4920 |
+
|
4921 |
+
|
4922 |
+
}
|
4923 |
+
|
4924 |
+
|
4925 |
+
|
4926 |
+
|
4927 |
+
|
4928 |
+
.order-lg-0 {
|
4929 |
+
|
4930 |
+
|
4931 |
+
-webkit-box-ordinal-group: 1;
|
4932 |
+
|
4933 |
+
|
4934 |
+
-ms-flex-order: 0;
|
4935 |
+
|
4936 |
+
|
4937 |
+
order: 0
|
4938 |
+
|
4939 |
+
|
4940 |
+
}
|
4941 |
+
|
4942 |
+
|
4943 |
+
|
4944 |
+
|
4945 |
+
|
4946 |
+
.order-lg-1 {
|
4947 |
+
|
4948 |
+
|
4949 |
+
-webkit-box-ordinal-group: 2;
|
4950 |
+
|
4951 |
+
|
4952 |
+
-ms-flex-order: 1;
|
4953 |
+
|
4954 |
+
|
4955 |
+
order: 1
|
4956 |
+
|
4957 |
+
|
4958 |
+
}
|
4959 |
+
|
4960 |
+
|
4961 |
+
|
4962 |
+
|
4963 |
+
|
4964 |
+
.order-lg-2 {
|
4965 |
+
|
4966 |
+
|
4967 |
+
-webkit-box-ordinal-group: 3;
|
4968 |
+
|
4969 |
+
|
4970 |
+
-ms-flex-order: 2;
|
4971 |
+
|
4972 |
+
|
4973 |
+
order: 2
|
4974 |
+
|
4975 |
+
|
4976 |
+
}
|
4977 |
+
|
4978 |
+
|
4979 |
+
|
4980 |
+
|
4981 |
+
|
4982 |
+
.order-lg-3 {
|
4983 |
+
|
4984 |
+
|
4985 |
+
-webkit-box-ordinal-group: 4;
|
4986 |
+
|
4987 |
+
|
4988 |
+
-ms-flex-order: 3;
|
4989 |
+
|
4990 |
+
|
4991 |
+
order: 3
|
4992 |
+
|
4993 |
+
|
4994 |
+
}
|
4995 |
+
|
4996 |
+
|
4997 |
+
|
4998 |
+
|
4999 |
+
|
5000 |
+
.order-lg-4 {
|
5001 |
+
|
5002 |
+
|
5003 |
+
-webkit-box-ordinal-group: 5;
|
5004 |
+
|
5005 |
+
|
5006 |
+
-ms-flex-order: 4;
|
5007 |
+
|
5008 |
+
|
5009 |
+
order: 4
|
5010 |
+
|
5011 |
+
|
5012 |
+
}
|
5013 |
+
|
5014 |
+
|
5015 |
+
|
5016 |
+
|
5017 |
+
|
5018 |
+
.order-lg-5 {
|
5019 |
+
|
5020 |
+
|
5021 |
+
-webkit-box-ordinal-group: 6;
|
5022 |
+
|
5023 |
+
|
5024 |
+
-ms-flex-order: 5;
|
5025 |
+
|
5026 |
+
|
5027 |
+
order: 5
|
5028 |
+
|
5029 |
+
|
5030 |
+
}
|
5031 |
+
|
5032 |
+
|
5033 |
+
|
5034 |
+
|
5035 |
+
|
5036 |
+
.order-lg-6 {
|
5037 |
+
|
5038 |
+
|
5039 |
+
-webkit-box-ordinal-group: 7;
|
5040 |
+
|
5041 |
+
|
5042 |
+
-ms-flex-order: 6;
|
5043 |
+
|
5044 |
+
|
5045 |
+
order: 6
|
5046 |
+
|
5047 |
+
|
5048 |
+
}
|
5049 |
+
|
5050 |
+
|
5051 |
+
|
5052 |
+
|
5053 |
+
|
5054 |
+
.order-lg-7 {
|
5055 |
+
|
5056 |
+
|
5057 |
+
-webkit-box-ordinal-group: 8;
|
5058 |
+
|
5059 |
+
|
5060 |
+
-ms-flex-order: 7;
|
5061 |
+
|
5062 |
+
|
5063 |
+
order: 7
|
5064 |
+
|
5065 |
+
|
5066 |
+
}
|
5067 |
+
|
5068 |
+
|
5069 |
+
|
5070 |
+
|
5071 |
+
|
5072 |
+
.order-lg-8 {
|
5073 |
+
|
5074 |
+
|
5075 |
+
-webkit-box-ordinal-group: 9;
|
5076 |
+
|
5077 |
+
|
5078 |
+
-ms-flex-order: 8;
|
5079 |
+
|
5080 |
+
|
5081 |
+
order: 8
|
5082 |
+
|
5083 |
+
|
5084 |
+
}
|
5085 |
+
|
5086 |
+
|
5087 |
+
|
5088 |
+
|
5089 |
+
|
5090 |
+
.order-lg-9 {
|
5091 |
+
|
5092 |
+
|
5093 |
+
-webkit-box-ordinal-group: 10;
|
5094 |
+
|
5095 |
+
|
5096 |
+
-ms-flex-order: 9;
|
5097 |
+
|
5098 |
+
|
5099 |
+
order: 9
|
5100 |
+
|
5101 |
+
|
5102 |
+
}
|
5103 |
+
|
5104 |
+
|
5105 |
+
|
5106 |
+
|
5107 |
+
|
5108 |
+
.order-lg-10 {
|
5109 |
+
|
5110 |
+
|
5111 |
+
-webkit-box-ordinal-group: 11;
|
5112 |
+
|
5113 |
+
|
5114 |
+
-ms-flex-order: 10;
|
5115 |
+
|
5116 |
+
|
5117 |
+
order: 10
|
5118 |
+
|
5119 |
+
|
5120 |
+
}
|
5121 |
+
|
5122 |
+
|
5123 |
+
|
5124 |
+
|
5125 |
+
|
5126 |
+
.order-lg-11 {
|
5127 |
+
|
5128 |
+
|
5129 |
+
-webkit-box-ordinal-group: 12;
|
5130 |
+
|
5131 |
+
|
5132 |
+
-ms-flex-order: 11;
|
5133 |
+
|
5134 |
+
|
5135 |
+
order: 11
|
5136 |
+
|
5137 |
+
|
5138 |
+
}
|
5139 |
+
|
5140 |
+
|
5141 |
+
|
5142 |
+
|
5143 |
+
|
5144 |
+
.order-lg-12 {
|
5145 |
+
|
5146 |
+
|
5147 |
+
-webkit-box-ordinal-group: 13;
|
5148 |
+
|
5149 |
+
|
5150 |
+
-ms-flex-order: 12;
|
5151 |
+
|
5152 |
+
|
5153 |
+
order: 12
|
5154 |
+
|
5155 |
+
|
5156 |
+
}
|
5157 |
+
|
5158 |
+
|
5159 |
+
|
5160 |
+
|
5161 |
+
|
5162 |
+
.offset-lg-0 {
|
5163 |
+
|
5164 |
+
|
5165 |
+
margin-left: 0
|
5166 |
+
|
5167 |
+
|
5168 |
+
}
|
5169 |
+
|
5170 |
+
|
5171 |
+
|
5172 |
+
|
5173 |
+
|
5174 |
+
.offset-lg-1 {
|
5175 |
+
|
5176 |
+
|
5177 |
+
margin-left: 8.333333%
|
5178 |
+
|
5179 |
+
|
5180 |
+
}
|
5181 |
+
|
5182 |
+
|
5183 |
+
|
5184 |
+
|
5185 |
+
|
5186 |
+
.offset-lg-2 {
|
5187 |
+
|
5188 |
+
|
5189 |
+
margin-left: 16.666667%
|
5190 |
+
|
5191 |
+
|
5192 |
+
}
|
5193 |
+
|
5194 |
+
|
5195 |
+
|
5196 |
+
|
5197 |
+
|
5198 |
+
.offset-lg-3 {
|
5199 |
+
|
5200 |
+
|
5201 |
+
margin-left: 25%
|
5202 |
+
|
5203 |
+
|
5204 |
+
}
|
5205 |
+
|
5206 |
+
|
5207 |
+
|
5208 |
+
|
5209 |
+
|
5210 |
+
.offset-lg-4 {
|
5211 |
+
|
5212 |
+
|
5213 |
+
margin-left: 33.333333%
|
5214 |
+
|
5215 |
+
|
5216 |
+
}
|
5217 |
+
|
5218 |
+
|
5219 |
+
|
5220 |
+
|
5221 |
+
|
5222 |
+
.offset-lg-5 {
|
5223 |
+
|
5224 |
+
|
5225 |
+
margin-left: 41.666667%
|
5226 |
+
|
5227 |
+
|
5228 |
+
}
|
5229 |
+
|
5230 |
+
|
5231 |
+
|
5232 |
+
|
5233 |
+
|
5234 |
+
.offset-lg-6 {
|
5235 |
+
|
5236 |
+
|
5237 |
+
margin-left: 50%
|
5238 |
+
|
5239 |
+
|
5240 |
+
}
|
5241 |
+
|
5242 |
+
|
5243 |
+
|
5244 |
+
|
5245 |
+
|
5246 |
+
.offset-lg-7 {
|
5247 |
+
|
5248 |
+
|
5249 |
+
margin-left: 58.333333%
|
5250 |
+
|
5251 |
+
|
5252 |
+
}
|
5253 |
+
|
5254 |
+
|
5255 |
+
|
5256 |
+
|
5257 |
+
|
5258 |
+
.offset-lg-8 {
|
5259 |
+
|
5260 |
+
|
5261 |
+
margin-left: 66.666667%
|
5262 |
+
|
5263 |
+
|
5264 |
+
}
|
5265 |
+
|
5266 |
+
|
5267 |
+
|
5268 |
+
|
5269 |
+
|
5270 |
+
.offset-lg-9 {
|
5271 |
+
|
5272 |
+
|
5273 |
+
margin-left: 75%
|
5274 |
+
|
5275 |
+
|
5276 |
+
}
|
5277 |
+
|
5278 |
+
|
5279 |
+
|
5280 |
+
|
5281 |
+
|
5282 |
+
.offset-lg-10 {
|
5283 |
+
|
5284 |
+
|
5285 |
+
margin-left: 83.333333%
|
5286 |
+
|
5287 |
+
|
5288 |
+
}
|
5289 |
+
|
5290 |
+
|
5291 |
+
|
5292 |
+
|
5293 |
+
|
5294 |
+
.offset-lg-11 {
|
5295 |
+
|
5296 |
+
|
5297 |
+
margin-left: 91.666667%
|
5298 |
+
|
5299 |
+
|
5300 |
+
}
|
5301 |
+
|
5302 |
+
|
5303 |
+
}
|
5304 |
+
|
5305 |
+
|
5306 |
+
|
5307 |
+
|
5308 |
+
|
5309 |
+
@media (min-width: 1200px) {
|
5310 |
+
|
5311 |
+
|
5312 |
+
.col-xl {
|
5313 |
+
|
5314 |
+
|
5315 |
+
-ms-flex-preferred-size: 0;
|
5316 |
+
|
5317 |
+
|
5318 |
+
flex-basis: 0;
|
5319 |
+
|
5320 |
+
|
5321 |
+
-webkit-box-flex: 1;
|
5322 |
+
|
5323 |
+
|
5324 |
+
-ms-flex-positive: 1;
|
5325 |
+
|
5326 |
+
|
5327 |
+
flex-grow: 1;
|
5328 |
+
|
5329 |
+
|
5330 |
+
max-width: 100%
|
5331 |
+
|
5332 |
+
|
5333 |
+
}
|
5334 |
+
|
5335 |
+
|
5336 |
+
|
5337 |
+
|
5338 |
+
|
5339 |
+
.col-xl-auto {
|
5340 |
+
|
5341 |
+
|
5342 |
+
-webkit-box-flex: 0;
|
5343 |
+
|
5344 |
+
|
5345 |
+
-ms-flex: 0 0 auto;
|
5346 |
+
|
5347 |
+
|
5348 |
+
flex: 0 0 auto;
|
5349 |
+
|
5350 |
+
|
5351 |
+
width: auto;
|
5352 |
+
|
5353 |
+
|
5354 |
+
max-width: none
|
5355 |
+
|
5356 |
+
|
5357 |
+
}
|
5358 |
+
|
5359 |
+
|
5360 |
+
|
5361 |
+
|
5362 |
+
|
5363 |
+
.col-xl-1 {
|
5364 |
+
|
5365 |
+
|
5366 |
+
-webkit-box-flex: 0;
|
5367 |
+
|
5368 |
+
|
5369 |
+
-ms-flex: 0 0 8.333333%;
|
5370 |
+
|
5371 |
+
|
5372 |
+
flex: 0 0 8.333333%;
|
5373 |
+
|
5374 |
+
|
5375 |
+
max-width: 8.333333%
|
5376 |
+
|
5377 |
+
|
5378 |
+
}
|
5379 |
+
|
5380 |
+
|
5381 |
+
|
5382 |
+
|
5383 |
+
|
5384 |
+
.col-xl-2 {
|
5385 |
+
|
5386 |
+
|
5387 |
+
-webkit-box-flex: 0;
|
5388 |
+
|
5389 |
+
|
5390 |
+
-ms-flex: 0 0 16.666667%;
|
5391 |
+
|
5392 |
+
|
5393 |
+
flex: 0 0 16.666667%;
|
5394 |
+
|
5395 |
+
|
5396 |
+
max-width: 16.666667%
|
5397 |
+
|
5398 |
+
|
5399 |
+
}
|
5400 |
+
|
5401 |
+
|
5402 |
+
|
5403 |
+
|
5404 |
+
|
5405 |
+
.col-xl-3 {
|
5406 |
+
|
5407 |
+
|
5408 |
+
-webkit-box-flex: 0;
|
5409 |
+
|
5410 |
+
|
5411 |
+
-ms-flex: 0 0 25%;
|
5412 |
+
|
5413 |
+
|
5414 |
+
flex: 0 0 25%;
|
5415 |
+
|
5416 |
+
|
5417 |
+
max-width: 25%
|
5418 |
+
|
5419 |
+
|
5420 |
+
}
|
5421 |
+
|
5422 |
+
|
5423 |
+
|
5424 |
+
|
5425 |
+
|
5426 |
+
.col-xl-4 {
|
5427 |
+
|
5428 |
+
|
5429 |
+
-webkit-box-flex: 0;
|
5430 |
+
|
5431 |
+
|
5432 |
+
-ms-flex: 0 0 33.333333%;
|
5433 |
+
|
5434 |
+
|
5435 |
+
flex: 0 0 33.333333%;
|
5436 |
+
|
5437 |
+
|
5438 |
+
max-width: 33.333333%
|
5439 |
+
|
5440 |
+
|
5441 |
+
}
|
5442 |
+
|
5443 |
+
|
5444 |
+
|
5445 |
+
|
5446 |
+
|
5447 |
+
.col-xl-5 {
|
5448 |
+
|
5449 |
+
|
5450 |
+
-webkit-box-flex: 0;
|
5451 |
+
|
5452 |
+
|
5453 |
+
-ms-flex: 0 0 41.666667%;
|
5454 |
+
|
5455 |
+
|
5456 |
+
flex: 0 0 41.666667%;
|
5457 |
+
|
5458 |
+
|
5459 |
+
max-width: 41.666667%
|
5460 |
+
|
5461 |
+
|
5462 |
+
}
|
5463 |
+
|
5464 |
+
|
5465 |
+
|
5466 |
+
|
5467 |
+
|
5468 |
+
.col-xl-6 {
|
5469 |
+
|
5470 |
+
|
5471 |
+
-webkit-box-flex: 0;
|
5472 |
+
|
5473 |
+
|
5474 |
+
-ms-flex: 0 0 50%;
|
5475 |
+
|
5476 |
+
|
5477 |
+
flex: 0 0 50%;
|
5478 |
+
|
5479 |
+
|
5480 |
+
max-width: 50%
|
5481 |
+
|
5482 |
+
|
5483 |
+
}
|
5484 |
+
|
5485 |
+
|
5486 |
+
|
5487 |
+
|
5488 |
+
|
5489 |
+
.col-xl-7 {
|
5490 |
+
|
5491 |
+
|
5492 |
+
-webkit-box-flex: 0;
|
5493 |
+
|
5494 |
+
|
5495 |
+
-ms-flex: 0 0 58.333333%;
|
5496 |
+
|
5497 |
+
|
5498 |
+
flex: 0 0 58.333333%;
|
5499 |
+
|
5500 |
+
|
5501 |
+
max-width: 58.333333%
|
5502 |
+
|
5503 |
+
|
5504 |
+
}
|
5505 |
+
|
5506 |
+
|
5507 |
+
|
5508 |
+
|
5509 |
+
|
5510 |
+
.col-xl-8 {
|
5511 |
+
|
5512 |
+
|
5513 |
+
-webkit-box-flex: 0;
|
5514 |
+
|
5515 |
+
|
5516 |
+
-ms-flex: 0 0 66.666667%;
|
5517 |
+
|
5518 |
+
|
5519 |
+
flex: 0 0 66.666667%;
|
5520 |
+
|
5521 |
+
|
5522 |
+
max-width: 66.666667%
|
5523 |
+
|
5524 |
+
|
5525 |
+
}
|
5526 |
+
|
5527 |
+
|
5528 |
+
|
5529 |
+
|
5530 |
+
|
5531 |
+
.col-xl-9 {
|
5532 |
+
|
5533 |
+
|
5534 |
+
-webkit-box-flex: 0;
|
5535 |
+
|
5536 |
+
|
5537 |
+
-ms-flex: 0 0 75%;
|
5538 |
+
|
5539 |
+
|
5540 |
+
flex: 0 0 75%;
|
5541 |
+
|
5542 |
+
|
5543 |
+
max-width: 75%
|
5544 |
+
|
5545 |
+
|
5546 |
+
}
|
5547 |
+
|
5548 |
+
|
5549 |
+
|
5550 |
+
|
5551 |
+
|
5552 |
+
.col-xl-10 {
|
5553 |
+
|
5554 |
+
|
5555 |
+
-webkit-box-flex: 0;
|
5556 |
+
|
5557 |
+
|
5558 |
+
-ms-flex: 0 0 83.333333%;
|
5559 |
+
|
5560 |
+
|
5561 |
+
flex: 0 0 83.333333%;
|
5562 |
+
|
5563 |
+
|
5564 |
+
max-width: 83.333333%
|
5565 |
+
|
5566 |
+
|
5567 |
+
}
|
5568 |
+
|
5569 |
+
|
5570 |
+
|
5571 |
+
|
5572 |
+
|
5573 |
+
.col-xl-11 {
|
5574 |
+
|
5575 |
+
|
5576 |
+
-webkit-box-flex: 0;
|
5577 |
+
|
5578 |
+
|
5579 |
+
-ms-flex: 0 0 91.666667%;
|
5580 |
+
|
5581 |
+
|
5582 |
+
flex: 0 0 91.666667%;
|
5583 |
+
|
5584 |
+
|
5585 |
+
max-width: 91.666667%
|
5586 |
+
|
5587 |
+
|
5588 |
+
}
|
5589 |
+
|
5590 |
+
|
5591 |
+
|
5592 |
+
|
5593 |
+
|
5594 |
+
.col-xl-12 {
|
5595 |
+
|
5596 |
+
|
5597 |
+
-webkit-box-flex: 0;
|
5598 |
+
|
5599 |
+
|
5600 |
+
-ms-flex: 0 0 100%;
|
5601 |
+
|
5602 |
+
|
5603 |
+
flex: 0 0 100%;
|
5604 |
+
|
5605 |
+
|
5606 |
+
max-width: 100%
|
5607 |
+
|
5608 |
+
|
5609 |
+
}
|
5610 |
+
|
5611 |
+
|
5612 |
+
}
|
5613 |
+
|
5614 |
+
|
5615 |
+
|
5616 |
+
|
5617 |
+
|
5618 |
+
|
5619 |
+
|
5620 |
+
|
5621 |
+
.mo_otp_token, .mo2f_user_email, .mo2f_IR_phone,
|
5622 |
+
|
5623 |
+
|
5624 |
+
.mo_IR_otp_token, .mo2f_IR_GA_token, .mo2f_IR_phone_OTP {
|
5625 |
+
|
5626 |
+
|
5627 |
+
color:#212F3C;
|
5628 |
+
|
5629 |
+
|
5630 |
+
border:none;
|
5631 |
+
|
5632 |
+
|
5633 |
+
display:block;
|
5634 |
+
|
5635 |
+
|
5636 |
+
border-bottom-style: solid;
|
5637 |
+
|
5638 |
+
|
5639 |
+
border-width: 2px;
|
5640 |
+
|
5641 |
+
|
5642 |
+
border-color:#D0D3D4;
|
5643 |
+
|
5644 |
+
|
5645 |
+
border-radius:0px;
|
5646 |
+
|
5647 |
+
|
5648 |
+
outline:none;
|
5649 |
+
|
5650 |
+
|
5651 |
+
padding:5px;
|
5652 |
+
|
5653 |
+
|
5654 |
+
}
|
5655 |
+
|
5656 |
+
|
5657 |
+
|
5658 |
+
|
5659 |
+
|
5660 |
+
.mo_otp_token {
|
5661 |
+
|
5662 |
+
|
5663 |
+
font-size:15px;
|
5664 |
+
|
5665 |
+
|
5666 |
+
width:130px;
|
5667 |
+
|
5668 |
+
|
5669 |
+
text-align:center;
|
5670 |
+
|
5671 |
+
|
5672 |
+
}
|
5673 |
+
|
5674 |
+
|
5675 |
+
|
5676 |
+
|
5677 |
+
|
5678 |
+
.mo2f_user_email{
|
5679 |
+
|
5680 |
+
|
5681 |
+
font-size:16px;
|
5682 |
+
|
5683 |
+
|
5684 |
+
width:220px;
|
5685 |
+
|
5686 |
+
|
5687 |
+
text-align:center;
|
5688 |
+
|
5689 |
+
|
5690 |
+
}
|
5691 |
+
|
5692 |
+
|
5693 |
+
|
5694 |
+
|
5695 |
+
|
5696 |
+
.mo2f_IR_phone{
|
5697 |
+
|
5698 |
+
|
5699 |
+
font-size:14px;
|
5700 |
+
|
5701 |
+
|
5702 |
+
width:170px !important;
|
5703 |
+
|
5704 |
+
|
5705 |
+
}
|
5706 |
+
|
5707 |
+
|
5708 |
+
|
5709 |
+
|
5710 |
+
|
5711 |
+
.mo2f_IR_GA_token{
|
5712 |
+
|
5713 |
+
|
5714 |
+
font-size:15px;
|
5715 |
+
|
5716 |
+
|
5717 |
+
width:100px !important;
|
5718 |
+
|
5719 |
+
|
5720 |
+
}
|
5721 |
+
|
5722 |
+
|
5723 |
+
|
5724 |
+
|
5725 |
+
|
5726 |
+
.mo2f_IR_phone_OTP{
|
5727 |
+
|
5728 |
+
|
5729 |
+
font-size:15px;
|
5730 |
+
|
5731 |
+
|
5732 |
+
width:150px !important;
|
5733 |
+
|
5734 |
+
|
5735 |
}
|
includes/css/front_end_login.css
CHANGED
@@ -1,618 +1,618 @@
|
|
1 |
-
.mo2f_powered_by_miniorange {
|
2 |
-
|
3 |
-
|
4 |
-
width: 100px;
|
5 |
-
|
6 |
-
|
7 |
-
height: 30px;
|
8 |
-
|
9 |
-
|
10 |
-
-webkit-background-size: 100px 25px;
|
11 |
-
|
12 |
-
|
13 |
-
background-size: 100px 25px;
|
14 |
-
|
15 |
-
|
16 |
-
background-repeat: no-repeat;
|
17 |
-
|
18 |
-
|
19 |
-
display: inline-block;
|
20 |
-
|
21 |
-
|
22 |
-
vertical-align: middle;
|
23 |
-
|
24 |
-
|
25 |
-
}
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
.mo2f_powered_by_div {
|
32 |
-
|
33 |
-
|
34 |
-
text-align: right;
|
35 |
-
|
36 |
-
|
37 |
-
font-size: 9px;
|
38 |
-
|
39 |
-
|
40 |
-
padding-right: 5px;
|
41 |
-
|
42 |
-
|
43 |
-
background-color: #FFFFFF;
|
44 |
-
|
45 |
-
|
46 |
-
width: 92%;
|
47 |
-
|
48 |
-
|
49 |
-
border-radius: 6px;
|
50 |
-
|
51 |
-
|
52 |
-
}
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
.mo2f-login-container {
|
59 |
-
|
60 |
-
|
61 |
-
display: inline-block !important;
|
62 |
-
|
63 |
-
|
64 |
-
display: -moz-inline-stack !important;
|
65 |
-
|
66 |
-
|
67 |
-
text-align: center !important;
|
68 |
-
|
69 |
-
|
70 |
-
width: 100%;
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
}
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
.mo2f-textbox {
|
83 |
-
|
84 |
-
|
85 |
-
width: 160px;
|
86 |
-
|
87 |
-
|
88 |
-
margin: 15px 0px !important;
|
89 |
-
|
90 |
-
|
91 |
-
background-color: rgba(123, 110, 110, 0.06) !important;
|
92 |
-
|
93 |
-
|
94 |
-
border-radius: 4px !important;
|
95 |
-
|
96 |
-
|
97 |
-
padding: 3px !important;
|
98 |
-
|
99 |
-
|
100 |
-
}
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
.mo2f-button {
|
107 |
-
|
108 |
-
|
109 |
-
width: 100% !important;
|
110 |
-
|
111 |
-
|
112 |
-
color: #fff !important;
|
113 |
-
|
114 |
-
|
115 |
-
line-height: normal;
|
116 |
-
|
117 |
-
|
118 |
-
height: 30px !important;
|
119 |
-
|
120 |
-
|
121 |
-
margin: 0px !important;
|
122 |
-
|
123 |
-
|
124 |
-
font-size: 14px !important;
|
125 |
-
|
126 |
-
|
127 |
-
padding: 7px !important;
|
128 |
-
|
129 |
-
|
130 |
-
background-color: #f0ad4e !important;
|
131 |
-
|
132 |
-
|
133 |
-
border-color: #eea236 !important;
|
134 |
-
|
135 |
-
|
136 |
-
-webkit-appearance: none;
|
137 |
-
|
138 |
-
|
139 |
-
-webkit-border-radius: 3px !important;
|
140 |
-
|
141 |
-
|
142 |
-
border-radius: 3px !important;
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
}
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
.mo2fa_display_message_login {
|
155 |
-
|
156 |
-
|
157 |
-
text-align: left !important;
|
158 |
-
|
159 |
-
|
160 |
-
font-size: 13px !important;
|
161 |
-
|
162 |
-
|
163 |
-
}
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
.mo2f-link {
|
170 |
-
|
171 |
-
|
172 |
-
color: #0191BF !important;
|
173 |
-
|
174 |
-
|
175 |
-
font-size: 14px !important;
|
176 |
-
|
177 |
-
|
178 |
-
font-weight: bold !important;
|
179 |
-
|
180 |
-
|
181 |
-
cursor: pointer !important;
|
182 |
-
|
183 |
-
|
184 |
-
}
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
.mo_green {
|
191 |
-
|
192 |
-
|
193 |
-
background: #2ECC71 !important;
|
194 |
-
|
195 |
-
|
196 |
-
border-color: #2ECC71 !important;
|
197 |
-
|
198 |
-
|
199 |
-
width: 26% !important;
|
200 |
-
|
201 |
-
|
202 |
-
border-width: 1px;
|
203 |
-
|
204 |
-
|
205 |
-
vertical-align: middle !important;
|
206 |
-
|
207 |
-
|
208 |
-
border-radius: 3px !important;
|
209 |
-
|
210 |
-
|
211 |
-
color: white;
|
212 |
-
|
213 |
-
|
214 |
-
height: 30px;
|
215 |
-
|
216 |
-
|
217 |
-
cursor: pointer;
|
218 |
-
|
219 |
-
|
220 |
-
}
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
.mo_red {
|
227 |
-
|
228 |
-
|
229 |
-
background: #E74C3C !important;
|
230 |
-
|
231 |
-
|
232 |
-
border-color: #E74C3C !important;
|
233 |
-
|
234 |
-
|
235 |
-
width: 26% !important;
|
236 |
-
|
237 |
-
|
238 |
-
border-width: 1px;
|
239 |
-
|
240 |
-
|
241 |
-
vertical-align: middle !important;
|
242 |
-
|
243 |
-
|
244 |
-
border-radius: 3px !important;
|
245 |
-
|
246 |
-
|
247 |
-
color: white;
|
248 |
-
|
249 |
-
|
250 |
-
height: 30px;
|
251 |
-
|
252 |
-
|
253 |
-
cursor: pointer;
|
254 |
-
|
255 |
-
|
256 |
-
}
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
.showQRHelp, .showOTPHelp {
|
263 |
-
|
264 |
-
|
265 |
-
text-align: center !important;
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
}
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
.mo2f_device {
|
278 |
-
|
279 |
-
|
280 |
-
padding-left: 200 px !important;
|
281 |
-
|
282 |
-
|
283 |
-
vertical-align: -webkit-baseline-middle !important;
|
284 |
-
|
285 |
-
|
286 |
-
line-height: 3 !important;
|
287 |
-
|
288 |
-
|
289 |
-
}
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
.miniorange-button {
|
296 |
-
|
297 |
-
|
298 |
-
height: 30px;
|
299 |
-
|
300 |
-
|
301 |
-
font-size: 14px !important;
|
302 |
-
|
303 |
-
|
304 |
-
line-height: 5px !important;
|
305 |
-
|
306 |
-
|
307 |
-
padding: 16px !important;
|
308 |
-
|
309 |
-
|
310 |
-
border-width: 1px;
|
311 |
-
|
312 |
-
|
313 |
-
vertical-align: middle !important;
|
314 |
-
|
315 |
-
|
316 |
-
background-color: #f0ad4e !important;
|
317 |
-
|
318 |
-
|
319 |
-
border-color: #eea236 !important;
|
320 |
-
|
321 |
-
|
322 |
-
-webkit-appearance: none;
|
323 |
-
|
324 |
-
|
325 |
-
border-style: solid;
|
326 |
-
|
327 |
-
|
328 |
-
-webkit-border-radius: 3px !important;
|
329 |
-
|
330 |
-
|
331 |
-
border-radius: 3px !important;
|
332 |
-
|
333 |
-
|
334 |
-
white-space: nowrap;
|
335 |
-
|
336 |
-
|
337 |
-
-webkit-box-sizing: border-box;
|
338 |
-
|
339 |
-
|
340 |
-
-moz-box-sizing: border-box;
|
341 |
-
|
342 |
-
|
343 |
-
box-sizing: border-box;
|
344 |
-
|
345 |
-
|
346 |
-
color: #fff;
|
347 |
-
|
348 |
-
|
349 |
-
text-decoration: none;
|
350 |
-
|
351 |
-
|
352 |
-
cursor: pointer;
|
353 |
-
|
354 |
-
|
355 |
-
}
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
.mo_hr {
|
362 |
-
|
363 |
-
|
364 |
-
border-top: 1px solid rgba(220, 214, 214, 0.25) !important;
|
365 |
-
|
366 |
-
|
367 |
-
margin-top: 5px !important;
|
368 |
-
|
369 |
-
|
370 |
-
margin-right: 10px !important;
|
371 |
-
|
372 |
-
|
373 |
-
}
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
.mo_margin_left {
|
380 |
-
|
381 |
-
|
382 |
-
margin-left: 20px !important;
|
383 |
-
|
384 |
-
|
385 |
-
}
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
.mo_app_link {
|
392 |
-
|
393 |
-
|
394 |
-
text-decoration: none !important;
|
395 |
-
|
396 |
-
|
397 |
-
color: #000 !important;
|
398 |
-
|
399 |
-
|
400 |
-
}
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
.mo2f_td_show {
|
407 |
-
|
408 |
-
|
409 |
-
display: grid !important;
|
410 |
-
|
411 |
-
|
412 |
-
}
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
.mo2f_td_hide {
|
419 |
-
|
420 |
-
|
421 |
-
display: none !important;
|
422 |
-
|
423 |
-
|
424 |
-
}
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
.mo2f_label {
|
431 |
-
|
432 |
-
|
433 |
-
font-weight: 100 !important;
|
434 |
-
|
435 |
-
|
436 |
-
margin-left: 10px !important;
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
}
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
.mo2f_kba_ques {
|
449 |
-
|
450 |
-
|
451 |
-
width: 394px !important;
|
452 |
-
|
453 |
-
|
454 |
-
border-radius: 4px !important;
|
455 |
-
|
456 |
-
|
457 |
-
height: 40px !important;
|
458 |
-
|
459 |
-
|
460 |
-
font-size: 14px !important;
|
461 |
-
|
462 |
-
|
463 |
-
}
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
.mo2f_kba_table {
|
470 |
-
|
471 |
-
|
472 |
-
padding: 0 10px;
|
473 |
-
|
474 |
-
|
475 |
-
width: 100%;
|
476 |
-
|
477 |
-
|
478 |
-
border: hidden !important;
|
479 |
-
|
480 |
-
|
481 |
-
}
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
.mo2f_kba_tb_data {
|
488 |
-
|
489 |
-
|
490 |
-
padding-left: 15px;
|
491 |
-
|
492 |
-
|
493 |
-
}
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
.mo2f_table_textbox_1 {
|
500 |
-
|
501 |
-
|
502 |
-
width: 150px;
|
503 |
-
|
504 |
-
|
505 |
-
height: 30px !important;
|
506 |
-
|
507 |
-
|
508 |
-
font-size: 14px !important;
|
509 |
-
|
510 |
-
|
511 |
-
}
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
.mo2f_table_textbox {
|
518 |
-
|
519 |
-
|
520 |
-
width: 200px;
|
521 |
-
|
522 |
-
|
523 |
-
height: 40px !important;
|
524 |
-
|
525 |
-
|
526 |
-
font-size: 14px !important;
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
}
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
.mo2f_kba_header {
|
539 |
-
|
540 |
-
|
541 |
-
font-weight: bold;
|
542 |
-
|
543 |
-
|
544 |
-
border: hidden !important;
|
545 |
-
|
546 |
-
|
547 |
-
}
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
.mo2f_kba_body {
|
554 |
-
|
555 |
-
|
556 |
-
border: hidden !important;
|
557 |
-
|
558 |
-
|
559 |
-
}
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
.mo2f_separator {
|
566 |
-
|
567 |
-
|
568 |
-
border-left: 1px solid #EBECEC;
|
569 |
-
|
570 |
-
|
571 |
-
padding: 5px;
|
572 |
-
|
573 |
-
|
574 |
-
}
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
.mo2f_authn_header {
|
581 |
-
|
582 |
-
|
583 |
-
font-size: 14px !important;
|
584 |
-
|
585 |
-
|
586 |
-
}
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
#mo2f_inline_table {
|
593 |
-
|
594 |
-
|
595 |
-
border: hidden !important;
|
596 |
-
|
597 |
-
|
598 |
-
}
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
.mo2f_ordered_list {
|
605 |
-
|
606 |
-
|
607 |
-
margin: 0 0 0 1em !important;
|
608 |
-
|
609 |
-
|
610 |
-
}
|
611 |
-
|
612 |
-
.mo2f_list {
|
613 |
-
|
614 |
-
|
615 |
-
font-size: 14px !important;
|
616 |
-
|
617 |
-
|
618 |
-
}
|
1 |
+
.mo2f_powered_by_miniorange {
|
2 |
+
|
3 |
+
|
4 |
+
width: 100px;
|
5 |
+
|
6 |
+
|
7 |
+
height: 30px;
|
8 |
+
|
9 |
+
|
10 |
+
-webkit-background-size: 100px 25px;
|
11 |
+
|
12 |
+
|
13 |
+
background-size: 100px 25px;
|
14 |
+
|
15 |
+
|
16 |
+
background-repeat: no-repeat;
|
17 |
+
|
18 |
+
|
19 |
+
display: inline-block;
|
20 |
+
|
21 |
+
|
22 |
+
vertical-align: middle;
|
23 |
+
|
24 |
+
|
25 |
+
}
|
26 |
+
|
27 |
+
|
28 |
+
|
29 |
+
|
30 |
+
|
31 |
+
.mo2f_powered_by_div {
|
32 |
+
|
33 |
+
|
34 |
+
text-align: right;
|
35 |
+
|
36 |
+
|
37 |
+
font-size: 9px;
|
38 |
+
|
39 |
+
|
40 |
+
padding-right: 5px;
|
41 |
+
|
42 |
+
|
43 |
+
background-color: #FFFFFF;
|
44 |
+
|
45 |
+
|
46 |
+
width: 92%;
|
47 |
+
|
48 |
+
|
49 |
+
border-radius: 6px;
|
50 |
+
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
|
55 |
+
|
56 |
+
|
57 |
+
|
58 |
+
.mo2f-login-container {
|
59 |
+
|
60 |
+
|
61 |
+
display: inline-block !important;
|
62 |
+
|
63 |
+
|
64 |
+
display: -moz-inline-stack !important;
|
65 |
+
|
66 |
+
|
67 |
+
text-align: center !important;
|
68 |
+
|
69 |
+
|
70 |
+
width: 100%;
|
71 |
+
|
72 |
+
|
73 |
+
|
74 |
+
|
75 |
+
|
76 |
+
}
|
77 |
+
|
78 |
+
|
79 |
+
|
80 |
+
|
81 |
+
|
82 |
+
.mo2f-textbox {
|
83 |
+
|
84 |
+
|
85 |
+
width: 160px;
|
86 |
+
|
87 |
+
|
88 |
+
margin: 15px 0px !important;
|
89 |
+
|
90 |
+
|
91 |
+
background-color: rgba(123, 110, 110, 0.06) !important;
|
92 |
+
|
93 |
+
|
94 |
+
border-radius: 4px !important;
|
95 |
+
|
96 |
+
|
97 |
+
padding: 3px !important;
|
98 |
+
|
99 |
+
|
100 |
+
}
|
101 |
+
|
102 |
+
|
103 |
+
|
104 |
+
|
105 |
+
|
106 |
+
.mo2f-button {
|
107 |
+
|
108 |
+
|
109 |
+
width: 100% !important;
|
110 |
+
|
111 |
+
|
112 |
+
color: #fff !important;
|
113 |
+
|
114 |
+
|
115 |
+
line-height: normal;
|
116 |
+
|
117 |
+
|
118 |
+
height: 30px !important;
|
119 |
+
|
120 |
+
|
121 |
+
margin: 0px !important;
|
122 |
+
|
123 |
+
|
124 |
+
font-size: 14px !important;
|
125 |
+
|
126 |
+
|
127 |
+
padding: 7px !important;
|
128 |
+
|
129 |
+
|
130 |
+
background-color: #f0ad4e !important;
|
131 |
+
|
132 |
+
|
133 |
+
border-color: #eea236 !important;
|
134 |
+
|
135 |
+
|
136 |
+
-webkit-appearance: none;
|
137 |
+
|
138 |
+
|
139 |
+
-webkit-border-radius: 3px !important;
|
140 |
+
|
141 |
+
|
142 |
+
border-radius: 3px !important;
|
143 |
+
|
144 |
+
|
145 |
+
|
146 |
+
|
147 |
+
|
148 |
+
}
|
149 |
+
|
150 |
+
|
151 |
+
|
152 |
+
|
153 |
+
|
154 |
+
.mo2fa_display_message_login {
|
155 |
+
|
156 |
+
|
157 |
+
text-align: left !important;
|
158 |
+
|
159 |
+
|
160 |
+
font-size: 13px !important;
|
161 |
+
|
162 |
+
|
163 |
+
}
|
164 |
+
|
165 |
+
|
166 |
+
|
167 |
+
|
168 |
+
|
169 |
+
.mo2f-link {
|
170 |
+
|
171 |
+
|
172 |
+
color: #0191BF !important;
|
173 |
+
|
174 |
+
|
175 |
+
font-size: 14px !important;
|
176 |
+
|
177 |
+
|
178 |
+
font-weight: bold !important;
|
179 |
+
|
180 |
+
|
181 |
+
cursor: pointer !important;
|
182 |
+
|
183 |
+
|
184 |
+
}
|
185 |
+
|
186 |
+
|
187 |
+
|
188 |
+
|
189 |
+
|
190 |
+
.mo_green {
|
191 |
+
|
192 |
+
|
193 |
+
background: #2ECC71 !important;
|
194 |
+
|
195 |
+
|
196 |
+
border-color: #2ECC71 !important;
|
197 |
+
|
198 |
+
|
199 |
+
width: 26% !important;
|
200 |
+
|
201 |
+
|
202 |
+
border-width: 1px;
|
203 |
+
|
204 |
+
|
205 |
+
vertical-align: middle !important;
|
206 |
+
|
207 |
+
|
208 |
+
border-radius: 3px !important;
|
209 |
+
|
210 |
+
|
211 |
+
color: white;
|
212 |
+
|
213 |
+
|
214 |
+
height: 30px;
|
215 |
+
|
216 |
+
|
217 |
+
cursor: pointer;
|
218 |
+
|
219 |
+
|
220 |
+
}
|
221 |
+
|
222 |
+
|
223 |
+
|
224 |
+
|
225 |
+
|
226 |
+
.mo_red {
|
227 |
+
|
228 |
+
|
229 |
+
background: #E74C3C !important;
|
230 |
+
|
231 |
+
|
232 |
+
border-color: #E74C3C !important;
|
233 |
+
|
234 |
+
|
235 |
+
width: 26% !important;
|
236 |
+
|
237 |
+
|
238 |
+
border-width: 1px;
|
239 |
+
|
240 |
+
|
241 |
+
vertical-align: middle !important;
|
242 |
+
|
243 |
+
|
244 |
+
border-radius: 3px !important;
|
245 |
+
|
246 |
+
|
247 |
+
color: white;
|
248 |
+
|
249 |
+
|
250 |
+
height: 30px;
|
251 |
+
|
252 |
+
|
253 |
+
cursor: pointer;
|
254 |
+
|
255 |
+
|
256 |
+
}
|
257 |
+
|
258 |
+
|
259 |
+
|
260 |
+
|
261 |
+
|
262 |
+
.showQRHelp, .showOTPHelp {
|
263 |
+
|
264 |
+
|
265 |
+
text-align: center !important;
|
266 |
+
|
267 |
+
|
268 |
+
|
269 |
+
|
270 |
+
|
271 |
+
}
|
272 |
+
|
273 |
+
|
274 |
+
|
275 |
+
|
276 |
+
|
277 |
+
.mo2f_device {
|
278 |
+
|
279 |
+
|
280 |
+
padding-left: 200 px !important;
|
281 |
+
|
282 |
+
|
283 |
+
vertical-align: -webkit-baseline-middle !important;
|
284 |
+
|
285 |
+
|
286 |
+
line-height: 3 !important;
|
287 |
+
|
288 |
+
|
289 |
+
}
|
290 |
+
|
291 |
+
|
292 |
+
|
293 |
+
|
294 |
+
|
295 |
+
.miniorange-button {
|
296 |
+
|
297 |
+
|
298 |
+
height: 30px;
|
299 |
+
|
300 |
+
|
301 |
+
font-size: 14px !important;
|
302 |
+
|
303 |
+
|
304 |
+
line-height: 5px !important;
|
305 |
+
|
306 |
+
|
307 |
+
padding: 16px !important;
|
308 |
+
|
309 |
+
|
310 |
+
border-width: 1px;
|
311 |
+
|
312 |
+
|
313 |
+
vertical-align: middle !important;
|
314 |
+
|
315 |
+
|
316 |
+
background-color: #f0ad4e !important;
|
317 |
+
|
318 |
+
|
319 |
+
border-color: #eea236 !important;
|
320 |
+
|
321 |
+
|
322 |
+
-webkit-appearance: none;
|
323 |
+
|
324 |
+
|
325 |
+
border-style: solid;
|
326 |
+
|
327 |
+
|
328 |
+
-webkit-border-radius: 3px !important;
|
329 |
+
|
330 |
+
|
331 |
+
border-radius: 3px !important;
|
332 |
+
|
333 |
+
|
334 |
+
white-space: nowrap;
|
335 |
+
|
336 |
+
|
337 |
+
-webkit-box-sizing: border-box;
|
338 |
+
|
339 |
+
|
340 |
+
-moz-box-sizing: border-box;
|
341 |
+
|
342 |
+
|
343 |
+
box-sizing: border-box;
|
344 |
+
|
345 |
+
|
346 |
+
color: #fff;
|
347 |
+
|
348 |
+
|
349 |
+
text-decoration: none;
|
350 |
+
|
351 |
+
|
352 |
+
cursor: pointer;
|
353 |
+
|
354 |
+
|
355 |
+
}
|
356 |
+
|
357 |
+
|
358 |
+
|
359 |
+
|
360 |
+
|
361 |
+
.mo_hr {
|
362 |
+
|
363 |
+
|
364 |
+
border-top: 1px solid rgba(220, 214, 214, 0.25) !important;
|
365 |
+
|
366 |
+
|
367 |
+
margin-top: 5px !important;
|
368 |
+
|
369 |
+
|
370 |
+
margin-right: 10px !important;
|
371 |
+
|
372 |
+
|
373 |
+
}
|
374 |
+
|
375 |
+
|
376 |
+
|
377 |
+
|
378 |
+
|
379 |
+
.mo_margin_left {
|
380 |
+
|
381 |
+
|
382 |
+
margin-left: 20px !important;
|
383 |
+
|
384 |
+
|
385 |
+
}
|
386 |
+
|
387 |
+
|
388 |
+
|
389 |
+
|
390 |
+
|
391 |
+
.mo_app_link {
|
392 |
+
|
393 |
+
|
394 |
+
text-decoration: none !important;
|
395 |
+
|
396 |
+
|
397 |
+
color: #000 !important;
|
398 |
+
|
399 |
+
|
400 |
+
}
|
401 |
+
|
402 |
+
|
403 |
+
|
404 |
+
|
405 |
+
|
406 |
+
.mo2f_td_show {
|
407 |
+
|
408 |
+
|
409 |
+
display: grid !important;
|
410 |
+
|
411 |
+
|
412 |
+
}
|
413 |
+
|
414 |
+
|
415 |
+
|
416 |
+
|
417 |
+
|
418 |
+
.mo2f_td_hide {
|
419 |
+
|
420 |
+
|
421 |
+
display: none !important;
|
422 |
+
|
423 |
+
|
424 |
+
}
|
425 |
+
|
426 |
+
|
427 |
+
|
428 |
+
|
429 |
+
|
430 |
+
.mo2f_label {
|
431 |
+
|
432 |
+
|
433 |
+
font-weight: 100 !important;
|
434 |
+
|
435 |
+
|
436 |
+
margin-left: 10px !important;
|
437 |
+
|
438 |
+
|
439 |
+
|
440 |
+
|
441 |
+
|
442 |
+
}
|
443 |
+
|
444 |
+
|
445 |
+
|
446 |
+
|
447 |
+
|
448 |
+
.mo2f_kba_ques {
|
449 |
+
|
450 |
+
|
451 |
+
width: 394px !important;
|
452 |
+
|
453 |
+
|
454 |
+
border-radius: 4px !important;
|
455 |
+
|
456 |
+
|
457 |
+
height: 40px !important;
|
458 |
+
|
459 |
+
|
460 |
+
font-size: 14px !important;
|
461 |
+
|
462 |
+
|
463 |
+
}
|
464 |
+
|
465 |
+
|
466 |
+
|
467 |
+
|
468 |
+
|
469 |
+
.mo2f_kba_table {
|
470 |
+
|
471 |
+
|
472 |
+
padding: 0 10px;
|
473 |
+
|
474 |
+
|
475 |
+
width: 100%;
|
476 |
+
|
477 |
+
|
478 |
+
border: hidden !important;
|
479 |
+
|
480 |
+
|
481 |
+
}
|
482 |
+
|
483 |
+
|
484 |
+
|
485 |
+
|
486 |
+
|
487 |
+
.mo2f_kba_tb_data {
|
488 |
+
|
489 |
+
|
490 |
+
padding-left: 15px;
|
491 |
+
|
492 |
+
|
493 |
+
}
|
494 |
+
|
495 |
+
|
496 |
+
|
497 |
+
|
498 |
+
|
499 |
+
.mo2f_table_textbox_1 {
|
500 |
+
|
501 |
+
|
502 |
+
width: 150px;
|
503 |
+
|
504 |
+
|
505 |
+
height: 30px !important;
|
506 |
+
|
507 |
+
|
508 |
+
font-size: 14px !important;
|
509 |
+
|
510 |
+
|
511 |
+
}
|
512 |
+
|
513 |
+
|
514 |
+
|
515 |
+
|
516 |
+
|
517 |
+
.mo2f_table_textbox {
|
518 |
+
|
519 |
+
|
520 |
+
width: 200px;
|
521 |
+
|
522 |
+
|
523 |
+
height: 40px !important;
|
524 |
+
|
525 |
+
|
526 |
+
font-size: 14px !important;
|
527 |
+
|
528 |
+
|
529 |
+
|
530 |
+
|
531 |
+
|
532 |
+
}
|
533 |
+
|
534 |
+
|
535 |
+
|
536 |
+
|
537 |
+
|
538 |
+
.mo2f_kba_header {
|
539 |
+
|
540 |
+
|
541 |
+
font-weight: bold;
|
542 |
+
|
543 |
+
|
544 |
+
border: hidden !important;
|
545 |
+
|
546 |
+
|
547 |
+
}
|
548 |
+
|
549 |
+
|
550 |
+
|
551 |
+
|
552 |
+
|
553 |
+
.mo2f_kba_body {
|
554 |
+
|
555 |
+
|
556 |
+
border: hidden !important;
|
557 |
+
|
558 |
+
|
559 |
+
}
|
560 |
+
|
561 |
+
|
562 |
+
|
563 |
+
|
564 |
+
|
565 |
+
.mo2f_separator {
|
566 |
+
|
567 |
+
|
568 |
+
border-left: 1px solid #EBECEC;
|
569 |
+
|
570 |
+
|
571 |
+
padding: 5px;
|
572 |
+
|
573 |
+
|
574 |
+
}
|
575 |
+
|
576 |
+
|
577 |
+
|
578 |
+
|
579 |
+
|
580 |
+
.mo2f_authn_header {
|
581 |
+
|
582 |
+
|
583 |
+
font-size: 14px !important;
|
584 |
+
|
585 |
+
|
586 |
+
}
|
587 |
+
|
588 |
+
|
589 |
+
|
590 |
+
|
591 |
+
|
592 |
+
#mo2f_inline_table {
|
593 |
+
|
594 |
+
|
595 |
+
border: hidden !important;
|
596 |
+
|
597 |
+
|
598 |
+
}
|
599 |
+
|
600 |
+
|
601 |
+
|
602 |
+
|
603 |
+
|
604 |
+
.mo2f_ordered_list {
|
605 |
+
|
606 |
+
|
607 |
+
margin: 0 0 0 1em !important;
|
608 |
+
|
609 |
+
|
610 |
+
}
|
611 |
+
|
612 |
+
.mo2f_list {
|
613 |
+
|
614 |
+
|
615 |
+
font-size: 14px !important;
|
616 |
+
|
617 |
+
|
618 |
+
}
|
includes/css/jquery.ui.css
CHANGED
@@ -1,743 +1,743 @@
|
|
1 |
-
/*! jQuery UI - v1.11.4 - 2015-07-30
|
2 |
-
* http://jqueryui.com
|
3 |
-
* Includes: core.css, draggable.css, resizable.css, button.css, dialog.css, theme.css
|
4 |
-
* To view and modify this theme, visit http://jqueryui.com/themeroller/
|
5 |
-
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
|
6 |
-
|
7 |
-
/* Layout helpers
|
8 |
-
----------------------------------*/
|
9 |
-
.ui-helper-hidden {
|
10 |
-
display: none;
|
11 |
-
}
|
12 |
-
.ui-helper-hidden-accessible {
|
13 |
-
border: 0;
|
14 |
-
clip: rect(0 0 0 0);
|
15 |
-
height: 1px;
|
16 |
-
margin: -1px;
|
17 |
-
overflow: hidden;
|
18 |
-
padding: 0;
|
19 |
-
position: absolute;
|
20 |
-
width: 1px;
|
21 |
-
}
|
22 |
-
.ui-helper-reset {
|
23 |
-
margin: 0;
|
24 |
-
padding: 0;
|
25 |
-
border: 0;
|
26 |
-
outline: 0;
|
27 |
-
line-height: 1.3;
|
28 |
-
text-decoration: none;
|
29 |
-
font-size: 100%;
|
30 |
-
list-style: none;
|
31 |
-
}
|
32 |
-
.ui-helper-clearfix:before,
|
33 |
-
.ui-helper-clearfix:after {
|
34 |
-
content: "";
|
35 |
-
display: table;
|
36 |
-
border-collapse: collapse;
|
37 |
-
}
|
38 |
-
.ui-helper-clearfix:after {
|
39 |
-
clear: both;
|
40 |
-
}
|
41 |
-
.ui-helper-clearfix {
|
42 |
-
min-height: 0; /* support: IE7 */
|
43 |
-
}
|
44 |
-
.ui-helper-zfix {
|
45 |
-
width: 100%;
|
46 |
-
height: 100%;
|
47 |
-
top: 0;
|
48 |
-
left: 0;
|
49 |
-
position: absolute;
|
50 |
-
opacity: 0;
|
51 |
-
filter:Alpha(Opacity=0); /* support: IE8 */
|
52 |
-
}
|
53 |
-
|
54 |
-
.ui-front {
|
55 |
-
z-index: 100;
|
56 |
-
}
|
57 |
-
|
58 |
-
|
59 |
-
/* Interaction Cues
|
60 |
-
----------------------------------*/
|
61 |
-
.ui-state-disabled {
|
62 |
-
cursor: default !important;
|
63 |
-
}
|
64 |
-
|
65 |
-
|
66 |
-
/* Icons
|
67 |
-
----------------------------------*/
|
68 |
-
|
69 |
-
/* states and images */
|
70 |
-
.ui-icon {
|
71 |
-
display: block;
|
72 |
-
text-indent: -99999px;
|
73 |
-
overflow: hidden;
|
74 |
-
background-repeat: no-repeat;
|
75 |
-
}
|
76 |
-
|
77 |
-
|
78 |
-
/* Misc visuals
|
79 |
-
----------------------------------*/
|
80 |
-
|
81 |
-
/* Overlays */
|
82 |
-
.ui-widget-overlay {
|
83 |
-
position: fixed;
|
84 |
-
top: 0;
|
85 |
-
left: 0;
|
86 |
-
width: 100%;
|
87 |
-
height: 100%;
|
88 |
-
}
|
89 |
-
.ui-draggable-handle {
|
90 |
-
-ms-touch-action: none;
|
91 |
-
touch-action: none;
|
92 |
-
}
|
93 |
-
.ui-resizable {
|
94 |
-
position: relative;
|
95 |
-
}
|
96 |
-
.ui-resizable-handle {
|
97 |
-
position: absolute;
|
98 |
-
font-size: 0.1px;
|
99 |
-
display: block;
|
100 |
-
-ms-touch-action: none;
|
101 |
-
touch-action: none;
|
102 |
-
}
|
103 |
-
.ui-resizable-disabled .ui-resizable-handle,
|
104 |
-
.ui-resizable-autohide .ui-resizable-handle {
|
105 |
-
display: none;
|
106 |
-
}
|
107 |
-
.ui-resizable-n {
|
108 |
-
cursor: n-resize;
|
109 |
-
height: 7px;
|
110 |
-
width: 100%;
|
111 |
-
top: -5px;
|
112 |
-
left: 0;
|
113 |
-
}
|
114 |
-
.ui-resizable-s {
|
115 |
-
cursor: s-resize;
|
116 |
-
height: 7px;
|
117 |
-
width: 100%;
|
118 |
-
bottom: -5px;
|
119 |
-
left: 0;
|
120 |
-
}
|
121 |
-
.ui-resizable-e {
|
122 |
-
cursor: e-resize;
|
123 |
-
width: 7px;
|
124 |
-
right: -5px;
|
125 |
-
top: 0;
|
126 |
-
height: 100%;
|
127 |
-
}
|
128 |
-
.ui-resizable-w {
|
129 |
-
cursor: w-resize;
|
130 |
-
width: 7px;
|
131 |
-
left: -5px;
|
132 |
-
top: 0;
|
133 |
-
height: 100%;
|
134 |
-
}
|
135 |
-
.ui-resizable-se {
|
136 |
-
cursor: se-resize;
|
137 |
-
width: 12px;
|
138 |
-
height: 12px;
|
139 |
-
right: 1px;
|
140 |
-
bottom: 1px;
|
141 |
-
}
|
142 |
-
.ui-resizable-sw {
|
143 |
-
cursor: sw-resize;
|
144 |
-
width: 9px;
|
145 |
-
height: 9px;
|
146 |
-
left: -5px;
|
147 |
-
bottom: -5px;
|
148 |
-
}
|
149 |
-
.ui-resizable-nw {
|
150 |
-
cursor: nw-resize;
|
151 |
-
width: 9px;
|
152 |
-
height: 9px;
|
153 |
-
left: -5px;
|
154 |
-
top: -5px;
|
155 |
-
}
|
156 |
-
.ui-resizable-ne {
|
157 |
-
cursor: ne-resize;
|
158 |
-
width: 9px;
|
159 |
-
height: 9px;
|
160 |
-
right: -5px;
|
161 |
-
top: -5px;
|
162 |
-
}
|
163 |
-
.ui-button {
|
164 |
-
display: inline-block;
|
165 |
-
position: relative;
|
166 |
-
padding: 0;
|
167 |
-
line-height: normal;
|
168 |
-
margin-right: .1em;
|
169 |
-
cursor: pointer;
|
170 |
-
vertical-align: middle;
|
171 |
-
text-align: center;
|
172 |
-
overflow: visible; /* removes extra width in IE */
|
173 |
-
}
|
174 |
-
.ui-button,
|
175 |
-
.ui-button:link,
|
176 |
-
.ui-button:visited,
|
177 |
-
.ui-button:hover,
|
178 |
-
.ui-button:active {
|
179 |
-
text-decoration: none;
|
180 |
-
}
|
181 |
-
/* to make room for the icon, a width needs to be set here */
|
182 |
-
.ui-button-icon-only {
|
183 |
-
width: 2.2em;
|
184 |
-
}
|
185 |
-
/* button elements seem to need a little more width */
|
186 |
-
button.ui-button-icon-only {
|
187 |
-
width: 2.4em;
|
188 |
-
}
|
189 |
-
.ui-button-icons-only {
|
190 |
-
width: 3.4em;
|
191 |
-
}
|
192 |
-
button.ui-button-icons-only {
|
193 |
-
width: 3.7em;
|
194 |
-
}
|
195 |
-
|
196 |
-
/* button text element */
|
197 |
-
.ui-button .ui-button-text {
|
198 |
-
display: block;
|
199 |
-
line-height: normal;
|
200 |
-
}
|
201 |
-
.ui-button-text-only .ui-button-text {
|
202 |
-
padding: .4em 1em;
|
203 |
-
}
|
204 |
-
.ui-button-icon-only .ui-button-text,
|
205 |
-
.ui-button-icons-only .ui-button-text {
|
206 |
-
padding: .4em;
|
207 |
-
text-indent: -9999999px;
|
208 |
-
}
|
209 |
-
.ui-button-text-icon-primary .ui-button-text,
|
210 |
-
.ui-button-text-icons .ui-button-text {
|
211 |
-
padding: .4em 1em .4em 2.1em;
|
212 |
-
}
|
213 |
-
.ui-button-text-icon-secondary .ui-button-text,
|
214 |
-
.ui-button-text-icons .ui-button-text {
|
215 |
-
padding: .4em 2.1em .4em 1em;
|
216 |
-
}
|
217 |
-
.ui-button-text-icons .ui-button-text {
|
218 |
-
padding-left: 2.1em;
|
219 |
-
padding-right: 2.1em;
|
220 |
-
}
|
221 |
-
/* no icon support for input elements, provide padding by default */
|
222 |
-
input.ui-button {
|
223 |
-
padding: .4em 1em;
|
224 |
-
}
|
225 |
-
|
226 |
-
/* button icon element(s) */
|
227 |
-
.ui-button-icon-only .ui-icon,
|
228 |
-
.ui-button-text-icon-primary .ui-icon,
|
229 |
-
.ui-button-text-icon-secondary .ui-icon,
|
230 |
-
.ui-button-text-icons .ui-icon,
|
231 |
-
.ui-button-icons-only .ui-icon {
|
232 |
-
position: absolute;
|
233 |
-
top: 50%;
|
234 |
-
margin-top: -8px;
|
235 |
-
}
|
236 |
-
.ui-button-icon-only .ui-icon {
|
237 |
-
left: 50%;
|
238 |
-
margin-left: -8px;
|
239 |
-
}
|
240 |
-
.ui-button-text-icon-primary .ui-button-icon-primary,
|
241 |
-
.ui-button-text-icons .ui-button-icon-primary,
|
242 |
-
.ui-button-icons-only .ui-button-icon-primary {
|
243 |
-
left: .5em;
|
244 |
-
}
|
245 |
-
.ui-button-text-icon-secondary .ui-button-icon-secondary,
|
246 |
-
.ui-button-text-icons .ui-button-icon-secondary,
|
247 |
-
.ui-button-icons-only .ui-button-icon-secondary {
|
248 |
-
right: .5em;
|
249 |
-
}
|
250 |
-
|
251 |
-
/* button sets */
|
252 |
-
.ui-buttonset {
|
253 |
-
margin-right: 7px;
|
254 |
-
}
|
255 |
-
.ui-buttonset .ui-button {
|
256 |
-
margin-left: 0;
|
257 |
-
margin-right: -.3em;
|
258 |
-
}
|
259 |
-
|
260 |
-
/* workarounds */
|
261 |
-
/* reset extra padding in Firefox, see h5bp.com/l */
|
262 |
-
input.ui-button::-moz-focus-inner,
|
263 |
-
button.ui-button::-moz-focus-inner {
|
264 |
-
border: 0;
|
265 |
-
padding: 0;
|
266 |
-
}
|
267 |
-
.ui-dialog {
|
268 |
-
overflow: hidden;
|
269 |
-
position: absolute;
|
270 |
-
top: 0;
|
271 |
-
left: 0;
|
272 |
-
padding: .2em;
|
273 |
-
outline: 0;
|
274 |
-
width: 450px !important;
|
275 |
-
font-family: "Times New Roman", Times, serif !important;
|
276 |
-
font-size:16px !important;
|
277 |
-
z-index:200 !important;
|
278 |
-
|
279 |
-
}
|
280 |
-
.ui-dialog .ui-dialog-titlebar {
|
281 |
-
padding: .4em 1em;
|
282 |
-
position: relative;
|
283 |
-
}
|
284 |
-
.ui-dialog .ui-dialog-title {
|
285 |
-
float: left;
|
286 |
-
margin: .1em 0;
|
287 |
-
white-space: nowrap;
|
288 |
-
width: 90%;
|
289 |
-
overflow: hidden;
|
290 |
-
text-overflow: ellipsis;
|
291 |
-
}
|
292 |
-
.ui-dialog .ui-dialog-titlebar-close {
|
293 |
-
position: absolute;
|
294 |
-
right: .3em;
|
295 |
-
top: 50%;
|
296 |
-
width: 20px;
|
297 |
-
margin: -10px 0 0 0;
|
298 |
-
padding: 1px;
|
299 |
-
height: 20px;
|
300 |
-
}
|
301 |
-
.ui-dialog .ui-dialog-content {
|
302 |
-
position: relative;
|
303 |
-
border: 0;
|
304 |
-
padding: .5em 1em;
|
305 |
-
background: none;
|
306 |
-
overflow: auto;
|
307 |
-
}
|
308 |
-
.ui-dialog .ui-dialog-buttonpane {
|
309 |
-
text-align: left;
|
310 |
-
border-width: 1px 0 0 0;
|
311 |
-
background-image: none;
|
312 |
-
margin-top: .5em;
|
313 |
-
padding: .3em 1em .5em .4em;
|
314 |
-
}
|
315 |
-
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
316 |
-
float: right;
|
317 |
-
}
|
318 |
-
.ui-dialog .ui-dialog-buttonpane button {
|
319 |
-
margin: .5em .4em .5em 0;
|
320 |
-
cursor: pointer;
|
321 |
-
}
|
322 |
-
.ui-dialog .ui-resizable-se {
|
323 |
-
width: 12px;
|
324 |
-
height: 12px;
|
325 |
-
right: -5px;
|
326 |
-
bottom: -5px;
|
327 |
-
background-position: 16px 16px;
|
328 |
-
}
|
329 |
-
.ui-draggable .ui-dialog-titlebar {
|
330 |
-
cursor: move;
|
331 |
-
}
|
332 |
-
|
333 |
-
/* Component containers
|
334 |
-
----------------------------------*/
|
335 |
-
.ui-widget {
|
336 |
-
font-family: Verdana,Arial,sans-serif;
|
337 |
-
font-size: 1.1em;
|
338 |
-
}
|
339 |
-
.ui-widget .ui-widget {
|
340 |
-
font-size: 1em;
|
341 |
-
}
|
342 |
-
.ui-widget input,
|
343 |
-
.ui-widget select,
|
344 |
-
.ui-widget textarea,
|
345 |
-
.ui-widget button {
|
346 |
-
font-family: Verdana,Arial,sans-serif;
|
347 |
-
font-size: 1em;
|
348 |
-
}
|
349 |
-
.ui-widget-content {
|
350 |
-
border: 1px solid #aaaaaa;
|
351 |
-
background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
|
352 |
-
color: #222222;
|
353 |
-
}
|
354 |
-
.ui-widget-content a {
|
355 |
-
color: #222222;
|
356 |
-
}
|
357 |
-
.ui-widget-header {
|
358 |
-
border: 1px solid #aaaaaa;
|
359 |
-
background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
|
360 |
-
color: #222222;
|
361 |
-
font-weight: bold;
|
362 |
-
}
|
363 |
-
.ui-widget-header a {
|
364 |
-
color: #222222;
|
365 |
-
}
|
366 |
-
|
367 |
-
/* Interaction states
|
368 |
-
----------------------------------*/
|
369 |
-
.ui-state-default,
|
370 |
-
.ui-widget-content .ui-state-default,
|
371 |
-
.ui-widget-header .ui-state-default {
|
372 |
-
border: 1px solid #d3d3d3;
|
373 |
-
background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
|
374 |
-
font-weight: normal;
|
375 |
-
color: #555555;
|
376 |
-
}
|
377 |
-
.ui-state-default a,
|
378 |
-
.ui-state-default a:link,
|
379 |
-
.ui-state-default a:visited {
|
380 |
-
color: #555555;
|
381 |
-
text-decoration: none;
|
382 |
-
}
|
383 |
-
.ui-state-hover,
|
384 |
-
.ui-widget-content .ui-state-hover,
|
385 |
-
.ui-widget-header .ui-state-hover,
|
386 |
-
.ui-state-focus,
|
387 |
-
.ui-widget-content .ui-state-focus,
|
388 |
-
.ui-widget-header .ui-state-focus {
|
389 |
-
border: 1px solid #999999;
|
390 |
-
background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
|
391 |
-
font-weight: normal;
|
392 |
-
color: #212121;
|
393 |
-
}
|
394 |
-
.ui-state-hover a,
|
395 |
-
.ui-state-hover a:hover,
|
396 |
-
.ui-state-hover a:link,
|
397 |
-
.ui-state-hover a:visited,
|
398 |
-
.ui-state-focus a,
|
399 |
-
.ui-state-focus a:hover,
|
400 |
-
.ui-state-focus a:link,
|
401 |
-
.ui-state-focus a:visited {
|
402 |
-
color: #212121;
|
403 |
-
text-decoration: none;
|
404 |
-
}
|
405 |
-
.ui-state-active,
|
406 |
-
.ui-widget-content .ui-state-active,
|
407 |
-
.ui-widget-header .ui-state-active {
|
408 |
-
border: 1px solid #aaaaaa;
|
409 |
-
background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
|
410 |
-
font-weight: normal;
|
411 |
-
color: #212121;
|
412 |
-
}
|
413 |
-
.ui-state-active a,
|
414 |
-
.ui-state-active a:link,
|
415 |
-
.ui-state-active a:visited {
|
416 |
-
color: #212121;
|
417 |
-
text-decoration: none;
|
418 |
-
}
|
419 |
-
|
420 |
-
/* Interaction Cues
|
421 |
-
----------------------------------*/
|
422 |
-
.ui-state-highlight,
|
423 |
-
.ui-widget-content .ui-state-highlight,
|
424 |
-
.ui-widget-header .ui-state-highlight {
|
425 |
-
border: 1px solid #fcefa1;
|
426 |
-
background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
|
427 |
-
color: #363636;
|
428 |
-
}
|
429 |
-
.ui-state-highlight a,
|
430 |
-
.ui-widget-content .ui-state-highlight a,
|
431 |
-
.ui-widget-header .ui-state-highlight a {
|
432 |
-
color: #363636;
|
433 |
-
}
|
434 |
-
.ui-state-error,
|
435 |
-
.ui-widget-content .ui-state-error,
|
436 |
-
.ui-widget-header .ui-state-error {
|
437 |
-
border: 1px solid #cd0a0a;
|
438 |
-
background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
|
439 |
-
color: #cd0a0a;
|
440 |
-
}
|
441 |
-
.ui-state-error a,
|
442 |
-
.ui-widget-content .ui-state-error a,
|
443 |
-
.ui-widget-header .ui-state-error a {
|
444 |
-
color: #cd0a0a;
|
445 |
-
}
|
446 |
-
.ui-state-error-text,
|
447 |
-
.ui-widget-content .ui-state-error-text,
|
448 |
-
.ui-widget-header .ui-state-error-text {
|
449 |
-
color: #cd0a0a;
|
450 |
-
}
|
451 |
-
.ui-priority-primary,
|
452 |
-
.ui-widget-content .ui-priority-primary,
|
453 |
-
.ui-widget-header .ui-priority-primary {
|
454 |
-
font-weight: bold;
|
455 |
-
}
|
456 |
-
.ui-priority-secondary,
|
457 |
-
.ui-widget-content .ui-priority-secondary,
|
458 |
-
.ui-widget-header .ui-priority-secondary {
|
459 |
-
opacity: .7;
|
460 |
-
filter:Alpha(Opacity=70); /* support: IE8 */
|
461 |
-
font-weight: normal;
|
462 |
-
}
|
463 |
-
.ui-state-disabled,
|
464 |
-
.ui-widget-content .ui-state-disabled,
|
465 |
-
.ui-widget-header .ui-state-disabled {
|
466 |
-
opacity: .35;
|
467 |
-
filter:Alpha(Opacity=35); /* support: IE8 */
|
468 |
-
background-image: none;
|
469 |
-
}
|
470 |
-
.ui-state-disabled .ui-icon {
|
471 |
-
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
|
472 |
-
}
|
473 |
-
|
474 |
-
/* Icons
|
475 |
-
----------------------------------*/
|
476 |
-
|
477 |
-
/* states and images */
|
478 |
-
.ui-icon {
|
479 |
-
width: 16px;
|
480 |
-
height: 16px;
|
481 |
-
}
|
482 |
-
.ui-icon,
|
483 |
-
.ui-widget-content .ui-icon {
|
484 |
-
background-image: url("images/ui-icons_222222_256x240.png");
|
485 |
-
}
|
486 |
-
.ui-widget-header .ui-icon {
|
487 |
-
background-image: url("images/ui-icons_222222_256x240.png");
|
488 |
-
}
|
489 |
-
.ui-state-default .ui-icon {
|
490 |
-
background-image: url("images/ui-icons_888888_256x240.png");
|
491 |
-
}
|
492 |
-
.ui-state-hover .ui-icon,
|
493 |
-
.ui-state-focus .ui-icon {
|
494 |
-
background-image: url("images/ui-icons_454545_256x240.png");
|
495 |
-
}
|
496 |
-
.ui-state-active .ui-icon {
|
497 |
-
background-image: url("images/ui-icons_454545_256x240.png");
|
498 |
-
}
|
499 |
-
.ui-state-highlight .ui-icon {
|
500 |
-
background-image: url("images/ui-icons_2e83ff_256x240.png");
|
501 |
-
}
|
502 |
-
.ui-state-error .ui-icon,
|
503 |
-
.ui-state-error-text .ui-icon {
|
504 |
-
background-image: url("images/ui-icons_cd0a0a_256x240.png");
|
505 |
-
}
|
506 |
-
|
507 |
-
/* positioning */
|
508 |
-
.ui-icon-blank { background-position: 16px 16px; }
|
509 |
-
.ui-icon-carat-1-n { background-position: 0 0; }
|
510 |
-
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
511 |
-
.ui-icon-carat-1-e { background-position: -32px 0; }
|
512 |
-
.ui-icon-carat-1-se { background-position: -48px 0; }
|
513 |
-
.ui-icon-carat-1-s { background-position: -64px 0; }
|
514 |
-
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
515 |
-
.ui-icon-carat-1-w { background-position: -96px 0; }
|
516 |
-
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
517 |
-
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
518 |
-
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
519 |
-
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
520 |
-
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
521 |
-
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
522 |
-
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
523 |
-
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
524 |
-
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
525 |
-
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
526 |
-
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
527 |
-
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
528 |
-
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
529 |
-
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
530 |
-
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
531 |
-
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
532 |
-
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
533 |
-
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
534 |
-
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
535 |
-
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
536 |
-
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
537 |
-
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
538 |
-
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
539 |
-
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
540 |
-
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
541 |
-
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
542 |
-
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
543 |
-
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
544 |
-
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
545 |
-
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
546 |
-
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
547 |
-
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
548 |
-
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
549 |
-
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
550 |
-
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
551 |
-
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
552 |
-
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
553 |
-
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
554 |
-
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
555 |
-
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
556 |
-
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
557 |
-
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
558 |
-
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
559 |
-
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
560 |
-
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
561 |
-
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
562 |
-
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
563 |
-
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
564 |
-
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
565 |
-
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
566 |
-
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
567 |
-
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
568 |
-
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
569 |
-
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
570 |
-
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
571 |
-
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
572 |
-
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
573 |
-
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
574 |
-
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
575 |
-
.ui-icon-extlink { background-position: -32px -80px; }
|
576 |
-
.ui-icon-newwin { background-position: -48px -80px; }
|
577 |
-
.ui-icon-refresh { background-position: -64px -80px; }
|
578 |
-
.ui-icon-shuffle { background-position: -80px -80px; }
|
579 |
-
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
580 |
-
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
581 |
-
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
582 |
-
.ui-icon-folder-open { background-position: -16px -96px; }
|
583 |
-
.ui-icon-document { background-position: -32px -96px; }
|
584 |
-
.ui-icon-document-b { background-position: -48px -96px; }
|
585 |
-
.ui-icon-note { background-position: -64px -96px; }
|
586 |
-
.ui-icon-mail-closed { background-position: -80px -96px; }
|
587 |
-
.ui-icon-mail-open { background-position: -96px -96px; }
|
588 |
-
.ui-icon-suitcase { background-position: -112px -96px; }
|
589 |
-
.ui-icon-comment { background-position: -128px -96px; }
|
590 |
-
.ui-icon-person { background-position: -144px -96px; }
|
591 |
-
.ui-icon-print { background-position: -160px -96px; }
|
592 |
-
.ui-icon-trash { background-position: -176px -96px; }
|
593 |
-
.ui-icon-locked { background-position: -192px -96px; }
|
594 |
-
.ui-icon-unlocked { background-position: -208px -96px; }
|
595 |
-
.ui-icon-bookmark { background-position: -224px -96px; }
|
596 |
-
.ui-icon-tag { background-position: -240px -96px; }
|
597 |
-
.ui-icon-home { background-position: 0 -112px; }
|
598 |
-
.ui-icon-flag { background-position: -16px -112px; }
|
599 |
-
.ui-icon-calendar { background-position: -32px -112px; }
|
600 |
-
.ui-icon-cart { background-position: -48px -112px; }
|
601 |
-
.ui-icon-pencil { background-position: -64px -112px; }
|
602 |
-
.ui-icon-clock { background-position: -80px -112px; }
|
603 |
-
.ui-icon-disk { background-position: -96px -112px; }
|
604 |
-
.ui-icon-calculator { background-position: -112px -112px; }
|
605 |
-
.ui-icon-zoomin { background-position: -128px -112px; }
|
606 |
-
.ui-icon-zoomout { background-position: -144px -112px; }
|
607 |
-
.ui-icon-search { background-position: -160px -112px; }
|
608 |
-
.ui-icon-wrench { background-position: -176px -112px; }
|
609 |
-
.ui-icon-gear { background-position: -192px -112px; }
|
610 |
-
.ui-icon-heart { background-position: -208px -112px; }
|
611 |
-
.ui-icon-star { background-position: -224px -112px; }
|
612 |
-
.ui-icon-link { background-position: -240px -112px; }
|
613 |
-
.ui-icon-cancel { background-position: 0 -128px; }
|
614 |
-
.ui-icon-plus { background-position: -16px -128px; }
|
615 |
-
.ui-icon-plusthick { background-position: -32px -128px; }
|
616 |
-
.ui-icon-minus { background-position: -48px -128px; }
|
617 |
-
.ui-icon-minusthick { background-position: -64px -128px; }
|
618 |
-
.ui-icon-close { background-position: -80px -128px; }
|
619 |
-
.ui-icon-closethick { background-position: -96px -128px; }
|
620 |
-
.ui-icon-key { background-position: -112px -128px; }
|
621 |
-
.ui-icon-lightbulb { background-position: -128px -128px; }
|
622 |
-
.ui-icon-scissors { background-position: -144px -128px; }
|
623 |
-
.ui-icon-clipboard { background-position: -160px -128px; }
|
624 |
-
.ui-icon-copy { background-position: -176px -128px; }
|
625 |
-
.ui-icon-contact { background-position: -192px -128px; }
|
626 |
-
.ui-icon-image { background-position: -208px -128px; }
|
627 |
-
.ui-icon-video { background-position: -224px -128px; }
|
628 |
-
.ui-icon-script { background-position: -240px -128px; }
|
629 |
-
.ui-icon-alert { background-position: 0 -144px; }
|
630 |
-
.ui-icon-info { background-position: -16px -144px; }
|
631 |
-
.ui-icon-notice { background-position: -32px -144px; }
|
632 |
-
.ui-icon-help { background-position: -48px -144px; }
|
633 |
-
.ui-icon-check { background-position: -64px -144px; }
|
634 |
-
.ui-icon-bullet { background-position: -80px -144px; }
|
635 |
-
.ui-icon-radio-on { background-position: -96px -144px; }
|
636 |
-
.ui-icon-radio-off { background-position: -112px -144px; }
|
637 |
-
.ui-icon-pin-w { background-position: -128px -144px; }
|
638 |
-
.ui-icon-pin-s { background-position: -144px -144px; }
|
639 |
-
.ui-icon-play { background-position: 0 -160px; }
|
640 |
-
.ui-icon-pause { background-position: -16px -160px; }
|
641 |
-
.ui-icon-seek-next { background-position: -32px -160px; }
|
642 |
-
.ui-icon-seek-prev { background-position: -48px -160px; }
|
643 |
-
.ui-icon-seek-end { background-position: -64px -160px; }
|
644 |
-
.ui-icon-seek-start { background-position: -80px -160px; }
|
645 |
-
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
646 |
-
.ui-icon-seek-first { background-position: -80px -160px; }
|
647 |
-
.ui-icon-stop { background-position: -96px -160px; }
|
648 |
-
.ui-icon-eject { background-position: -112px -160px; }
|
649 |
-
.ui-icon-volume-off { background-position: -128px -160px; }
|
650 |
-
.ui-icon-volume-on { background-position: -144px -160px; }
|
651 |
-
.ui-icon-power { background-position: 0 -176px; }
|
652 |
-
.ui-icon-signal-diag { background-position: -16px -176px; }
|
653 |
-
.ui-icon-signal { background-position: -32px -176px; }
|
654 |
-
.ui-icon-battery-0 { background-position: -48px -176px; }
|
655 |
-
.ui-icon-battery-1 { background-position: -64px -176px; }
|
656 |
-
.ui-icon-battery-2 { background-position: -80px -176px; }
|
657 |
-
.ui-icon-battery-3 { background-position: -96px -176px; }
|
658 |
-
.ui-icon-circle-plus { background-position: 0 -192px; }
|
659 |
-
.ui-icon-circle-minus { background-position: -16px -192px; }
|
660 |
-
.ui-icon-circle-close { background-position: -32px -192px; }
|
661 |
-
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
662 |
-
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
663 |
-
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
664 |
-
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
665 |
-
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
666 |
-
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
667 |
-
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
668 |
-
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
669 |
-
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
670 |
-
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
671 |
-
.ui-icon-circle-check { background-position: -208px -192px; }
|
672 |
-
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
673 |
-
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
674 |
-
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
675 |
-
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
676 |
-
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
677 |
-
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
678 |
-
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
679 |
-
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
680 |
-
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
681 |
-
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
682 |
-
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
683 |
-
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
684 |
-
|
685 |
-
|
686 |
-
/* Misc visuals
|
687 |
-
----------------------------------*/
|
688 |
-
|
689 |
-
/* Corner radius */
|
690 |
-
.ui-corner-all,
|
691 |
-
.ui-corner-top,
|
692 |
-
.ui-corner-left,
|
693 |
-
.ui-corner-tl {
|
694 |
-
border-top-left-radius: 4px;
|
695 |
-
}
|
696 |
-
.ui-corner-all,
|
697 |
-
.ui-corner-top,
|
698 |
-
.ui-corner-right,
|
699 |
-
.ui-corner-tr {
|
700 |
-
border-top-right-radius: 4px;
|
701 |
-
}
|
702 |
-
.ui-corner-all,
|
703 |
-
.ui-corner-bottom,
|
704 |
-
.ui-corner-left,
|
705 |
-
.ui-corner-bl {
|
706 |
-
border-bottom-left-radius: 4px;
|
707 |
-
}
|
708 |
-
.ui-corner-all,
|
709 |
-
.ui-corner-bottom,
|
710 |
-
.ui-corner-right,
|
711 |
-
.ui-corner-br {
|
712 |
-
border-bottom-right-radius: 4px;
|
713 |
-
}
|
714 |
-
|
715 |
-
/* Overlays */
|
716 |
-
.overlay_back {
|
717 |
-
position:fixed;
|
718 |
-
display:none;
|
719 |
-
|
720 |
-
/* color with alpha channel */
|
721 |
-
background-color: rgba(0, 0, 0, 0.7); /* 0.7 = 70% opacity */
|
722 |
-
|
723 |
-
/* stretch to screen edges */
|
724 |
-
top: 0;
|
725 |
-
left: 0;
|
726 |
-
bottom: 0;
|
727 |
-
right: 0;
|
728 |
-
min-height:100%;
|
729 |
-
width:100%;
|
730 |
-
z-index:111;
|
731 |
-
}
|
732 |
-
.ui-widget-overlay {
|
733 |
-
background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
|
734 |
-
|
735 |
-
}
|
736 |
-
.ui-widget-shadow {
|
737 |
-
margin: -8px 0 0 -8px;
|
738 |
-
padding: 8px;
|
739 |
-
background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
|
740 |
-
opacity: .3;
|
741 |
-
filter: Alpha(Opacity=30); /* support: IE8 */
|
742 |
-
border-radius: 8px;
|
743 |
-
}
|
1 |
+
/*! jQuery UI - v1.11.4 - 2015-07-30
|
2 |
+
* http://jqueryui.com
|
3 |
+
* Includes: core.css, draggable.css, resizable.css, button.css, dialog.css, theme.css
|
4 |
+
* To view and modify this theme, visit http://jqueryui.com/themeroller/
|
5 |
+
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
|
6 |
+
|
7 |
+
/* Layout helpers
|
8 |
+
----------------------------------*/
|
9 |
+
.ui-helper-hidden {
|
10 |
+
display: none;
|
11 |
+
}
|
12 |
+
.ui-helper-hidden-accessible {
|
13 |
+
border: 0;
|
14 |
+
clip: rect(0 0 0 0);
|
15 |
+
height: 1px;
|
16 |
+
margin: -1px;
|
17 |
+
overflow: hidden;
|
18 |
+
padding: 0;
|
19 |
+
position: absolute;
|
20 |
+
width: 1px;
|
21 |
+
}
|
22 |
+
.ui-helper-reset {
|
23 |
+
margin: 0;
|
24 |
+
padding: 0;
|
25 |
+
border: 0;
|
26 |
+
outline: 0;
|
27 |
+
line-height: 1.3;
|
28 |
+
text-decoration: none;
|
29 |
+
font-size: 100%;
|
30 |
+
list-style: none;
|
31 |
+
}
|
32 |
+
.ui-helper-clearfix:before,
|
33 |
+
.ui-helper-clearfix:after {
|
34 |
+
content: "";
|
35 |
+
display: table;
|
36 |
+
border-collapse: collapse;
|
37 |
+
}
|
38 |
+
.ui-helper-clearfix:after {
|
39 |
+
clear: both;
|
40 |
+
}
|
41 |
+
.ui-helper-clearfix {
|
42 |
+
min-height: 0; /* support: IE7 */
|
43 |
+
}
|
44 |
+
.ui-helper-zfix {
|
45 |
+
width: 100%;
|
46 |
+
height: 100%;
|
47 |
+
top: 0;
|
48 |
+
left: 0;
|
49 |
+
position: absolute;
|
50 |
+
opacity: 0;
|
51 |
+
filter:Alpha(Opacity=0); /* support: IE8 */
|
52 |
+
}
|
53 |
+
|
54 |
+
.ui-front {
|
55 |
+
z-index: 100;
|
56 |
+
}
|
57 |
+
|
58 |
+
|
59 |
+
/* Interaction Cues
|
60 |
+
----------------------------------*/
|
61 |
+
.ui-state-disabled {
|
62 |
+
cursor: default !important;
|
63 |
+
}
|
64 |
+
|
65 |
+
|
66 |
+
/* Icons
|
67 |
+
----------------------------------*/
|
68 |
+
|
69 |
+
/* states and images */
|
70 |
+
.ui-icon {
|
71 |
+
display: block;
|
72 |
+
text-indent: -99999px;
|
73 |
+
overflow: hidden;
|
74 |
+
background-repeat: no-repeat;
|
75 |
+
}
|
76 |
+
|
77 |
+
|
78 |
+
/* Misc visuals
|
79 |
+
----------------------------------*/
|
80 |
+
|
81 |
+
/* Overlays */
|
82 |
+
.ui-widget-overlay {
|
83 |
+
position: fixed;
|
84 |
+
top: 0;
|
85 |
+
left: 0;
|
86 |
+
width: 100%;
|
87 |
+
height: 100%;
|
88 |
+
}
|
89 |
+
.ui-draggable-handle {
|
90 |
+
-ms-touch-action: none;
|
91 |
+
touch-action: none;
|
92 |
+
}
|
93 |
+
.ui-resizable {
|
94 |
+
position: relative;
|
95 |
+
}
|
96 |
+
.ui-resizable-handle {
|
97 |
+
position: absolute;
|
98 |
+
font-size: 0.1px;
|
99 |
+
display: block;
|
100 |
+
-ms-touch-action: none;
|
101 |
+
touch-action: none;
|
102 |
+
}
|
103 |
+
.ui-resizable-disabled .ui-resizable-handle,
|
104 |
+
.ui-resizable-autohide .ui-resizable-handle {
|
105 |
+
display: none;
|
106 |
+
}
|
107 |
+
.ui-resizable-n {
|
108 |
+
cursor: n-resize;
|
109 |
+
height: 7px;
|
110 |
+
width: 100%;
|
111 |
+
top: -5px;
|
112 |
+
left: 0;
|
113 |
+
}
|
114 |
+
.ui-resizable-s {
|
115 |
+
cursor: s-resize;
|
116 |
+
height: 7px;
|
117 |
+
width: 100%;
|
118 |
+
bottom: -5px;
|
119 |
+
left: 0;
|
120 |
+
}
|
121 |
+
.ui-resizable-e {
|
122 |
+
cursor: e-resize;
|
123 |
+
width: 7px;
|
124 |
+
right: -5px;
|
125 |
+
top: 0;
|
126 |
+
height: 100%;
|
127 |
+
}
|
128 |
+
.ui-resizable-w {
|
129 |
+
cursor: w-resize;
|
130 |
+
width: 7px;
|
131 |
+
left: -5px;
|
132 |
+
top: 0;
|
133 |
+
height: 100%;
|
134 |
+
}
|
135 |
+
.ui-resizable-se {
|
136 |
+
cursor: se-resize;
|
137 |
+
width: 12px;
|
138 |
+
height: 12px;
|
139 |
+
right: 1px;
|
140 |
+
bottom: 1px;
|
141 |
+
}
|
142 |
+
.ui-resizable-sw {
|
143 |
+
cursor: sw-resize;
|
144 |
+
width: 9px;
|
145 |
+
height: 9px;
|
146 |
+
left: -5px;
|
147 |
+
bottom: -5px;
|
148 |
+
}
|
149 |
+
.ui-resizable-nw {
|
150 |
+
cursor: nw-resize;
|
151 |
+
width: 9px;
|
152 |
+
height: 9px;
|
153 |
+
left: -5px;
|
154 |
+
top: -5px;
|
155 |
+
}
|
156 |
+
.ui-resizable-ne {
|
157 |
+
cursor: ne-resize;
|
158 |
+
width: 9px;
|
159 |
+
height: 9px;
|
160 |
+
right: -5px;
|
161 |
+
top: -5px;
|
162 |
+
}
|
163 |
+
.ui-button {
|
164 |
+
display: inline-block;
|
165 |
+
position: relative;
|
166 |
+
padding: 0;
|
167 |
+
line-height: normal;
|
168 |
+
margin-right: .1em;
|
169 |
+
cursor: pointer;
|
170 |
+
vertical-align: middle;
|
171 |
+
text-align: center;
|
172 |
+
overflow: visible; /* removes extra width in IE */
|
173 |
+
}
|
174 |
+
.ui-button,
|
175 |
+
.ui-button:link,
|
176 |
+
.ui-button:visited,
|
177 |
+
.ui-button:hover,
|
178 |
+
.ui-button:active {
|
179 |
+
text-decoration: none;
|
180 |
+
}
|
181 |
+
/* to make room for the icon, a width needs to be set here */
|
182 |
+
.ui-button-icon-only {
|
183 |
+
width: 2.2em;
|
184 |
+
}
|
185 |
+
/* button elements seem to need a little more width */
|
186 |
+
button.ui-button-icon-only {
|
187 |
+
width: 2.4em;
|
188 |
+
}
|
189 |
+
.ui-button-icons-only {
|
190 |
+
width: 3.4em;
|
191 |
+
}
|
192 |
+
button.ui-button-icons-only {
|
193 |
+
width: 3.7em;
|
194 |
+
}
|
195 |
+
|
196 |
+
/* button text element */
|
197 |
+
.ui-button .ui-button-text {
|
198 |
+
display: block;
|
199 |
+
line-height: normal;
|
200 |
+
}
|
201 |
+
.ui-button-text-only .ui-button-text {
|
202 |
+
padding: .4em 1em;
|
203 |
+
}
|
204 |
+
.ui-button-icon-only .ui-button-text,
|
205 |
+
.ui-button-icons-only .ui-button-text {
|
206 |
+
padding: .4em;
|
207 |
+
text-indent: -9999999px;
|
208 |
+
}
|
209 |
+
.ui-button-text-icon-primary .ui-button-text,
|
210 |
+
.ui-button-text-icons .ui-button-text {
|
211 |
+
padding: .4em 1em .4em 2.1em;
|
212 |
+
}
|
213 |
+
.ui-button-text-icon-secondary .ui-button-text,
|
214 |
+
.ui-button-text-icons .ui-button-text {
|
215 |
+
padding: .4em 2.1em .4em 1em;
|
216 |
+
}
|
217 |
+
.ui-button-text-icons .ui-button-text {
|
218 |
+
padding-left: 2.1em;
|
219 |
+
padding-right: 2.1em;
|
220 |
+
}
|
221 |
+
/* no icon support for input elements, provide padding by default */
|
222 |
+
input.ui-button {
|
223 |
+
padding: .4em 1em;
|
224 |
+
}
|
225 |
+
|
226 |
+
/* button icon element(s) */
|
227 |
+
.ui-button-icon-only .ui-icon,
|
228 |
+
.ui-button-text-icon-primary .ui-icon,
|
229 |
+
.ui-button-text-icon-secondary .ui-icon,
|
230 |
+
.ui-button-text-icons .ui-icon,
|
231 |
+
.ui-button-icons-only .ui-icon {
|
232 |
+
position: absolute;
|
233 |
+
top: 50%;
|
234 |
+
margin-top: -8px;
|
235 |
+
}
|
236 |
+
.ui-button-icon-only .ui-icon {
|
237 |
+
left: 50%;
|
238 |
+
margin-left: -8px;
|
239 |
+
}
|
240 |
+
.ui-button-text-icon-primary .ui-button-icon-primary,
|
241 |
+
.ui-button-text-icons .ui-button-icon-primary,
|
242 |
+
.ui-button-icons-only .ui-button-icon-primary {
|
243 |
+
left: .5em;
|
244 |
+
}
|
245 |
+
.ui-button-text-icon-secondary .ui-button-icon-secondary,
|
246 |
+
.ui-button-text-icons .ui-button-icon-secondary,
|
247 |
+
.ui-button-icons-only .ui-button-icon-secondary {
|
248 |
+
right: .5em;
|
249 |
+
}
|
250 |
+
|
251 |
+
/* button sets */
|
252 |
+
.ui-buttonset {
|
253 |
+
margin-right: 7px;
|
254 |
+
}
|
255 |
+
.ui-buttonset .ui-button {
|
256 |
+
margin-left: 0;
|
257 |
+
margin-right: -.3em;
|
258 |
+
}
|
259 |
+
|
260 |
+
/* workarounds */
|
261 |
+
/* reset extra padding in Firefox, see h5bp.com/l */
|
262 |
+
input.ui-button::-moz-focus-inner,
|
263 |
+
button.ui-button::-moz-focus-inner {
|
264 |
+
border: 0;
|
265 |
+
padding: 0;
|
266 |
+
}
|
267 |
+
.ui-dialog {
|
268 |
+
overflow: hidden;
|
269 |
+
position: absolute;
|
270 |
+
top: 0;
|
271 |
+
left: 0;
|
272 |
+
padding: .2em;
|
273 |
+
outline: 0;
|
274 |
+
width: 450px !important;
|
275 |
+
font-family: "Times New Roman", Times, serif !important;
|
276 |
+
font-size:16px !important;
|
277 |
+
z-index:200 !important;
|
278 |
+
|
279 |
+
}
|
280 |
+
.ui-dialog .ui-dialog-titlebar {
|
281 |
+
padding: .4em 1em;
|
282 |
+
position: relative;
|
283 |
+
}
|
284 |
+
.ui-dialog .ui-dialog-title {
|
285 |
+
float: left;
|
286 |
+
margin: .1em 0;
|
287 |
+
white-space: nowrap;
|
288 |
+
width: 90%;
|
289 |
+
overflow: hidden;
|
290 |
+
text-overflow: ellipsis;
|
291 |
+
}
|
292 |
+
.ui-dialog .ui-dialog-titlebar-close {
|
293 |
+
position: absolute;
|
294 |
+
right: .3em;
|
295 |
+
top: 50%;
|
296 |
+
width: 20px;
|
297 |
+
margin: -10px 0 0 0;
|
298 |
+
padding: 1px;
|
299 |
+
height: 20px;
|
300 |
+
}
|
301 |
+
.ui-dialog .ui-dialog-content {
|
302 |
+
position: relative;
|
303 |
+
border: 0;
|
304 |
+
padding: .5em 1em;
|
305 |
+
background: none;
|
306 |
+
overflow: auto;
|
307 |
+
}
|
308 |
+
.ui-dialog .ui-dialog-buttonpane {
|
309 |
+
text-align: left;
|
310 |
+
border-width: 1px 0 0 0;
|
311 |
+
background-image: none;
|
312 |
+
margin-top: .5em;
|
313 |
+
padding: .3em 1em .5em .4em;
|
314 |
+
}
|
315 |
+
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
316 |
+
float: right;
|
317 |
+
}
|
318 |
+
.ui-dialog .ui-dialog-buttonpane button {
|
319 |
+
margin: .5em .4em .5em 0;
|
320 |
+
cursor: pointer;
|
321 |
+
}
|
322 |
+
.ui-dialog .ui-resizable-se {
|
323 |
+
width: 12px;
|
324 |
+
height: 12px;
|
325 |
+
right: -5px;
|
326 |
+
bottom: -5px;
|
327 |
+
background-position: 16px 16px;
|
328 |
+
}
|
329 |
+
.ui-draggable .ui-dialog-titlebar {
|
330 |
+
cursor: move;
|
331 |
+
}
|
332 |
+
|
333 |
+
/* Component containers
|
334 |
+
----------------------------------*/
|
335 |
+
.ui-widget {
|
336 |
+
font-family: Verdana,Arial,sans-serif;
|
337 |
+
font-size: 1.1em;
|
338 |
+
}
|
339 |
+
.ui-widget .ui-widget {
|
340 |
+
font-size: 1em;
|
341 |
+
}
|
342 |
+
.ui-widget input,
|
343 |
+
.ui-widget select,
|
344 |
+
.ui-widget textarea,
|
345 |
+
.ui-widget button {
|
346 |
+
font-family: Verdana,Arial,sans-serif;
|
347 |
+
font-size: 1em;
|
348 |
+
}
|
349 |
+
.ui-widget-content {
|
350 |
+
border: 1px solid #aaaaaa;
|
351 |
+
background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
|
352 |
+
color: #222222;
|
353 |
+
}
|
354 |
+
.ui-widget-content a {
|
355 |
+
color: #222222;
|
356 |
+
}
|
357 |
+
.ui-widget-header {
|
358 |
+
border: 1px solid #aaaaaa;
|
359 |
+
background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
|
360 |
+
color: #222222;
|
361 |
+
font-weight: bold;
|
362 |
+
}
|
363 |
+
.ui-widget-header a {
|
364 |
+
color: #222222;
|
365 |
+
}
|
366 |
+
|
367 |
+
/* Interaction states
|
368 |
+
----------------------------------*/
|
369 |
+
.ui-state-default,
|
370 |
+
.ui-widget-content .ui-state-default,
|
371 |
+
.ui-widget-header .ui-state-default {
|
372 |
+
border: 1px solid #d3d3d3;
|
373 |
+
background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
|
374 |
+
font-weight: normal;
|
375 |
+
color: #555555;
|
376 |
+
}
|
377 |
+
.ui-state-default a,
|
378 |
+
.ui-state-default a:link,
|
379 |
+
.ui-state-default a:visited {
|
380 |
+
color: #555555;
|
381 |
+
text-decoration: none;
|
382 |
+
}
|
383 |
+
.ui-state-hover,
|
384 |
+
.ui-widget-content .ui-state-hover,
|
385 |
+
.ui-widget-header .ui-state-hover,
|
386 |
+
.ui-state-focus,
|
387 |
+
.ui-widget-content .ui-state-focus,
|
388 |
+
.ui-widget-header .ui-state-focus {
|
389 |
+
border: 1px solid #999999;
|
390 |
+
background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
|
391 |
+
font-weight: normal;
|
392 |
+
color: #212121;
|
393 |
+
}
|
394 |
+
.ui-state-hover a,
|
395 |
+
.ui-state-hover a:hover,
|
396 |
+
.ui-state-hover a:link,
|
397 |
+
.ui-state-hover a:visited,
|
398 |
+
.ui-state-focus a,
|
399 |
+
.ui-state-focus a:hover,
|
400 |
+
.ui-state-focus a:link,
|
401 |
+
.ui-state-focus a:visited {
|
402 |
+
color: #212121;
|
403 |
+
text-decoration: none;
|
404 |
+
}
|
405 |
+
.ui-state-active,
|
406 |
+
.ui-widget-content .ui-state-active,
|
407 |
+
.ui-widget-header .ui-state-active {
|
408 |
+
border: 1px solid #aaaaaa;
|
409 |
+
background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
|
410 |
+
font-weight: normal;
|
411 |
+
color: #212121;
|
412 |
+
}
|
413 |
+
.ui-state-active a,
|
414 |
+
.ui-state-active a:link,
|
415 |
+
.ui-state-active a:visited {
|
416 |
+
color: #212121;
|
417 |
+
text-decoration: none;
|
418 |
+
}
|
419 |
+
|
420 |
+
/* Interaction Cues
|
421 |
+
----------------------------------*/
|
422 |
+
.ui-state-highlight,
|
423 |
+
.ui-widget-content .ui-state-highlight,
|
424 |
+
.ui-widget-header .ui-state-highlight {
|
425 |
+
border: 1px solid #fcefa1;
|
426 |
+
background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
|
427 |
+
color: #363636;
|
428 |
+
}
|
429 |
+
.ui-state-highlight a,
|
430 |
+
.ui-widget-content .ui-state-highlight a,
|
431 |
+
.ui-widget-header .ui-state-highlight a {
|
432 |
+
color: #363636;
|
433 |
+
}
|
434 |
+
.ui-state-error,
|
435 |
+
.ui-widget-content .ui-state-error,
|
436 |
+
.ui-widget-header .ui-state-error {
|
437 |
+
border: 1px solid #cd0a0a;
|
438 |
+
background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
|
439 |
+
color: #cd0a0a;
|
440 |
+
}
|
441 |
+
.ui-state-error a,
|
442 |
+
.ui-widget-content .ui-state-error a,
|
443 |
+
.ui-widget-header .ui-state-error a {
|
444 |
+
color: #cd0a0a;
|
445 |
+
}
|
446 |
+
.ui-state-error-text,
|
447 |
+
.ui-widget-content .ui-state-error-text,
|
448 |
+
.ui-widget-header .ui-state-error-text {
|
449 |
+
color: #cd0a0a;
|
450 |
+
}
|
451 |
+
.ui-priority-primary,
|
452 |
+
.ui-widget-content .ui-priority-primary,
|
453 |
+
.ui-widget-header .ui-priority-primary {
|
454 |
+
font-weight: bold;
|
455 |
+
}
|
456 |
+
.ui-priority-secondary,
|
457 |
+
.ui-widget-content .ui-priority-secondary,
|
458 |
+
.ui-widget-header .ui-priority-secondary {
|
459 |
+
opacity: .7;
|
460 |
+
filter:Alpha(Opacity=70); /* support: IE8 */
|
461 |
+
font-weight: normal;
|
462 |
+
}
|
463 |
+
.ui-state-disabled,
|
464 |
+
.ui-widget-content .ui-state-disabled,
|
465 |
+
.ui-widget-header .ui-state-disabled {
|
466 |
+
opacity: .35;
|
467 |
+
filter:Alpha(Opacity=35); /* support: IE8 */
|
468 |
+
background-image: none;
|
469 |
+
}
|
470 |
+
.ui-state-disabled .ui-icon {
|
471 |
+
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
|
472 |
+
}
|
473 |
+
|
474 |
+
/* Icons
|
475 |
+
----------------------------------*/
|
476 |
+
|
477 |
+
/* states and images */
|
478 |
+
.ui-icon {
|
479 |
+
width: 16px;
|
480 |
+
height: 16px;
|
481 |
+
}
|
482 |
+
.ui-icon,
|
483 |
+
.ui-widget-content .ui-icon {
|
484 |
+
background-image: url("images/ui-icons_222222_256x240.png");
|
485 |
+
}
|
486 |
+
.ui-widget-header .ui-icon {
|
487 |
+
background-image: url("images/ui-icons_222222_256x240.png");
|
488 |
+
}
|
489 |
+
.ui-state-default .ui-icon {
|
490 |
+
background-image: url("images/ui-icons_888888_256x240.png");
|
491 |
+
}
|
492 |
+
.ui-state-hover .ui-icon,
|
493 |
+
.ui-state-focus .ui-icon {
|
494 |
+
background-image: url("images/ui-icons_454545_256x240.png");
|
495 |
+
}
|
496 |
+
.ui-state-active .ui-icon {
|
497 |
+
background-image: url("images/ui-icons_454545_256x240.png");
|
498 |
+
}
|
499 |
+
.ui-state-highlight .ui-icon {
|
500 |
+
background-image: url("images/ui-icons_2e83ff_256x240.png");
|
501 |
+
}
|
502 |
+
.ui-state-error .ui-icon,
|
503 |
+
.ui-state-error-text .ui-icon {
|
504 |
+
background-image: url("images/ui-icons_cd0a0a_256x240.png");
|
505 |
+
}
|
506 |
+
|
507 |
+
/* positioning */
|
508 |
+
.ui-icon-blank { background-position: 16px 16px; }
|
509 |
+
.ui-icon-carat-1-n { background-position: 0 0; }
|
510 |
+
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
511 |
+
.ui-icon-carat-1-e { background-position: -32px 0; }
|
512 |
+
.ui-icon-carat-1-se { background-position: -48px 0; }
|
513 |
+
.ui-icon-carat-1-s { background-position: -64px 0; }
|
514 |
+
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
515 |
+
.ui-icon-carat-1-w { background-position: -96px 0; }
|
516 |
+
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
517 |
+
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
518 |
+
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
519 |
+
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
520 |
+
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
521 |
+
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
522 |
+
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
523 |
+
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
524 |
+
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
525 |
+
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
526 |
+
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
527 |
+
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
528 |
+
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
529 |
+
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
530 |
+
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
531 |
+
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
532 |
+
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
533 |
+
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
534 |
+
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
535 |
+
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
536 |
+
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
537 |
+
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
538 |
+
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
539 |
+
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
540 |
+
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
541 |
+
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
542 |
+
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
543 |
+
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
544 |
+
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
545 |
+
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
546 |
+
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
547 |
+
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
548 |
+
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
549 |
+
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
550 |
+
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
551 |
+
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
552 |
+
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
553 |
+
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
554 |
+
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
555 |
+
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
556 |
+
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
557 |
+
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
558 |
+
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
559 |
+
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
560 |
+
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
561 |
+
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
562 |
+
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
563 |
+
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
564 |
+
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
565 |
+
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
566 |
+
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
567 |
+
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
568 |
+
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
569 |
+
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
570 |
+
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
571 |
+
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
572 |
+
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
573 |
+
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
574 |
+
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
575 |
+
.ui-icon-extlink { background-position: -32px -80px; }
|
576 |
+
.ui-icon-newwin { background-position: -48px -80px; }
|
577 |
+
.ui-icon-refresh { background-position: -64px -80px; }
|
578 |
+
.ui-icon-shuffle { background-position: -80px -80px; }
|
579 |
+
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
580 |
+
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
581 |
+
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
582 |
+
.ui-icon-folder-open { background-position: -16px -96px; }
|
583 |
+
.ui-icon-document { background-position: -32px -96px; }
|
584 |
+
.ui-icon-document-b { background-position: -48px -96px; }
|
585 |
+
.ui-icon-note { background-position: -64px -96px; }
|
586 |
+
.ui-icon-mail-closed { background-position: -80px -96px; }
|
587 |
+
.ui-icon-mail-open { background-position: -96px -96px; }
|
588 |
+
.ui-icon-suitcase { background-position: -112px -96px; }
|
589 |
+
.ui-icon-comment { background-position: -128px -96px; }
|
590 |
+
.ui-icon-person { background-position: -144px -96px; }
|
591 |
+
.ui-icon-print { background-position: -160px -96px; }
|
592 |
+
.ui-icon-trash { background-position: -176px -96px; }
|
593 |
+
.ui-icon-locked { background-position: -192px -96px; }
|
594 |
+
.ui-icon-unlocked { background-position: -208px -96px; }
|
595 |
+
.ui-icon-bookmark { background-position: -224px -96px; }
|
596 |
+
.ui-icon-tag { background-position: -240px -96px; }
|
597 |
+
.ui-icon-home { background-position: 0 -112px; }
|
598 |
+
.ui-icon-flag { background-position: -16px -112px; }
|
599 |
+
.ui-icon-calendar { background-position: -32px -112px; }
|
600 |
+
.ui-icon-cart { background-position: -48px -112px; }
|
601 |
+
.ui-icon-pencil { background-position: -64px -112px; }
|
602 |
+
.ui-icon-clock { background-position: -80px -112px; }
|
603 |
+
.ui-icon-disk { background-position: -96px -112px; }
|
604 |
+
.ui-icon-calculator { background-position: -112px -112px; }
|
605 |
+
.ui-icon-zoomin { background-position: -128px -112px; }
|
606 |
+
.ui-icon-zoomout { background-position: -144px -112px; }
|
607 |
+
.ui-icon-search { background-position: -160px -112px; }
|
608 |
+
.ui-icon-wrench { background-position: -176px -112px; }
|
609 |
+
.ui-icon-gear { background-position: -192px -112px; }
|
610 |
+
.ui-icon-heart { background-position: -208px -112px; }
|
611 |
+
.ui-icon-star { background-position: -224px -112px; }
|
612 |
+
.ui-icon-link { background-position: -240px -112px; }
|
613 |
+
.ui-icon-cancel { background-position: 0 -128px; }
|
614 |
+
.ui-icon-plus { background-position: -16px -128px; }
|
615 |
+
.ui-icon-plusthick { background-position: -32px -128px; }
|
616 |
+
.ui-icon-minus { background-position: -48px -128px; }
|
617 |
+
.ui-icon-minusthick { background-position: -64px -128px; }
|
618 |
+
.ui-icon-close { background-position: -80px -128px; }
|
619 |
+
.ui-icon-closethick { background-position: -96px -128px; }
|
620 |
+
.ui-icon-key { background-position: -112px -128px; }
|
621 |
+
.ui-icon-lightbulb { background-position: -128px -128px; }
|
622 |
+
.ui-icon-scissors { background-position: -144px -128px; }
|
623 |
+
.ui-icon-clipboard { background-position: -160px -128px; }
|
624 |
+
.ui-icon-copy { background-position: -176px -128px; }
|
625 |
+
.ui-icon-contact { background-position: -192px -128px; }
|
626 |
+
.ui-icon-image { background-position: -208px -128px; }
|
627 |
+
.ui-icon-video { background-position: -224px -128px; }
|
628 |
+
.ui-icon-script { background-position: -240px -128px; }
|
629 |
+
.ui-icon-alert { background-position: 0 -144px; }
|
630 |
+
.ui-icon-info { background-position: -16px -144px; }
|
631 |
+
.ui-icon-notice { background-position: -32px -144px; }
|
632 |
+
.ui-icon-help { background-position: -48px -144px; }
|
633 |
+
.ui-icon-check { background-position: -64px -144px; }
|
634 |
+
.ui-icon-bullet { background-position: -80px -144px; }
|
635 |
+
.ui-icon-radio-on { background-position: -96px -144px; }
|
636 |
+
.ui-icon-radio-off { background-position: -112px -144px; }
|
637 |
+
.ui-icon-pin-w { background-position: -128px -144px; }
|
638 |
+
.ui-icon-pin-s { background-position: -144px -144px; }
|
639 |
+
.ui-icon-play { background-position: 0 -160px; }
|
640 |
+
.ui-icon-pause { background-position: -16px -160px; }
|
641 |
+
.ui-icon-seek-next { background-position: -32px -160px; }
|
642 |
+
.ui-icon-seek-prev { background-position: -48px -160px; }
|
643 |
+
.ui-icon-seek-end { background-position: -64px -160px; }
|
644 |
+
.ui-icon-seek-start { background-position: -80px -160px; }
|
645 |
+
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
646 |
+
.ui-icon-seek-first { background-position: -80px -160px; }
|
647 |
+
.ui-icon-stop { background-position: -96px -160px; }
|
648 |
+
.ui-icon-eject { background-position: -112px -160px; }
|
649 |
+
.ui-icon-volume-off { background-position: -128px -160px; }
|
650 |
+
.ui-icon-volume-on { background-position: -144px -160px; }
|
651 |
+
.ui-icon-power { background-position: 0 -176px; }
|
652 |
+
.ui-icon-signal-diag { background-position: -16px -176px; }
|
653 |
+
.ui-icon-signal { background-position: -32px -176px; }
|
654 |
+
.ui-icon-battery-0 { background-position: -48px -176px; }
|
655 |
+
.ui-icon-battery-1 { background-position: -64px -176px; }
|
656 |
+
.ui-icon-battery-2 { background-position: -80px -176px; }
|
657 |
+
.ui-icon-battery-3 { background-position: -96px -176px; }
|
658 |
+
.ui-icon-circle-plus { background-position: 0 -192px; }
|
659 |
+
.ui-icon-circle-minus { background-position: -16px -192px; }
|
660 |
+
.ui-icon-circle-close { background-position: -32px -192px; }
|
661 |
+
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
662 |
+
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
663 |
+
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
664 |
+
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
665 |
+
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
666 |
+
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
667 |
+
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
668 |
+
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
669 |
+
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
670 |
+
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
671 |
+
.ui-icon-circle-check { background-position: -208px -192px; }
|
672 |
+
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
673 |
+
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
674 |
+
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
675 |
+
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
676 |
+
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
677 |
+
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
678 |
+
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
679 |
+
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
680 |
+
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
681 |
+
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
682 |
+
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
683 |
+
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
684 |
+
|
685 |
+
|
686 |
+
/* Misc visuals
|
687 |
+
----------------------------------*/
|
688 |
+
|
689 |
+
/* Corner radius */
|
690 |
+
.ui-corner-all,
|
691 |
+
.ui-corner-top,
|
692 |
+
.ui-corner-left,
|
693 |
+
.ui-corner-tl {
|
694 |
+
border-top-left-radius: 4px;
|
695 |
+
}
|
696 |
+
.ui-corner-all,
|
697 |
+
.ui-corner-top,
|
698 |
+
.ui-corner-right,
|
699 |
+
.ui-corner-tr {
|
700 |
+
border-top-right-radius: 4px;
|
701 |
+
}
|
702 |
+
.ui-corner-all,
|
703 |
+
.ui-corner-bottom,
|
704 |
+
.ui-corner-left,
|
705 |
+
.ui-corner-bl {
|
706 |
+
border-bottom-left-radius: 4px;
|
707 |
+
}
|
708 |
+
.ui-corner-all,
|
709 |
+
.ui-corner-bottom,
|
710 |
+
.ui-corner-right,
|
711 |
+
.ui-corner-br {
|
712 |
+
border-bottom-right-radius: 4px;
|
713 |
+
}
|
714 |
+
|
715 |
+
/* Overlays */
|
716 |
+
.overlay_back {
|
717 |
+
position:fixed;
|
718 |
+
display:none;
|
719 |
+
|
720 |
+
/* color with alpha channel */
|
721 |
+
background-color: rgba(0, 0, 0, 0.7); /* 0.7 = 70% opacity */
|
722 |
+
|
723 |
+
/* stretch to screen edges */
|
724 |
+
top: 0;
|
725 |
+
left: 0;
|
726 |
+
bottom: 0;
|
727 |
+
right: 0;
|
728 |
+
min-height:100%;
|
729 |
+
width:100%;
|
730 |
+
z-index:111;
|
731 |
+
}
|
732 |
+
.ui-widget-overlay {
|
733 |
+
background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
|
734 |
+
|
735 |
+
}
|
736 |
+
.ui-widget-shadow {
|
737 |
+
margin: -8px 0 0 -8px;
|
738 |
+
padding: 8px;
|
739 |
+
background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
|
740 |
+
opacity: .3;
|
741 |
+
filter: Alpha(Opacity=30); /* support: IE8 */
|
742 |
+
border-radius: 8px;
|
743 |
+
}
|
includes/css/phone.css
CHANGED
@@ -1,3 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
.intl-number-input { position: inherit; }
|
2 |
.intl-number-input .hide { display: none; }
|
3 |
.intl-number-input .flag-dropdown { position: absolute; cursor: pointer; }
|
1 |
+
|
2 |
+
.buttonInsideEmail{
|
3 |
+
position:relative;
|
4 |
+
margin-bottom:10px;
|
5 |
+
}
|
6 |
+
|
7 |
+
.buttonInsidePhone{
|
8 |
+
position:relative;
|
9 |
+
margin-bottom:10px;
|
10 |
+
}
|
11 |
+
|
12 |
+
.mo2f_send_emailotp_button {
|
13 |
+
position:absolute;
|
14 |
+
right: 0px;
|
15 |
+
top: 0%;
|
16 |
+
border:none;
|
17 |
+
height:100%;
|
18 |
+
width:max-content;
|
19 |
+
outline:none;
|
20 |
+
text-align:center;
|
21 |
+
padding:2px;
|
22 |
+
}
|
23 |
+
|
24 |
+
.mo2f_send_phoneotp_button {
|
25 |
+
position:absolute;
|
26 |
+
right: 0px;
|
27 |
+
top: 0%;
|
28 |
+
border:none;
|
29 |
+
height:100%;
|
30 |
+
width:max-content;
|
31 |
+
outline:none;
|
32 |
+
text-align:center;
|
33 |
+
padding:2px;
|
34 |
+
}
|
35 |
+
|
36 |
.intl-number-input { position: inherit; }
|
37 |
.intl-number-input .hide { display: none; }
|
38 |
.intl-number-input .flag-dropdown { position: absolute; cursor: pointer; }
|
includes/css/popup.css
CHANGED
@@ -1,82 +1,82 @@
|
|
1 |
-
|
2 |
-
.mo_popup {
|
3 |
-
display: flex;
|
4 |
-
flex-flow: row wrap;
|
5 |
-
width:100%;
|
6 |
-
}
|
7 |
-
.mo_popup_div {
|
8 |
-
flex: 1;
|
9 |
-
padding: 0.5rem;
|
10 |
-
}
|
11 |
-
#mo_popup_id input[type="radio"] {
|
12 |
-
display: none;
|
13 |
-
&:not(:disabled) ~ label {
|
14 |
-
cursor: pointer;
|
15 |
-
}
|
16 |
-
&:disabled ~ label {
|
17 |
-
color: hsla(150, 5%, 75%, 1);
|
18 |
-
border-color: hsla(150, 5%, 75%, 1);
|
19 |
-
box-shadow: none;
|
20 |
-
cursor: not-allowed;
|
21 |
-
}
|
22 |
-
}
|
23 |
-
.mo_popup_lable {
|
24 |
-
height: 80%;
|
25 |
-
display: block;
|
26 |
-
background: white;
|
27 |
-
border: 2px solid #20b2aa;
|
28 |
-
border-radius: 20px;
|
29 |
-
padding: 1rem;
|
30 |
-
padding-top: 0px;
|
31 |
-
/*//margin: 1rem;*/
|
32 |
-
text-align: center;
|
33 |
-
box-shadow: 0px 3px 10px -2px hsla(150, 5%, 65%, 0.5);
|
34 |
-
position: relative;
|
35 |
-
margin-top: 10px;
|
36 |
-
}
|
37 |
-
|
38 |
-
#mo_popup_id input[type="radio"]:checked + label {
|
39 |
-
background: #20b2aa;
|
40 |
-
color: hsla(215, 0%, 100%, 1);
|
41 |
-
&::after {
|
42 |
-
color: hsla(215, 5%, 25%, 1);
|
43 |
-
font-family: FontAwesome;
|
44 |
-
border: 2px solid hsla(150, 75%, 45%, 1);
|
45 |
-
content: "\f00c";
|
46 |
-
font-size: 24px;
|
47 |
-
position: absolute;
|
48 |
-
top: -25px;
|
49 |
-
left: 50%;
|
50 |
-
transform: translateX(-50%);
|
51 |
-
height: 50px;
|
52 |
-
width: 50px;
|
53 |
-
line-height: 50px;
|
54 |
-
text-align: center;
|
55 |
-
border-radius: 50%;
|
56 |
-
background: white;
|
57 |
-
box-shadow: 0px 2px 5px -2px hsla(0, 0%, 0%, 0.25);
|
58 |
-
}
|
59 |
-
}
|
60 |
-
|
61 |
-
#mo_popup_id input[type="radio"]#control_05:checked + label {
|
62 |
-
background: red;
|
63 |
-
border-color: red;
|
64 |
-
}
|
65 |
-
|
66 |
-
|
67 |
-
@media only screen and (max-width: 700px) {
|
68 |
-
section {
|
69 |
-
flex-direction: column;
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
|
74 |
-
.logout:hover{
|
75 |
-
/*border: 2px solid black;*/
|
76 |
-
text-decoration: underline;
|
77 |
-
}
|
78 |
-
.modalhover:hover{
|
79 |
-
border:2px solid #2EB150;
|
80 |
-
background: #2EB150 !important;
|
81 |
-
color:white !important;
|
82 |
-
}
|
1 |
+
|
2 |
+
.mo_popup {
|
3 |
+
display: flex;
|
4 |
+
flex-flow: row wrap;
|
5 |
+
width:100%;
|
6 |
+
}
|
7 |
+
.mo_popup_div {
|
8 |
+
flex: 1;
|
9 |
+
padding: 0.5rem;
|
10 |
+
}
|
11 |
+
#mo_popup_id input[type="radio"] {
|
12 |
+
display: none;
|
13 |
+
&:not(:disabled) ~ label {
|
14 |
+
cursor: pointer;
|
15 |
+
}
|
16 |
+
&:disabled ~ label {
|
17 |
+
color: hsla(150, 5%, 75%, 1);
|
18 |
+
border-color: hsla(150, 5%, 75%, 1);
|
19 |
+
box-shadow: none;
|
20 |
+
cursor: not-allowed;
|
21 |
+
}
|
22 |
+
}
|
23 |
+
.mo_popup_lable {
|
24 |
+
height: 80%;
|
25 |
+
display: block;
|
26 |
+
background: white;
|
27 |
+
border: 2px solid #20b2aa;
|
28 |
+
border-radius: 20px;
|
29 |
+
padding: 1rem;
|
30 |
+
padding-top: 0px;
|
31 |
+
/*//margin: 1rem;*/
|
32 |
+
text-align: center;
|
33 |
+
box-shadow: 0px 3px 10px -2px hsla(150, 5%, 65%, 0.5);
|
34 |
+
position: relative;
|
35 |
+
margin-top: 10px;
|
36 |
+
}
|
37 |
+
|
38 |
+
#mo_popup_id input[type="radio"]:checked + label {
|
39 |
+
background: #20b2aa;
|
40 |
+
color: hsla(215, 0%, 100%, 1);
|
41 |
+
&::after {
|
42 |
+
color: hsla(215, 5%, 25%, 1);
|
43 |
+
font-family: FontAwesome;
|
44 |
+
border: 2px solid hsla(150, 75%, 45%, 1);
|
45 |
+
content: "\f00c";
|
46 |
+
font-size: 24px;
|
47 |
+
position: absolute;
|
48 |
+
top: -25px;
|
49 |
+
left: 50%;
|
50 |
+
transform: translateX(-50%);
|
51 |
+
height: 50px;
|
52 |
+
width: 50px;
|
53 |
+
line-height: 50px;
|
54 |
+
text-align: center;
|
55 |
+
border-radius: 50%;
|
56 |
+
background: white;
|
57 |
+
box-shadow: 0px 2px 5px -2px hsla(0, 0%, 0%, 0.25);
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
#mo_popup_id input[type="radio"]#control_05:checked + label {
|
62 |
+
background: red;
|
63 |
+
border-color: red;
|
64 |
+
}
|
65 |
+
|
66 |
+
|
67 |
+
@media only screen and (max-width: 700px) {
|
68 |
+
section {
|
69 |
+
flex-direction: column;
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
|
74 |
+
.logout:hover{
|
75 |
+
/*border: 2px solid black;*/
|
76 |
+
text-decoration: underline;
|
77 |
+
}
|
78 |
+
.modalhover:hover{
|
79 |
+
border:2px solid #2EB150;
|
80 |
+
background: #2EB150 !important;
|
81 |
+
color:white !important;
|
82 |
+
}
|
includes/css/style_settings.css
CHANGED
@@ -249,7 +249,8 @@
|
|
249 |
}
|
250 |
.mo2f_black_background
|
251 |
{
|
252 |
-
background:
|
|
|
253 |
}
|
254 |
.mo2f_2fa_plan_title
|
255 |
{
|
@@ -259,6 +260,7 @@
|
|
259 |
.mo2f_padding_style
|
260 |
{
|
261 |
padding: 2px 0px;
|
|
|
262 |
}
|
263 |
.mo2f_white_color_style
|
264 |
{
|
@@ -266,8 +268,8 @@
|
|
266 |
}
|
267 |
.mo2f_2fa_lite_plan_title
|
268 |
{
|
269 |
-
background-color: #
|
270 |
-
border:
|
271 |
width: 25%
|
272 |
}
|
273 |
.mo2f_tooltip {
|
@@ -466,24 +468,24 @@
|
|
466 |
.mo_wpns_upgrade_security_title
|
467 |
{
|
468 |
width: 23%;
|
469 |
-
min-height:
|
470 |
background-color: white;
|
471 |
float: left;
|
472 |
border: 2px solid black;
|
|
|
473 |
}
|
474 |
.mo_wpns_upgrade_title_2fa_lite
|
475 |
{
|
476 |
width: 23%;
|
477 |
-
min-height:
|
478 |
background-color: white;
|
479 |
float: left;
|
480 |
-
border:
|
481 |
}
|
482 |
.mo_wpns_upgrade_page_title_name
|
483 |
{
|
484 |
text-align: center;
|
485 |
-
background-color:
|
486 |
-
text-shadow: 3px 2px 2px black;
|
487 |
min-height: 62px;
|
488 |
|
489 |
}
|
@@ -492,7 +494,7 @@
|
|
492 |
margin-top: 0%;
|
493 |
padding: 6% 0% 0% 0%;
|
494 |
color: white;
|
495 |
-
font-size:
|
496 |
}
|
497 |
.mo_wpns_upgrade_page_2fa_integration_plan_name
|
498 |
{
|
@@ -503,7 +505,7 @@
|
|
503 |
}
|
504 |
.mo_wpns_upgrade_page_hr
|
505 |
{
|
506 |
-
border:1px solid
|
507 |
}
|
508 |
.mo_wpns_upgrade_page_2fa_background
|
509 |
{
|
@@ -513,9 +515,9 @@
|
|
513 |
}
|
514 |
.mo_wpns_upgrade_page_2fa_lite_background
|
515 |
{
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
}
|
520 |
.mo_wpns_upgrade_page_show_feature_arrow
|
521 |
{
|
@@ -536,8 +538,8 @@
|
|
536 |
}
|
537 |
.mo_wpns_upgrade_page_space_in_div
|
538 |
{
|
539 |
-
width: 1%;
|
540 |
-
min-height:
|
541 |
background-color: none;
|
542 |
float: left;
|
543 |
}
|
@@ -547,48 +549,48 @@
|
|
547 |
}
|
548 |
.mo_wpns_upgrade_pade_pricing
|
549 |
{
|
550 |
-
color:
|
551 |
font-size: 350%;
|
552 |
}
|
553 |
.mo_wpns_upgrade_page_starting_price
|
554 |
{
|
555 |
-
color:
|
556 |
padding-top: 2%;
|
|
|
557 |
}
|
558 |
.mo_wpns_upgrade_page_2fa_ns
|
559 |
{
|
560 |
-
width: 96.
|
561 |
-
background-color: white;
|
562 |
color: #6cd3cd;
|
563 |
float: left;
|
564 |
text-align: center;
|
565 |
-
border-top: 4px solid #24a49d;
|
566 |
}
|
567 |
.mo_wpns_upgrade_page_show_feature
|
568 |
{
|
569 |
-
color: #
|
570 |
background-color: white;
|
571 |
font-size: 250%;
|
572 |
font-weight: 500;
|
|
|
573 |
}
|
574 |
.mo_wpns_upgrade_page_hide_feature
|
575 |
{
|
576 |
-
color: #
|
577 |
background-color: white;
|
578 |
font-size: 250%;
|
579 |
font-weight: 500;
|
580 |
-
|
581 |
}
|
582 |
.mo_wpns_upgrade_page_2fa_ns_1
|
583 |
{
|
584 |
-
color:
|
585 |
font-size: 250%;
|
586 |
}
|
587 |
.mo_wpns_upgrade_page_ns_background
|
588 |
{
|
589 |
width: 100%;
|
590 |
min-height: 277px;
|
591 |
-
background-color:
|
592 |
}
|
593 |
.mo_wpns_button_info_tab {
|
594 |
background-color: #20b2aa;
|
@@ -667,7 +669,8 @@
|
|
667 |
}
|
668 |
.overlay_error {
|
669 |
width: min-content;
|
670 |
-
height:
|
|
|
671 |
position: fixed;
|
672 |
float: right;
|
673 |
z-index: 1;
|
@@ -1018,23 +1021,8 @@
|
|
1018 |
text-align: center;
|
1019 |
color: black;
|
1020 |
box-shadow: 0 0px 0px 0 rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.19);
|
1021 |
-
/*margin-top: 20px;
|
1022 |
-
padding: 5px 20px;
|
1023 |
-
background-color: #20b2aa;
|
1024 |
-
border: 1px solid #CCCCCC;
|
1025 |
-
float: left;
|
1026 |
-
width: 227px;
|
1027 |
-
height: 170px;
|
1028 |
-
margin-left: 1%;
|
1029 |
-
color: white;
|
1030 |
-
box-shadow: 0 0px 0px 0 rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.19);*/
|
1031 |
}
|
1032 |
-
|
1033 |
-
|
1034 |
-
width: 1100px;
|
1035 |
-
background-color: yellow;
|
1036 |
-
height: auto;
|
1037 |
-
}*/
|
1038 |
|
1039 |
h2.mo_wpns_nav-tab-wrapper
|
1040 |
{
|
@@ -1110,7 +1098,6 @@ h2.mo_wpns_nav-tab-wrapper
|
|
1110 |
height: auto;
|
1111 |
width: 100%;
|
1112 |
float: left;
|
1113 |
-
/*background-color: yellow;*/
|
1114 |
}
|
1115 |
.mo_wpns_setting_layout
|
1116 |
{
|
@@ -1121,7 +1108,6 @@ h2.mo_wpns_nav-tab-wrapper
|
|
1121 |
border: 2px solid #20b2aa;
|
1122 |
float: left;
|
1123 |
width: 94%;
|
1124 |
-
/*margin-left: 1%;*/
|
1125 |
|
1126 |
overflow: hidden;
|
1127 |
text-align: left;
|
@@ -1142,8 +1128,6 @@ h2.mo_wpns_nav-tab-wrapper
|
|
1142 |
box-shadow: 0 0px 0px 0 rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.19);
|
1143 |
}
|
1144 |
.mo_wpns_sub_nav_tab {
|
1145 |
-
/*overflow: hidden;*/
|
1146 |
-
/*border: 1px solid #ccc;*/
|
1147 |
background-color: #f1f1f1;
|
1148 |
margin:22px;
|
1149 |
}
|
@@ -1276,11 +1260,10 @@ h2.mo_wpns_nav-tab-wrapper
|
|
1276 |
}
|
1277 |
.mo_wpns_upgrade_page_button
|
1278 |
{
|
1279 |
-
border: 1px solid;
|
1280 |
-
background-color:
|
1281 |
-
padding:
|
1282 |
-
|
1283 |
-
box-shadow: 0px 2px 10px black;
|
1284 |
}
|
1285 |
.mo_wpns_products-dollar-amount {
|
1286 |
color: #797878;
|
@@ -2838,7 +2821,6 @@ padding-right: 11px;
|
|
2838 |
border-color: lightgrey;
|
2839 |
border-radius: 4px;
|
2840 |
border-width: 1px;
|
2841 |
-
padding: 10px;
|
2842 |
}
|
2843 |
|
2844 |
.mo2f_licensing_plans_tr {
|
@@ -3420,3 +3402,100 @@ a.mo2f_thumbnail:hover, a.mo2f_thumbnail:focus, a.mo2f_thumbnail.active {
|
|
3420 |
background-color: #2EB150;
|
3421 |
color: white;
|
3422 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
}
|
250 |
.mo2f_black_background
|
251 |
{
|
252 |
+
background: #f1f1f1;
|
253 |
+
width: 1.4%;
|
254 |
}
|
255 |
.mo2f_2fa_plan_title
|
256 |
{
|
260 |
.mo2f_padding_style
|
261 |
{
|
262 |
padding: 2px 0px;
|
263 |
+
width: 23%;
|
264 |
}
|
265 |
.mo2f_white_color_style
|
266 |
{
|
268 |
}
|
269 |
.mo2f_2fa_lite_plan_title
|
270 |
{
|
271 |
+
background-color: #7ccbc7;
|
272 |
+
border: 1.5px solid black;
|
273 |
width: 25%
|
274 |
}
|
275 |
.mo2f_tooltip {
|
468 |
.mo_wpns_upgrade_security_title
|
469 |
{
|
470 |
width: 23%;
|
471 |
+
min-height: 480px;
|
472 |
background-color: white;
|
473 |
float: left;
|
474 |
border: 2px solid black;
|
475 |
+
border-top: none;
|
476 |
}
|
477 |
.mo_wpns_upgrade_title_2fa_lite
|
478 |
{
|
479 |
width: 23%;
|
480 |
+
min-height: 332px;
|
481 |
background-color: white;
|
482 |
float: left;
|
483 |
+
border-top: none;
|
484 |
}
|
485 |
.mo_wpns_upgrade_page_title_name
|
486 |
{
|
487 |
text-align: center;
|
488 |
+
background-color: #393939;
|
|
|
489 |
min-height: 62px;
|
490 |
|
491 |
}
|
494 |
margin-top: 0%;
|
495 |
padding: 6% 0% 0% 0%;
|
496 |
color: white;
|
497 |
+
font-size: 220%;
|
498 |
}
|
499 |
.mo_wpns_upgrade_page_2fa_integration_plan_name
|
500 |
{
|
505 |
}
|
506 |
.mo_wpns_upgrade_page_hr
|
507 |
{
|
508 |
+
border:1px solid #393939;
|
509 |
}
|
510 |
.mo_wpns_upgrade_page_2fa_background
|
511 |
{
|
515 |
}
|
516 |
.mo_wpns_upgrade_page_2fa_lite_background
|
517 |
{
|
518 |
+
min-height: 231px;
|
519 |
+
background-color: white;
|
520 |
+
padding: 5px;
|
521 |
}
|
522 |
.mo_wpns_upgrade_page_show_feature_arrow
|
523 |
{
|
538 |
}
|
539 |
.mo_wpns_upgrade_page_space_in_div
|
540 |
{
|
541 |
+
width: 1.3%;
|
542 |
+
min-height: 332px;
|
543 |
background-color: none;
|
544 |
float: left;
|
545 |
}
|
549 |
}
|
550 |
.mo_wpns_upgrade_pade_pricing
|
551 |
{
|
552 |
+
color: #2ca29c;
|
553 |
font-size: 350%;
|
554 |
}
|
555 |
.mo_wpns_upgrade_page_starting_price
|
556 |
{
|
557 |
+
color: black;
|
558 |
padding-top: 2%;
|
559 |
+
margin-top: 0px;
|
560 |
}
|
561 |
.mo_wpns_upgrade_page_2fa_ns
|
562 |
{
|
563 |
+
width: 96.8%;
|
|
|
564 |
color: #6cd3cd;
|
565 |
float: left;
|
566 |
text-align: center;
|
|
|
567 |
}
|
568 |
.mo_wpns_upgrade_page_show_feature
|
569 |
{
|
570 |
+
color: #007cba;
|
571 |
background-color: white;
|
572 |
font-size: 250%;
|
573 |
font-weight: 500;
|
574 |
+
display: none;
|
575 |
}
|
576 |
.mo_wpns_upgrade_page_hide_feature
|
577 |
{
|
578 |
+
color: #007cba;
|
579 |
background-color: white;
|
580 |
font-size: 250%;
|
581 |
font-weight: 500;
|
582 |
+
|
583 |
}
|
584 |
.mo_wpns_upgrade_page_2fa_ns_1
|
585 |
{
|
586 |
+
color: white;
|
587 |
font-size: 250%;
|
588 |
}
|
589 |
.mo_wpns_upgrade_page_ns_background
|
590 |
{
|
591 |
width: 100%;
|
592 |
min-height: 277px;
|
593 |
+
background-color: white;
|
594 |
}
|
595 |
.mo_wpns_button_info_tab {
|
596 |
background-color: #20b2aa;
|
669 |
}
|
670 |
.overlay_error {
|
671 |
width: min-content;
|
672 |
+
height: min-content;
|
673 |
+
padding-bottom: 1%;
|
674 |
position: fixed;
|
675 |
float: right;
|
676 |
z-index: 1;
|
1021 |
text-align: center;
|
1022 |
color: black;
|
1023 |
box-shadow: 0 0px 0px 0 rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.19);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1024 |
}
|
1025 |
+
|
|
|
|
|
|
|
|
|
|
|
1026 |
|
1027 |
h2.mo_wpns_nav-tab-wrapper
|
1028 |
{
|
1098 |
height: auto;
|
1099 |
width: 100%;
|
1100 |
float: left;
|
|
|
1101 |
}
|
1102 |
.mo_wpns_setting_layout
|
1103 |
{
|
1108 |
border: 2px solid #20b2aa;
|
1109 |
float: left;
|
1110 |
width: 94%;
|
|
|
1111 |
|
1112 |
overflow: hidden;
|
1113 |
text-align: left;
|
1128 |
box-shadow: 0 0px 0px 0 rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.19);
|
1129 |
}
|
1130 |
.mo_wpns_sub_nav_tab {
|
|
|
|
|
1131 |
background-color: #f1f1f1;
|
1132 |
margin:22px;
|
1133 |
}
|
1260 |
}
|
1261 |
.mo_wpns_upgrade_page_button
|
1262 |
{
|
1263 |
+
border: 1px solid black;
|
1264 |
+
background-color: #7ccbc7;
|
1265 |
+
padding: 12px 0px;
|
1266 |
+
width: 98.5%;
|
|
|
1267 |
}
|
1268 |
.mo_wpns_products-dollar-amount {
|
1269 |
color: #797878;
|
2821 |
border-color: lightgrey;
|
2822 |
border-radius: 4px;
|
2823 |
border-width: 1px;
|
|
|
2824 |
}
|
2825 |
|
2826 |
.mo2f_licensing_plans_tr {
|
3402 |
background-color: #2EB150;
|
3403 |
color: white;
|
3404 |
}
|
3405 |
+
.mo2f_boder_radius
|
3406 |
+
{
|
3407 |
+
border-bottom-left-radius: 25px;
|
3408 |
+
}
|
3409 |
+
.mo2f_back_button
|
3410 |
+
{
|
3411 |
+
margin-left: 4px;
|
3412 |
+
padding: 4px 8px;
|
3413 |
+
position: relative;
|
3414 |
+
top: -3px;
|
3415 |
+
text-decoration: none;
|
3416 |
+
border: 1px solid #0071a1;
|
3417 |
+
border-radius: 2px;
|
3418 |
+
text-shadow: none;
|
3419 |
+
font-weight: 600;
|
3420 |
+
font-size: 13px;
|
3421 |
+
line-height: normal;
|
3422 |
+
color: #0071a1;
|
3423 |
+
background: #f3f5f6;
|
3424 |
+
cursor: pointer;
|
3425 |
+
}
|
3426 |
+
.mo2f_back_button:hover
|
3427 |
+
{
|
3428 |
+
background-color: #daf0f2;
|
3429 |
+
}
|
3430 |
+
.mo2f_plan_based_title
|
3431 |
+
{
|
3432 |
+
width: 47%;
|
3433 |
+
background-color: #7ccbc7;
|
3434 |
+
float: left;
|
3435 |
+
border: 2px solid black;
|
3436 |
+
border-bottom: none;
|
3437 |
+
border-top-left-radius: 10px;
|
3438 |
+
border-top-right-radius: 10px;
|
3439 |
+
}
|
3440 |
+
.mo2f_plan_based_title_div
|
3441 |
+
{
|
3442 |
+
color: white;
|
3443 |
+
font-size: 264%;
|
3444 |
+
|
3445 |
+
}
|
3446 |
+
.mo2f_addons_alignment
|
3447 |
+
{
|
3448 |
+
color:#20b2aa;
|
3449 |
+
font-size: large;
|
3450 |
+
float: left;
|
3451 |
+
margin-right: 5px;
|
3452 |
+
}
|
3453 |
+
.mo2f_addons_not_included
|
3454 |
+
{
|
3455 |
+
color:red;
|
3456 |
+
font-size: x-large;
|
3457 |
+
float: left;
|
3458 |
+
margin-right: 5px;
|
3459 |
+
}
|
3460 |
+
.mo2f_auth_method_style
|
3461 |
+
{
|
3462 |
+
font-size: 15px;
|
3463 |
+
line-height: initial;
|
3464 |
+
}
|
3465 |
+
.mo2f_active_plan
|
3466 |
+
{
|
3467 |
+
background-color: #7ccbc7;
|
3468 |
+
border-radius: 50em;
|
3469 |
+
}
|
3470 |
+
.mo_wpns_upgrade_page_2fa_ns_styles
|
3471 |
+
{
|
3472 |
+
background-color: #7ccbc7;
|
3473 |
+
border: 2px solid black;
|
3474 |
+
border-top-left-radius: 25px;
|
3475 |
+
border-top-right-radius: 25px;
|
3476 |
+
border-bottom: none;
|
3477 |
+
}
|
3478 |
+
.mo2f_tooltip .mo2f_site_based_vs_user_based
|
3479 |
+
{
|
3480 |
+
min-height: 200px;
|
3481 |
+
margin-top: 10%;
|
3482 |
+
background-color: #ffffff;
|
3483 |
+
color: black;
|
3484 |
+
border: 1px solid black;
|
3485 |
+
width: 300px;
|
3486 |
+
padding: 0px;
|
3487 |
+
margin-left: -146px;
|
3488 |
+
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
|
3489 |
+
}
|
3490 |
+
.mo2f_tooltip .mo2f_site_based_vs_user_based_title
|
3491 |
+
{
|
3492 |
+
background-color: #ccf2f1;
|
3493 |
+
color: black;
|
3494 |
+
padding: 10px;
|
3495 |
+
}
|
3496 |
+
.mo2f_site_based_vs_user_based_info_icon
|
3497 |
+
{
|
3498 |
+
font-size: 25px;
|
3499 |
+
color: #ffffff;
|
3500 |
+
margin-left: 15px;
|
3501 |
+
}
|
includes/js/bootstrap.min.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
/*!
|
2 |
-
* Bootstrap v3.3.4 (http://getbootstrap.com)
|
3 |
-
* Copyright 2011-2015 Twitter, Inc.
|
4 |
-
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
-
*/
|
6 |
-
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.mo2f_carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.mo2f_carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".mo2f_carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.mo2f_carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.mo2f_carousel",a.proxy(this.pause,this)).on("mouseleave.bs.mo2f_carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.mo2f_carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.mo2f_carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.mo2f_carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("mo2f_carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.mo2f_carousel").to(h),c.preventDefault()}};a(document).on("click.bs.mo2f_carousel.data-api","[data-slide]",e).on("click.bs.mo2f_carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.mo2f_collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.mo2f_collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .mo2f_collapsing");if(!(e&&e.length&&(b=e.data("bs.mo2f_collapse"),b&&b.transitioning))){var f=a.Event("show.bs.mo2f_collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.mo2f_collapse",null));var g=this.dimension();this.$element.removeClass("mo2f_collapse").addClass("mo2f_collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("mo2f_collapsing").addClass("mo2f_collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.mo2f_collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.mo2f_collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("mo2f_collapsing").removeClass("mo2f_collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("mo2f_collapsing").addClass("mo2f_collapse").trigger("hidden.bs.mo2f_collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.mo2f_collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.mo2f_collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.mo2f_modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.mo2f_modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".mo2f_modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".mo2f_modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.mo2f_modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.mo2f_modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("mo2f_modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.mo2f_modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.mo2f_modal",function(){d.$element.one("mouseup.dismiss.bs.mo2f_modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.mo2f_modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.mo2f_modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.mo2f_modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.mo2f_modal").off("mouseup.dismiss.bs.mo2f_modal"),this.$dialog.off("mousedown.dismiss.bs.mo2f_modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.mo2f_modal").on("focusin.bs.mo2f_modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.mo2f_modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.mo2f_modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.mo2f_modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.mo2f_modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("mo2f_modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.mo2f_modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="mo2f-modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.mo2f_modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="mo2f_modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.mo2f_modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.mo2f_modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.mo2f_modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.mo2f_modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
|
7 |
var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
|
1 |
+
/*!
|
2 |
+
* Bootstrap v3.3.4 (http://getbootstrap.com)
|
3 |
+
* Copyright 2011-2015 Twitter, Inc.
|
4 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
5 |
+
*/
|
6 |
+
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.mo2f_carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.mo2f_carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".mo2f_carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.mo2f_carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.mo2f_carousel",a.proxy(this.pause,this)).on("mouseleave.bs.mo2f_carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.mo2f_carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.mo2f_carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.mo2f_carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("mo2f_carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.mo2f_carousel").to(h),c.preventDefault()}};a(document).on("click.bs.mo2f_carousel.data-api","[data-slide]",e).on("click.bs.mo2f_carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.mo2f_collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.mo2f_collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .mo2f_collapsing");if(!(e&&e.length&&(b=e.data("bs.mo2f_collapse"),b&&b.transitioning))){var f=a.Event("show.bs.mo2f_collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.mo2f_collapse",null));var g=this.dimension();this.$element.removeClass("mo2f_collapse").addClass("mo2f_collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("mo2f_collapsing").addClass("mo2f_collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.mo2f_collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.mo2f_collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("mo2f_collapsing").removeClass("mo2f_collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("mo2f_collapsing").addClass("mo2f_collapse").trigger("hidden.bs.mo2f_collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.mo2f_collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.mo2f_collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.mo2f_modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.mo2f_modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".mo2f_modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".mo2f_modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.mo2f_modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.mo2f_modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("mo2f_modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.mo2f_modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.mo2f_modal",function(){d.$element.one("mouseup.dismiss.bs.mo2f_modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.mo2f_modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.mo2f_modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.mo2f_modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.mo2f_modal").off("mouseup.dismiss.bs.mo2f_modal"),this.$dialog.off("mousedown.dismiss.bs.mo2f_modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.mo2f_modal").on("focusin.bs.mo2f_modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.mo2f_modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.mo2f_modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.mo2f_modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.mo2f_modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("mo2f_modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.mo2f_modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="mo2f-modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.mo2f_modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="mo2f_modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.mo2f_modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.mo2f_modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.mo2f_modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.mo2f_modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
|
7 |
var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
|
includes/js/custom-ajax-rcp.js
ADDED
@@ -0,0 +1,268 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function()
|
2 |
+
{
|
3 |
+
let $mo = jQuery;
|
4 |
+
|
5 |
+
let ajaxurl = otpverificationObj.siteURL;
|
6 |
+
let nonce = otpverificationObj.nonce;
|
7 |
+
let submitSelector = otpverificationObj.submitSelector;
|
8 |
+
let formName = otpverificationObj.formname;
|
9 |
+
let emailSelector = otpverificationObj.emailselector;
|
10 |
+
let phoneSelector = otpverificationObj.phoneSelector;
|
11 |
+
let loaderUrl = otpverificationObj.loaderUrl;
|
12 |
+
let isValidated = false
|
13 |
+
let isEmailValidated = false
|
14 |
+
let isPhoneValidated = false
|
15 |
+
let email_txId = ""
|
16 |
+
let sms_txId = ""
|
17 |
+
let validated = false
|
18 |
+
let isBoth = false
|
19 |
+
let authType = otpverificationObj.authType;
|
20 |
+
let isShortEnabled = otpverificationObj.isEnabledShortcode;
|
21 |
+
let formAction = jQuery(formName).attr('action');
|
22 |
+
let formMethod = jQuery(formName).attr('method');
|
23 |
+
let submitSelectorName = jQuery(submitSelector).attr('name');
|
24 |
+
let submitSelectorId = jQuery(submitSelector).attr('id')
|
25 |
+
|
26 |
+
const otp_over_email = '<label for="mo2f_reg_email">OTP Over Email <span class="required">*</span></label> <input type="text" name="mo2f_email_otp" id="mo2f_email_otp" placeholder="Enter OTP sent on email" />';
|
27 |
+
const otp_over_sms = '<label for="mo2f_reg_sms">OTP Over SMS <span class="required">*</span></label> <input type="text" name="mo2f_phone_otp" id="mo2f_phone_otp" placeholder="Enter OTP sent on phone number" />';
|
28 |
+
authType = 'email';
|
29 |
+
|
30 |
+
switch (authType)
|
31 |
+
{
|
32 |
+
case 'phone':
|
33 |
+
jQuery(phoneSelector).wrap( "<div class='buttonInsidePhone'></div>" );
|
34 |
+
jQuery(phoneSelector).after('<button class="mo2f_send_phoneotp_button" id="mo2f_send_ajax_sms">Send OTP</button> ');
|
35 |
+
mo2f_ajax_before_reg();
|
36 |
+
break;
|
37 |
+
|
38 |
+
case 'email':
|
39 |
+
jQuery(emailSelector).wrap( "<div class='buttonInsideEmail'></div>" );
|
40 |
+
jQuery(emailSelector).after('<button class="mo2f_send_emailotp_button" id="mo2f_send_ajax_email">Send OTP</button>');
|
41 |
+
mo2f_ajax_before_reg();
|
42 |
+
break;
|
43 |
+
|
44 |
+
case 'both':
|
45 |
+
isBoth = true;
|
46 |
+
jQuery(phoneSelector).wrap( "<div class='buttonInsidePhone'></div>" );
|
47 |
+
jQuery(phoneSelector).after('<button class="mo2f_send_phoneotp_button" id="mo2f_send_ajax_sms">Send OTP</button> ');
|
48 |
+
jQuery(emailSelector).wrap( "<div class='buttonInsideEmail'></div>" );
|
49 |
+
jQuery(emailSelector).after('<button class="mo2f_send_emailotp_button" id="mo2f_send_ajax_email">Send OTP</button>');
|
50 |
+
mo2f_ajax_before_reg();
|
51 |
+
break;
|
52 |
+
|
53 |
+
default:
|
54 |
+
break;
|
55 |
+
}
|
56 |
+
|
57 |
+
|
58 |
+
jQuery("#mo2f_send_ajax_email").click(function(e){
|
59 |
+
e.preventDefault();
|
60 |
+
var mo2f_email = jQuery(emailSelector).val();
|
61 |
+
if (validateEmail(mo2f_email))
|
62 |
+
{
|
63 |
+
let data =
|
64 |
+
{
|
65 |
+
'action' : 'mo_ajax_register',
|
66 |
+
'mo_action' : 'send_otp_over_email',
|
67 |
+
'email' : mo2f_email,
|
68 |
+
'nonce' : nonce,
|
69 |
+
'authTypeSend' : 'email'
|
70 |
+
}
|
71 |
+
|
72 |
+
$mo.post(ajaxurl, data,function (response){
|
73 |
+
jQuery("#mo2f_send_ajax_email").html("Resend OTP");
|
74 |
+
if(response.status=='SUCCESS'){
|
75 |
+
email_txId = response.txId;
|
76 |
+
if(typeof jQuery('#mo2f_email_otp').val() == 'undefined')
|
77 |
+
jQuery(".buttonInsideEmail").after(otp_over_email);
|
78 |
+
}
|
79 |
+
});
|
80 |
+
}else{
|
81 |
+
jQuery("<p class='rc-error rcp-error'><span>Please enter valid email address</span></p>").insertBefore("#miniorange_submit");
|
82 |
+
}
|
83 |
+
|
84 |
+
});
|
85 |
+
|
86 |
+
jQuery("#mo2f_send_ajax_sms").click(function(e){
|
87 |
+
e.preventDefault();
|
88 |
+
var mo2f_phone = jQuery(phoneSelector).val();
|
89 |
+
if (validatePhone(mo2f_phone))
|
90 |
+
{
|
91 |
+
let data =
|
92 |
+
{
|
93 |
+
'action' : 'mo_ajax_register',
|
94 |
+
'mo_action' : 'send_otp_over_sms',
|
95 |
+
'phone' : mo2f_phone,
|
96 |
+
'nonce' : nonce,
|
97 |
+
'authTypeSend' : 'phone'
|
98 |
+
}
|
99 |
+
|
100 |
+
$mo.post(ajaxurl, data,function (response){
|
101 |
+
jQuery("#mo2f_send_ajax_sms").html("Resend OTP");
|
102 |
+
if(response.status=='SUCCESS'){
|
103 |
+
sms_txId = response.txId;
|
104 |
+
jQuery(".buttonInsidePhone").after(otp_over_sms);
|
105 |
+
}
|
106 |
+
});
|
107 |
+
}else{
|
108 |
+
jQuery("<p class='rc-error rcp-error'><span>Please enter valid phone number</span></p>").insertBefore("#miniorange_submit");
|
109 |
+
}
|
110 |
+
|
111 |
+
});
|
112 |
+
|
113 |
+
function validate_otp(txId,otp,authType,isBoth){
|
114 |
+
let data =
|
115 |
+
{
|
116 |
+
'action' : 'mo_ajax_register',
|
117 |
+
'mo_action' : 'validate',
|
118 |
+
'otp' : otp,
|
119 |
+
'nonce' : nonce,
|
120 |
+
'txId' : txId,
|
121 |
+
}
|
122 |
+
|
123 |
+
$mo.post(ajaxurl,data,function(response)
|
124 |
+
{
|
125 |
+
if(response.status == 'SUCCESS'){
|
126 |
+
if(authType == 'email'){
|
127 |
+
isEmailValidated = true;
|
128 |
+
if(!isBoth)
|
129 |
+
mo2f_rcp_ajax();
|
130 |
+
}
|
131 |
+
else if(authType == 'phone'){
|
132 |
+
isPhoneValidated = true;
|
133 |
+
if(!isBoth)
|
134 |
+
mo2f_rcp_ajax();
|
135 |
+
}
|
136 |
+
|
137 |
+
if(isBoth){
|
138 |
+
if(isEmailValidated && isPhoneValidated)
|
139 |
+
mo2f_rcp_ajax();
|
140 |
+
}
|
141 |
+
}else{
|
142 |
+
jQuery("<p class='rc-error rcp-error'><span>Please enter valid OTP</span></p>").insertBefore("#miniorange_submit");
|
143 |
+
jQuery('#loading').css('display', 'none');
|
144 |
+
jQuery("#miniorange_submit").prop('disabled',false);
|
145 |
+
}
|
146 |
+
|
147 |
+
});
|
148 |
+
}
|
149 |
+
|
150 |
+
jQuery("#miniorange_submit").click(function(e){
|
151 |
+
e.preventDefault();
|
152 |
+
if(!validated){
|
153 |
+
jQuery("#miniorange_submit").after("<div id='loading' ><div id='loaderMsg'></div><div><img src='"+loaderUrl+"' alt='' /></div></div>");
|
154 |
+
jQuery("#miniorange_submit").prop('disabled',true);
|
155 |
+
switch(authType){
|
156 |
+
case 'email':
|
157 |
+
if(isEmailValidated)
|
158 |
+
mo2f_rcp_ajax();
|
159 |
+
else{
|
160 |
+
otp = jQuery("#mo2f_email_otp").val();
|
161 |
+
if(typeof otp != 'undefined'){
|
162 |
+
addLoaderMessage("Validating Email");
|
163 |
+
validate_otp(email_txId,otp,'email',isBoth);
|
164 |
+
}
|
165 |
+
else{
|
166 |
+
jQuery("<p class='rc-error rcp-error'><span>Please validate Email</span></p>").insertBefore("#miniorange_submit");
|
167 |
+
jQuery("#loading").css('display','none');
|
168 |
+
jQuery("#miniorange_submit").prop('disabled',false);
|
169 |
+
}
|
170 |
+
}
|
171 |
+
break;
|
172 |
+
case 'phone':
|
173 |
+
if(isPhoneValidated)
|
174 |
+
mo2f_rcp_ajax();
|
175 |
+
else{
|
176 |
+
otp = jQuery("#mo2f_phone_otp").val();
|
177 |
+
if(typeof otp != 'undefined'){
|
178 |
+
addLoaderMessage("Validating Phone");
|
179 |
+
validate_otp(sms_txId,otp,'phone',isBoth);
|
180 |
+
}
|
181 |
+
else{
|
182 |
+
jQuery("<p class='rc-error rcp-error'><span>Please validate Phone</span></p>").insertBefore("#miniorange_submit");
|
183 |
+
jQuery("#loading").css('display','none');
|
184 |
+
jQuery("#miniorange_submit").prop('disabled',false);
|
185 |
+
}
|
186 |
+
}
|
187 |
+
break;
|
188 |
+
default:
|
189 |
+
if(isEmailValidated && isPhoneValidated)
|
190 |
+
mo2f_rcp_ajax();
|
191 |
+
else{
|
192 |
+
if(!isEmailValidated)
|
193 |
+
otp = jQuery("#mo2f_email_otp").val();
|
194 |
+
if(typeof otp != 'undefined'){
|
195 |
+
addLoaderMessage("Validating Email");
|
196 |
+
validate_otp(email_txId,otp,'email',isBoth);
|
197 |
+
}
|
198 |
+
else{
|
199 |
+
jQuery("<p class='rc-error rcp-error'><span>Please validate Email</span></p>").insertBefore("#miniorange_submit");
|
200 |
+
jQuery("#loading").css('display','none');
|
201 |
+
jQuery("#miniorange_submit").prop('disabled',false);
|
202 |
+
}
|
203 |
+
if(!isPhoneValidated){
|
204 |
+
otp = jQuery("#mo2f_phone_otp").val();
|
205 |
+
if(typeof otp != 'undefined'){
|
206 |
+
addLoaderMessage("Validating Phone");
|
207 |
+
validate_otp(sms_txId,otp,'phone',isBoth);
|
208 |
+
}
|
209 |
+
else{
|
210 |
+
jQuery("<p class='rc-error rcp-error'><span>Please validate Phone</span></p>").insertBefore("#miniorange_submit");
|
211 |
+
jQuery("#loading").css('display','none');
|
212 |
+
jQuery("#miniorange_submit").prop('disabled',false);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
}
|
216 |
+
break;
|
217 |
+
}
|
218 |
+
}
|
219 |
+
|
220 |
+
});
|
221 |
+
|
222 |
+
function validateEmail(email_address){
|
223 |
+
let email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i
|
224 |
+
if (!email_regex.test(email_address))
|
225 |
+
{
|
226 |
+
return false
|
227 |
+
}
|
228 |
+
return true
|
229 |
+
}
|
230 |
+
|
231 |
+
function validatePhone(phone){
|
232 |
+
let intRegex = /[0-9 -()+]+$/;
|
233 |
+
if(phone.length < 10 || phone.length == 0 || (!intRegex.test(phone)))
|
234 |
+
{
|
235 |
+
return false
|
236 |
+
}
|
237 |
+
return true
|
238 |
+
}
|
239 |
+
|
240 |
+
function mo2f_ajax_before_reg(){
|
241 |
+
jQuery(formName).removeAttr('action');
|
242 |
+
jQuery(formName).removeAttr('method');
|
243 |
+
if(/^#/.test(submitSelector)){
|
244 |
+
jQuery(submitSelector).attr('name','miniorange_submit');
|
245 |
+
jQuery('input[name="miniorange_submit"]').attr('id','miniorange_submit');
|
246 |
+
}else{
|
247 |
+
jQuery(submitSelector).attr('id','miniorange_submit');
|
248 |
+
jQuery('#miniorange_submit').attr('name','miniorange_submit');
|
249 |
+
}
|
250 |
+
}
|
251 |
+
|
252 |
+
function mo2f_rcp_ajax(){
|
253 |
+
validated = true;
|
254 |
+
jQuery("#loading").css('display','none');
|
255 |
+
jQuery("#miniorange_submit").prop('disabled',false);
|
256 |
+
jQuery(formName).attr('action',formAction);
|
257 |
+
jQuery(formName).attr('method',formMethod);
|
258 |
+
jQuery("#miniorange_submit").attr('name',submitSelectorName);
|
259 |
+
jQuery('input[name="'+submitSelectorName+'"').removeAttr('id');
|
260 |
+
jQuery('input[name="'+submitSelectorName+'"').attr('id', submitSelectorId);
|
261 |
+
jQuery(submitSelector).click();
|
262 |
+
}
|
263 |
+
|
264 |
+
function addLoaderMessage(msg){
|
265 |
+
jQuery("#loaderMsg").empty();
|
266 |
+
jQuery("#loaderMsg").append(msg);
|
267 |
+
}
|
268 |
+
});
|
includes/js/custom-form-ajax.js
ADDED
@@ -0,0 +1,487 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function()
|
2 |
+
{
|
3 |
+
let $mo = jQuery;
|
4 |
+
let ajaxurl = otpverificationObj.siteURL;
|
5 |
+
let nonce = otpverificationObj.nonce;
|
6 |
+
let submitSelector = otpverificationObj.submitSelector;
|
7 |
+
let formName = otpverificationObj.formname;
|
8 |
+
let emailSelector = otpverificationObj.emailselector;
|
9 |
+
let phoneSelector = otpverificationObj.phoneSelector
|
10 |
+
let txId="";
|
11 |
+
let txIdNew =""
|
12 |
+
let isValidated = false
|
13 |
+
let isEmailResend = false
|
14 |
+
let isSecond = false
|
15 |
+
let authType = otpverificationObj.authType;
|
16 |
+
let isShortEnabled = otpverificationObj.isEnabledShortcode;
|
17 |
+
let isRegistered = otpverificationObj.isRegistered;
|
18 |
+
|
19 |
+
|
20 |
+
const otpEdit = '<input type="text"' +
|
21 |
+
'name="edit_otp"' +
|
22 |
+
'id="edit_otp"' +
|
23 |
+
'placeholder="Enter the OTP you have received"' +
|
24 |
+
'style="display:none;"><br>';
|
25 |
+
const messageTextMobile='<br><p id="otpmessage"> An OTP will be sent to your Mobile Number</p>';
|
26 |
+
const messageTextBoth = ' <p id="otpmessage">An OTP will be sent to your Mobile Number and Email</p>'
|
27 |
+
const messageTextEmail = '<br><p id="otpmessage"> An OTP will be sent to your Email ID</p>';
|
28 |
+
|
29 |
+
const sendButton = '<div class="button" ' +
|
30 |
+
'id ="otp_send_button">Send OTP</div> ' +
|
31 |
+
'<div class="button" ' +
|
32 |
+
'id ="timer" ' +
|
33 |
+
'style="visibility:hidden;">00</div><br><br>';
|
34 |
+
|
35 |
+
const phonelabel = '<label for="reg_phone">Phone Number <span class="required">*</span></label>';
|
36 |
+
|
37 |
+
if(isRegistered === 'false')
|
38 |
+
{
|
39 |
+
const messageNotRegistered = '<p id="registermessage" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Register/Login with miniOrange to Enable 2FA for this Form</p>';
|
40 |
+
$mo(emailSelector).after('<br>'+messageNotRegistered);
|
41 |
+
}
|
42 |
+
else
|
43 |
+
if(($mo(formName).length || $mo(submitSelector).length) && isRegistered!==false && isShortEnabled !== 'false')
|
44 |
+
|
45 |
+
{ let counter = 0
|
46 |
+
|
47 |
+
function setMessage(message,color) {
|
48 |
+
$mo('#otpmessage').text("")
|
49 |
+
$mo('#otpmessage').text(message).css('color',color)
|
50 |
+
}
|
51 |
+
function sendChallenge(authType, phone, email,nonce, ajaxurl) {
|
52 |
+
txId = ""
|
53 |
+
let timeLeft = 0
|
54 |
+
let timerId
|
55 |
+
let data =
|
56 |
+
{
|
57 |
+
'action' : 'mo_shortcode',
|
58 |
+
'mo_action' : 'challenge',
|
59 |
+
'email' : email,
|
60 |
+
'phone' : phone,
|
61 |
+
'nonce' : nonce ,
|
62 |
+
'authTypeSend' : authType
|
63 |
+
}
|
64 |
+
|
65 |
+
$mo("#otp_send_button").text("Sending")
|
66 |
+
$mo.post(ajaxurl, data,function (response)
|
67 |
+
{
|
68 |
+
if(response === null)
|
69 |
+
{
|
70 |
+
setMessage('Contact Site Administrator','red')
|
71 |
+
}
|
72 |
+
else
|
73 |
+
{
|
74 |
+
switch (response.status)
|
75 |
+
{
|
76 |
+
case "SUCCESS":
|
77 |
+
$mo("#edit_otp").css("display", "inherit")
|
78 |
+
setMessage(response.message, 'green')
|
79 |
+
|
80 |
+
if(isSecond)
|
81 |
+
{
|
82 |
+
txIdNew = response.txId
|
83 |
+
clearInterval(timerId)
|
84 |
+
}
|
85 |
+
|
86 |
+
else
|
87 |
+
{
|
88 |
+
txId = response.txId
|
89 |
+
timeLeft = 30
|
90 |
+
}
|
91 |
+
|
92 |
+
timerId = setInterval(countdown, 1000)
|
93 |
+
|
94 |
+
function countdown() {
|
95 |
+
if (timeLeft === 0)
|
96 |
+
{
|
97 |
+
clearTimeout(timerId)
|
98 |
+
$mo("#otp_send_button").css("display", "initial");
|
99 |
+
$mo("#timer").css("visibility", "hidden");
|
100 |
+
$mo("#otp_send_button").text("Resend");
|
101 |
+
|
102 |
+
} else {
|
103 |
+
$mo("#timer").css("visibility", "visible");
|
104 |
+
$mo("#otp_send_button").css("display", "none");
|
105 |
+
$mo("#timer").text(timeLeft);
|
106 |
+
timeLeft--;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
break;
|
110 |
+
case "FAILED":
|
111 |
+
setMessage(response.message,'red')
|
112 |
+
break;
|
113 |
+
case "ERROR":
|
114 |
+
setMessage(response.message,'red')
|
115 |
+
break
|
116 |
+
}
|
117 |
+
}
|
118 |
+
})
|
119 |
+
|
120 |
+
|
121 |
+
}
|
122 |
+
|
123 |
+
function validateOTP(otp,nonce,phone,txId,email){
|
124 |
+
|
125 |
+
let data =
|
126 |
+
{
|
127 |
+
'action' : 'mo_shortcode',
|
128 |
+
'mo_action' : 'validate',
|
129 |
+
'otp' : otp,
|
130 |
+
'nonce' : nonce,
|
131 |
+
'mobile' : phone,
|
132 |
+
'txId' : txId,
|
133 |
+
'email' : email
|
134 |
+
}
|
135 |
+
|
136 |
+
if(isValidated === false)
|
137 |
+
{
|
138 |
+
|
139 |
+
$mo.post(ajaxurl,data,function(response)
|
140 |
+
{
|
141 |
+
if(response === null)
|
142 |
+
{
|
143 |
+
setMessage('Error Validating OTP','red')
|
144 |
+
$mo(formName).unbind('submit')
|
145 |
+
isValidated = false
|
146 |
+
}
|
147 |
+
else
|
148 |
+
switch (response.status)
|
149 |
+
{
|
150 |
+
case "SUCCESS":
|
151 |
+
setMessage(response.message,'green')
|
152 |
+
isValidated = true
|
153 |
+
$mo(submitSelector).removeAttr("disabled")
|
154 |
+
$mo(submitSelector).prop('disabled',false)
|
155 |
+
$mo(formName).unbind('submit')
|
156 |
+
$mo(submitSelector).unbind('click').click()
|
157 |
+
break
|
158 |
+
case "FAILED":
|
159 |
+
setMessage(response.message,'red')
|
160 |
+
$mo(submitSelector).removeAttr("disabled")
|
161 |
+
$mo(submitSelector).prop('disabled',false)
|
162 |
+
break
|
163 |
+
case "ERROR":
|
164 |
+
$mo(submitSelector).removeAttr("disabled")
|
165 |
+
setMessage('Invalid OTP','red')
|
166 |
+
$mo(submitSelector).prop('disabled',false)
|
167 |
+
break
|
168 |
+
}
|
169 |
+
})
|
170 |
+
}
|
171 |
+
}
|
172 |
+
function validateBoth(otp,nonce,phone,txId,email,isFirst) {
|
173 |
+
let data =
|
174 |
+
{
|
175 |
+
'action' : 'mo_shortcode',
|
176 |
+
'mo_action' : 'validate',
|
177 |
+
'otp' : otp,
|
178 |
+
'nonce' : nonce,
|
179 |
+
'mobile' : phone,
|
180 |
+
'txId' : txId,
|
181 |
+
'email' : email
|
182 |
+
}
|
183 |
+
|
184 |
+
if(isValidated == false)
|
185 |
+
{
|
186 |
+
if(isFirst)
|
187 |
+
$mo.post(ajaxurl,data,function(response)
|
188 |
+
{
|
189 |
+
isFirst = false
|
190 |
+
if(response === null)
|
191 |
+
{
|
192 |
+
setMessage('Error Validating OTP','red')
|
193 |
+
isValidated = false
|
194 |
+
}
|
195 |
+
else
|
196 |
+
switch (response.status)
|
197 |
+
{
|
198 |
+
case "SUCCESS":
|
199 |
+
$mo(submitSelector).removeAttr("disabled");
|
200 |
+
setMessage(phone+' '+response.message +' '+ 'Sending OTP on '+email,'green')
|
201 |
+
isValidated = false
|
202 |
+
isSecond = true
|
203 |
+
|
204 |
+
setTimeout(function () {
|
205 |
+
sendChallenge('email',null,email,nonce,ajaxurl)
|
206 |
+
},3000)
|
207 |
+
|
208 |
+
$mo('#edit_otp').val("")
|
209 |
+
$mo('#edit_otp').css('placeholder','Enter OTP Sent on your email')
|
210 |
+
$mo(phoneSelector).after('<br><p style="color:green;"> Phone Number Validated ☑</p>')
|
211 |
+
$mo(phoneSelector).attr('disabled','true')
|
212 |
+
$mo(submitSelector).text('Register')
|
213 |
+
|
214 |
+
$mo(submitSelector).click(function(e) {
|
215 |
+
if (isValidated == false)
|
216 |
+
{
|
217 |
+
e.preventDefault()
|
218 |
+
otp = $mo('#edit_otp').val()
|
219 |
+
validateOTP(otp, nonce, phone, txIdNew, email)
|
220 |
+
}
|
221 |
+
})
|
222 |
+
break;
|
223 |
+
case "FAILED":
|
224 |
+
setMessage(response.message,'red')
|
225 |
+
$mo(submitSelector).removeAttr("disabled");
|
226 |
+
break
|
227 |
+
case "ERROR":
|
228 |
+
setMessage(response.message,'red')
|
229 |
+
$mo(submitSelector).removeAttr("disabled");
|
230 |
+
break
|
231 |
+
}
|
232 |
+
})
|
233 |
+
}
|
234 |
+
else
|
235 |
+
{
|
236 |
+
setMessage('Already Validated', 'red')
|
237 |
+
jQuery.reload()
|
238 |
+
}
|
239 |
+
}
|
240 |
+
|
241 |
+
let phone,email,otp;
|
242 |
+
|
243 |
+
|
244 |
+
switch (authType)
|
245 |
+
{
|
246 |
+
case 'phone':
|
247 |
+
$mo(phoneSelector).after(messageTextMobile+ otpEdit+ sendButton);
|
248 |
+
$mo(phoneSelector).intlTelInput({})
|
249 |
+
|
250 |
+
if (!$mo(phoneSelector).length)
|
251 |
+
{
|
252 |
+
const messageNotRegistered = '<p id="phoneFieldLabel" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Phone Field not Found.</p>';
|
253 |
+
$mo(emailSelector).after('<br>'+messageNotRegistered)
|
254 |
+
return
|
255 |
+
}
|
256 |
+
|
257 |
+
$mo( "#otp_send_button" ).click(function()
|
258 |
+
{
|
259 |
+
phone = $mo(phoneSelector).val()
|
260 |
+
phone = phone.replace(/\s+/g, '')
|
261 |
+
email = $mo(emailSelector).val()
|
262 |
+
if(!validatePhone(phone)) {
|
263 |
+
$mo('#otpmessage').text('Invalid Phone Number').css('color','red')
|
264 |
+
return
|
265 |
+
}
|
266 |
+
if(!validateEmail(email)) {
|
267 |
+
$mo('#otpmessage').text('Invalid Email Address').css('color','red')
|
268 |
+
return
|
269 |
+
}
|
270 |
+
isSecond = false
|
271 |
+
sendChallenge(authType,phone,null,nonce,ajaxurl)
|
272 |
+
})
|
273 |
+
|
274 |
+
$mo(submitSelector).click(function(e)
|
275 |
+
{
|
276 |
+
e.preventDefault()
|
277 |
+
if(isValidated === false)
|
278 |
+
{
|
279 |
+
otp = $mo('#edit_otp').val()
|
280 |
+
if(!otp || !txId)
|
281 |
+
{
|
282 |
+
setMessage("Please Validate Phone first", "red")
|
283 |
+
}
|
284 |
+
else
|
285 |
+
validateOTP(otp, nonce, phone, txId, email)
|
286 |
+
}
|
287 |
+
else
|
288 |
+
{
|
289 |
+
|
290 |
+
}
|
291 |
+
$mo(submitSelector).unbind('click')
|
292 |
+
|
293 |
+
})
|
294 |
+
|
295 |
+
$mo(formName).on("submit", function(e){
|
296 |
+
e.preventDefault()
|
297 |
+
|
298 |
+
if(isValidated === false)
|
299 |
+
{
|
300 |
+
otp = $mo('#edit_otp').val()
|
301 |
+
if(!otp || !txId)
|
302 |
+
{
|
303 |
+
setMessage("Please Validate Email first","red")
|
304 |
+
$mo(submitSelector).prop("disabled",false)
|
305 |
+
$mo(submitSelector).removeAttr("disabled")
|
306 |
+
return true
|
307 |
+
}
|
308 |
+
else
|
309 |
+
validateOTP(otp, nonce, phone, txId, email)
|
310 |
+
}
|
311 |
+
|
312 |
+
else
|
313 |
+
{
|
314 |
+
|
315 |
+
}
|
316 |
+
|
317 |
+
})
|
318 |
+
break;
|
319 |
+
|
320 |
+
case 'email':
|
321 |
+
if (!$mo(emailSelector).length)
|
322 |
+
{
|
323 |
+
const messageNotRegistered = '<p id="emailFieldLabel" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Email Field '+emailSelector+' not Found. Please check Selector</p>';
|
324 |
+
if($mo(formName).length)
|
325 |
+
$mo(formName).after('<br>'+messageNotRegistered)
|
326 |
+
else if($mo(submitSelector).length)
|
327 |
+
$mo(submitSelector).after('<br>'+messageNotRegistered)
|
328 |
+
return
|
329 |
+
}
|
330 |
+
$mo(emailSelector).after(messageTextEmail + otpEdit + sendButton)
|
331 |
+
$mo( "#otp_send_button" ).click(function()
|
332 |
+
{
|
333 |
+
email = $mo(emailSelector).val()
|
334 |
+
if(!validateEmail(email) || !email) {
|
335 |
+
setMessage("Email Address is Invalid or Empty", "red")
|
336 |
+
return
|
337 |
+
}
|
338 |
+
isSecond = false
|
339 |
+
sendChallenge(authType,null,email,nonce,ajaxurl)
|
340 |
+
})
|
341 |
+
|
342 |
+
$mo(submitSelector).click(function(e)
|
343 |
+
{
|
344 |
+
e.preventDefault()
|
345 |
+
if(isValidated === false)
|
346 |
+
{
|
347 |
+
otp = $mo('#edit_otp').val()
|
348 |
+
if(!otp || !txId)
|
349 |
+
{
|
350 |
+
setMessage("Please Validate Email first", "red")
|
351 |
+
}
|
352 |
+
else
|
353 |
+
validateOTP(otp, nonce, phone, txId, email)
|
354 |
+
}
|
355 |
+
else
|
356 |
+
{
|
357 |
+
|
358 |
+
}
|
359 |
+
$mo(submitSelector).unbind('click')
|
360 |
+
|
361 |
+
})
|
362 |
+
|
363 |
+
$mo(formName).on("submit", function(e){
|
364 |
+
e.preventDefault()
|
365 |
+
|
366 |
+
if(isValidated === false)
|
367 |
+
{
|
368 |
+
otp = $mo('#edit_otp').val()
|
369 |
+
if(!otp || !txId)
|
370 |
+
{
|
371 |
+
setMessage("Please Validate Email first","red")
|
372 |
+
$mo(submitSelector).prop("disabled",false)
|
373 |
+
$mo(submitSelector).removeAttr("disabled")
|
374 |
+
return true
|
375 |
+
}
|
376 |
+
else
|
377 |
+
validateOTP(otp, nonce, phone, txId, email)
|
378 |
+
}
|
379 |
+
|
380 |
+
else
|
381 |
+
{
|
382 |
+
|
383 |
+
}
|
384 |
+
|
385 |
+
})
|
386 |
+
break;
|
387 |
+
|
388 |
+
case 'both':
|
389 |
+
|
390 |
+
$mo(phoneSelector).after(messageTextBoth + otpEdit + sendButton);
|
391 |
+
$mo(phoneSelector).intlTelInput({})
|
392 |
+
|
393 |
+
if (!$mo(phoneSelector).length)
|
394 |
+
{
|
395 |
+
const messageNotRegistered = '<p id="phoneFieldLabel" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Phone Field not Found.</p>';
|
396 |
+
$mo(emailSelector).after('<br>'+messageNotRegistered)
|
397 |
+
return
|
398 |
+
}
|
399 |
+
|
400 |
+
$mo( "#otp_send_button" ).click(function() {
|
401 |
+
phone = $mo(phoneSelector).val()
|
402 |
+
phone = phone.replace(/\s+/g, '')
|
403 |
+
email = $mo(emailSelector).val()
|
404 |
+
if (!validatePhone(phone)) {
|
405 |
+
$mo('#otpmessage').text('Invalid Phone Number').css('color', 'red')
|
406 |
+
return
|
407 |
+
}
|
408 |
+
if (!validateEmail(email)) {
|
409 |
+
$mo('#otpmessage').text('Invalid Email Address').css('color', 'red')
|
410 |
+
return
|
411 |
+
}
|
412 |
+
if (!isSecond)
|
413 |
+
sendChallenge('phone', phone, null, nonce, ajaxurl)
|
414 |
+
else
|
415 |
+
{
|
416 |
+
sendChallenge('email', null, email, nonce, ajaxurl)
|
417 |
+
$mo(submitSelector).text('Register')
|
418 |
+
$(submitSelector).removeAttr("disabled")
|
419 |
+
}
|
420 |
+
$mo(submitSelector).text('Validate')
|
421 |
+
})
|
422 |
+
|
423 |
+
$mo(submitSelector).click(function(e)
|
424 |
+
{
|
425 |
+
e.preventDefault()
|
426 |
+
if(isValidated === false)
|
427 |
+
{
|
428 |
+
otp = $mo('#edit_otp').val()
|
429 |
+
if(!otp || !txId)
|
430 |
+
{
|
431 |
+
setMessage("Please Validate Email and Phone first", "red")
|
432 |
+
}
|
433 |
+
else
|
434 |
+
validateBoth(otp, nonce, phone, txId, email,true)
|
435 |
+
}
|
436 |
+
else
|
437 |
+
{
|
438 |
+
|
439 |
+
}
|
440 |
+
$mo(submitSelector).unbind('click')
|
441 |
+
|
442 |
+
})
|
443 |
+
|
444 |
+
$mo(formName).on("submit", function(e){
|
445 |
+
e.preventDefault()
|
446 |
+
|
447 |
+
if(isValidated === false)
|
448 |
+
{
|
449 |
+
otp = $mo('#edit_otp').val()
|
450 |
+
if(!otp || !txId)
|
451 |
+
{
|
452 |
+
setMessage("Please Validate Email and Phone first","red")
|
453 |
+
$mo(submitSelector).prop("disabled",false)
|
454 |
+
$mo(submitSelector).removeAttr("disabled")
|
455 |
+
return true
|
456 |
+
}
|
457 |
+
else
|
458 |
+
validateBoth(otp, nonce, phone, txId, email)
|
459 |
+
}
|
460 |
+
|
461 |
+
else
|
462 |
+
{
|
463 |
+
|
464 |
+
}
|
465 |
+
|
466 |
+
})
|
467 |
+
|
468 |
+
}
|
469 |
+
|
470 |
+
function validateEmail(email_address) {
|
471 |
+
let email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i
|
472 |
+
return email_regex.test(email_address);
|
473 |
+
|
474 |
+
}
|
475 |
+
function validatePhone(phone) {
|
476 |
+
let intRegex = /[0-9 -()+]+$/;
|
477 |
+
return !(phone.length < 10 || phone.length === 0 || (!intRegex.test(phone)));
|
478 |
+
|
479 |
+
}
|
480 |
+
|
481 |
+
}
|
482 |
+
else
|
483 |
+
{
|
484 |
+
}
|
485 |
+
|
486 |
+
|
487 |
+
});
|
includes/js/custom-form.js
ADDED
@@ -0,0 +1,407 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function()
|
2 |
+
{
|
3 |
+
let $mo = jQuery;
|
4 |
+
let ajaxurl = otpverificationObj.siteURL;
|
5 |
+
let nonce = otpverificationObj.nonce;
|
6 |
+
let submitSelector = otpverificationObj.submitSelector;
|
7 |
+
let formName = otpverificationObj.formname;
|
8 |
+
let emailSelector = otpverificationObj.emailselector;
|
9 |
+
let phoneSelector = otpverificationObj.phoneSelector
|
10 |
+
let txId="";
|
11 |
+
let txIdNew =""
|
12 |
+
let isValidated = false
|
13 |
+
let isEmailResend = false
|
14 |
+
let isSecond = false
|
15 |
+
let authType = otpverificationObj.authType;
|
16 |
+
let isShortEnabled = otpverificationObj.isEnabledShortcode;
|
17 |
+
let isRegistered = otpverificationObj.isRegistered;
|
18 |
+
const otpEdit = '<input type="text"' +
|
19 |
+
'name="edit_otp"' +
|
20 |
+
'id="edit_otp"' +
|
21 |
+
'placeholder="Enter OTP"' +
|
22 |
+
'style="display:none; ">';
|
23 |
+
const messageTextMobile='<br><p id="otpmessage"> An OTP will be sent to your Mobile Number</p>';
|
24 |
+
const messageTextBoth = ' <p id="otpmessage">An OTP will be sent to your Mobile Number and Email</p>'
|
25 |
+
const messageTextEmail = '<br><p id="otpmessage"> An OTP will be sent to your Email ID</p>';
|
26 |
+
const sendButton = '<div class="button" ' +
|
27 |
+
'id ="otp_send_button">Send OTP</div> ' +
|
28 |
+
'<div class="button" ' +
|
29 |
+
'id ="timer" ' +
|
30 |
+
'style="visibility:hidden;">00</div><br>';
|
31 |
+
|
32 |
+
const phonelabel = '<label for="reg_phone">Phone Number <span class="required">*</span></label>';
|
33 |
+
|
34 |
+
if(isRegistered === 'false')
|
35 |
+
{
|
36 |
+
const messageNotRegistered = '<p id="registermessage" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Register/Login with miniOrange to Enable 2FA for this Form</p>';
|
37 |
+
$mo(emailSelector).after('<br>'+messageNotRegistered);
|
38 |
+
}
|
39 |
+
else
|
40 |
+
if(($mo(formName).length || $mo(submitSelector).length) && isRegistered!==false && isShortEnabled !== 'false')
|
41 |
+
{
|
42 |
+
function setMessage(message,color) {
|
43 |
+
$mo('#otpmessage').text("")
|
44 |
+
$mo('#otpmessage').text(message).css('color',color)
|
45 |
+
}
|
46 |
+
|
47 |
+
function sendChallenge(authType, phone, email,nonce, ajaxurl) {
|
48 |
+
txId = ""
|
49 |
+
let timeLeft = 0
|
50 |
+
let timerId
|
51 |
+
let data =
|
52 |
+
{
|
53 |
+
'action' : 'mo_shortcode',
|
54 |
+
'mo_action' : 'challenge',
|
55 |
+
'email' : email,
|
56 |
+
'phone' : phone,
|
57 |
+
'nonce' : nonce ,
|
58 |
+
'authTypeSend' : authType
|
59 |
+
}
|
60 |
+
|
61 |
+
$mo("#otp_send_button").text("Sending")
|
62 |
+
$mo.post(ajaxurl, data,function (response)
|
63 |
+
{
|
64 |
+
if(response === null)
|
65 |
+
{
|
66 |
+
setMessage('Contact Site Administrator','red')
|
67 |
+
}
|
68 |
+
else
|
69 |
+
{
|
70 |
+
switch (response.status)
|
71 |
+
{
|
72 |
+
case "SUCCESS":
|
73 |
+
$mo("#edit_otp").css("display", "inherit")
|
74 |
+
setMessage(response.message, 'green')
|
75 |
+
|
76 |
+
if(isSecond)
|
77 |
+
{
|
78 |
+
txIdNew = response.txId
|
79 |
+
clearInterval(timerId)
|
80 |
+
}
|
81 |
+
|
82 |
+
else
|
83 |
+
{
|
84 |
+
txId = response.txId
|
85 |
+
timeLeft = 30
|
86 |
+
}
|
87 |
+
|
88 |
+
timerId = setInterval(countdown, 1000)
|
89 |
+
|
90 |
+
function countdown() {
|
91 |
+
if (timeLeft === 0)
|
92 |
+
{
|
93 |
+
clearTimeout(timerId)
|
94 |
+
$mo("#otp_send_button").css("display", "initial");
|
95 |
+
$mo("#timer").css("visibility", "hidden");
|
96 |
+
$mo("#otp_send_button").text("Resend");
|
97 |
+
|
98 |
+
} else {
|
99 |
+
$mo("#timer").css("visibility", "visible");
|
100 |
+
$mo("#otp_send_button").css("display", "none");
|
101 |
+
$mo("#timer").text(timeLeft);
|
102 |
+
timeLeft--;
|
103 |
+
}
|
104 |
+
}
|
105 |
+
break;
|
106 |
+
case "FAILED":
|
107 |
+
setMessage(response.message,'red')
|
108 |
+
break;
|
109 |
+
case "ERROR":
|
110 |
+
setMessage(response.message,'red')
|
111 |
+
break
|
112 |
+
}
|
113 |
+
}
|
114 |
+
})
|
115 |
+
|
116 |
+
|
117 |
+
}
|
118 |
+
function validateOTP(otp,nonce,phone,txId,email){
|
119 |
+
|
120 |
+
let data =
|
121 |
+
{
|
122 |
+
'action' : 'mo_shortcode',
|
123 |
+
'mo_action' : 'validate',
|
124 |
+
'otp' : otp,
|
125 |
+
'nonce' : nonce,
|
126 |
+
'mobile' : phone,
|
127 |
+
'txId' : txId,
|
128 |
+
'email' : email
|
129 |
+
}
|
130 |
+
|
131 |
+
if(isValidated === false)
|
132 |
+
{
|
133 |
+
$mo.post(ajaxurl,data,function(response)
|
134 |
+
{
|
135 |
+
if(response === null)
|
136 |
+
{
|
137 |
+
setMessage('Error Validating OTP','red')
|
138 |
+
isValidated = false
|
139 |
+
}
|
140 |
+
else
|
141 |
+
switch (response.status)
|
142 |
+
{
|
143 |
+
case "SUCCESS":
|
144 |
+
setMessage(response.message,'green')
|
145 |
+
isValidated = true
|
146 |
+
if(submitSelector === ".ur-submit-button")
|
147 |
+
{
|
148 |
+
setTimeout(function () {
|
149 |
+
location.reload()
|
150 |
+
}, 15000)
|
151 |
+
}
|
152 |
+
$mo(submitSelector).unbind("click").click()
|
153 |
+
return true
|
154 |
+
case "FAILED":
|
155 |
+
setMessage(response.message,'red')
|
156 |
+
$mo(submitSelector).removeAttr("disabled");
|
157 |
+
return false
|
158 |
+
case "ERROR":
|
159 |
+
$mo(submitSelector).removeAttr("disabled");
|
160 |
+
return false
|
161 |
+
}
|
162 |
+
})
|
163 |
+
}
|
164 |
+
else {
|
165 |
+
|
166 |
+
}
|
167 |
+
}
|
168 |
+
function validateBoth(otp,nonce,phone,txId,email,isFirst) {
|
169 |
+
let data =
|
170 |
+
{
|
171 |
+
'action' : 'mo_shortcode',
|
172 |
+
'mo_action' : 'validate',
|
173 |
+
'otp' : otp,
|
174 |
+
'nonce' : nonce,
|
175 |
+
'mobile' : phone,
|
176 |
+
'txId' : txId,
|
177 |
+
'email' : email
|
178 |
+
}
|
179 |
+
|
180 |
+
if(isValidated === false)
|
181 |
+
{
|
182 |
+
if(isFirst)
|
183 |
+
$mo.post(ajaxurl,data,function(response)
|
184 |
+
{
|
185 |
+
isFirst = false
|
186 |
+
|
187 |
+
if(response === null)
|
188 |
+
{
|
189 |
+
setMessage('Error Validating OTP','red')
|
190 |
+
isValidated = false
|
191 |
+
}
|
192 |
+
else
|
193 |
+
switch (response.status)
|
194 |
+
{
|
195 |
+
case "SUCCESS":
|
196 |
+
setMessage(phone+' '+response.message +' '+ 'Sending OTP on '+email,'green')
|
197 |
+
|
198 |
+
isValidated = false
|
199 |
+
isSecond = true
|
200 |
+
|
201 |
+
setTimeout(function () {
|
202 |
+
sendChallenge('email',null,email,nonce,ajaxurl)
|
203 |
+
},3000)
|
204 |
+
|
205 |
+
$mo('#edit_otp').val("")
|
206 |
+
$mo('#edit_otp').css('placeholder','Enter OTP Sent on your email')
|
207 |
+
$mo('#reg_phone').after('<br><p style="color:green;"> Phone Number Validated ☑</p>')
|
208 |
+
$mo("#reg_phone").attr('disabled','true')
|
209 |
+
$mo(submitSelector).text('Register')
|
210 |
+
|
211 |
+
$mo(submitSelector).click(function(e) {
|
212 |
+
if (isValidated == false)
|
213 |
+
{
|
214 |
+
e.preventDefault()
|
215 |
+
otp = $mo('#edit_otp').val()
|
216 |
+
validateOTP(otp, nonce, phone, txIdNew, email)
|
217 |
+
}
|
218 |
+
})
|
219 |
+
break;
|
220 |
+
case "FAILED":
|
221 |
+
setMessage(response.message,'red')
|
222 |
+
break
|
223 |
+
case "ERROR":
|
224 |
+
setMessage(response.message,'red')
|
225 |
+
break
|
226 |
+
}
|
227 |
+
})
|
228 |
+
}
|
229 |
+
else
|
230 |
+
{
|
231 |
+
setMessage('Already Validated', 'red')
|
232 |
+
jQuery.reload()
|
233 |
+
}
|
234 |
+
}
|
235 |
+
|
236 |
+
let phone,email,otp;
|
237 |
+
switch (authType) {
|
238 |
+
case 'phone':
|
239 |
+
if (!$mo(phoneSelector).length)
|
240 |
+
{
|
241 |
+
const messageNotRegistered = '<p id="phoneFieldLabel" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Phone Field not Found.</p>';
|
242 |
+
$mo(emailSelector).after('<br>'+messageNotRegistered)
|
243 |
+
return
|
244 |
+
}
|
245 |
+
$mo(phoneSelector).after(messageTextMobile + otpEdit+ sendButton);
|
246 |
+
$mo(phoneSelector).intlTelInput({})
|
247 |
+
$mo( "#otp_send_button" ).click(function()
|
248 |
+
{
|
249 |
+
phone = $mo(phoneSelector).val()
|
250 |
+
phone = phone.replace(/\s+/g, '')
|
251 |
+
email = $mo(emailSelector).val()
|
252 |
+
if(!validatePhone(phone)) {
|
253 |
+
$mo('#otpmessage').text('Invalid Phone Number').css('color','red')
|
254 |
+
return
|
255 |
+
}
|
256 |
+
if(!validateEmail(email)) {
|
257 |
+
$mo('#otpmessage').text('Invalid Email Address').css('color','red')
|
258 |
+
return
|
259 |
+
}
|
260 |
+
isSecond = false
|
261 |
+
sendChallenge(authType,phone,null,nonce,ajaxurl)
|
262 |
+
})
|
263 |
+
|
264 |
+
|
265 |
+
$mo(submitSelector).click(function(e) {
|
266 |
+
e.preventDefault()
|
267 |
+
if(isValidated === false)
|
268 |
+
{
|
269 |
+
otp = $mo('#edit_otp').val()
|
270 |
+
if(!otp)
|
271 |
+
{
|
272 |
+
setMessage("Please Validate Phone first", "red")
|
273 |
+
}
|
274 |
+
else
|
275 |
+
validateOTP(otp, nonce, phone, txId, email)
|
276 |
+
}
|
277 |
+
else
|
278 |
+
{
|
279 |
+
|
280 |
+
}
|
281 |
+
})
|
282 |
+
|
283 |
+
|
284 |
+
break;
|
285 |
+
|
286 |
+
case 'email':
|
287 |
+
if (!$mo(emailSelector).length)
|
288 |
+
{
|
289 |
+
const messageNotRegistered = '<p id="emailFieldLabel" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Email Field '+emailSelector+' not Found. Please check Selector</p>';
|
290 |
+
if($mo(formName).length)
|
291 |
+
$mo(formName).after('<br>'+messageNotRegistered)
|
292 |
+
else if($mo(submitSelector).length)
|
293 |
+
$mo(submitSelector).after('<br>'+messageNotRegistered)
|
294 |
+
return
|
295 |
+
}
|
296 |
+
$mo(emailSelector).after(messageTextEmail + otpEdit + sendButton)
|
297 |
+
$mo( "#otp_send_button" ).click(function()
|
298 |
+
{ email = $mo(emailSelector).val()
|
299 |
+
if(!validateEmail(email)) {
|
300 |
+
$mo('#otpmessage').text('Invalid Email Address').css('color','red')
|
301 |
+
return
|
302 |
+
}
|
303 |
+
isSecond = false
|
304 |
+
sendChallenge(authType,null,email,nonce,ajaxurl)
|
305 |
+
})
|
306 |
+
|
307 |
+
$mo(submitSelector).click(function(e)
|
308 |
+
{
|
309 |
+
e.preventDefault()
|
310 |
+
if(isValidated === false)
|
311 |
+
{
|
312 |
+
otp = $mo('#edit_otp').val()
|
313 |
+
if(!otp)
|
314 |
+
{
|
315 |
+
setMessage("Please Validate Email first", "red")
|
316 |
+
}
|
317 |
+
else
|
318 |
+
validateOTP(otp, nonce, phone, txId, email)
|
319 |
+
}
|
320 |
+
else
|
321 |
+
{
|
322 |
+
|
323 |
+
}
|
324 |
+
|
325 |
+
})
|
326 |
+
|
327 |
+
break;
|
328 |
+
|
329 |
+
case 'both':
|
330 |
+
$mo(emailSelector).after('<br>'+ messageTextBoth + otpEdit + sendButton);
|
331 |
+
$mo(phoneSelector).intlTelInput({})
|
332 |
+
if (!$mo(phoneSelector).length)
|
333 |
+
{
|
334 |
+
const messageNotRegistered = '<p id="phoneFieldLabel" style="color: red;font-size: 18px;border: red 1px solid;padding: 5px" > miniOrange : Phone Field not Found.</p>';
|
335 |
+
$mo(emailSelector).after('<br>'+messageNotRegistered)
|
336 |
+
return
|
337 |
+
}
|
338 |
+
$mo( "#otp_send_button" ).click(function() {
|
339 |
+
phone = $mo(phoneSelector).val()
|
340 |
+
phone = phone.replace(/\s+/g, '')
|
341 |
+
email = $mo(emailSelector).val()
|
342 |
+
if (!validatePhone(phone)) {
|
343 |
+
$mo('#otpmessage').text('Invalid Phone Number').css('color', 'red')
|
344 |
+
return
|
345 |
+
}
|
346 |
+
if (!validateEmail(email)) {
|
347 |
+
$mo('#otpmessage').text('Invalid Email Address').css('color', 'red')
|
348 |
+
return
|
349 |
+
}
|
350 |
+
if (!isSecond)
|
351 |
+
sendChallenge('phone', phone, null, nonce, ajaxurl)
|
352 |
+
else
|
353 |
+
{
|
354 |
+
sendChallenge('email', null, email, nonce, ajaxurl)
|
355 |
+
$mo(submitSelector).text('Register')
|
356 |
+
}
|
357 |
+
$mo(submitSelector).text('Validate')
|
358 |
+
})
|
359 |
+
|
360 |
+
|
361 |
+
|
362 |
+
$mo(submitSelector).click(function(e)
|
363 |
+
{
|
364 |
+
e.preventDefault()
|
365 |
+
if(isValidated === false)
|
366 |
+
{
|
367 |
+
email = $mo(emailSelector).val()
|
368 |
+
otp = $mo('#edit_otp').val()
|
369 |
+
if(!otp || !email)
|
370 |
+
{
|
371 |
+
setMessage("Please Validate Email and Phone first", "red")
|
372 |
+
}
|
373 |
+
else
|
374 |
+
validateBoth(otp,nonce,phone,txId,email,true)
|
375 |
+
}
|
376 |
+
else
|
377 |
+
{
|
378 |
+
|
379 |
+
}
|
380 |
+
|
381 |
+
})
|
382 |
+
}
|
383 |
+
|
384 |
+
function validateEmail(email_address) {
|
385 |
+
let email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i
|
386 |
+
if (!email_regex.test(email_address))
|
387 |
+
{
|
388 |
+
return false
|
389 |
+
}
|
390 |
+
return true
|
391 |
+
}
|
392 |
+
function validatePhone(phone) {
|
393 |
+
let intRegex = /[0-9 -()+]+$/;
|
394 |
+
if(phone.length < 10 || phone.length == 0 || (!intRegex.test(phone)))
|
395 |
+
{
|
396 |
+
return false
|
397 |
+
}
|
398 |
+
return true
|
399 |
+
}
|
400 |
+
|
401 |
+
}
|
402 |
+
else
|
403 |
+
{
|
404 |
+
|
405 |
+
}
|
406 |
+
|
407 |
+
});
|
includes/js/dmajax.js
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
mo2f_has_dm_class = jQuery('.dm_signin_form');
|
2 |
+
if(mo2f_has_dm_class.length){
|
3 |
+
jQuery('form[name="login_1_form"]').removeAttr('action');
|
4 |
+
jQuery('form[name="login_1_form"]').removeAttr('method');
|
5 |
+
jQuery('form[name="login_1_form"]').attr('data-ajax','2');
|
6 |
+
jQuery('form[name="login_1_form"]').prepend( "<div id='mo2f_msg'></div>" );
|
7 |
+
jQuery('input[name="save"]').removeAttr('onclick');
|
8 |
+
|
9 |
+
jQuery('#ncore_username0').keypress(function (e) {
|
10 |
+
if (e.which == 13) {//Enter key pressed
|
11 |
+
e.preventDefault();
|
12 |
+
mo2f_dmajax();
|
13 |
+
}
|
14 |
+
});
|
15 |
+
jQuery('#ncore_password0').keypress(function (e) {
|
16 |
+
if (e.which == 13) {//Enter key pressed
|
17 |
+
e.preventDefault();
|
18 |
+
mo2f_dmajax();
|
19 |
+
}
|
20 |
+
});
|
21 |
+
|
22 |
+
jQuery('input[name="save"]' ).click(function(e){
|
23 |
+
e.preventDefault();
|
24 |
+
mo2f_dmajax();
|
25 |
+
});
|
26 |
+
|
27 |
+
function mo2f_dmajax(){
|
28 |
+
jQuery('#ncore_ajax_wait').attr('class','ncore_waiting');
|
29 |
+
if(typeof jQuery('#miniorange_rba_attribures').val() != 'undefined'){
|
30 |
+
jQuery('#miniorange_rba_attribures').val(JSON.stringify(rbaAttributes.attributes));
|
31 |
+
var rba = jQuery('#miniorange_rba_attribures').val();
|
32 |
+
}
|
33 |
+
else
|
34 |
+
var rba = "";
|
35 |
+
var data = {
|
36 |
+
'action' : 'mo2f_ajax',
|
37 |
+
'mo2f_ajax_option' : 'mo2f_ajax_login',
|
38 |
+
'username' : jQuery('#ncore_username0').val(),
|
39 |
+
'password' : jQuery('#ncore_password0').val(),
|
40 |
+
'mo_softtoken' : jQuery('#mo2f_2fa_code').val(),
|
41 |
+
'nonce' : jQuery("input[name=miniorange_login_nonce]").val(),
|
42 |
+
'miniorange_rba_attribures' : rba,
|
43 |
+
};
|
44 |
+
jQuery.post(my_ajax_object.ajax_url, data, function(response) {
|
45 |
+
if ( typeof response.data === "undefined") {
|
46 |
+
jQuery("html").html(response);
|
47 |
+
}
|
48 |
+
else if ( response.data.notice ) {
|
49 |
+
jQuery("#mo2f_msg").append( response.data.notice ).fadeIn();
|
50 |
+
jQuery('#ncore_ajax_wait').removeAttr('class');
|
51 |
+
}
|
52 |
+
else if(response.data.reload)
|
53 |
+
location.reload( true );
|
54 |
+
else
|
55 |
+
location.href = response.data.redirect;
|
56 |
+
});
|
57 |
+
}
|
58 |
+
}
|
includes/js/jquery.dataTables.min.js
CHANGED
@@ -1,164 +1,164 @@
|
|
1 |
-
/*!
|
2 |
-
DataTables 1.10.10
|
3 |
-
©2008-2015 SpryMedia Ltd - datatables.net/license
|
4 |
-
*/
|
5 |
-
(function(h){"function"===typeof define&&define.amd?define(["jquery"],function(E){return h(E,window,document)}):"object"===typeof exports?module.exports=function(E,H){E||(E=window);H||(H="undefined"!==typeof window?require("jquery"):require("jquery")(E));return h(H,E,E.document)}:h(jQuery,window,document)})(function(h,E,H,k){function Y(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),
|
6 |
-
d[c]=e,"o"===b[1]&&Y(a[e])});a._hungarianMap=d}function J(a,b,c){a._hungarianMap||Y(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),J(a[d],b[d],c)):b[d]=b[e]})}function Fa(a){var b=m.defaults.oLanguage,c=a.sZeroRecords;!a.sEmptyTable&&(c&&"No data available in table"===b.sEmptyTable)&&F(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(c&&"Loading..."===b.sLoadingRecords)&&F(a,a,"sZeroRecords","sLoadingRecords");
|
7 |
-
a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&db(a)}function eb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":"");"boolean"===typeof a.scrollX&&(a.scrollX=
|
8 |
-
a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&J(m.models.oSearch,a[b])}function fb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;b&&!h.isArray(b)&&(a.aDataSort=[b])}function gb(a){if(!m.__browser){var b={};m.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:0,height:1,width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,
|
9 |
-
width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,m.__browser);a.oScroll.iBarWidth=m.__browser.barWidth}function hb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&&
|
10 |
-
(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ga(a,b){var c=m.defaults.column,d=a.aoColumns.length,c=h.extend({},m.models.oColumn,c,{nTh:b?b:H.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},m.models.oSearch,c[d]);la(a,d,h(b).data())}function la(a,b,c){var b=a.aoColumns[b],d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=
|
11 |
-
(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(fb(c),J(m.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=Q(g),i=b.mRender?Q(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&
|
12 |
-
(c(g.sort)||c(g.type)||c(g.filter));b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return R(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=
|
13 |
-
d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function U(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ha(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&Z(a);v(a,null,"column-sizing",[a])}function $(a,b){var c=aa(a,"bVisible");return"number"===typeof c[b]?c[b]:null}function ba(a,b){var c=aa(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function ca(a){return aa(a,
|
14 |
-
"bVisible").length}function aa(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ia(a){var b=a.aoColumns,c=a.aoData,d=m.ext.type.detect,e,f,g,j,i,h,l,q,u;e=0;for(f=b.length;e<f;e++)if(l=b[e],u=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){u[i]===k&&(u[i]=B(a,i,e,"type"));q=d[g](u[i],a);if(!q&&g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function ib(a,
|
15 |
-
b,c,d){var e,f,g,j,i,o,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){o=b[e];var q=o.targets!==k?o.targets:o.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ga(a);d(q[f],o)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],o);else if("string"===typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&&d(j,o)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function N(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,
|
16 |
-
{},m.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ja(a,e,c,d);return e}function ma(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,e){c=Ka(a,e);return N(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});
|
17 |
-
if(i===k)return a.iDrawError!=e&&null===j&&(K(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function jb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function La(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\./g,"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|