mo2f_google_authenticator_onpremise( $otpToken );
return $content;
break;
case "KBA":
$content = $this->mo2f_kba_onpremise();
return $content;
break;
case "OUT OF BAND EMAIL":
break;
case "EMAIL":
case "OTP OVER EMAIL":
case "OTP_OVER_EMAIL":
return $this->mo2f_otp_over_email( $otpToken, $current_user );
}
}
public function mo2f_google_authenticator_onpremise( $otpToken ) {
global $molms_dirName;
include_once $molms_dirName . 'handler' . DIRECTORY_SEPARATOR . 'twofa' . DIRECTORY_SEPARATOR . 'gaonprem.php';
$gauth_obj = new molms_Google_auth_onpremise();
$session_id_encrypt = isset( $_POST['session_id'] ) ? sanitize_text_field( $_POST['session_id'] ) : null;
if ( is_user_logged_in() ) {
$user = wp_get_current_user();
$user_id = $user->ID;
} else {
$user_id = molms_2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_current_user_id', $session_id_encrypt );
}
$secret = $gauth_obj->mo_GAuth_get_secret( $user_id );
$content = $gauth_obj->verifyCode( $secret, $otpToken );
return $content;
}
public function mo2f_kba_onpremise() {
$nonce = isset( $_POST['miniorange_kba_nonce'] ) ? sanitize_text_field( $_POST['miniorange_kba_nonce'] ) : '';
if ( ! wp_verify_nonce( $nonce, 'mo2f-validate-kba-details-nonce' ) ) {
return;
}
$session_id_encrypt = isset( $_POST['session_id'] ) ? sanitize_text_field( $_POST['session_id'] ) : null;
if ( isset( $_POST['validate'] ) ) {
$user_id = wp_get_current_user()->ID;
} else {
$user_id = molms_2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_current_user_id', $session_id_encrypt );
}
$redirect_to = isset( $_POST['redirect_to'] ) ? esc_url_raw( $_POST['redirect_to'] ) : null;
$kba_ans_1 = isset( $_POST['mo2f_answer_1'] ) ? sanitize_text_field( $_POST['mo2f_answer_1'] ) : '';
$kba_ans_2 = isset( $_POST['mo2f_answer_2'] ) ? sanitize_text_field( $_POST['mo2f_answer_2'] ) : '';
$kba_ans_1 = strtolower( $kba_ans_1 );
$kba_ans_2 = strtolower( $kba_ans_2 );
$questions_challenged = get_user_meta( $user_id, 'kba_questions_user' );
$questions_challenged = $questions_challenged[0];
$all_ques_ans = ( get_user_meta( $user_id, 'mo2f_kba_challenge' ) );
$all_ques_ans = $all_ques_ans[0];
$ans_1 = $all_ques_ans[ $questions_challenged[0]['question'] ];
$ans_2 = $all_ques_ans[ $questions_challenged[1]['question'] ];
$check_trust_device = isset( $_POST['mo2f_trust_device'] ) ? sanitize_text_field( $_POST['mo2f_trust_device'] ) : 'false';
$mo2f_rba_status = molms_2f_Utility::mo2f_retrieve_user_temp_values( 'mo2f_rba_status', $session_id_encrypt );
$pass2fa = new Molms_Password_2Factor_Login;
$twofa_Settings = new molms_Miniorange_Authentication;
if ( ! strcmp( md5( $kba_ans_1 ), $ans_1 ) && ! strcmp( md5( $kba_ans_2 ), $ans_2 ) ) {
$arr = array( 'status' => 'SUCCESS', 'message' => 'Successfully validated.' );
$content = wp_json_encode( $arr );
delete_user_meta( $user_id, 'test_2FA' );
return $content;
} else {
$arr = array( 'status' => 'FAILED', 'message' => 'TEST FAILED.' );
$content = wp_json_encode( $arr );
return $content;
}
}
public function mo2f_otp_over_email( $otpToken, $current_user ) {
return $this->mo2f_otp_email_verify( $otpToken, $current_user, 'mo2f_otp_email_code', 'mo2f_otp_email_time' );
}
public function mo2f_otp_email_verify( $otpToken, $current_user, $dtoken, $dtime ) {
global $molms_db_queries;
if ( is_null( $current_user ) ) {
$current_user = wp_get_current_user();
}
if ( isset( $otpToken ) and ! empty( $otpToken ) and ! is_null( $current_user ) ) {
$user_id = $current_user->ID;
$valid_token = get_user_meta( $user_id, $dtoken, true );
$cd = get_user_meta( $user_id, "mo2f_email_check_code", true );
$time = get_user_meta( $user_id, $dtime, true );
$accepted_time = time() - 300;
if ( $accepted_time > $time ) {
delete_user_meta( $user_id, $dtoken );
delete_user_meta( $user_id, $dtime );
delete_user_meta( $user_id, 'tempRegEmail' );
$arr = array( 'status' => 'FAILED', 'message' => 'OTP Expire.' );
} elseif ( $valid_token == $otpToken ) {
$arr = array( 'status' => 'SUCCESS', 'message' => 'Successfully validated.' );
delete_user_meta( $user_id, $dtoken );
if ( $dtoken == 'mo2f_email_check_code' or $dtoken == 'mo2f_otp_email_code' ) {
$tempRegEmail = get_user_meta( $user_id, 'tempRegEmail', true );
if ( $tempRegEmail != '' or ! is_null( $tempRegEmail ) or ! $tempRegEmail ) {
$molms_db_queries->update_user_details(
$user_id,
array(
'mo2f_configured_2FA_method' => 'OTP Over Email',
'mo_2factor_user_registration_status' => 'MO_2_FACTOR_PLUGIN_SETTINGS',
'mo2f_user_email' => $tempRegEmail
)
);
}
}
delete_user_meta( $user_id, 'tempRegEmail' );
} else {
$arr = array( 'status' => 'FAILED', 'message' => 'TEST FAILED.' );
}
$content = wp_json_encode( $arr );
return $content;
}
}
public function OnpremSendRedirect( $useremail, $auth_type, $currentuser ) {
switch ( $auth_type ) {
case "Email Verification":
$content = $this->mo2f_pass2login_push_email_onpremise( $useremail );
break;
case "EMAIL":
case "OTP Over Email":
$content = $this->OnpremOTPOverEMail( $currentuser );
return $content;
case "KBA":
$content = $this->OnpremSecurityQuestions( $currentuser );
return $content;
}
}
public function mo2f_pass2login_push_email_onpremise( $current_user, $redirect_to = null, $session_id = null ) {
global $molms_db_queries;
if ( is_null( $session_id ) ) {
$session_id = $this->create_session();
}
$email = $molms_db_queries->get_user_detail( 'mo2f_user_email', $current_user->ID );
$subject = "2-Factor Authentication LMS(Email verification)";
$headers = array( 'Content-Type: text/html; charset=UTF-8' );
$txid = '';
$otpToken = '';
$otpTokenD = '';
for ( $i = 1; $i < 7; $i ++ ) {
$otpToken .= rand( 0, 9 );
$txid .= rand( 100, 999 );
$otpTokenD .= rand( 0, 9 );
}
$otpTokenH = hash( 'sha512', $otpToken );
$otpTokenDH = hash( 'sha512', $otpTokenD );
update_user_meta( $current_user->ID, 'mo2f_EV_txid', $txid );
$userID = hash( 'sha512', $current_user->ID );
update_site_option( $userID, $otpTokenH );
update_site_option( $txid, 3 );
$userIDd = $userID . 'D';
update_site_option( $userIDd, $otpTokenDH );
$message = $this->getEmailTemplate( $userID, $otpTokenH, $otpTokenDH, $txid, $email );
$result = wp_mail( $email, $subject, $message, $headers );
$response = array( "txId" => $txid );
$hidden_user_email = molms_2f_Utility::mo2f_get_hidden_email( $email );
if ( $result ) {
$response['status'] = 'SUCCESS';
$time = "time" . $txid;
$current_time_in_millis = round( microtime( true ) * 1000 );
update_site_option( $time, $current_time_in_millis );
} else {
$response['status'] = 'FAILED';
$key = get_site_option( 'mo2f_encryption_key' );
$session_id_encrypt = molms_2f_Utility::encrypt_data( $session_id, $key );
}
return wp_json_encode( $response );
}
public function getEmailTemplate( $userID, $otpTokenH, $otpTokenDH, $txid, $email ) {
$url = get_site_option( 'siteurl' ) . '/wp-login.php?';
$message = '
|
Dear Customers,
You initiated a transaction WordPress 2 Factor LMS Plugin:
To accept, Accept Transaction
To deny, Deny Transaction
Thank you, miniOrange Team
Disclaimer: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed.
|
|
';
return $message;
}
public function OnpremOTPOverEMail( $current_user ) {
return $this->OnpremSendOTPEMail( $current_user, 'mo2f_otp_email_code', 'mo2f_otp_email_time' );
}
public function OnpremSendOTPEMail( $current_user, $tokenName, $timeName, $email = null ) {
global $molms_db_queries;
if ( ! isset( $current_user ) or is_null( $current_user ) ) {
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
} else {
$current_user = json_decode( $_SESSION['mo2f_current_user'] );
}
}
if ( is_null( $email ) or empty( $email ) or $email == '' or ! isset( $email ) ) {
$email = $molms_db_queries->get_user_detail( 'mo2f_user_email', $current_user->ID );
if ( $email == '' or empty( $email ) ) {
$email = get_user_meta( $current_user->ID, 'tempEmail', true );
}
}
if ( is_null( $email ) or empty( $email ) or $email == '' or ! isset( $email ) ) {
$email = $current_user->user_email;
}
delete_user_meta( $current_user->ID, 'tempEmail' );
$subject = '2-Factor Authentication LMS';
$headers = array( 'Content-Type: text/html; charset=UTF-8' );
$otpToken = '';
for ( $i = 1; $i < 7; $i ++ ) {
$otpToken .= rand( 0, 9 );
}
update_user_meta( $current_user->ID, $tokenName, $otpToken );
update_user_meta( $current_user->ID, $timeName, time() );
update_user_meta( $current_user->ID, 'tempRegEmail', $email );
$message = '
|
Dear Customers,
You initiated a transaction WordPress 2 Factor LMS Plugin:
Your one time passcode is ' . esc_html( $otpToken ) . '.
Thank you, miniOrange Team
Disclaimer: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed.
|
|
';
$result = wp_mail( $email, $subject, $message, $headers );
if ( $result ) {
update_site_option( 'mo2f_message', 'A OTP has been sent to you on' . ' ' . esc_html( $email ) . '. ' . molms_2fConstants::langTranslate( "ACCEPT_LINK_TO_VERIFY_EMAIL" ) );
$arr = array( 'status' => 'SUCCESS', 'message' => 'Successfully validated.', 'txId' => '' );
} else {
$arr = array( 'status' => 'FAILED', 'message' => 'TEST FAILED.' );
update_site_option( 'mo2f_message', molms_2fConstants::langTranslate( "ERROR_DURING_PROCESS_EMAIL" ) );
}
$content = wp_json_encode( $arr );
return $content;
}
public function OnpremSecurityQuestions( $user ) {
$question_answers = get_user_meta( $user->ID, 'mo2f_kba_challenge' );
$challenge_questions = array_keys( $question_answers[0] );
$random_keys = array_rand( $challenge_questions, 2 );
$challenge_ques1 = array( 'question' => $challenge_questions[ $random_keys[0] ] );
$challenge_ques2 = array( 'question' => $challenge_questions[ $random_keys[1] ] );
$questions = array( $challenge_ques1, $challenge_ques2 );
update_user_meta( $user->ID, 'kba_questions_user', $questions );
$response = wp_json_encode( array(
'txId' => rand( 100, 10000000 ),
'status' => 'SUCCESS',
'message' => 'Please answer the following security questions.',
'questions' => $questions
) );
return $response;
}
}