Google Authenticator – WordPress Two Factor Authentication (2FA) - Version 5.4.33

Version Description

Download this release

Release Info

Developer cyberlord92
Plugin Icon 128x128 Google Authenticator – WordPress Two Factor Authentication (2FA)
Version 5.4.33
Comparing to
See all releases

Code changes from version 5.4.32 to 5.4.33

controllers/duo_authenticator/duo_authenticator_ajax.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Mo_2f_duo_authenticator
3
+ {
4
+ function __construct(){
5
+ add_action( 'admin_init' , array( $this, 'mo2f_duo_authenticator_functions' ) );
6
+
7
+ }
8
+
9
+ public function mo2f_duo_authenticator_functions(){
10
+ add_action('wp_ajax_mo2f_duo_authenticator_ajax', array( $this, 'mo2f_duo_authenticator_ajax' ));
11
+ add_action( 'wp_ajax_nopriv_mo2f_duo_ajax_request', array($this,'mo2f_duo_ajax_request') );
12
+ }
13
+
14
+ public function mo2f_duo_ajax_request(){
15
+
16
+ switch ($_POST['call_type']) {
17
+ case "check_duo_push_auth_status":
18
+ $this->mo2f_check_duo_push_auth_status();
19
+ break;
20
+ }
21
+ }
22
+
23
+ public function mo2f_duo_authenticator_ajax(){
24
+ switch($_POST['call_type'])
25
+ {
26
+
27
+ case "check_duo_push_auth_status":
28
+ $this->mo2f_check_duo_push_auth_status();
29
+ break;
30
+ }
31
+ }
32
+
33
+
34
+ function mo2f_check_duo_push_auth_status(){
35
+
36
+ if(!wp_verify_nonce(sanitize_text_field($_POST['nonce']),'miniorange-2-factor-duo-nonce'))
37
+ {
38
+ wp_send_json("ERROR");
39
+ exit;
40
+ }else{
41
+ include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'handler'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_duo_handler.php';
42
+ $ikey = get_site_option('mo2f_d_integration_key');
43
+ $skey = get_site_option('mo2f_d_secret_key');
44
+ $host = get_site_option('mo2f_d_api_hostname');
45
+ $current_user = wp_get_current_user();
46
+
47
+ $session_id_encrypt = isset($_POST['session_id_encrypt']) ? $_POST['session_id_encrypt'] : '';
48
+ $user_id = MO2f_Utility::mo2f_get_transient( $session_id_encrypt, 'mo2f_current_user_id' );
49
+ $user_email = get_user_meta($user_id,'current_user_email');
50
+ $user_email = isset($user_email[0])? $user_email[0]:'';
51
+
52
+ if($user_email == '' || empty($user_email))
53
+ $user_email = $current_user->user_email;
54
+
55
+ $device['device'] = 'auto';
56
+
57
+ $auth_response = mo2f_duo_auth( $user_email,'push',$device , $skey, $ikey, $host,true);
58
+
59
+
60
+ if(isset($auth_response['response']['response']['result']) && $auth_response['response']['response']['result'] == 'allow'){
61
+
62
+ wp_send_json('SUCCESS');
63
+ }else{
64
+
65
+ wp_send_json('ERROR');
66
+ }
67
+ }
68
+
69
+
70
+ }
71
+
72
+ }
73
+ new Mo_2f_duo_authenticator();
74
+ ?>
controllers/twofa/mo2fa_common_login.php CHANGED
@@ -482,6 +482,211 @@ function mo2f_backup_form($login_status, $login_message, $redirect_to, $session_
482
  <?php
483
  }
484
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
485
  function mo2f_get_push_notification_oobemail_prompt( $id, $login_status, $login_message, $redirect_to, $session_id_encrypt, $cookievalue ) {
486
  $mo_wpns_config = new MoWpnsHandler();
487
 
482
  <?php
483
  }
484
 
485
+ function mo2f_get_duo_push_authentication_prompt( $login_status, $login_message, $redirect_to, $session_id_encrypt,$user_id ){
486
+
487
+ $mo_wpns_config = new MoWpnsHandler();
488
+
489
+ global $Mo2fdbQueries,$txid;
490
+ $mo2f_enable_forgotphone = MoWpnsUtility::get_mo2f_db_option('mo2f_enable_forgotphone', 'get_option');
491
+ $mo2f_KBA_config_status = $Mo2fdbQueries->get_user_detail( 'mo2f_SecurityQuestions_config_status', $user_id );
492
+ $mo2f_is_new_customer = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
493
+ $mo2f_EV_txid = get_user_meta($user_id,'mo2f_EV_txid',true);
494
+ $user_id = MO2f_Utility::mo2f_get_transient( $session_id_encrypt, 'mo2f_current_user_id' );
495
+
496
+ $current_user = get_user_by('id',$user_id);
497
+ update_user_meta($user_id,'current_user_email',$current_user->user_email);
498
+
499
+
500
+ ?>
501
+
502
+ <html>
503
+ <head>
504
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
505
+ <meta name="viewport" content="width=device-width, initial-scale=1">
506
+ <?php
507
+ echo_js_css_files(); ?>
508
+ </head>
509
+ <body>
510
+ <div class="mo2f_modal" tabindex="-1" role="dialog">
511
+ <div class="mo2f-modal-backdrop"></div>
512
+ <div class="mo_customer_validation-modal-dialog mo_customer_validation-modal-md">
513
+ <div class="login mo_customer_validation-modal-content">
514
+ <div class="mo2f_modal-header">
515
+ <h4 class="mo2f_modal-title">
516
+ <button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close"
517
+ title="<?php echo mo2f_lt( 'Back to login' ); ?>"
518
+ onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
519
+ <?php echo mo2f_lt( 'Accept Your Transaction' ); ?></h4>
520
+ </div>
521
+ <div class="mo2f_modal-body">
522
+ <?php if ( isset( $login_message ) && ! empty( $login_message ) ) { ?>
523
+ <div id="otpMessage">
524
+ <p class="mo2fa_display_message_frontend"><?php echo $login_message; ?></p>
525
+ </div>
526
+ <?php } ?>
527
+ <div id="pushSection">
528
+
529
+ <div>
530
+ <center>
531
+ <p class="mo2f_push_oob_message"><?php echo mo2f_lt( 'Waiting for your approval...' ); ?></p>
532
+ </center>
533
+ </div>
534
+ <div id="showPushImage">
535
+ <center>
536
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif', dirname(dirname(__FILE__)) ); ?>"/>
537
+ </center>
538
+ </div>
539
+
540
+
541
+ <span style="padding-right:2%;">
542
+ <?php if ( isset( $login_status ) && $login_status == 'MO_2_FACTOR_CHALLENGE_PUSH_NOTIFICATIONS' ) { ?>
543
+ <center>
544
+ <?php if ( $mo2f_enable_forgotphone && ! $mo2f_is_new_customer ) { ?>
545
+ <input type="button" name="miniorange_login_forgotphone"
546
+ onclick="mologinforgotphone();" id="miniorange_login_forgotphone"
547
+ class="miniorange_login_forgotphone"
548
+ value="<?php echo mo2f_lt( 'Forgot Phone?' ); ?>"/>
549
+ <?php } ?>
550
+ &emsp;&emsp;
551
+
552
+ </center>
553
+ <?php } else if ( isset( $login_status ) && $login_status == 'MO_2_FACTOR_CHALLENGE_OOB_EMAIL' && $mo2f_enable_forgotphone && $mo2f_KBA_config_status ) { ?>
554
+ <center>
555
+ <a href="#mo2f_alternate_login_kba">
556
+ <p class="mo2f_push_oob_backup"><?php echo mo2f_lt( 'Didn\'t receive push nitification?' ); ?></p>
557
+ </a>
558
+ </center>
559
+ <?php } ?>
560
+ </span>
561
+ <center>
562
+ <?php
563
+ if(empty(get_user_meta($user_id, 'mo_backup_code_generated', true))){ ?>
564
+ <div>
565
+ <a href="#mo2f_backup_generate">
566
+ <p style="font-size:14px; font-weight:bold;"><?php echo __('Send backup codes on email', 'miniorange-2-factor-authentication');?></p>
567
+ </a>
568
+ </div>
569
+ <?php }else{ ?>
570
+ <div>
571
+ <a href="#mo2f_backup_option">
572
+ <p style="font-size:14px; font-weight:bold;"><?php echo __('Use Backup Codes', 'miniorange-2-factor-authentication');?></p>
573
+ </a>
574
+ </div>
575
+ <?php }
576
+ ?>
577
+ <div style="padding:10px;">
578
+ <p><a href="<?php echo $mo_wpns_config->lockedOutlink();?>" target="_blank" style="color:#ca2963;font-weight:bold;">I'm locked out & unable to login.</a></p>
579
+ </div>
580
+ </center>
581
+ </div>
582
+
583
+ <?php
584
+ mo2f_customize_logo();
585
+ mo2f_create_backup_form($redirect_to, $session_id_encrypt, $login_status, $login_message);
586
+ ?>
587
+ </div>
588
+ </div>
589
+ </div>
590
+ </div>
591
+ <form name="f" id="mo2f_backto_duo_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>"
592
+ class="mo2f_display_none_forms">
593
+ <input type="hidden" name="miniorange_duo_push_validation_failed_nonce"
594
+ value="<?php echo wp_create_nonce( 'miniorange-2-factor-duo-push-validation-failed-nonce' ); ?>"/>
595
+ <input type="hidden" name="option" value="miniorange_duo_push_validation_failed">
596
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
597
+ <input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
598
+ <input type="hidden" name="currentMethod" value="emailVer"/>
599
+
600
+ </form>
601
+ <form name="f" id="mo2f_duo_push_validation_form" method="post" class="mo2f_display_none_forms">
602
+ <input type="hidden" name="miniorange_duo_push_validation_nonce"
603
+ value="<?php echo wp_create_nonce( 'miniorange-2-factor-duo-validation-nonce' ); ?>"/>
604
+ <input type="hidden" name="option" value="miniorange_duo_push_validation">
605
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
606
+ <input type="hidden" name="tx_type"/>
607
+ <input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
608
+ <input type="hidden" name="TxidEmail" value="<?php echo $mo2f_EV_txid; ?>"/>
609
+
610
+ </form>
611
+
612
+ <form name="f" id="mo2f_show_forgotphone_loginform" method="post" class="mo2f_display_none_forms">
613
+ <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>"/>
614
+ <input type="hidden" name="miniorange_forgotphone"
615
+ value="<?php echo wp_create_nonce( 'miniorange-2-factor-forgotphone' ); ?>"/>
616
+ <input type="hidden" name="option" value="miniorange_forgotphone">
617
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
618
+ <input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
619
+ </form>
620
+ <form name="f" id="mo2f_alternate_login_kbaform" method="post" class="mo2f_display_none_forms">
621
+ <input type="hidden" name="miniorange_alternate_login_kba_nonce"
622
+ value="<?php echo wp_create_nonce( 'miniorange-2-factor-alternate-login-kba-nonce' ); ?>"/>
623
+ <input type="hidden" name="option" value="miniorange_alternate_login_kba">
624
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
625
+ <input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
626
+ </form>
627
+
628
+ <script>
629
+ var timeout;
630
+
631
+ pollPushValidation();
632
+ function pollPushValidation()
633
+ {
634
+ var ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";
635
+ var nonce = "<?php echo wp_create_nonce( 'miniorange-2-factor-duo-nonce' ); ?>";
636
+ var session_id_encrypt = "<?php echo $session_id_encrypt; ?>";
637
+ var data={
638
+ 'action':'mo2f_duo_ajax_request',
639
+ 'call_type':'check_duo_push_auth_status',
640
+ 'session_id_encrypt': session_id_encrypt,
641
+ 'nonce' : nonce,
642
+
643
+
644
+ };
645
+
646
+ jQuery.post(ajax_url, data, function(response){
647
+
648
+
649
+ if (response == 'SUCCESS') {
650
+ jQuery('#mo2f_duo_push_validation_form').submit();
651
+ } else if (status == 'ERROR' || status == 'FAILED' || status == 'DENIED' || status ==0) {
652
+ jQuery('#mo2f_backto_duo_mo_loginform').submit();
653
+ } else {
654
+ timeout = setTimeout(pollMobileValidation, 3000);
655
+ }
656
+
657
+ });
658
+ }
659
+
660
+
661
+
662
+
663
+
664
+
665
+ function mologinforgotphone() {
666
+ jQuery('#mo2f_show_forgotphone_loginform').submit();
667
+ }
668
+
669
+ function mologinback() {
670
+ jQuery('#mo2f_backto_duo_mo_loginform').submit();
671
+ }
672
+
673
+ jQuery('a[href="#mo2f_alternate_login_kba"]').click(function () {
674
+ jQuery('#mo2f_alternate_login_kbaform').submit();
675
+ });
676
+ jQuery('a[href="#mo2f_backup_option"]').click(function() {
677
+ jQuery('#mo2f_backup').submit();
678
+ });
679
+ jQuery('a[href="#mo2f_backup_generate"]').click(function() {
680
+ jQuery('#mo2f_create_backup_codes').submit();
681
+ });
682
+
683
+ </script>
684
+ </body>
685
+ </html>
686
+
687
+ <?php
688
+ }
689
+
690
  function mo2f_get_push_notification_oobemail_prompt( $id, $login_status, $login_message, $redirect_to, $session_id_encrypt, $cookievalue ) {
691
  $mo_wpns_config = new MoWpnsHandler();
692
 
controllers/twofa/mo2fa_inline_registration.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
  function fetch_methods(){
3
  $methods = array("SMS","SOFT TOKEN","MOBILE AUTHENTICATION","PUSH NOTIFICATIONS","GOOGLE AUTHENTICATOR","KBA","OTP_OVER_EMAIL","OTP OVER TELEGRAM","OTP OVER WHATSAPP");
 
 
4
  return $methods;
5
  }
6
 
@@ -29,6 +31,8 @@ function prompt_user_to_select_2factor_mthod_inline($current_user_id, $login_sta
29
  {
30
  $current_selected_method == 'OTP Over Whatsapp';
31
  prompt_user_for_phone_setup($current_user_id, $login_status, $login_message,$current_selected_method,$redirect_to,$session_id);
 
 
32
  }
33
  else if($current_selected_method == 'GOOGLE AUTHENTICATOR' ){
34
  prompt_user_for_google_authenticator_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id);
@@ -183,6 +187,14 @@ function prompt_user_to_select_2factor_mthod_inline($current_user_id, $login_sta
183
  <input type="radio" name="mo2f_selected_2factor_method" value="OTP OVER EMAIL" />
184
  <?php echo __('OTP Over Email', 'miniorange-2-factor-authentication'); ?>
185
  </label>
 
 
 
 
 
 
 
 
186
  </span>
187
  <br><a href="#skiptwofactor" style="color:#F4D03F ;font-weight:bold;margin-left:35%;"><?php echo __('Skip Two Factor', 'miniorange-2-factor-authentication'); ?></a>>>
188
  <br />
@@ -494,6 +506,115 @@ function prompt_user_for_miniorange_app_setup($current_user_id, $login_status, $
494
  </html>
495
  <?php
496
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
497
 
498
  function prompt_user_for_google_authenticator_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id){
499
  $ga_secret = MO2f_Utility::mo2f_get_transient($session_id, 'secret_ga');
@@ -796,6 +917,93 @@ function initialize_inline_mobile_registration($current_user,$session_id,$qrCode
796
  </script>
797
  <?php
798
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
799
  function prompt_user_for_kba_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id){
800
  $current_user = get_userdata($current_user_id);
801
  $opt=fetch_methods($current_user);
1
  <?php
2
  function fetch_methods(){
3
  $methods = array("SMS","SOFT TOKEN","MOBILE AUTHENTICATION","PUSH NOTIFICATIONS","GOOGLE AUTHENTICATOR","KBA","OTP_OVER_EMAIL","OTP OVER TELEGRAM","OTP OVER WHATSAPP");
4
+ if(get_site_option('duo_credentials_save_successfully'))
5
+ array_push($methods,"DUO");
6
  return $methods;
7
  }
8
 
31
  {
32
  $current_selected_method == 'OTP Over Whatsapp';
33
  prompt_user_for_phone_setup($current_user_id, $login_status, $login_message,$current_selected_method,$redirect_to,$session_id);
34
+ }else if($current_selected_method == 'Duo Authenticator'){
35
+ prompt_user_for_duo_authenticator_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id);
36
  }
37
  else if($current_selected_method == 'GOOGLE AUTHENTICATOR' ){
38
  prompt_user_for_google_authenticator_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id);
187
  <input type="radio" name="mo2f_selected_2factor_method" value="OTP OVER EMAIL" />
188
  <?php echo __('OTP Over Email', 'miniorange-2-factor-authentication'); ?>
189
  </label>
190
+ <br>
191
+ </span>
192
+ <span class="<?php if( !(in_array("DUO", $opt)) ){ echo "mo2f_td_hide"; }else { echo "mo2f_td_show"; } ?>" >
193
+ <label title="<?php echo __('You will receive a push notification on your phone. You have to ACCEPT or DENY it to login. Supported in Smartphones only.', 'miniorange-2-factor-authentication'); ?>">
194
+ <input type="radio" name="mo2f_selected_2factor_method" value=" DUO PUSH NOTIFICATIONS" />
195
+ <?php echo __('Duo Push Notification', 'miniorange-2-factor-authentication'); ?>
196
+ </label>
197
+ <br>
198
  </span>
199
  <br><a href="#skiptwofactor" style="color:#F4D03F ;font-weight:bold;margin-left:35%;"><?php echo __('Skip Two Factor', 'miniorange-2-factor-authentication'); ?></a>>>
200
  <br />
506
  </html>
507
  <?php
508
  }
509
+ function prompt_user_for_duo_authenticator_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id){
510
+ global $Mo2fdbQueries;
511
+ $current_user = get_userdata($current_user_id);
512
+ $email = $current_user->user_email;
513
+ $opt=fetch_methods($current_user);
514
+ $mobile_registration_status = $Mo2fdbQueries->get_user_detail( 'mobile_registration_status',$current_user_id);
515
+
516
+ ?>
517
+ <html>
518
+ <head> <meta charset="utf-8"/>
519
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
520
+ <meta name="viewport" content="width=device-width, initial-scale=1">
521
+ <?php
522
+ mo2f_inline_css_and_js();
523
+ ?>
524
+ </head>
525
+ <body>
526
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
527
+ <div class="mo2f-modal-backdrop"></div>
528
+ <div class="mo2f_modal-dialog mo2f_modal-lg" >
529
+ <div class="login mo_customer_validation-modal-content">
530
+ <div class="mo2f_modal-header">
531
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="<?php echo __('Back to login', 'miniorange-2-factor-authentication'); ?>" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
532
+ <?php echo __('Setup Duo', 'miniorange-2-factor-authentication'); ?> <b><?php echo __('Authenticator', 'miniorange-2-factor-authentication'); ?></b> <?php echo __('App', 'miniorange-2-factor-authentication'); ?></h4>
533
+ </div>
534
+ <div class="mo2f_modal-body">
535
+ <?php if(isset($login_message) && !empty($login_message)) { ?>
536
+
537
+ <div id="otpMessage">
538
+ <p class="mo2fa_display_message_frontend" style="text-align: left !important;"><?php echo __($login_message, 'miniorange-2-factor-authentication'); ?></p>
539
+ </div>
540
+ <?php } ?>
541
+ <div style="margin-right:7px;"><?php mo2f_inline_download_instruction_for_duo_mobile_app($mobile_registration_status);
542
+
543
+ ?></div>
544
+ <div class="mo_margin_left">
545
+ <h3><?php echo __('Step-2 : Setup Duo Push Notification', 'miniorange-2-factor-authentication'); ?></h3><hr class="mo_hr">
546
+ <div id="mo2f_configurePhone"><h4><?php echo __('Please click on \'Configure your phone\' button below to setup duo push notification.', 'miniorange-2-factor-authentication'); ?></h4>
547
+ <center>
548
+ <?php if (sizeof($opt) > 1) { ?>
549
+ <input type="button" name="back" id="mo2f_inline_back_btn" class="miniorange_button" value="<?php echo __('Back', 'miniorange-2-factor-authentication'); ?>" />
550
+ <?php } ?>
551
+ <input type="button" name="submit" onclick="moconfigureapp();" class="miniorange_button" value="<?php echo __('Configure your phone', 'miniorange-2-factor-authentication'); ?>" />
552
+ </center>
553
+ </div>
554
+ <?php
555
+
556
+ if(isset($_POST['option']) && $_POST['option'] =='miniorange_inline_duo_auth_mobile_complete'){
557
+ go_for_user_enroll_on_duo($current_user,$session_id);
558
+ ?>
559
+ <?php }else if(isset($_POST['option']) && $_POST['option'] == 'duo_mobile_send_push_notification_for_inline_form') {
560
+
561
+ initialize_inline_duo_auth_registration($current_user,$session_id);
562
+ ?>
563
+
564
+ <?php }?>
565
+
566
+ <?php mo2f_customize_logo() ?>
567
+ </div>
568
+ <br>
569
+ <br>
570
+ </div>
571
+ </div>
572
+ </div>
573
+ </div>
574
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
575
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
576
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
577
+ <input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
578
+ </form>
579
+ <form name="f" method="post" action="" id="mo2f_inline_configureapp_form" style="display:none;">
580
+ <input type="hidden" name="option" value="miniorange_inline_show_mobile_config"/>
581
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
582
+ <input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
583
+ <input type="hidden" name="miniorange_inline_show_qrcode_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-show-qrcode-nonce'); ?>" />
584
+ </form>
585
+ <form name="f" method="post" id="mo2f_inline_duo_auth_register_form" action="" style="display:none;">
586
+ <input type="hidden" name="option" value="miniorange_inline_duo_auth_mobile_complete"/>
587
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
588
+ <input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
589
+ <input type="hidden" name="mo_auth_inline_duo_auth_mobile_registration_complete_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-duo_auth-registration-complete-nonce'); ?>" />
590
+ </form>
591
+ <?php if (sizeof($opt) > 1) { ?>
592
+ <form name="f" method="post" action="" id="mo2f_goto_two_factor_form">
593
+ <input type="hidden" name="option" value="miniorange_back_inline"/>
594
+ <input type="hidden" name="miniorange_inline_two_factor_setup" value="<?php echo wp_create_nonce('miniorange-2-factor-inline-setup-nonce'); ?>" />
595
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
596
+ <input type="hidden" name="session_id" value="<?php echo $session_id; ?>"/>
597
+ </form>
598
+ <?php } ?>
599
+ <script>
600
+ function mologinback(){
601
+ jQuery('#mo2f_backto_mo_loginform').submit();
602
+ }
603
+ function moconfigureapp(){
604
+ jQuery('#mo2f_inline_duo_auth_register_form').submit();
605
+ }
606
+ jQuery('#mo2f_inline_back_btn').click(function() {
607
+ jQuery('#mo2f_goto_two_factor_form').submit();
608
+ });
609
+ <?php
610
+ if(isset($showqrCode) && $showqrCode == 'MO_2_FACTOR_SHOW_QR_CODE' && isset($_POST['miniorange_inline_show_qrcode_nonce']) && wp_verify_nonce( $_POST['miniorange_inline_show_qrcode_nonce'], 'miniorange-2-factor-inline-show-qrcode-nonce' )){
611
+ ?>
612
+ <?php } ?>
613
+ </script>
614
+ </body>
615
+ </html>
616
+ <?php
617
+ }
618
 
619
  function prompt_user_for_google_authenticator_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id){
620
  $ga_secret = MO2f_Utility::mo2f_get_transient($session_id, 'secret_ga');
917
  </script>
918
  <?php
919
  }
920
+
921
+ function initialize_inline_duo_auth_registration($current_user,$session_id_encrypt){
922
+
923
+ $user_id = MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
924
+ update_user_meta($user_id,'current_user_email',$current_user->user_email);
925
+
926
+
927
+ $opt=fetch_methods($current_user);
928
+ ?>
929
+ <h3><?php echo mo2f_lt( 'Test Duo Authenticator' ); ?></h3>
930
+ <hr>
931
+ <div>
932
+ <br>
933
+ <br>
934
+ <center>
935
+ <h3><?php echo mo2f_lt( 'Duo push notification is sent to your mobile phone.' ); ?>
936
+ <br>
937
+ <?php echo mo2f_lt( 'We are waiting for your approval...' ); ?></h3>
938
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif', dirname(dirname(__FILE__)) ); ?>"/>
939
+ </center>
940
+
941
+ <input type="button" name="back" id="go_back" class="mo_wpns_button mo_wpns_button1"
942
+ value="<?php echo mo2f_lt( 'Back' ); ?>"
943
+ style="margin-top:100px;margin-left:10px;"/>
944
+ </div>
945
+
946
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
947
+ <input type="hidden" name="option" value="mo2f_go_back"/>
948
+ <input type="hidden" name="mo2f_go_back_nonce"
949
+ value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
950
+ </form>
951
+ <form name="f" method="post" id="mo2f_inline_duo_authenticator_success_form" action="">
952
+ <input type="hidden" name="option" value="mo2f_inline_duo_authenticator_success_form"/>
953
+ <input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
954
+ <input type="hidden" name="mo2f_duo_authenticator_success_nonce"
955
+ value="<?php echo wp_create_nonce( "mo2f-duo-authenticator-success-nonce" ) ?>"/>
956
+ </form>
957
+ <form name="f" method="post" id="mo2f_duo_authenticator_error_form" action="">
958
+ <input type="hidden" name="option" value="mo2f_inline_duo_authenticator_error"/>
959
+ <input type="hidden" name="session_id" value="<?php echo $session_id_encrypt; ?>"/>
960
+ <input type="hidden" name="mo2f_inline_duo_authentcator_error_nonce"
961
+ value="<?php echo wp_create_nonce( "mo2f-inline-duo-authenticator-error-nonce" ) ?>"/>
962
+ </form>
963
+
964
+ <script>
965
+ jQuery('#go_back').click(function () {
966
+ jQuery('#mo2f_go_back_form').submit();
967
+ });
968
+ jQuery("#mo2f_configurePhone").empty();
969
+ jQuery("#mo2f_app_div").hide();
970
+ var timeout;
971
+
972
+
973
+
974
+ pollMobileValidation();
975
+ function pollMobileValidation() {
976
+ var ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";
977
+ var nonce = "<?php echo wp_create_nonce( 'miniorange-2-factor-duo-nonce' ); ?>";
978
+ var session_id_encrypt = "<?php echo $session_id_encrypt; ?>";
979
+
980
+ var data={
981
+ 'action':'mo2f_duo_ajax_request',
982
+ 'call_type':'check_duo_push_auth_status',
983
+ 'session_id_encrypt': session_id_encrypt,
984
+ 'nonce': nonce,
985
+
986
+ };
987
+
988
+ jQuery.post(ajax_url, data, function(response){
989
+
990
+ if (response == 'SUCCESS') {
991
+ jQuery('#mo2f_inline_duo_authenticator_success_form').submit();
992
+ } else if (response == 'ERROR' || response == 'FAILED' || response == 'DENIED') {
993
+
994
+ jQuery('#mo2f_duo_authenticator_error_form').submit();
995
+ } else {
996
+ timeout = setTimeout(pollMobileValidation, 3000);
997
+ }
998
+
999
+ });
1000
+
1001
+ }
1002
+
1003
+ </script>
1004
+
1005
+ <?php
1006
+ }
1007
  function prompt_user_for_kba_setup($current_user_id, $login_status, $login_message,$redirect_to,$session_id){
1008
  $current_user = get_userdata($current_user_id);
1009
  $opt=fetch_methods($current_user);
database/database_functions_2fa.php CHANGED
@@ -47,7 +47,8 @@ class Mo2fDB {
47
  `mo2f_GoogleAuthenticator_config_status` tinyint,
48
  `mo2f_OTPOverEmail_config_status` tinyint,
49
  `mo2f_OTPOverTelegram_config_status` tinyint,
50
- `mo2f_OTPOverWhatsapp_config_status` tinyint,
 
51
  `mobile_registration_status` tinyint,
52
  `mo2f_2factor_enable_2fa_byusers` tinyint DEFAULT 1,
53
  `mo2f_configured_2FA_method` mediumtext NOT NULL ,
@@ -69,6 +70,7 @@ class Mo2fDB {
69
 
70
  $check_if_column_exists = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_OTPOverEmail_config_status" );
71
  $check_if_column_exists_tel = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_OTPOverTelegram_config_status" );
 
72
 
73
  if ( ! $check_if_column_exists ) {
74
  $query = "ALTER TABLE `$tableName` ADD COLUMN `mo2f_OTPOverEmail_config_status` tinyint";
@@ -82,6 +84,12 @@ class Mo2fDB {
82
  `mo2f_OTPOverWhatsapp_config_status` tinyint);";
83
  $this->execute_add_column( $query );
84
  }
 
 
 
 
 
 
85
 
86
 
87
  $tableName = $this->userLoginInfoTable;
47
  `mo2f_GoogleAuthenticator_config_status` tinyint,
48
  `mo2f_OTPOverEmail_config_status` tinyint,
49
  `mo2f_OTPOverTelegram_config_status` tinyint,
50
+ `mo2f_OTPOverWhatsapp_config_status` tinyint,
51
+ `mo2f_DuoAuthenticator_config_status` tinyint,
52
  `mobile_registration_status` tinyint,
53
  `mo2f_2factor_enable_2fa_byusers` tinyint DEFAULT 1,
54
  `mo2f_configured_2FA_method` mediumtext NOT NULL ,
70
 
71
  $check_if_column_exists = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_OTPOverEmail_config_status" );
72
  $check_if_column_exists_tel = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_OTPOverTelegram_config_status" );
73
+ $check_if_column_exists_duo = $this->check_if_column_exists( 'mo2f_user_details', "mo2f_DuoAuthenticator_config_status" );
74
 
75
  if ( ! $check_if_column_exists ) {
76
  $query = "ALTER TABLE `$tableName` ADD COLUMN `mo2f_OTPOverEmail_config_status` tinyint";
84
  `mo2f_OTPOverWhatsapp_config_status` tinyint);";
85
  $this->execute_add_column( $query );
86
  }
87
+ if(!$check_if_column_exists_duo)
88
+ {
89
+ $query = "ALTER TABLE " . $tableName . " ADD COLUMN (
90
+ `mo2f_DuoAuthenticator_config_status` tinyint);";
91
+ $this->execute_add_column( $query );
92
+ }
93
 
94
 
95
  $tableName = $this->userLoginInfoTable;
handler/twofa/setup_twofa.php CHANGED
@@ -9,7 +9,9 @@
9
  include $setup_dirName.'setup_otp_over_sms.php';
10
  include $setup_dirName.'setup_otp_over_telegram.php';
11
  include $setup_dirName.'setup_otp_over_whatsapp.php';
 
12
  include $test_dirName.'test_twofa_email_verification.php';
 
13
  include $test_dirName.'test_twofa_google_authy_authenticator.php';
14
  include $test_dirName.'test_twofa_miniorange_qrcode_authentication.php';
15
  include $test_dirName.'test_twofa_kba_questions.php';
@@ -91,6 +93,7 @@
91
  "OTP Over Email",
92
  "OTP Over Telegram",
93
  "OTP Over Whatsapp",
 
94
  "Authy Authenticator",
95
  "Email Verification",
96
  "OTP Over SMS and Email",
@@ -110,7 +113,8 @@
110
  "OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
111
  "Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login.",
112
  "OTP Over Whatsapp" => "Enter the One Time Passcode sent to your Whatsapp account to login. This method is supported with twillio",
113
- "OTP Over Telegram" => "Enter the One Time Passcode sent to your Telegram account to login."
 
114
  );
115
  $two_factor_methods_doc = array(
116
  "Security Questions" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-security-question",
@@ -139,11 +143,12 @@
139
  "OTP Over Email" => "",
140
  "OTP Over SMS and Email" => "",
141
  "Hardware Token" => "",
142
- "" => ""
 
143
  );
144
 
145
  $two_factor_methods_EC = array_slice( $all_two_factor_methods, 0, 11 );
146
- $two_factor_methods_NC = array_slice( $all_two_factor_methods, 0, 9 );
147
  if(MO2F_IS_ONPREM or $category != 'free_plan')
148
  {
149
  $all_two_factor_methods = array(
@@ -159,7 +164,8 @@
159
  "OTP Over SMS and Email",
160
  "Hardware Token",
161
  "OTP Over Whatsapp",
162
- "OTP Over Telegram"
 
163
  );
164
  $two_factor_methods_descriptions = array(
165
  ""=>"<b>All methods in the FREE Plan in addition to the following methods.</b>",
@@ -175,7 +181,8 @@
175
  "OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
176
  "Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login.",
177
  "OTP Over Whatsapp" => "Enter the One Time Passcode sent to your Whatsapp account to login. This method is supported with twillio",
178
- "OTP Over Telegram" => "Enter the One Time Passcode sent to your Telegram account to login."
 
179
  );
180
  }
181
 
@@ -198,7 +205,7 @@
198
  if(MO2F_IS_ONPREM and $category =='free_plan')
199
  {
200
 
201
- 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')
202
  {
203
  //continue;
204
  }
@@ -422,8 +429,8 @@
422
 
423
 
424
  $cloud_methods = array('miniOrange QR Code Authentication' , 'miniOrange Soft Token','miniOrange Push Notification');
425
-
426
- 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' || $auth_method == 'OTP Over Telegram' || $auth_method == 'OTP Over Whatsapp')
427
  {
428
  $show = 1;
429
  }
@@ -743,7 +750,13 @@ function mo2f_show_2FA_configuration_screen( $user, $selected2FAmethod ) {
743
  echo '<div class="mo_wpns_setting_layout">';
744
  mo2f_configure_otp_over_Whatsapp($user);
745
  echo '</div>';
746
- break;
 
 
 
 
 
 
747
  }
748
 
749
  }
@@ -779,6 +792,9 @@ function mo2f_show_2FA_test_screen( $user, $selected2FAmethod ) {
779
  case "OTP Over Email":
780
  mo2f_test_otp_over_email($user,$selected2FAmethod);
781
  break;
 
 
 
782
  default:
783
  mo2f_test_google_authy_authenticator( $user, $selected2FAmethod );
784
  }
9
  include $setup_dirName.'setup_otp_over_sms.php';
10
  include $setup_dirName.'setup_otp_over_telegram.php';
11
  include $setup_dirName.'setup_otp_over_whatsapp.php';
12
+ include $setup_dirName.'setup_duo_authenticator.php';
13
  include $test_dirName.'test_twofa_email_verification.php';
14
+ include $test_dirName.'test_twofa_duo_authenticator.php';
15
  include $test_dirName.'test_twofa_google_authy_authenticator.php';
16
  include $test_dirName.'test_twofa_miniorange_qrcode_authentication.php';
17
  include $test_dirName.'test_twofa_kba_questions.php';
93
  "OTP Over Email",
94
  "OTP Over Telegram",
95
  "OTP Over Whatsapp",
96
+ "Duo Authenticator",
97
  "Authy Authenticator",
98
  "Email Verification",
99
  "OTP Over SMS and Email",
113
  "OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
114
  "Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login.",
115
  "OTP Over Whatsapp" => "Enter the One Time Passcode sent to your Whatsapp account to login. This method is supported with twillio",
116
+ "OTP Over Telegram" => "Enter the One Time Passcode sent to your Telegram account to login.",
117
+ "Duo Authenticator" => "Scan the QR code from the account in your Duo Authenticator App to login."
118
  );
119
  $two_factor_methods_doc = array(
120
  "Security Questions" => "https://developers.miniorange.com/docs/security/wordpress/wp-security/step-by-setup-guide-to-set-up-security-question",
143
  "OTP Over Email" => "",
144
  "OTP Over SMS and Email" => "",
145
  "Hardware Token" => "",
146
+ "" => "",
147
+
148
  );
149
 
150
  $two_factor_methods_EC = array_slice( $all_two_factor_methods, 0, 11 );
151
+ $two_factor_methods_NC = array_slice( $all_two_factor_methods, 0, 10 );
152
  if(MO2F_IS_ONPREM or $category != 'free_plan')
