function miniorange_2fa_inline_registration::handle_page_two_submit in Google Authenticator / 2 Factor Authentication - 2FA 8.2
Same name and namespace in other branches
- 8 src/Form/miniorange_2fa_inline_registration.php \Drupal\miniorange_2fa\form\miniorange_2fa_inline_registration::handle_page_two_submit()
File
- src/
Form/ miniorange_2fa_inline_registration.php, line 295 - Page 1: Select Email address. Page 2: Verify OTP. Page 3: Select Auth Method. Page 4: Configure Auth Method. Page 5: Configure KBA.
Class
- miniorange_2fa_inline_registration
- @file Page 1: Select Email address. Page 2: Verify OTP. Page 3: Select Auth Method. Page 4: Configure Auth Method. Page 5: Configure KBA.
Namespace
Drupal\miniorange_2fa\formCode
function handle_page_two_submit(array $form, FormStateInterface $form_state) {
global $base_url;
$storage = $form_state
->getStorage();
$token = str_replace(' ', '', $form['mo_auth_verify_token']['#value']);
$challenge_response = $storage[0]['user_challenge_response'];
$validate_response = $this
->validate_otp_for_user($challenge_response->txId, $token);
if (is_object($validate_response) && $validate_response->status == 'FAILED') {
$page = [
'page_two' => TRUE,
'page_one_values' => $storage['page_one_values'],
[
'user_search_response' => $storage[0]['user_search_response'],
'user_challenge_response' => $storage[0]['user_challenge_response'],
],
];
$form_state
->setStorage($page);
$_SESSION['success_status'] = FALSE;
$form_state
->setRebuild();
return $form;
}
elseif (is_object($validate_response) && $validate_response->status != 'SUCCESS') {
unset($_SESSION['success_status']);
$form_state
->setRebuild();
MoAuthUtilities::mo_add_loggers_for_failures($validate_response->message, 'error');
\Drupal::messenger()
->addError(t('An error occurred while registering the user.'), TRUE);
$url = Url::fromRoute('user.login')
->toString();
$response = new RedirectResponse($url);
$response
->send();
}
$form_state
->setRebuild();
$email = $storage['page_one_values']['mo_auth_user_email'];
$user_search_response = $storage[0]['user_search_response'];
$customer = new MiniorangeCustomerProfile();
$miniorange_user = new MiniorangeUser($customer
->getCustomerID(), $email, NULL, NULL, AuthenticationType::$EMAIL_VERIFICATION['code']);
$user_api_handler = new UsersAPIHandler($customer
->getCustomerID(), $customer
->getAPIKey());
if ($user_search_response->status == 'USER_NOT_FOUND') {
$storage['page_one_values']["mo_2fa_new_user"] = TRUE;
$create_response = $user_api_handler
->create($miniorange_user);
}
else {
$storage['page_one_values']["mo_2fa_new_user"] = FALSE;
}
/* Check whether user creation limit is exceeded or not */
if (isset($create_response) && isset($create_response->status) && isset($create_response->message) && $create_response->status == 'ERROR' && $create_response->message == t('Your user creation limit has been completed. Please upgrade your license to add more users.')) {
\Drupal::configFactory()
->getEditable('miniorange_2fa.settings')
->set('mo_user_limit_exceed', TRUE)
->save();
}
else {
\Drupal::configFactory()
->getEditable('miniorange_2fa.settings')
->clear('mo_user_limit_exceed')
->save();
}
if (isset($create_response) && isset($create_response->status) && $create_response->status == 'ERROR') {
unset($_SESSION['success_status']);
$form_state
->setRebuild();
MoAuthUtilities::mo_add_loggers_for_failures($create_response->message, 'error');
\Drupal::messenger()
->addError(t('An error occurred while creating the user. Please contact your administrator.'));
$url = Url::fromRoute('user.login')
->toString();
$response = new RedirectResponse($url);
$response
->send();
exit;
}
// Update User Auth method to OUT OF BAND EMAIL
$user_update_response = $user_api_handler
->update($miniorange_user);
if ($user_update_response->status == 'SUCCESS') {
$page = [
'page_two_values' => $form_state
->getValues(),
'page_one_values' => $storage['page_one_values'],
];
// check if there is only one option to choose in step 3
$selectedMfaMethods = MoAuthUtilities::get_2fa_methods_for_inline_registration(TRUE);
$nextPage = "page_three";
if (count($selectedMfaMethods) === 1) {
$nextPage = "page_four";
$selectedMfaMethodCode = array_keys($selectedMfaMethods)[0];
if ($selectedMfaMethodCode === AuthenticationType::$EMAIL['code'] || $selectedMfaMethodCode === AuthenticationType::$EMAIL_VERIFICATION['code']) {
$nextPage = "page_five";
}
$page["page_three_values"] = array(
"mo_auth_method" => $selectedMfaMethodCode,
);
}
$page[$nextPage] = TRUE;
$form_state
->setStorage($page);
return;
}
// Handle error. return to login.
}