You are here

function miniorange_2fa_inline_registration::handle_page_two_submit in Google Authenticator / 2 Factor Authentication - 2FA 8

Same name and namespace in other branches
  1. 8.2 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 245

Class

miniorange_2fa_inline_registration

Namespace

Drupal\miniorange_2fa\form

Code

function handle_page_two_submit(array $form, \Drupal\Core\Form\FormStateInterface $form_state) {
  global $base_url;
  $storage = $form_state
    ->getStorage();
  $token = $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 ($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 ($validate_response->status != 'SUCCESS') {
    unset($_SESSION['success_status']);
    $form_state
      ->setRebuild();
    \Drupal::messenger()
      ->addMessage(t('An error occured while registering the user.'), 'error', TRUE);
    $response = new RedirectResponse($base_url . '/user/login');
    $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') {
    $create_response = $user_api_handler
      ->create($miniorange_user);
  }

  /* Check whether user creation limit is exceeded or not */
  if ($create_response->status == 'ERROR' && $create_response->message == '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();
    \Drupal::messenger()
      ->addMessage(t('An error occurred while creating the user. Please contact your administrator.'), 'error');
    $response = new RedirectResponse($base_url . '/user/login');
    $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_three' => TRUE,
      'page_two_values' => $form_state
        ->getValues(),
      'page_one_values' => $storage['page_one_values'],
    ];
    $form_state
      ->setStorage($page);
    return;
  }

  // Handle error. return to login.
}