153
  {
154
  $all_two_factor_methods = array(
164
  "OTP Over SMS and Email",
165
  "Hardware Token",
166
  "OTP Over Whatsapp",
167
+ "OTP Over Telegram",
168
+ "Duo Authenticator"
169
  );
170
  $two_factor_methods_descriptions = array(
171
  ""=>"<b>All methods in the FREE Plan in addition to the following methods.</b>",
181
  "OTP Over SMS and Email" => "Enter the One Time Passcode sent to your phone and email to login.",
182
  "Hardware Token" => "Enter the One Time Passcode on your Hardware Token to login.",
183
  "OTP Over Whatsapp" => "Enter the One Time Passcode sent to your Whatsapp account to login. This method is supported with twillio",
184
+ "OTP Over Telegram" => "Enter the One Time Passcode sent to your Telegram account to login.",
185
+ "Duo Authenticator" => "Scan the QR code from the account in your Duo Authenticator App to login."
186
  );
187
  }
188
 
205
  if(MO2F_IS_ONPREM and $category =='free_plan')
206
  {
207
 
208
+ 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' and $auth_method != 'Duo Authenticator')
209
  {
210
  //continue;
211
  }
429
 
430
 
431
  $cloud_methods = array('miniOrange QR Code Authentication' , 'miniOrange Soft Token','miniOrange Push Notification');
432
+
433
+ 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' || $auth_method == 'OTP Over Telegram' || $auth_method == 'OTP Over Whatsapp' || $auth_method == 'Duo Authenticator')
434
  {
435
  $show = 1;
436
  }
750
  echo '<div class="mo_wpns_setting_layout">';
751
  mo2f_configure_otp_over_Whatsapp($user);
752
  echo '</div>';
753
+ break;
754
+ case "DuoAuthenticator":
755
+ case "Duo Authenticator":
756
+ echo '<div class="mo_wpns_setting_layout">';
757
+ mo2f_configure_duo_authenticator($user);
758
+ echo '</div>';
759
+ break;
760
  }
761
 
762
  }
792
  case "OTP Over Email":
793
  mo2f_test_otp_over_email($user,$selected2FAmethod);
794
  break;
795
+ case "Duo Authenticator":
796
+ mo2f_test_duo_authenticator($user);
797
+ break;
798
  default:
799
  mo2f_test_google_authy_authenticator( $user, $selected2FAmethod );
800
  }
handler/twofa/two_fa_constants.php CHANGED
@@ -261,6 +261,9 @@ class Mo2fConstants {
261
  case 'ERROR_DURING_USER_REGISTRATION':
262
  Return mo2f_lt( 'Error occurred while registering the user. Please try again.' );
263
  break;
 
 
 
264
  case 'SET_AS_2ND_FACTOR':
265
  Return mo2f_lt( 'is set as your 2 factor authentication method.' );
266
  break;
@@ -393,6 +396,9 @@ class Mo2fConstants {
393
  case 'DENIED_REQUEST':
394
  Return mo2f_lt( 'You have denied the request.' );
395
  break;
 
 
 
396
  case 'DISABLED_2FA':
397
  Return mo2f_lt( 'Two-Factor plugin has been disabled.' );
398
  break;
261
  case 'ERROR_DURING_USER_REGISTRATION':
262
  Return mo2f_lt( 'Error occurred while registering the user. Please try again.' );
263
  break;
264
+ case 'VALIDATE_DUO':
265
+ Return mo2f_lt( 'Duo push notification validate successfully.' );
266
+ break;
267
  case 'SET_AS_2ND_FACTOR':
268
  Return mo2f_lt( 'is set as your 2 factor authentication method.' );
269
  break;
396
  case 'DENIED_REQUEST':
397
  Return mo2f_lt( 'You have denied the request.' );
398
  break;
399
+ case 'DENIED_DUO_REQUEST':
400
+ Return mo2f_lt( 'You have denied the request or you have not set duo push notification yet' );
401
+ break;
402
  case 'DISABLED_2FA':
403
  Return mo2f_lt( 'Two-Factor plugin has been disabled.' );
404
  break;
handler/twofa/two_fa_duo_handler.php ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ const INITIAL_BACKOFF_SECONDS = 1;
3
+ const MAX_BACKOFF_SECONDS = 32;
4
+ const BACKOFF_FACTOR = 2;
5
+ const RATE_LIMIT_HTTP_CODE = 429;
6
+
7
+
8
+
9
+ function ping($skey, $ikey, $host)
10
+ {
11
+ $method = "GET";
12
+ $endpoint = "/auth/v2/ping";
13
+ $params = [];
14
+
15
+ return jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
16
+
17
+ }
18
+
19
+ function check($skey, $ikey, $host)
20
+ {
21
+ $method = "GET";
22
+ $endpoint = "/auth/v2/check";
23
+ $params = [];
24
+
25
+ return jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
26
+ }
27
+
28
+
29
+ function delete($skey,$ikey,$host,$user_id)
30
+ {
31
+ $method = "DELETE";
32
+ $endpoint = "/admin/v1/users/".$user_id;
33
+ $params = [];
34
+
35
+ return jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
36
+ }
37
+
38
+
39
+ function enroll($username = null, $valid_secs = null)
40
+ {
41
+ $ikey = get_site_option('mo2f_d_integration_key');
42
+ $skey = get_site_option('mo2f_d_secret_key');
43
+ $host = get_site_option('mo2f_d_api_hostname');
44
+ assert(is_string($username) || is_null($username));
45
+ assert(is_int($valid_secs) || is_null($valid_secs));
46
+
47
+
48
+ $method = "POST";
49
+ $endpoint = "/auth/v2/enroll";
50
+ $params = [];
51
+
52
+ if ($username) {
53
+ $params["username"] = $username;
54
+ }
55
+ if ($valid_secs) {
56
+ $params["valid_secs"] = $valid_secs;
57
+ }
58
+
59
+ return jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
60
+ }
61
+
62
+ function enroll_status($user_id, $activation_code,$skey,$ikey,$host)
63
+ {
64
+ assert(is_string($user_id));
65
+ assert(is_string($activation_code));
66
+
67
+ $method = "POST";
68
+ $endpoint = "/auth/v2/enroll_status";
69
+ $params = [
70
+ "user_id" => $user_id,
71
+ "activation_code" => $activation_code,
72
+ ];
73
+
74
+ return jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
75
+ }
76
+
77
+
78
+ function preauth(
79
+ $user_identifier,
80
+ $username,
81
+ $skey,
82
+ $ikey,
83
+ $host,
84
+ $ipaddr = null,
85
+ $trusted_device_token = null
86
+
87
+ ) {
88
+
89
+ assert(is_string($ipaddr) || is_null($ipaddr));
90
+ assert(is_string($trusted_device_token) || is_null($trusted_device_token));
91
+
92
+
93
+ $method = "POST";
94
+ $endpoint = "/auth/v2/preauth";
95
+ $params = [];
96
+
97
+ if ($username) {
98
+ $params["username"] = $user_identifier;
99
+ } else {
100
+ $params["user_id"] = $user_identifier;
101
+ }
102
+ if ($ipaddr) {
103
+ $params["ipaddr"] = $ipaddr;
104
+ }
105
+ if ($trusted_device_token) {
106
+ $params["trusted_device_token"] = $trusted_device_token;
107
+ }
108
+
109
+ return jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
110
+ }
111
+
112
+
113
+ function mo2f_duo_auth(
114
+ $user_identifier,
115
+ $factor,
116
+ $factor_params,
117
+ $skey,
118
+ $ikey,
119
+ $host,
120
+ $username = true,
121
+ $ipaddr = null,
122
+ $async = false,
123
+ $timeout = 60
124
+ ) {
125
+ assert(is_string($user_identifier));
126
+ assert(
127
+ is_string($factor) &&
128
+ in_array($factor, ["auto", "push", "passcode", "sms", "phone"], true)
129
+ );
130
+ assert(is_array($factor_params));
131
+ assert(is_string($ipaddr) || is_null($ipaddr));
132
+ assert(is_bool($async));
133
+ assert(is_bool($username));
134
+
135
+ $method = "POST";
136
+ $endpoint = "/auth/v2/auth";
137
+ $params = [];
138
+
139
+ if ($username) {
140
+ $params["username"] = $user_identifier;
141
+ } else {
142
+ $params["user_id"] = $user_identifier;
143
+ }
144
+ if ($ipaddr) {
145
+ $params["ipaddr"] = $ipaddr;
146
+ }
147
+ if ($async) {
148
+ $params["async"] = "1";
149
+ }
150
+
151
+ $params["factor"] = $factor;
152
+
153
+ if ($factor === "push") {
154
+ assert(array_key_exists("device", $factor_params) && is_string($factor_params["device"]));
155
+ $params["device"] = $factor_params["device"];
156
+
157
+ if (array_key_exists("type", $factor_params)) {
158
+ $params["type"] = $factor_params["type"];
159
+ }
160
+ if (array_key_exists("display_username", $factor_params)) {
161
+ $params["display_username"] = $factor_params["display_username"];
162
+ }
163
+ if (array_key_exists("pushinfo", $factor_params)) {
164
+ $params["pushinfo"] = $factor_params["pushinfo"];
165
+ }
166
+ } elseif ($factor === "passcode") {
167
+ assert(array_key_exists("passcode", $factor_params) && is_string($factor_params["passcode"]));
168
+ $params["passcode"] = $factor_params["passcode"];
169
+ } elseif ($factor === "phone") {
170
+ assert(array_key_exists("device", $factor_params) && is_string($factor_params["device"]));
171
+ $params["device"] = $factor_params["device"];
172
+ } elseif ($factor === "sms") {
173
+ assert(array_key_exists("device", $factor_params) && is_string($factor_params["device"]));
174
+ $params["device"] = $factor_params["device"];
175
+ } elseif ($factor === "auto") {
176
+ assert(array_key_exists("device", $factor_params) && is_string($factor_params["device"]));
177
+ $params["device"] = $factor_params["device"];
178
+ }
179
+
180
+
181
+ $options = [
182
+ "timeout" => $timeout,
183
+ ];
184
+ $requester_timeout = array_key_exists("timeout", $options) ? $options["timeout"] : null;
185
+ if (!$requester_timeout || $requester_timeout < $timeout) {
186
+ setRequesterOption("timeout", $timeout);
187
+ }
188
+
189
+ try {
190
+ $result = jsonApiCall($method, $endpoint, $params,$skey,$ikey,$host);
191
+ } finally {
192
+
193
+ if ($requester_timeout) {
194
+ setRequesterOption("timeout", $requester_timeout);
195
+ } else {
196
+ unset($options["timeout"]);
197
+ }
198
+ }
199
+
200
+ return $result;
201
+ }
202
+ function setRequesterOption($option, $value)
203
+ {
204
+ $options[$option] = $value;
205
+ return $options;
206
+ }
207
+
208
+ function mo2f_sleep($seconds)
209
+ {
210
+ usleep($seconds * 1000000);
211
+ }
212
+
213
+
214
+ function options($options)
215
+ {
216
+
217
+ $ch = curl_init();
218
+ assert(is_array($options));
219
+
220
+
221
+ $possible_options = [
222
+ CURLOPT_TIMEOUT => "timeout",
223
+ CURLOPT_CAINFO => "ca",
224
+ CURLOPT_USERAGENT => "user_agent",
225
+ CURLOPT_PROXY => "proxy_url",
226
+ CURLOPT_PROXYPORT => "proxy_port",
227
+ ];
228
+
229
+ $curl_options = array_filter($possible_options, function ($option) use ($options) {
230
+ return array_key_exists($option, $options);
231
+ });
232
+
233
+ foreach ($curl_options as $key => $value) {
234
+ $curl_options[$key] = $options[$value];
235
+ }
236
+
237
+
238
+ $curl_options[CURLOPT_RETURNTRANSFER] = 1;
239
+ $curl_options[CURLOPT_FOLLOWLOCATION] = 1;
240
+ $curl_options[CURLOPT_SSL_VERIFYPEER] = true;
241
+ $curl_options[CURLOPT_SSL_VERIFYHOST] = 2;
242
+
243
+ curl_setopt_array($ch, $curl_options);
244
+ }
245
+
246
+ function execute($url, $method, $headers, $body = null)
247
+ {
248
+ $ch = curl_init();
249
+ assert(is_string($url));
250
+ assert(is_string($method));
251
+ assert(is_array($headers));
252
+ assert(is_string($body) || is_null($body));
253
+
254
+ $headers = array_map(function ($key, $value) {
255
+ return sprintf("%s: %s", $key, $value);
256
+ }, array_keys($headers), array_values($headers));
257
+
258
+ curl_setopt($ch, CURLOPT_URL, $url);
259
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
260
+
261
+ if ($method === "POST") {
262
+ curl_setopt($ch, CURLOPT_POST, true);
263
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
264
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, null);
265
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
266
+ } elseif ($method === "GET") {
267
+ curl_setopt($ch, CURLOPT_HTTPGET, true);
268
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, null);
269
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
270
+ } else {
271
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
272
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
273
+ }
274
+ $result = curl_exec($ch);
275
+
276
+ $http_status_code = null;
277
+ $success = true;
278
+ if ($result === false) {
279
+ $error = curl_error($ch);
280
+ $errno = curl_errno($ch);
281
+
282
+
283
+ $result = json_encode(
284
+ [
285
+ 'stat' => 'FAIL',
286
+ 'code' => $errno,
287
+ 'message' => $error,
288
+ ]
289
+ );
290
+ $success = false;
291
+ } else {
292
+ $http_status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
293
+ }
294
+
295
+ return [
296
+ "response" => $result,
297
+ "success" => $success,
298
+ "http_status_code" => $http_status_code
299
+ ];
300
+ }
301
+
302
+ function jsonApiCall($method, $path, $params,$skey,$ikey,$host)
303
+ {
304
+ assert(is_string($method));
305
+ assert(is_string($path));
306
+ assert(is_array($params));
307
+
308
+ $result = apiCall($method, $path, $params,$skey,$ikey,$host);
309
+
310
+ $result["response"] = json_decode($result["response"], true);
311
+ return $result;
312
+ }
313
+
314
+
315
+
316
+ function urlEncodeParameters($params)
317
+ {
318
+ assert(is_array($params));
319
+
320
+ ksort($params);
321
+ $args = array_map(function ($key, $value) {
322
+ return sprintf("%s=%s", rawurlencode($key), rawurlencode($value));
323
+ }, array_keys($params), array_values($params));
324
+ return implode("&", $args);
325
+ }
326
+ function canonicalize($method, $host, $path, $params, $now)
327
+ {
328
+ assert(is_string($method));
329
+ assert(is_string($host));
330
+ assert(is_string($path));
331
+ assert(is_array($params));
332
+ assert(is_string($now));
333
+
334
+ $args = urlEncodeParameters($params);
335
+ $canon = array($now, strtoupper($method), strtolower($host), $path, $args);
336
+
337
+ $canon = implode("\n", $canon);
338
+
339
+ return $canon;
340
+ }
341
+ function sign($msg, $key)
342
+ {
343
+ assert(is_string($msg));
344
+ assert(is_string($key));
345
+
346
+ return hash_hmac("sha1", $msg, $key);
347
+ }
348
+
349
+ function signParameters($method, $host, $path, $params, $skey, $ikey, $now)
350
+ {
351
+ assert(is_string($method));
352
+ assert(is_string($host));
353
+ assert(is_string($path));
354
+ assert(is_array($params));
355
+ assert(is_string($skey));
356
+ assert(is_string($ikey));
357
+ assert(is_string($now));
358
+
359
+ $canon = canonicalize($method, $host, $path, $params, $now);
360
+
361
+ $signature = sign($canon, $skey);
362
+ $auth = sprintf("%s:%s", $ikey, $signature);
363
+ $b64auth = base64_encode($auth);
364
+
365
+ return sprintf("Basic %s", $b64auth);
366
+ }
367
+
368
+
369
+ function makeRequest($method, $uri, $body, $headers,$host)
370
+ {
371
+
372
+ assert(is_string($method));
373
+ assert(is_string($uri));
374
+ assert(is_string($body) || is_null($body));
375
+ assert(is_array($headers));
376
+ $url = "https://" . $host . $uri;
377
+
378
+ $options = [
379
+ "timeout" => 10,
380
+ ];
381
+
382
+ options($options);
383
+ $backoff_seconds = INITIAL_BACKOFF_SECONDS;
384
+ while (true) {
385
+ $result = execute($url, $method, $headers, $body);
386
+
387
+ if ($result["http_status_code"] != RATE_LIMIT_HTTP_CODE || $backoff_seconds > MAX_BACKOFF_SECONDS) {
388
+ return $result;
389
+ }
390
+
391
+ mo2f_sleep($backoff_seconds + (rand(0, 1000) / 1000.0));
392
+ $backoff_seconds *= BACKOFF_FACTOR;
393
+ }
394
+ }
395
+ function apiCall($method, $path, $params,$skey,$ikey,$host)
396
+ {
397
+ assert(is_string($method));
398
+ assert(is_string($path));
399
+ assert(is_array($params));
400
+
401
+ $now = date(DateTime::RFC2822);
402
+
403
+ $headers = [];
404
+ $headers["Date"] = $now;
405
+ $headers["Host"] = $host;
406
+ $headers["Authorization"] = signParameters(
407
+ $method,
408
+ $host,
409
+ $path,
410
+ $params,
411
+ $skey,
412
+ $ikey,
413
+ $now
414
+ );
415
+
416
+ if (in_array($method, ["POST", "PUT"], true)) {
417
+
418
+ $body = http_build_query($params);
419
+ $headers["Content-Type"] = "application/x-www-form-urlencoded";
420
+ $headers["Content-Length"] = strval(strlen($body));
421
+ $uri = $path;
422
+ } else {
423
+ $body = null;
424
+ $uri = $path . (!empty($params) ? "?" . urlEncodeParameters($params) : "");
425
+ }
426
+
427
+ return makeRequest($method, $uri, $body, $headers,$host);
428
+ }
handler/twofa/two_fa_pass2login.php CHANGED
@@ -783,6 +783,96 @@ class Miniorange_Password_2Factor_Login {
783
 
784
  }
785
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
786
  function mo2f_inline_setup_success($current_user_id,$redirect_to,$session_id){
787
  global $Mo2fdbQueries;
788
  $Mo2fdbQueries->update_user_details( $current_user_id, array('mo_2factor_user_registration_status' =>'MO_2_FACTOR_PLUGIN_SETTINGS') );
@@ -1191,7 +1281,22 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
1191
  }
1192
 
1193
 
1194
- }else{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1195
  //inline for others
1196
  if(!MO2F_IS_ONPREM or $selected_method == 'MOBILE AUTHENTICATION' or $selected_method == 'PUSH NOTIFICATIONS' or $selected_method == 'SOFT TOKEN' )
1197
  {
@@ -1404,6 +1509,45 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
1404
  $this->mo2f_pass2login_kba_verification( $user_id, $redirect_to,$session_id_encrypt );
1405
  }
1406
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1407
  function check_miniorange_mobile_validation($POSTED){
1408
  /*check mobile validation */
1409
 
@@ -1469,6 +1613,66 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
1469
 
1470
  }
1471
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1472
  function check_miniorange_forgotphone($POSTED){
1473
  $nonce = $POSTED['miniorange_forgotphone'];
1474
  if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-forgotphone' ) ) {
@@ -1979,10 +2183,26 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
1979
  $this->check_miniorange_mobile_validation($_POST);
1980
  break;
1981
 
 
 
 
 
 
 
 
 
 
 
 
 
1982
  case 'miniorange_mobile_validation_failed':
1983
  $this->check_miniorange_mobile_validation_failed($_POST);
1984
  break;
1985
 
 
 
 
 
1986
  case 'miniorange_softtoken':
1987
  $this->check_miniorange_softtoken($_POST);
1988
 
@@ -2025,7 +2245,12 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
2025
  case 'miniorange_inline_complete_mobile':
2026
  $this->mo2f_inline_validate_mobile_authentication();
2027
  break;
2028
-
 
 
 
 
 
2029
  case 'mo2f_inline_kba_option':
2030
  $this->mo2f_inline_validate_kba();
2031
  break;
@@ -2265,6 +2490,13 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
2265
  mo2f_get_otp_authentication_prompt( $login_status, $login_message, $redirect_to, $session_id_encrypt,$user_id );
2266
  exit;
2267
  break;
 
 
 
 
 
 
 
2268
  case 'MO_2_FACTOR_CHALLENGE_KBA_AND_OTP_OVER_EMAIL':
2269
  mo2f_get_forgotphone_form( $login_status, $login_message, $redirect_to, $session_id_encrypt );
2270
  exit;
@@ -2529,6 +2761,19 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
2529
 
2530
  }
2531
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2532
  function mo2f_pass2login_push_oobemail_verification( $current_user, $mo2f_second_factor, $redirect_to, $session_id=null ) {
2533
 
2534
  global $Mo2fdbQueries;
@@ -2920,6 +3165,8 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
2920
  $mo2f_second_factor = 'GOOGLE AUTHENTICATOR';
2921
  else if($mo2f_second_factor == 'OTP Over SMS')
2922
  $mo2f_second_factor = 'SMS';
 
 
2923
  else if($mo2f_second_factor == 'OTP Over Email' || $mo2f_second_factor == 'OTP OVER EMAIL' || $mo2f_second_factor == "EMAIL") {
2924
  $mo2f_second_factor = "EMAIL";
2925
 
@@ -2953,7 +3200,11 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
2953
  $this->mo2f_pass2login_otp_verification( $currentuser, $mo2f_second_factor, $redirect_to, $session_id_encrypt );
2954
  } else if ( $mo2f_second_factor == 'KBA' or $mo2f_second_factor == 'Security Questions') {
2955
  $this->mo2f_pass2login_kba_verification( $currentuser->ID, $redirect_to , $session_id_encrypt );
2956
- } else if ( $mo2f_second_factor == 'NONE' ) {
 
 
 
 
2957
  if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request'))
2958
  $this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
2959
  else
@@ -3135,8 +3386,18 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
3135
  global $Mo2fdbQueries;
3136
 
3137
  $session_id = isset( $_POST['session_id'] ) ? sanitize_text_field($_POST['session_id']) : null;
3138
-
3139
- $redirect_to = isset( $_REQUEST['redirect_to'] ) ? esc_url_raw($_REQUEST['redirect_to'] ): null;
 
 
 
 
 
 
 
 
 
 
3140
  $mo2f_configured_2FA_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $currentuser->ID );
3141
  $cloud_methods = array("MOBILE AUTHENTICATION","PUSH NOTIFICATIONS","SOFT TOKEN");
3142
  if (MO2F_IS_ONPREM && $mo2f_configured_2FA_method=='Security Questions')
@@ -3194,7 +3455,7 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
3194
 
3195
  if(isset($_POST['mo_woocommerce_login_prompt'])){
3196
 
3197
- $this->miniorange_initiate_2nd_factor( $currentuser, "", "","",$session_id);
3198
  }
3199
  if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
3200
  $data = array('notice' => '<div style="border-left:3px solid #dc3232;">&nbsp; Please enter the One Time Passcode', );
@@ -3211,9 +3472,6 @@ function create_user_in_miniOrange($current_user_id,$email,$currentMethod)
3211
  }
3212
  $attributes = isset( $_POST['miniorange_rba_attribures'] ) ? $_POST['miniorange_rba_attribures'] : null;
3213
  $session_id = isset( $_POST['session_id'] ) ? sanitize_text_field($_POST['session_id']) : null;
3214
-
3215
- $redirect_to = isset( $_REQUEST['redirect_to'] ) ? esc_url_raw($_REQUEST['redirect_to']) : null;
3216
-
3217
  if(is_null($session_id)) {
3218
  $session_id=$this->create_session();
3219
  }
783
 
784
  }
785
 
786
+ function mo2f_duo_mobile_send_push_notification_for_inline_form(){
787
+ if(isset($_POST['duo_mobile_send_push_notification_inline_form_nonce'])){
788
+ $nonce = sanitize_text_field($_POST['duo_mobile_send_push_notification_inline_form_nonce']);
789
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-send-duo-push-notification-inline-nonce' ) ) {
790
+ $error = new WP_Error();
791
+ $error->add('empty_username', '<strong>'. __('ERROR','miniorange-2-factor-authentication') .'</strong>: '. __('Invalid Request.', 'miniorange-2-factor-authentication'));
792
+ return $error;
793
+ } else {
794
+
795
+ global $Mo2fdbQueries;
796
+ $this->miniorange_pass2login_start_session();
797
+ $session_id_encrypt = isset( $_POST['session_id'] ) ? sanitize_text_field($_POST['session_id']) : null;
798
+ MO2f_Utility::unset_temp_user_details_in_table( 'mo2f_transactionId',$session_id_encrypt );
799
+ $user_id = MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
800
+ $redirect_to = isset( $_POST['redirect_to'] ) ? esc_url_raw($_POST['redirect_to']) : null;
801
+
802
+ $Mo2fdbQueries->update_user_details( $user_id, array(
803
+ 'mobile_registration_status' =>true,
804
+ ) );
805
+ $mo2fa_login_message = '';
806
+
807
+ $mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
808
+
809
+
810
+ $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to,null,$session_id_encrypt);
811
+
812
+ }
813
+ }
814
+ }
815
+
816
+ function mo2f_inline_validate_duo_authentication(){
817
+ if(isset($_POST['mo_auth_inline_duo_auth_mobile_registration_complete_nonce'])){
818
+ $nonce = sanitize_text_field($_POST['mo_auth_inline_duo_auth_mobile_registration_complete_nonce']);
819
+ if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-inline-duo_auth-registration-complete-nonce' ) ) {
820
+ $error = new WP_Error();
821
+ $error->add('empty_username', '<strong>'. __('ERROR','miniorange-2-factor-authentication') .'</strong>: '. __('Invalid Request.', 'miniorange-2-factor-authentication'));
822
+ return $error;
823
+ } else {
824
+
825
+ global $Mo2fdbQueries;
826
+ $this->miniorange_pass2login_start_session();
827
+ $session_id_encrypt = isset( $_POST['session_id'] ) ? sanitize_text_field($_POST['session_id']) : null;
828
+ MO2f_Utility::unset_temp_user_details_in_table( 'mo2f_transactionId',$session_id_encrypt );
829
+ $user_id = MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
830
+ $redirect_to = isset( $_POST['redirect_to'] ) ? esc_url_raw($_POST['redirect_to']) : null;
831
+ $selected_2factor_method = $Mo2fdbQueries->get_user_detail('mo2f_configured_2FA_method',$user_id);
832
+ $email = $Mo2fdbQueries->get_user_detail('mo2f_user_email',$user_id);
833
+ $Mo2fdbQueries->update_user_details( $user_id, array(
834
+ 'mobile_registration_status' =>true,
835
+ ) );
836
+ $mo2fa_login_message = '';
837
+
838
+ include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'handler'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_duo_handler.php';
839
+ $ikey = get_site_option('mo2f_d_integration_key');
840
+ $skey = get_site_option('mo2f_d_secret_key');
841
+ $host = get_site_option('mo2f_d_api_hostname');
842
+
843
+
844
+
845
+ $duo_preauth = preauth( $email ,true, $skey, $ikey, $host);
846
+
847
+
848
+ if(isset($duo_preauth['response']['stat']) && $duo_preauth['response']['stat'] == 'OK'){
849
+
850
+ if(isset($duo_preauth['response']['response']['status_msg']) && $duo_preauth['response']['response']['status_msg'] == 'Account is active'){
851
+ $mo2fa_login_message = $email.' user is already exists, please go for step B duo will send push notification on your configured mobile.';
852
+
853
+ }else if(isset($duo_preauth['response']['response']['enroll_portal_url'])){
854
+ $duo_enroll_url = $duo_preauth['response']['response']['enroll_portal_url'];
855
+ update_user_meta( $user_id , 'user_not_enroll_on_duo_before', $duo_enroll_url );
856
+ update_user_meta( $user_id , 'user_not_enroll', true );
857
+
858
+ }else{
859
+ $mo2fa_login_message = 'Your account is inactive from duo side, please contact to your administrator.';
860
+ }
861
+
862
+ }else{
863
+ $mo2fa_login_message = 'Error through during preauth.';
864
+
865
+ }
866
+
867
+ $mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
868
+
869
+
870
+ $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to,null,$session_id_encrypt);
871
+
872
+ }
873
+ }
874
+ }
875
+
876
  function mo2f_inline_setup_success($current_user_id,$redirect_to,$session_id){
877
  global $Mo2fdbQueries;
878
  $Mo2fdbQueries->update_user_details( $current_user_id, array('mo_2factor_user_registration_status' =>'MO_2_FACTOR_PLUGIN_SETTINGS') );
1281
  }
1282
 
1283
 
1284
+ }else if($selected_method == "DUO PUSH NOTIFICATIONS"){
1285
+ $this->miniorange_pass2login_start_session();
1286
+ $mo2fa_login_message = '';
1287
+ $mo2fa_login_status = 'MO_2_FACTOR_PROMPT_USER_FOR_2FA_METHODS';
1288
+
1289
+ $selected_method = "Duo Authenticator";
1290
+
1291
+ $Mo2fdbQueries->update_user_details( $current_user->ID, array(
1292
+ 'mo2f_configured_2FA_method' =>$selected_method
1293
+ ) );
1294
+
1295
+
1296
+
1297
+
1298
+ }
1299
+ else{
1300
  //inline for others
1301
  if(!MO2F_IS_ONPREM or $selected_method == 'MOBILE AUTHENTICATION' or $selected_method == 'PUSH NOTIFICATIONS' or $selected_method == 'SOFT TOKEN' )
1302
  {
1509
  $this->mo2f_pass2login_kba_verification( $user_id, $redirect_to,$session_id_encrypt );
1510
  }
1511
  }
1512
+
1513
+ function check_miniorange_duo_push_validation($POSTED){
1514
+ $nonce = $POSTED['miniorange_duo_push_validation_nonce'];
1515
+ if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-duo-validation-nonce' ) ) {
1516
+ $error = new WP_Error();
1517
+ $error->add( 'empty_username', __( '<strong>ERROR</strong>: Invalid Request.' ) );
1518
+ return $error;
1519
+ } else {
1520
+ $this->miniorange_pass2login_start_session();
1521
+ $session_id_encrypt = isset( $POSTED['session_id'] ) ? sanitize_text_field($POSTED['session_id']) : null;
1522
+ //if the php session folder has insufficient permissions, cookies to be used
1523
+ // $mo2f_login_transaction_id = MO2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_transactionId',$session_id_encrypt );
1524
+ $redirect_to = isset( $POSTED['redirect_to'] ) ? esc_url_raw($POSTED['redirect_to']) : null;
1525
+ if ( get_option( 'mo2f_remember_device' ) ) {
1526
+ $mo2fa_login_status = 'MO_2_FACTOR_REMEMBER_TRUSTED_DEVICE';
1527
+ $this->miniorange_pass2login_form_fields( $mo2fa_login_status, null, $redirect_to, null,$session_id_encrypt );
1528
+ } else {
1529
+ $this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
1530
+ }
1531
+
1532
+ }
1533
+ }
1534
+
1535
+ function check_miniorange_duo_push_validation_failed($POSTED){
1536
+
1537
+ $nonce = $POSTED['miniorange_duo_push_validation_failed_nonce'];
1538
+ if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-duo-push-validation-failed-nonce' ) ) {
1539
+ $error = new WP_Error();
1540
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
1541
+ return $error;
1542
+ } else {
1543
+ $this->miniorange_pass2login_start_session();
1544
+ $session_id_encrypt = isset( $POSTED['session_id'] ) ? sanitize_text_field($POSTED['session_id']) : null;
1545
+ $this->remove_current_activity($session_id_encrypt);
1546
+
1547
+ }
1548
+
1549
+ }
1550
+
1551
  function check_miniorange_mobile_validation($POSTED){
1552
  /*check mobile validation */
1553
 
1613
 
1614
  }
1615
  }
