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

Version Description

  • Google Authenticator (2FA) : Updated the new Authenticator App's link and the 'How to Setup Tab' tab.
Download this release

Release Info

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

Code changes from version 4.4.9 to 4.5.1

class-miniorange-2-factor-pass2fa-login.php CHANGED
@@ -385,7 +385,7 @@ class Miniorange_Password_2Factor_Login{
385
  unset($_SESSION[ 'mo2f-login-qrCode' ]);
386
  unset($_SESSION[ 'mo2f-login-transactionId' ]);
387
  $redirect_to = isset($_POST[ 'redirect_to' ]) ? $_POST[ 'redirect_to' ] : null;
388
- $mo2fa_login_message = 'Please enter the one time passcode shown in the <b>miniOrange Authenticator</b> app.';
389
  $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN';
390
  $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to);
391
  }
@@ -677,7 +677,7 @@ class Miniorange_Password_2Factor_Login{
677
 
678
  function mo2f_pass2login_otp_verification($user,$mo2f_second_factor, $redirect_to){
679
  if($mo2f_second_factor == 'SOFT TOKEN'){
680
- $mo2fa_login_message = 'Please enter the one time passcode shown in the <b>miniOrange Authenticator</b> app.';
681
  $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN';
682
  $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to);
683
  }else if($mo2f_second_factor == 'GOOGLE AUTHENTICATOR'){
@@ -776,7 +776,7 @@ class Miniorange_Password_2Factor_Login{
776
  unset($_SESSION[ 'mo2f-login-qrCode' ]);
777
  unset($_SESSION[ 'mo2f-login-transactionId' ]);
778
 
779
- $mo2fa_login_message = 'Please enter the one time passcode shown in the <b>miniOrange Authenticator</b> app.';
780
  $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN';
781
  $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to);
782
  }else{
385
  unset($_SESSION[ 'mo2f-login-qrCode' ]);
386
  unset($_SESSION[ 'mo2f-login-transactionId' ]);
387
  $redirect_to = isset($_POST[ 'redirect_to' ]) ? $_POST[ 'redirect_to' ] : null;
388
+ $mo2fa_login_message = 'Please enter the one time passcode shown in the miniOrange<b> Authenticator</b> app.';
389
  $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN';
390
  $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to);
391
  }
677
 
