function miniorange_2fa_inline_registration::handle_page_four_submit in Google Authenticator / 2 Factor Authentication - 2FA 8
Same name and namespace in other branches
- 8.2 src/Form/miniorange_2fa_inline_registration.php \Drupal\miniorange_2fa\form\miniorange_2fa_inline_registration::handle_page_four_submit()
File
- src/
Form/ miniorange_2fa_inline_registration.php, line 530
Class
Namespace
Drupal\miniorange_2fa\formCode
function handle_page_four_submit(array $form, \Drupal\Core\Form\FormStateInterface $form_state) {
global $base_url;
$storage = $form_state
->getStorage();
$method = $storage['page_three_values']['mo_auth_method'];
$form_state
->setRebuild();
if ($method == AuthenticationType::$GOOGLE_AUTHENTICATOR['code']) {
$email = $storage['page_one_values']['mo_auth_user_email'];
$google_auth_response = $storage['page_four_values']['google_auth_response'];
$token = $form['mo_auth_googleauth_token']['#value'];
$secret = $google_auth_response->secret;
$customer = new MiniorangeCustomerProfile();
$miniorange_user = new MiniorangeUser($customer
->getCustomerID(), $email, NULL, NULL, AuthenticationType::$GOOGLE_AUTHENTICATOR['code']);
$auth_api_handler = new AuthenticationAPIHandler($customer
->getCustomerID(), $customer
->getAPIKey());
$response = $auth_api_handler
->register($miniorange_user, AuthenticationType::$GOOGLE_AUTHENTICATOR['code'], $secret, $token, NULL);
if ($response->status == 'SUCCESS') {
$page = [
'page_five' => TRUE,
'page_four_values' => $form_state
->getValues(),
'page_three_values' => $storage['page_three_values'],
'page_two_values' => $storage['page_two_values'],
'page_one_values' => $storage['page_one_values'],
];
$_SESSION['success_status'] = TRUE;
$form_state
->setStorage($page);
return;
}
elseif ($response->status == 'FAILED') {
// Passcode incorrect. Try again - Show error form
$page = [
'page_four' => TRUE,
'page_four_values' => [
'google_auth_response' => $storage['page_four_values']['google_auth_response'],
],
'page_three_values' => $storage['page_three_values'],
'page_two_values' => $storage['page_two_values'],
'page_one_values' => $storage['page_one_values'],
];
$form_state
->setStorage($page);
$_SESSION['success_status'] = FALSE;
$form_state
->setRebuild();
return;
}
elseif ($response->status != 'SUCCESS') {
$form_state
->setRebuild();
unset($_SESSION['success_status']);
\Drupal::messenger()
->addMessage(t('An error occured while registering the user.'), 'error', TRUE);
$response = new RedirectResponse($base_url . '/user/login');
$response
->send();
}
}
elseif ($method == AuthenticationType::$QR_CODE['code'] || $method == AuthenticationType::$SOFT_TOKEN['code'] || $method == AuthenticationType::$PUSH_NOTIFICATIONS['code']) {
$qrcode_response = $storage['page_four_values']['qrcode_response'];
$customer = new MiniorangeCustomerProfile();
$auth_api_handler = new AuthenticationAPIHandler($customer
->getCustomerID(), $customer
->getAPIKey());
$response = $auth_api_handler
->getRegistrationStatus($qrcode_response->txId);
if ($response->status == 'SUCCESS') {
$page = [
'page_five' => TRUE,
'page_four_values' => $form_state
->getValues(),
'page_three_values' => $storage['page_three_values'],
'page_two_values' => $storage['page_two_values'],
'page_one_values' => $storage['page_one_values'],
];
$form_state
->setStorage($page);
return;
}
}
elseif ($method == AuthenticationType::$SMS['code'] || $method == AuthenticationType::$SMS_AND_EMAIL['code'] || $method == AuthenticationType::$EMAIL['code'] || $method == AuthenticationType::$OTP_OVER_PHONE['code']) {
$input = $form_state
->getUserInput();
$phone = isset($input['mo_auth_otpoversms_phone']) ? $input['mo_auth_otpoversms_phone'] : '';
$email = $storage['page_one_values']['mo_auth_user_email'];
$customer = new MiniorangeCustomerProfile();
if ($method == AuthenticationType::$SMS_AND_EMAIL['code']) {
$miniorange_user = new MiniorangeUser($customer
->getCustomerID(), NULL, $phone, NULL, $method, $email);
}
elseif ($method == AuthenticationType::$SMS['code']) {
$miniorange_user = new MiniorangeUser($customer
->getCustomerID(), NULL, $phone, NULL, $method, NULL);
}
elseif ($method == AuthenticationType::$EMAIL['code']) {
$miniorange_user = new MiniorangeUser($customer
->getCustomerID(), NULL, NULL, NULL, $method, $email);
}
elseif ($method == AuthenticationType::$OTP_OVER_PHONE['code']) {
$miniorange_user = new MiniorangeUser($customer
->getCustomerID(), NULL, $phone, NULL, $method, NULL);
}
$auth_api_handler = new AuthenticationAPIHandler($customer
->getCustomerID(), $customer
->getAPIKey());
$response = $auth_api_handler
->challenge($miniorange_user);
if ($response->status == 'SUCCESS') {
$page = [
'page_otp_validate' => TRUE,
'page_four_values' => $form_state
->getValues(),
[
'user_challenge_response' => $response,
],
'page_three_values' => $storage['page_three_values'],
'page_two_values' => $storage['page_two_values'],
'page_one_values' => $storage['page_one_values'],
];
$_SESSION['message'] = 'INVALID OTP';
$_SESSION['success_status'] = TRUE;
$form_state
->setStorage($page);
return;
}
elseif ($response->status == 'FAILED') {
//$error = $response->message;
$page = [
'Page_four' => TRUE,
'page_three_values' => $storage['page_three_values'],
'page_two_values' => $storage['page_two_values'],
'page_one_values' => $storage['page_one_values'],
];
$_SESSION['message'] = 'Error during sending OTP. You may choose other methods.';
$_SESSION['success_status'] = FALSE;
$form_state
->setStorage($page);
$form_state
->setRebuild();
return;
}
}
elseif ($method == AuthenticationType::$KBA['code']) {
$this
->handle_page_five_submit($form, $form_state);
return;
}
// Handle all error
}