1616
+
1617
+ function check_mo2f_duo_authenticator_success_form($POSTED){
1618
+ if(isset($POSTED['mo2f_duo_authenticator_success_nonce'])){
1619
+ $nonce = sanitize_text_field($POSTED['mo2f_duo_authenticator_success_nonce']);
1620
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-duo-authenticator-success-nonce' ) ) {
1621
+ $error = new WP_Error();
1622
+ $error->add('empty_username', '<strong>'. __('ERROR','miniorange-2-factor-authentication') .'</strong>: '. __('Invalid Request.', 'miniorange-2-factor-authentication'));
1623
+ return $error;
1624
+ } else {
1625
+
1626
+ global $Mo2fdbQueries;
1627
+ $this->miniorange_pass2login_start_session();
1628
+ $session_id_encrypt = isset( $POSTED['session_id'] ) ? sanitize_text_field($POSTED['session_id']) : null;
1629
+ MO2f_Utility::unset_temp_user_details_in_table( 'mo2f_transactionId',$session_id_encrypt );
1630
+ $user_id = MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
1631
+ $redirect_to = isset( $POSTED['redirect_to'] ) ? esc_url_raw($POSTED['redirect_to']) : null;
1632
+ $selected_2factor_method = $Mo2fdbQueries->get_user_detail('mo2f_configured_2FA_method',$user_id);
1633
+ $email = $Mo2fdbQueries->get_user_detail('mo2f_user_email',$user_id);
1634
+ $mo2fa_login_message = '';
1635
+
1636
+
1637
+ delete_user_meta($user_id,'user_not_enroll');
1638
+ delete_site_option('current_user_email');
1639
+ $Mo2fdbQueries->update_user_details( $user_id, array(
1640
+ 'mobile_registration_status' =>true,
1641
+ 'mo2f_DuoAuthenticator_config_status' => true,
1642
+ 'mo2f_configured_2FA_method' =>$selected_2factor_method ,
1643
+ 'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS',
1644
+ ) );
1645
+ $mo2fa_login_status = 'MO_2_FACTOR_SETUP_SUCCESS';
1646
+
1647
+
1648
+ $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to,null,$session_id_encrypt);
1649
+
1650
+ }
1651
+ }
1652
+ }
1653
+ function check_inline_mo2f_duo_authenticator_error($POSTED){
1654
+ $nonce = $POSTED['mo2f_inline_duo_authentcator_error_nonce'];
1655
+
1656
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-inline-duo-authenticator-error-nonce' ) ) {
1657
+ $error = new WP_Error();
1658
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
1659
+
1660
+ return $error;
1661
+ } else {
1662
+ global $Mo2fdbQueries;
1663
+ $this->miniorange_pass2login_start_session();
1664
+ $session_id_encrypt = isset( $POSTED['session_id'] ) ? sanitize_text_field($POSTED['session_id']) : null;
1665
+ MO2f_Utility::unset_temp_user_details_in_table( 'mo2f_transactionId',$session_id_encrypt );
1666
+ $user_id = MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
1667
+
1668
+
1669
+
1670
+ $Mo2fdbQueries->update_user_details( $user_id, array(
1671
+ 'mobile_registration_status' =>false,
1672
+ ) );
1673
+
1674
+ }
1675
+ }
1676
  function check_miniorange_forgotphone($POSTED){
1677
  $nonce = $POSTED['miniorange_forgotphone'];
1678
  if ( ! wp_verify_nonce( $nonce, 'miniorange-2-factor-forgotphone' ) ) {
2183
  $this->check_miniorange_mobile_validation($_POST);
2184
  break;
2185
 
2186
+ case 'miniorange_duo_push_validation':
2187
+ $this->check_miniorange_duo_push_validation($_POST);
2188
+ break;
2189
+
2190
+ case 'mo2f_inline_duo_authenticator_success_form':
2191
+ $this->check_mo2f_duo_authenticator_success_form($_POST);
2192
+ break;
2193
+
2194
+ case 'mo2f_inline_duo_authenticator_error':
2195
+ $this->check_inline_mo2f_duo_authenticator_error($_POST);
2196
+ break;
2197
+
2198
  case 'miniorange_mobile_validation_failed':
2199
  $this->check_miniorange_mobile_validation_failed($_POST);
2200
  break;
2201
 
2202
+ case 'miniorange_duo_push_validation_failed':
2203
+ $this->check_miniorange_duo_push_validation_failed($_POST);
2204
+ break;
2205
+
2206
  case 'miniorange_softtoken':
2207
  $this->check_miniorange_softtoken($_POST);
2208
 
2245
  case 'miniorange_inline_complete_mobile':
2246
  $this->mo2f_inline_validate_mobile_authentication();
2247
  break;
2248
+ case 'miniorange_inline_duo_auth_mobile_complete':
2249
+ $this->mo2f_inline_validate_duo_authentication();
2250
+ break;
2251
+ case 'duo_mobile_send_push_notification_for_inline_form':
2252
+ $this->mo2f_duo_mobile_send_push_notification_for_inline_form();
2253
+ break;
2254
  case 'mo2f_inline_kba_option':
2255
  $this->mo2f_inline_validate_kba();
2256
  break;
2490
  mo2f_get_otp_authentication_prompt( $login_status, $login_message, $redirect_to, $session_id_encrypt,$user_id );
2491
  exit;
2492
  break;
2493
+ case 'MO_2_FACTOR_CHALLENGE_DUO_PUSH_NOTIFICATIONS':
2494
+ $user_id = $this->mo2f_userID ? $this->mo2f_userID : MO2f_Utility::mo2f_get_transient($session_id_encrypt, 'mo2f_current_user_id');
2495
+ mo2f_get_duo_push_authentication_prompt( $login_status, $login_message, $redirect_to, $session_id_encrypt,$user_id
2496
+ );
2497
+ exit;
2498
+ break;
2499
+
2500
  case 'MO_2_FACTOR_CHALLENGE_KBA_AND_OTP_OVER_EMAIL':
2501
  mo2f_get_forgotphone_form( $login_status, $login_message, $redirect_to, $session_id_encrypt );
2502
  exit;
2761
 
2762
  }
2763
 
2764
+ function mo2f_pass2login_duo_push_verification( $currentuser, $mo2f_second_factor, $redirect_to, $session_id_encrypt ){
2765
+ global $Mo2fdbQueries;
2766
+ include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'handler'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_duo_handler.php';
2767
+ if (is_null($session_id_encrypt)){
2768
+ $session_id_encrypt=$this->create_session();
2769
+ }
2770
+
2771
+ $mo2fa_login_message ='';
2772
+ $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_DUO_PUSH_NOTIFICATIONS';
2773
+ $this->miniorange_pass2login_form_fields( $mo2fa_login_status, $mo2fa_login_message, $redirect_to,null,$session_id_encrypt);
2774
+
2775
+ }
2776
+
2777
  function mo2f_pass2login_push_oobemail_verification( $current_user, $mo2f_second_factor, $redirect_to, $session_id=null ) {
2778
 
2779
  global $Mo2fdbQueries;
3165
  $mo2f_second_factor = 'GOOGLE AUTHENTICATOR';
3166
  else if($mo2f_second_factor == 'OTP Over SMS')
3167
  $mo2f_second_factor = 'SMS';
3168
+ else if($mo2f_second_factor == 'Duo Authenticator' || $mo2f_second_factor == 'DUO AUTHENTICATOR')
3169
+ $mo2f_second_factor = 'Duo Authenticator';
3170
  else if($mo2f_second_factor == 'OTP Over Email' || $mo2f_second_factor == 'OTP OVER EMAIL' || $mo2f_second_factor == "EMAIL") {
3171
  $mo2f_second_factor = "EMAIL";
3172
 
3200
  $this->mo2f_pass2login_otp_verification( $currentuser, $mo2f_second_factor, $redirect_to, $session_id_encrypt );
3201
  } else if ( $mo2f_second_factor == 'KBA' or $mo2f_second_factor == 'Security Questions') {
3202
  $this->mo2f_pass2login_kba_verification( $currentuser->ID, $redirect_to , $session_id_encrypt );
3203
+ }else if ( $mo2f_second_factor == 'Duo Authenticator') {
3204
+
3205
+ $this->mo2f_pass2login_duo_push_verification( $currentuser, $mo2f_second_factor, $redirect_to, $session_id_encrypt );
3206
+
3207
+ }else if ( $mo2f_second_factor == 'NONE' ) {
3208
  if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request'))
3209
  $this->mo2fa_pass2login( $redirect_to, $session_id_encrypt );
3210
  else
3386
  global $Mo2fdbQueries;
3387
 
3388
  $session_id = isset( $_POST['session_id'] ) ? sanitize_text_field($_POST['session_id']) : null;
3389
+ if(isset($_REQUEST['woocommerce-login-nonce'])){
3390
+ if ( ! empty( $_REQUEST[ 'redirect_to' ] ) ) {
3391
+ $redirect_to = wp_unslash( $_REQUEST[ 'redirect_to' ] );
3392
+ } elseif ( isset($_REQUEST[ '_wp_http_referer' ]) ) {
3393
+ $redirect_to = $_REQUEST[ '_wp_http_referer' ];
3394
+ } else {
3395
+ $redirect_to = wc_get_page_permalink( 'myaccount' );
3396
+ }
3397
+ }else{
3398
+ $redirect_to = isset($_REQUEST[ 'redirect_to' ]) ? $_REQUEST[ 'redirect_to' ] : (isset($_REQUEST[ 'redirect' ]) ? $_REQUEST[ 'redirect' ] : null);
3399
+ }
3400
+ $redirect_to = esc_url_raw($redirect_to);
3401
  $mo2f_configured_2FA_method = $Mo2fdbQueries->get_user_detail( 'mo2f_configured_2FA_method', $currentuser->ID );
3402
  $cloud_methods = array("MOBILE AUTHENTICATION","PUSH NOTIFICATIONS","SOFT TOKEN");
3403
  if (MO2F_IS_ONPREM && $mo2f_configured_2FA_method=='Security Questions')
3455
 
3456
  if(isset($_POST['mo_woocommerce_login_prompt'])){
3457
 
3458
+ $this->miniorange_initiate_2nd_factor( $currentuser, "", $redirect_to,"",$session_id);
3459
  }
3460
  if(MO2f_Utility::get_index_value('GLOBALS','mo2f_is_ajax_request')){
3461
  $data = array('notice' => '<div style="border-left:3px solid #dc3232;">&nbsp; Please enter the One Time Passcode', );
3472
  }
3473
  $attributes = isset( $_POST['miniorange_rba_attribures'] ) ? $_POST['miniorange_rba_attribures'] : null;
3474
  $session_id = isset( $_POST['session_id'] ) ? sanitize_text_field($_POST['session_id']) : null;
 
 
 
3475
  if(is_null($session_id)) {
3476
  $session_id=$this->create_session();
3477
  }
handler/twofa/two_fa_settings.php CHANGED
@@ -1669,7 +1669,48 @@ class Miniorange_Authentication {
1669
  $this->mo_auth_show_error_message();
1670
  }
1671
 
1672
- }else if ( isset( $_POST['option'] ) && sanitize_text_field($_POST['option']) == 'mo2f_validate_google_authy_test' ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1673
 
1674
  $nonce = sanitize_text_field($_POST['mo2f_validate_google_authy_test_nonce']);
1675
 
@@ -1856,7 +1897,36 @@ class Miniorange_Authentication {
1856
 
1857
  }
1858
  }
1859
- }else if ( isset( $_POST['option'] ) && $_POST['option'] == 'mo2f_configure_authy_authenticator' ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1860
  $nonce = $_POST['mo2f_configure_authy_authenticator_nonce'];
1861
 
1862
  if ( ! wp_verify_nonce( $nonce, 'mo2f-configure-authy-authenticator-nonce' ) ) {
@@ -2545,9 +2615,124 @@ class Miniorange_Authentication {
2545
  }
2546
  }
2547
 
2548
- }else if ( ( isset( $_POST['option'] ) && sanitize_text_field($_POST['option']) == 'mo2f_save_free_plan_auth_methods' ) ) {// user clicks on Set 2-Factor method
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2549
 
2550
- $nonce = sanitize_text_field($_POST['miniorange_save_form_auth_methods_nonce']);
 
 
 
 
 
 
 
 
 
 
 
 
2551
  if ( ! wp_verify_nonce( $nonce, 'miniorange-save-form-auth-methods-nonce' ) ) {
2552
  $error = new WP_Error();
2553
  $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
@@ -2571,7 +2756,7 @@ class Miniorange_Authentication {
2571
  }
2572
  $selected_2FA_method = MO2f_Utility::mo2f_decode_2_factor( isset( $_POST['mo2f_configured_2FA_method_free_plan'] ) ? $_POST['mo2f_configured_2FA_method_free_plan'] : $_POST['mo2f_selected_action_standard_plan'], "wpdb" );
2573
  $selected_2FA_method = sanitize_text_field($selected_2FA_method);
2574
- $onprem_methods = array('Google Authenticator','Security Questions','OTP Over Telegram','OTP Over Whatsapp');
2575
  $Mo2fdbQueries->insert_user( $user->ID );
2576
  if(MO2F_IS_ONPREM && ! in_array($selected_2FA_method, $onprem_methods) ){
2577
  foreach ($cloud_methods as $cloud_method) {
@@ -2653,9 +2838,11 @@ class Miniorange_Authentication {
2653
  $selected_2FA_method = 'OTP Over Telegram';
2654
  if($selected_2FA_method == 'OTPOverWhatsapp')
2655
  $selected_2FA_method = 'OTP Over Whatsapp';
 
 
2656
  }
2657
 
2658
- 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' or $selected_2FA_method == 'OTP Over Whatsapp' or $selected_2FA_method == 'OTP Over Telegram'))
2659
  $is_customer_registered = 1;
2660
 
2661
  if ( $is_customer_registered ) {
@@ -2674,6 +2861,8 @@ class Miniorange_Authentication {
2674
  $selected_2FA_method = 'OTP Over Telegram';
2675
  if($selected_2FA_method == 'OTPOverWhatsapp')
2676
  $selected_2FA_method = 'OTP Over Whatsapp';
 
 
2677
  if ( $selected_action == "select2factor" ) {
2678
 
2679
  if ( $selected_2FA_method == 'OTP Over SMS' && $user_phone == 'false' ) {
@@ -3026,6 +3215,9 @@ class Miniorange_Authentication {
3026
  } else if ( $selected_2FA_method == 'Email Verification' ) {
3027
  $this->miniorange_email_verification_call( $user );
3028
  }
 
 
 
3029
 
3030
 
3031
  update_user_meta( $user->ID, 'mo2f_2FA_method_to_test', $selected_2FA_method );
1669
  $this->mo_auth_show_error_message();
1670
  }
1671
 
1672
+ }else if ( isset( $_POST['option'] ) && $_POST['option'] == 'mo2f_duo_authenticator_success_form' ) {
1673
+ $nonce = $_POST['mo2f_duo_authenticator_success_nonce'];
1674
+
1675
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-duo-authenticator-success-nonce' ) ) {
1676
+ $error = new WP_Error();
1677
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
1678
+
1679
+ return $error;
1680
+ }else{
1681
+
1682
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "COMPLETED_TEST" ) );
1683
+
1684
+ delete_user_meta( $user->ID, 'test_2FA' );
1685
+ $Mo2fdbQueries->update_user_details( $user->ID, array(
1686
+ 'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS',
1687
+ 'mo2f_DuoAuthenticator_config_status' => true
1688
+ ) );
1689
+
1690
+ $this->mo_auth_show_success_message();
1691
+
1692
+ }
1693
+ }else if ( isset( $_POST['option'] ) and $_POST['option'] == 'mo2f_duo_authenticator_error' ) { //push and out of band email denied
1694
+ $nonce = $_POST['mo2f_duo_authentcator_error_nonce'];
1695
+
1696
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-duo-authenticator-error-nonce' ) ) {
1697
+ $error = new WP_Error();
1698
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
1699
+
1700
+ return $error;
1701
+ } else {
1702
+ global $Mo2fdbQueries;
1703
+
1704
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "DENIED_DUO_REQUEST" ) );
1705
+ delete_user_meta( $user->ID, 'test_2FA' );
1706
+ $Mo2fdbQueries->update_user_details( $user->ID, array(
1707
+ 'mobile_registration_status' =>false,
1708
+ ) );
1709
+ $this->mo_auth_show_error_message();
1710
+ }
1711
+
1712
+ }
1713
+ else if ( isset( $_POST['option'] ) && sanitize_text_field($_POST['option']) == 'mo2f_validate_google_authy_test' ) {
1714
 
1715
  $nonce = sanitize_text_field($_POST['mo2f_validate_google_authy_test_nonce']);
1716
 
1897
 
1898
  }
1899
  }
1900
+ }else if(isset( $_POST['option'] ) && sanitize_text_field($_POST['option']) == 'mo2f_configure_duo_authenticator_validate_nonce'){
1901
+
1902
+ $nonce = sanitize_text_field($_POST['mo2f_configure_duo_authenticator_validate_nonce']);
1903
+
1904
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-configure-duo-authenticator-validate-nonce' ) ) {
1905
+ $error = new WP_Error();
1906
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
1907
+
1908
+ return $error;
1909
+ }else{
1910
+
1911
+ delete_user_meta( $user->ID, 'mo2f_2FA_method_to_configure' );
1912
+
1913
+ delete_user_meta( $user->ID, 'configure_2FA' );
1914
+ delete_user_meta($user->ID,'user_not_enroll');
1915
+ $Mo2fdbQueries->update_user_details( $user->ID, array(
1916
+ 'mo2f_DuoAuthenticator_config_status' => true,
1917
+
1918
+ 'mo2f_configured_2FA_method' => "Duo Authenticator",
1919
+ 'user_registration_with_miniorange' => 'SUCCESS',
1920
+ 'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS'
1921
+ ) );
1922
+
1923
+ update_user_meta( $user->ID, 'mo2f_external_app_type', "Duo Authenticator" );
1924
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "VALIDATE_DUO" ) );
1925
+ $this->mo_auth_show_success_message();
1926
+ }
1927
+
1928
+ }
1929
+ else if ( isset( $_POST['option'] ) && $_POST['option'] == 'mo2f_configure_authy_authenticator' ) {
1930
  $nonce = $_POST['mo2f_configure_authy_authenticator_nonce'];
1931
 
1932
  if ( ! wp_verify_nonce( $nonce, 'mo2f-configure-authy-authenticator-nonce' ) ) {
2615
  }
2616
  }
2617
 