678
  function mo2f_pass2login_otp_verification($user,$mo2f_second_factor, $redirect_to){
679
  if($mo2f_second_factor == 'SOFT TOKEN'){
680
+ $mo2fa_login_message = 'Please enter the one time passcode shown in the miniOrange<b> Authenticator</b> app.';
681
  $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN';
682
  $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to);
683
  }else if($mo2f_second_factor == 'GOOGLE AUTHENTICATOR'){
776
  unset($_SESSION[ 'mo2f-login-qrCode' ]);
777
  unset($_SESSION[ 'mo2f-login-transactionId' ]);
778
 
779
+ $mo2fa_login_message = 'Please enter the one time passcode shown in the miniOrange<b> Authenticator</b> app.';
780
  $mo2fa_login_status = 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN';
781
  $this->miniorange_pass2login_form_fields($mo2fa_login_status, $mo2fa_login_message, $redirect_to);
782
  }else{
miniorange_2_factor_common_login.php CHANGED
@@ -1,968 +1,954 @@
1
  <?php
2
-
3
- function mo2f_collect_device_attributes_handler($redirect_to = null){
4
- ?>
5
- <html>
6
- <head>
7
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
8
- <meta name="viewport" content="width=device-width, initial-scale=1">
9
- <?php
10
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
11
- ?>
12
- </head>
13
- <body>
14
- <div style="text-align:center;">
15
- <form id="morba_loginform" method="post" >
16
- <h1>Please wait...</h1>
17
- <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif' , __FILE__ );?>" />
18
- <?php
19
- if(get_site_option('mo2f_deviceid_enabled')){
20
- ?>
21
- <p><input type="hidden" id="miniorange_rba_attribures" name="miniorange_rba_attribures" value="" /></p>
22
- <?php
23
- echo '<script src="' . plugins_url('includes/js/rba/js/jquery-1.9.1.js', __FILE__ ) . '" ></script>';
24
- echo '<script src="' . plugins_url('includes/js/rba/js/jquery.flash.js', __FILE__ ) . '" ></script>';
25
- echo '<script src="' . plugins_url('includes/js/rba/js/ua-parser.js', __FILE__ ) . '" ></script>';
26
- echo '<script src="' . plugins_url('includes/js/rba/js/client.js', __FILE__ ) . '" ></script>';
27
- echo '<script src="' . plugins_url('includes/js/rba/js/device_attributes.js', __FILE__ ) . '" ></script>';
28
- echo '<script src="' . plugins_url('includes/js/rba/js/swfobject.js', __FILE__ ) . '" ></script>';
29
- echo '<script src="' . plugins_url('includes/js/rba/js/fontdetect.js', __FILE__ ) . '" ></script>';
30
- echo '<script src="' . plugins_url('includes/js/rba/js/murmurhash3.js', __FILE__ ) . '" ></script>';
31
- echo '<script src="' . plugins_url('includes/js/rba/js/miniorange-fp.js', __FILE__ ) . '" ></script>';
32
- }
33
- ?>
34
- <input type="hidden" name="miniorange_attribute_collection_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-login-attribute-collection-nonce'); ?>" />
35
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
36
- </form>
37
- </div>
38
- </body>
39
- </html>
40
- <?php
41
- }
42
-
43
- function miniorange_get_user_role($current_user){
44
- $current_roles = array();
45
- $current_roles = $current_user->roles;
46
- return $current_roles;
47
- }
48
-
49
- function miniorange_check_if_2fa_enabled_for_roles($current_roles){
50
- if(empty($current_roles)){
51
- return 0;
52
- }
53
-
54
- foreach( $current_roles as $value )
55
- {
56
- if(get_site_option('mo2fa_'.$value))
57
- {
58
- return 1;
59
- }
60
- }
61
- return 0;
62
- }
63
-
64
- function redirect_user_to($user, $redirect_to){
65
-
66
- $roles = $user->roles;
67
- $current_role = array_shift($roles);
68
- $redirectUrl = isset($redirect_to) && !empty($redirect_to) ? $redirect_to : null;
69
- if($current_role == 'administrator'){
70
- $redirectUrl = empty($redirectUrl) ? admin_url() : $redirectUrl;
71
- wp_redirect( $redirectUrl );
72
- }else{
73
- $redirectUrl = empty($redirectUrl) ? home_url() : $redirectUrl;
74
- wp_redirect( $redirectUrl);
75
- }
76
- }
77
-
78
-
79
-
80
- function mo2f_register_profile($email,$deviceKey,$mo2f_rba_status){
81
-
82
- if(isset($deviceKey) && $deviceKey == 'true'){
83
- if($mo2f_rba_status['status'] == 'WAIT_FOR_INPUT' && $mo2f_rba_status['decision_flag']){
84
- $rba_profile = new Miniorange_Rba_Attributes();
85
- $rba_response = json_decode($rba_profile->mo2f_register_rba_profile($email,$mo2f_rba_status['sessionUuid']),true); //register profile
86
- return true;
87
- }else{
88
- return false;
89
- }
90
- }
91
- return false;
92
- }
93
-
94
- function mo2f_collect_attributes($email,$attributes){
95
- if(get_option('mo2f_deviceid_enabled')){
96
- $rba_attributes = new Miniorange_Rba_Attributes();
97
- $rba_response = json_decode($rba_attributes->mo2f_collect_attributes($email,$attributes),true); //collect rba attributes
98
- if(json_last_error() == JSON_ERROR_NONE){
99
- if($rba_response['status'] == 'SUCCESS'){ //attribute are collected successfully
100
- $sessionUuid = $rba_response['sessionUuid'];
101
- $rba_risk_response = json_decode($rba_attributes->mo2f_evaluate_risk($email,$sessionUuid),true); // evaluate the rba risk
102
- if(json_last_error() == JSON_ERROR_NONE){
103
- if($rba_risk_response['status'] == 'SUCCESS' || $rba_risk_response['status'] == 'WAIT_FOR_INPUT'){
104
- $mo2f_rba_status = array();
105
- $mo2f_rba_status['status'] = $rba_risk_response['status'];
106
- $mo2f_rba_status['sessionUuid'] = $sessionUuid;
107
- $mo2f_rba_status['decision_flag'] = true;
108
- return $mo2f_rba_status;
109
- }else{
110
- $mo2f_rba_status = array();
111
- $mo2f_rba_status['status'] = $rba_risk_response['status'];
112
- $mo2f_rba_status['sessionUuid'] = $sessionUuid;
113
- $mo2f_rba_status['decision_flag'] = false;
114
- return $mo2f_rba_status;
115
- }
116
- }else{
117
- $mo2f_rba_status = array();
118
- $mo2f_rba_status['status'] = 'JSON_EVALUATE_ERROR';
119
- $mo2f_rba_status['sessionUuid'] = $sessionUuid;
120
- $mo2f_rba_status['decision_flag'] = false;
121
- return $mo2f_rba_status;
122
- }
123
- }else{
124
- $mo2f_rba_status = array();
125
- $mo2f_rba_status['status'] = 'ATTR_NOT_COLLECTED';
126
- $mo2f_rba_status['sessionUuid'] = '';
127
- $mo2f_rba_status['decision_flag'] = false;
128
- return $mo2f_rba_status;
129
- }
130
- }else{
131
- $mo2f_rba_status = array();
132
- $mo2f_rba_status['status'] = 'JSON_ATTR_NOT_COLLECTED';
133
- $mo2f_rba_status['sessionUuid'] = '';
134
- $mo2f_rba_status['decision_flag'] = false;
135
- return $mo2f_rba_status;
136
- }
137
- }else{
138
- $mo2f_rba_status = array();
139
- $mo2f_rba_status['status'] = 'RBA_NOT_ENABLED';
140
- $mo2f_rba_status['sessionUuid'] = '';
141
- $mo2f_rba_status['decision_flag'] = false;
142
- return $mo2f_rba_status;
143
- }
144
- }
145
-
146
- function mo2f_get_user_2ndfactor($current_user){
147
- if(get_user_meta($current_user->ID,'mo_2factor_mobile_registration_status',true) == 'MO_2_FACTOR_SUCCESS'){
148
- $mo2f_second_factor = 'MOBILE AUTHENTICATION';
149
- }else{
150
- $enduser = new Two_Factor_Setup();
151
- $userinfo = json_decode($enduser->mo2f_get_userinfo(get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true)),true);
152
- if(json_last_error() == JSON_ERROR_NONE){
153
- if($userinfo['status'] == 'ERROR'){
154
- $mo2f_second_factor = 'NONE';
155
- }else if($userinfo['status'] == 'SUCCESS'){
156
- $mo2f_second_factor = $userinfo['authType'];
157
- }else if($userinfo['status'] == 'FAILED'){
158
- $mo2f_second_factor = 'USER_NOT_FOUND';
159
- }else{
160
- $mo2f_second_factor = 'NONE';
161
- }
162
- }else{
163
- $mo2f_second_factor = 'NONE';
164
- }
165
- }
166
- return $mo2f_second_factor;
167
- }
168
-
169
- function mo2f_customize_logo(){
170
-
171
- if(get_option('mo2f_disable_poweredby') != 1 ){
172
-
173
- if(get_option('mo2f_enable_custom_poweredby')==1) { ?>
174
-
175
- <div style="float:right;" ><img alt="logo" src="<?php echo plugins_url('/includes/images/custom.png',__FILE__); ?>" /></div>
176
-
177
- <?php }else { ?>
178
-
179
- <div style="float:right;" ><a target="_blank" href="http://miniorange.com/2-factor-authentication"><img alt="logo" src="<?php echo plugins_url('/includes/images/miniOrange2.png',__FILE__); ?>" /></a></div>
180
-
181
- <?php }
182
-
183
- }
184
-
185
- }
186
-
187
- function mo2f_get_forgotphone_form($login_status, $login_message, $redirect_to){
188
- ?>
189
- <html>
190
- <head>
191
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
192
- <meta name="viewport" content="width=device-width, initial-scale=1">
193
- <?php
194
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
195
- echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
196
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
197
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
198
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
199
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
200
- ?>
201
- </head>
202
- <body>
203
- <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
204
- <div class="mo2f-modal-backdrop"></div>
205
- <div class="mo2f_modal-dialog mo2f_modal-md">
206
- <div class="mo2f_modal-content">
207
- <div class="mo2f_modal-header">
208
- <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
209
- How would you like to authenticate yourself</h4>
210
- </div>
211
- <div class="mo2f_modal-body">
212
- <?php if(get_option( 'mo2f_enable_forgotphone' )) {
213
- if(isset($login_message) && !empty($login_message)){ ?>
214
- <div id="otpMessage">
215
- <p class="mo2fa_display_message_frontend" ><?php echo $login_message; ?></p>
216
- </div>
217
- <?php } ?>
218
- <p style="padding-left:10px;padding-right:10px;"><?php echo 'Please choose the options from below:'; ?></p>
219
- <div style="padding-left:10px;padding-right:40px;">
220
- <?php if(get_option( 'mo2f_enable_forgotphone_email' )) {?>
221
- <input type="radio" name="mo2f_selected_forgotphone_option" value="OTP OVER EMAIL" checked="ckecked" />Send a one time passcode to my registered email<br /><br />
222
- <?php }
223
- if(get_option( 'mo2f_enable_forgotphone_kba' )) {
224
- ?>
225
- <input type="radio" name="mo2f_selected_forgotphone_option" value="KBA" />Answer your Security Questions (KBA)
226
- <?php } ?>
227
- <br /><br />
228
- <input type="button" name="miniorange_validtae_otp" value="Continue" class="miniorange-button" onclick="mo2fselectforgotphoneoption();" />
229
- </div>
230
- <?php mo2f_customize_logo();
231
- }
232
- ?>
233
- </div>
234
- </div>
235
- </div>
236
- </div>
237
- <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
238
- <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
239
- </form>
240
- <form name="f" id="mo2f_challenge_forgotphone_form" method="post" action="" style="display:none;">
241
- <input type="hidden" name="mo2f_selected_2factor_method" />
242
- <input type="hidden" name="miniorange_challenge_forgotphone_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-challenge-forgotphone-nonce'); ?>" />
243
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
244
- </form>
245
- </body>
246
- <script>
247
- function mologinback(){
248
- jQuery('#mo2f_backto_mo_loginform').submit();
249
- }
250
- function mo2fselectforgotphoneoption(){
251
- var option = jQuery('input[name=mo2f_selected_forgotphone_option]:checked').val();
252
- document.getElementById("mo2f_challenge_forgotphone_form").elements[0].value = option;
253
- jQuery('#mo2f_challenge_forgotphone_form').submit();
254
- }
255
- </script>
256
- </html>
257
- <?php }
258
-
259
- function mo2f_getkba_form($login_status, $login_message, $redirect_to){
260
- ?>
261
-
262
- <html>
263
- <head>
264
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
265
- <meta name="viewport" content="width=device-width, initial-scale=1">
266
- <?php
267
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
268
- echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
269
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
270
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
271
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
272
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
273
- ?>
274
- </head>
275
-
276
- <body>
277
-
278
- <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
279
- <div class="mo2f-modal-backdrop"></div>
280
- <div class="mo2f_modal-dialog mo2f_modal-md">
281
- <div class="mo2f_modal-content">
282
- <div class="mo2f_modal-header">
283
- <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
284
- Validate Security Questions</h4>
285
- </div>
286
- <div class="mo2f_modal-body">
287
- <div id="kbaSection" style="padding-left:10px;padding-right:10px;">
288
- <div id="otpMessage">
289
- <p style="font-size:15px;"><?php echo (isset($login_message) && !empty($login_message)) ? $login_message : 'Please answer the following questions:'; ?></p>
290
- </div>
291
- <form name="f" id="mo2f_submitkba_loginform" method="post" action="">
292
- <div id="mo2f_kba_content">
293
- <p style="font-size:15px;">
294
- <?php if(isset($_SESSION['mo_2_factor_kba_questions'])){
295
- echo $_SESSION['mo_2_factor_kba_questions'][0];
296
- ?><br />
297
- <input class="mo2f-textbox" type="text" name="mo2f_answer_1" id="mo2f_answer_1" required="true" autofocus="true" pattern="(?=\S)[A-Za-z0-9_@.$#&amp;+-\s]{1,100}" title="Only alphanumeric letters with special characters(_@.$#&amp;+-) are allowed." autocomplete="off" ><br />
298
- <?php
299
- echo $_SESSION['mo_2_factor_kba_questions'][1];
300
- ?><br />
301
- <input class="mo2f-textbox" type="text" name="mo2f_answer_2" id="mo2f_answer_2" required="true" pattern="(?=\S)[A-Za-z0-9_@.$#&amp;+-\s]{1,100}" title="Only alphanumeric letters with special characters(_@.$#&amp;+-) are allowed." autocomplete="off">
302
- <?php
303
- }
304
- ?>
305
- </p>
306
- </div>
307
-
308
-
309
-
310
-
311
- <?php if(get_option('mo2f_login_policy')){
312
- if(get_option('mo2f_deviceid_enabled')){
313
- ?>
314
- <span style="float:left; font-size:15px;padding-right:10px;"><input style="vertical-align:text-top;" type="checkbox" name="mo2f_trust_device" id="mo2f_trust_device" />Remember this device.</span><br /><br />
315
- <?php
316
- }
317
- }
318
- ?>
319
- <input type="submit" name="miniorange_kba_validate" id="miniorange_kba_validate" class="miniorange-button" style="float:left;" value="Validate" />
320
- <input type="hidden" name="miniorange_kba_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-kba-nonce'); ?>" />
321
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
322
- </form>
323
-
324
- </div>
325
- <?php mo2f_customize_logo() ?>
326
- </div>
327
-
328
- </div>
329
- </div>
330
- </div>
331
-
332
- <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
333
- <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
334
- </form>
335
- </body>
336
-
337
- <script>
338
-
339
- function mologinback(){
340
- jQuery('#mo2f_backto_mo_loginform').submit();
341
- }
342
-
343
-
344
- </script>
345
- <?php
346
- }
347
-
348
- function mo2f_getpush_oobemail_response($id, $login_status, $login_message, $redirect_to){
349
- ?>
350
-
351
- <html>
352
- <head>
353
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
354
- <meta name="viewport" content="width=device-width, initial-scale=1">
355
- <?php
356
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
357
- echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
358
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
359
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
360
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
361
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
362
- ?>
363
- </head>
364
- <body>
365
- <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
366
- <div class="mo2f-modal-backdrop"></div>
367
- <div class="mo2f_modal-dialog mo2f_modal-md">
368
- <div class="mo2f_modal-content">
369
- <div class="mo2f_modal-header">
370
- <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
371
- Accept Your Transaction</h4>
372
- </div>
373
- <div class="mo2f_modal-body">
374
- <?php if(isset($login_message) && !empty($login_message)){ ?>
375
- <div id="otpMessage">
376
- <p class="mo2fa_display_message_frontend" ><?php echo $login_message; ?></p>
377
- </div>
378
- <?php } ?>
379
- <div id="pushSection">
380
- <center><a href="#showPushHelp" id="pushHelpLink"><h3>See How It Works ?</h3></a></center>
381
- <div>
382
- <center>
383
- <h3>Waiting for your approval...</h3>
384
- </center>
385
- </div>
386
-
387
- <div id="showPushImage">
388
- <center>
389
- <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif' , __FILE__ );?>" />
390
- </center>
391
- </div>
392
-
393
- <span style="padding-right:2%;">
394
- <?php if(isset($login_status) && $login_status == 'MO_2_FACTOR_CHALLENGE_PUSH_NOTIFICATIONS'){ ?>
395
- <center>
396
- <?php if(get_option('mo2f_enable_forgotphone')){ ?>
397
- <input type="button" name="miniorange_login_forgotphone" onclick="mologinforgotphone();" id="miniorange_login_forgotphone" class="miniorange-button" value="Forgot Phone?" />
398
- <?php } ?>
399
-
400
- <input type="button" name="miniorange_login_offline" onclick="mologinoffline();" id="miniorange_login_offline" class="miniorange-button" value="Phone is Offline?" /></center>
401
-
402
- <?php }else if(isset($login_status) && $login_status == 'MO_2_FACTOR_CHALLENGE_OOB_EMAIL' && get_option('mo2f_enable_forgotphone') && get_user_meta($id,'mo2f_kba_registration_status',true)){ ?>
403
- <center><a href="#mo2f_alternate_login_kba" ><h3>Didn't receive mail?</h3></a></center>
404
- <?php }?>
405
- </span>
406
- </div>
407
- <div id="showPushHelp" class="showPushHelp" hidden>
408
- <center><a href="#showPushHelp" id="pushLink"><h3>←Go Back.</h3></a>
409
- <br>
410
- <div id="myCarousel" class="mo2f_carousel slide" data-ride="carousel">
411
- <ol class="mo2f_carousel-indicators">
412
- <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
413
- <li data-target="#myCarousel" data-slide-to="1"></li>
414
- <li data-target="#myCarousel" data-slide-to="2"></li>
415
- </ol>
416
- <div class="mo2f_carousel-inner" role="listbox">
417
- <?php if($login_status == 'MO_2_FACTOR_CHALLENGE_OOB_EMAIL') { ?>
418
- <div class="item active">
419
-
420
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/email-with-link-login-flow-1.png" alt="First slide">
421
- </div>
422
- <div class="item">
423
- <p>Click on Accept Transaction link to verify your email .</p><br>
424
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/email-with-link-login-flow-2.png" alt="First slide">
425
-
426
- </div>
427
- <div class="item">
428
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/email-with-link-login-flow-3.png" alt="First slide">
429
- </div>
430
- <?php } else { ?>
431
- <!-- Indicators -->
432
-
433
-
434
- <div class="item active">
435
- <p>You will receive a notification on your phone.</p><br>
436
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/push-login-flow.png" alt="First slide">
437
- </div>
438
- <div class="item">
439
- <p>Open the notification and click on accept button.</p><br>
440
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/push-login-flow-1.png" alt="First slide">
441
-
442
- </div>
443
- <div class="item">
444
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/push-login-flow-2.png" alt="First slide">
445
- </div>
446
- <?php } ?>
447
- </div>
448
- </div>
449
- </center>
450
- </div>
451
- <?php mo2f_customize_logo() ?>
452
- </div>
453
- </div>
454
- </div>
455
- </div>
456
- <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
457
- <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
458
- </form>
459
- <form name="f" id="mo2f_mobile_validation_form" method="post" action="" style="display:none;">
460
- <input type="hidden" name="miniorange_mobile_validation_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-nonce'); ?>" />
461
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
462
- </form>
463
- <form name="f" id="mo2f_show_softtoken_loginform" method="post" action="" style="display:none;">
464
- <input type="hidden" name="miniorange_softtoken" value="<?php echo wp_create_nonce('miniorange-2-factor-softtoken'); ?>" />
465
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
466
- </form>
467
- <form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" style="display:none;">
468
- <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
469
- <input type="hidden" name="miniorange_forgotphone" value="<?php echo wp_create_nonce('miniorange-2-factor-forgotphone'); ?>" />
470
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
471
- </form>
472
- <form name="f" id="mo2f_alternate_login_kbaform" method="post" action="" style="display:none;">
473
- <input type="hidden" name="miniorange_alternate_login_kba_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-alternate-login-kba-nonce'); ?>" />
474
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
475
- </form>
476
- </body>
477
- <script>
478
- var timeout;
479
- pollPushValidation();
480
- function pollPushValidation()
481
- {
482
- var transId = "<?php echo $_SESSION[ 'mo2f-login-transactionId' ]; ?>";
483
- var jsonString = "{\"txId\":\""+ transId + "\"}";
484
- var postUrl = "<?php echo get_option('mo2f_host_name'); ?>" + "/moas/api/auth/auth-status";
485
-
486
- jQuery.ajax({
487
- url: postUrl,
488
- type : "POST",
489
- dataType : "json",
490
- data : jsonString,
491
- contentType : "application/json; charset=utf-8",
492
- success : function(result) {
493
- var status = JSON.parse(JSON.stringify(result)).status;
494
- if (status == 'SUCCESS') {
495
- jQuery('#mo2f_mobile_validation_form').submit();
496
- } else if (status == 'ERROR' || status == 'FAILED' || status == 'DENIED') {
497
- jQuery('#mo2f_backto_mo_loginform').submit();
498
- } else {
499
- timeout = setTimeout(pollPushValidation, 3000);
500
- }
501
- }
502
- });
503
- }
504
- jQuery('#myCarousel').carousel('pause');
505
- jQuery('#pushHelpLink').click(function() {
506
- jQuery('#showPushHelp').show();
507
- jQuery('#pushSection').hide();
508
- jQuery('#otpMessage').hide();
509
- jQuery('#myCarousel').carousel(0);
510
- });
511
- jQuery('#pushLink').click(function() {
512
- jQuery('#showPushHelp').hide();
513
- jQuery('#pushSection').show();
514
- jQuery('#otpMessage').show();
515
- jQuery('#myCarousel').carousel('pause');
516
- });
517
- function mologinback(){
518
- jQuery('#mo2f_backto_mo_loginform').submit();
519
- }
520
- function mologinoffline(){
521
- jQuery('#mo2f_show_softtoken_loginform').submit();
522
- }
523
- function mologinforgotphone(){
524
- jQuery('#mo2f_show_forgotphone_loginform').submit();
525
- }
526
- jQuery('a[href="#mo2f_alternate_login_kba"]').click(function() {
527
- jQuery('#mo2f_alternate_login_kbaform').submit();
528
- });
529
-
530
- </script>
531
- </html>
532
- <?php
533
- }
534
-
535
- function mo2f_getqrcode($login_status, $login_message, $redirect_to){
536
- ?>
537
- <html>
538
- <head>
539
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
540
- <meta name="viewport" content="width=device-width, initial-scale=1">
541
- <?php
542
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
543
- echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
544
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
545
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
546
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
547
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
548
- ?>
549
- </head>
550
- <body>
551
- <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
552
- <div class="mo2f-modal-backdrop"></div>
553
- <div class="mo2f_modal-dialog mo2f_modal-md">
554
- <div class="mo2f_modal-content">
555
- <div class="mo2f_modal-header">
556
- <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
557
- Scan QR Code</h4>
558
- </div>
559
- <div class="mo2f_modal-body center">
560
- <?php if(isset($login_message) && !empty($login_message)){ ?>
561
- <div id="otpMessage">
562
- <p class="mo2fa_display_message_frontend" style="text-align: left !important;" ><?php echo $login_message; ?></p>
563
- </div>
564
- <br />
565
- <?php } ?>
566
-
567
- <div id="scanQRSection">
568
- <center><a href="#showQRHelp" id="helpLink"><h3>See How It Works ?</h3></a></center>
569
- <div style="margin-bottom:10%;">
570
- <center>
571
- <h3>Identify yourself by scanning the QR code with miniOrange Authenticator app.</h3>
572
- </center>
573
- </div>
574
-
575
- <div id="showQrCode" style="margin-bottom:10%;">
576
- <center><?php echo '<img src="data:image/jpg;base64,' . $_SESSION[ 'mo2f-login-qrCode' ] . '" />'; ?></center>
577
- </div>
578
-
579
- <span style="padding-right:2%;">
580
- <center>
581
- <?php if(get_option('mo2f_enable_forgotphone')){ ?>
582
- <input type="button" name="miniorange_login_forgotphone" onclick="mologinforgotphone();" id="miniorange_login_forgotphone" class="miniorange-button" style="margin-right:5%;" value="Forgot Phone?" />
583
- <?php } ?>
584
-
585
- <input type="button" name="miniorange_login_offline" onclick="mologinoffline();" id="miniorange_login_offline" class="miniorange-button" value="Phone is Offline?" />
586
- </center>
587
- </span>
588
- </div>
589
- <div id="showQRHelp" class="showQRHelp" hidden>
590
- <center><a href="#showQRHelp" id="qrLink"><h3>←Back to Scan QR Code.</h3></a>
591
- <div id="myCarousel" class="mo2f_carousel slide" data-ride="carousel">
592
- <!-- Indicators -->
593
- <ol class="mo2f_carousel-indicators">
594
- <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
595
- <li data-target="#myCarousel" data-slide-to="1"></li>
596
- <li data-target="#myCarousel" data-slide-to="2"></li>
597
- <li data-target="#myCarousel" data-slide-to="3"></li>
598
- <li data-target="#myCarousel" data-slide-to="4"></li>
599
- </ol>
600
- <div class="mo2f_carousel-inner" role="listbox">
601
- <div class="item active">
602
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
603
- </div>
604
- <div class="item">
605
- <p>Open miniOrange Authenticator app and click on Authenticate.</p><br>
606
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.png" alt="First slide">
607
-
608
- </div>
609
- <div class="item">
610
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-3.png" alt="First slide">
611
- </div>
612
- <div class="item">
613
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-4.png" alt="First slide">
614
- </div>
615
- <div class="item">
616
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-5.png" alt="First slide">
617
- </div>
618
- </div>
619
- </div>
620
- </center>
621
- </div>
622
- <?php mo2f_customize_logo() ?>
623
- </div>
624
- </div>
625
- </div>
626
- </div>
627
- <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
628
- <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
629
- </form>
630
- <form name="f" id="mo2f_mobile_validation_form" method="post" action="" style="display:none;">
631
- <input type="hidden" name="miniorange_mobile_validation_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-nonce'); ?>" />
632
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
633
- </form>
634
- <form name="f" id="mo2f_show_softtoken_loginform" method="post" action="" style="display:none;">
635
- <input type="hidden" name="miniorange_softtoken" value="<?php echo wp_create_nonce('miniorange-2-factor-softtoken'); ?>" />
636
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
637
- </form>
638
- <form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" style="display:none;">
639
- <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
640
- <input type="hidden" name="miniorange_forgotphone" value="<?php echo wp_create_nonce('miniorange-2-factor-forgotphone'); ?>" />
641
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
642
- </form>
643
- </body>
644
- <script>
645
- var timeout;
646
- pollMobileValidation();
647
- function pollMobileValidation()
648
- {
649
- var transId = "<?php echo $_SESSION[ 'mo2f-login-transactionId' ]; ?>";
650
- var jsonString = "{\"txId\":\""+ transId + "\"}";
651
- var postUrl = "<?php echo get_option('mo2f_host_name'); ?>" + "/moas/api/auth/auth-status";
652
- jQuery.ajax({
653
- url: postUrl,
654
- type : "POST",
655
- dataType : "json",
656
- data : jsonString,
657
- contentType : "application/json; charset=utf-8",
658
- success : function(result) {
659
- var status = JSON.parse(JSON.stringify(result)).status;
660
- if (status == 'SUCCESS') {
661
- var content = "<div id='success'><center><img src='" + "<?php echo plugins_url( 'includes/images/right.png' , __FILE__ );?>" + "' /></center></div>";
662
- jQuery("#showQrCode").empty();
663
- jQuery("#showQrCode").append(content);
664
- setTimeout(function(){jQuery("#mo2f_mobile_validation_form").submit();}, 100);
665
- } else if (status == 'ERROR' || status == 'FAILED') {
666
- var content = "<div id='error'><center><img src='" + "<?php echo plugins_url( 'includes/images/wrong.png' , __FILE__ );?>" + "' /></center></div>";
667
- jQuery("#showQrCode").empty();
668
- jQuery("#showQrCode").append(content);
669
- setTimeout(function(){jQuery('#mo2f_backto_mo_loginform').submit();}, 1000);
670
- } else {
671
- timeout = setTimeout(pollMobileValidation, 3000);
672
- }
673
- }
674
- });
675
- }
676
- jQuery('#myCarousel').carousel('pause');
677
- jQuery('#helpLink').click(function() {
678
- jQuery('#showQRHelp').show();
679
- jQuery('#scanQRSection').hide();
680
-
681
- jQuery('#myCarousel').carousel(0);
682
- });
683
- jQuery('#qrLink').click(function() {
684
- jQuery('#showQRHelp').hide();
685
- jQuery('#scanQRSection').show();
686
- jQuery('#myCarousel').carousel('pause');
687
- });
688
- function mologinback(){
689
- jQuery('#mo2f_backto_mo_loginform').submit();
690
- }
691
- function mologinoffline(){
692
- jQuery('#mo2f_show_softtoken_loginform').submit();
693
- }
694
- function mologinforgotphone(){
695
- jQuery('#mo2f_show_forgotphone_loginform').submit();
696
- }
697
- </script>
698
- </html>
699
- <?php
700
- }
701
-
702
- function mo2f_getotp_form($login_status, $login_message, $redirect_to){
703
- ?>
704
- <html>
705
- <head>
706
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
707
- <meta name="viewport" content="width=device-width, initial-scale=1">
708
- <?php
709
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
710
- echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
711
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
712
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
713
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
714
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
715
- ?>
716
- </head>
717
- <body>
718
- <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
719
- <div class="mo2f-modal-backdrop"></div>
720
- <div class="mo2f_modal-dialog mo2f_modal-md">
721
- <div class="mo2f_modal-content">
722
- <div class="mo2f_modal-header">
723
- <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
724
- Validate OTP</h4>
725
- </div>
726
- <div class="mo2f_modal-body center">
727
- <?php if(isset($login_message) && !empty($login_message)){ ?>
728
- <div id="otpMessage">
729
- <p class="mo2fa_display_message_frontend" style="text-align: left !important;" ><?php echo $login_message; ?></p>
730
- </div>
731
- <?php } ?>
732
- <br />
733
- <div id="showOTP">
734
- <div class="mo2f-login-container">
735
- <?php if($login_status != 'MO_2_FACTOR_CHALLENGE_GOOGLE_AUTHENTICATION'){ ?>
736
- <a href="#showOTPHelp" id="otpHelpLink" class="mo2f-link">See How It Works ?</a><br />
737
- <?php } ?>
738
- <form name="f" id="mo2f_submitotp_loginform" method="post" action="">
739
- <input type="text" name="mo2fa_softtoken" style="height:28px !important;" placeholder="Enter one time passcode" id="mo2fa_softtoken" required="true" class="mo2f-textbox" autofocus="true" pattern="[0-9]{4,8}" title="Only digits within range 4-8 are allowed."/>
740
- <br />
741
- <input type="submit" name="miniorange_soft_token_submit" id="miniorange_soft_token_submit" class="miniorange-button" value="Validate" />
742
- <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
743
- <input type="hidden" name="miniorange_soft_token_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-soft-token-nonce'); ?>" />
744
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
745
- </form>
746
- <?php if(get_option('mo2f_enable_forgotphone') && isset($login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL'){ ?>
747
- <a name="miniorange_login_forgotphone" onclick="mologinforgotphone();" id="miniorange_login_forgotphone" class="mo2f-link" >Forgot Phone ?</a>
748
- <?php } ?>
749
- </div>
750
- </div>
751
- <div id="showOTPHelp" class="showOTPHelp" hidden>
752
- <br>
753
- <center><a href="#showOTP" id="otpLink" class="mo2f-link">←Go Back</a>
754
- <br>
755
- <div id="myCarousel" class="mo2f_carousel slide" data-ride="carousel">
756
- <!-- Indicators -->
757
-
758
- <?php if($login_status == 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN'){ ?>
759
- <ol class="mo2f_carousel-indicators">
760
- <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
761
- <li data-target="#myCarousel" data-slide-to="1"></li>
762
- <li data-target="#myCarousel" data-slide-to="2"></li>
763
- <li data-target="#myCarousel" data-slide-to="3"></li>
764
-
765
- </ol>
766
- <div class="mo2f_carousel-inner" role="listbox">
767
-
768
-
769
- <div class="item active">
770
- <p>Open miniOrange Authenticator app and click on settings icon on top right corner.</p><br>
771
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.png" alt="First slide">
772
- </div>
773
- <div class="item">
774
- <p>Click on Sync button below to sync your time with miniOrange Servers. This is a one time sync to avoid otp validation failure.</p><br>
775
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-3.png" alt="First slide">
776
- </div>
777
- <div class="item">
778
- <p>Go to Soft Token tab.</p><br>
779
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-2.png" alt="First slide">
780
- </div>
781
- <div class="item">
782
- <p>Enter the one time passcode shown in miniOrange Authenticator app here.</p><br>
783
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-4.png" alt="First slide">
784
- </div>
785
- </div>
786
- <?php } else if($login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL') { ?>
787
- <ol class="mo2f_carousel-indicators">
788
- <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
789
- <li data-target="#myCarousel" data-slide-to="1"></li>
790
- <li data-target="#myCarousel" data-slide-to="2"></li>
791
-
792
- </ol>
793
- <div class="mo2f_carousel-inner" role="listbox">
794
- <div class="item active">
795
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-1.png" alt="First slide">
796
- </div>
797
- <div class="item">
798
- <p>Check your email with which you registered and copy the one time passcode.</p><br>
799
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-2.png" alt="First slide">
800
- </div>
801
- <div class="item">
802
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-3.png" alt="First slide">
803
- </div>
804
- </div>
805
- <?php } else if($login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_SMS') { ?>
806
- <ol class="mo2f_carousel-indicators">
807
- <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
808
- <li data-target="#myCarousel" data-slide-to="1"></li>
809
- <li data-target="#myCarousel" data-slide-to="2"></li>
810
-
811
- </ol>
812
- <div class="mo2f_carousel-inner" role="listbox">
813
- <div class="item active">
814
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-over-sms-login-flow-1.png" alt="First slide">
815
- </div>
816
- <div class="item">
817
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-over-sms-login-flow-2.png" alt="First slide">
818
- </div>
819
- <div class="item">
820
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-over-sms-login-flow-3.png" alt="First slide">
821
- </div>
822
- </div>
823
- <?php } else { ?>
824
- <!-- phone call verification -->
825
- <ol class="mo2f_carousel-indicators">
826
- <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
827
- <li data-target="#myCarousel" data-slide-to="1"></li>
828
-
829
-
830
- </ol>
831
- <div class="mo2f_carousel-inner" role="listbox">
832
- <div class="item active">
833
- <p>You will receive a phone call. Pick up the call and listen to the one time passcode carefully. </p>
834
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/phone-call-login-flow-2.png" alt="First slide">
835
- </div>
836
- <div class="item">
837
- <p>Enter the one time passcode here and click on validate button to login.</p><br>
838
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/phone-call-login-flow.png" alt="First slide">
839
- </div>
840
-
841
- </div>
842
- <?php } ?>
843
-
844
- </div>
845
- </div>
846
- <?php mo2f_customize_logo() ?>
847
- </div>
848
- </div>
849
- </div>
850
- </div>
851
- <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
852
- <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
853
- </form>
854
- <?php if(get_option('mo2f_enable_forgotphone') && isset($login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL'){ ?>
855
- <form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" style="display:none;">
856
- <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
857
- <input type="hidden" name="miniorange_forgotphone" value="<?php echo wp_create_nonce('miniorange-2-factor-forgotphone'); ?>" />
858
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
859
- </form>
860
- <?php } ?>
861
- </body>
862
- <script>
863
- jQuery('#otpHelpLink').click(function() {
864
- jQuery('#showOTPHelp').show();
865
- jQuery('#showOTP').hide();
866
- jQuery('#otpMessage').hide();
867
- });
868
- jQuery('#otpLink').click(function() {
869
- jQuery('#showOTPHelp').hide();
870
- jQuery('#showOTP').show();
871
- jQuery('#otpMessage').show();
872
- });
873
-
874
- function mologinback(){
875
- jQuery('#mo2f_backto_mo_loginform').submit();
876
- }
877
- function mologinforgotphone(){
878
- jQuery('#mo2f_show_forgotphone_loginform').submit();
879
- }
880
- </script>
881
- </html>
882
-
883
- <?php
884
- }
885
-
886
-
887
- function mo2f_get_device_form($login_status, $login_message, $redirect_to){
888
- ?>
889
- <html>
890
- <head>
891
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
892
- <meta name="viewport" content="width=device-width, initial-scale=1">
893
- <?php
894
- echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
895
- echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
896
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
897
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
898
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
899
- echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
900
- ?>
901
- </head>
902
- <body>
903
- <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
904
- <div class="mo2f-modal-backdrop"></div>
905
- <div class="mo2f_modal-dialog mo2f_modal-md">
906
- <div class="mo2f_modal-content">
907
- <div class="mo2f_modal-header">
908
- <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
909
- Remember Device</h4>
910
- </div>
911
- <div class="mo2f_modal-body center">
912
- <div id="mo2f_device_content">
913
-
914
- <h3>Do you want to remember this device?</h3>
915
-
916
- <input type="button" name="miniorange_trust_device_yes" onclick="mo_check_device_confirm();" id="miniorange_trust_device_yes" class="mo_green" style="margin-right:5%;" value="Yes" />
917
-
918
- <input type="button" name="miniorange_trust_device_no" onclick="mo_check_device_cancel();" id="miniorange_trust_device_no" class="mo_red" value="No" />
919
-
920
- </div>
921
- <div id="showLoadingBar" hidden>
922
-
923
- <h3>Please wait...We are taking you into your account.</h3>
924
-
925
- <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif' , __FILE__ );?>" />
926
-
927
- </div>
928
- <br /><br />
929
-
930
- <span>
931
- Click on <i><b>Yes</b></i> if this is your personal device.<br />
932
- Click on <i><b>No</b></i> if this is a public device.
933
- </span><br /><br />
934
- <?php mo2f_customize_logo() ?>
935
- </div>
936
- </div>
937
- </div>
938
- </div>
939
- <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
940
- <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
941
- </form>
942
- <form name="f" id="mo2f_trust_device_confirm_form" method="post" action="" style="display:none;">
943
- <input type="hidden" name="mo2f_trust_device_confirm_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-trust-device-confirm-nonce'); ?>" />
944
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
945
- </form>
946
- <form name="f" id="mo2f_trust_device_cancel_form" method="post" action="" style="display:none;">
947
- <input type="hidden" name="mo2f_trust_device_cancel_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-trust-device-cancel-nonce'); ?>" />
948
- <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
949
- </form>
950
- <script>
951
- function mologinback(){
952
- jQuery('#mo2f_backto_mo_loginform').submit();
953
- }
954
- function mo_check_device_confirm(){
955
- jQuery('#mo2f_device_content').hide();
956
- jQuery('#showLoadingBar').show();
957
- jQuery('#mo2f_trust_device_confirm_form').submit();
958
- }
959
- function mo_check_device_cancel(){
960
- jQuery('#mo2f_device_content').hide();
961
- jQuery('#showLoadingBar').show();
962
- jQuery('#mo2f_trust_device_cancel_form').submit();
963
- }
964
- </script>
965
- </body>
966
- </html>
967
- <?php }
968
- ?>
1
  <?php
2
+ function mo2f_collect_device_attributes_handler($redirect_to = null){
3
+ ?>
4
+ <html>
5
+ <head>
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <?php
9
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
10
+ ?>
11
+ </head>
12
+ <body>
13
+ <div style="text-align:center;">
14
+ <form id="morba_loginform" method="post" >
15
+ <h1>Please wait...</h1>
16
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif' , __FILE__ );?>" />
17
+ <?php
18
+ if(get_site_option('mo2f_deviceid_enabled')){
19
+ ?>
20
+ <p><input type="hidden" id="miniorange_rba_attribures" name="miniorange_rba_attribures" value="" /></p>
21
+ <?php
22
+ echo '<script src="' . plugins_url('includes/js/rba/js/jquery-1.9.1.js', __FILE__ ) . '" ></script>';
23
+ echo '<script src="' . plugins_url('includes/js/rba/js/jquery.flash.js', __FILE__ ) . '" ></script>';
24
+ echo '<script src="' . plugins_url('includes/js/rba/js/ua-parser.js', __FILE__ ) . '" ></script>';
25
+ echo '<script src="' . plugins_url('includes/js/rba/js/client.js', __FILE__ ) . '" ></script>';
26
+ echo '<script src="' . plugins_url('includes/js/rba/js/device_attributes.js', __FILE__ ) . '" ></script>';
27
+ echo '<script src="' . plugins_url('includes/js/rba/js/swfobject.js', __FILE__ ) . '" ></script>';
28
+ echo '<script src="' . plugins_url('includes/js/rba/js/fontdetect.js', __FILE__ ) . '" ></script>';
29
+ echo '<script src="' . plugins_url('includes/js/rba/js/murmurhash3.js', __FILE__ ) . '" ></script>';
30
+ echo '<script src="' . plugins_url('includes/js/rba/js/miniorange-fp.js', __FILE__ ) . '" ></script>';
31
+ }
32
+ ?>
33
+ <input type="hidden" name="miniorange_attribute_collection_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-login-attribute-collection-nonce'); ?>" />
34
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
35
+ </form>
36
+ </div>
37
+ </body>
38
+ </html>
39
+ <?php
40
+ }
41
+
42
+ function miniorange_get_user_role($current_user){
43
+ $current_roles = array();
44
+ $current_roles = $current_user->roles;
45
+ return $current_roles;
46
+ }
47
+
48
+ function miniorange_check_if_2fa_enabled_for_roles($current_roles){
49
+ if(empty($current_roles)){
50
+ return 0;
51
+ }
52
+
53
+ foreach( $current_roles as $value )
54
+ {
55
+ if(get_site_option('mo2fa_'.$value))
56
+ {
57
+ return 1;
58
+ }
59
+ }
60
+ return 0;
61
+ }
62
+
63
+ function redirect_user_to($user, $redirect_to){
64
+
65
+ $roles = $user->roles;
66
+ $current_role = array_shift($roles);
67
+ $redirectUrl = isset($redirect_to) && !empty($redirect_to) ? $redirect_to : null;
68
+ if($current_role == 'administrator'){
69
+ $redirectUrl = empty($redirectUrl) ? admin_url() : $redirectUrl;
70
+ wp_redirect( $redirectUrl );
71
+ }else{
72
+ $redirectUrl = empty($redirectUrl) ? home_url() : $redirectUrl;
73
+ wp_redirect( $redirectUrl);
74
+ }
75
+ }
76
+
77
+
78
+
79
+ function mo2f_register_profile($email,$deviceKey,$mo2f_rba_status){
80
+
81
+ if(isset($deviceKey) && $deviceKey == 'true'){
82
+ if($mo2f_rba_status['status'] == 'WAIT_FOR_INPUT' && $mo2f_rba_status['decision_flag']){
83
+ $rba_profile = new Miniorange_Rba_Attributes();
84
+ $rba_response = json_decode($rba_profile->mo2f_register_rba_profile($email,$mo2f_rba_status['sessionUuid']),true); //register profile
85
+ return true;
86
+ }else{
87
+ return false;
88
+ }
89
+ }
90
+ return false;
91
+ }
92
+
93
+ function mo2f_collect_attributes($email,$attributes){
94
+ if(get_option('mo2f_deviceid_enabled')){
95
+ $rba_attributes = new Miniorange_Rba_Attributes();
96
+ $rba_response = json_decode($rba_attributes->mo2f_collect_attributes($email,$attributes),true); //collect rba attributes
97
+ if(json_last_error() == JSON_ERROR_NONE){
98
+ if($rba_response['status'] == 'SUCCESS'){ //attribute are collected successfully
99
+ $sessionUuid = $rba_response['sessionUuid'];
100
+ $rba_risk_response = json_decode($rba_attributes->mo2f_evaluate_risk($email,$sessionUuid),true); // evaluate the rba risk
101
+ if(json_last_error() == JSON_ERROR_NONE){
102
+ if($rba_risk_response['status'] == 'SUCCESS' || $rba_risk_response['status'] == 'WAIT_FOR_INPUT'){
103
+ $mo2f_rba_status = array();
104
+ $mo2f_rba_status['status'] = $rba_risk_response['status'];
105
+ $mo2f_rba_status['sessionUuid'] = $sessionUuid;
106
+ $mo2f_rba_status['decision_flag'] = true;
107
+ return $mo2f_rba_status;
108
+ }else{
109
+ $mo2f_rba_status = array();
110
+ $mo2f_rba_status['status'] = $rba_risk_response['status'];
111
+ $mo2f_rba_status['sessionUuid'] = $sessionUuid;
112
+ $mo2f_rba_status['decision_flag'] = false;
113
+ return $mo2f_rba_status;
114
+ }
115
+ }else{
116
+ $mo2f_rba_status = array();
117
+ $mo2f_rba_status['status'] = 'JSON_EVALUATE_ERROR';
118
+ $mo2f_rba_status['sessionUuid'] = $sessionUuid;
119
+ $mo2f_rba_status['decision_flag'] = false;
120
+ return $mo2f_rba_status;
121
+ }
122
+ }else{
123
+ $mo2f_rba_status = array();
124
+ $mo2f_rba_status['status'] = 'ATTR_NOT_COLLECTED';
125
+ $mo2f_rba_status['sessionUuid'] = '';
126
+ $mo2f_rba_status['decision_flag'] = false;
127
+ return $mo2f_rba_status;
128
+ }
129
+ }else{
130
+ $mo2f_rba_status = array();
131
+ $mo2f_rba_status['status'] = 'JSON_ATTR_NOT_COLLECTED';
132
+ $mo2f_rba_status['sessionUuid'] = '';
133
+ $mo2f_rba_status['decision_flag'] = false;
134
+ return $mo2f_rba_status;
135
+ }
136
+ }else{
137
+ $mo2f_rba_status = array();
138
+ $mo2f_rba_status['status'] = 'RBA_NOT_ENABLED';
139
+ $mo2f_rba_status['sessionUuid'] = '';
140
+ $mo2f_rba_status['decision_flag'] = false;
141
+ return $mo2f_rba_status;
142
+ }
143
+ }
144
+
145
+ function mo2f_get_user_2ndfactor($current_user){
146
+ if(get_user_meta($current_user->ID,'mo_2factor_mobile_registration_status',true) == 'MO_2_FACTOR_SUCCESS'){
147
+ $mo2f_second_factor = 'MOBILE AUTHENTICATION';
148
+ }else{
149
+ $enduser = new Two_Factor_Setup();
150
+ $userinfo = json_decode($enduser->mo2f_get_userinfo(get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true)),true);
151
+ if(json_last_error() == JSON_ERROR_NONE){
152
+ if($userinfo['status'] == 'ERROR'){
153
+ $mo2f_second_factor = 'NONE';
154
+ }else if($userinfo['status'] == 'SUCCESS'){
155
+ $mo2f_second_factor = $userinfo['authType'];
156
+ }else if($userinfo['status'] == 'FAILED'){
157
+ $mo2f_second_factor = 'USER_NOT_FOUND';
158
+ }else{
159
+ $mo2f_second_factor = 'NONE';
160
+ }
161
+ }else{
162
+ $mo2f_second_factor = 'NONE';
163
+ }
164
+ }
165
+ return $mo2f_second_factor;
166
+ }
167
+
168
+ function mo2f_customize_logo(){
169
+
170
+ if(get_option('mo2f_disable_poweredby') != 1 ){
171
+
172
+ if(get_option('mo2f_enable_custom_poweredby')==1) { ?>
173
+ <div style="float:right;" ><img alt="logo" src="<?php echo plugins_url('/includes/images/custom.png',__FILE__); ?>" /></div>
174
+ <?php }else { ?>
175
+ <div style="float:right;" ><a target="_blank" href="http://miniorange.com/2-factor-authentication"><img alt="logo" src="<?php echo plugins_url('/includes/images/miniOrange2.png',__FILE__); ?>" /></a></div>
176
+ <?php }
177
+ }
178
+
179
+ }
180
+
181
+ function mo2f_get_forgotphone_form($login_status, $login_message, $redirect_to){
182
+ ?>
183
+ <html>
184
+ <head>
185
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
186
+ <meta name="viewport" content="width=device-width, initial-scale=1">
187
+ <?php
188
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
189
+ echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
190
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
191
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
192
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
193
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
194
+ ?>
195
+ </head>
196
+ <body>
197
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
198
+ <div class="mo2f-modal-backdrop"></div>
199
+ <div class="mo2f_modal-dialog mo2f_modal-md">
200
+ <div class="mo2f_modal-content">
201
+ <div class="mo2f_modal-header">
202
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
203
+ How would you like to authenticate yourself?
204
+ </h4>
205
+ </div>
206
+ <div class="mo2f_modal-body">
207
+ <?php if(get_option( 'mo2f_enable_forgotphone' )) {
208
+ if(isset($login_message) && !empty($login_message)){ ?>
209
+ <div id="otpMessage">
210
+ <p class="mo2fa_display_message_frontend" ><?php echo $login_message; ?></p>
211
+ </div>
212
+ <?php } ?>
213
+ <p style="padding-left:10px;padding-right:10px;"><?php echo 'Please choose the options from below:'; ?></p>
214
+ <div style="padding-left:10px;padding-right:40px;">
215
+ <?php if(get_option( 'mo2f_enable_forgotphone_email' )) {?>
216
+ <input type="radio" name="mo2f_selected_forgotphone_option" value="OTP OVER EMAIL" checked="ckecked" />Send a one time passcode to my registered email<br /><br />
217
+ <?php }
218
+ if(get_option( 'mo2f_enable_forgotphone_kba' )) {
219
+ ?>
220
+ <input type="radio" name="mo2f_selected_forgotphone_option" value="KBA" />Answer your Security Questions (KBA)
221
+ <?php } ?>
222
+ <br /><br />
223
+ <input type="button" name="miniorange_validtae_otp" value="Continue" class="miniorange-button" onclick="mo2fselectforgotphoneoption();" />
224
+ </div>
225
+ <?php mo2f_customize_logo();
226
+ }
227
+ ?>
228
+ </div>
229
+ </div>
230
+ </div>
231
+ </div>
232
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
233
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
234
+ </form>
235
+ <form name="f" id="mo2f_challenge_forgotphone_form" method="post" action="" style="display:none;">
236
+ <input type="hidden" name="mo2f_selected_2factor_method" />
237
+ <input type="hidden" name="miniorange_challenge_forgotphone_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-challenge-forgotphone-nonce'); ?>" />
238
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
239
+ </form>
240
+ </body>
241
+ <script>
242
+ function mologinback(){
243
+ jQuery('#mo2f_backto_mo_loginform').submit();
244
+ }
245
+ function mo2fselectforgotphoneoption(){
246
+ var option = jQuery('input[name=mo2f_selected_forgotphone_option]:checked').val();
247
+ document.getElementById("mo2f_challenge_forgotphone_form").elements[0].value = option;
248
+ jQuery('#mo2f_challenge_forgotphone_form').submit();
249
+ }
250
+ </script>
251
+ </html>
252
+ <?php }
253
+ function mo2f_getkba_form($login_status, $login_message, $redirect_to){
254
+ ?>
255
+ <html>
256
+ <head>
257
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
258
+ <meta name="viewport" content="width=device-width, initial-scale=1">
259
+ <?php
260
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
261
+ echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
262
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
263
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
264
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
265
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
266
+ ?>
267
+ </head>
268
+ <body>
269
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
270
+ <div class="mo2f-modal-backdrop"></div>
271
+ <div class="mo2f_modal-dialog mo2f_modal-md">
272
+ <div class="mo2f_modal-content">
273
+ <div class="mo2f_modal-header">
274
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
275
+ Validate Security Questions
276
+ </h4>
277
+ </div>
278
+ <div class="mo2f_modal-body">
279
+ <div id="kbaSection" style="padding-left:10px;padding-right:10px;">
280
+ <div id="otpMessage">
281
+ <p style="font-size:15px;"><?php echo (isset($login_message) && !empty($login_message)) ? $login_message : 'Please answer the following questions:'; ?></p>
282
+ </div>
283
+ <form name="f" id="mo2f_submitkba_loginform" method="post" action="">
284
+ <div id="mo2f_kba_content">
285
+ <p style="font-size:15px;">
286
+ <?php if(isset($_SESSION['mo_2_factor_kba_questions'])){
287
+ echo $_SESSION['mo_2_factor_kba_questions'][0];
288
+ ?><br />
289
+ <input class="mo2f-textbox" type="text" name="mo2f_answer_1" id="mo2f_answer_1" required="true" autofocus="true" pattern="(?=\S)[A-Za-z0-9_@.$#&amp;+-\s]{1,100}" title="Only alphanumeric letters with special characters(_@.$#&amp;+-) are allowed." autocomplete="off" ><br />
290
+ <?php
291
+ echo $_SESSION['mo_2_factor_kba_questions'][1];
292
+ ?><br />
293
+ <input class="mo2f-textbox" type="text" name="mo2f_answer_2" id="mo2f_answer_2" required="true" pattern="(?=\S)[A-Za-z0-9_@.$#&amp;+-\s]{1,100}" title="Only alphanumeric letters with special characters(_@.$#&amp;+-) are allowed." autocomplete="off">
294
+ <?php
295
+ }
296
+ ?>
297
+ </p>
298
+ </div>
299
+ <?php if(get_option('mo2f_login_policy')){
300
+ if(get_option('mo2f_deviceid_enabled')){
301
+ ?>
302
+ <span style="float:left; font-size:15px;padding-right:10px;"><input style="vertical-align:text-top;" type="checkbox" name="mo2f_trust_device" id="mo2f_trust_device" />Remember this device.</span><br /><br />
303
+ <?php
304
+ }
305
+ }
306
+ ?>
307
+ <input type="submit" name="miniorange_kba_validate" id="miniorange_kba_validate" class="miniorange-button" style="float:left;" value="Validate" />
308
+ <input type="hidden" name="miniorange_kba_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-kba-nonce'); ?>" />
309
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
310
+ </form>
311
+ </div>
312
+ <?php mo2f_customize_logo() ?>
313
+ </div>
314
+ </div>
315
+ </div>
316
+ </div>
317
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
318
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
319
+ </form>
320
+ </body>
321
+ <script>
322
+ function mologinback(){
323
+ jQuery('#mo2f_backto_mo_loginform').submit();
324
+ }
325
+
326
+
327
+ </script>
328
+ <?php
329
+ }
330
+
331
+ function mo2f_getpush_oobemail_response($id, $login_status, $login_message, $redirect_to){
332
+ ?>
333
+ <html>
334
+ <head>
335
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
336
+ <meta name="viewport" content="width=device-width, initial-scale=1">
337
+ <?php
338
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
339
+ echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
340
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
341
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
342
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
343
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
344
+ ?>
345
+ </head>
346
+ <body>
347
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
348
+ <div class="mo2f-modal-backdrop"></div>
349
+ <div class="mo2f_modal-dialog mo2f_modal-md">
350
+ <div class="mo2f_modal-content">
351
+ <div class="mo2f_modal-header">
352
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
353
+ Accept Your Transaction
354
+ </h4>
355
+ </div>
356
+ <div class="mo2f_modal-body">
357
+ <?php if(isset($login_message) && !empty($login_message)){ ?>
358
+ <div id="otpMessage">
359
+ <p class="mo2fa_display_message_frontend" ><?php echo $login_message; ?></p>
360
+ </div>
361
+ <?php } ?>
362
+ <div id="pushSection">
363
+ <center>
364
+ <a href="#showPushHelp" id="pushHelpLink">
365
+ <h3>See How It Works ?</h3>
366
+ </a>
367
+ </center>
368
+ <div>
369
+ <center>
370
+ <h3>Waiting for your approval...</h3>
371
+ </center>
372
+ </div>
373
+ <div id="showPushImage">
374
+ <center>
375
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif' , __FILE__ );?>" />
376
+ </center>
377
+ </div>
378
+ <span style="padding-right:2%;">
379
+ <?php if(isset($login_status) && $login_status == 'MO_2_FACTOR_CHALLENGE_PUSH_NOTIFICATIONS'){ ?>
380
+ <center>
381
+ <?php if(get_option('mo2f_enable_forgotphone')){ ?>
382
+ <input type="button" name="miniorange_login_forgotphone" onclick="mologinforgotphone();" id="miniorange_login_forgotphone" class="miniorange-button" value="Forgot Phone?" />
383
+ <?php } ?>
384
+ <input type="button" name="miniorange_login_offline" onclick="mologinoffline();" id="miniorange_login_offline" class="miniorange-button" value="Phone is Offline?" />
385
+ </center>
386
+ <?php }else if(isset($login_status) && $login_status == 'MO_2_FACTOR_CHALLENGE_OOB_EMAIL' && get_option('mo2f_enable_forgotphone') && get_user_meta($id,'mo2f_kba_registration_status',true)){ ?>
387
+ <center>
388
+ <a href="#mo2f_alternate_login_kba" >
389
+ <h3>Didn't receive mail?</h3>
390
+ </a>
391
+ </center>
392
+ <?php }?>
393
+ </span>
394
+ </div>
395
+ <div id="showPushHelp" class="showPushHelp" hidden>
396
+ <center>
397
+ <a href="#showPushHelp" id="pushLink">
398
+ <h3>←Go Back.</h3>
399
+ </a>
400
+ <br>
401
+ <div id="myCarousel" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
402
+ <ol class="mo2f_carousel-indicators">
403
+ <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
404
+ <li data-target="#myCarousel" data-slide-to="1"></li>
405
+ <li data-target="#myCarousel" data-slide-to="2"></li>
406
+ </ol>
407
+ <div class="mo2f_carousel-inner" role="listbox">
408
+ <?php if($login_status == 'MO_2_FACTOR_CHALLENGE_OOB_EMAIL') { ?>
409
+ <div class="item active">
410
+ <p><b>A verification email has been sent to your registered email id.</b></p>
411
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/email-with-link-login-flow-1.png" alt="First slide">
412
+ </div>
413
+ <div class="item">
414
+ <p><b>Click on <b style="color:red">Accept Transaction</b> link to verify your email .</b></p>
415
+ <br>
416
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/email-with-link-login-flow-2.png" alt="First slide">
417
+ </div>
418
+ <div class="item">
419
+ <p><b>You have been validated. You will be logged in to your website now.</b></p>
420
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/email-with-link-login-flow-3.png" alt="First slide">
421
+ </div>
422
+ <?php } else { ?>
423
+ <!-- Indicators -->
424
+ <div class="item active">
425
+ <p><b>You will receive a notification on your phone.</b></p>
426
+ <br>
427
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/push-login-flow.png" alt="First slide">
428
+ </div>
429
+ <div class="item">
430
+ <p><b>Click on <b style="color:red">Approve</b> button.</b></p>
431
+ <br>
432
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/push-login-flow-1.jpg" alt="First slide">
433
+ </div>
434
+ <div class="item">
435
+ <p><b>You are successfully authenticated.</b></p>
436
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.jpg" alt="First slide">
437
+ </div>
438
+ <?php } ?>
439
+ </div>
440
+ </div>
441
+ </center>
442
+ </div>
443
+ <?php mo2f_customize_logo() ?>
444
+ </div>
445
+ </div>
446
+ </div>
447
+ </div>
448
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
449
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
450
+ </form>
451
+ <form name="f" id="mo2f_mobile_validation_form" method="post" action="" style="display:none;">
452
+ <input type="hidden" name="miniorange_mobile_validation_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-nonce'); ?>" />
453
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
454
+ </form>
455
+ <form name="f" id="mo2f_show_softtoken_loginform" method="post" action="" style="display:none;">
456
+ <input type="hidden" name="miniorange_softtoken" value="<?php echo wp_create_nonce('miniorange-2-factor-softtoken'); ?>" />
457
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
458
+ </form>
459
+ <form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" style="display:none;">
460
+ <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
461
+ <input type="hidden" name="miniorange_forgotphone" value="<?php echo wp_create_nonce('miniorange-2-factor-forgotphone'); ?>" />
462
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
463
+ </form>
464
+ <form name="f" id="mo2f_alternate_login_kbaform" method="post" action="" style="display:none;">
465
+ <input type="hidden" name="miniorange_alternate_login_kba_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-alternate-login-kba-nonce'); ?>" />
466
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
467
+ </form>
468
+ </body>
469
+ <script>
470
+ var timeout;
471
+ pollPushValidation();
472
+ function pollPushValidation()
473
+ {
474
+ var transId = "<?php echo $_SESSION[ 'mo2f-login-transactionId' ]; ?>";
475
+ var jsonString = "{\"txId\":\""+ transId + "\"}";
476
+ var postUrl = "<?php echo get_option('mo2f_host_name'); ?>" + "/moas/api/auth/auth-status";
477
+
478
+ jQuery.ajax({
479
+ url: postUrl,
480
+ type : "POST",
481
+ dataType : "json",
482
+ data : jsonString,
483
+ contentType : "application/json; charset=utf-8",
484
+ success : function(result) {
485
+ var status = JSON.parse(JSON.stringify(result)).status;
486
+ if (status == 'SUCCESS') {
487
+ jQuery('#mo2f_mobile_validation_form').submit();
488
+ } else if (status == 'ERROR' || status == 'FAILED' || status == 'DENIED') {
489
+ jQuery('#mo2f_backto_mo_loginform').submit();
490
+ } else {
491
+ timeout = setTimeout(pollPushValidation, 3000);
492
+ }
493
+ }
494
+ });
495
+ }
496
+ jQuery('#myCarousel').carousel('pause');
497
+ jQuery('#pushHelpLink').click(function() {
498
+ jQuery('#showPushHelp').show();
499
+ jQuery('#pushSection').hide();
500
+ jQuery('#otpMessage').hide();
501
+ jQuery('#myCarousel').carousel(0);
502
+ });
503
+ jQuery('#pushLink').click(function() {
504
+ jQuery('#showPushHelp').hide();
505
+ jQuery('#pushSection').show();
506
+ jQuery('#otpMessage').show();
507
+ jQuery('#myCarousel').carousel('pause');
508
+ });
509
+ function mologinback(){
510
+ jQuery('#mo2f_backto_mo_loginform').submit();
511
+ }
512
+ function mologinoffline(){
513
+ jQuery('#mo2f_show_softtoken_loginform').submit();
514
+ }
515
+ function mologinforgotphone(){
516
+ jQuery('#mo2f_show_forgotphone_loginform').submit();
517
+ }
518
+ jQuery('a[href="#mo2f_alternate_login_kba"]').click(function() {
519
+ jQuery('#mo2f_alternate_login_kbaform').submit();
520
+ });
521
+
522
+ </script>
523
+ </html>
524
+ <?php
525
+ }
526
+
527
+ function mo2f_getqrcode($login_status, $login_message, $redirect_to){
528
+ ?>
529
+ <html>
530
+ <head>
531
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
532
+ <meta name="viewport" content="width=device-width, initial-scale=1">
533
+ <?php
534
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
535
+ echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
536
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
537
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
538
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
539
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
540
+ ?>
541
+ </head>
542
+ <body>
543
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
544
+ <div class="mo2f-modal-backdrop"></div>
545
+ <div class="mo2f_modal-dialog mo2f_modal-md">
546
+ <div class="mo2f_modal-content">
547
+ <div class="mo2f_modal-header">
548
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
549
+ Scan QR Code
550
+ </h4>
551
+ </div>
552
+ <div class="mo2f_modal-body center">
553
+ <?php if(isset($login_message) && !empty($login_message)){ ?>
554
+ <div id="otpMessage">
555
+ <p class="mo2fa_display_message_frontend" style="text-align: left !important;" ><?php echo $login_message; ?></p>
556
+ </div>
557
+ <br />
558
+ <?php } ?>
559
+ <div id="scanQRSection">
560
+ <center>
561
+ <a href="#showQRHelp" id="helpLink">
562
+ <h3>See How It Works ?</h3>
563
+ </a>
564
+ </center>
565
+ <div style="margin-bottom:10%;">
566
+ <center>
567
+ <h3>Identify yourself by scanning the QR code with miniOrange Authenticator app.</h3>
568
+ </center>
569
+ </div>
570
+ <div id="showQrCode" style="margin-bottom:10%;">
571
+ <center><?php echo '<img src="data:image/jpg;base64,' . $_SESSION[ 'mo2f-login-qrCode' ] . '" />'; ?></center>
572
+ </div>
573
+ <span style="padding-right:2%;">
574
+ <center>
575
+ <?php if(get_option('mo2f_enable_forgotphone')){ ?>
576
+ <input type="button" name="miniorange_login_forgotphone" onclick="mologinforgotphone();" id="miniorange_login_forgotphone" class="miniorange-button" style="margin-right:5%;" value="Forgot Phone?" />
577
+ <?php } ?>
578
+ <input type="button" name="miniorange_login_offline" onclick="mologinoffline();" id="miniorange_login_offline" class="miniorange-button" value="Phone is Offline?" />
579
+ </center>
580
+ </span>
581
+ </div>
582
+ <div id="showQRHelp" class="showQRHelp" hidden>
583
+ <center>
584
+ <a href="#showQRHelp" id="qrLink">
585
+ <h3>Back to Scan QR Code.</h3>
586
+ </a>
587
+ <div id="myCarousel" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
588
+ <!-- Indicators -->
589
+ <ol class="mo2f_carousel-indicators">
590
+ <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
591
+ <li data-target="#myCarousel" data-slide-to="1"></li>
592
+ <li data-target="#myCarousel" data-slide-to="2"></li>
593
+ </ol>
594
+ <div class="mo2f_carousel-inner" role="listbox">
595
+ <div class="item active">
596
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-how-to-setup-1.png" alt="First slide">
597
+ </div>
598
+ <div class="item">
599
+ <p><b>Open miniOrange <b style="color:red">Authenticator</b> app and click on SCAN QR CODE.</b></p>
600
+ <br>
601
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.jpg" alt="First slide">
602
+ </div>
603
+ <div class="item">
604
+ <p><b>Scan the QR code from the app.</b></p>
605
+ <br>
606
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-3.jpg" alt="First slide">
607
+ </div>
608
+
609
+ </div>
610
+ </div>
611
+ </center>
612
+ </div>
613
+ <?php mo2f_customize_logo() ?>
614
+ </div>
615
+ </div>
616
+ </div>
617
+ </div>
618
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
619
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
620
+ </form>
621
+ <form name="f" id="mo2f_mobile_validation_form" method="post" action="" style="display:none;">
622
+ <input type="hidden" name="miniorange_mobile_validation_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-nonce'); ?>" />
623
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
624
+ </form>
625
+ <form name="f" id="mo2f_show_softtoken_loginform" method="post" action="" style="display:none;">
626
+ <input type="hidden" name="miniorange_softtoken" value="<?php echo wp_create_nonce('miniorange-2-factor-softtoken'); ?>" />
627
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
628
+ </form>
629
+ <form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" style="display:none;">
630
+ <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
631
+ <input type="hidden" name="miniorange_forgotphone" value="<?php echo wp_create_nonce('miniorange-2-factor-forgotphone'); ?>" />
632
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
633
+ </form>
634
+ </body>
635
+ <script>
636
+ var timeout;
637
+ pollMobileValidation();
638
+ function pollMobileValidation()
639
+ {
640
+ var transId = "<?php echo $_SESSION[ 'mo2f-login-transactionId' ]; ?>";
641
+ var jsonString = "{\"txId\":\""+ transId + "\"}";
642
+ var postUrl = "<?php echo get_option('mo2f_host_name'); ?>" + "/moas/api/auth/auth-status";
643
+ jQuery.ajax({
644
+ url: postUrl,
645
+ type : "POST",
646
+ dataType : "json",
647
+ data : jsonString,
648
+ contentType : "application/json; charset=utf-8",
649
+ success : function(result) {
650
+ var status = JSON.parse(JSON.stringify(result)).status;
651
+ if (status == 'SUCCESS') {
652
+ var content = "<div id='success'><center><img src='" + "<?php echo plugins_url( 'includes/images/right.png' , __FILE__ );?>" + "' /></center></div>";
653
+ jQuery("#showQrCode").empty();
654
+ jQuery("#showQrCode").append(content);
655
+ setTimeout(function(){jQuery("#mo2f_mobile_validation_form").submit();}, 100);
656
+ } else if (status == 'ERROR' || status == 'FAILED') {
657
+ var content = "<div id='error'><center><img src='" + "<?php echo plugins_url( 'includes/images/wrong.png' , __FILE__ );?>" + "' /></center></div>";
658
+ jQuery("#showQrCode").empty();
659
+ jQuery("#showQrCode").append(content);
660
+ setTimeout(function(){jQuery('#mo2f_backto_mo_loginform').submit();}, 1000);
661
+ } else {
662
+ timeout = setTimeout(pollMobileValidation, 3000);
663
+ }
664
+ }
665
+ });
666
+ }
667
+ jQuery('#myCarousel').carousel('pause');
668
+ jQuery('#helpLink').click(function() {
669
+ jQuery('#showQRHelp').show();
670
+ jQuery('#scanQRSection').hide();
671
+
672
+ jQuery('#myCarousel').carousel(0);
673
+ });
674
+ jQuery('#qrLink').click(function() {
675
+ jQuery('#showQRHelp').hide();
676
+ jQuery('#scanQRSection').show();
677
+ jQuery('#myCarousel').carousel('pause');
678
+ });
679
+ function mologinback(){
680
+ jQuery('#mo2f_backto_mo_loginform').submit();
681
+ }
682
+ function mologinoffline(){
683
+ jQuery('#mo2f_show_softtoken_loginform').submit();
684
+ }
685
+ function mologinforgotphone(){
686
+ jQuery('#mo2f_show_forgotphone_loginform').submit();
687
+ }
688
+ </script>
689
+ </html>
690
+ <?php
691
+ }
692
+
693
+ function mo2f_getotp_form($login_status, $login_message, $redirect_to){
694
+ ?>
695
+ <html>
696
+ <head>
697
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
698
+ <meta name="viewport" content="width=device-width, initial-scale=1">
699
+ <?php
700
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
701
+ echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
702
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
703
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
704
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
705
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
706
+ ?>
707
+ </head>
708
+ <body>
709
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
710
+ <div class="mo2f-modal-backdrop"></div>
711
+ <div class="mo2f_modal-dialog mo2f_modal-md">
712
+ <div class="mo2f_modal-content">
713
+ <div class="mo2f_modal-header">
714
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
715
+ Validate OTP
716
+ </h4>
717
+ </div>
718
+ <div class="mo2f_modal-body center">
719
+ <?php if(isset($login_message) && !empty($login_message)){ ?>
720
+ <div id="otpMessage">
721
+ <p class="mo2fa_display_message_frontend" style="text-align: left !important;" ><?php echo $login_message; ?></p>
722
+ </div>
723
+ <?php } ?>
724
+ <br />
725
+ <div id="showOTP">
726
+ <div class="mo2f-login-container">
727
+ <?php if($login_status != 'MO_2_FACTOR_CHALLENGE_GOOGLE_AUTHENTICATION'){ ?>
728
+ <a href="#showOTPHelp" id="otpHelpLink" class="mo2f-link">See How It Works ?</a><br />
729
+ <?php } ?>
730
+ <form name="f" id="mo2f_submitotp_loginform" method="post" action="">
731
+ <input type="text" name="mo2fa_softtoken" style="height:28px !important;" placeholder="Enter one time passcode" id="mo2fa_softtoken" required="true" class="mo2f-textbox" autofocus="true" pattern="[0-9]{4,8}" title="Only digits within range 4-8 are allowed."/>
732
+ <br />
733
+ <input type="submit" name="miniorange_soft_token_submit" id="miniorange_soft_token_submit" class="miniorange-button" value="Validate" />
734
+ <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
735
+ <input type="hidden" name="miniorange_soft_token_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-soft-token-nonce'); ?>" />
736
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
737
+ </form>
738
+ <?php if(get_option('mo2f_enable_forgotphone') && isset($login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL'){ ?>
739
+ <a name="miniorange_login_forgotphone" onclick="mologinforgotphone();" id="miniorange_login_forgotphone" class="mo2f-link" >Forgot Phone ?</a>
740
+ <?php } ?>
741
+ </div>
742
+ </div>
743
+ <div id="showOTPHelp" class="showOTPHelp" hidden>
744
+ <br>
745
+ <center>
746
+ <a href="#showOTP" id="otpLink" class="mo2f-link">Go Back</a>
747
+ <br>
748
+ <br>
749
+ <div id="myCarousel" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
750
+ <!-- Indicators -->
751
+ <?php if($login_status == 'MO_2_FACTOR_CHALLENGE_SOFT_TOKEN'){ ?>
752
+ <ol class="mo2f_carousel-indicators">
753
+ <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
754
+ <li data-target="#myCarousel" data-slide-to="1"></li>
755
+ <li data-target="#myCarousel" data-slide-to="2"></li>
756
+ <li data-target="#myCarousel" data-slide-to="3"></li>
757
+ </ol>
758
+ <div class="mo2f_carousel-inner" role="listbox">
759
+ <div class="item active">
760
+ <p><b>Open miniOrange <b style="color:red">Authenticator</b> app and click on Sync time from the top left menu option.</b></p>
761
+ <br>
762
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.jpg" alt="First slide">
763
+ </div>
764
+ <div class="item">
765
+ <p><b>Click on <b style="color:red">Sync Time now</b> to sync your time with miniOrange Servers. This is a one time sync to avoid otp validation failure.</b></p>
766
+ <br>
767
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-3.jpg" alt="First slide">
768
+ </div>
769
+ <div class="item">
770
+ <p>Go to Home</p>
771
+ <br>
772
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-2.jpg" alt="First slide">
773
+ </div>
774
+ <div class="item">
775
+ <p><b>Enter the one time passcode shown in miniOrange <b style="color:red">Authenticator</b> app here.</b></p>
776
+ <br>
777
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/soft-token-test-5.png" alt="First slide">
778
+ </div>
779
+ </div>
780
+ <?php } else if($login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL') { ?>
781
+ <ol class="mo2f_carousel-indicators">
782
+ <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
783
+ <li data-target="#myCarousel" data-slide-to="1"></li>
784
+ <li data-target="#myCarousel" data-slide-to="2"></li>
785
+ </ol>
786
+ <div class="mo2f_carousel-inner" role="listbox">
787
+ <div class="item active">
788
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-1.png" alt="First slide">
789
+ </div>
790
+ <div class="item">
791
+ <p>Check your email with which you registered and copy the one time passcode.</p>
792
+ <br>
793
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-2.png" alt="First slide">
794
+ </div>
795
+ <div class="item">
796
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-3.png" alt="First slide">
797
+ </div>
798
+ </div>
799
+ <?php } else if($login_status == 'MO_2_FACTOR_CHALLENGE_OTP_OVER_SMS') { ?>
800
+ <ol class="mo2f_carousel-indicators">
801
+ <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
802
+ <li data-target="#myCarousel" data-slide-to="1"></li>
803
+ <li data-target="#myCarousel" data-slide-to="2"></li>
804
+ </ol>
805
+ <div class="mo2f_carousel-inner" role="listbox">
806
+ <div class="item active">
807
+ <p><b>An OTP has been sent your registered mobile number.</b></p>
808
+ <br>
809
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-over-sms-login-flow-1.png" alt="First slide">
810
+ </div>
811
+ <div class="item">
812
+
813
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-over-sms-login-flow-2.jpg" alt="First slide">
814
+ </div>
815
+ <div class="item">
816
+ <p><b>Enter the OTP received on your mobile phone to validate.</b></p>
817
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-over-sms-login-flow-3.png" alt="First slide">
818
+ </div>
819
+ </div>
820
+ <?php } else { ?>
821
+ <!-- phone call verification -->
822
+ <ol class="mo2f_carousel-indicators">
823
+ <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
824
+ <li data-target="#myCarousel" data-slide-to="1"></li>
825
+ </ol>
826
+ <div class="mo2f_carousel-inner" role="listbox">
827
+ <div class="item active">
828
+ <p>You will receive a phone call. Pick up the call and listen to the one time passcode carefully. </p>
829
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/phone-call-login-flow-2.png" alt="First slide">
830
+ </div>
831
+ <div class="item">
832
+ <p>Enter the one time passcode here and click on validate button to login.</p>
833
+ <br>
834
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/phone-call-login-flow.png" alt="First slide">
835
+ </div>
836
+ </div>
837
+ <?php } ?>
838
+ </div>
839
+ </div>
840
+ <?php mo2f_customize_logo() ?>
841
+ </div>
842
+ </div>
843
+ </div>
844
+ </div>
845
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
846
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
847
+ </form>
848
+ <?php if(get_option('mo2f_enable_forgotphone') && isset($login_status ) && $login_status != 'MO_2_FACTOR_CHALLENGE_OTP_OVER_EMAIL'){ ?>
849
+ <form name="f" id="mo2f_show_forgotphone_loginform" method="post" action="" style="display:none;">
850
+ <input type="hidden" name="request_origin_method" value="<?php echo $login_status; ?>" />
851
+ <input type="hidden" name="miniorange_forgotphone" value="<?php echo wp_create_nonce('miniorange-2-factor-forgotphone'); ?>" />
852
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
853
+ </form>
854
+ <?php } ?>
855
+ </body>
856
+ <script>
857
+ jQuery('#otpHelpLink').click(function() {
858
+ jQuery('#showOTPHelp').show();
859
+ jQuery('#showOTP').hide();
860
+ jQuery('#otpMessage').hide();
861
+ });
862
+ jQuery('#otpLink').click(function() {
863
+ jQuery('#showOTPHelp').hide();
864
+ jQuery('#showOTP').show();
865
+ jQuery('#otpMessage').show();
866
+ });
867
+
868
+ function mologinback(){
869
+ jQuery('#mo2f_backto_mo_loginform').submit();
870
+ }
871
+ function mologinforgotphone(){
872
+ jQuery('#mo2f_show_forgotphone_loginform').submit();
873
+ }
874
+ </script>
875
+ </html>
876
+ <?php
877
+ }
878
+
879
+
880
+ function mo2f_get_device_form($login_status, $login_message, $redirect_to){
881
+ ?>
882
+ <html>
883
+ <head>
884
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
885
+ <meta name="viewport" content="width=device-width, initial-scale=1">
886
+ <?php
887
+ echo '<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>';
888
+ echo '<script src="' . plugins_url('includes/js/bootstrap.min.js', __FILE__) . '" ></script>';
889
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/bootstrap.min.css?version=4.4.1', __FILE__) . '" />';
890
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/front_end_login.css?version=4.4.1', __FILE__) . '" />';
891
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/style_settings.css?version=4.4.1', __FILE__) . '" />';
892
+ echo '<link rel="stylesheet" type="text/css" href="' . plugins_url('includes/css/hide-login.css?version=4.4.1', __FILE__) . '" />';
893
+ ?>
894
+ </head>
895
+ <body>
896
+ <div class="mo2f_modal" tabindex="-1" role="dialog" id="myModal5">
897
+ <div class="mo2f-modal-backdrop"></div>
898
+ <div class="mo2f_modal-dialog mo2f_modal-md">
899
+ <div class="mo2f_modal-content">
900
+ <div class="mo2f_modal-header">
901
+ <h4 class="mo2f_modal-title"><button type="button" class="mo2f_close" data-dismiss="modal" aria-label="Close" title="Back to login" onclick="mologinback();"><span aria-hidden="true">&times;</span></button>
902
+ Remember Device
903
+ </h4>
904
+ </div>
905
+ <div class="mo2f_modal-body center">
906
+ <div id="mo2f_device_content">
907
+ <h3>Do you want to remember this device?</h3>
908
+ <input type="button" name="miniorange_trust_device_yes" onclick="mo_check_device_confirm();" id="miniorange_trust_device_yes" class="mo_green" style="margin-right:5%;" value="Yes" />
909
+ <input type="button" name="miniorange_trust_device_no" onclick="mo_check_device_cancel();" id="miniorange_trust_device_no" class="mo_red" value="No" />
910
+ </div>
911
+ <div id="showLoadingBar" hidden>
912
+ <h3>Please wait...We are taking you into your account.</h3>
913
+ <img src="<?php echo plugins_url( 'includes/images/ajax-loader-login.gif' , __FILE__ );?>" />
914
+ </div>
915
+ <br /><br />
916
+ <span>
917
+ Click on <i><b>Yes</b></i> if this is your personal device.<br />
918
+ Click on <i><b>No</b></i> if this is a public device.
919
+ </span><br /><br />
920
+ <?php mo2f_customize_logo() ?>
921
+ </div>
922
+ </div>
923
+ </div>
924
+ </div>
925
+ <form name="f" id="mo2f_backto_mo_loginform" method="post" action="<?php echo wp_login_url(); ?>" style="display:none;">
926
+ <input type="hidden" name="miniorange_mobile_validation_failed_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-mobile-validation-failed-nonce'); ?>" />
927
+ </form>
928
+ <form name="f" id="mo2f_trust_device_confirm_form" method="post" action="" style="display:none;">
929
+ <input type="hidden" name="mo2f_trust_device_confirm_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-trust-device-confirm-nonce'); ?>" />
930
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
931
+ </form>
932
+ <form name="f" id="mo2f_trust_device_cancel_form" method="post" action="" style="display:none;">
933
+ <input type="hidden" name="mo2f_trust_device_cancel_nonce" value="<?php echo wp_create_nonce('miniorange-2-factor-trust-device-cancel-nonce'); ?>" />
934
+ <input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>" />
935
+ </form>
936
+ <script>
937
+ function mologinback(){
938
+ jQuery('#mo2f_backto_mo_loginform').submit();
939
+ }
940
+ function mo_check_device_confirm(){
941
+ jQuery('#mo2f_device_content').hide();
942
+ jQuery('#showLoadingBar').show();
943
+ jQuery('#mo2f_trust_device_confirm_form').submit();
944
+ }
945
+ function mo_check_device_cancel(){
946
+ jQuery('#mo2f_device_content').hide();
947
+ jQuery('#showLoadingBar').show();
948
+ jQuery('#mo2f_trust_device_cancel_form').submit();
949
+ }
950
+ </script>
951
+ </body>
952
+ </html>
953
+ <?php }
954
+ ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
miniorange_2_factor_configuration.php CHANGED
@@ -167,7 +167,7 @@
167
  <img class="first-slide" style="padding-left:3%;" src="<?php echo plugins_url('includes/images/help/step3.png', __FILE__ ) ?>" alt="First slide">
168
  </div>
169
  <div class="item">
170
- <center><p><b>Step 4.</b> Downlaod the miniOrange Authenticator App and Click on Configure button</p></center>
171
  <img class="first-slide" style="padding-left:3%;" src="<?php echo plugins_url('includes/images/help/step4.png', __FILE__ ) ?>" alt="First slide">
172
  </div>
173
  <div class="item">
167
  <img class="first-slide" style="padding-left:3%;" src="<?php echo plugins_url('includes/images/help/step3.png', __FILE__ ) ?>" alt="First slide">
168
  </div>
169
  <div class="item">
170
+ <center><p><b>Step 4.</b> Download the miniOrange Authenticator App and Click on Configure button</p></center>
171
  <img class="first-slide" style="padding-left:3%;" src="<?php echo plugins_url('includes/images/help/step4.png', __FILE__ ) ?>" alt="First slide">
172
  </div>
173
  <div class="item">
miniorange_2_factor_demo.php CHANGED
@@ -1,523 +1,459 @@
1
- <div class="mo2f_table_layout">
2
- <?php echo mo2f_check_if_registered_with_miniorange($current_user); ?>
3
-
4
- <h3>How to Setup OTP Over SMS ?
5
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
6
- <div class="mo2f_help_container">
7
- <div id="myCarousel8" class="mo2f_carousel slide" data-ride="carousel" >
8
- <ol class="mo2f_carousel-indicators">
9
- <li data-target="#myCarousel8" data-slide-to="0" class="active"></li>
10
- <li data-target="#myCarousel8" data-slide-to="1"></li>
11
- <li data-target="#myCarousel8" data-slide-to="2"></li>
12
- <li data-target="#myCarousel8" data-slide-to="3"></li>
13
-
14
-
15
- </ol>
16
- <div class="mo2f_carousel-inner" role="listbox">
17
- <div class="item active">
18
- <center><p>Select OTP Over SMS from Setup Two-Factor Tab.</p></center>
19
- <img class="first-slide" style="padding-left:3%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms1.png" alt="First slide">
20
- </div>
21
- <div class="item">
22
- <center><p>Enter your phone number and click on verify button.</p></center>
23
- <img class="first-slide" style="padding-left:13%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms2.png" alt="First slide">
24
- </div>
25
- <div class="item">
26
- <p>A one time passcode is sent to your mobile number. Enter the one time passcode here and click on <b>Validate OTP</b> button.</p>
27
- <img class="first-slide" style="padding-left:13%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms3.png" alt="First slide">
28
- </div>
29
- <div class="item">
30
- <center><p>OTP Over SMS is all setup now.</p></center>
31
- <img class="first-slide" style="padding-left:3%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms4.png" alt="First slide">
32
- </div>
33
- </div>
34
- </div>
35
- </div>
36
- </center>
37
- <div id="demo1">
38
- <br>
39
- <h3>How to Setup Soft Token ?
40
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
41
- <center>
42
- <div class="mo2f_help_container">
43
- <div id="myCarousel7" class="mo2f_carousel slide" data-ride="carousel" >
44
- <ol class="mo2f_carousel-indicators">
45
- <li data-target="#myCarousel7" data-slide-to="0" class="active"></li>
46
- <li data-target="#myCarousel7" data-slide-to="1"></li>
47
- <li data-target="#myCarousel7" data-slide-to="2"></li>
48
- <li data-target="#myCarousel7" data-slide-to="3"></li>
49
- <li data-target="#myCarousel7" data-slide-to="4"></li>
50
- <li data-target="#myCarousel7" data-slide-to="5"></li>
51
- <li data-target="#myCarousel7" data-slide-to="6"></li>
52
- <li data-target="#myCarousel7" data-slide-to="7"></li>
53
-
54
- </ol>
55
- <div class="mo2f_carousel-inner" role="listbox">
56
- <div class="item active">
57
- <p>Select Soft Token from Setup Two-Factor Tab.</p>
58
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_1.png" alt="First slide">
59
- </div>
60
- <div class="item">
61
- <p>Download the miniOrange Authenticator App on your phone. Then click on <b>Configure Your Phone</b> button.</p>
62
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_2.png" alt="First slide">
63
- </div>
64
- <div class="item">
65
- <p>Scan the QR Code from your phone.</p>
66
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/user-register-4.png" alt="First slide">
67
- </div>
68
- <div class="item">
69
- <p>Open your App and click on <b>Configure</b> button.</p>
70
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_3.png" alt="First slide">
71
- </div>
72
- <div class="item">
73
- <p>Scan the QR Code by focusing the phone on QR Code.</p>
74
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_4.png" alt="First slide">
75
- </div>
76
- <div class="item">
77
- <p>Registration successfully.</p>
78
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.png" alt="First slide">
79
- </div>
80
- <div class="item">
81
- <p><br></p>
82
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/user-register-5.png" alt="First slide">
83
- </div>
84
- <div class="item">
85
- <p>Soft Token is set now.</p>
86
- <img class="first-slide" style="width:84%;" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_6.png" alt="First slide">
87
- </div>
88
-
89
- </div>
90
- </div>
91
- </div>
92
- </center>
93
- </div>
94
- <div id="demo2">
95
- <br>
96
- <h3>How To Setup Phone Call Verification ?
97
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
98
- <center>
99
- <div class="mo2f_help_container">
100
- <div id="myCarousel6" class="mo2f_carousel slide" data-ride="carousel" >
101
- <ol class="mo2f_carousel-indicators">
102
- <li data-target="#myCarousel6" data-slide-to="0" class="active"></li>
103
- <li data-target="#myCarousel6" data-slide-to="1"></li>
104
- <li data-target="#myCarousel6" data-slide-to="2"></li>
105
- <li data-target="#myCarousel6" data-slide-to="3"></li>
106
- </ol>
107
- <div class="mo2f_carousel-inner" role="listbox">
108
- <div class="item active">
109
- <p>Select phone call verfication from Setup Two-Factor Tab.</p>
110
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_1.png" alt="First slide">
111
- </div>
112
- <div class="item">
113
- <p>Enter your phone number and click on verify button.You will receive a phone call on this number.</p>
114
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_sms2.png" alt="First slide">
115
- </div>
116
- <div class="item">
117
- <p>Enter the one time passcode here and click on <b>Validate OTP</b> button.</p>
118
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_2.png" alt="First slide">
119
- </div>
120
- <div class="item">
121
- <p>Phone Call verification is set now.</p>
122
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_3.png" alt="First slide">
123
- </div>
124
- </div>
125
- </div>
126
- </div>
127
- </center>
128
- </div>
129
- <div id="demo3">
130
- <br>
131
- <h3>How to Setup QR Code Authentication / Push Notification ?
132
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
133
- <center>
134
- <div class="mo2f_help_container">
135
- <div id="myCarousel9" class="mo2f_carousel slide" data-ride="carousel" >
136
- <ol class="mo2f_carousel-indicators">
137
- <li data-target="#myCarousel9" data-slide-to="0" class="active"></li>
138
- <li data-target="#myCarousel9" data-slide-to="1"></li>
139
- <li data-target="#myCarousel9" data-slide-to="2"></li>
140
- <li data-target="#myCarousel9" data-slide-to="3"></li>
141
- <li data-target="#myCarousel9" data-slide-to="4"></li>
142
- <li data-target="#myCarousel9" data-slide-to="5"></li>
143
- <li data-target="#myCarousel9" data-slide-to="6"></li>
144
- <li data-target="#myCarousel9" data-slide-to="7"></li>
145
-
146
- </ol>
147
- <div class="mo2f_carousel-inner" role="listbox">
148
- <div class="item active">
149
- <p>Select QR Code Authentication/Push Notifications from Setup Two-Factor Tab.</p>
150
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_qr_1.png" alt="First slide">
151
- </div>
152
- <div class="item">
153
- <p>Download the miniOrange Authenticator App on your phone. Then click on <b>Configure Your Phone</b> button.</p>
154
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_2.png" alt="First slide">
155
- </div>
156
- <div class="item">
157
- <p>Sacn the QR Code from your phone.</p>
158
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/user-register-4.png" alt="First slide">
159
- </div>
160
- <div class="item">
161
- <p>Open your App and click on <b>Configure</b> button.</p>
162
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_3.png" alt="First slide">
163
- </div>
164
- <div class="item">
165
- <p>Scan the QR Code by focusing the phone on QR Code.</p>
166
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_4.png" alt="First slide">
167
- </div>
168
- <div class="item">
169
- <p>Registration successfully.</p>
170
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.png" alt="First slide">
171
- </div>
172
- <div class="item">
173
- <p><br></p>
174
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/user-register-5.png" alt="First slide">
175
- </div>
176
- <div class="item">
177
- <p>QR Code Authentication/Push Notifications is all setup now.</p>
178
- <img class="first-slide" style="width:84%;" src="https://auth.miniorange.com/moas/images/help/mo2f_qr_2.png" alt="First slide">
179
- </div>
180
-
181
- </div>
182
- </div>
183
- </div>
184
- </center>
185
- </div>
186
- <div id="demo5">
187
- <br>
188
- <h3>How to Setup Google Authenticator ?
189
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
190
- <center>
191
- <div class="mo2f_help_container">
192
- <div id="myCarousel10" class="mo2f_carousel slide" data-ride="carousel" >
193
- <ol class="mo2f_carousel-indicators">
194
- <li data-target="#myCarousel10" data-slide-to="0" class="active"></li>
195
- <li data-target="#myCarousel10" data-slide-to="1"></li>
196
-
197
-
198
-
199
- </ol>
200
- <div class="mo2f_carousel-inner" role="listbox">
201
- <div class="item active">
202
- <p>Select Google Authenticator from Setup Two-Factor Tab.</p>
203
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/google_app_setup-1.png" alt="First slide">
204
- </div>
205
- <div class="item">
206
- <p>Download Google Authenticator App on your phone. Select your phone type on the screen.</p>
207
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/google_app_setup.png" alt="First slide">
208
- </div>
209
-
210
- </div>
211
- </div>
212
- </div>
213
- </center>
214
- </div>
215
- <div id="demo6">
216
- <br>
217
- <h3>How to Setup Security Questions (KBA) ?
218
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
219
- <center>
220
- <div class="mo2f_help_container">
221
- <div id="myCarousel12" class="mo2f_carousel slide" data-ride="carousel" >
222
- <ol class="mo2f_carousel-indicators">
223
- <li data-target="#myCarousel12" data-slide-to="0" class="active"></li>
224
- <li data-target="#myCarousel12" data-slide-to="1"></li>
225
- <li data-target="#myCarousel12" data-slide-to="2"></li>
226
-
227
-
228
- </ol>
229
- <div class="mo2f_carousel-inner" role="listbox">
230
- <div class="item active">
231
- <p>Select Security Questions from Setup Two-Factor Tab.</p>
232
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/kba-setup-1.png" alt="First slide">
233
- </div>
234
- <div class="item">
235
- <p>Select 3 questions of your choice.</p>
236
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/kba-setup-2.png" alt="First slide">
237
- </div>
238
- <div class="item">
239
- <p>Save your answers.</p>
240
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/kba-setup-3.png" alt="First slide">
241
- </div>
242
-
243
-
244
- </div>
245
- </div>
246
- </div>
247
- </center>
248
- </div>
249
- <div id="demo4">
250
- <h3>How to Test Soft Token
251
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
252
- <center>
253
- <div class="mo2f_help_container">
254
- <div id="myCarousel15" class="mo2f_carousel slide" data-ride="carousel">
255
- <!-- Indicators -->
256
-
257
-
258
- <ol class="mo2f_carousel-indicators">
259
- <li data-target="#myCarousel15" data-slide-to="0" class="active"></li>
260
- <li data-target="#myCarousel15" data-slide-to="1"></li>
261
- <li data-target="#myCarousel15" data-slide-to="2"></li>
262
- <li data-target="#myCarousel15" data-slide-to="3"></li>
263
-
264
- </ol>
265
- <div class="mo2f_carousel-inner" role="listbox">
266
-
267
-
268
- <div class="item active">
269
- <p>Open miniOrange Authenticator app and click on settings icon on top right corner.</p><br>
270
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.png" alt="First slide">
271
- </div>
272
- <div class="item">
273
- <p>Click on Sync button below to sync your time with miniOrange Servers. This is a one time sync to avoid otp validation failure.</p><br>
274
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-3.png" alt="First slide">
275
- </div>
276
- <div class="item">
277
- <p>Go to Soft Token tab.</p><br>
278
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-2.png" alt="First slide">
279
- </div>
280
- <div class="item">
281
- <p>Enter the one time passcode shown in miniOrange Authenticator app here.</p><br>
282
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_testsoft_1.png" alt="First slide">
283
- </div>
284
- </div>
285
- </div>
286
- </div>
287
- </div>
288
- <br />
289
- <h3>How to Login with Password + Two-Factor ?
290
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
291
- <center>
292
- <div class="mo2f_help_container">
293
-
294
- <div id="myCarousel4" class="mo2f_carousel slide" data-ride="carousel" >
295
-
296
- <ol class="mo2f_carousel-indicators">
297
- <li data-target="#myCarousel4" data-slide-to="0" class="active"></li>
298
- <li data-target="#myCarousel4" data-slide-to="1"></li>
299
- <li data-target="#myCarousel4" data-slide-to="2"></li>
300
- <li data-target="#myCarousel4" data-slide-to="3"></li>
301
- <li data-target="#myCarousel4" data-slide-to="4"></li>
302
- <li data-target="#myCarousel4" data-slide-to="5"></li>
303
- <li data-target="#myCarousel4" data-slide-to="6"></li>
304
- </ol>
305
- <div class="mo2f_carousel-inner" role="listbox">
306
- <div class="item active">
307
- <p>Enter your username and password and click on login button.</p>
308
-
309
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-4.png" alt="First slide">
310
-
311
- </div>
312
- <div class="item">
313
- <p><br></p>
314
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
315
-
316
- </div>
317
- <div class="item">
318
- <p>Open miniOrange Authenticator app and click on Authenticate.</p>
319
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.png" alt="First slide">
320
-
321
- </div>
322
- <div class="item">
323
- <p><br></p>
324
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-3.png" alt="First slide">
325
- </div>
326
- <div class="item">
327
- <p><br></p>
328
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-4.png" alt="First slide">
329
- </div>
330
- <div class="item">
331
- <p><br></p>
332
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-5.png" alt="First slide">
333
- </div>
334
- <div class="item">
335
- <p>Once you are authenticated, you will be logged in.</p>
336
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-2.png" alt="First slide" style="height:400px;">
337
- </div>
338
- </div>
339
- </div>
340
- </div>
341
- </center>
342
- <br>
343
- <h3>How to login with 2nd Factor only (No password required)?
344
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
345
- <center>
346
- <div class="mo2f_help_container">
347
- <div id="myCarousel1" class="mo2f_carousel slide" data-ride="carousel" >
348
-
349
- <ol class="mo2f_carousel-indicators">
350
- <li data-target="#myCarousel1" data-slide-to="0" class="active"></li>
351
- <li data-target="#myCarousel1" data-slide-to="1"></li>
352
- <li data-target="#myCarousel1" data-slide-to="2"></li>
353
- <li data-target="#myCarousel1" data-slide-to="3"></li>
354
- <li data-target="#myCarousel1" data-slide-to="4"></li>
355
- <li data-target="#myCarousel1" data-slide-to="5"></li>
356
- <li data-target="#myCarousel1" data-slide-to="6"></li>
357
- </ol>
358
- <div class="mo2f_carousel-inner" role="listbox">
359
- <div class="item active">
360
- <p>Enter your username and click on login with your phone.</p>
361
- <p style="margin-left: -40px;" >Login Form Option 1<span style="margin-left:90px;">Login Form Option 2</span></p>
362
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-1.png" alt="First slide">
363
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-3.png" alt="First slide">
364
- </div>
365
- <div class="item">
366
- <p><br></p>
367
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
368
-
369
- </div>
370
- <div class="item">
371
- <p>Open miniOrange Authenticator app and click on Authenticate.</p>
372
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.png" alt="First slide">
373
-
374
- </div>
375
- <div class="item">
376
- <p><br></p>
377
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-3.png" alt="First slide">
378
- </div>
379
- <div class="item">
380
- <p><br></p>
381
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-4.png" alt="First slide">
382
- </div>
383
- <div class="item">
384
- <p><br></p>
385
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-5.png" alt="First slide">
386
- </div>
387
- <div class="item">
388
- <p>Once you are authenticated, you will be logged in.</p>
389
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-2.png" alt="First slide" style="height:400px;">
390
- </div>
391
- </div>
392
- </div>
393
- </div>
394
- </center>
395
- <br>
396
- <h3>How to login in offline mode (no internet connectivity) ?
397
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
398
- <center>
399
- <div class="mo2f_help_container">
400
- <div id="myCarousel2" class="mo2f_carousel slide" data-ride="carousel" >
401
- <ol class="mo2f_carousel-indicators">
402
- <li data-target="#myCarousel2" data-slide-to="0" class="active"></li>
403
- <li data-target="#myCarousel2" data-slide-to="1"></li>
404
- <li data-target="#myCarousel2" data-slide-to="2"></li>
405
- <li data-target="#myCarousel2" data-slide-to="3"></li>
406
- <li data-target="#myCarousel2" data-slide-to="4"></li>
407
- <li data-target="#myCarousel2" data-slide-to="5"></li>
408
- </ol>
409
- <div class="mo2f_carousel-inner" role="listbox">
410
-
411
- <div class="item active">
412
- <p>Enter your username and click on login with your phone.</p>
413
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-1.png" alt="First slide">
414
- </div>
415
- <div class="item">
416
- <p>Click on <b>Phone is Offline?</b> button.</p>
417
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
418
- </div>
419
-
420
- <div class="item">
421
- <p>Open miniOrange Authenticator app and click on settings icon on top right corner.</p><br>
422
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.png" alt="First slide">
423
- </div>
424
- <div class="item">
425
- <p>Click on Sync button below to sync your time with miniOrange Servers. This is a one time sync to avoid otp validation failure.</p><br>
426
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-3.png" alt="First slide">
427
- </div>
428
- <div class="item">
429
- <p>Go to Soft Token tab.</p><br>
430
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-2.png" alt="First slide">
431
- </div>
432
- <div class="item">
433
- <p>Enter the one time passcode shown in miniOrange Authenticator app here.</p><br>
434
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-4.png" alt="First slide">
435
- </div>
436
- </div>
437
- </div>
438
- </div>
439
- </center>
440
- <br>
441
- <h3>How to login if your phone is not with you or lost/stolen/discharged ?
442
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
443
- <center>
444
- <div class="mo2f_help_container">
445
- <div id="myCarousel3" class="mo2f_carousel slide" data-ride="carousel" >
446
- <ol class="mo2f_carousel-indicators">
447
- <li data-target="#myCarousel3" data-slide-to="0" class="active"></li>
448
- <li data-target="#myCarousel3" data-slide-to="1"></li>
449
- <li data-target="#myCarousel3" data-slide-to="2"></li>
450
- <li data-target="#myCarousel3" data-slide-to="3"></li>
451
- <li data-target="#myCarousel3" data-slide-to="4"></li>
452
-
453
- </ol>
454
- <div class="mo2f_carousel-inner" role="listbox">
455
- <div class="item active">
456
- <p>Enter your username and click on login with your phone.</p>
457
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-1.png" alt="First slide">
458
- </div>
459
- <div class="item">
460
- <p>Click on <b>Forgot Phone?</b> button.</p>
461
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
462
- </div>
463
- <div class="item">
464
- <p><br></p>
465
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-1.png" alt="First slide">
466
- </div>
467
- <div class="item">
468
- <p>Check your email with which you registered and copy the one time passcode.</p><br>
469
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-2.png" alt="First slide">
470
- </div>
471
- <div class="item">
472
- <p><br></p>
473
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/otp-help-3.png" alt="First slide">
474
- </div>
475
- </div>
476
- </div>
477
- </div>
478
- </center>
479
-
480
- <br>
481
- <?php if(current_user_can('manage_options')){ ?>
482
- <h3 id="mo2f_user_reg">How will my users register for 2-Factor ?
483
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mo2f_login">←Back</a></div></h3><hr>
484
- <?php } else { ?>
485
- <h3 id="mo2f_user_reg">How to register with miniOrange and configure 2-Factor ?
486
- <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div></h3><hr>
487
- <?php } ?>
488
- <center>
489
- <div class="mo2f_help_container">
490
- <div id="myCarousel5" class="mo2f_carousel slide" data-ride="carousel" >
491
- <ol class="mo2f_carousel-indicators">
492
- <li data-target="#myCarousel5" data-slide-to="0" class="active"></li>
493
- <li data-target="#myCarousel5" data-slide-to="1"></li>
494
- <li data-target="#myCarousel5" data-slide-to="2"></li>
495
- <li data-target="#myCarousel5" data-slide-to="3"></li>
496
-
497
- </ol>
498
- <div class="mo2f_carousel-inner" role="listbox">
499
- <div class="item active">
500
- <p>If you have enabled 2-Factor for all users. They will login with their username and password and follow the steps after that :</p>
501
-
502
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-4.png" alt="First slide">
503
-
504
- </div>
505
- <div class="item">
506
- <p>Enter a valid email Id and click on Get Started Button.</p>
507
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_user1.png" alt="First slide">
508
- </div>
509
- <div class="item">
510
- <p>Enter the one time passcode sent to your email.</p>
511
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_user2.png" alt="First slide">
512
- </div>
513
- <div class="item">
514
- <p>Email Verification will be set as default 2nd factor.Set another 2nd factor by clicking on radio buttons.</p>
515
- <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_user3.png" alt="First slide">
516
- </div>
517
- </div>
518
- </div>
519
- </div>
520
- </center>
521
 
522
 
523
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
2
 
3
+ <div class="mo2f_table_layout">
4
+ <?php echo mo2f_check_if_registered_with_miniorange($current_user); ?>
5
+ <h3>
6
+ How to Setup OTP Over SMS ?
7
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
8
+ </h3>
9
+ <hr>
10
+ <div id="myCarousel1" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000">
11
+ <ol class="mo2f_carousel-indicators">
12
+ <li data-target="#myCarousel1" data-slide-to="0" class="active"></li>
13
+ <li data-target="#myCarousel1" data-slide-to="1"></li>
14
+ <li data-target="#myCarousel1" data-slide-to="2"></li>
15
+ <li data-target="#myCarousel1" data-slide-to="3"></li>
16
+ </ol>
17
+ <div class="mo2f_carousel-inner" role="listbox">
18
+ <div class="item active">
19
+ <center>
20
+ <b><p>Select <b style="color:red">OTP Over SMS</b> from Setup Two-Factor Tab.</p></b>
21
+ </center>
22
+ <img class="first-slide" style="padding-left:3%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms1.png" alt="First slide">
23
+ </div>
24
+ <div class="item">
25
+ <center>
26
+ <b><p>Enter your phone number and click on verify button.</p></b>
27
+ </center>
28
+ <img class="first-slide" style="padding-left:13%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms2.png" alt="First slide">
29
+ </div>
30
+ <div class="item">
31
+ <b><p>A one time passcode is sent to your mobile number. Enter the one time passcode here and click on <b style="color:red">Validate OTP</b> button.</p></b>
32
+ <img class="first-slide" style="padding-left:13%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms3.png" alt="First slide">
33
+ </div>
34
+ <div class="item">
35
+ <center>
36
+ <b><p>OTP Over SMS is all setup now.</p></b>
37
+ </center>
38
+ <img class="first-slide" style="padding-left:3%;" src="https://auth.miniorange.com/moas/images/help/mo2f_sms4.png" alt="First slide">
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </center>
43
+ <div id="demo1">
44
+ <br>
45
+ <h3>
46
+ How to Setup Soft Token/QR Code Authentication/Push Notification ?
47
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
48
+ </h3>
49
+ <hr>
50
+ <center>
51
+ <div id="myCarousel2" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
52
+ <ol class="mo2f_carousel-indicators">
53
+ <li data-target="#myCarousel2" data-slide-to="0" class="active"></li>
54
+ <li data-target="#myCarousel2" data-slide-to="1"></li>
55
+ <li data-target="#myCarousel2" data-slide-to="2"></li>
56
+ <li data-target="#myCarousel2" data-slide-to="3"></li>
57
+ <li data-target="#myCarousel2" data-slide-to="4"></li>
58
+ <li data-target="#myCarousel2" data-slide-to="5"></li>
59
+ <li data-target="#myCarousel2" data-slide-to="6"></li>
60
+ <li data-target="#myCarousel2" data-slide-to="7"></li>
61
+ </ol>
62
+ <div class="mo2f_carousel-inner" role="listbox">
63
+ <div class="item active">
64
+ <p><b>Select <b style="color:red">Soft Token/QR Code Authentication/Push Notification</b> from Setup Two-Factor Tab.</b></p>
65
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_1.png" alt="First slide">
66
+ </div>
67
+ <div class="item">
68
+ <p><b>Download the miniOrange <b style="color:red">Authenticator</b> App on your phone.</b></p>
69
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_2.png" alt="First slide">
70
+ </div>
71
+ <div class="item">
72
+ <p><b>Scan the QR Code from your phone.</b></p>
73
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/user-register-4.png" alt="First slide">
74
+ </div>
75
+ <div class="item">
76
+ <p><b>Open your App and click on <b style="color:red">Add Account</b> button.</b></p>
77
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_3.jpg" alt="First slide">
78
+ </div>
79
+ <div class="item">
80
+ <p><b>Scan the QR Code by focusing the phone on QR Code.</b></p>
81
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_4.jpg" alt="First slide">
82
+ </div>
83
+ <div class="item">
84
+ <p><b>Registration is successful.</b></p>
85
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.jpg" alt="First slide">
86
+ </div>
87
+ <div class="item">
88
+ <p><b style="color:red">Soft Token </b><b>has been setup successfully.</b></p>
89
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/user-register-5.png" alt="First slide">
90
+ </div>
91
+ <div class="item">
92
+ <p><b>Soft Token is set now. QR Code Authentication/Push Notification need not be setup again.</b></p>
93
+ <img class="first-slide" style="width:84%;" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_6.png" alt="First slide">
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ </center>
99
+ </div>
100
+ <div id="demo2">
101
+ <br>
102
+ <h3>
103
+ How To Setup Phone Call Verification ?
104
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
105
+ </h3>
106
+ <hr>
107
+ <center>
108
+ <div id="myCarousel3" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000">
109
+ <ol class="mo2f_carousel-indicators">
110
+ <li data-target="#myCarousel3" data-slide-to="0" class="active"></li>
111
+ <li data-target="#myCarousel3" data-slide-to="1"></li>
112
+ <li data-target="#myCarousel3" data-slide-to="2"></li>
113
+ <li data-target="#myCarousel3" data-slide-to="3"></li>
114
+ </ol>
115
+ <div class="mo2f_carousel-inner" role="listbox">
116
+ <div class="item active">
117
+ <p><b>Select <b style="color:red">Phone call verfication</b> from Setup Two-Factor Tab.</b></p>
118
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_1.png" alt="First slide">
119
+ </div>
120
+ <div class="item">
121
+ <p><b>Enter your phone number and click on <b style="color:red">Verify</b> button.You will receive a phone call on the number.</b></p>
122
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_2.png" alt="First slide">
123
+ </div>
124
+ <div class="item">
125
+ <p><b>Enter the one time passcode here and click on <b style="color:red">Validate OTP</b> button.</b></p>
126
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_3.png" alt="First slide">
127
+ </div>
128
+ <div class="item">
129
+ <p><b>Phone Call verification is set now.</b></p>
130
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_phone_4.png" alt="First slide">
131
+ </div>
132
+ </div>
133
+
134
+ </div>
135
+ </center>
136
+ </div>
137
+
138
+ <div id="demo5">
139
+ <br>
140
+ <h3>
141
+ How to Setup Google Authenticator ?
142
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
143
+ </h3>
144
+ <hr>
145
+ <center>
146
+ <div id="myCarousel4" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000">
147
+ <ol class="mo2f_carousel-indicators">
148
+ <li data-target="#myCarousel4" data-slide-to="0" class="active"></li>
149
+ <li data-target="#myCarousel4" data-slide-to="1"></li>
150
+ <li data-target="#myCarousel4" data-slide-to="2"></li>
151
+ </ol>
152
+ <div class="mo2f_carousel-inner" role="listbox">
153
+ <div class="item active">
154
+ <p><b>Select <b style="color:red">Google Authenticator</b> from Setup Two-Factor Tab.</b></p>
155
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/google_app_setup-1.png" alt="First slide">
156
+ </div>
157
+ <div class="item">
158
+ <p><b>Download Google Authenticator App on your phone. Select your phone type on the screen.</b></p>
159
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/google_app_setup-2.png" alt="First slide">
160
+ </div>
161
+ <div class="item">
162
+ <p><b>Google Authenticator setup is successful.</b></p>
163
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/google_app_setup-3.png" alt="First slide">
164
+ </div>
165
+ </div>
166
+ </div>
167
+
168
+ </center>
169
+ </div>
170
+ <div id="demo6">
171
+ <br>
172
+ <h3>
173
+ How to Setup Security Questions (KBA) ?
174
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
175
+ </h3>
176
+ <hr>
177
+ <center>
178
+ <div id="myCarousel5" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000">
179
+ <ol class="mo2f_carousel-indicators">
180
+ <li data-target="#myCarousel5" data-slide-to="0" class="active"></li>
181
+ <li data-target="#myCarousel5" data-slide-to="1"></li>
182
+ <li data-target="#myCarousel5" data-slide-to="2"></li>
183
+ </ol>
184
+ <div class="mo2f_carousel-inner" role="listbox">
185
+ <div class="item active">
186
+ <p><b>Select <b style="color:red">KBA</b> from Setup Two-Factor Tab.</b></p>
187
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/kba-setup-1.png" alt="First slide">
188
+ </div>
189
+ <div class="item">
190
+ <p><b>Select 3 questions of your choice.</b></p>
191
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/kba-setup-2.png" alt="First slide">
192
+ </div>
193
+ <div class="item">
194
+ <p>Save your answers.</p>
195
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/kba-setup-3.png" alt="First slide">
196
+ </div>
197
+ </div>
198
+ </div>
199
+
200
+ </center>
201
+ </div>
202
+
203
+
204
+ <div id="demo4">
205
+ <h3>
206
+ How to Test Soft Token
207
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
208
+ </h3>
209
+ <hr>
210
+ <center>
211
+ <div id="myCarousel6" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000">
212
+ <!-- Indicators -->
213
+ <ol class="mo2f_carousel-indicators">
214
+ <li data-target="#myCarousel6" data-slide-to="0" class="active"></li>
215
+ <li data-target="#myCarousel6" data-slide-to="1"></li>
216
+ <li data-target="#myCarousel6" data-slide-to="2"></li>
217
+ <li data-target="#myCarousel6" data-slide-to="3"></li>
218
+ <li data-target="#myCarousel6" data-slide-to="4"></li>
219
+ </ol>
220
+ <div class="mo2f_carousel-inner" role="listbox">
221
+ <div class="item active">
222
+ <p><b>Click on <b style="color:red">Test</b> in Soft Token authentication method.</b></p>
223
+ <br>
224
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/soft-token-test-1.png" alt="First slide">
225
+ </div>
226
+ <div class="item">
227
+ <p><b>Open miniOrange <b style="color:red">Authenticator</b> app and click on Sync time from the top left menu option.</b></p>
228
+ <br>
229
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.jpg" alt="First slide">
230
+ </div>
231
+ <div class="item">
232
+ <p><b>Click on <b style="color:red">Sync Time now</b> to sync your time with miniOrange Servers. This is a one time sync to avoid otp validation failure.</b></p>
233
+ <br>
234
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-3.jpg" alt="First slide">
235
+ </div>
236
+ <div class="item">
237
+ <p><b>Go to Home.</b></p>
238
+ <br>
239
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-2.jpg" alt="First slide">
240
+ </div>
241
+ <div class="item">
242
+ <p><b>Enter the one time passcode shown in miniOrange <b style="color:red">Authenticator</b> app here.</b></p>
243
+ <br>
244
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/soft-token-test-2.png" alt="First slide">
245
+ </div>
246
+ </div>
247
+ </div>
248
+ </center>
249
+ </div>
250
+
251
+ <br />
252
+ <h3>
253
+ How to Login with Password + Two-Factor ?
254
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
255
+ </h3>
256
+ <hr>
257
+ <center>
258
+ <div id="myCarousel7" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
259
+ <ol class="mo2f_carousel-indicators">
260
+ <li data-target="#myCarousel7" data-slide-to="0" class="active"></li>
261
+ <li data-target="#myCarousel7" data-slide-to="1"></li>
262
+ <li data-target="#myCarousel7" data-slide-to="2"></li>
263
+ <li data-target="#myCarousel7" data-slide-to="3"></li>
264
+ <li data-target="#myCarousel7" data-slide-to="4"></li>
265
+ <li data-target="#myCarousel7" data-slide-to="5"></li>
266
+ </ol>
267
+ <div class="mo2f_carousel-inner" role="listbox">
268
+ <div class="item active">
269
+ <p><b>Enter your username and password and click on login button.</b></p>
270
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-4.png" alt="First slide">
271
+ </div>
272
+ <div class="item">
273
+ <p><br></p>
274
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
275
+ </div>
276
+ <div class="item">
277
+ <p><b>Open miniOrange <b style="color:red">Authenticator</b> app and click on Scan QR Code.</b></p>
278
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.jpg" alt="First slide">
279
+ </div>
280
+ <div class="item">
281
+ <p><b> Scan the QR code</b><br></p>
282
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-3.jpg" alt="First slide">
283
+ </div>
284
+ <div class="item">
285
+ <p><br></p>
286
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.jpg" alt="First slide">
287
+ </div>
288
+ <div class="item">
289
+ <p><b>Once you are authenticated, you will be logged in.</b></p>
290
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-2.png" alt="First slide" style="height:400px;">
291
+ </div>
292
+ </div>
293
+
294
+ </div>
295
+ </center>
296
+ <br>
297
+ <h3>
298
+ How to login with 2nd Factor only (No password required)?
299
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
300
+ </h3>
301
+ <hr>
302
+ <center>
303
+ <div id="myCarousel8" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000">
304
+ <ol class="mo2f_carousel-indicators">
305
+ <li data-target="#myCarousel8" data-slide-to="0" class="active"></li>
306
+ <li data-target="#myCarousel8" data-slide-to="1"></li>
307
+ <li data-target="#myCarousel8" data-slide-to="2"></li>
308
+ <li data-target="#myCarousel8" data-slide-to="3"></li>
309
+ <li data-target="#myCarousel8" data-slide-to="4"></li>
310
+ </ol>
311
+ <div class="mo2f_carousel-inner" role="listbox">
312
+ <div class="item active">
313
+ <p><b>Enter your username and click on <b style="color:red">Login with your phone.</b></b></p>
314
+ <p style="margin-left: -40px;" ><b>Login Form Option 1</b><span style="margin-left:90px;"><b>Login Form Option 2</b></span></p>
315
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-1.png" alt="First slide">
316
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-3.png" alt="First slide">
317
+ </div>
318
+ <div class="item">
319
+ <p><br></p>
320
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
321
+ </div>
322
+ <div class="item">
323
+ <p><b>Open miniOrange <b style="color:red">Authenticator</b> app and click on Scan QR Code.</b></p>
324
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_softtoken_5.jpg" alt="First slide">
325
+ </div>
326
+ <div class="item">
327
+ <p><b>Scan the QR Code</b><br></p>
328
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-3.jpg" alt="First slide">
329
+ </div>
330
+ <div class="item">
331
+ <p><b>Once you are authenticated, you will be logged in.</b></p>
332
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-2.png" alt="First slide" style="height:400px;">
333
+ </div>
334
+ </div>
335
+ </div>
336
+
337
+ </center>
338
+ <br>
339
+ <h3>
340
+ How to login in offline mode (no internet connectivity) ?
341
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
342
+ </h3>
343
+ <hr>
344
+ <center>
345
+ <div id="myCarousel9" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
346
+ <ol class="mo2f_carousel-indicators">
347
+ <li data-target="#myCarousel9" data-slide-to="0" class="active"></li>
348
+ <li data-target="#myCarousel9" data-slide-to="1"></li>
349
+ <li data-target="#myCarousel9" data-slide-to="2"></li>
350
+ <li data-target="#myCarousel9" data-slide-to="3"></li>
351
+ <li data-target="#myCarousel9" data-slide-to="4"></li>
352
+ <li data-target="#myCarousel9" data-slide-to="5"></li>
353
+ </ol>
354
+ <div class="mo2f_carousel-inner" role="listbox">
355
+ <div class="item active">
356
+ <p><b>Enter your username and click on <b style="color:red">Login with your phone.</b></b></p>
357
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-1.png" alt="First slide">
358
+ </div>
359
+ <div class="item">
360
+ <p><b>Click on <b style="color:red">Phone is Offline?</b> button.</b></p>
361
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-1.png" alt="First slide">
362
+ </div>
363
+ <div class="item">
364
+ <p><b>Open miniOrange <b style="color:red">Authenticator</b> app and click on Sync time from the top left menu option.</b></p>
365
+ <br>
366
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/qr-help-2.jpg" alt="First slide">
367
+ </div>
368
+ <div class="item">
369
+ <p><b>Click on <b style="color:red">Sync Time now</b> below to sync your time with miniOrange Servers. This is a one time sync to avoid otp validation failure.</b></p>
370
+ <br>
371
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-3.jpg" alt="First slide">
372
+ </div>
373
+ <div class="item">
374
+ <p><b>Go to Home.</b></p>
375
+ <br>
376
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-2.jpg" alt="First slide">
377
+ </div>
378
+ <div class="item">
379
+ <p><b>Enter the one time passcode shown in miniOrange <b style="color:red">Authenticator</b> app here.</b></p>
380
+ <br>
381
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/token-help-4.png" alt="First slide">
382
+ </div>
383
+ </div>
384
+ </div>
385
+
386
+ </center>
387
+ <br>
388
+ <h3>
389
+ How to login if your phone is not with you or lost/stolen/discharged ?
390
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
391
+ </h3>
392
+ <hr>
393
+ <center>
394
+ <div id="myCarousel10" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
395
+ <ol class="mo2f_carousel-indicators">
396
+ <li data-target="#myCarousel10" data-slide-to="0" class="active"></li>
397
+ <li data-target="#myCarousel10" data-slide-to="1"></li>
398
+ <li data-target="#myCarousel10" data-slide-to="2"></li>
399
+ </ol>
400
+ <div class="mo2f_carousel-inner" role="listbox">
401
+ <div class="item active">
402
+ <p><b>Enter your Wordpress username and password.</b></p>
403
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-1.png" alt="First slide">
404
+ </div>
405
+ <div class="item">
406
+ <p><b>Click on <b style="color:red">Forgot Phone?</b> button.</b></p>
407
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-11.png" alt="First slide">
408
+ </div>
409
+ <div class="item">
410
+ <p><b>Choose one of the options below to login.</b></p>
411
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-12.png" alt="First slide">
412
+ </div>
413
+ </div>
414
+ </div>
415
+
416
+ </center>
417
+ <br>
418
+ <?php if(current_user_can('manage_options')){ ?>
419
+ <h3 id="mo2f_user_reg">
420
+ How will my users register for 2-Factor ?
421
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mo2f_login">←Back</a></div>
422
+ </h3>
423
+ <hr>
424
+ <?php } else { ?>
425
+ <h3 id="mo2f_user_reg">
426
+ How to register with miniOrange and configure 2-Factor ?
427
+ <div style="float:right;"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mobile_configure">←Back</a></div>
428
+ </h3>
429
+ <hr>
430
+ <?php } ?>
431
+ <center>
432
+ <div id="myCarousel11" class="mo2f_carousel slide" data-ride="carousel" data-interval="15000" >
433
+ <ol class="mo2f_carousel-indicators">
434
+ <li data-target="#myCarousel11" data-slide-to="0" class="active"></li>
435
+ <li data-target="#myCarousel11" data-slide-to="1"></li>
436
+ <li data-target="#myCarousel11" data-slide-to="2"></li>
437
+ <li data-target="#myCarousel11" data-slide-to="3"></li>
438
+ </ol>
439
+ <div class="mo2f_carousel-inner" role="listbox">
440
+ <div class="item active">
441
+ <p><b>If you have enabled 2-Factor for all users, they will be promped for 2FA set up during their login.</b></p>
442
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/login-help-4.png" alt="First slide">
443
+ </div>
444
+ <div class="item">
445
+ <p><b>Enter a valid email Id and click on <b style="color:red">Get Started</b> Button.</b></p>
446
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_user1.png" alt="First slide">
447
+ </div>
448
+ <div class="item">
449
+ <p><b>Enter the one time passcode sent to your email.</b></p>
450
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_user2.png" alt="First slide">
451
+ </div>
452
+ <div class="item">
453
+ <p><b>Select the preferred 2-factor method to setup.</b></p>
454
+ <img class="first-slide" src="https://auth.miniorange.com/moas/images/help/mo2f_user3.png" alt="First slide">
455
+ </div>
456
+ </div>
457
+ </div>
458
+ </center>
459
+ </div>
miniorange_2_factor_mobile_configuration.php CHANGED
@@ -477,7 +477,7 @@
477
  function download_instruction_for_mobile_app($current_user){ ?>
478
  <div id="mo2f_app_div" class="mo_margin_left">
479
  <?php if(!get_user_meta($current_user->ID,'mo2f_mobile_registration_status',true)) { ?>
480
- <a class="mo_app_link" data-toggle="collapse" href="#mo2f_sub_header_app" aria-expanded="false" ><h3 class="mo2f_authn_header">Step-1 : Download the <span style="color: #F78701;">miniOrange Authenticator</span> App</h3></a><hr class="mo_hr">
481
 
482
  <div class="mo2f_collapse in" id="mo2f_sub_header_app">
483
  <?php } ?>
@@ -489,7 +489,7 @@
489
  <ol>
490
  <li>Go to App Store</li>
491
  <li>Search for <b>miniOrange</b></li>
492
- <li>Download and install <span style="color: #F78701;"><b>miniOrange Authenticator</b></span> app (<b>NOT MOAuth</b>)</li>
493
  </ol>
494
  <span><a target="_blank" href="https://itunes.apple.com/us/app/miniorange-authenticator/id796303566?ls=1"><img src="<?php echo plugins_url( 'includes/images/appstore.png' , __FILE__ );?>" style="width:120px; height:45px; margin-left:6px;"></a></span>
495
  </td>
@@ -498,9 +498,9 @@
498
  <ol>
499
  <li> Go to Google Play Store.</li>
500
  <li> Search for <b>miniOrange.</b></li>
501
- <li>Download and install miniOrange <span style="color: #F78701;"><b>miniOrange Authenticator</b></span> app (<b>NOT MOAuth </b>)</li>
502
  </ol>
503
- <a target="_blank" href="https://play.google.com/store/apps/details?id=com.miniorange.authbeta"><img src="<?php echo plugins_url( 'includes/images/playStore.png' , __FILE__ );?>" style="width:120px; height:=45px; margin-left:6px;"></a>
504
  </td>
505
 
506
  </tr>
@@ -986,6 +986,31 @@
986
  </div>
987
  </td>
988
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
989
 
990
  </table>
991
  <?php echo $random_mo_key ? '<h4>*10 free transactions of OTP over SMS are provided in the free version of the plugin. </h4><h4>
@@ -1206,6 +1231,7 @@
1206
  <form name="f" method="post" action="" >
1207
  <span><b>Code: </b>
1208
  <input class="mo2f_table_textbox" style="width:200px;" autofocus="true" required="true" type="text" name="authy_token" placeholder="Enter OTP" style="width:95%;"/></span><br /><br/>
 
1209
  <input type="hidden" name="option" value="mo2f_validate_authy_auth" />
1210
  <input type="submit" name="validate" id="validate" class="button button-primary button-large" style="margin-left:12%;"value="Verify and Save" />
1211
  </form>
@@ -1347,6 +1373,7 @@
1347
  <form name="f" method="post" action="" >
1348
  <span><b>Code: </b>
1349
  <input class="mo2f_table_textbox" style="width:200px;" autofocus="true" required="true" type="text" name="google_token" placeholder="Enter OTP" style="width:95%;"/></span><br /><br/>
 
1350
  <input type="hidden" name="option" value="mo2f_validate_google_auth" />
1351
  <input type="submit" name="validate" id="validate" class="button button-primary button-large" style="margin-left:12%;"value="Verify and Save" />
1352
  </form>
@@ -1415,7 +1442,7 @@
1415
  $url = get_option('mo2f_host_name');
1416
  ?>
1417
 
1418
- <p>Open your <b>miniOrange Authenticator</b> app and click on <b>Configure button</b> to scan the QR Code. Your phone should have internet connectivity to scan QR code.</p>
1419
  <div style="color:red;">
1420
  <p>I am not able to scan the QR code, <a data-toggle="collapse" href="#mo2f_scanqrcode" aria-expanded="false" >click here </a></p></div>
1421
  <div class="mo2f_collapse" id="mo2f_scanqrcode">
@@ -1500,7 +1527,7 @@
1500
  ?>
1501
 
1502
  <h3>Test QR Code Authentication</h3><hr>
1503
- <p>Open your <b>miniOrange Authenticator App</b> and click on <b>Green button</b> to scan the QR code. Your phone should have internet connectivity to scan QR code.</p>
1504
 
1505
  <div style="color:red;"><b>I am not able to scan the QR code, <a data-toggle="collapse" href="#mo2f_testscanqrcode" aria-expanded="false" >click here </a></b></div>
1506
  <div class="mo2f_collapse" id="mo2f_testscanqrcode">
477
  function download_instruction_for_mobile_app($current_user){ ?>
478
  <div id="mo2f_app_div" class="mo_margin_left">
479
  <?php if(!get_user_meta($current_user->ID,'mo2f_mobile_registration_status',true)) { ?>
480
+ <a class="mo_app_link" data-toggle="collapse" href="#mo2f_sub_header_app" aria-expanded="false" ><h3 class="mo2f_authn_header">Step-1 : Download the miniOrange<span style="color: #F78701;"> Authenticator</span> App</h3></a><hr class="mo_hr">
481
 
482
  <div class="mo2f_collapse in" id="mo2f_sub_header_app">
483
  <?php } ?>
489
  <ol>
490
  <li>Go to App Store</li>
491
  <li>Search for <b>miniOrange</b></li>
492
+ <li>Download and install <span style="color: #F78701;">miniOrange<b> Authenticator</b></span> app (<b>NOT MOAuth</b>)</li>
493
  </ol>
494
  <span><a target="_blank" href="https://itunes.apple.com/us/app/miniorange-authenticator/id796303566?ls=1"><img src="<?php echo plugins_url( 'includes/images/appstore.png' , __FILE__ );?>" style="width:120px; height:45px; margin-left:6px;"></a></span>
495
  </td>
498
  <ol>
499
  <li> Go to Google Play Store.</li>
500
  <li> Search for <b>miniOrange.</b></li>
501
+ <li>Download and install <span style="color: #F78701;"><b> Authenticator</b></span> app (<b>NOT miniOrange Authenticator/MOAuth)</b></li>
502
  </ol>
503
+ <a 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' , __FILE__ );?>" style="width:120px; height:=45px; margin-left:6px;"></a>
504
  </td>
505
 
506
  </tr>
986
  </div>
987
  </td>
988
  </tr>
989
+ <tr>
990
+ <!-- OTP Over SMS and EMail method-->
991
+ <td class="<?php if( !current_user_can('manage_options') && !(in_array("SMS AND EMAIL", $opt)) ){ echo "mo2f_td_hide"; }else { echo "mo2f_td_show"; } ?>">
992
+ <div><div class="mo2f_grayed_out_link"><?php echo $random_mo_key ? '<span style="float:right;" title="This feature is avialable in premium version of plugin"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mo2f_pricing" ><b>PREMIUM**</b></a></span>' :'';?></div>
993
+ <div class="mo2f_thumbnail<?php echo $random_mo_key ? " mo2f_grayed_out" : '';?>" >
994
+ <label title="Supported in Landline phones, Smartphones, Feature phones.">
995
+ <input type="radio" name="mo2f_selected_2factor_method" style="margin:5px;" value="PHONE VERIFICATION" <?php checked($mo2f_second_factor == 'SMS AND EMAIL');
996
+ if(!$random_mo_key && (get_user_meta($current_user->ID,'mo_2factor_user_registration_status',true) == 'MO_2_FACTOR_PLUGIN_SETTINGS' || get_user_meta($current_user->ID,'mo_2factor_user_registration_status',true) == 'MO_2_FACTOR_INITIALIZE_TWO_FACTOR') ){
997
+ } else{ echo 'disabled'; } ?> />
998
+ OTP Over SMS And Email
999
+ </label><hr>
1000
+ <p>
1001
+ You will receive a one time passcode via SMS on your phone and your e-mail. You have to enter the otp on your screen to login. Supported in Smartphones, Feature Phones.
1002
+ </p>
1003
+ <?php if(get_user_meta($current_user->ID,'mo2f_otp_registration_status',true)){ ?>
1004
+ <div class="configuredLandline" id="PHONE_VERIFICATION" title="Supported in Landline phones, Smartphones, Feature phones.">
1005
+ <a href="#reconfigure" data-method="PHONE VERIFICATION" >Reconfigure</a> | <a href="#test" data-method="PHONE VERIFICATION">Test</a>
1006
+ </div>
1007
+ <?php } else { ?>
1008
+ <div class="notConfiguredLandline" title="supported in Landline phone,smartphone,feature phone"><a href="admin.php?page=miniOrange_2_factor_settings&amp;mo2f_tab=mo2f_demo#demo2">How To Setup ?</a></div>
1009
+ <?php } ?>
1010
+ </div>
1011
+ </div>
1012
+ </td>
1013
+ </tr>
1014
 
1015
  </table>
1016
  <?php echo $random_mo_key ? '<h4>*10 free transactions of OTP over SMS are provided in the free version of the plugin. </h4><h4>
1231
  <form name="f" method="post" action="" >
1232
  <span><b>Code: </b>
1233
  <input class="mo2f_table_textbox" style="width:200px;" autofocus="true" required="true" type="text" name="authy_token" placeholder="Enter OTP" style="width:95%;"/></span><br /><br/>
1234
+ <input type="hidden" name="authy_secret" value="<?php echo $authy_secret; ?>" />
1235
  <input type="hidden" name="option" value="mo2f_validate_authy_auth" />
1236
  <input type="submit" name="validate" id="validate" class="button button-primary button-large" style="margin-left:12%;"value="Verify and Save" />
1237
  </form>
1373
  <form name="f" method="post" action="" >
1374
  <span><b>Code: </b>
1375
  <input class="mo2f_table_textbox" style="width:200px;" autofocus="true" required="true" type="text" name="google_token" placeholder="Enter OTP" style="width:95%;"/></span><br /><br/>
1376
+ <input type="hidden" name="google_auth_secret" value="<?php echo $ga_secret ?>" />
1377
  <input type="hidden" name="option" value="mo2f_validate_google_auth" />
1378
  <input type="submit" name="validate" id="validate" class="button button-primary button-large" style="margin-left:12%;"value="Verify and Save" />
1379
  </form>
1442
  $url = get_option('mo2f_host_name');
1443
  ?>
1444
 
1445
+ <p>Open your miniOrange<b> Authenticator</b> app and click on <b>Add Account</b> to scan the QR Code. Your phone should have internet connectivity to scan QR code.</p>
1446
  <div style="color:red;">
1447
  <p>I am not able to scan the QR code, <a data-toggle="collapse" href="#mo2f_scanqrcode" aria-expanded="false" >click here </a></p></div>
1448
  <div class="mo2f_collapse" id="mo2f_scanqrcode">
1527
  ?>
1528
 
1529
  <h3>Test QR Code Authentication</h3><hr>
1530
+ <p>Open your miniOrange <b>Authenticator App</b> and click on <b>'Scan QR code'</b> to scan the QR code. Your phone should have internet connectivity to scan QR code.</p>
1531
 
1532
  <div style="color:red;"><b>I am not able to scan the QR code, <a data-toggle="collapse" href="#mo2f_testscanqrcode" aria-expanded="false" >click here </a></b></div>
1533
  <div class="mo2f_collapse" id="mo2f_testscanqrcode">
miniorange_2_factor_settings.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: http://miniorange.com
5
  * Description: This plugin provides various two-factor authentication methods as an additional layer of security for wordpress login. We Support Phone Call, SMS, Email Verification, QR Code, Push, Soft Token, Google Authenticator, Authy, Security Questions(KBA), Woocommerce front-end login, Shortcodes for custom login pages.
6
- * Version: 4.4.9
7
  * Author: miniOrange
8
  * Author URI: http://miniorange.com
9
  * License: GPL2
@@ -28,7 +28,7 @@ class Miniorange_Authentication {
28
 
29
  function __construct() {
30
 
31
- $mo2f_auth_types = array('OUT OF BAND EMAIL','SMS','PHONE VERIFICATION','SOFT TOKEN','MOBILE AUTHENTICATION','PUSH NOTIFICATIONS','GOOGLE AUTHENTICATOR','AUTHY 2-FACTOR AUTHENTICATION','KBA');
32
  add_option( 'mo2f_auth_methods_for_users' ,$mo2f_auth_types);
33
  add_option( 'mo2f_inline_registration',0);
34
  add_option( 'mo2f_enable_mobile_support', 1);
@@ -1180,8 +1180,7 @@ class Miniorange_Authentication {
1180
 
1181
  if(isset($_POST['option']) && $_POST['option'] == 'mo2f_validate_google_auth' ){
1182
  $otpToken = $_POST['google_token'];
1183
- $mo2f_google_auth = isset($_SESSION['mo2f_google_auth']) ? $_SESSION['mo2f_google_auth'] : null;
1184
- $ga_secret = $mo2f_google_auth != null ? $mo2f_google_auth['ga_secret'] : null;
1185
  if(MO2f_Utility::mo2f_check_number_length($otpToken)){
1186
  $email = get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true);
1187
  $google_auth = new Miniorange_Rba_Attributes();
@@ -1200,8 +1199,7 @@ class Miniorange_Authentication {
1200
  delete_user_meta($current_user->ID,'mo_2factor_mobile_registration_status');
1201
  update_user_meta($current_user->ID,'mo_2factor_user_registration_with_miniorange','SUCCESS');
1202
  update_user_meta($current_user->ID,'mo_2factor_user_registration_status','MO_2_FACTOR_PLUGIN_SETTINGS');
1203
- update_user_meta($current_user->ID,'mo2f_external_app_type','GOOGLE AUTHENTICATOR');
1204
- unset($_SESSION['mo2f_google_auth']);
1205
  $message = '<b>Google Authenticator</b> has been set as your 2nd factor method. <a href=\"#test\" data-method=\"GOOGLE AUTHENTICATOR\">Click Here</a> to test Google Authenticator method.';
1206
  update_option( 'mo2f_message',$message );
1207
  $this->mo_auth_show_success_message();
@@ -1254,8 +1252,7 @@ class Miniorange_Authentication {
1254
 
1255
  if(isset($_POST['option']) && $_POST['option'] == 'mo2f_validate_authy_auth' ){
1256
  $otpToken = $_POST['authy_token'];
1257
- $mo2f_google_auth = isset($_SESSION['mo2f_authy_keys']) ? $_SESSION['mo2f_authy_keys'] : null;
1258
- $authy_secret = $mo2f_google_auth != null ? $mo2f_google_auth['authy_secret'] : null;
1259
  if(MO2f_Utility::mo2f_check_number_length($otpToken)){
1260
  $email = get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true);
1261
  $authy_auth = new Miniorange_Rba_Attributes();
@@ -1274,8 +1271,7 @@ class Miniorange_Authentication {
1274
  delete_user_meta($current_user->ID,'mo_2factor_mobile_registration_status');
1275
  update_user_meta($current_user->ID,'mo_2factor_user_registration_with_miniorange','SUCCESS');
1276
  update_user_meta($current_user->ID,'mo_2factor_user_registration_status','MO_2_FACTOR_PLUGIN_SETTINGS');
1277
- update_user_meta($current_user->ID,'mo2f_external_app_type','AUTHY 2-FACTOR AUTHENTICATION');
1278
- unset($_SESSION['mo2f_authy_keys']);
1279
  $message = '<b>Authy 2-Factor Authentication</b> has been set as your 2nd factor method. <a href=\"#test\" data-method=\"AUTHY 2-FACTOR AUTHENTICATION\">Click Here</a> to test Authy 2-Factor Authentication method.';
1280
  update_option( 'mo2f_message',$message );
1281
  $this->mo_auth_show_success_message();
3
  * Plugin Name: miniOrange 2 Factor Authentication
4
  * Plugin URI: http://miniorange.com
5
  * Description: This plugin provides various two-factor authentication methods as an additional layer of security for wordpress login. We Support Phone Call, SMS, Email Verification, QR Code, Push, Soft Token, Google Authenticator, Authy, Security Questions(KBA), Woocommerce front-end login, Shortcodes for custom login pages.
6
+ * Version: 4.5.1
7
  * Author: miniOrange
8
  * Author URI: http://miniorange.com
9
  * License: GPL2
28
 
29
  function __construct() {
30
 
31
+ $mo2f_auth_types = array('OUT OF BAND EMAIL','SMS','PHONE VERIFICATION','SOFT TOKEN','MOBILE AUTHENTICATION','PUSH NOTIFICATIONS','GOOGLE AUTHENTICATOR','SMS AND EMAIL', 'AUTHY 2-FACTOR AUTHENTICATION','KBA');
32
  add_option( 'mo2f_auth_methods_for_users' ,$mo2f_auth_types);
33
  add_option( 'mo2f_inline_registration',0);
34
  add_option( 'mo2f_enable_mobile_support', 1);
1180
 
1181
  if(isset($_POST['option']) && $_POST['option'] == 'mo2f_validate_google_auth' ){
1182
  $otpToken = $_POST['google_token'];
1183
+ $ga_secret = isset($_POST['google_auth_secret']) ? $_POST['google_auth_secret'] : null;
 
1184
  if(MO2f_Utility::mo2f_check_number_length($otpToken)){
1185
  $email = get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true);
1186
  $google_auth = new Miniorange_Rba_Attributes();
1199
  delete_user_meta($current_user->ID,'mo_2factor_mobile_registration_status');
1200
  update_user_meta($current_user->ID,'mo_2factor_user_registration_with_miniorange','SUCCESS');
1201
  update_user_meta($current_user->ID,'mo_2factor_user_registration_status','MO_2_FACTOR_PLUGIN_SETTINGS');
1202
+ update_user_meta($current_user->ID,'mo2f_external_app_type','GOOGLE AUTHENTICATOR');
 
1203
  $message = '<b>Google Authenticator</b> has been set as your 2nd factor method. <a href=\"#test\" data-method=\"GOOGLE AUTHENTICATOR\">Click Here</a> to test Google Authenticator method.';
1204
  update_option( 'mo2f_message',$message );
1205
  $this->mo_auth_show_success_message();
1252
 
1253
  if(isset($_POST['option']) && $_POST['option'] == 'mo2f_validate_authy_auth' ){
1254
  $otpToken = $_POST['authy_token'];
1255
+ $authy_secret = isset($_POST['authy_secret']) ? $_POST['authy_secret'] : null;
 
1256
  if(MO2f_Utility::mo2f_check_number_length($otpToken)){
1257
  $email = get_user_meta($current_user->ID,'mo_2factor_map_id_with_email',true);
1258
  $authy_auth = new Miniorange_Rba_Attributes();
1271
  delete_user_meta($current_user->ID,'mo_2factor_mobile_registration_status');
1272
  update_user_meta($current_user->ID,'mo_2factor_user_registration_with_miniorange','SUCCESS');
1273
  update_user_meta($current_user->ID,'mo_2factor_user_registration_status','MO_2_FACTOR_PLUGIN_SETTINGS');
1274
+ update_user_meta($current_user->ID,'mo2f_external_app_type','AUTHY 2-FACTOR AUTHENTICATION');
 
1275
  $message = '<b>Authy 2-Factor Authentication</b> has been set as your 2nd factor method. <a href=\"#test\" data-method=\"AUTHY 2-FACTOR AUTHENTICATION\">Click Here</a> to test Authy 2-Factor Authentication method.';
1276
  update_option( 'mo2f_message',$message );
1277
  $this->mo_auth_show_success_message();
miniorange_2_factor_troubleshooting.php CHANGED
@@ -152,7 +152,7 @@
152
  <hr>
153
  <h3><a data-toggle="collapse" href="#question19" aria-expanded="false" ><li>My phone has no internet connectivity and i am entering the one time passcode from miniOrange Authenticator App, it says Invalid OTP.</li></a></h3>
154
  <div class="mo2f_collapse" id="question19">
155
- Click on the <b>Settings Icon</b> on top right corner in <b>miniOrange Authenticator App</b> and then press <b>Sync button</b> under 'Time correction for codes' to sync your time with miniOrange Servers. If you still can't get it right, submit a query here in our <b>support section</b>.<br><br>
156
  </div>
157
  <hr>
158
  <?php if(current_user_can( 'manage_options' )) { ?>
152
  <hr>
153
  <h3><a data-toggle="collapse" href="#question19" aria-expanded="false" ><li>My phone has no internet connectivity and i am entering the one time passcode from miniOrange Authenticator App, it says Invalid OTP.</li></a></h3>
154
  <div class="mo2f_collapse" id="question19">
155
+ Click on the <b>Settings Icon</b> on top right corner in miniOrange<b> Authenticator App</b> and then press <b>Sync button</b> under 'Time correction for codes' to sync your time with miniOrange Servers. If you still can't get it right, submit a query here in our <b>support section</b>.<br><br>
156
  </div>
157
  <hr>
158
  <?php if(current_user_can( 'manage_options' )) { ?>
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
- === Google Authenticator - Two Factor Authentication ===
2
  Contributors: miniOrange
3
  Tags: google authenticator, two factor authentication, two factor, 2FA, 2 factor authentication, two step verification, 1 google authenticator, login, authy, authy two factor, Clef, 2 Factor, yubico, Two-Factor Authentication, Mobile Authentication, otp, strong authentication, 2 step authentication, smartphone authentication, Multifactor authentication, multi factor authentication, multi factor, no password, passwordless login, security, website security, one time passcode, password, soft token, woocommerce, authenticate, two factor auth, two-factor, duo, QR Code, QR Code Authentication, scan QR Code, wordfence, login security, google authenticator, google , email verification, trusted device, device Id , KBA , knowledge based authentication
4
  Requires at least: 3.0.1
5
- Tested up to: 4.7.3
6
- Stable tag: 4.4.9
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -240,6 +240,12 @@ miniOrange authentication service has 15+ authentication methods.One time passco
240
 
241
  == Changelog ==
242
 
 
 
 
 
 
 
243
  = 4.4.9 =
244
  * Google Authenticator (2FA) : Added Alert Message for SMS Transactions only when authentication method is OTP over SMS.
245
 
1
+ === Google Authenticator - Two Factor Authentication (2FA) ===
2
  Contributors: miniOrange
3
  Tags: google authenticator, two factor authentication, two factor, 2FA, 2 factor authentication, two step verification, 1 google authenticator, login, authy, authy two factor, Clef, 2 Factor, yubico, Two-Factor Authentication, Mobile Authentication, otp, strong authentication, 2 step authentication, smartphone authentication, Multifactor authentication, multi factor authentication, multi factor, no password, passwordless login, security, website security, one time passcode, password, soft token, woocommerce, authenticate, two factor auth, two-factor, duo, QR Code, QR Code Authentication, scan QR Code, wordfence, login security, google authenticator, google , email verification, trusted device, device Id , KBA , knowledge based authentication
4
  Requires at least: 3.0.1
5
+ Tested up to: 4.8
6
+ Stable tag: 4.5.1
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
240
 
241
  == Changelog ==
242
 
243
+ = 4.5.1 =
244
+ * Google Authenticator (2FA) : Updated the new Authenticator App's link and the 'How to Setup Tab' tab.
245
+
246
+ = 4.5.0 =
247
+ * Google Authenticator (2FA) : Fix Google Authenticator configuration issue.
248
+
249
  = 4.4.9 =
250
  * Google Authenticator (2FA) : Added Alert Message for SMS Transactions only when authentication method is OTP over SMS.
251