You are here

function ga_login_user_login_validate in Google Authenticator login 7

Same name and namespace in other branches
  1. 6 ga_login.module \ga_login_user_login_validate()

Validate callback for login form.

Checks if the ga_login code is needed and valid.

See also

ga_login_form_alter()

1 string reference to 'ga_login_user_login_validate'
ga_login_form_user_login_alter in ./ga_login.module
Implements hook_form_FORM_ID_alter().

File

./ga_login.module, line 307
Main ga_login module.

Code

function ga_login_user_login_validate($form, &$form_state) {
  $code = $form_state['values']['gacode'];
  if (!empty($form_state['uid']) && !form_get_errors()) {

    // Authentication was successful, check the GA code.
    $name = $form_state['values']['name'];
    $account = user_load_by_name($name);
    if (_ga_login_force_tfa($account) || !empty($code) || $account->uid == 1 && variable_get('ga_login_always_for_uid1', 0)) {
      $ga = _ga_login_get_class();
      $username = _ga_login_username($account);
      if ($ga
        ->hasToken($username)) {
        $keyok = $ga
          ->authenticateUser($username, $code);
        if (!$keyok) {
          $form_state['ga_code'] = GA_LOGIN_TOKEN_INVALID;

          // Clear uid so that the login fails and a flood event is registered.
          $form_state['uid'] = FALSE;
        }
        else {
          $form_state['ga_code'] = GA_LOGIN_TOKEN_VALID;
        }
      }
      else {
        $form_state['ga_code'] = GA_LOGIN_TOKEN_MISSING;
        if ($account->uid != 1 && user_access('require code', $account)) {

          // A code is required but not provided.
          form_set_error('gacode', t("Your code is required to log in."));
        }
      }
    }
    elseif ($account->uid != 1 && user_access('require code', $account)) {

      // A code is required but not provided.
      form_set_error('gacode', t("Your code is required to log in."));
    }
  }
  if (!empty($code) && (!isset($form_state['ga_code']) || $form_state['ga_code'] == GA_LOGIN_TOKEN_INVALID)) {
    form_set_error('gacode', t("Your code isn't valid or has already been used."));
  }
}