2618
+ }else if(isset( $_POST['option'] ) && $_POST['option'] == 'mo2f_configure_duo_authenticator'){
2619
+
2620
+ $nonce = $_POST['mo2f_configure_duo_authenticator_nonce'];
2621
+
2622
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-configure-duo-authenticator' ) ) {
2623
+ $error = new WP_Error();
2624
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
2625
+
2626
+ return $error;
2627
+ } else {
2628
+ if($_POST['ikey'] == '' || $_POST['skey'] == '' || $_POST['apihostname'] == '' ){
2629
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "Some field is missing, please fill all required details." ) );
2630
+ $this->mo_auth_show_error_message();
2631
+ return;
2632
+ }else{
2633
+ update_site_option('mo2f_d_integration_key',isset($_POST['ikey'])? sanitize_text_field($_POST['ikey']):'');
2634
+ update_site_option('mo2f_d_secret_key',isset($_POST['skey'])? sanitize_text_field($_POST['skey']):'');
2635
+ update_site_option('mo2f_d_api_hostname',isset($_POST['apihostname'])? sanitize_text_field($_POST['apihostname']):'');
2636
+
2637
+ $ikey = sanitize_text_field($_POST['ikey']);
2638
+ $skey = sanitize_text_field($_POST['skey']);
2639
+ $host = sanitize_text_field($_POST['apihostname']);
2640
+
2641
+ include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'handler'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_duo_handler.php';
2642
+
2643
+
2644
+ $duo_up_response = ping($skey,$ikey,$host);
2645
+
2646
+ if($duo_up_response['response']['stat'] == 'OK'){
2647
+
2648
+ $duo_check_credentials = check($skey, $ikey, $host);
2649
+
2650
+ if($duo_check_credentials['response']['stat'] == 'OK'){
2651
+
2652
+
2653
+ }else{
2654
+
2655
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "Not the valid credential, please enter valid keys" ) );
2656
+ $this->mo_auth_show_error_message();
2657
+ return;
2658
+ }
2659
+
2660
+ }else{
2661
+
2662
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "Duo server is not responding right now, please try after some time" ) );
2663
+ $this->mo_auth_show_error_message();
2664
+ return;
2665
+ }
2666
+ update_site_option('duo_credentials_save_successfully',1);
2667
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "Setting saved successfully." ) );
2668
+ $this->mo_auth_show_success_message();
2669
+ return;
2670
+ }
2671
+ }
2672
+ }else if(isset( $_POST['option'] ) && $_POST['option'] == 'mo2f_configure_duo_authenticator_abc'){
2673
+
2674
+ $nonce = $_POST['mo2f_configure_duo_authenticator_nonce'];
2675
+
2676
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-configure-duo-authenticator-nonce' ) ) {
2677
+ $error = new WP_Error();
2678
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
2679
+
2680
+ return $error;
2681
+ }else{
2682
+ include_once dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'handler'.DIRECTORY_SEPARATOR.'twofa'.DIRECTORY_SEPARATOR.'two_fa_duo_handler.php';
2683
+ $ikey = get_site_option('mo2f_d_integration_key');
2684
+ $skey = get_site_option('mo2f_d_secret_key');
2685
+ $host = get_site_option('mo2f_d_api_hostname');
2686
+
2687
+ $user_email = $user->user_email;
2688
+
2689
+ $duo_preauth = preauth( $user_email ,true, $skey, $ikey, $host);
2690
+
2691
+
2692
+ if($duo_preauth['response']['stat'] == 'OK'){
2693
+
2694
+ if(isset($duo_preauth['response']['response']['status_msg']) && $duo_preauth['response']['response']['status_msg'] == 'Account is active'){
2695
+ update_user_meta( $user->ID , 'user_not_enroll', true );
2696
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "This user is already available on duo, please send push notification to setup push notification as two factor." ) );
2697
+ $this->mo_auth_show_success_message();
2698
+ return;
2699
+ }else if(isset($duo_preauth['response']['response']['enroll_portal_url'])){
2700
+
2701
+ $duo_enroll_url = $duo_preauth['response']['response']['enroll_portal_url'];
2702
+ update_user_meta( $user->ID , 'user_not_enroll_on_duo_before', $duo_enroll_url );
2703
+ update_user_meta( $user->ID , 'user_not_enroll', true );
2704
+ }else{
2705
+
2706
+
2707
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "Your account is inactive from duo side, please contact to your administrator." ) );
2708
+ $this->mo_auth_show_error_message();
2709
+ return;
2710
+ }
2711
+
2712
+ }else{
2713
+
2714
+
2715
+ update_option( 'mo2f_message', Mo2fConstants:: langTranslate( "Invalid or missing parameters, or a user with this name already exists." ) );
2716
+ $this->mo_auth_show_error_message();
2717
+ return;
2718
+
2719
+ }
2720
+ }
2721
+ }else if(isset( $_POST['option'] ) && $_POST['option'] == 'duo_mobile_send_push_notification_inside_plugin'){
2722
 
2723
+ $nonce = $_POST['duo_mobile_send_push_notification_inside_plugin_nonce'];
2724
+
2725
+ if ( ! wp_verify_nonce( $nonce, 'mo2f-send-duo-push-notification-inside-plugin-nonce' ) ) {
2726
+ $error = new WP_Error();
2727
+ $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
2728
+
2729
+ return $error;
2730
+ }else{
2731
+
2732
+ }
2733
+
2734
+ }else if ( ( isset( $_POST['option'] ) && sanitize_text_field($_POST['option']) == 'mo2f_save_free_plan_auth_methods' ) ) {// user clicks on Set 2-Factor method
2735
+ $nonce = sanitize_text_field($_POST['miniorange_save_form_auth_methods_nonce']);
2736
  if ( ! wp_verify_nonce( $nonce, 'miniorange-save-form-auth-methods-nonce' ) ) {
2737
  $error = new WP_Error();
2738
  $error->add( 'empty_username', '<strong>' . mo2f_lt( 'ERROR' ) . '</strong>: ' . mo2f_lt( 'Invalid Request.' ) );
2756
  }
2757
  $selected_2FA_method = MO2f_Utility::mo2f_decode_2_factor( isset( $_POST['mo2f_configured_2FA_method_free_plan'] ) ? $_POST['mo2f_configured_2FA_method_free_plan'] : $_POST['mo2f_selected_action_standard_plan'], "wpdb" );
2758
  $selected_2FA_method = sanitize_text_field($selected_2FA_method);
2759
+ $onprem_methods = array('Google Authenticator','Security Questions','OTPOverTelegram','OTPOverWhatsapp','DuoAuthenticator');
2760
  $Mo2fdbQueries->insert_user( $user->ID );
2761
  if(MO2F_IS_ONPREM && ! in_array($selected_2FA_method, $onprem_methods) ){
2762
  foreach ($cloud_methods as $cloud_method) {
2838
  $selected_2FA_method = 'OTP Over Telegram';
2839
  if($selected_2FA_method == 'OTPOverWhatsapp')
2840
  $selected_2FA_method = 'OTP Over Whatsapp';
2841
+ if($selected_2FA_method == 'DuoAuthenticator')
2842
+ $selected_2FA_method = 'Duo Authenticator';
2843
  }
2844
 
2845
+ 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' or $selected_2FA_method == 'OTP Over Whatsapp' or $selected_2FA_method == 'OTP Over Telegram' or $selected_2FA_method == 'Duo Authenticator' ))
2846
  $is_customer_registered = 1;
2847
 
2848
  if ( $is_customer_registered ) {
2861
  $selected_2FA_method = 'OTP Over Telegram';
2862
  if($selected_2FA_method == 'OTPOverWhatsapp')
2863
  $selected_2FA_method = 'OTP Over Whatsapp';
2864
+ if($selected_2FA_method == 'DuoAuthenticator')
2865
+ $selected_2FA_method = 'Duo Authenticator';
2866
  if ( $selected_action == "select2factor" ) {
2867
 
2868
  if ( $selected_2FA_method == 'OTP Over SMS' && $user_phone == 'false' ) {
3215
  } else if ( $selected_2FA_method == 'Email Verification' ) {
3216
  $this->miniorange_email_verification_call( $user );
3217
  }
3218
+ else if($selected_2FA_method == 'Duo Authenticator'){
3219
+
3220
+ }
3221
 
3222
 
3223
  update_user_meta( $user->ID, 'mo2f_2FA_method_to_test', $selected_2FA_method );
helper/constants.php CHANGED
@@ -11,7 +11,7 @@
11
  const ERR_403 = "403";
12
  const DEFAULT_CUSTOMER_KEY = "16555";
13
  const DEFAULT_API_KEY = "fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq";
14
- const DB_VERSION = 154;
15
  const DB_FEATURE_MAIL = 1;
16
  const SUPPORT_EMAIL = 'info@xecurify.com';
17
  const REAL_TIME_IP_HOST = 'https://firewall.xecurify.com/';
11
  const ERR_403 = "403";
12
  const DEFAULT_CUSTOMER_KEY = "16555";
13
  const DEFAULT_API_KEY = "fFd2XcvTGDemZvbw1bcUesNJWEqKbbUq";
14
+ const DB_VERSION = 155;
15
  const DB_FEATURE_MAIL = 1;
16
  const SUPPORT_EMAIL = 'info@xecurify.com';
17
  const REAL_TIME_IP_HOST = 'https://firewall.xecurify.com/';
includes/css/style_settings.css CHANGED
@@ -346,6 +346,7 @@
346
  {
347
  text-align: center;
348
  margin-top: -1%;
 
349
  }
350
  .mo_upgrade_toggle_2fa
351
  {
@@ -423,7 +424,7 @@
423
  border-radius:2%;
424
  /* height:463px;
425
  overflow: hidden;*/
426
- width:25%;
427
  border:1px solid #ecebeb;
428
  box-sizing:border-box;
429
  text-align:center!important;
@@ -473,6 +474,7 @@
473
  float: left;
474
  border: 2px solid black;
475
  border-top: none;
 
476
  }
477
  .mo_wpns_upgrade_title_2fa_lite
478
  {
@@ -549,7 +551,7 @@
549
  }
550
  .mo_wpns_upgrade_pade_pricing
551
  {
552
- color: #2ca29c;
553
  font-size: 350%;
554
  }
555
  .mo_wpns_upgrade_page_starting_price
@@ -1280,8 +1282,8 @@ h2.mo_wpns_nav-tab-wrapper
1280
  }*/
1281
  .mo_wpns_upgrade_page_button
1282
  {
1283
- border: 2px solid #4c9b97;
1284
- background-color: #4c9b97;
1285
  color: white;
1286
  padding: 12px 0px;
1287
  width: 50.5%;
@@ -1295,8 +1297,8 @@ h2.mo_wpns_nav-tab-wrapper
1295
  {
1296
  /*border: 2px solid #74a9a7;*/
1297
  /*background-color: #74a9a7;*/
1298
- border: 2px solid #80acaa;
1299
- background-color: #80acaa;
1300
  color: white;
1301
  cursor: pointer;
1302
  /*box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);*/
@@ -3492,7 +3494,7 @@ a.mo2f_thumbnail:hover, a.mo2f_thumbnail:focus, a.mo2f_thumbnail.active {
3492
  }
3493
  .mo2f_active_plan
3494
  {
3495
- background-color: #7ccbc7;
3496
  border-radius: 50em;
3497
  }
3498
  .mo_wpns_upgrade_page_2fa_ns_styles
@@ -3655,15 +3657,18 @@ input:checked + .slider:before {
3655
  }
3656
  .mo2f_upgrade_main_div
3657
  {
 
3658
  background: white;
3659
  width: 34.33%;
3660
  min-height: 600px;
3661
  margin: 1.5%;
3662
  float: left;
 
3663
  }
3664
  .mo2f_upgrade_main_div:hover
3665
  {
3666
- box-shadow:0 1px 34px 0px #c0c0c0;
 
3667
  margin-top: 0%;
3668
  transition: 1s;
3669
  }
346
  {
347
  text-align: center;
348
  margin-top: -1%;
349
+ margin-bottom: 2%;
350
  }
351
  .mo_upgrade_toggle_2fa
352
  {
424
  border-radius:2%;
425
  /* height:463px;
426
  overflow: hidden;*/
427
+ width:26%;
428
  border:1px solid #ecebeb;
429
  box-sizing:border-box;
430
  text-align:center!important;
474
  float: left;
475
  border: 2px solid black;
476
  border-top: none;
477
+ margin-bottom: 1em;
478
  }
479
  .mo_wpns_upgrade_title_2fa_lite
480
  {
551
  }
552
  .mo_wpns_upgrade_pade_pricing
553
  {
554
+ color: #2a80ca;
555
  font-size: 350%;
556
  }
557
  .mo_wpns_upgrade_page_starting_price
1282
  }*/
1283
  .mo_wpns_upgrade_page_button
1284
  {
1285
+ border: 2px solid ##2a80ca;
1286
+ background-color: #2a80ca;
1287
  color: white;
1288
  padding: 12px 0px;
1289
  width: 50.5%;
1297
  {
1298
  /*border: 2px solid #74a9a7;*/
1299
  /*background-color: #74a9a7;*/
1300
+ border: 2px solid #8d86f5;
1301
+ background-color: #8d86f5;
1302
  color: white;
1303
  cursor: pointer;
1304
  /*box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);*/
3494
  }
3495
  .mo2f_active_plan
3496
  {
3497
+ background-color: #7c9fcb;
3498
  border-radius: 50em;
3499
  }
3500
  .mo_wpns_upgrade_page_2fa_ns_styles
3657
  }
3658
  .mo2f_upgrade_main_div
3659
  {
3660
+ background: ffffffad;
3661
  background: white;
3662
  width: 34.33%;
3663
  min-height: 600px;
3664
  margin: 1.5%;
3665
  float: left;
3666
+ width: 25%;
3667
  }
3668
  .mo2f_upgrade_main_div:hover
3669
  {
3670
+ background: ffffffad;
3671
+ box-shadow:0 1px 0px 0px #c0c0c0;
3672
  margin-top: 0%;
3673
  transition: 1s;
3674
  }
includes/css/upgrade.css ADDED
@@ -0,0 +1,443 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .mo2fa_pricing_feature_collection_supporter{
2
+ height: 32em;
3
+ }
4
+ .mo2fa_pricing_head_supporter{
5
+ height: 4em;
6
+ padding: 2px 1px 1px 1px;
7
+ margin-bottom: 1em;
8
+ }
9
+ i.fa-check {
10
+ color: black;
11
+ margin-right: 17px;
12
+ margin-top: 0.5em;
13
+ margin-bottom: 0.5em;
14
+ }
15
+ i.fa-times {
16
+ color: #b6abab;
17
+ margin-right: 17px;
18
+ margin-top: 0.5em;
19
+ margin-bottom: 0.5em;
20
+ }
21
+ .fa, .fas {
22
+ font-weight: 900;
23
+ margin-right: 21px;
24
+ margin-top: 1em;
25
+ color: #b6abab;
26
+
27
+ }
28
+ .mo2fa_pricing_feature_collection{
29
+ width: 24em;
30
+ height: 31em;
31
+ margin-top: 13px;
32
+ padding-top: 18px;
33
+ margin-left: 21px;
34
+ margin-right: 28px;
35
+ }
36
+ .mo2fa_limit_pricing_feature_mo_2fa{
37
+ color: #b6abab;
38
+ font-weight: 500;
39
+ }
40
+ .mo2fa_unltimate_feature{
41
+ color: #00000;
42
+ font-weight: 500;
43
+ }
44
+ .mo2fa_sec{
45
+ width: 27em;
46
+ border-radius: 4px;
47
+ box-shadow: 1px 0px 11px 0px #ccc;
48
+ height: 70em;
49
+ border: 1px solid #ccc;
50
+ padding-top: 2em;
51
+ }
52
+ .mo2fa_upgrade_my_plan{
53
+ border: none;
54
+ top: 50%;
55
+ left: 50%;
56
+ color: white;
57
+ padding: 15px 32px;
58
+ width: auto;
59
+ min-width: 70%;
60
+ border-radius: 26px;
61
+ text-align: center;
62
+ text-decoration: none;
63
+ display: inline-block;
64
+ background: #2a80ca;
65
+ font-size: 16px;
66
+ height: auto;
67
+ /*margin: 2px 18px 2px -27px;*/
68
+ margin-top: 24px;
69
+ }
70
+ .mo2fa_upgrade_my_plan:hover{
71
+ border: none;
72
+ background: #8d86f5;
73
+ }
74
+ .mo2fa_plugins{
75
+ width: 12%;
76
+ }
77
+ .mo2fa_pricing_tabs_mo{
78
+ width: auto;
79
+ border-radius: 4px;
80
+ height: 88em;
81
+ border: 1px solid #ccc;
82
+ padding-top: 2em;
83
+ }
84
+ .mo2fa_make_my_plan_mo{
85
+ border: none;
86
+ color: white;
87
+ padding: 15px 32px;
88
+ width: 55%;
89
+ border-radius: 26px;
90
+ text-align: center;
91
+ text-decoration: none;
92
+ display: inline-block;
93
+ background: #2a80ca;
94
+ font-size: 16px;
95
+ height: auto;
96
+ }
97
+ .mo2fa_make_my_plan_mo:hover{
98
+ border: none;
99
+ color: white;
100
+ background: #8d86f5;
101
+ }
102
+ .mo2fa_pricing_head_mo_2fa{
103
+ font-size: 33px;
104
+ font-weight: bold;
105
+ color: black;
106
+ margin-bottom: 3%;
107
+ /*margin-top: 10%;*/
108
+ }
109
+ .mo2fa_method-list-size{
110
+ font-size: 11px;
111
+ margin-bottom: -3px!important;
112
+ list-style: none!important;
113
+ margin-left: 2em;
114
+ font-weight: 450;
115
+ }
116
+
117
+ .mo2fa_method-list-mo-size-cross{
118
+ font-size: 11px;
119
+ color: #b6abab;
120
+ margin-bottom: -3px!important;
121
+ list-style: none!important;
122
+ margin-left: 2em;
123
+ }
124
+
125
+ .mo2fa_price_mo_2fa{
126
+ font-size: 35px;
127
+ font-weight: bold;
128
+ color: black;
129
+
130
+ }
131
+ .mo2fa_purchase_user_limit_mo{
132
+ margin-top: 22px!important;
133
+ margin-bottom: 0px!important;
134
+ color: black;
135
+ }
136
+
137
+ .mo2fa_purchase_otp_limit{
138
+ margin-top: 10px!important;
139
+ margin-bottom: 4px!important;
140
+ color: black;
141
+
142
+ }
143
+ .mo2fa_increase_my_limit{
144
+ width:auto;
145
+ min-width: 85%;
146
+ color: black;
147
+ font-size: 11px;
148
+ background: #c9dbdb75;
149
+ border-radius: 3px;
150
+ min-height: 27px;
151
+ margin-left: -10px;
152
+ margin-right: 3px;
153
+ }
154
+ .mo2fa_feature{
155
+ margin-top: -0.5em;
156
+ margin-bottom: 0.5em;
157
+ font-size:16px;
158
+ }
159
+ .mo2fa_ul{
160
+ font-size: 15px;
161
+ }
162
+ .mo2fa_more_details_p,.mo2fa_more_details_p1{
163
+ font-size: 13px;
164
+ margin-bottom: -10px;
165
+ margin-top: 1em;
166
+ font-weight:bold;
167
+ color:#4545ff;
168
+ text-align: center;
169
+ }
170
+ .mo2fa_class{
171
+ background: aliceblue;
172
+ width: 85%;
173
+ }
174
+ .mo2fa_pricing{
175
+ padding: 16px 55px 12px 41px;
176
+ margin-top: 9em;
177
+ height: 25em;
178
+ }
179
+ .mo2fa_pricing_p{
180
+ font-size: 10px;
181
+ margin-bottom: -21px;
182
+ }
183
+ .mo2fa_dollar{
184
+ font-size: 46px;
185
+ font-weight: 600;
186
+ padding: 5px 5px 5px 5px;
187
+ margin-top: 18px;
188
+ color:black;
189
+ }
190
+ .mo2fa_country{
191
+ margin-top: 2px;
192
+ }
193
+ .mo2fa_payment_p{
194
+ font-size: 110%;
195
+ }
196
+ .mo2fa_card{
197
+ size: landscape;
198
+ width: 100px;
199
+ height: 27px;
200
+ margin-bottom: 4px;
201
+ margin-top: 4px;
202
+ opacity: 1;
203
+ padding-left: 8px;
204
+ }
205
+ .mo2fa_hr{
206
+ border-top: 2px solid #143af4;
207
+ }
208
+ .mo2fa_form_control1{
209
+ border-radius:5px;
210
+ width:70%;
211
+ }
212
+ .mo2fa_starting_from{
213
+ font-size: 10px;
214
+ margin-left: -24px;
215
+ /*margin-top: -17px;*/
216
+ }
217
+ .mo2fa_center{
218
+ text-align: center;
219
+ }
220
+ .mo2fa_pricing_tabs_mo_premium_lite{
221
+ background: ffffffad;
222
+ border: none!important;
223
+ }
224
+ .mo2fa_pricing_tabs_mo_premium{
225
+ height: 84em!important;
226
+ margin-top: -4em;
227
+ background: ffffffad;
228
+ border: none;
229
+ box-shadow: 12px;
230
+ }
231
+ .mo2fa_pricing_tabs_mo_enterprise{
232
+ background: ffffffad;
233
+ border: none!important;
234
+ }
235
+ .mo2f_upgrade_super_div{
236
+ display: flex;
237
+ justify-content: center;
238
+ align-content: center;
239
+ }
240
+ .mo2fa_recommended{
241
+ width: 100%;
242
+ background: #2a80caa6;
243
+ color: white;
244
+ height: 3em;
245
+ /* border-radius: 1px 25px 25px 0px; */
246
+ margin-left: 0px;
247
+ margin-top: -2em;
248
+ font-size: 16px;
249
+ margin-bottom: 2em;
250
+ padding: 10px 1px 1px 1px;
251
+ }
252
+ .mo2fa_purchase_limit_mo{
253
+ font-size: 16px;
254
+ }
255
+ .mo2fa_pricing_head_h5{
256
+ margin :0.67em;
257
+ }
258
+ .mo2fa_h4{
259
+ font-size: 1.5em;
260
+ margin: 0.33em 0;
261
+ font-weight: 400;
262
+ }
263
+ .mo2fa_note_color{
264
+ color: red;
265
+ }
266
+ .mo2fa_note{
267
+ font-size:17px;
268
+ }
269
+ .mo2fa_setting_layout{
270
+ width: 81.5%;
271
+ margin-left: 8%;
272
+ margin-top: 1%;
273
+ box-shadow: 0px 2px 25px 0px #ccc;
274
+ }
275
+ .mo2fa_bank_transfer{
276
+ height: 28px;
277
+ width:auto;
278
+ }
279
+ .category_feature_mo_2fa{
280
+ font-size: 16px;
281
+ font-weight: 600;
282
+ padding-bottom: 0.3em;
283
+ padding-top: 0.3em;
284
+ }
285
+ .mo2fa_main_category_header{
286
+ background: #d5d5d5!important;
287
+ margin-top: 0.3em;
288
+ margin-bottom: 0.3em;
289
+ }
290
+ .bg_category_main_mo_2fa{
291
+ font-size: 17px;
292
+ border :0.5px solid #c1c1c1 ;
293
+ background: #c9dbdb!important
294
+ }
295
+ .description_mo_2fa{
296
+ font-size: 13px!important;
297
+ font-weight: 400;
298
+ }
299
+ table.mo2fa_table_features{
300
+ border: 1px 1px 1px 1px;
301
+ }
302
+ table.mo2fa_table_features th,table.mo2fa_table_features tr{
303
+ text-align: left;
304
+ padding-left: 1em;
305
+ padding-right: 1em;
306
+ height:25px;
307
+ }
308
+ table.mo2fa_table_features,table.mo2fa_table_features th,table.mo2fa_table_features td {
309
+ border-left: 1px solid #c1c1c1;
310
+ border-right: 1px solid #c1c1c1;
311
+ border-collapse: collapse;
312
+ }
313
+ table.mo2fa_table_features tr:nth-child(odd){
314
+ background-color: #f6f6f6;
315
+ }
316
+ table.mo2fa_table_features tr:last-child
317
+ {
318
+ border-bottom: 1px solid #c1c1c1;
319
+ }
320
+ .mo2fa_hide{
321
+ display: none !important
322
+ }
323
+
324
+ .mo2fa_hide1{
325
+ display: none;
326
+ }
327
+ .mo2fa_comparison{
328
+ font-size: 18px;
329
+ width: 20%;
330
+ }
331
+ .mo2fa_compare1{
332
+ min-width: 22%!important;
333
+ width:10%;
334
+ }
335
+ .mo2fa_tooltip_methodlist {
336
+ position: relative;
337
+ display: inline-block;
338
+ }
339
+
340
+ .mo2fa_tooltip_methodlist .methodlist {
341
+ visibility: hidden;
342
+ width: 15em;
343
+ background-color: #000000b8;
344
+ color: #fff;
345
+ text-align: left;
346
+ border-radius: 6px;
347
+ padding: 7px 0px 8px 61px;
348
+ position: absolute;
349
+ z-index: 1;
350
+ top: -141px;
351
+ left: 107%;
352
+ }
353
+
354
+ .mo2fa_tooltip_methodlist .methodlist::after {
355
+ content: "";
356
+ position: absolute;
357
+ top: 50%;
358
+ right: 100%;
359
+ margin-top: -5px;
360
+ border-width: 5px;
361
+ border-style: solid;
362
+ border-color: transparent black transparent transparent;
363
+ }
364
+ .mo2fa_tooltip_methodlist:hover .methodlist {
365
+ visibility: visible;
366
+ }
367
+
368
+ .mo2fa_tooltip_methodlist {
369
+ position: relative;
370
+ display: inline-block;
371
+ }
372
+
373
+ .mo2fa_tooltip_methodlist .methodlist {
374
+ visibility: hidden;
375
+ width: 14em;
376
+ background-color: #000000b8;
377
+ color: #fff;
378
+ text-align: left;
379
+ border-radius: 6px;
380
+ padding: 7px 0px 8px 61px;
381
+ position: absolute;
382
+ z-index: 1;
383
+ top: -11em;
384
+ left: 107%;
385
+ }
386
+
387
+ .mo2fa_tooltip_methodlist .methodlist::after {
388
+ content: "";
389
+ position: absolute;
390
+ top: 50%;
391
+ right: 100%;
392
+ margin-top: -5px;
393
+ border-width: 5px;
394
+ border-style: solid;
395
+ border-color: transparent black transparent transparent;
396
+ }
397
+ .mo2fa_tooltip_methodlist:hover .methodlist {
398
+ visibility: visible;
399
+ }
400
+ .mo2fa_enterprise_getting_started{
401
+ margin-top: -1em;
402
+ }
403
+ .mo2fa_table-scrollbar{
404
+ overflow-y: scroll;
405
+ overflow-x:scroll;
406
+ height: 50%;
407
+ }
408
+ .mo2fa_fa-check{
409
+ color: #fff!important;
410
+ }
411
+ @media only screen and (max-width: 600px) {
412
+ .mo2f_upgrade_super_div{
413
+ display: block;
414
+ }
415
+ .mo2f_upgrade_main_div{
416
+ width: 96%;
417
+ margin-bottom: 6em;
418
+ height: 93em;
419
+ }
420
+ .mo2fa_compare1{
421
+ width: 101%;
422
+ margin-top: -2em;
423
+ }
424
+ .mo2fa_setting_layout{
425
+ margin-left: 4%;
426
+ }
427
+ .mo_2fa_card-deck{
428
+ display: block;
429
+ }
430
+ .mo_2fa_card{
431
+ width: 98%;
432
+ }
433
+ .mo_upgrade_toggle_2fa_lable{
434
+ font-size: 1em;
435
+ width: 12em;
436
+ }
437
+ .mo_wpns_upgrade_security_title{
438
+ width: 97%;
439
+ }
440
+ .mo_ns_features_only{
441
+ display: grid;
442
+ }
443
+ }
includes/images/authmethods/DuoAuthenticator.png ADDED
Binary file
includes/images/bank-transfer.png ADDED
Binary file
miniorange_2_factor_settings.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: https://miniorange.com
5
  * Description: This TFA plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 3 User in the free version of the plugin.
6
- * Version: 5.4.32
7
  * Author: miniOrange
8
  * Author URI: https://miniorange.com
9
  * Text Domain: miniorange-2-factor-authentication
@@ -15,7 +15,7 @@
15
 
16
  define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
17
 
18
- define( 'MO2F_VERSION', '5.4.32' );
19
  define('MO2F_PLUGIN_URL', (plugin_dir_url(__FILE__)));
20
  define( 'MO2F_TEST_MODE', false );
21
  define( 'MO2F_IS_ONPREM', get_option('is_onprem'));
@@ -494,6 +494,7 @@
494
  require('handler/twofa/two_fa_short_custom.php');
495
  require('controllers/wpns-loginsecurity-ajax.php');
496
  require('controllers/malware_scanner/malware_scan_ajax.php');
 
497
  require('controllers/backup/backup_ajax.php');
498
  require('controllers/tour/tour_ajax.php');
499
  require('controllers/twofa/two_factor_ajax.php');
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: https://miniorange.com
5
  * Description: This TFA plugin provides various two-factor authentication methods as an additional layer of security after the default wordpress login. We Support Google/Authy/LastPass Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) for 3 User in the free version of the plugin.
6
+ * Version: 5.4.33
7
  * Author: miniOrange
8
  * Author URI: https://miniorange.com
9
  * Text Domain: miniorange-2-factor-authentication
15
 
16
  define( 'MO_HOST_NAME', 'https://login.xecurify.com' );
17
 
18
+ define( 'MO2F_VERSION', '5.4.33' );
19
  define('MO2F_PLUGIN_URL', (plugin_dir_url(__FILE__)));
20
  define( 'MO2F_TEST_MODE', false );
21
  define( 'MO2F_IS_ONPREM', get_option('is_onprem'));
494
  require('handler/twofa/two_fa_short_custom.php');
495
  require('controllers/wpns-loginsecurity-ajax.php');
496
  require('controllers/malware_scanner/malware_scan_ajax.php');
497
+ require('controllers/duo_authenticator/duo_authenticator_ajax.php');
498
  require('controllers/backup/backup_ajax.php');
499
  require('controllers/tour/tour_ajax.php');
500
  require('controllers/twofa/two_factor_ajax.php');
readme.txt CHANGED
@@ -1,30 +1,35 @@
1
- === Google Authenticator - WordPress Two Factor Authentication (2FA , MFA) ===
2
 
3
- Contributors: cyberlord92, twofactor, hsn97
4
- Tags: google authenticator, two factor authentication, OTP , 2FA, two-factor, 2-factor authentication, two-step verification, two factor, OTP, mobile verification, two factor, Two step verification, TFA, MFA, 2 factor authentication, Multi factor authentication, Remember Device, OTP,WordPress otp, two step authentication,Clef,SMS, email, signup security, two factor auth, Mobile Authentication, strong authentication, 2 step authentication, mobile verification,Multifactor authentication, passwordless login, one time passcode, soft token Authentication, QR Code Authentication, email verification, KBA, Security Questions,2FA, login OTP, login with SMS, mobile login, phone login, OTP login, mobile verification,knowledge based authentication,authy, authy two factor,yubico,Two-Factor Authentication,WordPress otp, security,user security, ​Twilio WordPress, SMS gateway, Solutions Infini, FIDO, FIDO2, FIDO 2, Webauthn, Usernameless login ,Clickatell, BulkSMS, MSG91, Nexmo, SMS Country, message, woocommerce, website security, login security, multi factor authentication, multi factor,wordfence, IP Blocking, IP Whitelisting, login Audits, woocommerce, SMS login, passwordless login, auth, login with OTP WordPress, OTP Over SMS and Email, two-step authentication, Mobile Authentication, passwordless login, login without password, passwordless authentication, secure login, temporary login, temporary access, one time passcode, email verification, security, website security, login security, multi-factor authentication, woocommerce, smartphone, WordPress otp, register with OTP, user OTP verification, SMS OTP, OTP Email, registration with OTP verification, registration verification,smartphone authentication, Login with fingerprint, faceID, touchID
5
  Donate link: https://miniorange.com/
6
  Requires at least: 3.0.1
7
- Tested up to: 5.7
8
  Requires PHP: 5.3.0
9
- Stable tag: 5.4.32
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
- Google Authenticator, Two Factor Authentication (2 Factor), OTP verificaion - SMS and Email, two-step verificaion ,Apps like Microsoft, Duo, LastPass & more on login and Registration for all forms. Google Authenticator also Supports QR Code, Push Notification and Security Questions along with the Google Authenticator itself. Google authenticator plugin can also be used for multi factor authentication.
14
 
15
  == Description ==
16
 
17
- Google Authenticator - Two Factor Authentication (2FA) plugin provides a completely Secure login to your WordPress website. Google Authenticator- Two Factor Authentication (2FA) is a FREE, Simple & very easy to setup plugin. Google Authenticator provides two factor authentication (2FA, MFA) whenever login to your WordPress website ensuring no unauthorised access to your website. Google Authenticator can be configured for any TOTP based Authentication Method for providing addtional layer of security of Two Factor Authentication(multi factor authentication).
18
 
19
- = User Identity Verification or OTP Verification (Two Factor Authentication) =
20
- Login and Registration: Verify users on login and Registration with different authentication methods like Google Authenticator, SMS Verification, Email, Authy Authenticator, Duo Authenticator, Microsoft Authenticator, TOTP Based Authenticator, Security Questions and many others. Easy OTP Verification with SMS Verification and Email Verification. We provide complete two factor authentication security.
21
 
22
- = Google Authenticator and other 2 Factor ( 2FA, Two Factor Authentication ) sync on multiple websites =
23
- You would not need to configure Google Authenticator and other Two Factor Authentication ( 2FA ) methods from second site onword. Just login with miniOrange account and your 2FA will automatically get set. This is available for Google Authenticator, Duo Authenticator, Microsoft Authenticator, Securty Questions, LastPass, Authy, miniOrange methods, OTP over SMS, OTP over Email. It is supported only if you are using our cloud services of 2 Factor.
24
 
25
- == Plugin Integrations and Support for all methods of two factor authentication like Google Authenticator ==
26
- * [Woocommerce](https://wordpress.org/plugins/woocommerce/) (Login Woocommerce using Google Authenticator - Two Factor Authentication (2FA))
27
- * [BuddyPress form](https://wordpress.org/plugins/buddypress/) (Login BuddyPress using Google Authenticator - Two Factor Authentication (2FA))
 
 
 
 
 
 
 
28
  * [bbpress form](https://wordpress.org/plugins/bbpress/) (Login bbpress using Google Authenticator - Two Factor Authentication (2FA))
29
  * [Digimember](https://digimember.com/) (Login Digimember using Google Authenticator - Two Factor Authentication (2FA))
30
  * [Paid Memberships Pro](https://wordpress.org/plugins/paid-memberships-pro/) (Login Paid Memberships Pro using Google Authenticator - Two Factor Authentication (2FA))
@@ -33,12 +38,16 @@ You would not need to configure Google Authenticator and other Two Factor Authen
33
  * [LearnDash](https://www.learndash.com/) (Login LearnDash using Google Authenticator - Two Factor Authentication (2FA))
34
  * [LearnPress](https://wordpress.org/plugins/learnpress/) (Login LearnPress using Google Authenticator - Two Factor Authentication (2FA))
35
  * [LifterLMS](https://wordpress.org/plugins/lifterlms/) (Login LifterLMS using Google Authenticator - Two Factor Authentication (2FA))
36
- * [Dokan](https://wordpress.org/plugins/dokan-lite/) (Login Dokan using Google Authenticator - Two Factor Authentication (2FA))
37
  * And many more
38
 
39
- == WordPress login and registration forms support and integration for all methods of two factor authentication like Google Authenticator ==
40
  * [Restrict Content Pro Form](https://wordpress.org/plugins/restrict-content/) (Register and Login Restrict Content Pro using Google Authenticator - Two Factor Authentication (2FA))
41
  * [My theme Login Form](https://wordpress.org/plugins/theme-my-login/) (Login My theme Login using Google Authenticator - Two Factor Authentication (2FA))
 
 
 
 
42
  * [User Registration – Custom Registration Form](https://wordpress.org/plugins/bbpress/) (Register and Login User Registration – Custom Registration using Google Authenticator - Two Factor Authentication (2FA))
43
  * [Custom Login Page Customizer Form](https://wordpress.org/plugins/loginpress/) (Login Custom Login Page Customizer using Google Authenticator - Two Factor Authentication (2FA))
44
  * [Admin Custom Login Form](https://wordpress.org/plugins/admin-custom-login/) (Login Admin Custom Login using Google Authenticator - Two Factor Authentication (2FA))
@@ -61,9 +70,9 @@ Others not listed gateway can be tested on our site, Test your Gateway: [Custom
61
  Google Authenticator - Two factor authentication( 2 Factor ) is available for all Forms. You can enable OTP Verification on all Registration forms and Google Authenticator, Security Questions, Prevent Account Sharing, Push Notifications on all the Login forms to verify users. Use this shortcode for Registration([mo2f_enable_register]). Settings in <b>Two Factor -> Registration Forms</b>.
62
 
63
 
64
- = FREE Plugin Features =
65
  * Simplified & easy user interface to setup Google Authenticator and other Two Factor Authentication ( 2FA ) methods.
66
- * Google Authenticator - Two Factor Authentication (2FA) for **3 User** forever FREE!
67
  * **Variety of Two Factor Authentication Methods:** Any App supporting TOTP algorithm like Google Authenticator, Authy Authenticator, LastPass Authenticator, Microsoft Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) are supported in the plugin for multi factor authentication.
68
  * Includes Language Translation Support. Supports a wide variety of languages for all methods of 2 factor like Google Authenticator
69
  * Passwordless login or login with phone number, supported for Google Authenticator and other 2 Factor authentication methods.
@@ -75,11 +84,12 @@ Google Authenticator - Two factor authentication( 2 Factor ) is available for al
75
  * OTP Verification of Ulimate Member Registartion form with methods like OTP Over SMS and Email, QR code Authentication.
76
  * Recovery codes in case you are locked out for all Two Factor Authentication (TFA) methods like Google Authenticator, SMS verification.
77
  * Supports multi factor authentication for methods such as Google authenticator, OTP over Email, OTP over SMS, QR code authentication and many more.
 
78
 
79
- = Standard Lite Plugin Features =
80
 
81
- * Google Authenticator - Two Factor Authentication (2FA) for all users and all user roles *( Site-based pricing )*
82
- * **Available Two Factor Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, Security Questions(KBA), OTP Over Email, OTP Over SMS, Email Verification. *( SMS credits need to be purchased as per the need)*
83
  * Includes language Translation Support. Supports wide variety of languages for two factor auhthentication.
84
  * **Multiple Login Options:** Username + password + two-factor (or) Username + two-factor i.e. Passwordless login. [Guide](https://docs.miniorange.com/documentation/login-username-2nd-factor-2)
85
  * **Unlimitted Email transactions:** Unlimitted Email transactions with your SMTP server.
@@ -88,7 +98,7 @@ Google Authenticator - Two factor authentication( 2 Factor ) is available for al
88
  * User role based redirection after Login [Guide](https://docs.miniorange.com/documentation/custom-redirect-login-url), Customize account name in Google Authenticator app [Guide](https://docs.miniorange.com/documentation/google-authenticator-app-name)
89
  * Custom Security Questions (KBA) [Guide](https://docs.miniorange.com/documentation/custom-security-questions)
90
 
91
- = Premium Lite Plugin Features =
92
 
93
  * Google Authenticator - Two Factor Authentication (2FA) for all users and all user roles *( Site-based pricing )*
94
  * **Available Two Factor Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, Security Questions(KBA), OTP Over Email, OTP Over SMS, Email Verification, Mobile Verification. *( SMS credits need to be purchased as per the need)*
@@ -109,7 +119,7 @@ Google Authenticator - Two factor authentication( 2 Factor ) is available for al
109
  * **Add-Ons Included:** RBA & Trusted Devices Management Add-on, Personalization Add-on and Short Codes Add-on
110
 
111
 
112
- = Standard Plugin Features =
113
 
114
  * Google Authenticator - Two Factor Authentication (2FA) for Users as per the upgrade *( User-based pricing )*
115
  * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Over Email, OTP Over SMS, OTP Over SMS and Email, Email Verification. *( SMS credits need to be purchased as per the need)*
@@ -120,7 +130,7 @@ Google Authenticator - Two factor authentication( 2 Factor ) is available for al
120
  * User role based redirection after Login [Guide](https://docs.miniorange.com/documentation/custom-redirect-login-url), Customize account name in Google Authenticator app [Guide](https://docs.miniorange.com/documentation/google-authenticator-app-name)
121
  * Custom Security Questions (KBA) [Guide](https://docs.miniorange.com/documentation/custom-security-questions)
122
 
123
- = Premium Plugin Features =
124
 
125
  * Google Authenticator - Two Factor Authentication (2FA) for Users as per the upgrade *( User-based pricing )*
126
  * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Over Email, OTP Over SMS, OTP Over SMS and Email, Email Verification, Hardware Token, Whatsapp based 2fa(Add-on), Telegram Based 2fa. *( SMS and Email credits need to be purchased as per the need)*
@@ -138,9 +148,9 @@ Google Authenticator - Two factor authentication( 2 Factor ) is available for al
138
  * Remember Device to skip the two factor authentication( 2FA ) for trusted devices [Guide](https://docs.miniorange.com/documentation/remember-my-device)
139
  * **Add-Ons Included:** RBA & Trusted Devices Management Add-on, Personalization Add-on and Short Codes Add-on
140
 
141
- = Enterprise Plugin Features =
142
 
143
- * Google Authenticator - Two Factor Authentication (2FA) for Users as per the upgrade *( User-based pricing )*
144
  * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Over Email, OTP Over SMS, OTP Over SMS and Email, Email Verification, Hardware Token. *( SMS and Email credits need to be purchased as per the need)*
145
  * Language Translation Support for two factor authenticaion.
146
  * **Multiple Login Options:** Username + password + two factor Authentication (or) Username + two factor authentication i.e. Passwordless login.
@@ -158,20 +168,36 @@ Google Authenticator - Two factor authentication( 2 Factor ) is available for al
158
  = PASSWORDLESS LOGIN ( login without password) =
159
  Passwordless login is a new way of login in which you and your users can login without entering the password. The login can be done by username and 2 factor or only username which can be decided based on the user role. If a role is not allowed for passwordless login they will login with password and username. miniOrange supports many two factor authentication methods for passwordless login. You can use google authenticator, webauthn, fingerprint login, otp over sms and email for login without password.
160
 
161
- = WebAuthn (FIDO2) Passwordless login =
162
  WebAuthn is a browser-based API that allows for web applications to simplify and secure user authentication by using registered devices (phones, laptops, etc) as factors. It uses public key cryptography to protect users from advanced phishing attacks. It will allow you to provide your users an option for usernameless login. With the help of webauthn your users can login with fingerprint, FaceID, TouchID, etc.
163
 
164
- = Device restriction with webauthn =
165
  Webauthn allows you to restrict the number of devices per user. You can allow a user any number of devices they can use to login to your website. Webauthn also covers passwordless and usernameless login in which your users can login from the allowed device without password and username.
166
 
 
 
 
167
  == Prevent Account Sharing Between Users ==
168
  Many video sharing and E-learning platforms want to prevent sharing of account between the users. This can be done using miniOrange Two factor plugin (TFA) with WordPress 2FA methods like QR code Authentication , Mobile Verification, etc. Also, e-learning portals can use this to their advantage. It can be used on any websites which create and sell courses. It can be integrated with plugins like Learndash.
169
  Other sites like premium video content or any premium content where you want users not to share passwords between friends and Family then you can go for this solution. Multiple two factor authentication methods are supported to achieve prevent account sharing.
170
 
171
- == Multi factor authentication ( MFA ) ==
172
  You can configure multiple WordPress 2FA methods like google authenticator, OTP over Email, OTP over SMS, etc and choose which method do you want to login to your website from a list of configured methods. Multi factor authentication is helpful for cases such as when you do not have your phone and cannot access your TOTP app for login. You can then use other method like OTP over Email to login.
173
 
174
- = Additional Features other than the two factor authentication ( 2FA ) =
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  * **Complete Web Security suite to protect wordpress from any attacks**
176
  * **Web Application Firewall (WAF) : Wordpress Firewall to protect your site**
177
  * **OWASP TOP 10 Protection**
@@ -196,9 +222,9 @@ You can configure multiple WordPress 2FA methods like google authenticator, OTP
196
 
197
  Check all the features other than two factor authentication here: [miniOrange Website](https://security.miniorange.com/)
198
 
199
- = Why do you need to register? =
200
 
201
- miniOrange Two factor authentication Plugin (TFA) uses miniOrange APIs to communicate between your WP and miniOrange. 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 calls can be only accessed by API keys assigned to you.
202
  Adding to this, you can also use the same account on multiple applications and your users do not have to maintain multiple accounts or WordPress 2FA like Google Authenticator. Single code generated in Google Authenticator will be enough to login to all sites. With this you can also achieve sync of two factor authentication on multiple sites.
203
 
204
 
@@ -224,11 +250,13 @@ Adding to this, you can also use the same account on multiple applications and y
224
  = Apps Supported by the two factor authentication plugin =
225
  * Google Authenticator
226
  * miniOrange Authenticator
227
- * Duo Authenticator
228
  * Microsoft Authenticator
229
  * Authy 2 Factor Authenticator
230
  * LastPass Authenticator
231
  * FreeOTP Authenticator
 
 
232
 
233
  <h4>Useful blog posts about two factor authenticaion ( 2FA ) plugin </h4>
234
  *[Beginner’s Guide: How to Add Two Factor Authentication to WordPress](https://themeisle.com/blog/how-to-add-two-factor-authentication-to-wordpress/)
@@ -399,6 +427,12 @@ miniOrange authentication service has 15+ authentication methods.One time passco
399
 
400
  == Changelog ==
401
 
 
 
 
 
 
 
402
  = 5.4.32=
403
  * Google Authenticator – Two Factor Authentication (2FA, TFA) :
404
  * Replaced sessions with transient.
@@ -1005,6 +1039,16 @@ More descriptive setup messages and UI changes.
1005
 
1006
  == Upgrade Notice ==
1007
 
 
 
 
 
 
 
 
 
 
 
1008
  = 5.4.31=
1009
  * Google Authenticator - Two Factor Authentication (2FA, OTP) :
1010
  * OTP over Email as two factor fix
1
+ === miniOrange's Google Authenticator - WordPress Two Factor Authentication (2FA , MFA, OTP SMS and Email) | Passwordless login ===
2
 
3
+ Contributors: twofactor, cyberlord92, hsn97
4
+ Tags: google authenticator, two factor authentication, 2FA, OTP , two-factor, 2-factor authentication, multi factor authentication ,two-step verification, wp 2fa, two factor, mobile verification, TFA, MFA, 2 factor authentication, Multi factor authentication, Remember Device, WordPress otp, Clef,SMS, email, signup security, two factor auth, Mobile Authentication, strong authentication, 2 step authentication, Multifactor authentication, passwordless login, one time passcode, soft token Authentication, QR Code Authentication, email verification, KBA, Security Questions, login OTP, login with SMS, mobile login, phone login, OTP login, knowledge based authentication, authy, authy two factor , yubico, security, user security, ​Twilio WordPress, SMS gateway, Solutions Infini, FIDO, FIDO2, FIDO 2, Webauthn, Usernameless login ,Clickatell, BulkSMS, MSG91, Nexmo, SMS Country, message, woocommerce, website security, login security, multi factor, wordfence, IP Blocking, IP Whitelisting, login Audits, woocommerce, SMS login, passwordless login, auth, login with OTP WordPress, OTP Over SMS and Email, two-step authentication, login without password, passwordless authentication, secure login, temporary login, temporary access, one time passcode, email verification, security, website security, login security, multi-factor authentication, woocommerce, smartphone, WordPress otp, register with OTP, user OTP verification, SMS OTP, OTP Email, registration with OTP verification, registration verification, smartphone authentication, Login with fingerprint, faceID, touchID, session restriction, device restriction, password free authentication,
5
  Donate link: https://miniorange.com/
6
  Requires at least: 3.0.1
7
+ Tested up to: 5.7.1
8
  Requires PHP: 5.3.0
9
+ Stable tag: 5.4.33
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
+ **Google Authenticator**, Two Factor Authentication (2 Factor)/ Multi factor authentication, Two step verification, OTP verificaion - SMS and Email , mobile verification, Apps like Microsoft, Duo, LastPass & more on login and Registration for all forms. Google Authenticator also Supports QR Code, Push Notification and Security Questions along with the Google Authenticator itself. Google authenticator plugin can also be used for multi factor authentication.
14
 
15
  == Description ==
16
 
17
+ **Google Authenticator** - Two Factor Authentication (2FA) / Multi factor authentication plugin provides a completely Secure login to your WordPress website. Google Authenticator - multi Factor Authentication (2FA) is a FREE, Simple & very easy to setup plugin. Google Authenticator ( 2FA ) provides two factor authentication (2FA, MFA) whenever login to your WordPress website ensuring no unauthorised access to your website. Google Authenticator - multi factor authentication can be configured for any TOTP based Authentication Method for providing addtional layer of security of Two Factor Authentication(multi factor authentication). miniOrange also supports OTP Over SMS and OTP Over Email for login and registration.
18
 
19
+ You can checkout the following video to configure the plugin with your Identity Provider:
 
20
 
21
+ [youtube https://www.youtube.com/watch?v=BS6tY-Goa1Q]
 
22
 
23
+
24
+ = User Identity Verification or **OTP** Verification (Two Factor Authentication) =
25
+ Login and Registration: Verify users on login and Registration with different authentication methods like OTP over SMS, OTP Over Email, Google Authenticator, SMS Verification, Email, Authy Authenticator, Duo Authenticator, Microsoft Authenticator, TOTP Based Authenticator, Security Questions and many others. Easy OTP Verification with SMS Verification and Email Verification. We provide complete two factor authentication security.
26
+
27
+ = **Google Authenticator** and other 2 Factor ( 2FA, Two Factor Authentication ) sync on multiple websites with the same OTP =
28
+ You would not need to configure **Google Authenticator** and other Two Factor Authentication ( 2FA ) methods from second site onword. Just login with miniOrange account and your 2FA will automatically get set. This is available for Google Authenticator, Duo Authenticator, Microsoft Authenticator, Securty Questions, LastPass, Authy, miniOrange methods, OTP over SMS, OTP over Email. It is supported only if you are using our cloud services of 2 Factor.
29
+
30
+ == Plugin Integrations and Support for all methods of two factor authentication ( 2fa ) like **Google Authenticator** ==
31
+ * [Woocommerce](https://wordpress.org/plugins/woocommerce/) (Login Woocommerce using Google Authenticator - Multi Factor Authentication (2FA))
32
+ * [BuddyPress form](https://wordpress.org/plugins/buddypress/) (Login BuddyPress using Google Authenticator - Multi Factor Authentication (2FA))
33
  * [bbpress form](https://wordpress.org/plugins/bbpress/) (Login bbpress using Google Authenticator - Two Factor Authentication (2FA))
34
  * [Digimember](https://digimember.com/) (Login Digimember using Google Authenticator - Two Factor Authentication (2FA))
35
  * [Paid Memberships Pro](https://wordpress.org/plugins/paid-memberships-pro/) (Login Paid Memberships Pro using Google Authenticator - Two Factor Authentication (2FA))
38
  * [LearnDash](https://www.learndash.com/) (Login LearnDash using Google Authenticator - Two Factor Authentication (2FA))
39
  * [LearnPress](https://wordpress.org/plugins/learnpress/) (Login LearnPress using Google Authenticator - Two Factor Authentication (2FA))
40
  * [LifterLMS](https://wordpress.org/plugins/lifterlms/) (Login LifterLMS using Google Authenticator - Two Factor Authentication (2FA))
41
+ * [Dokan](https://wordpress.org/plugins/dokan-lite/) (Login Dokan using Google Authenticator - Multi Factor Authentication (2FA))
42
  * And many more
43
 
44
+ == WordPress login and registration forms support and integration for all methods of two factor authentication ( 2fa ) like **Google Authenticator** ==
45
  * [Restrict Content Pro Form](https://wordpress.org/plugins/restrict-content/) (Register and Login Restrict Content Pro using Google Authenticator - Two Factor Authentication (2FA))
46
  * [My theme Login Form](https://wordpress.org/plugins/theme-my-login/) (Login My theme Login using Google Authenticator - Two Factor Authentication (2FA))
47
+ * [Login with ajax Form](https://wordpress.org/plugins/login-with-ajax/) (2fa (Two factor authentication | Google authenticator ) for Login with ajax login form)
48
+ * [Elementor Login Form](https://wordpress.org/plugins/elementor/) (2fa (Two factor authentication | Google authenticator ) for Elementor login form)
49
+ * [WooCommerce Login Form](https://wordpress.org/plugins/woocommerce/) (2fa (Two factor authentication | Google authenticator ) for WooCommerce login form)
50
+ * [Paid membership Pro Form](https://wordpress.org/plugins/paid-memberships-pro/) (2fa (Two factor authentication | Google authenticator ) compatible with paid membership pro)
51
  * [User Registration – Custom Registration Form](https://wordpress.org/plugins/bbpress/) (Register and Login User Registration – Custom Registration using Google Authenticator - Two Factor Authentication (2FA))
52
  * [Custom Login Page Customizer Form](https://wordpress.org/plugins/loginpress/) (Login Custom Login Page Customizer using Google Authenticator - Two Factor Authentication (2FA))
53
  * [Admin Custom Login Form](https://wordpress.org/plugins/admin-custom-login/) (Login Admin Custom Login using Google Authenticator - Two Factor Authentication (2FA))
70
  Google Authenticator - Two factor authentication( 2 Factor ) is available for all Forms. You can enable OTP Verification on all Registration forms and Google Authenticator, Security Questions, Prevent Account Sharing, Push Notifications on all the Login forms to verify users. Use this shortcode for Registration([mo2f_enable_register]). Settings in <b>Two Factor -> Registration Forms</b>.
71
 
72
 
73
+ = [google authenticator](https://plugins.miniorange.com/2-factor-authentication-for-wordpress) ( 2FA ) FREE Plugin Features =
74
  * Simplified & easy user interface to setup Google Authenticator and other Two Factor Authentication ( 2FA ) methods.
75
+ * [Google Authenticator](https://plugins.miniorange.com/2-factor-authentication-for-wordpress) - Two Factor Authentication (2FA) for **3 User** forever FREE!
76
  * **Variety of Two Factor Authentication Methods:** Any App supporting TOTP algorithm like Google Authenticator, Authy Authenticator, LastPass Authenticator, Microsoft Authenticator, QR Code, Push Notification, Soft Token and Security Questions(KBA) are supported in the plugin for multi factor authentication.
77
  * Includes Language Translation Support. Supports a wide variety of languages for all methods of 2 factor like Google Authenticator
78
  * Passwordless login or login with phone number, supported for Google Authenticator and other 2 Factor authentication methods.
84
  * OTP Verification of Ulimate Member Registartion form with methods like OTP Over SMS and Email, QR code Authentication.
85
  * Recovery codes in case you are locked out for all Two Factor Authentication (TFA) methods like Google Authenticator, SMS verification.
86
  * Supports multi factor authentication for methods such as Google authenticator, OTP over Email, OTP over SMS, QR code authentication and many more.
87
+ * Mobile verification - two step verification using user's mobile phone with authentication method like google authenticator, QR code authentication, etc.
88
 
89
+ = google authenticator ( 2FA ) Standard Lite Plugin Features =
90
 
91
+ * Google Authenticator - Two Factor Authentication ( 2FA ) for all users and all user roles *( Site-based pricing )*
92
+ * **Available Two Factor Authentication Methods:**Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, Security Questions(KBA), OTP Over Email, OTP Over SMS, Email Verification. *( SMS credits need to be purchased as per the need)*
93
  * Includes language Translation Support. Supports wide variety of languages for two factor auhthentication.
94
  * **Multiple Login Options:** Username + password + two-factor (or) Username + two-factor i.e. Passwordless login. [Guide](https://docs.miniorange.com/documentation/login-username-2nd-factor-2)
95
  * **Unlimitted Email transactions:** Unlimitted Email transactions with your SMTP server.
98
  * User role based redirection after Login [Guide](https://docs.miniorange.com/documentation/custom-redirect-login-url), Customize account name in Google Authenticator app [Guide](https://docs.miniorange.com/documentation/google-authenticator-app-name)
99
  * Custom Security Questions (KBA) [Guide](https://docs.miniorange.com/documentation/custom-security-questions)
100
 
101
+ = google authenticator ( 2FA ) Premium Lite Plugin Features =
102
 
103
  * Google Authenticator - Two Factor Authentication (2FA) for all users and all user roles *( Site-based pricing )*
104
  * **Available Two Factor Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, Security Questions(KBA), OTP Over Email, OTP Over SMS, Email Verification, Mobile Verification. *( SMS credits need to be purchased as per the need)*
119
  * **Add-Ons Included:** RBA & Trusted Devices Management Add-on, Personalization Add-on and Short Codes Add-on
120
 
121
 
122
+ = google authenticator ( 2FA ) Standard Plugin Features =
123
 
124
  * Google Authenticator - Two Factor Authentication (2FA) for Users as per the upgrade *( User-based pricing )*
125
  * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Over Email, OTP Over SMS, OTP Over SMS and Email, Email Verification. *( SMS credits need to be purchased as per the need)*
130
  * User role based redirection after Login [Guide](https://docs.miniorange.com/documentation/custom-redirect-login-url), Customize account name in Google Authenticator app [Guide](https://docs.miniorange.com/documentation/google-authenticator-app-name)
131
  * Custom Security Questions (KBA) [Guide](https://docs.miniorange.com/documentation/custom-security-questions)
132
 
133
+ = google authenticator ( 2FA ) Premium Plugin Features =
134
 
135
  * Google Authenticator - Two Factor Authentication (2FA) for Users as per the upgrade *( User-based pricing )*
136
  * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Over Email, OTP Over SMS, OTP Over SMS and Email, Email Verification, Hardware Token, Whatsapp based 2fa(Add-on), Telegram Based 2fa. *( SMS and Email credits need to be purchased as per the need)*
148
  * Remember Device to skip the two factor authentication( 2FA ) for trusted devices [Guide](https://docs.miniorange.com/documentation/remember-my-device)
149
  * **Add-Ons Included:** RBA & Trusted Devices Management Add-on, Personalization Add-on and Short Codes Add-on
150
 
151
+ = google authenticator ( 2FA ) Enterprise Plugin Features =
152
 
153
+ * [Google Authenticator - Two Factor Authentication] (https://plugins.miniorange.com/2-factor-authentication-for-wordpress) - 2FA for Users as per the upgrade *( User-based pricing )*
154
  * **Available Authentication Methods:** Google Authenticator, Authy Authenticator, Microsoft Authenticator, LastPass Authenticator, QR Code, Push Notification, Soft Token, Security Questions(KBA), OTP Over Email, OTP Over SMS, OTP Over SMS and Email, Email Verification, Hardware Token. *( SMS and Email credits need to be purchased as per the need)*
155
  * Language Translation Support for two factor authenticaion.
156
  * **Multiple Login Options:** Username + password + two factor Authentication (or) Username + two factor authentication i.e. Passwordless login.
168
  = PASSWORDLESS LOGIN ( login without password) =
169
  Passwordless login is a new way of login in which you and your users can login without entering the password. The login can be done by username and 2 factor or only username which can be decided based on the user role. If a role is not allowed for passwordless login they will login with password and username. miniOrange supports many two factor authentication methods for passwordless login. You can use google authenticator, webauthn, fingerprint login, otp over sms and email for login without password.
170
 
171
+ = WebAuthn (FIDO2) Passwordless login (Login without password by using FIDO 2 WebAuthn) =
172
  WebAuthn is a browser-based API that allows for web applications to simplify and secure user authentication by using registered devices (phones, laptops, etc) as factors. It uses public key cryptography to protect users from advanced phishing attacks. It will allow you to provide your users an option for usernameless login. With the help of webauthn your users can login with fingerprint, FaceID, TouchID, etc.
173
 
174
+ = Device restriction with webauthn ( FIDO 2 )=
175
  Webauthn allows you to restrict the number of devices per user. You can allow a user any number of devices they can use to login to your website. Webauthn also covers passwordless and usernameless login in which your users can login from the allowed device without password and username.
176
 
177
+ == login without password with webauthn and two step verification ==
178
+ Google authenticato - two step verification along with webauthn allows you to login to your website without using username and password for login. You can login with your device's password or by using any other authentication method like google authenticator, OTP Over SMS, OTP Over Email, etc.
179
+
180
  == Prevent Account Sharing Between Users ==
181
  Many video sharing and E-learning platforms want to prevent sharing of account between the users. This can be done using miniOrange Two factor plugin (TFA) with WordPress 2FA methods like QR code Authentication , Mobile Verification, etc. Also, e-learning portals can use this to their advantage. It can be used on any websites which create and sell courses. It can be integrated with plugins like Learndash.
182
  Other sites like premium video content or any premium content where you want users not to share passwords between friends and Family then you can go for this solution. Multiple two factor authentication methods are supported to achieve prevent account sharing.
183
 
184
+ == ** Multi factor authentication ** ( MFA ) ==
185
  You can configure multiple WordPress 2FA methods like google authenticator, OTP over Email, OTP over SMS, etc and choose which method do you want to login to your website from a list of configured methods. Multi factor authentication is helpful for cases such as when you do not have your phone and cannot access your TOTP app for login. You can then use other method like OTP over Email to login.
186
 
187
+ == ** Two Factor authentication ** ( 2FA ) for specific user and user roles ==
188
+ With google authenticator 2-factor authentication you can enable 2fa for specific user roles and specific users.
189
+
190
+ == Sync 2-factor authentication ( 2FA ) in multiple websites ==
191
+ Google authentication - Two factor authentication can be used for creating same 2-factor authentication code for the same users exists in multiple sites.
192
+
193
+
194
+ == Session Control with Two Factor authentication 2FA ==
195
+ You can control the number of sessions a user can have concurrently in your website.
196
+
197
+ == Customize two factor authentication screen as per your website ==
198
+ You can customize the 2fa screen as per your website's design.
199
+
200
+ = Additional Features other than the two factor authentication ( 2FA ) and multi factor authentication =
201
  * **Complete Web Security suite to protect wordpress from any attacks**
202
  * **Web Application Firewall (WAF) : Wordpress Firewall to protect your site**
203
  * **OWASP TOP 10 Protection**
222
 
223
  Check all the features other than two factor authentication here: [miniOrange Website](https://security.miniorange.com/)
224
 
225
+ = Why do you need to register for google authenticator? =
226
 
227
+ miniOrange's google authentiactor - Two factor authentication Plugin (TFA) uses miniOrange APIs to communicate between your WP and miniOrange. 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 calls can be only accessed by API keys assigned to you.
228
  Adding to this, you can also use the same account on multiple applications and your users do not have to maintain multiple accounts or WordPress 2FA like Google Authenticator. Single code generated in Google Authenticator will be enough to login to all sites. With this you can also achieve sync of two factor authentication on multiple sites.
229
 
230
 
250
  = Apps Supported by the two factor authentication plugin =
251
  * Google Authenticator
252
  * miniOrange Authenticator
253
+ * Duo Authenticator
254
  * Microsoft Authenticator
255
  * Authy 2 Factor Authenticator
256
  * LastPass Authenticator
257
  * FreeOTP Authenticator
258
+ * Duo Authenticator push notification
259
+ * Authy push notification
260
 
261
  <h4>Useful blog posts about two factor authenticaion ( 2FA ) plugin </h4>
262
  *[Beginner’s Guide: How to Add Two Factor Authentication to WordPress](https://themeisle.com/blog/how-to-add-two-factor-authentication-to-wordpress/)
427
 
428
  == Changelog ==
429
 
430
+ = 5.4.33=
431
+ * Google Authenticator – Two Factor Authentication (2FA, TFA) :
432
+ * New pricing page for two factor auhthentication
433
+ * Added Duo Authenticator push notification method.
434
+ * Woocommerce redirect issue fix.
435
+
436
  = 5.4.32=
437
  * Google Authenticator – Two Factor Authentication (2FA, TFA) :
438
  * Replaced sessions with transient.
1039
 
1040
  == Upgrade Notice ==
1041
 
1042
+ = 5.4.33=
1043
+ * Google Authenticator – Two Factor Authentication (2FA, TFA) :
1044
+ * New pricing page for two factor auhthentication
1045
+ * Added Duo Authenticator push notification method.
1046
+ * Woocommerce redirect issue fix.
1047
+
1048
+ = 5.4.32=
1049
+ * Google Authenticator – Two Factor Authentication (2FA, TFA) :
1050
+ * Replaced sessions with transient.
1051
+
1052
  = 5.4.31=
1053
  * Google Authenticator - Two Factor Authentication (2FA, OTP) :
1054
  * OTP over Email as two factor fix
views/twofa/setup/setup_duo_authenticator.php ADDED
@@ -0,0 +1,408 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ function mo2f_configure_duo_authenticator( $user ) {
4
+ global $Mo2fdbQueries;
5
+ $mo2f_user_phone = $Mo2fdbQueries->get_user_detail( 'mo2f_user_phone', $user->ID );
6
+ $user_phone = $mo2f_user_phone ? $mo2f_user_phone : get_option( 'user_phone_temp' );
7
+
8
+ ?>
9
+
10
+ <?php if(isset($_POST['option']) && $_POST['option'] == 'duo_mobile_send_push_notification_inside_plugin'){
11
+ mo2f_setup_duo_authenticator(); //4
12
+ }else if(get_user_meta($user->ID,'user_not_enroll')){
13
+ mo2f_inside_plugin_go_for_user_enroll_on_duo($user);// 3 //initialize_duo_mobile_registration($user);
14
+ }else if(get_site_option('duo_credentials_save_successfully') ) {
15
+ mo2f_download_instruction_for_duo_mobile_app(); //2
16
+ }else{
17
+ mo2f_save_duo_configuration_credentials(); //1
18
+ ?>
19
+
20
+ <?php
21
+ }
22
+
23
+ }
24
+
25
+ function mo2f_setup_duo_authenticator(){
26
+
27
+ ?>
28
+ <h3><?php echo mo2f_lt( 'Test Duo Authenticator' ); ?></h3>
29
+ <hr>
30
+ <div>
31
+ <br>
32
+ <br>
33
+ <center>
34
+ <h3><?php echo mo2f_lt( 'Duo push notification is sent to your mobile phone.' ); ?>
35
+ <br>
36
+ <?php echo mo2f_lt( 'We are waiting for your approval...' ); ?></h3>
37
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif', dirname(dirname(dirname(__FILE__))) ); ?>"/>
38
+ </center>
39
+
40
+ <input type="button" name="back" id="go_back" class="mo_wpns_button mo_wpns_button1"
41
+ value="<?php echo mo2f_lt( 'Back' ); ?>"
42
+ style="margin-top:100px;margin-left:10px;"/>
43
+ </div>
44
+
45
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
46
+ <input type="hidden" name="option" value="mo2f_go_back"/>
47
+ <input type="hidden" name="mo2f_go_back_nonce"
48
+ value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
49
+ </form>
50
+ <form name="f" method="post" id="duo_mobile_register_form" action="">
51
+ <input type="hidden" name="option" value="mo2f_configure_duo_authenticator_validate_nonce"/>
52
+ <input type="hidden" name="mo2f_configure_duo_authenticator_validate_nonce"
53
+ value="<?php echo wp_create_nonce( "mo2f-configure-duo-authenticator-validate-nonce" ) ?>"/>
54
+ </form>
55
+ <form name="f" method="post" id="mo2f_duo_authenticator_error_form" action="">
56
+ <input type="hidden" name="option" value="mo2f_duo_authenticator_error"/>
57
+
58
+ <input type="hidden" name="mo2f_duo_authentcator_error_nonce"
59
+ value="<?php echo wp_create_nonce( "mo2f-duo-authenticator-error-nonce" ) ?>"/>
60
+ </form>
61
+
62
+ <script>
63
+ jQuery('#go_back').click(function () {
64
+ jQuery('#mo2f_go_back_form').submit();
65
+ });
66
+
67
+ var timeout;
68
+
69
+
70
+
71
+ pollMobileValidation();
72
+ function pollMobileValidation() {
73
+ var nonce = "<?php echo wp_create_nonce( 'miniorange-2-factor-duo-nonce' ); ?>";
74
+ var data={
75
+ 'action':'mo2f_duo_authenticator_ajax',
76
+ 'call_type':'check_duo_push_auth_status',
77
+ 'nonce': nonce,
78
+
79
+ };
80
+
81
+ jQuery.post(ajaxurl, data, function(response){
82
+
83
+ if (response == 'SUCCESS') {
84
+ jQuery('#duo_mobile_register_form').submit();
85
+ } else if (response == 'ERROR' || response == 'FAILED' || response == 'DENIED') {
86
+ jQuery('#mo2f_duo_authenticator_error_form').submit();
87
+ } else {
88
+ timeout = setTimeout(pollMobileValidation, 3000);
89
+ }
90
+
91
+ });
92
+
93
+ }
94
+
95
+ </script>
96
+ <?php
97
+ }
98
+
99
+ function mo2f_inside_plugin_go_for_user_enroll_on_duo($user){
100
+ $regis = get_user_meta($user->ID,'user_not_enroll_on_duo_before');
101
+ $regis = isset($regis[0]) ? $regis[0]:'https://plugins.miniorange.com/2-factor-authentication-for-wordpress';
102
+ ?>
103
+ <div style = " background-color: #d9eff6;">
104
+ <p style = "font-size: 17px;">
105
+ <?php echo mo2f_lt( 'Register push notification as Two Factor Authentication using the below link.');?>
106
+ <?php echo mo2f_lt( 'After registration if you have not received authenticate requestyet, please click on ');?><b><?php echo mo2f_lt( 'Send Me Push Notification.');?></b>
107
+ </p>
108
+ </div>
109
+ <br>
110
+ <p style = " font-size: 17px;"><b>Step : 1 </b></p>
111
+ <div style = " background-color: #d9eff6;" >
112
+ <p style = " font-size: 17px;">
113
+ <b> <a href="<?php echo $regis ;?>" target="_blank">Click Here</a></b> <?php echo mo2f_lt( 'to configure DUO Push Notification. Once done with registration click on ');?><b><?php echo mo2f_lt( 'Send Me Push Notification Button.');?></b>
114
+ </p>
115
+ </div>
116
+ <br>
117
+ <form name="f" method="post" id="duo_mobile_send_push_notification_inside_plugin" action="" >
118
+ <input type="hidden" name="option" value="duo_mobile_send_push_notification_inside_plugin" />
119
+ <input type="hidden" name="duo_mobile_send_push_notification_inside_plugin_nonce"
120
+ value="<?php echo wp_create_nonce( "mo2f-send-duo-push-notification-inside-plugin-nonce" ) ?>"/>
121
+ <p style = " font-size: 17px;"><b>Step : 2 </b></p>
122
+ <input type="submit" name="validate" id="validate" class="mo_wpns_button mo_wpns_button1"
123
+ value="<?php echo mo2f_lt( 'Send Me Push Notification' ); ?>"/>
124
+ <br><br><br>
125
+ <input type="button" name="back" id="go_back_form" class="mo_wpns_button mo_wpns_button1" value="<?php echo mo2f_lt('Back');?>" />
126
+ </form>
127
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
128
+ <input type="hidden" name="option" value="mo2f_go_back" />
129
+ <input type="hidden" name="mo2f_go_back_nonce" value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
130
+ </form>
131
+ <script>
132
+ jQuery('#go_back_form').click(function() {
133
+ jQuery('#mo2f_go_back_form').submit();
134
+ });
135
+ jQuery("#mo2f_configurePhone").empty();
136
+ jQuery("#mo2f_app_div").hide();
137
+ </script>
138
+
139
+ <?php
140
+ }
141
+
142
+
143
+ function go_for_user_enroll_on_duo($user,$session_id){
144
+ $regis = get_user_meta($user->ID,'user_not_enroll_on_duo_before');
145
+ $regis = isset($regis[0]) ? $regis[0]:'https://plugins.miniorange.com/2-factor-authentication-for-wordpress';
146
+ ?>
147
+ <div style = " background-color: #d9eff6;">
148
+ <p style = "font-size: 17px;">
149
+ <?php echo mo2f_lt( 'Register push notification as Two Factor Authentication using the below link.');?>
150
+ <?php echo mo2f_lt( 'After registration if you have not received authenticate requestyet, please click on ');?><b><?php echo mo2f_lt( 'Send Me Push Notification.');?></b>
151
+ </p>
152
+ </div>
153
+ <br>
154
+ <p style = " font-size: 17px;"><b>Step : A </b></p>
155
+ <div style = " background-color: #d9eff6;" >
156
+ <p style = " font-size: 17px;">
157
+ <a href="<?php echo $regis;?>" target="_blank">Click Here</a> <?php echo mo2f_lt( 'to configure DUO Push Notification. Once done with registration click on ');?><b><?php echo mo2f_lt( 'Send Me Push Notification.');?></b>
158
+ </p>
159
+ </div>
160
+
161
+ <form name="f" method="post" id="duo_mobile_send_push_notification_for_inline_form" action="" >
162
+ <input type="hidden" name="option" value="duo_mobile_send_push_notification_for_inline_form" />
163
+ <input type="hidden" name="session_id" value="<?php echo $session_id ?>" />
164
+ <input type="hidden" name="duo_mobile_send_push_notification_inline_form_nonce"
165
+ value="<?php echo wp_create_nonce( "mo2f-send-duo-push-notification-inline-nonce" ) ?>"/>
166
+ <p style = " font-size: 17px;"><b>Step : B </b></p>
167
+ <input type="submit" name="validate" id="validate" class="mo_wpns_button mo_wpns_button1"
168
+ value="<?php echo mo2f_lt( 'Send Me Push Notification' ); ?>"/>
169
+ <br><br><br>
170
+ <input type="button" name="back" id="go_back_form" class="mo_wpns_button mo_wpns_button1" value="<?php echo mo2f_lt('Back');?>" />
171
+ </form>
172
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
173
+ <input type="hidden" name="option" value="mo2f_go_back" />
174
+ <input type="hidden" name="mo2f_go_back_nonce" value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
175
+ </form>
176
+ <script>
177
+ jQuery('#go_back_form').click(function() {
178
+ jQuery('#mo2f_go_back_form').submit();
179
+ });
180
+ jQuery("#mo2f_configurePhone").empty();
181
+ jQuery("#mo2f_app_div").hide();
182
+ </script>
183
+
184
+ <?php
185
+ }
186
+
187
+ function mo2f_download_instruction_for_duo_mobile_app(){
188
+
189
+ ?>
190
+
191
+ <form name="f" method="post" id="duo_mobile_register_form" action="">
192
+ <input type="hidden" name="option" value="mo2f_configure_duo_authenticator_abc"/>
193
+ <input type="hidden" name="mo2f_configure_duo_authenticator_nonce"
194
+ value="<?php echo wp_create_nonce( "mo2f-configure-duo-authenticator-nonce" ) ?>"/>
195
+ <a class="mo_app_link" data-toggle="collapse" href="#mo2f_sub_header_app" aria-expanded="false">
196
+ <h3 class="mo2f_authn_header"><?php echo mo2f_lt('Step-1 : Download the Duo');?> <span style="color: #F78701;"> <?php echo mo2f_lt('Authenticator');?></span> <?php echo mo2f_lt('App');?>
197
+ </h3>
198
+ </a>
199
+ <hr class="mo_hr">
200
+ <div class="mo2f_collapse in" id="mo2f_sub_header_app">
201
+ <table width="100%;" id="mo2f_inline_table">
202
+ <tr id="mo2f_inline_table">
203
+ <td style="padding:10px;">
204
+ <h4 id="user_phone_id"><?php echo mo2f_lt('iPhone Users');?></h4>
205
+ <hr>
206
+ <ol>
207
+ <li>
208
+ <?php echo mo2f_lt( 'Go to App Store');?>
209
+ </li>
210
+ <li>
211
+ <?php echo mo2f_lt( 'Search for');?> <b><?php echo mo2f_lt('Duo Authenticator');?></b>
212
+ </li>
213
+ <li>
214
+ <?php echo mo2f_lt( 'Download and install ');?><span style="color: #F78701;"><?php echo mo2f_lt('Duo');?><b> <?php echo mo2f_lt('Authenticator');?></b></span>
215
+ <?php echo mo2f_lt( 'app ');?>(<b><?php echo mo2f_lt('NOT Duo');?></b>)
216
+ </li>
217
+ </ol>
218
+ <br>
219
+ <a style="margin-left:10%" target="_blank" href="https://apps.apple.com/app/id1482362759"><img src="<?php echo plugins_url( 'includes/images/appstore.png' , dirname(dirname(dirname(__FILE__))) );?>" style="width:120px; height:45px; margin-left:6px;">
220
+ </a>
221
+ </td>
222
+ <td style="padding:10px;">
223
+ <h4 id="user_phone_id"><?php echo mo2f_lt('Android Users');?></h4>
224
+ <hr>
225
+ <ol>
226
+ <li>
227
+ <?php echo mo2f_lt( 'Go to Google Play Store.');?>
228
+ </li>
229
+ <li>
230
+ <?php echo mo2f_lt( 'Search for ');?><b><?php echo mo2f_lt('Duo Authenticator.');?></b>
231
+ </li>
232
+ <li>
233
+ <?php echo mo2f_lt( 'Download and install');?> <span style="color: #F78701;"><b><?php echo mo2f_lt('Authenticator');?></b></span>
234
+ <?php echo mo2f_lt( 'app');?> (<b><?php echo mo2f_lt('NOT Duo');?> </b>)
235
+ </li>
236
+ </ol>
237
+ <br>
238
+ <a style="margin-left:10%" target="_blank" href="https://play.google.com/store/apps/details?id=com.miniorange.android.authenticator&hl=en"><img src="<?php echo plugins_url( 'includes/images/playStore.png' , dirname(dirname(dirname(__FILE__))) );?>" style="width:120px; height:=45px; margin-left:6px;"></a>
239
+ </td>
240
+ </tr>
241
+ </table>
242
+
243
+ <input type="button" name="back" id="mo2f_inline_back_btn" class="mo_wpns_button mo_wpns_button1" value="<?php echo __('Back', 'miniorange-2-factor-authentication'); ?>" />
244
+
245
+ <input type="submit" name="submit" id="mo2f_plugin_configure_btn" class="mo_wpns_button mo_wpns_button1" value="<?php echo __('Configure your phone', 'miniorange-2-factor-authentication'); ?>" />
246
+ </div>
247
+ </form>
248
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
249
+ <input type="hidden" name="option" value="mo2f_go_back" />
250
+ <input type="hidden" name="mo2f_go_back_nonce" value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
251
+ </form>
252
+ <script>
253
+ jQuery('#mo2f_inline_back_btn').click(function() {
254
+ jQuery('#mo2f_go_back_form').submit();
255
+ });
256
+
257
+
258
+ </script>
259
+
260
+
261
+
262
+ <?php
263
+ }
264
+
265
+ function mo2f_inline_download_instruction_for_duo_mobile_app($mobile_registration_status = false){
266
+
267
+ ?>
268
+ <div id="mo2f_app_div" class="mo_margin_left">
269
+ <a class="mo_app_link" data-toggle="collapse" href="#mo2f_sub_header_app" aria-expanded="false">
270
+ <h3 class="mo2f_authn_header"><?php echo mo2f_lt('Step-1 : Download the Duo');?> <span style="color: #F78701;"> <?php echo mo2f_lt('Authenticator');?></span> <?php echo mo2f_lt('App');?>
271
+ </h3>
272
+ </a>
273
+ <hr class="mo_hr">
274
+ <div class="mo2f_collapse in" id="mo2f_sub_header_app">
275
+ <table width="100%;" id="mo2f_inline_table">
276
+ <tr id="mo2f_inline_table">
277
+ <td style="padding:10px;">
278
+ <h4 id="user_phone_id"><?php echo mo2f_lt('iPhone Users');?></h4>
279
+ <hr>
280
+ <ol>
281
+ <li>
282
+ <?php echo mo2f_lt( 'Go to App Store');?>
283
+ </li>
284
+ <li>
285
+ <?php echo mo2f_lt( 'Search for');?> <b><?php echo mo2f_lt('Duo Authenticator');?></b>
286
+ </li>
287
+ <li>
288
+ <?php echo mo2f_lt( 'Download and install ');?><span style="color: #F78701;"><?php echo mo2f_lt('Duo');?><b> <?php echo mo2f_lt('Authenticator');?></b></span>
289
+ <?php echo mo2f_lt( 'app ');?>(<b><?php echo mo2f_lt('NOT Duo');?></b>)
290
+ </li>
291
+ </ol>
292
+ <br>
293
+ <a style="margin-left:10%" target="_blank" href="https://apps.apple.com/app/id1482362759"><img src="<?php echo plugins_url( 'includes/images/appstore.png' , dirname(dirname(dirname(__FILE__))) );?>" style="width:120px; height:45px; margin-left:6px;">
294
+ </a>
295
+ </td>
296
+ <td style="padding:10px;">
297
+ <h4 id="user_phone_id"><?php echo mo2f_lt('Android Users');?></h4>
298
+ <hr>
299
+ <ol>
300
+ <li>
301
+ <?php echo mo2f_lt( 'Go to Google Play Store.');?>
302
+ </li>
303
+ <li>
304
+ <?php echo mo2f_lt( 'Search for ');?><b><?php echo mo2f_lt('Duo Authenticator.');?></b>
305
+ </li>
306
+ <li>
307
+ <?php echo mo2f_lt( 'Download and install');?> <span style="color: #F78701;"><b><?php echo mo2f_lt('Authenticator');?></b></span>
308
+ <?php echo mo2f_lt( 'app');?> (<b><?php echo mo2f_lt('NOT Duo');?> </b>)
309
+ </li>
310
+ </ol>
311
+ <br>
312
+ <a style="margin-left:10%" target="_blank" href="https://play.google.com/store/apps/details?id=com.miniorange.android.authenticator&hl=en"><img src="<?php echo plugins_url( 'includes/images/playStore.png' , dirname(dirname(dirname(__FILE__))) );?>" style="width:120px; height:=45px; margin-left:6px;"></a>
313
+ </td>
314
+ </tr>
315
+ </table>
316
+ </div>
317
+ </div>
318
+ <?php
319
+ if( $mobile_registration_status) { ?>
320
+ <script>
321
+ jQuery("#mo2f_app_div").hide();
322
+ </script>
323
+ <?php } else{ ?>
324
+
325
+ <script>
326
+ jQuery("#mo2f_app_div").show();
327
+ </script>
328
+ <?php } ?>
329
+
330
+ <?php
331
+ }
332
+
333
+ function mo2f_save_duo_configuration_credentials(){
334
+
335
+ ?>
336
+ <h3><?php echo mo2f_lt( 'Please enter required details' ); ?>
337
+ </h3>
338
+ <p style = "font-size: 17px;">
339
+ <?php echo mo2f_lt( '1. If you do not have an account in duo, please'); ?> <a href="https://signup.duo.com/" target="_blank">Click Here </a><?php echo mo2f_lt( 'to create an account.'); ?>
340
+
341
+ </p>
342
+ <p style = "font-size: 17px;">
343
+ <?php echo mo2f_lt( '2. Follow these steps( ') ?> <a href=" https://duo.com/docs/authapi#first-steps" target="_blank">Click Here </a> <?php echo mo2f_lt( ') to create AUTH API application on duo side. After creating auth API, you will get the all credentials which you need to enter below.'); ?>
344
+
345
+ </p>
346
+ <br>
347
+ <div>
348
+ <form name="f" method="post" action="" id="mo2f_save_duo_configration">
349
+ <input type="hidden" name="option" value="mo2f_configure_duo_authenticator"/>
350
+ <input type="hidden" name="mo2f_configure_duo_authenticator_nonce"
351
+ value="<?php echo wp_create_nonce( "mo2f-configure-duo-authenticator" ) ?>"/>
352
+
353
+ <p><?php echo mo2f_lt( 'Integration key' ); ?>
354
+ &nbsp &nbsp <input class="mo2f_table_textbox" style="width:400px;" autofocus="true" type="text" name="ikey"
355
+ placeholder="<?php echo mo2f_lt( 'Integration key' ); ?>" style="width:95%;"/>
356
+
357
+ </p>
358
+ <br><br>
359
+ <p><?php echo mo2f_lt( 'Secret Key' ); ?>
360
+ &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp<input class="mo2f_table_textbox" style="width:400px;" autofocus="true" type="text" name="skey"
361
+ placeholder="<?php echo mo2f_lt( 'Secret key' ); ?>" style="width:95%;"/>
362
+
363
+ </p>
364
+ <br><br>
365
+ <p><?php echo mo2f_lt( 'API Hostname' ); ?>
366
+ &nbsp &nbsp <input class="mo2f_table_textbox" style="width:400px;" autofocus="true" type="text" name="apihostname"
367
+ placeholder="<?php echo mo2f_lt( 'API Hostname' ); ?>" style="width:95%;"/>
368
+
369
+ </p>
370
+ <br><br>
371
+ <input type="button" name="back" id="go_back" class="mo_wpns_button mo_wpns_button1"
372
+ value="<?php echo mo2f_lt( 'Back' ); ?>"/>
373
+ <input type="submit" name="validate" id="validate" class="mo_wpns_button mo_wpns_button1"
374
+ value="<?php echo mo2f_lt( 'Save' ); ?>"/>
375
+ </form><br>
376
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
377
+ <input type="hidden" name="option" value="mo2f_go_back"/>
378
+ <input type="hidden" name="mo2f_go_back_nonce"
379
+ value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
380
+ </form>
381
+ <script>
382
+ jQuery('#go_back').click(function() {
383
+ jQuery('#mo2f_go_back_form').submit();
384
+ });
385
+ </script>
386
+
387
+
388
+
389
+
390
+ </div>
391
+
392
+ <script>
393
+ jQuery("#phone").intlTelInput();
394
+ jQuery('#go_back').click(function () {
395
+ jQuery('#mo2f_go_back_form').submit();
396
+ });
397
+ jQuery('a[href=\"#resendsmslink\"]').click(function (e) {
398
+ jQuery('#mo2f_verifyphone_form').submit();
399
+ });
400
+
401
+ </script>
402
+
403
+ <?php
404
+
405
+
406
+ }
407
+
408
+ ?>
views/twofa/setup_twofa.php CHANGED
@@ -72,7 +72,8 @@
72
  "Google Authenticator",
73
  "Authy Authenticator",
74
  "OTP Over Telegram",
75
- "OTP Over Whatsapp"
 
76
 
77
  );
78
 
@@ -85,7 +86,8 @@
85
  "miniOrange QR Code Authentication",
86
  "miniOrange Push Notification",
87
  "OTP Over Telegram",
88
- "OTP Over Whatsapp"
 
89
  );
90
 
91
  $standard_plan_existing_user = array(
@@ -119,7 +121,8 @@
119
  "miniOrange Soft Token",
120
  "miniOrange Push Notification",
121
  "OTP Over Telegram",
122
- "OTP Over Whatsapp"
 
123
 
124
  );
125
 
@@ -132,7 +135,8 @@
132
  "miniOrange Soft Token",
133
  "miniOrange Push Notification",
134
  "OTP Over Telegram",
135
- "OTP Over Whatsapp"
 
136
 
137
  );
138
  $premium_plan = array(
72
  "Google Authenticator",
73
  "Authy Authenticator",
74
  "OTP Over Telegram",
75
+ "OTP Over Whatsapp",
76
+ "Duo Authenticator"
77
 
78
  );
79
 
86
  "miniOrange QR Code Authentication",
87
  "miniOrange Push Notification",
88
  "OTP Over Telegram",
89
+ "OTP Over Whatsapp",
90
+ "Duo Authenticator"
91
  );
92
 
93
  $standard_plan_existing_user = array(
121
  "miniOrange Soft Token",
122
  "miniOrange Push Notification",
123
  "OTP Over Telegram",
124
+ "OTP Over Whatsapp",
125
+ "Duo Authenticator"
126
 
127
  );
128
 
135
  "miniOrange Soft Token",
136
  "miniOrange Push Notification",
137
  "OTP Over Telegram",
138
+ "OTP Over Whatsapp",
139
+ "Duo Authenticator"
140
 
141
  );
142
  $premium_plan = array(
views/twofa/test/test_twofa_duo_authenticator.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php function mo2f_test_duo_authenticator($current_user) { ?>
2
+
3
+ <h3><?php echo mo2f_lt( 'Test Duo Authenticator' ); ?></h3>
4
+ <hr>
5
+ <div>
6
+ <br>
7
+ <br>
8
+ <center>
9
+ <h3><?php echo mo2f_lt( 'Duo push notification is sent to your mobile phone.' ); ?>
10
+ <br>
11
+ <?php echo mo2f_lt( 'We are waiting for your approval...' ); ?></h3>
12
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif', dirname(dirname(dirname(__FILE__))) ); ?>"/>
13
+ </center>
14
+
15
+ <input type="button" name="back" id="go_back" class="mo_wpns_button mo_wpns_button1"
16
+ value="<?php echo mo2f_lt( 'Back' ); ?>"
17
+ style="margin-top:100px;margin-left:10px;"/>
18
+ </div>
19
+
20
+ <form name="f" method="post" action="" id="mo2f_go_back_form">
21
+ <input type="hidden" name="option" value="mo2f_go_back"/>
22
+ <input type="hidden" name="mo2f_go_back_nonce"
23
+ value="<?php echo wp_create_nonce( "mo2f-go-back-nonce" ) ?>"/>
24
+ </form>
25
+ <form name="f" method="post" id="mo2f_duo_authenticator_success_form" action="">
26
+ <input type="hidden" name="option" value="mo2f_duo_authenticator_success_form"/>
27
+ <input type="hidden" name="mo2f_duo_authenticator_success_nonce"
28
+ value="<?php echo wp_create_nonce( "mo2f-duo-authenticator-success-nonce" ) ?>"/>
29
+ </form>
30
+ <form name="f" method="post" id="mo2f_duo_authenticator_error_form" action="">
31
+ <input type="hidden" name="option" value="mo2f_duo_authenticator_error"/>
32
+
33
+ <input type="hidden" name="mo2f_duo_authentcator_error_nonce"
34
+ value="<?php echo wp_create_nonce( "mo2f-duo-authenticator-error-nonce" ) ?>"/>
35
+ </form>
36
+
37
+ <script>
38
+ jQuery('#go_back').click(function () {
39
+ jQuery('#mo2f_go_back_form').submit();
40
+ });
41
+
42
+ var timeout;
43
+
44
+
45
+
46
+ pollMobileValidation();
47
+ function pollMobileValidation() {
48
+ var nonce = "<?php echo wp_create_nonce( 'miniorange-2-factor-duo-nonce' ); ?>";
49
+ var data={
50
+ 'action':'mo2f_duo_authenticator_ajax',
51
+ 'call_type':'check_duo_push_auth_status',
52
+ 'nonce' : nonce,
53
+
54
+ };
55
+
56
+ jQuery.post(ajaxurl, data, function(response){
57
+
58
+ if (response == 'SUCCESS') {
59
+ jQuery('#mo2f_duo_authenticator_success_form').submit();
60
+ } else if (response == 'ERROR' || response == 'FAILED' || response == 'DENIED') {
61
+ jQuery('#mo2f_duo_authenticator_error_form').submit();
62
+ } else {
63
+ timeout = setTimeout(pollMobileValidation, 3000);
64
+ }
65
+
66
+ });
67
+
68
+ }
69
+
70
+ </script>
71
+
72
+ <?php }
73
+
74
+ ?>
views/upgrade.php CHANGED
@@ -1,8 +1,7 @@
1
  <?php
2
- global $Mo2fdbQueries;
3
  $user = wp_get_current_user();
4
  $is_NC = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
5
- $network_security_enabled = get_option('mo_wpns_2fa_with_network_security');
6
  $is_customer_registered = $Mo2fdbQueries->get_user_detail( 'user_registration_with_miniorange', $user->ID ) == 'SUCCESS' ? true : false;
7
 
8
  $mo2f_2fa_method_list = array(
@@ -41,7 +40,7 @@
41
  $mo2f_2fa_method_description_set = array(
42
  "Enter the soft token from the account in your Google Authenticator App to login.",
43
  "Answer the three security questions you had set, to login.",
44
- "Enter the soft token from the account in your Authy Authenticator / Microsoft Authenticator / TOTP Authenticator App to login.",
45
  "Accept the verification link sent to your email to login.",
46
  "You will receive a one time passcode via Email.",
47
  "You will receive a One Time Passcode via SMS on your Phone",
@@ -106,7 +105,7 @@
106
  "According to user's role the particular user will be redirected to specific location",
107
  "Have your own gateway? You can use it, no need to purchase SMS then",
108
  "For access wordpress on different moblie apps, app specific passwords can be set",
109
- "This protects your site from attacks which tries to gain access / login to a site with random usernames and passwords.",
110
  "Allows you to manually/automatically block any IP address that seems malicious from accessing your website. ",
111
  "Monitor activity of your users. For ex:- login activity, error report",
112
  "Enforce users to set a strong password.",
@@ -171,669 +170,520 @@ echo '
171
  ?>
172
  <br><br>
173
 
174
-
 
 
 
175
  <div class="mo_upgrade_toggle">
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
- <p class="mo_upgrade_toggle_2fa">
178
 
179
- <input type="radio" name="sitetype" value="regular_plans" id="regular_plans" onclick="mo_2fa_cloud_show_plans();" style="display: none;" >
180
- <label for="regular_plans" id="mo_2fa_cloud_licensing_plans_title" class="mo_upgrade_toggle_2fa_lable" style="display: none;">Unlimited Sites</label>
181
- <label for="regular_plans" id="mo_2fa_cloud_licensing_plans_title1" class="mo_upgrade_toggle_2fa_lable mo2f_active_plan">Unlimited Sites</label>
182
 
183
- <input type="radio" name="sitetype" value="Recharge" id="mo2f_onpremise_plan" onclick="mo_2fa_onpremise_show_plans();" style="display: none;">
 
 
 
 
 
184
 
185
- <label for="mo2f_onpremise_plan" class="mo_upgrade_toggle_2fa_lable" id="mo_2fa_lite_licensing_plans_title">Unlimited Users</label>
186
- <label for="mo2f_onpremise_plan" class="mo_upgrade_toggle_2fa_lable mo2f_active_plan" id="mo_2fa_lite_licensing_plans_title1" style="display: none;">Unlimited Users</label>
 
 
 
187
 
188
- <?php if( get_option("mo_wpns_2fa_with_network_security"))
189
- {
190
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
 
192
- <input type="radio" name="sitetype" value="Recharge" id="Recharge" onclick="mo_ns_show_plans();" style="display: none;">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
 
194
- <label for="Recharge" class="mo_upgrade_toggle_2fa_lable" id="mo_ns_licensing_plans_title">Website Security</label>
195
- <label for="Recharge" class="mo_upgrade_toggle_2fa_lable mo2f_active_plan" id="mo_ns_licensing_plans_title1" style="display: none;">Website Security</label>
196
- <?php
197
- }
198
- ?>
199
- <span class="cd-switch"></span>
200
-
201
- </p>
202
- </div>
203
- <br><br>
204
 
 
 
 
 
205
 
 
206
 
 
207
 
 
208
 
 
 
 
 
 
209
 
 
210
 
 
211
 
212
 
 
 
213
 
214
 
215
- <div style="margin-left: 19%;" id="mo2f_unlimited_sites">
 
216
 
217
- <div class="mo2f_upgrade_main_div">
 
 
 
 
 
 
 
 
218
 
219
- <div class="mo2f_upgrade_plan_name">
220
- <h1 class="mo2f_upgrade_plan_name_title">Premium</h1>
221
- </div>
222
- <div class="mo2f_upgrade_center_align">
223
- <p style="margin-bottom: -16px;">Starting at</p>
224
- <h1 class="mo2f_upgrade_plan_amount">$30<span class="mo2f_upgrade_yearly">/year</span></h1>
225
- </div>
226
- <hr class="mo2f_upgrade_hr">
227
- <div class="mo2f_upgrade_site_details" style="margin-left: 24%;">
228
- <div class="mo2f_upgrade_site_details_left">
229
- <span class="dashicons dashicons-thumbs-up mo2f_upgrade_thumb_icon"></span>
230
- </div>
231
- <div class="mo2f_upgrade_site_details_right">
232
- <p class="mo2f_upgrade_site_details_name">complete <b>2FA</b></p>
233
-
234
- </div>
235
- </div>
236
- <hr class="mo2f_upgrade_hr">
237
- <div style="text-align: center;margin-top: 7%;margin-bottom: 7%;">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
 
239
- <?php
240
- if( isset($is_customer_registered) && $is_customer_registered) {
241
- ?>
242
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_upgradeform('wp_2fa_premium_plan','2fa_plan')" >Upgrade</button>
243
- <?php
244
- }else{ ?>
245
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_register_and_upgradeform('wp_2fa_premium_plan','2fa_plan')" >Upgrade</button>
246
- <?php }
247
- ?>
248
-
249
-
250
- </div>
251
-
252
- <p style="margin-top: 20px;text-align: center;">
253
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>Force Two Factor </b>for users</span><br>
254
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details">Enable 2FA for <b>specific User Roles</b></span><br>
255
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>Additional </b>2FA methods</span>
256
- </p>
257
- <br>
258
- <hr class="mo2f_upgrade_hr">
259
- <?php echo mo2f_yearly_premium_pricing_plan(); ?>
260
-
261
- <hr class="mo2f_upgrade_hr">
262
- <br>
263
- <h3 style="text-align: center;">Authentication Methods</h3>
264
- <?php
265
- for ( $i = 0; $i < 13; $i ++ )
266
- {
267
- $feature_set = $mo2f_2fa_method_list[ $i ];
268
-
269
- $f_feature_set_with_plan = $mo2f_2fa_method_list_with_plans[ $feature_set ];
270
- ?>
271
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
272
- <?php
273
- if ( gettype( $f_feature_set_with_plan[0] ) == "boolean")
274
- {
275
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[0] );
276
- }
277
- echo $feature_set;
278
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_method_description_set[$i]);
279
-
280
- ?>
281
- </div>
282
- <br>
283
- <?php
284
- }
285
- ?>
286
- <h3 style="text-align: center;">Other Features</h3>
287
- <?php
288
- for ( $i = 0; $i < 15; $i ++ )
289
- {
290
- $feature_set = $mo2f_feature_set[ $i ];
291
-
292
- $f_feature_set_with_plan = $mo2f_feature_set_with_plans[ $feature_set ];
293
- ?>
294
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
295
- <?php
296
-
297
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[0] );
298
- echo $feature_set;
299
- if ($feature_set == "Force Two Factor") {
300
- echo " for all users";
301
- echo mo2f_feature_on_hover_2fa_upgrade("Enforce administrators to setup 2nd factor during registration");
302
-
303
- }
304
- else
305
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_feature_description_set[$i]);
306
-
307
- ?>
308
- </div>
309
- <br>
310
- <?php
311
- }
312
- ?>
313
-
314
- <h3 style="text-align: center;">Custom SMS Gateway
315
- <a style="text-decoration:none;" href="https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig" target="_blank">Test Now</a>
316
- </h3>
317
-
318
- <?php
319
- for ( $i = 0; $i < 6; $i ++ )
320
- {
321
- $feature_set = $mo2f_custom_sms_gateways[ $i ];
322
-
323
- $f_feature_set_with_plan = $mo2f_custom_sms_gateways_feature_set[ $feature_set ];
324
- ?>
325
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
326
- <?php
327
-
328
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[0] );
329
- echo $feature_set;
330
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_custom_sms_gateways_description_set[$i]);
331
-
332
- ?>
333
- </div>
334
- <br>
335
- <?php
336
- }
337
-
338
- ?>
339
- <h3 style="text-align: center;">Addons</h3>
340
-
341
- <?php
342
- for ( $i = 0; $i < 3; $i ++ )
343
- {
344
- $feature_set = $mo2f_addons_set[ $i ];
345
-
346
- $f_feature_set_with_plan = $mo2f_addons[ $feature_set ];
347
- ?>
348
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
349
- <?php
350
-
351
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[0] );
352
- echo $feature_set;
353
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_addons_description_set[$i]);
354
-
355
- ?>
356
- </div>
357
- <br>
358
- <?php
359
- }
360
-
361
- ?>
362
- </div>
363
-
364
- <div class="mo2f_upgrade_main_div" style="box-shadow: 0 1px 34px 0px #c0c0c0;min-height: 633px;">
365
- <div class="mo2f_upgrade_plan_name box">
366
- <h1 class="mo2f_upgrade_plan_name_title">Enterprise</h1>
367
- <div>
368
- <div class="ribbon ribbon-top-right"><span>Popular</span></div>
369
- </div>
370
- </div>
371
-
372
- <div class="mo2f_upgrade_center_align">
373
- <p style="margin-bottom: -16px;">Starting at</p>
374
- <h1 class="mo2f_upgrade_plan_amount">$59<span class="mo2f_upgrade_yearly">/year</span></h1>
375
- </div>
376
- <hr class="mo2f_upgrade_hr">
377
- <div class="mo2f_upgrade_site_details" style="margin-left: 11%;">
378
- <div class="mo2f_upgrade_site_details_left">
379
- <span class="dashicons dashicons-thumbs-up mo2f_upgrade_thumb_icon"></span>
380
- </div>
381
- <div class="mo2f_upgrade_site_details_right">
382
- <p class="mo2f_upgrade_site_details_name">Complete<b> Login Security</b></p>
383
- </div>
384
- </div>
385
-
386
- <hr class="mo2f_upgrade_hr">
387
- <div style="text-align: center;margin-top: 7%;margin-bottom: 7%;">
388
-
389
- <?php
390
- if( isset($is_customer_registered) && $is_customer_registered) {
391
- ?>
392
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_upgradeform('wp_2fa_enterprise_plan','2fa_plan')" >Upgrade</button>
393
- <?php
394
- }else{ ?>
395
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_register_and_upgradeform('wp_2fa_enterprise_plan','2fa_plan')" >Upgrade</button>
396
- <?php }
397
- ?>
398
-
399
-
400
- </div>
401
-
402
-
403
- <p style="margin-top: 20px;text-align: center;">
404
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>All</b> Premium Features</span><br>
405
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>Force Two Factor </b>for <b>Users</b></span><br>
406
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details">Basic <b>Security </b>Features</span>
407
- </p>
408
- <br>
409
- <hr class="mo2f_upgrade_hr">
410
- <?php echo mo2f_yearly_all_inclusive_pricing_plan(); ?>
411
-
412
- <hr class="mo2f_upgrade_hr">
413
- <br>
414
- <h3 style="text-align: center;">Authentication Methods</h3>
415
- <?php
416
- for ( $i = 0; $i < 13; $i ++ )
417
- {
418
- $feature_set = $mo2f_2fa_method_list[ $i ];
419
-
420
- $f_feature_set_with_plan = $mo2f_2fa_method_list_with_plans[ $feature_set ];
421
- ?>
422
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
423
- <?php
424
- if ( gettype( $f_feature_set_with_plan[1] ) == "boolean" && ($feature_set != "Other Features" )&& ($feature_set != "Custom SMS Gateway" ))
425
- {
426
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[1] );
427
- }
428
- echo $feature_set;
429
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_method_description_set[$i]);
430
-
431
- ?>
432
- </div>
433
- <br>
434
- <?php
435
- }
436
- ?>
437
-
438
- <h3 style="text-align: center;">Other Features</h3>
439
- <?php
440
- for ( $i = 0; $i < 15; $i ++ )
441
- {
442
- $feature_set = $mo2f_feature_set[ $i ];
443
-
444
- $f_feature_set_with_plan = $mo2f_feature_set_with_plans[ $feature_set ];
445
- ?>
446
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
447
- <?php
448
-
449
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[1] );
450
- echo $feature_set;
451
- if ($feature_set == "Force Two Factor") {
452
- echo " for all users";
453
- echo mo2f_feature_on_hover_2fa_upgrade("Enforce users to setup 2nd factor during registration");
454
-
455
- }
456
- else
457
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_feature_description_set[$i]);
458
-
459
- ?>
460
- </div>
461
- <br>
462
- <?php
463
- }
464
-
465
- ?>
466
-
467
- <h3 style="text-align: center;">Custom SMS Gateway
468
- <a style="text-decoration:none;" href="https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig" target="_blank">Test Now</a>
469
- </h3>
470
-
471
- <?php
472
- for ( $i = 0; $i < 6; $i ++ )
473
- {
474
- $feature_set = $mo2f_custom_sms_gateways[ $i ];
475
-
476
- $f_feature_set_with_plan = $mo2f_custom_sms_gateways_feature_set[ $feature_set ];
477
- ?>
478
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
479
- <?php
480
-
481
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[0] );
482
- echo $feature_set;
483
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_custom_sms_gateways_description_set[$i]);
484
-
485
- ?>
486
- </div>
487
- <br>
488
- <?php
489
- }
490
- ?>
491
- <h3 style="text-align: center;">Addons</h3>
492
-
493
- <?php
494
- for ( $i = 0; $i < 3; $i ++ )
495
- {
496
- $feature_set = $mo2f_addons_set[ $i ];
497
-
498
- $f_feature_set_with_plan = $mo2f_addons[ $feature_set ];
499
- ?>
500
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
501
- <?php
502
-
503
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[1] );
504
- echo $feature_set;
505
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_addons_description_set[$i]);
506
-
507
- ?>
508
- </div>
509
- <br>
510
- <?php
511
- }
512
-
513
- ?>
514
- </div>
515
-
516
-
517
-
518
-
519
- </div>
520
-
521
-
522
-
523
-
524
-
525
-
526
- <div style="margin-left: 19%; display: none;" id="mo2f_unlimited_users">
527
- <div class="mo2f_upgrade_main_div">
528
-
529
- <div class="mo2f_upgrade_plan_name">
530
- <h1 class="mo2f_upgrade_plan_name_title">Standard Lite</h1>
531
- </div>
532
- <div class="mo2f_upgrade_center_align">
533
- <p style="margin-bottom: -16px;">Starting at</p>
534
- <h1 class="mo2f_upgrade_plan_amount">$49<span class="mo2f_upgrade_yearly">/year</span></h1>
535
- </div>
536
- <hr class="mo2f_upgrade_hr">
537
- <div class="mo2f_upgrade_site_details" style="margin-left: 11%;">
538
- <div class="mo2f_upgrade_site_details_left">
539
- <span class="dashicons dashicons-thumbs-up mo2f_upgrade_thumb_icon"></span>
540
- </div>
541
- <div class="mo2f_upgrade_site_details_right">
542
- <p class="mo2f_upgrade_site_details_name"><b>basic</b> two-factor security</p>
543
-
544
- </div>
545
- </div>
546
- <hr class="mo2f_upgrade_hr">
547
- <div style="text-align: center;margin-top: 7%;margin-bottom: 7%;">
548
-
549
- <?php
550
- if( isset($is_customer_registered) && $is_customer_registered) {
551
- ?>
552
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_upgradeform('wp_security_two_factor_standard_lite_plan','2fa_plan')" >Upgrade</button>
553
- <?php
554
- }else{ ?>
555
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_register_and_upgradeform('wp_security_two_factor_standard_lite_plan','2fa_plan')" >Upgrade</button>
556
- <?php }
557
- ?>
558
-
559
-
560
- </div>
561
-
562
- <p style="margin-top: 20px;text-align: center;">
563
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>Force Two Factor </b>for admins</span><br>
564
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details">Enable 2FA for <b>specific User Roles</b></span><br>
565
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>Additional </b>2FA methods</span>
566
- </p>
567
- <br>
568
- <hr class="mo2f_upgrade_hr">
569
- <?php echo mo2f_sms_cost(); ?>
570
-
571
- <hr class="mo2f_upgrade_hr">
572
- <br>
573
- <h3 style="text-align: center;">Authentication Methods</h3>
574
- <?php
575
- for ( $i = 0; $i < 13; $i ++ )
576
- {
577
- $feature_set = $mo2f_2fa_method_list[ $i ];
578
-
579
- $f_feature_set_with_plan = $mo2f_2fa_method_list_with_plans[ $feature_set ];
580
- ?>
581
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
582
- <?php
583
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[2] );
584
- echo $feature_set;
585
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_method_description_set[$i]);
586
-
587
- ?>
588
- </div>
589
- <br>
590
- <?php
591
- }
592
- ?>
593
- <h3 style="text-align: center;">Other Features</h3>
594
- <?php
595
- for ( $i = 0; $i < 15; $i ++ )
596
- {
597
- $feature_set = $mo2f_feature_set[ $i ];
598
-
599
- $f_feature_set_with_plan = $mo2f_feature_set_with_plans[ $feature_set ];
600
- ?>
601
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
602
- <?php
603
-
604
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[2] );
605
- echo $feature_set;
606
- if ($feature_set == "Force Two Factor") {
607
- echo " for Administrators";
608
- echo mo2f_feature_on_hover_2fa_upgrade("Enforce administrators to setup 2nd factor during registration");
609
-
610
- }
611
- else
612
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_feature_description_set[$i]);
613
-
614
- ?>
615
- </div>
616
- <br>
617
- <?php
618
- }
619
- ?>
620
-
621
- <h3 style="text-align: center;">Custom SMS Gateway
622
- <a style="text-decoration:none;" href="https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig" target="_blank">Test Now</a>
623
- </h3>
624
-
625
- <?php
626
- for ( $i = 0; $i < 6; $i ++ )
627
- {
628
- $feature_set = $mo2f_custom_sms_gateways[ $i ];
629
-
630
- $f_feature_set_with_plan = $mo2f_custom_sms_gateways_feature_set[ $feature_set ];
631
- ?>
632
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
633
- <?php
634
-
635
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[2] );
636
- echo $feature_set;
637
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_custom_sms_gateways_description_set[$i]);
638
-
639
- ?>
640
- </div>
641
- <br>
642
- <?php
643
- }
644
-
645
- ?>
646
- <h3 style="text-align: center;">Addons</h3>
647
-
648
- <?php
649
- for ( $i = 0; $i < 3; $i ++ )
650
- {
651
- $feature_set = $mo2f_addons_set[ $i ];
652
-
653
- $f_feature_set_with_plan = $mo2f_addons[ $feature_set ];
654
- ?>
655
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
656
- <?php
657
-
658
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[2] );
659
- echo $feature_set;
660
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_addons_description_set[$i]);
661
-
662
- ?>
663
- </div>
664
- <br>
665
- <?php
666
- }
667
-
668
- ?>
669
- </div>
670
-
671
-
672
- <div class="mo2f_upgrade_main_div" style="box-shadow: 0 1px 34px 0px #c0c0c0;min-height: 633px;">
673
- <div class="mo2f_upgrade_plan_name box">
674
- <h1 class="mo2f_upgrade_plan_name_title">Premium Lite</h1>
675
- <div>
676
- <div class="ribbon ribbon-top-right"><span>Popular</span></div>
677
- </div>
678
- </div>
679
-
680
- <div class="mo2f_upgrade_center_align">
681
- <p style="margin-bottom: -16px;">Starting at</p>
682
- <h1 class="mo2f_upgrade_plan_amount">$99<span class="mo2f_upgrade_yearly">/year</span></h1>
683
- </div>
684
- <hr class="mo2f_upgrade_hr">
685
- <div class="mo2f_upgrade_site_details" style="margin-left: 6%;">
686
- <div class="mo2f_upgrade_site_details_left">
687
- <span class="dashicons dashicons-thumbs-up mo2f_upgrade_thumb_icon"></span>
688
- </div>
689
- <div class="mo2f_upgrade_site_details_right">
690
- <p class="mo2f_upgrade_site_details_name"><b>Complete</b> two-factor security</p>
691
- </div>
692
- </div>
693
-
694
- <hr class="mo2f_upgrade_hr">
695
- <div style="text-align: center;margin-top: 7%;margin-bottom: 7%;">
696
-
697
- <?php
698
- if( isset($is_customer_registered) && $is_customer_registered) {
699
- ?>
700
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" >Upgrade</button>
701
- <?php
702
- }else{ ?>
703
- <button class=" mo_wpns_upgrade_page_button mo2f_upgrade_button_style" onclick="mo2f_register_and_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" >Upgrade</button>
704
- <?php }
705
- ?>
706
-
707
-
708
- </div>
709
-
710
-
711
- <p style="margin-top: 20px;text-align: center;">
712
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>All</b> Standard Features</span><br>
713
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details"><b>Force Two Factor </b>for <b>Users</b></span><br>
714
- <span class=" dashicons dashicons-saved mo2f_upgrade_tick_icon"></span><span class="mo2f_upgrade_feature_details">Basic <b>Security </b>Features</span>
715
- </p>
716
-
717
- <br>
718
- <hr class="mo2f_upgrade_hr">
719
- <?php echo mo2f_sms_cost(); ?>
720
-
721
- <hr class="mo2f_upgrade_hr">
722
- <br>
723
- <h3 style="text-align: center;">Authentication Methods</h3>
724
- <?php
725
- for ( $i = 0; $i < 13; $i ++ )
726
- {
727
- $feature_set = $mo2f_2fa_method_list[ $i ];
728
-
729
- $f_feature_set_with_plan = $mo2f_2fa_method_list_with_plans[ $feature_set ];
730
- ?>
731
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
732
- <?php
733
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[3] );
734
- echo $feature_set;
735
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_method_description_set[$i]);
736
-
737
- ?>
738
- </div>
739
- <br>
740
- <?php
741
- }
742
- ?>
743
- <h3 style="text-align: center;">Other Features</h3>
744
- <?php
745
- for ( $i = 0; $i < 15; $i ++ )
746
- {
747
- $feature_set = $mo2f_feature_set[ $i ];
748
-
749
- $f_feature_set_with_plan = $mo2f_feature_set_with_plans[ $feature_set ];
750
- ?>
751
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
752
- <?php
753
-
754
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[3] );
755
- echo $feature_set;
756
- if ($feature_set == "Force Two Factor") {
757
- echo " for all users";
758
- echo mo2f_feature_on_hover_2fa_upgrade("Enforce users to setup 2nd factor during registration");
759
-
760
- }
761
- else
762
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_2fa_feature_description_set[$i]);
763
-
764
- ?>
765
- </div>
766
- <br>
767
- <?php
768
- }
769
- ?>
770
-
771
- <h3 style="text-align: center;">Custom SMS Gateway
772
- <a style="text-decoration:none;" href="https://login.xecurify.com/moas/login?redirectUrl=https://login.xecurify.com/moas/admin/customer/smsconfig" target="_blank">Test Now</a>
773
- </h3>
774
-
775
- <?php
776
- for ( $i = 0; $i < 6; $i ++ )
777
- {
778
- $feature_set = $mo2f_custom_sms_gateways[ $i ];
779
-
780
- $f_feature_set_with_plan = $mo2f_custom_sms_gateways_feature_set[ $feature_set ];
781
- ?>
782
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
783
- <?php
784
-
785
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[3] );
786
- echo $feature_set;
787
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_custom_sms_gateways_description_set[$i]);
788
-
789
- ?>
790
- </div>
791
- <br>
792
- <?php
793
- }
794
-
795
- ?>
796
- <h3 style="text-align: center;">Addons</h3>
797
-
798
- <?php
799
- for ( $i = 0; $i < 3; $i ++ )
800
- {
801
- $feature_set = $mo2f_addons_set[ $i ];
802
-
803
- $f_feature_set_with_plan = $mo2f_addons[ $feature_set ];
804
- ?>
805
- <div style="margin-bottom: -3%;margin-left: 2%;margin-right: 2%;">
806
- <?php
807
-
808
- echo mo2f_get_binary_equivalent_2fa_lite( $f_feature_set_with_plan[3] );
809
- echo $feature_set;
810
- echo mo2f_feature_on_hover_2fa_upgrade($mo2f_addons_description_set[$i]);
811
-
812
- ?>
813
- </div>
814
- <br>
815
- <?php
816
- }
817
 
818
- ?>
 
 
 
 
 
 
 
 
819
 
820
- </div>
821
 
 
822
 
823
-
824
- </div>
 
 
825
 
 
826
 
 
 
 
827
 
 
 
 
 
 
828
 
 
829
 
 
 
 
 
 
830
 
 
 
831
 
 
832
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
833
 
834
- <div id="mo_ns_features_only" style="display: none;">
 
 
 
835
 
836
- <div class="mo_wpns_upgrade_security_title" >
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
837
  <div class="mo_wpns_upgrade_page_title_name">
838
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
839
  WAF</h1><hr class="mo_wpns_upgrade_page_hr"></div>
@@ -852,18 +702,18 @@ echo '
852
  <?php
853
  if(isset($is_customer_registered) && $is_customer_registered) {
854
  ?>
855
- <button
856
- class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
857
- onclick="mo2f_upgradeform('wp_security_waf_plan','2fa_plan')" >Upgrade</button>
858
- <?php }
859
-
860
-
861
- else{ ?>
862
- <button
863
- class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
864
- onclick="mo2f_register_and_upgradeform('wp_security_waf_plan','2fa_plan')" >Upgrade</button>
865
- <?php }
866
- ?>
867
  </div>
868
  <div><center><b>
869
  <ul>
@@ -878,7 +728,7 @@ echo '
878
  </div>
879
  </div>
880
  <div class="mo_wpns_upgrade_page_space_in_div"></div>
881
- <div class="mo_wpns_upgrade_security_title" >
882
  <div class="mo_wpns_upgrade_page_title_name">
883
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
884
  Login and Spam</h1><hr class="mo_wpns_upgrade_page_hr"></div>
@@ -895,15 +745,15 @@ echo '
895
 
896
  <div style="text-align: center;">
897
  <?php if( isset($is_customer_registered)&& $is_customer_registered ) {
898
- ?>
899
- <button class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
900
- onclick="mo2f_upgradeform('wp_security_login_and_spam_plan','2fa_plan')" >Upgrade</button>
901
- <?php }else{ ?>
902
-
903
- <button class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
904
- onclick="mo2f_register_and_upgradeform('wp_security_login_and_spam_plan','2fa_plan')" >Upgrade</button>
905
- <?php }
906
- ?>
907
  </div>
908
  <div><center><b>
909
  <ul>
@@ -920,7 +770,7 @@ echo '
920
 
921
  </div>
922
  <div class="mo_wpns_upgrade_page_space_in_div"></div>
923
- <div class="mo_wpns_upgrade_security_title" >
924
  <div class="mo_wpns_upgrade_page_title_name">
925
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
926
  Malware Scanner</h1><hr class="mo_wpns_upgrade_page_hr"></div>
@@ -936,17 +786,17 @@ echo '
936
  </center>
937
  <div style="text-align: center;">
938
  <?php if( isset($is_customer_registered) && $is_customer_registered) {
939
- ?>
940
- <button
941
- class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
942
- onclick="mo2f_upgradeform('wp_security_malware_plan','2fa_plan')" >Upgrade</button>
943
- <?php }else{ ?>
944
-
945
- <button
946
- class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
947
- onclick="mo2f_register_and_upgradeform('wp_security_malware_plan','2fa_plan')" >Upgrade</button>
948
- <?php }
949
- ?>
950
  </div>
951
  <div><center><b>
952
  <ul>
@@ -961,7 +811,7 @@ echo '
961
  </div>
962
  </div>
963
  <div class="mo_wpns_upgrade_page_space_in_div"></div>
964
- <div class="mo_wpns_upgrade_security_title" >
965
  <div class="mo_wpns_upgrade_page_title_name">
966
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
967
  Encrypted Backup</h1><hr class="mo_wpns_upgrade_page_hr"></div>
@@ -978,16 +828,16 @@ echo '
978
  </center>
979
  <div style="text-align: center;">
980
  <?php if( isset($is_customer_registered) && $is_customer_registered) {
981
- ?>
982
- <button
983
- class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
984
- onclick="mo2f_upgradeform('wp_security_backup_plan','2fa_plan')" >Upgrade</button>
985
- <?php }else{ ?>
986
- <button
987
- class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
988
- onclick="mo2f_register_and_upgradeform('wp_security_backup_plan' ,'2fa_plan')" >Upgrade</button>
989
- <?php }
990
- ?>
991
 
992
  </div>
993
  <div><center><b>
@@ -1002,189 +852,509 @@ echo '
1002
  </b></center></div>
1003
  </div></div>
1004
  </div>
1005
-
1006
- <div class="mo_wpns_setting_layout" style="width: 93.5%;margin-left: 0%;">
1007
- <div>
1008
- <h2>Steps to upgrade to the Premium Plan</h2>
1009
- <ol class="mo2f_licensing_plans_ol">
1010
- <li><?php echo mo2f_lt( 'Click on \'Upgrade\' button of your preferred plan above.' ); ?></li>
1011
- <li><?php echo mo2f_lt( ' You will be redirected to the miniOrange Console. Enter your miniOrange username and password, after which you will be redirected to the payment page.' ); ?></li>
1012
-
1013
- <li><?php echo mo2f_lt( 'Select the number of users you wish to upgrade for, and any add-ons if you wish to purchase, and make the payment.' ); ?></li>
1014
- <li><?php echo mo2f_lt( 'After making the payment, you can find the Standard/Premium plugin to download from the \'License\' tab in the left navigation bar of the miniOrange Console.' ); ?></li>
1015
- <li><?php echo mo2f_lt( 'Download the premium plugin from the miniOrange Console.' ); ?></li>
1016
- <li><?php echo mo2f_lt( 'In the Wordpress dashboard, uninstall the free plugin and install the premium plugin downloaded.' ); ?></li>
1017
- <li><?php echo mo2f_lt( 'Login to the premium plugin with the miniOrange account you used to make the payment, after this your users will be able to set up 2FA.' ); ?></li>
1018
- </ol>
1019
- </div>
1020
-
1021
-
1022
- <br>
1023
- <hr>
1024
- <h2>Multisite</h2>
1025
- <p><?php echo mo2f_lt( 'For your first license 3 subsites will be activated automatically on the same domain. And if you wish to use it for more please contact support ' ); ?></p>
1026
- <hr>
1027
- <br>
1028
- <h2>SMS Charges</h2>
1029
- <p><?php echo mo2f_lt( 'If you wish to choose OTP Over SMS / OTP Over SMS and Email as your authentication method,
1030
- SMS transaction prices & SMS delivery charges apply and they depend on country. SMS validity is for lifetime.' ); ?></p>
1031
- <hr>
1032
- <br>
1033
- <div>
1034
- <h2>Note</h2>
1035
- <ol class="mo2f_licensing_plans_ol">
1036
- <li><?php echo mo2f_lt( 'The plugin works with many of the default custom login forms (like Woocommerce / Theme My Login), however if you face any issues with your custom login form, contact us and we will help you with it.' ); ?></li>
1037
- <li style="color: red"><?php echo mo2f_lt( 'There is license key required to activate the Standard/Premium Lite Plugins. You will have to login with the miniOrange Account you used to make the purchase then enter license key to activate plugin.' ); ?>
1038
-
1039
- </li>
1040
- </ol>
1041
- </div>
1042
- <br>
1043
- <div>
1044
- <h2>Refund Policy</h2>
1045
- <p class="mo2f_licensing_plans_ol"><?php echo mo2f_lt( 'At miniOrange, we want to ensure you are 100% happy with your purchase. If the premium plugin you purchased is not working as advertised and you\'ve attempted to resolve any issues with our support team, which couldn\'t get resolved then we will refund the whole amount within 10 days of the purchase.' ); ?>
1046
- </p>
1047
- </div>
1048
- <br>
1049
- <hr>
1050
- <br>
1051
- <div>
1052
- <h2>Privacy Policy</h2>
1053
- <p class="mo2f_licensing_plans_ol"><a
1054
- href="https://www.miniorange.com/2-factor-authentication-for-wordpress-gdpr">Click Here</a>
1055
- to read our Privacy Policy.
1056
- </p>
1057
- </div>
1058
- <br>
1059
- <hr>
1060
- <br>
1061
- <div>
1062
- <h2>Contact Us</h2>
1063
- <p class="mo2f_licensing_plans_ol"><?php echo mo2f_lt( 'If you have any doubts regarding the licensing plans, you can mail us at' ); ?>
1064
- <a href="mailto:info@xecurify.com"><i>info@xecurify.com</i></a> <?php echo mo2f_lt( 'or submit a query using the support form.' ); ?>
1065
- </p>
1066
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1067
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1068
 
1069
- <div id="mo2f_payment_option" class="mo_wpns_setting_layout" style="margin-top: 1%;width: 93.5%;margin-left: 0%;">
1070
- <div>
1071
- <h3>Supported Payment Methods</h3><hr>
1072
- <div class="mo_2fa_container">
1073
- <div class="mo_2fa_card-deck">
1074
- <div class="mo_2fa_card mo_2fa_animation">
1075
- <div class="mo_2fa_Card-header">
1076
- <?php
1077
- echo'<img src="'.dirname(plugin_dir_url(__FILE__)).'/includes/images/card.png" style="size: landscape;width: 100px;height: 27px; margin-bottom: 4px;margin-top: 4px;opacity: 1;padding-left: 8px;">';?>
1078
- </div>
1079
- <hr style="border-top: 2px solid #143af4;">
1080
- <div class="mo_2fa_card-body">
1081
- <p style="font-size: 110%;">If payment is done through Credit Card/Intenational debit card, the license would be made automatically once payment is completed. </p>
1082
- <p style="font-size: 110%;"><i><b>For guide
1083
- <?php echo'<a href='.MoWpnsConstants::FAQ_PAYMENT_URL.' target="blank">Click Here.</a>';?></b></i></p>
1084
-
1085
- </div>
1086
- </div>
1087
- <div class="mo_2fa_card mo_2fa_animation">
1088
- <div class="mo_2fa_Card-header">
1089
- <?php
1090
- echo'<img src="'.dirname(plugin_dir_url(__FILE__)).'/includes/images/paypal.png" style="size: landscape;width: 100px;height: 27px; margin-bottom: 4px;margin-top: 4px;opacity: 1;padding-left: 8px;">';?>
1091
- </div>
1092
- <hr style="border-top: 2px solid #143af4;">
1093
- <div class="mo_2fa_card-body">
1094
- <?php echo'<p style="font-size: 110%;">Use the following PayPal id for payment via PayPal.</p><p><i><b style="color:#1261d8">'.MoWpnsConstants::SUPPORT_EMAIL.'</b></i></p>';?>
1095
- <p style="font-size: 110%;"><i><b>Note:</b> There is an additional 18% GST applicable via PayPal.</i></p>
1096
-
1097
- </div>
1098
- </div>
1099
- <div class="mo_2fa_card mo_2fa_animation">
1100
- <div class="mo_2fa_Card-header">
1101
- <?php
1102
- echo'<img src="'.dirname(plugin_dir_url(__FILE__)).'/includes/images/netbanking.png" style="size: landscape;width: 100px;height: 27px; margin-bottom: 4px;margin-top: 4px;opacity: 1;padding-left: 8px;">';?>
1103
-
1104
- </div>
1105
- <hr style="border-top: 2px solid #143af4;">
1106
- <div class="mo_2fa_card-body">
1107
- <?php echo'<p style="font-size: 110%;">If you want to use net banking for payment then contact us at <i><b style="color:#1261d8">'.MoWpnsConstants::SUPPORT_EMAIL.'</b></i> so that we can provide you bank details. </i></p>';?>
1108
- <p style="font-size: 110%;"><i><b>Note:</b> There is an additional 18% GST applicable via Bank Transfer.</i></p>
1109
- </div>
1110
- </div>
1111
- </div>
1112
- </div>
1113
- <div class="mo_2fa_mo-supportnote">
1114
- <p style="font-size: 110%;"><b>Note :</b> Once you have paid through PayPal/Net Banking, please inform us so that we can confirm and update your License.</p>
1115
- </div>
1116
- </div>
1117
- </div>
1118
 
1119
-
1120
- <?php
1121
- function mo2f_sms_cost() {
1122
- ?>
1123
- <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price" style="text-align: center;" id="mo2f_sms_cost"
1124
- title="<?php echo mo2f_lt( '(Only applicable if OTP over SMS is your preferred authentication method.)' ); ?>"><?php echo mo2f_lt( 'SMS + OTP Cost' ); ?>
1125
- <b style="color: black;">[optional]</b><br/>
1126
- <select id="mo2f_sms" class="form-control" style="border-radius:5px;width:70%;">
1127
- <option><?php echo mo2f_lt( '$1 per 100 OTP + SMS delivery charges' ); ?></option>
1128
- <option><?php echo mo2f_lt( '$5 per 500 OTP + SMS delivery charges' ); ?></option>
1129
- <option><?php echo mo2f_lt( '$7 per 1k OTP + SMS delivery charges' ); ?></option>
1130
- <option><?php echo mo2f_lt( '$24 per 5k OTP + SMS delivery charges' ); ?></option>
1131
- <option><?php echo mo2f_lt( '$43 per 10k OTP + SMS delivery charges' ); ?></option>
1132
- <option><?php echo mo2f_lt( '$160 per 50k OTP + SMS delivery charges' ); ?></option>
1133
- </select>
1134
- </p>
1135
-
1136
- <?php
1137
- }
1138
- function mo2f_yearly_premium_pricing_plan() {
1139
- ?>
1140
- <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price" style="text-align: center;"
1141
- id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1142
 
1143
- <select id="mo2f_yearly" class="form-control" style="border-radius:5px;width:70%;">
1144
- <option> <?php echo mo2f_lt( 'Upto 5 users - $30 per year' ); ?> </option>
1145
- <option> <?php echo mo2f_lt( 'Upto 50 users - $99 per year' ); ?> </option>
1146
- <option> <?php echo mo2f_lt( 'Upto 100 users - $199 per year' ); ?> </option>
1147
- <option> <?php echo mo2f_lt( 'Upto 500 users - $349 per year' ); ?> </option>
1148
- <option> <?php echo mo2f_lt( 'Upto 1000 users - $499 per year' ); ?> </option>
1149
- <option> <?php echo mo2f_lt( 'Upto 5000 users - $799 per year' ); ?> </option>
1150
- <option> <?php echo mo2f_lt( 'Upto 10000 users - $999 per year ' ); ?></option>
1151
- <option> <?php echo mo2f_lt( 'Upto 20000 users - $1449 per year' ); ?> </option>
1152
-
1153
- </select>
1154
- </p>
1155
- <?php
1156
- }
1157
- function mo2f_yearly_all_inclusive_pricing_plan() {
1158
- ?>
1159
- <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price" style="text-align: center;"
1160
- id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1161
 
1162
- <select id="mo2f_yearly" class="form-control" style="border-radius:5px;width:70%;">
1163
- <option> <?php echo mo2f_lt( 'Upto 5 users - $59 per year' ); ?> </option>
1164
- <option> <?php echo mo2f_lt( 'Upto 50 users - $128 per year' ); ?> </option>
1165
- <option> <?php echo mo2f_lt( 'Upto 100 users - $228 per year' ); ?> </option>
1166
- <option> <?php echo mo2f_lt( 'Upto 500 users - $378 per year' ); ?> </option>
1167
- <option> <?php echo mo2f_lt( 'Upto 1000 users - $528 per year' ); ?> </option>
1168
- <option> <?php echo mo2f_lt( 'Upto 5000 users - $828 per year' ); ?> </option>
1169
- <option> <?php echo mo2f_lt( 'Upto 10000 users - $1028 per year ' ); ?></option>
1170
- <option> <?php echo mo2f_lt( 'Upto 20000 users - $1478 per year' ); ?> </option>
1171
-
1172
- </select>
1173
- </p>
1174
  <?php
1175
- }
1176
  function mo2f_waf_yearly_standard_pricing() {
1177
  ?>
1178
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1179
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1180
 
1181
- <select id="mo2f_yearly" class="form-control" style="border-radius:5px;width:70%;">
1182
- <option> <?php echo mo2f_lt( '1 site - $50 per year' ); ?> </option>
1183
- <option> <?php echo mo2f_lt( 'Upto 5 sites - $100 per year' ); ?> </option>
1184
- <option> <?php echo mo2f_lt( 'Upto 10 sites - $150 per year' ); ?> </option>
1185
-
1186
- </select>
1187
- </p>
1188
 
1189
  <?php
1190
  }
@@ -1193,13 +1363,13 @@ function mo2f_login_yearly_standard_pricing() {
1193
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1194
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1195
 
1196
- <select id="mo2f_yearly" class="form-control" style="border-radius:5px;width:70%;">
1197
- <option> <?php echo mo2f_lt( '1 site - $15 per year' ); ?> </option>
1198
- <option> <?php echo mo2f_lt( 'Upto 5 sites - $35 per year' ); ?> </option>
1199
- <option> <?php echo mo2f_lt( 'Upto 10 sites - $60 per year' ); ?> </option>
1200
-
1201
- </select>
1202
- </p>
1203
 
1204
  <?php
1205
  }
@@ -1208,13 +1378,13 @@ function mo2f_backup_yearly_standard_pricing() {
1208
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1209
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1210
 
1211
- <select id="mo2f_yearly" class="form-control" style="border-radius:5px;width:70%;">
1212
- <option> <?php echo mo2f_lt( '1 site - $30 per year' ); ?> </option>
1213
- <option> <?php echo mo2f_lt( 'Upto 5 sites - $50 per year' ); ?> </option>
1214
- <option> <?php echo mo2f_lt( 'Upto 10 sites - $70 per year' ); ?> </option>
1215
-
1216
- </select>
1217
- </p>
1218
 
1219
  <?php
1220
  }
@@ -1223,13 +1393,13 @@ function mo2f_scanner_yearly_standard_pricing() {
1223
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1224
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1225
 
1226
- <select id="mo2f_yearly" class="form-control" style="border-radius:5px;width:70%;">
1227
- <option> <?php echo mo2f_lt( '1 site - $15 per year' ); ?> </option>
1228
- <option> <?php echo mo2f_lt( 'Upto 5 sites - $35 per year' ); ?> </option>
1229
- <option> <?php echo mo2f_lt( 'Upto 10 sites - $60 per year' ); ?> </option>
1230
-
1231
- </select>
1232
- </p>
1233
 
1234
  <?php
1235
  }
@@ -1237,9 +1407,9 @@ function mo2f_scanner_yearly_standard_pricing() {
1237
  function mo2f_get_binary_equivalent_2fa_lite( $mo2f_var ) {
1238
  switch ( $mo2f_var ) {
1239
  case 1:
1240
- return "<div style='color: #20b2aa;font-size: x-large;float:left;margin:0px 5px;'>🗸</div>";
1241
  case 0:
1242
- return "<div style='color: red;font-size: x-large;float:left;margin:0px 5px;'>×</div>";
1243
  default:
1244
  return $mo2f_var;
1245
  }
@@ -1296,53 +1466,25 @@ function mo2f_feature_on_hover_2fa_upgrade( $mo2f_var ) {
1296
  jQuery.post(ajaxurl, data, function(response) {
1297
  });
1298
  }
1299
- function mo_2fa_cloud_show_plans()
1300
  {
1301
- document.getElementById('mo2f_unlimited_users').style.display = "none";
1302
-
1303
- document.getElementById('mo_2fa_cloud_licensing_plans_title').style.display = "none";
1304
- document.getElementById('mo_2fa_cloud_licensing_plans_title1').style.display = "block";
1305
- var tab = '<?php echo get_option("mo_wpns_2fa_with_network_security");?>';
1306
- if(tab == "1")
1307
- {
1308
- document.getElementById('mo_ns_features_only').style.display = "none";
1309
- document.getElementById('mo_ns_licensing_plans_title').style.display = "block";
1310
- document.getElementById('mo_ns_licensing_plans_title1').style.display = "none";
1311
- }
1312
-
1313
- document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "block";
1314
- document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "none";
1315
- }
1316
-
1317
- function mo_2fa_onpremise_show_plans()
1318
- {
1319
- document.getElementById('mo2f_unlimited_sites').style.display = "none";
1320
- var tab = '<?php echo get_option("mo_wpns_2fa_with_network_security");?>';
1321
- if(tab == "1")
1322
- {
1323
- document.getElementById('mo_ns_features_only').style.display = "none";
1324
- document.getElementById('mo_ns_licensing_plans_title1').style.display = "none";
1325
- document.getElementById('mo_ns_licensing_plans_title').style.display = "block";
1326
- }
1327
- document.getElementById('mo_2fa_cloud_licensing_plans_title').style.display = "block";
1328
- document.getElementById('mo_2fa_cloud_licensing_plans_title1').style.display = "none";
1329
  document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "none";
1330
- document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "block";
1331
-
 
 
1332
  }
1333
-
1334
  function mo_ns_show_plans()
1335
  {
1336
  document.getElementById('mo_ns_features_only').style.display = "block";
1337
- document.getElementById('mo2f_unlimited_sites').style.display = "none";
1338
- document.getElementById('mo2f_unlimited_users').style.display = "none";
1339
-
1340
- document.getElementById('mo_ns_licensing_plans_title1').style.display = "block";
1341
- document.getElementById('mo_ns_licensing_plans_title').style.display = "none";
1342
- document.getElementById('mo_2fa_cloud_licensing_plans_title').style.display = "block";
1343
- document.getElementById('mo_2fa_cloud_licensing_plans_title1').style.display = "none";
1344
  document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "block";
1345
- document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "none";
 
 
 
1346
  }
1347
 
1348
  function wpns_pricing()
@@ -1350,18 +1492,21 @@ function mo2f_feature_on_hover_2fa_upgrade( $mo2f_var ) {
1350
  window.open("https://security.miniorange.com/pricing/");
1351
  }
1352
 
 
 
 
 
 
 
 
 
1353
  </script>
1354
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
1355
  <script>
1356
  $(document).ready(function(){
1357
 
1358
- $("#regular_plans").click(function(){
1359
- $("#mo2f_unlimited_sites").fadeIn(2000);
1360
- });
1361
 
1362
- $("#mo2f_onpremise_plan").click(function(){
1363
- $("#mo2f_unlimited_users").fadeIn(2000);
1364
- });
1365
 
1366
  });
1367
  </script>
1
  <?php
2
+ global $Mo2fdbQueries,$mainDir;
3
  $user = wp_get_current_user();
4
  $is_NC = MoWpnsUtility::get_mo2f_db_option('mo2f_is_NC', 'get_option');
 
5
  $is_customer_registered = $Mo2fdbQueries->get_user_detail( 'user_registration_with_miniorange', $user->ID ) == 'SUCCESS' ? true : false;
6
 
7
  $mo2f_2fa_method_list = array(
40
  $mo2f_2fa_method_description_set = array(
41
  "Enter the soft token from the account in your Google Authenticator App to login.",
42
  "Answer the three security questions you had set, to login.",
43
+ "Enter the soft token from the account in your Authy Authenticator/Microsoft Authenticator/TOTP Authenticator App to login.",
44
  "Accept the verification link sent to your email to login.",
45
  "You will receive a one time passcode via Email.",
46
  "You will receive a One Time Passcode via SMS on your Phone",
105
  "According to user's role the particular user will be redirected to specific location",
106
  "Have your own gateway? You can use it, no need to purchase SMS then",
107
  "For access wordpress on different moblie apps, app specific passwords can be set",
108
+ "This protects your site from attacks which tries to gain access/login to a site with random usernames and passwords.",
109
  "Allows you to manually/automatically block any IP address that seems malicious from accessing your website. ",
110
  "Monitor activity of your users. For ex:- login activity, error report",
111
  "Enforce users to set a strong password.",
170
  ?>
171
  <br><br>
172
 
173
+ <?php
174
+ if( get_option("mo_wpns_2fa_with_network_security"))
175
+ {
176
+ ?>
177
  <div class="mo_upgrade_toggle">
178
+ <p class="mo_upgrade_toggle_2fa">
179
+ <input type="radio" name="sitetype" value="Recharge" id="mo2f_2fa_plans" onclick="show_2fa_plans();" style="display: none;">
180
+ <label for="mo2f_2fa_plans" class="mo_upgrade_toggle_2fa_lable" id="mo_2fa_lite_licensing_plans_title" style="display: none;">&nbsp;&nbsp;&nbsp;2-Factor Authentication</label>
181
+ <label for="mo2f_2fa_plans" class="mo_upgrade_toggle_2fa_lable mo2f_active_plan" id="mo_2fa_lite_licensing_plans_title1" style="display: block;">&nbsp;&nbsp;&nbsp;2-Factor Authentication</label>
182
+ <input type="radio" name="sitetype" value="Recharge" id="mo2f_ns_plans" onclick="mo_ns_show_plans();" style="display: none;">
183
+ <label for="mo2f_ns_plans" class="mo_upgrade_toggle_2fa_lable" id="mo_ns_licensing_plans_title">Website Security</label>
184
+ <label for="mo2f_ns_plans" class="mo_upgrade_toggle_2fa_lable mo2f_active_plan" id="mo_ns_licensing_plans_title1" style="display: none;">Website Security</label>
185
+ </p>
186
+ </div>
187
+ <?php
188
+ }
189
+ ?>
190
+ <span class="cd-switch"></span>
191
 
 
192
 
193
+ <br><br>
194
+ <link rel="stylesheet" href=<?php echo $mainDir.DIRECTORY_SEPARATOR.'includes'.DIRECTORY_SEPARATOR.'css'.DIRECTORY_SEPARATOR.'upgrade.css';?>>
 
195
 
196
+ <div class="mo2f_upgrade_super_div" id="mo2f_twofa_plans">
197
+ <div class="mo2f_upgrade_main_div">
198
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"/>
199
+ <div id="pricing_tabs_mo" class="mo2fa_pricing_tabs_mo mo2fa_pricing_tabs_mo_premium_lite">
200
+ <div id="pricing_head" class="mo2fa_pricing_head_supporter"><center><h3 class="mo2fa_pricing_head_mo_2fa">Premium Lite</h3></center></div>
201
+ <div id="pricing_head" class="mo2fa_pricing_head_supporter"><center><span class="mo2fa_pricing_head_mo_2fa">$99</span>/Year</center></div>
202
 
203
+ <div id="getting_started_2fa_mo">
204
+ <center>
205
+ <a href="#addon_site_based"><button class="mo2fa_make_my_plan_mo">Getting Started</button></a>
206
+ </center>
207
+ </div>
208
 
209
+ <div id="pricing_feature_collection_supporter" class="mo2fa_pricing_feature_collection_supporter">
210
+ <div id="pricing_feature_collection" class="mo2fa_pricing_feature_collection">
211
+ <ul class="mo2fa_ul">
212
+ <p class="mo2fa_feature"><strong>Features</strong></p>
213
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_limit_pricing_feature_mo_2fa"><i class="fas fa-times"></i>Unlimited Sites</li>
214
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Unlimited Users</li>
215
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature">
216
+ <i class="fas fa-check"></i>
217
+ <span class="mo2fa_tooltip_methodlist">10+ Authentication Methods
218
+ <span class="methodlist">
219
+ <ul class="methods-list-mo2fa" style="margin-left: -43px; ">
220
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Google Authenticator</li>
221
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Security Questions</li>
222
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Authy Authenticator</li>
223
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Microsoft Authenticator</li>
224
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>LastPass Authenticator</li>
225
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>FreeOTP Authenticator</li>
226
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Duo Mobile Authenticator</li>
227
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Email Verification</li>
228
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Email</li>
229
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over SMS</li>
230
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>miniOrange QR Code Authenticator</li>
231
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>miniOrange Soft Token</li>
232
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>miniOrange Push Notification</li>
233
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>OTP Over SMS and Email</li>
234
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>Hardware Token</li>
235
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Whatsapp</li>
236
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Telegram</li>
237
+ </ul>
238
+ </span>
239
+ </span>
240
+ </li>
241
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Force users to set-up 2FA</li>
242
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i> 3+ Backup Login Methods</li>
243
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Passwordless Login</li>
244
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_limit_pricing_feature_mo_2fa"><i class="fas fa-times"></i>Strong Password</li>
245
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Custom SMS Gateway </li>
246
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_limit_pricing_feature_mo_2fa"><i class="fas fa-times"></i>Add-Ons (Purchase Seperately)</li>
247
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Advance Login Settings</li>
248
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_limit_pricing_feature_mo_2fa"><i class="fas fa-times"></i>Advance Security Features</li>
249
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature" id="addon_site_based"><i class="fas fa-check"></i>Multi-Site Support</li>
250
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Language Translation Support</li>
251
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Get Online Support Via GoTo/Zoom </li>
252
+ </ul>
253
 
254
+ </div>
255
+ </div>
256
+ <div id="pricing_addons_site_based" class="mo2fa_pricing">
257
+ <center>
258
+ <div id="purchase_user_limit">
259
+ <p class="mo2fa_more_details_p mo2fa_class"><a href="#details" onclick="mo2fa_show_details()">Click here to compare all plans</a></p>
260
+ <p class="mo2fa_more_details_p1 mo2fa_hide1"><a href="#details" onclick="mo2fa_show_details()">Click here to hide comparison</a></p>
261
+ <center><h3 class="mo2fa_purchase_user_limit_mo mo2fa_purchase_limit_mo">Choose No. of Sites</h3>
262
+ <p class="mo2fa_pricing_p">(Yearly Subscription Fees*)</p>
263
+ <select id="site_price_mo" onchange="update_site_limit()" onclick="update_site_limit()" class="mo2fa_increase_my_limit">
264
+ <option value="99">1 Site - free with the plan</option>
265
+ <option value="159">2 Sites - $159 per year</option>
266
+ <option value="199">Upto 5 Sites - $199 per year</option>
267
+ <option value="259">Upto 10 Sites - $259 per year</option>
268
+ <option value="349">Upto 25 Sites - $349per year</option>
269
+ <option value="0"> Above 25 - Contact us</option>
270
+ </select>
271
+ </div>
272
+ <div id="purchase_sms_limit">
273
+ <center><h3 class="mo2fa_purchase_otp_limit mo2fa_purchase_limit_mo">No. of SMS Transactions </h3>
274
+ <p class="mo2fa_country">(For all countries*)</p>
275
+ <select id="sms_price_site_based_mo" onchange="update_sms_limit_site_based_mo()" class="mo2fa_increase_my_limit">
276
+ <option value="0">0 Transaction - $0</option>
277
+ <option value="12">100 Transactions - $12</option>
278
+ <option value="54">500 Transactions - $54</option>
279
+ <option value="105">1000 Transactions - $105</option>
280
+ <option value="510">5000 Transactions - $510</option>
281
+ <option value="1010">10,000 Transactions - $1010</option>
282
+ <option value="4945">50,000 Transactions - $4945</option>
283
+ </select>
284
+ </center>
285
+ </div>
286
+ <div id="purchase_email_limit">
287
+ <center><h3 class="mo2fa_purchase_otp_limit mo2fa_purchase_limit_mo">No. of Email Transactions </h3>
288
+ <select id="email_price_site_based_mo" onchange="update_email_limit_site_based_mo()" class="mo2fa_increase_my_limit">
289
+ <option value="0">0 Transaction - $0</option>
290
+ <option value="2">100 Transactions - $2</option>
291
+ <option value="5">500 Transactions - $5</option>
292
+ <option value="7">1000 Transactions - $7</option>
293
+ <option value="20">5000 Transactions - $20</option>
294
+ <option value="30">10,000 Transactions - $30</option>
295
+ <option value="45">50,000 Transactions - $45</option>
296
+ </select>
297
+ </center>
298
+ </div>
299
+ <div class="mo2fa_dollar"> <center><span>$</span><span id="mo_pricing_adder_site_based"></span></center></div>
300
+
301
+ <div id="custom_my_plan_2fa_mo">
302
+ <center>
303
+ <?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
304
+ <a onclick="mo2f_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Proceed</button></a>
305
+ <?php }else{ ?>
306
+ <a onclick="mo2f_register_and_upgradeform('wp_security_two_factor_premium_lite_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Proceed</button></a>
307
+ <?php }?>
308
+ </center>
309
+ </div>
310
+ </center>
311
+ </div>
312
+ </div>
313
+ <script>
314
+ var base_price_site_based =0;
315
+ var display_my_site_based_price = parseInt(base_price_site_based)+parseInt(0)+parseInt(0)+parseInt(0);
316
+ document.getElementById("mo_pricing_adder_site_based").innerHTML = + display_my_site_based_price;
317
+ jQuery('#site_price_mo').click();
318
+ function update_site_limit() {
319
+ var users = document.getElementById("site_price_mo").value;
320
+ var sms_user_selection= document.getElementById("sms_price_site_based_mo").value;
321
+ var email_user_selection= document.getElementById("email_price_site_based_mo").value;
322
+ var users_addion = parseInt(base_price_site_based)+parseInt(users)+parseInt(sms_user_selection)+parseInt(email_user_selection);
323
+
324
+ document.getElementById("mo_pricing_adder_site_based").innerHTML = + users_addion;
325
 
326
+ }
 
 
 
 
 
 
 
 
 
327
 
328
+ function update_sms_limit_site_based_mo() {
329
+ var sms = document.getElementById("sms_price_site_based_mo").value;
330
+ var users_sms_selection = document.getElementById("site_price_mo").value;
331
+ var email_sms_selection= document.getElementById("email_price_site_based_mo").value;
332
 
333
+ var sms_addion = parseInt(base_price_site_based)+parseInt(sms)+parseInt(users_sms_selection )+parseInt(email_sms_selection);
334
 
335
+ document.getElementById("mo_pricing_adder_site_based").innerHTML = + sms_addion;
336
 
337
+ }
338
 
339
+ function update_email_limit_site_based_mo() {
340
+ var email= document.getElementById("email_price_site_based_mo").value;
341
+ var users_email_selection = document.getElementById("site_price_mo").value;
342
+ var sms_email_selection = document.getElementById("sms_price_site_based_mo").value;
343
+ var email_addion = parseInt(base_price_site_based)+parseInt(email)+parseInt(users_email_selection)+parseInt(sms_email_selection);
344
 
345
+ document.getElementById("mo_pricing_adder_site_based").innerHTML = + email_addion;
346
 
347
+ }
348
 
349
 
350
+ </script>
351
+ </div>
352
 
353
 
354
+ <div class="mo2f_upgrade_main_div">
355
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
356
 
357
+ <div id="pricing_tabs_mo" class="mo2fa_pricing_tabs_mo mo2fa_pricing_tabs_mo_premium">
358
+ <div class="mo2fa_recommended"><center><h4 class="mo2fa_h4">Recommended</h4></center> </div>
359
+ <div id="pricing_head_all_inclusive" class="mo2fa_pricing_head_supporter"><center><h3 class="mo2fa_pricing_head_mo_2fa">Premium</h3></center></div>
360
+ <div id="pricing_head_all_inclusive" class="mo2fa_pricing_head_supporter"><center><span class="mo2fa_pricing_head_mo_2fa">$199</span>/Year</center></div>
361
+ <div id="getting_started_2fa_mo_all_inclusive">
362
+ <center>
363
+ <a href="#addon_all_inclusive"><button class="mo2fa_make_my_plan_mo">Getting Started</button></a>
364
+ </center>
365
+ </div>
366
 
367
+ <div id="pricing_feature_collection_supporter_all_inclusive" class="mo2fa_pricing_feature_collection_supporter">
368
+ <div id="pricing_feature_collection_all_inclusive" class="mo2fa_pricing_feature_collection">
369
+ <ul class="mo2fa_ul">
370
+ <p class="mo2fa_feature"><strong>Features</strong></p>
371
+
372
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_limit_pricing_feature_mo_2fa"><i class="fas fa-times"></i>Unlimited Sites</li>
373
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Unlimited Users</li>
374
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i><span class="mo2fa_tooltip_methodlist">10+ Authentication Methods
375
+ <span class="methodlist">
376
+ <ul class="methods-list-mo2fa" style="margin-left: -43px; ">
377
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Google Authenticator</li>
378
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Security Questions</li>
379
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Authy Authenticator</li>
380
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Microsoft Authenticator</li>
381
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>LastPass Authenticator</li>
382
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>FreeOTP Authenticator</li>
383
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Duo Mobile Authenticator</li>
384
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Email Verification</li>
385
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Email</li>
386
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over SMS</li>
387
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>miniOrange QR Code Authenticator</li>
388
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>miniOrange Soft Token</li>
389
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>miniOrange Push Notification</li>
390
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>OTP Over SMS and Email</li>
391
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>Hardware Token</li>
392
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Whatsapp</li>
393
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Telegram</li>
394
+ </ul>
395
+ </span>
396
+ </span></li>
397
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Force users to set-up 2FA</li>
398
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i> 3+ Backup Login Methods</li>
399
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Passwordless Login</li>
400
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Strong Password</li>
401
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Custom SMS Gateway </li>
402
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Add-Ons (Included)</li>
403
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Advance Login Settings</li>
404
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Advance Security Features</li>
405
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature" id="addon_all_inclusive"><i class="fas fa-check"></i>Multi-Site Support</li>
406
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Language Translation Support</li>
407
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Get Online Support Via GoTo/Zoom </li>
408
+ </ul>
409
 
410
+ </div>
411
+ </div>
412
+ <div id="pricing_addons_all_inclusive" class="mo2fa_pricing">
413
+ <div id="purchase_user_limit_all_inclusive">
414
+ <p class="mo2fa_more_details_p mo2fa_class"><a href="#details" onclick="mo2fa_show_details()">Click here to compare all plans</a></p>
415
+ <p class="mo2fa_more_details_p1 mo2fa_hide1"><a href="#details" onclick="mo2fa_show_details()">Click here to hide comparison</a></p>
416
+ <center><h3 class="mo2fa_purchase_user_limit_mo mo2fa_purchase_limit_mo">Choose No. of Sites</h3>
417
+ <p class="mo2fa_pricing_p">(Yearly Subscription Fees*)</p>
418
+ <select id="all_inclusive_price_mo" onclick="update_site_limit_all_inclusive()" onchange="update_site_limit_all_inclusive()" class="mo2fa_increase_my_limit">
419
+ <option value="199">1 Site - free with the plan</option>
420
+ <option value="299">2 Sites - $299 per year</option>
421
+ <option value="399">Upto 5 Sites - $399 per year</option>
422
+ <option value="599">Upto 10 Sites - $599 per year</option>
423
+ <option value="799">Upto 25 Sites - $799 per year</option>
424
+ <option value="0">Above 25 - Contact us</option>
425
+ </select>
426
+ </center>
427
+ </div>
428
+ <div id="purchase_sms_limit_all_inclusive">
429
+ <center><h3 class="mo2fa_purchase_otp_limit mo2fa_purchase_limit_mo">No. of SMS Transactions </h3>
430
+ <p class="mo2fa_country">(For all countries*)</p>
431
+ <select id="sms_price_all_inclusive_mo" onchange="update_sms_limit_all_inclusive()" class="mo2fa_increase_my_limit">
432
+ <option value="0">0 Transaction - $0</option>
433
+ <option value="12">100 Transactions - $12</option>
434
+ <option value="54">500 Transactions - $54</option>
435
+ <option value="105">1000 Transactions - $105</option>
436
+ <option value="510">5000 Transactions - $510</option>
437
+ <option value="1010">10,000 Transactions - $1010</option>
438
+ <option value="4945">50,000 Transactions - $4945</option>
439
+ </select>
440
+ </center>
441
+ </div>
442
+ <div id="purchase_email_limit_all_inclusive">
443
+ <center><h3 class="mo2fa_purchase_otp_limit mo2fa_purchase_limit_mo">No. of Email Transactions </h3>
444
+ <select id="email_price_all_inclusive_mo" onchange="update_email_limit_all_inclusive_mo()" class="mo2fa_increase_my_limit">
445
+ <option value="0">0 Transaction - $0</option>
446
+ <option value="2">100 Transactions - $2</option>
447
+ <option value="5">500 Transactions - $5</option>
448
+ <option value="7">1000 Transactions - $7</option>
449
+ <option value="20">5000 Transactions - $20</option>
450
+ <option value="30">10,000 Transactions - $30</option>
451
+ <option value="45">50,000 Transactions - $45</option>
452
+ </select>
453
+ </center>
454
+ </div>
455
+ <div class="mo2fa_dollar"> <center><span>$</span><span id="display_my_all_inclusive_pricing"></span></center></div>
456
+
457
+ <div id="custom_my_plan_2fa_mo">
458
+ <center>
459
+ <?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
460
+ <a onclick="mo2f_upgradeform('wp_security_two_factor_all_inclusive_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Proceed</button></a>
461
+ <?php }else{ ?>
462
+ <a onclick="mo2f_register_and_upgradeform('wp_security_two_factor_all_inclusive_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Proceed</button></a>
463
+ <?php }?>
464
+ </center>
465
+ </div>
466
+ </div>
467
+ </div>
468
+ <script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
 
470
+ var base_price_site_all_inclusive =0;
471
+ var display_my_all_inclusive_price = parseInt(base_price_site_all_inclusive)+parseInt(0)+parseInt(0)+parseInt(0);
472
+ document.getElementById("display_my_all_inclusive_pricing").innerHTML = + display_my_all_inclusive_price;
473
+ jQuery('#all_inclusive_price_mo').click();
474
+ function update_site_limit_all_inclusive() {
475
+ var sites_all_inclusive = document.getElementById("all_inclusive_price_mo").value;
476
+ var sms_user_selection_all_inclusive= document.getElementById("sms_price_all_inclusive_mo").value;
477
+ var email_user_selection_all_inclusive= document.getElementById("email_price_all_inclusive_mo").value;
478
+ var total_inclusive = parseInt(base_price_site_all_inclusive)+parseInt(sites_all_inclusive)+parseInt(sms_user_selection_all_inclusive)+parseInt(email_user_selection_all_inclusive);
479
 
480
+ document.getElementById("display_my_all_inclusive_pricing").innerHTML = + total_inclusive;
481
 
482
+ }
483
 
484
+ function update_sms_limit_all_inclusive() {
485
+ var sms = document.getElementById("sms_price_all_inclusive_mo").value;
486
+ var sms_site_selection = document.getElementById("all_inclusive_price_mo").value;
487
+ var email_sms_selection= document.getElementById("email_price_all_inclusive_mo").value;
488
 
489
+ var sms_all_inclusive_mo_2fa= parseInt(base_price_site_all_inclusive)+parseInt(sms)+parseInt(sms_site_selection)+parseInt(email_sms_selection);
490
 
491
+ document.getElementById("display_my_all_inclusive_pricing").innerHTML = + sms_all_inclusive_mo_2fa;
492
+
493
+ }
494
 
495
+ function update_email_limit_all_inclusive_mo() {
496
+ var email_all_inclusive= document.getElementById("email_price_all_inclusive_mo").value;
497
+ var site_email_selection_all_inclusive = document.getElementById("all_inclusive_price_mo").value;
498
+ var sms_email_selection_all_inclusive = document.getElementById("sms_price_all_inclusive_mo").value;
499
+ var email_all_inclusive_mo= parseInt(base_price_site_all_inclusive)+parseInt(email_all_inclusive)+parseInt(site_email_selection_all_inclusive)+parseInt(sms_email_selection_all_inclusive);
500
 
501
+ document.getElementById("display_my_all_inclusive_pricing").innerHTML = + email_all_inclusive_mo;
502
 
503
+ }
504
+
505
+
506
+ </script>
507
+ </div>
508
 
509
+ <div class="mo2f_upgrade_main_div">
510
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
511
 
512
+ <div id="pricing_tabs_mo" class="mo2fa_pricing_tabs_mo mo2fa_pricing_tabs_mo_enterprise">
513
 
514
+ <div id="pricing_head" style="text-align: center;">
515
+ <h3 class="mo2fa_pricing_head_mo_2fa">Enterprise</h3>
516
+ <h5 class="mo2fa_pricing_head_h5">Starting From </h5>
517
+ </div>
518
+ <div id="pricing_head_cost" class="mo2fa_pricing_head_supporter">
519
+ <center><span class="mo2fa_pricing_head_mo_2fa">$59</span>/Year</center>
520
+ </div>
521
+
522
+ <div id="getting_started_2fa_mo">
523
+ <center>
524
+ <a href="#addon"><button class="mo2fa_make_my_plan_mo mo2fa_enterprise_getting_started">Getting Started</button></a>
525
+ </center>
526
+ </div>
527
+
528
+ <div id="pricing_feature_collection_supporter" class="mo2fa_pricing_feature_collection_supporter">
529
+ <!--<div id="priceing_plan" style="background: #c9dbdbfa;width: 21%;margin-left: 11em;height: 4em;border-radius: 8px;margin-bottom: -30px;padding: 5px 5px 5px 5px;"><center><h3 class="mo2fa_price_mo_2fa">$59</h3>/year</br><p class="mo2fa_starting_from">Starting From</p></center></div>-->
530
+
531
+ <div id="pricing_feature_collection" class="mo2fa_pricing_feature_collection">
532
+ <ul class="mo2fa_ul">
533
+ <p class="mo2fa_feature"><strong>Features</strong></p>
534
+
535
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Unlimited Sites</li>
536
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_limit_pricing_feature_mo_2fa"><i class="fas fa-times"></i>Unlimited Users</li>
537
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i><span class="mo2fa_tooltip_methodlist">15+ Authentication Methods
538
+ <span class="methodlist">
539
+ <ul class="methods-list-mo2fa" style="margin-left: -43px; ">
540
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Google Authenticator</li>
541
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Security Questions</li>
542
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Authy Authenticator</li>
543
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Microsoft Authenticator</li>
544
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>LastPass Authenticator</li>
545
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>FreeOTP Authenticator</li>
546
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Duo Mobile Authenticator</li>
547
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Email Verification</li>
548
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Email</li>
549
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over SMS</li>
550
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>miniOrange QR Code Authentication</li>
551
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>miniOrange Soft Token</li>
552
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>miniOrange Push Notification</li>
553
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over SMS and Email</li>
554
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>Hardware Token</li>
555
+ <li class="feature_collect_mo-2fa mo2fa_method-list-mo-size-cross"><i class="fas fa-times mo2fa_fa-times icon-mo2fa-methods"></i>OTP Over Whatsapp</li>
556
+ <li class="feature_collect_mo-2fa mo2fa_method-list-size"><i class="fas fa-check mo2fa_fa-check icon-mo2fa-methods"></i>OTP Over Telegram</li>
557
+ </ul>
558
+ </span>
559
+ </span></li>
560
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Force users to set-up 2FA</li>
561
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i> 3+ Backup Login Methods</li>
562
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Passwordless Login </li>
563
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Strong Password</li>
564
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Custom SMS Gateway </li>
565
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Add-Ons (Limited)</li>
566
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Advance Login Settings</li>
567
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Advance Security Features</li>
568
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature" id="addon"><i class="fas fa-check" id="addon"></i>Multi-Site Support</li>
569
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Language Translation Support</li>
570
+ <li class="mo2fa_feature_collect_mo-2fa mo2fa_unltimate_feature"><i class="fas fa-check"></i>Get Online Support Via GoTo/Zoom </li>
571
+ </ul>
572
+
573
+ </div>
574
+ </div>
575
+ <div id="pricing_addons" class="mo2fa_pricing">
576
+ <center>
577
+ <div id="purchase_user_limit">
578
+ <p class="mo2fa_more_details_p mo2fa_class"><a href="#details" onclick="mo2fa_show_details()">Click here to compare all plans</a></p>
579
+ <p class="mo2fa_more_details_p1 mo2fa_hide1"><a href="#details" onclick="mo2fa_show_details()">Click here to hide comparison</a></p>
580
+ <center><h3 class="mo2fa_purchase_user_limit_mo mo2fa_purchase_limit_mo">Choose No. of Users </h3>
581
+ <p class="mo2fa_pricing_p">(Yearly Subscription Fees*)</p>
582
+ <select id="user_price" onclick="update_user_limit()" onchange="update_user_limit()" class="mo2fa_increase_my_limit">
583
+ <option value="59">Upto-5 users - $59 per year</option>
584
+ <option value="128">Upto-50 users - $128 per year</option>
585
+ <option value="228">Upto-100 users - $228 per year</option>
586
+ <option value="378">Upto-500 users - $378 per year</option>
587
+ <option value="528">Upto-1000 users - $528 per year</option>
588
+ <option value="828">Upto-5000 users - $828 per year</option>
589
+ <option value="1028">Upto-10000 users - $1028 per year</option>
590
+ <option value="1528">Upto-20000 users - $1528 per year</option>
591
+ <option value="0">Unlimited Users - Contact Us</option>
592
+ </select>
593
+ </center>
594
+ </div>
595
+ <div id="purchase_sms_limit">
596
+ <center><h3 class="mo2fa_purchase_otp_limit mo2fa_purchase_limit_mo">No. of SMS Transactions </h3>
597
+ <p class="mo2fa_country">(For all countries*)</p>
598
+ <select id="sms_price" onchange="update_sms_limit()" class="mo2fa_increase_my_limit">
599
+ <option value="0">0 Transaction - $0</option>
600
+ <option value="12">100 Transactions - $12</option>
601
+ <option value="54">500 Transactions - $54</option>
602
+ <option value="105">1000 Transactions - $105</option>
603
+ <option value="510">5000 Transactions - $510</option>
604
+ <option value="1010">10,000 Transactions - $1010</option>
605
+ <option value="4945">50,000 Transactions - $4945</option>
606
+ </select>
607
+ </center>
608
+ </div>
609
+ <div id="purchase_email_limit">
610
+ <center><h3 class="mo2fa_purchase_otp_limit mo2fa_purchase_limit_mo">No. of Email Transactions </h3>
611
+ <select id="email_price" onchange="update_email_limit()" class="mo2fa_increase_my_limit">
612
+ <option value="0">0 Transaction - $0</option>
613
+ <option value="2">100 Transactions - $2</option>
614
+ <option value="5">500 Transactions - $5</option>
615
+ <option value="7">1000 Transactions - $7</option>
616
+ <option value="20">5000 Transactions - $20</option>
617
+ <option value="30">10,000 Transactions - $30</option>
618
+ <option value="45">50,000 Transactions - $45</option>
619
+ </select>
620
+ </center>
621
+ </div>
622
+ <div class="mo2fa_dollar"> <center><span>$</span><span id="mo_pricing_adder"></span></center></div>
623
+
624
+ <div id="details">
625
+ <center>
626
+ <?php if( isset($is_customer_registered) && $is_customer_registered) { ?>
627
+ <a onclick="mo2f_upgradeform('wp_2fa_enterprise_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Proceed</button></a>
628
+ <?php }else{ ?>
629
+ <a onclick="mo2f_register_and_upgradeform('wp_2fa_enterprise_plan','2fa_plan')" target="blank"><button class="mo2fa_upgrade_my_plan">Proceed</button></a>
630
+ <?php }?>
631
+ </center>
632
+ </div>
633
+ </center>
634
+ </div>
635
+ </div>
636
+
637
+ <script>
638
+ var base_price =0;
639
+ var display_me = parseInt(base_price)+parseInt(30)+parseInt(0)+parseInt(0);
640
+ document.getElementById("mo_pricing_adder").innerHTML = + display_me;
641
+ jQuery('#user_price').click();
642
+ function update_user_limit() {
643
+ var users = document.getElementById("user_price").value;
644
+ var sms_user_selection= document.getElementById("sms_price").value;
645
+ var email_user_selection= document.getElementById("email_price").value;
646
+ var users_addion = parseInt(base_price)+parseInt(users)+parseInt(sms_user_selection)+parseInt(email_user_selection);
647
+
648
+ document.getElementById("mo_pricing_adder").innerHTML = + users_addion;
649
+
650
+ }
651
 
652
+ function update_sms_limit() {
653
+ var sms = document.getElementById("sms_price").value;
654
+ var users_sms_selection = document.getElementById("user_price").value;
655
+ var email_sms_selection= document.getElementById("email_price").value;
656
 
657
+ var sms_addion = parseInt(base_price)+parseInt(sms)+parseInt(users_sms_selection )+parseInt(email_sms_selection);
658
+
659
+ document.getElementById("mo_pricing_adder").innerHTML = + sms_addion;
660
+
661
+ }
662
+
663
+ function update_email_limit() {
664
+ var email= document.getElementById("email_price").value;
665
+ var users_email_selection = document.getElementById("user_price").value;
666
+ var sms_email_selection = document.getElementById("sms_price").value;
667
+ var email_addion = parseInt(base_price)+parseInt(email)+parseInt(users_email_selection)+parseInt(sms_email_selection);
668
+
669
+ document.getElementById("mo_pricing_adder").innerHTML = + email_addion;
670
+
671
+ }
672
+
673
+
674
+ </script>
675
+
676
+ </div>
677
+ </div>
678
+ <div id="mo2fa_compare">
679
+ <center>
680
+ <div class=""><a href="#details" onclick="mo2fa_show_details()"><button class="mo2fa_upgrade_my_plan mo2fa_compare1">Click here to Compare Features</button></a></div>
681
+ <div><a href="#details" onclick="mo2fa_show_details()"><button style="display: none;" class="mo2fa_upgrade_my_plan mo2fa_compare1">Click here to Hide Comparison</button></a></div>
682
+ </center>
683
+ </div>
684
+ <div id="mo_ns_features_only" style="display: none;">
685
+
686
+ <div class="mo_wpns_upgrade_security_title" >
687
  <div class="mo_wpns_upgrade_page_title_name">
688
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
689
  WAF</h1><hr class="mo_wpns_upgrade_page_hr"></div>
702
  <?php
703
  if(isset($is_customer_registered) && $is_customer_registered) {
704
  ?>
705
+ <button
706
+ class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
707
+ onclick="mo2f_upgradeform('wp_security_waf_plan','2fa_plan')">Upgrade</button>
708
+ <?php }
709
+
710
+
711
+ else{ ?>
712
+ <button
713
+ class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
714
+ onclick="mo2f_register_and_upgradeform('wp_security_waf_plan','2fa_plan')">Upgrade</button>
715
+ <?php }
716
+ ?>
717
  </div>
718
  <div><center><b>
719
  <ul>
728
  </div>
729
  </div>
730
  <div class="mo_wpns_upgrade_page_space_in_div"></div>
731
+ <div class="mo_wpns_upgrade_security_title" >
732
  <div class="mo_wpns_upgrade_page_title_name">
733
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
734
  Login and Spam</h1><hr class="mo_wpns_upgrade_page_hr"></div>
745
 
746
  <div style="text-align: center;">
747
  <?php if( isset($is_customer_registered)&& $is_customer_registered ) {
748
+ ?>
749
+ <button class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
750
+ onclick="mo2f_upgradeform('wp_security_login_and_spam_plan','2fa_plan')">Upgrade</button>
751
+ <?php }else{ ?>
752
+
753
+ <button class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
754
+ onclick="mo2f_register_and_upgradeform('wp_security_login_and_spam_plan','2fa_plan')">Upgrade</button>
755
+ <?php }
756
+ ?>
757
  </div>
758
  <div><center><b>
759
  <ul>
770
 
771
  </div>
772
  <div class="mo_wpns_upgrade_page_space_in_div"></div>
773
+ <div class="mo_wpns_upgrade_security_title" >
774
  <div class="mo_wpns_upgrade_page_title_name">
775
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
776
  Malware Scanner</h1><hr class="mo_wpns_upgrade_page_hr"></div>
786
  </center>
787
  <div style="text-align: center;">
788
  <?php if( isset($is_customer_registered) && $is_customer_registered) {
789
+ ?>
790
+ <button
791
+ class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
792
+ onclick="mo2f_upgradeform('wp_security_malware_plan','2fa_plan')">Upgrade</button>
793
+ <?php }else{ ?>
794
+
795
+ <button
796
+ class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
797
+ onclick="mo2f_register_and_upgradeform('wp_security_malware_plan','2fa_plan')">Upgrade</button>
798
+ <?php }
799
+ ?>
800
  </div>
801
  <div><center><b>
802
  <ul>
811
  </div>
812
  </div>
813
  <div class="mo_wpns_upgrade_page_space_in_div"></div>
814
+ <div class="mo_wpns_upgrade_security_title" >
815
  <div class="mo_wpns_upgrade_page_title_name">
816
  <h1 style="margin-top: 0%;padding: 10% 0% 0% 0%; color: white;font-size: 200%;">
817
  Encrypted Backup</h1><hr class="mo_wpns_upgrade_page_hr"></div>
828
  </center>
829
  <div style="text-align: center;">
830
  <?php if( isset($is_customer_registered) && $is_customer_registered) {
831
+ ?>
832
+ <button
833
+ class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
834
+ onclick="mo2f_upgradeform('wp_security_backup_plan','2fa_plan')">Upgrade</button>
835
+ <?php }else{ ?>
836
+ <button
837
+ class="mo_wpns_button mo_wpns_button1 mo_wpns_upgrade_page_button"
838
+ onclick="mo2f_register_and_upgradeform('wp_security_backup_plan' ,'2fa_plan')">Upgrade</button>
839
+ <?php }
840
+ ?>
841
 
842
  </div>
843
  <div><center><b>
852
  </b></center></div>
853
  </div></div>
854
  </div>
855
+ <center>
856
+ <br>
857
+ <div id="more_details" style="display:none;">
858
+ <div class="mo2fa_table-scrollbar"></br></br>
859
+ <table class="table mo2fa_table_features table-striped">
860
+ <caption class="pricing_head_mo_2fa"><h1>Feature Details</h1></caption>
861
+ <thead>
862
+ <tr class="mo2fa_main_category_header" style="font-size: 20px;">
863
+ <th scope="col">Features</th>
864
+ <th scope="col" class="mo2fa_plugins"><center>Premium Lite</center></th>
865
+ <th scope="col" class="mo2fa_plugins"><center>Premium</center></th>
866
+ <th scope="col" class="mo2fa_plugins"><center>Enterprise</center></th>
867
+ </tr>
868
+ </thead>
869
+ <tbody>
870
+ <tr>
871
+ <th scope="row">Unlimited Sites</th>
872
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
873
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
874
+ <td><center><i class="fas fa-check"></i></center></td>
875
+ </tr>
876
+
877
+ <tr>
878
+ <th scope="row">Unlimited Users</th>
879
+ <td><center><i class="fas fa-check"></i></center></td>
880
+ <td><center><i class="fas fa-check"></i></center></td>
881
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
882
+
883
+ </tr>
884
+ <tr class="bg_category_main_mo_2fa">
885
+ <th scope="row">Authentication Methods</th>
886
+ <td></td>
887
+ <td></td>
888
+ <td></td>
889
+ </tr>
890
+ <tr>
891
+ <th scope="row" class="category_feature_mo_2fa">Google Authenticator</th>
892
+ <td><center><i class="fas fa-check"></i></center></td>
893
+ <td><center><i class="fas fa-check"></i></center></td>
894
+ <td><center><i class="fas fa-check"></i></center></td>
895
+ </tr>
896
+ <tr>
897
+ <th scope="row" class="category_feature_mo_2fa">Security Questions</th>
898
+ <td><center><i class="fas fa-check"></i></center></td>
899
+ <td><center><i class="fas fa-check"></i></center></td>
900
+ <td><center><i class="fas fa-check"></i></center></td>
901
+
902
+ </tr>
903
+ <tr>
904
+ <th scope="row" class="category_feature_mo_2fa">TOTP Based Authenticator</th>
905
+ <td><center><i class="fas fa-check"></i></center></td>
906
+ <td><center><i class="fas fa-check"></i></center></td>
907
+ <td><center><i class="fas fa-check"></i></center></td>
908
+
909
+ </tr>
910
+ <tr>
911
+ <th scope="row" class="category_feature_mo_2fa">Authy Authenticator</th>
912
+ <td><center><i class="fas fa-check"></i></center></td>
913
+ <td><center><i class="fas fa-check"></i></center></td>
914
+ <td><center><i class="fas fa-check"></i></center></td>
915
+
916
+ </tr>
917
+ <tr>
918
+ <th scope="row" class="category_feature_mo_2fa">Email Verification</th>
919
+ <td><center><i class="fas fa-check"></i></center></td>
920
+ <td><center><i class="fas fa-check"></i></center></td>
921
+ <td><center><i class="fas fa-check"></i></center></td>
922
+
923
+ </tr>
924
+ <tr>
925
+ <th scope="row" class="category_feature_mo_2fa">OTP Over Email (Email Charges apply)</th>
926
+ <td><center><i class="fas fa-check"></i></center></td>
927
+ <td><center><i class="fas fa-check"></i></center></td>
928
+ <td><center><i class="fas fa-check"></i></center></td>
929
+
930
+
931
+ </tr>
932
+ <tr>
933
+ <th scope="row" class="category_feature_mo_2fa">OTP Over SMS (SMS Charges apply)</th>
934
+ <td><center><i class="fas fa-check"></i></center></td>
935
+ <td><center><i class="fas fa-check"></i></center></td>
936
+ <td><center><i class="fas fa-check"></i></center></td>
937
+
938
+ </tr>
939
+
940
+ <tr>
941
+ <th scope="row" class="category_feature_mo_2fa">miniOrange QR Code Authentication</th>
942
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
943
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
944
+ <td><center><i class="fas fa-check"></i></center></td>
945
+ </tr>
946
+ <tr>
947
+ <th scope="row" class="category_feature_mo_2fa">miniOrange Soft Token</th>
948
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
949
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
950
+ <td><center><i class="fas fa-check"></i></center></td>
951
+ </tr>
952
+ <tr>
953
+ <th scope="row" class="category_feature_mo_2fa">miniOrange Push Notification</th>
954
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
955
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
956
+ <td><center><i class="fas fa-check"></i></center></td>
957
+ </tr>
958
+ <tr>
959
+ <th scope="row" class="category_feature_mo_2fa">OTP Over SMS and Email (SMS and Email Charges apply)</th>
960
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
961
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
962
+ <td><center><i class="fas fa-check"></i></center></td>
963
+
964
+ </tr>
965
+ <tr>
966
+ <th scope="row" class="category_feature_mo_2fa">Hardware Token</th>
967
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
968
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
969
+ <td><center><i class="fas fa-check"></i></center></td>
970
+
971
+ </tr>
972
+ <tr>
973
+ <th scope="row" class="category_feature_mo_2fa">OTP Over Whatsapp (Add-on)</th>
974
+ <td><center><i class="fas fa-check"></i></center></td>
975
+ <td><center><i class="fas fa-check"></i></center></td>
976
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
977
+ </tr>
978
+ <tr>
979
+ <th scope="row" class="category_feature_mo_2fa">OTP Over Telegram</th>
980
+ <td><center><i class="fas fa-check"></i></center></td>
981
+ <td><center><i class="fas fa-check"></i></center></td>
982
+ <td><center><i class="fas fa-check"></i></center></td>
983
+ </tr>
984
+ <tr class="bg_category_main_mo_2fa">
985
+ <th scope="row">Backup Login Methods</th>
986
+ <td></td>
987
+ <td></td>
988
+ <td></td>
989
+ </tr>
990
+ <tr>
991
+ <th scope="row" class="category_feature_mo_2fa">Security Questions (KBA)</th>
992
+ <td><center><i class="fas fa-check"></i></center></td>
993
+ <td><center><i class="fas fa-check"></i></center></td>
994
+ <td><center><i class="fas fa-check"></i></center></td>
995
+ </tr>
996
+ <tr>
997
+ <th scope="row" class="category_feature_mo_2fa">OTP Over Email</th>
998
+ <td><center><i class="fas fa-check"></i></center></td>
999
+ <td><center><i class="fas fa-check"></i></center></td>
1000
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1001
+ </tr>
1002
+ <tr>
1003
+ <th scope="row" class="category_feature_mo_2fa">Backup Codes</th>
1004
+ <td><center><i class="fas fa-check"></i></center></td>
1005
+ <td><center><i class="fas fa-check"></i></center></td>
1006
+ <td><center><i class="fas fa-check"></i></center></td>
1007
+ </tr>
1008
+ <tr class="bg_category_main_mo_2fa">
1009
+ <th scope="row">Password Policy</th>
1010
+ <td></td>
1011
+ <td></td>
1012
+ <td></td>
1013
+
1014
+ </tr>
1015
+ <tr>
1016
+ <th scope="row" class="category_feature_mo_2fa">Passwordless Login</th>
1017
+ <td><center><i class="fas fa-check"></i></center></td>
1018
+ <td><center><i class="fas fa-check"></i></center></td>
1019
+ <td><center><i class="fas fa-check"></i></center></td>
1020
+ </tr>
1021
+ <tr>
1022
+ <th scope="row" class="category_feature_mo_2fa">Strong Password</th>
1023
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1024
+ <td><center><i class="fas fa-check"></i></center></td>
1025
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1026
+
1027
+ </tr>
1028
+ <tr>
1029
+ <th scope="row">Custom Gateway</th>
1030
+ <td><center><i class="fas fa-check"></i></center></td>
1031
+ <td><center><i class="fas fa-check"></i></center></td>
1032
+ <td><center><i class="fas fa-check"></i></center></td>
1033
+
1034
+ </tr>
1035
+ <tr class="bg_category_main_mo_2fa">
1036
+ <th scope="row">Add-Ons</th>
1037
+ <td></td>
1038
+ <td></td>
1039
+ <td></td>
1040
+
1041
+ </tr>
1042
+ <tr>
1043
+ <th scope="row" class="category_feature_mo_2fa">Remember Device Add-on</br><p class="description_mo_2fa">You can save your device using the Remember device addon and you will get a two-factor authentication </br>prompt to check your identity if you try to login from different devices.</p></th>
1044
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1045
+ <td><center><i class="fas fa-check"></i></center></td>
1046
+ <td><center><i class="fas fa-check"></i></center></td>
1047
+ </tr>
1048
+ <tr>
1049
+ <th scope="row" class="category_feature_mo_2fa">Personalization Add-on<p class="description_mo_2fa">You'll get many more customization options in Personalization, such as </br>ustom Email and SMS Template, Custom Login Popup, Custom Security Questions, and many more.</p></th>
1050
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1051
+ <td><center><i class="fas fa-check"></i></center></td>
1052
+ <td><center><i class="fas fa-check"></i></center></td>
1053
+ </tr>
1054
+ <tr>
1055
+ <th scope="row" class="category_feature_mo_2fa">Short Codes Add-on<p class="description_mo_2fa">Shortcode Add-ons mostly include Allow 2fa shortcode (you can use this this to add 2fa on any page), </br>Reconfigure 2fa add-on (you can use this add-on to reconfigure your 2fa if you have lost your 2fa verification ability), remember device shortcode.</p></th>
1056
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1057
+ <td><center><i class="fas fa-check"></i></center></td>
1058
+ <td><center><i class="fas fa-check"></i></center></td>
1059
+ </tr>
1060
+ <tr>
1061
+ <th scope="row" class="category_feature_mo_2fa">Session Management</th>
1062
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1063
+ <td><center><i class="fas fa-check"></i></center></td>
1064
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1065
+ </tr><tr>
1066
+ <th scope="row" class="category_feature_mo_2fa">Page Restriction Add-On</th>
1067
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1068
+ <td><center><i class="fas fa-check"></i></center></td>
1069
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1070
+ </tr><tr>
1071
+ <th scope="row" class="category_feature_mo_2fa">Attribute Based Redirection</th>
1072
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1073
+ <td><center><i class="fas fa-check"></i></center></td>
1074
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1075
+ </tr>
1076
+ <th scope="row" class="category_feature_mo_2fa">SCIM-User Provisioning</th>
1077
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1078
+ <td><center><i class="fas fa-check"></i></center></td>
1079
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1080
+ </tr>
1081
+
1082
+
1083
+ <tr class="bg_category_main_mo_2fa">
1084
+ <th scope="row">Advance Wordpress Login Settings</th>
1085
+ <td></td>
1086
+ <td></td>
1087
+ <td></td>
1088
+
1089
+ </tr>
1090
+ <tr>
1091
+ <th scope="row" class="category_feature_mo_2fa">Force Two Factor for Users</th>
1092
+ <td><center><i class="fas fa-check"></i></center></td>
1093
+ <td><center><i class="fas fa-check"></i></center></td>
1094
+ <td><center><i class="fas fa-check"></i></center></td>
1095
+ </tr>
1096
+ <tr>
1097
+ <th scope="row" class="category_feature_mo_2fa">Role Based and User Based Authentication settings</th>
1098
+ <td><center><i class="fas fa-check"></i></center></td>
1099
+ <td><center><i class="fas fa-check"></i></center></td>
1100
+ <td><center><i class="fas fa-check"></i></center></td>
1101
+ </tr>
1102
+ <tr>
1103
+ <th scope="row" class="category_feature_mo_2fa">Email Verififcation during Two-Factor Registration</th>
1104
+ <td><center><i class="fas fa-check"></i></center></td>
1105
+ <td><center><i class="fas fa-check"></i></center></td>
1106
+ <td><center><i class="fas fa-check"></i></center></td>
1107
+
1108
+ </tr>
1109
+ <tr>
1110
+ <th scope="row" class="category_feature_mo_2fa">Custom Redirect URL</th>
1111
+ <td><center><i class="fas fa-check"></i></center></td>
1112
+ <td><center><i class="fas fa-check"></i></center></td>
1113
+ <td><center><i class="fas fa-check"></i></center></td>
1114
+
1115
+ </tr><tr>
1116
+ <th scope="row" class="category_feature_mo_2fa">Inline Registration</th>
1117
+ <td><center><i class="fas fa-check"></i></center></td>
1118
+ <td><center><i class="fas fa-check"></i></center></td>
1119
+ <td><center><i class="fas fa-check"></i></center></td>
1120
+
1121
+ </tr><tr>
1122
+ <th scope="row" class="category_feature_mo_2fa">Mobile Support</th>
1123
+ <td><center><i class="fas fa-check"></i></center></td>
1124
+ <td><center><i class="fas fa-check"></i></center></td>
1125
+ <td><center><i class="fas fa-check"></i></center></td>
1126
+
1127
+ </tr><tr>
1128
+ <th scope="row" class="category_feature_mo_2fa">Privacy Policy Settings</th>
1129
+ <td><center><i class="fas fa-check"></i></center></td>
1130
+ <td><center><i class="fas fa-check"></i></center></td>
1131
+ <td><center><i class="fas fa-check"></i></center></td>
1132
+
1133
+ </tr><tr>
1134
+ <th scope="row" class="category_feature_mo_2fa">XML-RPC </th>
1135
+ <td><center><i class="fas fa-check"></i></center></td>
1136
+ <td><center><i class="fas fa-check"></i></center></td>
1137
+ <td><center><i class="fas fa-check"></i></center></td>
1138
+
1139
+ </tr>
1140
+ <tr class="bg_category_main_mo_2fa">
1141
+ <th scope="row">Advance Security Features</th>
1142
+ <td></td>
1143
+ <td></td>
1144
+ <td></td>
1145
+
1146
+ </tr>
1147
+ <tr>
1148
+ <th scope="row" class="category_feature_mo_2fa">Brute Force Protection</th>
1149
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1150
+ <td><center><i class="fas fa-check"></i></center></td>
1151
+ <td><center><i class="fas fa-check"></i></center></td>
1152
+
1153
+ </tr>
1154
+ <tr>
1155
+ <th scope="row" class="category_feature_mo_2fa">IP Blocking </th>
1156
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1157
+ <td><center><i class="fas fa-check"></i></center></td>
1158
+ <td><center><i class="fas fa-check"></i></center></td>
1159
+
1160
+ </tr>
1161
+ <tr>
1162
+ <th scope="row" class="category_feature_mo_2fa">Monitoring</th>
1163
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1164
+ <td><center><i class="fas fa-check"></i></center></td>
1165
+ <td><center><i class="fas fa-check"></i></center></td>
1166
+
1167
+ </tr> <tr>
1168
+ <th scope="row" class="category_feature_mo_2fa">File Protection</th>
1169
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1170
+ <td><center><i class="fas fa-check"></i></center></td>
1171
+ <td><center><i class="fas fa-check"></i></center></td>
1172
+
1173
+ </tr>
1174
+ <tr>
1175
+ <th scope="row" class="category_feature_mo_2fa">Country Blocking </th>
1176
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1177
+ <td><center><i class="fas fa-check"></i></center></td>
1178
+ <td><center><i class="fas fa-check"></i></center></td>
1179
+
1180
+ </tr>
1181
+ <tr>
1182
+ <th scope="row" class="category_feature_mo_2fa">HTACCESS Level Blocking </th>
1183
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1184
+ <td><center><i class="fas fa-check"></i></center></td>
1185
+ <td><center><i class="fas fa-check"></i></center></td>
1186
+
1187
+ </tr>
1188
+ <tr>
1189
+ <th scope="row" class="category_feature_mo_2fa">Browser Blocking </th>
1190
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1191
+ <td><center><i class="fas fa-check"></i></center></td>
1192
+ <td><center><i class="fas fa-check"></i></center></td>
1193
+
1194
+ </tr>
1195
+ <tr>
1196
+ <th scope="row" class="category_feature_mo_2fa">Block Global Blacklisted Email Domains</th>
1197
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1198
+ <td><center><i class="fas fa-check"></i></center></td>
1199
+ <td><center><i class="fas fa-check"></i></center></td>
1200
+
1201
+ </tr>
1202
+ <tr>
1203
+ <th scope="row" class="category_feature_mo_2fa">Manual Block Email Domains</th>
1204
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1205
+ <td><center><i class="fas fa-check"></i></center></td>
1206
+ <td><center><i class="fas fa-check"></i></center></td>
1207
+
1208
+ </tr>
1209
+ <tr>
1210
+ <th scope="row" class="category_feature_mo_2fa">DB Backup</th>
1211
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1212
+ <td><center><i class="fas fa-check"></i></center></td>
1213
+ <td><center><i class="fas fa-check"></i></center></td>
1214
+
1215
+ </tr>
1216
+ <tr>
1217
+ <th scope="row">Multi-Site Support</th>
1218
+ <td><center><i class="fas fa-check"></i></center></td>
1219
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1220
+ <td><center><i class="fas fa-times mo2fa_hide"></i></center></td>
1221
+ </tr><tr>
1222
+ <th scope="row">Language Translation Support</th>
1223
+ <td><center><i class="fas fa-check"></i></center></td>
1224
+ <td><center><i class="fas fa-check"></i></center></td>
1225
+ <td><center><i class="fas fa-check"></i></center></td>
1226
+
1227
+ </tr><tr>
1228
+ <th scope="row">Get online support with GoTo/Zoom meeting</th>
1229
+ <td><center><i class="fas fa-check"></i></center></td>
1230
+ <td><center><i class="fas fa-check"></i></center></td>
1231
+ <td><center><i class="fas fa-check"></i></center></td>
1232
+
1233
+ </tr>
1234
+ </tbody>
1235
+ </table>
1236
+ </div>
1237
+ </div>
1238
+ </center>
1239
+ <div class="mo_wpns_setting_layout mo2fa_setting_layout">
1240
+ <div>
1241
+ <h2><?php echo mo2f_lt('Steps to upgrade to the Premium Plan :');?></h2>
1242
+ <ol class="mo2f_licensing_plans_ol">
1243
+ <li><?php echo mo2f_lt( 'Click on <b>Proceed</b>/<b>Upgrade</b> button of your preferred plan above.' ); ?></li>
1244
+ <li><?php echo mo2f_lt( ' You will be redirected to the miniOrange Console. Enter your miniOrange username and password, after which you will be redirected to the payment page.' ); ?></li>
1245
+
1246
+ <li><?php echo mo2f_lt( 'Select the number of users/sites you wish to upgrade for, and any add-ons if you wish to purchase, and make the payment.' ); ?></li>
1247
+ <li><?php echo mo2f_lt( 'After making the payment, you can find the Premium Lite/Premium/Enterprise plugin to download from the <b>License</b> tab in the left navigation bar of the miniOrange Console.' ); ?></li>
1248
+ <li><?php echo mo2f_lt( 'Download the paid plugin from the <b>Releases and Downloads</b> tab through miniOrange Console .' ); ?></li>
1249
+ <li><?php echo mo2f_lt( 'Deactivate and delete the free plugin from <b>WordPress dashboard</b> and install the paid plugin downloaded.' ); ?></li>
1250
+ <li><?php echo mo2f_lt( 'Login to the paid plugin with the miniOrange account you used to make the payment, after this your users will be able to set up 2FA.' ); ?></li>
1251
+ </ol>
1252
  </div>
1253
+ <hr>
1254
+ <div>
1255
+ <h2><?php echo mo2f_lt('Note :');?></h2>
1256
+ <ol class="mo2f_licensing_plans_ol">
1257
+ <li><?php echo mo2f_lt( 'The plugin works with many of the default custom login forms (like Woocommerce/Theme My Login/Login With Ajax/User Pro/Elementor), however if you face any issues with your custom login form, contact us and we will help you with it.' ); ?></li>
1258
+ <li><?php echo mo2f_lt( 'The <b>license key </b>is required to activate the <b>Premium Lite/Premium</b> Plugins. You will have to login with the miniOrange Account you used to make the purchase then enter license key to activate plugin.' ); ?>
1259
+
1260
+ </li>
1261
+ </ol>
1262
+ </div>
1263
+ <hr>
1264
+ <br>
1265
+ <div>
1266
+ <?php echo mo2f_lt( '<b class="mo2fa_note">Refund Policy : </b>At miniOrange, we want to ensure you are 100% happy with your purchase. If the premium plugin you purchased is not working as advertised and you\'ve attempted to resolve any issues with our support team, which couldn\'t get resolved then we will refund the whole amount within 10 days of the purchase. ' ); ?>
1267
+ </div>
1268
+ <br>
1269
+ <hr>
1270
+ <br>
1271
+ <div><?php echo mo2f_lt( '<b class="mo2fa_note">SMS Charges : </b>If you wish to choose OTP Over SMS/OTP Over SMS and Email as your authentication method,
1272
+ SMS transaction prices & SMS delivery charges apply and they depend on country. SMS validity is for lifetime.' ); ?>
1273
+ </div>
1274
+ <br>
1275
+ <hr>
1276
+ <br>
1277
+ <div>
1278
+ <?php echo mo2f_lt( '<b class="mo2fa_note">Multisite : </b>For your first license 3 subsites will be activated automatically on the same domain. And if you wish to use it for more please contact support ' ); ?>
1279
+ </div>
1280
+ <br>
1281
+ <hr>
1282
+ <br>
1283
+ <div>
1284
+ <?php echo mo2f_lt( '<b class="mo2fa_note">Privacy Policy : </b><a href="https://www.miniorange.com/2-factor-authentication-for-wordpress-gdpr">Click Here</a>
1285
+ to read our Privacy Policy.' ); ?>
1286
+ </div>
1287
+ <br>
1288
+ <hr>
1289
+ <br>
1290
+ <div>
1291
+ <?php echo mo2f_lt( '<b class="mo2fa_note">Contact Us : </b>If you have any doubts regarding the licensing plans, you can mail us at <a href="mailto:info@xecurify.com"><i>info@xecurify.com</i></a>
1292
+ or submit a query using the support form.' ); ?>
1293
+ </div>
1294
+ </div>
1295
+ </center>
1296
+ <div id="mo2f_payment_option" class="mo_wpns_setting_layout mo2fa_setting_layout">
1297
+ <div>
1298
+ <h3>Supported Payment Methods</h3><hr>
1299
+ <div class="mo_2fa_container">
1300
+ <div class="mo_2fa_card-deck">
1301
+ <div class="mo_2fa_card mo_2fa_animation">
1302
+ <div class="mo_2fa_Card-header">
1303
+ <?php
1304
+ echo'<img src="'.dirname(plugin_dir_url(__FILE__)).'/includes/images/card.png" class="mo2fa_card">';?>
1305
+ </div>
1306
+ <hr class="mo2fa_hr">
1307
+ <div class="mo_2fa_card-body">
1308
+ <p class="mo2fa_payment_p">If payment is done through Credit Card/Intenational debit card, the license would be created automatically once payment is completed. </p>
1309
+ <p class="mo2fa_payment_p"><i><b>For guide
1310
+ <?php echo'<a href='.MoWpnsConstants::FAQ_PAYMENT_URL.' target="blank">Click Here.</a>';?></b></i></p>
1311
 
1312
+ </div>
1313
+ </div>
1314
+ <div class="mo_2fa_card mo_2fa_animation">
1315
+ <div class="mo_2fa_Card-header">
1316
+ <?php
1317
+ echo'<img src="'.dirname(plugin_dir_url(__FILE__)).'/includes/images/paypal.png" class="mo2fa_card">';?>
1318
+ </div>
1319
+ <hr class="mo2fa_hr">
1320
+ <div class="mo_2fa_card-body">
1321
+ <?php echo'<p class="mo2fa_payment_p">Use the following PayPal id for payment via PayPal.</p><p><i><b style="color:#1261d8"><a href="mailto:'.MoWpnsConstants::SUPPORT_EMAIL.'">info@xecurify.com</a></b></i>';?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1322
 
1323
+ </div>
1324
+ </div>
1325
+ <div class="mo_2fa_card mo_2fa_animation">
1326
+ <div class="mo_2fa_Card-header">
1327
+ <?php
1328
+ echo'<img src="'.dirname(plugin_dir_url(__FILE__)).'/includes/images/bank-transfer.png" class="mo2fa_card mo2fa_bank_transfer">';?>
1329
+
1330
+ </div>
1331
+ <hr class="mo2fa_hr">
1332
+ <div class="mo_2fa_card-body">
1333
+ <?php echo'<p class="mo2fa_payment_p">If you want to use Bank Transfer for payment then contact us at <i><b style="color:#1261d8"><a href="mailto:'.MoWpnsConstants::SUPPORT_EMAIL.'">info@xecurify.com</a></b></i> so that we can provide you bank details. </i></p>';?>
1334
+ </div>
1335
+ </div>
1336
+ </div>
1337
+ </div>
1338
+ <div class="mo_2fa_mo-supportnote">
1339
+ <p class="mo2fa_payment_p"><b>Note :</b> Once you have paid through PayPal/Bank Transfer, please inform us at <i><b style="color:#1261d8"><a href="mailto:'.MoWpnsConstants::SUPPORT_EMAIL.'">info@xecurify.com</a></b></i>, so that we can confirm and update your License.</p>
1340
+ </div>
1341
+ </div>
1342
+ </div>
 
 
 
1343
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1344
 
 
 
 
 
 
 
 
 
 
 
 
 
1345
  <?php
 
1346
  function mo2f_waf_yearly_standard_pricing() {
1347
  ?>
1348
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1349
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1350
 
1351
+ <select id="mo2f_yearly" class="form-control mo2fa_form_control1">
1352
+ <option> <?php echo mo2f_lt( '1 site - $50 per year' ); ?> </option>
1353
+ <option> <?php echo mo2f_lt( 'Upto 5 sites - $100 per year' ); ?> </option>
1354
+ <option> <?php echo mo2f_lt( 'Upto 10 sites - $150 per year' ); ?> </option>
1355
+
1356
+ </select>
1357
+ </p>
1358
 
1359
  <?php
1360
  }
1363
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1364
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1365
 
1366
+ <select id="mo2f_yearly" class="form-control mo2fa_form_control1">
1367
+ <option> <?php echo mo2f_lt( '1 site - $15 per year' ); ?> </option>
1368
+ <option> <?php echo mo2f_lt( 'Upto 5 sites - $35 per year' ); ?> </option>
1369
+ <option> <?php echo mo2f_lt( 'Upto 10 sites - $60 per year' ); ?> </option>
1370
+
1371
+ </select>
1372
+ </p>
1373
 
1374
  <?php
1375
  }
1378
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1379
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1380
 
1381
+ <select id="mo2f_yearly" class="form-control mo2fa_form_control1">
1382
+ <option> <?php echo mo2f_lt( '1 site - $30 per year' ); ?> </option>
1383
+ <option> <?php echo mo2f_lt( 'Upto 5 sites - $50 per year' ); ?> </option>
1384
+ <option> <?php echo mo2f_lt( 'Upto 10 sites - $70 per year' ); ?> </option>
1385
+
1386
+ </select>
1387
+ </p>
1388
 
1389
  <?php
1390
  }
1393
  <p class="mo2f_pricing_text mo_wpns_upgrade_page_starting_price"
1394
  id="mo2f_yearly_sub"><?php echo __( 'Yearly Subscription Fees', 'miniorange-2-factor-authentication' ); ?><br>
1395
 
1396
+ <select id="mo2f_yearly" class="form-control mo2fa_form_control1">
1397
+ <option> <?php echo mo2f_lt( '1 site - $15 per year' ); ?> </option>
1398
+ <option> <?php echo mo2f_lt( 'Upto 5 sites - $35 per year' ); ?> </option>
1399
+ <option> <?php echo mo2f_lt( 'Upto 10 sites - $60 per year' ); ?> </option>
1400
+
1401
+ </select>
1402
+ </p>
1403
 
1404
  <?php
1405
  }
1407
  function mo2f_get_binary_equivalent_2fa_lite( $mo2f_var ) {
1408
  switch ( $mo2f_var ) {
1409
  case 1:
1410
+ return "<div style='color: #20b2aa;font-size: x-large;float:left;margin:0px 5px;'>🗸</div>";
1411
  case 0:
1412
+ return "<div style='color: red;font-size: x-large;float:left;margin:0px 5px;'>×</div>";
1413
  default:
1414
  return $mo2f_var;
1415
  }
1466
  jQuery.post(ajaxurl, data, function(response) {
1467
  });
1468
  }
1469
+ function show_2fa_plans()
1470
  {
1471
+ document.getElementById('mo_ns_features_only').style.display = "none";
1472
+ document.getElementById('mo2f_twofa_plans').style.display = "flex";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1473
  document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "none";
1474
+ document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "block";
1475
+ document.getElementById('mo_ns_licensing_plans_title').style.display = "block";
1476
+ document.getElementById('mo_ns_licensing_plans_title1').style.display = "none";
1477
+ document.getElementById('mo2fa_compare').style.display = "block";
1478
  }
 
1479
  function mo_ns_show_plans()
1480
  {
1481
  document.getElementById('mo_ns_features_only').style.display = "block";
1482
+ document.getElementById('mo2f_twofa_plans').style.display = "none";
 
 
 
 
 
 
1483
  document.getElementById('mo_2fa_lite_licensing_plans_title').style.display = "block";
1484
+ document.getElementById('mo_2fa_lite_licensing_plans_title1').style.display = "none";
1485
+ document.getElementById('mo_ns_licensing_plans_title').style.display = "none";
1486
+ document.getElementById('mo_ns_licensing_plans_title1').style.display = "block";
1487
+ document.getElementById('mo2fa_compare').style.display = "none";
1488
  }
1489
 
1490
  function wpns_pricing()
1492
  window.open("https://security.miniorange.com/pricing/");
1493
  }
1494
 
1495
+ function mo2fa_show_details()
1496
+ {
1497
+ jQuery('#more_details').toggle();
1498
+ jQuery('.mo2fa_more_details_p1').toggle();
1499
+ jQuery('.mo2fa_more_details_p').toggle();
1500
+ jQuery('.mo2fa_compare1').toggle();
1501
+ }
1502
+
1503
  </script>
1504
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
1505
  <script>
1506
  $(document).ready(function(){
1507
 
 
 
 
1508
 
1509
+
 
 
1510
 
1511
  });
1512
  </script>